From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Viktor Ashirov To: git-commits@fedoraproject.org Subject: [rpms/389-ds-base] rawhide: Revert "Update to 3.3.0 upstream release" Date: Mon, 31 Aug 2026 08:45:35 GMT Message-ID: <178816593587.1.12829050029189366781.rpms-389-ds-base-946953ebdfa8@fedoraproject.org> List-ID: X-Git-Repo: rpms/389-ds-base X-Git-Branch: rawhide X-Git-Rev: 946953ebdfa83735076e46dc6b24f483060f137c ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvMzg5LWRzLWJhc2UKICAgICAgICAgICAgQnJhbmNoIDogcmF3aGlkZQogICAg ICAgICAgICBDb21taXQgOiA5NDY5NTNlYmRmYTgzNzM1MDc2ZTQ2ZGM2YjI0ZjQ4MzA2MGYxMzdj CiAgICAgICAgICAgIEF1dGhvciA6IFZpa3RvciBBc2hpcm92IDx2YXNoaXJvdkByZWRoYXQuY29t PgogICAgICAgICAgICBEYXRlICAgOiAyMDI2LTA4LTMxVDEwOjQ1OjEwKzAyOjAwCiAgICAgICAg ICAgIFN0YXRzICA6ICszMzgvLTEwOTY0NiBpbiA0NzAgZmlsZShzKQogICAgICAgICAgICBVUkwg ICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zLzM4OS1kcy1iYXNlL2MvOTQ2 OTUzZWJkZmE4MzczNTA3NmU0NmRjNmIyNGY0ODMwNjBmMTM3Yz9icmFuY2g9cmF3aGlkZQoKICAg ICAgICAgICAgTG9nOgogICAgICAgICAgICBSZXZlcnQgIlVwZGF0ZSB0byAzLjMuMCB1cHN0cmVh bSByZWxlYXNlIgoKVGhpcyByZXZlcnRzIGNvbW1pdCBjOTM0YjhlYzcxZjJkNzUyNDNlOWM5N2Nh MmM4NjM3Mzk3Njk4M2EyLgoKLS0tCmRpZmYgLS1naXQgYS8ucGFja2l0LnlhbWwgYi8ucGFja2l0 LnlhbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOGIxN2IuLjAwMDAwMDAKLS0t IGEvLnBhY2tpdC55YW1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS0tLQotIyBT ZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb246Ci0jIGh0dHBzOi8vcGFj a2l0LmRldi9kb2NzL2NvbmZpZ3VyYXRpb24vCi1zcGVjZmlsZV9wYXRoOiBycG0vMzg5LWRzLWJh c2Uuc3BlYwotdXBzdHJlYW1fcHJvamVjdF91cmw6IGh0dHBzOi8vZ2l0aHViLmNvbS8zODlkcy8z ODktZHMtYmFzZQotdXBzdHJlYW1fcGFja2FnZV9uYW1lOiAzODktZHMtYmFzZQotZG93bnN0cmVh bV9wYWNrYWdlX25hbWU6IDM4OS1kcy1iYXNlCi0KLSMgU2VlOiBodHRwczovL3BhY2tpdC5kZXYv ZG9jcy9jb25maWd1cmF0aW9uLyN1cHN0cmVhbV90YWdfdGVtcGxhdGUKLXVwc3RyZWFtX3RhZ190 ZW1wbGF0ZTogIjM4OS1kcy1iYXNlLXt2ZXJzaW9ufSIKLQotIyBTZWU6IGh0dHBzOi8vcGFja2l0 LmRldi9kb2NzL2NvbmZpZ3VyYXRpb24vI3JlbGVhc2Vfc3VmZml4Ci1yZWxlYXNlX3N1ZmZpeDog IntQQUNLSVRfUFJPSkVDVF9CUkFOQ0h9IgotCi1zcnBtX2J1aWxkX2RlcHM6Ci0gIC0gbWFrZQot ICAtIGNhcmdvCi0gIC0gbnBtCi0gIC0gcnN5bmMKLQotYWN0aW9uczoKLSAgcG9zdC11cHN0cmVh bS1jbG9uZToKLSAgICAtIGNhcmdvIGluc3RhbGwgY2FyZ28tbGljZW5zZQotICAgIC0gbWFrZSAt ZiBycG0ubWsgcnBtcm9vdCBycG1zcGVjCi0gIGNyZWF0ZS1hcmNoaXZlOgotICAgIC0gbWFrZSAt ZiBycG0ubWsgQlVORExFX0xJQkRCPTEgZG93bmxvYWQtY2FyZ28tZGVwZW5kZW5jaWVzIHRhcmJh bGxzCi0gICAgLSBweXRob24zIHJwbS9idW5kbGUtcnVzdC1ucG0ucHkgLWYgc3JjIHNyYy9jb2Nr cGl0LzM4OS1jb25zb2xlIHJwbS8zODktZHMtYmFzZS5zcGVjCi0gICAgLSAiYmFzaCAtYyAnbHMg LTEgZGlzdC9zb3VyY2VzLzM4OS1kcy1iYXNlKi50YXIuYnoyJyIKLQotICBnZXQtY3VycmVudC12 ZXJzaW9uOgotICAgIC0gcnBtc3BlYyAtcSAtLXFmICIle1ZlcnNpb259IiAtLXNycG0gcnBtLzM4 OS1kcy1iYXNlLnNwZWMKLQotZmlsZXNfdG9fc3luYzoKLSAgLSBzcmM6IHJwbS8zODktZHMtYmFz ZS5zcGVjCi0gICAgZGVzdDogMzg5LWRzLWJhc2Uuc3BlYwotICAtIC5wYWNraXQueWFtbAotCi1h bGxvd2VkX3ByX2F1dGhvcnM6Ci0gIC0gcGFja2l0Ci0gIC0gYWxsX2FkbWlucwotCi1ub3RpZmlj YXRpb25zOgotICBwdWxsX3JlcXVlc3Q6Ci0gICAgc3VjY2Vzc2Z1bF9idWlsZDogdHJ1ZQotCi1q b2JzOgotLSBqb2I6IGNvcHJfYnVpbGQKLSAgdHJpZ2dlcjogcHVsbF9yZXF1ZXN0Ci0gIHRhcmdl dHM6Ci0gICAgZmVkb3JhLWFsbDoKLSAgICAgICAgd2l0aG91dF9vcHRzOgotICAgICAgICAgICAg LSBidW5kbGVfbGliZGIKLSAgICBlcGVsLTEwLWFsbDoKLSAgICAgICAgd2l0aF9vcHRzOgotICAg ICAgICAgICAgLSBidW5kbGVfbGliZGIKLQotLSBqb2I6IGNvcHJfYnVpbGQKLSAgdHJpZ2dlcjog Y29tbWl0Ci0gIGJyYW5jaDogbWFpbgotICBwcmVzZXJ2ZV9wcm9qZWN0OiB0cnVlCi0gIHRhcmdl dHM6Ci0gICAgZmVkb3JhLWFsbDoKLSAgICAgICAgd2l0aG91dF9vcHRzOgotICAgICAgICAgICAg LSBidW5kbGVfbGliZGIKLSAgICBlcGVsLTEwLWFsbDoKLSAgICAgICAgd2l0aF9vcHRzOgotICAg ICAgICAgICAgLSBidW5kbGVfbGliZGIKLQotIyBVUERBVEUgT04gQlJBTkNISU5HOiB3aGVuIGEg bmV3IDM4OS1kcy1iYXNlLVguWSBicmFuY2ggaXMgY3JlYXRlZCwKLSMgY29weSB0aGlzIGZpbGUg dG8gdGhlIG5ldyBicmFuY2ggYW5kIHVwZGF0ZSBkaXN0X2dpdF9icmFuY2hlcyB0bwotIyBwb2lu dCB0byB0aGUgY29ycmVjdCBGZWRvcmEgcmVsZWFzZSAoZS5nLiBmNDYpLiBUaGVuIHVwZGF0ZSBt YWluJ3MKLSMgZGlzdF9naXRfYnJhbmNoZXMgaWYgcmF3aGlkZSBoYXMgbW92ZWQgdG8gYSBuZXcg dmVyc2lvbi4KLSMKLSMgQ3VycmVudCBtYXBwaW5nOgotIyAgIG1haW4gYnJhbmNoICAgICAgICAg ICAgICAtPiBmZWRvcmEtcmF3aGlkZQotIyAgIDM4OS1kcy1iYXNlLTMuMyBicmFuY2ggICAtPiBm NDUKLSMgICAzODktZHMtYmFzZS0zLjIgYnJhbmNoICAgLT4gZjQzLCBmNDQKLSMKLSMgTm90ZTog U291cmNlNi83LzggKHZlbmRvciwgQ2FyZ28ubG9jaywgY29ja3BpdF9kaXN0KSBhcmUgY29tbWVu dGVkIG91dAotIyBpbiB0aGUgdXBzdHJlYW0gc3BlYy4gVGhlIG1haW4gdGFyYmFsbCBhbHJlYWR5 IGJ1bmRsZXMgdmVuZG9yLyBhbmQKLSMgY29ja3BpdF9kaXN0LyB2aWEgcnBtLm1rLCBzbyBubyBz ZXBhcmF0ZSB1cGxvYWQgaXMgbmVlZGVkLiBTb3VyY2U2LzcvOAotIyBjYW4gYmUgYWRkZWQgYmFj ayBtYW51YWxseSBkdXJpbmcgbWFpbnRlbmFuY2UgKGUuZy4gZm9yIENWRSByZWJ1aWxkcykuCi0t IGpvYjogcHJvcG9zZV9kb3duc3RyZWFtCi0gIHRyaWdnZXI6IHJlbGVhc2UKLSAgZGlzdF9naXRf YnJhbmNoZXM6Ci0gICAgLSBmZWRvcmEtcmF3aGlkZQotCi0jIEJ1aWxkcyBpbiBLb2ppIGF1dG9t YXRpY2FsbHkgd2hlbiB0aGUgZGlzdC1naXQgUFIgaXMgbWVyZ2VkLgotLSBqb2I6IGtvamlfYnVp bGQKLSAgdHJpZ2dlcjogY29tbWl0Ci0gIGRpc3RfZ2l0X2JyYW5jaGVzOgotICAgIC0gZmVkb3Jh LXJhd2hpZGUKLQotIyBDcmVhdGVzIGEgQm9kaGkgdXBkYXRlIGFmdGVyIGEgc3VjY2Vzc2Z1bCBL b2ppIGJ1aWxkLgotIyBSYXdoaWRlIHVwZGF0ZXMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBi eSBGZWRvcmEgaW5mcmFzdHJ1Y3R1cmUsCi0jIHNvIGZlZG9yYS1icmFuY2hlZCBpcyB1c2VkIGhl cmU7IGFkZCBzdGFibGUgYnJhbmNoZXMgd2hlbiBuZWVkZWQuCi0tIGpvYjogYm9kaGlfdXBkYXRl Ci0gIHRyaWdnZXI6IGtvamlfYnVpbGQKLSAgZGlzdF9naXRfYnJhbmNoZXM6Ci0gICAgLSBmZWRv cmEtYnJhbmNoZWQKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC8zODktZHMt YmFzZS0zLjMuMCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkLzM4OS1kcy1iYXNlLTMuMy4wCmRl bGV0ZWQgZmlsZSBtb2RlIDE2MDAwMAppbmRleCBlYmNlNzg0Li4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkLzM4OS1kcy1iYXNlLTMuMy4wCisrKyAvZGV2L251bGwKQEAgLTEg KzAsMCBAQAotU3VicHJvamVjdCBjb21taXQgZWJjZTc4NDljOWExZmFlODFjZmM4Yjk0MTQ2OTEz YzczZjEwOTkwNAoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wLy5hcHB2ZXlvci55bWwgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC8uYXBwdmV5b3IueW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFmOWFl Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy5h cHB2ZXlvci55bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi12ZXJzaW9uOiAne2J1 aWxkfScKLQotZW52aXJvbm1lbnQ6Ci0gIG1hdHJpeDoKLSAgLSBNU1lTVEVNOiBNSU5HVzY0Ci0g ICAgQ1BVOiB4ODZfNjQKLSAgICBNU1ZDOiBhbWQ2NAotICAgIENPTkZJR19GTEFHUzogLS1lbmFi bGUtZGVidWcKLSAgLSBNU1lTVEVNOiBNSU5HVzY0Ci0gICAgQ1BVOiB4ODZfNjQKLSAgICBDT05G SUdfRkxBR1M6IC0tZW5hYmxlLWRlYnVnCi0gIC0gTVNZU1RFTTogTUlOR1czMgotICAgIENQVTog aTY4NgotICAgIE1TVkM6IHg4NgotICAgIENPTkZJR19GTEFHUzogLS1lbmFibGUtZGVidWcKLSAg LSBNU1lTVEVNOiBNSU5HVzMyCi0gICAgQ1BVOiBpNjg2Ci0gICAgQ09ORklHX0ZMQUdTOiAtLWVu YWJsZS1kZWJ1ZwotICAtIE1TWVNURU06IE1JTkdXNjQKLSAgICBDUFU6IHg4Nl82NAotICAgIE1T VkM6IGFtZDY0Ci0gIC0gTVNZU1RFTTogTUlOR1c2NAotICAgIENQVTogeDg2XzY0Ci0gIC0gTVNZ U1RFTTogTUlOR1czMgotICAgIENQVTogaTY4NgotICAgIE1TVkM6IHg4NgotICAtIE1TWVNURU06 IE1JTkdXMzIKLSAgICBDUFU6IGk2ODYKLQotaW5zdGFsbDoKLSAgLSBzZXQgUEFUSD1jOlxtc3lz NjRcJU1TWVNURU0lXGJpbjtjOlxtc3lzNjRcdXNyXGJpbjslUEFUSCUKLSAgLSBpZiBkZWZpbmVk IE1TVkMgY2FsbCAiYzpcUHJvZ3JhbSBGaWxlcyAoeDg2KVxNaWNyb3NvZnQgVmlzdWFsIFN0dWRp byAxNC4wXFZDXHZjdmFyc2FsbC5iYXQiICVNU1ZDJQotICAtIGlmIGRlZmluZWQgTVNWQyBwYWNt YW4gLS1ub2NvbmZpcm0gLVJzYyBtaW5ndy13NjQtJUNQVSUtZ2NjIGdjYwotCi1idWlsZF9zY3Jp cHQ6Ci0gIC0gYmFzaCAtYyAiYXV0b2NvbmYiCi0gIC0gYmFzaCAtYyAiLi9jb25maWd1cmUgJENP TkZJR19GTEFHUyIKLSAgLSBtaW5ndzMyLW1ha2UKLSAgLSBmaWxlIGxpYi9qZW1hbGxvYy5kbGwK LSAgLSBtaW5ndzMyLW1ha2UgdGVzdHMKLSAgLSBtaW5ndzMyLW1ha2UgLWsgY2hlY2sKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uYXV0b200dGUu Y2ZnIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmF1dG9tNHRlLmNm ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUyNDI0ZC4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uYXV0b200dGUuY2ZnCisrKyAv ZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1iZWdpbi1sYW5ndWFnZTogIkF1dG9jb25mLXdpdGhv dXQtYWNsb2NhbC1tNCIKLWFyZ3M6IC0tbm8tY2FjaGUKLWVuZC1sYW5ndWFnZTogIkF1dG9jb25m LXdpdGhvdXQtYWNsb2NhbC1tNCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC8uY2lycnVzLnltbCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wLy5jaXJydXMueW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3 NTY5NTM5Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wLy5jaXJydXMueW1sCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotZW52OgotICBD SVJSVVNfQ0xPTkVfREVQVEg6IDEKLSAgQVJDSDogYW1kNjQKLQotdGFzazoKLSAgbWF0cml4Ogot ICAgICAgZW52OgotICAgICAgICBERUJVR19DT05GSUc6IC0tZW5hYmxlLWRlYnVnCi0gICAgICBl bnY6Ci0gICAgICAgIERFQlVHX0NPTkZJRzogLS1kaXNhYmxlLWRlYnVnCi0gIG1hdHJpeDoKLSAg ICAtIGVudjoKLSAgICAgICAgUFJPRl9DT05GSUc6IC0tZW5hYmxlLXByb2YKLSAgICAtIGVudjoK LSAgICAgICAgUFJPRl9DT05GSUc6IC0tZGlzYWJsZS1wcm9mCi0gIG1hdHJpeDoKLSAgICAtIG5h bWU6IDY0LWJpdAotICAgICAgZW52OgotICAgICAgICBDQzoKLSAgICAgICAgQ1hYOgotICAgIC0g bmFtZTogMzItYml0Ci0gICAgICBlbnY6Ci0gICAgICAgIENDOiBjYyAtbTMyCi0gICAgICAgIENY WDogYysrIC1tMzIKLSAgbWF0cml4OgotICAgIC0gZW52OgotICAgICAgICBVTkNPTU1PTl9DT05G SUc6Ci0gICAgLSBlbnY6Ci0gICAgICAgIFVOQ09NTU9OX0NPTkZJRzogLS13aXRoLWxnLXBhZ2U9 MTYgLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZQotICBmcmVlYnNkX2luc3RhbmNlOgot ICAgIG1hdHJpeDoKLSAgICAgIGltYWdlOiBmcmVlYnNkLTEyLTMtcmVsZWFzZS1hbWQ2NAotICBp bnN0YWxsX3NjcmlwdDoKLSAgICAtIHNlZCAtaS5iYWsgLWUgJ3MscGtnK2h0dHA6Ly9wa2cuRnJl ZUJTRC5vcmcvXCR7QUJJfS9xdWFydGVybHkscGtnK2h0dHA6Ly9wa2cuRnJlZUJTRC5vcmcvXCR7 QUJJfS9sYXRlc3QsJyAvZXRjL3BrZy9GcmVlQlNELmNvbmYKLSAgICAtIHBrZyB1cGdyYWRlIC15 Ci0gICAgLSBwa2cgaW5zdGFsbCAteSBhdXRvY29uZiBnbWFrZQotICBzY3JpcHQ6Ci0gICAgLSBh dXRvY29uZgotICAgICMgV2UgZG9uJ3QgcGVyZmVjdGx5IHRyYWNrIGZyZWVic2Qgc3RkbGliLmgg ZGVmaW5pdGlvbnMuICBUaGlzIGlzIGZpbmUgd2hlbgotICAgICMgd2UgY291bnQgYXMgYSBzeXN0 ZW0gaGVhZGVyLCBidXQgYnJlYWtzIG90aGVyd2lzZSwgbGlrZSBkdXJpbmcgdGhlc2UKLSAgICAj IHRlc3RzLgotICAgIC0gLi9jb25maWd1cmUgLS13aXRoLWplbWFsbG9jLXByZWZpeD1jaV8gJHtE RUJVR19DT05GSUd9ICR7UFJPRl9DT05GSUd9ICR7VU5DT01NT05fQ09ORklHfQotICAgIC0gZXhw b3J0IEpGTEFHPWBzeXNjdGwgLW4ga2Vybi5zbXAuY3B1c2AKLSAgICAtIGdtYWtlIC1qJHtKRkxB R30KLSAgICAtIGdtYWtlIC1qJHtKRkxBR30gdGVzdHMKLSAgICAtIGdtYWtlIGNoZWNrCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmNsYW5nLWZv cm1hdCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy5jbGFuZy1mb3Jt YXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOWMwM2MuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmNsYW5nLWZvcm1hdAorKysg L2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0jIGplbWFsbG9jIHRhcmdldHMgY2xhbmctZm9y bWF0IHZlcnNpb24gOC4gIFdlIGluY2x1ZGUgZXZlcnkgb3B0aW9uIGl0IHN1cHBvcnRzCi0jIGhl cmUsIGJ1dCBjb21tZW50IG91dCB0aGUgb25lcyB0aGF0IGFyZW4ndCByZWxldmFudCBmb3IgdXMu Ci0tLS0KLSMgQWNjZXNzTW9kaWZpZXJPZmZzZXQ6IC0yCi1BbGlnbkFmdGVyT3BlbkJyYWNrZXQ6 IERvbnRBbGlnbgotQWxpZ25Db25zZWN1dGl2ZUFzc2lnbm1lbnRzOiBmYWxzZQotQWxpZ25Db25z ZWN1dGl2ZURlY2xhcmF0aW9uczogZmFsc2UKLUFsaWduRXNjYXBlZE5ld2xpbmVzOiBSaWdodAot QWxpZ25PcGVyYW5kczogZmFsc2UKLUFsaWduVHJhaWxpbmdDb21tZW50czogZmFsc2UKLUFsbG93 QWxsUGFyYW1ldGVyc09mRGVjbGFyYXRpb25Pbk5leHRMaW5lOiB0cnVlCi1BbGxvd1Nob3J0Qmxv Y2tzT25BU2luZ2xlTGluZTogZmFsc2UKLUFsbG93U2hvcnRDYXNlTGFiZWxzT25BU2luZ2xlTGlu ZTogZmFsc2UKLUFsbG93U2hvcnRGdW5jdGlvbnNPbkFTaW5nbGVMaW5lOiBFbXB0eQotQWxsb3dT aG9ydElmU3RhdGVtZW50c09uQVNpbmdsZUxpbmU6IGZhbHNlCi1BbGxvd1Nob3J0TG9vcHNPbkFT aW5nbGVMaW5lOiBmYWxzZQotQWx3YXlzQnJlYWtBZnRlclJldHVyblR5cGU6IEFsbERlZmluaXRp b25zCi1BbHdheXNCcmVha0JlZm9yZU11bHRpbGluZVN0cmluZ3M6IHRydWUKLSMgQWx3YXlzQnJl YWtUZW1wbGF0ZURlY2xhcmF0aW9uczogWWVzCi1CaW5QYWNrQXJndW1lbnRzOiB0cnVlCi1CaW5Q YWNrUGFyYW1ldGVyczogdHJ1ZQotQnJhY2VXcmFwcGluZzoKLSAgQWZ0ZXJDbGFzczogZmFsc2UK LSAgQWZ0ZXJDb250cm9sU3RhdGVtZW50OiBmYWxzZQotICBBZnRlckVudW06IGZhbHNlCi0gIEFm dGVyRnVuY3Rpb246IGZhbHNlCi0gIEFmdGVyTmFtZXNwYWNlOiBmYWxzZQotICBBZnRlck9iakNE ZWNsYXJhdGlvbjogZmFsc2UKLSAgQWZ0ZXJTdHJ1Y3Q6IGZhbHNlCi0gIEFmdGVyVW5pb246IGZh bHNlCi0gIEJlZm9yZUNhdGNoOiBmYWxzZQotICBCZWZvcmVFbHNlOiBmYWxzZQotICBJbmRlbnRC cmFjZXM6IGZhbHNlCi0jIEJyZWFrQWZ0ZXJKYXZhRmllbGRBbm5vdGF0aW9uczogdHJ1ZQotQnJl YWtCZWZvcmVCaW5hcnlPcGVyYXRvcnM6IE5vbkFzc2lnbm1lbnQKLUJyZWFrQmVmb3JlQnJhY2Vz OiBBdHRhY2gKLUJyZWFrQmVmb3JlVGVybmFyeU9wZXJhdG9yczogdHJ1ZQotIyBCcmVha0NvbnN0 cnVjdG9ySW5pdGlhbGl6ZXJzOiBCZWZvcmVDb2xvbgotIyBCcmVha0luaGVyaXRhbmNlTGlzdDog QmVmb3JlQ29sb24KLUJyZWFrU3RyaW5nTGl0ZXJhbHM6IGZhbHNlCi1Db2x1bW5MaW1pdDogODAK LSMgQ29tbWVudFByYWdtYXM6ICcnCi0jIENvbXBhY3ROYW1lc3BhY2VzOiB0cnVlCi0jIENvbnN0 cnVjdG9ySW5pdGlhbGl6ZXJBbGxPbk9uZUxpbmVPck9uZVBlckxpbmU6IHRydWUKLSMgQ29uc3Ry dWN0b3JJbml0aWFsaXplckluZGVudFdpZHRoOiA0Ci1Db250aW51YXRpb25JbmRlbnRXaWR0aDog MgotQ3BwMTFCcmFjZWRMaXN0U3R5bGU6IHRydWUKLURlcml2ZVBvaW50ZXJBbGlnbm1lbnQ6IGZh bHNlCi1EaXNhYmxlRm9ybWF0OiAgIGZhbHNlCi1FeHBlcmltZW50YWxBdXRvRGV0ZWN0QmluUGFj a2luZzogZmFsc2UKLUZpeE5hbWVzcGFjZUNvbW1lbnRzOiB0cnVlCi1Gb3JFYWNoTWFjcm9zOiAg IFsgcWxfZm9yZWFjaCwgcXJfZm9yZWFjaCwgXQotIyBJbmNsdWRlQmxvY2tzOiBQcmVzZXJ2ZQot IyBJbmNsdWRlQ2F0ZWdvcmllczoKLSMgICAtIFJlZ2V4OiAgICAgICAgICAgJ148LipcLmgocHAp Pz4nCi0jICAgICBQcmlvcml0eTogICAgICAgIDEKLSMgSW5jbHVkZUlzTWFpblJlZ2V4OiAnJwot SW5kZW50Q2FzZUxhYmVsczogZmFsc2UKLUluZGVudFBQRGlyZWN0aXZlczogQWZ0ZXJIYXNoCi1J bmRlbnRXaWR0aDogNAotSW5kZW50V3JhcHBlZEZ1bmN0aW9uTmFtZXM6IGZhbHNlCi0jIEphdmFJ bXBvcnRHcm91cHM6IFtdCi0jIEphdmFTY3JpcHRRdW90ZXM6IExlYXZlCi0jIEphdmFTY3JpcHRX cmFwSW1wb3J0czogVHJ1ZQotS2VlcEVtcHR5TGluZXNBdFRoZVN0YXJ0T2ZCbG9ja3M6IGZhbHNl Ci1MYW5ndWFnZTogQ3BwCi1NYWNyb0Jsb2NrQmVnaW46ICcnCi1NYWNyb0Jsb2NrRW5kOiAnJwot TWF4RW1wdHlMaW5lc1RvS2VlcDogMQotIyBOYW1lc3BhY2VJbmRlbnRhdGlvbjogTm9uZQotIyBP YmpDQmluUGFja1Byb3RvY29sTGlzdDogQXV0bwotIyBPYmpDQmxvY2tJbmRlbnRXaWR0aDogMgot IyBPYmpDU3BhY2VBZnRlclByb3BlcnR5OiBmYWxzZQotIyBPYmpDU3BhY2VCZWZvcmVQcm90b2Nv bExpc3Q6IGZhbHNlCi0KLVBlbmFsdHlCcmVha0Fzc2lnbm1lbnQ6IDIKLVBlbmFsdHlCcmVha0Jl Zm9yZUZpcnN0Q2FsbFBhcmFtZXRlcjogMQotUGVuYWx0eUJyZWFrQ29tbWVudDogMzAwCi1QZW5h bHR5QnJlYWtGaXJzdExlc3NMZXNzOiAxMjAKLVBlbmFsdHlCcmVha1N0cmluZzogMTAwMAotIyBQ ZW5hbHR5QnJlYWtUZW1wbGF0ZURlY2xhcmF0aW9uOiAxMAotUGVuYWx0eUV4Y2Vzc0NoYXJhY3Rl cjogMTAwMDAwMAotUGVuYWx0eVJldHVyblR5cGVPbkl0c093bkxpbmU6IDYwCi1Qb2ludGVyQWxp Z25tZW50OiBSaWdodAotIyBSYXdTdHJpbmdGb3JtYXRzOgotIyAgIC0gTGFuZ3VhZ2U6IFRleHRQ cm90bwotIyAgICAgICBEZWxpbWl0ZXJzOgotIyAgICAgICAgIC0gJ3BiJwotIyAgICAgICAgIC0g J3Byb3RvJwotIyAgICAgICBFbmNsb3NpbmdGdW5jdGlvbnM6Ci0jICAgICAgICAgLSAnUEFSU0Vf VEVYVF9QUk9UTycKLSMgICAgICAgQmFzZWRPblN0eWxlOiBnb29nbGUKLSMgICAtIExhbmd1YWdl OiBDcHAKLSMgICAgICAgRGVsaW1pdGVyczoKLSMgICAgICAgICAtICdjYycKLSMgICAgICAgICAt ICdjcHAnCi0jICAgICAgIEJhc2VkT25TdHlsZTogbGx2bQotIyAgICAgICBDYW5vbmljYWxEZWxp bWl0ZXI6ICdjYycKLVJlZmxvd0NvbW1lbnRzOiB0cnVlCi1Tb3J0SW5jbHVkZXM6IGZhbHNlCi1T cGFjZUFmdGVyQ1N0eWxlQ2FzdDogZmFsc2UKLSMgU3BhY2VBZnRlclRlbXBsYXRlS2V5d29yZDog dHJ1ZQotU3BhY2VCZWZvcmVBc3NpZ25tZW50T3BlcmF0b3JzOiB0cnVlCi0jIFNwYWNlQmVmb3Jl Q3BwMTFCcmFjZWRMaXN0OiBmYWxzZQotIyBTcGFjZUJlZm9yZUN0b3JJbml0aWFsaXplckNvbG9u OiB0cnVlCi0jIFNwYWNlQmVmb3JlSW5oZXJpdGFuY2VDb2xvbjogdHJ1ZQotU3BhY2VCZWZvcmVQ YXJlbnM6IENvbnRyb2xTdGF0ZW1lbnRzCi0jIFNwYWNlQmVmb3JlUmFuZ2VCYXNlZEZvckxvb3BD b2xvbjogdHJ1ZQotU3BhY2VJbkVtcHR5UGFyZW50aGVzZXM6IGZhbHNlCi1TcGFjZXNCZWZvcmVU cmFpbGluZ0NvbW1lbnRzOiAyCi1TcGFjZXNJbkFuZ2xlczogIGZhbHNlCi1TcGFjZXNJbkNTdHls ZUNhc3RQYXJlbnRoZXNlczogZmFsc2UKLSMgU3BhY2VzSW5Db250YWluZXJMaXRlcmFsczogZmFs c2UKLVNwYWNlc0luUGFyZW50aGVzZXM6IGZhbHNlCi1TcGFjZXNJblNxdWFyZUJyYWNrZXRzOiBm YWxzZQotIyBTdGFuZGFyZDogQ3BwMTEKLSMgVGhpcyBpcyBub21pbmFsbHkgc3VwcG9ydGVkIGlu IGNsYW5nLWZvcm1hdCB2ZXJzaW9uIDgsIGJ1dCBub3QgaW4gdGhlIGJ1aWxkCi0jIHVzZWQgYnkg c29tZSBvZiB0aGUgY29yZSBqZW1hbGxvYyBkZXZlbG9wZXJzLgotIyBTdGF0ZW1lbnRNYWNyb3M6 IFtdCi1UYWJXaWR0aDogOAotVXNlVGFiOiBOZXZlcgotLi4uCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvLmdpdGF0dHJpYnV0ZXMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uZ2l0YXR0cmlidXRlcwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxM2I1Ni4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC8uZ2l0YXR0cmlidXRlcworKysgL2Rldi9udWxsCkBA IC0xICswLDAgQEAKLSogdGV4dD1hdXRvIGVvbD1sZgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wLy5naXRpZ25vcmUgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAxYzBiMzM4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAot L2Jpbi9qZW1hbGxvYy1jb25maWcKLS9iaW4vamVtYWxsb2Muc2gKLS9iaW4vamVwcm9mCi0KLS9j b25maWcuc3RhbXAKLS9jb25maWcubG9nCi0vY29uZmlnLnN0YXR1cwotL2NvbmZpZ3VyZQotCi0v ZG9jL2h0bWwueHNsCi0vZG9jL21hbnBhZ2VzLnhzbAotL2RvYy9qZW1hbGxvYy54bWwKLS9kb2Mv amVtYWxsb2MuaHRtbAotL2RvYy9qZW1hbGxvYy4zCi0KLS9kb2NfaW50ZXJuYWwvUFJPRklMSU5H X0lOVEVSTkFMUy5wZGYKLQotL2plbWFsbG9jLnBjCi0KLS9saWIvCi0KLS9NYWtlZmlsZQotCi0v aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oCi0vaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9kZWZzLmgKLS9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlLmdlbi5oCi0vaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5oCi0vaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9w cml2YXRlX25hbWVzcGFjZV9qZXQuZ2VuLmgKLS9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3By aXZhdGVfbmFtZXNwYWNlX2pldC5oCi0vaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRl X3N5bWJvbHMuYXdrCi0vaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHNf amV0LmF3awotL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5oCi0v aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfc3ltYm9scy50eHQKLS9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL3B1YmxpY191bm5hbWVzcGFjZS5oCi0vaW5jbHVkZS9qZW1hbGxvYy9q ZW1hbGxvYy5oCi0vaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19kZWZzLmgKLS9pbmNsdWRlL2pl bWFsbG9jL2plbWFsbG9jX21hY3Jvcy5oCi0vaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19tYW5n bGUuaAotL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlX2pldC5oCi0vaW5jbHVkZS9q ZW1hbGxvYy9qZW1hbGxvY19wcm90b3MuaAotL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcHJv dG9zX2pldC5oCi0vaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuaAotL2luY2x1ZGUv amVtYWxsb2MvamVtYWxsb2NfdHlwZWRlZnMuaAotCi0vc3JjLyouW29kXQotL3NyYy8qLnN5bQot Ci0vcnVuX3Rlc3RzLm91dC8KLQotL3Rlc3QvdGVzdC5zaAotdGVzdC9pbmNsdWRlL3Rlc3QvamVt YWxsb2NfdGVzdC5oCi10ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0X2RlZnMuaAotCi0v dGVzdC9pbnRlZ3JhdGlvbi9bQS1aYS16XSoKLSEvdGVzdC9pbnRlZ3JhdGlvbi9jcHAvCi0hL3Rl c3QvaW50ZWdyYXRpb24vW0EtWmEtel0qLioKLS90ZXN0L2ludGVncmF0aW9uLyouW29kXQotL3Rl c3QvaW50ZWdyYXRpb24vKi5vdXQKLQotL3Rlc3QvaW50ZWdyYXRpb24vY3BwL1tBLVphLXpdKgot IS90ZXN0L2ludGVncmF0aW9uL2NwcC9bQS1aYS16XSouKgotL3Rlc3QvaW50ZWdyYXRpb24vY3Bw LyouW29kXQotL3Rlc3QvaW50ZWdyYXRpb24vY3BwLyoub3V0Ci0KLS90ZXN0L3NyYy8qLltvZF0K LQotL3Rlc3Qvc3RyZXNzL1tBLVphLXpdKgotIS90ZXN0L3N0cmVzcy9bQS1aYS16XSouKgotL3Rl c3Qvc3RyZXNzLyouW29kXQotL3Rlc3Qvc3RyZXNzLyoub3V0Ci0KLS90ZXN0L3VuaXQvW0EtWmEt el0qCi0hL3Rlc3QvdW5pdC9bQS1aYS16XSouKgotL3Rlc3QvdW5pdC8qLltvZF0KLS90ZXN0L3Vu aXQvKi5vdXQKLQotL3Rlc3QvYW5hbHl6ZS9bQS1aYS16XSoKLSEvdGVzdC9hbmFseXplL1tBLVph LXpdKi4qCi0vdGVzdC9hbmFseXplLyouW29kXQotL3Rlc3QvYW5hbHl6ZS8qLm91dAotCi0vVkVS U0lPTgotCi0qLnBkYgotKi5zZGYKLSoub3BlbmRiCi0qLlZDLmRiCi0qLm9wZW5zZGYKLSouY2Fj aGVmaWxlCi0qLnN1bwotKi51c2VyCi0qLnNsbi5kb2NzdGF0ZXMKLSoudG1wCi0udnMvCi0vbXN2 Yy9XaW4zMi8KLS9tc3ZjL3g2NC8KLS9tc3ZjL3Byb2plY3RzLyovKi9EZWJ1ZyovCi0vbXN2Yy9w cm9qZWN0cy8qLyovUmVsZWFzZSovCi0vbXN2Yy9wcm9qZWN0cy8qLyovV2luMzIvCi0vbXN2Yy9w cm9qZWN0cy8qLyoveDY0LwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wLy50cmF2aXMueW1sIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvLnRyYXZpcy55bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNDRm YWQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv LnRyYXZpcy55bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MTMgKzAsMCBAQAotIyBUaGlzIGNvbmZp ZyBmaWxlIGlzIGdlbmVyYXRlZCBieSAuL3NjcmlwdHMvZ2VuX3RyYXZpcy5weS4KLSMgRG8gbm90 IGVkaXQgYnkgaGFuZC4KLQotIyBXZSB1c2UgJ21pbmltYWwnLCBiZWNhdXNlICdnZW5lcmljJyBt YWtlcyBXaW5kb3dzIFZNcyBoYW5nIGF0IHN0YXJ0dXAuIEFsc28KLSMgdGhlIHNvZnR3YXJlIHBy b3ZpZGVkIGJ5ICdnZW5lcmljJyBpcyBzaW1wbHkgbm90IG5lZWRlZCBmb3Igb3VyIHRlc3RzLgot IyBEaWZmZXJlbmNlcyBhcmUgZXhwbGFpbmVkIGhlcmU6Ci0jIGh0dHBzOi8vZG9jcy50cmF2aXMt Y2kuY29tL3VzZXIvbGFuZ3VhZ2VzL21pbmltYWwtYW5kLWdlbmVyaWMvCi1sYW5ndWFnZTogbWlu aW1hbAotZGlzdDogZm9jYWwKLQotam9iczoKLSAgaW5jbHVkZToKLSAgICAtIG9zOiB3aW5kb3dz Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBFWFRSQV9DRkxB R1M9Ii1mY29tbW9uIgotICAgIC0gb3M6IHdpbmRvd3MKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAg ICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWciIEVY VFJBX0NGTEFHUz0iLWZjb21tb24iCi0gICAgLSBvczogd2luZG93cwotICAgICAgYXJjaDogYW1k NjQKLSAgICAgIGVudjogQ0M9Y2wuZXhlIENYWD1jbC5leGUKLSAgICAtIG9zOiB3aW5kb3dzCi0g ICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxF XzMyQklUPXllcyBFWFRSQV9DRkxBR1M9Ii1mY29tbW9uIgotICAgIC0gb3M6IHdpbmRvd3MKLSAg ICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWNsLmV4ZSBDWFg9Y2wuZXhlIENPTkZJR1VS RV9GTEFHUz0iLS1lbmFibGUtZGVidWciCi0gICAgLSBvczogd2luZG93cwotICAgICAgYXJjaDog YW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMg Q09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyIgRVhUUkFfQ0ZMQUdTPSItZmNvbW1vbiIK LSAgICAtIG9zOiB3aW5kb3dzCi0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1jbC5l eGUgQ1hYPWNsLmV4ZSBDUk9TU19DT01QSUxFXzMyQklUPXllcwotICAgIC0gb3M6IHdpbmRvd3MK LSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWNsLmV4ZSBDWFg9Y2wuZXhlIENST1NT X0NPTVBJTEVfMzJCSVQ9eWVzIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWciCi0gICAg LSBvczogZnJlZWJzZAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1n KysKLSAgICAtIG9zOiBmcmVlYnNkCi0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1n Y2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIgotICAgIC0gb3M6IGZy ZWVic2QKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJ R1VSRV9GTEFHUz0iLS1lbmFibGUtcHJvZiAtLWVuYWJsZS1wcm9mLWxpYnVud2luZCIKLSAgICAt IG9zOiBmcmVlYnNkCi0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcr KyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IC0td2l0aC1tYWxsb2MtY29uZj10 Y2FjaGU6ZmFsc2UiCi0gICAgLSBvczogZnJlZWJzZAotICAgICAgYXJjaDogYW1kNjQKLSAgICAg IGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMKLSAgICAtIG9zOiBm cmVlYnNkCi0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05G SUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0tZW5hYmxlLXByb2YgLS1lbmFibGUtcHJvZi1s aWJ1bndpbmQiCi0gICAgLSBvczogZnJlZWJzZAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVu djogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyAtLXdpdGgt bGctcGFnZT0xNiAtLXdpdGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNlIgotICAgIC0gb3M6IGZy ZWVic2QKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NT X0NPTVBJTEVfMzJCSVQ9eWVzIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWciCi0gICAg LSBvczogZnJlZWJzZAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1n KysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9mIC0tZW5hYmxlLXByb2YtbGlidW53aW5k IC0td2l0aC1sZy1wYWdlPTE2IC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiCi0gICAg LSBvczogZnJlZWJzZAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1n KysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9m IC0tZW5hYmxlLXByb2YtbGlidW53aW5kIgotICAgIC0gb3M6IGZyZWVic2QKLSAgICAgIGFyY2g6 IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVz IENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLWxnLXBhZ2U9MTYgLS13aXRoLW1hbGxvYy1jb25mPXRj YWNoZTpmYWxzZSIKLSAgICAtIG9zOiBmcmVlYnNkCi0gICAgICBhcmNoOiBhbWQ2NAotICAgICAg ZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0tZW5h YmxlLXByb2YgLS1lbmFibGUtcHJvZi1saWJ1bndpbmQgLS13aXRoLWxnLXBhZ2U9MTYgLS13aXRo LW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIKLSAgICAtIG9zOiBmcmVlYnNkCi0gICAgICBhcmNo OiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXll cyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0tZW5hYmxlLXByb2YgLS1lbmFibGUt cHJvZi1saWJ1bndpbmQiCi0gICAgLSBvczogZnJlZWJzZAotICAgICAgYXJjaDogYW1kNjQKLSAg ICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09ORklHVVJF X0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyAtLXdpdGgtbGctcGFnZT0xNiAtLXdpdGgtbWFsbG9jLWNv bmY9dGNhY2hlOmZhbHNlIgotICAgIC0gb3M6IGZyZWVic2QKLSAgICAgIGFyY2g6IGFtZDY0Ci0g ICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVzIENPTkZJR1VS RV9GTEFHUz0iLS1lbmFibGUtcHJvZiAtLWVuYWJsZS1wcm9mLWxpYnVud2luZCAtLXdpdGgtbGct cGFnZT0xNiAtLXdpdGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNlIgotICAgIC0gb3M6IGZyZWVi c2QKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NP TVBJTEVfMzJCSVQ9eWVzIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1lbmFibGUt cHJvZiAtLWVuYWJsZS1wcm9mLWxpYnVud2luZCAtLXdpdGgtbGctcGFnZT0xNiAtLXdpdGgtbWFs bG9jLWNvbmY9dGNhY2hlOmZhbHNlIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2 NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1h cnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBl bnY6IENDPWNsYW5nIENYWD1jbGFuZysrIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5 LWJvdW5kcyAtV25vLXVua25vd24td2FybmluZy1vcHRpb24gLVduby1pZ25vcmVkLWF0dHJpYnV0 ZXMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdj YyBDWFg9ZysrIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVzIENPTVBJTEVSX0ZMQUdTPSItbTMyIiBF WFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgK LSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9G TEFHUz0iLS1lbmFibGUtZGVidWciIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJv dW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9 Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9mIiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6 IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNh YmxlLXN0YXRzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAg LSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9Zysr IENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLWxpYmRsIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3Ig LVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0g ICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtb3B0LXNh ZmV0eS1jaGVja3MiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAg ICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1n KysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbGctcGFnZT0xNiIgRVhUUkFfQ0ZMQUdTPSItV2Vy cm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2 NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxs b2MtY29uZj10Y2FjaGU6ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJv dW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9 Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbWFsbG9jLWNvbmY9ZHNzOnByaW1h cnkiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBs aW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklH VVJFX0ZMQUdTPSItLXdpdGgtbWFsbG9jLWNvbmY9cGVyY3B1X2FyZW5hOnBlcmNwdSIgRVhUUkFf Q0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAg ICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9 Ii0td2l0aC1tYWxsb2MtY29uZj1iYWNrZ3JvdW5kX3RocmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6 IGFtZDY0Ci0gICAgICBlbnY6IENDPWNsYW5nIENYWD1jbGFuZysrIENST1NTX0NPTVBJTEVfMzJC SVQ9eWVzIENPTVBJTEVSX0ZMQUdTPSItbTMyIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1h cnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRy aWJ1dGVzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBD Qz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIiBFWFRS QV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmct b3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBh cmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdVUkVfRkxB R1M9Ii0tZW5hYmxlLXByb2YiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5k cyAtV25vLXVua25vd24td2FybmluZy1vcHRpb24gLVduby1pZ25vcmVkLWF0dHJpYnV0ZXMiCi0g ICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWNsYW5nIENY WD1jbGFuZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLXN0YXRzIiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1X bm8taWdub3JlZC1hdHRyaWJ1dGVzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2 NAotICAgICAgZW52OiBDQz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZGlz YWJsZS1saWJkbCIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8t dW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQtYXR0cmlidXRlcyIKLSAgICAtIG9z OiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Y2xhbmcgQ1hYPWNsYW5n KysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1vcHQtc2FmZXR5LWNoZWNrcyIgRVhUUkFfQ0ZM QUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlv biAtV25vLWlnbm9yZWQtYXR0cmlidXRlcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDog YW1kNjQKLSAgICAgIGVudjogQ0M9Y2xhbmcgQ1hYPWNsYW5nKysgQ09ORklHVVJFX0ZMQUdTPSIt LXdpdGgtbGctcGFnZT0xNiIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRz IC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQtYXR0cmlidXRlcyIKLSAg ICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Y2xhbmcgQ1hY PWNsYW5nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNl IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdh cm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIgotICAgIC0gb3M6IGxpbnV4Ci0g ICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1jbGFuZyBDWFg9Y2xhbmcrKyBDT05GSUdV UkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29uZj1kc3M6cHJpbWFyeSIgRVhUUkFfQ0ZMQUdTPSIt V2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25v LWlnbm9yZWQtYXR0cmlidXRlcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQK LSAgICAgIGVudjogQ0M9Y2xhbmcgQ1hYPWNsYW5nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgt bWFsbG9jLWNvbmY9cGVyY3B1X2FyZW5hOnBlcmNwdSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1X bm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQt YXR0cmlidXRlcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVu djogQ0M9Y2xhbmcgQ1hYPWNsYW5nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbWFsbG9jLWNv bmY9YmFja2dyb3VuZF90aHJlYWQ6dHJ1ZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJy YXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQtYXR0cmli dXRlcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9 Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1tMzIi IENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWciIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAt V25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAg ICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJf RkxBR1M9Ii1tMzIiIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtcHJvZiIgRVhUUkFfQ0ZMQUdT PSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNo OiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDUk9TU19DT01QSUxFXzMyQklUPXll cyBDT01QSUxFUl9GTEFHUz0iLW0zMiIgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtc3RhdHMi IEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51 eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09N UElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1tMzIiIENPTkZJR1VSRV9GTEFHUz0iLS1k aXNhYmxlLWxpYmRsIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0g ICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9 ZysrIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVzIENPTVBJTEVSX0ZMQUdTPSItbTMyIiBDT05GSUdV UkVfRkxBR1M9Ii0tZW5hYmxlLW9wdC1zYWZldHktY2hlY2tzIiBFWFRSQV9DRkxBR1M9Ii1XZXJy b3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0 Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVzIENPTVBJ TEVSX0ZMQUdTPSItbTMyIiBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IiBFWFRS QV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAg ICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJTEVf MzJCSVQ9eWVzIENPTVBJTEVSX0ZMQUdTPSItbTMyIiBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1t YWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5 LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ1JPU1NfQ09NUElMRV8zMkJJVD15ZXMgQ09NUElMRVJfRkxBR1M9Ii1t MzIiIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25mPWRzczpwcmltYXJ5IiBFWFRS QV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAg ICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJTEVf MzJCSVQ9eWVzIENPTVBJTEVSX0ZMQUdTPSItbTMyIiBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1t YWxsb2MtY29uZj1wZXJjcHVfYXJlbmE6cGVyY3B1IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVdu by1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAg ICBlbnY6IENDPWdjYyBDWFg9ZysrIENST1NTX0NPTVBJTEVfMzJCSVQ9eWVzIENPTVBJTEVSX0ZM QUdTPSItbTMyIiBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29uZj1iYWNrZ3JvdW5k X3RocmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0g ICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9 ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1lbmFibGUtcHJvZiIgRVhUUkFf Q0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAg ICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9 Ii0tZW5hYmxlLWRlYnVnIC0tZGlzYWJsZS1zdGF0cyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1X bm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAg ICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0t ZGlzYWJsZS1saWJkbCIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgot ICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hY PWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0tZW5hYmxlLW9wdC1zYWZldHkt Y2hlY2tzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBv czogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENP TkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS13aXRoLWxnLXBhZ2U9MTYiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAg YXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSIt LWVuYWJsZS1kZWJ1ZyAtLXdpdGgtbWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNlIiBFWFRSQV9DRkxB R1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFy Y2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1l bmFibGUtZGVidWcgLS13aXRoLW1hbGxvYy1jb25mPWRzczpwcmltYXJ5IiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6 IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFi bGUtZGVidWcgLS13aXRoLW1hbGxvYy1jb25mPXBlcmNwdV9hcmVuYTpwZXJjcHUiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAg YXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSIt LWVuYWJsZS1kZWJ1ZyAtLXdpdGgtbWFsbG9jLWNvbmY9YmFja2dyb3VuZF90aHJlYWQ6dHJ1ZSIg RVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4 Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVf RkxBR1M9Ii0tZW5hYmxlLXByb2YgLS1kaXNhYmxlLXN0YXRzIiBFWFRSQV9DRkxBR1M9Ii1XZXJy b3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0 Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtcHJv ZiAtLWRpc2FibGUtbGliZGwiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5k cyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2Nj IENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1wcm9mIC0tZW5hYmxlLW9wdC1zYWZl dHktY2hlY2tzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAg LSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9Zysr IENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtcHJvZiAtLXdpdGgtbGctcGFnZT0xNiIgRVhUUkFf Q0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAg ICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9 Ii0tZW5hYmxlLXByb2YgLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZM QUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBh cmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0t ZW5hYmxlLXByb2YgLS13aXRoLW1hbGxvYy1jb25mPWRzczpwcmltYXJ5IiBFWFRSQV9DRkxBR1M9 Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6 IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFi bGUtcHJvZiAtLXdpdGgtbWFsbG9jLWNvbmY9cGVyY3B1X2FyZW5hOnBlcmNwdSIgRVhUUkFfQ0ZM QUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBh cmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0t ZW5hYmxlLXByb2YgLS13aXRoLW1hbGxvYy1jb25mPWJhY2tncm91bmRfdGhyZWFkOnRydWUiIEVY VFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAot ICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZM QUdTPSItLWRpc2FibGUtc3RhdHMgLS1kaXNhYmxlLWxpYmRsIiBFWFRSQV9DRkxBR1M9Ii1XZXJy b3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0 Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLXN0 YXRzIC0tZW5hYmxlLW9wdC1zYWZldHktY2hlY2tzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVdu by1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAg ICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLXN0YXRzIC0t d2l0aC1sZy1wYWdlPTE2IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMi Ci0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBD WFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLXN0YXRzIC0td2l0aC1tYWxsb2MtY29u Zj10Y2FjaGU6ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIK LSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtc3RhdHMgLS13aXRoLW1hbGxvYy1jb25m PWRzczpwcmltYXJ5IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0g ICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9 ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLXN0YXRzIC0td2l0aC1tYWxsb2MtY29uZj1w ZXJjcHVfYXJlbmE6cGVyY3B1IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3Vu ZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdj YyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLXN0YXRzIC0td2l0aC1tYWxsb2Mt Y29uZj1iYWNrZ3JvdW5kX3RocmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1h cnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBl bnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLWxpYmRsIC0tZW5h YmxlLW9wdC1zYWZldHktY2hlY2tzIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1i b3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IEND PWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLWxpYmRsIC0td2l0aC1sZy1w YWdlPTE2IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBv czogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENP TkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLWxpYmRsIC0td2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6 ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9z OiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09O RklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwgLS13aXRoLW1hbGxvYy1jb25mPWRzczpwcmlt YXJ5IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczog bGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJ R1VSRV9GTEFHUz0iLS1kaXNhYmxlLWxpYmRsIC0td2l0aC1tYWxsb2MtY29uZj1wZXJjcHVfYXJl bmE6cGVyY3B1IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAg LSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9Zysr IENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLWxpYmRsIC0td2l0aC1tYWxsb2MtY29uZj1iYWNr Z3JvdW5kX3RocmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3Vu ZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdj YyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVja3MgLS13 aXRoLWxnLXBhZ2U9MTYiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIK LSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1vcHQtc2FmZXR5LWNoZWNrcyAtLXdpdGgt bWFsbG9jLWNvbmY9dGNhY2hlOmZhbHNlIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJh eS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6 IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVj a3MgLS13aXRoLW1hbGxvYy1jb25mPWRzczpwcmltYXJ5IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3Ig LVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0g ICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtb3B0LXNh ZmV0eS1jaGVja3MgLS13aXRoLW1hbGxvYy1jb25mPXBlcmNwdV9hcmVuYTpwZXJjcHUiIEVYVFJB X0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAg ICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdT PSItLWVuYWJsZS1vcHQtc2FmZXR5LWNoZWNrcyAtLXdpdGgtbWFsbG9jLWNvbmY9YmFja2dyb3Vu ZF90aHJlYWQ6dHJ1ZSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgot ICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hY PWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IC0td2l0aC1tYWxsb2MtY29u Zj10Y2FjaGU6ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIK LSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbGctcGFnZT0xNiAtLXdpdGgtbWFsbG9jLWNv bmY9ZHNzOnByaW1hcnkiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIK LSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENY WD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdpdGgtbGctcGFnZT0xNiAtLXdpdGgtbWFsbG9jLWNv bmY9cGVyY3B1X2FyZW5hOnBlcmNwdSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXkt Ym91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBD Qz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1sZy1wYWdlPTE2IC0td2l0aC1t YWxsb2MtY29uZj1iYWNrZ3JvdW5kX3RocmVhZDp0cnVlIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3Ig LVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFtZDY0Ci0g ICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1j b25mPXRjYWNoZTpmYWxzZSxkc3M6cHJpbWFyeSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8t YXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAg ZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29uZj10 Y2FjaGU6ZmFsc2UscGVyY3B1X2FyZW5hOnBlcmNwdSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1X bm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAg ICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29u Zj10Y2FjaGU6ZmFsc2UsYmFja2dyb3VuZF90aHJlYWQ6dHJ1ZSIgRVhUUkFfQ0ZMQUdTPSItV2Vy cm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBhbWQ2 NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxs b2MtY29uZj1kc3M6cHJpbWFyeSxwZXJjcHVfYXJlbmE6cGVyY3B1IiBFWFRSQV9DRkxBR1M9Ii1X ZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IGFt ZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1h bGxvYy1jb25mPWRzczpwcmltYXJ5LGJhY2tncm91bmRfdGhyZWFkOnRydWUiIEVYVFJBX0NGTEFH Uz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJj aDogYW1kNjQKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLXdp dGgtbWFsbG9jLWNvbmY9cGVyY3B1X2FyZW5hOnBlcmNwdSxiYWNrZ3JvdW5kX3RocmVhZDp0cnVl IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGlu dXgKLSAgICAgIGFyY2g6IHBwYzY0bGUKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgRVhUUkFf Q0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgIC0gb3M6IGxpbnV4Ci0gICAg ICBhcmNoOiBwcGM2NGxlCi0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJR1VSRV9GTEFH Uz0iLS1lbmFibGUtZGVidWciIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5k cyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogcHBjNjRsZQotICAgICAgZW52OiBDQz1n Y2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLXByb2YiIEVYVFJBX0NGTEFHUz0i LVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDog cHBjNjRsZQotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZGlz YWJsZS1zdGF0cyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAg IC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBwcGM2NGxlCi0gICAgICBlbnY6IENDPWdjYyBDWFg9 ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1kaXNhYmxlLWxpYmRsIiBFWFRSQV9DRkxBR1M9Ii1XZXJy b3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogbGludXgKLSAgICAgIGFyY2g6IHBwYzY0 bGUKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1v cHQtc2FmZXR5LWNoZWNrcyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRz IgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBwcGM2NGxlCi0gICAgICBlbnY6IENDPWdj YyBDWFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLWxnLXBhZ2U9MTYiIEVYVFJBX0NGTEFH Uz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJj aDogcHBjNjRsZQotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0t d2l0aC1tYWxsb2MtY29uZj10Y2FjaGU6ZmFsc2UiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25v LWFycmF5LWJvdW5kcyIKLSAgICAtIG9zOiBsaW51eAotICAgICAgYXJjaDogcHBjNjRsZQotICAg ICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29u Zj1kc3M6cHJpbWFyeSIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgot ICAgIC0gb3M6IGxpbnV4Ci0gICAgICBhcmNoOiBwcGM2NGxlCi0gICAgICBlbnY6IENDPWdjYyBD WFg9ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25mPXBlcmNwdV9hcmVuYTpw ZXJjcHUiIEVYVFJBX0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAtIG9z OiBsaW51eAotICAgICAgYXJjaDogcHBjNjRsZQotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBD T05GSUdVUkVfRkxBR1M9Ii0td2l0aC1tYWxsb2MtY29uZj1iYWNrZ3JvdW5kX3RocmVhZDp0cnVl IiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMiCi0gICAgLSBvczogb3N4 Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBFWFRSQV9DRkxB R1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9u IC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0g ICAgLSBvczogb3N4Ci0gICAgICBhcmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcr KyBDUk9TU19DT01QSUxFXzMyQklUPXllcyBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJh eS1ib3VuZHMgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1 dGVzIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgLSBvczogb3N4Ci0gICAgICBh cmNoOiBhbWQ2NAotICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0t ZW5hYmxlLWRlYnVnIiBFWFRSQV9DRkxBR1M9Ii1XZXJyb3IgLVduby1hcnJheS1ib3VuZHMgLVdu by11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8taWdub3JlZC1hdHRyaWJ1dGVzIC1Xbm8tZGVw cmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgLSBvczogb3N4Ci0gICAgICBhcmNoOiBhbWQ2NAot ICAgICAgZW52OiBDQz1nY2MgQ1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZGlzYWJsZS1zdGF0 cyIgRVhUUkFfQ0ZMQUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13 YXJuaW5nLW9wdGlvbiAtV25vLWlnbm9yZWQtYXR0cmlidXRlcyAtV25vLWRlcHJlY2F0ZWQtZGVj bGFyYXRpb25zIgotICAgIC0gb3M6IG9zeAotICAgICAgYXJjaDogYW1kNjQKLSAgICAgIGVudjog Q0M9Z2NjIENYWD1nKysgQ09ORklHVVJFX0ZMQUdTPSItLWRpc2FibGUtbGliZGwiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25vd24td2FybmluZy1vcHRp b24gLVduby1pZ25vcmVkLWF0dHJpYnV0ZXMgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIK LSAgICAtIG9zOiBvc3gKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9 ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVja3MiIEVYVFJBX0NG TEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25vd24td2FybmluZy1vcHRp b24gLVduby1pZ25vcmVkLWF0dHJpYnV0ZXMgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIK LSAgICAtIG9zOiBvc3gKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9 ZysrIENPTkZJR1VSRV9GTEFHUz0iLS13aXRoLWxnLXBhZ2U9MTYiIEVYVFJBX0NGTEFHUz0iLVdl cnJvciAtV25vLWFycmF5LWJvdW5kcyAtV25vLXVua25vd24td2FybmluZy1vcHRpb24gLVduby1p Z25vcmVkLWF0dHJpYnV0ZXMgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICAtIG9z OiBvc3gKLSAgICAgIGFyY2g6IGFtZDY0Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENPTkZJ R1VSRV9GTEFHUz0iLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpmYWxzZSIgRVhUUkFfQ0ZMQUdT PSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAt V25vLWlnbm9yZWQtYXR0cmlidXRlcyAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAg ICMgRGV2ZWxvcG1lbnQgYnVpbGQKLSAgICAtIG9zOiBsaW51eAotICAgICAgZW52OiBDQz1nY2Mg Q1hYPWcrKyBDT05GSUdVUkVfRkxBR1M9Ii0tZW5hYmxlLWRlYnVnIC0tZGlzYWJsZS1jYWNoZS1v YmxpdmlvdXMgLS1lbmFibGUtc3RhdHMgLS1lbmFibGUtbG9nIC0tZW5hYmxlLXByb2YiIEVYVFJB X0NGTEFHUz0iLVdlcnJvciAtV25vLWFycmF5LWJvdW5kcyIKLSAgICAjIC0tZW5hYmxlLWV4cGVy bWVudGFsLXNtYWxsb2N4OgotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9 ZysrIENPTkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgLS1lbmFibGUtZXhwZXJpbWVudGFs LXNtYWxsb2N4IC0tZW5hYmxlLXN0YXRzIC0tZW5hYmxlLXByb2YiIEVYVFJBX0NGTEFHUz0iLVdl cnJvciAtV25vLWFycmF5LWJvdW5kcyIKLQotCi1iZWZvcmVfaW5zdGFsbDoKLSAgLSB8LQotICAg IGlmIHRlc3QgLWYgIi4vc2NyaXB0cy8kVFJBVklTX09TX05BTUUvYmVmb3JlX2luc3RhbGwuc2gi OyB0aGVuCi0gICAgICBzb3VyY2UgLi9zY3JpcHRzLyRUUkFWSVNfT1NfTkFNRS9iZWZvcmVfaW5z dGFsbC5zaAotICAgIGZpCi0KLWJlZm9yZV9zY3JpcHQ6Ci0gIC0gfC0KLSAgICBpZiB0ZXN0IC1m ICIuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1FL2JlZm9yZV9zY3JpcHQuc2giOyB0aGVuCi0gICAg ICBzb3VyY2UgLi9zY3JpcHRzLyRUUkFWSVNfT1NfTkFNRS9iZWZvcmVfc2NyaXB0LnNoCi0gICAg ZWxzZQotICAgICAgc2NyaXB0cy9nZW5fdHJhdmlzLnB5ID4gdHJhdmlzX3NjcmlwdCAmJiBkaWZm IC50cmF2aXMueW1sIHRyYXZpc19zY3JpcHQKLSAgICAgIGF1dG9jb25mCi0gICAgICAjIElmIENP TVBJTEVSX0ZMQUdTIGFyZSBub3QgZW1wdHksIGFkZCB0aGVtIHRvIENDIGFuZCBDWFgKLSAgICAg IC4vY29uZmlndXJlICR7Q09NUElMRVJfRkxBR1M6KyBDQz0iJENDICRDT01QSUxFUl9GTEFHUyIg Q1hYPSIkQ1hYICRDT01QSUxFUl9GTEFHUyJ9ICRDT05GSUdVUkVfRkxBR1MKLSAgICAgIG1ha2Ug LWozCi0gICAgICBtYWtlIC1qMyB0ZXN0cwotICAgIGZpCi0KLXNjcmlwdDoKLSAgLSB8LQotICAg IGlmIHRlc3QgLWYgIi4vc2NyaXB0cy8kVFJBVklTX09TX05BTUUvc2NyaXB0LnNoIjsgdGhlbgot ICAgICAgc291cmNlIC4vc2NyaXB0cy8kVFJBVklTX09TX05BTUUvc2NyaXB0LnNoCi0gICAgZWxz ZQotICAgICAgbWFrZSBjaGVjawotICAgIGZpCi0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9DT1BZSU5HIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvQ09QWUlORwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg M2I3ZmQzNS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9DT1BZSU5HCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotVW5sZXNzIG90aGVy d2lzZSBzcGVjaWZpZWQsIGZpbGVzIGluIHRoZSBqZW1hbGxvYyBzb3VyY2UgZGlzdHJpYnV0aW9u IGFyZQotc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotQ29weXJpZ2h0IChDKSAyMDAyLXByZXNlbnQgSmFzb24gRXZhbnMgPGphc29uZUBj YW5vbndhcmUuY29tPi4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi1Db3B5cmlnaHQgKEMpIDIwMDct MjAxMiBNb3ppbGxhIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotQ29weXJpZ2h0 IChDKSAyMDA5LXByZXNlbnQgRmFjZWJvb2ssIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0K LVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocyksCi0gICB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlKHMpLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLVRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgYGBBUyBJUycnIEFORCBB TlkgRVhQUkVTUwotT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PCi1F VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULAotSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S Ci1QUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCi1PUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG Ci1BRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvQ2hhbmdlTG9nIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmZkZTU2Li4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL0NoYW5nZUxv ZworKysgL2Rldi9udWxsCkBAIC0xLDE2MTggKzAsMCBAQAotRm9sbG93aW5nIGFyZSBjaGFuZ2Ug aGlnaGxpZ2h0cyBhc3NvY2lhdGVkIHdpdGggb2ZmaWNpYWwgcmVsZWFzZXMuICBJbXBvcnRhbnQK LWJ1ZyBmaXhlcyBhcmUgYWxsIG1lbnRpb25lZCwgYnV0IHNvbWUgaW50ZXJuYWwgZW5oYW5jZW1l bnRzIGFyZSBvbWl0dGVkIGhlcmUgZm9yCi1icmV2aXR5LiAgTXVjaCBtb3JlIGRldGFpbCBjYW4g YmUgZm91bmQgaW4gdGhlIGdpdCByZXZpc2lvbiBoaXN0b3J5OgotCi0gICAgaHR0cHM6Ly9naXRo dWIuY29tL2plbWFsbG9jL2plbWFsbG9jCi0KLSogNS4zLjAgKE1heSA2LCAyMDIyKQotCi0gIFRo aXMgcmVsZWFzZSBjb250YWlucyBtYW55IHNwZWVkIGFuZCBzcGFjZSBvcHRpbWl6YXRpb25zLCBm cm9tIG1pY3JvCi0gIG9wdGltaXphdGlvbnMgb24gY29tbW9uIHBhdGhzIHRvIHJld29yayBvZiBp bnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kCi0gIGxvY2tpbmcgc2NoZW1lcywgYW5kIG1hbnkg bW9yZSB0b28gZGV0YWlsZWQgdG8gbGlzdCBiZWxvdy4gIE11bHRpcGxlIHBlcmNlbnQKLSAgb2Yg c3lzdGVtIGxldmVsIG1ldHJpYyBpbXByb3ZlbWVudHMgd2VyZSBtZWFzdXJlZCBpbiB0ZXN0ZWQg cHJvZHVjdGlvbgotICB3b3JrbG9hZHMuICBUaGUgcmVsZWFzZSBoYXMgZ29uZSB0aHJvdWdoIGxh cmdlLXNjYWxlIHByb2R1Y3Rpb24gdGVzdGluZy4KLQotICBOZXcgZmVhdHVyZXM6Ci0gIC0gQWRk IHRoZSB0aHJlYWQuaWRsZSBtYWxsY3RsIHdoaWNoIGhpbnRzIHRoYXQgdGhlIGNhbGxpbmcgdGhy ZWFkIHdpbGwgYmUKLSAgICBpZGxlIGZvciBhIG5vbnRyaXZpYWwgcGVyaW9kIG9mIHRpbWUuICAo QGRhdmlkdGdvbGRibGF0dCkKLSAgLSBBbGxvdyBzbWFsbCBzaXplIGNsYXNzZXMgdG8gYmUgdGhl IG1heGltdW0gc2l6ZSBjbGFzcyB0byBjYWNoZSBpbiB0aGUKLSAgICB0aHJlYWQtc3BlY2lmaWMg Y2FjaGUsIHRocm91Z2ggdGhlIG9wdC5bbGdfXXRjYWNoZV9tYXggb3B0aW9uLiAgKEBpbnRlcndx LAotICAgIEBqb3JkYWxnbykKLSAgLSBNYWtlIHRoZSBiZWhhdmlvciBvZiByZWFsbG9jKHB0ciwg MCkgY29uZmlndXJhYmxlIHdpdGggb3B0Lnplcm9fcmVhbGxvYy4KLSAgICAoQGRhdmlkdGdvbGRi bGF0dCkKLSAgLSBBZGQgJ21ha2UgdW5pbnN0YWxsJyBzdXBwb3J0LiAgKEBzYW5nc2h1ZHVvLCBA TGFwZW5rb3YpCi0gIC0gU3VwcG9ydCBDKysxNyBvdmVyLWFsaWduZWQgYWxsb2NhdGlvbi4gIChA bWFya3NhbnRhbmllbGxvKQotICAtIEFkZCB0aGUgdGhyZWFkLnBlYWsgbWFsbGN0bCBmb3IgYXBw cm94aW1hdGUgcGVyLXRocmVhZCBwZWFrIG1lbW9yeSB0cmFja2luZy4KLSAgICAoQGRhdmlkdGdv bGRibGF0dCkKLSAgLSBBZGQgaW50ZXJ2YWwtYmFzZWQgc3RhdHMgb3V0cHV0IG9wdC5zdGF0c19p bnRlcnZhbC4gIChAaW50ZXJ3cSkKLSAgLSBBZGQgcHJvZi5wcmVmaXggdG8gb3ZlcnJpZGUgZmls ZW5hbWUgcHJlZml4ZXMgZm9yIGR1bXBzLiAgKEB6aHhjaGVuMTcpCi0gIC0gQWRkIGhpZ2ggcmVz b2x1dGlvbiB0aW1lc3RhbXAgc3VwcG9ydCBmb3IgcHJvZmlsaW5nLiAgKEB0eXJvZ3VydSkKLSAg LSBBZGQgdGhlIC0tY29sbGFwc2VkIGZsYWcgdG8gamVwcm9mIGZvciBmbGFtZWdyYXBoIGdlbmVy YXRpb24uCi0gICAgKEBpZ29yd3d3d3d3d3d3d3d3d3d3d3d3d3cpCi0gIC0gQWRkIHRoZSAtLWRl YnVnLXN5bXMtYnktaWQgb3B0aW9uIHRvIGplcHJvZiBmb3IgZGVidWcgc3ltYm9scyBkaXNjb3Zl cnkuCi0gICAgKEBEZWFubmFHZWxiYXJ0KQotICAtIEFkZCB0aGUgb3B0LnByb2ZfbGVha19lcnJv ciBvcHRpb24gdG8gZXhpdCB3aXRoIGVycm9yIGNvZGUgd2hlbiBsZWFrIGlzCi0gICAgZGV0ZWN0 ZWQgdXNpbmcgb3B0LnByb2ZfZmluYWwuICAoQHl1bnh1bykKLSAgLSBBZGQgb3B0LmNhY2hlX29i bGl2aW91cyBhcyBhbiBydW50aW1lIGFsdGVybmF0aXZlIHRvIGNvbmZpZy5jYWNoZV9vYmxpdmlv dXMuCi0gICAgKEBpbnRlcndxKQotICAtIEFkZCBtYWxsY3RsIGludGVyZmFjZXM6Ci0gICAgKyBv cHQuemVyb19yZWFsbG9jICAoQGRhdmlkdGdvbGRibGF0dCkKLSAgICArIG9wdC5jYWNoZV9vYmxp dmlvdXMgIChAaW50ZXJ3cSkKLSAgICArIG9wdC5wcm9mX2xlYWtfZXJyb3IgIChAeXVueHVvKQot ICAgICsgb3B0LnN0YXRzX2ludGVydmFsICAoQGludGVyd3EpCi0gICAgKyBvcHQuc3RhdHNfaW50 ZXJ2YWxfb3B0cyAgKEBpbnRlcndxKQotICAgICsgb3B0LnRjYWNoZV9tYXggIChAaW50ZXJ3cSkK LSAgICArIG9wdC50cnVzdF9tYWR2aXNlICAoQGF6YXQpCi0gICAgKyBwcm9mLnByZWZpeCAgKEB6 aHhjaGVuMTcpCi0gICAgKyBzdGF0cy56ZXJvX3JlYWxsb2NzICAoQGRhdmlkdGdvbGRibGF0dCkK LSAgICArIHRocmVhZC5pZGxlICAoQGRhdmlkdGdvbGRibGF0dCkKLSAgICArIHRocmVhZC5wZWFr LntyZWFkLHJlc2V0fSAgKEBkYXZpZHRnb2xkYmxhdHQpCi0KLSAgQnVnIGZpeGVzOgotICAtIEZp eCB0aGUgc3luY2hyb25pemF0aW9uIGFyb3VuZCBleHBsaWNpdCB0Y2FjaGUgY3JlYXRpb24gd2hp Y2ggY291bGQgY2F1c2UKLSAgICBpbnZhbGlkIHRjYWNoZSBpZGVudGlmaWVycy4gIFRoaXMgcmVn cmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQgaW4gNS4wLjAuCi0gICAgKEB5b3NoaW5vcmltLCBA ZGF2aWR0Z29sZGJsYXR0KQotICAtIEZpeCBhIHByb2ZpbGluZyBiaWFzaW5nIGlzc3VlIHdoaWNo IGNvdWxkIGNhdXNlIGluY29ycmVjdCBoZWFwIHVzYWdlIGFuZAotICAgIG9iamVjdCBjb3VudHMu ICBUaGlzIGlzc3VlIGV4aXN0ZWQgaW4gYWxsIHByZXZpb3VzIHJlbGVhc2VzIHdpdGggdGhlIGhl YXAKLSAgICBwcm9maWxpbmcgZmVhdHVyZS4gIChAZGF2aWR0Z29sZGJsYXR0KQotICAtIEZpeCB0 aGUgb3JkZXIgb2Ygc3RhdHMgY291bnRlciB1cGRhdGluZyBvbiBsYXJnZSByZWFsbG9jIHdoaWNo IGNvdWxkIGNhdXNlCi0gICAgZmFpbGVkIGFzc2VydGlvbnMuICBUaGlzIHJlZ3Jlc3Npb24gd2Fz IGZpcnN0IHJlbGVhc2VkIGluIDUuMC4wLiAgKEBhemF0KQotICAtIEZpeCB0aGUgbG9ja2luZyBv biB0aGUgYXJlbmEgZGVzdHJveSBtYWxsY3RsLCB3aGljaCBjb3VsZCBjYXVzZSBjb25jdXJyZW50 Ci0gICAgYXJlbmEgY3JlYXRpb25zIHRvIGZhaWwuICBUaGlzIGZ1bmN0aW9uYWxpdHkgd2FzIGZp cnN0IGludHJvZHVjZWQgaW4gNS4wLjAuCi0gICAgKEBpbnRlcndxKQotCi0gIFBvcnRhYmlsaXR5 IGltcHJvdmVtZW50czoKLSAgLSBSZW1vdmUgbm90aHJvdyBmcm9tIHN5c3RlbSBmdW5jdGlvbiBk ZWNsYXJhdGlvbnMgb24gbWFjT1MgYW5kIEZyZWVCU0QuCi0gICAgKEBkYXZpZHRnb2xkYmxhdHQs IEBmcmVkZW1tb3R0LCBAbGVyZXMpCi0gIC0gSW1wcm92ZSBvdmVyY29tbWl0IGFuZCBwYWdlIGFs aWdubWVudCBzZXR0aW5ncyBvbiBOZXRCU0QuICAoQHpvdWxhc2MpCi0gIC0gSW1wcm92ZSBDUFUg YWZmaW5pdHkgc3VwcG9ydCBvbiBCU0QgcGxhdGZvcm1zLiAgKEBkZXZuZXhlbikKLSAgLSBJbXBy b3ZlIHV0cmFjZSBkZXRlY3Rpb24gYW5kIHN1cHBvcnQuICAoQGRldm5leGVuKQotICAtIEltcHJv dmUgUUVNVSBzdXBwb3J0IHdpdGggTUFEVl9ET05UTkVFRCB6ZXJvZWQgcGFnZXMgZGV0ZWN0aW9u LiAgKEBhemF0KQotICAtIEFkZCBtZW1jbnRsIHN1cHBvcnQgb24gU29sYXJpcyAvIGlsbHVtb3Mu ICAoQGRldm5leGVuKQotICAtIEltcHJvdmUgQ1BVX1NQSU5XQUlUIG9uIEFSTS4gIChAQVdTanN3 aW5uZXkpCi0gIC0gSW1wcm92ZSBUU0QgY2xlYW51cCBvbiBGcmVlQlNELiAgKEBMYXBlbmtvdikK LSAgLSBEaXNhYmxlIHBlcmNwdV9hcmVuYSBpZiB0aGUgQ1BVIGNvdW50IGNhbm5vdCBiZSByZWxp YWJseSBkZXRlY3RlZC4gIChAYXphdCkKLSAgLSBBZGQgbWFsbG9jX3NpemUoMykgb3ZlcnJpZGUg c3VwcG9ydC4gIChAZGV2bmV4ZW4pCi0gIC0gQWRkIG1tYXAgVk1fTUFLRV9UQUcgc3VwcG9ydC4g IChAZGV2bmV4ZW4pCi0gIC0gQWRkIHN1cHBvcnQgZm9yIE1BRFZfW05PXUNPUkUuICAoQGRldm5l eGVuKQotICAtIEFkZCBzdXBwb3J0IGZvciBEcmFnb25GbHlCU0QuICAoQGRldm5leGVuKQotICAt IEZpeCB0aGUgUVVBTlRVTSBzZXR0aW5nIG9uIE1JUFM2NC4gIChAYnJvb2tzZGF2aXMpCi0gIC0g QWRkIHRoZSBRVUFOVFVNIHNldHRpbmcgZm9yIEFSQy4gIChAdmluZWV0Z2FyYykKLSAgLSBBZGQg dGhlIFFVQU5UVU0gc2V0dGluZyBmb3IgTG9vbmdBcmNoLiAgKEB3YW5namwtdW9zKQotICAtIEFk ZCBRTlggc3VwcG9ydC4gIChAanFpYW4tYXVyb3JhKQotICAtIEF2b2lkIGF0ZXhpdCgzKSBjYWxs cyB1bmxlc3MgdGhlIHJlbGV2YW50IHByb2ZpbGluZyBmZWF0dXJlcyBhcmUgZW5hYmxlZC4KLSAg ICAoQEJ1c3lKYXksIEBsYWl3ZWktcmljZSwgQGludGVyd3EpCi0gIC0gRml4IHVua25vd24gb3B0 aW9uIGRldGVjdGlvbiB3aGVuIHVzaW5nIENsYW5nLiAgKEBMYXBlbmtvdikKLSAgLSBGaXggc3lt Ym9sIGNvbmZsaWN0IHdpdGggbXVzbCBsaWJjLiAgKEBnZW9yZ3RoZWdyZWF0KQotICAtIEFkZCAt V2ltcGxpY2l0LWZhbGx0aHJvdWdoIGNoZWNrcy4gIChAbmlja2Rlc2F1bG5pZXJzKQotICAtIEFk ZCBfX2ZvcmNlaW5saW5lIHN1cHBvcnQgb24gTVNWQy4gIChAc2FudGFnYWRhKQotICAtIEltcHJv dmUgRnJlZUJTRCBhbmQgV2luZG93cyBDSSBzdXBwb3J0LiAgKEBMYXBlbmtvdikKLSAgLSBBZGQg Q0kgc3VwcG9ydCBmb3IgUFBDNjRMRSBhcmNoaXRlY3R1cmUuICAoQGV6ZWV5YWhvbykKLQotICBJ bmNvbXBhdGlibGUgY2hhbmdlczoKLSAgLSBNYXhpbXVtIHNpemUgY2xhc3MgYWxsb3dlZCBpbiB0 Y2FjaGUgKG9wdC5bbGdfXXRjYWNoZV9tYXgpIG5vdyBoYXMgYW4gdXBwZXIKLSAgICBib3VuZCBv ZiA4TWlCLiAgKEBpbnRlcndxKQotCi0gIE9wdGltaXphdGlvbnMgYW5kIHJlZmFjdG9ycyAoQGRh dmlkdGdvbGRibGF0dCwgQExhcGVua292LCBAaW50ZXJ3cSk6Ci0gIC0gT3B0aW1pemUgdGhlIGNv bW1vbiBjYXNlcyBvZiB0aGUgdGhyZWFkIGNhY2hlIG9wZXJhdGlvbnMuCi0gIC0gT3B0aW1pemUg aW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBpbmNsdWRpbmcgUkIgdHJlZSBhbmQgcGFpcmluZyBo ZWFwLgotICAtIE9wdGltaXplIHRoZSBpbnRlcm5hbCBsb2NraW5nIG9uIGV4dGVudCBtYW5hZ2Vt ZW50LgotICAtIEV4dHJhY3QgYW5kIHJlZmFjdG9yIHRoZSBpbnRlcm5hbCBwYWdlIGFsbG9jYXRv ciBhbmQgaW50ZXJmYWNlIG1vZHVsZXMuCi0KLSAgRG9jdW1lbnRhdGlvbjoKLSAgLSBGaXggZG9j IGJ1aWxkIHdpdGggLS13aXRoLWluc3RhbGwtc3VmZml4LiAgKEBsYXdtdXJyYXksIEBpbnRlcndx KQotICAtIEFkZCBQUk9GSUxJTkdfSU5URVJOQUxTLm1kLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0g IC0gRW5zdXJlIHRoZSBwcm9wZXIgb3JkZXIgb2YgZG9jIGJ1aWxkaW5nIGFuZCBpbnN0YWxsYXRp b24uICAoQE1pbmdsaS1ZdSkKLQotKiA1LjIuMSAoQXVndXN0IDUsIDIwMTkpCi0KLSAgVGhpcyBy ZWxlYXNlIGlzIHByaW1hcmlseSBhYm91dCBXaW5kb3dzLiAgQSBjcml0aWNhbCB2aXJ0dWFsIG1l bW9yeSBsZWFrIGlzCi0gIHJlc29sdmVkIG9uIGFsbCBXaW5kb3dzIHBsYXRmb3Jtcy4gIFRoZSBy ZWdyZXNzaW9uIHdhcyBwcmVzZW50IGluIGFsbCByZWxlYXNlcwotICBzaW5jZSA1LjAuMC4KLQot ICBCdWcgZml4ZXM6Ci0gIC0gRml4IGEgc2V2ZXJlIHZpcnR1YWwgbWVtb3J5IGxlYWsgb24gV2lu ZG93cy4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QKLSAgICByZWxlYXNlZCBpbiA1LjAuMC4g IChASWduaXRpb24sIEBqMHQsIEBmcmVkZXJpay1oLCBAZGF2aWR0Z29sZGJsYXR0LAotICAgIEBp bnRlcndxKQotICAtIEZpeCBzaXplIDAgaGFuZGxpbmcgaW4gcG9zaXhfbWVtYWxpZ24oKS4gIFRo aXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQKLSAgICBpbiA1LjIuMC4gIChAaW50ZXJ3 cSkKLSAgLSBGaXggdGhlIHByb2ZfbG9nIHVuaXQgdGVzdCB3aGljaCBtYXkgb2JzZXJ2ZSB1bmV4 cGVjdGVkIGJhY2t0cmFjZXMgZnJvbQotICAgIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICBUaGUg dGVzdCB3YXMgZmlyc3QgYWRkZWQgaW4gNS4yLjAuICAoQG1hcnhpbiwKLSAgICBAZ256bGJnLCBA aW50ZXJ3cSkKLSAgLSBGaXggdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBleHRlbnRfYXZhaWwgdHJl ZS4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QKLSAgICByZWxlYXNlZCBpbiA1LjEuMC4gIChA em91bGFzYykKLSAgLSBGaXggYW4gaW5jb3JyZWN0IHJlZmVyZW5jZSBpbiBqZXByb2YuICBUaGlz IGZ1bmN0aW9uYWxpdHkgd2FzIGZpcnN0IHJlbGVhc2VkCi0gICAgaW4gMy4wLjAuICAoQHByZWhp c3RvcmljLXBlbmd1aW4pCi0gIC0gRml4IGFuIGFzc2VydGlvbiBvbiB0aGUgZGVhbGxvY2F0aW9u IGZhc3QtcGF0aC4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QKLSAgICByZWxlYXNlZCBpbiA1 LjIuMC4gIChAeWluYW4xMDQ4NTc2KQotICAtIEZpeCB0aGUgVExTX01PREVMIGF0dHJpYnV0ZSBp biBoZWFkZXJzLiAgVGhpcyByZWdyZXNzaW9uIHdhcyBmaXJzdCByZWxlYXNlZAotICAgIGluIDUu MC4wLiAgKEB6b3VsYXNjLCBAaW50ZXJ3cSkKLQotICBPcHRpbWl6YXRpb25zIGFuZCByZWZhY3Rv cnM6Ci0gIC0gSW1wbGVtZW50IG9wdC5yZXRhaW4gb24gV2luZG93cyBhbmQgZW5hYmxlIGJ5IGRl ZmF1bHQgb24gNjQtYml0LiAgKEBpbnRlcndxLAotICAgIEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0g T3B0aW1pemUgYXdheSBhIGJyYW5jaCBvbiB0aGUgb3BlcmF0b3IgZGVsZXRlW10gcGF0aC4gIChA bWdyaWNlKQotICAtIEFkZCBmb3JtYXQgYW5ub3RhdGlvbiB0byB0aGUgZm9ybWF0IGdlbmVyYXRv ciBmdW5jdGlvbi4gIChAem91bGFzYykKLSAgLSBSZWZhY3RvciBhbmQgaW1wcm92ZSB0aGUgc2l6 ZSBjbGFzcyBoZWFkZXIgZ2VuZXJhdGlvbi4gIChAeWluYW4xMDQ4NTc2KQotICAtIFJlbW92ZSBi ZXN0IGZpdC4gIChAZGp3YXRzb24pCi0gIC0gQXZvaWQgYmxvY2tpbmcgb24gYmFja2dyb3VuZCB0 aHJlYWQgbG9ja3MgZm9yIHN0YXRzLiAgKEBvcmFuYWdyYSwgQGludGVyd3EpCi0KLSogNS4yLjAg KEFwcmlsIDIsIDIwMTkpCi0KLSAgVGhpcyByZWxlYXNlIGluY2x1ZGVzIGEgZmV3IG5vdGFibGUg aW1wcm92ZW1lbnRzLCB3aGljaCBhcmUgc3VtbWFyaXplZCBiZWxvdzoKLSAgMSkgaW1wcm92ZWQg ZmFzdC1wYXRoIHBlcmZvcm1hbmNlIGZyb20gdGhlIG9wdGltaXphdGlvbnMgYnkgQGRqd2F0c29u OyAyKQotICByZWR1Y2VkIHZpcnR1YWwgbWVtb3J5IGZyYWdtZW50YXRpb24gYW5kIG1ldGFkYXRh IHVzYWdlOyBhbmQgMykgYnVnIGZpeGVzIG9uCi0gIHNldHRpbmcgdGhlIG51bWJlciBvZiBiYWNr Z3JvdW5kIHRocmVhZHMuICBJbiBhZGRpdGlvbiwgcGVhayAvIHNwaWtlIG1lbW9yeQotICB1c2Fn ZSBpcyBpbXByb3ZlZCB3aXRoIGNlcnRhaW4gYWxsb2NhdGlvbiBwYXR0ZXJucy4gIEFzIHVzdWFs LCB0aGUgcmVsZWFzZSBhbmQKLSAgcHJpb3IgZGV2IHZlcnNpb25zIGhhdmUgZ29uZSB0aHJvdWdo IGxhcmdlLXNjYWxlIHByb2R1Y3Rpb24gdGVzdGluZy4KLQotICBOZXcgZmVhdHVyZXM6Ci0gIC0g SW1wbGVtZW50IG92ZXJzaXplX3RocmVzaG9sZCwgd2hpY2ggdXNlcyBhIGRlZGljYXRlZCBhcmVu YSBmb3IgYWxsb2NhdGlvbnMKLSAgICBjcm9zc2luZyB0aGUgc3BlY2lmaWVkIHRocmVzaG9sZCB0 byByZWR1Y2UgZnJhZ21lbnRhdGlvbi4gIChAaW50ZXJ3cSkKLSAgLSBBZGQgZXh0ZW50cyB1c2Fn ZSBpbmZvcm1hdGlvbiB0byBzdGF0cy4gIChAdHlsZXJldHplbCkKLSAgLSBMb2cgdGltZSBpbmZv cm1hdGlvbiBmb3Igc2FtcGxlZCBhbGxvY2F0aW9ucy4gIChAdHlsZXJldHplbCkKLSAgLSBTdXBw b3J0IDAgc2l6ZSBpbiBzZGFsbG9jeC4gIChAZGp3YXRzb24pCi0gIC0gT3V0cHV0IHJhdGUgZm9y IGNlcnRhaW4gY291bnRlcnMgaW4gbWFsbG9jX3N0YXRzLiAgKEB6aW5vYWxlKQotICAtIEFkZCBj b25maWd1cmUgb3B0aW9uIC0tZW5hYmxlLXJlYWRsaW5rYXQsIHdoaWNoIGFsbG93cyB0aGUgdXNl IG9mIHJlYWRsaW5rYXQKLSAgICBvdmVyIHJlYWRsaW5rLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0g IC0gQWRkIGNvbmZpZ3VyZSBvcHRpb25zIC0te2VuYWJsZSxkaXNhYmxlfS17c3RhdGljLHNoYXJl ZH0gdG8gYWxsb3cgbm90Ci0gICAgYnVpbGRpbmcgdW53YW50ZWQgbGlicmFyaWVzLiAgKEBFcmlj c29uMjMxNCkKLSAgLSBBZGQgY29uZmlndXJlIG9wdGlvbiAtLWRpc2FibGUtbGliZGwgdG8gZW5h YmxlIGZ1bGx5IHN0YXRpYyBidWlsZHMuCi0gICAgKEBpbnRlcndxKQotICAtIEFkZCBtYWxsY3Rs IGludGVyZmFjZXM6Ci0JKyBvcHQub3ZlcnNpemVfdGhyZXNob2xkIChAaW50ZXJ3cSkKLQkrIHN0 YXRzLmFyZW5hcy48aT4uZXh0ZW50X2F2YWlsIChAdHlsZXJldHplbCkKLQkrIHN0YXRzLmFyZW5h cy48aT4uZXh0ZW50cy48aj4ubntkaXJ0eSxtdXp6eSxyZXRhaW5lZH0gKEB0eWxlcmV0emVsKQot CSsgc3RhdHMuYXJlbmFzLjxpPi5leHRlbnRzLjxqPi57ZGlydHksbXV6enkscmV0YWluZWR9X2J5 dGVzCi0JICAoQHR5bGVyZXR6ZWwpCi0KLSAgUG9ydGFiaWxpdHkgaW1wcm92ZW1lbnRzOgotICAt IFVwZGF0ZSBNU1ZDIGJ1aWxkcy4gIChAbWFrc3F3ZSwgQHJ1c3R5eCkKLSAgLSBXb3JrYXJvdW5k IGEgY29tcGlsZXIgb3B0aW1pemVyIGJ1ZyBvbiBzMzkweC4gIChAcmttaXNyYSkKLSAgLSBNYWtl IHVzZSBvZiBwdGhyZWFkX3NldF9uYW1lX25wKDMpIG9uIEZyZWVCU0QuICAoQHRyYXN6KQotICAt IEltcGxlbWVudCBtYWxsb2NfZ2V0Y3B1KCkgdG8gZW5hYmxlIHBlcmNwdV9hcmVuYSBmb3Igd2lu ZG93cy4gIChAc2FudGFnYWRhKQotICAtIExpbmsgYWdhaW5zdCAtcHRocmVhZCBpbnN0ZWFkIG9m IC1scHRocmVhZC4gIChAcGFyYXZvaWQpCi0gIC0gTWFrZSBiYWNrZ3JvdW5kX3RocmVhZCBub3Qg ZGVwZW5kZW50IG9uIGxpYmRsLiAgKEBpbnRlcndxKQotICAtIEFkZCBzdHJpbmdpZnkgdG8gZml4 IGEgbGlua2VyIGRpcmVjdGl2ZSBpc3N1ZSBvbiBNU1ZDLiAgKEBkYXZlcmlnYnkpCi0gIC0gRGV0 ZWN0IGFuZCBmYWxsIGJhY2sgd2hlbiA4LWJpdCBhdG9taWNzIGFyZSB1bmF2YWlsYWJsZS4gIChA aW50ZXJ3cSkKLSAgLSBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgcHRocmVhZF9jcmVhdGUgaWYg ZGxzeW0oMykgZmFpbHMuICAoQGludGVyd3EpCi0KLSAgT3B0aW1pemF0aW9ucyBhbmQgcmVmYWN0 b3JzOgotICAtIFJlZmFjdG9yIHRoZSBUU0QgbW9kdWxlLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0g IC0gQXZvaWQgdGFraW5nIGV4dGVudHNfbXV6enkgbXV0ZXggd2hlbiBtdXp6eSBpcyBkaXNhYmxl ZC4gIChAaW50ZXJ3cSkKLSAgLSBBdm9pZCB0YWtpbmcgbGFyZ2VfbXR4IGZvciBhdXRvIGFyZW5h cyBvbiB0aGUgdGNhY2hlIGZsdXNoIHBhdGguICAoQGludGVyd3EpCi0gIC0gT3B0aW1pemUgaXhh bGxvYyBieSBhdm9pZGluZyBhIHNpemUgbG9va3VwLiAgKEBpbnRlcndxKQotICAtIEltcGxlbWVu dCBvcHQub3ZlcnNpemVfdGhyZXNob2xkIHdoaWNoIHVzZXMgYSBkZWRpY2F0ZWQgYXJlbmEgZm9y IHJlcXVlc3RzCi0gICAgY3Jvc3NpbmcgdGhlIHRocmVzaG9sZCwgYWxzbyBlYWdlcmx5IHB1cmdl cyB0aGUgb3ZlcnNpemUgZXh0ZW50cy4gIERlZmF1bHQKLSAgICB0aGUgdGhyZXNob2xkIHRvIDgg TWlCLiAgKEBpbnRlcndxKQotICAtIENsZWFuIGNvbXBpbGF0aW9uIHdpdGggLVdleHRyYS4gIChA Z256bGJnLCBAamFzb25lKQotICAtIFJlZmFjdG9yIHRoZSBzaXplIGNsYXNzIG1vZHVsZS4gIChA ZGF2aWR0Z29sZGJsYXR0KQotICAtIFJlZmFjdG9yIHRoZSBzdGF0cyBlbWl0dGVyLiAgKEB0eWxl cmV0emVsKQotICAtIE9wdGltaXplIHBvdzJfY2VpbC4gIChAcmttaXNyYSkKLSAgLSBBdm9pZCBy dW50aW1lIGRldGVjdGlvbiBvZiBsYXp5IHB1cmdpbmcgb24gRnJlZUJTRC4gIChAdHJhc3opCi0g IC0gT3B0aW1pemUgbW1hcCgyKSBhbGlnbm1lbnQgaGFuZGxpbmcgb24gRnJlZUJTRC4gIChAdHJh c3opCi0gIC0gSW1wcm92ZSBlcnJvciBoYW5kbGluZyBmb3IgVEhQIHN0YXRlIGluaXRpYWxpemF0 aW9uLiAgKEBqc3RlZW1hbm4pCi0gIC0gUmV3b3JrIHRoZSBtYWxsb2MoKSBmYXN0IHBhdGguICAo QGRqd2F0c29uKQotICAtIFJld29yayB0aGUgZnJlZSgpIGZhc3QgcGF0aC4gIChAZGp3YXRzb24p Ci0gIC0gUmVmYWN0b3IgYW5kIG9wdGltaXplIHRoZSB0Y2FjaGUgZmlsbCAvIGZsdXNoIHBhdGhz LiAgKEBkandhdHNvbikKLSAgLSBPcHRpbWl6ZSBzeW5jIC8gbHdzeW5jIG9uIFBvd2VyUEMuICAo QGNobWVlZWRhbGYpCi0gIC0gQnlwYXNzIGV4dGVudF9kYWxsb2MoKSB3aGVuIHJldGFpbiBpcyBl bmFibGVkLiAgKEBpbnRlcndxKQotICAtIE9wdGltaXplIHRoZSBsb2NraW5nIG9uIGxhcmdlIGRl YWxsb2NhdGlvbi4gIChAaW50ZXJ3cSkKLSAgLSBSZWR1Y2UgdGhlIG51bWJlciBvZiBwYWdlcyBj b21taXR0ZWQgZnJvbSBzYW5pdHkgY2hlY2tpbmcgaW4gZGVidWcgYnVpbGQuCi0gICAgKEB0cmFz eiwgQGludGVyd3EpCi0gIC0gRGVwcmVjYXRlIE9TU3BpbkxvY2suICAoQGludGVyd3EpCi0gIC0g TG93ZXIgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGJhY2tncm91bmQgdGhyZWFkcyB0byA0ICh3aGVu IHRoZSBmZWF0dXJlCi0gICAgaXMgZW5hYmxlZCkuICAoQGludGVyd3EpCi0gIC0gT3B0aW1pemUg dGhlIHRyeWxvY2sgc3BpbiB3YWl0LiAgKEBkandhdHNvbikKLSAgLSBVc2UgYXJlbmEgaW5kZXgg Zm9yIGFyZW5hLW1hdGNoaW5nIGNoZWNrcy4gIChAaW50ZXJ3cSkKLSAgLSBBdm9pZCBmb3JjZWQg ZGVjYXkgb24gdGhyZWFkIHRlcm1pbmF0aW9uIHdoZW4gdXNpbmcgYmFja2dyb3VuZCB0aHJlYWRz LgotICAgIChAaW50ZXJ3cSkKLSAgLSBEaXNhYmxlIG11enp5IGRlY2F5IGJ5IGRlZmF1bHQuICAo QGRqd2F0c29uLCBAaW50ZXJ3cSkKLSAgLSBPbmx5IGluaXRpYWxpemUgbGliZ2NjIHVud2luZGVy IHdoZW4gcHJvZmlsaW5nIGlzIGVuYWJsZWQuICAoQHBhcmF2b2lkLAotICAgIEBpbnRlcndxKQot Ci0gIEJ1ZyBmaXhlcyAoYWxsIG9ubHkgcmVsZXZhbnQgdG8gamVtYWxsb2MgNS54KToKLSAgLSBG aXggYmFja2dyb3VuZCB0aHJlYWQgaW5kZXggaXNzdWVzIHdpdGggbWF4X2JhY2tncm91bmRfdGhy ZWFkcy4gIChAZGp3YXRzb24sCi0gICAgQGludGVyd3EpCi0gIC0gRml4IHN0YXRzIG91dHB1dCBm b3Igb3B0LmxnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdC4gIChAaW50ZXJ3cSkKLSAgLSBGaXggb3B0 LnByb2ZfcHJlZml4IGluaXRpYWxpemF0aW9uLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0gUHJv cGVybHkgdHJpZ2dlciBkZWNheSBvbiB0Y2FjaGUgZGVzdHJveS4gIChAaW50ZXJ3cSwgQGFtb3Ni aXJkKQotICAtIEZpeCB0Y2FjaGUuZmx1c2guICAoQGludGVyd3EpCi0gIC0gRGV0ZWN0IHdoZXRo ZXIgZXhwbGljaXQgZXh0ZW50IHplcm8gb3V0IGlzIG5lY2Vzc2FyeSB3aXRoIGh1Z2UgcGFnZXMg b3IKLSAgICBjdXN0b20gZXh0ZW50IGhvb2tzLCB3aGljaCBtYXkgY2hhbmdlIHRoZSBwdXJnZSBz ZW1hbnRpY3MuICAoQGludGVyd3EpCi0gIC0gRml4IGEgc2lkZSBlZmZlY3QgY2F1c2VkIGJ5IGV4 dGVudF9tYXhfYWN0aXZlX2ZpdCBjb21iaW5lZCB3aXRoIGRlY2F5LWJhc2VkCi0gICAgcHVyZ2lu Zywgd2hlcmUgZnJlZWQgZXh0ZW50cyBjYW4gYWNjdW11bGF0ZSBhbmQgbm90IGJlIHJldXNlZCBm b3IgYW4KLSAgICBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZS4gIChAaW50ZXJ3cSwgQG1wZ2hmKQot ICAtIEZpeCBhIG1pc3NpbmcgdW5sb2NrIG9uIGV4dGVudCByZWdpc3RlciBlcnJvciBoYW5kbGlu Zy4gIChAem91bGFzYykKLQotICBUZXN0aW5nOgotICAtIFNpbXBsaWZ5IHRoZSBUcmF2aXMgc2Ny aXB0IG91dHB1dC4gIChAZ256bGJnKQotICAtIFVwZGF0ZSB0aGUgdGVzdCBzY3JpcHRzIGZvciBG cmVlQlNELiAgKEBkZXZuZXhlbikKLSAgLSBBZGQgdW5pdCB0ZXN0cyBmb3IgdGhlIHByb2R1Y2Vy LWNvbnN1bWVyIHBhdHRlcm4uICAoQGludGVyd3EpCi0gIC0gQWRkIENpcnJ1cy1DSSBjb25maWcg Zm9yIEZyZWVCU0QgYnVpbGRzLiAgKEBqYXNvbmUpCi0gIC0gQWRkIHNpemUtbWF0Y2hpbmcgc2Fu aXR5IGNoZWNrcyBvbiB0Y2FjaGUgZmx1c2guICAoQGRhdmlkdGdvbGRibGF0dCwKLSAgICBAaW50 ZXJ3cSkKLQotICBJbmNvbXBhdGlibGUgY2hhbmdlczoKLSAgLSBSZW1vdmUgLS13aXRoLWxnLXBh Z2Utc2l6ZXMuICAoQGRhdmlkdGdvbGRibGF0dCkKLQotICBEb2N1bWVudGF0aW9uOgotICAtIEF0 dGVtcHQgdG8gYnVpbGQgZG9jcyBieSBkZWZhdWx0LCBob3dldmVyIHNraXAgZG9jIGJ1aWxkaW5n IHdoZW4geHNsdHByb2MKLSAgICBpcyBtaXNzaW5nLiAoQGludGVyd3EsIEBjbXVlbGxuZXIpCi0K LSogNS4xLjAgKE1heSA0LCAyMDE4KQotCi0gIFRoaXMgcmVsZWFzZSBpcyBwcmltYXJpbHkgYWJv dXQgZmluZS10dW5pbmcsIHJhbmdpbmcgZnJvbSBzZXZlcmFsIG5ldyBmZWF0dXJlcwotICB0byBu dW1lcm91cyBub3RhYmxlIHBlcmZvcm1hbmNlIGFuZCBwb3J0YWJpbGl0eSBlbmhhbmNlbWVudHMu ICBUaGUgcmVsZWFzZSBhbmQKLSAgcHJpb3IgZGV2IHZlcnNpb25zIGhhdmUgYmVlbiBydW5uaW5n IGluIG11bHRpcGxlIGxhcmdlIHNjYWxlIGFwcGxpY2F0aW9ucyBmb3IKLSAgbW9udGhzLCBhbmQg dGhlIGN1bXVsYXRpdmUgaW1wcm92ZW1lbnRzIGFyZSBzdWJzdGFudGlhbCBpbiBtYW55IGNhc2Vz LgotCi0gIEdpdmVuIHRoZSBsb25nIGFuZCBzdWNjZXNzZnVsIHByb2R1Y3Rpb24gcnVucywgdGhp cyByZWxlYXNlIGlzIGxpa2VseSBhIGdvb2QKLSAgY2FuZGlkYXRlIGZvciBhcHBsaWNhdGlvbnMg dG8gdXBncmFkZSwgZnJvbSBib3RoIGplbWFsbG9jIDUuMCBhbmQgYmVmb3JlLiAgRm9yCi0gIHBl cmZvcm1hbmNlLWNyaXRpY2FsIGFwcGxpY2F0aW9ucywgdGhlIG5ld2x5IGFkZGVkIFRVTklORy5t ZCBwcm92aWRlcwotICBndWlkZWxpbmVzIG9uIGplbWFsbG9jIHR1bmluZy4KLQotICBOZXcgZmVh dHVyZXM6Ci0gIC0gSW1wbGVtZW50IHRyYW5zcGFyZW50IGh1Z2UgcGFnZSBzdXBwb3J0IGZvciBp bnRlcm5hbCBtZXRhZGF0YS4gIChAaW50ZXJ3cSkKLSAgLSBBZGQgb3B0LnRocCB0byBhbGxvdyBl bmFibGluZyAvIGRpc2FibGluZyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGZvciBhbGwKLSAgICBt YXBwaW5ncy4gIChAaW50ZXJ3cSkKLSAgLSBBZGQgbWF4aW11bSBiYWNrZ3JvdW5kIHRocmVhZCBj b3VudCBvcHRpb24uICAoQGRqd2F0c29uKQotICAtIEFsbG93IHByb2ZfYWN0aXZlIHRvIGNvbnRy b2wgb3B0LmxnX3Byb2ZfaW50ZXJ2YWwgYW5kIHByb2YuZ2R1bXAuCi0gICAgKEBpbnRlcndxKQot ICAtIEFsbG93IGFyZW5hIGluZGV4IGxvb2t1cCBiYXNlZCBvbiBhbGxvY2F0aW9uIGFkZHJlc3Nl cyB2aWEgbWFsbGN0bC4KLSAgICAoQGxpb25rb3YpCi0gIC0gQWxsb3cgZGlzYWJsaW5nIGluaXRp YWwtZXhlYyBUTFMgbW9kZWwuICAoQGRhdmlkdGdvbGRibGF0dCwgQEtlbk1hY0QpCi0gIC0gQWRk IG9wdC5sZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQgdG8gc2V0IHRoZSBtYXggcmF0aW8gYmV0d2Vl biB0aGUgc2l6ZSBvZgotICAgIHRoZSBhY3RpdmUgZXh0ZW50IHNlbGVjdGVkICh0byBzcGxpdCBv ZmYgZnJvbSkgYW5kIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0ZWQKLSAgICBhbGxvY2F0aW9uLiAg KEBpbnRlcndxLCBAZGF2aWR0Z29sZGJsYXR0KQotICAtIEFkZCByZXRhaW5fZ3Jvd19saW1pdCB0 byBzZXQgdGhlIG1heCBzaXplIHdoZW4gZ3Jvd2luZyB2aXJ0dWFsIGFkZHJlc3MKLSAgICBzcGFj ZS4gIChAaW50ZXJ3cSkKLSAgLSBBZGQgbWFsbGN0bCBpbnRlcmZhY2VzOgotICAgICsgYXJlbmEu PGk+LnJldGFpbl9ncm93X2xpbWl0ICAoQGludGVyd3EpCi0gICAgKyBhcmVuYXMubG9va3VwICAo QGxpb25rb3YpCi0gICAgKyBtYXhfYmFja2dyb3VuZF90aHJlYWRzICAoQGRqd2F0c29uKQotICAg ICsgb3B0LmxnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCAgKEBpbnRlcndxKQotICAgICsgb3B0Lm1h eF9iYWNrZ3JvdW5kX3RocmVhZHMgIChAZGp3YXRzb24pCi0gICAgKyBvcHQubWV0YWRhdGFfdGhw ICAoQGludGVyd3EpCi0gICAgKyBvcHQudGhwICAoQGludGVyd3EpCi0gICAgKyBzdGF0cy5tZXRh ZGF0YV90aHAgIChAaW50ZXJ3cSkKLQotICBQb3J0YWJpbGl0eSBpbXByb3ZlbWVudHM6Ci0gIC0g U3VwcG9ydCBHTlUva0ZyZWVCU0QgY29uZmlndXJhdGlvbi4gIChAcGFyYXZvaWQpCi0gIC0gU3Vw cG9ydCBtNjhrLCBuaW9zMiBhbmQgU0gzIGFyY2hpdGVjdHVyZXMuICAoQHBhcmF2b2lkKQotICAt IEZhbGwgYmFjayB0byBGRF9DTE9FWEVDIHdoZW4gT19DTE9FWEVDIGlzIHVuYXZhaWxhYmxlLiAg KEB6b255aXRvbykKLSAgLSBGaXggc3ltYm9sIGxpc3RpbmcgZm9yIGNyb3NzLWNvbXBpbGluZy4g IChAdGFtaXJkKQotICAtIEZpeCBoaWdoIGJpdHMgY29tcHV0YXRpb24gb24gQVJNLiAgKEBkYXZp ZHRnb2xkYmxhdHQsIEBwYXJhdm9pZCkKLSAgLSBEaXNhYmxlIHRoZSBDUFVfU1BJTldBSVQgbWFj cm8gZm9yIFBvd2VyLiAgKEBkYXZpZHRnb2xkYmxhdHQsIEBtYXJ4aW4pCi0gIC0gRml4IE1TVkMg MjAxNSAmIDIwMTcgYnVpbGRzLiAgKEBydXN0eXgpCi0gIC0gSW1wcm92ZSBSSVNDLVYgc3VwcG9y dC4gIChARWRTY2hvdXRlbikKLSAgLSBTZXQgbmFtZSBtYW5nbGluZyBzY3JpcHQgaW4gc3RyaWN0 IG1vZGUuICAoQG5pY29sb3YpCi0gIC0gQXZvaWQgTUFEVl9IVUdFUEFHRSBvbiBBUk0uICAoQG1h cnhpbikKLSAgLSBNb2RpZnkgY29uZmlndXJlIHRvIGRldGVybWluZSByZXR1cm4gdmFsdWUgb2Yg c3RyZXJyb3Jfci4KLSAgICAoQGRhdmlkdGdvbGRibGF0dCwgQGNmZXJyaXMxMDAwKQotICAtIE1h a2Ugc3VyZSBDWFhGTEFHUyBpcyB0ZXN0ZWQgd2l0aCBDUFAgY29tcGlsZXIuICAoQG5laGFsandh bmkpCi0gIC0gRml4IDMyLWJpdCBidWlsZCBvbiBNU1ZDLiAgKEBydXN0eXgpCi0gIC0gRml4IGV4 dGVybmFsIHN5bWJvbCBvbiBNU1ZDLiAgKEBtYWtzcXdlKQotICAtIEF2b2lkIGEgcHJpbnRmIGZv cm1hdCBzcGVjaWZpZXIgd2FybmluZy4gIChAamFzb25lKQotICAtIEFkZCBjb25maWd1cmUgb3B0 aW9uIC0tZGlzYWJsZS1pbml0aWFsLWV4ZWMtdGxzIHdoaWNoIGNhbiBhbGxvdyBqZW1hbGxvYyB0 bwotICAgIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCBhZnRlciBwcm9ncmFtIHN0YXJ0dXAuICAoQGRh dmlkdGdvbGRibGF0dCwgQEtlbk1hY0QpCi0gIC0gQUFyY2g2NDogQWRkIElMUDMyIHN1cHBvcnQu ICAoQGNtdWVsbG5lcikKLSAgLSBBZGQgLS13aXRoLWxnLXZhZGRyIGNvbmZpZ3VyZSBvcHRpb24g dG8gc3VwcG9ydCBjcm9zcyBjb21waWxpbmcuCi0gICAgKEBjbXVlbGxuZXIsIEBkYXZpZHRnb2xk YmxhdHQpCi0KLSAgT3B0aW1pemF0aW9ucyBhbmQgcmVmYWN0b3JzOgotICAtIEltcHJvdmUgYWN0 aXZlIGV4dGVudCBmaXQgd2l0aCBleHRlbnRfbWF4X2FjdGl2ZV9maXQuICBUaGlzIGNvbnNpZGVy YWJseQotICAgIHJlZHVjZXMgZnJhZ21lbnRhdGlvbiBvdmVyIHRpbWUgYW5kIGltcHJvdmVzIHZp cnR1YWwgbWVtb3J5IGFuZCBtZXRhZGF0YQotICAgIHVzYWdlLiAgKEBkYXZpZHRnb2xkYmxhdHQs IEBpbnRlcndxKQotICAtIEVhZ2VybHkgY29hbGVzY2UgbGFyZ2UgZXh0ZW50cyB0byByZWR1Y2Ug ZnJhZ21lbnRhdGlvbi4gIChAaW50ZXJ3cSkKLSAgLSBzZGFsbG9jeDogb25seSByZWFkIHNpemUg aW5mbyB3aGVuIHBhZ2UgYWxpZ25lZCAoaS5lLiBwb3NzaWJseSBzYW1wbGVkKSwKLSAgICB3aGlj aCBzcGVlZHMgdXAgdGhlIHNpemVkIGRlYWxsb2NhdGlvbiBwYXRoIHNpZ25pZmljYW50bHkuICAo QGludGVyd3EpCi0gIC0gQXZvaWQgYXR0ZW1wdGluZyBuZXcgbWFwcGluZ3MgZm9yIGluIHBsYWNl IGV4cGFuc2lvbiB3aXRoIHJldGFpbiwgc2luY2UKLSAgICBpdCByYXJlbHkgc3VjY2VlZHMgaW4g cHJhY3RpY2UgYW5kIGNhdXNlcyBoaWdoIG92ZXJoZWFkLiAgKEBpbnRlcndxKQotICAtIFJlZmFj dG9yIE9PTSBoYW5kbGluZyBpbiBuZXdJbXBsLiAgKEB3cWZpc2gpCi0gIC0gQWRkIGludGVybmFs IGZpbmUtZ3JhaW5lZCBsb2dnaW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGRlYnVnZ2luZyB1c2UuCi0g ICAgKEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0gUmVmYWN0b3IgYXJlbmEgLyB0Y2FjaGUgaW50ZXJh Y3Rpb25zLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0gUmVmYWN0b3IgZXh0ZW50IG1hbmFnZW1l bnQgd2l0aCBkdW1wYWJsZSBmbGFnLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0gQWRkIHJ1bnRp bWUgZGV0ZWN0aW9uIG9mIGxhenkgcHVyZ2luZy4gIChAaW50ZXJ3cSkKLSAgLSBVc2UgcGFpcmlu ZyBoZWFwIGluc3RlYWQgb2YgcmVkLWJsYWNrIHRyZWUgZm9yIGV4dGVudHNfYXZhaWwuICAoQGRq d2F0c29uKQotICAtIFVzZSBzeXNjdGwgb24gc3RhcnR1cCBpbiBGcmVlQlNELiAgKEB0cmFzeikK LSAgLSBVc2UgdGhyZWFkIGxvY2FsIHBybmcgc3RhdGUgaW5zdGVhZCBvZiBhdG9taWMuICAoQGRq d2F0c29uKQotICAtIE1ha2UgZGVjYXkgdG8gYWx3YXlzIHB1cmdlIG9uZSBtb3JlIGV4dGVudCB0 aGFuIGJlZm9yZSwgYmVjYXVzZSBpbgotICAgIHByYWN0aWNlIGxhcmdlIGV4dGVudHMgYXJlIHVz dWFsbHkgdGhlIG9uZXMgdGhhdCBjcm9zcyB0aGUgZGVjYXkgdGhyZXNob2xkLgotICAgIFB1cmdp bmcgdGhlIGFkZGl0aW9uYWwgZXh0ZW50IGhlbHBzIHNhdmUgbWVtb3J5IGFzIHdlbGwgYXMgcmVk dWNlIFZNCi0gICAgZnJhZ21lbnRhdGlvbi4gIChAaW50ZXJ3cSkKLSAgLSBGYXN0IGRpdmlzaW9u IGJ5IGR5bmFtaWMgdmFsdWVzLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0gSW1wcm92ZSB0aGUg Zml0IGZvciBhbGlnbmVkIGFsbG9jYXRpb24uICAoQGludGVyd3EsIEBlZHdpbnNtaXRoKQotICAt IFJlZmFjdG9yIGV4dGVudF90IGJpdHBhY2tpbmcuICAoQHJrbWlzcmEpCi0gIC0gT3B0aW1pemUg dGhlIGdlbmVyYXRlZCBhc3NlbWJseSBmb3IgdGlja2VyIG9wZXJhdGlvbnMuICAoQGRhdmlkdGdv bGRibGF0dCkKLSAgLSBDb252ZXJ0IHN0YXRzIHByaW50aW5nIHRvIHVzZSBhIHN0cnVjdHVyZWQg dGV4dCBlbWl0dGVyLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0gUmVtb3ZlIHByZXNlcnZlX2xy dSBmZWF0dXJlIGZvciBleHRlbnRzIG1hbmFnZW1lbnQuICAoQGRqd2F0c29uKQotICAtIENvbnNv bGlkYXRlIHR3byBtZW1vcnkgbG9hZHMgaW50byBvbmUgb24gdGhlIGZhc3QgZGVhbGxvY2F0aW9u IHBhdGguCi0gICAgKEBkYXZpZHRnb2xkYmxhdHQsIEBpbnRlcndxKQotCi0gIEJ1ZyBmaXhlcyAo bW9zdCBvZiB0aGUgaXNzdWVzIGFyZSBvbmx5IHJlbGV2YW50IHRvIGplbWFsbG9jIDUuMCk6Ci0g IC0gRml4IGRlYWRsb2NrIHdpdGggbXVsdGl0aHJlYWRlZCBmb3JrIGluIE9TIFguICAoQGRhdmlk dGdvbGRibGF0dCkKLSAgLSBWYWxpZGF0ZSByZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3IgYmVmb3Jl IHVzZS4gIChAem9ueWl0b28pCi0gIC0gRml4IGEgZmV3IGJhY2tncm91bmQgdGhyZWFkIGluaXRp YWxpemF0aW9uIGFuZCBzaHV0ZG93biBpc3N1ZXMuICAoQGludGVyd3EpCi0gIC0gRml4IGFuIGV4 dGVudCBjb2FsZXNjZSArIGRlY2F5IHJhY2UgYnkgdGFraW5nIGJvdGggY29hbGVzY2luZyBleHRl bnRzIG9mZgotICAgIHRoZSBMUlUgbGlzdC4gIChAaW50ZXJ3cSkKLSAgLSBGaXggcG90ZW50aWFs bHkgdW5ib3VuZCBpbmNyZWFzZSBkdXJpbmcgZGVjYXksIGNhdXNlZCBieSBvbmUgdGhyZWFkIGtl ZXAKLSAgICBzdGFzaGluZyBtZW1vcnkgdG8gcHVyZ2Ugd2hpbGUgb3RoZXIgdGhyZWFkcyBnZW5l cmF0aW5nIG5ldyBwYWdlcy4gIFRoZQotICAgIG51bWJlciBvZiBwYWdlcyB0byBwdXJnZSBpcyBj aGVja2VkIHRvIHByZXZlbnQgdGhpcy4gIChAaW50ZXJ3cSkKLSAgLSBGaXggYSBGcmVlQlNEIGJv b3RzdHJhcCBhc3NlcnRpb24uICAoQHN0cmVqZGEsIEBpbnRlcndxKQotICAtIEhhbmRsZSAzMiBi aXQgbXV0ZXggY291bnRlcnMuICAoQHJrbWlzcmEpCi0gIC0gRml4IGEgaW5kZXhpbmcgYnVnIHdo ZW4gY3JlYXRpbmcgYmFja2dyb3VuZCB0aHJlYWRzLiAgKEBkYXZpZHRnb2xkYmxhdHQsCi0gICAg QGJpbmxpdTE5KQotICAtIEZpeCBhcmd1bWVudHMgcGFzc2VkIHRvIGV4dGVudF9pbml0LiAgKEB5 dWxlbml3bywgQGludGVyd3EpCi0gIC0gRml4IGFkZHJlc3NlcyB1c2VkIGZvciBvcmRlcmluZyBt dXRleGVzLiAgKEBya21pc3JhKQotICAtIEZpeCBhYm9ydF9jb25mIHByb2Nlc3NpbmcgZHVyaW5n IGJvb3RzdHJhcC4gIChAaW50ZXJ3cSkKLSAgLSBGaXggaW5jbHVkZSBwYXRoIG9yZGVyIGZvciBv dXQtb2YtdHJlZSBidWlsZHMuICAoQGNtdWVsbG5lcikKLQotICBJbmNvbXBhdGlibGUgY2hhbmdl czoKLSAgLSBSZW1vdmUgLS1kaXNhYmxlLXRocC4gIChAaW50ZXJ3cSkKLSAgLSBSZW1vdmUgbWFs bGN0bCBpbnRlcmZhY2VzOgotICAgICsgY29uZmlnLnRocCAgKEBpbnRlcndxKQotCi0gIERvY3Vt ZW50YXRpb246Ci0gIC0gQWRkIFRVTklORy5tZC4gIChAaW50ZXJ3cSwgQGRhdmlkdGdvbGRibGF0 dCwgQGRqd2F0c29uKQotCi0qIDUuMC4xIChKdWx5IDEsIDIwMTcpCi0KLSAgVGhpcyBidWdmaXgg cmVsZWFzZSBmaXhlcyBzZXZlcmFsIGlzc3VlcywgbW9zdCBvZiB3aGljaCBhcmUgb2JzY3VyZSBl bm91Z2gKLSAgdGhhdCB0eXBpY2FsIGFwcGxpY2F0aW9ucyBhcmUgbm90IGltcGFjdGVkLgotCi0g IEJ1ZyBmaXhlczoKLSAgLSBVcGRhdGUgZGVjYXktPm51bnB1cmdlZCBiZWZvcmUgcHVyZ2luZywg aW4gb3JkZXIgdG8gYXZvaWQgcG90ZW50aWFsIHVwZGF0ZQotICAgIHJhY2VzIGFuZCBzdWJzZXF1 ZW50IGluY29ycmVjdCBwdXJnaW5nIHZvbHVtZS4gIChAaW50ZXJ3cSkKLSAgLSBPbmx5IGFib3J0 IG9uIGRsc3ltKDMpIGVycm9yIGlmIHRoZSBmYWlsdXJlIGltcGFjdHMgYW4gZW5hYmxlZCBmZWF0 dXJlIChsYXp5Ci0gICAgbG9ja2luZyBhbmQvb3IgYmFja2dyb3VuZCB0aHJlYWRzKS4gIFRoaXMg bWl0aWdhdGVzIGFuIGluaXRpYWxpemF0aW9uCi0gICAgZmFpbHVyZSBidWcgZm9yIHdoaWNoIHdl IHN0aWxsIGRvIG5vdCBoYXZlIGEgY2xlYXIgcmVwcm9kdWN0aW9uIHRlc3QgY2FzZS4KLSAgICAo QGludGVyd3EpCi0gIC0gTW9kaWZ5IHRzZCBtYW5hZ2VtZW50IHNvIHRoYXQgaXQgbmVpdGhlciBj cmFzaGVzIG5vciBsZWFrcyBpZiBhIHRocmVhZCdzCi0gICAgb25seSBhbGxvY2F0aW9uIGFjdGl2 aXR5IGlzIHRvIGNhbGwgZnJlZSgpIGFmdGVyIFRMUyBkZXN0cnVjdG9ycyBoYXZlIGJlZW4KLSAg ICBleGVjdXRlZC4gIFRoaXMgYmVoYXZpb3Igd2FzIG9ic2VydmVkIHdoZW4gb3BlcmF0aW5nIHdp dGggR05VIGxpYmMsIGFuZCBpcwotICAgIHVubGlrZWx5IHRvIGJlIGFuIGlzc3VlIHdpdGggb3Ro ZXIgbGliYyBpbXBsZW1lbnRhdGlvbnMuICAoQGludGVyd3EpCi0gIC0gTWFzayBzaWduYWxzIGR1 cmluZyBiYWNrZ3JvdW5kIHRocmVhZCBjcmVhdGlvbi4gIFRoaXMgcHJldmVudHMgc2lnbmFscyBm cm9tCi0gICAgYmVpbmcgaW5hZHZlcnRlbnRseSBkZWxpdmVyZWQgdG8gYmFja2dyb3VuZCB0aHJl YWRzLiAgKEBqYXNvbmUsCi0gICAgQGRhdmlkdGdvbGRibGF0dCwgQGludGVyd3EpCi0gIC0gQXZv aWQgaW5hY3Rpdml0eSBjaGVja3Mgd2l0aGluIGJhY2tncm91bmQgdGhyZWFkcywgaW4gb3JkZXIg dG8gcHJldmVudAotICAgIHJlY3Vyc2l2ZSBtdXRleCBhY3F1aXNpdGlvbi4gIChAaW50ZXJ3cSkK LSAgLSBGaXggZXh0ZW50X2dyb3dfcmV0YWluZWQoKSB0byB1c2UgdGhlIHNwZWNpZmllZCBob29r cyB3aGVuIHRoZQotICAgIGFyZW5hLjxpPi5leHRlbnRfaG9va3MgbWFsbGN0bCBpcyB1c2VkIHRv IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGhvb2tzLgotICAgIChAaW50ZXJ3cSkKLSAgLSBBZGQgbWlz c2luZyByZWVudHJhbmN5IHN1cHBvcnQgZm9yIGN1c3RvbSBleHRlbnQgaG9va3Mgd2hpY2ggYWxs b2NhdGUuCi0gICAgKEBpbnRlcndxKQotICAtIFBvc3QtZm9yaygyKSwgcmUtaW5pdGlhbGl6ZSB0 aGUgbGlzdCBvZiB0Y2FjaGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGFyZW5hCi0gICAgdG8gY29u dGFpbiBubyB0Y2FjaGVzIGV4Y2VwdCB0aGUgZm9ya2luZyB0aHJlYWQncy4gIChAaW50ZXJ3cSkK LSAgLSBBZGQgbWlzc2luZyBwb3N0LWZvcmsoMikgbXV0ZXggcmVpbml0aWFsaXphdGlvbiBmb3Ig ZXh0ZW50X2dyb3dfbXR4LiAgVGhpcwotICAgIGZpeGVzIHBvdGVudGlhbCBkZWFkbG9ja3MgYWZ0 ZXIgZm9yaygyKS4gIChAaW50ZXJ3cSkKLSAgLSBFbmZvcmNlIG1pbmltdW0gYXV0b2NvbmYgdmVy c2lvbiAoY3VycmVudGx5IDIuNjgpLCBzaW5jZSAyLjYzIGlzIGtub3duIHRvCi0gICAgZ2VuZXJh dGUgY29ycnVwdCBjb25maWd1cmUgc2NyaXB0cy4gIChAamFzb25lKQotICAtIEVuc3VyZSB0aGF0 IHRoZSBjb25maWd1cmVkIHBhZ2Ugc2l6ZSAoLS13aXRoLWxnLXBhZ2UpIGlzIG5vIGxhcmdlciB0 aGFuIHRoZQotICAgIGNvbmZpZ3VyZWQgaHVnZSBwYWdlIHNpemUgKC0td2l0aC1sZy1odWdlcGFn ZSkuICAoQGphc29uZSkKLQotKiA1LjAuMCAoSnVuZSAxMywgMjAxNykKLQotICBVbmxpa2UgYWxs IHByZXZpb3VzIGplbWFsbG9jIHJlbGVhc2VzLCB0aGlzIHJlbGVhc2UgZG9lcyBub3QgdXNlIG5h dHVyYWxseQotICBhbGlnbmVkICJjaHVua3MiIGZvciB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50 LCBhbmQgaW5zdGVhZCB1c2VzIHBhZ2UtYWxpZ25lZAotICAiZXh0ZW50cyIuICBUaGlzIGNoYW5n ZSBoYXMgZmV3IGV4dGVybmFsbHkgdmlzaWJsZSBlZmZlY3RzLCBidXQgdGhlIGludGVybmFsCi0g IGltcGFjdHMgYXJlLi4uIGV4dGVuc2l2ZS4gIE1hbnkgb3RoZXIgaW50ZXJuYWwgY2hhbmdlcyBj b21iaW5lIHRvIG1ha2UgdGhpcwotICB0aGUgbW9zdCBjb2hlc2l2ZWx5IGRlc2lnbmVkIHZlcnNp b24gb2YgamVtYWxsb2Mgc28gZmFyLCB3aXRoIGFtcGxlCi0gIG9wcG9ydHVuaXR5IGZvciBmdXJ0 aGVyIGVuaGFuY2VtZW50cy4KLQotICBDb250aW51b3VzIGludGVncmF0aW9uIGlzIG5vdyBhbiBp bnRlZ3JhbCBhc3BlY3Qgb2YgZGV2ZWxvcG1lbnQgdGhhbmtzIHRvIHRoZQotICBlZmZvcnRzIG9m IEBkYXZpZHRnb2xkYmxhdHQsIGFuZCB0aGUgZGV2IGJyYW5jaCB0ZW5kcyB0byByZW1haW4gcmVh c29uYWJseQotICBzdGFibGUgb24gdGhlIHRlc3RlZCBwbGF0Zm9ybXMgKExpbnV4LCBGcmVlQlNE LCBtYWNPUywgYW5kIFdpbmRvd3MpLiAgQXMgYQotICBzaWRlIGVmZmVjdCB0aGUgb2ZmaWNpYWwg cmVsZWFzZSBmcmVxdWVuY3kgbWF5IGRlY3JlYXNlIG92ZXIgdGltZS4KLQotICBOZXcgZmVhdHVy ZXM6Ci0gIC0gSW1wbGVtZW50IG9wdGlvbmFsIHBlci1DUFUgYXJlbmEgc3VwcG9ydDsgdGhyZWFk cyBjaG9vc2Ugd2hpY2ggYXJlbmEgdG8gdXNlCi0gICAgYmFzZWQgb24gY3VycmVudCBDUFUgcmF0 aGVyIHRoYW4gb24gZml4ZWQgdGhyZWFkLS0+YXJlbmEgYXNzb2NpYXRpb25zLgotICAgIChAaW50 ZXJ3cSkKLSAgLSBJbXBsZW1lbnQgdHdvLXBoYXNlIGRlY2F5IG9mIHVudXNlZCBkaXJ0eSBwYWdl cy4gIFBhZ2VzIHRyYW5zaXRpb24gZnJvbQotICAgIGRpcnR5LS0+bXV6enktLT5jbGVhbiwgd2hl cmUgdGhlIGZpcnN0IHBoYXNlIHRyYW5zaXRpb24gcmVsaWVzIG9uCi0gICAgbWFkdmlzZSguLi4g TUFEVl9GUkVFKSBzZW1hbnRpY3MsIGFuZCB0aGUgc2Vjb25kIHBoYXNlIHRyYW5zaXRpb24gZGlz Y2FyZHMKLSAgICBwYWdlcyBzdWNoIHRoYXQgdGhleSBhcmUgcmVwbGFjZWQgd2l0aCBkZW1hbmQt emVyb2VkIHBhZ2VzIG9uIG5leHQgYWNjZXNzLgotICAgIChAamFzb25lKQotICAtIEluY3JlYXNl IGRlY2F5IHRpbWUgcmVzb2x1dGlvbiBmcm9tIHNlY29uZHMgdG8gbWlsbGlzZWNvbmRzLiAgKEBq YXNvbmUpCi0gIC0gSW1wbGVtZW50IG9wdC1pbiBwZXIgQ1BVIGJhY2tncm91bmQgdGhyZWFkcywg YW5kIHVzZSB0aGVtIGZvciBhc3luY2hyb25vdXMKLSAgICBkZWNheS1kcml2ZW4gdW51c2VkIGRp cnR5IHBhZ2UgcHVyZ2luZy4gIChAaW50ZXJ3cSkKLSAgLSBBZGQgbXV0ZXggcHJvZmlsaW5nLCB3 aGljaCBjb2xsZWN0cyBhIHZhcmlldHkgb2Ygc3RhdGlzdGljcyB1c2VmdWwgZm9yCi0gICAgZGlh Z25vc2luZyBvdmVyaGVhZC9jb250ZW50aW9uIGlzc3Vlcy4gIChAaW50ZXJ3cSkKLSAgLSBBZGQg QysrIG5ldy9kZWxldGUgb3BlcmF0b3IgYmluZGluZ3MuICAoQGRqd2F0c29uKQotICAtIFN1cHBv cnQgbWFudWFsbHkgY3JlYXRlZCBhcmVuYSBkZXN0cnVjdGlvbiwgc3VjaCB0aGF0IGFsbCBkYXRh IGFuZCBtZXRhZGF0YQotICAgIGFyZSBkaXNjYXJkZWQuICBBZGQgTUFMTENUTF9BUkVOQVNfREVT VFJPWUVEIGZvciBhY2Nlc3NpbmcgbWVyZ2VkIHN0YXRzCi0gICAgYXNzb2NpYXRlZCB3aXRoIGRl c3Ryb3llZCBhcmVuYXMuICAoQGphc29uZSkKLSAgLSBBZGQgTUFMTENUTF9BUkVOQVNfQUxMIGFz IGEgZml4ZWQgaW5kZXggZm9yIHVzZSBpbiBhY2Nlc3NpbmcKLSAgICBtZXJnZWQvZGVzdHJveWVk IGFyZW5hIHN0YXRpc3RpY3MgdmlhIG1hbGxjdGwuICAoQGphc29uZSkKLSAgLSBBZGQgb3B0LmFi b3J0X2NvbmYgdG8gb3B0aW9uYWxseSBhYm9ydCBpZiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0 aW9ucyBhcmUKLSAgICBkZXRlY3RlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICAoQGludGVyd3Ep Ci0gIC0gQWRkIG9wdC5zdGF0c19wcmludF9vcHRzLCBzbyB0aGF0IGUuZy4gSlNPTiBvdXRwdXQg Y2FuIGJlIHNlbGVjdGVkIGZvciB0aGUKLSAgICBzdGF0cyBkdW1wZWQgZHVyaW5nIGV4aXQgaWYg b3B0LnN0YXRzX3ByaW50IGlzIHRydWUuICAoQGphc29uZSkKLSAgLSBBZGQgLS13aXRoLXZlcnNp b249VkVSU0lPTiBmb3IgdXNlIHdoZW4gZW1iZWRkaW5nIGplbWFsbG9jIGludG8gYW5vdGhlcgot ICAgIHByb2plY3QncyBnaXQgcmVwb3NpdG9yeS4gIChAamFzb25lKQotICAtIEFkZCAtLWRpc2Fi bGUtdGhwIHRvIHN1cHBvcnQgY3Jvc3MgY29tcGlsaW5nLiAgKEBqYXNvbmUpCi0gIC0gQWRkIC0t d2l0aC1sZy1odWdlcGFnZSB0byBzdXBwb3J0IGNyb3NzIGNvbXBpbGluZy4gIChAamFzb25lKQot ICAtIEFkZCBtYWxsY3RsIGludGVyZmFjZXMgKHZhcmlvdXMgYXV0aG9ycyk6Ci0gICAgKyBiYWNr Z3JvdW5kX3RocmVhZAotICAgICsgb3B0LmFib3J0X2NvbmYKLSAgICArIG9wdC5yZXRhaW4KLSAg ICArIG9wdC5wZXJjcHVfYXJlbmEKLSAgICArIG9wdC5iYWNrZ3JvdW5kX3RocmVhZAotICAgICsg b3B0LntkaXJ0eSxtdXp6eX1fZGVjYXlfbXMKLSAgICArIG9wdC5zdGF0c19wcmludF9vcHRzCi0g ICAgKyBhcmVuYS48aT4uaW5pdGlhbGl6ZWQKLSAgICArIGFyZW5hLjxpPi5kZXN0cm95Ci0gICAg KyBhcmVuYS48aT4ue2RpcnR5LG11enp5fV9kZWNheV9tcwotICAgICsgYXJlbmEuPGk+LmV4dGVu dF9ob29rcwotICAgICsgYXJlbmFzLntkaXJ0eSxtdXp6eX1fZGVjYXlfbXMKLSAgICArIGFyZW5h cy5iaW4uPGk+LnNsYWJfc2l6ZQotICAgICsgYXJlbmFzLm5sZXh0ZW50cwotICAgICsgYXJlbmFz LmxleHRlbnQuPGk+LnNpemUKLSAgICArIGFyZW5hcy5jcmVhdGUKLSAgICArIHN0YXRzLmJhY2tn cm91bmRfdGhyZWFkLntudW1fdGhyZWFkcyxudW1fcnVucyxydW5faW50ZXJ2YWx9Ci0gICAgKyBz dGF0cy5tdXRleGVzLntjdGwsYmFja2dyb3VuZF90aHJlYWQscHJvZixyZXNldH0uCi0gICAgICB7 bnVtX29wcyxudW1fc3Bpbl9hY3EsbnVtX3dhaXQsbWF4X3dhaXRfdGltZSx0b3RhbF93YWl0X3Rp bWUsbWF4X251bV90aGRzLAotICAgICAgbnVtX293bmVyX3N3aXRjaH0KLSAgICArIHN0YXRzLmFy ZW5hcy48aT4ue2RpcnR5LG11enp5fV9kZWNheV9tcwotICAgICsgc3RhdHMuYXJlbmFzLjxpPi51 cHRpbWUKLSAgICArIHN0YXRzLmFyZW5hcy48aT4ue3BtdXp6eSxiYXNlLGludGVybmFsLHJlc2lk ZW50fQotICAgICsgc3RhdHMuYXJlbmFzLjxpPi57ZGlydHksbXV6enl9X3tucHVyZ2Usbm1hZHZp c2UscHVyZ2VkfQotICAgICsgc3RhdHMuYXJlbmFzLjxpPi5iaW5zLjxqPi57bnNsYWJzLHJlc2xh YnMsY3Vyc2xhYnN9Ci0gICAgKyBzdGF0cy5hcmVuYXMuPGk+LmJpbnMuPGo+Lm11dGV4LgotICAg ICAge251bV9vcHMsbnVtX3NwaW5fYWNxLG51bV93YWl0LG1heF93YWl0X3RpbWUsdG90YWxfd2Fp dF90aW1lLG1heF9udW1fdGhkcywKLSAgICAgIG51bV9vd25lcl9zd2l0Y2h9Ci0gICAgKyBzdGF0 cy5hcmVuYXMuPGk+LmxleHRlbnRzLjxqPi57bm1hbGxvYyxuZGFsbG9jLG5yZXF1ZXN0cyxjdXJs ZXh0ZW50c30KLSAgICArIHN0YXRzLmFyZW5hcy5pLm11dGV4ZXMue2xhcmdlLGV4dGVudF9hdmFp bCxleHRlbnRzX2RpcnR5LGV4dGVudHNfbXV6enksCi0gICAgICBleHRlbnRzX3JldGFpbmVkLGRl Y2F5X2RpcnR5LGRlY2F5X211enp5LGJhc2UsdGNhY2hlX2xpc3R9LgotICAgICAge251bV9vcHMs bnVtX3NwaW5fYWNxLG51bV93YWl0LG1heF93YWl0X3RpbWUsdG90YWxfd2FpdF90aW1lLG1heF9u dW1fdGhkcywKLSAgICAgIG51bV9vd25lcl9zd2l0Y2h9Ci0KLSAgUG9ydGFiaWxpdHkgaW1wcm92 ZW1lbnRzOgotICAtIEltcHJvdmUgcmVlbnRyYW50IGFsbG9jYXRpb24gc3VwcG9ydCwgc3VjaCB0 aGF0IGRlYWRsb2NrIGlzIGxlc3MgbGlrZWx5IGlmCi0gICAgZS5nLiBhIHN5c3RlbSBsaWJyYXJ5 IGNhbGwgaW4gdHVybiBhbGxvY2F0ZXMgbWVtb3J5LiAgKEBkYXZpZHRnb2xkYmxhdHQsCi0gICAg QGludGVyd3EpCi0gIC0gU3VwcG9ydCBzdGF0aWMgbGlua2luZyBvZiBqZW1hbGxvYyB3aXRoIGds aWJjLiAgKEBkandhdHNvbikKLQotICBPcHRpbWl6YXRpb25zIGFuZCByZWZhY3RvcnM6Ci0gIC0g T3JnYW5pemUgdmlydHVhbCBtZW1vcnkgYXMgImV4dGVudHMiIG9mIHZpcnR1YWwgbWVtb3J5IHBh Z2VzLCByYXRoZXIgdGhhbiBhcwotICAgIG5hdHVyYWxseSBhbGlnbmVkICJjaHVua3MiLCBhbmQg c3RvcmUgYWxsIG1ldGFkYXRhIGluIGFyYml0cmFyaWx5IGRpc3RhbnQKLSAgICBsb2NhdGlvbnMu ICBUaGlzIHJlZHVjZXMgdmlydHVhbCBtZW1vcnkgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiwgYW5k IHdpbGwKLSAgICBpbnRlcmFjdCBiZXR0ZXIgd2l0aCBodWdlIHBhZ2VzIChub3QgeWV0IGV4cGxp Y2l0bHkgc3VwcG9ydGVkKS4gIChAamFzb25lKQotICAtIEZvbGQgbGFyZ2UgYW5kIGh1Z2Ugc2l6 ZSBjbGFzc2VzIHRvZ2V0aGVyOyBvbmx5IHNtYWxsIGFuZCBsYXJnZSBzaXplIGNsYXNzZXMKLSAg ICByZW1haW4uICAoQGphc29uZSkKLSAgLSBVbmlmeSB0aGUgYWxsb2NhdGlvbiBwYXRocywgYW5k IG1lcmdlIG1vc3QgZmFzdC1wYXRoIGJyYW5jaGluZyBkZWNpc2lvbnMuCi0gICAgKEBkYXZpZHRn b2xkYmxhdHQsIEBpbnRlcndxKQotICAtIEVtYmVkIHBlciB0aHJlYWQgYXV0b21hdGljIHRjYWNo ZSBpbnRvIHRocmVhZC1zcGVjaWZpYyBkYXRhLCB3aGljaCByZWR1Y2VzCi0gICAgY29uZGl0aW9u YWwgYnJhbmNoZXMgYW5kIGRlcmVmZXJlbmNlcy4gIEFsc28gcmVvcmdhbml6ZSB0Y2FjaGUgdG8g aW5jcmVhc2UKLSAgICBmYXN0LXBhdGggZGF0YSBsb2NhbGl0eS4gIChAaW50ZXJ3cSkKLSAgLSBS ZXdyaXRlIGF0b21pY3MgdG8gY2xvc2VseSBtb2RlbCB0aGUgQzExIEFQSSwgY29udmVydCB2YXJp b3VzCi0gICAgc3luY2hyb25pemF0aW9uIGZyb20gbXV0ZXgtYmFzZWQgdG8gYXRvbWljLCBhbmQg dXNlIHRoZSBleHBsaWNpdCBtZW1vcnkKLSAgICBvcmRlcmluZyBjb250cm9sIHRvIHJlc29sdmUg dmFyaW91cyBoeXBvdGhldGljYWwgcmFjZXMgd2l0aG91dCBpbmNyZWFzaW5nCi0gICAgc3luY2hy b25pemF0aW9uIG92ZXJoZWFkLiAgKEBkYXZpZHRnb2xkYmxhdHQpCi0gIC0gRXh0ZW5zaXZlbHkg b3B0aW1pemUgcnRyZWUgdmlhIHZhcmlvdXMgbWV0aG9kczoKLSAgICArIEFkZCBtdWx0aXBsZSBs YXllcnMgb2YgcnRyZWUgbG9va3VwIGNhY2hpbmcsIHNpbmNlIHJ0cmVlIGxvb2t1cHMgYXJlIG5v dwotICAgICAgcGFydCBvZiBmYXN0LXBhdGggZGVhbGxvY2F0aW9uLiAgKEBpbnRlcndxKQotICAg ICsgRGV0ZXJtaW5lIHJ0cmVlIGxheW91dCBhdCBjb21waWxlIHRpbWUuICAoQGphc29uZSkKLSAg ICArIE1ha2UgdGhlIHRyZWUgc2hhbGxvd2VyIGZvciBjb21tb24gY29uZmlndXJhdGlvbnMuICAo QGphc29uZSkKLSAgICArIEVtYmVkIHRoZSByb290IG5vZGUgaW4gdGhlIHRvcC1sZXZlbCBydHJl ZSBkYXRhIHN0cnVjdHVyZSwgdGh1cyBhdm9pZGluZwotICAgICAgb25lIGxldmVsIG9mIGluZGly ZWN0aW9uLiAgKEBqYXNvbmUpCi0gICAgKyBGdXJ0aGVyIHNwZWNpYWxpemUgbGVhZiBlbGVtZW50 cyBhcyBjb21wYXJlZCB0byBpbnRlcm5hbCBub2RlIGVsZW1lbnRzLAotICAgICAgYW5kIGRpcmVj dGx5IGVtYmVkIGV4dGVudCBtZXRhZGF0YSBuZWVkZWQgZm9yIGZhc3QtcGF0aCBkZWFsbG9jYXRp b24uCi0gICAgICAoQGphc29uZSkKLSAgICArIElnbm9yZSBsZWFkaW5nIGFsd2F5cy16ZXJvIGFk ZHJlc3MgYml0cyAoYXJjaGl0ZWN0dXJlLXNwZWNpZmljKS4KLSAgICAgIChAamFzb25lKQotICAt IFJlb3JnYW5pemUgaGVhZGVycyAob25nb2luZyB3b3JrKSB0byBtYWtlIHRoZW0gaGVybWV0aWMs IGFuZCBkaXNlbnRhbmdsZQotICAgIHZhcmlvdXMgbW9kdWxlIGRlcGVuZGVuY2llcy4gIChAZGF2 aWR0Z29sZGJsYXR0KQotICAtIENvbnZlcnQgdmFyaW91cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVy ZXMgc3VjaCBhcyBzaXplIGNsYXNzIG1ldGFkYXRhIGZyb20KLSAgICBib290LXRpbWUtaW5pdGlh bGl6ZWQgdG8gY29tcGlsZS10aW1lLWluaXRpYWxpemVkLiAgUHJvcGFnYXRlIHJlc3VsdGluZyBk YXRhCi0gICAgc3RydWN0dXJlIHNpbXBsaWZpY2F0aW9ucywgc3VjaCBhcyBtYWtpbmcgYXJlbmEg bWV0YWRhdGEgZml4ZWQtc2l6ZS4KLSAgICAoQGphc29uZSkKLSAgLSBTaW1wbGlmeSBzaXplIGNs YXNzIGxvb2t1cHMgd2hlbiBjb25zdHJhaW5lZCB0byBzaXplIGNsYXNzZXMgdGhhdCBhcmUKLSAg ICBtdWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZS4gIFRoaXMgc3BlZWRzIGxvb2t1cHMsIGJ1dCB0 aGUgcHJpbWFyeSBiZW5lZml0IGlzCi0gICAgY29tcGxleGl0eSByZWR1Y3Rpb24gaW4gY29kZSB0 aGF0IHdhcyB0aGUgc291cmNlIG9mIG51bWVyb3VzIHJlZ3Jlc3Npb25zLgotICAgIChAamFzb25l KQotICAtIExvY2sgaW5kaXZpZHVhbCBleHRlbnRzIHdoZW4gcG9zc2libGUgZm9yIGxvY2FsaXpl ZCBleHRlbnQgb3BlcmF0aW9ucywKLSAgICByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGEgdG9wLWxl dmVsIGFyZW5hIGxvY2suICAoQGRhdmlkdGdvbGRibGF0dCwgQGphc29uZSkKLSAgLSBVc2UgZmly c3QgZml0IGxheW91dCBwb2xpY3kgaW5zdGVhZCBvZiBiZXN0IGZpdCwgaW4gb3JkZXIgdG8gaW1w cm92ZQotICAgIHBhY2tpbmcuICAoQGphc29uZSkKLSAgLSBJZiBtdW5tYXAoMikgaXMgbm90IGlu IHVzZSwgdXNlIGFuIGV4cG9uZW50aWFsIHNlcmllcyB0byBncm93IGVhY2ggYXJlbmEncwotICAg IHZpcnR1YWwgbWVtb3J5LCBzbyB0aGF0IHRoZSBudW1iZXIgb2YgZGlzam9pbnQgdmlydHVhbCBt ZW1vcnkgbWFwcGluZ3MKLSAgICByZW1haW5zIGxvdy4gIChAamFzb25lKQotICAtIEltcGxlbWVu dCBwZXIgYXJlbmEgYmFzZSBhbGxvY2F0b3JzLCBzbyB0aGF0IGFyZW5hcyBuZXZlciBzaGFyZSBh bnkgdmlydHVhbAotICAgIG1lbW9yeSBwYWdlcy4gIChAamFzb25lKQotICAtIEF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGUgcHJpdmF0ZSBzeW1ib2wgbmFtZSBtYW5nbGluZyBtYWNyb3MuICAoQGphc29u ZSkKLQotICBJbmNvbXBhdGlibGUgY2hhbmdlczoKLSAgLSBSZXBsYWNlIGNodW5rIGhvb2tzIHdp dGggYW4gZXhwYW5kZWQvbm9ybWFsaXplZCBzZXQgb2YgZXh0ZW50IGhvb2tzLgotICAgIChAamFz b25lKQotICAtIFJlbW92ZSByYXRpby1iYXNlZCBwdXJnaW5nLiAgKEBqYXNvbmUpCi0gIC0gUmVt b3ZlIC0tZGlzYWJsZS10Y2FjaGUuICAoQGphc29uZSkKLSAgLSBSZW1vdmUgLS1kaXNhYmxlLXRs cy4gIChAamFzb25lKQotICAtIFJlbW92ZSAtLWVuYWJsZS1pdnNhbGxvYy4gIChAamFzb25lKQot ICAtIFJlbW92ZSAtLXdpdGgtbGctc2l6ZS1jbGFzcy1ncm91cC4gIChAamFzb25lKQotICAtIFJl bW92ZSAtLXdpdGgtbGctdGlueS1taW4uICAoQGphc29uZSkKLSAgLSBSZW1vdmUgLS1kaXNhYmxl LWNjLXNpbGVuY2UuICAoQGphc29uZSkKLSAgLSBSZW1vdmUgLS1lbmFibGUtY29kZS1jb3ZlcmFn ZS4gIChAamFzb25lKQotICAtIFJlbW92ZSAtLWRpc2FibGUtbXVubWFwIChyZXBsYWNlZCBieSBv cHQucmV0YWluKS4gIChAamFzb25lKQotICAtIFJlbW92ZSBWYWxncmluZCBzdXBwb3J0LiAgKEBq YXNvbmUpCi0gIC0gUmVtb3ZlIHF1YXJhbnRpbmUgc3VwcG9ydC4gIChAamFzb25lKQotICAtIFJl bW92ZSByZWR6b25lIHN1cHBvcnQuICAoQGphc29uZSkKLSAgLSBSZW1vdmUgbWFsbGN0bCBpbnRl cmZhY2VzICh2YXJpb3VzIGF1dGhvcnMpOgotICAgICsgY29uZmlnLm11bm1hcAotICAgICsgY29u ZmlnLnRjYWNoZQotICAgICsgY29uZmlnLnRscwotICAgICsgY29uZmlnLnZhbGdyaW5kCi0gICAg KyBvcHQubGdfY2h1bmsKLSAgICArIG9wdC5wdXJnZQotICAgICsgb3B0LmxnX2RpcnR5X211bHQK LSAgICArIG9wdC5kZWNheV90aW1lCi0gICAgKyBvcHQucXVhcmFudGluZQotICAgICsgb3B0LnJl ZHpvbmUKLSAgICArIG9wdC50aHAKLSAgICArIGFyZW5hLjxpPi5sZ19kaXJ0eV9tdWx0Ci0gICAg KyBhcmVuYS48aT4uZGVjYXlfdGltZQotICAgICsgYXJlbmEuPGk+LmNodW5rX2hvb2tzCi0gICAg KyBhcmVuYXMuaW5pdGlhbGl6ZWQKLSAgICArIGFyZW5hcy5sZ19kaXJ0eV9tdWx0Ci0gICAgKyBh cmVuYXMuZGVjYXlfdGltZQotICAgICsgYXJlbmFzLmJpbi48aT4ucnVuX3NpemUKLSAgICArIGFy ZW5hcy5ubHJ1bnMKLSAgICArIGFyZW5hcy5scnVuLjxpPi5zaXplCi0gICAgKyBhcmVuYXMubmhj aHVua3MKLSAgICArIGFyZW5hcy5oY2h1bmsuPGk+LnNpemUKLSAgICArIGFyZW5hcy5leHRlbmQK LSAgICArIHN0YXRzLmNhY3RpdmUKLSAgICArIHN0YXRzLmFyZW5hcy48aT4ubGdfZGlydHlfbXVs dAotICAgICsgc3RhdHMuYXJlbmFzLjxpPi5kZWNheV90aW1lCi0gICAgKyBzdGF0cy5hcmVuYXMu PGk+Lm1ldGFkYXRhLnttYXBwZWQsYWxsb2NhdGVkfQotICAgICsgc3RhdHMuYXJlbmFzLjxpPi57 bnB1cmdlLG5tYWR2aXNlLHB1cmdlZH0KLSAgICArIHN0YXRzLmFyZW5hcy48aT4uaHVnZS57YWxs b2NhdGVkLG5tYWxsb2MsbmRhbGxvYyxucmVxdWVzdHN9Ci0gICAgKyBzdGF0cy5hcmVuYXMuPGk+ LmJpbnMuPGo+LntucnVucyxyZXJ1bnMsY3VycnVuc30KLSAgICArIHN0YXRzLmFyZW5hcy48aT4u bHJ1bnMuPGo+LntubWFsbG9jLG5kYWxsb2MsbnJlcXVlc3RzLGN1cnJ1bnN9Ci0gICAgKyBzdGF0 cy5hcmVuYXMuPGk+LmhjaHVua3MuPGo+LntubWFsbG9jLG5kYWxsb2MsbnJlcXVlc3RzLGN1cmhj aHVua3N9Ci0KLSAgQnVnIGZpeGVzOgotICAtIEltcHJvdmUgaW50ZXJ2YWwtYmFzZWQgcHJvZmls ZSBkdW1wIHRyaWdnZXJpbmcgdG8gZHVtcCBvbmx5IG9uZSBwcm9maWxlIHdoZW4KLSAgICBhIHNp bmdsZSBhbGxvY2F0aW9uJ3Mgc2l6ZSBleGNlZWRzIHRoZSBpbnRlcnZhbC4gIChAamFzb25lKQot ICAtIFVzZSBwcmVmaXhlZCBmdW5jdGlvbiBuYW1lcyAoYXMgY29udHJvbGxlZCBieSAtLXdpdGgt amVtYWxsb2MtcHJlZml4KSB3aGVuCi0gICAgcHJ1bmluZyBiYWNrdHJhY2UgZnJhbWVzIGluIGpl cHJvZi4gIChAamFzb25lKQotCi0qIDQuNS4wIChGZWJydWFyeSAyOCwgMjAxNykKLQotICBUaGlz IGlzIHRoZSBmaXJzdCByZWxlYXNlIHRvIGJlbmVmaXQgZnJvbSBtdWNoIGJyb2FkZXIgY29udGlu dW91cyBpbnRlZ3JhdGlvbgotICB0ZXN0aW5nLCB0aGFua3MgdG8gQGRhdmlkdGdvbGRibGF0dC4g IEhhZCB3ZSBoYWQgdGhpcyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlCi0gIGluIHBsYWNlIGZvciBw cmlvciByZWxlYXNlcywgaXQgd291bGQgaGF2ZSBjYXVnaHQgYWxsIG9mIHRoZSBtb3N0IHNlcmlv dXMKLSAgcmVncmVzc2lvbnMgZml4ZWQgYnkgdGhpcyByZWxlYXNlLgotCi0gIE5ldyBmZWF0dXJl czoKLSAgLSBBZGQgLS1kaXNhYmxlLXRocCBhbmQgdGhlIG9wdC50aHAgbWFsbGN0bCB0byBwcm92 aWRlIG9wdC1vdXQgbWVjaGFuaXNtcyBmb3IKLSAgICB0cmFuc3BhcmVudCBodWdlIHBhZ2UgaW50 ZWdyYXRpb24uICAoQGphc29uZSkKLSAgLSBVcGRhdGUgem9uZSBhbGxvY2F0b3IgaW50ZWdyYXRp b24gdG8gd29yayB3aXRoIG1hY09TIDEwLjEyLiAgKEBnbGFuZGl1bSkKLSAgLSBSZXN0cnVjdHVy ZSAqQ0ZMQUdTIGNvbmZpZ3VyYXRpb24sIHNvIHRoYXQgQ0ZMQUdTIGJlaGF2ZXMgdHlwaWNhbGx5 LCBhbmQKLSAgICBFWFRSQV9DRkxBR1MgcHJvdmlkZXMgYSB3YXkgdG8gc3BlY2lmeSBlLmcuIC1X ZXJyb3IgZHVyaW5nIGJ1aWxkaW5nLCBidXQgbm90Ci0gICAgZHVyaW5nIGNvbmZpZ3VyYXRpb24u ICAoQGphc29uZSwgQHJvbmF3aG8pCi0KLSAgQnVnIGZpeGVzOgotICAtIEZpeCBEU1MgKHNicmso MiktYmFzZWQpIGFsbG9jYXRpb24uICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2Vk IGluCi0gICAgNC4zLjAuICAoQGphc29uZSkKLSAgLSBIYW5kbGUgcmFjZSBpbiBwZXIgc2l6ZSBj bGFzcyB1dGlsaXphdGlvbiBjb21wdXRhdGlvbi4gIFRoaXMgZnVuY3Rpb25hbGl0eQotICAgIHdh cyBmaXJzdCByZWxlYXNlZCBpbiA0LjAuMC4gIChAaW50ZXJ3cSkKLSAgLSBGaXggbG9jayBvcmRl ciByZXZlcnNhbCBkdXJpbmcgZ2R1bXAuICAoQGphc29uZSkKLSAgLSBGaXgvcmVmYWN0b3IgdGNh Y2hlIHN5bmNocm9uaXphdGlvbi4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQg aW4KLSAgICA0LjAuMC4gIChAamFzb25lKQotICAtIEZpeCB2YXJpb3VzIEpTT04tZm9ybWF0dGVk IG1hbGxvY19zdGF0c19wcmludCgpIGJ1Z3MuICBUaGlzIGZ1bmN0aW9uYWxpdHkKLSAgICB3YXMg Zmlyc3QgcmVsZWFzZWQgaW4gNC4zLjAuICAoQGphc29uZSkKLSAgLSBGaXggaHVnZS1hbGlnbmVk IGFsbG9jYXRpb24uICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluIDQuNC4w LgotICAgIChAamFzb25lKQotICAtIFdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlIGludGVncmF0 aW9uIGlzIGVuYWJsZWQsIGRldGVjdCB3aGF0IHN0YXRlIHBhZ2VzCi0gICAgc3RhcnQgaW4gYWNj b3JkaW5nIHRvIHRoZSBrZXJuZWwncyBjdXJyZW50IG9wZXJhdGluZyBtb2RlLCBhbmQgb25seSBj b252ZXJ0Ci0gICAgYXJlbmEgY2h1bmtzIHRvIG5vbi1odWdlIGR1cmluZyBwdXJnaW5nIGlmIHRo YXQgaXMgbm90IHRoZWlyIGluaXRpYWwgc3RhdGUuCi0gICAgVGhpcyBmdW5jdGlvbmFsaXR5IHdh cyBmaXJzdCByZWxlYXNlZCBpbiA0LjQuMC4gIChAamFzb25lKQotICAtIEZpeCBsZ19jaHVuayBj bGFtcGluZyBmb3IgdGhlIC0tZW5hYmxlLWNhY2hlLW9ibGl2aW91cyAtLWRpc2FibGUtZmlsbCBj YXNlLgotICAgIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQgaW4gNC4wLjAuICAo QGphc29uZSwgQDQyOGRlc21vKQotICAtIFByb3Blcmx5IGRldGVjdCBzcGFyYzY0IHdoZW4gYnVp bGRpbmcgZm9yIExpbnV4LiAgKEBnbGF1Yml0eikKLQotKiA0LjQuMCAoRGVjZW1iZXIgMywgMjAx NikKLQotICBOZXcgZmVhdHVyZXM6Ci0gIC0gQWRkIGNvbmZpZ3VyZSBzdXBwb3J0IGZvciAqLSot bGludXgtYW5kcm9pZC4gIChAY2ZlcnJpczEwMDAsIEBqYXNvbmUpCi0gIC0gQWRkIHRoZSAtLWRp c2FibGUtc3lzY2FsbCBjb25maWd1cmUgb3B0aW9uLCBmb3IgdXNlIG9uIHN5c3RlbXMgdGhhdCBw bGFjZQotICAgIHNlY3VyaXR5LW1vdGl2YXRlZCBsaW1pdGF0aW9ucyBvbiBzeXNjYWxsKDIpLiAg KEBqYXNvbmUpCi0gIC0gQWRkIHN1cHBvcnQgZm9yIERlYmlhbiBHTlUva0ZyZWVCU0QuICAoQHRo ZXNhbSkKLQotICBPcHRpbWl6YXRpb25zOgotICAtIEFkZCBleHRlbnQgc2VyaWFsIG51bWJlcnMg YW5kIHVzZSB0aGVtIHdoZXJlIGFwcHJvcHJpYXRlIGFzIGEgc29ydCBrZXkgdGhhdAotICAgIGlz IGhpZ2hlciBwcmlvcml0eSB0aGFuIGFkZHJlc3MsIHNvIHRoYXQgdGhlIGFsbG9jYXRpb24gcG9s aWN5IHByZWZlcnMgb2xkZXIKLSAgICBleHRlbnRzLiAgVGhpcyB0ZW5kcyB0byBpbXByb3ZlIGxv Y2FsaXR5IChkZWNyZWFzZSBmcmFnbWVudGF0aW9uKSB3aGVuCi0gICAgbWVtb3J5IGdyb3dzIGRv d253YXJkLiAgKEBqYXNvbmUpCi0gIC0gUmVmYWN0b3IgbWFkdmlzZSgyKSBjb25maWd1cmF0aW9u IHNvIHRoYXQgTUFEVl9GUkVFIGlzIGRldGVjdGVkIGFuZCB1dGlsaXplZAotICAgIG9uIExpbnV4 IDQuNSBhbmQgbmV3ZXIuICAoQGphc29uZSkKLSAgLSBNYXJrIHBhcnRpYWxseSBwdXJnZWQgYXJl bmEgY2h1bmtzIGFzIG5vbi1odWdlLXBhZ2UuICBUaGlzIGltcHJvdmVzCi0gICAgaW50ZXJhY3Rp b24gd2l0aCBMaW51eCdzIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSBmdW5jdGlvbmFsaXR5LiAgKEBq YXNvbmUpCi0KLSAgQnVnIGZpeGVzOgotICAtIEZpeCBzaXplIGNsYXNzIGNvbXB1dGF0aW9ucyBm b3IgZWRnZSBjb25kaXRpb25zIGludm9sdmluZyBleHRyZW1lbHkgbGFyZ2UKLSAgICBhbGxvY2F0 aW9ucy4gIFRoaXMgcmVncmVzc2lvbiB3YXMgZmlyc3QgcmVsZWFzZWQgaW4gNC4wLjAuICAoQGph c29uZSwKLSAgICBAaW5ndmFyaGEpCi0gIC0gUmVtb3ZlIG92ZXJseSByZXN0cmljdGl2ZSBhc3Nl cnRpb25zIHJlbGF0ZWQgdG8gdGhlIGNhY3RpdmUgc3RhdGlzdGljLiAgVGhpcwotICAgIHJlZ3Jl c3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluIDQuMS4wLiAgKEBqYXNvbmUpCi0gIC0gSW1wbGVt ZW50IGEgbW9yZSByZWxpYWJsZSBkZXRlY3Rpb24gc2NoZW1lIGZvciBvc191bmZhaXJfbG9jayBv biBtYWNPUy4KLSAgICAoQGpzemFrbWVpc3RlcikKLQotKiA0LjMuMSAoTm92ZW1iZXIgNywgMjAx NikKLQotICBCdWcgZml4ZXM6Ci0gIC0gRml4IGEgc2V2ZXJlIHZpcnR1YWwgbWVtb3J5IGxlYWsu ICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluCi0gICAgNC4zLjAuICAoQGlu dGVyd3EsIEBqYXNvbmUpCi0gIC0gUmVmYWN0b3IgYXRvbWljIGFuZCBwcm5nIEFQSXMgdG8gcmVz dG9yZSBzdXBwb3J0IGZvciAzMi1iaXQgcGxhdGZvcm1zIHRoYXQKLSAgICB1c2UgcHJlLUMxMSB0 b29sY2hhaW5zLCBlLmcuIEZyZWVCU0QncyBtaXBzLiAgKEBqYXNvbmUpCi0KLSogNC4zLjAgKE5v dmVtYmVyIDQsIDIwMTYpCi0KLSAgVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHBhc3Nl cyB0aGUgdGVzdCBzdWl0ZSBmb3IgbXVsdGlwbGUgV2luZG93cwotICBjb25maWd1cmF0aW9ucywg dGhhbmtzIGluIGxhcmdlIHBhcnQgdG8gQGdsYW5kaXVtIHNldHRpbmcgdXAgY29udGludW91cwot ICBpbnRlZ3JhdGlvbiB2aWEgQXBwVmV5b3IgKGFuZCBUcmF2aXMgQ0kgZm9yIExpbnV4IGFuZCBP UyBYKS4KLQotICBOZXcgZmVhdHVyZXM6Ci0gIC0gQWRkICJKIiAoSlNPTikgc3VwcG9ydCB0byBt YWxsb2Nfc3RhdHNfcHJpbnQoKS4gIChAamFzb25lKQotICAtIEFkZCBDcmF5IGNvbXBpbGVyIHN1 cHBvcnQuICAoQHJvbmF3aG8pCi0KLSAgT3B0aW1pemF0aW9uczoKLSAgLSBBZGQvdXNlIGFkYXB0 aXZlIHNwaW5uaW5nIGZvciBib290c3RyYXBwaW5nIGFuZCByYWRpeCB0cmVlIG5vZGUKLSAgICBp bml0aWFsaXphdGlvbi4gIChAamFzb25lKQotCi0gIEJ1ZyBmaXhlczoKLSAgLSBGaXggbGFyZ2Ug YWxsb2NhdGlvbiB0byBzZWFyY2ggc3RhcnRpbmcgaW4gdGhlIG9wdGltYWwgc2l6ZSBjbGFzcyBo ZWFwLAotICAgIHdoaWNoIGNhbiBzdWJzdGFudGlhbGx5IHJlZHVjZSB2aXJ0dWFsIG1lbW9yeSBj aHVybiBhbmQgZnJhZ21lbnRhdGlvbi4gIFRoaXMKLSAgICByZWdyZXNzaW9uIHdhcyBmaXJzdCBy ZWxlYXNlZCBpbiA0LjAuMC4gIChAbWpwNDEsIEBqYXNvbmUpCi0gIC0gRml4IHN0YXRzLmFyZW5h cy48aT4ubnRocmVhZHMgYWNjb3VudGluZy4gIChAaW50ZXJ3cSkKLSAgLSBGaXggYW5kIHNpbXBs aWZ5IGRlY2F5LWJhc2VkIHB1cmdpbmcuICAoQGphc29uZSkKLSAgLSBNYWtlIERTUyAoc2Jyaygy KS1yZWxhdGVkKSBvcGVyYXRpb25zIGxvY2tsZXNzLCB3aGljaCByZXNvbHZlcyBwb3RlbnRpYWwK LSAgICBkZWFkbG9ja3MgZHVyaW5nIHRocmVhZCBleGl0LiAgKEBqYXNvbmUpCi0gIC0gRml4IG92 ZXItc2l6ZWQgYWxsb2NhdGlvbiBvZiByYWRpeCB0cmVlIGxlYWYgbm9kZXMuICAoQG1qcDQxLCBA b2dhdW4sCi0gICAgQGphc29uZSkKLSAgLSBGaXggb3Zlci1zaXplZCBhbGxvY2F0aW9uIG9mIGFy ZW5hX3QgKHBsdXMgYXNzb2NpYXRlZCBzdGF0cykgZGF0YQotICAgIHN0cnVjdHVyZXMuICAoQGph c29uZSwgQGludGVyd3EpCi0gIC0gRml4IEVYVFJBX0NGTEFHUyB0byBub3QgYWZmZWN0IGNvbmZp Z3VyYXRpb24uICAoQGphc29uZSkKLSAgLSBGaXggYSBWYWxncmluZCBpbnRlZ3JhdGlvbiBidWcu ICAoQHJvbmF3aG8pCi0gIC0gRGlzYWxsb3cgMHg1YSBqdW5rIGZpbGxpbmcgd2hlbiBydW5uaW5n IGluIFZhbGdyaW5kLiAgKEBqYXNvbmUpCi0gIC0gRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsg b24gTGludXguICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJlbGVhc2VkIGluCi0gICAgNC4y LjAuICAoQHZzYXJ1bmFzLCBAamFzb25lKQotICAtIEZpeCBzdGF0aWMgbGlua2luZyBvZiBqZW1h bGxvYyB3aXRoIGdsaWJjLiAgKEBkandhdHNvbikKLSAgLSBVc2Ugc3lzY2FsbCgyKSByYXRoZXIg dGhhbiB7b3BlbixyZWFkLGNsb3NlfSgyKSBkdXJpbmcgYm9vdCBvbiBMaW51eC4gIFRoaXMKLSAg ICB3b3JrcyBhcm91bmQgb3RoZXIgbGlicmFyaWVzJyBzeXN0ZW0gY2FsbCB3cmFwcGVycyBwZXJm b3JtaW5nIHJlZW50cmFudAotICAgIGFsbG9jYXRpb24uICAoQGtzcGlua2EsIEBXaGlzc2ksIEBq YXNvbmUpCi0gIC0gRml4IE9TIFggZGVmYXVsdCB6b25lIHJlcGxhY2VtZW50IHRvIHdvcmsgd2l0 aCBPUyBYIDEwLjEyLiAgKEBnbGFuZGl1bSwKLSAgICBAamFzb25lKQotICAtIEZpeCBjYWNoZWQg bWVtb3J5IG1hbmFnZW1lbnQgdG8gYXZvaWQgbmVlZGxlc3MgY29tbWl0L2RlY29tbWl0IG9wZXJh dGlvbnMKLSAgICBkdXJpbmcgcHVyZ2luZywgd2hpY2ggcmVzb2x2ZXMgcGVybWFuZW50IHZpcnR1 YWwgbWVtb3J5IG1hcCBmcmFnbWVudGF0aW9uCi0gICAgaXNzdWVzIG9uIFdpbmRvd3MuICAoQG1q cDQxLCBAamFzb25lKQotICAtIEZpeCBUU0QgZmV0Y2hlcyB0byBhdm9pZCAocmVjdXJzaXZlKSBh bGxvY2F0aW9uLiAgVGhpcyBpcyByZWxldmFudCB0bwotICAgIG5vbi1UTFMgYW5kIFdpbmRvd3Mg Y29uZmlndXJhdGlvbnMuICAoQGphc29uZSkKLSAgLSBGaXggbWFsbG9jX2NvbmYgb3ZlcnJpZGlu ZyB0byB3b3JrIG9uIFdpbmRvd3MuICAoQGphc29uZSkKLSAgLSBGb3JjaWJseSBkaXNhYmxlIGxh enktbG9jayBvbiBXaW5kb3dzICh3YXMgZm9yY2libHkgKmVuYWJsZWQqKS4gIChAamFzb25lKQot Ci0qIDQuMi4xIChKdW5lIDgsIDIwMTYpCi0KLSAgQnVnIGZpeGVzOgotICAtIEZpeCBib290c3Ry YXBwaW5nIGlzc3VlcyBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCByZXF1aXJlIGFsbG9jYXRpb24g ZHVyaW5nCi0gICAgdHNkIGluaXRpYWxpemF0aW9uIChlLmcuIC0tZGlzYWJsZS10bHMpLiAgKEBj ZmVycmlzMTAwMCwgQGphc29uZSkKLSAgLSBGaXggZ2V0dGltZW9mZGF5KCkgdmVyc2lvbiBvZiBu c3RpbWVfdXBkYXRlKCkuICAoQHJvbmF3aG8pCi0gIC0gRml4IFZhbGdyaW5kIHJlZ3Jlc3Npb25z IGluIGNhbGxvYygpIGFuZCBjaHVua19hbGxvY193cmFwcGVyKCkuICAoQHJvbmF3aG8pCi0gIC0g Rml4IHBvdGVudGlhbCBWTSBtYXAgZnJhZ21lbnRhdGlvbiByZWdyZXNzaW9uLiAgKEBqYXNvbmUp Ci0gIC0gRml4IG9wdF96ZXJvLXRyaWdnZXJlZCBpbi1wbGFjZSBodWdlIHJlYWxsb2NhdGlvbiB6 ZXJvaW5nLiAgKEBqYXNvbmUpCi0gIC0gRml4IGhlYXAgcHJvZmlsaW5nIGNvbnRleHQgbGVha3Mg aW4gcmVhbGxvY2F0aW9uIGVkZ2UgY2FzZXMuICAoQGphc29uZSkKLQotKiA0LjIuMCAoTWF5IDEy LCAyMDE2KQotCi0gIE5ldyBmZWF0dXJlczoKLSAgLSBBZGQgdGhlIGFyZW5hLjxpPi5yZXNldCBt YWxsY3RsLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXNjYXJkIGFsbCBvZgotICAgIGFu IGFyZW5hJ3MgYWxsb2NhdGlvbnMgaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiAgKEBqYXNvbmUpCi0g IC0gQWRkIHRoZSBzdGF0cy5yZXRhaW5lZCBhbmQgc3RhdHMuYXJlbmFzLjxpPi5yZXRhaW5lZCBz dGF0aXN0aWNzLiAgKEBqYXNvbmUpCi0gIC0gQWRkIHRoZSAtLXdpdGgtdmVyc2lvbiBjb25maWd1 cmUgb3B0aW9uLiAgKEBqYXNvbmUpCi0gIC0gU3VwcG9ydCAtLXdpdGgtbGctcGFnZSB2YWx1ZXMg bGFyZ2VyIHRoYW4gYWN0dWFsIHBhZ2Ugc2l6ZS4gIChAamFzb25lKQotCi0gIE9wdGltaXphdGlv bnM6Ci0gIC0gVXNlIHBhaXJpbmcgaGVhcHMgcmF0aGVyIHRoYW4gcmVkLWJsYWNrIHRyZWVzIGZv ciB2YXJpb3VzIGhvdCBkYXRhCi0gICAgc3RydWN0dXJlcy4gIChAZGp3YXRzb24sIEBqYXNvbmUp Ci0gIC0gU3RyZWFtbGluZSBmYXN0IHBhdGhzIG9mIHJ0cmVlIG9wZXJhdGlvbnMuICAoQGphc29u ZSkKLSAgLSBPcHRpbWl6ZSB0aGUgZmFzdCBwYXRocyBvZiBjYWxsb2MoKSBhbmQgW20sZCxzZF1h bGxvY3goKS4gIChAamFzb25lKQotICAtIERlY29tbWl0IHVudXNlZCB2aXJ0dWFsIG1lbW9yeSBp ZiB0aGUgT1MgZG9lcyBub3Qgb3ZlcmNvbW1pdC4gIChAamFzb25lKQotICAtIFNwZWNpZnkgTUFQ X05PUkVTRVJWRSBvbiBMaW51eCBpZiBbaGV1cmlzdGljXSBvdmVyY29tbWl0IGlzIGFjdGl2ZSwg aW4gb3JkZXIKLSAgICB0byBhdm9pZCB1bmZvcnR1bmF0ZSBpbnRlcmFjdGlvbnMgZHVyaW5nIGZv cmsoMikuICAoQGphc29uZSkKLQotICBCdWcgZml4ZXM6Ci0gIC0gRml4IGNodW5rIGFjY291bnRp bmcgcmVsYXRlZCB0byB0cmlnZ2VyaW5nIGdkdW1wIHByb2ZpbGVzLiAgKEBqYXNvbmUpCi0gIC0g TGluayBhZ2FpbnN0IGxpYnJ0IGZvciBjbG9ja19nZXR0aW1lKDIpIGlmIGdsaWJjIDwgMi4xNy4g IChAamFzb25lKQotICAtIFNjYWxlIGxlYWsgcmVwb3J0IHN1bW1hcnkgYWNjb3JkaW5nIHRvIHNh bXBsaW5nIHByb2JhYmlsaXR5LiAgKEBqYXNvbmUpCi0KLSogNC4xLjEgKE1heSAzLCAyMDE2KQot Ci0gIFRoaXMgYnVnZml4IHJlbGVhc2UgcmVzb2x2ZXMgYSB2YXJpZXR5IG9mIG1vc3RseSBtaW5v ciBpc3N1ZXMsIHRob3VnaCB0aGUKLSAgYml0bWFwIGZpeCBpcyBjcml0aWNhbCBmb3IgNjQtYml0 IFdpbmRvd3MuCi0KLSAgQnVnIGZpeGVzOgotICAtIEZpeCB0aGUgbGluZWFyIHNjYW4gdmVyc2lv biBvZiBiaXRtYXBfc2Z1KCkgdG8gc2hpZnQgYnkgdGhlIHByb3BlciBhbW91bnQKLSAgICBldmVu IHdoZW4gc2l6ZW9mKGxvbmcpIGlzIG5vdCB0aGUgc2FtZSBhcyBzaXplb2Yodm9pZCAqKSwgYXMg b24gNjQtYml0Ci0gICAgV2luZG93cy4gIChAamFzb25lKQotICAtIEZpeCBoYXNoaW5nIGZ1bmN0 aW9ucyB0byBhdm9pZCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzIChhbmQgcmVzdWx0aW5nCi0g ICAgY3Jhc2hlcykuICBUaGlzIGlzIHJlbGV2YW50IGF0IGxlYXN0IHRvIHNvbWUgQVJNLWJhc2Vk IHBsYXRmb3Jtcy4KLSAgICAoQHJrbWlzcmEpCi0gIC0gRml4IGZvcmsoKS1yZWxhdGVkIGxvY2sg cmFuayBvcmRlcmluZyByZXZlcnNhbHMuICBUaGVzZSByZXZlcnNhbHMgd2VyZQotICAgIHVubGlr ZWx5IHRvIGNhdXNlIGRlYWRsb2NrcyBpbiBwcmFjdGljZSBleGNlcHQgd2hlbiBoZWFwIHByb2Zp bGluZyB3YXMKLSAgICBlbmFibGVkIGFuZCBhY3RpdmUuICAoQGphc29uZSkKLSAgLSBGaXggdmFy aW91cyBjaHVuayBsZWFrcyBpbiBPT00gY29kZSBwYXRocy4gIChAamFzb25lKQotICAtIEZpeCBt YWxsb2Nfc3RhdHNfcHJpbnQoKSB0byBwcmludCBvcHQubmFyZW5hcyBjb3JyZWN0bHkuICAoQGph c29uZSkKLSAgLSBGaXggTVNWQy1zcGVjaWZpYyBidWlsZC90ZXN0IGlzc3Vlcy4gIChAcnVzdHl4 LCBAeXVzbGVwdWtoaW4pCi0gIC0gRml4IGEgdmFyaWV0eSBvZiB0ZXN0IGZhaWx1cmVzIHRoYXQg d2VyZSBkdWUgdG8gdGVzdCBmcmFnaWxpdHkgcmF0aGVyIHRoYW4KLSAgICBjb3JlIGJ1Z3MuICAo QGphc29uZSkKLQotKiA0LjEuMCAoRmVicnVhcnkgMjgsIDIwMTYpCi0KLSAgVGhpcyByZWxlYXNl IGlzIHByaW1hcmlseSBhYm91dCBvcHRpbWl6YXRpb25zLCBidXQgaXQgYWxzbyBpbmNvcnBvcmF0 ZXMgYSBsb3QKLSAgb2YgcG9ydGFiaWxpdHktbW90aXZhdGVkIHJlZmFjdG9yaW5nIGFuZCBlbmhh bmNlbWVudHMuICBNYW55IHBlb3BsZSB3b3JrZWQgb24KLSAgdGhpcyByZWxlYXNlLCB0byBhbiBl eHRlbnQgdGhhdCBldmVuIHdpdGggdGhlIG9taXNzaW9uIGhlcmUgb2YgbWlub3IgY2hhbmdlcwot ICAoc2VlIGdpdCByZXZpc2lvbiBoaXN0b3J5KSwgYW5kIG9mIHRoZSBwZW9wbGUgd2hvIHJlcG9y dGVkIGFuZCBkaWFnbm9zZWQKLSAgaXNzdWVzLCBzbyBtdWNoIG9mIHRoZSB3b3JrIHdhcyBjb250 cmlidXRlZCB0aGF0IHN0YXJ0aW5nIHdpdGggdGhpcyByZWxlYXNlLAotICBjaGFuZ2VzIGFyZSBh bm5vdGF0ZWQgd2l0aCBhdXRob3IgY3JlZGl0cyB0byBoZWxwIHJlZmxlY3QgdGhlIGNvbGxhYm9y YXRpdmUKLSAgZWZmb3J0IGludm9sdmVkLgotCi0gIE5ldyBmZWF0dXJlczoKLSAgLSBJbXBsZW1l bnQgZGVjYXktYmFzZWQgdW51c2VkIGRpcnR5IHBhZ2UgcHVyZ2luZywgYSBtYWpvciBvcHRpbWl6 YXRpb24gd2l0aAotICAgIG1hbGxjdGwgQVBJIGltcGFjdC4gIFRoaXMgaXMgYW4gYWx0ZXJuYXRp dmUgdG8gdGhlIGV4aXN0aW5nIHJhdGlvLWJhc2VkCi0gICAgdW51c2VkIGRpcnR5IHBhZ2UgcHVy Z2luZywgYW5kIGlzIGludGVuZGVkIHRvIGV2ZW50dWFsbHkgYmVjb21lIHRoZSBzb2xlCi0gICAg cHVyZ2luZyBtZWNoYW5pc20uICBOZXcgbWFsbGN0bHM6Ci0gICAgKyBvcHQucHVyZ2UKLSAgICAr IG9wdC5kZWNheV90aW1lCi0gICAgKyBhcmVuYS48aT4uZGVjYXkKLSAgICArIGFyZW5hLjxpPi5k ZWNheV90aW1lCi0gICAgKyBhcmVuYXMuZGVjYXlfdGltZQotICAgICsgc3RhdHMuYXJlbmFzLjxp Pi5kZWNheV90aW1lCi0gICAgKEBqYXNvbmUsIEBjZXZhbnM4NykKLSAgLSBBZGQgLS13aXRoLW1h bGxvYy1jb25mLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBlbWJlZCBhIGRlZmF1bHQKLSAg ICBvcHRpb25zIHN0cmluZyBkdXJpbmcgY29uZmlndXJhdGlvbi4gIFRoaXMgd2FzIG1vdGl2YXRl ZCBieSB0aGUgZGVzaXJlIHRvCi0gICAgc3BlY2lmeSAtLXdpdGgtbWFsbG9jLWNvbmY9cHVyZ2U6 ZGVjYXkgLCBzaW5jZSB0aGUgZGVmYXVsdCBtdXN0IHJlbWFpbgotICAgIHB1cmdlOnJhdGlvIHVu dGlsIHRoZSA1LjAuMCByZWxlYXNlLiAgKEBqYXNvbmUpCi0gIC0gQWRkIE1TIFZpc3VhbCBTdHVk aW8gMjAxNSBzdXBwb3J0LiAgKEBydXN0eXgsIEB5dXNsZXB1a2hpbikKLSAgLSBNYWtlICphbGxv Y3goKSBzaXplIGNsYXNzIG92ZXJmbG93IGJlaGF2aW9yIGRlZmluZWQuICBUaGUgbWF4aW11bQot ICAgIHNpemUgY2xhc3MgaXMgbm93IGxlc3MgdGhhbiBQVFJESUZGX01BWCB0byBwcm90ZWN0IGFw cGxpY2F0aW9ucyBhZ2FpbnN0Ci0gICAgbnVtZXJpY2FsIG92ZXJmbG93LCBhbmQgYWxsIGFsbG9j YXRpb24gZnVuY3Rpb25zIGFyZSBndWFyYW50ZWVkIHRvIGluZGljYXRlCi0gICAgZXJyb3JzIHJh dGhlciB0aGFuIHBvdGVudGlhbGx5IGNyYXNoaW5nIGlmIHRoZSByZXF1ZXN0IHNpemUgZXhjZWVk cyB0aGUKLSAgICBtYXhpbXVtIHNpemUgY2xhc3MuICAoQGphc29uZSkKLSAgLSBqZXByb2Y6Ci0g ICAgKyBBZGQgcmF3IGhlYXAgcHJvZmlsZSBzdXBwb3J0LiAgKEBqYXNvbmUpCi0gICAgKyBBZGQg LS1yZXRhaW4gYW5kIC0tZXhjbHVkZSBmb3IgYmFja3RyYWNlIHN5bWJvbCBmaWx0ZXJpbmcuICAo QGphc29uZSkKLQotICBPcHRpbWl6YXRpb25zOgotICAtIE9wdGltaXplIHRoZSBmYXN0IHBhdGgg dG8gY29tYmluZSB2YXJpb3VzIGJvb3RzdHJhcHBpbmcgYW5kIGNvbmZpZ3VyYXRpb24KLSAgICBj aGVja3MgYW5kIGV4ZWN1dGUgbW9yZSBzdHJlYW1saW5lZCBjb2RlIGluIHRoZSBjb21tb24gY2Fz ZS4gIChAaW50ZXJ3cSkKLSAgLSBVc2UgbGluZWFyIHNjYW4gZm9yIHNtYWxsIGJpdG1hcHMgKHVz ZWQgZm9yIHNtYWxsIG9iamVjdCB0cmFja2luZykuICBJbgotICAgIGFkZGl0aW9uIHRvIHNwZWVk aW5nIHVwIGJpdG1hcCBvcGVyYXRpb25zIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGlzIHJlZHVjZXMK LSAgICBhbGxvY2F0b3IgbWV0YWRhdGEgb3ZlcmhlYWQgYnkgYXBwcm94aW1hdGVseSAwLjIlLiAg KEBkandhdHNvbikKLSAgLSBTZXBhcmF0ZSBhcmVuYV9hdmFpbCB0cmVlcywgd2hpY2ggc3Vic3Rh bnRpYWxseSBzcGVlZHMgdXAgcnVuIHRyZWUKLSAgICBvcGVyYXRpb25zLiAgKEBkandhdHNvbikK LSAgLSBVc2UgbWVtb2l6YXRpb24gKGJvb3QtdGltZS1jb21wdXRlZCB0YWJsZSkgZm9yIHJ1biBx dWFudGl6YXRpb24uICBTZXBhcmF0ZQotICAgIGFyZW5hX2F2YWlsIHRyZWVzIHJlZHVjZWQgdGhl IGltcG9ydGFuY2Ugb2YgdGhpcyBvcHRpbWl6YXRpb24uICAoQGphc29uZSkKLSAgLSBBdHRlbXB0 IG1tYXAtYmFzZWQgaW4tcGxhY2UgaHVnZSByZWFsbG9jYXRpb24uICBUaGlzIGNhbiBkcmFtYXRp Y2FsbHkgc3BlZWQKLSAgICB1cCBpbmNyZW1lbnRhbCBodWdlIHJlYWxsb2NhdGlvbi4gIChAamFz b25lKQotCi0gIEluY29tcGF0aWJsZSBjaGFuZ2VzOgotICAtIE1ha2Ugb3B0Lm5hcmVuYXMgdW5z aWduZWQgcmF0aGVyIHRoYW4gc2l6ZV90LiAgKEBqYXNvbmUpCi0KLSAgQnVnIGZpeGVzOgotICAt IEZpeCBzdGF0cy5jYWN0aXZlIGFjY291bnRpbmcgcmVncmVzc2lvbi4gIChAcnVzdHl4LCBAamFz b25lKQotICAtIEhhbmRsZSB1bmFsaWduZWQga2V5cyBpbiBoYXNoKCkuICBUaGlzIGNhdXNlZCBw cm9ibGVtcyBmb3Igc29tZSBBUk0gc3lzdGVtcy4KLSAgICAoQGphc29uZSwgQGNmZXJyaXMxMDAw KQotICAtIFJlZmFjdG9yIGFyZW5hcyBhcnJheS4gIEluIGFkZGl0aW9uIHRvIGZpeGluZyBhIGZv cmstcmVsYXRlZCBkZWFkbG9jaywgdGhpcwotICAgIG1ha2VzIGFyZW5hIGxvb2t1cHMgZmFzdGVy IGFuZCBzaW1wbGVyLiAgKEBqYXNvbmUpCi0gIC0gTW92ZSByZXRhaW5lZCBtZW1vcnkgYWxsb2Nh dGlvbiBvdXQgb2YgdGhlIGRlZmF1bHQgY2h1bmsgYWxsb2NhdGlvbgotICAgIGZ1bmN0aW9uLCB0 byBhIGxvY2F0aW9uIHRoYXQgZ2V0cyBleGVjdXRlZCBldmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBp bnN0YWxscwotICAgIGEgY3VzdG9tIGNodW5rIGFsbG9jYXRpb24gZnVuY3Rpb24uICBUaGlzIHJl c29sdmVzIGEgdmlydHVhbCBtZW1vcnkgbGVhay4KLSAgICAoQGJ1Y2hncikKLSAgLSBGaXggYSBw b3RlbnRpYWwgdHNkIGNsZWFudXAgbGVhay4gIChAY2ZlcnJpczEwMDAsIEBqYXNvbmUpCi0gIC0g Rml4IHJ1biBxdWFudGl6YXRpb24uICBJbiBwcmFjdGljZSB0aGlzIGJ1ZyBoYWQgbm8gaW1wYWN0 IHVubGVzcwotICAgIGFwcGxpY2F0aW9ucyByZXF1ZXN0ZWQgbWVtb3J5IHdpdGggYWxpZ25tZW50 IGV4Y2VlZGluZyBvbmUgcGFnZS4KLSAgICAoQGphc29uZSwgQGRqd2F0c29uKQotICAtIEZpeCBM aW51eFRocmVhZHMtc3BlY2lmaWMgYm9vdHN0cmFwcGluZyBkZWFkbG9jay4gIChDb3NtaW4gUGFy YXNjaGl2KQotICAtIGplcHJvZjoKLSAgICArIERvbid0IGRpc2NhcmQgY3VybCBvcHRpb25zIGlm IHRpbWVvdXQgaXMgbm90IGRlZmluZWQuICAoQGRqd2F0c29uKQotICAgICsgRGV0ZWN0IGZhaWxl ZCBwcm9maWxlIGZldGNoZXMuICAoQGRqd2F0c29uKQotICAtIEZpeCBzdGF0cy5hcmVuYXMuPGk+ Lntkc3MsbGdfZGlydHlfbXVsdCxkZWNheV90aW1lLHBhY3RpdmUscGRpcnR5fSBmb3IKLSAgICAt LWRpc2FibGUtc3RhdHMgY2FzZS4gIChAamFzb25lKQotCi0qIDQuMC40IChPY3RvYmVyIDI0LCAy MDE1KQotCi0gIFRoaXMgYnVnZml4IHJlbGVhc2UgZml4ZXMgYW5vdGhlciB4YWxsb2N4KCkgcmVn cmVzc2lvbi4gIE5vIG90aGVyIHJlZ3Jlc3Npb25zCi0gIGhhdmUgY29tZSB0byBsaWdodCBpbiBv dmVyIGEgbW9udGgsIHNvIHRoaXMgaXMgbGlrZWx5IGEgZ29vZCBzdGFydGluZyBwb2ludAotICBm b3IgcGVvcGxlIHdobyBwcmVmZXIgdG8gd2FpdCBmb3IgImRvdCBvbmUiIHJlbGVhc2VzIHdpdGgg YWxsIHRoZSBtYWpvciBpc3N1ZXMKLSAgc2hha2VuIG91dC4KLQotICBCdWcgZml4ZXM6Ci0gIC0g Rml4IHhhbGxvY3goLi4uLCBNQUxMT0NYX1pFUk8gdG8gemVybyB0aGUgbGFzdCBmdWxsIHRyYWls aW5nIHBhZ2Ugb2YgbGFyZ2UKLSAgICBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiByYW5kb21s eSBhc3NpZ25lZCBhbiBvZmZzZXQgb2YgMCB3aGVuCi0gICAgLS1lbmFibGUtY2FjaGUtb2JsaXZp b3VzIGNvbmZpZ3VyZSBvcHRpb24gaXMgZW5hYmxlZC4KLQotKiA0LjAuMyAoU2VwdGVtYmVyIDI0 LCAyMDE1KQotCi0gIFRoaXMgYnVnZml4IHJlbGVhc2UgY29udGludWVzIHRoZSB0cmVuZCBvZiB4 YWxsb2N4KCkgYW5kIGhlYXAgcHJvZmlsaW5nIGZpeGVzLgotCi0gIEJ1ZyBmaXhlczoKLSAgLSBG aXggeGFsbG9jeCguLi4sIE1BTExPQ1hfWkVSTykgdG8gemVybyBhbGwgdHJhaWxpbmcgYnl0ZXMg b2YgbGFyZ2UKLSAgICBhbGxvY2F0aW9ucyB3aGVuIC0tZW5hYmxlLWNhY2hlLW9ibGl2aW91cyBj b25maWd1cmUgb3B0aW9uIGlzIGVuYWJsZWQuCi0gIC0gRml4IHhhbGxvY3goLi4uLCBNQUxMT0NY X1pFUk8pIHRvIHplcm8gdHJhaWxpbmcgYnl0ZXMgb2YgaHVnZSBhbGxvY2F0aW9ucwotICAgIHdo ZW4gcmVzaXppbmcgZnJvbS90byBhIHNpemUgY2xhc3MgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBv ZiB0aGUgY2h1bmsgc2l6ZS4KLSAgLSBGaXggcHJvZl90Y3R4X2R1bXBfaXRlcigpIHRvIGZpbHRl ciBvdXQgbm9kZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgYWZ0ZXIgaGVhcAotICAgIHByb2ZpbGUgZHVt cGluZyBzdGFydGVkLgotICAtIFdvcmsgYXJvdW5kIGEgcG90ZW50aWFsbHkgYmFkIHRocmVhZC1z cGVjaWZpYyBkYXRhIGluaXRpYWxpemF0aW9uCi0gICAgaW50ZXJhY3Rpb24gd2l0aCBOUFRMIChn bGliYydzIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uKS4KLQotKiA0LjAuMiAoU2VwdGVtYmVyIDIx LCAyMDE1KQotCi0gIFRoaXMgYnVnZml4IHJlbGVhc2UgYWRkcmVzc2VzIGEgZmV3IGJ1Z3Mgc3Bl Y2lmaWMgdG8gaGVhcCBwcm9maWxpbmcuCi0KLSAgQnVnIGZpeGVzOgotICAtIEZpeCBpeGFsbG9j eF9wcm9mX3NhbXBsZSgpIHRvIG5ldmVyIG1vZGlmeSBub3IgY3JlYXRlIHNhbXBsZWQgc21hbGwK LSAgICBhbGxvY2F0aW9ucy4gIHhhbGxvY3goKSBpcyBpbiBnZW5lcmFsIGluY2FwYWJsZSBvZiBt b3Zpbmcgc21hbGwgYWxsb2NhdGlvbnMsCi0gICAgc28gdGhpcyBmaXggcmVtb3ZlcyBidWdneSBj b2RlIHdpdGhvdXQgbG9zcyBvZiBnZW5lcmFsaXR5LgotICAtIEZpeCBpcmFsbG9jeF9wcm9mX3Nh bXBsZSgpIHRvIGFsd2F5cyBhbGxvY2F0ZSBsYXJnZSByZWdpb25zLCBldmVuIHdoZW4KLSAgICBh bGlnbm1lbnQgaXMgbm9uLXplcm8uCi0gIC0gRml4IHByb2ZfYWxsb2Nfcm9sbGJhY2soKSB0byBy ZWFkIHRkYXRhIGZyb20gdGhyZWFkLXNwZWNpZmljIGRhdGEgcmF0aGVyCi0gICAgdGhhbiBkZXJl ZmVyZW5jaW5nIGEgcG90ZW50aWFsbHkgaW52YWxpZCB0Y3R4LgotCi0qIDQuMC4xIChTZXB0ZW1i ZXIgMTUsIDIwMTUpCi0KLSAgVGhpcyBpcyBhIGJ1Z2ZpeCByZWxlYXNlIHRoYXQgaXMgc29tZXdo YXQgaGlnaCByaXNrIGR1ZSB0byB0aGUgYW1vdW50IG9mCi0gIHJlZmFjdG9yaW5nIHJlcXVpcmVk IHRvIGFkZHJlc3MgZGVlcCB4YWxsb2N4KCkgcHJvYmxlbXMuICBBcyBhIHNpZGUgZWZmZWN0IG9m Ci0gIHRoZXNlIGZpeGVzLCB4YWxsb2N4KCkgbm93IHRyaWVzIGhhcmRlciB0byBwYXJ0aWFsbHkg ZnVsZmlsbCByZXF1ZXN0cyBmb3IKLSAgb3B0aW9uYWwgZXh0cmEgc3BhY2UuICBOb3RlIHRoYXQg YSBjb3VwbGUgb2YgbWlub3IgaGVhcCBwcm9maWxpbmcKLSAgb3B0aW1pemF0aW9ucyBhcmUgaW5j bHVkZWQsIGJ1dCB0aGVzZSBhcmUgYmV0dGVyIHRob3VnaHQgb2YgYXMgcGVyZm9ybWFuY2UKLSAg Zml4ZXMgdGhhdCB3ZXJlIGludGVncmFsIHRvIGRpc2NvdmVyaW5nIG1vc3Qgb2YgdGhlIG90aGVy IGJ1Z3MuCi0KLSAgT3B0aW1pemF0aW9uczoKLSAgLSBBdm9pZCBhIGNodW5rIG1ldGFkYXRhIHJl YWQgaW4gYXJlbmFfcHJvZl90Y3R4X3NldCgpLCBzaW5jZSBpdCBpcyBpbiB0aGUKLSAgICBmYXN0 IHBhdGggd2hlbiBoZWFwIHByb2ZpbGluZyBpcyBlbmFibGVkLiAgQWRkaXRpb25hbGx5LCBzcGxp dCBhIHNwZWNpYWwKLSAgICBjYXNlIG91dCBpbnRvIGFyZW5hX3Byb2ZfdGN0eF9yZXNldCgpLCB3 aGljaCBhbHNvIGF2b2lkcyBjaHVuayBtZXRhZGF0YQotICAgIHJlYWRzLgotICAtIE9wdGltaXpl IGlyYWxsb2N4X3Byb2YoKSB0byBvcHRpbWlzdGljYWxseSB1cGRhdGUgdGhlIHNhbXBsZXIgc3Rh dGUuICBUaGUKLSAgICBwcmlvciBpbXBsZW1lbnRhdGlvbiBhcHBlYXJzIHRvIGhhdmUgYmVlbiBh IGhvbGRvdmVyIGZyb20gd2hlbgotICAgIHJhbGxvY3goKS94YWxsb2N4KCkgZnVuY3Rpb25hbGl0 eSB3YXMgY29tYmluZWQgYXMgcmFsbG9jbSgpLgotCi0gIEJ1ZyBmaXhlczoKLSAgLSBGaXggVExT IGNvbmZpZ3VyYXRpb24gc3VjaCB0aGF0IGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgcGxh dGZvcm1zIG9uCi0gICAgd2hpY2ggaXQgd29ya3MgY29ycmVjdGx5LgotICAtIEZpeCBhcmVuYXNf Y2FjaGVfY2xlYW51cCgpIGFuZCBhcmVuYV9nZXRfaGFyZCgpIHRvIGhhbmRsZQotICAgIGFsbG9j YXRpb24vZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYXBwbGljYXRpb24ncyB0aHJlYWQtc3BlY2lm aWMgZGF0YQotICAgIGNsZWFudXAgZnVuY3Rpb25zIGV2ZW4gYWZ0ZXIgYXJlbmFzX2NhY2hlIGlz IHRvcm4gZG93bi4KLSAgLSBGaXggeGFsbG9jeCgpIGJ1Z3MgcmVsYXRlZCB0byBzaXplK2V4dHJh IGV4Y2VlZGluZyBIVUdFX01BWENMQVNTLgotICAtIEZpeCBjaHVuayBwdXJnZSBob29rIGNhbGxz IGZvciBpbi1wbGFjZSBodWdlIHNocmlua2luZyByZWFsbG9jYXRpb24gdG8KLSAgICBzcGVjaWZ5 IHRoZSBvbGQgY2h1bmsgc2l6ZSByYXRoZXIgdGhhbiB0aGUgbmV3IGNodW5rIHNpemUuICBUaGlz IGJ1ZyBjYXVzZWQKLSAgICBubyBjb3JyZWN0bmVzcyBpc3N1ZXMgZm9yIHRoZSBkZWZhdWx0IGNo dW5rIHB1cmdlIGZ1bmN0aW9uLCBidXQgd2FzCi0gICAgdmlzaWJsZSB0byBjdXN0b20gZnVuY3Rp b25zIHNldCB2aWEgdGhlICJhcmVuYS48aT4uY2h1bmtfaG9va3MiIG1hbGxjdGwuCi0gIC0gRml4 IGhlYXAgcHJvZmlsaW5nIGJ1Z3M6Ci0gICAgKyBGaXggaGVhcCBwcm9maWxpbmcgdG8gZGlzdGlu Z3Vpc2ggYW1vbmcgb3RoZXJ3aXNlIGlkZW50aWNhbCBzYW1wbGUgc2l0ZXMKLSAgICAgIHdpdGgg aW50ZXJwb3NlZCByZXNldHMgKHRyaWdnZXJlZCB2aWEgdGhlICJwcm9mLnJlc2V0IiBtYWxsY3Rs KS4gIFRoaXMgYnVnCi0gICAgICBjb3VsZCBjYXVzZSBkYXRhIHN0cnVjdHVyZSBjb3JydXB0aW9u IHRoYXQgd291bGQgbW9zdCBsaWtlbHkgcmVzdWx0IGluIGEKLSAgICAgIHNlZ2ZhdWx0LgotICAg ICsgRml4IGlyZWFsbG9jX3Byb2YoKSB0byBwcm9mX2FsbG9jX3JvbGxiYWNrKCkgb24gT09NLgot ICAgICsgTWFrZSBvbmUgY2FsbCB0byBwcm9mX2FjdGl2ZV9nZXRfdW5sb2NrZWQoKSBwZXIgYWxs b2NhdGlvbiBldmVudCwgYW5kIHVzZQotICAgICAgdGhlIHJlc3VsdCB0aHJvdWdob3V0IHRoZSBy ZWxldmFudCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgYW4gYWxsb2NhdGlvbgotICAgICAgZXZlbnQu ICBBbHNvIGFkZCBhIG1pc3NpbmcgY2hlY2sgaW4gcHJvZl9yZWFsbG9jKCkuICBUaGVzZSBmaXhl cyBwcm90ZWN0Ci0gICAgICBhbGxvY2F0aW9uIGV2ZW50cyBhZ2FpbnN0IGNvbmN1cnJlbnQgcHJv Zl9hY3RpdmUgY2hhbmdlcy4KLSAgICArIEZpeCBpeGFsbG9jeF9wcm9mKCkgdG8gcGFzcyB1c2l6 ZV9tYXggYW5kIHplcm8gdG8gaXhhbGxvY3hfcHJvZl9zYW1wbGUoKQotICAgICAgaW4gdGhlIGNv cnJlY3Qgb3JkZXIuCi0gICAgKyBGaXggcHJvZl9yZWFsbG9jKCkgdG8gY2FsbCBwcm9mX2ZyZWVf c2FtcGxlZF9vYmplY3QoKSBhZnRlciBjYWxsaW5nCi0gICAgICBwcm9mX21hbGxvY19zYW1wbGVf b2JqZWN0KCkuICBQcmlvciB0byB0aGlzIGZpeCwgaWYgdGN0eCBhbmQgb2xkX3RjdHggd2VyZQot ICAgICAgdGhlIHNhbWUsIHRoZSB0Y3R4IGNvdWxkIGhhdmUgYmVlbiBwcmVtYXR1cmVseSBkZXN0 cm95ZWQuCi0gIC0gRml4IHBvcnRhYmlsaXR5IGJ1Z3M6Ci0gICAgKyBEb24ndCBiaXRzaGlmdCBi eSBuZWdhdGl2ZSBhbW91bnRzIHdoZW4gZW5jb2RpbmcvZGVjb2RpbmcgcnVuIHNpemVzIGluCi0g ICAgICBjaHVuayBoZWFkZXIgbWFwcy4gIFRoaXMgYWZmZWN0ZWQgc3lzdGVtcyB3aXRoIHBhZ2Ug c2l6ZXMgZ3JlYXRlciB0aGFuIDgKLSAgICAgIEtpQi4KLSAgICArIFJlbmFtZSBpbmRleF90IHRv IHN6aW5kX3QgdG8gYXZvaWQgYW4gZXhpc3RpbmcgdHlwZSBvbiBTb2xhcmlzLgotICAgICsgQWRk IEpFTUFMTE9DX0NYWF9USFJPVyB0byB0aGUgbWVtYWxpZ24oKSBmdW5jdGlvbiBwcm90b3R5cGUs IGluIG9yZGVyIHRvCi0gICAgICBtYXRjaCBnbGliYyBhbmQgYXZvaWQgY29tcGlsYXRpb24gZXJy b3JzIHdoZW4gaW5jbHVkaW5nIGJvdGgKLSAgICAgIGplbWFsbG9jL2plbWFsbG9jLmggYW5kIG1h bGxvYy5oIGluIEMrKyBjb2RlLgotICAgICsgRG9uJ3QgYXNzdW1lIHRoYXQgL2Jpbi9zaCBpcyBh cHByb3ByaWF0ZSB3aGVuIHJ1bm5pbmcgc2l6ZV9jbGFzc2VzLnNoCi0gICAgICBkdXJpbmcgY29u ZmlndXJhdGlvbi4KLSAgICArIENvbnNpZGVyIF9fc3BhcmN2OSBhIHN5bm9ueW0gZm9yIF9fc3Bh cmM2NF9fIHdoZW4gZGVmaW5pbmcgTEdfUVVBTlRVTS4KLSAgICArIExpbmsgdGVzdHMgdG8gbGli cnQgaWYgaXQgY29udGFpbnMgY2xvY2tfZ2V0dGltZSgyKS4KLQotKiA0LjAuMCAoQXVndXN0IDE3 LCAyMDE1KQotCi0gIFRoaXMgdmVyc2lvbiBjb250YWlucyBtYW55IHNwZWVkIGFuZCBzcGFjZSBv cHRpbWl6YXRpb25zLCBib3RoIG1pbm9yIGFuZAotICBtYWpvci4gIFRoZSBtYWpvciB0aGVtZXMg YXJlIGdlbmVyYWxpemF0aW9uLCB1bmlmaWNhdGlvbiwgYW5kIHNpbXBsaWZpY2F0aW9uLgotICBB bHRob3VnaCBtYW55IG9mIHRoZXNlIG9wdGltaXphdGlvbnMgY2F1c2Ugbm8gdmlzaWJsZSBiZWhh dmlvciBjaGFuZ2UsIHRoZWlyCi0gIGN1bXVsYXRpdmUgZWZmZWN0IGlzIHN1YnN0YW50aWFsLgot Ci0gIE5ldyBmZWF0dXJlczoKLSAgLSBOb3JtYWxpemUgc2l6ZSBjbGFzcyBzcGFjaW5nIHRvIGJl IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBjb21wbGV0ZSBzaXplCi0gICAgcmFuZ2UuICBCeSBkZWZh dWx0IHRoZXJlIGFyZSBmb3VyIHNpemUgY2xhc3NlcyBwZXIgc2l6ZSBkb3VibGluZywgYnV0IHRo aXMKLSAgICBpcyBub3cgY29uZmlndXJhYmxlIHZpYSB0aGUgLS13aXRoLWxnLXNpemUtY2xhc3Mt Z3JvdXAgb3B0aW9uLiAgQWxzbyBhZGQgdGhlCi0gICAgLS13aXRoLWxnLXBhZ2UsIC0td2l0aC1s Zy1wYWdlLXNpemVzLCAtLXdpdGgtbGctcXVhbnR1bSwgYW5kCi0gICAgLS13aXRoLWxnLXRpbnkt bWluIG9wdGlvbnMsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHBhZ2UgYW5kIHNpemUgY2xh c3MKLSAgICBzZXR0aW5ncy4gIEltcGFjdHM6Ci0gICAgKyBXb3JzdCBjYXNlIHBlcmZvcm1hbmNl IGZvciBpbmNyZW1lbnRhbGx5IGdyb3dpbmcvc2hyaW5raW5nIHJlYWxsb2NhdGlvbgotICAgICAg aXMgaW1wcm92ZWQgYmVjYXVzZSB0aGVyZSBhcmUgZmFyIGZld2VyIHNpemUgY2xhc3NlcywgYW5k IHRoZXJlZm9yZQotICAgICAgY29weWluZyBoYXBwZW5zIGxlc3Mgb2Z0ZW4uCi0gICAgKyBJbnRl cm5hbCBmcmFnbWVudGF0aW9uIGlzIGxpbWl0ZWQgdG8gMjAlIGZvciBhbGwgYnV0IHRoZSBzbWFs bGVzdCBzaXplCi0gICAgICBjbGFzc2VzICh0aG9zZSBsZXNzIHRoYW4gZm91ciB0aW1lcyB0aGUg cXVhbnR1bSkuICAoMUIgKyA0IEtpQikKLSAgICAgIGFuZCAoMUIgKyA0IE1pQikgcHJldmlvdXNs eSBzdWZmZXJlZCBuZWFybHkgNTAlIGludGVybmFsIGZyYWdtZW50YXRpb24uCi0gICAgKyBDaHVu ayBmcmFnbWVudGF0aW9uIHRlbmRzIHRvIGJlIGxvd2VyIGJlY2F1c2UgdGhlcmUgYXJlIGZld2Vy IGRpc3RpbmN0IHJ1bgotICAgICAgc2l6ZXMgdG8gcGFjay4KLSAgLSBBZGQgc3VwcG9ydCBmb3Ig ZXhwbGljaXQgdGNhY2hlcy4gIFRoZSAidGNhY2hlLmNyZWF0ZSIsICJ0Y2FjaGUuZmx1c2giLCBh bmQKLSAgICAidGNhY2hlLmRlc3Ryb3kiIG1hbGxjdGxzIGNvbnRyb2wgdGNhY2hlIGxpZmV0aW1l IGFuZCBmbHVzaGluZywgYW5kIHRoZQotICAgIE1BTExPQ1hfVENBQ0hFKHRjKSBhbmQgTUFMTE9D WF9UQ0FDSEVfTk9ORSBmbGFncyB0byB0aGUgKmFsbG9jeCgpIEFQSQotICAgIGNvbnRyb2wgd2hp Y2ggdGNhY2hlIGlzIHVzZWQgZm9yIGVhY2ggb3BlcmF0aW9uLgotICAtIEltcGxlbWVudCBwZXIg dGhyZWFkIGhlYXAgcHJvZmlsaW5nLCBhcyB3ZWxsIGFzIHRoZSBhYmlsaXR5IHRvCi0gICAgZW5h YmxlL2Rpc2FibGUgaGVhcCBwcm9maWxpbmcgb24gYSBwZXIgdGhyZWFkIGJhc2lzLiAgQWRkIHRo ZSAicHJvZi5yZXNldCIsCi0gICAgInByb2YubGdfc2FtcGxlIiwgInRocmVhZC5wcm9mLm5hbWUi LCAidGhyZWFkLnByb2YuYWN0aXZlIiwKLSAgICAib3B0LnByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0 IiwgInByb2YudGhyZWFkX2FjdGl2ZV9pbml0IiwgYW5kCi0gICAgInRocmVhZC5wcm9mLmFjdGl2 ZSIgbWFsbGN0bHMuCi0gIC0gQWRkIHN1cHBvcnQgZm9yIHBlciBhcmVuYSBhcHBsaWNhdGlvbi1z cGVjaWZpZWQgY2h1bmsgYWxsb2NhdG9ycywgY29uZmlndXJlZAotICAgIHZpYSB0aGUgImFyZW5h LjxpPi5jaHVua19ob29rcyIgbWFsbGN0bC4KLSAgLSBSZWZhY3RvciBodWdlIGFsbG9jYXRpb24g dG8gYmUgbWFuYWdlZCBieSBhcmVuYXMsIHNvIHRoYXQgYXJlbmFzIG5vdwotICAgIGZ1bmN0aW9u IGFzIGdlbmVyYWwgcHVycG9zZSBpbmRlcGVuZGVudCBhbGxvY2F0b3JzLiAgVGhpcyBpcyBpbXBv cnRhbnQgaW4KLSAgICB0aGUgY29udGV4dCBvZiB1c2VyLXNwZWNpZmllZCBjaHVuayBhbGxvY2F0 b3JzLCBhc2lkZSBmcm9tIHRoZSBzY2FsYWJpbGl0eQotICAgIGJlbmVmaXRzLiAgUmVsYXRlZCBu ZXcgc3RhdGlzdGljczoKLSAgICArIFRoZSAic3RhdHMuYXJlbmFzLjxpPi5odWdlLmFsbG9jYXRl ZCIsICJzdGF0cy5hcmVuYXMuPGk+Lmh1Z2Uubm1hbGxvYyIsCi0gICAgICAic3RhdHMuYXJlbmFz LjxpPi5odWdlLm5kYWxsb2MiLCBhbmQgInN0YXRzLmFyZW5hcy48aT4uaHVnZS5ucmVxdWVzdHMi Ci0gICAgICBtYWxsY3RscyBwcm92aWRlIGhpZ2ggbGV2ZWwgcGVyIGFyZW5hIGh1Z2UgYWxsb2Nh dGlvbiBzdGF0aXN0aWNzLgotICAgICsgVGhlICJhcmVuYXMubmhjaHVua3MiLCAiYXJlbmFzLmhj aHVuay48aT4uc2l6ZSIsCi0gICAgICAic3RhdHMuYXJlbmFzLjxpPi5oY2h1bmtzLjxqPi5ubWFs bG9jIiwKLSAgICAgICJzdGF0cy5hcmVuYXMuPGk+LmhjaHVua3MuPGo+Lm5kYWxsb2MiLAotICAg ICAgInN0YXRzLmFyZW5hcy48aT4uaGNodW5rcy48aj4ubnJlcXVlc3RzIiwgYW5kCi0gICAgICAi c3RhdHMuYXJlbmFzLjxpPi5oY2h1bmtzLjxqPi5jdXJoY2h1bmtzIiBtYWxsY3RscyBwcm92aWRl IHBlciBzaXplIGNsYXNzCi0gICAgICBzdGF0aXN0aWNzLgotICAtIEFkZCB0aGUgJ3V0aWwnIGNv bHVtbiB0byBtYWxsb2Nfc3RhdHNfcHJpbnQoKSBvdXRwdXQsIHdoaWNoIHJlcG9ydHMgdGhlCi0g ICAgcHJvcG9ydGlvbiBvZiBhdmFpbGFibGUgcmVnaW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW4g dXNlIGZvciBlYWNoIHNtYWxsCi0gICAgc2l6ZSBjbGFzcy4KLSAgLSBBZGQgImFsbG9jIiBhbmQg ImZyZWUiIG1vZGVzIGZvciBmb3IganVuayBmaWxsaW5nIChzZWUgdGhlICJvcHQuanVuayIKLSAg ICBtYWxsY3RsKSwgc28gdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBzZXBhcmF0ZWx5IGVuYWJsZSBq dW5rIGZpbGxpbmcgZm9yCi0gICAgYWxsb2NhdGlvbiB2ZXJzdXMgZGVhbGxvY2F0aW9uLgotICAt IEFkZCB0aGUgamVtYWxsb2MtY29uZmlnIHNjcmlwdCwgd2hpY2ggcHJvdmlkZXMgaW5mb3JtYXRp b24gYWJvdXQgaG93Ci0gICAgamVtYWxsb2Mgd2FzIGNvbmZpZ3VyZWQsIGFuZCBob3cgdG8gaW50 ZWdyYXRlIGl0IGludG8gYXBwbGljYXRpb24gYnVpbGRzLgotICAtIEFkZCBtZXRhZGF0YSBzdGF0 aXN0aWNzLCB3aGljaCBhcmUgYWNjZXNzaWJsZSB2aWEgdGhlICJzdGF0cy5tZXRhZGF0YSIsCi0g ICAgInN0YXRzLmFyZW5hcy48aT4ubWV0YWRhdGEubWFwcGVkIiwgYW5kCi0gICAgInN0YXRzLmFy ZW5hcy48aT4ubWV0YWRhdGEuYWxsb2NhdGVkIiBtYWxsY3Rscy4KLSAgLSBBZGQgdGhlICJzdGF0 cy5yZXNpZGVudCIgbWFsbGN0bCwgd2hpY2ggcmVwb3J0cyB0aGUgdXBwZXIgbGltaXQgb2YKLSAg ICBwaHlzaWNhbGx5IHJlc2lkZW50IG1lbW9yeSBtYXBwZWQgYnkgdGhlIGFsbG9jYXRvci4KLSAg LSBBZGQgcGVyIGFyZW5hIGNvbnRyb2wgb3ZlciB1bnVzZWQgZGlydHkgcGFnZSBwdXJnaW5nLCB2 aWEgdGhlCi0gICAgImFyZW5hcy5sZ19kaXJ0eV9tdWx0IiwgImFyZW5hLjxpPi5sZ19kaXJ0eV9t dWx0IiwgYW5kCi0gICAgInN0YXRzLmFyZW5hcy48aT4ubGdfZGlydHlfbXVsdCIgbWFsbGN0bHMu Ci0gIC0gQWRkIHRoZSAicHJvZi5nZHVtcCIgbWFsbGN0bCwgd2hpY2ggbWFrZXMgaXQgcG9zc2li bGUgdG8gdG9nZ2xlIHRoZSBnZHVtcAotICAgIGZlYXR1cmUgb24vb2ZmIGR1cmluZyBwcm9ncmFt IGV4ZWN1dGlvbi4KLSAgLSBBZGQgc2RhbGxvY3goKSwgd2hpY2ggaW1wbGVtZW50cyBzaXplZCBk ZWFsbG9jYXRpb24uICBUaGUgcHJpbWFyeQotICAgIG9wdGltaXphdGlvbiBvdmVyIGRhbGxvY3go KSBpcyB0aGUgcmVtb3ZhbCBvZiBhIG1ldGFkYXRhIHJlYWQsIHdoaWNoIG9mdGVuCi0gICAgc3Vm ZmVycyBhbiBMMSBjYWNoZSBtaXNzLgotICAtIEFkZCBtaXNzaW5nIGhlYWRlciBpbmNsdWRlcyBp biBqZW1hbGxvYy9qZW1hbGxvYy5oLCBzbyB0aGF0IGFwcGxpY2F0aW9ucwotICAgIG9ubHkgaGF2 ZSB0byAjaW5jbHVkZSA8amVtYWxsb2MvamVtYWxsb2MuaD4uCi0gIC0gQWRkIHN1cHBvcnQgZm9y IGFkZGl0aW9uYWwgcGxhdGZvcm1zOgotICAgICsgQml0cmlnCi0gICAgKyBDeWd3aW4KLSAgICAr IERyYWdvbkZseUJTRAotICAgICsgaU9TCi0gICAgKyBPcGVuQlNECi0gICAgKyBPcGVuUklTQy9v cjFrCi0KLSAgT3B0aW1pemF0aW9uczoKLSAgLSBNYWludGFpbiBkaXJ0eSBydW5zIGluIHBlciBh cmVuYSBMUlVzIHJhdGhlciB0aGFuIGluIHBlciBhcmVuYSB0cmVlcyBvZgotICAgIGRpcnR5LXJ1 bi1jb250YWluaW5nIGNodW5rcy4gIEluIHByYWN0aWNlIHRoaXMgY2hhbmdlIHNpZ25pZmljYW50 bHkgcmVkdWNlcwotICAgIGRpcnR5IHBhZ2UgcHVyZ2luZyB2b2x1bWUuCi0gIC0gSW50ZWdyYXRl IHdob2xlIGNodW5rcyBpbnRvIHRoZSB1bnVzZWQgZGlydHkgcGFnZSBwdXJnaW5nIG1hY2hpbmVy eS4gIFRoaXMKLSAgICByZWR1Y2VzIHRoZSBjb3N0IG9mIHJlcGVhdGVkIGh1Z2UgYWxsb2NhdGlv bi9kZWFsbG9jYXRpb24sIGJlY2F1c2UgaXQKLSAgICBlZmZlY3RpdmVseSBpbnRyb2R1Y2VzIGEg Y2FjaGUgb2YgY2h1bmtzLgotICAtIFNwbGl0IHRoZSBhcmVuYSBjaHVuayBtYXAgaW50byB0d28g c2VwYXJhdGUgYXJyYXlzLCBpbiBvcmRlciB0byBpbmNyZWFzZQotICAgIGNhY2hlIGxvY2FsaXR5 IGZvciB0aGUgZnJlcXVlbnRseSBhY2Nlc3NlZCBiaXRzLgotICAtIE1vdmUgc21hbGwgcnVuIG1l dGFkYXRhIG91dCBvZiBydW5zLCBpbnRvIGFyZW5hIGNodW5rIGhlYWRlcnMuICBUaGlzIHJlZHVj ZXMKLSAgICBydW4gZnJhZ21lbnRhdGlvbiwgc21hbGxlciBydW5zIHJlZHVjZSBleHRlcm5hbCBm cmFnbWVudGF0aW9uIGZvciBzbWFsbCBzaXplCi0gICAgY2xhc3NlcywgYW5kIHBhY2tlZCAobGVz cyB1bmlmb3JtbHkgYWxpZ25lZCkgbWV0YWRhdGEgbGF5b3V0IGltcHJvdmVzIENQVQotICAgIGNh Y2hlIHNldCBkaXN0cmlidXRpb24uCi0gIC0gUmFuZG9tbHkgZGlzdHJpYnV0ZSBsYXJnZSBhbGxv Y2F0aW9uIGJhc2UgcG9pbnRlciBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gcGFnZQotICAgIGJvdW5k YXJpZXMgaW4gb3JkZXIgdG8gbW9yZSB1bmlmb3JtbHkgdXRpbGl6ZSBDUFUgY2FjaGUgc2V0cy4g IFRoaXMgY2FuIGJlCi0gICAgZGlzYWJsZWQgdmlhIHRoZSAtLWRpc2FibGUtY2FjaGUtb2JsaXZp b3VzIGNvbmZpZ3VyZSBvcHRpb24sIGFuZCBxdWVyaWVkIHZpYQotICAgIHRoZSAiY29uZmlnLmNh Y2hlX29ibGl2aW91cyIgbWFsbGN0bC4KLSAgLSBNaWNyby1vcHRpbWl6ZSB0aGUgZmFzdCBwYXRo cyBmb3IgdGhlIHB1YmxpYyBBUEkgZnVuY3Rpb25zLgotICAtIFJlZmFjdG9yIHRocmVhZC1zcGVj aWZpYyBkYXRhIHRvIHJlc2lkZSBpbiBhIHNpbmdsZSBzdHJ1Y3R1cmUuICBUaGlzIGFzc3VyZXMK LSAgICB0aGF0IG9ubHkgYSBzaW5nbGUgVExTIHJlYWQgaXMgbmVjZXNzYXJ5IHBlciBjYWxsIGlu dG8gdGhlIHB1YmxpYyBBUEkuCi0gIC0gSW1wbGVtZW50IGluLXBsYWNlIGh1Z2UgYWxsb2NhdGlv biBncm93aW5nIGFuZCBzaHJpbmtpbmcuCi0gIC0gUmVmYWN0b3IgcnRyZWUgKHJhZGl4IHRyZWUg Zm9yIGNodW5rIGxvb2t1cHMpIHRvIGJlIGxvY2stZnJlZSwgYW5kIG1ha2UKLSAgICBhZGRpdGlv bmFsIG9wdGltaXphdGlvbnMgdGhhdCByZWR1Y2UgbWF4aW11bSBsb29rdXAgZGVwdGggdG8gb25l IG9yIHR3bwotICAgIGxldmVscy4gIFRoaXMgcmVzb2x2ZXMgd2hhdCB3YXMgYSBjb25jdXJyZW5j eSBib3R0bGVuZWNrIGZvciBwZXIgYXJlbmEgaHVnZQotICAgIGFsbG9jYXRpb24sIGJlY2F1c2Ug YSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmUgaXMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nCi0gICAg d2hpY2ggYXJlbmFzIG93biB3aGljaCBodWdlIGFsbG9jYXRpb25zLgotCi0gIEluY29tcGF0aWJs ZSBjaGFuZ2VzOgotICAtIFJlcGxhY2UgLS1lbmFibGUtY2Mtc2lsZW5jZSB3aXRoIC0tZGlzYWJs ZS1jYy1zaWxlbmNlIHRvIHN1cHByZXNzIHNwdXJpb3VzCi0gICAgd2FybmluZ3MgYnkgZGVmYXVs dC4KLSAgLSBBc3N1cmUgdGhhdCB0aGUgY29uc3RuZXNzIG9mIG1hbGxvY191c2FibGVfc2l6ZSgp J3MgcmV0dXJuIHR5cGUgbWF0Y2hlcyB0aGF0Ci0gICAgb2YgdGhlIHN5c3RlbSBpbXBsZW1lbnRh dGlvbi4KLSAgLSBDaGFuZ2UgdGhlIGhlYXAgcHJvZmlsZSBkdW1wIGZvcm1hdCB0byBzdXBwb3J0 IHBlciB0aHJlYWQgaGVhcCBwcm9maWxpbmcsCi0gICAgcmVuYW1lIHBwcm9mIHRvIGplcHJvZiwg YW5kIGVuaGFuY2UgaXQgd2l0aCB0aGUgLS10aHJlYWQ9PG4+IG9wdGlvbi4gIEFzIGEKLSAgICBy ZXN1bHQsIHRoZSBidW5kbGVkIGplcHJvZiBtdXN0IG5vdyBiZSB1c2VkIHJhdGhlciB0aGFuIHRo ZSB1cHN0cmVhbQotICAgIChncGVyZnRvb2xzKSBwcHJvZi4KLSAgLSBEaXNhYmxlICJvcHQucHJv Zl9maW5hbCIgYnkgZGVmYXVsdCwgaW4gb3JkZXIgdG8gYXZvaWQgYXRleGl0KDMpLCB3aGljaCBj YW4KLSAgICBpbnRlcm5hbGx5IGRlYWRsb2NrIG9uIHNvbWUgcGxhdGZvcm1zLgotICAtIENoYW5n ZSB0aGUgImFyZW5hcy5ubHJ1bnMiIG1hbGxjdGwgdHlwZSBmcm9tIHNpemVfdCB0byB1bnNpZ25l ZC4KLSAgLSBSZXBsYWNlIHRoZSAic3RhdHMuYXJlbmFzLjxpPi5iaW5zLjxqPi5hbGxvY2F0ZWQi IG1hbGxjdGwgd2l0aAotICAgICJzdGF0cy5hcmVuYXMuPGk+LmJpbnMuPGo+LmN1cnJlZ3MiLgot ICAtIElnbm9yZSBNQUxMT0NfQ09ORiBpbiBzZXR7dWlkLGdpZCxjYXB9IGJpbmFyaWVzLgotICAt IElnbm9yZSBNQUxMT0NYX0FSRU5BKGEpIGluIGRhbGxvY3goKSwgaW4gZmF2b3Igb2YgdXNpbmcg dGhlCi0gICAgTUFMTE9DWF9UQ0FDSEUodGMpIGFuZCBNQUxMT0NYX1RDQUNIRV9OT05FIGZsYWdz IHRvIGNvbnRyb2wgdGNhY2hlIHVzYWdlLgotCi0gIFJlbW92ZWQgZmVhdHVyZXM6Ci0gIC0gUmVt b3ZlIHRoZSAqYWxsb2NtKCkgQVBJLCB3aGljaCBpcyBzdXBlcnNlZGVkIGJ5IHRoZSAqYWxsb2N4 KCkgQVBJLgotICAtIFJlbW92ZSB0aGUgLS1lbmFibGUtZHNzIG9wdGlvbnMsIGFuZCBtYWtlIGRz cyBub24tb3B0aW9uYWwgb24gYWxsIHBsYXRmb3JtcwotICAgIHdoaWNoIHN1cHBvcnQgc2Jyaygy KS4KLSAgLSBSZW1vdmUgdGhlICJhcmVuYXMucHVyZ2UiIG1hbGxjdGwsIHdoaWNoIHdhcyBvYnNv bGV0ZWQgYnkgdGhlCi0gICAgImFyZW5hLjxpPi5wdXJnZSIgbWFsbGN0bCBpbiAzLjEuMC4KLSAg LSBSZW1vdmUgdGhlIHVubmVjZXNzYXJ5ICJvcHQudmFsZ3JpbmQiIG1hbGxjdGw7IGplbWFsbG9j IGF1dG9tYXRpY2FsbHkKLSAgICBkZXRlY3RzIHdoZXRoZXIgaXQgaXMgcnVubmluZyBpbnNpZGUg VmFsZ3JpbmQuCi0gIC0gUmVtb3ZlIHRoZSAic3RhdHMuaHVnZS5hbGxvY2F0ZWQiLCAic3RhdHMu aHVnZS5ubWFsbG9jIiwgYW5kCi0gICAgInN0YXRzLmh1Z2UubmRhbGxvYyIgbWFsbGN0bHMuCi0g IC0gUmVtb3ZlIHRoZSAtLWVuYWJsZS1tcmVtYXAgb3B0aW9uLgotICAtIFJlbW92ZSB0aGUgInN0 YXRzLmNodW5rcy5jdXJyZW50IiwgInN0YXRzLmNodW5rcy50b3RhbCIsIGFuZAotICAgICJzdGF0 cy5jaHVua3MuaGlnaCIgbWFsbGN0bHMuCi0KLSAgQnVnIGZpeGVzOgotICAtIEZpeCB0aGUgY2Fj dGl2ZSBzdGF0aXN0aWMgdG8gZGVjcmVhc2UgKHJhdGhlciB0aGFuIGluY3JlYXNlKSB3aGVuIGFj dGl2ZQotICAgIG1lbW9yeSBkZWNyZWFzZXMuICBUaGlzIHJlZ3Jlc3Npb24gd2FzIGZpcnN0IHJl bGVhc2VkIGluIDMuNS4wLgotICAtIEZpeCBPT00gaGFuZGxpbmcgaW4gbWVtYWxpZ24oKSBhbmQg dmFsbG9jKCkuICBBIHZhcmlhbnQgb2YgdGhpcyBidWcgZXhpc3RlZAotICAgIGluIGFsbCByZWxl YXNlcyBzaW5jZSAyLjAuMCwgd2hpY2ggaW50cm9kdWNlZCB0aGVzZSBmdW5jdGlvbnMuCi0gIC0g Rml4IGFuIE9PTS1yZWxhdGVkIHJlZ3Jlc3Npb24gaW4gYXJlbmFfdGNhY2hlX2ZpbGxfc21hbGwo KSwgd2hpY2ggY291bGQKLSAgICBjYXVzZSBjYWNoZSBjb3JydXB0aW9uIG9uIE9PTS4gIFRoaXMg cmVncmVzc2lvbiB3YXMgcHJlc2VudCBpbiBhbGwgcmVsZWFzZXMKLSAgICBmcm9tIDIuMi4wIHRo cm91Z2ggMy42LjAuCi0gIC0gRml4IHNpemUgY2xhc3Mgb3ZlcmZsb3cgaGFuZGxpbmcgZm9yIG1h bGxvYygpLCBwb3NpeF9tZW1hbGlnbigpLCBtZW1hbGlnbigpLAotICAgIGNhbGxvYygpLCBhbmQg cmVhbGxvYygpIHdoZW4gcHJvZmlsaW5nIGlzIGVuYWJsZWQuCi0gIC0gRml4IHRoZSAiYXJlbmEu PGk+LmRzcyIgbWFsbGN0bCB0byByZXR1cm4gYW4gZXJyb3IgaWYgInByaW1hcnkiIG9yCi0gICAg InNlY29uZGFyeSIgcHJlY2VkZW5jZSBpcyBzcGVjaWZpZWQsIGJ1dCBzYnJrKDIpIGlzIG5vdCBz dXBwb3J0ZWQuCi0gIC0gRml4IGZhbGxiYWNrIGxnX2Zsb29yKCkgaW1wbGVtZW50YXRpb25zIHRv IGhhbmRsZSBleHRyZW1lbHkgbGFyZ2UgaW5wdXRzLgotICAtIEVuc3VyZSB0aGUgZGVmYXVsdCBw dXJnZWFibGUgem9uZSBpcyBhZnRlciB0aGUgZGVmYXVsdCB6b25lIG9uIE9TIFguCi0gIC0gRml4 IGxhdGVudCBidWdzIGluIGF0b21pY18qKCkuCi0gIC0gRml4IHRoZSAiYXJlbmEuPGk+LmRzcyIg bWFsbGN0bCB0byBoYW5kbGUgcmVhZC1vbmx5IGNhbGxzLgotICAtIEZpeCB0bHNfbW9kZWwgY29u ZmlndXJhdGlvbiB0byBlbmFibGUgdGhlIGluaXRpYWwtZXhlYyBtb2RlbCB3aGVuIHBvc3NpYmxl LgotICAtIE1hcmsgbWFsbG9jX2NvbmYgYXMgYSB3ZWFrIHN5bWJvbCBzbyB0aGF0IHRoZSBhcHBs aWNhdGlvbiBjYW4gb3ZlcnJpZGUgaXQuCi0gIC0gQ29ycmVjdGx5IGRldGVjdCBnbGliYydzIGFk YXB0aXZlIHB0aHJlYWQgbXV0ZXhlcy4KLSAgLSBGaXggdGhlIC0td2l0aG91dC1leHBvcnQgY29u ZmlndXJlIG9wdGlvbi4KLQotKiAzLjYuMCAoTWFyY2ggMzEsIDIwMTQpCi0KLSAgVGhpcyB2ZXJz aW9uIGNvbnRhaW5zIGEgY3JpdGljYWwgYnVnIGZpeCBmb3IgYSByZWdyZXNzaW9uIHByZXNlbnQg aW4gMy41LjAgYW5kCi0gIDMuNS4xLgotCi0gIEJ1ZyBmaXhlczoKLSAgLSBGaXggYSByZWdyZXNz aW9uIGluIGFyZW5hX2NodW5rX2FsbG9jKCkgdGhhdCBjYXVzZWQgY3Jhc2hlcyBkdXJpbmcKLSAg ICBzbWFsbC9sYXJnZSBhbGxvY2F0aW9uIGlmIGNodW5rIGFsbG9jYXRpb24gZmFpbGVkLiAgSW4g dGhlIGFic2VuY2Ugb2YgdGhpcwotICAgIGJ1ZywgY2h1bmsgYWxsb2NhdGlvbiBmYWlsdXJlIHdv dWxkIHJlc3VsdCBpbiBhbGxvY2F0aW9uIGZhaWx1cmUsIGUuZy4gIE5VTEwKLSAgICByZXR1cm4g ZnJvbSBtYWxsb2MoKS4gIFRoaXMgcmVncmVzc2lvbiB3YXMgaW50cm9kdWNlZCBpbiAzLjUuMC4K LSAgLSBGaXggYmFja3RyYWNpbmcgZm9yIGdjYyBpbnRyaW5zaWNzLWJhc2VkIGJhY2t0cmFjaW5n IGJ5IHNwZWNpZnlpbmcKLSAgICAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciB0byBnY2MuICBOb3Rl IHRoYXQgdGhlIGFwcGxpY2F0aW9uIChhbmQgYWxsIHRoZQotICAgIGxpYnJhcmllcyBpdCBsaW5r cyB0bykgbXVzdCBhbHNvIGJlIGNvbXBpbGVkIHdpdGggdGhpcyBvcHRpb24gZm9yCi0gICAgYmFj a3RyYWNpbmcgdG8gYmUgcmVsaWFibGUuCi0gIC0gVXNlIGRzcyBhbGxvY2F0aW9uIHByZWNlZGVu Y2UgZm9yIGh1Z2UgYWxsb2NhdGlvbnMgYXMgd2VsbCBhcyBzbWFsbC9sYXJnZQotICAgIGFsbG9j YXRpb25zLgotICAtIEZpeCB0ZXN0IGFzc2VydGlvbiBmYWlsdXJlIG1lc3NhZ2UgZm9ybWF0dGlu Zy4gIFRoaXMgYnVnIGRpZCBub3QgbWFuaWZlc3Qgb24KLSAgICB4ODZfNjQgc3lzdGVtcyBiZWNh dXNlIG9mIGltcGxlbWVudGF0aW9uIHN1YnRsZXRpZXMgaW4gdmFfbGlzdC4KLSAgLSBGaXggaW5j b25zZXF1ZW50aWFsIHRlc3QgZmFpbHVyZXMgZm9yIGhhc2ggYW5kIFNGTVQgY29kZS4KLQotICBO ZXcgZmVhdHVyZXM6Ci0gIC0gU3VwcG9ydCBoZWFwIHByb2ZpbGluZyBvbiBGcmVlQlNELiAgVGhp cyBmZWF0dXJlIGRlcGVuZHMgb24gdGhlIHByb2MKLSAgICBmaWxlc3lzdGVtIGJlaW5nIG1vdW50 ZWQgZHVyaW5nIGhlYXAgcHJvZmlsZSBkdW1waW5nLgotCi0qIDMuNS4xIChGZWJydWFyeSAyNSwg MjAxNCkKLQotICBUaGlzIHZlcnNpb24gcHJpbWFyaWx5IGFkZHJlc3NlcyBtaW5vciBidWdzIGlu IHRlc3QgY29kZS4KLQotICBCdWcgZml4ZXM6Ci0gIC0gQ29uZmlndXJlIFNvbGFyaXMvSWxsdW1v cyB0byB1c2UgTUFEVl9GUkVFLgotICAtIEZpeCBqdW5rIGZpbGxpbmcgZm9yIG1yZW1hcCgyKS1i YXNlZCBodWdlIHJlYWxsb2NhdGlvbi4gIFRoaXMgaXMgb25seQotICAgIHJlbGV2YW50IGlmIGNv bmZpZ3VyaW5nIHdpdGggdGhlIC0tZW5hYmxlLW1yZW1hcCBvcHRpb24gc3BlY2lmaWVkLgotICAt IEF2b2lkIGNvbXBpbGF0aW9uIGZhaWx1cmUgaWYgJ3Jlc3RyaWN0JyBDOTkga2V5d29yZCBpcyBu b3Qgc3VwcG9ydGVkIGJ5IHRoZQotICAgIGNvbXBpbGVyLgotICAtIEFkZCBhIGNvbmZpZ3VyZSB0 ZXN0IGZvciBTU0UyIHJhdGhlciB0aGFuIGFzc3VtaW5nIGl0IGlzIHVzYWJsZSBvbiBpNjg2Ci0g ICAgc3lzdGVtcy4gIFRoaXMgZml4ZXMgdGVzdCBjb21waWxhdGlvbiBlcnJvcnMsIGVzcGVjaWFs bHkgb24gMzItYml0IExpbnV4Ci0gICAgc3lzdGVtcy4KLSAgLSBGaXggbWFsbGN0bCBhcmd1bWVu dCBzaXplIG1pc21hdGNoZXMgKHNpemVfdCB2cy4gdWludDY0X3QpIGluIHRoZSBzdGF0cyB1bml0 Ci0gICAgdGVzdC4KLSAgLSBGaXgvcmVtb3ZlIGZsYXdlZCBhbGlnbm1lbnQtcmVsYXRlZCBvdmVy ZmxvdyB0ZXN0cy4KLSAgLSBQcmV2ZW50IGNvbXBpbGVyIG9wdGltaXphdGlvbnMgdGhhdCBjb3Vs ZCBjaGFuZ2UgYmFja3RyYWNlcyBpbiB0aGUKLSAgICBwcm9mX2FjY3VtIHVuaXQgdGVzdC4KLQot KiAzLjUuMCAoSmFudWFyeSAyMiwgMjAxNCkKLQotICBUaGlzIHZlcnNpb24gZm9jdXNlcyBvbiBy ZWZhY3RvcmluZyBhbmQgYXV0b21hdGVkIHRlc3RpbmcsIHRob3VnaCBpdCBhbHNvCi0gIGluY2x1 ZGVzIHNvbWUgbm9uLXRyaXZpYWwgaGVhcCBwcm9maWxpbmcgb3B0aW1pemF0aW9ucyBub3QgbWVu dGlvbmVkIGJlbG93LgotCi0gIE5ldyBmZWF0dXJlczoKLSAgLSBBZGQgdGhlICphbGxvY3goKSBB UEksIHdoaWNoIGlzIGEgc3VjY2Vzc29yIHRvIHRoZSBleHBlcmltZW50YWwgKmFsbG9jbSgpCi0g ICAgQVBJLiAgVGhlICphbGxvY3goKSBmdW5jdGlvbnMgYXJlIHNsaWdodGx5IHNpbXBsZXIgdG8g dXNlIGJlY2F1c2UgdGhleSBoYXZlCi0gICAgZmV3ZXIgcGFyYW1ldGVycywgdGhleSBkaXJlY3Rs eSByZXR1cm4gdGhlIHJlc3VsdHMgb2YgcHJpbWFyeSBpbnRlcmVzdCwgYW5kCi0gICAgbWFsbG9j eCgpL3JhbGxvY3goKSBhdm9pZCB0aGUgc3RyaWN0IGFsaWFzaW5nIHBpdGZhbGwgdGhhdAotICAg IGFsbG9jbSgpL3JhbGxvY20oKSBzaGFyZSB3aXRoIHBvc2l4X21lbWFsaWduKCkuICBOb3RlIHRo YXQgKmFsbG9jbSgpIGlzCi0gICAgc2xhdGVkIGZvciByZW1vdmFsIGluIHRoZSBuZXh0IG5vbi1i dWdmaXggcmVsZWFzZS4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgTGludXhUaHJlYWRzLgotCi0gIEJ1 ZyBmaXhlczoKLSAgLSBVbmxlc3MgaGVhcCBwcm9maWxpbmcgaXMgZW5hYmxlZCwgZGlzYWJsZSBm bG9hdGluZyBwb2ludCBjb2RlIGFuZCBkb24ndCBsaW5rCi0gICAgd2l0aCBsaWJtLiAgVGhpcywg aW4gY29tYmluYXRpb24gd2l0aCBlLmcuIEVYVFJBX0NGTEFHUz0tbW5vLXNzZSBvbiB4NjQKLSAg ICBzeXN0ZW1zLCBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IGRpc2FibGUgZmxvYXRp bmcgcG9pbnQgcmVnaXN0ZXIKLSAgICB1c2UuICBTb21lIHZlcnNpb25zIG9mIGdsaWJjIG5lZ2xl Y3QgdG8gc2F2ZS9yZXN0b3JlIGNhbGxlci1zYXZlZCBmbG9hdGluZwotICAgIHBvaW50IHJlZ2lz dGVycyBkdXJpbmcgZHluYW1pYyBsYXp5IHN5bWJvbCBsb2FkaW5nLCBhbmQgdGhlIHN5bWJvbCBs b2FkaW5nCi0gICAgY29kZSB1c2VzIHdoYXRldmVyIG1hbGxvYyB0aGUgYXBwbGljYXRpb24gaGFw cGVucyB0byBoYXZlIGxpbmtlZC9sb2FkZWQKLSAgICB3aXRoLCB0aGUgcmVzdWx0IGJlaW5nIHBv dGVudGlhbCBmbG9hdGluZyBwb2ludCByZWdpc3RlciBjb3JydXB0aW9uLgotICAtIFJlcG9ydCBF Tk9NRU0gcmF0aGVyIHRoYW4gRUlOVkFMIGlmIGFuIE9PTSBvY2N1cnMgZHVyaW5nIGhlYXAgcHJv ZmlsaW5nCi0gICAgYmFja3RyYWNlIGNyZWF0aW9uIGluIGltZW1hbGlnbigpLiAgVGhpcyBidWcg aW1wYWN0ZWQgcG9zaXhfbWVtYWxpZ24oKSBhbmQKLSAgICBhbGlnbmVkX2FsbG9jKCkuCi0gIC0g Rml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gYSBwcm9mX2R1bXBfbWFwcygpIGVycm9yIHBh dGguCi0gIC0gRml4IHByb2ZfZHVtcCgpIHRvIGNsb3NlIHRoZSBkdW1wIGZpbGUgZGVzY3JpcHRv ciBmb3IgYWxsIHJlbGV2YW50IGVycm9yCi0gICAgcGF0aHMuCi0gIC0gRml4IHJhbGxvY20oKSB0 byB1c2UgdGhlIGFyZW5hIHNwZWNpZmllZCBieSB0aGUgQUxMT0NNX0FSRU5BKHMpIGZsYWcgZm9y Ci0gICAgYWxsb2NhdGlvbiwgbm90IGp1c3QgZGVhbGxvY2F0aW9uLgotICAtIEZpeCBhIGRhdGEg cmFjZSBmb3IgbGFyZ2UgYWxsb2NhdGlvbiBzdGF0cyBjb3VudGVycy4KLSAgLSBGaXggYSBwb3Rl bnRpYWwgaW5maW5pdGUgbG9vcCBkdXJpbmcgdGhyZWFkIGV4aXQuICBUaGlzIGJ1ZyBvY2N1cnJl ZCBvbgotICAgIFNvbGFyaXMsIGFuZCBjb3VsZCBhZmZlY3Qgb3RoZXIgcGxhdGZvcm1zIHdpdGgg c2ltaWxhciBwdGhyZWFkcyBUU0QKLSAgICBpbXBsZW1lbnRhdGlvbnMuCi0gIC0gRG9uJ3QganVu ay1maWxsIHJlYWxsb2NhdGlvbnMgdW5sZXNzIHVzYWJsZSBzaXplIGNoYW5nZXMuICBUaGlzIGZp eGVzIGEKLSAgICB2aW9sYXRpb24gb2YgdGhlICphbGxvY3goKS8qYWxsb2NtKCkgc2VtYW50aWNz LgotICAtIEZpeCBncm93aW5nIGxhcmdlIHJlYWxsb2NhdGlvbiB0byBqdW5rIGZpbGwgbmV3IHNw YWNlLgotICAtIEZpeCBodWdlIGRlYWxsb2NhdGlvbiB0byBqdW5rIGZpbGwgd2hlbiBtdW5tYXAg aXMgZGlzYWJsZWQuCi0gIC0gQ2hhbmdlIHRoZSBkZWZhdWx0IHByaXZhdGUgbmFtZXNwYWNlIHBy ZWZpeCBmcm9tIGVtcHR5IHRvIGplXywgYW5kIGNoYW5nZQotICAgIC0td2l0aC1wcml2YXRlLW5h bWVzcGFjZS1wcmVmaXggc28gdGhhdCBpdCBwcmVwZW5kcyBhbiBhZGRpdGlvbmFsIHByZWZpeAot ICAgIHJhdGhlciB0aGFuIHJlcGxhY2luZyBqZV8uICBUaGlzIHJlZHVjZXMgdGhlIGxpa2VsaWhv b2Qgb2YgYXBwbGljYXRpb25zCi0gICAgd2hpY2ggc3RhdGljYWxseSBsaW5rIGplbWFsbG9jIGV4 cGVyaWVuY2luZyBzeW1ib2wgbmFtZSBjb2xsaXNpb25zLgotICAtIEFkZCBtaXNzaW5nIHByaXZh dGUgbmFtZXNwYWNlIG1hbmdsaW5nIChyZWxldmFudCB3aGVuCi0gICAgLS13aXRoLXByaXZhdGUt bmFtZXNwYWNlIGlzIHNwZWNpZmllZCkuCi0gIC0gQWRkIGFuZCB1c2UgSkVNQUxMT0NfSU5MSU5F X0Mgc28gdGhhdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgbWFya2VkIGFzCi0gICAgc3Rh dGljIGV2ZW4gZm9yIGRlYnVnIGJ1aWxkcy4KLSAgLSBBZGQgYSBtaXNzaW5nIG11dGV4IHVubG9j ayBpbiBhIG1hbGxvY19pbml0X2hhcmQoKSBlcnJvciBwYXRoLiAgSW4gcHJhY3RpY2UKLSAgICB0 aGlzIGVycm9yIHBhdGggaXMgbmV2ZXIgZXhlY3V0ZWQuCi0gIC0gRml4IG51bWVyb3VzIGJ1Z3Mg aW4gbWFsbG9jX3N0cm90dW1heCgpIGVycm9yIGhhbmRsaW5nL3JlcG9ydGluZy4gIFRoZXNlCi0g ICAgYnVncyBoYWQgbm8gaW1wYWN0IGV4Y2VwdCBmb3IgbWFsZm9ybWVkIGlucHV0cy4KLSAgLSBG aXggbnVtZXJvdXMgYnVncyBpbiBtYWxsb2Nfc25wcmludGYoKS4gIFRoZXNlIGJ1Z3Mgd2VyZSBu b3QgZXhlcmNpc2VkIGJ5Ci0gICAgZXhpc3RpbmcgY2FsbHMsIHNvIHRoZXkgaGFkIG5vIGltcGFj dC4KLQotKiAzLjQuMSAoT2N0b2JlciAyMCwgMjAxMykKLQotICBCdWcgZml4ZXM6Ci0gIC0gRml4 IGEgcmFjZSBpbiB0aGUgImFyZW5hcy5leHRlbmQiIG1hbGxjdGwgdGhhdCBjb3VsZCBjYXVzZSBt ZW1vcnkgY29ycnVwdGlvbgotICAgIG9mIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgc3Vi c2VxdWVudCBjcmFzaGVzLgotICAtIEZpeCBWYWxncmluZCBpbnRlZ3JhdGlvbiBmbGF3cyB0aGF0 IGNhdXNlZCBWYWxncmluZCB3YXJuaW5ncyBhYm91dCByZWFkcyBvZgotICAgIHVuaW5pdGlhbGl6 ZWQgbWVtb3J5IGluOgotICAgICsgYXJlbmEgY2h1bmsgaGVhZGVycwotICAgICsgaW50ZXJuYWwg emVyby1pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMgKHJlbGV2YW50IHRvIHRjYWNoZSBhbmQg cHJvZgotICAgICAgY29kZSkKLSAgLSBQcmVzZXJ2ZSBlcnJubyBkdXJpbmcgdGhlIGZpcnN0IGFs bG9jYXRpb24uICBBIHJlYWRsaW5rKDIpIGNhbGwgZHVyaW5nCi0gICAgaW5pdGlhbGl6YXRpb24g ZmFpbHMgdW5sZXNzIC9ldGMvbWFsbG9jLmNvbmYgZXhpc3RzLCBzbyBlcnJubyB3YXMgdHlwaWNh bGx5Ci0gICAgc2V0IGR1cmluZyB0aGUgZmlyc3QgYWxsb2NhdGlvbiBwcmlvciB0byB0aGlzIGZp eC4KLSAgLSBGaXggY29tcGlsYXRpb24gd2FybmluZ3MgcmVwb3J0ZWQgYnkgZ2NjIDQuOC4xLgot Ci0qIDMuNC4wIChKdW5lIDIsIDIwMTMpCi0KLSAgVGhpcyB2ZXJzaW9uIGlzIGVzc2VudGlhbGx5 IGEgc21hbGwgYnVnZml4IHJlbGVhc2UsIGJ1dCB0aGUgYWRkaXRpb24gb2YKLSAgYWFyY2g2NCBz dXBwb3J0IHJlcXVpcmVzIHRoYXQgdGhlIG1pbm9yIHZlcnNpb24gYmUgaW5jcmVtZW50ZWQuCi0K LSAgQnVnIGZpeGVzOgotICAtIEZpeCByYWNlLXRyaWdnZXJlZCBkZWFkbG9ja3MgaW4gY2h1bmtf cmVjb3JkKCkuICBUaGVzZSBkZWFkbG9ja3Mgd2VyZQotICAgIHR5cGljYWxseSB0cmlnZ2VyZWQg YnkgbXVsdGlwbGUgdGhyZWFkcyBjb25jdXJyZW50bHkgZGVhbGxvY2F0aW5nIGh1Z2UKLSAgICBv YmplY3RzLgotCi0gIE5ldyBmZWF0dXJlczoKLSAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIGFhcmNo NjQgYXJjaGl0ZWN0dXJlLgotCi0qIDMuMy4xIChNYXJjaCA2LCAyMDEzKQotCi0gIFRoaXMgdmVy c2lvbiBmaXhlcyBidWdzIHRoYXQgYXJlIHR5cGljYWxseSBlbmNvdW50ZXJlZCBvbmx5IHdoZW4g dXRpbGl6aW5nCi0gIGN1c3RvbSBydW4tdGltZSBvcHRpb25zLgotCi0gIEJ1ZyBmaXhlczoKLSAg LSBGaXggYSBsb2NraW5nIG9yZGVyIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIGRlYWRsb2NrIGR1cmlu ZyBmb3JrIGlmIGhlYXAKLSAgICBwcm9maWxpbmcgd2VyZSBlbmFibGVkLgotICAtIEZpeCBhIGNo dW5rIHJlY3ljbGluZyBidWcgdGhhdCBjb3VsZCBjYXVzZSB0aGUgYWxsb2NhdG9yIHRvIGxvc2Ug dHJhY2sgb2YKLSAgICB3aGV0aGVyIGEgY2h1bmsgd2FzIHplcm9lZC4gIE9uIEZyZWVCU0QsIE5l dEJTRCwgYW5kIE9TIFgsIGl0IGNvdWxkIGNhdXNlCi0gICAgY29ycnVwdGlvbiBpZiBhbGxvY2F0 aW5nIHZpYSBzYnJrKDIpICh1bmxpa2VseSB1bmxlc3MgcnVubmluZyB3aXRoIHRoZQotICAgICJk c3M6cHJpbWFyeSIgb3B0aW9uIHNwZWNpZmllZCkuICBUaGlzIHdhcyBjb21wbGV0ZWx5IGhhcm1s ZXNzIG9uIExpbnV4Ci0gICAgdW5sZXNzIHVzaW5nIG1sb2NrYWxsKDIpIChhbmQgdW5saWtlbHkg ZXZlbiB0aGVuLCB1bmxlc3MgdGhlCi0gICAgLS1kaXNhYmxlLW11bm1hcCBjb25maWd1cmUgb3B0 aW9uIG9yIHRoZSAiZHNzOnByaW1hcnkiIG9wdGlvbiB3YXMKLSAgICBzcGVjaWZpZWQpLiAgVGhp cyByZWdyZXNzaW9uIHdhcyBpbnRyb2R1Y2VkIGluIDMuMS4wIGJ5IHRoZQotICAgIG1sb2NrYWxs KDIpL21hZHZpc2UoMikgaW50ZXJhY3Rpb24gZml4LgotICAtIEZpeCBUTFMtcmVsYXRlZCBtZW1v cnkgY29ycnVwdGlvbiB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyB0aHJlYWQgZXhpdCBpZiB0aGUK LSAgICB0aHJlYWQgbmV2ZXIgYWxsb2NhdGVkIG1lbW9yeS4gIE9ubHkgdGhlIHF1YXJhbnRpbmUg YW5kIHByb2YgZmFjaWxpdGllcyB3ZXJlCi0gICAgc3VzY2VwdGlibGUuCi0gIC0gRml4IHR3byBx dWFyYW50aW5lIGJ1Z3M6Ci0gICAgKyBJbnRlcm5hbCByZWFsbG9jYXRpb24gb2YgdGhlIHF1YXJh bnRpbmVkIG9iamVjdCBhcnJheSBsZWFrZWQgdGhlIG9sZAotICAgICAgYXJyYXkuCi0gICAgKyBS ZWFsbG9jYXRpb24gZmFpbHVyZSBmb3IgaW50ZXJuYWwgcmVhbGxvY2F0aW9uIG9mIHRoZSBxdWFy YW50aW5lZCBvYmplY3QKLSAgICAgIGFycmF5ICh2ZXJ5IHVubGlrZWx5KSByZXN1bHRlZCBpbiBt ZW1vcnkgY29ycnVwdGlvbi4KLSAgLSBGaXggVmFsZ3JpbmQgaW50ZWdyYXRpb24gdG8gYW5ub3Rh dGUgYWxsIGludGVybmFsbHkgYWxsb2NhdGVkIG1lbW9yeSBpbiBhCi0gICAgd2F5IHRoYXQga2Vl cHMgVmFsZ3JpbmQgaGFwcHkgYWJvdXQgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWNjZXNzLgot ICAtIEZpeCBidWlsZGluZyBmb3IgczM5MCBzeXN0ZW1zLgotCi0qIDMuMy4wIChKYW51YXJ5IDIz LCAyMDEzKQotCi0gIFRoaXMgdmVyc2lvbiBpbmNsdWRlcyBhIGZldyBtaW5vciBwZXJmb3JtYW5j ZSBpbXByb3ZlbWVudHMgaW4gYWRkaXRpb24gdG8gdGhlCi0gIGxpc3RlZCBuZXcgZmVhdHVyZXMg YW5kIGJ1ZyBmaXhlcy4KLQotICBOZXcgZmVhdHVyZXM6Ci0gIC0gQWRkIGNsaXBwaW5nIHN1cHBv cnQgdG8gbGdfY2h1bmsgb3B0aW9uIHByb2Nlc3NpbmcuCi0gIC0gQWRkIHRoZSAtLWVuYWJsZS1p dnNhbGxvYyBvcHRpb24uCi0gIC0gQWRkIHRoZSAtLXdpdGhvdXQtZXhwb3J0IG9wdGlvbi4KLSAg LSBBZGQgdGhlIC0tZGlzYWJsZS16b25lLWFsbG9jYXRvciBvcHRpb24uCi0KLSAgQnVnIGZpeGVz OgotICAtIEZpeCAiYXJlbmFzLmV4dGVuZCIgbWFsbGN0bCB0byBvdXRwdXQgdGhlIG51bWJlciBv ZiBhcmVuYXMuCi0gIC0gRml4IGNodW5rX3JlY3ljbGUoKSB0byB1bmNvbmRpdGlvbmFsbHkgaW5m b3JtIFZhbGdyaW5kIHRoYXQgcmV0dXJuZWQgbWVtb3J5Ci0gICAgaXMgdW5kZWZpbmVkLgotICAt IEZpeCBidWlsZCBicmVhayBvbiBGcmVlQlNEIHJlbGF0ZWQgdG8gYWxsb2NhLmguCi0KLSogMy4y LjAgKE5vdmVtYmVyIDksIDIwMTIpCi0KLSAgSW4gYWRkaXRpb24gdG8gYSBjb3VwbGUgb2YgYnVn IGZpeGVzLCB0aGlzIHZlcnNpb24gbW9kaWZpZXMgcGFnZSBydW4KLSAgYWxsb2NhdGlvbiBhbmQg ZGlydHkgcGFnZSBwdXJnaW5nIGFsZ29yaXRobXMgaW4gb3JkZXIgdG8gYmV0dGVyIGNvbnRyb2wK LSAgcGFnZS1sZXZlbCB2aXJ0dWFsIG1lbW9yeSBmcmFnbWVudGF0aW9uLgotCi0gIEluY29tcGF0 aWJsZSBjaGFuZ2VzOgotICAtIENoYW5nZSB0aGUgIm9wdC5sZ19kaXJ0eV9tdWx0IiBkZWZhdWx0 IGZyb20gNSB0byAzICgzMjoxIHRvIDg6MSkuCi0KLSAgQnVnIGZpeGVzOgotICAtIEZpeCBkc3Mv bW1hcCBhbGxvY2F0aW9uIHByZWNlZGVuY2UgY29kZSB0byB1c2UgcmVjeWNsYWJsZSBtbWFwIG1l bW9yeSBvbmx5Ci0gICAgYWZ0ZXIgcHJpbWFyeSBkc3MgYWxsb2NhdGlvbiBmYWlscy4KLSAgLSBG aXggZGVhZGxvY2sgaW4gdGhlICJhcmVuYXMucHVyZ2UiIG1hbGxjdGwuICBUaGlzIHJlZ3Jlc3Np b24gd2FzIGludHJvZHVjZWQKLSAgICBpbiAzLjEuMCBieSB0aGUgYWRkaXRpb24gb2YgdGhlICJh cmVuYS48aT4ucHVyZ2UiIG1hbGxjdGwuCi0KLSogMy4xLjAgKE9jdG9iZXIgMTYsIDIwMTIpCi0K LSAgTmV3IGZlYXR1cmVzOgotICAtIEF1dG8tZGV0ZWN0IHdoZXRoZXIgcnVubmluZyBpbnNpZGUg VmFsZ3JpbmQsIHRodXMgcmVtb3ZpbmcgdGhlIG5lZWQgdG8KLSAgICBtYW51YWxseSBzcGVjaWZ5 IE1BTExPQ19DT05GPXZhbGdyaW5kOnRydWUuCi0gIC0gQWRkIHRoZSAiYXJlbmFzLmV4dGVuZCIg bWFsbGN0bCwgd2hpY2ggYWxsb3dzIGFwcGxpY2F0aW9ucyB0byBjcmVhdGUKLSAgICBtYW51YWxs eSBtYW5hZ2VkIGFyZW5hcy4KLSAgLSBBZGQgdGhlIEFMTE9DTV9BUkVOQSgpIGZsYWcgZm9yIHss cixkfWFsbG9jbSgpLgotICAtIEFkZCB0aGUgIm9wdC5kc3MiLCAiYXJlbmEuPGk+LmRzcyIsIGFu ZCAic3RhdHMuYXJlbmFzLjxpPi5kc3MiIG1hbGxjdGxzLAotICAgIHdoaWNoIHByb3ZpZGUgY29u dHJvbCBvdmVyIGRzcy9tbWFwIHByZWNlZGVuY2UuCi0gIC0gQWRkIHRoZSAiYXJlbmEuPGk+LnB1 cmdlIiBtYWxsY3RsLCB3aGljaCBvYnNvbGV0ZXMgImFyZW5hcy5wdXJnZSIuCi0gIC0gRGVmaW5l IExHX1FVQU5UVU0gZm9yIGhwcGEuCi0KLSAgSW5jb21wYXRpYmxlIGNoYW5nZXM6Ci0gIC0gRGlz YWJsZSB0Y2FjaGUgYnkgZGVmYXVsdCBpZiBydW5uaW5nIGluc2lkZSBWYWxncmluZCwgaW4gb3Jk ZXIgdG8gYXZvaWQKLSAgICBtYWtpbmcgdW5hbGxvY2F0ZWQgb2JqZWN0cyBhcHBlYXIgcmVhY2hh YmxlIHRvIFZhbGdyaW5kLgotICAtIERyb3AgY29uc3QgZnJvbSBtYWxsb2NfdXNhYmxlX3NpemUo KSBhcmd1bWVudCBvbiBMaW51eC4KLQotICBCdWcgZml4ZXM6Ci0gIC0gRml4IGhlYXAgcHJvZmls aW5nIGNyYXNoIGlmIHNhbXBsZWQgb2JqZWN0IGlzIGZyZWVkIHZpYSByZWFsbG9jKHAsIDApLgot ICAtIFJlbW92ZSBjb25zdCBmcm9tIF9fKl9ob29rIHZhcmlhYmxlIGRlY2xhcmF0aW9ucywgc28g dGhhdCBnbGliYyBjYW4gbW9kaWZ5Ci0gICAgdGhlbSBkdXJpbmcgcHJvY2VzcyBmb3JraW5nLgot ICAtIEZpeCBtbG9ja2FsbCgyKS9tYWR2aXNlKDIpIGludGVyYWN0aW9uLgotICAtIEZpeCBmb3Jr KDIpLXJlbGF0ZWQgZGVhZGxvY2tzLgotICAtIEZpeCBlcnJvciByZXR1cm4gdmFsdWUgZm9yICJ0 aHJlYWQudGNhY2hlLmVuYWJsZWQiIG1hbGxjdGwuCi0KLSogMy4wLjAgKE1heSAxMSwgMjAxMikK LQotICBBbHRob3VnaCB0aGlzIHZlcnNpb24gYWRkcyBzb21lIG1ham9yIG5ldyBmZWF0dXJlcywg dGhlIHByaW1hcnkgZm9jdXMgaXMgb24KLSAgaW50ZXJuYWwgY29kZSBjbGVhbnVwIHRoYXQgZmFj aWxpdGF0ZXMgbWFpbnRhaW5hYmlsaXR5IGFuZCBwb3J0YWJpbGl0eSwgbW9zdAotICBvZiB3aGlj aCBpcyBub3QgcmVmbGVjdGVkIGluIHRoZSBDaGFuZ2VMb2cuICBUaGlzIGlzIHRoZSBmaXJzdCBy ZWxlYXNlIHRvCi0gIGluY29ycG9yYXRlIHN1YnN0YW50aWFsIGNvbnRyaWJ1dGlvbnMgZnJvbSBu dW1lcm91cyBvdGhlciBkZXZlbG9wZXJzLCBhbmQgdGhlCi0gIHJlc3VsdCBpcyBhIG1vcmUgYnJv YWRseSB1c2VmdWwgYWxsb2NhdG9yIChzZWUgdGhlIGdpdCByZXZpc2lvbiBoaXN0b3J5IGZvcgot ICBjb250cmlidXRpb24gZGV0YWlscykuICBOb3RlIHRoYXQgdGhlIGxpY2Vuc2UgaGFzIGJlZW4g dW5pZmllZCwgdGhhbmtzIHRvCi0gIEZhY2Vib29rIGdyYW50aW5nIGEgbGljZW5zZSB1bmRlciB0 aGUgc2FtZSB0ZXJtcyBhcyB0aGUgb3RoZXIgY29weXJpZ2h0Ci0gIGhvbGRlcnMgKHNlZSBDT1BZ SU5HKS4KLQotICBOZXcgZmVhdHVyZXM6Ci0gIC0gSW1wbGVtZW50IFZhbGdyaW5kIHN1cHBvcnQs IHJlZHpvbmVzLCBhbmQgcXVhcmFudGluZS4KLSAgLSBBZGQgc3VwcG9ydCBmb3IgYWRkaXRpb25h bCBwbGF0Zm9ybXM6Ci0gICAgKyBGcmVlQlNECi0gICAgKyBNYWMgT1MgWCBMaW9uCi0gICAgKyBN aW5HVwotICAgICsgV2luZG93cyAobm8gc3VwcG9ydCB5ZXQgZm9yIHJlcGxhY2luZyB0aGUgc3lz dGVtIG1hbGxvYykKLSAgLSBBZGQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCBhcmNoaXRlY3R1cmVz OgotICAgICsgTUlQUwotICAgICsgU0g0Ci0gICAgKyBUaWxlcmEKLSAgLSBBZGQgc3VwcG9ydCBm b3IgY3Jvc3MgY29tcGlsaW5nLgotICAtIEFkZCBuYWxsb2NtKCksIHdoaWNoIHJvdW5kcyBhIHJl cXVlc3Qgc2l6ZSB1cCB0byB0aGUgbmVhcmVzdCBzaXplIGNsYXNzCi0gICAgd2l0aG91dCBhY3R1 YWxseSBhbGxvY2F0aW5nLgotICAtIEltcGxlbWVudCBhbGlnbmVkX2FsbG9jKCkgKGJsYW1lIEMx MSkuCi0gIC0gQWRkIHRoZSAidGhyZWFkLnRjYWNoZS5lbmFibGVkIiBtYWxsY3RsLgotICAtIEFk ZCB0aGUgIm9wdC5wcm9mX2ZpbmFsIiBtYWxsY3RsLgotICAtIFVwZGF0ZSBwcHJvZiAoZnJvbSBn cGVyZnRvb2xzIDIuMCkuCi0gIC0gQWRkIHRoZSAtLXdpdGgtbWFuZ2xpbmcgb3B0aW9uLgotICAt IEFkZCB0aGUgLS1kaXNhYmxlLWV4cGVyaW1lbnRhbCBvcHRpb24uCi0gIC0gQWRkIHRoZSAtLWRp c2FibGUtbXVubWFwIG9wdGlvbiwgYW5kIG1ha2UgaXQgdGhlIGRlZmF1bHQgb24gTGludXguCi0g IC0gQWRkIHRoZSAtLWVuYWJsZS1tcmVtYXAgb3B0aW9uLCB3aGljaCBkaXNhYmxlcyB1c2Ugb2Yg bXJlbWFwKDIpIGJ5IGRlZmF1bHQuCi0KLSAgSW5jb21wYXRpYmxlIGNoYW5nZXM6Ci0gIC0gRW5h YmxlIHN0YXRzIGJ5IGRlZmF1bHQuCi0gIC0gRW5hYmxlIGZpbGwgYnkgZGVmYXVsdC4KLSAgLSBE aXNhYmxlIGxhenkgbG9ja2luZyBieSBkZWZhdWx0LgotICAtIFJlbmFtZSB0aGUgInRjYWNoZS5m bHVzaCIgbWFsbGN0bCB0byAidGhyZWFkLnRjYWNoZS5mbHVzaCIuCi0gIC0gUmVuYW1lIHRoZSAi YXJlbmFzLnBhZ2VzaXplIiBtYWxsY3RsIHRvICJhcmVuYXMucGFnZSIuCi0gIC0gQ2hhbmdlIHRo ZSAib3B0LmxnX3Byb2Zfc2FtcGxlIiBkZWZhdWx0IGZyb20gMCB0byAxOSAoMSBCIHRvIDUxMiBL aUIpLgotICAtIENoYW5nZSB0aGUgIm9wdC5wcm9mX2FjY3VtIiBkZWZhdWx0IGZyb20gdHJ1ZSB0 byBmYWxzZS4KLQotICBSZW1vdmVkIGZlYXR1cmVzOgotICAtIFJlbW92ZSB0aGUgc3dhcCBmZWF0 dXJlLCBpbmNsdWRpbmcgdGhlICJjb25maWcuc3dhcCIsICJzd2FwLmF2YWlsIiwKLSAgICAic3dh cC5wcmV6ZXJvZWQiLCAic3dhcC5uZmRzIiwgYW5kICJzd2FwLmZkcyIgbWFsbGN0bHMuCi0gIC0g UmVtb3ZlIGhpZ2hydW5zIHN0YXRpc3RpY3MsIGluY2x1ZGluZyB0aGUKLSAgICAic3RhdHMuYXJl bmFzLjxpPi5iaW5zLjxqPi5oaWdocnVucyIgYW5kCi0gICAgInN0YXRzLmFyZW5hcy48aT4ubHJ1 bnMuPGo+LmhpZ2hydW5zIiBtYWxsY3Rscy4KLSAgLSBBcyBwYXJ0IG9mIHNtYWxsIHNpemUgY2xh c3MgcmVmYWN0b3JpbmcsIHJlbW92ZSB0aGUgIm9wdC5sZ19bcWNdc3BhY2VfbWF4IiwKLSAgICAi YXJlbmFzLmNhY2hlbGluZSIsICJhcmVuYXMuc3VicGFnZSIsICJhcmVuYXMuW3RxY3Ndc3BhY2Vf e21pbixtYXh9IiwgYW5kCi0gICAgImFyZW5hcy5bdHFjc11iaW5zIiBtYWxsY3Rscy4KLSAgLSBS ZW1vdmUgdGhlICJhcmVuYXMuY2h1bmtzaXplIiBtYWxsY3RsLgotICAtIFJlbW92ZSB0aGUgIm9w dC5sZ19wcm9mX3RjbWF4IiBvcHRpb24uCi0gIC0gUmVtb3ZlIHRoZSAib3B0LmxnX3Byb2ZfYnRf bWF4IiBvcHRpb24uCi0gIC0gUmVtb3ZlIHRoZSAib3B0LmxnX3RjYWNoZV9nY19zd2VlcCIgb3B0 aW9uLgotICAtIFJlbW92ZSB0aGUgLS1kaXNhYmxlLXRpbnkgb3B0aW9uLCBpbmNsdWRpbmcgdGhl ICJjb25maWcudGlueSIgbWFsbGN0bC4KLSAgLSBSZW1vdmUgdGhlIC0tZW5hYmxlLWR5bmFtaWMt cGFnZS1zaGlmdCBjb25maWd1cmUgb3B0aW9uLgotICAtIFJlbW92ZSB0aGUgLS1lbmFibGUtc3lz diBjb25maWd1cmUgb3B0aW9uLgotCi0gIEJ1ZyBmaXhlczoKLSAgLSBGaXggYSBzdGF0aXN0aWNz LXJlbGF0ZWQgYnVnIGluIHRoZSAidGhyZWFkLmFyZW5hIiBtYWxsY3RsIHRoYXQgY291bGQgY2F1 c2UKLSAgICBpbnZhbGlkIHN0YXRpc3RpY3MgYW5kIGNyYXNoZXMuCi0gIC0gV29yayBhcm91bmQg VExTIGRlYWxsb2NhdGlvbiB2aWEgZnJlZSgpIG9uIExpbnV4LiAgVGhpcyBidWcgY291bGQgY2F1 c2UKLSAgICB3cml0ZS1hZnRlci1mcmVlIG1lbW9yeSBjb3JydXB0aW9uLgotICAtIEZpeCBhIHBv dGVudGlhbCBkZWFkbG9jayB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyBpbnRlcnZhbC0gYW5kCi0g ICAgZ3Jvd3RoLXRyaWdnZXJlZCBoZWFwIHByb2ZpbGUgZHVtcHMuCi0gIC0gRml4IGxhcmdlIGNh bGxvYygpIHplcm9pbmcgYnVncyBkdWUgdG8gZHJvcHBpbmcgY2h1bmsgbWFwIHVuemVyb2VkIGZs YWdzLgotICAtIEZpeCBjaHVua19hbGxvY19kc3MoKSB0byBzdG9wIGNsYWltaW5nIG1lbW9yeSBp cyB6ZXJvZWQuICBUaGlzIGJ1ZyBjb3VsZAotICAgIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIGFu ZCBjcmFzaGVzIHdpdGggLS1lbmFibGUtZHNzIHNwZWNpZmllZC4KLSAgLSBGaXggZm9yay1yZWxh dGVkIGJ1Z3MgdGhhdCBjb3VsZCBjYXVzZSBkZWFkbG9jayBpbiBjaGlsZHJlbiBiZXR3ZWVuIGZv cmsKLSAgICBhbmQgZXhlYy4KLSAgLSBGaXggbWFsbG9jX3N0YXRzX3ByaW50KCkgdG8gaG9ub3Ig J2InIGFuZCAnbCcgaW4gdGhlIG9wdHMgcGFyYW1ldGVyLgotICAtIEZpeCByZWFsbG9jKHAsIDAp IHRvIGFjdCBsaWtlIGZyZWUocCkuCi0gIC0gRG8gbm90IGVuZm9yY2UgbWluaW11bSBhbGlnbm1l bnQgaW4gbWVtYWxpZ24oKS4KLSAgLSBDaGVjayBmb3IgTlVMTCBwb2ludGVyIGluIG1hbGxvY191 c2FibGVfc2l6ZSgpLgotICAtIEZpeCBhbiBvZmYtYnktb25lIGhlYXAgcHJvZmlsZSBzdGF0aXN0 aWNzIGJ1ZyB0aGF0IGNvdWxkIGJlIG9ic2VydmVkIGluCi0gICAgaW50ZXJ2YWwtIGFuZCBncm93 dGgtdHJpZ2dlcmVkIGhlYXAgcHJvZmlsZXMuCi0gIC0gRml4IHRoZSAiZXBvY2giIG1hbGxjdGwg dG8gdXBkYXRlIGNhY2hlZCBzdGF0cyBldmVuIGlmIHRoZSBwYXNzZWQgaW4gZXBvY2gKLSAgICBp cyAwLgotICAtIEZpeCBiaW4tPnJ1bmN1ciBtYW5hZ2VtZW50IHRvIGZpeCBhIGxheW91dCBwb2xp Y3kgYnVnLiAgVGhpcyBidWcgZGlkIG5vdAotICAgIGFmZmVjdCBjb3JyZWN0bmVzcy4KLSAgLSBG aXggYSBidWcgaW4gY2hvb3NlX2FyZW5hX2hhcmQoKSB0aGF0IHBvdGVudGlhbGx5IGNhdXNlZCBt b3JlIGFyZW5hcyB0byBiZQotICAgIGluaXRpYWxpemVkIHRoYW4gbmVjZXNzYXJ5LgotICAtIEFk ZCBtaXNzaW5nICJvcHQubGdfdGNhY2hlX21heCIgbWFsbGN0bCBpbXBsZW1lbnRhdGlvbi4KLSAg LSBVc2UgZ2xpYmMgYWxsb2NhdG9yIGhvb2tzIHRvIG1ha2UgbWl4ZWQgYWxsb2NhdG9yIHVzYWdl IGxlc3MgbGlrZWx5LgotICAtIEZpeCBidWlsZCBpc3N1ZXMgZm9yIC0tZGlzYWJsZS10Y2FjaGUu Ci0gIC0gRG9uJ3QgbWFuZ2xlIHB0aHJlYWRfY3JlYXRlKCkgd2hlbiAtLXdpdGgtcHJpdmF0ZS1u YW1lc3BhY2UgaXMgc3BlY2lmaWVkLgotCi0qIDIuMi41IChOb3ZlbWJlciAxNCwgMjAxMSkKLQot ICBCdWcgZml4ZXM6Ci0gIC0gRml4IGh1Z2VfcmFsbG9jKCkgcmFjZSB3aGVuIHVzaW5nIG1yZW1h cCgyKS4gIFRoaXMgaXMgYSBzZXJpb3VzIGJ1ZyB0aGF0Ci0gICAgY291bGQgY2F1c2UgbWVtb3J5 IGNvcnJ1cHRpb24gYW5kL29yIGNyYXNoZXMuCi0gIC0gRml4IGh1Z2VfcmFsbG9jKCkgdG8gbWFp bnRhaW4gY2h1bmsgc3RhdGlzdGljcy4KLSAgLSBGaXggbWFsbG9jX3N0YXRzX3ByaW50KC4uLiwg ImEiKSBvdXRwdXQuCi0KLSogMi4yLjQgKE5vdmVtYmVyIDUsIDIwMTEpCi0KLSAgQnVnIGZpeGVz OgotICAtIEluaXRpYWxpemUgYXJlbmFzX3RzZCBiZWZvcmUgdXNpbmcgaXQuICBUaGlzIGJ1ZyBl eGlzdGVkIGZvciAyLjIuWzAtM10sIGFzCi0gICAgd2VsbCBhcyBmb3IgLS1kaXNhYmxlLXRscyBi dWlsZHMgaW4gZWFybGllciByZWxlYXNlcy4KLSAgLSBEbyBub3QgYXNzdW1lIGEgNCBLaUIgcGFn ZSBzaXplIGluIHRlc3QvcmFsbG9jbS5jLgotCi0qIDIuMi4zIChBdWd1c3QgMzEsIDIwMTEpCi0K LSAgVGhpcyB2ZXJzaW9uIGZpeGVzIG51bWVyb3VzIGJ1Z3MgcmVsYXRlZCB0byBoZWFwIHByb2Zp bGluZy4KLQotICBCdWcgZml4ZXM6Ci0gIC0gRml4IGEgcHJvZi1yZWxhdGVkIHJhY2UgY29uZGl0 aW9uLiAgVGhpcyBidWcgY291bGQgY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24sCi0gICAgYnV0IG9u bHkgb2NjdXJyZWQgaW4gbm9uLWRlZmF1bHQgY29uZmlndXJhdGlvbnMgKHByb2ZfYWNjdW06ZmFs c2UpLgotICAtIEZpeCBvZmYtYnktb25lIGJhY2t0cmFjaW5nIGlzc3VlcyAobWFrZSBzdXJlIHRo YXQgcHJvZl9hbGxvY19wcmVwKCkgaXMKLSAgICBleGNsdWRlZCBmcm9tIGJhY2t0cmFjZXMpLgot ICAtIEZpeCBhIHByb2YtcmVsYXRlZCBidWcgaW4gcmVhbGxvYygpIChvbmx5IHRyaWdnZXJlZCBi eSBPT00gZXJyb3JzKS4KLSAgLSBGaXggcHJvZi1yZWxhdGVkIGJ1Z3MgaW4gYWxsb2NtKCkgYW5k IHJhbGxvY20oKS4KLSAgLSBGaXggcHJvZl90ZGF0YV9jbGVhbnVwKCkgZm9yIC0tZGlzYWJsZS10 bHMgYnVpbGRzLgotICAtIEZpeCBhIHJlbGF0aXZlIGluY2x1ZGUgcGF0aCwgdG8gZml4IG9iamRp ciBidWlsZHMuCi0KLSogMi4yLjIgKEp1bHkgMzAsIDIwMTEpCi0KLSAgQnVnIGZpeGVzOgotICAt IEZpeCBhIGJ1aWxkIGVycm9yIGZvciAtLWRpc2FibGUtdGNhY2hlLgotICAtIEZpeCBhc3NlcnRp b25zIGluIGFyZW5hX3B1cmdlKCkgKGZvciByZWFsIHRoaXMgdGltZSkuCi0gIC0gQWRkIHRoZSAt LXdpdGgtcHJpdmF0ZS1uYW1lc3BhY2Ugb3B0aW9uLiAgVGhpcyBpcyBhIHdvcmthcm91bmQgZm9y IHN5bWJvbAotICAgIGNvbmZsaWN0cyB0aGF0IGNhbiBpbmFkdmVydGVudGx5IGFyaXNlIHdoZW4g dXNpbmcgc3RhdGljIGxpYnJhcmllcy4KLQotKiAyLjIuMSAoTWFyY2ggMzAsIDIwMTEpCi0KLSAg QnVnIGZpeGVzOgotICAtIEltcGxlbWVudCBhdG9taWMgb3BlcmF0aW9ucyBmb3IgeDg2L3g2NC4g IFRoaXMgZml4ZXMgY29tcGlsYXRpb24gZmFpbHVyZXMKLSAgICBmb3IgdmVyc2lvbnMgb2YgZ2Nj IHRoYXQgYXJlIHN0aWxsIGluIHdpZGUgdXNlLgotICAtIEZpeCBhbiBhc3NlcnRpb24gaW4gYXJl bmFfcHVyZ2UoKS4KLQotKiAyLjIuMCAoTWFyY2ggMjIsIDIwMTEpCi0KLSAgVGhpcyB2ZXJzaW9u IGluY29ycG9yYXRlcyBzZXZlcmFsIGltcHJvdmVtZW50cyB0byBhbGdvcml0aG1zIGFuZCBkYXRh Ci0gIHN0cnVjdHVyZXMgdGhhdCB0ZW5kIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIGFuZCBpbmNy ZWFzZSBzcGVlZC4KLQotICBOZXcgZmVhdHVyZXM6Ci0gIC0gQWRkIHRoZSAic3RhdHMuY2FjdGl2 ZSIgbWFsbGN0bC4KLSAgLSBVcGRhdGUgcHByb2YgKGZyb20gZ29vZ2xlLXBlcmZ0b29scyAxLjcp LgotICAtIEltcHJvdmUgYmFja3RyYWNpbmctcmVsYXRlZCBjb25maWd1cmF0aW9uIGxvZ2ljLCBh bmQgYWRkIHRoZQotICAgIC0tZGlzYWJsZS1wcm9mLWxpYmdjYyBvcHRpb24uCi0KLSAgQnVnIGZp eGVzOgotICAtIENoYW5nZSBkZWZhdWx0IHN5bWJvbCB2aXNpYmlsaXR5IGZyb20gImludGVybmFs IiwgdG8gImhpZGRlbiIsIHdoaWNoCi0gICAgZGVjcmVhc2VzIHRoZSBvdmVyaGVhZCBvZiBsaWJy YXJ5LWludGVybmFsIGZ1bmN0aW9uIGNhbGxzLgotICAtIEZpeCBzeW1ib2wgdmlzaWJpbGl0eSBz byB0aGF0IGl0IGlzIGFsc28gc2V0IG9uIE9TIFguCi0gIC0gRml4IGEgYnVpbGQgZGVwZW5kZW5j eSByZWdyZXNzaW9uIGNhdXNlZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSAucGljLm8KLSAg ICBzdWZmaXggZm9yIFBJQyBvYmplY3QgZmlsZXMuCi0gIC0gQWRkIG1pc3NpbmcgY2hlY2tzIGZv ciBtdXRleCBpbml0aWFsaXphdGlvbiBmYWlsdXJlcy4KLSAgLSBEb24ndCB1c2UgbGliZ2NjLWJh c2VkIGJhY2t0cmFjaW5nIGV4Y2VwdCBvbiB4NjQsIHdoZXJlIGl0IGlzIGtub3duIHRvIHdvcmsu Ci0gIC0gRml4IGRlYWRsb2NrcyBvbiBPUyBYIHRoYXQgd2VyZSBkdWUgdG8gbWVtb3J5IGFsbG9j YXRpb24gaW4KLSAgICBwdGhyZWFkX211dGV4X2xvY2soKS4KLSAgLSBIZWFwIHByb2ZpbGluZy1z cGVjaWZpYyBmaXhlczoKLSAgICArIEZpeCBtZW1vcnkgY29ycnVwdGlvbiBkdWUgdG8gaW50ZWdl ciBvdmVyZmxvdyBpbiBzbWFsbCByZWdpb24gaW5kZXgKLSAgICAgIGNvbXB1dGF0aW9uLCB3aGVu IHVzaW5nIGEgc21hbGwgZW5vdWdoIHNhbXBsZSBpbnRlcnZhbCB0aGF0IHByb2ZpbGluZwotICAg ICAgY29udGV4dCBwb2ludGVycyBhcmUgc3RvcmVkIGluIHNtYWxsIHJ1biBoZWFkZXJzLgotICAg ICsgRml4IGEgYm9vdHN0cmFwIG9yZGVyaW5nIGJ1ZyB0aGF0IG9ubHkgb2NjdXJyZWQgd2l0aCBU TFMgZGlzYWJsZWQuCi0gICAgKyBGaXggYSByYWxsb2NtKCkgcnNpemUgYnVnLgotICAgICsgRml4 IGVycm9yIGRldGVjdGlvbiBidWdzIGZvciBhbGlnbmVkIG1lbW9yeSBhbGxvY2F0aW9uLgotCi0q IDIuMS4zIChNYXJjaCAxNCwgMjAxMSkKLQotICBCdWcgZml4ZXM6Ci0gIC0gRml4IGEgY3BwIGxv Z2ljIHJlZ3Jlc3Npb24gKGR1ZSB0byB0aGUgInRocmVhZC57ZGUsfWFsbG9jYXRlZHAiIG1hbGxj dGwgZml4Ci0gICAgZm9yIE9TIFggaW4gMi4xLjIpLgotICAtIEZpeCBhICJ0aHJlYWQuYXJlbmEi IG1hbGxjdGwgYnVnLgotICAtIEZpeCBhIHRocmVhZCBjYWNoZSBzdGF0cyBtZXJnaW5nIGJ1Zy4K LQotKiAyLjEuMiAoTWFyY2ggMiwgMjAxMSkKLQotICBCdWcgZml4ZXM6Ci0gIC0gRml4ICJ0aHJl YWQue2RlLH1hbGxvY2F0ZWRwIiBtYWxsY3RsIGZvciBPUyBYLgotICAtIEFkZCBtaXNzaW5nIGpl bWFsbG9jLmEgdG8gYnVpbGQgc3lzdGVtLgotCi0qIDIuMS4xIChKYW51YXJ5IDMxLCAyMDExKQot Ci0gIEJ1ZyBmaXhlczoKLSAgLSBGaXggYWxpZ25lZCBodWdlIHJlYWxsb2NhdGlvbiAoYWZmZWN0 ZWQgYWxsb2NtKCkpLgotICAtIEZpeCB0aGUgQUxMT0NNX0xHX0FMSUdOIG1hY3JvIGRlZmluaXRp b24uCi0gIC0gRml4IGEgaGVhcCBkdW1waW5nIGRlYWRsb2NrLgotICAtIEZpeCBhICJ0aHJlYWQu YXJlbmEiIG1hbGxjdGwgYnVnLgotCi0qIDIuMS4wIChEZWNlbWJlciAzLCAyMDEwKQotCi0gIFRo aXMgdmVyc2lvbiBpbmNvcnBvcmF0ZXMgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgY2FuJ3QgcXVp dGUgYmUgY29uc2lkZXJlZAotICBidWcgZml4ZXMuCi0KLSAgTmV3IGZlYXR1cmVzOgotICAtIFVz ZSBMaW51eCdzIG1yZW1hcCgyKSBmb3IgaHVnZSBvYmplY3QgcmVhbGxvY2F0aW9uIHdoZW4gcG9z c2libGUuCi0gIC0gQXZvaWQgbG9ja2luZyBpbiBtYWxsY3RsKigpIHdoZW4gcG9zc2libGUuCi0g IC0gQWRkIHRoZSAidGhyZWFkLltkZV1hbGxvY2F0ZWRwIiBtYWxsY3RsJ3MuCi0gIC0gQ29udmVy dCB0aGUgbWFudWFsIHBhZ2Ugc291cmNlIGZyb20gcm9mZiB0byBEb2NCb29rLCBhbmQgZ2VuZXJh dGUgYm90aCByb2ZmCi0gICAgYW5kIEhUTUwgbWFudWFscy4KLQotICBCdWcgZml4ZXM6Ci0gIC0g Rml4IGEgY3Jhc2ggZHVlIHRvIGluY29ycmVjdCBib290c3RyYXAgb3JkZXJpbmcuICBUaGlzIG9u bHkgaW1wYWN0ZWQKLSAgICAtLWVuYWJsZS1kZWJ1ZyAtLWVuYWJsZS1kc3MgY29uZmlndXJhdGlv bnMuCi0gIC0gRml4IGEgbWlub3Igc3RhdGlzdGljcyBidWcgZm9yIG1hbGxjdGwoInN3YXAuYXZh aWwiLCAuLi4pLgotCi0qIDIuMC4xIChPY3RvYmVyIDI5LCAyMDEwKQotCi0gIEJ1ZyBmaXhlczoK LSAgLSBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBoZWFwIHByb2ZpbGluZyB0aGF0IGNvdWxkIGNh dXNlIHVuZGVmaW5lZCBiZWhhdmlvcgotICAgIGlmICJvcHQucHJvZl9hY2N1bSIgd2VyZSBkaXNh YmxlZC4KLSAgLSBBZGQgbWlzc2luZyBtdXRleCB1bmxvY2tzIGZvciBzb21lIE9PTSBlcnJvciBw YXRocyBpbiB0aGUgaGVhcCBwcm9maWxpbmcKLSAgICBjb2RlLgotICAtIEZpeCBhIGNvbXBpbGF0 aW9uIGVycm9yIGZvciBub24tQzk5IGJ1aWxkcy4KLQotKiAyLjAuMCAoT2N0b2JlciAyNCwgMjAx MCkKLQotICBUaGlzIHZlcnNpb24gZm9jdXNlcyBvbiB0aGUgZXhwZXJpbWVudGFsICphbGxvY20o KSBBUEksIGFuZCBvbiBpbXByb3ZlZAotICBydW4tdGltZSBjb25maWd1cmF0aW9uL2ludHJvc3Bl Y3Rpb24uICBOb25ldGhlbGVzcywgbnVtZXJvdXMgcGVyZm9ybWFuY2UKLSAgaW1wcm92ZW1lbnRz IGFyZSBhbHNvIGluY2x1ZGVkLgotCi0gIE5ldyBmZWF0dXJlczoKLSAgLSBJbXBsZW1lbnQgdGhl IGV4cGVyaW1lbnRhbCB7LHIscyxkfWFsbG9jbSgpIEFQSSwgd2hpY2ggcHJvdmlkZXMgYSBzdXBl cnNldAotICAgIG9mIHRoZSBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB2aWEgbWFsbG9jKCksIGNh bGxvYygpLCBwb3NpeF9tZW1hbGlnbigpLAotICAgIHJlYWxsb2MoKSwgbWFsbG9jX3VzYWJsZV9z aXplKCksIGFuZCBmcmVlKCkuICBUaGVzZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgdG8KLSAgICBh bGxvY2F0ZS9yZWFsbG9jYXRlIGFsaWduZWQgemVyb2VkIG1lbW9yeSwgYXNrIGZvciBvcHRpb25h bCBleHRyYSBtZW1vcnkKLSAgICBkdXJpbmcgcmVhbGxvY2F0aW9uLCBwcmV2ZW50IG9iamVjdCBt b3ZlbWVudCBkdXJpbmcgcmVhbGxvY2F0aW9uLCBldGMuCi0gIC0gUmVwbGFjZSBKRU1BTExPQ19P UFRJT05TL0pFTUFMTE9DX1BST0ZfUFJFRklYIHdpdGggTUFMTE9DX0NPTkYsIHdoaWNoIGlzCi0g ICAgbW9yZSBodW1hbi1yZWFkYWJsZSwgYW5kIG1vcmUgZmxleGlibGUuICBGb3IgZXhhbXBsZToK LSAgICAgIEpFTUFMTE9DX09QVElPTlM9QUpQCi0gICAgaXMgbm93OgotICAgICAgTUFMTE9DX0NP TkY9YWJvcnQ6dHJ1ZSxmaWxsOnRydWUsc3RhdHNfcHJpbnQ6dHJ1ZQotICAtIFBvcnQgdG8gQXBw bGUgT1MgWC4gIFNwb25zb3JlZCBieSBNb3ppbGxhLgotICAtIE1ha2UgaXQgcG9zc2libGUgZm9y IHRoZSBhcHBsaWNhdGlvbiB0byBjb250cm9sIHRocmVhZC0tPmFyZW5hIG1hcHBpbmdzIHZpYQot ICAgIHRoZSAidGhyZWFkLmFyZW5hIiBtYWxsY3RsLgotICAtIEFkZCBjb21waWxlLXRpbWUgc3Vw cG9ydCBmb3IgYWxsIFRMUy1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkgdmlhIHB0aHJlYWRzIFRTRC4K LSAgICBUaGlzIGlzIG1haW5seSBvZiBpbnRlcmVzdCBmb3IgT1MgWCwgd2hpY2ggZG9lcyBub3Qg c3VwcG9ydCBUTFMsIGJ1dCBoYXMgYQotICAgIFRTRCBpbXBsZW1lbnRhdGlvbiB3aXRoIHNpbWls YXIgcGVyZm9ybWFuY2UuCi0gIC0gT3ZlcnJpZGUgbWVtYWxpZ24oKSBhbmQgdmFsbG9jKCkgaWYg dGhleSBhcmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4KLSAgLSBBZGQgdGhlICJhcmVuYXMucHVy Z2UiIG1hbGxjdGwsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN5bmNocm9ub3VzbHkgcHVyZ2UgYWxs Ci0gICAgZGlydHkgdW51c2VkIHBhZ2VzLgotICAtIE1ha2UgY3VtdWxhdGl2ZSBoZWFwIHByb2Zp bGluZyBkYXRhIG9wdGlvbmFsLCBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvCi0gICAgbGltaXQg dGhlIGFtb3VudCBvZiBtZW1vcnkgY29uc3VtZWQgYnkgaGVhcCBwcm9maWxpbmcgZGF0YSBzdHJ1 Y3R1cmVzLgotICAtIEFkZCBwZXIgdGhyZWFkIGFsbG9jYXRpb24gY291bnRlcnMgdGhhdCBjYW4g YmUgYWNjZXNzZWQgdmlhIHRoZQotICAgICJ0aHJlYWQuYWxsb2NhdGVkIiBhbmQgInRocmVhZC5k ZWFsbG9jYXRlZCIgbWFsbGN0bHMuCi0KLSAgSW5jb21wYXRpYmxlIGNoYW5nZXM6Ci0gIC0gUmVt b3ZlIEpFTUFMTE9DX09QVElPTlMgYW5kIG1hbGxvY19vcHRpb25zIChzZWUgTUFMTE9DX0NPTkYg YWJvdmUpLgotICAtIEluY3JlYXNlIGRlZmF1bHQgYmFja3RyYWNlIGRlcHRoIGZyb20gNCB0byAx MjggZm9yIGhlYXAgcHJvZmlsaW5nLgotICAtIERpc2FibGUgaW50ZXJ2YWwtYmFzZWQgcHJvZmls ZSBkdW1wcyBieSBkZWZhdWx0LgotCi0gIEJ1ZyBmaXhlczoKLSAgLSBSZW1vdmUgYmFkIGFzc2Vy dGlvbnMgaW4gZm9yayBoYW5kbGVyIGZ1bmN0aW9ucy4gIFRoZXNlIGFzc2VydGlvbnMgY291bGQK LSAgICBjYXVzZSBhYm9ydHMgZm9yIHNvbWUgY29tYmluYXRpb25zIG9mIGNvbmZpZ3VyZSBzZXR0 aW5ncy4KLSAgLSBGaXggc3RyZXJyb3JfcigpIHVzYWdlIHRvIGRlYWwgd2l0aCBub24tc3RhbmRh cmQgc2VtYW50aWNzIGluIEdOVSBsaWJjLgotICAtIEZpeCBsZWFrIGNvbnRleHQgcmVwb3J0aW5n LiAgVGhpcyBidWcgdGVuZGVkIHRvIGNhdXNlIHRoZSBudW1iZXIgb2YgY29udGV4dHMKLSAgICB0 byBiZSB1bmRlcnJlcG9ydGVkICh0aG91Z2ggdGhlIHJlcG9ydGVkIG51bWJlciBvZiBvYmplY3Rz IGFuZCBieXRlcyB3ZXJlCi0gICAgY29ycmVjdCkuCi0gIC0gRml4IGEgcmVhbGxvYygpIGJ1ZyBm b3IgbGFyZ2UgaW4tcGxhY2UgZ3Jvd2luZyByZWFsbG9jYXRpb24uICBUaGlzIGJ1ZyBjb3VsZAot ICAgIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uLCBidXQgaXQgd2FzIGhhcmQgdG8gdHJpZ2dlci4K LSAgLSBGaXggYW4gYWxsb2NhdGlvbiBidWcgZm9yIHNtYWxsIGFsbG9jYXRpb25zIHRoYXQgY291 bGQgYmUgdHJpZ2dlcmVkIGlmCi0gICAgbXVsdGlwbGUgdGhyZWFkcyByYWNlZCB0byBjcmVhdGUg YSBuZXcgcnVuIG9mIGJhY2tpbmcgcGFnZXMuCi0gIC0gRW5oYW5jZSB0aGUgaGVhcCBwcm9maWxl ciB0byB0cmlnZ2VyIHNhbXBsZXMgYmFzZWQgb24gdXNhYmxlIHNpemUsIHJhdGhlcgotICAgIHRo YW4gcmVxdWVzdCBzaXplLgotICAtIEZpeCBhIGhlYXAgcHJvZmlsaW5nIGJ1ZyBkdWUgdG8gc29t ZXRpbWVzIGxvc2luZyB0cmFjayBvZiByZXF1ZXN0ZWQgb2JqZWN0Ci0gICAgc2l6ZSBmb3Igc2Ft cGxlZCBvYmplY3RzLgotCi0qIDEuMC4zIChBdWd1c3QgMTIsIDIwMTApCi0KLSAgQnVnIGZpeGVz OgotICAtIEZpeCB0aGUgbGlidW53aW5kLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHN0YWNrIGJh Y2t0cmFjaW5nICh1c2VkIGZvciBoZWFwCi0gICAgcHJvZmlsaW5nKS4gIFRoaXMgYnVnIGNvdWxk IGNhdXNlIHplcm8tbGVuZ3RoIGJhY2t0cmFjZXMgdG8gYmUgcmVwb3J0ZWQuCi0gIC0gQWRkIGEg bWlzc2luZyBtdXRleCB1bmxvY2sgaW4gbGlicmFyeSBpbml0aWFsaXphdGlvbiBjb2RlLiAgSWYg bXVsdGlwbGUKLSAgICB0aHJlYWRzIHJhY2VkIHRvIGluaXRpYWxpemUgbWFsbG9jLCBzb21lIG9m IHRoZW0gY291bGQgZW5kIHVwIHBlcm1hbmVudGx5Ci0gICAgYmxvY2tlZC4KLQotKiAxLjAuMiAo TWF5IDExLCAyMDEwKQotCi0gIEJ1ZyBmaXhlczoKLSAgLSBGaXgganVuayBmaWxsaW5nIG9mIGxh cmdlIG9iamVjdHMsIHdoaWNoIGNvdWxkIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uLgotICAtIEFk ZCBNQVBfTk9SRVNFUlZFIHN1cHBvcnQgZm9yIGNodW5rIG1hcHBpbmcsIGJlY2F1c2Ugb3RoZXJ3 aXNlIHZpcnR1YWwKLSAgICBtZW1vcnkgbGltaXRzIGNvdWxkIGNhdXNlIHN3YXAgZmlsZSBjb25m aWd1cmF0aW9uIHRvIGZhaWwuICBDb250cmlidXRlZCBieQotICAgIEpvcmRhbiBEZUxvbmcuCi0K LSogMS4wLjEgKEFwcmlsIDE0LCAyMDEwKQotCi0gIEJ1ZyBmaXhlczoKLSAgLSBGaXggY29tcGls YXRpb24gd2hlbiAtLWVuYWJsZS1maWxsIGlzIHNwZWNpZmllZC4KLSAgLSBGaXggdGhyZWFkcy1y ZWxhdGVkIHByb2ZpbGluZyBidWdzIHRoYXQgYWZmZWN0ZWQgYWNjdXJhY3kgYW5kIGNhdXNlZCBt ZW1vcnkKLSAgICB0byBiZSBsZWFrZWQgZHVyaW5nIHRocmVhZCBleGl0LgotICAtIEZpeCBkaXJ0 eSBwYWdlIHB1cmdpbmcgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgY2F1c2UgY3Jhc2hlcy4K LSAgLSBGaXggY3Jhc2ggaW4gdGNhY2hlIGZsdXNoaW5nIGNvZGUgZHVyaW5nIHRocmVhZCBkZXN0 cnVjdGlvbi4KLQotKiAxLjAuMCAoQXByaWwgMTEsIDIwMTApCi0KLSAgVGhpcyByZWxlYXNlIGZv Y3VzZXMgb24gc3BlZWQgYW5kIHJ1bi10aW1lIGludHJvc3BlY3Rpb24uICBOdW1lcm91cwotICBh bGdvcml0aG1pYyBpbXByb3ZlbWVudHMgbWFrZSB0aGlzIHJlbGVhc2Ugc3Vic3RhbnRpYWxseSBm YXN0ZXIgdGhhbiBpdHMKLSAgcHJlZGVjZXNzb3JzLgotCi0gIE5ldyBmZWF0dXJlczoKLSAgLSBJ bXBsZW1lbnQgYXV0b2NvbmYtYmFzZWQgY29uZmlndXJhdGlvbiBzeXN0ZW0uCi0gIC0gQWRkIG1h bGxjdGwqKCksIGZvciB0aGUgcHVycG9zZXMgb2YgaW50cm9zcGVjdGlvbiBhbmQgcnVuLXRpbWUK LSAgICBjb25maWd1cmF0aW9uLgotICAtIE1ha2UgaXQgcG9zc2libGUgZm9yIHRoZSBhcHBsaWNh dGlvbiB0byBtYW51YWxseSBmbHVzaCBhIHRocmVhZCdzIGNhY2hlLCB2aWEKLSAgICB0aGUgInRj YWNoZS5mbHVzaCIgbWFsbGN0bC4KLSAgLSBCYXNlIG1heGltdW0gZGlydHkgcGFnZSBjb3VudCBv biBwcm9wb3J0aW9uIG9mIGFjdGl2ZSBtZW1vcnkuCi0gIC0gQ29tcHV0ZSB2YXJpb3VzIGFkZGl0 aW9uYWwgcnVuLXRpbWUgc3RhdGlzdGljcywgaW5jbHVkaW5nIHBlciBzaXplIGNsYXNzCi0gICAg c3RhdGlzdGljcyBmb3IgbGFyZ2Ugb2JqZWN0cy4KLSAgLSBFeHBvc2UgbWFsbG9jX3N0YXRzX3By aW50KCksIHdoaWNoIGNhbiBiZSBjYWxsZWQgcmVwZWF0ZWRseSBieSB0aGUKLSAgICBhcHBsaWNh dGlvbi4KLSAgLSBTaW1wbGlmeSB0aGUgbWFsbG9jX21lc3NhZ2UoKSBzaWduYXR1cmUgdG8gb25s eSB0YWtlIG9uZSBzdHJpbmcgYXJndW1lbnQsCi0gICAgYW5kIGluY29ycG9yYXRlIGFuIG9wYXF1 ZSBkYXRhIHBvaW50ZXIgYXJndW1lbnQgZm9yIHVzZSBieSB0aGUgYXBwbGljYXRpb24KLSAgICBp biBjb21iaW5hdGlvbiB3aXRoIG1hbGxvY19zdGF0c19wcmludCgpLgotICAtIEFkZCBzdXBwb3J0 IGZvciBhbGxvY2F0aW9uIGJhY2tlZCBieSBvbmUgb3IgbW9yZSBzd2FwIGZpbGVzLCBhbmQgYWxs b3cgdGhlCi0gICAgYXBwbGljYXRpb24gdG8gZGlzYWJsZSBvdmVyLWNvbW1pdCBpZiBzd2FwIGZp bGVzIGFyZSBpbiB1c2UuCi0gIC0gSW1wbGVtZW50IGFsbG9jYXRpb24gcHJvZmlsaW5nIGFuZCBs ZWFrIGNoZWNraW5nLgotCi0gIFJlbW92ZWQgZmVhdHVyZXM6Ci0gIC0gUmVtb3ZlIHRoZSBkeW5h bWljIGFyZW5hIHJlYmFsYW5jaW5nIGNvZGUsIHNpbmNlIHRocmVhZC1zcGVjaWZpYyBjYWNoaW5n Ci0gICAgcmVkdWNlcyBpdHMgdXRpbGl0eS4KLQotICBCdWcgZml4ZXM6Ci0gIC0gTW9kaWZ5IGNo dW5rIGFsbG9jYXRpb24gdG8gd29yayB3aGVuIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRvbWl6 YXRpb24KLSAgICAoQVNMUikgaXMgaW4gdXNlLgotICAtIEZpeCB0aHJlYWQgY2xlYW51cCBidWdz IHJlbGF0ZWQgdG8gVExTIGRlc3RydWN0aW9uLgotICAtIEhhbmRsZSAwLXNpemUgYWxsb2NhdGlv biByZXF1ZXN0cyBpbiBwb3NpeF9tZW1hbGlnbigpLgotICAtIEZpeCBhIGNodW5rIGxlYWsuICBU aGUgbGVha2VkIGNodW5rcyB3ZXJlIG5ldmVyIHRvdWNoZWQsIHNvIHRoaXMgaW1wYWN0ZWQKLSAg ICB2aXJ0dWFsIG1lbW9yeSB1c2FnZSwgYnV0IG5vdCBwaHlzaWNhbCBtZW1vcnkgdXNhZ2UuCi0K LSogbGludXhfMjAwODA4Mls3OF1hIChBdWd1c3QgMjcvMjgsIDIwMDgpCi0KLSAgVGhlc2Ugc25h cHNob3QgcmVsZWFzZXMgYXJlIHRoZSBzaW1wbGUgcmVzdWx0IG9mIGluY29ycG9yYXRpbmcgTGlu dXgtc3BlY2lmaWMKLSAgc3VwcG9ydCBpbnRvIHRoZSBGcmVlQlNEIG1hbGxvYyBzb3VyY2VzLgot Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmltOmZpbGV0eXBlPXRleHQ6dGV4dHdpZHRoPTgw CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvSU5T VEFMTC5tZCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL0lOU1RBTEwu bWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZGE3MTguLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvSU5TVEFMTC5tZAorKysgL2Rl di9udWxsCkBAIC0xLDQyNCArMCwwIEBACi1CdWlsZGluZyBhbmQgaW5zdGFsbGluZyBhIHBhY2th Z2VkIHJlbGVhc2Ugb2YgamVtYWxsb2MgY2FuIGJlIGFzIHNpbXBsZSBhcwotdHlwaW5nIHRoZSBm b2xsb3dpbmcgd2hpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgdHJlZToK LQotICAgIC4vY29uZmlndXJlCi0gICAgbWFrZQotICAgIG1ha2UgaW5zdGFsbAotCi1JZiBidWls ZGluZyBmcm9tIHVucGFja2FnZWQgZGV2ZWxvcGVyIHNvdXJjZXMsIHRoZSBzaW1wbGVzdCBjb21t YW5kIHNlcXVlbmNlCi10aGF0IG1pZ2h0IHdvcmsgaXM6Ci0KLSAgICAuL2F1dG9nZW4uc2gKLSAg ICBtYWtlCi0gICAgbWFrZSBpbnN0YWxsCi0KLVlvdSBjYW4gdW5pbnN0YWxsIHRoZSBpbnN0YWxs ZWQgYnVpbGQgYXJ0aWZhY3RzIGxpa2UgdGhpczoKLQotICAgIG1ha2UgdW5pbnN0YWxsCi0KLU5v dGVzOgotIC0gImF1dG9jb25mIiBuZWVkcyB0byBiZSBpbnN0YWxsZWQKLSAtIERvY3VtZW50YXRp b24gaXMgYnVpbHQgYnkgdGhlIGRlZmF1bHQgdGFyZ2V0IG9ubHkgd2hlbiB4c2x0cHJvYyBpcwot YXZhaWxhYmxlLiAgQnVpbGQgd2lsbCB3YXJuIGJ1dCBub3Qgc3RvcCBpZiB0aGUgZGVwZW5kZW5j eSBpcyBtaXNzaW5nLgotCi0KLSMjIEFkdmFuY2VkIGNvbmZpZ3VyYXRpb24KLQotVGhlICdjb25m aWd1cmUnIHNjcmlwdCBzdXBwb3J0cyBudW1lcm91cyBvcHRpb25zIHRoYXQgYWxsb3cgY29udHJv bCBvZiB3aGljaAotZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkLCB3aGVyZSBqZW1hbGxvYyBpcyBp bnN0YWxsZWQsIGV0Yy4gIE9wdGlvbmFsbHksIHBhc3MKLWFueSBvZiB0aGUgZm9sbG93aW5nIGFy Z3VtZW50cyAobm90IGEgZGVmaW5pdGl2ZSBsaXN0KSB0byAnY29uZmlndXJlJzoKLQotKiBgLS1o ZWxwYAotCi0gICAgUHJpbnQgYSBkZWZpbml0aXZlIGxpc3Qgb2Ygb3B0aW9ucy4KLQotKiBgLS1w cmVmaXg9PGluc3RhbGwtcm9vdC1kaXI+YAotCi0gICAgU2V0IHRoZSBiYXNlIGRpcmVjdG9yeSBp biB3aGljaCB0byBpbnN0YWxsLiAgRm9yIGV4YW1wbGU6Ci0KLSAgICAgICAgLi9jb25maWd1cmUg LS1wcmVmaXg9L3Vzci9sb2NhbAotCi0gICAgd2lsbCBjYXVzZSBmaWxlcyB0byBiZSBpbnN0YWxs ZWQgaW50byAvdXNyL2xvY2FsL2luY2x1ZGUsIC91c3IvbG9jYWwvbGliLAotICAgIGFuZCAvdXNy L2xvY2FsL21hbi4KLQotKiBgLS13aXRoLXZlcnNpb249KDxtYWpvcj4uPG1pbm9yPi48YnVnZml4 Pi08bnJldj4tZzxnaWQ+fFZFUlNJT04pYAotCi0gICAgVGhlIFZFUlNJT04gZmlsZSBpcyBtYW5k YXRvcnkgZm9yIHN1Y2Nlc3NmdWwgY29uZmlndXJhdGlvbiwgYW5kIHRoZQotICAgIGZvbGxvd2lu ZyBzdGVwcyBhcmUgdGFrZW4gdG8gYXNzdXJlIGl0cyBwcmVzZW5jZToKLSAgICAxKSBJZiAtLXdp dGgtdmVyc2lvbj08bWFqb3I+LjxtaW5vcj4uPGJ1Z2ZpeD4tPG5yZXY+LWc8Z2lkPiBpcyBzcGVj aWZpZWQsCi0gICAgICAgZ2VuZXJhdGUgVkVSU0lPTiB1c2luZyB0aGUgc3BlY2lmaWVkIHZhbHVl LgotICAgIDIpIElmIC0td2l0aC12ZXJzaW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gZWl0aGVyIGZv cm0gYW5kIHRoZSBzb3VyY2UKLSAgICAgICBkaXJlY3RvcnkgaXMgaW5zaWRlIGEgZ2l0IHJlcG9z aXRvcnksIHRyeSB0byBnZW5lcmF0ZSBWRVJTSU9OIHZpYSAnZ2l0Ci0gICAgICAgZGVzY3JpYmUn IGludm9jYXRpb25zIHRoYXQgcGF0dGVybi1tYXRjaCByZWxlYXNlIHRhZ3MuCi0gICAgMykgSWYg VkVSU0lPTiBpcyBtaXNzaW5nLCBnZW5lcmF0ZSBpdCB3aXRoIGEgYm9ndXMgdmVyc2lvbjoKLSAg ICAgICAwLjAuMC0wLWcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0K LSAgICBOb3RlIHRoYXQgLS13aXRoLXZlcnNpb249VkVSU0lPTiBieXBhc3NlcyAoMSkgYW5kICgy KSwgd2hpY2ggc2ltcGxpZmllcwotICAgIFZFUlNJT04gY29uZmlndXJhdGlvbiB3aGVuIGVtYmVk ZGluZyBhIGplbWFsbG9jIHJlbGVhc2UgaW50byBhbm90aGVyCi0gICAgcHJvamVjdCdzIGdpdCBy ZXBvc2l0b3J5LgotCi0qIGAtLXdpdGgtcnBhdGg9PGNvbG9uLXNlcGFyYXRlZC1ycGF0aD5gCi0K LSAgICBFbWJlZCBvbmUgb3IgbW9yZSBsaWJyYXJ5IHBhdGhzLCBzbyB0aGF0IGxpYmplbWFsbG9j IGNhbiBmaW5kIHRoZSBsaWJyYXJpZXMKLSAgICBpdCBpcyBsaW5rZWQgdG8uICBUaGlzIHdvcmtz IG9ubHkgb24gRUxGLWJhc2VkIHN5c3RlbXMuCi0KLSogYC0td2l0aC1tYW5nbGluZz08bWFwPmAK LQotICAgIE1hbmdsZSBwdWJsaWMgc3ltYm9scyBzcGVjaWZpZWQgaW4gPG1hcD4gd2hpY2ggaXMg YSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZgotICAgIG5hbWU6bWFuZ2xlZCBwYWlycy4KLQotICAg IEZvciBleGFtcGxlLCB0byB1c2UgbGQncyAtLXdyYXAgb3B0aW9uIGFzIGFuIGFsdGVybmF0aXZl IG1ldGhvZCBmb3IKLSAgICBvdmVycmlkaW5nIGxpYmMncyBtYWxsb2MgaW1wbGVtZW50YXRpb24s IHNwZWNpZnkgc29tZXRoaW5nIGxpa2U6Ci0KLSAgICAgIC0td2l0aC1tYW5nbGluZz1tYWxsb2M6 X193cmFwX21hbGxvYyxmcmVlOl9fd3JhcF9mcmVlWy4uLl0KLQotICAgIE5vdGUgdGhhdCBtYW5n bGluZyBoYXBwZW5zIHByaW9yIHRvIGFwcGxpY2F0aW9uIG9mIHRoZSBwcmVmaXggc3BlY2lmaWVk IGJ5Ci0gICAgLS13aXRoLWplbWFsbG9jLXByZWZpeCwgYW5kIG1hbmdsZWQgc3ltYm9scyBhcmUg dGhlbiBpZ25vcmVkIHdoZW4gYXBwbHlpbmcKLSAgICB0aGUgcHJlZml4LgotCi0qIGAtLXdpdGgt amVtYWxsb2MtcHJlZml4PTxwcmVmaXg+YAotCi0gICAgUHJlZml4IGFsbCBwdWJsaWMgQVBJcyB3 aXRoIDxwcmVmaXg+LiAgRm9yIGV4YW1wbGUsIGlmIDxwcmVmaXg+IGlzCi0gICAgInByZWZpeF8i LCBBUEkgY2hhbmdlcyBsaWtlIHRoZSBmb2xsb3dpbmcgb2NjdXI6Ci0KLSAgICAgIG1hbGxvYygp ICAgICAgICAgLS0+IHByZWZpeF9tYWxsb2MoKQotICAgICAgbWFsbG9jX2NvbmYgICAgICAtLT4g cHJlZml4X21hbGxvY19jb25mCi0gICAgICAvZXRjL21hbGxvYy5jb25mIC0tPiAvZXRjL3ByZWZp eF9tYWxsb2MuY29uZgotICAgICAgTUFMTE9DX0NPTkYgICAgICAtLT4gUFJFRklYX01BTExPQ19D T05GCi0KLSAgICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBqZW1hbGxvYyBhdCB0aGUg c2FtZSB0aW1lIGFzIHRoZSBzeXN0ZW0KLSAgICBhbGxvY2F0b3IsIG9yIGV2ZW4gdG8gdXNlIG11 bHRpcGxlIGNvcGllcyBvZiBqZW1hbGxvYyBzaW11bHRhbmVvdXNseS4KLQotICAgIEJ5IGRlZmF1 bHQsIHRoZSBwcmVmaXggaXMgIiIsIGV4Y2VwdCBvbiBPUyBYLCB3aGVyZSBpdCBpcyAiamVfIi4g IE9uIE9TIFgsCi0gICAgamVtYWxsb2Mgb3ZlcmxheXMgdGhlIGRlZmF1bHQgbWFsbG9jIHpvbmUs IGJ1dCBtYWtlcyBubyBhdHRlbXB0IHRvIGFjdHVhbGx5Ci0gICAgcmVwbGFjZSB0aGUgIm1hbGxv YyIsICJjYWxsb2MiLCBldGMuIHN5bWJvbHMuCi0KLSogYC0td2l0aG91dC1leHBvcnRgCi0KLSAg ICBEb24ndCBleHBvcnQgcHVibGljIEFQSXMuICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBidWls ZGluZyBqZW1hbGxvYyBhcyBhCi0gICAgc3RhdGljIGxpYnJhcnksIG9yIHRvIGF2b2lkIGV4cG9y dGluZyBwdWJsaWMgQVBJcyB3aGVuIHVzaW5nIHRoZSB6b25lCi0gICAgYWxsb2NhdG9yIG9uIE9T WC4KLQotKiBgLS13aXRoLXByaXZhdGUtbmFtZXNwYWNlPTxwcmVmaXg+YAotCi0gICAgUHJlZml4 IGFsbCBsaWJyYXJ5LXByaXZhdGUgQVBJcyB3aXRoIDxwcmVmaXg+amVfLiAgRm9yIHNoYXJlZCBs aWJyYXJpZXMsCi0gICAgc3ltYm9sIHZpc2liaWxpdHkgbWVjaGFuaXNtcyBwcmV2ZW50IHRoZXNl IHN5bWJvbHMgZnJvbSBiZWluZyBleHBvcnRlZCwgYnV0Ci0gICAgZm9yIHN0YXRpYyBsaWJyYXJp ZXMsIG5hbWluZyBjb2xsaXNpb25zIGFyZSBhIHJlYWwgcG9zc2liaWxpdHkuICBCeQotICAgIGRl ZmF1bHQsIDxwcmVmaXg+IGlzIGVtcHR5LCB3aGljaCByZXN1bHRzIGluIGEgc3ltYm9sIHByZWZp eCBvZiBqZV8gLgotCi0qIGAtLXdpdGgtaW5zdGFsbC1zdWZmaXg9PHN1ZmZpeD5gCi0KLSAgICBB cHBlbmQgPHN1ZmZpeD4gdG8gdGhlIGJhc2UgbmFtZSBvZiBhbGwgaW5zdGFsbGVkIGZpbGVzLCBz dWNoIHRoYXQgbXVsdGlwbGUKLSAgICB2ZXJzaW9ucyBvZiBqZW1hbGxvYyBjYW4gY29leGlzdCBp biB0aGUgc2FtZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiAgRm9yCi0gICAgZXhhbXBsZSwgbGli amVtYWxsb2Muc28uMCBiZWNvbWVzIGxpYmplbWFsbG9jPHN1ZmZpeD4uc28uMC4KLQotKiBgLS13 aXRoLW1hbGxvYy1jb25mPTxtYWxsb2NfY29uZj5gCi0KLSAgICBFbWJlZCBgPG1hbGxvY19jb25m PmAgYXMgYSBydW4tdGltZSBvcHRpb25zIHN0cmluZyB0aGF0IGlzIHByb2Nlc3NlZCBwcmlvciB0 bwotICAgIHRoZSBtYWxsb2NfY29uZiBnbG9iYWwgdmFyaWFibGUsIHRoZSAvZXRjL21hbGxvYy5j b25mIHN5bWxpbmssIGFuZCB0aGUKLSAgICBNQUxMT0NfQ09ORiBlbnZpcm9ubWVudCB2YXJpYWJs ZS4gIEZvciBleGFtcGxlLCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgZGVjYXkKLSAgICB0aW1lIHRv IDMwIHNlY29uZHM6Ci0KLSAgICAgIC0td2l0aC1tYWxsb2MtY29uZj1kZWNheV9tczozMDAwMAot Ci0qIGAtLWVuYWJsZS1kZWJ1Z2AKLQotICAgIEVuYWJsZSBhc3NlcnRpb25zIGFuZCB2YWxpZGF0 aW9uIGNvZGUuICBUaGlzIGluY3VycyBhIHN1YnN0YW50aWFsCi0gICAgcGVyZm9ybWFuY2UgaGl0 LCBidXQgaXMgdmVyeSB1c2VmdWwgZHVyaW5nIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50LgotCi0q IGAtLWRpc2FibGUtc3RhdHNgCi0KLSAgICBEaXNhYmxlIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGZ1 bmN0aW9uYWxpdHkuICBTZWUgdGhlICJvcHQuc3RhdHNfcHJpbnQiCi0gICAgb3B0aW9uIGRvY3Vt ZW50YXRpb24gZm9yIHVzYWdlIGRldGFpbHMuCi0KLSogYC0tZW5hYmxlLXByb2ZgCi0KLSAgICBF bmFibGUgaGVhcCBwcm9maWxpbmcgYW5kIGxlYWsgZGV0ZWN0aW9uIGZ1bmN0aW9uYWxpdHkuICBT ZWUgdGhlICJvcHQucHJvZiIKLSAgICBvcHRpb24gZG9jdW1lbnRhdGlvbiBmb3IgdXNhZ2UgZGV0 YWlscy4gIFdoZW4gZW5hYmxlZCwgdGhlcmUgYXJlIHNldmVyYWwKLSAgICBhcHByb2FjaGVzIHRv IGJhY2t0cmFjaW5nLCBhbmQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgY2hvb3NlcyB0aGUgZmlyc3Qg b25lCi0gICAgaW4gdGhlIGZvbGxvd2luZyBsaXN0IHRoYXQgYXBwZWFycyB0byBmdW5jdGlvbiBj b3JyZWN0bHk6Ci0KLSAgICArIGxpYnVud2luZCAgICAgIChyZXF1aXJlcyAtLWVuYWJsZS1wcm9m LWxpYnVud2luZCkKLSAgICArIGxpYmdjYyAgICAgICAgICh1bmxlc3MgLS1kaXNhYmxlLXByb2Yt bGliZ2NjKQotICAgICsgZ2NjIGludHJpbnNpY3MgKHVubGVzcyAtLWRpc2FibGUtcHJvZi1nY2Mp Ci0KLSogYC0tZW5hYmxlLXByb2YtbGlidW53aW5kYAotCi0gICAgVXNlIHRoZSBsaWJ1bndpbmQg bGlicmFyeSAoaHR0cDovL3d3dy5ub25nbnUub3JnL2xpYnVud2luZC8pIGZvciBzdGFjawotICAg IGJhY2t0cmFjaW5nLgotCi0qIGAtLWRpc2FibGUtcHJvZi1saWJnY2NgCi0KLSAgICBEaXNhYmxl IHRoZSB1c2Ugb2YgbGliZ2NjJ3MgYmFja3RyYWNpbmcgZnVuY3Rpb25hbGl0eS4KLQotKiBgLS1k aXNhYmxlLXByb2YtZ2NjYAotCi0gICAgRGlzYWJsZSB0aGUgdXNlIG9mIGdjYyBpbnRyaW5zaWNz IGZvciBiYWNrdHJhY2luZy4KLQotKiBgLS13aXRoLXN0YXRpYy1saWJ1bndpbmQ9PGxpYnVud2lu ZC5hPmAKLQotICAgIFN0YXRpY2FsbHkgbGluayBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgbGlidW53 aW5kLmEgcmF0aGVyIHRoYW4gZHluYW1pY2FsbHkKLSAgICBsaW5raW5nIHdpdGggLWx1bndpbmQu Ci0KLSogYC0tZGlzYWJsZS1maWxsYAotCi0gICAgRGlzYWJsZSBzdXBwb3J0IGZvciBqdW5rL3pl cm8gZmlsbGluZyBvZiBtZW1vcnkuICBTZWUgdGhlICJvcHQuanVuayIgYW5kCi0gICAgIm9wdC56 ZXJvIiBvcHRpb24gZG9jdW1lbnRhdGlvbiBmb3IgdXNhZ2UgZGV0YWlscy4KLQotKiBgLS1kaXNh YmxlLXpvbmUtYWxsb2NhdG9yYAotCi0gICAgRGlzYWJsZSB6b25lIGFsbG9jYXRvciBmb3IgRGFy d2luLiAgVGhpcyBtZWFucyBqZW1hbGxvYyB3b24ndCBiZSBob29rZWQgYXMKLSAgICB0aGUgZGVm YXVsdCBhbGxvY2F0b3Igb24gT1NYL2lPUy4KLQotKiBgLS1lbmFibGUtdXRyYWNlYAotCi0gICAg RW5hYmxlIHV0cmFjZSgyKS1iYXNlZCBhbGxvY2F0aW9uIHRyYWNpbmcuICBUaGlzIGZlYXR1cmUg aXMgbm90IGJyb2FkbHkKLSAgICBwb3J0YWJsZSAoRnJlZUJTRCBoYXMgaXQsIGJ1dCBMaW51eCBh bmQgT1MgWCBkbyBub3QpLgotCi0qIGAtLWVuYWJsZS14bWFsbG9jYAotCi0gICAgRW5hYmxlIHN1 cHBvcnQgZm9yIG9wdGlvbmFsIGltbWVkaWF0ZSB0ZXJtaW5hdGlvbiBkdWUgdG8gb3V0LW9mLW1l bW9yeQotICAgIGVycm9ycywgYXMgaXMgY29tbW9ubHkgaW1wbGVtZW50ZWQgYnkgInhtYWxsb2Mi IHdyYXBwZXIgZnVuY3Rpb24gZm9yIG1hbGxvYy4KLSAgICBTZWUgdGhlICJvcHQueG1hbGxvYyIg b3B0aW9uIGRvY3VtZW50YXRpb24gZm9yIHVzYWdlIGRldGFpbHMuCi0KLSogYC0tZW5hYmxlLWxh enktbG9ja2AKLQotICAgIEVuYWJsZSBjb2RlIHRoYXQgd3JhcHMgcHRocmVhZF9jcmVhdGUoKSB0 byBkZXRlY3Qgd2hlbiBhbiBhcHBsaWNhdGlvbgotICAgIHN3aXRjaGVzIGZyb20gc2luZ2xlLXRo cmVhZGVkIHRvIG11bHRpLXRocmVhZGVkIG1vZGUsIHNvIHRoYXQgaXQgY2FuIGF2b2lkCi0gICAg bXV0ZXggbG9ja2luZy91bmxvY2tpbmcgb3BlcmF0aW9ucyB3aGlsZSBpbiBzaW5nbGUtdGhyZWFk ZWQgbW9kZS4gIEluCi0gICAgcHJhY3RpY2UsIHRoaXMgZmVhdHVyZSB1c3VhbGx5IGhhcyBsaXR0 bGUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIHVubGVzcwotICAgIHRocmVhZC1zcGVjaWZpYyBjYWNo aW5nIGlzIGRpc2FibGVkLgotCi0qIGAtLWRpc2FibGUtY2FjaGUtb2JsaXZpb3VzYAotCi0gICAg RGlzYWJsZSBjYWNoZS1vYmxpdmlvdXMgbGFyZ2UgYWxsb2NhdGlvbiBhbGlnbm1lbnQgYnkgZGVm YXVsdCwgZm9yIGxhcmdlCi0gICAgYWxsb2NhdGlvbiByZXF1ZXN0cyB3aXRoIG5vIGFsaWdubWVu dCBjb25zdHJhaW50cy4gIElmIHRoaXMgZmVhdHVyZSBpcwotICAgIGRpc2FibGVkLCBhbGwgbGFy Z2UgYWxsb2NhdGlvbnMgYXJlIHBhZ2UtYWxpZ25lZCBhcyBhbiBpbXBsZW1lbnRhdGlvbgotICAg IGFydGlmYWN0LCB3aGljaCBjYW4gc2V2ZXJlbHkgaGFybSBDUFUgY2FjaGUgdXRpbGl6YXRpb24u ICBIb3dldmVyLCB0aGUKLSAgICBjYWNoZS1vYmxpdmlvdXMgbGF5b3V0IGNvbWVzIGF0IHRoZSBj b3N0IG9mIG9uZSBleHRyYSBwYWdlIHBlciBsYXJnZQotICAgIGFsbG9jYXRpb24sIHdoaWNoIGlu IHRoZSBtb3N0IGV4dHJlbWUgY2FzZSBpbmNyZWFzZXMgcGh5c2ljYWwgbWVtb3J5IHVzYWdlCi0g ICAgZm9yIHRoZSAxNiBLaUIgc2l6ZSBjbGFzcyB0byAyMCBLaUIuCi0KLSogYC0tZGlzYWJsZS1z eXNjYWxsYAotCi0gICAgRGlzYWJsZSB1c2Ugb2Ygc3lzY2FsbCgyKSByYXRoZXIgdGhhbiB7b3Bl bixyZWFkLHdyaXRlLGNsb3NlfSgyKS4gIFRoaXMgaXMKLSAgICBpbnRlbmRlZCBhcyBhIHdvcmth cm91bmQgZm9yIHN5c3RlbXMgdGhhdCBwbGFjZSBzZWN1cml0eSBsaW1pdGF0aW9ucyBvbgotICAg IHN5c2NhbGwoMikuCi0KLSogYC0tZGlzYWJsZS1jeHhgCi0KLSAgICBEaXNhYmxlIEMrKyBpbnRl Z3JhdGlvbi4gIFRoaXMgd2lsbCBjYXVzZSBuZXcgYW5kIGRlbGV0ZSBvcGVyYXRvcgotICAgIGlt cGxlbWVudGF0aW9ucyB0byBiZSBvbWl0dGVkLgotCi0qIGAtLXdpdGgteHNscm9vdD08cGF0aD5g Ci0KLSAgICBTcGVjaWZ5IHdoZXJlIHRvIGZpbmQgRG9jQm9vayBYU0wgc3R5bGVzaGVldHMgd2hl biBidWlsZGluZyB0aGUKLSAgICBkb2N1bWVudGF0aW9uLgotCi0qIGAtLXdpdGgtbGctcGFnZT08 bGctcGFnZT5gCi0KLSAgICBTcGVjaWZ5IHRoZSBiYXNlIDIgbG9nIG9mIHRoZSBhbGxvY2F0b3Ig cGFnZSBzaXplLCB3aGljaCBtdXN0IGluIHR1cm4gYmUgYXQKLSAgICBsZWFzdCBhcyBsYXJnZSBh cyB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZS4gIEJ5IGRlZmF1bHQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQK LSAgICBkZXRlcm1pbmVzIHRoZSBob3N0J3MgcGFnZSBzaXplIGFuZCBzZXRzIHRoZSBhbGxvY2F0 b3IgcGFnZSBzaXplIGVxdWFsIHRvCi0gICAgdGhlIHN5c3RlbSBwYWdlIHNpemUsIHNvIHRoaXMg b3B0aW9uIG5lZWQgbm90IGJlIHNwZWNpZmllZCB1bmxlc3MgdGhlCi0gICAgc3lzdGVtIHBhZ2Ug c2l6ZSBtYXkgY2hhbmdlIGJldHdlZW4gY29uZmlndXJhdGlvbiBhbmQgZXhlY3V0aW9uLCBlLmcu IHdoZW4KLSAgICBjcm9zcyBjb21waWxpbmcuCi0KLSogYC0td2l0aC1sZy1odWdlcGFnZT08bGct aHVnZXBhZ2U+YAotCi0gICAgU3BlY2lmeSB0aGUgYmFzZSAyIGxvZyBvZiB0aGUgc3lzdGVtIGh1 Z2UgcGFnZSBzaXplLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsCi0gICAgd2hlbiBjcm9zcyBjb21w aWxpbmcsIG9yIHdoZW4gb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBmb3Igc3lzdGVtcyB0aGF0IGRv Ci0gICAgbm90IGV4cGxpY2l0bHkgc3VwcG9ydCBodWdlIHBhZ2VzLgotCi0qIGAtLXdpdGgtbGct cXVhbnR1bT08bGctcXVhbnR1bT5gCi0KLSAgICBTcGVjaWZ5IHRoZSBiYXNlIDIgbG9nIG9mIHRo ZSBtaW5pbXVtIGFsbG9jYXRpb24gYWxpZ25tZW50LiAgamVtYWxsb2MgbmVlZHMKLSAgICB0byBr bm93IHRoZSBtaW5pbXVtIGFsaWdubWVudCB0aGF0IG1lZXRzIHRoZSBmb2xsb3dpbmcgQyBzdGFu ZGFyZAotICAgIHJlcXVpcmVtZW50IChxdW90ZWQgZnJvbSB0aGUgQXByaWwgMTIsIDIwMTEgZHJh ZnQgb2YgdGhlIEMxMSBzdGFuZGFyZCk6Ci0KLSAgICA+ICBUaGUgcG9pbnRlciByZXR1cm5lZCBp ZiB0aGUgYWxsb2NhdGlvbiBzdWNjZWVkcyBpcyBzdWl0YWJseSBhbGlnbmVkIHNvCi0gICAgICB0 aGF0IGl0IG1heSBiZSBhc3NpZ25lZCB0byBhIHBvaW50ZXIgdG8gYW55IHR5cGUgb2Ygb2JqZWN0 IHdpdGggYQotICAgICAgZnVuZGFtZW50YWwgYWxpZ25tZW50IHJlcXVpcmVtZW50IGFuZCB0aGVu IHVzZWQgdG8gYWNjZXNzIHN1Y2ggYW4gb2JqZWN0Ci0gICAgICBvciBhbiBhcnJheSBvZiBzdWNo IG9iamVjdHMgaW4gdGhlIHNwYWNlIGFsbG9jYXRlZCBbLi4uXQotCi0gICAgVGhpcyBzZXR0aW5n IGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYW5kIGFsdGhvdWdoIGplbWFsbG9jIGluY2x1ZGVz IGtub3duCi0gICAgc2FmZSB2YWx1ZXMgZm9yIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgbW9kZXJu IGFyY2hpdGVjdHVyZXMsIHRoZXJlIGlzIGEKLSAgICB3cmlua2xlIHJlbGF0ZWQgdG8gR05VIGxp YmMgKGdsaWJjKSB0aGF0IG1heSBpbXBhY3QgeW91ciBjaG9pY2Ugb2YKLSAgICA8bGctcXVhbnR1 bT4uICBPbiBtb3N0IG1vZGVybiBhcmNoaXRlY3R1cmVzLCB0aGlzIG1hbmRhdGVzIDE2LWJ5dGUK LSAgICBhbGlnbm1lbnQgKDxsZy1xdWFudHVtPj00KSwgYnV0IHRoZSBnbGliYyBkZXZlbG9wZXJz IGNob3NlIG5vdCB0byBtZWV0IHRoaXMKLSAgICByZXF1aXJlbWVudCBmb3IgcGVyZm9ybWFuY2Ug cmVhc29ucy4gIEFuIG9sZCBkaXNjdXNzaW9uIGNhbiBiZSBmb3VuZCBhdAotICAgIDxodHRwczov L3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0yMDY+IC4gIFVubGlrZSBn bGliYywKLSAgICBqZW1hbGxvYyBkb2VzIGZvbGxvdyB0aGUgQyBzdGFuZGFyZCBieSBkZWZhdWx0 IChjYXZlYXQ6IGplbWFsbG9jCi0gICAgdGVjaG5pY2FsbHkgY2hlYXRzIGZvciBzaXplIGNsYXNz ZXMgc21hbGxlciB0aGFuIHRoZSBxdWFudHVtKSwgYnV0IHRoZSBmYWN0Ci0gICAgdGhhdCBMaW51 eCBzeXN0ZW1zIGFscmVhZHkgd29yayBhcm91bmQgdGhpcyBhbGxvY2F0b3Igbm9uY29tcGxpYW5j ZSBtZWFucwotICAgIHRoYXQgaXQgaXMgZ2VuZXJhbGx5IHNhZmUgaW4gcHJhY3RpY2UgdG8gbGV0 IGplbWFsbG9jJ3MgbWluaW11bSBhbGlnbm1lbnQKLSAgICBmb2xsb3cgZ2xpYmMncyBsZWFkLiAg SWYgeW91IHNwZWNpZnkgYC0td2l0aC1sZy1xdWFudHVtPTNgIGR1cmluZwotICAgIGNvbmZpZ3Vy YXRpb24sIGplbWFsbG9jIHdpbGwgcHJvdmlkZSBhZGRpdGlvbmFsIHNpemUgY2xhc3NlcyB0aGF0 IGFyZSBub3QKLSAgICAxNi1ieXRlLWFsaWduZWQgKDI0LCA0MCwgYW5kIDU2KS4KLQotKiBgLS13 aXRoLWxnLXZhZGRyPTxsZy12YWRkcj5gCi0KLSAgICBTcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc2ln bmlmaWNhbnQgdmlydHVhbCBhZGRyZXNzIGJpdHMuICBCeSBkZWZhdWx0LCB0aGUKLSAgICBjb25m aWd1cmUgc2NyaXB0IGF0dGVtcHRzIHRvIGRldGVjdCB2aXJ0dWFsIGFkZHJlc3Mgc2l6ZSBvbiB0 aG9zZSBwbGF0Zm9ybXMKLSAgICB3aGVyZSBpdCBrbm93cyBob3csIGFuZCBwaWNrcyBhIGRlZmF1 bHQgb3RoZXJ3aXNlLiAgVGhpcyBvcHRpb24gbWF5IGJlCi0gICAgdXNlZnVsIHdoZW4gY3Jvc3Mt Y29tcGlsaW5nLgotCi0qIGAtLWRpc2FibGUtaW5pdGlhbC1leGVjLXRsc2AKLQotICAgIERpc2Fi bGUgdGhlIGluaXRpYWwtZXhlYyBUTFMgbW9kZWwgZm9yIGplbWFsbG9jJ3MgaW50ZXJuYWwgdGhy ZWFkLWxvY2FsCi0gICAgc3RvcmFnZSAob24gdGhvc2UgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBl eHBsaWNpdCBzZXR0aW5ncykuICBUaGlzIGNhbiBhbGxvdwotICAgIGplbWFsbG9jIHRvIGJlIGR5 bmFtaWNhbGx5IGxvYWRlZCBhZnRlciBwcm9ncmFtIHN0YXJ0dXAgKGUuZy4gdXNpbmcgZGxvcGVu KS4KLSAgICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCB0aGVyZSB3aWxsIGJlIHR3byBtYWxsb2Mg aW1wbGVtZW50YXRpb25zIG9wZXJhdGluZwotICAgIGluIHRoZSBzYW1lIHByb2Nlc3MsIHdoaWNo IHdpbGwgYWxtb3N0IGNlcnRhaW5seSByZXN1bHQgaW4gY29uZnVzaW5nIHJ1bnRpbWUKLSAgICBj cmFzaGVzIGlmIHBvaW50ZXJzIGxlYWsgZnJvbSBvbmUgaW1wbGVtZW50YXRpb24gdG8gdGhlIG90 aGVyLgotCi0qIGAtLWRpc2FibGUtbGliZGxgCi0KLSAgICBEaXNhYmxlIHRoZSB1c2FnZSBvZiBs aWJkbCwgbmFtZWx5IGRsc3ltKDMpIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHRoZSBsYXp5Ci0gICAg bG9jayBvcHRpb24uICBUaGlzIGNhbiBhbGxvdyBidWlsZGluZyBzdGF0aWMgYmluYXJpZXMuCi0K LVRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChub3QgYSBkZWZpbml0aXZlIGxp c3QpIGltcGFjdCBjb25maWd1cmUncwotYmVoYXZpb3I6Ci0KLSogYENGTEFHUz0iPyJgCi0qIGBD WFhGTEFHUz0iPyJgCi0KLSAgICBQYXNzIHRoZXNlIGZsYWdzIHRvIHRoZSBDL0MrKyBjb21waWxl ci4gIEFueSBmbGFncyBzZXQgYnkgdGhlIGNvbmZpZ3VyZQotICAgIHNjcmlwdCBhcmUgcHJlcGVu ZGVkLCB3aGljaCBtZWFucyBleHBsaWNpdGx5IHNldCBmbGFncyBnZW5lcmFsbHkgdGFrZQotICAg IHByZWNlZGVuY2UuICBUYWtlIGNhcmUgd2hlbiBzcGVjaWZ5aW5nIGZsYWdzIHN1Y2ggYXMgLVdl cnJvciwgYmVjYXVzZQotICAgIGNvbmZpZ3VyZSB0ZXN0cyBtYXkgYmUgYWZmZWN0ZWQgaW4gdW5k ZXNpcmFibGUgd2F5cy4KLQotKiBgRVhUUkFfQ0ZMQUdTPSI/ImAKLSogYEVYVFJBX0NYWEZMQUdT PSI/ImAKLQotICAgIEFwcGVuZCB0aGVzZSBmbGFncyB0byBDRkxBR1MvQ1hYRkxBR1MsIHdpdGhv dXQgcGFzc2luZyB0aGVtIHRvIHRoZQotICAgIGNvbXBpbGVyKHMpIGR1cmluZyBjb25maWd1cmF0 aW9uLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBhZGQgZmxhZ3Mgc3VjaAotICAgIGFzIC1X ZXJyb3IsIHdoaWxlIGFsbG93aW5nIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIGRldGVybWluZSB3 aGF0IG90aGVyCi0gICAgZmxhZ3MgYXJlIGFwcHJvcHJpYXRlIGZvciB0aGUgc3BlY2lmaWVkIGNv bmZpZ3VyYXRpb24uCi0KLSogYENQUEZMQUdTPSI/ImAKLQotICAgIFBhc3MgdGhlc2UgZmxhZ3Mg dG8gdGhlIEMgcHJlcHJvY2Vzc29yLiAgTm90ZSB0aGF0IENGTEFHUyBpcyBub3QgcGFzc2VkIHRv Ci0gICAgJ2NwcCcgd2hlbiAnY29uZmlndXJlJyBpcyBsb29raW5nIGZvciBpbmNsdWRlIGZpbGVz LCBzbyB5b3UgbXVzdCB1c2UKLSAgICBDUFBGTEFHUyBpbnN0ZWFkIGlmIHlvdSBuZWVkIHRvIGhl bHAgJ2NvbmZpZ3VyZScgZmluZCBoZWFkZXIgZmlsZXMuCi0KLSogYExEX0xJQlJBUllfUEFUSD0i PyJgCi0KLSAgICAnbGQnIHVzZXMgdGhpcyBjb2xvbi1zZXBhcmF0ZWQgbGlzdCB0byBmaW5kIGxp YnJhcmllcy4KLQotKiBgTERGTEFHUz0iPyJgCi0KLSAgICBQYXNzIHRoZXNlIGZsYWdzIHdoZW4g bGlua2luZy4KLQotKiBgUEFUSD0iPyJgCi0KLSAgICAnY29uZmlndXJlJyB1c2VzIHRoaXMgdG8g ZmluZCBwcm9ncmFtcy4KLQotSW4gc29tZSBjYXNlcyBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHdv cmsgYXJvdW5kIGNvbmZpZ3VyYXRpb24gcmVzdWx0cyB0aGF0IGRvCi1ub3QgbWF0Y2ggcmVhbGl0 eS4gIEZvciBleGFtcGxlLCBMaW51eCA0LjUgYWRkZWQgc3VwcG9ydCBmb3IgdGhlIE1BRFZfRlJF RSBmbGFnCi10byBtYWR2aXNlKDIpLCB3aGljaCBjYW4gY2F1c2UgcHJvYmxlbXMgaWYgYnVpbGRp bmcgb24gYSBob3N0IHdpdGggTUFEVl9GUkVFCi1zdXBwb3J0IGFuZCBkZXBsb3lpbmcgdG8gYSB0 YXJnZXQgd2l0aG91dC4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHVzZSBhIGNhY2hlCi1maWxlIHRv IG92ZXJyaWRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRlZmluZWQgaW4g Y29uZmlndXJlLmFjLAotZS5nLjoKLQotICAgIGVjaG8gImplX2N2X21hZHZfZnJlZT1ubyIgPiBj b25maWcuY2FjaGUgJiYgLi9jb25maWd1cmUgLUMKLQotCi0jIyBBZHZhbmNlZCBjb21waWxhdGlv bgotCi1UbyBidWlsZCBvbmx5IHBhcnRzIG9mIGplbWFsbG9jLCB1c2UgdGhlIGZvbGxvd2luZyB0 YXJnZXRzOgotCi0gICAgYnVpbGRfbGliX3NoYXJlZAotICAgIGJ1aWxkX2xpYl9zdGF0aWMKLSAg ICBidWlsZF9saWIKLSAgICBidWlsZF9kb2NfaHRtbAotICAgIGJ1aWxkX2RvY19tYW4KLSAgICBi dWlsZF9kb2MKLQotVG8gaW5zdGFsbCBvbmx5IHBhcnRzIG9mIGplbWFsbG9jLCB1c2UgdGhlIGZv bGxvd2luZyB0YXJnZXRzOgotCi0gICAgaW5zdGFsbF9iaW4KLSAgICBpbnN0YWxsX2luY2x1ZGUK LSAgICBpbnN0YWxsX2xpYl9zaGFyZWQKLSAgICBpbnN0YWxsX2xpYl9zdGF0aWMKLSAgICBpbnN0 YWxsX2xpYl9wYwotICAgIGluc3RhbGxfbGliCi0gICAgaW5zdGFsbF9kb2NfaHRtbAotICAgIGlu c3RhbGxfZG9jX21hbgotICAgIGluc3RhbGxfZG9jCi0KLVRvIGNsZWFuIHVwIGJ1aWxkIHJlc3Vs dHMgdG8gdmFyeWluZyBkZWdyZWVzLCB1c2UgdGhlIGZvbGxvd2luZyBtYWtlIHRhcmdldHM6Ci0K LSAgICBjbGVhbgotICAgIGRpc3RjbGVhbgotICAgIHJlbGNsZWFuCi0KLQotIyMgQWR2YW5jZWQg aW5zdGFsbGF0aW9uCi0KLU9wdGlvbmFsbHksIGRlZmluZSBtYWtlIHZhcmlhYmxlcyB3aGVuIGlu dm9raW5nIG1ha2UsIGluY2x1ZGluZyAobm90Ci1leGNsdXNpdmVseSk6Ci0KLSogYElOQ0xVREVE SVI9Ij8iYAotCi0gICAgVXNlIHRoaXMgYXMgdGhlIGluc3RhbGxhdGlvbiBwcmVmaXggZm9yIGhl YWRlciBmaWxlcy4KLQotKiBgTElCRElSPSI/ImAKLQotICAgIFVzZSB0aGlzIGFzIHRoZSBpbnN0 YWxsYXRpb24gcHJlZml4IGZvciBsaWJyYXJpZXMuCi0KLSogYE1BTkRJUj0iPyJgCi0KLSAgICBV c2UgdGhpcyBhcyB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeCBmb3IgbWFuIHBhZ2VzLgotCi0qIGBE RVNURElSPSI/ImAKLQotICAgIFByZXBlbmQgREVTVERJUiB0byBJTkNMVURFRElSLCBMSUJESVIs IERBVEFESVIsIGFuZCBNQU5ESVIuICBUaGlzIGlzIHVzZWZ1bAotICAgIHdoZW4gaW5zdGFsbGlu ZyB0byBhIGRpZmZlcmVudCBwYXRoIHRoYW4gd2FzIHNwZWNpZmllZCB2aWEgLS1wcmVmaXguCi0K LSogYENDPSI/ImAKLQotICAgIFVzZSB0aGlzIHRvIGludm9rZSB0aGUgQyBjb21waWxlci4KLQot KiBgQ0ZMQUdTPSI/ImAKLQotICAgIFBhc3MgdGhlc2UgZmxhZ3MgdG8gdGhlIGNvbXBpbGVyLgot Ci0qIGBDUFBGTEFHUz0iPyJgCi0KLSAgICBQYXNzIHRoZXNlIGZsYWdzIHRvIHRoZSBDIHByZXBy b2Nlc3Nvci4KLQotKiBgTERGTEFHUz0iPyJgCi0KLSAgICBQYXNzIHRoZXNlIGZsYWdzIHdoZW4g bGlua2luZy4KLQotKiBgUEFUSD0iPyJgCi0KLSAgICBVc2UgdGhpcyB0byBzZWFyY2ggZm9yIHBy b2dyYW1zIHVzZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkaW5nLgotCi0KLSMjIERl dmVsb3BtZW50Ci0KLUlmIHlvdSBpbnRlbmQgdG8gbWFrZSBub24tdHJpdmlhbCBjaGFuZ2VzIHRv IGplbWFsbG9jLCB1c2UgdGhlICdhdXRvZ2VuLnNoJwotc2NyaXB0IHJhdGhlciB0aGFuICdjb25m aWd1cmUnLiAgVGhpcyByZS1nZW5lcmF0ZXMgJ2NvbmZpZ3VyZScsIGVuYWJsZXMKLWNvbmZpZ3Vy YXRpb24gZGVwZW5kZW5jeSBydWxlcywgYW5kIGVuYWJsZXMgcmUtZ2VuZXJhdGlvbiBvZiBhdXRv bWF0aWNhbGx5Ci1nZW5lcmF0ZWQgc291cmNlIGZpbGVzLgotCi1UaGUgYnVpbGQgc3lzdGVtIHN1 cHBvcnRzIHVzaW5nIGFuIG9iamVjdCBkaXJlY3Rvcnkgc2VwYXJhdGUgZnJvbSB0aGUgc291cmNl Ci10cmVlLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gY3JlYXRlIGFuICdvYmonIGRpcmVjdG9yeSwg YW5kIGZyb20gd2l0aGluIHRoYXQKLWRpcmVjdG9yeSwgaXNzdWUgY29uZmlndXJhdGlvbiBhbmQg YnVpbGQgY29tbWFuZHM6Ci0KLSAgICBhdXRvY29uZgotICAgIG1rZGlyIG9iagotICAgIGNkIG9i agotICAgIC4uL2NvbmZpZ3VyZSAtLWVuYWJsZS1hdXRvZ2VuCi0gICAgbWFrZQotCi0KLSMjIERv Y3VtZW50YXRpb24KLQotVGhlIG1hbnVhbCBwYWdlIGlzIGdlbmVyYXRlZCBpbiBib3RoIGh0bWwg YW5kIHJvZmYgZm9ybWF0cy4gIEFueSB3ZWIgYnJvd3NlcgotY2FuIGJlIHVzZWQgdG8gdmlldyB0 aGUgaHRtbCBtYW51YWwuICBUaGUgcm9mZiBtYW51YWwgcGFnZSBjYW4gYmUgZm9ybWF0dGVkCi1w cmlvciB0byBpbnN0YWxsYXRpb24gdmlhIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKLQotICAgIG5y b2ZmIC1tYW4gLXQgZG9jL2plbWFsbG9jLjMKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9NYWtlZmlsZS5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAxMTkzY2Q4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsNzYyICswLDAgQEAKLSMg Q2xlYXIgb3V0IGFsbCB2cGF0aHMsIHRoZW4gc2V0IGp1c3Qgb25lIChkZWZhdWx0IHZwYXRoKSBm b3IgdGhlIG1haW4gYnVpbGQKLSMgZGlyZWN0b3J5LgotdnBhdGgKLXZwYXRoICUgLgotCi0jIENs ZWFyIHRoZSBkZWZhdWx0IHN1ZmZpeGVzLCBzbyB0aGF0IGJ1aWx0LWluIHJ1bGVzIGFyZSBub3Qg dXNlZC4KLS5TVUZGSVhFUyA6Ci0KLVNIRUxMIDo9IC9iaW4vc2gKLQotQ0MgOj0gQENDQAotQ1hY IDo9IEBDWFhACi0KLSMgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgotREVTVERJUiA9Ci1CSU5E SVIgOj0gJChERVNURElSKUBCSU5ESVJACi1JTkNMVURFRElSIDo9ICQoREVTVERJUilASU5DTFVE RURJUkAKLUxJQkRJUiA6PSAkKERFU1RESVIpQExJQkRJUkAKLURBVEFESVIgOj0gJChERVNURElS KUBEQVRBRElSQAotTUFORElSIDo9ICQoREVTVERJUilATUFORElSQAotc3Jjcm9vdCA6PSBAc3Jj cm9vdEAKLW9ianJvb3QgOj0gQG9ianJvb3RACi1hYnNfc3Jjcm9vdCA6PSBAYWJzX3NyY3Jvb3RA Ci1hYnNfb2Jqcm9vdCA6PSBAYWJzX29ianJvb3RACi0KLSMgQnVpbGQgcGFyYW1ldGVycy4KLUNQ UEZMQUdTIDo9IEBDUFBGTEFHU0AgLUkkKG9ianJvb3QpaW5jbHVkZSAtSSQoc3Jjcm9vdClpbmNs dWRlCi1DT05GSUdVUkVfQ0ZMQUdTIDo9IEBDT05GSUdVUkVfQ0ZMQUdTQAotU1BFQ0lGSUVEX0NG TEFHUyA6PSBAU1BFQ0lGSUVEX0NGTEFHU0AKLUVYVFJBX0NGTEFHUyA6PSBARVhUUkFfQ0ZMQUdT QAotQ0ZMQUdTIDo9ICQoc3RyaXAgJChDT05GSUdVUkVfQ0ZMQUdTKSAkKFNQRUNJRklFRF9DRkxB R1MpICQoRVhUUkFfQ0ZMQUdTKSkKLUNPTkZJR1VSRV9DWFhGTEFHUyA6PSBAQ09ORklHVVJFX0NY WEZMQUdTQAotU1BFQ0lGSUVEX0NYWEZMQUdTIDo9IEBTUEVDSUZJRURfQ1hYRkxBR1NACi1FWFRS QV9DWFhGTEFHUyA6PSBARVhUUkFfQ1hYRkxBR1NACi1DWFhGTEFHUyA6PSAkKHN0cmlwICQoQ09O RklHVVJFX0NYWEZMQUdTKSAkKFNQRUNJRklFRF9DWFhGTEFHUykgJChFWFRSQV9DWFhGTEFHUykp Ci1MREZMQUdTIDo9IEBMREZMQUdTQAotRVhUUkFfTERGTEFHUyA6PSBARVhUUkFfTERGTEFHU0AK LUxJQlMgOj0gQExJQlNACi1SUEFUSF9FWFRSQSA6PSBAUlBBVEhfRVhUUkFACi1TTyA6PSBAc29A Ci1JTVBPUlRMSUIgOj0gQGltcG9ydGxpYkAKLU8gOj0gQG9ACi1BIDo9IEBhQAotRVhFIDo9IEBl eGVACi1MSUJQUkVGSVggOj0gQGxpYnByZWZpeEAKLVJFViA6PSBAcmV2QAotaW5zdGFsbF9zdWZm aXggOj0gQGluc3RhbGxfc3VmZml4QAotQUJJIDo9IEBhYmlACi1YU0xUUFJPQyA6PSBAWFNMVFBS T0NACi1YU0xST09UIDo9IEBYU0xST09UQAotQVVUT0NPTkYgOj0gQEFVVE9DT05GQAotX1JQQVRI ID0gQFJQQVRIQAotUlBBVEggPSAkKGlmICQoMSksJChjYWxsIF9SUEFUSCwkKDEpKSkKLWNmZ2hk cnNfaW4gOj0gJChhZGRwcmVmaXggJChzcmNyb290KSxAY2ZnaGRyc19pbkApCi1jZmdoZHJzX291 dCA6PSBAY2ZnaGRyc19vdXRACi1jZmdvdXRwdXRzX2luIDo9ICQoYWRkcHJlZml4ICQoc3Jjcm9v dCksQGNmZ291dHB1dHNfaW5AKQotY2Znb3V0cHV0c19vdXQgOj0gQGNmZ291dHB1dHNfb3V0QAot ZW5hYmxlX2F1dG9nZW4gOj0gQGVuYWJsZV9hdXRvZ2VuQAotZW5hYmxlX2RvYyA6PSBAZW5hYmxl X2RvY0AKLWVuYWJsZV9zaGFyZWQgOj0gQGVuYWJsZV9zaGFyZWRACi1lbmFibGVfc3RhdGljIDo9 IEBlbmFibGVfc3RhdGljQAotZW5hYmxlX3Byb2YgOj0gQGVuYWJsZV9wcm9mQAotZW5hYmxlX3pv bmVfYWxsb2NhdG9yIDo9IEBlbmFibGVfem9uZV9hbGxvY2F0b3JACi1lbmFibGVfZXhwZXJpbWVu dGFsX3NtYWxsb2N4IDo9IEBlbmFibGVfZXhwZXJpbWVudGFsX3NtYWxsb2N4QAotTUFMTE9DX0NP TkYgOj0gQEpFTUFMTE9DX0NQUkVGSVhATUFMTE9DX0NPTkYKLWxpbmtfd2hvbGVfYXJjaGl2ZSA6 PSBAbGlua193aG9sZV9hcmNoaXZlQAotRFNPX0xERkxBR1MgPSBARFNPX0xERkxBR1NACi1TT1JF ViA9IEBTT1JFVkAKLVBJQ19DRkxBR1MgPSBAUElDX0NGTEFHU0AKLUNUQVJHRVQgPSBAQ1RBUkdF VEAKLUxEVEFSR0VUID0gQExEVEFSR0VUQAotVEVTVF9MRF9NT0RFID0gQFRFU1RfTERfTU9ERUAK LU1LTElCID0gQE1LTElCQAotQVIgPSBAQVJACi1BUkZMQUdTID0gQEFSRkxBR1NACi1EVU1QX1NZ TVMgPSBARFVNUF9TWU1TQAotQVdLIDo9IEBBV0tACi1DQ19NTSA9IEBDQ19NTUAKLUxNIDo9IEBM TUAKLUlOU1RBTEwgPSBASU5TVEFMTEAKLQotaWZlcSAobWFjaG8sICQoQUJJKSkKLVRFU1RfTElC UkFSWV9QQVRIIDo9IERZTERfRkFMTEJBQ0tfTElCUkFSWV9QQVRIPSIkKG9ianJvb3QpbGliIgot ZWxzZQotaWZlcSAocGVjb2ZmLCAkKEFCSSkpCi1URVNUX0xJQlJBUllfUEFUSCA6PSBQQVRIPSIk KFBBVEgpOiQob2Jqcm9vdClsaWIiCi1lbHNlCi1URVNUX0xJQlJBUllfUEFUSCA6PQotZW5kaWYK LWVuZGlmCi0KLUxJQkpFTUFMTE9DIDo9ICQoTElCUFJFRklYKWplbWFsbG9jJChpbnN0YWxsX3N1 ZmZpeCkKLQotIyBMaXN0cyBvZiBmaWxlcy4KLUJJTlMgOj0gJChvYmpyb290KWJpbi9qZW1hbGxv Yy1jb25maWcgJChvYmpyb290KWJpbi9qZW1hbGxvYy5zaCAkKG9ianJvb3QpYmluL2plcHJvZgot Q19IRFJTIDo9ICQob2Jqcm9vdClpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jJChpbnN0YWxsX3N1 ZmZpeCkuaAotQ19TUkNTIDo9ICQoc3Jjcm9vdClzcmMvamVtYWxsb2MuYyBcCi0JJChzcmNyb290 KXNyYy9hcmVuYS5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2JhY2tncm91bmRfdGhyZWFkLmMgXAotCSQo c3Jjcm9vdClzcmMvYmFzZS5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2Jpbi5jIFwKLQkkKHNyY3Jvb3Qp c3JjL2Jpbl9pbmZvLmMgXAotCSQoc3Jjcm9vdClzcmMvYml0bWFwLmMgXAotCSQoc3Jjcm9vdClz cmMvYnVmX3dyaXRlci5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2NhY2hlX2Jpbi5jIFwKLQkkKHNyY3Jv b3Qpc3JjL2NraC5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2NvdW50ZXIuYyBcCi0JJChzcmNyb290KXNy Yy9jdGwuYyBcCi0JJChzcmNyb290KXNyYy9kZWNheS5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2Rpdi5j IFwKLQkkKHNyY3Jvb3Qpc3JjL2VjYWNoZS5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2VkYXRhLmMgXAot CSQoc3Jjcm9vdClzcmMvZWRhdGFfY2FjaGUuYyBcCi0JJChzcmNyb290KXNyYy9laG9va3MuYyBc Ci0JJChzcmNyb290KXNyYy9lbWFwLmMgXAotCSQoc3Jjcm9vdClzcmMvZXNldC5jIFwKLQkkKHNy Y3Jvb3Qpc3JjL2V4cF9ncm93LmMgXAotCSQoc3Jjcm9vdClzcmMvZXh0ZW50LmMgXAotCSQoc3Jj cm9vdClzcmMvZXh0ZW50X2Rzcy5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2V4dGVudF9tbWFwLmMgXAot CSQoc3Jjcm9vdClzcmMvZnhwLmMgXAotCSQoc3Jjcm9vdClzcmMvc2FuLmMgXAotCSQoc3Jjcm9v dClzcmMvc2FuX2J1bXAuYyBcCi0JJChzcmNyb290KXNyYy9ob29rLmMgXAotCSQoc3Jjcm9vdClz cmMvaHBhLmMgXAotCSQoc3Jjcm9vdClzcmMvaHBhX2hvb2tzLmMgXAotCSQoc3Jjcm9vdClzcmMv aHBkYXRhLmMgXAotCSQoc3Jjcm9vdClzcmMvaW5zcGVjdC5jIFwKLQkkKHNyY3Jvb3Qpc3JjL2xh cmdlLmMgXAotCSQoc3Jjcm9vdClzcmMvbG9nLmMgXAotCSQoc3Jjcm9vdClzcmMvbWFsbG9jX2lv LmMgXAotCSQoc3Jjcm9vdClzcmMvbXV0ZXguYyBcCi0JJChzcmNyb290KXNyYy9uc3RpbWUuYyBc Ci0JJChzcmNyb290KXNyYy9wYS5jIFwKLQkkKHNyY3Jvb3Qpc3JjL3BhX2V4dHJhLmMgXAotCSQo c3Jjcm9vdClzcmMvcGFpLmMgXAotCSQoc3Jjcm9vdClzcmMvcGFjLmMgXAotCSQoc3Jjcm9vdClz cmMvcGFnZXMuYyBcCi0JJChzcmNyb290KXNyYy9wZWFrX2V2ZW50LmMgXAotCSQoc3Jjcm9vdClz cmMvcHJvZi5jIFwKLQkkKHNyY3Jvb3Qpc3JjL3Byb2ZfZGF0YS5jIFwKLQkkKHNyY3Jvb3Qpc3Jj L3Byb2ZfbG9nLmMgXAotCSQoc3Jjcm9vdClzcmMvcHJvZl9yZWNlbnQuYyBcCi0JJChzcmNyb290 KXNyYy9wcm9mX3N0YXRzLmMgXAotCSQoc3Jjcm9vdClzcmMvcHJvZl9zeXMuYyBcCi0JJChzcmNy b290KXNyYy9wc3NldC5jIFwKLQkkKHNyY3Jvb3Qpc3JjL3J0cmVlLmMgXAotCSQoc3Jjcm9vdClz cmMvc2FmZXR5X2NoZWNrLmMgXAotCSQoc3Jjcm9vdClzcmMvc2MuYyBcCi0JJChzcmNyb290KXNy Yy9zZWMuYyBcCi0JJChzcmNyb290KXNyYy9zdGF0cy5jIFwKLQkkKHNyY3Jvb3Qpc3JjL3N6LmMg XAotCSQoc3Jjcm9vdClzcmMvdGNhY2hlLmMgXAotCSQoc3Jjcm9vdClzcmMvdGVzdF9ob29rcy5j IFwKLQkkKHNyY3Jvb3Qpc3JjL3RocmVhZF9ldmVudC5jIFwKLQkkKHNyY3Jvb3Qpc3JjL3RpY2tl ci5jIFwKLQkkKHNyY3Jvb3Qpc3JjL3RzZC5jIFwKLQkkKHNyY3Jvb3Qpc3JjL3dpdG5lc3MuYwot aWZlcSAoJChlbmFibGVfem9uZV9hbGxvY2F0b3IpLCAxKQotQ19TUkNTICs9ICQoc3Jjcm9vdClz cmMvem9uZS5jCi1lbmRpZgotaWZlcSAoJChJTVBPUlRMSUIpLCQoU08pKQotU1RBVElDX0xJQlMg Oj0gJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKS4kKEEpCi1lbmRpZgotaWZkZWYgUElDX0NG TEFHUwotU1RBVElDX0xJQlMgKz0gJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKV9waWMuJChB KQotZWxzZQotU1RBVElDX0xJQlMgKz0gJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKV9zLiQo QSkKLWVuZGlmCi1EU09TIDo9ICQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQykuJChTT1JFVikK LWlmbmVxICgkKFNPUkVWKSwkKFNPKSkKLURTT1MgKz0gJChvYmpyb290KWxpYi8kKExJQkpFTUFM TE9DKS4kKFNPKQotZW5kaWYKLWlmZXEgKDEsICQobGlua193aG9sZV9hcmNoaXZlKSkKLUxKRU1B TExPQyA6PSAtV2wsLS13aG9sZS1hcmNoaXZlIC1MJChvYmpyb290KWxpYiAtbCQoTElCSkVNQUxM T0MpIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUKLWVsc2UKLUxKRU1BTExPQyA6PSAkKG9ianJvb3Qp bGliLyQoTElCSkVNQUxMT0MpLiQoSU1QT1JUTElCKQotZW5kaWYKLVBDIDo9ICQob2Jqcm9vdClq ZW1hbGxvYy5wYwotRE9DU19YTUwgOj0gJChvYmpyb290KWRvYy9qZW1hbGxvYyQoaW5zdGFsbF9z dWZmaXgpLnhtbAotRE9DU19IVE1MIDo9ICQoRE9DU19YTUw6JChvYmpyb290KSUueG1sPSQob2Jq cm9vdCklLmh0bWwpCi1ET0NTX01BTjMgOj0gJChET0NTX1hNTDokKG9ianJvb3QpJS54bWw9JChv Ympyb290KSUuMykKLURPQ1MgOj0gJChET0NTX0hUTUwpICQoRE9DU19NQU4zKQotQ19URVNUTElC X1NSQ1MgOj0gJChzcmNyb290KXRlc3Qvc3JjL2J0YWxsb2MuYyAkKHNyY3Jvb3QpdGVzdC9zcmMv YnRhbGxvY18wLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3NyYy9idGFsbG9jXzEuYyAkKHNyY3Jvb3Qp dGVzdC9zcmMvbWF0aC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC9zcmMvbXR4LmMgJChzcmNyb290KXRl c3Qvc3JjL3NsZWVwLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3NyYy9TRk1ULmMgJChzcmNyb290KXRl c3Qvc3JjL3Rlc3QuYyBcCi0JJChzcmNyb290KXRlc3Qvc3JjL3RoZC5jICQoc3Jjcm9vdCl0ZXN0 L3NyYy90aW1lci5jCi1pZmVxICgxLCAkKGxpbmtfd2hvbGVfYXJjaGl2ZSkpCi1DX1VUSUxfSU5U RUdSQVRJT05fU1JDUyA6PQotQ19VVElMX0NQUF9TUkNTIDo9Ci1lbHNlCi1DX1VUSUxfSU5URUdS QVRJT05fU1JDUyA6PSAkKHNyY3Jvb3Qpc3JjL25zdGltZS5jICQoc3Jjcm9vdClzcmMvbWFsbG9j X2lvLmMgXAotCSQoc3Jjcm9vdClzcmMvdGlja2VyLmMKLUNfVVRJTF9DUFBfU1JDUyA6PSAkKHNy Y3Jvb3Qpc3JjL25zdGltZS5jICQoc3Jjcm9vdClzcmMvbWFsbG9jX2lvLmMKLWVuZGlmCi1URVNU U19VTklUIDo9IFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L2EwLmMgXAotCSQoc3Jjcm9vdCl0ZXN0 L3VuaXQvYXJlbmFfZGVjYXkuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9hcmVuYV9yZXNldC5j IFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L2F0b21pYy5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0 L2JhY2tncm91bmRfdGhyZWFkLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvYmFja2dyb3VuZF90 aHJlYWRfZW5hYmxlLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvYmFzZS5jIFwKLQkkKHNyY3Jv b3QpdGVzdC91bml0L2JhdGNoX2FsbG9jLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvYmluc2hh cmQuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9iaXRtYXAuYyBcCi0JJChzcmNyb290KXRlc3Qv dW5pdC9iaXRfdXRpbC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L2J1Zl93cml0ZXIuYyBcCi0J JChzcmNyb290KXRlc3QvdW5pdC9jYWNoZV9iaW4uYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9j a2guYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9jb3VudGVyLmMgXAotCSQoc3Jjcm9vdCl0ZXN0 L3VuaXQvZGVjYXkuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9kaXYuYyBcCi0JJChzcmNyb290 KXRlc3QvdW5pdC9kb3VibGVfZnJlZS5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L2VkYXRhX2Nh Y2hlLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvZW1pdHRlci5jIFwKLQkkKHNyY3Jvb3QpdGVz dC91bml0L2V4dGVudF9xdWFudGl6ZS5jIFwKLQkke3NyY3Jvb3R9dGVzdC91bml0L2ZiLmMgXAot CSQoc3Jjcm9vdCl0ZXN0L3VuaXQvZm9yay5jIFwKLQkke3NyY3Jvb3R9dGVzdC91bml0L2Z4cC5j IFwKLQkke3NyY3Jvb3R9dGVzdC91bml0L3Nhbi5jIFwKLQkke3NyY3Jvb3R9dGVzdC91bml0L3Nh bl9idW1wLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvaGFzaC5jIFwKLQkkKHNyY3Jvb3QpdGVz dC91bml0L2hvb2suYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9ocGEuYyBcCi0JJChzcmNyb290 KXRlc3QvdW5pdC9ocGFfYmFja2dyb3VuZF90aHJlYWQuYyBcCi0JJChzcmNyb290KXRlc3QvdW5p dC9ocGRhdGEuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9odWdlLmMgXAotCSQoc3Jjcm9vdCl0 ZXN0L3VuaXQvaW5zcGVjdC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L2p1bmsuYyBcCi0JJChz cmNyb290KXRlc3QvdW5pdC9qdW5rX2FsbG9jLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvanVu a19mcmVlLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvbG9nLmMgXAotCSQoc3Jjcm9vdCl0ZXN0 L3VuaXQvbWFsbGN0bC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L21hbGxvY19jb25mXzIuYyBc Ci0JJChzcmNyb290KXRlc3QvdW5pdC9tYWxsb2NfaW8uYyBcCi0JJChzcmNyb290KXRlc3QvdW5p dC9tYXRoLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvbXBzY19xdWV1ZS5jIFwKLQkkKHNyY3Jv b3QpdGVzdC91bml0L21xLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvbXR4LmMgXAotCSQoc3Jj cm9vdCl0ZXN0L3VuaXQvbnN0aW1lLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvb3ZlcnNpemVf dGhyZXNob2xkLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcGEuYyBcCi0JJChzcmNyb290KXRl c3QvdW5pdC9wYWNrLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcGFnZXMuYyBcCi0JJChzcmNy b290KXRlc3QvdW5pdC9wZWFrLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcGguYyBcCi0JJChz cmNyb290KXRlc3QvdW5pdC9wcm5nLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcHJvZl9hY2N1 bS5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3Byb2ZfYWN0aXZlLmMgXAotCSQoc3Jjcm9vdCl0 ZXN0L3VuaXQvcHJvZl9nZHVtcC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3Byb2ZfaG9vay5j IFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3Byb2ZfaWR1bXAuYyBcCi0JJChzcmNyb290KXRlc3Qv dW5pdC9wcm9mX2xvZy5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3Byb2ZfbWR1bXAuYyBcCi0J JChzcmNyb290KXRlc3QvdW5pdC9wcm9mX3JlY2VudC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0 L3Byb2ZfcmVzZXQuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9wcm9mX3N0YXRzLmMgXAotCSQo c3Jjcm9vdCl0ZXN0L3VuaXQvcHJvZl90Y3R4LmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcHJv Zl90aHJlYWRfbmFtZS5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3Byb2Zfc3lzX3RocmVhZF9u YW1lLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvcHNzZXQuYyBcCi0JJChzcmNyb290KXRlc3Qv dW5pdC9xbC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3FyLmMgXAotCSQoc3Jjcm9vdCl0ZXN0 L3VuaXQvcmIuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9yZXRhaW5lZC5jIFwKLQkkKHNyY3Jv b3QpdGVzdC91bml0L3J0cmVlLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvc2FmZXR5X2NoZWNr LmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvc2MuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9z ZWMuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9zZXEuYyBcCi0JJChzcmNyb290KXRlc3QvdW5p dC9TRk1ULmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvc2l6ZV9jaGVjay5jIFwKLQkkKHNyY3Jv b3QpdGVzdC91bml0L3NpemVfY2xhc3Nlcy5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3NsYWIu YyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9zbW9vdGhzdGVwLmMgXAotCSQoc3Jjcm9vdCl0ZXN0 L3VuaXQvc3Bpbi5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3N0YXRzLmMgXAotCSQoc3Jjcm9v dCl0ZXN0L3VuaXQvc3RhdHNfcHJpbnQuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC9zei5jIFwK LQkkKHNyY3Jvb3QpdGVzdC91bml0L3RjYWNoZV9tYXguYyBcCi0JJChzcmNyb290KXRlc3QvdW5p dC90ZXN0X2hvb2tzLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvdGhyZWFkX2V2ZW50LmMgXAot CSQoc3Jjcm9vdCl0ZXN0L3VuaXQvdGlja2VyLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvdHNk LmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvdWFmLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQv d2l0bmVzcy5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3plcm8uYyBcCi0JJChzcmNyb290KXRl c3QvdW5pdC96ZXJvX3JlYWxsb2NfYWJvcnQuYyBcCi0JJChzcmNyb290KXRlc3QvdW5pdC96ZXJv X3JlYWxsb2NfZnJlZS5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3plcm9fcmVhbGxvY19hbGxv Yy5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L3plcm9fcmVhbGxvY3MuYwotaWZlcSAoQGVuYWJs ZV9wcm9mQCwgMSkKLVRFU1RTX1VOSVQgKz0gXAotCSQoc3Jjcm9vdCl0ZXN0L3VuaXQvYXJlbmFf cmVzZXRfcHJvZi5jIFwKLQkkKHNyY3Jvb3QpdGVzdC91bml0L2JhdGNoX2FsbG9jX3Byb2YuYwot ZW5kaWYKLVRFU1RTX0lOVEVHUkFUSU9OIDo9ICQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9uL2Fs aWduZWRfYWxsb2MuYyBcCi0JJChzcmNyb290KXRlc3QvaW50ZWdyYXRpb24vYWxsb2NhdGVkLmMg XAotCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9uL2V4dGVudC5jIFwKLQkkKHNyY3Jvb3QpdGVz dC9pbnRlZ3JhdGlvbi9tYWxsb2MuYyBcCi0JJChzcmNyb290KXRlc3QvaW50ZWdyYXRpb24vbWFs bG9jeC5jIFwKLQkkKHNyY3Jvb3QpdGVzdC9pbnRlZ3JhdGlvbi9NQUxMT0NYX0FSRU5BLmMgXAot CSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0aW9uL292ZXJmbG93LmMgXAotCSQoc3Jjcm9vdCl0ZXN0 L2ludGVncmF0aW9uL3Bvc2l4X21lbWFsaWduLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0 aW9uL3JhbGxvY3guYyBcCi0JJChzcmNyb290KXRlc3QvaW50ZWdyYXRpb24vc2RhbGxvY3guYyBc Ci0JJChzcmNyb290KXRlc3QvaW50ZWdyYXRpb24vc2xhYl9zaXplcy5jIFwKLQkkKHNyY3Jvb3Qp dGVzdC9pbnRlZ3JhdGlvbi90aHJlYWRfYXJlbmEuYyBcCi0JJChzcmNyb290KXRlc3QvaW50ZWdy YXRpb24vdGhyZWFkX3RjYWNoZV9lbmFibGVkLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L2ludGVncmF0 aW9uL3hhbGxvY3guYwotaWZlcSAoQGVuYWJsZV9leHBlcmltZW50YWxfc21hbGxvY3hALCAxKQot VEVTVFNfSU5URUdSQVRJT04gKz0gXAotICAkKHNyY3Jvb3QpdGVzdC9pbnRlZ3JhdGlvbi9zbWFs bG9jeC5jCi1lbmRpZgotaWZlcSAoQGVuYWJsZV9jeHhALCAxKQotQ1BQX1NSQ1MgOj0gJChzcmNy b290KXNyYy9qZW1hbGxvY19jcHAuY3BwCi1URVNUU19JTlRFR1JBVElPTl9DUFAgOj0gJChzcmNy b290KXRlc3QvaW50ZWdyYXRpb24vY3BwL2Jhc2ljLmNwcCBcCi0JJChzcmNyb290KXRlc3QvaW50 ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X3RydWUuY3BwIFwKLQkkKHNyY3Jvb3QpdGVzdC9p bnRlZ3JhdGlvbi9jcHAvaW5mYWxsaWJsZV9uZXdfZmFsc2UuY3BwCi1lbHNlCi1DUFBfU1JDUyA6 PQotVEVTVFNfSU5URUdSQVRJT05fQ1BQIDo9Ci1lbmRpZgotVEVTVFNfQU5BTFlaRSA6PSAkKHNy Y3Jvb3QpdGVzdC9hbmFseXplL3Byb2ZfYmlhcy5jIFwKLQkkKHNyY3Jvb3QpdGVzdC9hbmFseXpl L3JhbmQuYyBcCi0JJChzcmNyb290KXRlc3QvYW5hbHl6ZS9zaXplcy5jCi1URVNUU19TVFJFU1Mg Oj0gJChzcmNyb290KXRlc3Qvc3RyZXNzL2JhdGNoX2FsbG9jLmMgXAotCSQoc3Jjcm9vdCl0ZXN0 L3N0cmVzcy9maWxsX2ZsdXNoLmMgXAotCSQoc3Jjcm9vdCl0ZXN0L3N0cmVzcy9ob29rYmVuY2gu YyBcCi0JJChzcmNyb290KXRlc3Qvc3RyZXNzL2xhcmdlX21pY3JvYmVuY2guYyBcCi0JJChzcmNy b290KXRlc3Qvc3RyZXNzL21hbGxjdGwuYyBcCi0JJChzcmNyb290KXRlc3Qvc3RyZXNzL21pY3Jv YmVuY2guYwotCi0KLVRFU1RTIDo9ICQoVEVTVFNfVU5JVCkgJChURVNUU19JTlRFR1JBVElPTikg JChURVNUU19JTlRFR1JBVElPTl9DUFApIFwKLQkkKFRFU1RTX0FOQUxZWkUpICQoVEVTVFNfU1RS RVNTKQotCi1QUklWQVRFX05BTUVTUEFDRV9IRFJTIDo9ICQob2Jqcm9vdClpbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlLmggJChvYmpyb290KWluY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvcHJpdmF0ZV9uYW1lc3BhY2VfamV0LmgKLVBSSVZBVEVfTkFNRVNQQUNFX0dF Tl9IRFJTIDo9ICQoUFJJVkFURV9OQU1FU1BBQ0VfSERSUzolLmg9JS5nZW4uaCkKLUNfU1lNX09C SlMgOj0gJChDX1NSQ1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS5zeW0uJChPKSkKLUNfU1lN UyA6PSAkKENfU1JDUzokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLnN5bSkKLUNfT0JKUyA6PSAk KENfU1JDUzokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLiQoTykpCi1DUFBfT0JKUyA6PSAkKENQ UF9TUkNTOiQoc3Jjcm9vdCklLmNwcD0kKG9ianJvb3QpJS4kKE8pKQotQ19QSUNfT0JKUyA6PSAk KENfU1JDUzokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLnBpYy4kKE8pKQotQ1BQX1BJQ19PQkpT IDo9ICQoQ1BQX1NSQ1M6JChzcmNyb290KSUuY3BwPSQob2Jqcm9vdCklLnBpYy4kKE8pKQotQ19K RVRfU1lNX09CSlMgOj0gJChDX1NSQ1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS5qZXQuc3lt LiQoTykpCi1DX0pFVF9TWU1TIDo9ICQoQ19TUkNTOiQoc3Jjcm9vdCklLmM9JChvYmpyb290KSUu amV0LnN5bSkKLUNfSkVUX09CSlMgOj0gJChDX1NSQ1M6JChzcmNyb290KSUuYz0kKG9ianJvb3Qp JS5qZXQuJChPKSkKLUNfVEVTVExJQl9VTklUX09CSlMgOj0gJChDX1RFU1RMSUJfU1JDUzokKHNy Y3Jvb3QpJS5jPSQob2Jqcm9vdCklLnVuaXQuJChPKSkKLUNfVEVTVExJQl9JTlRFR1JBVElPTl9P QkpTIDo9ICQoQ19URVNUTElCX1NSQ1M6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS5pbnRlZ3Jh dGlvbi4kKE8pKQotQ19VVElMX0lOVEVHUkFUSU9OX09CSlMgOj0gJChDX1VUSUxfSU5URUdSQVRJ T05fU1JDUzokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLmludGVncmF0aW9uLiQoTykpCi1DX1RF U1RMSUJfQU5BTFlaRV9PQkpTIDo9ICQoQ19URVNUTElCX1NSQ1M6JChzcmNyb290KSUuYz0kKG9i anJvb3QpJS5hbmFseXplLiQoTykpCi1DX1RFU1RMSUJfU1RSRVNTX09CSlMgOj0gJChDX1RFU1RM SUJfU1JDUzokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLnN0cmVzcy4kKE8pKQotQ19URVNUTElC X09CSlMgOj0gJChDX1RFU1RMSUJfVU5JVF9PQkpTKSAkKENfVEVTVExJQl9JTlRFR1JBVElPTl9P QkpTKSBcCi0JJChDX1VUSUxfSU5URUdSQVRJT05fT0JKUykgJChDX1RFU1RMSUJfQU5BTFlaRV9P QkpTKSBcCi0JJChDX1RFU1RMSUJfU1RSRVNTX09CSlMpCi0KLVRFU1RTX1VOSVRfT0JKUyA6PSAk KFRFU1RTX1VOSVQ6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJS4kKE8pKQotVEVTVFNfSU5URUdS QVRJT05fT0JKUyA6PSAkKFRFU1RTX0lOVEVHUkFUSU9OOiQoc3Jjcm9vdCklLmM9JChvYmpyb290 KSUuJChPKSkKLVRFU1RTX0lOVEVHUkFUSU9OX0NQUF9PQkpTIDo9ICQoVEVTVFNfSU5URUdSQVRJ T05fQ1BQOiQoc3Jjcm9vdCklLmNwcD0kKG9ianJvb3QpJS4kKE8pKQotVEVTVFNfQU5BTFlaRV9P QkpTIDo9ICQoVEVTVFNfQU5BTFlaRTokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklLiQoTykpCi1U RVNUU19TVFJFU1NfT0JKUyA6PSAkKFRFU1RTX1NUUkVTUzokKHNyY3Jvb3QpJS5jPSQob2Jqcm9v dCklLiQoTykpCi1URVNUU19PQkpTIDo9ICQoVEVTVFNfVU5JVF9PQkpTKSAkKFRFU1RTX0lOVEVH UkFUSU9OX09CSlMpICQoVEVTVFNfQU5BTFlaRV9PQkpTKSBcCi0JJChURVNUU19TVFJFU1NfT0JK UykKLVRFU1RTX0NQUF9PQkpTIDo9ICQoVEVTVFNfSU5URUdSQVRJT05fQ1BQX09CSlMpCi0KLS5Q SE9OWTogYWxsIGRpc3QgYnVpbGRfZG9jX2h0bWwgYnVpbGRfZG9jX21hbiBidWlsZF9kb2MKLS5Q SE9OWTogaW5zdGFsbF9iaW4gaW5zdGFsbF9pbmNsdWRlIGluc3RhbGxfbGliCi0uUEhPTlk6IGlu c3RhbGxfZG9jX2h0bWwgaW5zdGFsbF9kb2NfbWFuIGluc3RhbGxfZG9jIGluc3RhbGwKLS5QSE9O WTogdGVzdHMgY2hlY2sgY2xlYW4gZGlzdGNsZWFuIHJlbGNsZWFuCi0KLS5TRUNPTkRBUlkgOiAk KFBSSVZBVEVfTkFNRVNQQUNFX0dFTl9IRFJTKSAkKFRFU1RTX09CSlMpICQoVEVTVFNfQ1BQX09C SlMpCi0KLSMgRGVmYXVsdCB0YXJnZXQuCi1hbGw6IGJ1aWxkX2xpYgotCi1kaXN0OiBidWlsZF9k b2MKLQotJChvYmpyb290KWRvYy8lJChpbnN0YWxsX3N1ZmZpeCkuaHRtbCA6ICQob2Jqcm9vdClk b2MvJS54bWwgJChzcmNyb290KWRvYy9zdHlsZXNoZWV0LnhzbCAkKG9ianJvb3QpZG9jL2h0bWwu eHNsCi1pZm5lcSAoJChYU0xST09UKSwpCi0JJChYU0xUUFJPQykgLW8gJEAgJChvYmpyb290KWRv Yy9odG1sLnhzbCAkPAotZWxzZQotaWZlcSAoJCh3aWxkY2FyZCAkKERPQ1NfSFRNTCkpLCkKLQlA ZWNobyAiPHA+TWlzc2luZyB4c2x0cHJvYy4gIERvYyBub3QgYnVpbHQuPC9wPiIgPiAkQAotZW5k aWYKLQlAZWNobyAiTWlzc2luZyB4c2x0cHJvYy4gICIkQCIgbm90IChyZSlidWlsdC4iCi1lbmRp ZgotCi0kKG9ianJvb3QpZG9jLyUkKGluc3RhbGxfc3VmZml4KS4zIDogJChvYmpyb290KWRvYy8l LnhtbCAkKHNyY3Jvb3QpZG9jL3N0eWxlc2hlZXQueHNsICQob2Jqcm9vdClkb2MvbWFucGFnZXMu eHNsCi1pZm5lcSAoJChYU0xST09UKSwpCi0JJChYU0xUUFJPQykgLW8gJEAgJChvYmpyb290KWRv Yy9tYW5wYWdlcy54c2wgJDwKLSMgVGhlIC1vIG9wdGlvbiAob3V0cHV0IGZpbGVuYW1lKSBvZiB4 c2x0cHJvYyBtYXkgbm90IHdvcmsgKGl0IHVzZXMgdGhlCi0jIDxyZWZuYW1lPiBpbiB0aGUgLnht bCBmaWxlKS4gIE1hbnVhbGx5IGFkZCB0aGUgc3VmZml4IGlmIHNvLgotICBpZm5lcSAoJChpbnN0 YWxsX3N1ZmZpeCksKQotCUBpZiBbIC1mICQob2Jqcm9vdClkb2MvamVtYWxsb2MuMyBdOyB0aGVu IFwKLQkJbXYgJChvYmpyb290KWRvYy9qZW1hbGxvYy4zICQob2Jqcm9vdClkb2MvamVtYWxsb2Mk KGluc3RhbGxfc3VmZml4KS4zIDsgXAotCWZpCi0gIGVuZGlmCi1lbHNlCi1pZmVxICgkKHdpbGRj YXJkICQoRE9DU19NQU4zKSksKQotCUBlY2hvICJNaXNzaW5nIHhzbHRwcm9jLiAgRG9jIG5vdCBi dWlsdC4iID4gJEAKLWVuZGlmCi0JQGVjaG8gIk1pc3NpbmcgeHNsdHByb2MuICAiJEAiIG5vdCAo cmUpYnVpbHQuIgotZW5kaWYKLQotYnVpbGRfZG9jX2h0bWw6ICQoRE9DU19IVE1MKQotYnVpbGRf ZG9jX21hbjogJChET0NTX01BTjMpCi1idWlsZF9kb2M6ICQoRE9DUykKLQotIwotIyBJbmNsdWRl IGdlbmVyYXRlZCBkZXBlbmRlbmN5IGZpbGVzLgotIwotaWZkZWYgQ0NfTU0KLS1pbmNsdWRlICQo Q19TWU1fT0JKUzolLiQoTyk9JS5kKQotLWluY2x1ZGUgJChDX09CSlM6JS4kKE8pPSUuZCkKLS1p bmNsdWRlICQoQ1BQX09CSlM6JS4kKE8pPSUuZCkKLS1pbmNsdWRlICQoQ19QSUNfT0JKUzolLiQo Tyk9JS5kKQotLWluY2x1ZGUgJChDUFBfUElDX09CSlM6JS4kKE8pPSUuZCkKLS1pbmNsdWRlICQo Q19KRVRfU1lNX09CSlM6JS4kKE8pPSUuZCkKLS1pbmNsdWRlICQoQ19KRVRfT0JKUzolLiQoTyk9 JS5kKQotLWluY2x1ZGUgJChDX1RFU1RMSUJfT0JKUzolLiQoTyk9JS5kKQotLWluY2x1ZGUgJChU RVNUU19PQkpTOiUuJChPKT0lLmQpCi0taW5jbHVkZSAkKFRFU1RTX0NQUF9PQkpTOiUuJChPKT0l LmQpCi1lbmRpZgotCi0kKENfU1lNX09CSlMpOiAkKG9ianJvb3Qpc3JjLyUuc3ltLiQoTyk6ICQo c3Jjcm9vdClzcmMvJS5jCi0kKENfU1lNX09CSlMpOiBDUFBGTEFHUyArPSAtREpFTUFMTE9DX05P X1BSSVZBVEVfTkFNRVNQQUNFCi0kKENfU1lNUyk6ICQob2Jqcm9vdClzcmMvJS5zeW06ICQob2Jq cm9vdClzcmMvJS5zeW0uJChPKQotJChDX09CSlMpOiAkKG9ianJvb3Qpc3JjLyUuJChPKTogJChz cmNyb290KXNyYy8lLmMKLSQoQ1BQX09CSlMpOiAkKG9ianJvb3Qpc3JjLyUuJChPKTogJChzcmNy b290KXNyYy8lLmNwcAotJChDX1BJQ19PQkpTKTogJChvYmpyb290KXNyYy8lLnBpYy4kKE8pOiAk KHNyY3Jvb3Qpc3JjLyUuYwotJChDX1BJQ19PQkpTKTogQ0ZMQUdTICs9ICQoUElDX0NGTEFHUykK LSQoQ1BQX1BJQ19PQkpTKTogJChvYmpyb290KXNyYy8lLnBpYy4kKE8pOiAkKHNyY3Jvb3Qpc3Jj LyUuY3BwCi0kKENQUF9QSUNfT0JKUyk6IENYWEZMQUdTICs9ICQoUElDX0NGTEFHUykKLSQoQ19K RVRfU1lNX09CSlMpOiAkKG9ianJvb3Qpc3JjLyUuamV0LnN5bS4kKE8pOiAkKHNyY3Jvb3Qpc3Jj LyUuYwotJChDX0pFVF9TWU1fT0JKUyk6IENQUEZMQUdTICs9IC1ESkVNQUxMT0NfSkVUIC1ESkVN QUxMT0NfTk9fUFJJVkFURV9OQU1FU1BBQ0UKLSQoQ19KRVRfU1lNUyk6ICQob2Jqcm9vdClzcmMv JS5qZXQuc3ltOiAkKG9ianJvb3Qpc3JjLyUuamV0LnN5bS4kKE8pCi0kKENfSkVUX09CSlMpOiAk KG9ianJvb3Qpc3JjLyUuamV0LiQoTyk6ICQoc3Jjcm9vdClzcmMvJS5jCi0kKENfSkVUX09CSlMp OiBDUFBGTEFHUyArPSAtREpFTUFMTE9DX0pFVAotJChDX1RFU1RMSUJfVU5JVF9PQkpTKTogJChv Ympyb290KXRlc3Qvc3JjLyUudW5pdC4kKE8pOiAkKHNyY3Jvb3QpdGVzdC9zcmMvJS5jCi0kKENf VEVTVExJQl9VTklUX09CSlMpOiBDUFBGTEFHUyArPSAtREpFTUFMTE9DX1VOSVRfVEVTVAotJChD X1RFU1RMSUJfSU5URUdSQVRJT05fT0JKUyk6ICQob2Jqcm9vdCl0ZXN0L3NyYy8lLmludGVncmF0 aW9uLiQoTyk6ICQoc3Jjcm9vdCl0ZXN0L3NyYy8lLmMKLSQoQ19URVNUTElCX0lOVEVHUkFUSU9O X09CSlMpOiBDUFBGTEFHUyArPSAtREpFTUFMTE9DX0lOVEVHUkFUSU9OX1RFU1QKLSQoQ19VVElM X0lOVEVHUkFUSU9OX09CSlMpOiAkKG9ianJvb3Qpc3JjLyUuaW50ZWdyYXRpb24uJChPKTogJChz cmNyb290KXNyYy8lLmMKLSQoQ19URVNUTElCX0FOQUxZWkVfT0JKUyk6ICQob2Jqcm9vdCl0ZXN0 L3NyYy8lLmFuYWx5emUuJChPKTogJChzcmNyb290KXRlc3Qvc3JjLyUuYwotJChDX1RFU1RMSUJf QU5BTFlaRV9PQkpTKTogQ1BQRkxBR1MgKz0gLURKRU1BTExPQ19BTkFMWVpFX1RFU1QKLSQoQ19U RVNUTElCX1NUUkVTU19PQkpTKTogJChvYmpyb290KXRlc3Qvc3JjLyUuc3RyZXNzLiQoTyk6ICQo c3Jjcm9vdCl0ZXN0L3NyYy8lLmMKLSQoQ19URVNUTElCX1NUUkVTU19PQkpTKTogQ1BQRkxBR1Mg Kz0gLURKRU1BTExPQ19TVFJFU1NfVEVTVCAtREpFTUFMTE9DX1NUUkVTU19URVNUTElCCi0kKENf VEVTVExJQl9PQkpTKTogQ1BQRkxBR1MgKz0gLUkkKHNyY3Jvb3QpdGVzdC9pbmNsdWRlIC1JJChv Ympyb290KXRlc3QvaW5jbHVkZQotJChURVNUU19VTklUX09CSlMpOiBDUFBGTEFHUyArPSAtREpF TUFMTE9DX1VOSVRfVEVTVAotJChURVNUU19JTlRFR1JBVElPTl9PQkpTKTogQ1BQRkxBR1MgKz0g LURKRU1BTExPQ19JTlRFR1JBVElPTl9URVNUCi0kKFRFU1RTX0lOVEVHUkFUSU9OX0NQUF9PQkpT KTogQ1BQRkxBR1MgKz0gLURKRU1BTExPQ19JTlRFR1JBVElPTl9DUFBfVEVTVAotJChURVNUU19B TkFMWVpFX09CSlMpOiBDUFBGTEFHUyArPSAtREpFTUFMTE9DX0FOQUxZWkVfVEVTVAotJChURVNU U19TVFJFU1NfT0JKUyk6IENQUEZMQUdTICs9IC1ESkVNQUxMT0NfU1RSRVNTX1RFU1QKLSQoVEVT VFNfT0JKUyk6ICQob2Jqcm9vdCl0ZXN0LyUuJChPKTogJChzcmNyb290KXRlc3QvJS5jCi0kKFRF U1RTX0NQUF9PQkpTKTogJChvYmpyb290KXRlc3QvJS4kKE8pOiAkKHNyY3Jvb3QpdGVzdC8lLmNw cAotJChURVNUU19PQkpTKTogQ1BQRkxBR1MgKz0gLUkkKHNyY3Jvb3QpdGVzdC9pbmNsdWRlIC1J JChvYmpyb290KXRlc3QvaW5jbHVkZQotJChURVNUU19DUFBfT0JKUyk6IENQUEZMQUdTICs9IC1J JChzcmNyb290KXRlc3QvaW5jbHVkZSAtSSQob2Jqcm9vdCl0ZXN0L2luY2x1ZGUKLWlmbmVxICgk KElNUE9SVExJQiksJChTTykpCi0kKENQUF9PQkpTKSAkKENfU1lNX09CSlMpICQoQ19PQkpTKSAk KENfSkVUX1NZTV9PQkpTKSAkKENfSkVUX09CSlMpOiBDUFBGTEFHUyArPSAtRERMTEVYUE9SVAot ZW5kaWYKLQotIyBEZXBlbmRlbmNpZXMuCi1pZm5kZWYgQ0NfTU0KLUhFQURFUl9ESVJTID0gJChz cmNyb290KWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwgXAotCSQob2Jqcm9vdClpbmNsdWRlL2pl bWFsbG9jICQob2Jqcm9vdClpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsCi1IRUFERVJTID0gJChm aWx0ZXItb3V0ICQoUFJJVkFURV9OQU1FU1BBQ0VfSERSUyksJCh3aWxkY2FyZCAkKGZvcmVhY2gg ZGlyLCQoSEVBREVSX0RJUlMpLCQoZGlyKS8qLmgpKSkKLSQoQ19TWU1fT0JKUykgJChDX09CSlMp ICQoQ1BQX09CSlMpICQoQ19QSUNfT0JKUykgJChDUFBfUElDX09CSlMpICQoQ19KRVRfU1lNX09C SlMpICQoQ19KRVRfT0JKUykgJChDX1RFU1RMSUJfT0JKUykgJChURVNUU19PQkpTKSAkKFRFU1RT X0NQUF9PQkpTKTogJChIRUFERVJTKQotJChURVNUU19PQkpTKSAkKFRFU1RTX0NQUF9PQkpTKTog JChvYmpyb290KXRlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9jX3Rlc3QuaAotZW5kaWYKLQotJChD X09CSlMpICQoQ1BQX09CSlMpICQoQ19QSUNfT0JKUykgJChDUFBfUElDX09CSlMpICQoQ19URVNU TElCX0lOVEVHUkFUSU9OX09CSlMpICQoQ19VVElMX0lOVEVHUkFUSU9OX09CSlMpICQoVEVTVFNf SU5URUdSQVRJT05fT0JKUykgJChURVNUU19JTlRFR1JBVElPTl9DUFBfT0JKUyk6ICQob2Jqcm9v dClpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlLmgKLSQoQ19KRVRf T0JKUykgJChDX1RFU1RMSUJfVU5JVF9PQkpTKSAkKENfVEVTVExJQl9BTkFMWVpFX09CSlMpICQo Q19URVNUTElCX1NUUkVTU19PQkpTKSAkKFRFU1RTX1VOSVRfT0JKUykgJChURVNUU19BTkFMWVpF X09CSlMpICQoVEVTVFNfU1RSRVNTX09CSlMpOiAkKG9ianJvb3QpaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZV9qZXQuaAotCi0kKENfU1lNX09CSlMpICQoQ19PQkpT KSAkKENfUElDX09CSlMpICQoQ19KRVRfU1lNX09CSlMpICQoQ19KRVRfT0JKUykgJChDX1RFU1RM SUJfT0JKUykgJChURVNUU19PQkpTKTogJS4kKE8pOgotCUBta2RpciAtcCAkKEBEKQotCSQoQ0Mp ICQoQ0ZMQUdTKSAtYyAkKENQUEZMQUdTKSAkKENUQVJHRVQpICQ8Ci1pZmRlZiBDQ19NTQotCUAk KENDKSAtTU0gJChDUFBGTEFHUykgLU1UICRAIC1vICQoQDolLiQoTyk9JS5kKSAkPAotZW5kaWYK LQotJChDX1NZTVMpOiAlLnN5bToKLQlAbWtkaXIgLXAgJChARCkKLQkkKERVTVBfU1lNUykgJDwg fCAkKEFXSykgLWYgJChvYmpyb290KWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9z eW1ib2xzLmF3ayA+ICRACi0KLSQoQ19KRVRfU1lNUyk6ICUuc3ltOgotCUBta2RpciAtcCAkKEBE KQotCSQoRFVNUF9TWU1TKSAkPCB8ICQoQVdLKSAtZiAkKG9ianJvb3QpaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHNfamV0LmF3ayA+ICRACi0KLSQob2Jqcm9vdClpbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlLmdlbi5oOiAkKENfU1lNUykK LQkkKFNIRUxMKSAkKHNyY3Jvb3QpaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25h bWVzcGFjZS5zaCAkXiA+ICRACi0KLSQob2Jqcm9vdClpbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3ByaXZhdGVfbmFtZXNwYWNlX2pldC5nZW4uaDogJChDX0pFVF9TWU1TKQotCSQoU0hFTEwpICQo c3Jjcm9vdClpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFtZXNwYWNlLnNoICRe ID4gJEAKLQotJS5oOiAlLmdlbi5oCi0JQGlmICEgYGNtcCAtcyAkPCAkQGAgOyB0aGVuIGVjaG8g ImNwICQ8ICRAIjsgY3AgJDwgJEAgOyBmaQotCi0kKENQUF9PQkpTKSAkKENQUF9QSUNfT0JKUykg JChURVNUU19DUFBfT0JKUyk6ICUuJChPKToKLQlAbWtkaXIgLXAgJChARCkKLQkkKENYWCkgJChD WFhGTEFHUykgLWMgJChDUFBGTEFHUykgJChDVEFSR0VUKSAkPAotaWZkZWYgQ0NfTU0KLQlAJChD WFgpIC1NTSAkKENQUEZMQUdTKSAtTVQgJEAgLW8gJChAOiUuJChPKT0lLmQpICQ8Ci1lbmRpZgot Ci1pZm5lcSAoJChTT1JFViksJChTTykpCi0lLiQoU08pIDogJS4kKFNPUkVWKQotCUBta2RpciAt cCAkKEBEKQotCWxuIC1zZiAkKDxGKSAkQAotZW5kaWYKLQotJChvYmpyb290KWxpYi8kKExJQkpF TUFMTE9DKS4kKFNPUkVWKSA6ICQoaWYgJChQSUNfQ0ZMQUdTKSwkKENfUElDX09CSlMpLCQoQ19P QkpTKSkgJChpZiAkKFBJQ19DRkxBR1MpLCQoQ1BQX1BJQ19PQkpTKSwkKENQUF9PQkpTKSkKLQlA bWtkaXIgLXAgJChARCkKLQkkKENDKSAkKERTT19MREZMQUdTKSAkKGNhbGwgUlBBVEgsJChSUEFU SF9FWFRSQSkpICQoTERUQVJHRVQpICQrICQoTERGTEFHUykgJChMSUJTKSAkKEVYVFJBX0xERkxB R1MpCi0KLSQob2Jqcm9vdClsaWIvJChMSUJKRU1BTExPQylfcGljLiQoQSkgOiAkKENfUElDX09C SlMpICQoQ1BQX1BJQ19PQkpTKQotJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKS4kKEEpIDog JChDX09CSlMpICQoQ1BQX09CSlMpCi0kKG9ianJvb3QpbGliLyQoTElCSkVNQUxMT0MpX3MuJChB KSA6ICQoQ19PQkpTKSAkKENQUF9PQkpTKQotCi0kKFNUQVRJQ19MSUJTKToKLQlAbWtkaXIgLXAg JChARCkKLQkkKEFSKSAkKEFSRkxBR1MpQEFST1VUQCAkKwotCi0kKG9ianJvb3QpdGVzdC91bml0 LyUkKEVYRSk6ICQob2Jqcm9vdCl0ZXN0L3VuaXQvJS4kKE8pICQoQ19KRVRfT0JKUykgJChDX1RF U1RMSUJfVU5JVF9PQkpTKQotCUBta2RpciAtcCAkKEBEKQotCSQoQ0MpICQoTERUQVJHRVQpICQo ZmlsdGVyICUuJChPKSwkXikgJChjYWxsIFJQQVRILCQob2Jqcm9vdClsaWIpICQoTERGTEFHUykg JChmaWx0ZXItb3V0IC1sbSwkKExJQlMpKSAkKExNKSAkKEVYVFJBX0xERkxBR1MpCi0KLSQob2Jq cm9vdCl0ZXN0L2ludGVncmF0aW9uLyUkKEVYRSk6ICQob2Jqcm9vdCl0ZXN0L2ludGVncmF0aW9u LyUuJChPKSAkKENfVEVTVExJQl9JTlRFR1JBVElPTl9PQkpTKSAkKENfVVRJTF9JTlRFR1JBVElP Tl9PQkpTKSAkKG9ianJvb3QpbGliLyQoTElCSkVNQUxMT0MpLiQoSU1QT1JUTElCKQotCUBta2Rp ciAtcCAkKEBEKQotCSQoQ0MpICQoVEVTVF9MRF9NT0RFKSAkKExEVEFSR0VUKSAkKGZpbHRlciAl LiQoTyksJF4pICQoY2FsbCBSUEFUSCwkKG9ianJvb3QpbGliKSAkKExKRU1BTExPQykgJChMREZM QUdTKSAkKGZpbHRlci1vdXQgLWxtLCQoZmlsdGVyIC1scnQgLXB0aHJlYWQgLWxzdGRjKyssJChM SUJTKSkpICQoTE0pICQoRVhUUkFfTERGTEFHUykKLQotJChvYmpyb290KXRlc3QvaW50ZWdyYXRp b24vY3BwLyUkKEVYRSk6ICQob2Jqcm9vdCl0ZXN0L2ludGVncmF0aW9uL2NwcC8lLiQoTykgJChD X1RFU1RMSUJfSU5URUdSQVRJT05fT0JKUykgJChDX1VUSUxfSU5URUdSQVRJT05fT0JKUykgJChv Ympyb290KWxpYi8kKExJQkpFTUFMTE9DKS4kKElNUE9SVExJQikKLQlAbWtkaXIgLXAgJChARCkK LQkkKENYWCkgJChMRFRBUkdFVCkgJChmaWx0ZXIgJS4kKE8pLCReKSAkKGNhbGwgUlBBVEgsJChv Ympyb290KWxpYikgJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKS4kKElNUE9SVExJQikgJChM REZMQUdTKSAkKGZpbHRlci1vdXQgLWxtLCQoTElCUykpIC1sbSAkKEVYVFJBX0xERkxBR1MpCi0K LSQob2Jqcm9vdCl0ZXN0L2FuYWx5emUvJSQoRVhFKTogJChvYmpyb290KXRlc3QvYW5hbHl6ZS8l LiQoTykgJChDX0pFVF9PQkpTKSAkKENfVEVTVExJQl9BTkFMWVpFX09CSlMpCi0JQG1rZGlyIC1w ICQoQEQpCi0JJChDQykgJChMRFRBUkdFVCkgJChmaWx0ZXIgJS4kKE8pLCReKSAkKGNhbGwgUlBB VEgsJChvYmpyb290KWxpYikgJChMREZMQUdTKSAkKGZpbHRlci1vdXQgLWxtLCQoTElCUykpICQo TE0pICQoRVhUUkFfTERGTEFHUykKLQotJChvYmpyb290KXRlc3Qvc3RyZXNzLyUkKEVYRSk6ICQo b2Jqcm9vdCl0ZXN0L3N0cmVzcy8lLiQoTykgJChDX0pFVF9PQkpTKSAkKENfVEVTVExJQl9TVFJF U1NfT0JKUykgJChvYmpyb290KWxpYi8kKExJQkpFTUFMTE9DKS4kKElNUE9SVExJQikKLQlAbWtk aXIgLXAgJChARCkKLQkkKENDKSAkKFRFU1RfTERfTU9ERSkgJChMRFRBUkdFVCkgJChmaWx0ZXIg JS4kKE8pLCReKSAkKGNhbGwgUlBBVEgsJChvYmpyb290KWxpYikgJChvYmpyb290KWxpYi8kKExJ QkpFTUFMTE9DKS4kKElNUE9SVExJQikgJChMREZMQUdTKSAkKGZpbHRlci1vdXQgLWxtLCQoTElC UykpICQoTE0pICQoRVhUUkFfTERGTEFHUykKLQotYnVpbGRfbGliX3NoYXJlZDogJChEU09TKQot YnVpbGRfbGliX3N0YXRpYzogJChTVEFUSUNfTElCUykKLWlmZXEgKCQoZW5hYmxlX3NoYXJlZCks IDEpCi1idWlsZF9saWI6IGJ1aWxkX2xpYl9zaGFyZWQKLWVuZGlmCi1pZmVxICgkKGVuYWJsZV9z dGF0aWMpLCAxKQotYnVpbGRfbGliOiBidWlsZF9saWJfc3RhdGljCi1lbmRpZgotCi1pbnN0YWxs X2JpbjoKLQkkKElOU1RBTEwpIC1kICQoQklORElSKQotCUBmb3IgYiBpbiAkKEJJTlMpOyBkbyBc Ci0JJChJTlNUQUxMKSAtdiAtbSA3NTUgJCRiICQoQklORElSKTsgXAotZG9uZQotCi1pbnN0YWxs X2luY2x1ZGU6Ci0JJChJTlNUQUxMKSAtZCAkKElOQ0xVREVESVIpL2plbWFsbG9jCi0JQGZvciBo IGluICQoQ19IRFJTKTsgZG8gXAotCSQoSU5TVEFMTCkgLXYgLW0gNjQ0ICQkaCAkKElOQ0xVREVE SVIpL2plbWFsbG9jOyBcCi1kb25lCi0KLWluc3RhbGxfbGliX3NoYXJlZDogJChEU09TKQotCSQo SU5TVEFMTCkgLWQgJChMSUJESVIpCi0JJChJTlNUQUxMKSAtdiAtbSA3NTUgJChvYmpyb290KWxp Yi8kKExJQkpFTUFMTE9DKS4kKFNPUkVWKSAkKExJQkRJUikKLWlmbmVxICgkKFNPUkVWKSwkKFNP KSkKLQlsbiAtc2YgJChMSUJKRU1BTExPQykuJChTT1JFVikgJChMSUJESVIpLyQoTElCSkVNQUxM T0MpLiQoU08pCi1lbmRpZgotCi1pbnN0YWxsX2xpYl9zdGF0aWM6ICQoU1RBVElDX0xJQlMpCi0J JChJTlNUQUxMKSAtZCAkKExJQkRJUikKLQlAZm9yIGwgaW4gJChTVEFUSUNfTElCUyk7IGRvIFwK LQkkKElOU1RBTEwpIC12IC1tIDc1NSAkJGwgJChMSUJESVIpOyBcCi1kb25lCi0KLWluc3RhbGxf bGliX3BjOiAkKFBDKQotCSQoSU5TVEFMTCkgLWQgJChMSUJESVIpL3BrZ2NvbmZpZwotCUBmb3Ig bCBpbiAkKFBDKTsgZG8gXAotCSQoSU5TVEFMTCkgLXYgLW0gNjQ0ICQkbCAkKExJQkRJUikvcGtn Y29uZmlnOyBcCi1kb25lCi0KLWlmZXEgKCQoZW5hYmxlX3NoYXJlZCksIDEpCi1pbnN0YWxsX2xp YjogaW5zdGFsbF9saWJfc2hhcmVkCi1lbmRpZgotaWZlcSAoJChlbmFibGVfc3RhdGljKSwgMSkK LWluc3RhbGxfbGliOiBpbnN0YWxsX2xpYl9zdGF0aWMKLWVuZGlmCi1pbnN0YWxsX2xpYjogaW5z dGFsbF9saWJfcGMKLQotaW5zdGFsbF9kb2NfaHRtbDogYnVpbGRfZG9jX2h0bWwKLQkkKElOU1RB TEwpIC1kICQoREFUQURJUikvZG9jL2plbWFsbG9jJChpbnN0YWxsX3N1ZmZpeCkKLQlAZm9yIGQg aW4gJChET0NTX0hUTUwpOyBkbyBcCi0JJChJTlNUQUxMKSAtdiAtbSA2NDQgJCRkICQoREFUQURJ UikvZG9jL2plbWFsbG9jJChpbnN0YWxsX3N1ZmZpeCk7IFwKLWRvbmUKLQotaW5zdGFsbF9kb2Nf bWFuOiBidWlsZF9kb2NfbWFuCi0JJChJTlNUQUxMKSAtZCAkKE1BTkRJUikvbWFuMwotCUBmb3Ig ZCBpbiAkKERPQ1NfTUFOMyk7IGRvIFwKLQkkKElOU1RBTEwpIC12IC1tIDY0NCAkJGQgJChNQU5E SVIpL21hbjM7IFwKLWRvbmUKLQotaW5zdGFsbF9kb2M6IGluc3RhbGxfZG9jX2h0bWwgaW5zdGFs bF9kb2NfbWFuCi0KLWluc3RhbGw6IGluc3RhbGxfYmluIGluc3RhbGxfaW5jbHVkZSBpbnN0YWxs X2xpYgotCi1pZmVxICgkKGVuYWJsZV9kb2MpLCAxKQotaW5zdGFsbDogaW5zdGFsbF9kb2MKLWVu ZGlmCi0KLXVuaW5zdGFsbF9iaW46Ci0JJChSTSkgLXYgJChmb3JlYWNoIGIsJChub3RkaXIgJChC SU5TKSksJChCSU5ESVIpLyQoYikpCi0KLXVuaW5zdGFsbF9pbmNsdWRlOgotCSQoUk0pIC12ICQo Zm9yZWFjaCBoLCQobm90ZGlyICQoQ19IRFJTKSksJChJTkNMVURFRElSKS9qZW1hbGxvYy8kKGgp KQotCXJtZGlyIC12ICQoSU5DTFVERURJUikvamVtYWxsb2MKLQotdW5pbnN0YWxsX2xpYl9zaGFy ZWQ6Ci0JJChSTSkgLXYgJChMSUJESVIpLyQoTElCSkVNQUxMT0MpLiQoU09SRVYpCi1pZm5lcSAo JChTT1JFViksJChTTykpCi0JJChSTSkgLXYgJChMSUJESVIpLyQoTElCSkVNQUxMT0MpLiQoU08p Ci1lbmRpZgotCi11bmluc3RhbGxfbGliX3N0YXRpYzoKLQkkKFJNKSAtdiAkKGZvcmVhY2ggbCwk KG5vdGRpciAkKFNUQVRJQ19MSUJTKSksJChMSUJESVIpLyQobCkpCi0KLXVuaW5zdGFsbF9saWJf cGM6Ci0JJChSTSkgLXYgJChmb3JlYWNoIHAsJChub3RkaXIgJChQQykpLCQoTElCRElSKS9wa2dj b25maWcvJChwKSkKLQotaWZlcSAoJChlbmFibGVfc2hhcmVkKSwgMSkKLXVuaW5zdGFsbF9saWI6 IHVuaW5zdGFsbF9saWJfc2hhcmVkCi1lbmRpZgotaWZlcSAoJChlbmFibGVfc3RhdGljKSwgMSkK LXVuaW5zdGFsbF9saWI6IHVuaW5zdGFsbF9saWJfc3RhdGljCi1lbmRpZgotdW5pbnN0YWxsX2xp YjogdW5pbnN0YWxsX2xpYl9wYwotCi11bmluc3RhbGxfZG9jX2h0bWw6Ci0JJChSTSkgLXYgJChm b3JlYWNoIGQsJChub3RkaXIgJChET0NTX0hUTUwpKSwkKERBVEFESVIpL2RvYy9qZW1hbGxvYyQo aW5zdGFsbF9zdWZmaXgpLyQoZCkpCi0Jcm1kaXIgLXYgJChEQVRBRElSKS9kb2MvamVtYWxsb2Mk KGluc3RhbGxfc3VmZml4KQotCi11bmluc3RhbGxfZG9jX21hbjoKLQkkKFJNKSAtdiAkKGZvcmVh Y2ggZCwkKG5vdGRpciAkKERPQ1NfTUFOMykpLCQoTUFORElSKS9tYW4zLyQoZCkpCi0KLXVuaW5z dGFsbF9kb2M6IHVuaW5zdGFsbF9kb2NfaHRtbCB1bmluc3RhbGxfZG9jX21hbgotCi11bmluc3Rh bGw6IHVuaW5zdGFsbF9iaW4gdW5pbnN0YWxsX2luY2x1ZGUgdW5pbnN0YWxsX2xpYgotCi1pZmVx ICgkKGVuYWJsZV9kb2MpLCAxKQotdW5pbnN0YWxsOiB1bmluc3RhbGxfZG9jCi1lbmRpZgotCi10 ZXN0c191bml0OiAkKFRFU1RTX1VOSVQ6JChzcmNyb290KSUuYz0kKG9ianJvb3QpJSQoRVhFKSkK LXRlc3RzX2ludGVncmF0aW9uOiAkKFRFU1RTX0lOVEVHUkFUSU9OOiQoc3Jjcm9vdCklLmM9JChv Ympyb290KSUkKEVYRSkpICQoVEVTVFNfSU5URUdSQVRJT05fQ1BQOiQoc3Jjcm9vdCklLmNwcD0k KG9ianJvb3QpJSQoRVhFKSkKLXRlc3RzX2FuYWx5emU6ICQoVEVTVFNfQU5BTFlaRTokKHNyY3Jv b3QpJS5jPSQob2Jqcm9vdCklJChFWEUpKQotdGVzdHNfc3RyZXNzOiAkKFRFU1RTX1NUUkVTUzok KHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklJChFWEUpKQotdGVzdHM6IHRlc3RzX3VuaXQgdGVzdHNf aW50ZWdyYXRpb24gdGVzdHNfYW5hbHl6ZSB0ZXN0c19zdHJlc3MKLQotY2hlY2tfdW5pdF9kaXI6 Ci0JQG1rZGlyIC1wICQob2Jqcm9vdCl0ZXN0L3VuaXQKLWNoZWNrX2ludGVncmF0aW9uX2RpcjoK LQlAbWtkaXIgLXAgJChvYmpyb290KXRlc3QvaW50ZWdyYXRpb24KLWFuYWx5emVfZGlyOgotCUBt a2RpciAtcCAkKG9ianJvb3QpdGVzdC9hbmFseXplCi1zdHJlc3NfZGlyOgotCUBta2RpciAtcCAk KG9ianJvb3QpdGVzdC9zdHJlc3MKLWNoZWNrX2RpcjogY2hlY2tfdW5pdF9kaXIgY2hlY2tfaW50 ZWdyYXRpb25fZGlyCi0KLWNoZWNrX3VuaXQ6IHRlc3RzX3VuaXQgY2hlY2tfdW5pdF9kaXIKLQkk KFNIRUxMKSAkKG9ianJvb3QpdGVzdC90ZXN0LnNoICQoVEVTVFNfVU5JVDokKHNyY3Jvb3QpJS5j PSQob2Jqcm9vdCklKQotY2hlY2tfaW50ZWdyYXRpb25fcHJvZjogdGVzdHNfaW50ZWdyYXRpb24g Y2hlY2tfaW50ZWdyYXRpb25fZGlyCi1pZmVxICgkKGVuYWJsZV9wcm9mKSwgMSkKLQkkKE1BTExP Q19DT05GKT0icHJvZjp0cnVlIiAkKFNIRUxMKSAkKG9ianJvb3QpdGVzdC90ZXN0LnNoICQoVEVT VFNfSU5URUdSQVRJT046JChzcmNyb290KSUuYz0kKG9ianJvb3QpJSkgJChURVNUU19JTlRFR1JB VElPTl9DUFA6JChzcmNyb290KSUuY3BwPSQob2Jqcm9vdCklKQotCSQoTUFMTE9DX0NPTkYpPSJw cm9mOnRydWUscHJvZl9hY3RpdmU6ZmFsc2UiICQoU0hFTEwpICQob2Jqcm9vdCl0ZXN0L3Rlc3Qu c2ggJChURVNUU19JTlRFR1JBVElPTjokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklKSAkKFRFU1RT X0lOVEVHUkFUSU9OX0NQUDokKHNyY3Jvb3QpJS5jcHA9JChvYmpyb290KSUpCi1lbmRpZgotY2hl Y2tfaW50ZWdyYXRpb25fZGVjYXk6IHRlc3RzX2ludGVncmF0aW9uIGNoZWNrX2ludGVncmF0aW9u X2RpcgotCSQoTUFMTE9DX0NPTkYpPSJkaXJ0eV9kZWNheV9tczotMSxtdXp6eV9kZWNheV9tczot MSIgJChTSEVMTCkgJChvYmpyb290KXRlc3QvdGVzdC5zaCAkKFRFU1RTX0lOVEVHUkFUSU9OOiQo c3Jjcm9vdCklLmM9JChvYmpyb290KSUpICQoVEVTVFNfSU5URUdSQVRJT05fQ1BQOiQoc3Jjcm9v dCklLmNwcD0kKG9ianJvb3QpJSkKLQkkKE1BTExPQ19DT05GKT0iZGlydHlfZGVjYXlfbXM6MCxt dXp6eV9kZWNheV9tczowIiAkKFNIRUxMKSAkKG9ianJvb3QpdGVzdC90ZXN0LnNoICQoVEVTVFNf SU5URUdSQVRJT046JChzcmNyb290KSUuYz0kKG9ianJvb3QpJSkgJChURVNUU19JTlRFR1JBVElP Tl9DUFA6JChzcmNyb290KSUuY3BwPSQob2Jqcm9vdCklKQotY2hlY2tfaW50ZWdyYXRpb246IHRl c3RzX2ludGVncmF0aW9uIGNoZWNrX2ludGVncmF0aW9uX2RpcgotCSQoU0hFTEwpICQob2Jqcm9v dCl0ZXN0L3Rlc3Quc2ggJChURVNUU19JTlRFR1JBVElPTjokKHNyY3Jvb3QpJS5jPSQob2Jqcm9v dCklKSAkKFRFU1RTX0lOVEVHUkFUSU9OX0NQUDokKHNyY3Jvb3QpJS5jcHA9JChvYmpyb290KSUp Ci1hbmFseXplOiB0ZXN0c19hbmFseXplIGFuYWx5emVfZGlyCi1pZmVxICgkKGVuYWJsZV9wcm9m KSwgMSkKLQkkKE1BTExPQ19DT05GKT0icHJvZjp0cnVlIiAkKFNIRUxMKSAkKG9ianJvb3QpdGVz dC90ZXN0LnNoICQoVEVTVFNfQU5BTFlaRTokKHNyY3Jvb3QpJS5jPSQob2Jqcm9vdCklKQotZWxz ZQotCSQoU0hFTEwpICQob2Jqcm9vdCl0ZXN0L3Rlc3Quc2ggJChURVNUU19BTkFMWVpFOiQoc3Jj cm9vdCklLmM9JChvYmpyb290KSUpCi1lbmRpZgotc3RyZXNzOiB0ZXN0c19zdHJlc3Mgc3RyZXNz X2RpcgotCSQoU0hFTEwpICQob2Jqcm9vdCl0ZXN0L3Rlc3Quc2ggJChURVNUU19TVFJFU1M6JChz cmNyb290KSUuYz0kKG9ianJvb3QpJSkKLWNoZWNrOiBjaGVja191bml0IGNoZWNrX2ludGVncmF0 aW9uIGNoZWNrX2ludGVncmF0aW9uX2RlY2F5IGNoZWNrX2ludGVncmF0aW9uX3Byb2YKLQotY2xl YW46Ci0Jcm0gLWYgJChQUklWQVRFX05BTUVTUEFDRV9IRFJTKQotCXJtIC1mICQoUFJJVkFURV9O QU1FU1BBQ0VfR0VOX0hEUlMpCi0Jcm0gLWYgJChDX1NZTV9PQkpTKQotCXJtIC1mICQoQ19TWU1T KQotCXJtIC1mICQoQ19PQkpTKQotCXJtIC1mICQoQ1BQX09CSlMpCi0Jcm0gLWYgJChDX1BJQ19P QkpTKQotCXJtIC1mICQoQ1BQX1BJQ19PQkpTKQotCXJtIC1mICQoQ19KRVRfU1lNX09CSlMpCi0J cm0gLWYgJChDX0pFVF9TWU1TKQotCXJtIC1mICQoQ19KRVRfT0JKUykKLQlybSAtZiAkKENfVEVT VExJQl9PQkpTKQotCXJtIC1mICQoQ19TWU1fT0JKUzolLiQoTyk9JS5kKQotCXJtIC1mICQoQ19P QkpTOiUuJChPKT0lLmQpCi0Jcm0gLWYgJChDUFBfT0JKUzolLiQoTyk9JS5kKQotCXJtIC1mICQo Q19QSUNfT0JKUzolLiQoTyk9JS5kKQotCXJtIC1mICQoQ1BQX1BJQ19PQkpTOiUuJChPKT0lLmQp Ci0Jcm0gLWYgJChDX0pFVF9TWU1fT0JKUzolLiQoTyk9JS5kKQotCXJtIC1mICQoQ19KRVRfT0JK UzolLiQoTyk9JS5kKQotCXJtIC1mICQoQ19URVNUTElCX09CSlM6JS4kKE8pPSUuZCkKLQlybSAt ZiAkKFRFU1RTX09CSlM6JS4kKE8pPSUkKEVYRSkpCi0Jcm0gLWYgJChURVNUU19PQkpTKQotCXJt IC1mICQoVEVTVFNfT0JKUzolLiQoTyk9JS5kKQotCXJtIC1mICQoVEVTVFNfT0JKUzolLiQoTyk9 JS5vdXQpCi0Jcm0gLWYgJChURVNUU19DUFBfT0JKUzolLiQoTyk9JSQoRVhFKSkKLQlybSAtZiAk KFRFU1RTX0NQUF9PQkpTKQotCXJtIC1mICQoVEVTVFNfQ1BQX09CSlM6JS4kKE8pPSUuZCkKLQly bSAtZiAkKFRFU1RTX0NQUF9PQkpTOiUuJChPKT0lLm91dCkKLQlybSAtZiAkKERTT1MpICQoU1RB VElDX0xJQlMpCi0KLWRpc3RjbGVhbjogY2xlYW4KLQlybSAtZiAkKG9ianJvb3QpYmluL2plbWFs bG9jLWNvbmZpZwotCXJtIC1mICQob2Jqcm9vdCliaW4vamVtYWxsb2Muc2gKLQlybSAtZiAkKG9i anJvb3QpYmluL2plcHJvZgotCXJtIC1mICQob2Jqcm9vdCljb25maWcubG9nCi0Jcm0gLWYgJChv Ympyb290KWNvbmZpZy5zdGF0dXMKLQlybSAtZiAkKG9ianJvb3QpY29uZmlnLnN0YW1wCi0Jcm0g LWYgJChjZmdoZHJzX291dCkKLQlybSAtZiAkKGNmZ291dHB1dHNfb3V0KQotCi1yZWxjbGVhbjog ZGlzdGNsZWFuCi0Jcm0gLWYgJChvYmpyb290KWNvbmZpZ3VyZQotCXJtIC1mICQob2Jqcm9vdClW RVJTSU9OCi0Jcm0gLWYgJChET0NTX0hUTUwpCi0Jcm0gLWYgJChET0NTX01BTjMpCi0KLSM9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0jIFJlLWNvbmZpZ3VyYXRpb24gcnVsZXMuCi0KLWlmZXEgKCQo ZW5hYmxlX2F1dG9nZW4pLCAxKQotJChzcmNyb290KWNvbmZpZ3VyZSA6ICQoc3Jjcm9vdCljb25m aWd1cmUuYWMKLQljZCAuLyQoc3Jjcm9vdCkgJiYgJChBVVRPQ09ORikKLQotJChvYmpyb290KWNv bmZpZy5zdGF0dXMgOiAkKHNyY3Jvb3QpY29uZmlndXJlCi0JLi8kKG9ianJvb3QpY29uZmlnLnN0 YXR1cyAtLXJlY2hlY2sKLQotJChzcmNyb290KWNvbmZpZy5zdGFtcC5pbiA6ICQoc3Jjcm9vdClj b25maWd1cmUuYWMKLQllY2hvIHN0YW1wID4gJChzcmNyb290KWNvbmZpZy5zdGFtcC5pbgotCi0k KG9ianJvb3QpY29uZmlnLnN0YW1wIDogJChjZmdvdXRwdXRzX2luKSAkKGNmZ2hkcnNfaW4pICQo c3Jjcm9vdCljb25maWd1cmUKLQkuLyQob2Jqcm9vdCljb25maWcuc3RhdHVzCi0JQHRvdWNoICRA Ci0KLSMgVGhlcmUgbXVzdCBiZSBzb21lIGFjdGlvbiBpbiBvcmRlciBmb3IgbWFrZSB0byByZS1y ZWFkIE1ha2VmaWxlIHdoZW4gaXQgaXMKLSMgb3V0IG9mIGRhdGUuCi0kKGNmZ291dHB1dHNfb3V0 KSAkKGNmZ2hkcnNfb3V0KSA6ICQob2Jqcm9vdCljb25maWcuc3RhbXAKLQlAdHJ1ZQotZW5kaWYK CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9SRUFE TUUgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9SRUFETUUKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNmUwZDIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEs MjAgKzAsMCBAQAotamVtYWxsb2MgaXMgYSBnZW5lcmFsIHB1cnBvc2UgbWFsbG9jKDMpIGltcGxl bWVudGF0aW9uIHRoYXQgZW1waGFzaXplcwotZnJhZ21lbnRhdGlvbiBhdm9pZGFuY2UgYW5kIHNj YWxhYmxlIGNvbmN1cnJlbmN5IHN1cHBvcnQuICBqZW1hbGxvYyBmaXJzdCBjYW1lCi1pbnRvIHVz ZSBhcyB0aGUgRnJlZUJTRCBsaWJjIGFsbG9jYXRvciBpbiAyMDA1LCBhbmQgc2luY2UgdGhlbiBp dCBoYXMgZm91bmQgaXRzCi13YXkgaW50byBudW1lcm91cyBhcHBsaWNhdGlvbnMgdGhhdCByZWx5 IG9uIGl0cyBwcmVkaWN0YWJsZSBiZWhhdmlvci4gIEluIDIwMTAKLWplbWFsbG9jIGRldmVsb3Bt ZW50IGVmZm9ydHMgYnJvYWRlbmVkIHRvIGluY2x1ZGUgZGV2ZWxvcGVyIHN1cHBvcnQgZmVhdHVy ZXMKLXN1Y2ggYXMgaGVhcCBwcm9maWxpbmcgYW5kIGV4dGVuc2l2ZSBtb25pdG9yaW5nL3R1bmlu ZyBob29rcy4gIE1vZGVybiBqZW1hbGxvYwotcmVsZWFzZXMgY29udGludWUgdG8gYmUgaW50ZWdy YXRlZCBiYWNrIGludG8gRnJlZUJTRCwgYW5kIHRoZXJlZm9yZSB2ZXJzYXRpbGl0eQotcmVtYWlu cyBjcml0aWNhbC4gIE9uZ29pbmcgZGV2ZWxvcG1lbnQgZWZmb3J0cyB0cmVuZCB0b3dhcmQgbWFr aW5nIGplbWFsbG9jCi1hbW9uZyB0aGUgYmVzdCBhbGxvY2F0b3JzIGZvciBhIGJyb2FkIHJhbmdl IG9mIGRlbWFuZGluZyBhcHBsaWNhdGlvbnMsIGFuZAotZWxpbWluYXRpbmcvbWl0aWdhdGluZyB3 ZWFrbmVzc2VzIHRoYXQgaGF2ZSBwcmFjdGljYWwgcmVwZXJjdXNzaW9ucyBmb3IgcmVhbAotd29y bGQgYXBwbGljYXRpb25zLgotCi1UaGUgQ09QWUlORyBmaWxlIGNvbnRhaW5zIGNvcHlyaWdodCBh bmQgbGljZW5zaW5nIGluZm9ybWF0aW9uLgotCi1UaGUgSU5TVEFMTCBmaWxlIGNvbnRhaW5zIGlu Zm9ybWF0aW9uIG9uIGhvdyB0byBjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbAotamVtYWxs b2MuCi0KLVRoZSBDaGFuZ2VMb2cgZmlsZSBjb250YWlucyBhIGJyaWVmIHN1bW1hcnkgb2YgY2hh bmdlcyBmb3IgZWFjaCByZWxlYXNlLgotCi1VUkw6IGh0dHA6Ly9qZW1hbGxvYy5uZXQvCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvVFVOSU5HLm1k IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvVFVOSU5HLm1kCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTYzOTlkLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL1RVTklORy5tZAorKysgL2Rldi9udWxsCkBA IC0xLDEyOSArMCwwIEBACi1UaGlzIGRvY3VtZW50IHN1bW1hcml6ZXMgdGhlIGNvbW1vbiBhcHBy b2FjaGVzIGZvciBwZXJmb3JtYW5jZSBmaW5lIHR1bmluZyB3aXRoCi1qZW1hbGxvYyAoYXMgb2Yg NS4zLjApLiAgVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBqZW1hbGxvYyB0ZW5kcyB0byB3 b3JrCi1yZWFzb25hYmx5IHdlbGwgaW4gcHJhY3RpY2UsIGFuZCBtb3N0IGFwcGxpY2F0aW9ucyBz aG91bGQgbm90IGhhdmUgdG8gdHVuZSBhbnkKLW9wdGlvbnMuIEhvd2V2ZXIsIGluIG9yZGVyIHRv IGNvdmVyIGEgd2lkZSByYW5nZSBvZiBhcHBsaWNhdGlvbnMgYW5kIGF2b2lkCi1wYXRob2xvZ2lj YWwgY2FzZXMsIHRoZSBkZWZhdWx0IHNldHRpbmcgaXMgc29tZXRpbWVzIGtlcHQgY29uc2VydmF0 aXZlIGFuZAotc3Vib3B0aW1hbCwgZXZlbiBmb3IgbWFueSBjb21tb24gd29ya2xvYWRzLiAgV2hl biBqZW1hbGxvYyBpcyBwcm9wZXJseSB0dW5lZCBmb3IKLWEgc3BlY2lmaWMgYXBwbGljYXRpb24g LyB3b3JrbG9hZCwgaXQgaXMgY29tbW9uIHRvIGltcHJvdmUgc3lzdGVtIGxldmVsIG1ldHJpY3MK LWJ5IGEgZmV3IHBlcmNlbnQsIG9yIG1ha2UgZmF2b3JhYmxlIHRyYWRlLW9mZnMuCi0KLQotIyMg Tm90YWJsZSBydW50aW1lIG9wdGlvbnMgZm9yIHBlcmZvcm1hbmNlIHR1bmluZwotCi1SdW50aW1l IG9wdGlvbnMgY2FuIGJlIHNldCB2aWEKLVttYWxsb2NfY29uZl0oaHR0cDovL2plbWFsbG9jLm5l dC9qZW1hbGxvYy4zLmh0bWwjdHVuaW5nKS4KLQotKiBbYmFja2dyb3VuZF90aHJlYWRdKGh0dHA6 Ly9qZW1hbGxvYy5uZXQvamVtYWxsb2MuMy5odG1sI2JhY2tncm91bmRfdGhyZWFkKQotCi0gICAg RW5hYmxpbmcgamVtYWxsb2MgYmFja2dyb3VuZCB0aHJlYWRzIGdlbmVyYWxseSBpbXByb3ZlcyB0 aGUgdGFpbCBsYXRlbmN5IGZvcgotICAgIGFwcGxpY2F0aW9uIHRocmVhZHMsIHNpbmNlIHVudXNl ZCBtZW1vcnkgcHVyZ2luZyBpcyBzaGlmdGVkIHRvIHRoZSBkZWRpY2F0ZWQKLSAgICBiYWNrZ3Jv dW5kIHRocmVhZHMuICBJbiBhZGRpdGlvbiwgdW5pbnRlbmRlZCBwdXJnaW5nIGRlbGF5IGNhdXNl ZCBieQotICAgIGFwcGxpY2F0aW9uIGluYWN0aXZpdHkgaXMgYXZvaWRlZCB3aXRoIGJhY2tncm91 bmQgdGhyZWFkcy4KLQotICAgIFN1Z2dlc3RlZDogYGJhY2tncm91bmRfdGhyZWFkOnRydWVgIHdo ZW4gamVtYWxsb2MgbWFuYWdlZCB0aHJlYWRzIGNhbiBiZQotICAgIGFsbG93ZWQuCi0KLSogW21l dGFkYXRhX3RocF0oaHR0cDovL2plbWFsbG9jLm5ldC9qZW1hbGxvYy4zLmh0bWwjb3B0Lm1ldGFk YXRhX3RocCkKLQotICAgIEFsbG93aW5nIGplbWFsbG9jIHRvIHV0aWxpemUgdHJhbnNwYXJlbnQg aHVnZSBwYWdlcyBmb3IgaXRzIGludGVybmFsCi0gICAgbWV0YWRhdGEgdXN1YWxseSByZWR1Y2Vz IFRMQiBtaXNzZXMgc2lnbmlmaWNhbnRseSwgZXNwZWNpYWxseSBmb3IgcHJvZ3JhbXMKLSAgICB3 aXRoIGxhcmdlIG1lbW9yeSBmb290cHJpbnQgYW5kIGZyZXF1ZW50IGFsbG9jYXRpb24gLyBkZWFs bG9jYXRpb24KLSAgICBhY3Rpdml0aWVzLiAgTWV0YWRhdGEgbWVtb3J5IHVzYWdlIG1heSBpbmNy ZWFzZSBkdWUgdG8gdGhlIHVzZSBvZiBodWdlCi0gICAgcGFnZXMuCi0KLSAgICBTdWdnZXN0ZWQg Zm9yIGFsbG9jYXRpb24gaW50ZW5zaXZlIHByb2dyYW1zOiBgbWV0YWRhdGFfdGhwOmF1dG9gIG9y Ci0gICAgYG1ldGFkYXRhX3RocDphbHdheXNgLCB3aGljaCBpcyBleHBlY3RlZCB0byBpbXByb3Zl IENQVSB1dGlsaXphdGlvbiBhdCBhCi0gICAgc21hbGwgbWVtb3J5IGNvc3QuCi0KLSogW2RpcnR5 X2RlY2F5X21zXShodHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMuaHRtbCNvcHQuZGlydHlf ZGVjYXlfbXMpIGFuZAotICBbbXV6enlfZGVjYXlfbXNdKGh0dHA6Ly9qZW1hbGxvYy5uZXQvamVt YWxsb2MuMy5odG1sI29wdC5tdXp6eV9kZWNheV9tcykKLQotICAgIERlY2F5IHRpbWUgZGV0ZXJt aW5lcyBob3cgZmFzdCBqZW1hbGxvYyByZXR1cm5zIHVudXNlZCBwYWdlcyBiYWNrIHRvIHRoZQot ICAgIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB0aGVyZWZvcmUgcHJvdmlkZXMgYSBmYWlybHkgc3Ry YWlnaHRmb3J3YXJkIHRyYWRlLW9mZgotICAgIGJldHdlZW4gQ1BVIGFuZCBtZW1vcnkgdXNhZ2Uu ICBTaG9ydGVyIGRlY2F5IHRpbWUgcHVyZ2VzIHVudXNlZCBwYWdlcyBmYXN0ZXIKLSAgICB0byBy ZWR1Y2VzIG1lbW9yeSB1c2FnZSAodXN1YWxseSBhdCB0aGUgY29zdCBvZiBtb3JlIENQVSBjeWNs ZXMgc3BlbnQgb24KLSAgICBwdXJnaW5nKSwgYW5kIHZpY2UgdmVyc2EuCi0KLSAgICBTdWdnZXN0 ZWQ6IHR1bmUgdGhlIHZhbHVlcyBiYXNlZCBvbiB0aGUgZGVzaXJlZCB0cmFkZS1vZmZzLgotCi0q IFtuYXJlbmFzXShodHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMuaHRtbCNvcHQubmFyZW5h cykKLQotICAgIEJ5IGRlZmF1bHQgamVtYWxsb2MgdXNlcyBtdWx0aXBsZSBhcmVuYXMgdG8gcmVk dWNlIGludGVybmFsIGxvY2sgY29udGVudGlvbi4KLSAgICBIb3dldmVyIGhpZ2ggYXJlbmEgY291 bnQgbWF5IGFsc28gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgZnJhZ21lbnRhdGlvbiwKLSAgICBz aW5jZSBhcmVuYXMgbWFuYWdlIG1lbW9yeSBpbmRlcGVuZGVudGx5LiAgV2hlbiBoaWdoIGRlZ3Jl ZSBvZiBwYXJhbGxlbGlzbQotICAgIGlzIG5vdCBleHBlY3RlZCBhdCB0aGUgYWxsb2NhdG9yIGxl dmVsLCBsb3dlciBudW1iZXIgb2YgYXJlbmFzIG9mdGVuCi0gICAgaW1wcm92ZXMgbWVtb3J5IHVz YWdlLgotCi0gICAgU3VnZ2VzdGVkOiBpZiBsb3cgcGFyYWxsZWxpc20gaXMgZXhwZWN0ZWQsIHRy eSBsb3dlciBhcmVuYSBjb3VudCB3aGlsZQotICAgIG1vbml0b3JpbmcgQ1BVIGFuZCBtZW1vcnkg dXNhZ2UuCi0KLSogW3BlcmNwdV9hcmVuYV0oaHR0cDovL2plbWFsbG9jLm5ldC9qZW1hbGxvYy4z Lmh0bWwjb3B0LnBlcmNwdV9hcmVuYSkKLQotICAgIEVuYWJsZSBkeW5hbWljIHRocmVhZCB0byBh cmVuYSBhc3NvY2lhdGlvbiBiYXNlZCBvbiBydW5uaW5nIENQVS4gIFRoaXMgaGFzCi0gICAgdGhl IHBvdGVudGlhbCB0byBpbXByb3ZlIGxvY2FsaXR5LCBlLmcuIHdoZW4gdGhyZWFkIHRvIENQVSBh ZmZpbml0eSBpcwotICAgIHByZXNlbnQuCi0gICAgCi0gICAgU3VnZ2VzdGVkOiB0cnkgYHBlcmNw dV9hcmVuYTpwZXJjcHVgIG9yIGBwZXJjcHVfYXJlbmE6cGh5Y3B1YCBpZgotICAgIHRocmVhZCBt aWdyYXRpb24gYmV0d2VlbiBwcm9jZXNzb3JzIGlzIGV4cGVjdGVkIHRvIGJlIGluZnJlcXVlbnQu Ci0KLUV4YW1wbGVzOgotCi0qIEhpZ2ggcmVzb3VyY2UgY29uc3VtcHRpb24gYXBwbGljYXRpb24s IHByaW9yaXRpemluZyBDUFUgdXRpbGl6YXRpb246Ci0KLSAgICBgYmFja2dyb3VuZF90aHJlYWQ6 dHJ1ZSxtZXRhZGF0YV90aHA6YXV0b2AgY29tYmluZWQgd2l0aCByZWxheGVkIGRlY2F5IHRpbWUK LSAgICAoaW5jcmVhc2VkIGBkaXJ0eV9kZWNheV9tc2AgYW5kIC8gb3IgYG11enp5X2RlY2F5X21z YCwKLSAgICBlLmcuIGBkaXJ0eV9kZWNheV9tczozMDAwMCxtdXp6eV9kZWNheV9tczozMDAwMGAp LgotCi0qIEhpZ2ggcmVzb3VyY2UgY29uc3VtcHRpb24gYXBwbGljYXRpb24sIHByaW9yaXRpemlu ZyBtZW1vcnkgdXNhZ2U6Ci0KLSAgICBgYmFja2dyb3VuZF90aHJlYWQ6dHJ1ZSx0Y2FjaGVfbWF4 OjQwOTZgIGNvbWJpbmVkIHdpdGggc2hvcnRlciBkZWNheSB0aW1lCi0gICAgKGRlY3JlYXNlZCBg ZGlydHlfZGVjYXlfbXNgIGFuZCAvIG9yIGBtdXp6eV9kZWNheV9tc2AsCi0gICAgZS5nLiBgZGly dHlfZGVjYXlfbXM6NTAwMCxtdXp6eV9kZWNheV9tczo1MDAwYCksIGFuZCBsb3dlciBhcmVuYSBj b3VudAotICAgIChlLmcuIG51bWJlciBvZiBDUFVzKS4KLQotKiBMb3cgcmVzb3VyY2UgY29uc3Vt cHRpb24gYXBwbGljYXRpb246Ci0KLSAgICBgbmFyZW5hczoxLHRjYWNoZV9tYXg6MTAyNGAgY29t YmluZWQgd2l0aCBzaG9ydGVyIGRlY2F5IHRpbWUgKGRlY3JlYXNlZAotICAgIGBkaXJ0eV9kZWNh eV9tc2AgYW5kIC8gb3IgYG11enp5X2RlY2F5X21zYCxlLmcuCi0gICAgYGRpcnR5X2RlY2F5X21z OjEwMDAsbXV6enlfZGVjYXlfbXM6MGApLgotCi0qIEV4dHJlbWVseSBjb25zZXJ2YXRpdmUgLS0g bWluaW1pemUgbWVtb3J5IHVzYWdlIGF0IGFsbCBjb3N0cywgb25seSBzdWl0YWJsZSB3aGVuCi1h bGxvY2F0aW9uIGFjdGl2aXR5IGlzIHZlcnkgcmFyZToKLQotICAgIGBuYXJlbmFzOjEsdGNhY2hl OmZhbHNlLGRpcnR5X2RlY2F5X21zOjAsbXV6enlfZGVjYXlfbXM6MGAKLQotTm90ZSB0aGF0IGl0 IGlzIHJlY29tbWVuZGVkIHRvIGNvbWJpbmUgdGhlIG9wdGlvbnMgd2l0aCBgYWJvcnRfY29uZjp0 cnVlYCB3aGljaAotYWJvcnRzIGltbWVkaWF0ZWx5IG9uIGlsbGVnYWwgb3B0aW9ucy4KLQotIyMg QmV5b25kIHJ1bnRpbWUgb3B0aW9ucwotCi1JbiBhZGRpdGlvbiB0byB0aGUgcnVudGltZSBvcHRp b25zLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcHJvZ3JhbW1hdGljIHdheXMgdG8KLWltcHJvdmUg YXBwbGljYXRpb24gcGVyZm9ybWFuY2Ugd2l0aCBqZW1hbGxvYy4KLQotKiBbRXhwbGljaXQgYXJl bmFzXShodHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMuaHRtbCNhcmVuYXMuY3JlYXRlKQot Ci0gICAgTWFudWFsbHkgY3JlYXRlZCBhcmVuYXMgY2FuIGhlbHAgcGVyZm9ybWFuY2UgaW4gdmFy aW91cyB3YXlzLCBlLmcuIGJ5Ci0gICAgbWFuYWdpbmcgbG9jYWxpdHkgYW5kIGNvbnRlbnRpb24g Zm9yIHNwZWNpZmljIHVzYWdlcy4gIEZvciBleGFtcGxlLAotICAgIGFwcGxpY2F0aW9ucyBjYW4g ZXhwbGljaXRseSBhbGxvY2F0ZSBmcmVxdWVudGx5IGFjY2Vzc2VkIG9iamVjdHMgZnJvbSBhCi0g ICAgZGVkaWNhdGVkIGFyZW5hIHdpdGgKLSAgICBbbWFsbG9jeCgpXShodHRwOi8vamVtYWxsb2Mu bmV0L2plbWFsbG9jLjMuaHRtbCNNQUxMT0NYX0FSRU5BKSB0byBpbXByb3ZlCi0gICAgbG9jYWxp dHkuICBJbiBhZGRpdGlvbiwgZXhwbGljaXQgYXJlbmFzIG9mdGVuIGJlbmVmaXQgZnJvbSBpbmRp dmlkdWFsbHkKLSAgICB0dW5lZCBvcHRpb25zLCBlLmcuIHJlbGF4ZWQgW2RlY2F5Ci0gICAgdGlt ZV0oaHR0cDovL2plbWFsbG9jLm5ldC9qZW1hbGxvYy4zLmh0bWwjYXJlbmEuaS5kaXJ0eV9kZWNh eV9tcykgaWYKLSAgICBmcmVxdWVudCByZXVzZSBpcyBleHBlY3RlZC4KLQotKiBbRXh0ZW50IGhv b2tzXShodHRwOi8vamVtYWxsb2MubmV0L2plbWFsbG9jLjMuaHRtbCNhcmVuYS5pLmV4dGVudF9o b29rcykKLQotICAgIEV4dGVudCBob29rcyBhbGxvdyBjdXN0b21pemF0aW9uIGZvciBtYW5hZ2lu ZyB1bmRlcmx5aW5nIG1lbW9yeS4gIE9uZSB1c2UKLSAgICBjYXNlIGZvciBwZXJmb3JtYW5jZSBw dXJwb3NlIGlzIHRvIHV0aWxpemUgaHVnZSBwYWdlcyAtLSBmb3IgZXhhbXBsZSwKLSAgICBbSEhW TV0oaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2hodm0vYmxvYi9tYXN0ZXIvaHBocC91dGls L2FsbG9jLmNwcCkKLSAgICB1c2VzIGV4cGxpY2l0IGFyZW5hcyB3aXRoIGN1c3RvbWl6ZWQgZXh0 ZW50IGhvb2tzIHRvIG1hbmFnZSAxR0IgaHVnZSBwYWdlcwotICAgIGZvciBmcmVxdWVudGx5IGFj Y2Vzc2VkIGRhdGEsIHdoaWNoIHJlZHVjZXMgVExCIG1pc3NlcyBzaWduaWZpY2FudGx5LgotCi0q IFtFeHBsaWNpdCB0aHJlYWQtdG8tYXJlbmEKLSAgYmluZGluZ10oaHR0cDovL2plbWFsbG9jLm5l dC9qZW1hbGxvYy4zLmh0bWwjdGhyZWFkLmFyZW5hKQotCi0gICAgSXQgaXMgY29tbW9uIGZvciBz b21lIHRocmVhZHMgaW4gYW4gYXBwbGljYXRpb24gdG8gaGF2ZSBkaWZmZXJlbnQgbWVtb3J5Ci0g ICAgYWNjZXNzIC8gYWxsb2NhdGlvbiBwYXR0ZXJucy4gIFRocmVhZHMgd2l0aCBoZWF2eSB3b3Jr bG9hZHMgb2Z0ZW4gYmVuZWZpdAotICAgIGZyb20gZXhwbGljaXQgYmluZGluZywgZS5nLiBiaW5k aW5nIHZlcnkgYWN0aXZlIHRocmVhZHMgdG8gZGVkaWNhdGVkIGFyZW5hcwotICAgIG1heSByZWR1 Y2UgY29udGVudGlvbiBhdCB0aGUgYWxsb2NhdG9yIGxldmVsLgoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2F1dG9nZW4uc2ggYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9hdXRvZ2VuLnNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDc1NQppbmRleCA3NWYzMmRhLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2F1dG9nZW4uc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCww IEBACi0jIS9iaW4vc2gKLQotZm9yIGkgaW4gYXV0b2NvbmY7IGRvCi0gICAgZWNobyAiJGkiCi0g ICAgJGkKLSAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KLQllY2hvICJFcnJvciAkPyBpbiAkaSIK LQlleGl0IDEKLSAgICBmaQotZG9uZQotCi1lY2hvICIuL2NvbmZpZ3VyZSAtLWVuYWJsZS1hdXRv Z2VuICRAIgotLi9jb25maWd1cmUgLS1lbmFibGUtYXV0b2dlbiAkQAotaWYgWyAkPyAtbmUgMCBd OyB0aGVuCi0gICAgZWNobyAiRXJyb3IgJD8gaW4gLi9jb25maWd1cmUiCi0gICAgZXhpdCAxCi1m aQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2Jp bi9qZW1hbGxvYy1jb25maWcuaW4gYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9iaW4vamVtYWxsb2MtY29uZmlnLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA4MGVjYTJlLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2Jpbi9qZW1hbGxvYy1jb25maWcuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCww IEBACi0jIS9iaW4vc2gKLQotdXNhZ2UoKSB7Ci0JY2F0IDw8RU9GCi1Vc2FnZToKLSAgQEJJTkRJ UkAvamVtYWxsb2MtY29uZmlnIDxvcHRpb24+Ci1PcHRpb25zOgotICAtLWhlbHAgfCAtaCAgOiBQ cmludCB1c2FnZS4KLSAgLS12ZXJzaW9uICAgIDogUHJpbnQgamVtYWxsb2MgdmVyc2lvbi4KLSAg LS1yZXZpc2lvbiAgIDogUHJpbnQgc2hhcmVkIGxpYnJhcnkgcmV2aXNpb24gbnVtYmVyLgotICAt LWNvbmZpZyAgICAgOiBQcmludCBjb25maWd1cmUgb3B0aW9ucyB1c2VkIHRvIGJ1aWxkIGplbWFs bG9jLgotICAtLXByZWZpeCAgICAgOiBQcmludCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IHByZWZp eC4KLSAgLS1iaW5kaXIgICAgIDogUHJpbnQgYmluYXJ5IGluc3RhbGxhdGlvbiBkaXJlY3Rvcnku Ci0gIC0tZGF0YWRpciAgICA6IFByaW50IGRhdGEgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KLSAg LS1pbmNsdWRlZGlyIDogUHJpbnQgaW5jbHVkZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgotICAt LWxpYmRpciAgICAgOiBQcmludCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCi0gIC0t bWFuZGlyICAgICA6IFByaW50IG1hbnVhbCBwYWdlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCi0g IC0tY2MgICAgICAgICA6IFByaW50IGNvbXBpbGVyIHVzZWQgdG8gYnVpbGQgamVtYWxsb2MuCi0g IC0tY2ZsYWdzICAgICA6IFByaW50IGNvbXBpbGVyIGZsYWdzIHVzZWQgdG8gYnVpbGQgamVtYWxs b2MuCi0gIC0tY3BwZmxhZ3MgICA6IFByaW50IHByZXByb2Nlc3NvciBmbGFncyB1c2VkIHRvIGJ1 aWxkIGplbWFsbG9jLgotICAtLWN4eGZsYWdzICAgOiBQcmludCBDKysgY29tcGlsZXIgZmxhZ3Mg dXNlZCB0byBidWlsZCBqZW1hbGxvYy4KLSAgLS1sZGZsYWdzICAgIDogUHJpbnQgbGlicmFyeSBm bGFncyB1c2VkIHRvIGJ1aWxkIGplbWFsbG9jLgotICAtLWxpYnMgICAgICAgOiBQcmludCBsaWJy YXJpZXMgamVtYWxsb2Mgd2FzIGxpbmtlZCBhZ2FpbnN0LgotRU9GCi19Ci0KLXByZWZpeD0iQHBy ZWZpeEAiCi1leGVjX3ByZWZpeD0iQGV4ZWNfcHJlZml4QCIKLQotY2FzZSAiJDEiIGluCi0tLWhl bHAgfCAtaCkKLQl1c2FnZQotCWV4aXQgMAotCTs7Ci0tLXZlcnNpb24pCi0JZWNobyAiQGplbWFs bG9jX3ZlcnNpb25AIgotCTs7Ci0tLXJldmlzaW9uKQotCWVjaG8gIkByZXZAIgotCTs7Ci0tLWNv bmZpZykKLQllY2hvICJAQ09ORklHQCIKLQk7OwotLS1wcmVmaXgpCi0JZWNobyAiQFBSRUZJWEAi Ci0JOzsKLS0tYmluZGlyKQotCWVjaG8gIkBCSU5ESVJAIgotCTs7Ci0tLWRhdGFkaXIpCi0JZWNo byAiQERBVEFESVJAIgotCTs7Ci0tLWluY2x1ZGVkaXIpCi0JZWNobyAiQElOQ0xVREVESVJAIgot CTs7Ci0tLWxpYmRpcikKLQllY2hvICJATElCRElSQCIKLQk7OwotLS1tYW5kaXIpCi0JZWNobyAi QE1BTkRJUkAiCi0JOzsKLS0tY2MpCi0JZWNobyAiQENDQCIKLQk7OwotLS1jZmxhZ3MpCi0JZWNo byAiQENGTEFHU0AiCi0JOzsKLS0tY3BwZmxhZ3MpCi0JZWNobyAiQENQUEZMQUdTQCIKLQk7Owot LS1jeHhmbGFncykKLQllY2hvICJAQ1hYRkxBR1NAIgotCTs7Ci0tLWxkZmxhZ3MpCi0JZWNobyAi QExERkxBR1NAIEBFWFRSQV9MREZMQUdTQCIKLQk7OwotLS1saWJzKQotCWVjaG8gIkBMSUJTQCIK LQk7OwotKikKLQl1c2FnZQotCWV4aXQgMQotZXNhYwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2Jpbi9qZW1hbGxvYy5zaC5pbiBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2Jpbi9qZW1hbGxvYy5zaC5pbgpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RmMzY3My4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9iaW4vamVtYWxsb2Muc2guaW4KKysrIC9kZXYv bnVsbApAQCAtMSw5ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1wcmVmaXg9QHByZWZpeEAKLWV4ZWNf cHJlZml4PUBleGVjX3ByZWZpeEAKLWxpYmRpcj1AbGliZGlyQAotCi1ATERfUFJFTE9BRF9WQVJA PSR7bGliZGlyfS9saWJqZW1hbGxvYy5AU09SRVZACi1leHBvcnQgQExEX1BSRUxPQURfVkFSQAot ZXhlYyAiJEAiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvYmluL2plcHJvZi5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2Jpbi9qZXByb2YuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZjYyNTIu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYmlu L2plcHJvZi5pbgorKysgL2Rldi9udWxsCkBAIC0xLDU3MjMgKzAsMCBAQAotIyEgL3Vzci9iaW4v ZW52IHBlcmwKLQotIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNywgR29vZ2xlIEluYy4KLSMgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0 OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBP UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSMgLS0tCi0jIFByb2dyYW0g Zm9yIHByaW50aW5nIHRoZSBwcm9maWxlIGdlbmVyYXRlZCBieSBjb21tb24vcHJvZmlsZXIuY2Ms Ci0jIG9yIGJ5IHRoZSBoZWFwIHByb2ZpbGVyIChjb21tb24vZGVidWdhbGxvY2F0aW9uLmNjKQot IwotIyBUaGUgcHJvZmlsZSBjb250YWlucyBhIHNlcXVlbmNlIG9mIGVudHJpZXMgb2YgdGhlIGZv cm06Ci0jICAgICAgIDxjb3VudD4gPHN0YWNrIHRyYWNlPgotIyBUaGlzIHByb2dyYW0gcGFyc2Vz IHRoZSBwcm9maWxlLCBhbmQgZ2VuZXJhdGVzIHVzZXItcmVhZGFibGUKLSMgb3V0cHV0LgotIwot IyBFeGFtcGxlczoKLSMKLSMgJSB0b29scy9qZXByb2YgInByb2dyYW0iICJwcm9maWxlIgotIyAg IEVudGVycyAiaW50ZXJhY3RpdmUiIG1vZGUKLSMKLSMgJSB0b29scy9qZXByb2YgLS10ZXh0ICJw cm9ncmFtIiAicHJvZmlsZSIKLSMgICBHZW5lcmF0ZXMgb25lIGxpbmUgcGVyIHByb2NlZHVyZQot IwotIyAlIHRvb2xzL2plcHJvZiAtLWd2ICJwcm9ncmFtIiAicHJvZmlsZSIKLSMgICBHZW5lcmF0 ZXMgYW5ub3RhdGVkIGNhbGwtZ3JhcGggYW5kIGRpc3BsYXlzIHZpYSAiZ3YiCi0jCi0jICUgdG9v bHMvamVwcm9mIC0tZ3YgLS1mb2N1cz1NdXRleCAicHJvZ3JhbSIgInByb2ZpbGUiCi0jICAgUmVz dHJpY3QgdG8gY29kZSBwYXRocyB0aGF0IGludm9sdmUgYW4gZW50cnkgdGhhdCBtYXRjaGVzICJN dXRleCIKLSMKLSMgJSB0b29scy9qZXByb2YgLS1ndiAtLWZvY3VzPU11dGV4IC0taWdub3JlPXN0 cmluZyAicHJvZ3JhbSIgInByb2ZpbGUiCi0jICAgUmVzdHJpY3QgdG8gY29kZSBwYXRocyB0aGF0 IGludm9sdmUgYW4gZW50cnkgdGhhdCBtYXRjaGVzICJNdXRleCIKLSMgICBhbmQgZG9lcyBub3Qg bWF0Y2ggInN0cmluZyIKLSMKLSMgJSB0b29scy9qZXByb2YgLS1saXN0PUlCRl9DaGVja0RvY2lk ICJwcm9ncmFtIiAicHJvZmlsZSIKLSMgICBHZW5lcmF0ZXMgZGlzYXNzZW1ibHkgbGlzdGluZyBv ZiBhbGwgcm91dGluZXMgd2l0aCBhdCBsZWFzdCBvbmUKLSMgICBzYW1wbGUgdGhhdCBtYXRjaCB0 aGUgLS1saXN0PTxyZWdleHA+IHBhdHRlcm4uICBUaGUgbGlzdGluZyBpcwotIyAgIGFubm90YXRl ZCB3aXRoIHRoZSBmbGF0IGFuZCBjdW11bGF0aXZlIHNhbXBsZSBjb3VudHMgYXQgZWFjaCBsaW5l LgotIwotIyAlIHRvb2xzL2plcHJvZiAtLWRpc2FzbT1JQkZfQ2hlY2tEb2NpZCAicHJvZ3JhbSIg InByb2ZpbGUiCi0jICAgR2VuZXJhdGVzIGRpc2Fzc2VtYmx5IGxpc3Rpbmcgb2YgYWxsIHJvdXRp bmVzIHdpdGggYXQgbGVhc3Qgb25lCi0jICAgc2FtcGxlIHRoYXQgbWF0Y2ggdGhlIC0tZGlzYXNt PTxyZWdleHA+IHBhdHRlcm4uICBUaGUgbGlzdGluZyBpcwotIyAgIGFubm90YXRlZCB3aXRoIHRo ZSBmbGF0IGFuZCBjdW11bGF0aXZlIHNhbXBsZSBjb3VudHMgYXQgZWFjaCBQQyB2YWx1ZS4KLSMK LSMgVE9ETzogVXNlIGNvbG9yIHRvIGluZGljYXRlIGZpbGVzPwotCi11c2Ugc3RyaWN0OwotdXNl IHdhcm5pbmdzOwotdXNlIEdldG9wdDo6TG9uZzsKLXVzZSBDd2Q7Ci0KLW15ICRKRVBST0ZfVkVS U0lPTiA9ICJAamVtYWxsb2NfdmVyc2lvbkAiOwotbXkgJFBQUk9GX1ZFUlNJT04gPSAiMi4wIjsK LQotIyBUaGVzZSBhcmUgdGhlIG9iamVjdCB0b29scyB3ZSB1c2Ugd2hpY2ggY2FuIGNvbWUgZnJv bSBhCi0jIHVzZXItc3BlY2lmaWVkIGxvY2F0aW9uIHVzaW5nIC0tdG9vbHMsIGZyb20gdGhlIEpF UFJPRl9UT09MUwotIyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZnJvbSB0aGUgZW52aXJvbm1l bnQuCi1teSAlb2JqX3Rvb2xfbWFwID0gKAotICAib2JqZHVtcCIgPT4gIm9iamR1bXAiLAotICAi bm0iID0+ICJubSIsCi0gICJhZGRyMmxpbmUiID0+ICJhZGRyMmxpbmUiLAotICAiYysrZmlsdCIg PT4gImMrK2ZpbHQiLAotICAjIyBDb25maWd1cmVPYmpUb29scyBtYXkgYWRkIGFyY2hpdGVjdHVy ZS1zcGVjaWZpYyBlbnRyaWVzOgotICAjIm5tX3BkYiIgPT4gIm5tLXBkYiIsICAgICAgICMgZm9y IHJlYWRpbmcgd2luZG93cyAoUERCLWZvcm1hdCkgZXhlY3V0YWJsZXMKLSAgIyJhZGRyMmxpbmVf cGRiIiA9PiAiYWRkcjJsaW5lLXBkYiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IGRpdHRvCi0gICMib3Rvb2wiID0+ICJvdG9vbCIsICAgICAgICAgIyBlcXVpdmFsZW50IG9mIG9i amR1bXAgb24gT1MgWAotKTsKLSMgTk9URTogdGhlc2UgYXJlIGxpc3RzLCBzbyB5b3UgY2FuIHB1 dCBpbiBjb21tYW5kbGluZSBmbGFncyBpZiB5b3Ugd2FudC4KLW15IEBET1QgPSAoImRvdCIpOyAg ICAgICAgICAjIGxlYXZlIG5vbi1hYnNvbHV0ZSwgc2luY2UgaXQgbWF5IGJlIGluIC91c3IvbG9j YWwKLW15IEBHViA9ICgiZ3YiKTsKLW15IEBFVklOQ0UgPSAoImV2aW5jZSIpOyAgICAjIGNvdWxk IGFsc28gYmUgeHBkZiBvciBwZXJoYXBzIGFjcm9yZWFkCi1teSBAS0NBQ0hFR1JJTkQgPSAoImtj YWNoZWdyaW5kIik7Ci1teSBAUFMyUERGID0gKCJwczJwZGYiKTsKLSMgVGhlc2UgYXJlIHVzZWQg Zm9yIGR5bmFtaWMgcHJvZmlsZXMKLW15IEBVUkxfRkVUQ0hFUiA9ICgiY3VybCIsICItcyIsICIt LWZhaWwiKTsKLQotIyBUaGVzZSBhcmUgdGhlIHdlYiBwYWdlcyB0aGF0IHNlcnZlcnMgbmVlZCB0 byBzdXBwb3J0IGZvciBkeW5hbWljIHByb2ZpbGVzCi1teSAkSEVBUF9QQUdFID0gIi9wcHJvZi9o ZWFwIjsKLW15ICRQUk9GSUxFX1BBR0UgPSAiL3Bwcm9mL3Byb2ZpbGUiOyAgICMgbXVzdCBzdXBw b3J0IGNnaS1wYXJhbSAiP3NlY29uZHM9IyIKLW15ICRQTVVQUk9GSUxFX1BBR0UgPSAiL3Bwcm9m L3BtdXByb2ZpbGUoPzpcXD8uKik/IjsgIyBtdXN0IHN1cHBvcnQgY2dpLXBhcmFtCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID9zZWNvbmRzPSMmZXZl bnQ9eCZwZXJpb2Q9bgotbXkgJEdST1dUSF9QQUdFID0gIi9wcHJvZi9ncm93dGgiOwotbXkgJENP TlRFTlRJT05fUEFHRSA9ICIvcHByb2YvY29udGVudGlvbiI7Ci1teSAkV0FMTF9QQUdFID0gIi9w cHJvZi93YWxsKD86XFw/LiopPyI7ICAjIGFjY2VwdHMgb3B0aW9ucyBsaWtlIG5hbWVmaWx0ZXIK LW15ICRGSUxURVJFRFBST0ZJTEVfUEFHRSA9ICIvcHByb2YvZmlsdGVyZWRwcm9maWxlKD86XFw/ LiopPyI7Ci1teSAkQ0VOU1VTUFJPRklMRV9QQUdFID0gIi9wcHJvZi9jZW5zdXNwcm9maWxlKD86 XFw/LiopPyI7ICMgbXVzdCBzdXBwb3J0IGNnaS1wYXJhbQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIj9zZWNvbmRzPSMiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIj90YWdz X3JlZ2V4cD0jIiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjICI/dHlwZT0jIi4KLW15ICRTWU1CT0xfUEFHRSA9ICIvcHByb2Yvc3lt Ym9sIjsgICAgICMgbXVzdCBzdXBwb3J0IHN5bWJvbCBsb29rdXAgdmlhIFBPU1QKLW15ICRQUk9H UkFNX05BTUVfUEFHRSA9ICIvcHByb2YvY21kbGluZSI7Ci0KLSMgVGhlc2UgYXJlIHRoZSB3ZWIg cGFnZXMgdGhhdCBjYW4gYmUgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLSMgQWxsIHRoZSBh bHRlcm5hdGl2ZXMgbXVzdCBiZWdpbiB3aXRoIC8uCi1teSAkUFJPRklMRVMgPSAiKCRIRUFQX1BB R0V8JFBST0ZJTEVfUEFHRXwkUE1VUFJPRklMRV9QQUdFfCIgLgotICAgICAgICAgICAgICAgIiRH Uk9XVEhfUEFHRXwkQ09OVEVOVElPTl9QQUdFfCRXQUxMX1BBR0V8IiAuCi0gICAgICAgICAgICAg ICAiJEZJTFRFUkVEUFJPRklMRV9QQUdFfCRDRU5TVVNQUk9GSUxFX1BBR0UpIjsKLQotIyBkZWZh dWx0IGJpbmFyeSBuYW1lCi1teSAkVU5LTk9XTl9CSU5BUlkgPSAiKHVua25vd24pIjsKLQotIyBU aGVyZSBpcyBhIHBlcnZhc2l2ZSBkZXBlbmRlbmN5IG9uIHRoZSBsZW5ndGggKGluIGhleCBjaGFy YWN0ZXJzLAotIyBpLmUuLCBuaWJibGVzKSBvZiBhbiBhZGRyZXNzLCBkaXN0aW5ndWlzaGluZyBi ZXR3ZWVuIDMyLWJpdCBhbmQKLSMgNjQtYml0IHByb2ZpbGVzLiAgVG8gZXJyIG9uIHRoZSBzYWZl IHNpemUsIGRlZmF1bHQgdG8gNjQtYml0IGhlcmU6Ci1teSAkYWRkcmVzc19sZW5ndGggPSAxNjsK LQotbXkgJGRldl9udWxsID0gIi9kZXYvbnVsbCI7Ci1pZiAoISAtZSAkZGV2X251bGwgJiYgJF5P ID1+IC9NU1dpbi8pIHsgICAgIyAkXk8gaXMgdGhlIE9TIHBlcmwgd2FzIGJ1aWx0IGZvcgotICAk ZGV2X251bGwgPSAibnVsIjsKLX0KLQotIyBBIGxpc3Qgb2YgcGF0aHMgdG8gc2VhcmNoIGZvciBz aGFyZWQgb2JqZWN0IGZpbGVzCi1teSBAcHJlZml4X2xpc3QgPSAoKTsKLQotIyBTcGVjaWFsIHJv dXRpbmUgbmFtZSB0aGF0IHNob3VsZCBub3QgaGF2ZSBhbnkgc3ltYm9scy4KLSMgVXNlZCBhcyBz ZXBhcmF0b3IgdG8gcGFyc2UgImFkZHIybGluZSAtaSIgb3V0cHV0LgotbXkgJHNlcF9zeW1ib2wg PSAnX2ZpbmknOwotbXkgJHNlcF9hZGRyZXNzID0gdW5kZWY7Ci0KLSMjIyMjIEFyZ3VtZW50IHBh cnNpbmcgIyMjIyMKLQotc3ViIHVzYWdlX3N0cmluZyB7Ci0gIHJldHVybiA8PEVPRjsKLVVzYWdl OgotamVwcm9mIFtvcHRpb25zXSA8cHJvZ3JhbT4gPHByb2ZpbGVzPgotICAgPHByb2ZpbGVzPiBp cyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHByb2ZpbGUgbmFtZXMuCi1qZXByb2YgW29wdGlv bnNdIDxzeW1ib2xpemVkLXByb2ZpbGVzPgotICAgPHN5bWJvbGl6ZWQtcHJvZmlsZXM+IGlzIGEg bGlzdCBvZiBwcm9maWxlIGZpbGVzIHdoZXJlIGVhY2ggZmlsZSBjb250YWlucwotICAgdGhlIG5l Y2Vzc2FyeSBzeW1ib2wgbWFwcGluZ3MgIGFzIHdlbGwgYXMgcHJvZmlsZSBkYXRhIChsaWtlbHkg Z2VuZXJhdGVkCi0gICB3aXRoIC0tcmF3KS4KLWplcHJvZiBbb3B0aW9uc10gPHByb2ZpbGU+Ci0g ICA8cHJvZmlsZT4gaXMgYSByZW1vdGUgZm9ybS4gIFN5bWJvbHMgYXJlIG9idGFpbmVkIGZyb20g aG9zdDpwb3J0JFNZTUJPTF9QQUdFCi0KLSAgIEVhY2ggbmFtZSBjYW4gYmU6Ci0gICAvcGF0aC90 by9wcm9maWxlICAgICAgICAtIGEgcGF0aCB0byBhIHByb2ZpbGUgZmlsZQotICAgaG9zdDpwb3J0 Wy88c2VydmljZT5dICAgLSBhIGxvY2F0aW9uIG9mIGEgc2VydmljZSB0byBnZXQgcHJvZmlsZSBm cm9tCi0KLSAgIFRoZSAvPHNlcnZpY2U+IGNhbiBiZSAkSEVBUF9QQUdFLCAkUFJPRklMRV9QQUdF LCAvcHByb2YvcG11cHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAkR1JPV1RIX1BB R0UsICRDT05URU5USU9OX1BBR0UsIC9wcHJvZi93YWxsLAotICAgICAgICAgICAgICAgICAgICAg ICAgICRDRU5TVVNQUk9GSUxFX1BBR0UsIG9yIC9wcHJvZi9maWx0ZXJlZHByb2ZpbGUuCi0gICBG b3IgaW5zdGFuY2U6Ci0gICAgIGplcHJvZiBodHRwOi8vbXlzZXJ2ZXIuY29tOjgwJEhFQVBfUEFH RQotICAgSWYgLzxzZXJ2aWNlPiBpcyBvbWl0dGVkLCB0aGUgc2VydmljZSBkZWZhdWx0cyB0byAk UFJPRklMRV9QQUdFIChjcHUgcHJvZmlsaW5nKS4KLWplcHJvZiAtLXN5bWJvbHMgPHByb2dyYW0+ Ci0gICBNYXBzIGFkZHJlc3NlcyB0byBzeW1ib2wgbmFtZXMuICBJbiB0aGlzIG1vZGUsIHN0ZGlu IHNob3VsZCBiZSBhCi0gICBsaXN0IG9mIGxpYnJhcnkgbWFwcGluZ3MsIGluIHRoZSBzYW1lIGZv cm1hdCBhcyBpcyBmb3VuZCBpbiB0aGUgaGVhcC0KLSAgIGFuZCBjcHUtcHJvZmlsZSBmaWxlcyAo dGhpcyBsb29zZWx5IG1hdGNoZXMgdGhhdCBvZiAvcHJvYy9zZWxmL21hcHMKLSAgIG9uIGxpbnV4 KSwgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIGhleCBhZGRyZXNzZXMgdG8gbWFwLCBvbmUgcGVyIGxp bmUuCi0KLSAgIEZvciBtb3JlIGhlbHAgd2l0aCBxdWVyeWluZyByZW1vdGUgc2VydmVycywgaW5j bHVkaW5nIGhvdyB0byBhZGQgdGhlCi0gICBuZWNlc3Nhcnkgc2VydmVyLXNpZGUgc3VwcG9ydCBj b2RlLCBzZWUgdGhpcyBmaWxlbmFtZSAob3Igb25lIGxpa2UgaXQpOgotCi0gICAvdXNyL2RvYy9n cGVyZnRvb2xzLSRQUFJPRl9WRVJTSU9OL3Bwcm9mX3JlbW90ZV9zZXJ2ZXJzLmh0bWwKLQotT3B0 aW9uczoKLSAgIC0tY3VtICAgICAgICAgICAgICAgU29ydCBieSBjdW11bGF0aXZlIGRhdGEKLSAg IC0tYmFzZT08YmFzZT4gICAgICAgU3VidHJhY3QgPGJhc2U+IGZyb20gPHByb2ZpbGU+IGJlZm9y ZSBkaXNwbGF5Ci0gICAtLWludGVyYWN0aXZlICAgICAgIFJ1biBpbiBpbnRlcmFjdGl2ZSBtb2Rl IChpbnRlcmFjdGl2ZSAiaGVscCIgZ2l2ZXMgaGVscCkgW2RlZmF1bHRdCi0gICAtLXNlY29uZHM9 PG4+ICAgICAgIExlbmd0aCBvZiB0aW1lIGZvciBkeW5hbWljIHByb2ZpbGVzIFtkZWZhdWx0PTMw IHNlY3NdCi0gICAtLWFkZF9saWI9PGZpbGU+ICAgIFJlYWQgYWRkaXRpb25hbCBzeW1ib2xzIGFu ZCBsaW5lIGluZm8gZnJvbSB0aGUgZ2l2ZW4gbGlicmFyeQotICAgLS1saWJfcHJlZml4PTxkaXI+ ICBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBsaWJyYXJ5IHBhdGggcHJlZml4ZXMKLQotUmVwb3J0 aW5nIEdyYW51bGFyaXR5OgotICAgLS1hZGRyZXNzZXMgICAgICAgICBSZXBvcnQgYXQgYWRkcmVz cyBsZXZlbAotICAgLS1saW5lcyAgICAgICAgICAgICBSZXBvcnQgYXQgc291cmNlIGxpbmUgbGV2 ZWwKLSAgIC0tZnVuY3Rpb25zICAgICAgICAgUmVwb3J0IGF0IGZ1bmN0aW9uIGxldmVsIFtkZWZh dWx0XQotICAgLS1maWxlcyAgICAgICAgICAgICBSZXBvcnQgYXQgc291cmNlIGZpbGUgbGV2ZWwK LQotT3V0cHV0IHR5cGU6Ci0gICAtLXRleHQgICAgICAgICAgICAgIEdlbmVyYXRlIHRleHQgcmVw b3J0Ci0gICAtLWNhbGxncmluZCAgICAgICAgIEdlbmVyYXRlIGNhbGxncmluZCBmb3JtYXQgdG8g c3Rkb3V0Ci0gICAtLWd2ICAgICAgICAgICAgICAgIEdlbmVyYXRlIFBvc3RzY3JpcHQgYW5kIGRp c3BsYXkKLSAgIC0tZXZpbmNlICAgICAgICAgICAgR2VuZXJhdGUgUERGIGFuZCBkaXNwbGF5Ci0g ICAtLXdlYiAgICAgICAgICAgICAgIEdlbmVyYXRlIFNWRyBhbmQgZGlzcGxheQotICAgLS1saXN0 PTxyZWdleHA+ICAgICBHZW5lcmF0ZSBzb3VyY2UgbGlzdGluZyBvZiBtYXRjaGluZyByb3V0aW5l cwotICAgLS1kaXNhc209PHJlZ2V4cD4gICBHZW5lcmF0ZSBkaXNhc3NlbWJseSBvZiBtYXRjaGlu ZyByb3V0aW5lcwotICAgLS1zeW1ib2xzICAgICAgICAgICBQcmludCBkZW1hbmdsZWQgc3ltYm9s IG5hbWVzIGZvdW5kIGF0IGdpdmVuIGFkZHJlc3NlcwotICAgLS1kb3QgICAgICAgICAgICAgICBH ZW5lcmF0ZSBET1QgZmlsZSB0byBzdGRvdXQKLSAgIC0tcHMgICAgICAgICAgICAgICAgR2VuZXJh dGUgUG9zdGNyaXB0IHRvIHN0ZG91dAotICAgLS1wZGYgICAgICAgICAgICAgICBHZW5lcmF0ZSBQ REYgdG8gc3Rkb3V0Ci0gICAtLXN2ZyAgICAgICAgICAgICAgIEdlbmVyYXRlIFNWRyB0byBzdGRv dXQKLSAgIC0tZ2lmICAgICAgICAgICAgICAgR2VuZXJhdGUgR0lGIHRvIHN0ZG91dAotICAgLS1y YXcgICAgICAgICAgICAgICBHZW5lcmF0ZSBzeW1ib2xpemVkIGplcHJvZiBkYXRhICh1c2VmdWwg d2l0aCByZW1vdGUgZmV0Y2gpCi0gICAtLWNvbGxhcHNlZCAgICAgICAgIEdlbmVyYXRlIGNvbGxh cHNlZCBzdGFja3MgZm9yIGJ1aWxkaW5nIGZsYW1lIGdyYXBocwotICAgICAgICAgICAgICAgICAg ICAgICAoc2VlIGh0dHA6Ly93d3cuYnJlbmRhbmdyZWdnLmNvbS9mbGFtZWdyYXBocy5odG1sKQot Ci1IZWFwLVByb2ZpbGUgT3B0aW9uczoKLSAgIC0taW51c2Vfc3BhY2UgICAgICAgRGlzcGxheSBp bi11c2UgKG1lZ2EpYnl0ZXMgW2RlZmF1bHRdCi0gICAtLWludXNlX29iamVjdHMgICAgIERpc3Bs YXkgaW4tdXNlIG9iamVjdHMKLSAgIC0tYWxsb2Nfc3BhY2UgICAgICAgRGlzcGxheSBhbGxvY2F0 ZWQgKG1lZ2EpYnl0ZXMKLSAgIC0tYWxsb2Nfb2JqZWN0cyAgICAgRGlzcGxheSBhbGxvY2F0ZWQg b2JqZWN0cwotICAgLS1zaG93X2J5dGVzICAgICAgICBEaXNwbGF5IHNwYWNlIGluIGJ5dGVzCi0g ICAtLWRyb3BfbmVnYXRpdmUgICAgIElnbm9yZSBuZWdhdGl2ZSBkaWZmZXJlbmNlcwotCi1Db250 ZW50aW9uLXByb2ZpbGUgb3B0aW9uczoKLSAgIC0tdG90YWxfZGVsYXkgICAgICAgRGlzcGxheSB0 b3RhbCBkZWxheSBhdCBlYWNoIHJlZ2lvbiBbZGVmYXVsdF0KLSAgIC0tY29udGVudGlvbnMgICAg ICAgRGlzcGxheSBudW1iZXIgb2YgZGVsYXlzIGF0IGVhY2ggcmVnaW9uCi0gICAtLW1lYW5fZGVs YXkgICAgICAgIERpc3BsYXkgbWVhbiBkZWxheSBhdCBlYWNoIHJlZ2lvbgotCi1DYWxsLWdyYXBo IE9wdGlvbnM6Ci0gICAtLW5vZGVjb3VudD08bj4gICAgIFNob3cgYXQgbW9zdCBzbyBtYW55IG5v ZGVzIFtkZWZhdWx0PTgwXQotICAgLS1ub2RlZnJhY3Rpb249PGY+ICBIaWRlIG5vZGVzIGJlbG93 IDxmPip0b3RhbCBbZGVmYXVsdD0uMDA1XQotICAgLS1lZGdlZnJhY3Rpb249PGY+ICBIaWRlIGVk Z2VzIGJlbG93IDxmPip0b3RhbCBbZGVmYXVsdD0uMDAxXQotICAgLS1tYXhkZWdyZWU9PG4+ICAg ICBNYXggaW5jb21pbmcvb3V0Z29pbmcgZWRnZXMgcGVyIG5vZGUgW2RlZmF1bHQ9OF0KLSAgIC0t Zm9jdXM9PHJlZ2V4cD4gICAgRm9jdXMgb24gYmFja3RyYWNlcyB3aXRoIG5vZGVzIG1hdGNoaW5n IDxyZWdleHA+Ci0gICAtLXRocmVhZD08bj4gICAgICAgIFNob3cgcHJvZmlsZSBmb3IgdGhyZWFk IDxuPgotICAgLS1pZ25vcmU9PHJlZ2V4cD4gICBJZ25vcmUgYmFja3RyYWNlcyB3aXRoIG5vZGVz IG1hdGNoaW5nIDxyZWdleHA+Ci0gICAtLXNjYWxlPTxuPiAgICAgICAgIFNldCBHViBzY2FsaW5n IFtkZWZhdWx0PTBdCi0gICAtLWhlYXBjaGVjayAgICAgICAgIE1ha2Ugbm9kZXMgd2l0aCBub24t MCBvYmplY3QgY291bnRzCi0gICAgICAgICAgICAgICAgICAgICAgIChpLmUuIGRpcmVjdCBsZWFr IGdlbmVyYXRvcnMpIG1vcmUgdmlzaWJsZQotICAgLS1yZXRhaW49PHJlZ2V4cD4gICBSZXRhaW4g b25seSBub2RlcyB0aGF0IG1hdGNoIDxyZWdleHA+Ci0gICAtLWV4Y2x1ZGU9PHJlZ2V4cD4gIEV4 Y2x1ZGUgYWxsIG5vZGVzIHRoYXQgbWF0Y2ggPHJlZ2V4cD4KLQotTWlzY2VsbGFuZW91czoKLSAg IC0tdG9vbHM9PHByZWZpeCBvciBiaW5hcnk6ZnVsbHBhdGg+WywuLi5dICAgXCRQQVRIIGZvciBv YmplY3QgdG9vbCBwYXRobmFtZXMKLSAgIC0tdGVzdCAgICAgICAgICAgICAgUnVuIHVuaXQgdGVz dHMKLSAgIC0taGVscCAgICAgICAgICAgICAgVGhpcyBtZXNzYWdlCi0gICAtLXZlcnNpb24gICAg ICAgICAgIFZlcnNpb24gaW5mb3JtYXRpb24KLSAgIC0tZGVidWctc3ltcy1ieS1pZCAgKExpbnV4 IG9ubHkpIEZpbmQgZGVidWcgc3ltYm9sIGZpbGVzIGJ5IGJ1aWxkIElEIGFzIHdlbGwgYXMgYnkg bmFtZQotCi1FbnZpcm9ubWVudCBWYXJpYWJsZXM6Ci0gICBKRVBST0ZfVE1QRElSICAgICAgICBQ cm9maWxlcyBkaXJlY3RvcnkuIERlZmF1bHRzIHRvIFwkSE9NRS9qZXByb2YKLSAgIEpFUFJPRl9U T09MUyAgICAgICAgIFByZWZpeCBmb3Igb2JqZWN0IHRvb2xzIHBhdGhuYW1lcwotCi1FeGFtcGxl czoKLQotamVwcm9mIC9iaW4vbHMgbHMucHJvZgotICAgICAgICAgICAgICAgICAgICAgICBFbnRl cnMgImludGVyYWN0aXZlIiBtb2RlCi1qZXByb2YgLS10ZXh0IC9iaW4vbHMgbHMucHJvZgotICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXRzIG9uZSBsaW5lIHBlciBwcm9jZWR1cmUKLWplcHJv ZiAtLXdlYiAvYmluL2xzIGxzLnByb2YKLSAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheXMg YW5ub3RhdGVkIGNhbGwtZ3JhcGggaW4gd2ViIGJyb3dzZXIKLWplcHJvZiAtLWd2IC9iaW4vbHMg bHMucHJvZgotICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5cyBhbm5vdGF0ZWQgY2FsbC1n cmFwaCB2aWEgJ2d2JwotamVwcm9mIC0tZ3YgLS1mb2N1cz1NdXRleCAvYmluL2xzIGxzLnByb2YK LSAgICAgICAgICAgICAgICAgICAgICAgUmVzdHJpY3RzIHRvIGNvZGUgcGF0aHMgaW5jbHVkaW5n IGEgLipNdXRleC4qIGVudHJ5Ci1qZXByb2YgLS1ndiAtLWZvY3VzPU11dGV4IC0taWdub3JlPXN0 cmluZyAvYmluL2xzIGxzLnByb2YKLSAgICAgICAgICAgICAgICAgICAgICAgQ29kZSBwYXRocyBp bmNsdWRpbmcgTXV0ZXggYnV0IG5vdCBzdHJpbmcKLWplcHJvZiAtLWxpc3Q9Z2V0ZGlyIC9iaW4v bHMgbHMucHJvZgotICAgICAgICAgICAgICAgICAgICAgICAoUGVyLWxpbmUpIGFubm90YXRlZCBz b3VyY2UgbGlzdGluZyBmb3IgZ2V0ZGlyKCkKLWplcHJvZiAtLWRpc2FzbT1nZXRkaXIgL2Jpbi9s cyBscy5wcm9mCi0gICAgICAgICAgICAgICAgICAgICAgIChQZXItUEMpIGFubm90YXRlZCBkaXNh c3NlbWJseSBmb3IgZ2V0ZGlyKCkKLQotamVwcm9mIGh0dHA6Ly9sb2NhbGhvc3Q6MTIzNC8KLSAg ICAgICAgICAgICAgICAgICAgICAgRW50ZXJzICJpbnRlcmFjdGl2ZSIgbW9kZQotamVwcm9mIC0t dGV4dCBsb2NhbGhvc3Q6MTIzNAotICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRzIG9uZSBs aW5lIHBlciBwcm9jZWR1cmUgZm9yIGxvY2FsaG9zdDoxMjM0Ci1qZXByb2YgLS1yYXcgbG9jYWxo b3N0OjEyMzQgPiAuL2xvY2FsLnJhdwotamVwcm9mIC0tdGV4dCAuL2xvY2FsLnJhdwotICAgICAg ICAgICAgICAgICAgICAgICBGZXRjaGVzIGEgcmVtb3RlIHByb2ZpbGUgZm9yIGxhdGVyIGFuYWx5 c2lzIGFuZCB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgIGFuYWx5emVzIGl0IGluIHRleHQg bW9kZS4KLUVPRgotfQotCi1zdWIgdmVyc2lvbl9zdHJpbmcgewotICByZXR1cm4gPDxFT0YKLWpl cHJvZiAocGFydCBvZiBqZW1hbGxvYyAkSkVQUk9GX1ZFUlNJT04pCi1iYXNlZCBvbiBwcHJvZiAo cGFydCBvZiBncGVyZnRvb2xzICRQUFJPRl9WRVJTSU9OKQotCi1Db3B5cmlnaHQgMTk5OC0yMDA3 IEdvb2dsZSBJbmMuCi0KLVRoaXMgaXMgQlNEIGxpY2Vuc2VkIHNvZnR3YXJlOyBzZWUgdGhlIHNv dXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zCi1hbmQgbGljZW5zZSBpbmZvcm1hdGlvbi4KLVRo ZXJlIGlzIE5PIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEKLVBBUlRJQ1VMQVIgUFVSUE9TRS4KLUVPRgotfQotCi1zdWIgdXNhZ2UgewotICBt eSAkbXNnID0gc2hpZnQ7Ci0gIHByaW50IFNUREVSUiAiJG1zZ1xuXG4iOwotICBwcmludCBTVERF UlIgdXNhZ2Vfc3RyaW5nKCk7Ci0gIHByaW50IFNUREVSUiAiXG5GQVRBTCBFUlJPUjogJG1zZ1xu IjsgICAgIyBqdXN0IGFzIGEgcmVtaW5kZXIKLSAgZXhpdCgxKTsKLX0KLQotc3ViIEluaXQoKSB7 Ci0gICMgU2V0dXAgdG1wLWZpbGUgbmFtZSBhbmQgaGFuZGxlciB0byBjbGVhbiBpdCB1cC4KLSAg IyBXZSBkbyB0aGlzIGluIHRoZSB2ZXJ5IGJlZ2lubmluZyBzbyB0aGF0IHdlIGNhbiB1c2UKLSAg IyBlcnJvcigpIGFuZCBjbGVhbnVwKCkgZnVuY3Rpb24gYW55dGltZSBoZXJlIGFmdGVyLgotICAk bWFpbjo6dG1wZmlsZV9zeW0gPSAiL3RtcC9qZXByb2YkJC5zeW0iOwotICAkbWFpbjo6dG1wZmls ZV9wcyA9ICIvdG1wL2plcHJvZiQkIjsKLSAgJG1haW46Om5leHRfdG1wZmlsZSA9IDA7Ci0gICRT SUd7J0lOVCd9ID0gXCZzaWdoYW5kbGVyOwotCi0gICMgQ2FjaGUgZnJvbSBmaWxlbmFtZS9saW5l bnVtYmVyIHRvIHNvdXJjZSBjb2RlCi0gICRtYWluOjpzb3VyY2VfY2FjaGUgPSAoKTsKLQotICAk bWFpbjo6b3B0X2hlbHAgPSAwOwotICAkbWFpbjo6b3B0X3ZlcnNpb24gPSAwOwotCi0gICRtYWlu OjpvcHRfY3VtID0gMDsKLSAgJG1haW46Om9wdF9iYXNlID0gJyc7Ci0gICRtYWluOjpvcHRfYWRk cmVzc2VzID0gMDsKLSAgJG1haW46Om9wdF9saW5lcyA9IDA7Ci0gICRtYWluOjpvcHRfZnVuY3Rp b25zID0gMDsKLSAgJG1haW46Om9wdF9maWxlcyA9IDA7Ci0gICRtYWluOjpvcHRfbGliX3ByZWZp eCA9ICIiOwotCi0gICRtYWluOjpvcHRfdGV4dCA9IDA7Ci0gICRtYWluOjpvcHRfY2FsbGdyaW5k ID0gMDsKLSAgJG1haW46Om9wdF9saXN0ID0gIiI7Ci0gICRtYWluOjpvcHRfZGlzYXNtID0gIiI7 Ci0gICRtYWluOjpvcHRfc3ltYm9scyA9IDA7Ci0gICRtYWluOjpvcHRfZ3YgPSAwOwotICAkbWFp bjo6b3B0X2V2aW5jZSA9IDA7Ci0gICRtYWluOjpvcHRfd2ViID0gMDsKLSAgJG1haW46Om9wdF9k b3QgPSAwOwotICAkbWFpbjo6b3B0X3BzID0gMDsKLSAgJG1haW46Om9wdF9wZGYgPSAwOwotICAk bWFpbjo6b3B0X2dpZiA9IDA7Ci0gICRtYWluOjpvcHRfc3ZnID0gMDsKLSAgJG1haW46Om9wdF9y YXcgPSAwOwotICAkbWFpbjo6b3B0X2NvbGxhcHNlZCA9IDA7Ci0KLSAgJG1haW46Om9wdF9ub2Rl Y291bnQgPSA4MDsKLSAgJG1haW46Om9wdF9ub2RlZnJhY3Rpb24gPSAwLjAwNTsKLSAgJG1haW46 Om9wdF9lZGdlZnJhY3Rpb24gPSAwLjAwMTsKLSAgJG1haW46Om9wdF9tYXhkZWdyZWUgPSA4Owot ICAkbWFpbjo6b3B0X2ZvY3VzID0gJyc7Ci0gICRtYWluOjpvcHRfdGhyZWFkID0gdW5kZWY7Ci0g ICRtYWluOjpvcHRfaWdub3JlID0gJyc7Ci0gICRtYWluOjpvcHRfc2NhbGUgPSAwOwotICAkbWFp bjo6b3B0X2hlYXBjaGVjayA9IDA7Ci0gICRtYWluOjpvcHRfcmV0YWluID0gJyc7Ci0gICRtYWlu OjpvcHRfZXhjbHVkZSA9ICcnOwotICAkbWFpbjo6b3B0X3NlY29uZHMgPSAzMDsKLSAgJG1haW46 Om9wdF9saWIgPSAiIjsKLQotICAkbWFpbjo6b3B0X2ludXNlX3NwYWNlICAgPSAwOwotICAkbWFp bjo6b3B0X2ludXNlX29iamVjdHMgPSAwOwotICAkbWFpbjo6b3B0X2FsbG9jX3NwYWNlICAgPSAw OwotICAkbWFpbjo6b3B0X2FsbG9jX29iamVjdHMgPSAwOwotICAkbWFpbjo6b3B0X3Nob3dfYnl0 ZXMgICAgPSAwOwotICAkbWFpbjo6b3B0X2Ryb3BfbmVnYXRpdmUgPSAwOwotICAkbWFpbjo6b3B0 X2ludGVyYWN0aXZlICAgPSAwOwotCi0gICRtYWluOjpvcHRfdG90YWxfZGVsYXkgPSAwOwotICAk bWFpbjo6b3B0X2NvbnRlbnRpb25zID0gMDsKLSAgJG1haW46Om9wdF9tZWFuX2RlbGF5ID0gMDsK LQotICAkbWFpbjo6b3B0X3Rvb2xzICAgPSAiIjsKLSAgJG1haW46Om9wdF9kZWJ1ZyAgID0gMDsK LSAgJG1haW46Om9wdF90ZXN0ICAgID0gMDsKLSAgJG1haW46Om9wdF9kZWJ1Z19zeW1zX2J5X2lk ID0gMDsKLQotICAjIFRoZXNlIGFyZSB1bmRvY3VtZW50ZWQgZmxhZ3MgdXNlZCBvbmx5IGJ5IHVu aXR0ZXN0cy4KLSAgJG1haW46Om9wdF90ZXN0X3N0cmlkZSA9IDA7Ci0KLSAgIyBBcmUgd2UgdXNp bmcgJFNZTUJPTF9QQUdFPwotICAkbWFpbjo6dXNlX3N5bWJvbF9wYWdlID0gMDsKLQotICAjIEZp bGVzIHJldHVybmVkIGJ5IFRlbXBOYW1lLgotICAlbWFpbjo6dGVtcG5hbWVzID0gKCk7Ci0KLSAg IyBUeXBlIG9mIHByb2ZpbGUgd2UgYXJlIGRlYWxpbmcgd2l0aAotICAjIFN1cHBvcnRlZCB0eXBl czoKLSAgIyAgICAgY3B1Ci0gICMgICAgIGhlYXAKLSAgIyAgICAgZ3Jvd3RoCi0gICMgICAgIGNv bnRlbnRpb24KLSAgJG1haW46OnByb2ZpbGVfdHlwZSA9ICcnOyAgICAgIyBFbXB0eSB0eXBlIG1l YW5zICJ1bmtub3duIgotCi0gIEdldE9wdGlvbnMoImhlbHAhIiAgICAgICAgICA9PiBcJG1haW46 Om9wdF9oZWxwLAotICAgICAgICAgICAgICJ2ZXJzaW9uISIgICAgICAgPT4gXCRtYWluOjpvcHRf dmVyc2lvbiwKLSAgICAgICAgICAgICAiY3VtISIgICAgICAgICAgID0+IFwkbWFpbjo6b3B0X2N1 bSwKLSAgICAgICAgICAgICAiYmFzZT1zIiAgICAgICAgID0+IFwkbWFpbjo6b3B0X2Jhc2UsCi0g ICAgICAgICAgICAgInNlY29uZHM9aSIgICAgICA9PiBcJG1haW46Om9wdF9zZWNvbmRzLAotICAg ICAgICAgICAgICJhZGRfbGliPXMiICAgICAgPT4gXCRtYWluOjpvcHRfbGliLAotICAgICAgICAg ICAgICJsaWJfcHJlZml4PXMiICAgPT4gXCRtYWluOjpvcHRfbGliX3ByZWZpeCwKLSAgICAgICAg ICAgICAiZnVuY3Rpb25zISIgICAgID0+IFwkbWFpbjo6b3B0X2Z1bmN0aW9ucywKLSAgICAgICAg ICAgICAibGluZXMhIiAgICAgICAgID0+IFwkbWFpbjo6b3B0X2xpbmVzLAotICAgICAgICAgICAg ICJhZGRyZXNzZXMhIiAgICAgPT4gXCRtYWluOjpvcHRfYWRkcmVzc2VzLAotICAgICAgICAgICAg ICJmaWxlcyEiICAgICAgICAgPT4gXCRtYWluOjpvcHRfZmlsZXMsCi0gICAgICAgICAgICAgInRl eHQhIiAgICAgICAgICA9PiBcJG1haW46Om9wdF90ZXh0LAotICAgICAgICAgICAgICJjYWxsZ3Jp bmQhIiAgICAgPT4gXCRtYWluOjpvcHRfY2FsbGdyaW5kLAotICAgICAgICAgICAgICJsaXN0PXMi ICAgICAgICAgPT4gXCRtYWluOjpvcHRfbGlzdCwKLSAgICAgICAgICAgICAiZGlzYXNtPXMiICAg ICAgID0+IFwkbWFpbjo6b3B0X2Rpc2FzbSwKLSAgICAgICAgICAgICAic3ltYm9scyEiICAgICAg ID0+IFwkbWFpbjo6b3B0X3N5bWJvbHMsCi0gICAgICAgICAgICAgImd2ISIgICAgICAgICAgICA9 PiBcJG1haW46Om9wdF9ndiwKLSAgICAgICAgICAgICAiZXZpbmNlISIgICAgICAgID0+IFwkbWFp bjo6b3B0X2V2aW5jZSwKLSAgICAgICAgICAgICAid2ViISIgICAgICAgICAgID0+IFwkbWFpbjo6 b3B0X3dlYiwKLSAgICAgICAgICAgICAiZG90ISIgICAgICAgICAgID0+IFwkbWFpbjo6b3B0X2Rv dCwKLSAgICAgICAgICAgICAicHMhIiAgICAgICAgICAgID0+IFwkbWFpbjo6b3B0X3BzLAotICAg ICAgICAgICAgICJwZGYhIiAgICAgICAgICAgPT4gXCRtYWluOjpvcHRfcGRmLAotICAgICAgICAg ICAgICJzdmchIiAgICAgICAgICAgPT4gXCRtYWluOjpvcHRfc3ZnLAotICAgICAgICAgICAgICJn aWYhIiAgICAgICAgICAgPT4gXCRtYWluOjpvcHRfZ2lmLAotICAgICAgICAgICAgICJyYXchIiAg ICAgICAgICAgPT4gXCRtYWluOjpvcHRfcmF3LAotICAgICAgICAgICAgICJjb2xsYXBzZWQhIiAg ICAgPT4gXCRtYWluOjpvcHRfY29sbGFwc2VkLAotICAgICAgICAgICAgICJpbnRlcmFjdGl2ZSEi ICAgPT4gXCRtYWluOjpvcHRfaW50ZXJhY3RpdmUsCi0gICAgICAgICAgICAgIm5vZGVjb3VudD1p IiAgICA9PiBcJG1haW46Om9wdF9ub2RlY291bnQsCi0gICAgICAgICAgICAgIm5vZGVmcmFjdGlv bj1mIiA9PiBcJG1haW46Om9wdF9ub2RlZnJhY3Rpb24sCi0gICAgICAgICAgICAgImVkZ2VmcmFj dGlvbj1mIiA9PiBcJG1haW46Om9wdF9lZGdlZnJhY3Rpb24sCi0gICAgICAgICAgICAgIm1heGRl Z3JlZT1pIiAgICA9PiBcJG1haW46Om9wdF9tYXhkZWdyZWUsCi0gICAgICAgICAgICAgImZvY3Vz PXMiICAgICAgICA9PiBcJG1haW46Om9wdF9mb2N1cywKLSAgICAgICAgICAgICAidGhyZWFkPXMi ICAgICAgID0+IFwkbWFpbjo6b3B0X3RocmVhZCwKLSAgICAgICAgICAgICAiaWdub3JlPXMiICAg ICAgID0+IFwkbWFpbjo6b3B0X2lnbm9yZSwKLSAgICAgICAgICAgICAic2NhbGU9aSIgICAgICAg ID0+IFwkbWFpbjo6b3B0X3NjYWxlLAotICAgICAgICAgICAgICJoZWFwY2hlY2siICAgICAgPT4g XCRtYWluOjpvcHRfaGVhcGNoZWNrLAotICAgICAgICAgICAgICJyZXRhaW49cyIgICAgICAgPT4g XCRtYWluOjpvcHRfcmV0YWluLAotICAgICAgICAgICAgICJleGNsdWRlPXMiICAgICAgPT4gXCRt YWluOjpvcHRfZXhjbHVkZSwKLSAgICAgICAgICAgICAiaW51c2Vfc3BhY2UhIiAgID0+IFwkbWFp bjo6b3B0X2ludXNlX3NwYWNlLAotICAgICAgICAgICAgICJpbnVzZV9vYmplY3RzISIgPT4gXCRt YWluOjpvcHRfaW51c2Vfb2JqZWN0cywKLSAgICAgICAgICAgICAiYWxsb2Nfc3BhY2UhIiAgID0+ IFwkbWFpbjo6b3B0X2FsbG9jX3NwYWNlLAotICAgICAgICAgICAgICJhbGxvY19vYmplY3RzISIg PT4gXCRtYWluOjpvcHRfYWxsb2Nfb2JqZWN0cywKLSAgICAgICAgICAgICAic2hvd19ieXRlcyEi ICAgID0+IFwkbWFpbjo6b3B0X3Nob3dfYnl0ZXMsCi0gICAgICAgICAgICAgImRyb3BfbmVnYXRp dmUhIiA9PiBcJG1haW46Om9wdF9kcm9wX25lZ2F0aXZlLAotICAgICAgICAgICAgICJ0b3RhbF9k ZWxheSEiICAgPT4gXCRtYWluOjpvcHRfdG90YWxfZGVsYXksCi0gICAgICAgICAgICAgImNvbnRl bnRpb25zISIgICA9PiBcJG1haW46Om9wdF9jb250ZW50aW9ucywKLSAgICAgICAgICAgICAibWVh bl9kZWxheSEiICAgID0+IFwkbWFpbjo6b3B0X21lYW5fZGVsYXksCi0gICAgICAgICAgICAgInRv b2xzPXMiICAgICAgICA9PiBcJG1haW46Om9wdF90b29scywKLSAgICAgICAgICAgICAidGVzdCEi ICAgICAgICAgID0+IFwkbWFpbjo6b3B0X3Rlc3QsCi0gICAgICAgICAgICAgImRlYnVnISIgICAg ICAgICA9PiBcJG1haW46Om9wdF9kZWJ1ZywKLSAgICAgICAgICAgICAiZGVidWctc3ltcy1ieS1p ZCEiID0+IFwkbWFpbjo6b3B0X2RlYnVnX3N5bXNfYnlfaWQsCi0gICAgICAgICAgICAgIyBVbmRv Y3VtZW50ZWQgZmxhZ3MgdXNlZCBvbmx5IGJ5IHVuaXR0ZXN0czoKLSAgICAgICAgICAgICAidGVz dF9zdHJpZGU9aSIgID0+IFwkbWFpbjo6b3B0X3Rlc3Rfc3RyaWRlLAotICAgICAgKSB8fCB1c2Fn ZSgiSW52YWxpZCBvcHRpb24ocykiKTsKLQotICAjIERlYWwgd2l0aCB0aGUgc3RhbmRhcmQgLS1o ZWxwIGFuZCAtLXZlcnNpb24KLSAgaWYgKCRtYWluOjpvcHRfaGVscCkgewotICAgIHByaW50IHVz YWdlX3N0cmluZygpOwotICAgIGV4aXQoMCk7Ci0gIH0KLQotICBpZiAoJG1haW46Om9wdF92ZXJz aW9uKSB7Ci0gICAgcHJpbnQgdmVyc2lvbl9zdHJpbmcoKTsKLSAgICBleGl0KDApOwotICB9Ci0K LSAgIyBEaXNhc3NlbWJseS9saXN0aW5nL3N5bWJvbHMgbW9kZSByZXF1aXJlcyBhZGRyZXNzLWxl dmVsIGluZm8KLSAgaWYgKCRtYWluOjpvcHRfZGlzYXNtIHx8ICRtYWluOjpvcHRfbGlzdCB8fCAk bWFpbjo6b3B0X3N5bWJvbHMpIHsKLSAgICAkbWFpbjo6b3B0X2Z1bmN0aW9ucyA9IDA7Ci0gICAg JG1haW46Om9wdF9saW5lcyA9IDA7Ci0gICAgJG1haW46Om9wdF9hZGRyZXNzZXMgPSAxOwotICAg ICRtYWluOjpvcHRfZmlsZXMgPSAwOwotICB9Ci0KLSAgIyBDaGVjayBoZWFwLXByb2ZpbGluZyBm bGFncwotICBpZiAoJG1haW46Om9wdF9pbnVzZV9zcGFjZSArCi0gICAgICAkbWFpbjo6b3B0X2lu dXNlX29iamVjdHMgKwotICAgICAgJG1haW46Om9wdF9hbGxvY19zcGFjZSArCi0gICAgICAkbWFp bjo6b3B0X2FsbG9jX29iamVjdHMgPiAxKSB7Ci0gICAgdXNhZ2UoIlNwZWNpZnkgYXQgbW9zdCBv biBvZiAtLWludXNlLy0tYWxsb2Mgb3B0aW9ucyIpOwotICB9Ci0KLSAgIyBDaGVjayBvdXRwdXQg Z3JhbnVsYXJpdGllcwotICBteSAkZ3JhaW5zID0KLSAgICAgICRtYWluOjpvcHRfZnVuY3Rpb25z ICsKLSAgICAgICRtYWluOjpvcHRfbGluZXMgKwotICAgICAgJG1haW46Om9wdF9hZGRyZXNzZXMg KwotICAgICAgJG1haW46Om9wdF9maWxlcyArCi0gICAgICAwOwotICBpZiAoJGdyYWlucyA+IDEp IHsKLSAgICB1c2FnZSgiT25seSBzcGVjaWZ5IG9uZSBvdXRwdXQgZ3JhbnVsYXJpdHkgb3B0aW9u Iik7Ci0gIH0KLSAgaWYgKCRncmFpbnMgPT0gMCkgewotICAgICRtYWluOjpvcHRfZnVuY3Rpb25z ID0gMTsKLSAgfQotCi0gICMgQ2hlY2sgb3V0cHV0IG1vZGVzCi0gIG15ICRtb2RlcyA9Ci0gICAg ICAkbWFpbjo6b3B0X3RleHQgKwotICAgICAgJG1haW46Om9wdF9jYWxsZ3JpbmQgKwotICAgICAg KCRtYWluOjpvcHRfbGlzdCBlcSAnJyA/IDAgOiAxKSArCi0gICAgICAoJG1haW46Om9wdF9kaXNh c20gZXEgJycgPyAwIDogMSkgKwotICAgICAgKCRtYWluOjpvcHRfc3ltYm9scyA9PSAwID8gMCA6 IDEpICsKLSAgICAgICRtYWluOjpvcHRfZ3YgKwotICAgICAgJG1haW46Om9wdF9ldmluY2UgKwot ICAgICAgJG1haW46Om9wdF93ZWIgKwotICAgICAgJG1haW46Om9wdF9kb3QgKwotICAgICAgJG1h aW46Om9wdF9wcyArCi0gICAgICAkbWFpbjo6b3B0X3BkZiArCi0gICAgICAkbWFpbjo6b3B0X3N2 ZyArCi0gICAgICAkbWFpbjo6b3B0X2dpZiArCi0gICAgICAkbWFpbjo6b3B0X3JhdyArCi0gICAg ICAkbWFpbjo6b3B0X2NvbGxhcHNlZCArCi0gICAgICAkbWFpbjo6b3B0X2ludGVyYWN0aXZlICsK LSAgICAgIDA7Ci0gIGlmICgkbW9kZXMgPiAxKSB7Ci0gICAgdXNhZ2UoIk9ubHkgc3BlY2lmeSBv bmUgb3V0cHV0IG1vZGUiKTsKLSAgfQotICBpZiAoJG1vZGVzID09IDApIHsKLSAgICBpZiAoLXQg U1RET1VUKSB7ICAjIElmIFNURE9VVCBpcyBhIHR0eSwgYWN0aXZhdGUgaW50ZXJhY3RpdmUgbW9k ZQotICAgICAgJG1haW46Om9wdF9pbnRlcmFjdGl2ZSA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAg ICRtYWluOjpvcHRfdGV4dCA9IDE7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCRtYWluOjpvcHRfdGVz dCkgewotICAgIFJ1blVuaXRUZXN0cygpOwotICAgICMgU2hvdWxkIG5vdCByZXR1cm4KLSAgICBl eGl0KDEpOwotICB9Ci0KLSAgIyBCaW5hcnkgbmFtZSBhbmQgcHJvZmlsZSBhcmd1bWVudHMgbGlz dAotICAkbWFpbjo6cHJvZyA9ICIiOwotICBAbWFpbjo6cGZpbGVfYXJncyA9ICgpOwotCi0gICMg UmVtb3RlIHByb2ZpbGluZyB3aXRob3V0IGEgYmluYXJ5ICh1c2luZyAkU1lNQk9MX1BBR0UgaW5z dGVhZCkKLSAgaWYgKEBBUkdWID4gMCkgewotICAgIGlmIChJc1Byb2ZpbGVVUkwoJEFSR1ZbMF0p KSB7Ci0gICAgICAkbWFpbjo6dXNlX3N5bWJvbF9wYWdlID0gMTsKLSAgICB9IGVsc2lmIChJc1N5 bWJvbGl6ZWRQcm9maWxlRmlsZSgkQVJHVlswXSkpIHsKLSAgICAgICRtYWluOjp1c2Vfc3ltYm9s aXplZF9wcm9maWxlID0gMTsKLSAgICAgICRtYWluOjpwcm9nID0gJFVOS05PV05fQklOQVJZOyAg IyB3aWxsIGJlIHNldCBsYXRlciBmcm9tIHRoZSBwcm9maWxlIGZpbGUKLSAgICB9Ci0gIH0KLQot ICBpZiAoJG1haW46OnVzZV9zeW1ib2xfcGFnZSB8fCAkbWFpbjo6dXNlX3N5bWJvbGl6ZWRfcHJv ZmlsZSkgewotICAgICMgV2UgZG9uJ3QgbmVlZCBhIGJpbmFyeSEKLSAgICBteSAlZGlzYWJsZWQg PSAoJy0tbGluZXMnID0+ICRtYWluOjpvcHRfbGluZXMsCi0gICAgICAgICAgICAgICAgICAgICct LWRpc2FzbScgPT4gJG1haW46Om9wdF9kaXNhc20pOwotICAgIGZvciBteSAkb3B0aW9uIChrZXlz ICVkaXNhYmxlZCkgewotICAgICAgdXNhZ2UoIiRvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aG91 dCBhIGJpbmFyeSIpIGlmICRkaXNhYmxlZHskb3B0aW9ufTsKLSAgICB9Ci0gICAgIyBTZXQgJG1h aW46OnByb2cgbGF0ZXIuLi4KLSAgICBzY2FsYXIoQEFSR1YpIHx8IHVzYWdlKCJEaWQgbm90IHNw ZWNpZnkgcHJvZmlsZSBmaWxlIik7Ci0gIH0gZWxzaWYgKCRtYWluOjpvcHRfc3ltYm9scykgewot ICAgICMgLS1zeW1ib2xzIG5lZWRzIGEgYmluYXJ5LW5hbWUgKHRvIHJ1biBubSBvbiwgZXRjKSBi dXQgbm90IHByb2ZpbGVzCi0gICAgJG1haW46OnByb2cgPSBzaGlmdChAQVJHVikgfHwgdXNhZ2Uo IkRpZCBub3Qgc3BlY2lmeSBwcm9ncmFtIik7Ci0gIH0gZWxzZSB7Ci0gICAgJG1haW46OnByb2cg PSBzaGlmdChAQVJHVikgfHwgdXNhZ2UoIkRpZCBub3Qgc3BlY2lmeSBwcm9ncmFtIik7Ci0gICAg c2NhbGFyKEBBUkdWKSB8fCB1c2FnZSgiRGlkIG5vdCBzcGVjaWZ5IHByb2ZpbGUgZmlsZSIpOwot ICB9Ci0KLSAgIyBQYXJzZSBwcm9maWxlIGZpbGUvbG9jYXRpb24gYXJndW1lbnRzCi0gIGZvcmVh Y2ggbXkgJGZhcmcgKEBBUkdWKSB7Ci0gICAgaWYgKCRmYXJnID1+IG0vKC4qKVxAKFswLTldKyko fFwvLiopJC8gKSB7Ci0gICAgICBteSAkbWFjaGluZSA9ICQxOwotICAgICAgbXkgJG51bV9tYWNo aW5lcyA9ICQyOwotICAgICAgbXkgJHBhdGggPSAkMzsKLSAgICAgIGZvciAobXkgJGkgPSAwOyAk aSA8ICRudW1fbWFjaGluZXM7ICRpKyspIHsKLSAgICAgICAgdW5zaGlmdChAbWFpbjo6cGZpbGVf YXJncywgIiRpLiRtYWNoaW5lJHBhdGgiKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg dW5zaGlmdChAbWFpbjo6cGZpbGVfYXJncywgJGZhcmcpOwotICAgIH0KLSAgfQotCi0gIGlmICgk bWFpbjo6dXNlX3N5bWJvbF9wYWdlKSB7Ci0gICAgdW5sZXNzIChJc1Byb2ZpbGVVUkwoJG1haW46 OnBmaWxlX2FyZ3NbMF0pKSB7Ci0gICAgICBlcnJvcigiVGhlIGZpcnN0IHByb2ZpbGUgc2hvdWxk IGJlIGEgcmVtb3RlIGZvcm0gdG8gdXNlICRTWU1CT0xfUEFHRVxuIik7Ci0gICAgfQotICAgIENo ZWNrU3ltYm9sUGFnZSgpOwotICAgICRtYWluOjpwcm9nID0gRmV0Y2hQcm9ncmFtTmFtZSgpOwot ICB9IGVsc2lmICghJG1haW46OnVzZV9zeW1ib2xpemVkX3Byb2ZpbGUpIHsgICMgbWF5IG5vdCBu ZWVkIG9ianRvb2xzIQotICAgIENvbmZpZ3VyZU9ialRvb2xzKCRtYWluOjpwcm9nKQotICB9Ci0K LSAgIyBCcmVhayB0aGUgb3B0X2xpYl9wcmVmaXggaW50byB0aGUgcHJlZml4X2xpc3QgYXJyYXkK LSAgQHByZWZpeF9saXN0ID0gc3BsaXQgKCcsJywgJG1haW46Om9wdF9saWJfcHJlZml4KTsKLQot ICAjIFJlbW92ZSB0cmFpbGluZyAvIGZyb20gdGhlIHByZWZpeGVzLCBpbiB0aGUgbGlzdCB0byBw cmV2ZW50Ci0gICMgc2VhcmNoaW5nIHRoaW5ncyBsaWtlIC9teS9wYXRoLy9saWIvbXlsaWIuc28K LSAgZm9yZWFjaCAoQHByZWZpeF9saXN0KSB7Ci0gICAgc3wvKyR8fDsKLSAgfQotCi0gICMgRmxh ZyB0byBwcmV2ZW50IHVzIGZyb20gdHJ5aW5nIG92ZXIgYW5kIG92ZXIgdG8gdXNlCi0gICMgIGVs ZnV0aWxzIGlmIGl0J3Mgbm90IGluc3RhbGxlZCAodXNlZCBvbmx5IHdpdGgKLSAgIyAgLS1kZWJ1 Zy1zeW1zLWJ5LWlkIG9wdGlvbikuCi0gICRtYWluOjpnYXZlX3VwX29uX2VsZnV0aWxzID0gMDsK LX0KLQotc3ViIEZpbHRlckFuZFByaW50IHsKLSAgbXkgKCRwcm9maWxlLCAkc3ltYm9scywgJGxp YnMsICR0aHJlYWQpID0gQF87Ci0KLSAgIyBHZXQgdG90YWwgZGF0YSBpbiBwcm9maWxlCi0gIG15 ICR0b3RhbCA9IFRvdGFsUHJvZmlsZSgkcHJvZmlsZSk7Ci0KLSAgIyBSZW1vdmUgdW5pbml0ZXJl c3Rpbmcgc3RhY2sgaXRlbXMKLSAgJHByb2ZpbGUgPSBSZW1vdmVVbmludGVyZXN0aW5nRnJhbWVz KCRzeW1ib2xzLCAkcHJvZmlsZSk7Ci0KLSAgIyBGb2N1cz8KLSAgaWYgKCRtYWluOjpvcHRfZm9j dXMgbmUgJycpIHsKLSAgICAkcHJvZmlsZSA9IEZvY3VzUHJvZmlsZSgkc3ltYm9scywgJHByb2Zp bGUsICRtYWluOjpvcHRfZm9jdXMpOwotICB9Ci0KLSAgIyBJZ25vcmU/Ci0gIGlmICgkbWFpbjo6 b3B0X2lnbm9yZSBuZSAnJykgewotICAgICRwcm9maWxlID0gSWdub3JlUHJvZmlsZSgkc3ltYm9s cywgJHByb2ZpbGUsICRtYWluOjpvcHRfaWdub3JlKTsKLSAgfQotCi0gIG15ICRjYWxscyA9IEV4 dHJhY3RDYWxscygkc3ltYm9scywgJHByb2ZpbGUpOwotCi0gICMgUmVkdWNlIHByb2ZpbGVzIHRv IHJlcXVpcmVkIG91dHB1dCBncmFudWxhcml0eSwgYW5kIGFsc28gY2xlYW4KLSAgIyBlYWNoIHN0 YWNrIHRyYWNlIHNvIGEgZ2l2ZW4gZW50cnkgZXhpc3RzIGF0IG1vc3Qgb25jZS4KLSAgbXkgJHJl ZHVjZWQgPSBSZWR1Y2VQcm9maWxlKCRzeW1ib2xzLCAkcHJvZmlsZSk7Ci0KLSAgIyBHZXQgZGVy aXZlZCBwcm9maWxlcwotICBteSAkZmxhdCA9IEZsYXRQcm9maWxlKCRyZWR1Y2VkKTsKLSAgbXkg JGN1bXVsYXRpdmUgPSBDdW11bGF0aXZlUHJvZmlsZSgkcmVkdWNlZCk7Ci0KLSAgIyBQcmludAot ICBpZiAoISRtYWluOjpvcHRfaW50ZXJhY3RpdmUpIHsKLSAgICBpZiAoJG1haW46Om9wdF9kaXNh c20pIHsKLSAgICAgIFByaW50RGlzYXNzZW1ibHkoJGxpYnMsICRmbGF0LCAkY3VtdWxhdGl2ZSwg JG1haW46Om9wdF9kaXNhc20pOwotICAgIH0gZWxzaWYgKCRtYWluOjpvcHRfbGlzdCkgewotICAg ICAgUHJpbnRMaXN0aW5nKCR0b3RhbCwgJGxpYnMsICRmbGF0LCAkY3VtdWxhdGl2ZSwgJG1haW46 Om9wdF9saXN0LCAwKTsKLSAgICB9IGVsc2lmICgkbWFpbjo6b3B0X3RleHQpIHsKLSAgICAgICMg TWFrZSBzdXJlIHRoZSBvdXRwdXQgaXMgZW1wdHkgd2hlbiBoYXZlIG5vdGhpbmcgdG8gcmVwb3J0 Ci0gICAgICAjIChvbmx5IG1hdHRlcnMgd2hlbiAtLWhlYXBjaGVjayBpcyBnaXZlbiBidXQgd2Ug bXVzdCBiZQotICAgICAgIyBjb21wYXRpYmxlIHdpdGggb2xkIGJyYW5jaGVzIHRoYXQgZGlkIG5v dCBwYXNzIC0taGVhcGNoZWNrIGFsd2F5cyk6Ci0gICAgICBpZiAoJHRvdGFsICE9IDApIHsKLSAg ICAgICAgcHJpbnRmKCJUb3RhbCVzOiAlcyAlc1xuIiwKLSAgICAgICAgICAgICAgIChkZWZpbmVk KCR0aHJlYWQpID8gIiAodCR0aHJlYWQpIiA6ICIiKSwKLSAgICAgICAgICAgICAgIFVucGFyc2Uo JHRvdGFsKSwgVW5pdHMoKSk7Ci0gICAgICB9Ci0gICAgICBQcmludFRleHQoJHN5bWJvbHMsICRm bGF0LCAkY3VtdWxhdGl2ZSwgLTEpOwotICAgIH0gZWxzaWYgKCRtYWluOjpvcHRfcmF3KSB7Ci0g ICAgICBQcmludFN5bWJvbGl6ZWRQcm9maWxlKCRzeW1ib2xzLCAkcHJvZmlsZSwgJG1haW46OnBy b2cpOwotICAgIH0gZWxzaWYgKCRtYWluOjpvcHRfY29sbGFwc2VkKSB7Ci0gICAgICBQcmludENv bGxhcHNlZFN0YWNrcygkc3ltYm9scywgJHByb2ZpbGUpOwotICAgIH0gZWxzaWYgKCRtYWluOjpv cHRfY2FsbGdyaW5kKSB7Ci0gICAgICBQcmludENhbGxncmluZCgkY2FsbHMpOwotICAgIH0gZWxz ZSB7Ci0gICAgICBpZiAoUHJpbnREb3QoJG1haW46OnByb2csICRzeW1ib2xzLCAkcHJvZmlsZSwg JGZsYXQsICRjdW11bGF0aXZlLCAkdG90YWwpKSB7Ci0gICAgICAgIGlmICgkbWFpbjo6b3B0X2d2 KSB7Ci0gICAgICAgICAgUnVuR1YoVGVtcE5hbWUoJG1haW46Om5leHRfdG1wZmlsZSwgInBzIiks ICIiKTsKLSAgICAgICAgfSBlbHNpZiAoJG1haW46Om9wdF9ldmluY2UpIHsKLSAgICAgICAgICBS dW5FdmluY2UoVGVtcE5hbWUoJG1haW46Om5leHRfdG1wZmlsZSwgInBkZiIpLCAiIik7Ci0gICAg ICAgIH0gZWxzaWYgKCRtYWluOjpvcHRfd2ViKSB7Ci0gICAgICAgICAgbXkgJHRtcCA9IFRlbXBO YW1lKCRtYWluOjpuZXh0X3RtcGZpbGUsICJzdmciKTsKLSAgICAgICAgICBSdW5XZWIoJHRtcCk7 Ci0gICAgICAgICAgIyBUaGUgY29tbWFuZCB3ZSBydW4gbWlnaHQgaGFuZCB0aGUgZmlsZSBuYW1l IG9mZgotICAgICAgICAgICMgdG8gYW4gYWxyZWFkeSBydW5uaW5nIGJyb3dzZXIgaW5zdGFuY2Ug YW5kIHRoZW4gZXhpdC4KLSAgICAgICAgICAjIE5vcm1hbGx5LCB3ZSdkIHJlbW92ZSAkdG1wIG9u IGV4aXQgKHJpZ2h0IG5vdyksCi0gICAgICAgICAgIyBidXQgZm9yayBhIGNoaWxkIHRvIHJlbW92 ZSAkdG1wIGEgbGl0dGxlIGxhdGVyLCBzbyB0aGF0IHRoZQotICAgICAgICAgICMgYnJvd3NlciBo YXMgdGltZSB0byBsb2FkIGl0IGZpcnN0LgotICAgICAgICAgIGRlbGV0ZSAkbWFpbjo6dGVtcG5h bWVzeyR0bXB9OwotICAgICAgICAgIGlmIChmb3JrKCkgPT0gMCkgewotICAgICAgICAgICAgc2xl ZXAgNTsKLSAgICAgICAgICAgIHVubGluaygkdG1wKTsKLSAgICAgICAgICAgIGV4aXQoMCk7Ci0g ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjbGVhbnVwKCk7 Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2UgewotICAgIEludGVy YWN0aXZlTW9kZSgkcHJvZmlsZSwgJHN5bWJvbHMsICRsaWJzLCAkdG90YWwpOwotICB9Ci19Ci0K LXN1YiBNYWluKCkgewotICBJbml0KCk7Ci0gICRtYWluOjpjb2xsZWN0ZWRfcHJvZmlsZSA9IHVu ZGVmOwotICBAbWFpbjo6cHJvZmlsZV9maWxlcyA9ICgpOwotICAkbWFpbjo6b3BfdGltZSA9IHRp bWUoKTsKLQotICAjIFByaW50aW5nIHN5bWJvbHMgaXMgc3BlY2lhbCBhbmQgcmVxdWlyZXMgYSBs b3QgbGVzcyBpbmZvIHRoYXQgbW9zdC4KLSAgaWYgKCRtYWluOjpvcHRfc3ltYm9scykgewotICAg IFByaW50U3ltYm9scygqU1RESU4pOyAgICMgR2V0IC9wcm9jL21hcHMgYW5kIHN5bWJvbHMgb3V0 cHV0IGZyb20gc3RkaW4KLSAgICByZXR1cm47Ci0gIH0KLQotICAjIEZldGNoIGFsbCBwcm9maWxl IGRhdGEKLSAgRmV0Y2hEeW5hbWljUHJvZmlsZXMoKTsKLQotICAjIHRoaXMgd2lsbCBob2xkIHN5 bWJvbHMgdGhhdCB3ZSByZWFkIGZyb20gdGhlIHByb2ZpbGUgZmlsZXMKLSAgbXkgJHN5bWJvbF9t YXAgPSB7fTsKLQotICAjIFJlYWQgb25lIHByb2ZpbGUsIHBpY2sgdGhlIGxhc3QgaXRlbSBvbiB0 aGUgbGlzdAotICBteSAkZGF0YSA9IFJlYWRQcm9maWxlKCRtYWluOjpwcm9nLCBwb3AoQG1haW46 OnByb2ZpbGVfZmlsZXMpKTsKLSAgbXkgJHByb2ZpbGUgPSAkZGF0YS0+e3Byb2ZpbGV9OwotICBt eSAkcGNzID0gJGRhdGEtPntwY3N9OwotICBteSAkbGlicyA9ICRkYXRhLT57bGlic307ICAgIyBJ bmZvIGFib3V0IG1haW4gcHJvZ3JhbSBhbmQgc2hhcmVkIGxpYnJhcmllcwotICAkc3ltYm9sX21h cCA9IE1lcmdlU3ltYm9scygkc3ltYm9sX21hcCwgJGRhdGEtPntzeW1ib2xzfSk7Ci0KLSAgIyBB ZGQgYWRkaXRpb25hbCBwcm9maWxlcywgaWYgYXZhaWxhYmxlLgotICBpZiAoc2NhbGFyKEBtYWlu Ojpwcm9maWxlX2ZpbGVzKSA+IDApIHsKLSAgICBmb3JlYWNoIG15ICRwbmFtZSAoQG1haW46OnBy b2ZpbGVfZmlsZXMpIHsKLSAgICAgIG15ICRkYXRhMiA9IFJlYWRQcm9maWxlKCRtYWluOjpwcm9n LCAkcG5hbWUpOwotICAgICAgJHByb2ZpbGUgPSBBZGRQcm9maWxlKCRwcm9maWxlLCAkZGF0YTIt Pntwcm9maWxlfSk7Ci0gICAgICAkcGNzID0gQWRkUGNzKCRwY3MsICRkYXRhMi0+e3Bjc30pOwot ICAgICAgJHN5bWJvbF9tYXAgPSBNZXJnZVN5bWJvbHMoJHN5bWJvbF9tYXAsICRkYXRhMi0+e3N5 bWJvbHN9KTsKLSAgICB9Ci0gIH0KLQotICAjIFN1YnRyYWN0IGJhc2UgZnJvbSBwcm9maWxlLCBp ZiBzcGVjaWZpZWQKLSAgaWYgKCRtYWluOjpvcHRfYmFzZSBuZSAnJykgewotICAgIG15ICRiYXNl ID0gUmVhZFByb2ZpbGUoJG1haW46OnByb2csICRtYWluOjpvcHRfYmFzZSk7Ci0gICAgJHByb2Zp bGUgPSBTdWJ0cmFjdFByb2ZpbGUoJHByb2ZpbGUsICRiYXNlLT57cHJvZmlsZX0pOwotICAgICRw Y3MgPSBBZGRQY3MoJHBjcywgJGJhc2UtPntwY3N9KTsKLSAgICAkc3ltYm9sX21hcCA9IE1lcmdl U3ltYm9scygkc3ltYm9sX21hcCwgJGJhc2UtPntzeW1ib2xzfSk7Ci0gIH0KLQotICAjIENvbGxl Y3Qgc3ltYm9scwotICBteSAkc3ltYm9sczsKLSAgaWYgKCRtYWluOjp1c2Vfc3ltYm9saXplZF9w cm9maWxlKSB7Ci0gICAgJHN5bWJvbHMgPSBGZXRjaFN5bWJvbHMoJHBjcywgJHN5bWJvbF9tYXAp OwotICB9IGVsc2lmICgkbWFpbjo6dXNlX3N5bWJvbF9wYWdlKSB7Ci0gICAgJHN5bWJvbHMgPSBG ZXRjaFN5bWJvbHMoJHBjcyk7Ci0gIH0gZWxzZSB7Ci0gICAgIyBUT0RPKGNzaWx2ZXJzKTogJGxp YnMgdXNlcyB0aGUgL3Byb2Mvc2VsZi9tYXBzIGRhdGEgZnJvbSBwcm9maWxlMSwKLSAgICAjIHdo aWNoIG1heSBkaWZmZXIgZnJvbSB0aGUgZGF0YSBmcm9tIHN1YnNlcXVlbnQgcHJvZmlsZXMsIGVz cGVjaWFsbHkKLSAgICAjIGlmIHRoZXkgd2VyZSBydW4gb24gZGlmZmVyZW50IG1hY2hpbmVzLiAg VXNlIGFwcHJvcHJpYXRlIGxpYnMgZm9yCi0gICAgIyBlYWNoIHBjIHNvbWVob3cuCi0gICAgJHN5 bWJvbHMgPSBFeHRyYWN0U3ltYm9scygkbGlicywgJHBjcyk7Ci0gIH0KLQotICBpZiAoIWRlZmlu ZWQoJG1haW46Om9wdF90aHJlYWQpKSB7Ci0gICAgRmlsdGVyQW5kUHJpbnQoJHByb2ZpbGUsICRz eW1ib2xzLCAkbGlicyk7Ci0gIH0KLSAgaWYgKGRlZmluZWQoJGRhdGEtPnt0aHJlYWRzfSkpIHsK LSAgICBmb3JlYWNoIG15ICR0aHJlYWQgKHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzKCV7JGRhdGEt Pnt0aHJlYWRzfX0pKSB7Ci0gICAgICBpZiAoZGVmaW5lZCgkbWFpbjo6b3B0X3RocmVhZCkgJiYK LSAgICAgICAgICAoJG1haW46Om9wdF90aHJlYWQgZXEgJyonIHx8ICRtYWluOjpvcHRfdGhyZWFk ID09ICR0aHJlYWQpKSB7Ci0gICAgICAgIG15ICR0aHJlYWRfcHJvZmlsZSA9ICRkYXRhLT57dGhy ZWFkc317JHRocmVhZH07Ci0gICAgICAgIEZpbHRlckFuZFByaW50KCR0aHJlYWRfcHJvZmlsZSwg JHN5bWJvbHMsICRsaWJzLCAkdGhyZWFkKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBjbGVh bnVwKCk7Ci0gIGV4aXQoMCk7Ci19Ci0KLSMjIyMjIEVudHJ5IFBvaW50ICMjIyMjCi0KLU1haW4o KTsKLQotIyBUZW1wb3JhcnkgY29kZSB0byBkZXRlY3QgaWYgd2UncmUgcnVubmluZyBvbiBhIEdv b2J1bnR1IHN5c3RlbS4KLSMgVGhlc2Ugc3lzdGVtcyBkb24ndCBoYXZlIHRoZSByaWdodCBzdHVm ZiBpbnN0YWxsZWQgZm9yIHRoZSBzcGVjaWFsCi0jIFJlYWRsaW5lIGxpYnJhcmllcyB0byB3b3Jr LCBzbyBhcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLCB3ZSBkZWZhdWx0Ci0jIHRvIHVzaW5nIHRo ZSBub3JtYWwgc3RkaW8gY29kZSwgcmF0aGVyIHRoYW4gdGhlIGZhbmNpZXIgcmVhZGxpbmUtYmFz ZWQKLSMgY29kZQotc3ViIFJlYWRsaW5lTWlnaHRGYWlsIHsKLSAgaWYgKC1lICcvbGliL2xpYnRl cm1jYXAuc28uMicpIHsKLSAgICByZXR1cm4gMDsgICMgbGlidGVybWNhcCBleGlzdHMsIHNvIHJl YWRsaW5lIHNob3VsZCBiZSBva2F5Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLX0K LQotc3ViIFJ1bkdWIHsKLSAgbXkgJGZuYW1lID0gc2hpZnQ7Ci0gIG15ICRiZyA9IHNoaWZ0OyAg ICAgICAjICIiIG9yICIgJiIgaWYgd2Ugc2hvdWxkIHJ1biBpbiBiYWNrZ3JvdW5kCi0gIGlmICgh c3lzdGVtKFNoZWxsRXNjYXBlKEBHViwgIi0tdmVyc2lvbiIpIC4gIiA+JGRldl9udWxsIDI+JjEi KSkgewotICAgICMgT3B0aW9ucyB1c2luZyBkb3VibGUgZGFzaCBhcmUgc3VwcG9ydGVkIGJ5IHRo aXMgZ3YgdmVyc2lvbi4KLSAgICAjIEFsc28sIHR1cm4gb24gbm9hbnRpYWxpYXMgdG8gYmV0dGVy IGhhbmRsZSBidWcgaW4gZ3YgZm9yCi0gICAgIyBwb3N0c2NyaXB0IGZpbGVzIHdpdGggbGFyZ2Ug ZGltZW5zaW9ucy4KLSAgICAjIFRPRE86IE1heWJlIHdlIHNob3VsZCBub3QgcGFzcyB0aGUgLS1u b2FudGlhbGlhcyBmbGFnCi0gICAgIyBpZiB0aGUgZ3YgdmVyc2lvbiBpcyBrbm93biB0byB3b3Jr IHByb3Blcmx5IHdpdGhvdXQgdGhlIGZsYWcuCi0gICAgc3lzdGVtKFNoZWxsRXNjYXBlKEBHViwg Ii0tc2NhbGU9JG1haW46Om9wdF9zY2FsZSIsICItLW5vYW50aWFsaWFzIiwgJGZuYW1lKQotICAg ICAgICAgICAuICRiZyk7Ci0gIH0gZWxzZSB7Ci0gICAgIyBPbGQgZ3YgdmVyc2lvbiAtIG9ubHkg c3VwcG9ydHMgb3B0aW9ucyB0aGF0IHVzZSBzaW5nbGUgZGFzaC4KLSAgICBwcmludCBTVERFUlIg U2hlbGxFc2NhcGUoQEdWLCAiLXNjYWxlIiwgJG1haW46Om9wdF9zY2FsZSkgLiAiXG4iOwotICAg IHN5c3RlbShTaGVsbEVzY2FwZShAR1YsICItc2NhbGUiLCAiJG1haW46Om9wdF9zY2FsZSIsICRm bmFtZSkgLiAkYmcpOwotICB9Ci19Ci0KLXN1YiBSdW5FdmluY2UgewotICBteSAkZm5hbWUgPSBz aGlmdDsKLSAgbXkgJGJnID0gc2hpZnQ7ICAgICAgICMgIiIgb3IgIiAmIiBpZiB3ZSBzaG91bGQg cnVuIGluIGJhY2tncm91bmQKLSAgc3lzdGVtKFNoZWxsRXNjYXBlKEBFVklOQ0UsICRmbmFtZSkg LiAkYmcpOwotfQotCi1zdWIgUnVuV2ViIHsKLSAgbXkgJGZuYW1lID0gc2hpZnQ7Ci0gIHByaW50 IFNUREVSUiAiTG9hZGluZyB3ZWIgcGFnZSBmaWxlOi8vLyRmbmFtZVxuIjsKLQotICBpZiAoYHVu YW1lYCA9fiAvRGFyd2luLykgewotICAgICMgT1MgWDogb3BlbiB3aWxsIHVzZSBzdGFuZGFyZCBw cmVmZXJlbmNlIGZvciBTVkcgZmlsZXMuCi0gICAgc3lzdGVtKCIvdXNyL2Jpbi9vcGVuIiwgJGZu YW1lKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAjIFNvbWUga2luZCBvZiBVbml4OyB0cnkgZ2Vu ZXJpYyBzeW1saW5rcywgdGhlbiBzcGVjaWZpYyBicm93c2Vycy4KLSAgIyAoU3RvcCBvbmNlIHdl IGZpbmQgb25lLikKLSAgIyBXb3JrcyBiZXN0IGlmIHRoZSBicm93c2VyIGlzIGFscmVhZHkgcnVu bmluZy4KLSAgbXkgQGFsdCA9ICgKLSAgICAiL2V0Yy9hbHRlcm5hdGl2ZXMvZ25vbWUtd3d3LWJy b3dzZXIiLAotICAgICIvZXRjL2FsdGVybmF0aXZlcy94LXd3dy1icm93c2VyIiwKLSAgICAiZ29v Z2xlLWNocm9tZSIsCi0gICAgImZpcmVmb3giLAotICApOwotICBmb3JlYWNoIG15ICRiIChAYWx0 KSB7Ci0gICAgaWYgKHN5c3RlbSgkYiwgJGZuYW1lKSA9PSAwKSB7Ci0gICAgICByZXR1cm47Ci0g ICAgfQotICB9Ci0KLSAgcHJpbnQgU1RERVJSICJDb3VsZCBub3QgbG9hZCB3ZWIgYnJvd3Nlci5c biI7Ci19Ci0KLXN1YiBSdW5LY2FjaGVncmluZCB7Ci0gIG15ICRmbmFtZSA9IHNoaWZ0OwotICBt eSAkYmcgPSBzaGlmdDsgICAgICAgIyAiIiBvciAiICYiIGlmIHdlIHNob3VsZCBydW4gaW4gYmFj a2dyb3VuZAotICBwcmludCBTVERFUlIgIlN0YXJ0aW5nICdAS0NBQ0hFR1JJTkQgIiAuICRmbmFt ZSAuICRiZyAuICInXG4iOwotICBzeXN0ZW0oU2hlbGxFc2NhcGUoQEtDQUNIRUdSSU5ELCAkZm5h bWUpIC4gJGJnKTsKLX0KLQotCi0jIyMjIyBJbnRlcmFjdGl2ZSBoZWxwZXIgcm91dGluZXMgIyMj IyMKLQotc3ViIEludGVyYWN0aXZlTW9kZSB7Ci0gICR8ID0gMTsgICMgTWFrZSBvdXRwdXQgdW5i dWZmZXJlZCBmb3IgaW50ZXJhY3RpdmUgbW9kZQotICBteSAoJG9yaWdfcHJvZmlsZSwgJHN5bWJv bHMsICRsaWJzLCAkdG90YWwpID0gQF87Ci0KLSAgcHJpbnQgU1RERVJSICJXZWxjb21lIHRvIGpl cHJvZiEgIEZvciBoZWxwLCB0eXBlICdoZWxwJy5cbiI7Ci0KLSAgIyBVc2UgUmVhZExpbmUgaWYg aXQncyBpbnN0YWxsZWQgYW5kIGlucHV0IGNvbWVzIGZyb20gYSBjb25zb2xlLgotICBpZiAoIC10 IFNURElOICYmCi0gICAgICAgIVJlYWRsaW5lTWlnaHRGYWlsKCkgJiYKLSAgICAgICBkZWZpbmVk KGV2YWwge3JlcXVpcmUgVGVybTo6UmVhZExpbmV9KSApIHsKLSAgICBteSAkdGVybSA9IG5ldyBU ZXJtOjpSZWFkTGluZSAnamVwcm9mJzsKLSAgICB3aGlsZSAoIGRlZmluZWQgKCRfID0gJHRlcm0t PnJlYWRsaW5lKCcoamVwcm9mKSAnKSkpIHsKLSAgICAgICR0ZXJtLT5hZGRoaXN0b3J5KCRfKSBp ZiAvXFMvOwotICAgICAgaWYgKCFJbnRlcmFjdGl2ZUNvbW1hbmQoJG9yaWdfcHJvZmlsZSwgJHN5 bWJvbHMsICRsaWJzLCAkdG90YWwsICRfKSkgewotICAgICAgICBsYXN0OyAgICAjIGV4aXQgd2hl biB3ZSBnZXQgYW4gaW50ZXJhY3RpdmUgY29tbWFuZCB0byBxdWl0Ci0gICAgICB9Ci0gICAgfQot ICB9IGVsc2UgeyAgICAgICAjIGRvbid0IGhhdmUgcmVhZGxpbmUKLSAgICB3aGlsZSAoMSkgewot ICAgICAgcHJpbnQgU1RERVJSICIoamVwcm9mKSAiOwotICAgICAgJF8gPSA8U1RESU4+OwotICAg ICAgbGFzdCBpZiAhIGRlZmluZWQgJF8gOwotICAgICAgcy9cci8vZzsgICAgICAgICAjIHR1cm4g d2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCi0KLSAgICAgICMg U2F2ZSBzb21lIGZsYWdzIHRoYXQgbWlnaHQgYmUgcmVzZXQgYnkgSW50ZXJhY3RpdmVDb21tYW5k KCkKLSAgICAgIG15ICRzYXZlX29wdF9saW5lcyA9ICRtYWluOjpvcHRfbGluZXM7Ci0KLSAgICAg IGlmICghSW50ZXJhY3RpdmVDb21tYW5kKCRvcmlnX3Byb2ZpbGUsICRzeW1ib2xzLCAkbGlicywg JHRvdGFsLCAkXykpIHsKLSAgICAgICAgbGFzdDsgICAgIyBleGl0IHdoZW4gd2UgZ2V0IGFuIGlu dGVyYWN0aXZlIGNvbW1hbmQgdG8gcXVpdAotICAgICAgfQotCi0gICAgICAjIFJlc3RvcmUgZmxh Z3MKLSAgICAgICRtYWluOjpvcHRfbGluZXMgPSAkc2F2ZV9vcHRfbGluZXM7Ci0gICAgfQotICB9 Ci19Ci0KLSMgVGFrZXMgdHdvIGFyZ3M6IG9yaWcgcHJvZmlsZSwgYW5kIGNvbW1hbmQgdG8gcnVu LgotIyBSZXR1cm5zIDEgaWYgd2Ugc2hvdWxkIGtlZXAgZ29pbmcsIG9yIDAgaWYgd2Ugd2VyZSBh c2tlZCB0byBxdWl0Ci1zdWIgSW50ZXJhY3RpdmVDb21tYW5kIHsKLSAgbXkoJG9yaWdfcHJvZmls ZSwgJHN5bWJvbHMsICRsaWJzLCAkdG90YWwsICRjb21tYW5kKSA9IEBfOwotICAkXyA9ICRjb21t YW5kOyAgICAgICAgICAgICAgICAjIGp1c3QgdG8gbWFrZSBmdXR1cmUgbS8vJ3MgZWFzaWVyCi0g IGlmICghZGVmaW5lZCgkXykpIHsKLSAgICBwcmludCBTVERFUlIgIlxuIjsKLSAgICByZXR1cm4g MDsKLSAgfQotICBpZiAobS9eXHMqcXVpdC8pIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAo bS9eXHMqaGVscC8pIHsKLSAgICBJbnRlcmFjdGl2ZUhlbHBNZXNzYWdlKCk7Ci0gICAgcmV0dXJu IDE7Ci0gIH0KLSAgIyBDbGVhciBhbGwgdGhlIG1vZGUgb3B0aW9ucyAtLSBtb2RlIGlzIGNvbnRy b2xsZWQgYnkgIiRjb21tYW5kIgotICAkbWFpbjo6b3B0X3RleHQgPSAwOwotICAkbWFpbjo6b3B0 X2NhbGxncmluZCA9IDA7Ci0gICRtYWluOjpvcHRfZGlzYXNtID0gMDsKLSAgJG1haW46Om9wdF9s aXN0ID0gMDsKLSAgJG1haW46Om9wdF9ndiA9IDA7Ci0gICRtYWluOjpvcHRfZXZpbmNlID0gMDsK LSAgJG1haW46Om9wdF9jdW0gPSAwOwotCi0gIGlmIChtL15ccyoodGV4dHx0b3ApKFxkKilccyoo LiopLykgewotICAgICRtYWluOjpvcHRfdGV4dCA9IDE7Ci0KLSAgICBteSAkbGluZV9saW1pdCA9 ICgkMiBuZSAiIikgPyBpbnQoJDIpIDogMTA7Ci0KLSAgICBteSAkcm91dGluZTsKLSAgICBteSAk aWdub3JlOwotICAgICgkcm91dGluZSwgJGlnbm9yZSkgPSBQYXJzZUludGVyYWN0aXZlQXJncygk Myk7Ci0KLSAgICBteSAkcHJvZmlsZSA9IFByb2Nlc3NQcm9maWxlKCR0b3RhbCwgJG9yaWdfcHJv ZmlsZSwgJHN5bWJvbHMsICIiLCAkaWdub3JlKTsKLSAgICBteSAkcmVkdWNlZCA9IFJlZHVjZVBy b2ZpbGUoJHN5bWJvbHMsICRwcm9maWxlKTsKLQotICAgICMgR2V0IGRlcml2ZWQgcHJvZmlsZXMK LSAgICBteSAkZmxhdCA9IEZsYXRQcm9maWxlKCRyZWR1Y2VkKTsKLSAgICBteSAkY3VtdWxhdGl2 ZSA9IEN1bXVsYXRpdmVQcm9maWxlKCRyZWR1Y2VkKTsKLQotICAgIFByaW50VGV4dCgkc3ltYm9s cywgJGZsYXQsICRjdW11bGF0aXZlLCAkbGluZV9saW1pdCk7Ci0gICAgcmV0dXJuIDE7Ci0gIH0K LSAgaWYgKG0vXlxzKmNhbGxncmluZFxzKihbXiBcbl0qKS8pIHsKLSAgICAkbWFpbjo6b3B0X2Nh bGxncmluZCA9IDE7Ci0KLSAgICAjIEdldCBkZXJpdmVkIHByb2ZpbGVzCi0gICAgbXkgJGNhbGxz ID0gRXh0cmFjdENhbGxzKCRzeW1ib2xzLCAkb3JpZ19wcm9maWxlKTsKLSAgICBteSAkZmlsZW5h bWUgPSAkMTsKLSAgICBpZiAoICQxIGVxICcnICkgewotICAgICAgJGZpbGVuYW1lID0gVGVtcE5h bWUoJG1haW46Om5leHRfdG1wZmlsZSwgImNhbGxncmluZCIpOwotICAgIH0KLSAgICBQcmludENh bGxncmluZCgkY2FsbHMsICRmaWxlbmFtZSk7Ci0gICAgaWYgKCAkMSBlcSAnJyApIHsKLSAgICAg IFJ1bktjYWNoZWdyaW5kKCRmaWxlbmFtZSwgIiAmICIpOwotICAgICAgJG1haW46Om5leHRfdG1w ZmlsZSsrOwotICAgIH0KLQotICAgIHJldHVybiAxOwotICB9Ci0gIGlmIChtL15ccyood2ViKT9s aXN0XHMqKC4rKS8pIHsKLSAgICBteSAkaHRtbCA9IChkZWZpbmVkKCQxKSAmJiAoJDEgZXEgIndl YiIpKTsKLSAgICAkbWFpbjo6b3B0X2xpc3QgPSAxOwotCi0gICAgbXkgJHJvdXRpbmU7Ci0gICAg bXkgJGlnbm9yZTsKLSAgICAoJHJvdXRpbmUsICRpZ25vcmUpID0gUGFyc2VJbnRlcmFjdGl2ZUFy Z3MoJDIpOwotCi0gICAgbXkgJHByb2ZpbGUgPSBQcm9jZXNzUHJvZmlsZSgkdG90YWwsICRvcmln X3Byb2ZpbGUsICRzeW1ib2xzLCAiIiwgJGlnbm9yZSk7Ci0gICAgbXkgJHJlZHVjZWQgPSBSZWR1 Y2VQcm9maWxlKCRzeW1ib2xzLCAkcHJvZmlsZSk7Ci0KLSAgICAjIEdldCBkZXJpdmVkIHByb2Zp bGVzCi0gICAgbXkgJGZsYXQgPSBGbGF0UHJvZmlsZSgkcmVkdWNlZCk7Ci0gICAgbXkgJGN1bXVs YXRpdmUgPSBDdW11bGF0aXZlUHJvZmlsZSgkcmVkdWNlZCk7Ci0KLSAgICBQcmludExpc3Rpbmco JHRvdGFsLCAkbGlicywgJGZsYXQsICRjdW11bGF0aXZlLCAkcm91dGluZSwgJGh0bWwpOwotICAg IHJldHVybiAxOwotICB9Ci0gIGlmIChtL15ccypkaXNhc21ccyooLispLykgewotICAgICRtYWlu OjpvcHRfZGlzYXNtID0gMTsKLQotICAgIG15ICRyb3V0aW5lOwotICAgIG15ICRpZ25vcmU7Ci0g ICAgKCRyb3V0aW5lLCAkaWdub3JlKSA9IFBhcnNlSW50ZXJhY3RpdmVBcmdzKCQxKTsKLQotICAg ICMgUHJvY2VzcyBjdXJyZW50IHByb2ZpbGUgdG8gYWNjb3VudCBmb3IgdmFyaW91cyBzZXR0aW5n cwotICAgIG15ICRwcm9maWxlID0gUHJvY2Vzc1Byb2ZpbGUoJHRvdGFsLCAkb3JpZ19wcm9maWxl LCAkc3ltYm9scywgIiIsICRpZ25vcmUpOwotICAgIG15ICRyZWR1Y2VkID0gUmVkdWNlUHJvZmls ZSgkc3ltYm9scywgJHByb2ZpbGUpOwotCi0gICAgIyBHZXQgZGVyaXZlZCBwcm9maWxlcwotICAg IG15ICRmbGF0ID0gRmxhdFByb2ZpbGUoJHJlZHVjZWQpOwotICAgIG15ICRjdW11bGF0aXZlID0g Q3VtdWxhdGl2ZVByb2ZpbGUoJHJlZHVjZWQpOwotCi0gICAgUHJpbnREaXNhc3NlbWJseSgkbGli cywgJGZsYXQsICRjdW11bGF0aXZlLCAkcm91dGluZSk7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLSAg aWYgKG0vXlxzKihndnx3ZWJ8ZXZpbmNlKVxzKiguKikvKSB7Ci0gICAgJG1haW46Om9wdF9ndiA9 IDA7Ci0gICAgJG1haW46Om9wdF9ldmluY2UgPSAwOwotICAgICRtYWluOjpvcHRfd2ViID0gMDsK LSAgICBpZiAoJDEgZXEgImd2IikgewotICAgICAgJG1haW46Om9wdF9ndiA9IDE7Ci0gICAgfSBl bHNpZiAoJDEgZXEgImV2aW5jZSIpIHsKLSAgICAgICRtYWluOjpvcHRfZXZpbmNlID0gMTsKLSAg ICB9IGVsc2lmICgkMSBlcSAid2ViIikgewotICAgICAgJG1haW46Om9wdF93ZWIgPSAxOwotICAg IH0KLQotICAgIG15ICRmb2N1czsKLSAgICBteSAkaWdub3JlOwotICAgICgkZm9jdXMsICRpZ25v cmUpID0gUGFyc2VJbnRlcmFjdGl2ZUFyZ3MoJDIpOwotCi0gICAgIyBQcm9jZXNzIGN1cnJlbnQg cHJvZmlsZSB0byBhY2NvdW50IGZvciB2YXJpb3VzIHNldHRpbmdzCi0gICAgbXkgJHByb2ZpbGUg PSBQcm9jZXNzUHJvZmlsZSgkdG90YWwsICRvcmlnX3Byb2ZpbGUsICRzeW1ib2xzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZvY3VzLCAkaWdub3JlKTsKLSAgICBteSAkcmVk dWNlZCA9IFJlZHVjZVByb2ZpbGUoJHN5bWJvbHMsICRwcm9maWxlKTsKLQotICAgICMgR2V0IGRl cml2ZWQgcHJvZmlsZXMKLSAgICBteSAkZmxhdCA9IEZsYXRQcm9maWxlKCRyZWR1Y2VkKTsKLSAg ICBteSAkY3VtdWxhdGl2ZSA9IEN1bXVsYXRpdmVQcm9maWxlKCRyZWR1Y2VkKTsKLQotICAgIGlm IChQcmludERvdCgkbWFpbjo6cHJvZywgJHN5bWJvbHMsICRwcm9maWxlLCAkZmxhdCwgJGN1bXVs YXRpdmUsICR0b3RhbCkpIHsKLSAgICAgIGlmICgkbWFpbjo6b3B0X2d2KSB7Ci0gICAgICAgIFJ1 bkdWKFRlbXBOYW1lKCRtYWluOjpuZXh0X3RtcGZpbGUsICJwcyIpLCAiICYiKTsKLSAgICAgIH0g ZWxzaWYgKCRtYWluOjpvcHRfZXZpbmNlKSB7Ci0gICAgICAgIFJ1bkV2aW5jZShUZW1wTmFtZSgk bWFpbjo6bmV4dF90bXBmaWxlLCAicGRmIiksICIgJiIpOwotICAgICAgfSBlbHNpZiAoJG1haW46 Om9wdF93ZWIpIHsKLSAgICAgICAgUnVuV2ViKFRlbXBOYW1lKCRtYWluOjpuZXh0X3RtcGZpbGUs ICJzdmciKSk7Ci0gICAgICB9Ci0gICAgICAkbWFpbjo6bmV4dF90bXBmaWxlKys7Ci0gICAgfQot ICAgIHJldHVybiAxOwotICB9Ci0gIGlmIChtL15ccyokLykgewotICAgIHJldHVybiAxOwotICB9 Ci0gIHByaW50IFNUREVSUiAiVW5rbm93biBjb21tYW5kOiB0cnkgJ2hlbHAnLlxuIjsKLSAgcmV0 dXJuIDE7Ci19Ci0KLQotc3ViIFByb2Nlc3NQcm9maWxlIHsKLSAgbXkgJHRvdGFsX2NvdW50ID0g c2hpZnQ7Ci0gIG15ICRvcmlnX3Byb2ZpbGUgPSBzaGlmdDsKLSAgbXkgJHN5bWJvbHMgPSBzaGlm dDsKLSAgbXkgJGZvY3VzID0gc2hpZnQ7Ci0gIG15ICRpZ25vcmUgPSBzaGlmdDsKLQotICAjIFBy b2Nlc3MgY3VycmVudCBwcm9maWxlIHRvIGFjY291bnQgZm9yIHZhcmlvdXMgc2V0dGluZ3MKLSAg bXkgJHByb2ZpbGUgPSAkb3JpZ19wcm9maWxlOwotICBwcmludGYoIlRvdGFsOiAlcyAlc1xuIiwg VW5wYXJzZSgkdG90YWxfY291bnQpLCBVbml0cygpKTsKLSAgaWYgKCRmb2N1cyBuZSAnJykgewot ICAgICRwcm9maWxlID0gRm9jdXNQcm9maWxlKCRzeW1ib2xzLCAkcHJvZmlsZSwgJGZvY3VzKTsK LSAgICBteSAkZm9jdXNfY291bnQgPSBUb3RhbFByb2ZpbGUoJHByb2ZpbGUpOwotICAgIHByaW50 ZigiQWZ0ZXIgZm9jdXNpbmcgb24gJyVzJzogJXMgJXMgb2YgJXMgKCUwLjFmJSUpXG4iLAotICAg ICAgICAgICAkZm9jdXMsCi0gICAgICAgICAgIFVucGFyc2UoJGZvY3VzX2NvdW50KSwgVW5pdHMo KSwKLSAgICAgICAgICAgVW5wYXJzZSgkdG90YWxfY291bnQpLCAoJGZvY3VzX2NvdW50KjEwMC4w KSAvICR0b3RhbF9jb3VudCk7Ci0gIH0KLSAgaWYgKCRpZ25vcmUgbmUgJycpIHsKLSAgICAkcHJv ZmlsZSA9IElnbm9yZVByb2ZpbGUoJHN5bWJvbHMsICRwcm9maWxlLCAkaWdub3JlKTsKLSAgICBt eSAkaWdub3JlX2NvdW50ID0gVG90YWxQcm9maWxlKCRwcm9maWxlKTsKLSAgICBwcmludGYoIkFm dGVyIGlnbm9yaW5nICclcyc6ICVzICVzIG9mICVzICglMC4xZiUlKVxuIiwKLSAgICAgICAgICAg JGlnbm9yZSwKLSAgICAgICAgICAgVW5wYXJzZSgkaWdub3JlX2NvdW50KSwgVW5pdHMoKSwKLSAg ICAgICAgICAgVW5wYXJzZSgkdG90YWxfY291bnQpLAotICAgICAgICAgICAoJGlnbm9yZV9jb3Vu dCoxMDAuMCkgLyAkdG90YWxfY291bnQpOwotICB9Ci0KLSAgcmV0dXJuICRwcm9maWxlOwotfQot Ci1zdWIgSW50ZXJhY3RpdmVIZWxwTWVzc2FnZSB7Ci0gIHByaW50IFNUREVSUiA8PEVORE9GSEVM UDsKLUludGVyYWN0aXZlIGplcHJvZiBtb2RlCi0KLUNvbW1hbmRzOgotICBndgotICBndiBbZm9j dXNdIFstaWdub3JlMV0gWy1pZ25vcmUyXQotICAgICAgU2hvdyBncmFwaGljYWwgaGllcmFyY2hp Y2FsIGRpc3BsYXkgb2YgY3VycmVudCBwcm9maWxlLiAgV2l0aG91dAotICAgICAgYW55IGFyZ3Vt ZW50cywgc2hvd3MgYWxsIHNhbXBsZXMgaW4gdGhlIHByb2ZpbGUuICBXaXRoIHRoZSBvcHRpb25h bAotICAgICAgImZvY3VzIiBhcmd1bWVudCwgcmVzdHJpY3RzIHRoZSBzYW1wbGVzIHNob3duIHRv IGp1c3QgdGhvc2Ugd2hlcmUKLSAgICAgIHRoZSAiZm9jdXMiIHJlZ3VsYXIgZXhwcmVzc2lvbiBt YXRjaGVzIGEgcm91dGluZSBuYW1lIG9uIHRoZSBzdGFjawotICAgICAgdHJhY2UuCi0KLSAgd2Vi Ci0gIHdlYiBbZm9jdXNdIFstaWdub3JlMV0gWy1pZ25vcmUyXQotICAgICAgTGlrZSBHViwgYnV0 IGRpc3BsYXlzIHByb2ZpbGUgaW4geW91ciB3ZWIgYnJvd3NlciBpbnN0ZWFkIG9mIHVzaW5nCi0g ICAgICBHaG9zdHZpZXcuIFdvcmtzIGJlc3QgaWYgeW91ciB3ZWIgYnJvd3NlciBpcyBhbHJlYWR5 IHJ1bm5pbmcuCi0gICAgICBUbyBjaGFuZ2UgdGhlIGJyb3dzZXIgdGhhdCBnZXRzIHVzZWQ6Ci0g ICAgICBPbiBMaW51eCwgc2V0IHRoZSAvZXRjL2FsdGVybmF0aXZlcy9nbm9tZS13d3ctYnJvd3Nl ciBzeW1saW5rLgotICAgICAgT24gT1MgWCwgY2hhbmdlIHRoZSBGaW5kZXIgYXNzb2NpYXRpb24g Zm9yIFNWRyBmaWxlcy4KLQotICBsaXN0IFtyb3V0aW5lX3JlZ2V4cF0gWy1pZ25vcmUxXSBbLWln bm9yZTJdCi0gICAgICBTaG93IHNvdXJjZSBsaXN0aW5nIG9mIHJvdXRpbmVzIHdob3NlIG5hbWVz IG1hdGNoICJyb3V0aW5lX3JlZ2V4cCIKLQotICB3ZWJsaXN0IFtyb3V0aW5lX3JlZ2V4cF0gWy1p Z25vcmUxXSBbLWlnbm9yZTJdCi0gICAgIERpc3BsYXlzIGEgc291cmNlIGxpc3Rpbmcgb2Ygcm91 dGluZXMgd2hvc2UgbmFtZXMgbWF0Y2ggInJvdXRpbmVfcmVnZXhwIgotICAgICBpbiBhIHdlYiBi cm93c2VyLiAgWW91IGNhbiBjbGljayBvbiBzb3VyY2UgbGluZXMgdG8gdmlldyB0aGUKLSAgICAg Y29ycmVzcG9uZGluZyBkaXNhc3NlbWJseS4KLQotICB0b3AgWy0tY3VtXSBbLWlnbm9yZTFdIFst aWdub3JlMl0KLSAgdG9wMjAgWy0tY3VtXSBbLWlnbm9yZTFdIFstaWdub3JlMl0KLSAgdG9wMzcg Wy0tY3VtXSBbLWlnbm9yZTFdIFstaWdub3JlMl0KLSAgICAgIFNob3cgdG9wIGxpbmVzIG9yZGVy ZWQgYnkgZmxhdCBwcm9maWxlIGNvdW50LCBvciBjdW11bGF0aXZlIGNvdW50Ci0gICAgICBpZiAt LWN1bSBpcyBzcGVjaWZpZWQuICBJZiBhIG51bWJlciBpcyBwcmVzZW50IGFmdGVyICd0b3AnLCB0 aGUKLSAgICAgIHRvcCBLIHJvdXRpbmVzIHdpbGwgYmUgc2hvd24gKGRlZmF1bHRzIHRvIHNob3dp bmcgdGhlIHRvcCAxMCkKLQotICBkaXNhc20gW3JvdXRpbmVfcmVnZXhwXSBbLWlnbm9yZTFdIFst aWdub3JlMl0KLSAgICAgIFNob3cgZGlzYXNzZW1ibHkgb2Ygcm91dGluZXMgd2hvc2UgbmFtZXMg bWF0Y2ggInJvdXRpbmVfcmVnZXhwIiwKLSAgICAgIGFubm90YXRlZCB3aXRoIHNhbXBsZSBjb3Vu dHMuCi0KLSAgY2FsbGdyaW5kCi0gIGNhbGxncmluZCBbZmlsZW5hbWVdCi0gICAgICBHZW5lcmF0 ZXMgY2FsbGdyaW5kIGZpbGUuIElmIG5vIGZpbGVuYW1lIGlzIGdpdmVuLCBrY2FjaGVncmluZCBp cyBjYWxsZWQuCi0KLSAgaGVscCAtIFRoaXMgbGlzdGluZwotICBxdWl0IG9yIF5EIC0gRW5kIGpl cHJvZgotCi1Gb3IgY29tbWFuZHMgdGhhdCBhY2NlcHQgb3B0aW9uYWwgLWlnbm9yZSB0YWdzLCBz YW1wbGVzIHdoZXJlIGFueSByb3V0aW5lIGluCi10aGUgc3RhY2sgdHJhY2UgbWF0Y2hlcyB0aGUg cmVndWxhciBleHByZXNzaW9uIGluIGFueSBvZiB0aGUgLWlnbm9yZQotcGFyYW1ldGVycyB3aWxs IGJlIGlnbm9yZWQuCi0KLUZ1cnRoZXIgcHByb2YgZGV0YWlscyBhcmUgYXZhaWxhYmxlIGF0IHRo aXMgbG9jYXRpb24gKG9yIG9uZSBzaW1pbGFyKToKLQotIC91c3IvZG9jL2dwZXJmdG9vbHMtJFBQ Uk9GX1ZFUlNJT04vY3B1X3Byb2ZpbGVyLmh0bWwKLSAvdXNyL2RvYy9ncGVyZnRvb2xzLSRQUFJP Rl9WRVJTSU9OL2hlYXBfcHJvZmlsZXIuaHRtbAotCi1FTkRPRkhFTFAKLX0KLXN1YiBQYXJzZUlu dGVyYWN0aXZlQXJncyB7Ci0gIG15ICRhcmdzID0gc2hpZnQ7Ci0gIG15ICRmb2N1cyA9ICIiOwot ICBteSAkaWdub3JlID0gIiI7Ci0gIG15IEB4ID0gc3BsaXQoLyArLywgJGFyZ3MpOwotICBmb3Jl YWNoICRhIChAeCkgewotICAgIGlmICgkYSA9fiBtL14oLS18LSlsaW5lcyQvKSB7Ci0gICAgICAk bWFpbjo6b3B0X2xpbmVzID0gMTsKLSAgICB9IGVsc2lmICgkYSA9fiBtL14oLS18LSljdW0kLykg ewotICAgICAgJG1haW46Om9wdF9jdW0gPSAxOwotICAgIH0gZWxzaWYgKCRhID1+IG0vXi0oLiop LykgewotICAgICAgJGlnbm9yZSAuPSAoKCRpZ25vcmUgbmUgIiIpID8gInwiIDogIiIgKSAuICQx OwotICAgIH0gZWxzZSB7Ci0gICAgICAkZm9jdXMgLj0gKCgkZm9jdXMgbmUgIiIpID8gInwiIDog IiIgKSAuICRhOwotICAgIH0KLSAgfQotICBpZiAoJGlnbm9yZSBuZSAiIikgewotICAgIHByaW50 IFNUREVSUiAiSWdub3Jpbmcgc2FtcGxlcyBpbiBjYWxsIHN0YWNrcyB0aGF0IG1hdGNoICckaWdu b3JlJ1xuIjsKLSAgfQotICByZXR1cm4gKCRmb2N1cywgJGlnbm9yZSk7Ci19Ci0KLSMjIyMjIE91 dHB1dCBjb2RlICMjIyMjCi0KLXN1YiBUZW1wTmFtZSB7Ci0gIG15ICRmbnVtID0gc2hpZnQ7Ci0g IG15ICRleHQgPSBzaGlmdDsKLSAgbXkgJGZpbGUgPSAiJG1haW46OnRtcGZpbGVfcHMuJGZudW0u JGV4dCI7Ci0gICRtYWluOjp0ZW1wbmFtZXN7JGZpbGV9ID0gMTsKLSAgcmV0dXJuICRmaWxlOwot fQotCi0jIFByaW50IHByb2ZpbGUgZGF0YSBpbiBwYWNrZWQgYmluYXJ5IGZvcm1hdCAoNjQtYml0 KSB0byBzdGFuZGFyZCBvdXQKLXN1YiBQcmludFByb2ZpbGVEYXRhIHsKLSAgbXkgJHByb2ZpbGUg PSBzaGlmdDsKLQotICAjIHByaW50IGhlYWRlciAoNjQtYml0IHN0eWxlKQotICAjICh6ZXJvKSAo aGVhZGVyLXNpemUpICh2ZXJzaW9uKSAoc2FtcGxlLXBlcmlvZCkgKHplcm8pCi0gIHByaW50IHBh Y2soJ0wqJywgMCwgMCwgMywgMCwgMCwgMCwgMSwgMCwgMCwgMCk7Ci0KLSAgZm9yZWFjaCBteSAk ayAoa2V5cygleyRwcm9maWxlfSkpIHsKLSAgICBteSAkY291bnQgPSAkcHJvZmlsZS0+eyRrfTsK LSAgICBteSBAYWRkcnMgPSBzcGxpdCgvXG4vLCAkayk7Ci0gICAgaWYgKCQjYWRkcnMgPj0gMCkg ewotICAgICAgbXkgJGRlcHRoID0gJCNhZGRycyArIDE7Ci0gICAgICAjIGludChmb28gLyAyKioz MikgaXMgdGhlIG9ubHkgcmVsaWFibGUgd2F5IHRvIGdldCByaWQgb2YgYm90dG9tCi0gICAgICAj IDMyIGJpdHMgb24gYm90aCAzMi0gYW5kIDY0LWJpdCBzeXN0ZW1zLgotICAgICAgcHJpbnQgcGFj aygnTConLCAkY291bnQgJiAweEZGRkZGRkZGLCBpbnQoJGNvdW50IC8gMioqMzIpKTsKLSAgICAg IHByaW50IHBhY2soJ0wqJywgJGRlcHRoICYgMHhGRkZGRkZGRiwgaW50KCRkZXB0aCAvIDIqKjMy KSk7Ci0KLSAgICAgIGZvcmVhY2ggbXkgJGZ1bGxfYWRkciAoQGFkZHJzKSB7Ci0gICAgICAgIG15 ICRhZGRyID0gJGZ1bGxfYWRkcjsKLSAgICAgICAgJGFkZHIgPX4gcy8weDAqLy87ICAjIHN0cmlw IG9mZiBsZWFkaW5nIDB4LCB6ZXJvZXMKLSAgICAgICAgaWYgKGxlbmd0aCgkYWRkcikgPiAxNikg ewotICAgICAgICAgIHByaW50IFNUREVSUiAiSW52YWxpZCBhZGRyZXNzIGluIHByb2ZpbGU6ICRm dWxsX2FkZHJcbiI7Ci0gICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotICAgICAgICBteSAkbG93 X2FkZHIgPSBzdWJzdHIoJGFkZHIsIC04KTsgICAgICAgIyBnZXQgbGFzdCA4IGhleCBjaGFycwot ICAgICAgICBteSAkaGlnaF9hZGRyID0gc3Vic3RyKCRhZGRyLCAtMTYsIDgpOyAgIyBnZXQgdXAg dG8gOCBtb3JlIGhleCBjaGFycwotICAgICAgICBwcmludCBwYWNrKCdMKicsIGhleCgnMHgnIC4g JGxvd19hZGRyKSwgaGV4KCcweCcgLiAkaGlnaF9hZGRyKSk7Ci0gICAgICB9Ci0gICAgfQotICB9 Ci19Ci0KLSMgUHJpbnQgc3ltYm9scyBhbmQgcHJvZmlsZSBkYXRhCi1zdWIgUHJpbnRTeW1ib2xp emVkUHJvZmlsZSB7Ci0gIG15ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRwcm9maWxlID0gc2hp ZnQ7Ci0gIG15ICRwcm9nID0gc2hpZnQ7Ci0KLSAgJFNZTUJPTF9QQUdFID1+IG0sW14vXSskLDsg ICAgIyBtYXRjaGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2gKLSAgbXkgJHN5bWJv bF9tYXJrZXIgPSAkJjsKLQotICBwcmludCAnLS0tICcsICRzeW1ib2xfbWFya2VyLCAiXG4iOwot ICBpZiAoZGVmaW5lZCgkcHJvZykpIHsKLSAgICBwcmludCAnYmluYXJ5PScsICRwcm9nLCAiXG4i OwotICB9Ci0gIHdoaWxlIChteSAoJHBjLCAkbmFtZSkgPSBlYWNoKCV7JHN5bWJvbHN9KSkgewot ICAgIG15ICRzZXAgPSAnICc7Ci0gICAgcHJpbnQgJzB4JywgJHBjOwotICAgICMgV2UgaGF2ZSBh IGxpc3Qgb2YgZnVuY3Rpb24gbmFtZXMsIHdoaWNoIGluY2x1ZGUgdGhlIGlubGluZWQKLSAgICAj IGNhbGxzLiAgVGhleSBhcmUgc2VwYXJhdGVkIChhbmQgdGVybWluYXRlZCkgYnkgLS0sIHdoaWNo IGlzCi0gICAgIyBpbGxlZ2FsIGluIGZ1bmN0aW9uIG5hbWVzLgotICAgIGZvciAobXkgJGogPSAy OyAkaiA8PSAkI3skbmFtZX07ICRqICs9IDMpIHsKLSAgICAgIHByaW50ICRzZXAsICRuYW1lLT5b JGpdOwotICAgICAgJHNlcCA9ICctLSc7Ci0gICAgfQotICAgIHByaW50ICJcbiI7Ci0gIH0KLSAg cHJpbnQgJy0tLScsICJcbiI7Ci0KLSAgbXkgJHByb2ZpbGVfbWFya2VyOwotICBpZiAoJG1haW46 OnByb2ZpbGVfdHlwZSBlcSAnaGVhcCcpIHsKLSAgICAkSEVBUF9QQUdFID1+IG0sW14vXSskLDsg ICAgIyBtYXRjaGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2gKLSAgICAkcHJvZmls ZV9tYXJrZXIgPSAkJjsKLSAgfSBlbHNpZiAoJG1haW46OnByb2ZpbGVfdHlwZSBlcSAnZ3Jvd3Ro JykgewotICAgICRHUk9XVEhfUEFHRSA9fiBtLFteL10rJCw7ICAgICMgbWF0Y2hlcyBldmVyeXRo aW5nIGFmdGVyIHRoZSBsYXN0IHNsYXNoCi0gICAgJHByb2ZpbGVfbWFya2VyID0gJCY7Ci0gIH0g ZWxzaWYgKCRtYWluOjpwcm9maWxlX3R5cGUgZXEgJ2NvbnRlbnRpb24nKSB7Ci0gICAgJENPTlRF TlRJT05fUEFHRSA9fiBtLFteL10rJCw7ICAgICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFmdGVyIHRo ZSBsYXN0IHNsYXNoCi0gICAgJHByb2ZpbGVfbWFya2VyID0gJCY7Ci0gIH0gZWxzZSB7ICMgZWxz aWYgKCRtYWluOjpwcm9maWxlX3R5cGUgZXEgJ2NwdScpCi0gICAgJFBST0ZJTEVfUEFHRSA9fiBt LFteL10rJCw7ICAgICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IHNsYXNoCi0g ICAgJHByb2ZpbGVfbWFya2VyID0gJCY7Ci0gIH0KLQotICBwcmludCAnLS0tICcsICRwcm9maWxl X21hcmtlciwgIlxuIjsKLSAgaWYgKGRlZmluZWQoJG1haW46OmNvbGxlY3RlZF9wcm9maWxlKSkg ewotICAgICMgaWYgdXNlZCB3aXRoIHJlbW90ZSBmZXRjaCwgc2ltcGx5IGR1bXAgdGhlIGNvbGxl Y3RlZCBwcm9maWxlIHRvIG91dHB1dC4KLSAgICBvcGVuKFNSQywgIjwkbWFpbjo6Y29sbGVjdGVk X3Byb2ZpbGUiKTsKLSAgICB3aGlsZSAoPFNSQz4pIHsKLSAgICAgIHByaW50ICRfOwotICAgIH0K LSAgICBjbG9zZShTUkMpOwotICB9IGVsc2UgewotICAgICMgLS1yYXcvaHR0cDogRm9yIGV2ZXJ5 dGhpbmcgdG8gd29yayBjb3JyZWN0bHkgZm9yIG5vbi1yZW1vdGUgcHJvZmlsZXMsIHdlCi0gICAg IyB3b3VsZCBuZWVkIHRvIGV4dGVuZCBQcmludFByb2ZpbGVEYXRhKCkgdG8gaGFuZGxlIGFsbCBw b3NzaWJsZSBwcm9maWxlCi0gICAgIyB0eXBlcywgcmUtZW5hYmxlIHRoZSBjb2RlIHRoYXQgaXMg Y3VycmVudGx5IGRpc2FibGVkIGluIFJlYWRDUFVQcm9maWxlKCkKLSAgICAjIGFuZCBGaXhDYWxs ZXJBZGRyZXNzZXMoKSwgYW5kIHJlbW92ZSB0aGUgcmVtb3RlIHByb2ZpbGUgZHVtcGluZyBjb2Rl IGluCi0gICAgIyB0aGUgYmxvY2sgYWJvdmUuCi0gICAgZGllICItLXJhdy9odHRwOiBqZXByb2Yg Y2FuIG9ubHkgZHVtcCByZW1vdGUgcHJvZmlsZXMgZm9yIC0tcmF3XG4iOwotICAgICMgZHVtcCBh IGNwdS1mb3JtYXQgcHJvZmlsZSB0byBzdGFuZGFyZCBvdXQKLSAgICBQcmludFByb2ZpbGVEYXRh KCRwcm9maWxlKTsKLSAgfQotfQotCi0jIFByaW50IHRleHQgb3V0cHV0Ci1zdWIgUHJpbnRUZXh0 IHsKLSAgbXkgJHN5bWJvbHMgPSBzaGlmdDsKLSAgbXkgJGZsYXQgPSBzaGlmdDsKLSAgbXkgJGN1 bXVsYXRpdmUgPSBzaGlmdDsKLSAgbXkgJGxpbmVfbGltaXQgPSBzaGlmdDsKLQotICBteSAkdG90 YWwgPSBUb3RhbFByb2ZpbGUoJGZsYXQpOwotCi0gICMgV2hpY2ggcHJvZmlsZSB0byBzb3J0IGJ5 PwotICBteSAkcyA9ICRtYWluOjpvcHRfY3VtID8gJGN1bXVsYXRpdmUgOiAkZmxhdDsKLQotICBt eSAkcnVubmluZ19zdW0gPSAwOwotICBteSAkbGluZXMgPSAwOwotICBmb3JlYWNoIG15ICRrIChz b3J0IHsgR2V0RW50cnkoJHMsICRiKSA8PT4gR2V0RW50cnkoJHMsICRhKSB8fCAkYSBjbXAgJGIg fQotICAgICAgICAgICAgICAgICBrZXlzKCV7JGN1bXVsYXRpdmV9KSkgewotICAgIG15ICRmID0g R2V0RW50cnkoJGZsYXQsICRrKTsKLSAgICBteSAkYyA9IEdldEVudHJ5KCRjdW11bGF0aXZlLCAk ayk7Ci0gICAgJHJ1bm5pbmdfc3VtICs9ICRmOwotCi0gICAgbXkgJHN5bSA9ICRrOwotICAgIGlm IChleGlzdHMoJHN5bWJvbHMtPnska30pKSB7Ci0gICAgICAkc3ltID0gJHN5bWJvbHMtPnska30t PlswXSAuICIgIiAuICRzeW1ib2xzLT57JGt9LT5bMV07Ci0gICAgICBpZiAoJG1haW46Om9wdF9h ZGRyZXNzZXMpIHsKLSAgICAgICAgJHN5bSA9ICRrIC4gIiAiIC4gJHN5bTsKLSAgICAgIH0KLSAg ICB9Ci0KLSAgICBpZiAoJGYgIT0gMCB8fCAkYyAhPSAwKSB7Ci0gICAgICBwcmludGYoIiU4cyAl NnMgJTZzICU4cyAlNnMgJXNcbiIsCi0gICAgICAgICAgICAgVW5wYXJzZSgkZiksCi0gICAgICAg ICAgICAgUGVyY2VudCgkZiwgJHRvdGFsKSwKLSAgICAgICAgICAgICBQZXJjZW50KCRydW5uaW5n X3N1bSwgJHRvdGFsKSwKLSAgICAgICAgICAgICBVbnBhcnNlKCRjKSwKLSAgICAgICAgICAgICBQ ZXJjZW50KCRjLCAkdG90YWwpLAotICAgICAgICAgICAgICRzeW0pOwotICAgIH0KLSAgICAkbGlu ZXMrKzsKLSAgICBsYXN0IGlmICgkbGluZV9saW1pdCA+PSAwICYmICRsaW5lcyA+PSAkbGluZV9s aW1pdCk7Ci0gIH0KLX0KLQotIyBDYWxsZ3JpbmQgZm9ybWF0IGhhcyBhIGNvbXByZXNzaW9uIGZv ciByZXBlYXRlZCBmdW5jdGlvbiBhbmQgZmlsZQotIyBuYW1lcy4gIFlvdSBzaG93IHRoZSBuYW1l IHRoZSBmaXJzdCB0aW1lLCBhbmQganVzdCB1c2UgaXRzIG51bWJlcgotIyBzdWJzZXF1ZW50bHku ICBUaGlzIGNhbiBjdXQgZG93biB0aGUgZmlsZSB0byBhYm91dCBhIHRoaXJkIG9yIGEKLSMgcXVh cnRlciBvZiBpdHMgdW5jb21wcmVzc2VkIHNpemUuICAka2V5IGFuZCAkdmFsIGFyZSB0aGUga2V5 L3ZhbHVlCi0jIHBhaXIgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBwcmludGVkIGJ5IGNhbGxncmlu ZDsgJG1hcCBpcyBhIG1hcCBmcm9tCi0jIHZhbHVlIHRvIG51bWJlci4KLXN1YiBDb21wcmVzc2Vk Q0dOYW1lIHsKLSAgbXkoJGtleSwgJHZhbCwgJG1hcCkgPSBAXzsKLSAgbXkgJGlkeCA9ICRtYXAt PnskdmFsfTsKLSAgIyBGb3IgdmVyeSBzaG9ydCBrZXlzLCBwcm92aWRpbmcgYW4gaW5kZXggaHVy dHMgcmF0aGVyIHRoYW4gaGVscHMuCi0gIGlmIChsZW5ndGgoJHZhbCkgPD0gMykgewotICAgIHJl dHVybiAiJGtleT0kdmFsXG4iOwotICB9IGVsc2lmIChkZWZpbmVkKCRpZHgpKSB7Ci0gICAgcmV0 dXJuICIka2V5PSgkaWR4KVxuIjsKLSAgfSBlbHNlIHsKLSAgICAjIHNjYWxhcihrZXlzICRtYXAp IGdpdmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIG1hcC4KLSAgICAkaWR4ID0gc2NhbGFy KGtleXMoJXskbWFwfSkpICsgMTsKLSAgICAkbWFwLT57JHZhbH0gPSAkaWR4OwotICAgIHJldHVy biAiJGtleT0oJGlkeCkgJHZhbFxuIjsKLSAgfQotfQotCi0jIFByaW50IHRoZSBjYWxsIGdyYXBo IGluIGEgd2F5IHRoYXQncyBzdWl0ZWFibGUgZm9yIGNhbGxncmluZC4KLXN1YiBQcmludENhbGxn cmluZCB7Ci0gIG15ICRjYWxscyA9IHNoaWZ0OwotICBteSAkZmlsZW5hbWU7Ci0gIG15ICVmaWxl bmFtZV90b19pbmRleF9tYXA7Ci0gIG15ICVmbm5hbWVfdG9faW5kZXhfbWFwOwotCi0gIGlmICgk bWFpbjo6b3B0X2ludGVyYWN0aXZlKSB7Ci0gICAgJGZpbGVuYW1lID0gc2hpZnQ7Ci0gICAgcHJp bnQgU1RERVJSICJXcml0aW5nIGNhbGxncmluZCBmaWxlIHRvICckZmlsZW5hbWUnLlxuIgotICB9 IGVsc2UgewotICAgICRmaWxlbmFtZSA9ICImU1RET1VUIjsKLSAgfQotICBvcGVuKENHLCAiPiRm aWxlbmFtZSIpOwotICBwcmludGYgQ0cgKCJldmVudHM6IEhpdHNcblxuIik7Ci0gIGZvcmVhY2gg bXkgJGNhbGwgKCBtYXAgeyAkXy0+WzBdIH0KLSAgICAgICAgICAgICAgICAgICAgIHNvcnQgeyAk YS0+WzFdIGNtcCAkYiAtPlsxXSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhLT5b Ml0gPD0+ICRiLT5bMl0gfQotICAgICAgICAgICAgICAgICAgICAgbWFwIHsgLyhbXjpdKyk6KFxk Kyk6KFteIF0rKSggLT4gKFteOl0rKTooXGQrKTooLispKT8vOwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgWyRfLCAkMSwgJDJdIH0KLSAgICAgICAgICAgICAgICAgICAgIGtleXMgJSRjYWxs cyApIHsKLSAgICBteSAkY291bnQgPSBpbnQoJGNhbGxzLT57JGNhbGx9KTsKLSAgICAkY2FsbCA9 fiAvKFteOl0rKTooXGQrKTooW14gXSspKCAtPiAoW146XSspOihcZCspOiguKykpPy87Ci0gICAg bXkgKCAkY2FsbGVyX2ZpbGUsICRjYWxsZXJfbGluZSwgJGNhbGxlcl9mdW5jdGlvbiwKLSAgICAg ICAgICRjYWxsZWVfZmlsZSwgJGNhbGxlZV9saW5lLCAkY2FsbGVlX2Z1bmN0aW9uICkgPQotICAg ICAgICggJDEsICQyLCAkMywgJDUsICQ2LCAkNyApOwotCi0gICAgIyBUT0RPKGNzaWx2ZXJzKTog Zm9yIGJldHRlciBjb21wcmVzc2lvbiwgY29sbGVjdCBhbGwgdGhlCi0gICAgIyBjYWxsZXIvY2Fs bGVlX2ZpbGVzIGFuZCBmdW5jdGlvbnMgZmlyc3QsIGJlZm9yZSBwcmludGluZwotICAgICMgYW55 dGhpbmcsIGFuZCBvbmx5IGNvbXByZXNzIHRob3NlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2Uu Ci0gICAgcHJpbnRmIENHIENvbXByZXNzZWRDR05hbWUoImZsIiwgJGNhbGxlcl9maWxlLCBcJWZp bGVuYW1lX3RvX2luZGV4X21hcCk7Ci0gICAgcHJpbnRmIENHIENvbXByZXNzZWRDR05hbWUoImZu IiwgJGNhbGxlcl9mdW5jdGlvbiwgXCVmbm5hbWVfdG9faW5kZXhfbWFwKTsKLSAgICBpZiAoZGVm aW5lZCAkNikgewotICAgICAgcHJpbnRmIENHIENvbXByZXNzZWRDR05hbWUoImNmbCIsICRjYWxs ZWVfZmlsZSwgXCVmaWxlbmFtZV90b19pbmRleF9tYXApOwotICAgICAgcHJpbnRmIENHIENvbXBy ZXNzZWRDR05hbWUoImNmbiIsICRjYWxsZWVfZnVuY3Rpb24sIFwlZm5uYW1lX3RvX2luZGV4X21h cCk7Ci0gICAgICBwcmludGYgQ0cgKCJjYWxscz0kY291bnQgJGNhbGxlZV9saW5lXG4iKTsKLSAg ICB9Ci0gICAgcHJpbnRmIENHICgiJGNhbGxlcl9saW5lICRjb3VudFxuXG4iKTsKLSAgfQotfQot Ci0jIFByaW50IGRpc2Fzc2VtYmx5IGZvciBhbGwgYWxsIHJvdXRpbmVzIHRoYXQgbWF0Y2ggJG1h aW46Om9wdF9kaXNhc20KLXN1YiBQcmludERpc2Fzc2VtYmx5IHsKLSAgbXkgJGxpYnMgPSBzaGlm dDsKLSAgbXkgJGZsYXQgPSBzaGlmdDsKLSAgbXkgJGN1bXVsYXRpdmUgPSBzaGlmdDsKLSAgbXkg JGRpc2FzbV9vcHRzID0gc2hpZnQ7Ci0KLSAgbXkgJHRvdGFsID0gVG90YWxQcm9maWxlKCRmbGF0 KTsKLQotICBmb3JlYWNoIG15ICRsaWIgKEB7JGxpYnN9KSB7Ci0gICAgbXkgJHN5bWJvbF90YWJs ZSA9IEdldFByb2NlZHVyZUJvdW5kYXJpZXMoJGxpYi0+WzBdLCAkZGlzYXNtX29wdHMpOwotICAg IG15ICRvZmZzZXQgPSBBZGRyZXNzU3ViKCRsaWItPlsxXSwgJGxpYi0+WzNdKTsKLSAgICBmb3Jl YWNoIG15ICRyb3V0aW5lIChzb3J0IEJ5TmFtZSBrZXlzKCV7JHN5bWJvbF90YWJsZX0pKSB7Ci0g ICAgICBteSAkc3RhcnRfYWRkciA9ICRzeW1ib2xfdGFibGUtPnskcm91dGluZX0tPlswXTsKLSAg ICAgIG15ICRlbmRfYWRkciA9ICRzeW1ib2xfdGFibGUtPnskcm91dGluZX0tPlsxXTsKLSAgICAg ICMgU2VlIGlmIHRoZXJlIGFyZSBhbnkgc2FtcGxlcyBpbiB0aGlzIHJvdXRpbmUKLSAgICAgIG15 ICRsZW5ndGggPSBoZXgoQWRkcmVzc1N1YigkZW5kX2FkZHIsICRzdGFydF9hZGRyKSk7Ci0gICAg ICBteSAkYWRkciA9IEFkZHJlc3NBZGQoJHN0YXJ0X2FkZHIsICRvZmZzZXQpOwotICAgICAgZm9y IChteSAkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkrKykgewotICAgICAgICBpZiAoZGVmaW5lZCgk Y3VtdWxhdGl2ZS0+eyRhZGRyfSkpIHsKLSAgICAgICAgICBQcmludERpc2Fzc2VtYmxlZEZ1bmN0 aW9uKCRsaWItPlswXSwgJG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICRyb3V0aW5lLCAkZmxhdCwgJGN1bXVsYXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAkc3RhcnRfYWRkciwgJGVuZF9hZGRyLCAkdG90YWwpOwotICAgICAgICAg IGxhc3Q7Ci0gICAgICAgIH0KLSAgICAgICAgJGFkZHIgPSBBZGRyZXNzSW5jKCRhZGRyKTsKLSAg ICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotIyBSZXR1cm4gcmVmZXJlbmNlIHRvIGFycmF5IG9mIHR1 cGxlcyBvZiB0aGUgZm9ybToKLSMgICAgICAgW3N0YXJ0X2FkZHJlc3MsIGZpbGVuYW1lLCBsaW5l bnVtYmVyLCBpbnN0cnVjdGlvbiwgbGltaXRfYWRkcmVzc10KLSMgRS5nLiwKLSMgICAgICAgWyIw eDgwNmM0M2QiLCAiL2Zvby9iYXIuY2MiLCAxMzEsICJyZXQiLCAiMHg4MDZjNDQwIl0KLXN1YiBE aXNhc3NlbWJsZSB7Ci0gIG15ICRwcm9nID0gc2hpZnQ7Ci0gIG15ICRvZmZzZXQgPSBzaGlmdDsK LSAgbXkgJHN0YXJ0X2FkZHIgPSBzaGlmdDsKLSAgbXkgJGVuZF9hZGRyID0gc2hpZnQ7Ci0KLSAg bXkgJG9iamR1bXAgPSAkb2JqX3Rvb2xfbWFweyJvYmpkdW1wIn07Ci0gIG15ICRjbWQgPSBTaGVs bEVzY2FwZSgkb2JqZHVtcCwgIi1DIiwgIi1kIiwgIi1sIiwgIi0tbm8tc2hvdy1yYXctaW5zbiIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAiLS1zdGFydC1hZGRyZXNzPTB4JHN0YXJ0X2FkZHIi LAotICAgICAgICAgICAgICAgICAgICAgICAgIi0tc3RvcC1hZGRyZXNzPTB4JGVuZF9hZGRyIiwg JHByb2cpOwotICBvcGVuKE9CSkRVTVAsICIkY21kIHwiKSB8fCBlcnJvcigiJGNtZDogJCFcbiIp OwotICBteSBAcmVzdWx0ID0gKCk7Ci0gIG15ICRmaWxlbmFtZSA9ICIiOwotICBteSAkbGluZW51 bWJlciA9IC0xOwotICBteSAkbGFzdCA9IFsiIiwgIiIsICIiLCAiIl07Ci0gIHdoaWxlICg8T0JK RFVNUD4pIHsKLSAgICBzL1xyLy9nOyAgICAgICAgICMgdHVybiB3aW5kb3dzLWxvb2tpbmcgbGlu ZXMgaW50byB1bml4LWxvb2tpbmcgbGluZXMKLSAgICBjaG9wOwotICAgIGlmIChtfFxzKihbXjpc c10rKTooXGQrKVxzKiR8KSB7Ci0gICAgICAjIExvY2F0aW9uIGxpbmUgb2YgdGhlIGZvcm06Ci0g ICAgICAjICAgPGZpbGVuYW1lPjo8bGluZW51bWJlcj4KLSAgICAgICRmaWxlbmFtZSA9ICQxOwot ICAgICAgJGxpbmVudW1iZXIgPSAkMjsKLSAgICB9IGVsc2lmIChtL14gKyhbMC05YS1mXSspOlxz KiguKikvKSB7Ci0gICAgICAjIERpc2Fzc2VtYmx5IGxpbmUgLS0gemVyby1leHRlbmQgYWRkcmVz cyB0byBmdWxsIGxlbmd0aAotICAgICAgbXkgJGFkZHIgPSBIZXhFeHRlbmQoJDEpOwotICAgICAg bXkgJGsgPSBBZGRyZXNzQWRkKCRhZGRyLCAkb2Zmc2V0KTsKLSAgICAgICRsYXN0LT5bNF0gPSAk azsgICAjIFN0b3JlIGVuZGluZyBhZGRyZXNzIGZvciBwcmV2aW91cyBpbnN0cnVjdGlvbgotICAg ICAgJGxhc3QgPSBbJGssICRmaWxlbmFtZSwgJGxpbmVudW1iZXIsICQyLCAkZW5kX2FkZHJdOwot ICAgICAgcHVzaChAcmVzdWx0LCAkbGFzdCk7Ci0gICAgfQotICB9Ci0gIGNsb3NlKE9CSkRVTVAp OwotICByZXR1cm4gQHJlc3VsdDsKLX0KLQotIyBUaGUgaW5wdXQgZmlsZSBzaG91bGQgY29udGFp biBsaW5lcyBvZiB0aGUgZm9ybSAvcHJvYy9tYXBzLWxpa2UKLSMgb3V0cHV0IChzYW1lIGZvcm1h dCBhcyBleHBlY3RlZCBmcm9tIHRoZSBwcm9maWxlcykgb3IgdGhhdCBsb29rcwotIyBsaWtlIGhl eCBhZGRyZXNzZXMgKGxpa2UgIjB4REVBREJFRUYiKS4gIFdlIHdpbGwgcGFyc2UgYWxsCi0jIC9w cm9jL21hcHMgb3V0cHV0LCBhbmQgZm9yIGFsbCB0aGUgaGV4IGFkZHJlc3Nlcywgd2Ugd2lsbCBv dXRwdXQKLSMgInNob3J0IiBzeW1ib2wgbmFtZXMsIG9uZSBwZXIgbGluZSwgaW4gdGhlIHNhbWUg b3JkZXIgYXMgdGhlIGlucHV0Lgotc3ViIFByaW50U3ltYm9scyB7Ci0gIG15ICRtYXBzX2FuZF9z eW1ib2xzX2ZpbGUgPSBzaGlmdDsKLQotICAjIFBhcnNlTGlicmFyaWVzIGV4cGVjdHMgcGNzIHRv IGJlIGluIGEgc2V0LiAgRmluZSBieSB1cy4uLgotICBteSBAcGNsaXN0ID0gKCk7ICAgIyBwY3Mg aW4gc29ydGVkIG9yZGVyCi0gIG15ICRwY3MgPSB7fTsKLSAgbXkgJG1hcCA9ICIiOwotICBmb3Jl YWNoIG15ICRsaW5lICg8JG1hcHNfYW5kX3N5bWJvbHNfZmlsZT4pIHsKLSAgICAkbGluZSA9fiBz L1xyLy9nOyAgICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5n IGxpbmVzCi0gICAgaWYgKCRsaW5lID1+IC9cYigweFswLTlhLWZdKylcYi9pKSB7Ci0gICAgICBw dXNoKEBwY2xpc3QsIEhleEV4dGVuZCgkMSkpOwotICAgICAgJHBjcy0+eyRwY2xpc3RbLTFdfSA9 IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICRtYXAgLj0gJGxpbmU7Ci0gICAgfQotICB9Ci0KLSAg bXkgJGxpYnMgPSBQYXJzZUxpYnJhcmllcygkbWFpbjo6cHJvZywgJG1hcCwgJHBjcyk7Ci0gIG15 ICRzeW1ib2xzID0gRXh0cmFjdFN5bWJvbHMoJGxpYnMsICRwY3MpOwotCi0gIGZvcmVhY2ggbXkg JHBjIChAcGNsaXN0KSB7Ci0gICAgIyAtPlswXSBpcyB0aGUgc2hvcnRuYW1lLCAtPlsyXSBpcyB0 aGUgZnVsbCBuYW1lCi0gICAgcHJpbnQoKCRzeW1ib2xzLT57JHBjfS0+WzBdIHx8ICI/PyIpIC4g IlxuIik7Ci0gIH0KLX0KLQotCi0jIEZvciBzb3J0aW5nIGZ1bmN0aW9ucyBieSBuYW1lCi1zdWIg QnlOYW1lIHsKLSAgcmV0dXJuIFNob3J0RnVuY3Rpb25OYW1lKCRhKSBjbXAgU2hvcnRGdW5jdGlv bk5hbWUoJGIpOwotfQotCi0jIFByaW50IHNvdXJjZS1saXN0aW5nIGZvciBhbGwgYWxsIHJvdXRp bmVzIHRoYXQgbWF0Y2ggJGxpc3Rfb3B0cwotc3ViIFByaW50TGlzdGluZyB7Ci0gIG15ICR0b3Rh bCA9IHNoaWZ0OwotICBteSAkbGlicyA9IHNoaWZ0OwotICBteSAkZmxhdCA9IHNoaWZ0OwotICBt eSAkY3VtdWxhdGl2ZSA9IHNoaWZ0OwotICBteSAkbGlzdF9vcHRzID0gc2hpZnQ7Ci0gIG15ICRo dG1sID0gc2hpZnQ7Ci0KLSAgbXkgJG91dHB1dCA9IFwqU1RET1VUOwotICBteSAkZm5hbWUgPSAi IjsKLQotICBpZiAoJGh0bWwpIHsKLSAgICAjIEFycmFuZ2UgdG8gd3JpdGUgdGhlIG91dHB1dCB0 byBhIHRlbXBvcmFyeSBmaWxlCi0gICAgJGZuYW1lID0gVGVtcE5hbWUoJG1haW46Om5leHRfdG1w ZmlsZSwgImh0bWwiKTsKLSAgICAkbWFpbjo6bmV4dF90bXBmaWxlKys7Ci0gICAgaWYgKCFvcGVu KFRFTVAsICI+JGZuYW1lIikpIHsKLSAgICAgIHByaW50IFNUREVSUiAiJGZuYW1lOiAkIVxuIjsK LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgJG91dHB1dCA9IFwqVEVNUDsKLSAgICBwcmludCAk b3V0cHV0IEh0bWxMaXN0aW5nSGVhZGVyKCk7Ci0gICAgcHJpbnRmICRvdXRwdXQgKCI8ZGl2IGNs YXNzPVwibGVnZW5kXCI+JXM8YnI+VG90YWw6ICVzICVzPC9kaXY+XG4iLAotICAgICAgICAgICAg ICAgICAgICAkbWFpbjo6cHJvZywgVW5wYXJzZSgkdG90YWwpLCBVbml0cygpKTsKLSAgfQotCi0g IG15ICRsaXN0ZWQgPSAwOwotICBmb3JlYWNoIG15ICRsaWIgKEB7JGxpYnN9KSB7Ci0gICAgbXkg JHN5bWJvbF90YWJsZSA9IEdldFByb2NlZHVyZUJvdW5kYXJpZXMoJGxpYi0+WzBdLCAkbGlzdF9v cHRzKTsKLSAgICBteSAkb2Zmc2V0ID0gQWRkcmVzc1N1YigkbGliLT5bMV0sICRsaWItPlszXSk7 Ci0gICAgZm9yZWFjaCBteSAkcm91dGluZSAoc29ydCBCeU5hbWUga2V5cygleyRzeW1ib2xfdGFi bGV9KSkgewotICAgICAgIyBQcmludCBpZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgaW4gdGhpcyBy b3V0aW5lCi0gICAgICBteSAkc3RhcnRfYWRkciA9ICRzeW1ib2xfdGFibGUtPnskcm91dGluZX0t PlswXTsKLSAgICAgIG15ICRlbmRfYWRkciA9ICRzeW1ib2xfdGFibGUtPnskcm91dGluZX0tPlsx XTsKLSAgICAgIG15ICRsZW5ndGggPSBoZXgoQWRkcmVzc1N1YigkZW5kX2FkZHIsICRzdGFydF9h ZGRyKSk7Ci0gICAgICBteSAkYWRkciA9IEFkZHJlc3NBZGQoJHN0YXJ0X2FkZHIsICRvZmZzZXQp OwotICAgICAgZm9yIChteSAkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkrKykgewotICAgICAgICBp ZiAoZGVmaW5lZCgkY3VtdWxhdGl2ZS0+eyRhZGRyfSkpIHsKLSAgICAgICAgICAkbGlzdGVkICs9 IFByaW50U291cmNlKAotICAgICAgICAgICAgJGxpYi0+WzBdLCAkb2Zmc2V0LAotICAgICAgICAg ICAgJHJvdXRpbmUsICRmbGF0LCAkY3VtdWxhdGl2ZSwKLSAgICAgICAgICAgICRzdGFydF9hZGRy LCAkZW5kX2FkZHIsCi0gICAgICAgICAgICAkaHRtbCwKLSAgICAgICAgICAgICRvdXRwdXQpOwot ICAgICAgICAgIGxhc3Q7Ci0gICAgICAgIH0KLSAgICAgICAgJGFkZHIgPSBBZGRyZXNzSW5jKCRh ZGRyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoJGh0bWwpIHsKLSAgICBpZiAoJGxp c3RlZCA+IDApIHsKLSAgICAgIHByaW50ICRvdXRwdXQgSHRtbExpc3RpbmdGb290ZXIoKTsKLSAg ICAgIGNsb3NlKCRvdXRwdXQpOwotICAgICAgUnVuV2ViKCRmbmFtZSk7Ci0gICAgfSBlbHNlIHsK LSAgICAgIGNsb3NlKCRvdXRwdXQpOwotICAgICAgdW5saW5rKCRmbmFtZSk7Ci0gICAgfQotICB9 Ci19Ci0KLXN1YiBIdG1sTGlzdGluZ0hlYWRlciB7Ci0gIHJldHVybiA8PCdFT0YnOwotPERPQ1RZ UEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+UHByb2YgbGlzdGluZzwvdGl0bGU+Ci08 c3R5bGUgdHlwZT0idGV4dC9jc3MiPgotYm9keSB7Ci0gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlm OwotfQotaDEgewotICBmb250LXNpemU6IDEuNWVtOwotICBtYXJnaW4tYm90dG9tOiA0cHg7Ci19 Ci0ubGVnZW5kIHsKLSAgZm9udC1zaXplOiAxLjI1ZW07Ci19Ci0ubGluZSB7Ci0gIGNvbG9yOiAj YWFhYWFhOwotfQotLm5vcCB7Ci0gIGNvbG9yOiAjYWFhYWFhOwotfQotLnVuaW1wb3J0YW50IHsK LSAgY29sb3I6ICNjY2NjY2M7Ci19Ci0uZGlzYXNtbG9jIHsKLSAgY29sb3I6ICMwMDAwMDA7Ci19 Ci0uZGVhZHNyYyB7Ci0gIGN1cnNvcjogcG9pbnRlcjsKLX0KLS5kZWFkc3JjOmhvdmVyIHsKLSAg YmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsKLX0KLS5saXZlc3JjIHsKLSAgY29sb3I6ICMwMDAw ZmY7Ci0gIGN1cnNvcjogcG9pbnRlcjsKLX0KLS5saXZlc3JjOmhvdmVyIHsKLSAgYmFja2dyb3Vu ZC1jb2xvcjogI2VlZWVlZTsKLX0KLS5hc20gewotICBjb2xvcjogIzAwODgwMDsKLSAgZGlzcGxh eTogbm9uZTsKLX0KLTwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1m dW5jdGlvbiBqZXByb2ZfdG9nZ2xlX2FzbShlKSB7Ci0gIHZhciB0YXJnZXQ7Ci0gIGlmICghZSkg ZSA9IHdpbmRvdy5ldmVudDsKLSAgaWYgKGUudGFyZ2V0KSB0YXJnZXQgPSBlLnRhcmdldDsKLSAg ZWxzZSBpZiAoZS5zcmNFbGVtZW50KSB0YXJnZXQgPSBlLnNyY0VsZW1lbnQ7Ci0KLSAgaWYgKHRh cmdldCkgewotICAgIHZhciBhc20gPSB0YXJnZXQubmV4dFNpYmxpbmc7Ci0gICAgaWYgKGFzbSAm JiBhc20uY2xhc3NOYW1lID09ICJhc20iKSB7Ci0gICAgICBhc20uc3R5bGUuZGlzcGxheSA9IChh c20uc3R5bGUuZGlzcGxheSA9PSAiYmxvY2siID8gIiIgOiAiYmxvY2siKTsKLSAgICAgIGUucHJl dmVudERlZmF1bHQoKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KLTwvc2Ny aXB0PgotPC9oZWFkPgotPGJvZHk+Ci1FT0YKLX0KLQotc3ViIEh0bWxMaXN0aW5nRm9vdGVyIHsK LSAgcmV0dXJuIDw8J0VPRic7Ci08L2JvZHk+Ci08L2h0bWw+Ci1FT0YKLX0KLQotc3ViIEh0bWxF c2NhcGUgewotICBteSAkdGV4dCA9IHNoaWZ0OwotICAkdGV4dCA9fiBzLyYvJmFtcDsvZzsKLSAg JHRleHQgPX4gcy88LyZsdDsvZzsKLSAgJHRleHQgPX4gcy8+LyZndDsvZzsKLSAgcmV0dXJuICR0 ZXh0OwotfQotCi0jIFJldHVybnMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBsaW5lLCBpZiBpdCBo YXMgYW55IG5vbi13aGl0ZXNwYWNlCi0jIGNoYXJhY3RlcnMuICBPdGhlcndpc2UsIHJldHVybnMg LTEuCi1zdWIgSW5kZW50YXRpb24gewotICBteSAkbGluZSA9IHNoaWZ0OwotICBpZiAobS9eKFxz KilcUy8pIHsKLSAgICByZXR1cm4gbGVuZ3RoKCQxKTsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4g LTE7Ci0gIH0KLX0KLQotIyBJZiB0aGUgc3ltYm9sIHRhYmxlIGNvbnRhaW5zIGlubGluaW5nIGlu Zm8sIERpc2Fzc2VtYmxlKCkgbWF5IHRhZyBhbgotIyBpbnN0cnVjdGlvbiB3aXRoIGEgbG9jYXRp b24gaW5zaWRlIGFuIGlubGluZWQgZnVuY3Rpb24uICBCdXQgZm9yCi0jIHNvdXJjZSBsaXN0aW5n cywgd2UgcHJlZmVyIHRvIHVzZSB0aGUgbG9jYXRpb24gaW4gdGhlIGZ1bmN0aW9uIHdlCi0jIGFy ZSBsaXN0aW5nLiAgU28gdXNlIE1hcFRvU3ltYm9scygpIHRvIGZldGNoIGZ1bGwgbG9jYXRpb24K LSMgaW5mb3JtYXRpb24gZm9yIGVhY2ggaW5zdHJ1Y3Rpb24gYW5kIHRoZW4gcGljayBvdXQgdGhl IGZpcnN0Ci0jIGxvY2F0aW9uIGZyb20gYSBsb2NhdGlvbiBsaXN0IChsb2NhdGlvbiBsaXN0IGNv bnRhaW5zIGNhbGxlcnMgYmVmb3JlCi0jIGNhbGxlZXMgaW4gY2FzZSBvZiBpbmxpbmluZykuCi0j Ci0jIEFmdGVyIHRoaXMgcm91dGluZSBoYXMgcnVuLCBlYWNoIGVudHJ5IGluICRpbnN0cnVjdGlv bnMgY29udGFpbnM6Ci0jICAgWzBdIHN0YXJ0IGFkZHJlc3MKLSMgICBbMV0gZmlsZW5hbWUgZm9y IGZ1bmN0aW9uIHdlIGFyZSBsaXN0aW5nCi0jICAgWzJdIGxpbmUgbnVtYmVyIGZvciBmdW5jdGlv biB3ZSBhcmUgbGlzdGluZwotIyAgIFszXSBkaXNhc3NlbWJseQotIyAgIFs0XSBsaW1pdCBhZGRy ZXNzCi0jICAgWzVdIG1vc3Qgc3BlY2lmaWMgZmlsZW5hbWUgKG1heSBiZSBkaWZmZXJlbnQgZnJv bSBbMV0gZHVlIHRvIGlubGluaW5nKQotIyAgIFs2XSBtb3N0IHNwZWNpZmljIGxpbmUgbnVtYmVy IChtYXkgYmUgZGlmZmVyZW50IGZyb20gWzJdIGR1ZSB0byBpbmxpbmluZykKLXN1YiBHZXRUb3BM ZXZlbExpbmVOdW1iZXJzIHsKLSAgbXkgKCRsaWIsICRvZmZzZXQsICRpbnN0cnVjdGlvbnMpID0g QF87Ci0gIG15ICRwY3MgPSBbXTsKLSAgZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjeyRpbnN0cnVj dGlvbnN9OyAkaSsrKSB7Ci0gICAgcHVzaChAeyRwY3N9LCAkaW5zdHJ1Y3Rpb25zLT5bJGldLT5b MF0pOwotICB9Ci0gIG15ICRzeW1ib2xzID0ge307Ci0gIE1hcFRvU3ltYm9scygkbGliLCAkb2Zm c2V0LCAkcGNzLCAkc3ltYm9scyk7Ci0gIGZvciAobXkgJGkgPSAwOyAkaSA8PSAkI3skaW5zdHJ1 Y3Rpb25zfTsgJGkrKykgewotICAgIG15ICRlID0gJGluc3RydWN0aW9ucy0+WyRpXTsKLSAgICBw dXNoKEB7JGV9LCAkZS0+WzFdKTsKLSAgICBwdXNoKEB7JGV9LCAkZS0+WzJdKTsKLSAgICBteSAk YWRkciA9ICRlLT5bMF07Ci0gICAgbXkgJHN5bSA9ICRzeW1ib2xzLT57JGFkZHJ9OwotICAgIGlm IChkZWZpbmVkKCRzeW0pKSB7Ci0gICAgICBpZiAoJCN7JHN5bX0gPj0gMiAmJiAkc3ltLT5bMV0g PX4gbS9eKC4qKTooXGQrKSQvKSB7Ci0gICAgICAgICRlLT5bMV0gPSAkMTsgICMgRmlsZSBuYW1l Ci0gICAgICAgICRlLT5bMl0gPSAkMjsgICMgTGluZSBudW1iZXIKLSAgICAgIH0KLSAgICB9Ci0g IH0KLX0KLQotIyBQcmludCBzb3VyY2UtbGlzdGluZyBmb3Igb25lIHJvdXRpbmUKLXN1YiBQcmlu dFNvdXJjZSB7Ci0gIG15ICRwcm9nID0gc2hpZnQ7Ci0gIG15ICRvZmZzZXQgPSBzaGlmdDsKLSAg bXkgJHJvdXRpbmUgPSBzaGlmdDsKLSAgbXkgJGZsYXQgPSBzaGlmdDsKLSAgbXkgJGN1bXVsYXRp dmUgPSBzaGlmdDsKLSAgbXkgJHN0YXJ0X2FkZHIgPSBzaGlmdDsKLSAgbXkgJGVuZF9hZGRyID0g c2hpZnQ7Ci0gIG15ICRodG1sID0gc2hpZnQ7Ci0gIG15ICRvdXRwdXQgPSBzaGlmdDsKLQotICAj IERpc2Fzc2VtYmxlIGFsbCBpbnN0cnVjdGlvbnMgKGp1c3QgdG8gZ2V0IGxpbmUgbnVtYmVycykK LSAgbXkgQGluc3RydWN0aW9ucyA9IERpc2Fzc2VtYmxlKCRwcm9nLCAkb2Zmc2V0LCAkc3RhcnRf YWRkciwgJGVuZF9hZGRyKTsKLSAgR2V0VG9wTGV2ZWxMaW5lTnVtYmVycygkcHJvZywgJG9mZnNl dCwgXEBpbnN0cnVjdGlvbnMpOwotCi0gICMgSGFjayAxOiBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qg c291cmNlIGZpbGUgZW5jb3VudGVyZWQgaW4gdGhlCi0gICMgZGlzYXNzZW1ibHkgY29udGFpbnMg dGhlIHJvdXRpbmUKLSAgbXkgJGZpbGVuYW1lID0gdW5kZWY7Ci0gIGZvciAobXkgJGkgPSAwOyAk aSA8PSAkI2luc3RydWN0aW9uczsgJGkrKykgewotICAgIGlmICgkaW5zdHJ1Y3Rpb25zWyRpXS0+ WzJdID49IDApIHsKLSAgICAgICRmaWxlbmFtZSA9ICRpbnN0cnVjdGlvbnNbJGldLT5bMV07Ci0g ICAgICBsYXN0OwotICAgIH0KLSAgfQotICBpZiAoIWRlZmluZWQoJGZpbGVuYW1lKSkgewotICAg IHByaW50IFNUREVSUiAibm8gZmlsZW5hbWUgZm91bmQgaW4gJHJvdXRpbmVcbiI7Ci0gICAgcmV0 dXJuIDA7Ci0gIH0KLQotICAjIEhhY2sgMjogYXNzdW1lIHRoYXQgdGhlIGxhcmdlc3QgbGluZSBu dW1iZXIgZnJvbSAkZmlsZW5hbWUgaXMgdGhlCi0gICMgZW5kIG9mIHRoZSBwcm9jZWR1cmUuICBU aGlzIGlzIHR5cGljYWxseSBzYWZlIHNpbmNlIGlmIFAxIGNvbnRhaW5zCi0gICMgYW4gaW5saW5l ZCBjYWxsIHRvIFAyLCB0aGVuIFAyIHVzdWFsbHkgb2NjdXJzIGVhcmxpZXIgaW4gdGhlCi0gICMg c291cmNlIGZpbGUuICBJZiB0aGlzIGRvZXMgbm90IHdvcmssIHdlIG1pZ2h0IGhhdmUgdG8gY29t cHV0ZSBhCi0gICMgZGVuc2l0eSBwcm9maWxlIG9yIGp1c3QgcHJpbnQgYWxsIHJlZ2lvbnMgd2Ug ZmluZC4KLSAgbXkgJGxhc3RsaW5lID0gMDsKLSAgZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjaW5z dHJ1Y3Rpb25zOyAkaSsrKSB7Ci0gICAgbXkgJGYgPSAkaW5zdHJ1Y3Rpb25zWyRpXS0+WzFdOwot ICAgIG15ICRsID0gJGluc3RydWN0aW9uc1skaV0tPlsyXTsKLSAgICBpZiAoKCRmIGVxICRmaWxl bmFtZSkgJiYgKCRsID4gJGxhc3RsaW5lKSkgewotICAgICAgJGxhc3RsaW5lID0gJGw7Ci0gICAg fQotICB9Ci0KLSAgIyBIYWNrIDM6IGFzc3VtZSB0aGUgZmlyc3Qgc291cmNlIGxvY2F0aW9uIGZy b20gImZpbGVuYW1lIiBpcyB0aGUgc3RhcnQgb2YKLSAgIyB0aGUgc291cmNlIGNvZGUuCi0gIG15 ICRmaXJzdGxpbmUgPSAxOwotICBmb3IgKG15ICRpID0gMDsgJGkgPD0gJCNpbnN0cnVjdGlvbnM7 ICRpKyspIHsKLSAgICBpZiAoJGluc3RydWN0aW9uc1skaV0tPlsxXSBlcSAkZmlsZW5hbWUpIHsK LSAgICAgICRmaXJzdGxpbmUgPSAkaW5zdHJ1Y3Rpb25zWyRpXS0+WzJdOwotICAgICAgbGFzdDsK LSAgICB9Ci0gIH0KLQotICAjIEhhY2sgNDogRXh0ZW5kIGxhc3QgbGluZSBmb3J3YXJkIHVudGls IGl0cyBpbmRlbnRhdGlvbiBpcyBsZXNzIHRoYW4KLSAgIyB0aGUgaW5kZW50YXRpb24gd2Ugc2F3 IG9uICRmaXJzdGxpbmUKLSAgbXkgJG9sZGxhc3RsaW5lID0gJGxhc3RsaW5lOwotICB7Ci0gICAg aWYgKCFvcGVuKEZJTEUsICI8JGZpbGVuYW1lIikpIHsKLSAgICAgIHByaW50IFNUREVSUiAiJGZp bGVuYW1lOiAkIVxuIjsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBteSAkbCA9IDA7Ci0g ICAgbXkgJGZpcnN0X2luZGVudGF0aW9uID0gLTE7Ci0gICAgd2hpbGUgKDxGSUxFPikgewotICAg ICAgcy9cci8vZzsgICAgICAgICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5p eC1sb29raW5nIGxpbmVzCi0gICAgICAkbCsrOwotICAgICAgbXkgJGluZGVudCA9IEluZGVudGF0 aW9uKCRfKTsKLSAgICAgIGlmICgkbCA+PSAkZmlyc3RsaW5lKSB7Ci0gICAgICAgIGlmICgkZmly c3RfaW5kZW50YXRpb24gPCAwICYmICRpbmRlbnQgPj0gMCkgewotICAgICAgICAgICRmaXJzdF9p bmRlbnRhdGlvbiA9ICRpbmRlbnQ7Ci0gICAgICAgICAgbGFzdCBpZiAoJGZpcnN0X2luZGVudGF0 aW9uID09IDApOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoJGwgPj0gJGxhc3RsaW5l ICYmICRpbmRlbnQgPj0gMCkgewotICAgICAgICBpZiAoJGluZGVudCA+PSAkZmlyc3RfaW5kZW50 YXRpb24pIHsKLSAgICAgICAgICAkbGFzdGxpbmUgPSAkbCsxOwotICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgIGxhc3Q7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgY2xvc2UoRklM RSk7Ci0gIH0KLQotICAjIEFzc2lnbiBhbGwgc2FtcGxlcyB0byB0aGUgcmFuZ2UgJGZpcnN0bGlu ZSwkbGFzdGxpbmUsCi0gICMgSGFjayA0OiBJZiBhbiBpbnN0cnVjdGlvbiBkb2VzIG5vdCBvY2N1 ciBpbiB0aGUgcmFuZ2UsIGl0cyBzYW1wbGVzCi0gICMgYXJlIG1vdmVkIHRvIHRoZSBuZXh0IGlu c3RydWN0aW9uIHRoYXQgb2NjdXJzIGluIHRoZSByYW5nZS4KLSAgbXkgJHNhbXBsZXMxID0ge307 ICAgICAgICAjIE1hcCBmcm9tIGxpbmUgbnVtYmVyIHRvIGZsYXQgY291bnQKLSAgbXkgJHNhbXBs ZXMyID0ge307ICAgICAgICAjIE1hcCBmcm9tIGxpbmUgbnVtYmVyIHRvIGN1bXVsYXRpdmUgY291 bnQKLSAgbXkgJHJ1bm5pbmcxID0gMDsgICAgICAgICAjIFVuYXNzaWduZWQgZmxhdCBjb3VudHMK LSAgbXkgJHJ1bm5pbmcyID0gMDsgICAgICAgICAjIFVuYXNzaWduZWQgY3VtdWxhdGl2ZSBjb3Vu dHMKLSAgbXkgJHRvdGFsMSA9IDA7ICAgICAgICAgICAjIFRvdGFsIGZsYXQgY291bnRzCi0gIG15 ICR0b3RhbDIgPSAwOyAgICAgICAgICAgIyBUb3RhbCBjdW11bGF0aXZlIGNvdW50cwotICBteSAl ZGlzYXNtID0gKCk7ICAgICAgICAgICMgTWFwIGZyb20gbGluZSBudW1iZXIgdG8gZGlzYXNzZW1i bHkKLSAgbXkgJHJ1bm5pbmdfZGlzYXNtID0gIiI7ICAjIFVuYXNzaWduZWQgZGlzYXNzZW1ibHkK LSAgbXkgJHNraXBfbWFya2VyID0gIi0tLVxuIjsKLSAgaWYgKCRodG1sKSB7Ci0gICAgJHNraXBf bWFya2VyID0gIiI7Ci0gICAgZm9yIChteSAkbCA9ICRmaXJzdGxpbmU7ICRsIDw9ICRsYXN0bGlu ZTsgJGwrKykgewotICAgICAgJGRpc2FzbXskbH0gPSAiIjsKLSAgICB9Ci0gIH0KLSAgbXkgJGxh c3RfZGlzX2ZpbGVuYW1lID0gJyc7Ci0gIG15ICRsYXN0X2Rpc19saW5lbnVtID0gLTE7Ci0gIG15 ICRsYXN0X3RvdWNoZWRfbGluZSA9IC0xOyAgIyBUbyBkZXRlY3QgZ2FwcyBpbiBkaXNhc3NlbWJs eSBmb3IgYSBsaW5lCi0gIGZvcmVhY2ggbXkgJGUgKEBpbnN0cnVjdGlvbnMpIHsKLSAgICAjIEFk ZCB1cCBjb3VudHMgZm9yIGFsbCBhZGRyZXNzIHRoYXQgZmFsbCBpbnNpZGUgdGhpcyBpbnN0cnVj dGlvbgotICAgIG15ICRjMSA9IDA7Ci0gICAgbXkgJGMyID0gMDsKLSAgICBmb3IgKG15ICRhID0g JGUtPlswXTsgJGEgbHQgJGUtPls0XTsgJGEgPSBBZGRyZXNzSW5jKCRhKSkgewotICAgICAgJGMx ICs9IEdldEVudHJ5KCRmbGF0LCAkYSk7Ci0gICAgICAkYzIgKz0gR2V0RW50cnkoJGN1bXVsYXRp dmUsICRhKTsKLSAgICB9Ci0KLSAgICBpZiAoJGh0bWwpIHsKLSAgICAgIG15ICRkaXMgPSBzcHJp bnRmKCIgICAgICAlNnMgJTZzIFx0XHQlOHM6ICVzICIsCi0gICAgICAgICAgICAgICAgICAgICAg ICBIdG1sUHJpbnROdW1iZXIoJGMxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEh0bWxQcmlu dE51bWJlcigkYzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgVW5wYXJzZUFkZHJlc3MoJG9m ZnNldCwgJGUtPlswXSksCi0gICAgICAgICAgICAgICAgICAgICAgICBDbGVhbkRpc2Fzc2VtYmx5 KCRlLT5bM10pKTsKLQotICAgICAgIyBBcHBlbmQgdGhlIG1vc3Qgc3BlY2lmaWMgc291cmNlIGxp bmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdHJ1Y3Rpb24KLSAgICAgIGlmIChsZW5ndGgoJGRp cykgPCA4MCkgeyAkZGlzIC49ICgnICcgeCAoODAgLSBsZW5ndGgoJGRpcykpKSB9OwotICAgICAg JGRpcyA9IEh0bWxFc2NhcGUoJGRpcyk7Ci0gICAgICBteSAkZiA9ICRlLT5bNV07Ci0gICAgICBt eSAkbCA9ICRlLT5bNl07Ci0gICAgICBpZiAoJGYgbmUgJGxhc3RfZGlzX2ZpbGVuYW1lKSB7Ci0g ICAgICAgICRkaXMgLj0gc3ByaW50ZigiPHNwYW4gY2xhc3M9ZGlzYXNtbG9jPiVzOiVkPC9zcGFu PiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBIdG1sRXNjYXBlKENsZWFuRmlsZU5hbWUoJGYp KSwgJGwpOwotICAgICAgfSBlbHNpZiAoJGwgbmUgJGxhc3RfZGlzX2xpbmVudW0pIHsKLSAgICAg ICAgIyBEZS1lbXBoYXNpemUgdGhlIHVuY2hhbmdlZCBmaWxlIG5hbWUgcG9ydGlvbgotICAgICAg ICAkZGlzIC49IHNwcmludGYoIjxzcGFuIGNsYXNzPXVuaW1wb3J0YW50PiVzPC9zcGFuPiIgLgot ICAgICAgICAgICAgICAgICAgICAgICAgIjxzcGFuIGNsYXNzPWRpc2FzbWxvYz46JWQ8L3NwYW4+ IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEh0bWxFc2NhcGUoQ2xlYW5GaWxlTmFtZSgkZikp LCAkbCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAjIERlLWVtcGhhc2l6ZSB0aGUgZW50aXJl IGxvY2F0aW9uCi0gICAgICAgICRkaXMgLj0gc3ByaW50ZigiPHNwYW4gY2xhc3M9dW5pbXBvcnRh bnQ+JXM6JWQ8L3NwYW4+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEh0bWxFc2NhcGUoQ2xl YW5GaWxlTmFtZSgkZikpLCAkbCk7Ci0gICAgICB9Ci0gICAgICAkbGFzdF9kaXNfZmlsZW5hbWUg PSAkZjsKLSAgICAgICRsYXN0X2Rpc19saW5lbnVtID0gJGw7Ci0gICAgICAkcnVubmluZ19kaXNh c20gLj0gJGRpczsKLSAgICAgICRydW5uaW5nX2Rpc2FzbSAuPSAiXG4iOwotICAgIH0KLQotICAg ICRydW5uaW5nMSArPSAkYzE7Ci0gICAgJHJ1bm5pbmcyICs9ICRjMjsKLSAgICAkdG90YWwxICs9 ICRjMTsKLSAgICAkdG90YWwyICs9ICRjMjsKLSAgICBteSAkZmlsZSA9ICRlLT5bMV07Ci0gICAg bXkgJGxpbmUgPSAkZS0+WzJdOwotICAgIGlmICgoJGZpbGUgZXEgJGZpbGVuYW1lKSAmJgotICAg ICAgICAoJGxpbmUgPj0gJGZpcnN0bGluZSkgJiYKLSAgICAgICAgKCRsaW5lIDw9ICRsYXN0bGlu ZSkpIHsKLSAgICAgICMgQXNzaWduIGFsbCBhY2N1bXVsYXRlZCBzYW1wbGVzIHRvIHRoaXMgbGlu ZQotICAgICAgQWRkRW50cnkoJHNhbXBsZXMxLCAkbGluZSwgJHJ1bm5pbmcxKTsKLSAgICAgIEFk ZEVudHJ5KCRzYW1wbGVzMiwgJGxpbmUsICRydW5uaW5nMik7Ci0gICAgICAkcnVubmluZzEgPSAw OwotICAgICAgJHJ1bm5pbmcyID0gMDsKLSAgICAgIGlmICgkaHRtbCkgewotICAgICAgICBpZiAo JGxpbmUgIT0gJGxhc3RfdG91Y2hlZF9saW5lICYmICRkaXNhc217JGxpbmV9IG5lICcnKSB7Ci0g ICAgICAgICAgJGRpc2FzbXskbGluZX0gLj0gIlxuIjsKLSAgICAgICAgfQotICAgICAgICAkZGlz YXNteyRsaW5lfSAuPSAkcnVubmluZ19kaXNhc207Ci0gICAgICAgICRydW5uaW5nX2Rpc2FzbSA9 ICcnOwotICAgICAgICAkbGFzdF90b3VjaGVkX2xpbmUgPSAkbGluZTsKLSAgICAgIH0KLSAgICB9 Ci0gIH0KLQotICAjIEFzc2lnbiBhbnkgbGVmdG92ZXIgc2FtcGxlcyB0byAkbGFzdGxpbmUKLSAg QWRkRW50cnkoJHNhbXBsZXMxLCAkbGFzdGxpbmUsICRydW5uaW5nMSk7Ci0gIEFkZEVudHJ5KCRz YW1wbGVzMiwgJGxhc3RsaW5lLCAkcnVubmluZzIpOwotICBpZiAoJGh0bWwpIHsKLSAgICBpZiAo JGxhc3RsaW5lICE9ICRsYXN0X3RvdWNoZWRfbGluZSAmJiAkZGlzYXNteyRsYXN0bGluZX0gbmUg JycpIHsKLSAgICAgICRkaXNhc217JGxhc3RsaW5lfSAuPSAiXG4iOwotICAgIH0KLSAgICAkZGlz YXNteyRsYXN0bGluZX0gLj0gJHJ1bm5pbmdfZGlzYXNtOwotICB9Ci0KLSAgaWYgKCRodG1sKSB7 Ci0gICAgcHJpbnRmICRvdXRwdXQgKAotICAgICAgIjxoMT4lczwvaDE+JXNcbjxwcmUgb25DbGlj az1cImplcHJvZl90b2dnbGVfYXNtKClcIj5cbiIgLgotICAgICAgIlRvdGFsOiU2cyAlNnMgKGZs YXQgLyBjdW11bGF0aXZlICVzKVxuIiwKLSAgICAgIEh0bWxFc2NhcGUoU2hvcnRGdW5jdGlvbk5h bWUoJHJvdXRpbmUpKSwKLSAgICAgIEh0bWxFc2NhcGUoQ2xlYW5GaWxlTmFtZSgkZmlsZW5hbWUp KSwKLSAgICAgIFVucGFyc2UoJHRvdGFsMSksCi0gICAgICBVbnBhcnNlKCR0b3RhbDIpLAotICAg ICAgVW5pdHMoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnRmICRvdXRwdXQgKAotICAgICAgIlJP VVRJTkUgPT09PT09PT09PT09PT09PT09PT09PSAlcyBpbiAlc1xuIiAuCi0gICAgICAiJTZzICU2 cyBUb3RhbCAlcyAoZmxhdCAvIGN1bXVsYXRpdmUpXG4iLAotICAgICAgU2hvcnRGdW5jdGlvbk5h bWUoJHJvdXRpbmUpLAotICAgICAgQ2xlYW5GaWxlTmFtZSgkZmlsZW5hbWUpLAotICAgICAgVW5w YXJzZSgkdG90YWwxKSwKLSAgICAgIFVucGFyc2UoJHRvdGFsMiksCi0gICAgICBVbml0cygpKTsK LSAgfQotICBpZiAoIW9wZW4oRklMRSwgIjwkZmlsZW5hbWUiKSkgewotICAgIHByaW50IFNUREVS UiAiJGZpbGVuYW1lOiAkIVxuIjsKLSAgICByZXR1cm4gMDsKLSAgfQotICBteSAkbCA9IDA7Ci0g IHdoaWxlICg8RklMRT4pIHsKLSAgICBzL1xyLy9nOyAgICAgICAgICMgdHVybiB3aW5kb3dzLWxv b2tpbmcgbGluZXMgaW50byB1bml4LWxvb2tpbmcgbGluZXMKLSAgICAkbCsrOwotICAgIGlmICgk bCA+PSAkZmlyc3RsaW5lIC0gNSAmJgotICAgICAgICAoKCRsIDw9ICRvbGRsYXN0bGluZSArIDUp IHx8ICgkbCA8PSAkbGFzdGxpbmUpKSkgewotICAgICAgY2hvcDsKLSAgICAgIG15ICR0ZXh0ID0g JF87Ci0gICAgICBpZiAoJGwgPT0gJGZpcnN0bGluZSkgeyBwcmludCAkb3V0cHV0ICRza2lwX21h cmtlcjsgfQotICAgICAgbXkgJG4xID0gR2V0RW50cnkoJHNhbXBsZXMxLCAkbCk7Ci0gICAgICBt eSAkbjIgPSBHZXRFbnRyeSgkc2FtcGxlczIsICRsKTsKLSAgICAgIGlmICgkaHRtbCkgewotICAg ICAgICAjIEVtaXQgYSBzcGFuIHRoYXQgaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNsYXNzZXM6 Ci0gICAgICAgICMgICAgbGl2ZXNyYyAtLSBoYXMgc2FtcGxlcwotICAgICAgICAjICAgIGRlYWRz cmMgLS0gaGFzIGRpc2Fzc2VtYmx5LCBidXQgd2l0aCBubyBzYW1wbGVzCi0gICAgICAgICMgICAg bm9wICAgICAtLSBoYXMgbm8gbWF0Y2hpbmcgZGlzYXNlbWJseQotICAgICAgICAjIEFsc28gZW1p dCBhbiBvcHRpb25hbCBzcGFuIGNvbnRhaW5pbmcgZGlzYXNzZW1ibHkuCi0gICAgICAgIG15ICRk aXMgPSAkZGlzYXNteyRsfTsKLSAgICAgICAgbXkgJGFzbSA9ICIiOwotICAgICAgICBpZiAoZGVm aW5lZCgkZGlzKSAmJiAkZGlzIG5lICcnKSB7Ci0gICAgICAgICAgJGFzbSA9ICI8c3BhbiBjbGFz cz1cImFzbVwiPiIgLiAkZGlzIC4gIjwvc3Bhbj4iOwotICAgICAgICB9Ci0gICAgICAgIG15ICRz b3VyY2VfY2xhc3MgPSAoKCRuMSArICRuMiA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgPyAibGl2ZXNyYyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgoJGFzbSBuZSAi IikgPyAiZGVhZHNyYyIgOiAibm9wIikpOwotICAgICAgICBwcmludGYgJG91dHB1dCAoCi0gICAg ICAgICAgIjxzcGFuIGNsYXNzPVwibGluZVwiPiU1ZDwvc3Bhbj4gIiAuCi0gICAgICAgICAgIjxz cGFuIGNsYXNzPVwiJXNcIj4lNnMgJTZzICVzPC9zcGFuPiVzXG4iLAotICAgICAgICAgICRsLCAk c291cmNlX2NsYXNzLAotICAgICAgICAgIEh0bWxQcmludE51bWJlcigkbjEpLAotICAgICAgICAg IEh0bWxQcmludE51bWJlcigkbjIpLAotICAgICAgICAgIEh0bWxFc2NhcGUoJHRleHQpLAotICAg ICAgICAgICRhc20pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmICRvdXRwdXQoCi0g ICAgICAgICAgIiU2cyAlNnMgJTRkOiAlc1xuIiwKLSAgICAgICAgICBVbnBhcnNlQWx0KCRuMSks Ci0gICAgICAgICAgVW5wYXJzZUFsdCgkbjIpLAotICAgICAgICAgICRsLAotICAgICAgICAgICR0 ZXh0KTsKLSAgICAgIH0KLSAgICAgIGlmICgkbCA9PSAkbGFzdGxpbmUpICB7IHByaW50ICRvdXRw dXQgJHNraXBfbWFya2VyOyB9Ci0gICAgfTsKLSAgfQotICBjbG9zZShGSUxFKTsKLSAgaWYgKCRo dG1sKSB7Ci0gICAgcHJpbnQgJG91dHB1dCAiPC9wcmU+XG4iOwotICB9Ci0gIHJldHVybiAxOwot fQotCi0jIFJldHVybiB0aGUgc291cmNlIGxpbmUgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZS9saW5l bnVtYmVyLgotIyBSZXR1cm5zIHVuZGVmIGlmIG5vdCBmb3VuZC4KLXN1YiBTb3VyY2VMaW5lIHsK LSAgbXkgJGZpbGUgPSBzaGlmdDsKLSAgbXkgJGxpbmUgPSBzaGlmdDsKLQotICAjIExvb2sgaW4g Y2FjaGUKLSAgaWYgKCFkZWZpbmVkKCRtYWluOjpzb3VyY2VfY2FjaGV7JGZpbGV9KSkgewotICAg IGlmICgxMDAgPCBzY2FsYXIga2V5cyglbWFpbjo6c291cmNlX2NhY2hlKSkgewotICAgICAgIyBD bGVhciB0aGUgY2FjaGUgd2hlbiBpdCBnZXRzIHRvbyBiaWcKLSAgICAgICRtYWluOjpzb3VyY2Vf Y2FjaGUgPSAoKTsKLSAgICB9Ci0KLSAgICAjIFJlYWQgYWxsIGxpbmVzIGZyb20gdGhlIGZpbGUK LSAgICBpZiAoIW9wZW4oRklMRSwgIjwkZmlsZSIpKSB7Ci0gICAgICBwcmludCBTVERFUlIgIiRm aWxlOiAkIVxuIjsKLSAgICAgICRtYWluOjpzb3VyY2VfY2FjaGV7JGZpbGV9ID0gW107ICAjIENh Y2hlIHRoZSBuZWdhdGl2ZSByZXN1bHQKLSAgICAgIHJldHVybiB1bmRlZjsKLSAgICB9Ci0gICAg bXkgJGxpbmVzID0gW107Ci0gICAgcHVzaChAeyRsaW5lc30sICIiKTsgICAgICAgICMgU28gd2Ug Y2FuIHVzZSAxLWJhc2VkIGxpbmUgbnVtYmVycyBhcyBpbmRpY2VzCi0gICAgd2hpbGUgKDxGSUxF PikgewotICAgICAgcHVzaChAeyRsaW5lc30sICRfKTsKLSAgICB9Ci0gICAgY2xvc2UoRklMRSk7 Ci0KLSAgICAjIFNhdmUgdGhlIGxpbmVzIGluIHRoZSBjYWNoZQotICAgICRtYWluOjpzb3VyY2Vf Y2FjaGV7JGZpbGV9ID0gJGxpbmVzOwotICB9Ci0KLSAgbXkgJGxpbmVzID0gJG1haW46OnNvdXJj ZV9jYWNoZXskZmlsZX07Ci0gIGlmICgoJGxpbmUgPCAwKSB8fCAoJGxpbmUgPiAkI3skbGluZXN9 KSkgewotICAgIHJldHVybiB1bmRlZjsKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gJGxpbmVzLT5b JGxpbmVdOwotICB9Ci19Ci0KLSMgUHJpbnQgZGlzYXNzZW1ibHkgZm9yIG9uZSByb3V0aW5lIHdp dGggaW50ZXJzcGVyc2VkIHNvdXJjZSBpZiBhdmFpbGFibGUKLXN1YiBQcmludERpc2Fzc2VtYmxl ZEZ1bmN0aW9uIHsKLSAgbXkgJHByb2cgPSBzaGlmdDsKLSAgbXkgJG9mZnNldCA9IHNoaWZ0Owot ICBteSAkcm91dGluZSA9IHNoaWZ0OwotICBteSAkZmxhdCA9IHNoaWZ0OwotICBteSAkY3VtdWxh dGl2ZSA9IHNoaWZ0OwotICBteSAkc3RhcnRfYWRkciA9IHNoaWZ0OwotICBteSAkZW5kX2FkZHIg PSBzaGlmdDsKLSAgbXkgJHRvdGFsID0gc2hpZnQ7Ci0KLSAgIyBEaXNhc3NlbWJsZSBhbGwgaW5z dHJ1Y3Rpb25zCi0gIG15IEBpbnN0cnVjdGlvbnMgPSBEaXNhc3NlbWJsZSgkcHJvZywgJG9mZnNl dCwgJHN0YXJ0X2FkZHIsICRlbmRfYWRkcik7Ci0KLSAgIyBNYWtlIGFycmF5IG9mIGNvdW50cyBw ZXIgaW5zdHJ1Y3Rpb24KLSAgbXkgQGZsYXRfY291bnQgPSAoKTsKLSAgbXkgQGN1bV9jb3VudCA9 ICgpOwotICBteSAkZmxhdF90b3RhbCA9IDA7Ci0gIG15ICRjdW1fdG90YWwgPSAwOwotICBmb3Jl YWNoIG15ICRlIChAaW5zdHJ1Y3Rpb25zKSB7Ci0gICAgIyBBZGQgdXAgY291bnRzIGZvciBhbGwg YWRkcmVzcyB0aGF0IGZhbGwgaW5zaWRlIHRoaXMgaW5zdHJ1Y3Rpb24KLSAgICBteSAkYzEgPSAw OwotICAgIG15ICRjMiA9IDA7Ci0gICAgZm9yIChteSAkYSA9ICRlLT5bMF07ICRhIGx0ICRlLT5b NF07ICRhID0gQWRkcmVzc0luYygkYSkpIHsKLSAgICAgICRjMSArPSBHZXRFbnRyeSgkZmxhdCwg JGEpOwotICAgICAgJGMyICs9IEdldEVudHJ5KCRjdW11bGF0aXZlLCAkYSk7Ci0gICAgfQotICAg IHB1c2goQGZsYXRfY291bnQsICRjMSk7Ci0gICAgcHVzaChAY3VtX2NvdW50LCAkYzIpOwotICAg ICRmbGF0X3RvdGFsICs9ICRjMTsKLSAgICAkY3VtX3RvdGFsICs9ICRjMjsKLSAgfQotCi0gICMg UHJpbnQgaGVhZGVyIHdpdGggdG90YWwgY291bnRzCi0gIHByaW50ZigiUk9VVElORSA9PT09PT09 PT09PT09PT09PT09PT09ICVzXG4iIC4KLSAgICAgICAgICIlNnMgJTZzICVzIChmbGF0LCBjdW11 bGF0aXZlKSAlLjFmJSUgb2YgdG90YWxcbiIsCi0gICAgICAgICBTaG9ydEZ1bmN0aW9uTmFtZSgk cm91dGluZSksCi0gICAgICAgICBVbnBhcnNlKCRmbGF0X3RvdGFsKSwKLSAgICAgICAgIFVucGFy c2UoJGN1bV90b3RhbCksCi0gICAgICAgICBVbml0cygpLAotICAgICAgICAgKCRjdW1fdG90YWwg KiAxMDAuMCkgLyAkdG90YWwpOwotCi0gICMgUHJvY2VzcyBpbnN0cnVjdGlvbnMgaW4gb3JkZXIK LSAgbXkgJGN1cnJlbnRfZmlsZSA9ICIiOwotICBmb3IgKG15ICRpID0gMDsgJGkgPD0gJCNpbnN0 cnVjdGlvbnM7ICkgewotICAgIG15ICRlID0gJGluc3RydWN0aW9uc1skaV07Ci0KLSAgICAjIFBy aW50IHRoZSBuZXcgZmlsZSBuYW1lIHdoZW5ldmVyIHdlIHN3aXRjaCBmaWxlcwotICAgIGlmICgk ZS0+WzFdIG5lICRjdXJyZW50X2ZpbGUpIHsKLSAgICAgICRjdXJyZW50X2ZpbGUgPSAkZS0+WzFd OwotICAgICAgbXkgJGZuYW1lID0gJGN1cnJlbnRfZmlsZTsKLSAgICAgICRmbmFtZSA9fiBzfF5c Li98fDsgICAjIFRyaW0gbGVhZGluZyAiLi8iCi0KLSAgICAgICMgU2hvcnRlbiBsb25nIGZpbGUg bmFtZXMKLSAgICAgIGlmIChsZW5ndGgoJGZuYW1lKSA+PSA1OCkgewotICAgICAgICAkZm5hbWUg PSAiLi4uIiAuIHN1YnN0cigkZm5hbWUsIC01NSk7Ci0gICAgICB9Ci0gICAgICBwcmludGYoIi0t LS0tLS0tLS0tLS0tLS0tLS0tICVzXG4iLCAkZm5hbWUpOwotICAgIH0KLQotICAgICMgVE9ETzog Q29tcHV0ZSByYW5nZSBvZiBsaW5lcyB0byBwcmludCB0b2dldGhlciB0byBkZWFsIHdpdGgKLSAg ICAjIHNtYWxsIHJlb3JkZXJpbmdzLgotICAgIG15ICRmaXJzdF9saW5lID0gJGUtPlsyXTsKLSAg ICBteSAkbGFzdF9saW5lID0gJGZpcnN0X2xpbmU7Ci0gICAgbXkgJWZsYXRfc3VtID0gKCk7Ci0g ICAgbXkgJWN1bV9zdW0gPSAoKTsKLSAgICBmb3IgKG15ICRsID0gJGZpcnN0X2xpbmU7ICRsIDw9 ICRsYXN0X2xpbmU7ICRsKyspIHsKLSAgICAgICRmbGF0X3N1bXskbH0gPSAwOwotICAgICAgJGN1 bV9zdW17JGx9ID0gMDsKLSAgICB9Ci0KLSAgICAjIEZpbmQgcnVuIG9mIGluc3RydWN0aW9ucyBm b3IgdGhpcyByYW5nZSBvZiBzb3VyY2UgbGluZXMKLSAgICBteSAkZmlyc3RfaW5zdCA9ICRpOwot ICAgIHdoaWxlICgoJGkgPD0gJCNpbnN0cnVjdGlvbnMpICYmCi0gICAgICAgICAgICgkaW5zdHJ1 Y3Rpb25zWyRpXS0+WzJdID49ICRmaXJzdF9saW5lKSAmJgotICAgICAgICAgICAoJGluc3RydWN0 aW9uc1skaV0tPlsyXSA8PSAkbGFzdF9saW5lKSkgewotICAgICAgJGUgPSAkaW5zdHJ1Y3Rpb25z WyRpXTsKLSAgICAgICRmbGF0X3N1bXskZS0+WzJdfSArPSAkZmxhdF9jb3VudFskaV07Ci0gICAg ICAkY3VtX3N1bXskZS0+WzJdfSArPSAkY3VtX2NvdW50WyRpXTsKLSAgICAgICRpKys7Ci0gICAg fQotICAgIG15ICRsYXN0X2luc3QgPSAkaSAtIDE7Ci0KLSAgICAjIFByaW50IHNvdXJjZSBsaW5l cwotICAgIGZvciAobXkgJGwgPSAkZmlyc3RfbGluZTsgJGwgPD0gJGxhc3RfbGluZTsgJGwrKykg ewotICAgICAgbXkgJGxpbmUgPSBTb3VyY2VMaW5lKCRjdXJyZW50X2ZpbGUsICRsKTsKLSAgICAg IGlmICghZGVmaW5lZCgkbGluZSkpIHsKLSAgICAgICAgJGxpbmUgPSAiP1xuIjsKLSAgICAgICAg bmV4dDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgICRsaW5lID1+IHMvXlxzKy8vOwotICAgICAg fQotICAgICAgcHJpbnRmKCIlNnMgJTZzICU1ZDogJXMiLAotICAgICAgICAgICAgIFVucGFyc2VB bHQoJGZsYXRfc3VteyRsfSksCi0gICAgICAgICAgICAgVW5wYXJzZUFsdCgkY3VtX3N1bXskbH0p LAotICAgICAgICAgICAgICRsLAotICAgICAgICAgICAgICRsaW5lKTsKLSAgICB9Ci0KLSAgICAj IFByaW50IGRpc2Fzc2VtYmx5Ci0gICAgZm9yIChteSAkeCA9ICRmaXJzdF9pbnN0OyAkeCA8PSAk bGFzdF9pbnN0OyAkeCsrKSB7Ci0gICAgICBteSAkZSA9ICRpbnN0cnVjdGlvbnNbJHhdOwotICAg ICAgcHJpbnRmKCIlNnMgJTZzICAgICU4czogJTZzXG4iLAotICAgICAgICAgICAgIFVucGFyc2VB bHQoJGZsYXRfY291bnRbJHhdKSwKLSAgICAgICAgICAgICBVbnBhcnNlQWx0KCRjdW1fY291bnRb JHhdKSwKLSAgICAgICAgICAgICBVbnBhcnNlQWRkcmVzcygkb2Zmc2V0LCAkZS0+WzBdKSwKLSAg ICAgICAgICAgICBDbGVhbkRpc2Fzc2VtYmx5KCRlLT5bM10pKTsKLSAgICB9Ci0gIH0KLX0KLQot IyBQcmludCBET1QgZ3JhcGgKLXN1YiBQcmludERvdCB7Ci0gIG15ICRwcm9nID0gc2hpZnQ7Ci0g IG15ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRyYXcgPSBzaGlmdDsKLSAgbXkgJGZsYXQgPSBz aGlmdDsKLSAgbXkgJGN1bXVsYXRpdmUgPSBzaGlmdDsKLSAgbXkgJG92ZXJhbGxfdG90YWwgPSBz aGlmdDsKLQotICAjIEdldCB0b3RhbAotICBteSAkbG9jYWxfdG90YWwgPSBUb3RhbFByb2ZpbGUo JGZsYXQpOwotICBteSAkbm9kZWxpbWl0ID0gaW50KCRtYWluOjpvcHRfbm9kZWZyYWN0aW9uICog JGxvY2FsX3RvdGFsKTsKLSAgbXkgJGVkZ2VsaW1pdCA9IGludCgkbWFpbjo6b3B0X2VkZ2VmcmFj dGlvbiAqICRsb2NhbF90b3RhbCk7Ci0gIG15ICRub2RlY291bnQgPSAkbWFpbjo6b3B0X25vZGVj b3VudDsKLQotICAjIEZpbmQgbm9kZXMgdG8gaW5jbHVkZQotICBteSBAbGlzdCA9IChzb3J0IHsg YWJzKEdldEVudHJ5KCRjdW11bGF0aXZlLCAkYikpIDw9PgotICAgICAgICAgICAgICAgICAgICAg YWJzKEdldEVudHJ5KCRjdW11bGF0aXZlLCAkYSkpCi0gICAgICAgICAgICAgICAgICAgICB8fCAk YSBjbXAgJGIgfQotICAgICAgICAgICAgICBrZXlzKCV7JGN1bXVsYXRpdmV9KSk7Ci0gIG15ICRs YXN0ID0gJG5vZGVjb3VudCAtIDE7Ci0gIGlmICgkbGFzdCA+ICQjbGlzdCkgewotICAgICRsYXN0 ID0gJCNsaXN0OwotICB9Ci0gIHdoaWxlICgoJGxhc3QgPj0gMCkgJiYKLSAgICAgICAgIChhYnMo R2V0RW50cnkoJGN1bXVsYXRpdmUsICRsaXN0WyRsYXN0XSkpIDw9ICRub2RlbGltaXQpKSB7Ci0g ICAgJGxhc3QtLTsKLSAgfQotICBpZiAoJGxhc3QgPCAwKSB7Ci0gICAgcHJpbnQgU1RERVJSICJO byBub2RlcyB0byBwcmludFxuIjsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGlmICgkbm9kZWxp bWl0ID4gMCB8fCAkZWRnZWxpbWl0ID4gMCkgewotICAgIHByaW50ZiBTVERFUlIgKCJEcm9wcGlu ZyBub2RlcyB3aXRoIDw9ICVzICVzOyBlZGdlcyB3aXRoIDw9ICVzIGFicyglcylcbiIsCi0gICAg ICAgICAgICAgICAgICAgVW5wYXJzZSgkbm9kZWxpbWl0KSwgVW5pdHMoKSwKLSAgICAgICAgICAg ICAgICAgICBVbnBhcnNlKCRlZGdlbGltaXQpLCBVbml0cygpKTsKLSAgfQotCi0gICMgT3BlbiBE T1Qgb3V0cHV0IGZpbGUKLSAgbXkgJG91dHB1dDsKLSAgbXkgJGVzY2FwZWRfZG90ID0gU2hlbGxF c2NhcGUoQERPVCk7Ci0gIG15ICRlc2NhcGVkX3BzMnBkZiA9IFNoZWxsRXNjYXBlKEBQUzJQREYp OwotICBpZiAoJG1haW46Om9wdF9ndikgewotICAgIG15ICRlc2NhcGVkX291dGZpbGUgPSBTaGVs bEVzY2FwZShUZW1wTmFtZSgkbWFpbjo6bmV4dF90bXBmaWxlLCAicHMiKSk7Ci0gICAgJG91dHB1 dCA9ICJ8ICRlc2NhcGVkX2RvdCAtVHBzMiA+JGVzY2FwZWRfb3V0ZmlsZSI7Ci0gIH0gZWxzaWYg KCRtYWluOjpvcHRfZXZpbmNlKSB7Ci0gICAgbXkgJGVzY2FwZWRfb3V0ZmlsZSA9IFNoZWxsRXNj YXBlKFRlbXBOYW1lKCRtYWluOjpuZXh0X3RtcGZpbGUsICJwZGYiKSk7Ci0gICAgJG91dHB1dCA9 ICJ8ICRlc2NhcGVkX2RvdCAtVHBzMiB8ICRlc2NhcGVkX3BzMnBkZiAtICRlc2NhcGVkX291dGZp bGUiOwotICB9IGVsc2lmICgkbWFpbjo6b3B0X3BzKSB7Ci0gICAgJG91dHB1dCA9ICJ8ICRlc2Nh cGVkX2RvdCAtVHBzMiI7Ci0gIH0gZWxzaWYgKCRtYWluOjpvcHRfcGRmKSB7Ci0gICAgJG91dHB1 dCA9ICJ8ICRlc2NhcGVkX2RvdCAtVHBzMiB8ICRlc2NhcGVkX3BzMnBkZiAtIC0iOwotICB9IGVs c2lmICgkbWFpbjo6b3B0X3dlYiB8fCAkbWFpbjo6b3B0X3N2ZykgewotICAgICMgV2UgbmVlZCB0 byBwb3N0LXByb2Nlc3MgdGhlIFNWRywgc28gd3JpdGUgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbHdh eXMuCi0gICAgbXkgJGVzY2FwZWRfb3V0ZmlsZSA9IFNoZWxsRXNjYXBlKFRlbXBOYW1lKCRtYWlu OjpuZXh0X3RtcGZpbGUsICJzdmciKSk7Ci0gICAgJG91dHB1dCA9ICJ8ICRlc2NhcGVkX2RvdCAt VHN2ZyA+JGVzY2FwZWRfb3V0ZmlsZSI7Ci0gIH0gZWxzaWYgKCRtYWluOjpvcHRfZ2lmKSB7Ci0g ICAgJG91dHB1dCA9ICJ8ICRlc2NhcGVkX2RvdCAtVGdpZiI7Ci0gIH0gZWxzZSB7Ci0gICAgJG91 dHB1dCA9ICI+JlNURE9VVCI7Ci0gIH0KLSAgb3BlbihET1QsICRvdXRwdXQpIHx8IGVycm9yKCIk b3V0cHV0OiAkIVxuIik7Ci0KLSAgIyBUaXRsZQotICBwcmludGYgRE9UICgiZGlncmFwaCBcIiVz OyAlcyAlc1wiIHtcbiIsCi0gICAgICAgICAgICAgICRwcm9nLAotICAgICAgICAgICAgICBVbnBh cnNlKCRvdmVyYWxsX3RvdGFsKSwKLSAgICAgICAgICAgICAgVW5pdHMoKSk7Ci0gIGlmICgkbWFp bjo6b3B0X3BkZikgewotICAgICMgVGhlIG91dHB1dCBpcyBtb3JlIHByaW50YWJsZSBpZiB3ZSBz ZXQgdGhlIHBhZ2Ugc2l6ZSBmb3IgZG90LgotICAgIHByaW50ZiBET1QgKCJzaXplPVwiOCwxMVwi XG4iKTsKLSAgfQotICBwcmludGYgRE9UICgibm9kZSBbd2lkdGg9MC4zNzUsaGVpZ2h0PTAuMjVd O1xuIik7Ci0KLSAgIyBQcmludCBsZWdlbmQKLSAgcHJpbnRmIERPVCAoIkxlZ2VuZCBbc2hhcGU9 Ym94LGZvbnRzaXplPTI0LHNoYXBlPXBsYWludGV4dCwiIC4KLSAgICAgICAgICAgICAgImxhYmVs PVwiJXNcXGwlc1xcbCVzXFxsJXNcXGwlc1xcbFwiXTtcbiIsCi0gICAgICAgICAgICAgICRwcm9n LAotICAgICAgICAgICAgICBzcHJpbnRmKCJUb3RhbCAlczogJXMiLCBVbml0cygpLCBVbnBhcnNl KCRvdmVyYWxsX3RvdGFsKSksCi0gICAgICAgICAgICAgIHNwcmludGYoIkZvY3VzaW5nIG9uOiAl cyIsIFVucGFyc2UoJGxvY2FsX3RvdGFsKSksCi0gICAgICAgICAgICAgIHNwcmludGYoIkRyb3Bw ZWQgbm9kZXMgd2l0aCA8PSAlcyBhYnMoJXMpIiwKLSAgICAgICAgICAgICAgICAgICAgICBVbnBh cnNlKCRub2RlbGltaXQpLCBVbml0cygpKSwKLSAgICAgICAgICAgICAgc3ByaW50ZigiRHJvcHBl ZCBlZGdlcyB3aXRoIDw9ICVzICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICBVbnBhcnNlKCRl ZGdlbGltaXQpLCBVbml0cygpKQotICAgICAgICAgICAgICApOwotCi0gICMgUHJpbnQgbm9kZXMK LSAgbXkgJW5vZGUgPSAoKTsKLSAgbXkgJG5leHRub2RlID0gMTsKLSAgZm9yZWFjaCBteSAkYSAo QGxpc3RbMC4uJGxhc3RdKSB7Ci0gICAgIyBQaWNrIGZvbnQgc2l6ZQotICAgIG15ICRmID0gR2V0 RW50cnkoJGZsYXQsICRhKTsKLSAgICBteSAkYyA9IEdldEVudHJ5KCRjdW11bGF0aXZlLCAkYSk7 Ci0KLSAgICBteSAkZnMgPSA4OwotICAgIGlmICgkbG9jYWxfdG90YWwgPiAwKSB7Ci0gICAgICAk ZnMgPSA4ICsgKDUwLjAgKiBzcXJ0KGFicygkZiAqIDEuMCAvICRsb2NhbF90b3RhbCkpKTsKLSAg ICB9Ci0KLSAgICAkbm9kZXskYX0gPSAkbmV4dG5vZGUrKzsKLSAgICBteSAkc3ltID0gJGE7Ci0g ICAgJHN5bSA9fiBzL1xzKy9cXG4vZzsKLSAgICAkc3ltID1+IHMvOjovXFxuL2c7Ci0KLSAgICAj IEV4dHJhIGN1bXVsYXRpdmUgaW5mbyB0byBwcmludCBmb3Igbm9uLWxlYXZlcwotICAgIG15ICRl eHRyYSA9ICIiOwotICAgIGlmICgkZiAhPSAkYykgewotICAgICAgJGV4dHJhID0gc3ByaW50Zigi XFxyb2YgJXMgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgIFVucGFyc2UoJGMpLAotICAg ICAgICAgICAgICAgICAgICAgICBQZXJjZW50KCRjLCAkbG9jYWxfdG90YWwpKTsKLSAgICB9Ci0g ICAgbXkgJHN0eWxlID0gIiI7Ci0gICAgaWYgKCRtYWluOjpvcHRfaGVhcGNoZWNrKSB7Ci0gICAg ICBpZiAoJGYgPiAwKSB7Ci0gICAgICAgICMgbWFrZSBsZWFrLWNhdXNpbmcgbm9kZXMgbW9yZSB2 aXNpYmxlIChhZGQgYSBiYWNrZ3JvdW5kKQotICAgICAgICAkc3R5bGUgPSAiLHN0eWxlPWZpbGxl ZCxmaWxsY29sb3I9Z3JheSIKLSAgICAgIH0gZWxzaWYgKCRmIDwgMCkgewotICAgICAgICAjIG1h a2UgYW50aS1sZWFrLWNhdXNpbmcgbm9kZXMgKHdoaWNoIGFsbW9zdCBuZXZlciBvY2N1cikKLSAg ICAgICAgIyBzdGFuZCBvdXQgYXMgd2VsbCAodHJpcGxlIGJvcmRlcikKLSAgICAgICAgJHN0eWxl ID0gIixwZXJpcGhlcmllcz0zIgotICAgICAgfQotICAgIH0KLQotICAgIHByaW50ZiBET1QgKCJO JWQgW2xhYmVsPVwiJXNcXG4lcyAoJXMpJXNcXHIiIC4KLSAgICAgICAgICAgICAgICAiXCIsc2hh cGU9Ym94LGZvbnRzaXplPSUuMWYlc107XG4iLAotICAgICAgICAgICAgICAgICRub2RleyRhfSwK LSAgICAgICAgICAgICAgICAkc3ltLAotICAgICAgICAgICAgICAgIFVucGFyc2UoJGYpLAotICAg ICAgICAgICAgICAgIFBlcmNlbnQoJGYsICRsb2NhbF90b3RhbCksCi0gICAgICAgICAgICAgICAg JGV4dHJhLAotICAgICAgICAgICAgICAgICRmcywKLSAgICAgICAgICAgICAgICAkc3R5bGUsCi0g ICAgICAgICAgICAgICApOwotICB9Ci0KLSAgIyBHZXQgZWRnZXMgYW5kIGNvdW50cyBwZXIgZWRn ZQotICBteSAlZWRnZSA9ICgpOwotICBteSAkbjsKLSAgbXkgJGZ1bGxuYW1lX3RvX3Nob3J0bmFt ZV9tYXAgPSB7fTsKLSAgRmlsbEZ1bGxuYW1lVG9TaG9ydG5hbWVNYXAoJHN5bWJvbHMsICRmdWxs bmFtZV90b19zaG9ydG5hbWVfbWFwKTsKLSAgZm9yZWFjaCBteSAkayAoa2V5cygleyRyYXd9KSkg ewotICAgICMgVE9ETzogb21pdCBsb3cgJWFnZSBlZGdlcwotICAgICRuID0gJHJhdy0+eyRrfTsK LSAgICBteSBAdHJhbnNsYXRlZCA9IFRyYW5zbGF0ZVN0YWNrKCRzeW1ib2xzLCAkZnVsbG5hbWVf dG9fc2hvcnRuYW1lX21hcCwgJGspOwotICAgIGZvciAobXkgJGkgPSAxOyAkaSA8PSAkI3RyYW5z bGF0ZWQ7ICRpKyspIHsKLSAgICAgIG15ICRzcmMgPSAkdHJhbnNsYXRlZFskaV07Ci0gICAgICBt eSAkZHN0ID0gJHRyYW5zbGF0ZWRbJGktMV07Ci0gICAgICAjbmV4dCBpZiAoJHNyYyBlcSAkZHN0 KTsgICMgQXZvaWQgc2VsZi1lZGdlcz8KLSAgICAgIGlmIChleGlzdHMoJG5vZGV7JHNyY30pICYm IGV4aXN0cygkbm9kZXskZHN0fSkpIHsKLSAgICAgICAgbXkgJGVkZ2VfbGFiZWwgPSAiJHNyY1ww MDEkZHN0IjsKLSAgICAgICAgaWYgKCFleGlzdHMoJGVkZ2V7JGVkZ2VfbGFiZWx9KSkgewotICAg ICAgICAgICRlZGdleyRlZGdlX2xhYmVsfSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgJGVkZ2V7 JGVkZ2VfbGFiZWx9ICs9ICRuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gICMgUHJpbnQgZWRn ZXMgKHByb2Nlc3MgaW4gb3JkZXIgb2YgZGVjcmVhc2luZyBjb3VudHMpCi0gIG15ICVpbmRlZ3Jl ZSA9ICgpOyAgICMgTnVtYmVyIG9mIGluY29taW5nIGVkZ2VzIGFkZGVkIHBlciBub2RlIHNvIGZh cgotICBteSAlb3V0ZGVncmVlID0gKCk7ICAjIE51bWJlciBvZiBvdXRnb2luZyBlZGdlcyBhZGRl ZCBwZXIgbm9kZSBzbyBmYXIKLSAgZm9yZWFjaCBteSAkZSAoc29ydCB7ICRlZGdleyRifSA8PT4g JGVkZ2V7JGF9IH0ga2V5cyglZWRnZSkpIHsKLSAgICBteSBAeCA9IHNwbGl0KC9cMDAxLywgJGUp OwotICAgICRuID0gJGVkZ2V7JGV9OwotCi0gICAgIyBJbml0aWFsaXplIGRlZ3JlZSBvZiBrZXB0 IGluY29taW5nIGFuZCBvdXRnb2luZyBlZGdlcyBpZiBuZWNlc3NhcnkKLSAgICBteSAkc3JjID0g JHhbMF07Ci0gICAgbXkgJGRzdCA9ICR4WzFdOwotICAgIGlmICghZXhpc3RzKCRvdXRkZWdyZWV7 JHNyY30pKSB7ICRvdXRkZWdyZWV7JHNyY30gPSAwOyB9Ci0gICAgaWYgKCFleGlzdHMoJGluZGVn cmVleyRkc3R9KSkgeyAkaW5kZWdyZWV7JGRzdH0gPSAwOyB9Ci0KLSAgICBteSAka2VlcDsKLSAg ICBpZiAoJGluZGVncmVleyRkc3R9ID09IDApIHsKLSAgICAgICMgS2VlcCBlZGdlIGlmIG5lZWRl ZCBmb3IgcmVhY2hhYmlsaXR5Ci0gICAgICAka2VlcCA9IDE7Ci0gICAgfSBlbHNpZiAoYWJzKCRu KSA8PSAkZWRnZWxpbWl0KSB7Ci0gICAgICAjIERyb3AgaWYgd2UgYXJlIGJlbG93IC0tZWRnZWZy YWN0aW9uCi0gICAgICAka2VlcCA9IDA7Ci0gICAgfSBlbHNpZiAoJG91dGRlZ3JlZXskc3JjfSA+ PSAkbWFpbjo6b3B0X21heGRlZ3JlZSB8fAotICAgICAgICAgICAgICRpbmRlZ3JlZXskZHN0fSA+ PSAkbWFpbjo6b3B0X21heGRlZ3JlZSkgewotICAgICAgIyBLZWVwIGxpbWl0ZWQgbnVtYmVyIG9m IGluL291dCBlZGdlcyBwZXIgbm9kZQotICAgICAgJGtlZXAgPSAwOwotICAgIH0gZWxzZSB7Ci0g ICAgICAka2VlcCA9IDE7Ci0gICAgfQotCi0gICAgaWYgKCRrZWVwKSB7Ci0gICAgICAkb3V0ZGVn cmVleyRzcmN9Kys7Ci0gICAgICAkaW5kZWdyZWV7JGRzdH0rKzsKLQotICAgICAgIyBDb21wdXRl IGxpbmUgd2lkdGggYmFzZWQgb24gZWRnZSBjb3VudAotICAgICAgbXkgJGZyYWN0aW9uID0gYWJz KCRsb2NhbF90b3RhbCA/ICgzICogKCRuIC8gJGxvY2FsX3RvdGFsKSkgOiAwKTsKLSAgICAgIGlm ICgkZnJhY3Rpb24gPiAxKSB7ICRmcmFjdGlvbiA9IDE7IH0KLSAgICAgIG15ICR3ID0gJGZyYWN0 aW9uICogMjsKLSAgICAgIGlmICgkdyA8IDEgJiYgKCRtYWluOjpvcHRfd2ViIHx8ICRtYWluOjpv cHRfc3ZnKSkgewotICAgICAgICAjIFNWRyBvdXRwdXQgdHJlYXRzIGxpbmUgd2lkdGhzIDwgMSBw b29ybHkuCi0gICAgICAgICR3ID0gMTsKLSAgICAgIH0KLQotICAgICAgIyBEb3Qgc29tZXRpbWVz IHNlZ2ZhdWx0cyBpZiBnaXZlbiBlZGdlIHdlaWdodHMgdGhhdCBhcmUgdG9vIGxhcmdlLCBzbwot ICAgICAgIyB3ZSBjYXAgdGhlIHdlaWdodHMgYXQgYSBsYXJnZSB2YWx1ZQotICAgICAgbXkgJGVk Z2V3ZWlnaHQgPSBhYnMoJG4pICoqIDAuNzsKLSAgICAgIGlmICgkZWRnZXdlaWdodCA+IDEwMDAw MCkgeyAkZWRnZXdlaWdodCA9IDEwMDAwMDsgfQotICAgICAgJGVkZ2V3ZWlnaHQgPSBpbnQoJGVk Z2V3ZWlnaHQpOwotCi0gICAgICBteSAkc3R5bGUgPSBzcHJpbnRmKCJzZXRsaW5ld2lkdGgoJWYp IiwgJHcpOwotICAgICAgaWYgKCR4WzFdID1+IG0vXChpbmxpbmVcKS8pIHsKLSAgICAgICAgJHN0 eWxlIC49ICIsZGFzaGVkIjsKLSAgICAgIH0KLQotICAgICAgIyBVc2UgYSBzbGlnaHRseSBzcXVh c2hlZCBmdW5jdGlvbiBvZiB0aGUgZWRnZSBjb3VudCBhcyB0aGUgd2VpZ2h0Ci0gICAgICBwcmlu dGYgRE9UICgiTiVzIC0+IE4lcyBbbGFiZWw9JXMsIHdlaWdodD0lZCwgc3R5bGU9XCIlc1wiXTtc biIsCi0gICAgICAgICAgICAgICAgICAkbm9kZXskeFswXX0sCi0gICAgICAgICAgICAgICAgICAk bm9kZXskeFsxXX0sCi0gICAgICAgICAgICAgICAgICBVbnBhcnNlKCRuKSwKLSAgICAgICAgICAg ICAgICAgICRlZGdld2VpZ2h0LAotICAgICAgICAgICAgICAgICAgJHN0eWxlKTsKLSAgICB9Ci0g IH0KLQotICBwcmludCBET1QgKCJ9XG4iKTsKLSAgY2xvc2UoRE9UKTsKLQotICBpZiAoJG1haW46 Om9wdF93ZWIgfHwgJG1haW46Om9wdF9zdmcpIHsKLSAgICAjIFJld3JpdGUgU1ZHIHRvIGJlIG1v cmUgdXNhYmxlIGluc2lkZSB3ZWIgYnJvd3Nlci4KLSAgICBSZXdyaXRlU3ZnKFRlbXBOYW1lKCRt YWluOjpuZXh0X3RtcGZpbGUsICJzdmciKSk7Ci0gIH0KLQotICByZXR1cm4gMTsKLX0KLQotc3Vi IFJld3JpdGVTdmcgewotICBteSAkc3ZnZmlsZSA9IHNoaWZ0OwotCi0gIG9wZW4oU1ZHLCAkc3Zn ZmlsZSkgfHwgZGllICJvcGVuIHRlbXAgc3ZnOiAkISI7Ci0gIG15IEBzdmcgPSA8U1ZHPjsKLSAg Y2xvc2UoU1ZHKTsKLSAgdW5saW5rICRzdmdmaWxlOwotICBteSAkc3ZnID0gam9pbignJywgQHN2 Zyk7Ci0KLSAgIyBEb3QncyBTVkcgb3V0cHV0IGlzCi0gICMKLSAgIyAgICA8c3ZnIHdpZHRoPSJf X18iIGhlaWdodD0iX19fIgotICAjICAgICB2aWV3Qm94PSJfX18iIHhtbG5zPS4uLj4KLSAgIyAg ICA8ZyBpZD0iZ3JhcGgwIiB0cmFuc2Zvcm09Ii4uLiI+Ci0gICMgICAgLi4uCi0gICMgICAgPC9n PgotICAjICAgIDwvc3ZnPgotICAjCi0gICMgQ2hhbmdlIGl0IHRvCi0gICMKLSAgIyAgICA8c3Zn IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiCi0gICMgICAgIHhtbG5zPS4uLj4KLSAgIyAgICAk c3ZnX2phdmFzY3JpcHQKLSAgIyAgICA8ZyBpZD0idmlld3BvcnQiIHRyYW5zZm9ybT0idHJhbnNs YXRlKDAsMCkiPgotICAjICAgIDxnIGlkPSJncmFwaDAiIHRyYW5zZm9ybT0iLi4uIj4KLSAgIyAg ICAuLi4KLSAgIyAgICA8L2c+Ci0gICMgICAgPC9nPgotICAjICAgIDwvc3ZnPgotCi0gICMgRml4 IHdpZHRoLCBoZWlnaHQ7IGRyb3Agdmlld0JveC4KLSAgJHN2ZyA9fiBzLyg/cyk8c3ZnIHdpZHRo PSJbXiJdKyIgaGVpZ2h0PSJbXiJdKyIoLio/KXZpZXdCb3g9IlteIl0rIi88c3ZnIHdpZHRoPSIx MDAlIiBoZWlnaHQ9IjEwMCUiJDEvOwotCi0gICMgSW5zZXJ0IHNjcmlwdCwgdmlld3BvcnQgPGc+ IGFib3ZlIGZpcnN0IDxnPgotICBteSAkc3ZnX2phdmFzY3JpcHQgPSBTdmdKYXZhc2NyaXB0KCk7 Ci0gIG15ICR2aWV3cG9ydCA9ICI8ZyBpZD1cInZpZXdwb3J0XCIgdHJhbnNmb3JtPVwidHJhbnNs YXRlKDAsMClcIj5cbiI7Ci0gICRzdmcgPX4gcy88ZyBpZD0iZ3JhcGhcZCIvJHN2Z19qYXZhc2Ny aXB0JHZpZXdwb3J0JCYvOwotCi0gICMgSW5zZXJ0IGZpbmFsIDwvZz4gYWJvdmUgPC9zdmc+Lgot ICAkc3ZnID1+IHMvKC4qKSg8XC9zdmc+KS8kMTxcL2c+JDIvOwotICAkc3ZnID1+IHMvPGcgaWQ9 ImdyYXBoXGQiKC4qPykvPGcgaWQ9InZpZXdwb3J0IiQxLzsKLQotICBpZiAoJG1haW46Om9wdF9z dmcpIHsKLSAgICAjIC0tc3ZnOiB3cml0ZSB0byBzdGFuZGFyZCBvdXRwdXQuCi0gICAgcHJpbnQg JHN2ZzsKLSAgfSBlbHNlIHsKLSAgICAjIFdyaXRlIGJhY2sgdG8gdGVtcG9yYXJ5IGZpbGUuCi0g ICAgb3BlbihTVkcsICI+JHN2Z2ZpbGUiKSB8fCBkaWUgIm9wZW4gJHN2Z2ZpbGU6ICQhIjsKLSAg ICBwcmludCBTVkcgJHN2ZzsKLSAgICBjbG9zZShTVkcpOwotICB9Ci19Ci0KLXN1YiBTdmdKYXZh c2NyaXB0IHsKLSAgcmV0dXJuIDw8J0VPRic7Ci08c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlw dCI+PCFbQ0RBVEFbCi0vLyBTVkdQYW4KLS8vIGh0dHA6Ly93d3cuY3liZXJ6Lm9yZy9ibG9nLzIw MDkvMTIvMDgvc3ZncGFuLWEtamF2YXNjcmlwdC1zdmctcGFuem9vbWRyYWctbGlicmFyeS8KLS8v IExvY2FsIG1vZGlmaWNhdGlvbjogaWYodHJ1ZSB8fCAuLi4pIGJlbG93IHRvIGZvcmNlIHBhbm5p bmcsIG5ldmVyIG1vdmluZy4KLQotLyoqCi0gKiAgU1ZHUGFuIGxpYnJhcnkgMS4yCi0gKiA9PT09 PT09PT09PT09PT09PT09PQotICoKLSAqIEdpdmVuIGFuIHVuaXF1ZSBleGlzdGluZyBlbGVtZW50 IHdpdGggaWQgInZpZXdwb3J0IiwgaW5jbHVkaW5nIHRoZQotICogdGhlIGxpYnJhcnkgaW50byBh bnkgU1ZHIGFkZHMgdGhlIGZvbGxvd2luZyBjYXBhYmlsaXRpZXM6Ci0gKgotICogIC0gTW91c2Ug cGFubmluZwotICogIC0gTW91c2Ugem9vbWluZyAodXNpbmcgdGhlIHdoZWVsKQotICogIC0gT2Jq ZWN0IGRhcmdnaW5nCi0gKgotICogS25vd24gaXNzdWVzOgotICoKLSAqICAtIFpvb21pbmcgKHdo aWxlIHBhbm5pbmcpIG9uIFNhZmFyaSBoYXMgc3RpbGwgc29tZSBpc3N1ZXMKLSAqCi0gKiBSZWxl YXNlczoKLSAqCi0gKiAxLjIsIFNhdCBNYXIgMjAgMDg6NDI6NTAgR01UIDIwMTAsIFplbmcgWGlh b2h1aQotICoJRml4ZWQgYSBidWcgd2l0aCBicm93c2VyIG1vdXNlIGhhbmRsZXIgaW50ZXJhY3Rp b24KLSAqCi0gKiAxLjEsIFdlZCBGZWIgIDMgMTc6Mzk6MzMgR01UIDIwMTAsIFplbmcgWGlhb2h1 aQotICoJVXBkYXRlZCB0aGUgem9vbSBjb2RlIHRvIHN1cHBvcnQgdGhlIG1vdXNlIHdoZWVsIG9u IFNhZmFyaS9DaHJvbWUKLSAqCi0gKiAxLjAsIEFuZHJlYSBMZW9mcmVkZGkKLSAqCUZpcnN0IHJl bGVhc2UKLSAqCi0gKiBUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBC U0QgbGljZW5zZToKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEFuZHJlYSBMZW9mcmVkZGkg PGEubGVvZnJlZGRpQGl0Y2hhcm0uY29tPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKLSAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqICAgIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSwgdGhpcyBsaXN0IG9mCi0gKiAgICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCi0gKgotICogICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKLSAqICAg ICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICAgICBwcm92aWRlZCB3aXRo IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB bmRyZWEgTGVvZnJlZGRpIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICog V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFuZHJlYSBMZW9m cmVkZGkgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0g KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi0gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYKLSAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAq IFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQg ZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlCi0gKiBhdXRob3JzIGFuZCBzaG91bGQgbm90 IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZyBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVy IGV4cHJlc3NlZAotICogb3IgaW1wbGllZCwgb2YgQW5kcmVhIExlb2ZyZWRkaS4KLSAqLwotCi12 YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLQotdmFyIHN0YXRlID0gJ25vbmUn LCBzdGF0ZVRhcmdldCwgc3RhdGVPcmlnaW4sIHN0YXRlVGY7Ci0KLXNldHVwSGFuZGxlcnMocm9v dCk7Ci0KLS8qKgotICogUmVnaXN0ZXIgaGFuZGxlcnMKLSAqLwotZnVuY3Rpb24gc2V0dXBIYW5k bGVycyhyb290KXsKLQlzZXRBdHRyaWJ1dGVzKHJvb3QsIHsKLQkJIm9ubW91c2V1cCIgOiAiYWRk KGV2dCkiLAotCQkib25tb3VzZWRvd24iIDogImhhbmRsZU1vdXNlRG93bihldnQpIiwKLQkJIm9u bW91c2Vtb3ZlIiA6ICJoYW5kbGVNb3VzZU1vdmUoZXZ0KSIsCi0JCSJvbm1vdXNldXAiIDogImhh bmRsZU1vdXNlVXAoZXZ0KSIsCi0JCS8vIm9ubW91c2VvdXQiIDogImhhbmRsZU1vdXNlVXAoZXZ0 KSIsIC8vIERlY29tbWVudCB0aGlzIHRvIHN0b3AgdGhlIHBhbiBmdW5jdGlvbmFsaXR5IHdoZW4g ZHJhZ2dpbmcgb3V0IG9mIHRoZSBTVkcgZWxlbWVudAotCX0pOwotCi0JaWYobmF2aWdhdG9yLnVz ZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3dlYmtpdCcpID49IDApCi0JCXdpbmRvdy5h ZGRFdmVudExpc3RlbmVyKCdtb3VzZXdoZWVsJywgaGFuZGxlTW91c2VXaGVlbCwgZmFsc2UpOyAv LyBDaHJvbWUvU2FmYXJpCi0JZWxzZQotCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NTW91 c2VTY3JvbGwnLCBoYW5kbGVNb3VzZVdoZWVsLCBmYWxzZSk7IC8vIE90aGVycwotCi0JdmFyIGcg PSBzdmdEb2MuZ2V0RWxlbWVudEJ5SWQoInN2ZyIpOwotCWcud2lkdGggPSAiMTAwJSI7Ci0JZy5o ZWlnaHQgPSAiMTAwJSI7Ci19Ci0KLS8qKgotICogSW5zdGFuY2UgYW4gU1ZHUG9pbnQgb2JqZWN0 IHdpdGggZ2l2ZW4gZXZlbnQgY29vcmRpbmF0ZXMuCi0gKi8KLWZ1bmN0aW9uIGdldEV2ZW50UG9p bnQoZXZ0KSB7Ci0JdmFyIHAgPSByb290LmNyZWF0ZVNWR1BvaW50KCk7Ci0KLQlwLnggPSBldnQu Y2xpZW50WDsKLQlwLnkgPSBldnQuY2xpZW50WTsKLQotCXJldHVybiBwOwotfQotCi0vKioKLSAq IFNldHMgdGhlIGN1cnJlbnQgdHJhbnNmb3JtIG1hdHJpeCBvZiBhbiBlbGVtZW50LgotICovCi1m dW5jdGlvbiBzZXRDVE0oZWxlbWVudCwgbWF0cml4KSB7Ci0JdmFyIHMgPSAibWF0cml4KCIgKyBt YXRyaXguYSArICIsIiArIG1hdHJpeC5iICsgIiwiICsgbWF0cml4LmMgKyAiLCIgKyBtYXRyaXgu ZCArICIsIiArIG1hdHJpeC5lICsgIiwiICsgbWF0cml4LmYgKyAiKSI7Ci0KLQllbGVtZW50LnNl dEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwgcyk7Ci19Ci0KLS8qKgotICogRHVtcHMgYSBtYXRyaXgg dG8gYSBzdHJpbmcgKHVzZWZ1bCBmb3IgZGVidWcpLgotICovCi1mdW5jdGlvbiBkdW1wTWF0cml4 KG1hdHJpeCkgewotCXZhciBzID0gIlsgIiArIG1hdHJpeC5hICsgIiwgIiArIG1hdHJpeC5jICsg IiwgIiArIG1hdHJpeC5lICsgIlxuICAiICsgbWF0cml4LmIgKyAiLCAiICsgbWF0cml4LmQgKyAi LCAiICsgbWF0cml4LmYgKyAiXG4gIDAsIDAsIDEgXSI7Ci0KLQlyZXR1cm4gczsKLX0KLQotLyoq Ci0gKiBTZXRzIGF0dHJpYnV0ZXMgb2YgYW4gZWxlbWVudC4KLSAqLwotZnVuY3Rpb24gc2V0QXR0 cmlidXRlcyhlbGVtZW50LCBhdHRyaWJ1dGVzKXsKLQlmb3IgKGkgaW4gYXR0cmlidXRlcykKLQkJ ZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBpLCBhdHRyaWJ1dGVzW2ldKTsKLX0KLQotLyoq Ci0gKiBIYW5kbGUgbW91c2UgbW92ZSBldmVudC4KLSAqLwotZnVuY3Rpb24gaGFuZGxlTW91c2VX aGVlbChldnQpIHsKLQlpZihldnQucHJldmVudERlZmF1bHQpCi0JCWV2dC5wcmV2ZW50RGVmYXVs dCgpOwotCi0JZXZ0LnJldHVyblZhbHVlID0gZmFsc2U7Ci0KLQl2YXIgc3ZnRG9jID0gZXZ0LnRh cmdldC5vd25lckRvY3VtZW50OwotCi0JdmFyIGRlbHRhOwotCi0JaWYoZXZ0LndoZWVsRGVsdGEp Ci0JCWRlbHRhID0gZXZ0LndoZWVsRGVsdGEgLyAzNjAwOyAvLyBDaHJvbWUvU2FmYXJpCi0JZWxz ZQotCQlkZWx0YSA9IGV2dC5kZXRhaWwgLyAtOTA7IC8vIE1vemlsbGEKLQotCXZhciB6ID0gMSAr IGRlbHRhOyAvLyBab29tIGZhY3RvcjogMC45LzEuMQotCi0JdmFyIGcgPSBzdmdEb2MuZ2V0RWxl bWVudEJ5SWQoInZpZXdwb3J0Iik7Ci0KLQl2YXIgcCA9IGdldEV2ZW50UG9pbnQoZXZ0KTsKLQot CXAgPSBwLm1hdHJpeFRyYW5zZm9ybShnLmdldENUTSgpLmludmVyc2UoKSk7Ci0KLQkvLyBDb21w dXRlIG5ldyBzY2FsZSBtYXRyaXggaW4gY3VycmVudCBtb3VzZSBwb3NpdGlvbgotCXZhciBrID0g cm9vdC5jcmVhdGVTVkdNYXRyaXgoKS50cmFuc2xhdGUocC54LCBwLnkpLnNjYWxlKHopLnRyYW5z bGF0ZSgtcC54LCAtcC55KTsKLQotICAgICAgICBzZXRDVE0oZywgZy5nZXRDVE0oKS5tdWx0aXBs eShrKSk7Ci0KLQlzdGF0ZVRmID0gc3RhdGVUZi5tdWx0aXBseShrLmludmVyc2UoKSk7Ci19Ci0K LS8qKgotICogSGFuZGxlIG1vdXNlIG1vdmUgZXZlbnQuCi0gKi8KLWZ1bmN0aW9uIGhhbmRsZU1v dXNlTW92ZShldnQpIHsKLQlpZihldnQucHJldmVudERlZmF1bHQpCi0JCWV2dC5wcmV2ZW50RGVm YXVsdCgpOwotCi0JZXZ0LnJldHVyblZhbHVlID0gZmFsc2U7Ci0KLQl2YXIgc3ZnRG9jID0gZXZ0 LnRhcmdldC5vd25lckRvY3VtZW50OwotCi0JdmFyIGcgPSBzdmdEb2MuZ2V0RWxlbWVudEJ5SWQo InZpZXdwb3J0Iik7Ci0KLQlpZihzdGF0ZSA9PSAncGFuJykgewotCQkvLyBQYW4gbW9kZQotCQl2 YXIgcCA9IGdldEV2ZW50UG9pbnQoZXZ0KS5tYXRyaXhUcmFuc2Zvcm0oc3RhdGVUZik7Ci0KLQkJ c2V0Q1RNKGcsIHN0YXRlVGYuaW52ZXJzZSgpLnRyYW5zbGF0ZShwLnggLSBzdGF0ZU9yaWdpbi54 LCBwLnkgLSBzdGF0ZU9yaWdpbi55KSk7Ci0JfSBlbHNlIGlmKHN0YXRlID09ICdtb3ZlJykgewot CQkvLyBNb3ZlIG1vZGUKLQkJdmFyIHAgPSBnZXRFdmVudFBvaW50KGV2dCkubWF0cml4VHJhbnNm b3JtKGcuZ2V0Q1RNKCkuaW52ZXJzZSgpKTsKLQotCQlzZXRDVE0oc3RhdGVUYXJnZXQsIHJvb3Qu Y3JlYXRlU1ZHTWF0cml4KCkudHJhbnNsYXRlKHAueCAtIHN0YXRlT3JpZ2luLngsIHAueSAtIHN0 YXRlT3JpZ2luLnkpLm11bHRpcGx5KGcuZ2V0Q1RNKCkuaW52ZXJzZSgpKS5tdWx0aXBseShzdGF0 ZVRhcmdldC5nZXRDVE0oKSkpOwotCi0JCXN0YXRlT3JpZ2luID0gcDsKLQl9Ci19Ci0KLS8qKgot ICogSGFuZGxlIGNsaWNrIGV2ZW50LgotICovCi1mdW5jdGlvbiBoYW5kbGVNb3VzZURvd24oZXZ0 KSB7Ci0JaWYoZXZ0LnByZXZlbnREZWZhdWx0KQotCQlldnQucHJldmVudERlZmF1bHQoKTsKLQot CWV2dC5yZXR1cm5WYWx1ZSA9IGZhbHNlOwotCi0JdmFyIHN2Z0RvYyA9IGV2dC50YXJnZXQub3du ZXJEb2N1bWVudDsKLQotCXZhciBnID0gc3ZnRG9jLmdldEVsZW1lbnRCeUlkKCJ2aWV3cG9ydCIp OwotCi0JaWYodHJ1ZSB8fCBldnQudGFyZ2V0LnRhZ05hbWUgPT0gInN2ZyIpIHsKLQkJLy8gUGFu IG1vZGUKLQkJc3RhdGUgPSAncGFuJzsKLQotCQlzdGF0ZVRmID0gZy5nZXRDVE0oKS5pbnZlcnNl KCk7Ci0KLQkJc3RhdGVPcmlnaW4gPSBnZXRFdmVudFBvaW50KGV2dCkubWF0cml4VHJhbnNmb3Jt KHN0YXRlVGYpOwotCX0gZWxzZSB7Ci0JCS8vIE1vdmUgbW9kZQotCQlzdGF0ZSA9ICdtb3ZlJzsK LQotCQlzdGF0ZVRhcmdldCA9IGV2dC50YXJnZXQ7Ci0KLQkJc3RhdGVUZiA9IGcuZ2V0Q1RNKCku aW52ZXJzZSgpOwotCi0JCXN0YXRlT3JpZ2luID0gZ2V0RXZlbnRQb2ludChldnQpLm1hdHJpeFRy YW5zZm9ybShzdGF0ZVRmKTsKLQl9Ci19Ci0KLS8qKgotICogSGFuZGxlIG1vdXNlIGJ1dHRvbiBy ZWxlYXNlIGV2ZW50LgotICovCi1mdW5jdGlvbiBoYW5kbGVNb3VzZVVwKGV2dCkgewotCWlmKGV2 dC5wcmV2ZW50RGVmYXVsdCkKLQkJZXZ0LnByZXZlbnREZWZhdWx0KCk7Ci0KLQlldnQucmV0dXJu VmFsdWUgPSBmYWxzZTsKLQotCXZhciBzdmdEb2MgPSBldnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQ7 Ci0KLQlpZihzdGF0ZSA9PSAncGFuJyB8fCBzdGF0ZSA9PSAnbW92ZScpIHsKLQkJLy8gUXVpdCBw YW4gbW9kZQotCQlzdGF0ZSA9ICcnOwotCX0KLX0KLQotXV0+PC9zY3JpcHQ+Ci1FT0YKLX0KLQot IyBQcm92aWRlcyBhIG1hcCBmcm9tIGZ1bGxuYW1lIHRvIHNob3J0bmFtZSBmb3IgY2FzZXMgd2hl cmUgdGhlCi0jIHNob3J0bmFtZSBpcyBhbWJpZ3VvdXMuICBUaGUgc3ltbGlzdCBoYXMgYm90aCB0 aGUgZnVsbG5hbWUgYW5kCi0jIHNob3J0bmFtZSBmb3IgYWxsIHN5bWJvbHMsIHdoaWNoIGlzIHVz dWFsbHkgZmluZSwgYnV0IHNvbWV0aW1lcyAtLQotIyBzdWNoIGFzIG92ZXJsb2FkZWQgZnVuY3Rp b25zIC0tIHR3byBkaWZmZXJlbnQgZnVsbG5hbWVzIGNhbiBtYXAgdG8KLSMgdGhlIHNhbWUgc2hv cnRuYW1lLiAgSW4gdGhhdCBjYXNlLCB3ZSB1c2UgdGhlIGFkZHJlc3Mgb2YgdGhlCi0jIGZ1bmN0 aW9uIHRvIGRpc2FtYmlndWF0ZSB0aGUgdHdvLiAgVGhpcyBmdW5jdGlvbiBmaWxscyBpbiBhIG1h cCB0aGF0Ci0jIG1hcHMgZnVsbG5hbWVzIHRvIG1vZGlmaWVkIHNob3J0bmFtZXMgaW4gc3VjaCBj YXNlcy4gIElmIGEgZnVsbG5hbWUKLSMgaXMgbm90IHByZXNlbnQgaW4gdGhlIG1hcCwgdGhlICdu b3JtYWwnIHNob3J0bmFtZSBwcm92aWRlZCBieSB0aGUKLSMgc3ltbGlzdCBpcyB0aGUgYXBwcm9w cmlhdGUgb25lIHRvIHVzZS4KLXN1YiBGaWxsRnVsbG5hbWVUb1Nob3J0bmFtZU1hcCB7Ci0gIG15 ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRmdWxsbmFtZV90b19zaG9ydG5hbWVfbWFwID0gc2hp ZnQ7Ci0gIG15ICRzaG9ydG5hbWVzX3NlZW5fb25jZSA9IHt9OwotICBteSAkc2hvcnRuYW1lc19z ZWVuX21vcmVfdGhhbl9vbmNlID0ge307Ci0KLSAgZm9yZWFjaCBteSAkc3ltbGlzdCAodmFsdWVz KCV7JHN5bWJvbHN9KSkgewotICAgICMgVE9ETyhjc2lsdmVycyk6IGRlYWwgd2l0aCBpbmxpbmVk IHN5bWJvbHMgdG9vLgotICAgIG15ICRzaG9ydG5hbWUgPSAkc3ltbGlzdC0+WzBdOwotICAgIG15 ICRmdWxsbmFtZSA9ICRzeW1saXN0LT5bMl07Ci0gICAgaWYgKCRmdWxsbmFtZSAhfiAvPFswLTlh LWZBLUZdKz4kLykgeyAgIyBmdWxsbmFtZSBkb2Vzbid0IGVuZCBpbiBhbiBhZGRyZXNzCi0gICAg ICBuZXh0OyAgICAgICAjIHRoZSBvbmx5IGNvbGxpc2lvbnMgd2UgY2FyZSBhYm91dCBhcmUgd2hl biBhZGRyZXNzZXMgZGlmZmVyCi0gICAgfQotICAgIGlmIChkZWZpbmVkKCRzaG9ydG5hbWVzX3Nl ZW5fb25jZS0+eyRzaG9ydG5hbWV9KSAmJgotICAgICAgICAkc2hvcnRuYW1lc19zZWVuX29uY2Ut Pnskc2hvcnRuYW1lfSBuZSAkZnVsbG5hbWUpIHsKLSAgICAgICRzaG9ydG5hbWVzX3NlZW5fbW9y ZV90aGFuX29uY2UtPnskc2hvcnRuYW1lfSA9IDE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICRzaG9y dG5hbWVzX3NlZW5fb25jZS0+eyRzaG9ydG5hbWV9ID0gJGZ1bGxuYW1lOwotICAgIH0KLSAgfQot Ci0gIGZvcmVhY2ggbXkgJHN5bWxpc3QgKHZhbHVlcygleyRzeW1ib2xzfSkpIHsKLSAgICBteSAk c2hvcnRuYW1lID0gJHN5bWxpc3QtPlswXTsKLSAgICBteSAkZnVsbG5hbWUgPSAkc3ltbGlzdC0+ WzJdOwotICAgICMgVE9ETyhjc2lsdmVycyk6IHRha2UgaW4gYSBsaXN0IG9mIGFkZHJlc3NlcyB3 ZSBjYXJlIGFib3V0LCBhbmQgb25seQotICAgICMgc3RvcmUgaW4gdGhlIG1hcCBpZiAkc3ltbGlz dC0+WzFdIGlzIGluIHRoYXQgbGlzdC4gIFNhdmVzIHNwYWNlLgotICAgIG5leHQgaWYgZGVmaW5l ZCgkZnVsbG5hbWVfdG9fc2hvcnRuYW1lX21hcC0+eyRmdWxsbmFtZX0pOwotICAgIGlmIChkZWZp bmVkKCRzaG9ydG5hbWVzX3NlZW5fbW9yZV90aGFuX29uY2UtPnskc2hvcnRuYW1lfSkpIHsKLSAg ICAgIGlmICgkZnVsbG5hbWUgPX4gLzwwKihbXj5dKik+JC8pIHsgICAjIGZ1bGxuYW1lIGhhcyBh ZGRyZXNzIGF0IGVuZCBvZiBpdAotICAgICAgICAkZnVsbG5hbWVfdG9fc2hvcnRuYW1lX21hcC0+ eyRmdWxsbmFtZX0gPSAiJHNob3J0bmFtZVxAJDEiOwotICAgICAgfQotICAgIH0KLSAgfQotfQot Ci0jIFJldHVybiBhIHNtYWxsIG51bWJlciB0aGF0IGlkZW50aWZpZXMgdGhlIGFyZ3VtZW50Lgot IyBNdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50IHdpbGwgcmV0dXJuIHRoZSBz YW1lIG51bWJlci4KLSMgQ2FsbHMgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnRzIHdpbGwgcmV0dXJu IGRpZmZlcmVudCBudW1iZXJzLgotc3ViIFNob3J0SWRGb3IgewotICBteSAka2V5ID0gc2hpZnQ7 Ci0gIG15ICRpZCA9ICRtYWluOjp1bmlxdWVpZHska2V5fTsKLSAgaWYgKCFkZWZpbmVkKCRpZCkp IHsKLSAgICAkaWQgPSBrZXlzKCVtYWluOjp1bmlxdWVpZCkgKyAxOwotICAgICRtYWluOjp1bmlx dWVpZHska2V5fSA9ICRpZDsKLSAgfQotICByZXR1cm4gJGlkOwotfQotCi0jIFRyYW5zbGF0ZSBh IHN0YWNrIG9mIGFkZHJlc3NlcyBpbnRvIGEgc3RhY2sgb2Ygc3ltYm9scwotc3ViIFRyYW5zbGF0 ZVN0YWNrIHsKLSAgbXkgJHN5bWJvbHMgPSBzaGlmdDsKLSAgbXkgJGZ1bGxuYW1lX3RvX3Nob3J0 bmFtZV9tYXAgPSBzaGlmdDsKLSAgbXkgJGsgPSBzaGlmdDsKLQotICBteSBAYWRkcnMgPSBzcGxp dCgvXG4vLCAkayk7Ci0gIG15IEByZXN1bHQgPSAoKTsKLSAgZm9yIChteSAkaSA9IDA7ICRpIDw9 ICQjYWRkcnM7ICRpKyspIHsKLSAgICBteSAkYSA9ICRhZGRyc1skaV07Ci0KLSAgICAjIFNraXAg bGFyZ2UgYWRkcmVzc2VzIHNpbmNlIHRoZXkgc29tZXRpbWVzIHNob3cgdXAgYXMgZmFrZSBlbnRy aWVzIG9uIFJIOQotICAgIGlmIChsZW5ndGgoJGEpID4gOCAmJiAkYSBndCAiN2ZmZmZmZmZmZmZm ZmZmZiIpIHsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCRtYWluOjpvcHRfZGlzYXNt IHx8ICRtYWluOjpvcHRfbGlzdCkgewotICAgICAgIyBXZSB3YW50IGp1c3QgdGhlIGFkZHJlc3Mg Zm9yIHRoZSBrZXkKLSAgICAgIHB1c2goQHJlc3VsdCwgJGEpOwotICAgICAgbmV4dDsKLSAgICB9 Ci0KLSAgICBteSAkc3ltbGlzdCA9ICRzeW1ib2xzLT57JGF9OwotICAgIGlmICghZGVmaW5lZCgk c3ltbGlzdCkpIHsKLSAgICAgICRzeW1saXN0ID0gWyRhLCAiIiwgJGFdOwotICAgIH0KLQotICAg ICMgV2UgY2FuIGhhdmUgYSBzZXF1ZW5jZSBvZiBzeW1ib2xzIGZvciBhIHBhcnRpY3VsYXIgZW50 cnkKLSAgICAjIChtb3JlIHRoYW4gb25lIHN5bWJvbCBpbiB0aGUgY2FzZSBvZiBpbmxpbmluZyku ICBDYWxsZXJzCi0gICAgIyBjb21lIGJlZm9yZSBjYWxsZWVzIGluIHN5bWxpc3QsIHNvIHdhbGsg YmFja3dhcmRzIHNpbmNlCi0gICAgIyB0aGUgdHJhbnNsYXRlZCBzdGFjayBzaG91bGQgY29udGFp biBjYWxsZWVzIGJlZm9yZSBjYWxsZXJzLgotICAgIGZvciAobXkgJGogPSAkI3skc3ltbGlzdH07 ICRqID49IDI7ICRqIC09IDMpIHsKLSAgICAgIG15ICRmdW5jID0gJHN5bWxpc3QtPlskai0yXTsK LSAgICAgIG15ICRmaWxlbGluZSA9ICRzeW1saXN0LT5bJGotMV07Ci0gICAgICBteSAkZnVsbGZ1 bmMgPSAkc3ltbGlzdC0+WyRqXTsKLSAgICAgIGlmIChkZWZpbmVkKCRmdWxsbmFtZV90b19zaG9y dG5hbWVfbWFwLT57JGZ1bGxmdW5jfSkpIHsKLSAgICAgICAgJGZ1bmMgPSAkZnVsbG5hbWVfdG9f c2hvcnRuYW1lX21hcC0+eyRmdWxsZnVuY307Ci0gICAgICB9Ci0gICAgICBpZiAoJGogPiAyKSB7 Ci0gICAgICAgICRmdW5jID0gIiRmdW5jIChpbmxpbmUpIjsKLSAgICAgIH0KLQotICAgICAgIyBE byBub3QgbWVyZ2Ugbm9kZXMgY29ycmVzcG9uZGluZyB0byBDYWxsYmFjazo6UnVuIHNpbmNlIHRo YXQKLSAgICAgICMgY2F1c2VzIGNvbmZ1c2luZyBjeWNsZXMgaW4gZG90IGRpc3BsYXkuICBJbnN0 ZWFkLCB3ZSBzeW50aGVzaXplCi0gICAgICAjIGEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgZnJhbWUg cGVyIGNhbGxlci4KLSAgICAgIGlmICgkZnVuYyA9fiBtL0NhbGxiYWNrLio6OlJ1biQvKSB7Ci0g ICAgICAgIG15ICRjYWxsZXIgPSAoJGkgPiAwKSA/ICRhZGRyc1skaS0xXSA6IDA7Ci0gICAgICAg ICRmdW5jID0gIlJ1biMiIC4gU2hvcnRJZEZvcigkY2FsbGVyKTsKLSAgICAgIH0KLQotICAgICAg aWYgKCRtYWluOjpvcHRfYWRkcmVzc2VzKSB7Ci0gICAgICAgIHB1c2goQHJlc3VsdCwgIiRhICRm dW5jICRmaWxlbGluZSIpOwotICAgICAgfSBlbHNpZiAoJG1haW46Om9wdF9saW5lcykgewotICAg ICAgICBpZiAoJGZ1bmMgZXEgJz8/JyAmJiAkZmlsZWxpbmUgZXEgJz8/OjAnKSB7Ci0gICAgICAg ICAgcHVzaChAcmVzdWx0LCAiJGEiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwdXNo KEByZXN1bHQsICIkZnVuYyAkZmlsZWxpbmUiKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNpZiAo JG1haW46Om9wdF9mdW5jdGlvbnMpIHsKLSAgICAgICAgaWYgKCRmdW5jIGVxICc/PycpIHsKLSAg ICAgICAgICBwdXNoKEByZXN1bHQsICIkYSIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg IHB1c2goQHJlc3VsdCwgJGZ1bmMpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2lmICgkbWFpbjo6 b3B0X2ZpbGVzKSB7Ci0gICAgICAgIGlmICgkZmlsZWxpbmUgZXEgJz8/OjAnIHx8ICRmaWxlbGlu ZSBlcSAnJykgewotICAgICAgICAgIHB1c2goQHJlc3VsdCwgIiRhIik7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgbXkgJGYgPSAkZmlsZWxpbmU7Ci0gICAgICAgICAgJGYgPX4gcy86XGQr JC8vOwotICAgICAgICAgIHB1c2goQHJlc3VsdCwgJGYpOwotICAgICAgICB9Ci0gICAgICB9IGVs c2UgewotICAgICAgICBwdXNoKEByZXN1bHQsICRhKTsKLSAgICAgICAgbGFzdDsgICMgRG8gbm90 IHByaW50IGlubGluZWQgaW5mbwotICAgICAgfQotICAgIH0KLSAgfQotCi0gICMgcHJpbnQgam9p bigiLCIsIEBhZGRycyksICIgPT4gIiwgam9pbigiLCIsIEByZXN1bHQpLCAiXG4iOwotICByZXR1 cm4gQHJlc3VsdDsKLX0KLQotIyBHZW5lcmF0ZSBwZXJjZW50IHN0cmluZyBmb3IgYSBudW1iZXIg YW5kIGEgdG90YWwKLXN1YiBQZXJjZW50IHsKLSAgbXkgJG51bSA9IHNoaWZ0OwotICBteSAkdG90 ID0gc2hpZnQ7Ci0gIGlmICgkdG90ICE9IDApIHsKLSAgICByZXR1cm4gc3ByaW50ZigiJS4xZiUl IiwgJG51bSAqIDEwMC4wIC8gJHRvdCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuICgkbnVtID09 IDApID8gIm5hbiIgOiAoKCRudW0gPiAwKSA/ICIraW5mIiA6ICItaW5mIik7Ci0gIH0KLX0KLQot IyBHZW5lcmF0ZSBwcmV0dHktcHJpbnRlZCBmb3JtIG9mIG51bWJlcgotc3ViIFVucGFyc2Ugewot ICBteSAkbnVtID0gc2hpZnQ7Ci0gIGlmICgkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdoZWFwJyB8 fCAkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdncm93dGgnKSB7Ci0gICAgaWYgKCRtYWluOjpvcHRf aW51c2Vfb2JqZWN0cyB8fCAkbWFpbjo6b3B0X2FsbG9jX29iamVjdHMpIHsKLSAgICAgIHJldHVy biBzcHJpbnRmKCIlZCIsICRudW0pOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoJG1haW46Om9w dF9zaG93X2J5dGVzKSB7Ci0gICAgICAgIHJldHVybiBzcHJpbnRmKCIlZCIsICRudW0pOwotICAg ICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHNwcmludGYoIiUuMWYiLCAkbnVtIC8gMTA0ODU3 Ni4wKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0gZWxzaWYgKCRtYWluOjpwcm9maWxlX3R5cGUgZXEg J2NvbnRlbnRpb24nICYmICEkbWFpbjo6b3B0X2NvbnRlbnRpb25zKSB7Ci0gICAgcmV0dXJuIHNw cmludGYoIiUuM2YiLCAkbnVtIC8gMWU5KTsgIyBDb252ZXJ0IG5hbm9zZWNvbmRzIHRvIHNlY29u ZHMKLSAgfSBlbHNlIHsKLSAgICByZXR1cm4gc3ByaW50ZigiJWQiLCAkbnVtKTsKLSAgfQotfQot Ci0jIEFsdGVybmF0ZSBwcmV0dHktcHJpbnRlZCBmb3JtOiAwIG1hcHMgdG8gIi4iCi1zdWIgVW5w YXJzZUFsdCB7Ci0gIG15ICRudW0gPSBzaGlmdDsKLSAgaWYgKCRudW0gPT0gMCkgewotICAgIHJl dHVybiAiLiI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIFVucGFyc2UoJG51bSk7Ci0gIH0KLX0K LQotIyBBbHRlcm5hdGUgcHJldHR5LXByaW50ZWQgZm9ybTogMCBtYXBzIHRvICIiCi1zdWIgSHRt bFByaW50TnVtYmVyIHsKLSAgbXkgJG51bSA9IHNoaWZ0OwotICBpZiAoJG51bSA9PSAwKSB7Ci0g ICAgcmV0dXJuICIiOwotICB9IGVsc2UgewotICAgIHJldHVybiBVbnBhcnNlKCRudW0pOwotICB9 Ci19Ci0KLSMgUmV0dXJuIG91dHB1dCB1bml0cwotc3ViIFVuaXRzIHsKLSAgaWYgKCRtYWluOjpw cm9maWxlX3R5cGUgZXEgJ2hlYXAnIHx8ICRtYWluOjpwcm9maWxlX3R5cGUgZXEgJ2dyb3d0aCcp IHsKLSAgICBpZiAoJG1haW46Om9wdF9pbnVzZV9vYmplY3RzIHx8ICRtYWluOjpvcHRfYWxsb2Nf b2JqZWN0cykgewotICAgICAgcmV0dXJuICJvYmplY3RzIjsKLSAgICB9IGVsc2UgewotICAgICAg aWYgKCRtYWluOjpvcHRfc2hvd19ieXRlcykgewotICAgICAgICByZXR1cm4gIkIiOwotICAgICAg fSBlbHNlIHsKLSAgICAgICAgcmV0dXJuICJNQiI7Ci0gICAgICB9Ci0gICAgfQotICB9IGVsc2lm ICgkbWFpbjo6cHJvZmlsZV90eXBlIGVxICdjb250ZW50aW9uJyAmJiAhJG1haW46Om9wdF9jb250 ZW50aW9ucykgewotICAgIHJldHVybiAic2Vjb25kcyI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJu ICJzYW1wbGVzIjsKLSAgfQotfQotCi0jIyMjIyBQcm9maWxlIG1hbmlwdWxhdGlvbiBjb2RlICMj IyMjCi0KLSMgR2VuZXJhdGUgZmxhdHRlbmVkIHByb2ZpbGU6Ci0jIElmIGNvdW50IGlzIGNoYXJn ZWQgdG8gc3RhY2sgW2EsYixjLGRdLCBpbiBnZW5lcmF0ZWQgcHJvZmlsZSwKLSMgaXQgd2lsbCBi ZSBjaGFyZ2VkIHRvIFthXQotc3ViIEZsYXRQcm9maWxlIHsKLSAgbXkgJHByb2ZpbGUgPSBzaGlm dDsKLSAgbXkgJHJlc3VsdCA9IHt9OwotICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JHByb2ZpbGV9 KSkgewotICAgIG15ICRjb3VudCA9ICRwcm9maWxlLT57JGt9OwotICAgIG15IEBhZGRycyA9IHNw bGl0KC9cbi8sICRrKTsKLSAgICBpZiAoJCNhZGRycyA+PSAwKSB7Ci0gICAgICBBZGRFbnRyeSgk cmVzdWx0LCAkYWRkcnNbMF0sICRjb3VudCk7Ci0gICAgfQotICB9Ci0gIHJldHVybiAkcmVzdWx0 OwotfQotCi0jIEdlbmVyYXRlIGN1bXVsYXRpdmUgcHJvZmlsZToKLSMgSWYgY291bnQgaXMgY2hh cmdlZCB0byBzdGFjayBbYSxiLGMsZF0sIGluIGdlbmVyYXRlZCBwcm9maWxlLAotIyBpdCB3aWxs IGJlIGNoYXJnZWQgdG8gW2FdLCBbYl0sIFtjXSwgW2RdCi1zdWIgQ3VtdWxhdGl2ZVByb2ZpbGUg ewotICBteSAkcHJvZmlsZSA9IHNoaWZ0OwotICBteSAkcmVzdWx0ID0ge307Ci0gIGZvcmVhY2gg bXkgJGsgKGtleXMoJXskcHJvZmlsZX0pKSB7Ci0gICAgbXkgJGNvdW50ID0gJHByb2ZpbGUtPnsk a307Ci0gICAgbXkgQGFkZHJzID0gc3BsaXQoL1xuLywgJGspOwotICAgIGZvcmVhY2ggbXkgJGEg KEBhZGRycykgewotICAgICAgQWRkRW50cnkoJHJlc3VsdCwgJGEsICRjb3VudCk7Ci0gICAgfQot ICB9Ci0gIHJldHVybiAkcmVzdWx0OwotfQotCi0jIElmIHRoZSBzZWNvbmQteW91bmdlc3QgUEMg b24gdGhlIHN0YWNrIGlzIGFsd2F5cyB0aGUgc2FtZSwgcmV0dXJucwotIyB0aGF0IHBjLiAgT3Ro ZXJ3aXNlLCByZXR1cm5zIHVuZGVmLgotc3ViIElzU2Vjb25kUGNBbHdheXNUaGVTYW1lIHsKLSAg bXkgJHByb2ZpbGUgPSBzaGlmdDsKLQotICBteSAkc2Vjb25kX3BjID0gdW5kZWY7Ci0gIGZvcmVh Y2ggbXkgJGsgKGtleXMoJXskcHJvZmlsZX0pKSB7Ci0gICAgbXkgQGFkZHJzID0gc3BsaXQoL1xu LywgJGspOwotICAgIGlmICgkI2FkZHJzIDwgMSkgewotICAgICAgcmV0dXJuIHVuZGVmOwotICAg IH0KLSAgICBpZiAobm90IGRlZmluZWQgJHNlY29uZF9wYykgewotICAgICAgJHNlY29uZF9wYyA9 ICRhZGRyc1sxXTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKCRzZWNvbmRfcGMgbmUgJGFkZHJz WzFdKSB7Ci0gICAgICAgIHJldHVybiB1bmRlZjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0 dXJuICRzZWNvbmRfcGM7Ci19Ci0KLXN1YiBFeHRyYWN0U3ltYm9sTmFtZUlubGluZVN0YWNrIHsK LSAgbXkgJHN5bWJvbHMgPSBzaGlmdDsKLSAgbXkgJGFkZHJlc3MgPSBzaGlmdDsKLQotICBteSBA c3RhY2sgPSAoKTsKLQotICBpZiAoZXhpc3RzICRzeW1ib2xzLT57JGFkZHJlc3N9KSB7Ci0gICAg bXkgQGxvY2FsaW5saW5lc3RhY2sgPSBAeyRzeW1ib2xzLT57JGFkZHJlc3N9fTsKLSAgICBmb3Ig KG15ICRpID0gJCNsb2NhbGlubGluZXN0YWNrOyAkaSA+IDA7ICRpLT0zKSB7Ci0gICAgICBteSAk ZmlsZSA9ICRsb2NhbGlubGluZXN0YWNrWyRpLTFdOwotICAgICAgbXkgJGZuID0gJGxvY2FsaW5s aW5lc3RhY2tbJGktMF07Ci0KLSAgICAgIGlmICgkZmlsZSBlcSAiPyIgfHwgJGZpbGUgZXEgIjow IikgewotICAgICAgICAkZmlsZSA9ICI/PzowIjsKLSAgICAgIH0KLSAgICAgIGlmICgkZm4gZXEg Jz8/JykgewotICAgICAgICAjIElmIHdlIGNhbid0IGdldCB0aGUgc3ltYm9sIG5hbWUsIGF0IGxl YXN0IHVzZSB0aGUgZmlsZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgJGZuID0gJGZpbGU7Ci0gICAg ICB9Ci0gICAgICBteSAkc3VmZml4ID0gIltpbmxpbmVdIjsKLSAgICAgIGlmICgkaSA9PSAyKSB7 Ci0gICAgICAgICRzdWZmaXggPSAiIjsKLSAgICAgIH0KLSAgICAgIHB1c2ggKEBzdGFjaywgJGZu LiRzdWZmaXgpOwotICAgIH0KLSAgfQotICBlbHNlIHsKLSAgICAjIElmIHdlIGNhbid0IGdldCBh IHN5bWJvbCBuYW1lLCBhdCBsZWFzdCBmaWxsIGluIHRoZSBhZGRyZXNzLgotICAgIHB1c2ggKEBz dGFjaywgJGFkZHJlc3MpOwotICB9Ci0KLSAgcmV0dXJuIEBzdGFjazsKLX0KLQotc3ViIEV4dHJh Y3RTeW1ib2xMb2NhdGlvbiB7Ci0gIG15ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRhZGRyZXNz ID0gc2hpZnQ7Ci0gICMgJ2FkZHIybGluZScgb3V0cHV0cyAiPz86MCIgZm9yIHVua25vd24gbG9j YXRpb25zOyB3ZSBkbyB0aGUKLSAgIyBzYW1lIHRvIGJlIGNvbnNpc3RlbnQuCi0gIG15ICRsb2Nh dGlvbiA9ICI/PzowOnVua25vd24iOwotICBpZiAoZXhpc3RzICRzeW1ib2xzLT57JGFkZHJlc3N9 KSB7Ci0gICAgbXkgJGZpbGUgPSAkc3ltYm9scy0+eyRhZGRyZXNzfS0+WzFdOwotICAgIGlmICgk ZmlsZSBlcSAiPyIpIHsKLSAgICAgICRmaWxlID0gIj8/OjAiCi0gICAgfQotICAgICRsb2NhdGlv biA9ICRmaWxlIC4gIjoiIC4gJHN5bWJvbHMtPnskYWRkcmVzc30tPlswXTsKLSAgfQotICByZXR1 cm4gJGxvY2F0aW9uOwotfQotCi0jIEV4dHJhY3RzIGEgZ3JhcGggb2YgY2FsbHMuCi1zdWIgRXh0 cmFjdENhbGxzIHsKLSAgbXkgJHN5bWJvbHMgPSBzaGlmdDsKLSAgbXkgJHByb2ZpbGUgPSBzaGlm dDsKLQotICBteSAkY2FsbHMgPSB7fTsKLSAgd2hpbGUoIG15ICgkc3RhY2tfdHJhY2UsICRjb3Vu dCkgPSBlYWNoICUkcHJvZmlsZSApIHsKLSAgICBteSBAYWRkcmVzcyA9IHNwbGl0KC9cbi8sICRz dGFja190cmFjZSk7Ci0gICAgbXkgJGRlc3RpbmF0aW9uID0gRXh0cmFjdFN5bWJvbExvY2F0aW9u KCRzeW1ib2xzLCAkYWRkcmVzc1swXSk7Ci0gICAgQWRkRW50cnkoJGNhbGxzLCAkZGVzdGluYXRp b24sICRjb3VudCk7Ci0gICAgZm9yIChteSAkaSA9IDE7ICRpIDw9ICQjYWRkcmVzczsgJGkrKykg ewotICAgICAgbXkgJHNvdXJjZSA9IEV4dHJhY3RTeW1ib2xMb2NhdGlvbigkc3ltYm9scywgJGFk ZHJlc3NbJGldKTsKLSAgICAgIG15ICRjYWxsID0gIiRzb3VyY2UgLT4gJGRlc3RpbmF0aW9uIjsK LSAgICAgIEFkZEVudHJ5KCRjYWxscywgJGNhbGwsICRjb3VudCk7Ci0gICAgICAkZGVzdGluYXRp b24gPSAkc291cmNlOwotICAgIH0KLSAgfQotCi0gIHJldHVybiAkY2FsbHM7Ci19Ci0KLXN1YiBG aWx0ZXJGcmFtZXMgewotICBteSAkc3ltYm9scyA9IHNoaWZ0OwotICBteSAkcHJvZmlsZSA9IHNo aWZ0OwotCi0gIGlmICgkbWFpbjo6b3B0X3JldGFpbiBlcSAnJyAmJiAkbWFpbjo6b3B0X2V4Y2x1 ZGUgZXEgJycpIHsKLSAgICByZXR1cm4gJHByb2ZpbGU7Ci0gIH0KLQotICBteSAkcmVzdWx0ID0g e307Ci0gIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskcHJvZmlsZX0pKSB7Ci0gICAgbXkgJGNvdW50 ID0gJHByb2ZpbGUtPnska307Ci0gICAgbXkgQGFkZHJzID0gc3BsaXQoL1xuLywgJGspOwotICAg IG15IEBwYXRoID0gKCk7Ci0gICAgZm9yZWFjaCBteSAkYSAoQGFkZHJzKSB7Ci0gICAgICBteSAk c3ltOwotICAgICAgaWYgKGV4aXN0cygkc3ltYm9scy0+eyRhfSkpIHsKLSAgICAgICAgJHN5bSA9 ICRzeW1ib2xzLT57JGF9LT5bMF07Ci0gICAgICB9IGVsc2UgewotICAgICAgICAkc3ltID0gJGE7 Ci0gICAgICB9Ci0gICAgICBpZiAoJG1haW46Om9wdF9yZXRhaW4gbmUgJycgJiYgJHN5bSAhfiBt LyRtYWluOjpvcHRfcmV0YWluLykgewotICAgICAgICBuZXh0OwotICAgICAgfQotICAgICAgaWYg KCRtYWluOjpvcHRfZXhjbHVkZSBuZSAnJyAmJiAkc3ltID1+IG0vJG1haW46Om9wdF9leGNsdWRl LykgewotICAgICAgICBuZXh0OwotICAgICAgfQotICAgICAgcHVzaChAcGF0aCwgJGEpOwotICAg IH0KLSAgICBpZiAoc2NhbGFyKEBwYXRoKSA+IDApIHsKLSAgICAgIG15ICRyZWR1Y2VkX3BhdGgg PSBqb2luKCJcbiIsIEBwYXRoKTsKLSAgICAgIEFkZEVudHJ5KCRyZXN1bHQsICRyZWR1Y2VkX3Bh dGgsICRjb3VudCk7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuICRyZXN1bHQ7Ci19Ci0KLXN1YiBQ cmludENvbGxhcHNlZFN0YWNrcyB7Ci0gIG15ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRwcm9m aWxlID0gc2hpZnQ7Ci0KLSAgd2hpbGUgKG15ICgkc3RhY2tfdHJhY2UsICRjb3VudCkgPSBlYWNo ICUkcHJvZmlsZSkgewotICAgIG15IEBhZGRyZXNzID0gc3BsaXQoL1xuLywgJHN0YWNrX3RyYWNl KTsKLSAgICBteSBAbmFtZXMgPSByZXZlcnNlICggbWFwIHsgRXh0cmFjdFN5bWJvbE5hbWVJbmxp bmVTdGFjaygkc3ltYm9scywgJF8pIH0gQGFkZHJlc3MgKTsKLSAgICBwcmludGYoIiVzICVkXG4i LCBqb2luKCI7IiwgQG5hbWVzKSwgJGNvdW50KTsKLSAgfQotfQotCi1zdWIgUmVtb3ZlVW5pbnRl cmVzdGluZ0ZyYW1lcyB7Ci0gIG15ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRwcm9maWxlID0g c2hpZnQ7Ci0KLSAgIyBMaXN0IG9mIGZ1bmN0aW9uIG5hbWVzIHRvIHNraXAKLSAgbXkgJXNraXAg PSAoKTsKLSAgbXkgJHNraXBfcmVnZXhwID0gJ05PTUFUQ0gnOwotICBpZiAoJG1haW46OnByb2Zp bGVfdHlwZSBlcSAnaGVhcCcgfHwgJG1haW46OnByb2ZpbGVfdHlwZSBlcSAnZ3Jvd3RoJykgewot ICAgIGZvcmVhY2ggbXkgJG5hbWUgKCdASkVNQUxMT0NfUFJFRklYQGNhbGxvYycsCi0gICAgICAg ICAgICAgICAgICAgICAgJ2NmcmVlJywKLSAgICAgICAgICAgICAgICAgICAgICAnQEpFTUFMTE9D X1BSRUZJWEBtYWxsb2MnLAotICAgICAgICAgICAgICAgICAgICAgICduZXdJbXBsJywKLSAgICAg ICAgICAgICAgICAgICAgICAndm9pZCogbmV3SW1wbCcsCi0gICAgICAgICAgICAgICAgICAgICAg J0BKRU1BTExPQ19QUkVGSVhAZnJlZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ0BKRU1BTExP Q19QUkVGSVhAbWVtYWxpZ24nLAotICAgICAgICAgICAgICAgICAgICAgICdASkVNQUxMT0NfUFJF RklYQHBvc2l4X21lbWFsaWduJywKLSAgICAgICAgICAgICAgICAgICAgICAnQEpFTUFMTE9DX1BS RUZJWEBhbGlnbmVkX2FsbG9jJywKLSAgICAgICAgICAgICAgICAgICAgICAncHZhbGxvYycsCi0g ICAgICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAdmFsbG9jJywKLSAgICAgICAg ICAgICAgICAgICAgICAnQEpFTUFMTE9DX1BSRUZJWEByZWFsbG9jJywKLSAgICAgICAgICAgICAg ICAgICAgICAnQEpFTUFMTE9DX1BSRUZJWEBtYWxsb2N4JywKLSAgICAgICAgICAgICAgICAgICAg ICAnQEpFTUFMTE9DX1BSRUZJWEByYWxsb2N4JywKLSAgICAgICAgICAgICAgICAgICAgICAnQEpF TUFMTE9DX1BSRUZJWEB4YWxsb2N4JywKLSAgICAgICAgICAgICAgICAgICAgICAnQEpFTUFMTE9D X1BSRUZJWEBkYWxsb2N4JywKLSAgICAgICAgICAgICAgICAgICAgICAnQEpFTUFMTE9DX1BSRUZJ WEBzZGFsbG9jeCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ0BKRU1BTExPQ19QUkVGSVhAc2Rh bGxvY3hfbm9mbGFncycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3RjX2NhbGxvYycsCi0gICAg ICAgICAgICAgICAgICAgICAgJ3RjX2NmcmVlJywKLSAgICAgICAgICAgICAgICAgICAgICAndGNf bWFsbG9jJywKLSAgICAgICAgICAgICAgICAgICAgICAndGNfZnJlZScsCi0gICAgICAgICAgICAg ICAgICAgICAgJ3RjX21lbWFsaWduJywKLSAgICAgICAgICAgICAgICAgICAgICAndGNfcG9zaXhf bWVtYWxpZ24nLAotICAgICAgICAgICAgICAgICAgICAgICd0Y19wdmFsbG9jJywKLSAgICAgICAg ICAgICAgICAgICAgICAndGNfdmFsbG9jJywKLSAgICAgICAgICAgICAgICAgICAgICAndGNfcmVh bGxvYycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3RjX25ldycsCi0gICAgICAgICAgICAgICAg ICAgICAgJ3RjX2RlbGV0ZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ3RjX25ld2FycmF5JywK LSAgICAgICAgICAgICAgICAgICAgICAndGNfZGVsZXRlYXJyYXknLAotICAgICAgICAgICAgICAg ICAgICAgICd0Y19uZXdfbm90aHJvdycsCi0gICAgICAgICAgICAgICAgICAgICAgJ3RjX25ld2Fy cmF5X25vdGhyb3cnLAotICAgICAgICAgICAgICAgICAgICAgICdkb19tYWxsb2MnLAotICAgICAg ICAgICAgICAgICAgICAgICc6OmRvX21hbGxvYycsICAgIyBuZXcgbmFtZSAtLSBnb3QgbW92ZWQg dG8gYW4gdW5uYW1lZCBucwotICAgICAgICAgICAgICAgICAgICAgICc6OmRvX21hbGxvY19vcl9j cHBfYWxsb2MnLAotICAgICAgICAgICAgICAgICAgICAgICdEb1NhbXBsZWRBbGxvY2F0aW9uJywK LSAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlX2FsbG9jOjphbGxvY2F0ZScsCi0gICAgICAg ICAgICAgICAgICAgICAgJ19fbWFsbG9jX2FsbG9jX3RlbXBsYXRlOjphbGxvY2F0ZScsCi0gICAg ICAgICAgICAgICAgICAgICAgJ19fYnVpbHRpbl9kZWxldGUnLAotICAgICAgICAgICAgICAgICAg ICAgICdfX2J1aWx0aW5fbmV3JywKLSAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluX3Zl Y19kZWxldGUnLAotICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5fdmVjX25ldycsCi0g ICAgICAgICAgICAgICAgICAgICAgJ29wZXJhdG9yIG5ldycsCi0gICAgICAgICAgICAgICAgICAg ICAgJ29wZXJhdG9yIG5ld1tdJywKLSAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBlbnRyeSB0 byBvdXIgbWVtb3J5LWFsbG9jYXRpb24gcm91dGluZXMgb24gT1MgWAotICAgICAgICAgICAgICAg ICAgICAgICdtYWxsb2Nfem9uZV9tYWxsb2MnLAotICAgICAgICAgICAgICAgICAgICAgICdtYWxs b2Nfem9uZV9jYWxsb2MnLAotICAgICAgICAgICAgICAgICAgICAgICdtYWxsb2Nfem9uZV92YWxs b2MnLAotICAgICAgICAgICAgICAgICAgICAgICdtYWxsb2Nfem9uZV9yZWFsbG9jJywKLSAgICAg ICAgICAgICAgICAgICAgICAnbWFsbG9jX3pvbmVfbWVtYWxpZ24nLAotICAgICAgICAgICAgICAg ICAgICAgICdtYWxsb2Nfem9uZV9mcmVlJywKLSAgICAgICAgICAgICAgICAgICAgICAjIFRoZXNl IG1hcmsgdGhlIGJlZ2lubmluZy9lbmQgb2Ygb3VyIGN1c3RvbSBzZWN0aW9ucwotICAgICAgICAg ICAgICAgICAgICAgICdfX3N0YXJ0X2dvb2dsZV9tYWxsb2MnLAotICAgICAgICAgICAgICAgICAg ICAgICdfX3N0b3BfZ29vZ2xlX21hbGxvYycsCi0gICAgICAgICAgICAgICAgICAgICAgJ19fc3Rh cnRfbWFsbG9jX2hvb2snLAotICAgICAgICAgICAgICAgICAgICAgICdfX3N0b3BfbWFsbG9jX2hv b2snKSB7Ci0gICAgICAkc2tpcHskbmFtZX0gPSAxOwotICAgICAgJHNraXB7Il8iIC4gJG5hbWV9 ID0gMTsgICAjIE1hY2ggKE9TIFgpIGFkZHMgYSBfIHByZWZpeCB0byBldmVyeXRoaW5nCi0gICAg fQotICAgICMgVE9ETzogUmVtb3ZlIFRDTWFsbG9jIG9uY2UgZXZlcnl0aGluZyBoYXMgYmVlbgot ICAgICMgbW92ZWQgaW50byB0aGUgdGNtYWxsb2M6OiBuYW1lc3BhY2UgYW5kIHdlIGhhdmUgZmx1 c2hlZAotICAgICMgb2xkIGNvZGUgb3V0IG9mIHRoZSBzeXN0ZW0uCi0gICAgJHNraXBfcmVnZXhw ID0gIlRDTWFsbG9jfF50Y21hbGxvYzo6IjsKLSAgfSBlbHNpZiAoJG1haW46OnByb2ZpbGVfdHlw ZSBlcSAnY29udGVudGlvbicpIHsKLSAgICBmb3JlYWNoIG15ICR2bmFtZSAoJ2Jhc2U6OlJlY29y ZExvY2tQcm9maWxlRGF0YScsCi0gICAgICAgICAgICAgICAgICAgICAgICdiYXNlOjpTdWJtaXRN dXRleFByb2ZpbGVEYXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ2Jhc2U6OlN1Ym1pdFNw aW5Mb2NrUHJvZmlsZURhdGEnLAotICAgICAgICAgICAgICAgICAgICAgICAnTXV0ZXg6OlVubG9j aycsCi0gICAgICAgICAgICAgICAgICAgICAgICdNdXRleDo6VW5sb2NrU2xvdycsCi0gICAgICAg ICAgICAgICAgICAgICAgICdNdXRleDo6UmVhZGVyVW5sb2NrJywKLSAgICAgICAgICAgICAgICAg ICAgICAgJ011dGV4TG9jazo6fk11dGV4TG9jaycsCi0gICAgICAgICAgICAgICAgICAgICAgICdT cGluTG9jazo6VW5sb2NrJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ1NwaW5Mb2NrOjpTbG93 VW5sb2NrJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ1NwaW5Mb2NrSG9sZGVyOjp+U3Bpbkxv Y2tIb2xkZXInKSB7Ci0gICAgICAkc2tpcHskdm5hbWV9ID0gMTsKLSAgICB9Ci0gIH0gZWxzaWYg KCRtYWluOjpwcm9maWxlX3R5cGUgZXEgJ2NwdScpIHsKLSAgICAjIERyb3Agc2lnbmFsIGhhbmRs ZXJzIHVzZWQgZm9yIENQVSBwcm9maWxlIGNvbGxlY3Rpb24KLSAgICAjIFRPRE8oZHBlbmcpOiB0 aGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5OyBpdCdzIHRha2VuCi0gICAgIyBjYXJlIG9mIGJ5 IHRoZSBnZW5lcmFsIDJuZC1wYyBtZWNoYW5pc20gYmVsb3cuCi0gICAgZm9yZWFjaCBteSAkbmFt ZSAoJ1Byb2ZpbGVEYXRhOjpBZGQnLCAgICAgICAgICAgIyBoaXN0b3JpY2FsCi0gICAgICAgICAg ICAgICAgICAgICAgJ1Byb2ZpbGVEYXRhOjpwcm9mX2hhbmRsZXInLCAgIyBoaXN0b3JpY2FsCi0g ICAgICAgICAgICAgICAgICAgICAgJ0NwdVByb2ZpbGVyOjpwcm9mX2hhbmRsZXInLAotICAgICAg ICAgICAgICAgICAgICAgICdfX0ZSQU1FX0VORF9fJywKLSAgICAgICAgICAgICAgICAgICAgICAn X19wdGhyZWFkX3NpZ2hhbmRsZXInLAotICAgICAgICAgICAgICAgICAgICAgICdfX3Jlc3RvcmUn KSB7Ci0gICAgICAkc2tpcHskbmFtZX0gPSAxOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICAjIE5v dGhpbmcgc2tpcHBlZCBmb3IgdW5rbm93biB0eXBlcwotICB9Ci0KLSAgaWYgKCRtYWluOjpwcm9m aWxlX3R5cGUgZXEgJ2NwdScpIHsKLSAgICAjIElmIGFsbCB0aGUgc2Vjb25kLXlvdW5nZXN0IHBy b2dyYW0gY291bnRlcnMgYXJlIHRoZSBzYW1lLAotICAgICMgdGhpcyBTVFJPTkdMWSBzdWdnZXN0 cyB0aGF0IGl0IGlzIGFuIGFydGlmYWN0IG9mIG1lYXN1cmVtZW50LAotICAgICMgaS5lLiwgc3Rh Y2sgZnJhbWVzIHB1c2hlZCBieSB0aGUgQ1BVIHByb2ZpbGVyIHNpZ25hbCBoYW5kbGVyLgotICAg ICMgSGVuY2UsIHdlIGRlbGV0ZSB0aGVtLgotICAgICMgKFRoZSB0b3Btb3N0IFBDIGlzIHJlYWQg ZnJvbSB0aGUgc2lnbmFsIHN0cnVjdHVyZSwgbm90IGZyb20KLSAgICAjIHRoZSBzdGFjaywgc28g aXQgZG9lcyBub3QgZ2V0IGludm9sdmVkLikKLSAgICB3aGlsZSAobXkgJHNlY29uZF9wYyA9IElz U2Vjb25kUGNBbHdheXNUaGVTYW1lKCRwcm9maWxlKSkgewotICAgICAgbXkgJHJlc3VsdCA9IHt9 OwotICAgICAgbXkgJGZ1bmMgPSAnJzsKLSAgICAgIGlmIChleGlzdHMoJHN5bWJvbHMtPnskc2Vj b25kX3BjfSkpIHsKLSAgICAgICAgJHNlY29uZF9wYyA9ICRzeW1ib2xzLT57JHNlY29uZF9wY30t PlswXTsKLSAgICAgIH0KLSAgICAgIHByaW50IFNUREVSUiAiUmVtb3ZpbmcgJHNlY29uZF9wYyBm cm9tIGFsbCBzdGFjayB0cmFjZXMuXG4iOwotICAgICAgZm9yZWFjaCBteSAkayAoa2V5cygleyRw cm9maWxlfSkpIHsKLSAgICAgICAgbXkgJGNvdW50ID0gJHByb2ZpbGUtPnska307Ci0gICAgICAg IG15IEBhZGRycyA9IHNwbGl0KC9cbi8sICRrKTsKLSAgICAgICAgc3BsaWNlIEBhZGRycywgMSwg MTsKLSAgICAgICAgbXkgJHJlZHVjZWRfcGF0aCA9IGpvaW4oIlxuIiwgQGFkZHJzKTsKLSAgICAg ICAgQWRkRW50cnkoJHJlc3VsdCwgJHJlZHVjZWRfcGF0aCwgJGNvdW50KTsKLSAgICAgIH0KLSAg ICAgICRwcm9maWxlID0gJHJlc3VsdDsKLSAgICB9Ci0gIH0KLQotICBteSAkcmVzdWx0ID0ge307 Ci0gIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskcHJvZmlsZX0pKSB7Ci0gICAgbXkgJGNvdW50ID0g JHByb2ZpbGUtPnska307Ci0gICAgbXkgQGFkZHJzID0gc3BsaXQoL1xuLywgJGspOwotICAgIG15 IEBwYXRoID0gKCk7Ci0gICAgZm9yZWFjaCBteSAkYSAoQGFkZHJzKSB7Ci0gICAgICBpZiAoZXhp c3RzKCRzeW1ib2xzLT57JGF9KSkgewotICAgICAgICBteSAkZnVuYyA9ICRzeW1ib2xzLT57JGF9 LT5bMF07Ci0gICAgICAgIGlmICgkc2tpcHskZnVuY30gfHwgKCRmdW5jID1+IG0vJHNraXBfcmVn ZXhwLykpIHsKLSAgICAgICAgICAjIFRocm93IGF3YXkgdGhlIHBvcnRpb24gb2YgdGhlIGJhY2t0 cmFjZSBzZWVuIHNvIGZhciwgdW5kZXIgdGhlCi0gICAgICAgICAgIyBhc3N1bXB0aW9uIHRoYXQg cHJldmlvdXMgZnJhbWVzIHdlcmUgZm9yIGZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUKLSAgICAg ICAgICAjIGFsbG9jYXRvci4KLSAgICAgICAgICBAcGF0aCA9ICgpOwotICAgICAgICAgIG5leHQ7 Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHB1c2goQHBhdGgsICRhKTsKLSAgICB9Ci0gICAg bXkgJHJlZHVjZWRfcGF0aCA9IGpvaW4oIlxuIiwgQHBhdGgpOwotICAgIEFkZEVudHJ5KCRyZXN1 bHQsICRyZWR1Y2VkX3BhdGgsICRjb3VudCk7Ci0gIH0KLQotICAkcmVzdWx0ID0gRmlsdGVyRnJh bWVzKCRzeW1ib2xzLCAkcmVzdWx0KTsKLQotICByZXR1cm4gJHJlc3VsdDsKLX0KLQotIyBSZWR1 Y2UgcHJvZmlsZSB0byBncmFudWxhcml0eSBnaXZlbiBieSB1c2VyCi1zdWIgUmVkdWNlUHJvZmls ZSB7Ci0gIG15ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRwcm9maWxlID0gc2hpZnQ7Ci0gIG15 ICRyZXN1bHQgPSB7fTsKLSAgbXkgJGZ1bGxuYW1lX3RvX3Nob3J0bmFtZV9tYXAgPSB7fTsKLSAg RmlsbEZ1bGxuYW1lVG9TaG9ydG5hbWVNYXAoJHN5bWJvbHMsICRmdWxsbmFtZV90b19zaG9ydG5h bWVfbWFwKTsKLSAgZm9yZWFjaCBteSAkayAoa2V5cygleyRwcm9maWxlfSkpIHsKLSAgICBteSAk Y291bnQgPSAkcHJvZmlsZS0+eyRrfTsKLSAgICBteSBAdHJhbnNsYXRlZCA9IFRyYW5zbGF0ZVN0 YWNrKCRzeW1ib2xzLCAkZnVsbG5hbWVfdG9fc2hvcnRuYW1lX21hcCwgJGspOwotICAgIG15IEBw YXRoID0gKCk7Ci0gICAgbXkgJXNlZW4gPSAoKTsKLSAgICAkc2VlbnsnJ30gPSAxOyAgICAgICMg U28gdGhhdCBlbXB0eSBrZXlzIGFyZSBza2lwcGVkCi0gICAgZm9yZWFjaCBteSAkZSAoQHRyYW5z bGF0ZWQpIHsKLSAgICAgICMgVG8gYXZvaWQgZG91YmxlLWNvdW50aW5nIGR1ZSB0byByZWN1cnNp b24sIHNraXAgYSBzdGFjay10cmFjZQotICAgICAgIyBlbnRyeSBpZiBpdCBoYXMgYWxyZWFkeSBi ZWVuIHNlZW4KLSAgICAgIGlmICghJHNlZW57JGV9KSB7Ci0gICAgICAgICRzZWVueyRlfSA9IDE7 Ci0gICAgICAgIHB1c2goQHBhdGgsICRlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgbXkgJHJlZHVj ZWRfcGF0aCA9IGpvaW4oIlxuIiwgQHBhdGgpOwotICAgIEFkZEVudHJ5KCRyZXN1bHQsICRyZWR1 Y2VkX3BhdGgsICRjb3VudCk7Ci0gIH0KLSAgcmV0dXJuICRyZXN1bHQ7Ci19Ci0KLSMgRG9lcyB0 aGUgc3BlY2lmaWVkIHN5bWJvbCBhcnJheSBtYXRjaCB0aGUgcmVnZXhwPwotc3ViIFN5bWJvbE1h dGNoZXMgewotICBteSAkc3ltID0gc2hpZnQ7Ci0gIG15ICRyZSA9IHNoaWZ0OwotICBpZiAoZGVm aW5lZCgkc3ltKSkgewotICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICQjeyRzeW19OyAkaSArPSAz KSB7Ci0gICAgICBpZiAoJHN5bS0+WyRpXSA9fiBtLyRyZS8gfHwgJHN5bS0+WyRpKzFdID1+IG0v JHJlLykgewotICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJu IDA7Ci19Ci0KLSMgRm9jdXMgb25seSBvbiBwYXRocyBpbnZvbHZpbmcgc3BlY2lmaWVkIHJlZ2V4 cHMKLXN1YiBGb2N1c1Byb2ZpbGUgewotICBteSAkc3ltYm9scyA9IHNoaWZ0OwotICBteSAkcHJv ZmlsZSA9IHNoaWZ0OwotICBteSAkZm9jdXMgPSBzaGlmdDsKLSAgbXkgJHJlc3VsdCA9IHt9Owot ICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JHByb2ZpbGV9KSkgewotICAgIG15ICRjb3VudCA9ICRw cm9maWxlLT57JGt9OwotICAgIG15IEBhZGRycyA9IHNwbGl0KC9cbi8sICRrKTsKLSAgICBmb3Jl YWNoIG15ICRhIChAYWRkcnMpIHsKLSAgICAgICMgUmVwbHkgaWYgaXQgbWF0Y2hlcyBlaXRoZXIg dGhlIGFkZHJlc3Mvc2hvcnRuYW1lL2ZpbGVsaW5lCi0gICAgICBpZiAoKCRhID1+IG0vJGZvY3Vz LykgfHwgU3ltYm9sTWF0Y2hlcygkc3ltYm9scy0+eyRhfSwgJGZvY3VzKSkgewotICAgICAgICBB ZGRFbnRyeSgkcmVzdWx0LCAkaywgJGNvdW50KTsKLSAgICAgICAgbGFzdDsKLSAgICAgIH0KLSAg ICB9Ci0gIH0KLSAgcmV0dXJuICRyZXN1bHQ7Ci19Ci0KLSMgRm9jdXMgb25seSBvbiBwYXRocyBu b3QgaW52b2x2aW5nIHNwZWNpZmllZCByZWdleHBzCi1zdWIgSWdub3JlUHJvZmlsZSB7Ci0gIG15 ICRzeW1ib2xzID0gc2hpZnQ7Ci0gIG15ICRwcm9maWxlID0gc2hpZnQ7Ci0gIG15ICRpZ25vcmUg PSBzaGlmdDsKLSAgbXkgJHJlc3VsdCA9IHt9OwotICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JHBy b2ZpbGV9KSkgewotICAgIG15ICRjb3VudCA9ICRwcm9maWxlLT57JGt9OwotICAgIG15IEBhZGRy cyA9IHNwbGl0KC9cbi8sICRrKTsKLSAgICBteSAkbWF0Y2hlZCA9IDA7Ci0gICAgZm9yZWFjaCBt eSAkYSAoQGFkZHJzKSB7Ci0gICAgICAjIFJlcGx5IGlmIGl0IG1hdGNoZXMgZWl0aGVyIHRoZSBh ZGRyZXNzL3Nob3J0bmFtZS9maWxlbGluZQotICAgICAgaWYgKCgkYSA9fiBtLyRpZ25vcmUvKSB8 fCBTeW1ib2xNYXRjaGVzKCRzeW1ib2xzLT57JGF9LCAkaWdub3JlKSkgewotICAgICAgICAkbWF0 Y2hlZCA9IDE7Ci0gICAgICAgIGxhc3Q7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghJG1hdGNo ZWQpIHsKLSAgICAgIEFkZEVudHJ5KCRyZXN1bHQsICRrLCAkY291bnQpOwotICAgIH0KLSAgfQot ICByZXR1cm4gJHJlc3VsdDsKLX0KLQotIyBHZXQgdG90YWwgY291bnQgaW4gcHJvZmlsZQotc3Vi IFRvdGFsUHJvZmlsZSB7Ci0gIG15ICRwcm9maWxlID0gc2hpZnQ7Ci0gIG15ICRyZXN1bHQgPSAw OwotICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JHByb2ZpbGV9KSkgewotICAgICRyZXN1bHQgKz0g JHByb2ZpbGUtPnska307Ci0gIH0KLSAgcmV0dXJuICRyZXN1bHQ7Ci19Ci0KLSMgQWRkIEEgdG8g Qgotc3ViIEFkZFByb2ZpbGUgewotICBteSAkQSA9IHNoaWZ0OwotICBteSAkQiA9IHNoaWZ0Owot Ci0gIG15ICRSID0ge307Ci0gICMgYWRkIGFsbCBrZXlzIGluIEEKLSAgZm9yZWFjaCBteSAkayAo a2V5cygleyRBfSkpIHsKLSAgICBteSAkdiA9ICRBLT57JGt9OwotICAgIEFkZEVudHJ5KCRSLCAk aywgJHYpOwotICB9Ci0gICMgYWRkIGFsbCBrZXlzIGluIEIKLSAgZm9yZWFjaCBteSAkayAoa2V5 cygleyRCfSkpIHsKLSAgICBteSAkdiA9ICRCLT57JGt9OwotICAgIEFkZEVudHJ5KCRSLCAkaywg JHYpOwotICB9Ci0gIHJldHVybiAkUjsKLX0KLQotIyBNZXJnZXMgc3ltYm9sIG1hcHMKLXN1YiBN ZXJnZVN5bWJvbHMgewotICBteSAkQSA9IHNoaWZ0OwotICBteSAkQiA9IHNoaWZ0OwotCi0gIG15 ICRSID0ge307Ci0gIGZvcmVhY2ggbXkgJGsgKGtleXMoJXskQX0pKSB7Ci0gICAgJFItPnska30g PSAkQS0+eyRrfTsKLSAgfQotICBpZiAoZGVmaW5lZCgkQikpIHsKLSAgICBmb3JlYWNoIG15ICRr IChrZXlzKCV7JEJ9KSkgewotICAgICAgJFItPnska30gPSAkQi0+eyRrfTsKLSAgICB9Ci0gIH0K LSAgcmV0dXJuICRSOwotfQotCi0KLSMgQWRkIEEgdG8gQgotc3ViIEFkZFBjcyB7Ci0gIG15ICRB ID0gc2hpZnQ7Ci0gIG15ICRCID0gc2hpZnQ7Ci0KLSAgbXkgJFIgPSB7fTsKLSAgIyBhZGQgYWxs IGtleXMgaW4gQQotICBmb3JlYWNoIG15ICRrIChrZXlzKCV7JEF9KSkgewotICAgICRSLT57JGt9 ID0gMQotICB9Ci0gICMgYWRkIGFsbCBrZXlzIGluIEIKLSAgZm9yZWFjaCBteSAkayAoa2V5cygl eyRCfSkpIHsKLSAgICAkUi0+eyRrfSA9IDEKLSAgfQotICByZXR1cm4gJFI7Ci19Ci0KLSMgU3Vi dHJhY3QgQiBmcm9tIEEKLXN1YiBTdWJ0cmFjdFByb2ZpbGUgewotICBteSAkQSA9IHNoaWZ0Owot ICBteSAkQiA9IHNoaWZ0OwotCi0gIG15ICRSID0ge307Ci0gIGZvcmVhY2ggbXkgJGsgKGtleXMo JXskQX0pKSB7Ci0gICAgbXkgJHYgPSAkQS0+eyRrfSAtIEdldEVudHJ5KCRCLCAkayk7Ci0gICAg aWYgKCR2IDwgMCAmJiAkbWFpbjo6b3B0X2Ryb3BfbmVnYXRpdmUpIHsKLSAgICAgICR2ID0gMDsK LSAgICB9Ci0gICAgQWRkRW50cnkoJFIsICRrLCAkdik7Ci0gIH0KLSAgaWYgKCEkbWFpbjo6b3B0 X2Ryb3BfbmVnYXRpdmUpIHsKLSAgICAjIFRha2UgY2FyZSBvZiB3aGVuIHN1YnRyYWN0ZWQgcHJv ZmlsZSBoYXMgbW9yZSBlbnRyaWVzCi0gICAgZm9yZWFjaCBteSAkayAoa2V5cygleyRCfSkpIHsK LSAgICAgIGlmICghZXhpc3RzKCRBLT57JGt9KSkgewotICAgICAgICBBZGRFbnRyeSgkUiwgJGss IDAgLSAkQi0+eyRrfSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiAkUjsKLX0KLQot IyBHZXQgZW50cnkgZnJvbSBwcm9maWxlOyB6ZXJvIGlmIG5vdCBwcmVzZW50Ci1zdWIgR2V0RW50 cnkgewotICBteSAkcHJvZmlsZSA9IHNoaWZ0OwotICBteSAkayA9IHNoaWZ0OwotICBpZiAoZXhp c3RzKCRwcm9maWxlLT57JGt9KSkgewotICAgIHJldHVybiAkcHJvZmlsZS0+eyRrfTsKLSAgfSBl bHNlIHsKLSAgICByZXR1cm4gMDsKLSAgfQotfQotCi0jIEFkZCBlbnRyeSB0byBzcGVjaWZpZWQg cHJvZmlsZQotc3ViIEFkZEVudHJ5IHsKLSAgbXkgJHByb2ZpbGUgPSBzaGlmdDsKLSAgbXkgJGsg PSBzaGlmdDsKLSAgbXkgJG4gPSBzaGlmdDsKLSAgaWYgKCFleGlzdHMoJHByb2ZpbGUtPnska30p KSB7Ci0gICAgJHByb2ZpbGUtPnska30gPSAwOwotICB9Ci0gICRwcm9maWxlLT57JGt9ICs9ICRu OwotfQotCi0jIEFkZCBhIHN0YWNrIG9mIGVudHJpZXMgdG8gc3BlY2lmaWVkIHByb2ZpbGUsIGFu ZCBhZGQgdGhlbSB0byB0aGUgJHBjcwotIyBsaXN0Lgotc3ViIEFkZEVudHJpZXMgewotICBteSAk cHJvZmlsZSA9IHNoaWZ0OwotICBteSAkcGNzID0gc2hpZnQ7Ci0gIG15ICRzdGFjayA9IHNoaWZ0 OwotICBteSAkY291bnQgPSBzaGlmdDsKLSAgbXkgQGsgPSAoKTsKLQotICBmb3JlYWNoIG15ICRl IChzcGxpdCgvXHMrLywgJHN0YWNrKSkgewotICAgIG15ICRwYyA9IEhleEV4dGVuZCgkZSk7Ci0g ICAgJHBjcy0+eyRwY30gPSAxOwotICAgIHB1c2ggQGssICRwYzsKLSAgfQotICBBZGRFbnRyeSgk cHJvZmlsZSwgKGpvaW4gIlxuIiwgQGspLCAkY291bnQpOwotfQotCi0jIyMjIyBDb2RlIHRvIHBy b2ZpbGUgYSBzZXJ2ZXIgZHluYW1pY2FsbHkgIyMjIyMKLQotc3ViIENoZWNrU3ltYm9sUGFnZSB7 Ci0gIG15ICR1cmwgPSBTeW1ib2xQYWdlVVJMKCk7Ci0gIG15ICRjb21tYW5kID0gU2hlbGxFc2Nh cGUoQFVSTF9GRVRDSEVSLCAkdXJsKTsKLSAgb3BlbihTWU1CT0wsICIkY29tbWFuZCB8Iikgb3Ig ZXJyb3IoJGNvbW1hbmQpOwotICBteSAkbGluZSA9IDxTWU1CT0w+OwotICAkbGluZSA9fiBzL1xy Ly9nOyAgICAgICAgICMgdHVybiB3aW5kb3dzLWxvb2tpbmcgbGluZXMgaW50byB1bml4LWxvb2tp bmcgbGluZXMKLSAgY2xvc2UoU1lNQk9MKTsKLSAgdW5sZXNzIChkZWZpbmVkKCRsaW5lKSkgewot ICAgIGVycm9yKCIkdXJsIGRvZXNuJ3QgZXhpc3RcbiIpOwotICB9Ci0KLSAgaWYgKCRsaW5lID1+ IC9ebnVtX3N5bWJvbHM6XHMrKFxkKykkLykgewotICAgIGlmICgkMSA9PSAwKSB7Ci0gICAgICBl cnJvcigiU3RyaXBwZWQgYmluYXJ5LiBObyBzeW1ib2xzIGF2YWlsYWJsZS5cbiIpOwotICAgIH0K LSAgfSBlbHNlIHsKLSAgICBlcnJvcigiRmFpbGVkIHRvIGdldCB0aGUgbnVtYmVyIG9mIHN5bWJv bHMgZnJvbSAkdXJsXG4iKTsKLSAgfQotfQotCi1zdWIgSXNQcm9maWxlVVJMIHsKLSAgbXkgJHBy b2ZpbGVfbmFtZSA9IHNoaWZ0OwotICBpZiAoLWYgJHByb2ZpbGVfbmFtZSkgewotICAgIHByaW50 ZiBTVERFUlIgIlVzaW5nIGxvY2FsIGZpbGUgJHByb2ZpbGVfbmFtZS5cbiI7Ci0gICAgcmV0dXJu IDA7Ci0gIH0KLSAgcmV0dXJuIDE7Ci19Ci0KLXN1YiBQYXJzZVByb2ZpbGVVUkwgewotICBteSAk cHJvZmlsZV9uYW1lID0gc2hpZnQ7Ci0KLSAgaWYgKCFkZWZpbmVkKCRwcm9maWxlX25hbWUpIHx8 ICRwcm9maWxlX25hbWUgZXEgIiIpIHsKLSAgICByZXR1cm4gKCk7Ci0gIH0KLQotICAjIFNwbGl0 IHByb2ZpbGUgVVJMIC0gbWF0Y2hlcyBhbGwgbm9uLWVtcHR5IHN0cmluZ3MsIHNvIG5vIHRlc3Qu Ci0gICRwcm9maWxlX25hbWUgPX4gbSxeKGh0dHBzPzovLyk/KFteL10rKSguKj8pKC98JFBST0ZJ TEVTKT8kLDsKLQotICBteSAkcHJvdG8gPSAkMSB8fCAiaHR0cDovLyI7Ci0gIG15ICRob3N0cG9y dCA9ICQyOwotICBteSAkcHJlZml4ID0gJDM7Ci0gIG15ICRwcm9maWxlID0gJDQgfHwgIi8iOwot Ci0gIG15ICRob3N0ID0gJGhvc3Rwb3J0OwotICAkaG9zdCA9fiBzLzouKi8vOwotCi0gIG15ICRi YXNldXJsID0gIiRwcm90byRob3N0cG9ydCRwcmVmaXgiOwotICByZXR1cm4gKCRob3N0LCAkYmFz ZXVybCwgJHByb2ZpbGUpOwotfQotCi0jIFdlIGZldGNoIHN5bWJvbHMgZnJvbSB0aGUgZmlyc3Qg cHJvZmlsZSBhcmd1bWVudC4KLXN1YiBTeW1ib2xQYWdlVVJMIHsKLSAgbXkgKCRob3N0LCAkYmFz ZVVSTCwgJHBhdGgpID0gUGFyc2VQcm9maWxlVVJMKCRtYWluOjpwZmlsZV9hcmdzWzBdKTsKLSAg cmV0dXJuICIkYmFzZVVSTCRTWU1CT0xfUEFHRSI7Ci19Ci0KLXN1YiBGZXRjaFByb2dyYW1OYW1l KCkgewotICBteSAoJGhvc3QsICRiYXNlVVJMLCAkcGF0aCkgPSBQYXJzZVByb2ZpbGVVUkwoJG1h aW46OnBmaWxlX2FyZ3NbMF0pOwotICBteSAkdXJsID0gIiRiYXNlVVJMJFBST0dSQU1fTkFNRV9Q QUdFIjsKLSAgbXkgJGNvbW1hbmRfbGluZSA9IFNoZWxsRXNjYXBlKEBVUkxfRkVUQ0hFUiwgJHVy bCk7Ci0gIG9wZW4oQ01ETElORSwgIiRjb21tYW5kX2xpbmUgfCIpIG9yIGVycm9yKCRjb21tYW5k X2xpbmUpOwotICBteSAkY21kbGluZSA9IDxDTURMSU5FPjsKLSAgJGNtZGxpbmUgPX4gcy9cci8v ZzsgICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVz Ci0gIGNsb3NlKENNRExJTkUpOwotICBlcnJvcigiRmFpbGVkIHRvIGdldCBwcm9ncmFtIG5hbWUg ZnJvbSAkdXJsXG4iKSB1bmxlc3MgZGVmaW5lZCgkY21kbGluZSk7Ci0gICRjbWRsaW5lID1+IHMv XHgwMC4rLy87ICAjIFJlbW92ZSBhcmd2WzFdIGFuZCBsYXR0ZXJzLgotICAkY21kbGluZSA9fiBz IVxuISFnOyAgIyBSZW1vdmUgTEZzLgotICByZXR1cm4gJGNtZGxpbmU7Ci19Ci0KLSMgR2VlLCBj dXJsJ3MgLUwgKC0tbG9jYXRpb24pIG9wdGlvbiBpc24ndCByZWxpYWJsZSBhdCBsZWFzdAotIyB3 aXRoIGl0cyA3LjEyLjMgdmVyc2lvbi4gIEN1cmwgd2lsbCBmb3JnZXQgdG8gcG9zdCBkYXRhIGlm Ci0jIHRoZXJlIGlzIGEgcmVkaXJlY3Rpb24uICBUaGlzIGZ1bmN0aW9uIGlzIGEgd29ya2Fyb3Vu ZCBmb3IKLSMgY3VybC4gIFJlZGlyZWN0aW9uIGhhcHBlbnMgb24gYm9yZyBob3N0cy4KLXN1YiBS ZXNvbHZlUmVkaXJlY3Rpb25Gb3JDdXJsIHsKLSAgbXkgJHVybCA9IHNoaWZ0OwotICBteSAkY29t bWFuZF9saW5lID0gU2hlbGxFc2NhcGUoQFVSTF9GRVRDSEVSLCAiLS1oZWFkIiwgJHVybCk7Ci0g IG9wZW4oQ01ETElORSwgIiRjb21tYW5kX2xpbmUgfCIpIG9yIGVycm9yKCRjb21tYW5kX2xpbmUp OwotICB3aGlsZSAoPENNRExJTkU+KSB7Ci0gICAgcy9cci8vZzsgICAgICAgICAjIHR1cm4gd2lu ZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCi0gICAgaWYgKC9eTG9j YXRpb246ICguKikvKSB7Ci0gICAgICAkdXJsID0gJDE7Ci0gICAgfQotICB9Ci0gIGNsb3NlKENN RExJTkUpOwotICByZXR1cm4gJHVybDsKLX0KLQotIyBBZGQgYSB0aW1lb3V0IGZsYXQgdG8gVVJM X0ZFVENIRVIuICBSZXR1cm5zIGEgbmV3IGxpc3QuCi1zdWIgQWRkRmV0Y2hUaW1lb3V0IHsKLSAg bXkgJHRpbWVvdXQgPSBzaGlmdDsKLSAgbXkgQGZldGNoZXIgPSBAXzsKLSAgaWYgKGRlZmluZWQo JHRpbWVvdXQpKSB7Ci0gICAgaWYgKGpvaW4oIiAiLCBAZmV0Y2hlcikgPX4gbS9cYmN1cmwgLXMv KSB7Ci0gICAgICBwdXNoKEBmZXRjaGVyLCAiLS1tYXgtdGltZSIsIHNwcmludGYoIiVkIiwgJHRp bWVvdXQpKTsKLSAgICB9IGVsc2lmIChqb2luKCIgIiwgQGZldGNoZXIpID1+IG0vXGJycGNnZXRc Yi8pIHsKLSAgICAgIHB1c2goQGZldGNoZXIsIHNwcmludGYoIi0tZGVhZGxpbmU9JWQiLCAkdGlt ZW91dCkpOwotICAgIH0KLSAgfQotICByZXR1cm4gQGZldGNoZXI7Ci19Ci0KLSMgUmVhZHMgYSBz eW1ib2wgbWFwIGZyb20gdGhlIGZpbGUgaGFuZGxlIG5hbWUgZ2l2ZW4gYXMgJDEsIHJldHVybmlu ZwotIyB0aGUgcmVzdWx0aW5nIHN5bWJvbCBtYXAuICBBbHNvIHByb2Nlc3NlcyB2YXJpYWJsZXMg cmVsYXRpbmcgdG8gc3ltYm9scy4KLSMgQ3VycmVudGx5LCB0aGUgb25seSB2YXJpYWJsZSBwcm9j ZXNzZWQgaXMgJ2JpbmFyeT08dmFsdWU+JyB3aGljaCB1cGRhdGVzCi0jICRtYWluOjpwcm9nIHRv IGhhdmUgdGhlIGNvcnJlY3QgcHJvZ3JhbSBuYW1lLgotc3ViIFJlYWRTeW1ib2xzIHsKLSAgbXkg JGluID0gc2hpZnQ7Ci0gIG15ICRtYXAgPSB7fTsKLSAgd2hpbGUgKDwkaW4+KSB7Ci0gICAgcy9c ci8vZzsgICAgICAgICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29r aW5nIGxpbmVzCi0gICAgIyBSZW1vdmVzIGFsbCB0aGUgbGVhZGluZyB6ZXJvZXMgZnJvbSB0aGUg c3ltYm9scywgc2VlIGNvbW1lbnQgYmVsb3cuCi0gICAgaWYgKG0vXjB4MCooWzAtOWEtZl0rKVxz KyguKykvKSB7Ci0gICAgICAkbWFwLT57JDF9ID0gJDI7Ci0gICAgfSBlbHNpZiAobS9eLS0tLykg ewotICAgICAgbGFzdDsKLSAgICB9IGVsc2lmIChtL14oW2Etel1bXj1dKik9KC4qKSQvICkgewot ICAgICAgbXkgKCR2YXJpYWJsZSwgJHZhbHVlKSA9ICgkMSwgJDIpOwotICAgICAgZm9yICgkdmFy aWFibGUsICR2YWx1ZSkgewotICAgICAgICBzL15ccysvLzsKLSAgICAgICAgcy9ccyskLy87Ci0g ICAgICB9Ci0gICAgICBpZiAoJHZhcmlhYmxlIGVxICJiaW5hcnkiKSB7Ci0gICAgICAgIGlmICgk bWFpbjo6cHJvZyBuZSAkVU5LTk9XTl9CSU5BUlkgJiYgJG1haW46OnByb2cgbmUgJHZhbHVlKSB7 Ci0gICAgICAgICAgcHJpbnRmIFNUREVSUiAoIldhcm5pbmc6IE1pc21hdGNoZWQgYmluYXJ5IG5h bWUgJyVzJywgdXNpbmcgJyVzJy5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJG1haW46 OnByb2csICR2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgJG1haW46OnByb2cgPSAkdmFsdWU7 Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGYgU1RERVJSICgiSWdub3JpbmcgdW5rbm93 biB2YXJpYWJsZSBpbiBzeW1ib2xzIGxpc3Q6ICIgLgotICAgICAgICAgICAgIiclcycgPSAnJXMn XG4iLCAkdmFyaWFibGUsICR2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiAk bWFwOwotfQotCi1zdWIgVVJMRW5jb2RlIHsKLSAgbXkgJHN0ciA9IHNoaWZ0OwotICAkc3RyID1+ IHMvKFteQS1aYS16MC05XC1fLiF+KicoKV0pLyBzcHJpbnRmICIlJSUwMngiLCBvcmQgJDEgL2Vn OwotICByZXR1cm4gJHN0cjsKLX0KLQotc3ViIEFwcGVuZFN5bWJvbEZpbHRlclBhcmFtcyB7Ci0g IG15ICR1cmwgPSBzaGlmdDsKLSAgbXkgQHBhcmFtcyA9ICgpOwotICBpZiAoJG1haW46Om9wdF9y ZXRhaW4gbmUgJycpIHsKLSAgICBwdXNoKEBwYXJhbXMsIHNwcmludGYoInJldGFpbj0lcyIsIFVS TEVuY29kZSgkbWFpbjo6b3B0X3JldGFpbikpKTsKLSAgfQotICBpZiAoJG1haW46Om9wdF9leGNs dWRlIG5lICcnKSB7Ci0gICAgcHVzaChAcGFyYW1zLCBzcHJpbnRmKCJleGNsdWRlPSVzIiwgVVJM RW5jb2RlKCRtYWluOjpvcHRfZXhjbHVkZSkpKTsKLSAgfQotICBpZiAoc2NhbGFyIEBwYXJhbXMg PiAwKSB7Ci0gICAgJHVybCA9IHNwcmludGYoIiVzPyVzIiwgJHVybCwgam9pbigiJiIsIEBwYXJh bXMpKTsKLSAgfQotICByZXR1cm4gJHVybDsKLX0KLQotIyBGZXRjaGVzIGFuZCBwcm9jZXNzZXMg c3ltYm9scyB0byBwcmVwYXJlIHRoZW0gZm9yIHVzZSBpbiB0aGUgcHJvZmlsZSBvdXRwdXQKLSMg Y29kZS4gIElmIHRoZSBvcHRpb25hbCAnc3ltYm9sX21hcCcgYXJnIGlzIG5vdCBnaXZlbiwgZmV0 Y2hlcyBzeW1ib2xzIGZyb20KLSMgJFNZTUJPTF9QQUdFIGZvciBhbGwgUEMgdmFsdWVzIGZvdW5k IGluIHByb2ZpbGUuICBPdGhlcndpc2UsIHRoZSByYXcgc3ltYm9scwotIyBhcmUgYXNzdW1lZCB0 byBoYXZlIGFscmVhZHkgYmVlbiBmZXRjaGVkIGludG8gJ3N5bWJvbF9tYXAnIGFuZCBhcmUgc2lt cGx5Ci0jIGV4dHJhY3RlZCBhbmQgcHJvY2Vzc2VkLgotc3ViIEZldGNoU3ltYm9scyB7Ci0gIG15 ICRwY3NldCA9IHNoaWZ0OwotICBteSAkc3ltYm9sX21hcCA9IHNoaWZ0OwotCi0gIG15ICVzZWVu ID0gKCk7Ci0gIG15IEBwY3MgPSBncmVwIHsgISRzZWVueyRffSsrIH0ga2V5cyglJHBjc2V0KTsg ICMgdW5pcQotCi0gIGlmICghZGVmaW5lZCgkc3ltYm9sX21hcCkpIHsKLSAgICBteSAkcG9zdF9k YXRhID0gam9pbigiKyIsIHNvcnQoKG1hcCB7IjB4IiAuICIkXyJ9IEBwY3MpKSk7Ci0KLSAgICBv cGVuKFBPU1RGSUxFLCAiPiRtYWluOjp0bXBmaWxlX3N5bSIpOwotICAgIHByaW50IFBPU1RGSUxF ICRwb3N0X2RhdGE7Ci0gICAgY2xvc2UoUE9TVEZJTEUpOwotCi0gICAgbXkgJHVybCA9IFN5bWJv bFBhZ2VVUkwoKTsKLQotICAgIG15ICRjb21tYW5kX2xpbmU7Ci0gICAgaWYgKGpvaW4oIiAiLCBA VVJMX0ZFVENIRVIpID1+IG0vXGJjdXJsIC1zLykgewotICAgICAgJHVybCA9IFJlc29sdmVSZWRp cmVjdGlvbkZvckN1cmwoJHVybCk7Ci0gICAgICAkdXJsID0gQXBwZW5kU3ltYm9sRmlsdGVyUGFy YW1zKCR1cmwpOwotICAgICAgJGNvbW1hbmRfbGluZSA9IFNoZWxsRXNjYXBlKEBVUkxfRkVUQ0hF UiwgIi1kIiwgIlxAJG1haW46OnRtcGZpbGVfc3ltIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAkdXJsKTsKLSAgICB9IGVsc2UgewotICAgICAgJHVybCA9IEFwcGVuZFN5bWJv bEZpbHRlclBhcmFtcygkdXJsKTsKLSAgICAgICRjb21tYW5kX2xpbmUgPSAoU2hlbGxFc2NhcGUo QFVSTF9GRVRDSEVSLCAiLS1wb3N0IiwgJHVybCkKLSAgICAgICAgICAgICAgICAgICAgICAgLiAi IDwgIiAuIFNoZWxsRXNjYXBlKCRtYWluOjp0bXBmaWxlX3N5bSkpOwotICAgIH0KLSAgICAjIFdl IHVzZSBjKytmaWx0IGluIGNhc2UgJFNZTUJPTF9QQUdFIGdpdmVzIHVzIG1hbmdsZWQgc3ltYm9s cy4KLSAgICBteSAkZXNjYXBlZF9jcHBmaWx0ID0gU2hlbGxFc2NhcGUoJG9ial90b29sX21hcHsi YysrZmlsdCJ9KTsKLSAgICBvcGVuKFNZTUJPTCwgIiRjb21tYW5kX2xpbmUgfCAkZXNjYXBlZF9j cHBmaWx0IHwiKSBvciBlcnJvcigkY29tbWFuZF9saW5lKTsKLSAgICAkc3ltYm9sX21hcCA9IFJl YWRTeW1ib2xzKCpTWU1CT0x7SU99KTsKLSAgICBjbG9zZShTWU1CT0wpOwotICB9Ci0KLSAgbXkg JHN5bWJvbHMgPSB7fTsKLSAgZm9yZWFjaCBteSAkcGMgKEBwY3MpIHsKLSAgICBteSAkZnVsbG5h bWU7Ci0gICAgIyBGb3IgNjQgYml0cyBiaW5hcmllcywgc3ltYm9scyBhcmUgZXh0cmFjdGVkIHdp dGggOCBsZWFkaW5nIHplcm9lcy4KLSAgICAjIFRoZW4gL3N5bWJvbCByZWFkcyB0aGUgbG9uZyBz eW1ib2xzIGluIGFzIHVpbnQ2NCwgYW5kIG91dHB1dHMKLSAgICAjIHRoZSByZXN1bHQgd2l0aCBh ICIweCUwOGxseCIgZm9ybWF0IHdoaWNoIGdldCByaWQgb2YgdGhlIHplcm9lcy4KLSAgICAjIEJ5 IHJlbW92aW5nIGFsbCB0aGUgbGVhZGluZyB6ZXJvZXMgaW4gYm90aCAkcGMgYW5kIHRoZSBzeW1i b2xzIGZyb20KLSAgICAjIC9zeW1ib2wsIHRoZSBzeW1ib2xzIG1hdGNoIGFuZCBhcmUgcmV0cmll dmFibGUgZnJvbSB0aGUgbWFwLgotICAgIG15ICRzaG9ydHBjID0gJHBjOwotICAgICRzaG9ydHBj ID1+IHMvXjAqLy87Ci0gICAgIyBFYWNoIGxpbmUgbWF5IGhhdmUgYSBsaXN0IG9mIG5hbWVzLCB3 aGljaCBpbmNsdWRlcyB0aGUgZnVuY3Rpb24KLSAgICAjIGFuZCBhbHNvIG90aGVyIGZ1bmN0aW9u cyBpdCBoYXMgaW5saW5lZC4gIFRoZXkgYXJlIHNlcGFyYXRlZCAoaW4KLSAgICAjIFByaW50U3lt Ym9saXplZFByb2ZpbGUpLCBieSAtLSwgd2hpY2ggaXMgaWxsZWdhbCBpbiBmdW5jdGlvbiBuYW1l cy4KLSAgICBteSAkZnVsbG5hbWVzOwotICAgIGlmIChkZWZpbmVkKCRzeW1ib2xfbWFwLT57JHNo b3J0cGN9KSkgewotICAgICAgJGZ1bGxuYW1lcyA9ICRzeW1ib2xfbWFwLT57JHNob3J0cGN9Owot ICAgIH0gZWxzZSB7Ci0gICAgICAkZnVsbG5hbWVzID0gIjB4IiAuICRwYzsgICMgSnVzdCB1c2Ug YWRkcmVzc2VzCi0gICAgfQotICAgIG15ICRzeW0gPSBbXTsKLSAgICAkc3ltYm9scy0+eyRwY30g PSAkc3ltOwotICAgIGZvcmVhY2ggbXkgJGZ1bGxuYW1lIChzcGxpdCgiLS0iLCAkZnVsbG5hbWVz KSkgewotICAgICAgbXkgJG5hbWUgPSBTaG9ydEZ1bmN0aW9uTmFtZSgkZnVsbG5hbWUpOwotICAg ICAgcHVzaChAeyRzeW19LCAkbmFtZSwgIj8iLCAkZnVsbG5hbWUpOwotICAgIH0KLSAgfQotICBy ZXR1cm4gJHN5bWJvbHM7Ci19Ci0KLXN1YiBCYXNlTmFtZSB7Ci0gIG15ICRmaWxlX25hbWUgPSBz aGlmdDsKLSAgJGZpbGVfbmFtZSA9fiBzIV4uKi8hITsgICMgUmVtb3ZlIGRpcmVjdG9yeSBuYW1l Ci0gIHJldHVybiAkZmlsZV9uYW1lOwotfQotCi1zdWIgTWFrZVByb2ZpbGVCYXNlTmFtZSB7Ci0g IG15ICgkYmluYXJ5X25hbWUsICRwcm9maWxlX25hbWUpID0gQF87Ci0gIG15ICgkaG9zdCwgJGJh c2VVUkwsICRwYXRoKSA9IFBhcnNlUHJvZmlsZVVSTCgkcHJvZmlsZV9uYW1lKTsKLSAgbXkgJGJp bmFyeV9zaG9ydG5hbWUgPSBCYXNlTmFtZSgkYmluYXJ5X25hbWUpOwotICByZXR1cm4gc3ByaW50 ZigiJXMuJXMuJXMiLAotICAgICAgICAgICAgICAgICAkYmluYXJ5X3Nob3J0bmFtZSwgJG1haW46 Om9wX3RpbWUsICRob3N0KTsKLX0KLQotc3ViIEZldGNoRHluYW1pY1Byb2ZpbGUgewotICBteSAk YmluYXJ5X25hbWUgPSBzaGlmdDsKLSAgbXkgJHByb2ZpbGVfbmFtZSA9IHNoaWZ0OwotICBteSAk ZmV0Y2hfbmFtZV9vbmx5ID0gc2hpZnQ7Ci0gIG15ICRlbmNvdXJhZ2VfcGF0aWVuY2UgPSBzaGlm dDsKLQotICBpZiAoIUlzUHJvZmlsZVVSTCgkcHJvZmlsZV9uYW1lKSkgewotICAgIHJldHVybiAk cHJvZmlsZV9uYW1lOwotICB9IGVsc2UgewotICAgIG15ICgkaG9zdCwgJGJhc2VVUkwsICRwYXRo KSA9IFBhcnNlUHJvZmlsZVVSTCgkcHJvZmlsZV9uYW1lKTsKLSAgICBpZiAoJHBhdGggZXEgIiIg fHwgJHBhdGggZXEgIi8iKSB7Ci0gICAgICAjIE1pc3NpbmcgdHlwZSBzcGVjaWZpZXIgZGVmYXVs dHMgdG8gY3B1LXByb2ZpbGUKLSAgICAgICRwYXRoID0gJFBST0ZJTEVfUEFHRTsKLSAgICB9Ci0K LSAgICBteSAkcHJvZmlsZV9maWxlID0gTWFrZVByb2ZpbGVCYXNlTmFtZSgkYmluYXJ5X25hbWUs ICRwcm9maWxlX25hbWUpOwotCi0gICAgbXkgJHVybCA9ICIkYmFzZVVSTCRwYXRoIjsKLSAgICBt eSAkZmV0Y2hfdGltZW91dCA9IHVuZGVmOwotICAgIGlmICgkcGF0aCA9fiBtLyRQUk9GSUxFX1BB R0V8JFBNVVBST0ZJTEVfUEFHRS8pIHsKLSAgICAgIGlmICgkcGF0aCA9fiBtL1s/XS8pIHsKLSAg ICAgICAgJHVybCAuPSAiJiI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAkdXJsIC49ICI/IjsK LSAgICAgIH0KLSAgICAgICR1cmwgLj0gc3ByaW50Zigic2Vjb25kcz0lZCIsICRtYWluOjpvcHRf c2Vjb25kcyk7Ci0gICAgICAkZmV0Y2hfdGltZW91dCA9ICRtYWluOjpvcHRfc2Vjb25kcyAqIDEu MDEgKyA2MDsKLSAgICAgICMgU2V0ICRwcm9maWxlX3R5cGUgZm9yIGNvbnN1bXB0aW9uIGJ5IFBy aW50U3ltYm9saXplZFByb2ZpbGUuCi0gICAgICAkbWFpbjo6cHJvZmlsZV90eXBlID0gJ2NwdSc7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICMgRm9yIG5vbi1DUFUgcHJvZmlsZXMsIHdlIGFkZCBhIHR5 cGUtZXh0ZW5zaW9uIHRvCi0gICAgICAjIHRoZSB0YXJnZXQgcHJvZmlsZSBmaWxlIG5hbWUuCi0g ICAgICBteSAkc3VmZml4ID0gJHBhdGg7Ci0gICAgICAkc3VmZml4ID1+IHMsLywuLGc7Ci0gICAg ICAkcHJvZmlsZV9maWxlIC49ICRzdWZmaXg7Ci0gICAgICAjIFNldCAkcHJvZmlsZV90eXBlIGZv ciBjb25zdW1wdGlvbiBieSBQcmludFN5bWJvbGl6ZWRQcm9maWxlLgotICAgICAgaWYgKCRwYXRo ID1+IG0vJEhFQVBfUEFHRS8pIHsKLSAgICAgICAgJG1haW46OnByb2ZpbGVfdHlwZSA9ICdoZWFw JzsKLSAgICAgIH0gZWxzaWYgKCRwYXRoID1+IG0vJEdST1dUSF9QQUdFLykgewotICAgICAgICAk bWFpbjo6cHJvZmlsZV90eXBlID0gJ2dyb3d0aCc7Ci0gICAgICB9IGVsc2lmICgkcGF0aCA9fiBt LyRDT05URU5USU9OX1BBR0UvKSB7Ci0gICAgICAgICRtYWluOjpwcm9maWxlX3R5cGUgPSAnY29u dGVudGlvbic7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgbXkgJHByb2ZpbGVfZGlyID0gJEVOVnsi SkVQUk9GX1RNUERJUiJ9IHx8ICgkRU5We0hPTUV9IC4gIi9qZXByb2YiKTsKLSAgICBpZiAoISAt ZCAkcHJvZmlsZV9kaXIpIHsKLSAgICAgIG1rZGlyKCRwcm9maWxlX2RpcikKLSAgICAgICAgICB8 fCBkaWUoIlVuYWJsZSB0byBjcmVhdGUgcHJvZmlsZSBkaXJlY3RvcnkgJHByb2ZpbGVfZGlyOiAk IVxuIik7Ci0gICAgfQotICAgIG15ICR0bXBfcHJvZmlsZSA9ICIkcHJvZmlsZV9kaXIvLnRtcC4k cHJvZmlsZV9maWxlIjsKLSAgICBteSAkcmVhbF9wcm9maWxlID0gIiRwcm9maWxlX2Rpci8kcHJv ZmlsZV9maWxlIjsKLQotICAgIGlmICgkZmV0Y2hfbmFtZV9vbmx5ID4gMCkgewotICAgICAgcmV0 dXJuICRyZWFsX3Byb2ZpbGU7Ci0gICAgfQotCi0gICAgbXkgQGZldGNoZXIgPSBBZGRGZXRjaFRp bWVvdXQoJGZldGNoX3RpbWVvdXQsIEBVUkxfRkVUQ0hFUik7Ci0gICAgbXkgJGNtZCA9IFNoZWxs RXNjYXBlKEBmZXRjaGVyLCAkdXJsKSAuICIgPiAiIC4gU2hlbGxFc2NhcGUoJHRtcF9wcm9maWxl KTsKLSAgICBpZiAoJHBhdGggPX4gbS8kUFJPRklMRV9QQUdFfCRQTVVQUk9GSUxFX1BBR0V8JENF TlNVU1BST0ZJTEVfUEFHRS8pewotICAgICAgcHJpbnQgU1RERVJSICJHYXRoZXJpbmcgQ1BVIHBy b2ZpbGUgZnJvbSAkdXJsIGZvciAkbWFpbjo6b3B0X3NlY29uZHMgc2Vjb25kcyB0b1xuICAke3Jl YWxfcHJvZmlsZX1cbiI7Ci0gICAgICBpZiAoJGVuY291cmFnZV9wYXRpZW5jZSkgewotICAgICAg ICBwcmludCBTVERFUlIgIkJlIHBhdGllbnQuLi5cbiI7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsK LSAgICAgIHByaW50IFNUREVSUiAiRmV0Y2hpbmcgJHBhdGggcHJvZmlsZSBmcm9tICR1cmwgdG9c biAgJHtyZWFsX3Byb2ZpbGV9XG4iOwotICAgIH0KLQotICAgIChzeXN0ZW0oJGNtZCkgPT0gMCkg fHwgZXJyb3IoIkZhaWxlZCB0byBnZXQgcHJvZmlsZTogJGNtZDogJCFcbiIpOwotICAgIChzeXN0 ZW0oIm12IiwgJHRtcF9wcm9maWxlLCAkcmVhbF9wcm9maWxlKSA9PSAwKSB8fCBlcnJvcigiVW5h YmxlIHRvIHJlbmFtZSBwcm9maWxlXG4iKTsKLSAgICBwcmludCBTVERFUlIgIldyb3RlIHByb2Zp bGUgdG8gJHJlYWxfcHJvZmlsZVxuIjsKLSAgICAkbWFpbjo6Y29sbGVjdGVkX3Byb2ZpbGUgPSAk cmVhbF9wcm9maWxlOwotICAgIHJldHVybiAkbWFpbjo6Y29sbGVjdGVkX3Byb2ZpbGU7Ci0gIH0K LX0KLQotIyBDb2xsZWN0IHByb2ZpbGVzIGluIHBhcmFsbGVsCi1zdWIgRmV0Y2hEeW5hbWljUHJv ZmlsZXMgewotICBteSAkaXRlbXMgPSBzY2FsYXIoQG1haW46OnBmaWxlX2FyZ3MpOwotICBteSAk bGV2ZWxzID0gbG9nKCRpdGVtcykgLyBsb2coMik7Ci0KLSAgaWYgKCRpdGVtcyA9PSAxKSB7Ci0g ICAgJG1haW46OnByb2ZpbGVfZmlsZXNbMF0gPSBGZXRjaER5bmFtaWNQcm9maWxlKCRtYWluOjpw cm9nLCAkbWFpbjo6cGZpbGVfYXJnc1swXSwgMCwgMSk7Ci0gIH0gZWxzZSB7Ci0gICAgIyBtYXRo IHJvdW5kaW5nIGlzc3VlcwotICAgIGlmICgoMiAqKiAkbGV2ZWxzKSA8ICRpdGVtcykgewotICAg ICAkbGV2ZWxzKys7Ci0gICAgfQotICAgIG15ICRjb3VudCA9IHNjYWxhcihAbWFpbjo6cGZpbGVf YXJncyk7Ci0gICAgZm9yIChteSAkaSA9IDA7ICRpIDwgJGNvdW50OyAkaSsrKSB7Ci0gICAgICAk bWFpbjo6cHJvZmlsZV9maWxlc1skaV0gPSBGZXRjaER5bmFtaWNQcm9maWxlKCRtYWluOjpwcm9n LCAkbWFpbjo6cGZpbGVfYXJnc1skaV0sIDEsIDApOwotICAgIH0KLSAgICBwcmludCBTVERFUlIg IkZldGNoaW5nICRjb3VudCBwcm9maWxlcywgQmUgcGF0aWVudC4uLlxuIjsKLSAgICBGZXRjaER5 bmFtaWNQcm9maWxlc1JlY3Vyc2UoJGxldmVscywgMCwgMCk7Ci0gICAgJG1haW46OmNvbGxlY3Rl ZF9wcm9maWxlID0gam9pbigiIFxcXG4gICAgIiwgQG1haW46OnByb2ZpbGVfZmlsZXMpOwotICB9 Ci19Ci0KLSMgUmVjdXJzaXZlbHkgZm9yayBhIHByb2Nlc3MgdG8gZ2V0IGVub3VnaCBwcm9jZXNz ZXMKLSMgY29sbGVjdGluZyBwcm9maWxlcwotc3ViIEZldGNoRHluYW1pY1Byb2ZpbGVzUmVjdXJz ZSB7Ci0gIG15ICRtYXhsZXZlbCA9IHNoaWZ0OwotICBteSAkbGV2ZWwgPSBzaGlmdDsKLSAgbXkg JHBvc2l0aW9uID0gc2hpZnQ7Ci0KLSAgaWYgKG15ICRwaWQgPSBmb3JrKCkpIHsKLSAgICAkcG9z aXRpb24gPSAwIHwgKCRwb3NpdGlvbiA8PCAxKTsKLSAgICBUcnlDb2xsZWN0UHJvZmlsZSgkbWF4 bGV2ZWwsICRsZXZlbCwgJHBvc2l0aW9uKTsKLSAgICB3YWl0OwotICB9IGVsc2UgewotICAgICRw b3NpdGlvbiA9IDEgfCAoJHBvc2l0aW9uIDw8IDEpOwotICAgIFRyeUNvbGxlY3RQcm9maWxlKCRt YXhsZXZlbCwgJGxldmVsLCAkcG9zaXRpb24pOwotICAgIGNsZWFudXAoKTsKLSAgICBleGl0KDAp OwotICB9Ci19Ci0KLSMgQ29sbGVjdCBhIHNpbmdsZSBwcm9maWxlCi1zdWIgVHJ5Q29sbGVjdFBy b2ZpbGUgewotICBteSAkbWF4bGV2ZWwgPSBzaGlmdDsKLSAgbXkgJGxldmVsID0gc2hpZnQ7Ci0g IG15ICRwb3NpdGlvbiA9IHNoaWZ0OwotCi0gIGlmICgkbGV2ZWwgPj0gKCRtYXhsZXZlbCAtIDEp KSB7Ci0gICAgaWYgKCRwb3NpdGlvbiA8IHNjYWxhcihAbWFpbjo6cGZpbGVfYXJncykpIHsKLSAg ICAgIEZldGNoRHluYW1pY1Byb2ZpbGUoJG1haW46OnByb2csICRtYWluOjpwZmlsZV9hcmdzWyRw b3NpdGlvbl0sIDAsIDApOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBGZXRjaER5bmFtaWNQcm9m aWxlc1JlY3Vyc2UoJG1heGxldmVsLCAkbGV2ZWwrMSwgJHBvc2l0aW9uKTsKLSAgfQotfQotCi0j IyMjIyBQYXJzaW5nIGNvZGUgIyMjIyMKLQotIyBQcm92aWRlIGEgc21hbGwgc3RyZWFtaW5nLXJl YWQgbW9kdWxlIHRvIGhhbmRsZSB2ZXJ5IGxhcmdlCi0jIGNwdS1wcm9maWxlIGZpbGVzLiAgU3Ry ZWFtIGluIGNodW5rcyBhbG9uZyBhIHNsaWRpbmcgd2luZG93LgotIyBQcm92aWRlcyBhbiBpbnRl cmZhY2UgdG8gZ2V0IG9uZSAnc2xvdCcsIGNvcnJlY3RseSBoYW5kbGluZwotIyBlbmRpYW4tbmVz cyBkaWZmZXJlbmNlcy4gIEEgc2xvdCBpcyBvbmUgMzItYml0IG9yIDY0LWJpdCB3b3JkCi0jIChk ZXBlbmRpbmcgb24gdGhlIGlucHV0IHByb2ZpbGUpLiAgV2UgdGVsbCBlbmRpYW5uZXNzIGFuZCBi aXQtc2l6ZQotIyBmb3IgdGhlIHByb2ZpbGUgYnkgbG9va2luZyBhdCB0aGUgZmlyc3QgOCBieXRl czogaW4gY3B1IHByb2ZpbGVzLAotIyB0aGUgc2Vjb25kIHNsb3QgaXMgYWx3YXlzIDMgKHdlJ2xs IGFjY2VwdCBhbnl0aGluZyB0aGF0J3Mgbm90IDApLgotQkVHSU4gewotICBwYWNrYWdlIENwdVBy b2ZpbGVTdHJlYW07Ci0KLSAgc3ViIG5ldyB7Ci0gICAgbXkgKCRjbGFzcywgJGZpbGUsICRmbmFt ZSkgPSBAXzsKLSAgICBteSAkc2VsZiA9IHsgZmlsZSAgICAgICAgPT4gJGZpbGUsCi0gICAgICAg ICAgICAgICAgIGJhc2UgICAgICAgID0+IDAsCi0gICAgICAgICAgICAgICAgIHN0cmlkZSAgICAg ID0+IDUxMiAqIDEwMjQsICAgIyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgYml0c2l6ZS84Ci0gICAg ICAgICAgICAgICAgIHNsb3RzICAgICAgID0+IFtdLAotICAgICAgICAgICAgICAgICB1bnBhY2tf Y29kZSA9PiAiIiwgICAgICAgICAgICMgTiBmb3IgYmlnLWVuZGlhbiwgViBmb3IgbGl0dGxlCi0g ICAgICAgICAgICAgICAgIHBlcmxfaXNfNjRiaXQgPT4gMSwgICAgICAgICAgIyBtYXR0ZXJzIGlm IHByb2ZpbGUgaXMgNjQtYml0Ci0gICAgfTsKLSAgICBibGVzcyAkc2VsZiwgJGNsYXNzOwotICAg ICMgTGV0IHVuaXR0ZXN0cyBhZGp1c3QgdGhlIHN0cmlkZQotICAgIGlmICgkbWFpbjo6b3B0X3Rl c3Rfc3RyaWRlID4gMCkgewotICAgICAgJHNlbGYtPntzdHJpZGV9ID0gJG1haW46Om9wdF90ZXN0 X3N0cmlkZTsKLSAgICB9Ci0gICAgIyBSZWFkIHRoZSBmaXJzdCB0d28gc2xvdHMgdG8gZmlndXJl IG91dCBiaXRzaXplIGFuZCBlbmRpYW5uZXNzLgotICAgIG15ICRzbG90cyA9ICRzZWxmLT57c2xv dHN9OwotICAgIG15ICRzdHI7Ci0gICAgcmVhZCgkc2VsZi0+e2ZpbGV9LCAkc3RyLCA4KTsKLSAg ICAjIFNldCB0aGUgZ2xvYmFsICRhZGRyZXNzX2xlbmd0aCBiYXNlZCBvbiB3aGF0IHdlIHNlZSBo ZXJlLgotICAgICMgOCBpcyAzMi1iaXQgKDggaGV4YWRlY2ltYWwgY2hhcnMpOyAxNiBpcyA2NC1i aXQgKDE2IGhleGFkZWNpbWFsIGNoYXJzKS4KLSAgICAkYWRkcmVzc19sZW5ndGggPSAoJHN0ciBl cSAoY2hyKDApeDgpKSA/IDE2IDogODsKLSAgICBpZiAoJGFkZHJlc3NfbGVuZ3RoID09IDgpIHsK LSAgICAgIGlmIChzdWJzdHIoJHN0ciwgNiwgMikgZXEgY2hyKDApeDIpIHsKLSAgICAgICAgJHNl bGYtPnt1bnBhY2tfY29kZX0gPSAnVic7ICAjIExpdHRsZS1lbmRpYW4uCi0gICAgICB9IGVsc2lm IChzdWJzdHIoJHN0ciwgNCwgMikgZXEgY2hyKDApeDIpIHsKLSAgICAgICAgJHNlbGYtPnt1bnBh Y2tfY29kZX0gPSAnTic7ICAjIEJpZy1lbmRpYW4KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIDo6 ZXJyb3IoIiRmbmFtZTogaGVhZGVyIHNpemUgPj0gMioqMTZcbiIpOwotICAgICAgfQotICAgICAg QCRzbG90cyA9IHVucGFjaygkc2VsZi0+e3VucGFja19jb2RlfSAuICIqIiwgJHN0cik7Ci0gICAg fSBlbHNlIHsKLSAgICAgICMgSWYgd2UncmUgYSA2NC1iaXQgcHJvZmlsZSwgY2hlY2sgaWYgd2Un cmUgYSA2NC1iaXQtY2FwYWJsZQotICAgICAgIyBwZXJsLiAgT3RoZXJ3aXNlLCBlYWNoIHNsb3Qg d2lsbCBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0Ci0gICAgICAjIGluc3RlYWQgb2YgYW4gaW50 NjQsIGxvc2luZyBwcmVjaXNpb24gYW5kIG1ha2luZyBhbGwgdGhlCi0gICAgICAjIDY0LWJpdCBh ZGRyZXNzZXMgd3JvbmcuICBXZSB3b24ndCBjb21wbGFpbiB5ZXQsIGJ1dCB3aWxsCi0gICAgICAj IGxhdGVyIGlmIHdlIGV2ZXIgc2VlIGEgdmFsdWUgdGhhdCBkb2Vzbid0IGZpdCBpbiAzMiBiaXRz LgotICAgICAgbXkgJGhhc19xID0gMDsKLSAgICAgIGV2YWwgeyAkaGFzX3EgPSBwYWNrKCJRIiwg IjEiKSA/IDEgOiAxOyB9OwotICAgICAgaWYgKCEkaGFzX3EpIHsKLSAgICAgICAgJHNlbGYtPntw ZXJsX2lzXzY0Yml0fSA9IDA7Ci0gICAgICB9Ci0gICAgICByZWFkKCRzZWxmLT57ZmlsZX0sICRz dHIsIDgpOwotICAgICAgaWYgKHN1YnN0cigkc3RyLCA0LCA0KSBlcSBjaHIoMCl4NCkgewotICAg ICAgICAjIFdlJ2QgbG92ZSB0byB1c2UgJ1EnLCBidXQgaXQncyBhKSBub3QgdW5pdmVyc2FsLCBi KSBub3QgZW5kaWFuLXByb29mLgotICAgICAgICAkc2VsZi0+e3VucGFja19jb2RlfSA9ICdWJzsg ICMgTGl0dGxlLWVuZGlhbi4KLSAgICAgIH0gZWxzaWYgKHN1YnN0cigkc3RyLCAwLCA0KSBlcSBj aHIoMCl4NCkgewotICAgICAgICAkc2VsZi0+e3VucGFja19jb2RlfSA9ICdOJzsgICMgQmlnLWVu ZGlhbgotICAgICAgfSBlbHNlIHsKLSAgICAgICAgOjplcnJvcigiJGZuYW1lOiBoZWFkZXIgc2l6 ZSA+PSAyKiozMlxuIik7Ci0gICAgICB9Ci0gICAgICBteSBAcGFpciA9IHVucGFjaygkc2VsZi0+ e3VucGFja19jb2RlfSAuICIqIiwgJHN0cik7Ci0gICAgICAjIFNpbmNlIHdlIGtub3cgb25lIG9m IHRoZSBwYWlyIGlzIDAsIGl0J3MgZmluZSB0byBqdXN0IGFkZCB0aGVtLgotICAgICAgQCRzbG90 cyA9ICgwLCAkcGFpclswXSArICRwYWlyWzFdKTsKLSAgICB9Ci0gICAgcmV0dXJuICRzZWxmOwot ICB9Ci0KLSAgIyBMb2FkIG1vcmUgZGF0YSB3aGVuIHdlIGFjY2VzcyBzbG90cy0+Z2V0KFgpIHdo aWNoIGlzIG5vdCB5ZXQgaW4gbWVtb3J5LgotICBzdWIgb3ZlcmZsb3cgewotICAgIG15ICgkc2Vs ZikgPSBAXzsKLSAgICBteSAkc2xvdHMgPSAkc2VsZi0+e3Nsb3RzfTsKLSAgICAkc2VsZi0+e2Jh c2V9ICs9ICQjJHNsb3RzICsgMTsgICAjIHNraXAgb3ZlciBkYXRhIHdlJ3JlIHJlcGxhY2luZwot ICAgIG15ICRzdHI7Ci0gICAgcmVhZCgkc2VsZi0+e2ZpbGV9LCAkc3RyLCAkc2VsZi0+e3N0cmlk ZX0pOwotICAgIGlmICgkYWRkcmVzc19sZW5ndGggPT0gOCkgeyAgICAgICMgdGhlIDMyLWJpdCBj YXNlCi0gICAgICAjIFRoaXMgaXMgdGhlIGVhc3kgY2FzZTogdW5wYWNrIHByb3ZpZGVzIDMyLWJp dCB1bnBhY2tpbmcgcHJpbWl0aXZlcy4KLSAgICAgIEAkc2xvdHMgPSB1bnBhY2soJHNlbGYtPnt1 bnBhY2tfY29kZX0gLiAiKiIsICRzdHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAjIFdlIG5lZWQg dG8gdW5wYWNrIDMyIGJpdHMgYXQgYSB0aW1lIGFuZCBjb21iaW5lLgotICAgICAgbXkgQGIzMl92 YWx1ZXMgPSB1bnBhY2soJHNlbGYtPnt1bnBhY2tfY29kZX0gLiAiKiIsICRzdHIpOwotICAgICAg bXkgQGI2NF92YWx1ZXMgPSAoKTsKLSAgICAgIGZvciAobXkgJGkgPSAwOyAkaSA8ICQjYjMyX3Zh bHVlczsgJGkgKz0gMikgewotICAgICAgICAjIFRPRE8oY3NpbHZlcnMpOiBpZiB0aGlzIGlzIGEg MzItYml0IHBlcmwsIHRoZSBtYXRoIGJlbG93Ci0gICAgICAgICMgICAgY291bGQgZW5kIHVwIGlu IGEgdG9vLWxhcmdlIGludCwgd2hpY2ggcGVybCB3aWxsIHByb21vdGUKLSAgICAgICAgIyAgICB0 byBhIGRvdWJsZSwgbG9zaW5nIG5lY2Vzc2FyeSBwcmVjaXNpb24uICBEZWFsIHdpdGggdGhhdC4K LSAgICAgICAgIyAgICBSaWdodCBub3csIHdlIGp1c3QgZGllLgotICAgICAgICBteSAoJGxvLCAk aGkpID0gKCRiMzJfdmFsdWVzWyRpXSwgJGIzMl92YWx1ZXNbJGkrMV0pOwotICAgICAgICBpZiAo JHNlbGYtPnt1bnBhY2tfY29kZX0gZXEgJ04nKSB7ICAgICMgYmlnLWVuZGlhbgotICAgICAgICAg ICgkbG8sICRoaSkgPSAoJGhpLCAkbG8pOwotICAgICAgICB9Ci0gICAgICAgIG15ICR2YWx1ZSA9 ICRsbyArICRoaSAqICgyKiozMik7Ci0gICAgICAgIGlmICghJHNlbGYtPntwZXJsX2lzXzY0Yml0 fSAmJiAgICMgY2hlY2sgdmFsdWUgaXMgZXhhY3RseSByZXByZXNlbnRlZAotICAgICAgICAgICAg KCgkdmFsdWUgJSAoMioqMzIpKSAhPSAkbG8gfHwgaW50KCR2YWx1ZSAvICgyKiozMikpICE9ICRo aSkpIHsKLSAgICAgICAgICA6OmVycm9yKCJOZWVkIGEgNjQtYml0IHBlcmwgdG8gcHJvY2VzcyB0 aGlzIDY0LWJpdCBwcm9maWxlLlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAYjY0X3Zh bHVlcywgJHZhbHVlKTsKLSAgICAgIH0KLSAgICAgIEAkc2xvdHMgPSBAYjY0X3ZhbHVlczsKLSAg ICB9Ci0gIH0KLQotICAjIEFjY2VzcyB0aGUgaS10aCBsb25nIGluIHRoZSBmaWxlIChsb2dpY2Fs bHkpLCBvciAtMSBhdCBFT0YuCi0gIHN1YiBnZXQgewotICAgIG15ICgkc2VsZiwgJGlkeCkgPSBA XzsKLSAgICBteSAkc2xvdHMgPSAkc2VsZi0+e3Nsb3RzfTsKLSAgICB3aGlsZSAoJCMkc2xvdHMg Pj0gMCkgewotICAgICAgaWYgKCRpZHggPCAkc2VsZi0+e2Jhc2V9KSB7Ci0gICAgICAgICMgVGhl IG9ubHkgdGltZSB3ZSBleHBlY3QgYSByZWZlcmVuY2UgdG8gJHNsb3RzWyRpIC0gc29tZXRoaW5n XQotICAgICAgICAjIGFmdGVyIHJlZmVyZW5jaW5nICRzbG90c1skaV0gaXMgcmVhZGluZyB0aGUg dmVyeSBmaXJzdCBoZWFkZXIuCi0gICAgICAgICMgU2luY2UgJHN0cmlkZSA+IHxoZWFkZXJ8LCB0 aGF0IHNob3VsZG4ndCBjYXVzZSBhbnkgbG9va2JhY2sKLSAgICAgICAgIyBlcnJvcnMuICBBbmQg ZXZlcnl0aGluZyBhZnRlciB0aGUgaGVhZGVyIGlzIHNlcXVlbnRpYWwuCi0gICAgICAgIHByaW50 IFNUREVSUiAiVW5leHBlY3RlZCBsb29rLWJhY2sgcmVhZGluZyBDUFUgcHJvZmlsZSI7Ci0gICAg ICAgIHJldHVybiAtMTsgICAjIHNocnVnLCBkb24ndCBrbm93IHdoYXQgYmV0dGVyIHRvIHJldHVy bgotICAgICAgfSBlbHNpZiAoJGlkeCA+ICRzZWxmLT57YmFzZX0gKyAkIyRzbG90cykgewotICAg ICAgICAkc2VsZi0+b3ZlcmZsb3coKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAk c2xvdHMtPlskaWR4IC0gJHNlbGYtPntiYXNlfV07Ci0gICAgICB9Ci0gICAgfQotICAgICMgSWYg d2UgZ2V0IGhlcmUsICRzbG90cyBpcyBbXSwgd2hpY2ggbWVhbnMgd2UndmUgcmVhY2hlZCBFT0YK LSAgICByZXR1cm4gLTE7ICAjIHVuaXF1ZSBzaW5jZSBzbG90cyBpcyBzdXBwb3NlZCB0byBob2xk IHVuc2lnbmVkIG51bWJlcnMKLSAgfQotfQotCi0jIFJlYWRzIHRoZSB0b3AsICdoZWFkZXInIHNl Y3Rpb24gb2YgYSBwcm9maWxlLCBhbmQgcmV0dXJucyB0aGUgbGFzdAotIyBsaW5lIG9mIHRoZSBo ZWFkZXIsIGNvbW1vbmx5IGNhbGxlZCBhICdoZWFkZXIgbGluZScuICBUaGUgaGVhZGVyCi0jIHNl Y3Rpb24gb2YgYSBwcm9maWxlIGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSAnY29tbWFuZCcgbGlu ZXMgdGhhdAotIyBhcmUgaW5zdHJ1Y3Rpb25zIHRvIGplcHJvZiwgd2hpY2ggamVwcm9mIGV4ZWN1 dGVzIHdoZW4gcmVhZGluZyB0aGUKLSMgaGVhZGVyLiAgQWxsICdjb21tYW5kJyBsaW5lcyBzdGFy dCB3aXRoIGEgJS4gIEFmdGVyIHRoZSBjb21tYW5kCi0jIGxpbmVzIGlzIHRoZSAnaGVhZGVyIGxp bmUnLCB3aGljaCBpcyBhIHByb2ZpbGUtc3BlY2lmaWMgbGluZSB0aGF0Ci0jIGluZGljYXRlcyB3 aGF0IHR5cGUgb2YgcHJvZmlsZSBpdCBpcywgYW5kIHBlcmhhcHMgb3RoZXIgZ2xvYmFsCi0jIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBwcm9maWxlLiAgRm9yIGluc3RhbmNlLCBoZXJlJ3MgYSBoZWFk ZXIgbGluZQotIyBmb3IgYSBoZWFwIHByb2ZpbGU6Ci0jICAgaGVhcCBwcm9maWxlOiAgICAgNTM6 ICAgIDM4MjM2IFsgIDU1MjU6ICAxMjg0MDI5XSBAIGhlYXBwcm9maWxlCi0jIEZvciBoaXN0b3Jp Y2FsIHJlYXNvbnMsIHRoZSBDUFUgcHJvZmlsZSBkb2VzIG5vdCBjb250YWluIGEgdGV4dC0KLSMg cmVhZGFibGUgaGVhZGVyIGxpbmUuICBJZiB0aGUgcHJvZmlsZSBsb29rcyBsaWtlIGEgQ1BVIHBy b2ZpbGUsCi0jIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAiIi4gIElmIG5vIGhlYWRlciBsaW5lIGNv dWxkIGJlIGZvdW5kLCB0aGlzCi0jIGZ1bmN0aW9uIHJldHVybnMgdW5kZWYuCi0jCi0jIFRoZSBm b2xsb3dpbmcgY29tbWFuZHMgYXJlIHJlY29nbml6ZWQ6Ci0jICAgJXdhcm4gLS0gZW1pdCB0aGUg cmVzdCBvZiB0aGlzIGxpbmUgdG8gc3RkZXJyLCBwcmVmaXhlZCBieSAnV0FSTklORzonCi0jCi0j IFRoZSBpbnB1dCBmaWxlIHNob3VsZCBiZSBpbiBiaW5tb2RlLgotc3ViIFJlYWRQcm9maWxlSGVh ZGVyIHsKLSAgbG9jYWwgKlBST0ZJTEUgPSBzaGlmdDsKLSAgbXkgJGZpcnN0Y2hhciA9ICIiOwot ICBteSAkbGluZSA9ICIiOwotICByZWFkKFBST0ZJTEUsICRmaXJzdGNoYXIsIDEpOwotICBzZWVr KFBST0ZJTEUsIC0xLCAxKTsgICAgICAgICAgICAgICAgICAgICMgdW5yZWFkIHRoZSBmaXJzdGNo YXIKLSAgaWYgKCRmaXJzdGNoYXIgIX4gL1tbOnByaW50Ol1dLykgeyAgICAgICAjIGlzIG5vdCBh IHRleHQgY2hhcmFjdGVyCi0gICAgcmV0dXJuICIiOwotICB9Ci0gIHdoaWxlIChkZWZpbmVkKCRs aW5lID0gPFBST0ZJTEU+KSkgewotICAgICRsaW5lID1+IHMvXHIvL2c7ICAgIyB0dXJuIHdpbmRv d3MtbG9va2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcwotICAgIGlmICgkbGluZSA9 fiAvXiV3YXJuXHMrKC4qKS8pIHsgICAgICAgICMgJ3dhcm4nIGNvbW1hbmQKLSAgICAgICMgTm90 ZSB0aGlzIG1hdGNoZXMgYm90aCAnJXdhcm4gYmxhaFxuJyBhbmQgJyV3YXJuXG4nLgotICAgICAg cHJpbnQgU1RERVJSICJXQVJOSU5HOiAkMVxuIjsgICAgICAgICMgcHJpbnQgdGhlIHJlc3Qgb2Yg dGhlIGxpbmUKLSAgICB9IGVsc2lmICgkbGluZSA9fiAvXiUvKSB7Ci0gICAgICBwcmludCBTVERF UlIgIklnbm9yaW5nIHVua25vd24gY29tbWFuZCBmcm9tIHByb2ZpbGUgaGVhZGVyOiAkbGluZSI7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICMgRW5kIG9mIGNvbW1hbmRzLCBtdXN0IGJlIHRoZSBoZWFk ZXIgbGluZS4KLSAgICAgIHJldHVybiAkbGluZTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHVuZGVm OyAgICAgIyBnb3QgdG8gRU9GIHdpdGhvdXQgc2VlaW5nIGEgaGVhZGVyIGxpbmUKLX0KLQotc3Vi IElzU3ltYm9saXplZFByb2ZpbGVGaWxlIHsKLSAgbXkgJGZpbGVfbmFtZSA9IHNoaWZ0OwotICBp ZiAoISgtZSAkZmlsZV9uYW1lKSB8fCAhKC1yICRmaWxlX25hbWUpKSB7Ci0gICAgcmV0dXJuIDA7 Ci0gIH0KLSAgIyBDaGVjayBpZiB0aGUgZmlsZSBjb250YWlucyBhIHN5bWJvbC1zZWN0aW9uIG1h cmtlci4KLSAgb3BlbihURklMRSwgIjwkZmlsZV9uYW1lIik7Ci0gIGJpbm1vZGUgVEZJTEU7Ci0g IG15ICRmaXJzdGxpbmUgPSBSZWFkUHJvZmlsZUhlYWRlcigqVEZJTEUpOwotICBjbG9zZShURklM RSk7Ci0gIGlmICghJGZpcnN0bGluZSkgewotICAgIHJldHVybiAwOwotICB9Ci0gICRTWU1CT0xf UEFHRSA9fiBtLFteL10rJCw7ICAgICMgbWF0Y2hlcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0 IHNsYXNoCi0gIG15ICRzeW1ib2xfbWFya2VyID0gJCY7Ci0gIHJldHVybiAkZmlyc3RsaW5lID1+ IC9eLS0tICokc3ltYm9sX21hcmtlci87Ci19Ci0KLSMgUGFyc2UgcHJvZmlsZSBnZW5lcmF0ZWQg YnkgY29tbW9uL3Byb2ZpbGVyLmNjIGFuZCByZXR1cm4gYSByZWZlcmVuY2UKLSMgdG8gYSBtYXA6 Ci0jICAgICAgJHJlc3VsdC0+e3ZlcnNpb259ICAgICBWZXJzaW9uIG51bWJlciBvZiBwcm9maWxl IGZpbGUKLSMgICAgICAkcmVzdWx0LT57cGVyaW9kfSAgICAgIFNhbXBsaW5nIHBlcmlvZCAoaW4g bWljcm9zZWNvbmRzKQotIyAgICAgICRyZXN1bHQtPntwcm9maWxlfSAgICAgUHJvZmlsZSBvYmpl Y3QKLSMgICAgICAkcmVzdWx0LT57dGhyZWFkc30gICAgIE1hcCBvZiB0aHJlYWQgSURzIHRvIHBy b2ZpbGUgb2JqZWN0cwotIyAgICAgICRyZXN1bHQtPnttYXB9ICAgICAgICAgTWVtb3J5IG1hcCBp bmZvIGZyb20gcHJvZmlsZQotIyAgICAgICRyZXN1bHQtPntwY3N9ICAgICAgICAgSGFzaCBvZiBh bGwgUEMgdmFsdWVzIHNlZW4sIGtleSBpcyBoZXggYWRkcmVzcwotc3ViIFJlYWRQcm9maWxlIHsK LSAgbXkgJHByb2cgPSBzaGlmdDsKLSAgbXkgJGZuYW1lID0gc2hpZnQ7Ci0gIG15ICRyZXN1bHQ7 ICAgICAgICAgICAgIyByZXR1cm4gdmFsdWUKLQotICAkQ09OVEVOVElPTl9QQUdFID1+IG0sW14v XSskLDsgICAgIyBtYXRjaGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2gKLSAgbXkg JGNvbnRlbnRpb25fbWFya2VyID0gJCY7Ci0gICRHUk9XVEhfUEFHRSAgPX4gbSxbXi9dKyQsOyAg ICAjIG1hdGNoZXMgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBzbGFzaAotICBteSAkZ3Jvd3Ro X21hcmtlciA9ICQmOwotICAkU1lNQk9MX1BBR0UgPX4gbSxbXi9dKyQsOyAgICAjIG1hdGNoZXMg ZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBzbGFzaAotICBteSAkc3ltYm9sX21hcmtlciA9ICQm OwotICAkUFJPRklMRV9QQUdFID1+IG0sW14vXSskLDsgICAgIyBtYXRjaGVzIGV2ZXJ5dGhpbmcg YWZ0ZXIgdGhlIGxhc3Qgc2xhc2gKLSAgbXkgJHByb2ZpbGVfbWFya2VyID0gJCY7Ci0gICRIRUFQ X1BBR0UgPX4gbSxbXi9dKyQsOyAgICAjIG1hdGNoZXMgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFz dCBzbGFzaAotICBteSAkaGVhcF9tYXJrZXIgPSAkJjsKLQotICAjIExvb2sgYXQgZmlyc3QgbGlu ZSB0byBzZWUgaWYgaXQgaXMgYSBoZWFwIG9yIGEgQ1BVIHByb2ZpbGUuCi0gICMgQ1BVIHByb2Zp bGUgbWF5IHN0YXJ0IHdpdGggbm8gaGVhZGVyIGF0IGFsbCwgYW5kIGp1c3QgYmluYXJ5IGRhdGEK LSAgIyAoc3RhcnRpbmcgd2l0aCBcMFwwXDBcMCkgLS0gaW4gdGhhdCBjYXNlLCBkb24ndCB0cnkg dG8gcmVhZCB0aGUKLSAgIyB3aG9sZSBmaXJzdGxpbmUsIHNpbmNlIGl0IG1heSBiZSBnaWdhYnl0 ZXMoISkgb2YgZGF0YS4KLSAgb3BlbihQUk9GSUxFLCAiPCRmbmFtZSIpIHx8IGVycm9yKCIkZm5h bWU6ICQhXG4iKTsKLSAgYmlubW9kZSBQUk9GSUxFOyAgICAgICMgTmV3IHBlcmxzIGRvIFVURi04 IHByb2Nlc3NpbmcKLSAgbXkgJGhlYWRlciA9IFJlYWRQcm9maWxlSGVhZGVyKCpQUk9GSUxFKTsK LSAgaWYgKCFkZWZpbmVkKCRoZWFkZXIpKSB7ICAgIyBtZWFucyAiYXQgRU9GIgotICAgIGVycm9y KCJQcm9maWxlIGlzIGVtcHR5LlxuIik7Ci0gIH0KLQotICBteSAkc3ltYm9sczsKLSAgaWYgKCRo ZWFkZXIgPX4gbS9eLS0tICokc3ltYm9sX21hcmtlci9vKSB7Ci0gICAgIyBWZXJpZnkgdGhhdCB0 aGUgdXNlciBhc2tlZCBmb3IgYSBzeW1ib2xpemVkIHByb2ZpbGUKLSAgICBpZiAoISRtYWluOjp1 c2Vfc3ltYm9saXplZF9wcm9maWxlKSB7Ci0gICAgICAjIHdlIGhhdmUgYm90aCBhIGJpbmFyeSBh bmQgc3ltYm9saXplZCBwcm9maWxlcywgYWJvcnQKLSAgICAgIGVycm9yKCJGQVRBTCBFUlJPUjog U3ltYm9saXplZCBwcm9maWxlXG4gICAkZm5hbWVcbmNhbm5vdCBiZSB1c2VkIHdpdGggIiAuCi0g ICAgICAgICAgICAiYSBiaW5hcnkgYXJnLiBUcnkgYWdhaW4gd2l0aG91dCBwYXNzaW5nXG4gICAk cHJvZ1xuIik7Ci0gICAgfQotICAgICMgUmVhZCB0aGUgc3ltYm9sIHNlY3Rpb24gb2YgdGhlIHN5 bWJvbGl6ZWQgcHJvZmlsZSBmaWxlLgotICAgICRzeW1ib2xzID0gUmVhZFN5bWJvbHMoKlBST0ZJ TEV7SU99KTsKLSAgICAjIFJlYWQgdGhlIG5leHQgbGluZSB0byBnZXQgdGhlIGhlYWRlciBmb3Ig dGhlIHJlbWFpbmluZyBwcm9maWxlLgotICAgICRoZWFkZXIgPSBSZWFkUHJvZmlsZUhlYWRlcigq UFJPRklMRSkgfHwgIiI7Ci0gIH0KLQotICBpZiAoJGhlYWRlciA9fiBtL14tLS0gKigkaGVhcF9t YXJrZXJ8JGdyb3d0aF9tYXJrZXIpL28pIHsKLSAgICAjIFNraXAgIi0tLSAuLi4iIGxpbmUgZm9y IHByb2ZpbGUgdHlwZXMgdGhhdCBoYXZlIHRoZWlyIG93biBoZWFkZXJzLgotICAgICRoZWFkZXIg PSBSZWFkUHJvZmlsZUhlYWRlcigqUFJPRklMRSkgfHwgIiI7Ci0gIH0KLQotICAkbWFpbjo6cHJv ZmlsZV90eXBlID0gJyc7Ci0KLSAgaWYgKCRoZWFkZXIgPX4gbS9eaGVhcCBwcm9maWxlOi4qJGdy b3d0aF9tYXJrZXIvbykgewotICAgICRtYWluOjpwcm9maWxlX3R5cGUgPSAnZ3Jvd3RoJzsKLSAg ICAkcmVzdWx0ID0gIFJlYWRIZWFwUHJvZmlsZSgkcHJvZywgKlBST0ZJTEUsICRoZWFkZXIpOwot ICB9IGVsc2lmICgkaGVhZGVyID1+IG0vXmhlYXAgcHJvZmlsZTovKSB7Ci0gICAgJG1haW46OnBy b2ZpbGVfdHlwZSA9ICdoZWFwJzsKLSAgICAkcmVzdWx0ID0gIFJlYWRIZWFwUHJvZmlsZSgkcHJv ZywgKlBST0ZJTEUsICRoZWFkZXIpOwotICB9IGVsc2lmICgkaGVhZGVyID1+IG0vXmhlYXAvKSB7 Ci0gICAgJG1haW46OnByb2ZpbGVfdHlwZSA9ICdoZWFwJzsKLSAgICAkcmVzdWx0ID0gUmVhZFRo cmVhZGVkSGVhcFByb2ZpbGUoJHByb2csICRmbmFtZSwgJGhlYWRlcik7Ci0gIH0gZWxzaWYgKCRo ZWFkZXIgPX4gbS9eLS0tICokY29udGVudGlvbl9tYXJrZXIvbykgewotICAgICRtYWluOjpwcm9m aWxlX3R5cGUgPSAnY29udGVudGlvbic7Ci0gICAgJHJlc3VsdCA9IFJlYWRTeW5jaFByb2ZpbGUo JHByb2csICpQUk9GSUxFKTsKLSAgfSBlbHNpZiAoJGhlYWRlciA9fiBtL14tLS0gKlN0YWNrczov KSB7Ci0gICAgcHJpbnQgU1RERVJSCi0gICAgICAiT2xkIGZvcm1hdCBjb250ZW50aW9uIHByb2Zp bGU6IG1pc3Rha2VubHkgcmVwb3J0cyAiIC4KLSAgICAgICJjb25kaXRpb24gdmFyaWFibGUgc2ln bmFscyBhcyBsb2NrIGNvbnRlbnRpb25zLlxuIjsKLSAgICAkbWFpbjo6cHJvZmlsZV90eXBlID0g J2NvbnRlbnRpb24nOwotICAgICRyZXN1bHQgPSBSZWFkU3luY2hQcm9maWxlKCRwcm9nLCAqUFJP RklMRSk7Ci0gIH0gZWxzaWYgKCRoZWFkZXIgPX4gbS9eLS0tICokcHJvZmlsZV9tYXJrZXIvKSB7 Ci0gICAgIyB0aGUgYmluYXJ5IGNwdSBwcm9maWxlIGRhdGEgc3RhcnRzIGltbWVkaWF0ZWx5IGFm dGVyIHRoaXMgbGluZQotICAgICRtYWluOjpwcm9maWxlX3R5cGUgPSAnY3B1JzsKLSAgICAkcmVz dWx0ID0gUmVhZENQVVByb2ZpbGUoJHByb2csICRmbmFtZSwgKlBST0ZJTEUpOwotICB9IGVsc2Ug ewotICAgIGlmIChkZWZpbmVkKCRzeW1ib2xzKSkgewotICAgICAgIyBhIHN5bWJvbGl6ZWQgcHJv ZmlsZSBjb250YWlucyBhIGZvcm1hdCB3ZSBkb24ndCByZWNvZ25pemUsIGJhaWwgb3V0Ci0gICAg ICBlcnJvcigiJGZuYW1lOiBDYW5ub3QgcmVjb2duaXplIHByb2ZpbGUgc2VjdGlvbiBhZnRlciBz eW1ib2xzLlxuIik7Ci0gICAgfQotICAgICMgbm8gYXNjaWkgaGVhZGVyIHByZXNlbnQgLS0gbXVz dCBiZSBhIENQVSBwcm9maWxlCi0gICAgJG1haW46OnByb2ZpbGVfdHlwZSA9ICdjcHUnOwotICAg ICRyZXN1bHQgPSBSZWFkQ1BVUHJvZmlsZSgkcHJvZywgJGZuYW1lLCAqUFJPRklMRSk7Ci0gIH0K LQotICBjbG9zZShQUk9GSUxFKTsKLQotICAjIGlmIHdlIGdvdCBzeW1ib2xzIGFsb25nIHdpdGgg dGhlIHByb2ZpbGUsIHJldHVybiB0aG9zZSBhcyB3ZWxsCi0gIGlmIChkZWZpbmVkKCRzeW1ib2xz KSkgewotICAgICRyZXN1bHQtPntzeW1ib2xzfSA9ICRzeW1ib2xzOwotICB9Ci0KLSAgcmV0dXJu ICRyZXN1bHQ7Ci19Ci0KLSMgU3VidHJhY3Qgb25lIGZyb20gY2FsbGVyIHBjIHNvIHdlIG1hcCBi YWNrIHRvIGNhbGwgaW5zdHIuCi0jIEhvd2V2ZXIsIGRvbid0IGRvIHRoaXMgaWYgd2UncmUgcmVh ZGluZyBhIHN5bWJvbGl6ZWQgcHJvZmlsZQotIyBmaWxlLCBpbiB3aGljaCBjYXNlIHRoZSBzdWJ0 cmFjdC1vbmUgd2FzIGRvbmUgd2hlbiB0aGUgZmlsZQotIyB3YXMgd3JpdHRlbi4KLSMKLSMgV2Ug YXBwbHkgdGhlIHNhbWUgbG9naWMgdG8gYWxsIHJlYWRlcnMsIHRob3VnaCBSZWFkQ1BVUHJvZmls ZSB1c2VzIGFuCi0jIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9uLgotc3ViIEZpeENhbGxlckFk ZHJlc3NlcyB7Ci0gIG15ICRzdGFjayA9IHNoaWZ0OwotICAjIC0tcmF3L2h0dHA6IEFsd2F5cyBz dWJ0cmFjdCBvbmUgZnJvbSBwYydzLCBiZWNhdXNlIFByaW50U3ltYm9saXplZFByb2ZpbGUoKQot ICAjIGR1bXBzIHVuYWRqdXN0ZWQgcHJvZmlsZXMuCi0gIHsKLSAgICAkc3RhY2sgPX4gLyhccykv OwotICAgIG15ICRkZWxpbWl0ZXIgPSAkMTsKLSAgICBteSBAYWRkcnMgPSBzcGxpdCgnICcsICRz dGFjayk7Ci0gICAgbXkgQGZpeGVkYWRkcnM7Ci0gICAgJCNmaXhlZGFkZHJzID0gJCNhZGRyczsK LSAgICBpZiAoJCNhZGRycyA+PSAwKSB7Ci0gICAgICAkZml4ZWRhZGRyc1swXSA9ICRhZGRyc1sw XTsKLSAgICB9Ci0gICAgZm9yIChteSAkaSA9IDE7ICRpIDw9ICQjYWRkcnM7ICRpKyspIHsKLSAg ICAgICRmaXhlZGFkZHJzWyRpXSA9IEFkZHJlc3NTdWIoJGFkZHJzWyRpXSwgIjB4MSIpOwotICAg IH0KLSAgICByZXR1cm4gam9pbiAkZGVsaW1pdGVyLCBAZml4ZWRhZGRyczsKLSAgfQotfQotCi0j IENQVSBwcm9maWxlIHJlYWRlcgotc3ViIFJlYWRDUFVQcm9maWxlIHsKLSAgbXkgJHByb2cgPSBz aGlmdDsKLSAgbXkgJGZuYW1lID0gc2hpZnQ7ICAgICAgICMganVzdCB1c2VkIGZvciBsb2dnaW5n Ci0gIGxvY2FsICpQUk9GSUxFID0gc2hpZnQ7Ci0gIG15ICR2ZXJzaW9uOwotICBteSAkcGVyaW9k OwotICBteSAkaTsKLSAgbXkgJHByb2ZpbGUgPSB7fTsKLSAgbXkgJHBjcyA9IHt9OwotCi0gICMg UGFyc2Ugc3RyaW5nIGludG8gYXJyYXkgb2Ygc2xvdHMuCi0gIG15ICRzbG90cyA9IENwdVByb2Zp bGVTdHJlYW0tPm5ldygqUFJPRklMRSwgJGZuYW1lKTsKLQotICAjIFJlYWQgaGVhZGVyLiAgVGhl IGN1cnJlbnQgaGVhZGVyIHZlcnNpb24gaXMgYSA1LWVsZW1lbnQgc3RydWN0dXJlCi0gICMgY29u dGFpbmluZzoKLSAgIyAgIDA6IGhlYWRlciBjb3VudCAoYWx3YXlzIDApCi0gICMgICAxOiBoZWFk ZXIgIndvcmRzIiAoYWZ0ZXIgdGhpcyBvbmU6IDMpCi0gICMgICAyOiBmb3JtYXQgdmVyc2lvbiAo MCkKLSAgIyAgIDM6IHNhbXBsaW5nIHBlcmlvZCAodXNlYykKLSAgIyAgIDQ6IHVudXNlZCBwYWRk aW5nIChhbHdheXMgMCkKLSAgaWYgKCRzbG90cy0+Z2V0KDApICE9IDAgKSB7Ci0gICAgZXJyb3Io IiRmbmFtZTogbm90IGEgcHJvZmlsZSBmaWxlLCBvciBvbGQgZm9ybWF0IHByb2ZpbGUgZmlsZVxu Iik7Ci0gIH0KLSAgJGkgPSAyICsgJHNsb3RzLT5nZXQoMSk7Ci0gICR2ZXJzaW9uID0gJHNsb3Rz LT5nZXQoMik7Ci0gICRwZXJpb2QgPSAkc2xvdHMtPmdldCgzKTsKLSAgIyBEbyBzb21lIHNhbml0 eSBjaGVja2luZyBvbiB0aGVzZSBoZWFkZXIgdmFsdWVzLgotICBpZiAoJHZlcnNpb24gPiAoMioq MzIpIHx8ICRwZXJpb2QgPiAoMioqMzIpIHx8ICRpID4gKDIqKjMyKSB8fCAkaSA8IDUpIHsKLSAg ICBlcnJvcigiJGZuYW1lOiBub3QgYSBwcm9maWxlIGZpbGUsIG9yIGNvcnJ1cHRlZCBwcm9maWxl IGZpbGVcbiIpOwotICB9Ci0KLSAgIyBQYXJzZSBwcm9maWxlCi0gIHdoaWxlICgkc2xvdHMtPmdl dCgkaSkgIT0gLTEpIHsKLSAgICBteSAkbiA9ICRzbG90cy0+Z2V0KCRpKyspOwotICAgIG15ICRk ID0gJHNsb3RzLT5nZXQoJGkrKyk7Ci0gICAgaWYgKCRkID4gKDIqKjE2KSkgeyAgIyBUT0RPKGNz aWx2ZXJzKTogd2hhdCdzIGEgcmVhc29uYWJsZSBtYXgtc3RhY2stZGVwdGg/Ci0gICAgICBteSAk YWRkciA9IHNwcmludGYoIjAlbyIsICRpICogKCRhZGRyZXNzX2xlbmd0aCA9PSA4ID8gNCA6IDgp KTsKLSAgICAgIHByaW50IFNUREVSUiAiQXQgaW5kZXggJGkgKGFkZHJlc3MgJGFkZHIpOlxuIjsK LSAgICAgIGVycm9yKCIkZm5hbWU6IHN0YWNrIHRyYWNlIGRlcHRoID49IDIqKjMyXG4iKTsKLSAg ICB9Ci0gICAgaWYgKCRzbG90cy0+Z2V0KCRpKSA9PSAwKSB7Ci0gICAgICAjIEVuZCBvZiBwcm9m aWxlIGRhdGEgbWFya2VyCi0gICAgICAkaSArPSAkZDsKLSAgICAgIGxhc3Q7Ci0gICAgfQotCi0g ICAgIyBNYWtlIGtleSBvdXQgb2YgdGhlIHN0YWNrIGVudHJpZXMKLSAgICBteSBAayA9ICgpOwot ICAgIGZvciAobXkgJGogPSAwOyAkaiA8ICRkOyAkaisrKSB7Ci0gICAgICBteSAkcGMgPSAkc2xv dHMtPmdldCgkaSskaik7Ci0gICAgICAjIFN1YnRyYWN0IG9uZSBmcm9tIGNhbGxlciBwYyBzbyB3 ZSBtYXAgYmFjayB0byBjYWxsIGluc3RyLgotICAgICAgJHBjLS07Ci0gICAgICAkcGMgPSBzcHJp bnRmKCIlMCp4IiwgJGFkZHJlc3NfbGVuZ3RoLCAkcGMpOwotICAgICAgJHBjcy0+eyRwY30gPSAx OwotICAgICAgcHVzaCBAaywgJHBjOwotICAgIH0KLQotICAgIEFkZEVudHJ5KCRwcm9maWxlLCAo am9pbiAiXG4iLCBAayksICRuKTsKLSAgICAkaSArPSAkZDsKLSAgfQotCi0gICMgUGFyc2UgbWFw Ci0gIG15ICRtYXAgPSAnJzsKLSAgc2VlayhQUk9GSUxFLCAkaSAqIDQsIDApOwotICByZWFkKFBS T0ZJTEUsICRtYXAsIChzdGF0IFBST0ZJTEUpWzddKTsKLQotICBteSAkciA9IHt9OwotICAkci0+ e3ZlcnNpb259ID0gJHZlcnNpb247Ci0gICRyLT57cGVyaW9kfSA9ICRwZXJpb2Q7Ci0gICRyLT57 cHJvZmlsZX0gPSAkcHJvZmlsZTsKLSAgJHItPntsaWJzfSA9IFBhcnNlTGlicmFyaWVzKCRwcm9n LCAkbWFwLCAkcGNzKTsKLSAgJHItPntwY3N9ID0gJHBjczsKLQotICByZXR1cm4gJHI7Ci19Ci0K LXN1YiBIZWFwUHJvZmlsZUluZGV4IHsKLSAgbXkgJGluZGV4ID0gMTsKLSAgaWYgKCRtYWluOjpv cHRfaW51c2Vfc3BhY2UpIHsKLSAgICAkaW5kZXggPSAxOwotICB9IGVsc2lmICgkbWFpbjo6b3B0 X2ludXNlX29iamVjdHMpIHsKLSAgICAkaW5kZXggPSAwOwotICB9IGVsc2lmICgkbWFpbjo6b3B0 X2FsbG9jX3NwYWNlKSB7Ci0gICAgJGluZGV4ID0gMzsKLSAgfSBlbHNpZiAoJG1haW46Om9wdF9h bGxvY19vYmplY3RzKSB7Ci0gICAgJGluZGV4ID0gMjsKLSAgfQotICByZXR1cm4gJGluZGV4Owot fQotCi1zdWIgUmVhZE1hcHBlZExpYnJhcmllcyB7Ci0gIG15ICRmaCA9IHNoaWZ0OwotICBteSAk bWFwID0gIiI7Ci0gICMgUmVhZCB0aGUgL3Byb2Mvc2VsZi9tYXBzIGRhdGEKLSAgd2hpbGUgKDwk Zmg+KSB7Ci0gICAgcy9cci8vZzsgICAgICAgICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVz IGludG8gdW5peC1sb29raW5nIGxpbmVzCi0gICAgJG1hcCAuPSAkXzsKLSAgfQotICByZXR1cm4g JG1hcDsKLX0KLQotc3ViIFJlYWRNZW1vcnlNYXAgewotICBteSAkZmggPSBzaGlmdDsKLSAgbXkg JG1hcCA9ICIiOwotICAjIFJlYWQgL3Byb2Mvc2VsZi9tYXBzIGRhdGEgYXMgZm9ybWF0dGVkIGJ5 IER1bXBBZGRyZXNzTWFwKCkKLSAgbXkgJGJ1aWxkdmFyID0gIiI7Ci0gIHdoaWxlICg8UFJPRklM RT4pIHsKLSAgICBzL1xyLy9nOyAgICAgICAgICMgdHVybiB3aW5kb3dzLWxvb2tpbmcgbGluZXMg aW50byB1bml4LWxvb2tpbmcgbGluZXMKLSAgICAjIFBhcnNlICJidWlsZD08ZGlyPiIgc3BlY2lm aWNhdGlvbiBpZiBzdXBwbGllZAotICAgIGlmIChtL15ccypidWlsZD0oLiopXG4vKSB7Ci0gICAg ICAkYnVpbGR2YXIgPSAkMTsKLSAgICB9Ci0KLSAgICAjIEV4cGFuZCAiJGJ1aWxkIiB2YXJpYWJs ZSBpZiBhdmFpbGFibGUKLSAgICAkXyA9fiBzL1wkYnVpbGRcYi8kYnVpbGR2YXIvZzsKLQotICAg ICRtYXAgLj0gJF87Ci0gIH0KLSAgcmV0dXJuICRtYXA7Ci19Ci0KLXN1YiBBZGp1c3RTYW1wbGVz IHsKLSAgbXkgKCRzYW1wbGVfYWRqdXN0bWVudCwgJHNhbXBsaW5nX2FsZ29yaXRobSwgJG4xLCAk czEsICRuMiwgJHMyKSA9IEBfOwotICBpZiAoJHNhbXBsZV9hZGp1c3RtZW50KSB7Ci0gICAgaWYg KCRzYW1wbGluZ19hbGdvcml0aG0gPT0gMikgewotICAgICAgIyBSZW1vdGUtaGVhcCB2ZXJzaW9u IDIKLSAgICAgICMgVGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBpcyB0aGUgcmF0ZSBvZiBhIFBvaXNz b24gcHJvY2Vzcy4KLSAgICAgICMgVGhpcyBtZWFucyB0aGF0IHRoZSBwcm9iYWJpbGl0eSBvZiBz YW1wbGluZyBhbiBhbGxvY2F0aW9uIG9mCi0gICAgICAjIHNpemUgWCB3aXRoIHNhbXBsaW5nIHJh dGUgWSBpcyAxIC0gZXhwKC1YL1kpCi0gICAgICBpZiAoJG4xICE9IDApIHsKLSAgICAgICAgbXkg JHJhdGlvID0gKCgkczEqMS4wKS8kbjEpLygkc2FtcGxlX2FkanVzdG1lbnQpOwotICAgICAgICBt eSAkc2NhbGVfZmFjdG9yID0gMS8oMSAtIGV4cCgtJHJhdGlvKSk7Ci0gICAgICAgICRuMSAqPSAk c2NhbGVfZmFjdG9yOwotICAgICAgICAkczEgKj0gJHNjYWxlX2ZhY3RvcjsKLSAgICAgIH0KLSAg ICAgIGlmICgkbjIgIT0gMCkgewotICAgICAgICBteSAkcmF0aW8gPSAoKCRzMioxLjApLyRuMikv KCRzYW1wbGVfYWRqdXN0bWVudCk7Ci0gICAgICAgIG15ICRzY2FsZV9mYWN0b3IgPSAxLygxIC0g ZXhwKC0kcmF0aW8pKTsKLSAgICAgICAgJG4yICo9ICRzY2FsZV9mYWN0b3I7Ci0gICAgICAgICRz MiAqPSAkc2NhbGVfZmFjdG9yOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAjIFJlbW90 ZS1oZWFwIHZlcnNpb24gMQotICAgICAgbXkgJHJhdGlvOwotICAgICAgJHJhdGlvID0gKCgkczEq MS4wKS8kbjEpLygkc2FtcGxlX2FkanVzdG1lbnQpOwotICAgICAgaWYgKCRyYXRpbyA8IDEpIHsK LSAgICAgICAgJG4xIC89ICRyYXRpbzsKLSAgICAgICAgJHMxIC89ICRyYXRpbzsKLSAgICAgIH0K LSAgICAgICRyYXRpbyA9ICgoJHMyKjEuMCkvJG4yKS8oJHNhbXBsZV9hZGp1c3RtZW50KTsKLSAg ICAgIGlmICgkcmF0aW8gPCAxKSB7Ci0gICAgICAgICRuMiAvPSAkcmF0aW87Ci0gICAgICAgICRz MiAvPSAkcmF0aW87Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiAoJG4xLCAkczEsICRu MiwgJHMyKTsKLX0KLQotc3ViIFJlYWRIZWFwUHJvZmlsZSB7Ci0gIG15ICRwcm9nID0gc2hpZnQ7 Ci0gIGxvY2FsICpQUk9GSUxFID0gc2hpZnQ7Ci0gIG15ICRoZWFkZXIgPSBzaGlmdDsKLQotICBt eSAkaW5kZXggPSBIZWFwUHJvZmlsZUluZGV4KCk7Ci0KLSAgIyBGaW5kIHRoZSB0eXBlIG9mIHRo aXMgcHJvZmlsZS4gIFRoZSBoZWFkZXIgbGluZSBsb29rcyBsaWtlOgotICAjICAgIGhlYXAgcHJv ZmlsZTogICAxMjQ2OiAgODgwMDc0NCBbICAxMjQ2OiAgODgwMDc0NF0gQCA8aGVhcC11cmw+LzI2 NjA1MwotICAjIFRoZXJlIGFyZSB0d28gcGFpcnMgPGNvdW50OiBzaXplPiwgdGhlIGZpcnN0IGlu dXNlIG9iamVjdHMvc3BhY2UsIGFuZCB0aGUKLSAgIyBzZWNvbmQgYWxsb2NhdGVkIG9iamVjdHMv c3BhY2UuICBUaGlzIGlzIGZvbGxvd2VkIG9wdGlvbmFsbHkgYnkgYSBwcm9maWxlCi0gICMgdHlw ZSwgYW5kIGlmIHRoYXQgaXMgcHJlc2VudCwgb3B0aW9uYWxseSBieSBhIHNhbXBsaW5nIGZyZXF1 ZW5jeS4KLSAgIyBGb3IgcmVtb3RlIGhlYXAgcHJvZmlsZXMgKHYxKToKLSAgIyBUaGUgaW50ZXJw cmV0YXRpb24gb2YgdGhlIHNhbXBsaW5nIGZyZXF1ZW5jeSBpcyB0aGF0IHRoZSBwcm9maWxlciwg Zm9yCi0gICMgZWFjaCBzYW1wbGUsIGNhbGN1bGF0ZXMgYSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQg cmFuZG9tIGludGVnZXIgbGVzcyB0aGFuCi0gICMgdGhlIGdpdmVuIHZhbHVlLCBhbmQgcmVjb3Jk cyB0aGUgbmV4dCBzYW1wbGUgYWZ0ZXIgdGhhdCBtYW55IGJ5dGVzIGhhdmUKLSAgIyBiZWVuIGFs bG9jYXRlZC4gIFRoZXJlZm9yZSwgdGhlIGV4cGVjdGVkIHNhbXBsZSBpbnRlcnZhbCBpcyBoYWxm IG9mIHRoZQotICAjIGdpdmVuIGZyZXF1ZW5jeS4gIEJ5IGRlZmF1bHQsIGlmIG5vdCBzcGVjaWZp ZWQsIHRoZSBleHBlY3RlZCBzYW1wbGUKLSAgIyBpbnRlcnZhbCBpcyAxMjhLQi4gIE9ubHkgcmVt b3RlLWhlYXAtcGFnZSBwcm9maWxlcyBhcmUgYWRqdXN0ZWQgZm9yCi0gICMgc2FtcGxlIHNpemUu Ci0gICMgRm9yIHJlbW90ZSBoZWFwIHByb2ZpbGVzICh2Mik6Ci0gICMgVGhlIHNhbXBsaW5nIGZy ZXF1ZW5jeSBpcyB0aGUgcmF0ZSBvZiBhIFBvaXNzb24gcHJvY2Vzcy4gVGhpcyBtZWFucyB0aGF0 Ci0gICMgdGhlIHByb2JhYmlsaXR5IG9mIHNhbXBsaW5nIGFuIGFsbG9jYXRpb24gb2Ygc2l6ZSBY IHdpdGggc2FtcGxpbmcgcmF0ZSBZCi0gICMgaXMgMSAtIGV4cCgtWC9ZKQotICAjIEZvciB2ZXJz aW9uIDIsIGEgdHlwaWNhbCBoZWFkZXIgbGluZSBtaWdodCBsb29rIGxpa2UgdGhpczoKLSAgIyBo ZWFwIHByb2ZpbGU6ICAgMTkyMjogMTI3NzkyMzYwIFsgIDE5MjI6IDEyNzc5MjM2MF0gQCA8aGVh cC11cmw+X3YyLzUyNDI4OAotICAjIHRoZSB0cmFpbGluZyBudW1iZXIgKDUyNDI4OCkgaXMgdGhl IHNhbXBsaW5nIHJhdGUuIChWZXJzaW9uIDEgc2hvd2VkCi0gICMgZG91YmxlIHRoZSAncmF0ZScg aGVyZSkKLSAgbXkgJHNhbXBsaW5nX2FsZ29yaXRobSA9IDA7Ci0gIG15ICRzYW1wbGVfYWRqdXN0 bWVudCA9IDA7Ci0gIGNob21wKCRoZWFkZXIpOwotICBteSAkdHlwZSA9ICJ1bmtub3duIjsKLSAg aWYgKCRoZWFkZXIgPX4gbSJeaGVhcCBwcm9maWxlOlxzKihcZCspOlxzKyhcZCspXHMrXFtccyoo XGQrKTpccysoXGQrKVxdKFxzKkBccyooW14vXSopKC8oXGQrKSk/KT8iKSB7Ci0gICAgaWYgKGRl ZmluZWQoJDYpICYmICgkNiBuZSAnJykpIHsKLSAgICAgICR0eXBlID0gJDY7Ci0gICAgICBteSAk c2FtcGxlX3BlcmlvZCA9ICQ4OwotICAgICAgIyAkdHlwZSBpcyAiaGVhcHByb2ZpbGUiIGZvciBw cm9maWxlcyBnZW5lcmF0ZWQgYnkgdGhlCi0gICAgICAjIGhlYXAtcHJvZmlsZXIsIGFuZCBlaXRo ZXIgImhlYXAiIG9yICJoZWFwX3YyIiBmb3IgcHJvZmlsZXMKLSAgICAgICMgZ2VuZXJhdGVkIGJ5 IHNhbXBsaW5nIGRpcmVjdGx5IHdpdGhpbiB0Y21hbGxvYy4gIEl0IGNhbiBhbHNvCi0gICAgICAj IGJlICJncm93dGgiIGZvciBoZWFwLWdyb3d0aCBwcm9maWxlcy4gIFRoZSBmaXJzdCBpcyB0eXBp Y2FsbHkKLSAgICAgICMgZm91bmQgZm9yIHByb2ZpbGVzIGdlbmVyYXRlZCBsb2NhbGx5LCBhbmQg dGhlIG90aGVycyBmb3IKLSAgICAgICMgcmVtb3RlIHByb2ZpbGVzLgotICAgICAgaWYgKCgkdHlw ZSBlcSAiaGVhcHByb2ZpbGUiKSB8fCAoJHR5cGUgIX4gL2hlYXAvKSApIHsKLSAgICAgICAgIyBO byBuZWVkIHRvIGFkanVzdCBmb3IgdGhlIHNhbXBsaW5nIHJhdGUgd2l0aCBoZWFwLXByb2ZpbGVy LWRlcml2ZWQgZGF0YQotICAgICAgICAkc2FtcGxpbmdfYWxnb3JpdGhtID0gMDsKLSAgICAgIH0g ZWxzaWYgKCR0eXBlID1+IC9fdjIvKSB7Ci0gICAgICAgICRzYW1wbGluZ19hbGdvcml0aG0gPSAy OyAgICAgIyB2ZXJzaW9uIDIgc2FtcGxpbmcKLSAgICAgICAgaWYgKGRlZmluZWQoJHNhbXBsZV9w ZXJpb2QpICYmICgkc2FtcGxlX3BlcmlvZCBuZSAnJykpIHsKLSAgICAgICAgICAkc2FtcGxlX2Fk anVzdG1lbnQgPSBpbnQoJHNhbXBsZV9wZXJpb2QpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ug ewotICAgICAgICAkc2FtcGxpbmdfYWxnb3JpdGhtID0gMTsgICAgICMgdmVyc2lvbiAxIHNhbXBs aW5nCi0gICAgICAgIGlmIChkZWZpbmVkKCRzYW1wbGVfcGVyaW9kKSAmJiAoJHNhbXBsZV9wZXJp b2QgbmUgJycpKSB7Ci0gICAgICAgICAgJHNhbXBsZV9hZGp1c3RtZW50ID0gaW50KCRzYW1wbGVf cGVyaW9kKS8yOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICMgV2Ug ZGV0ZWN0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYSByZW1vdGUtaGVhcCBwcm9maWxlIGJ5IGNo ZWNraW5nCi0gICAgICAjIHRoYXQgdGhlIHRvdGFsLWFsbG9jYXRlZCBzdGF0cyAoJG4yLCRzMikg YXJlIGV4YWN0bHkgdGhlCi0gICAgICAjIHNhbWUgYXMgdGhlIGluLXVzZSBzdGF0cyAoJG4xLCRz MSkuICBJdCBpcyByZW1vdGVseSBjb25jZWl2YWJsZQotICAgICAgIyB0aGF0IGEgbm9uLXJlbW90 ZS1oZWFwIHByb2ZpbGUgbWF5IHBhc3MgdGhpcyBjaGVjaywgYnV0IGl0IGlzIGhhcmQKLSAgICAg ICMgdG8gaW1hZ2luZSBob3cgdGhhdCBjb3VsZCBoYXBwZW4uCi0gICAgICAjIEluIHRoaXMgY2Fz ZSBpdCdzIHNvIG9sZCBpdCdzIGd1YXJhbnRlZWQgdG8gYmUgcmVtb3RlLWhlYXAgdmVyc2lvbiAx LgotICAgICAgbXkgKCRuMSwgJHMxLCAkbjIsICRzMikgPSAoJDEsICQyLCAkMywgJDQpOwotICAg ICAgaWYgKCgkbjEgPT0gJG4yKSAmJiAoJHMxID09ICRzMikpIHsKLSAgICAgICAgIyBUaGlzIGlz IGxpa2VseSB0byBiZSBhIHJlbW90ZS1oZWFwIGJhc2VkIHNhbXBsZSBwcm9maWxlCi0gICAgICAg ICRzYW1wbGluZ19hbGdvcml0aG0gPSAxOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmICgk c2FtcGxpbmdfYWxnb3JpdGhtID4gMCkgewotICAgICMgRm9yIHJlbW90ZS1oZWFwIGdlbmVyYXRl ZCBwcm9maWxlcywgYWRqdXN0IHRoZSBjb3VudHMgYW5kIHNpemVzIHRvCi0gICAgIyBhY2NvdW50 IGZvciB0aGUgc2FtcGxlIHJhdGUgKHdlIHNhbXBsZSBvbmNlIGV2ZXJ5IDEyOEtCIGJ5IGRlZmF1 bHQpLgotICAgIGlmICgkc2FtcGxlX2FkanVzdG1lbnQgPT0gMCkgewotICAgICAgIyBUdXJuIG9u IHByb2ZpbGUgYWRqdXN0bWVudC4KLSAgICAgICRzYW1wbGVfYWRqdXN0bWVudCA9IDEyOCoxMDI0 OwotICAgICAgcHJpbnQgU1RERVJSICJBZGp1c3RpbmcgaGVhcCBwcm9maWxlcyBmb3IgMS1pbi0x MjhLQiBzYW1wbGluZyByYXRlXG4iOwotICAgIH0gZWxzZSB7Ci0gICAgICBwcmludGYgU1RERVJS ICgiQWRqdXN0aW5nIGhlYXAgcHJvZmlsZXMgZm9yIDEtaW4tJWQgc2FtcGxpbmcgcmF0ZVxuIiwK LSAgICAgICAgICAgICAgICAgICAgICRzYW1wbGVfYWRqdXN0bWVudCk7Ci0gICAgfQotICAgIGlm ICgkc2FtcGxpbmdfYWxnb3JpdGhtID4gMSkgewotICAgICAgIyBXZSBkb24ndCBib3RoZXIgcHJp bnRpbmcgYW55dGhpbmcgZm9yIHRoZSBvcmlnaW5hbCB2ZXJzaW9uICh2ZXJzaW9uIDEpCi0gICAg ICBwcmludGYgU1RERVJSICJIZWFwIHZlcnNpb24gJHNhbXBsaW5nX2FsZ29yaXRobVxuIjsKLSAg ICB9Ci0gIH0KLQotICBteSAkcHJvZmlsZSA9IHt9OwotICBteSAkcGNzID0ge307Ci0gIG15ICRt YXAgPSAiIjsKLQotICB3aGlsZSAoPFBST0ZJTEU+KSB7Ci0gICAgcy9cci8vZzsgICAgICAgICAj IHR1cm4gd2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCi0gICAg aWYgKC9eTUFQUEVEX0xJQlJBUklFUzovKSB7Ci0gICAgICAkbWFwIC49IFJlYWRNYXBwZWRMaWJy YXJpZXMoKlBST0ZJTEUpOwotICAgICAgbGFzdDsKLSAgICB9Ci0KLSAgICBpZiAoL14tLS0gTWVt b3J5IG1hcDovKSB7Ci0gICAgICAkbWFwIC49IFJlYWRNZW1vcnlNYXAoKlBST0ZJTEUpOwotICAg ICAgbGFzdDsKLSAgICB9Ci0KLSAgICAjIFJlYWQgZW50cnkgb2YgdGhlIGZvcm06Ci0gICAgIyAg PGNvdW50MT46IDxieXRlczE+IFs8Y291bnQyPjogPGJ5dGVzMj5dIEAgYTEgYTIgYTMgLi4uIGFu Ci0gICAgcy9eXHMqLy87Ci0gICAgcy9ccyokLy87Ci0gICAgaWYgKG0vXlxzKihcZCspOlxzKyhc ZCspXHMrXFtccyooXGQrKTpccysoXGQrKVxdXHMrQFxzKyguKikkLykgewotICAgICAgbXkgJHN0 YWNrID0gJDU7Ci0gICAgICBteSAoJG4xLCAkczEsICRuMiwgJHMyKSA9ICgkMSwgJDIsICQzLCAk NCk7Ci0gICAgICBteSBAY291bnRzID0gQWRqdXN0U2FtcGxlcygkc2FtcGxlX2FkanVzdG1lbnQs ICRzYW1wbGluZ19hbGdvcml0aG0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk bjEsICRzMSwgJG4yLCAkczIpOwotICAgICAgQWRkRW50cmllcygkcHJvZmlsZSwgJHBjcywgRml4 Q2FsbGVyQWRkcmVzc2VzKCRzdGFjayksICRjb3VudHNbJGluZGV4XSk7Ci0gICAgfQotICB9Ci0K LSAgbXkgJHIgPSB7fTsKLSAgJHItPnt2ZXJzaW9ufSA9ICJoZWFwIjsKLSAgJHItPntwZXJpb2R9 ID0gMTsKLSAgJHItPntwcm9maWxlfSA9ICRwcm9maWxlOwotICAkci0+e2xpYnN9ID0gUGFyc2VM aWJyYXJpZXMoJHByb2csICRtYXAsICRwY3MpOwotICAkci0+e3Bjc30gPSAkcGNzOwotICByZXR1 cm4gJHI7Ci19Ci0KLXN1YiBSZWFkVGhyZWFkZWRIZWFwUHJvZmlsZSB7Ci0gIG15ICgkcHJvZywg JGZuYW1lLCAkaGVhZGVyKSA9IEBfOwotCi0gIG15ICRpbmRleCA9IEhlYXBQcm9maWxlSW5kZXgo KTsKLSAgbXkgJHNhbXBsaW5nX2FsZ29yaXRobSA9IDA7Ci0gIG15ICRzYW1wbGVfYWRqdXN0bWVu dCA9IDA7Ci0gIGNob21wKCRoZWFkZXIpOwotICBteSAkdHlwZSA9ICJ1bmtub3duIjsKLSAgIyBB c3N1bWluZyBhIHZlcnkgc3BlY2lmaWMgdHlwZSBvZiBoZWFkZXIgZm9yIG5vdy4KLSAgaWYgKCRo ZWFkZXIgPX4gbSJeaGVhcF92Mi8oXGQrKSIpIHsKLSAgICAkdHlwZSA9ICJfdjIiOwotICAgICRz YW1wbGluZ19hbGdvcml0aG0gPSAyOwotICAgICRzYW1wbGVfYWRqdXN0bWVudCA9IGludCgkMSk7 Ci0gIH0KLSAgaWYgKCR0eXBlIG5lICJfdjIiIHx8ICFkZWZpbmVkKCRzYW1wbGVfYWRqdXN0bWVu dCkpIHsKLSAgICBkaWUgIlRocmVhZGVkIGhlYXAgcHJvZmlsZXMgcmVxdWlyZSB2MiBzYW1wbGlu ZyB3aXRoIGEgc2FtcGxlIHJhdGVcbiI7Ci0gIH0KLQotICBteSAkcHJvZmlsZSA9IHt9OwotICBt eSAkdGhyZWFkX3Byb2ZpbGVzID0ge307Ci0gIG15ICRwY3MgPSB7fTsKLSAgbXkgJG1hcCA9ICIi OwotICBteSAkc3RhY2sgPSAiIjsKLQotICB3aGlsZSAoPFBST0ZJTEU+KSB7Ci0gICAgcy9cci8v ZzsKLSAgICBpZiAoL15NQVBQRURfTElCUkFSSUVTOi8pIHsKLSAgICAgICRtYXAgLj0gUmVhZE1h cHBlZExpYnJhcmllcygqUFJPRklMRSk7Ci0gICAgICBsYXN0OwotICAgIH0KLQotICAgIGlmICgv Xi0tLSBNZW1vcnkgbWFwOi8pIHsKLSAgICAgICRtYXAgLj0gUmVhZE1lbW9yeU1hcCgqUFJPRklM RSk7Ci0gICAgICBsYXN0OwotICAgIH0KLQotICAgICMgUmVhZCBlbnRyeSBvZiB0aGUgZm9ybToK LSAgICAjIEAgYTEgYTIgLi4uIGFuCi0gICAgIyAgIHQqOiA8Y291bnQxPjogPGJ5dGVzMT4gWzxj b3VudDI+OiA8Ynl0ZXMyPl0KLSAgICAjICAgdDE6IDxjb3VudDE+OiA8Ynl0ZXMxPiBbPGNvdW50 Mj46IDxieXRlczI+XQotICAgICMgICAgIC4uLgotICAgICMgICB0bjogPGNvdW50MT46IDxieXRl czE+IFs8Y291bnQyPjogPGJ5dGVzMj5dCi0gICAgcy9eXHMqLy87Ci0gICAgcy9ccyokLy87Ci0g ICAgaWYgKG0vXkBccysoLiopJC8pIHsKLSAgICAgICRzdGFjayA9ICQxOwotICAgIH0gZWxzaWYg KG0vXlxzKih0KFwqfFxkKykpOlxzKyhcZCspOlxzKyhcZCspXHMrXFtccyooXGQrKTpccysoXGQr KVxdJC8pIHsKLSAgICAgIGlmICgkc3RhY2sgZXEgIiIpIHsKLSAgICAgICAgIyBTdGlsbCBpbiB0 aGUgaGVhZGVyLCBzbyB0aGlzIGlzIGp1c3QgYSBwZXItdGhyZWFkIHN1bW1hcnkuCi0gICAgICAg IG5leHQ7Ci0gICAgICB9Ci0gICAgICBteSAkdGhyZWFkID0gJDI7Ci0gICAgICBteSAoJG4xLCAk czEsICRuMiwgJHMyKSA9ICgkMywgJDQsICQ1LCAkNik7Ci0gICAgICBteSBAY291bnRzID0gQWRq dXN0U2FtcGxlcygkc2FtcGxlX2FkanVzdG1lbnQsICRzYW1wbGluZ19hbGdvcml0aG0sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbjEsICRzMSwgJG4yLCAkczIpOwotICAgICAg aWYgKCR0aHJlYWQgZXEgIioiKSB7Ci0gICAgICAgIEFkZEVudHJpZXMoJHByb2ZpbGUsICRwY3Ms IEZpeENhbGxlckFkZHJlc3Nlcygkc3RhY2spLCAkY291bnRzWyRpbmRleF0pOwotICAgICAgfSBl bHNlIHsKLSAgICAgICAgaWYgKCFleGlzdHMoJHRocmVhZF9wcm9maWxlcy0+eyR0aHJlYWR9KSkg ewotICAgICAgICAgICR0aHJlYWRfcHJvZmlsZXMtPnskdGhyZWFkfSA9IHt9OwotICAgICAgICB9 Ci0gICAgICAgIEFkZEVudHJpZXMoJHRocmVhZF9wcm9maWxlcy0+eyR0aHJlYWR9LCAkcGNzLAot ICAgICAgICAgICAgICAgICAgIEZpeENhbGxlckFkZHJlc3Nlcygkc3RhY2spLCAkY291bnRzWyRp bmRleF0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIG15ICRyID0ge307Ci0gICRyLT57dmVy c2lvbn0gPSAiaGVhcCI7Ci0gICRyLT57cGVyaW9kfSA9IDE7Ci0gICRyLT57cHJvZmlsZX0gPSAk cHJvZmlsZTsKLSAgJHItPnt0aHJlYWRzfSA9ICR0aHJlYWRfcHJvZmlsZXM7Ci0gICRyLT57bGli c30gPSBQYXJzZUxpYnJhcmllcygkcHJvZywgJG1hcCwgJHBjcyk7Ci0gICRyLT57cGNzfSA9ICRw Y3M7Ci0gIHJldHVybiAkcjsKLX0KLQotc3ViIFJlYWRTeW5jaFByb2ZpbGUgewotICBteSAkcHJv ZyA9IHNoaWZ0OwotICBsb2NhbCAqUFJPRklMRSA9IHNoaWZ0OwotICBteSAkaGVhZGVyID0gc2hp ZnQ7Ci0KLSAgbXkgJG1hcCA9ICcnOwotICBteSAkcHJvZmlsZSA9IHt9OwotICBteSAkcGNzID0g e307Ci0gIG15ICRzYW1wbGluZ19wZXJpb2QgPSAxOwotICBteSAkY3ljbGVzcGVybmFub3NlYyA9 IDIuODsgICAjIERlZmF1bHQgYXNzdW1wdGlvbiBmb3Igb2xkIGJpbmFyaWVzCi0gIG15ICRzZWVu X2Nsb2NrcmF0ZSA9IDA7Ci0gIG15ICRsaW5lOwotCi0gIG15ICRpbmRleCA9IDA7Ci0gIGlmICgk bWFpbjo6b3B0X3RvdGFsX2RlbGF5KSB7Ci0gICAgJGluZGV4ID0gMDsKLSAgfSBlbHNpZiAoJG1h aW46Om9wdF9jb250ZW50aW9ucykgewotICAgICRpbmRleCA9IDE7Ci0gIH0gZWxzaWYgKCRtYWlu OjpvcHRfbWVhbl9kZWxheSkgewotICAgICRpbmRleCA9IDI7Ci0gIH0KLQotICB3aGlsZSAoICRs aW5lID0gPFBST0ZJTEU+ICkgewotICAgICRsaW5lID1+IHMvXHIvL2c7ICAgICAgIyB0dXJuIHdp bmRvd3MtbG9va2luZyBsaW5lcyBpbnRvIHVuaXgtbG9va2luZyBsaW5lcwotICAgIGlmICggJGxp bmUgPX4gL15ccyooXGQrKVxzKyhcZCspIFxAXHMqKC4qPylccyokLyApIHsKLSAgICAgIG15ICgk Y3ljbGVzLCAkY291bnQsICRzdGFjaykgPSAoJDEsICQyLCAkMyk7Ci0KLSAgICAgICMgQ29udmVy dCBjeWNsZXMgdG8gbmFub3NlY29uZHMKLSAgICAgICRjeWNsZXMgLz0gJGN5Y2xlc3Blcm5hbm9z ZWM7Ci0KLSAgICAgICMgQWRqdXN0IGZvciBzYW1wbGluZyBkb25lIGJ5IGFwcGxpY2F0aW9uCi0g ICAgICAkY3ljbGVzICo9ICRzYW1wbGluZ19wZXJpb2Q7Ci0gICAgICAkY291bnQgKj0gJHNhbXBs aW5nX3BlcmlvZDsKLQotICAgICAgbXkgQHZhbHVlcyA9ICgkY3ljbGVzLCAkY291bnQsICRjeWNs ZXMgLyAkY291bnQpOwotICAgICAgQWRkRW50cmllcygkcHJvZmlsZSwgJHBjcywgRml4Q2FsbGVy QWRkcmVzc2VzKCRzdGFjayksICR2YWx1ZXNbJGluZGV4XSk7Ci0KLSAgICB9IGVsc2lmICggJGxp bmUgPX4gL14oc2xvdyByZWxlYXNlKS4qdGhyZWFkIFxkKyAgXEBccyooLio/KVxzKiQvIHx8Ci0g ICAgICAgICAgICAgICRsaW5lID1+IC9eXHMqKFxkKykgXEBccyooLio/KVxzKiQvICkgewotICAg ICAgbXkgKCRjeWNsZXMsICRzdGFjaykgPSAoJDEsICQyKTsKLSAgICAgIGlmICgkY3ljbGVzICF+ IC9eXGQrJC8pIHsKLSAgICAgICAgbmV4dDsKLSAgICAgIH0KLQotICAgICAgIyBDb252ZXJ0IGN5 Y2xlcyB0byBuYW5vc2Vjb25kcwotICAgICAgJGN5Y2xlcyAvPSAkY3ljbGVzcGVybmFub3NlYzsK LQotICAgICAgIyBBZGp1c3QgZm9yIHNhbXBsaW5nIGRvbmUgYnkgYXBwbGljYXRpb24KLSAgICAg ICRjeWNsZXMgKj0gJHNhbXBsaW5nX3BlcmlvZDsKLQotICAgICAgQWRkRW50cmllcygkcHJvZmls ZSwgJHBjcywgRml4Q2FsbGVyQWRkcmVzc2VzKCRzdGFjayksICRjeWNsZXMpOwotCi0gICAgfSBl bHNpZiAoICRsaW5lID1+IG0vXihbYS16XVtePV0qKT0oLiopJC8gKSB7Ci0gICAgICBteSAoJHZh cmlhYmxlLCAkdmFsdWUpID0gKCQxLCQyKTsKLSAgICAgIGZvciAoJHZhcmlhYmxlLCAkdmFsdWUp IHsKLSAgICAgICAgcy9eXHMrLy87Ci0gICAgICAgIHMvXHMrJC8vOwotICAgICAgfQotICAgICAg aWYgKCR2YXJpYWJsZSBlcSAiY3ljbGVzL3NlY29uZCIpIHsKLSAgICAgICAgJGN5Y2xlc3Blcm5h bm9zZWMgPSAkdmFsdWUgLyAxZTk7Ci0gICAgICAgICRzZWVuX2Nsb2NrcmF0ZSA9IDE7Ci0gICAg ICB9IGVsc2lmICgkdmFyaWFibGUgZXEgInNhbXBsaW5nIHBlcmlvZCIpIHsKLSAgICAgICAgJHNh bXBsaW5nX3BlcmlvZCA9ICR2YWx1ZTsKLSAgICAgIH0gZWxzaWYgKCR2YXJpYWJsZSBlcSAibXMg c2luY2UgcmVzZXQiKSB7Ci0gICAgICAgICMgQ3VycmVudGx5IG5vdGhpbmcgaXMgZG9uZSB3aXRo IHRoaXMgdmFsdWUgaW4gamVwcm9mCi0gICAgICAgICMgU28gd2UganVzdCBzaWxlbnRseSBpZ25v cmUgaXQgZm9yIG5vdwotICAgICAgfSBlbHNpZiAoJHZhcmlhYmxlIGVxICJkaXNjYXJkZWQgc2Ft cGxlcyIpIHsKLSAgICAgICAgIyBDdXJyZW50bHkgbm90aGluZyBpcyBkb25lIHdpdGggdGhpcyB2 YWx1ZSBpbiBqZXByb2YKLSAgICAgICAgIyBTbyB3ZSBqdXN0IHNpbGVudGx5IGlnbm9yZSBpdCBm b3Igbm93Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwcmludGYgU1RERVJSICgiSWdub3Jpbmcg dW5ua25vd24gdmFyaWFibGUgaW4gL2NvbnRlbnRpb24gb3V0cHV0OiAiIC4KLSAgICAgICAgICAg ICAgICAgICAgICAgIiclcycgPSAnJXMnXG4iLCR2YXJpYWJsZSwkdmFsdWUpOwotICAgICAgfQot ICAgIH0gZWxzZSB7Ci0gICAgICAjIE1lbW9yeSBtYXAgZW50cnkKLSAgICAgICRtYXAgLj0gJGxp bmU7Ci0gICAgfQotICB9Ci0KLSAgaWYgKCEkc2Vlbl9jbG9ja3JhdGUpIHsKLSAgICBwcmludGYg U1RERVJSICgiTm8gY3ljbGVzL3NlY29uZCBlbnRyeSBpbiBwcm9maWxlOyBHdWVzc2luZyAlLjFm IEdIelxuIiwKLSAgICAgICAgICAgICAgICAgICAkY3ljbGVzcGVybmFub3NlYyk7Ci0gIH0KLQot ICBteSAkciA9IHt9OwotICAkci0+e3ZlcnNpb259ID0gMDsKLSAgJHItPntwZXJpb2R9ID0gJHNh bXBsaW5nX3BlcmlvZDsKLSAgJHItPntwcm9maWxlfSA9ICRwcm9maWxlOwotICAkci0+e2xpYnN9 ID0gUGFyc2VMaWJyYXJpZXMoJHByb2csICRtYXAsICRwY3MpOwotICAkci0+e3Bjc30gPSAkcGNz OwotICByZXR1cm4gJHI7Ci19Ci0KLSMgR2l2ZW4gYSBoZXggdmFsdWUgaW4gdGhlIGZvcm0gIjB4 MWFiY2QiIG9yICIxYWJjZCIsIHJldHVybiBlaXRoZXIKLSMgIjAwMDFhYmNkIiBvciAiMDAwMDAw MDAwMDAxYWJjZCIsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCAoZ2xvYmFsKQotIyBhZGRyZXNz IGxlbmd0aC4KLXN1YiBIZXhFeHRlbmQgewotICBteSAkYWRkciA9IHNoaWZ0OwotCi0gICRhZGRy ID1+IHMvXigweCk/MCovLzsKLSAgbXkgJHplcm9zX25lZWRlZCA9ICRhZGRyZXNzX2xlbmd0aCAt IGxlbmd0aCgkYWRkcik7Ci0gIGlmICgkemVyb3NfbmVlZGVkIDwgMCkgewotICAgIHByaW50ZiBT VERFUlIgIldhcm5pbmc6IGFkZHJlc3MgJGFkZHIgaXMgbG9uZ2VyIHRoYW4gYWRkcmVzcyBsZW5n dGggJGFkZHJlc3NfbGVuZ3RoXG4iOwotICAgIHJldHVybiAkYWRkcjsKLSAgfQotICByZXR1cm4g KCIwIiB4ICR6ZXJvc19uZWVkZWQpIC4gJGFkZHI7Ci19Ci0KLSMjIyMjIFN5bWJvbCBleHRyYWN0 aW9uICMjIyMjCi0KLSMgQWdncmVzc2l2ZWx5IHNlYXJjaCB0aGUgbGliX3ByZWZpeCB2YWx1ZXMg Zm9yIHRoZSBnaXZlbiBsaWJyYXJ5Ci0jIElmIGFsbCBlbHNlIGZhaWxzLCBqdXN0IHJldHVybiB0 aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB1bm1vZGlmaWVkLgotIyBJZiB0aGUgbGliX3ByZWZpeCBp cyAiL215L3BhdGgsL290aGVyL3BhdGgiIGFuZCAkZmlsZSBpcyAiL2xpYi9kaXIvbXlsaWIuc28i Ci0jIGl0IHdpbGwgc2VhcmNoIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zIGluIHRoaXMgb3JkZXIs IHVudGlsIGl0IGZpbmRzIGEgZmlsZToKLSMgICAvbXkvcGF0aC9saWIvZGlyL215bGliLnNvCi0j ICAgL290aGVyL3BhdGgvbGliL2Rpci9teWxpYi5zbwotIyAgIC9teS9wYXRoL2Rpci9teWxpYi5z bwotIyAgIC9vdGhlci9wYXRoL2Rpci9teWxpYi5zbwotIyAgIC9teS9wYXRoL215bGliLnNvCi0j ICAgL290aGVyL3BhdGgvbXlsaWIuc28KLSMgICAvbGliL2Rpci9teWxpYi5zbyAgICAgICAgICAg ICAgKHJldHVybmVkIGFzIGxhc3QgcmVzb3J0KQotc3ViIEZpbmRMaWJyYXJ5IHsKLSAgbXkgJGZp bGUgPSBzaGlmdDsKLSAgbXkgJHN1ZmZpeCA9ICRmaWxlOwotCi0gICMgU2VhcmNoIGZvciB0aGUg bGlicmFyeSBhcyBkZXNjcmliZWQgYWJvdmUKLSAgZG8gewotICAgIGZvcmVhY2ggbXkgJHByZWZp eCAoQHByZWZpeF9saXN0KSB7Ci0gICAgICBteSAkZnVsbHBhdGggPSAkcHJlZml4IC4gJHN1ZmZp eDsKLSAgICAgIGlmICgtZSAkZnVsbHBhdGgpIHsKLSAgICAgICAgcmV0dXJuICRmdWxscGF0aDsK LSAgICAgIH0KLSAgICB9Ci0gIH0gd2hpbGUgKCRzdWZmaXggPX4gc3xeL1teL10rL3wvfCk7Ci0g IHJldHVybiAkZmlsZTsKLX0KLQotIyBSZXR1cm4gcGF0aCB0byBsaWJyYXJ5IHdpdGggZGVidWdn aW5nIHN5bWJvbHMuCi0jIEZvciBsaWJjIGxpYnJhcmllcywgdGhlIGNvcHkgaW4gL3Vzci9saWIv ZGVidWcgY29udGFpbnMgZGVidWdnaW5nIHN5bWJvbHMKLXN1YiBEZWJ1Z2dpbmdMaWJyYXJ5IHsK LSAgbXkgJGZpbGUgPSBzaGlmdDsKLSAgICAgIAotICBpZiAoJGZpbGUgIX4gbXxeL3wpIHsKLSAg ICByZXR1cm4gdW5kZWY7Ci0gIH0KLSAgICAgIAotICAjIEZpbmQgZGVidWcgc3ltYm9sIGZpbGUg aWYgaXQncyBuYW1lZCBhZnRlciB0aGUgbGlicmFyeSdzIG5hbWUuCi0gIAotICBpZiAoLWYgIi91 c3IvbGliL2RlYnVnJGZpbGUiKSB7ICAgICAgICAgICAgICAgICAKLSAgICBpZigkbWFpbjo6b3B0 X2RlYnVnKSB7IHByaW50IFNUREVSUiAiZm91bmQgZGVidWcgaW5mbyBmb3IgJGZpbGUgaW4gL3Vz ci9saWIvZGVidWckZmlsZVxuIjsgfQotICAgIHJldHVybiAiL3Vzci9saWIvZGVidWckZmlsZSI7 Ci0gIH0gZWxzaWYgKC1mICIvdXNyL2xpYi9kZWJ1ZyRmaWxlLmRlYnVnIikgewotICAgIGlmKCRt YWluOjpvcHRfZGVidWcpIHsgcHJpbnQgU1RERVJSICJmb3VuZCBkZWJ1ZyBpbmZvIGZvciAkZmls ZSBpbiAvdXNyL2xpYi9kZWJ1ZyRmaWxlLmRlYnVnXG4iOyB9Ci0gICAgcmV0dXJuICIvdXNyL2xp Yi9kZWJ1ZyRmaWxlLmRlYnVnIjsgCi0gIH0KLQotICBpZighJG1haW46Om9wdF9kZWJ1Z19zeW1z X2J5X2lkKSB7Ci0gICAgaWYoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERFUlIgIm5vIGRl YnVnIHN5bWJvbHMgZm91bmQgZm9yICRmaWxlXG4iIH07Ci0gICAgcmV0dXJuIHVuZGVmOwotICB9 Ci0KLSAgIyBGaW5kIGRlYnVnIGZpbGUgaWYgaXQncyBuYW1lZCBhZnRlciB0aGUgbGlicmFyeSdz IGJ1aWxkIElELgotICAKLSAgbXkgJHJlYWRlbGYgPSAnJzsKLSAgaWYgKCEkbWFpbjo6Z2F2ZV91 cF9vbl9lbGZ1dGlscykgewotICAgICRyZWFkZWxmID0gcXgvZXUtcmVhZGVsZiAtbiAke2ZpbGV9 LzsKLSAgICBpZiAoJD8pIHsKLSAgICAgIHByaW50IFNUREVSUiAiQ2Fubm90IHJ1biBldS1yZWFk ZWxmLiBUbyB1c2UgLS1kZWJ1Zy1zeW1zLWJ5LWlkIHlvdSBtdXN0IGJlIG9uIExpbnV4LCB3aXRo IGVsZnV0aWxzIGluc3RhbGxlZC5cbiI7Ci0gICAgICAkbWFpbjo6Z2F2ZV91cF9vbl9lbGZ1dGls cyA9IDE7Ci0gICAgICByZXR1cm4gdW5kZWY7Ci0gICAgfQotICAgIG15ICRidWlsZElEID0gJDEg aWYgJHJlYWRlbGYgPX4gL0J1aWxkIElEOiAoW0EtRmEtZjAtOV0rKS9zOwotICAgIGlmIChkZWZp bmVkICRidWlsZElEICYmIGxlbmd0aCAkYnVpbGRJRCA+IDApIHsKLSAgICAgIG15ICRzeW1ib2xG aWxlID0gJy91c3IvbGliL2RlYnVnLy5idWlsZC1pZC8nIC4gc3Vic3RyKCRidWlsZElELCAwLCAy KSAuICcvJyAuIHN1YnN0cigkYnVpbGRJRCwgMikgLiAnLmRlYnVnJzsKLSAgICAgIGlmICgtZSAk c3ltYm9sRmlsZSkgewotICAgICAgICBpZigkbWFpbjo6b3B0X2RlYnVnKSB7IHByaW50IFNUREVS UiAiZm91bmQgZGVidWcgc3ltYm9sIGZpbGUgJHN5bWJvbEZpbGUgZm9yICRmaWxlXG4iIH07Ci0g ICAgICAgIHJldHVybiAkc3ltYm9sRmlsZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmKCRt YWluOjpvcHRfZGVidWcpIHsgcHJpbnQgU1RERVJSICJubyBkZWJ1ZyBzeW1ib2wgZmlsZSBmb3Vu ZCBmb3IgJGZpbGUsIGJ1aWxkIElEOiAkYnVpbGRJRFxuIiB9OwotICAgICAgICByZXR1cm4gdW5k ZWY7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmlu dCBTVERFUlIgIm5vIGRlYnVnIHN5bWJvbHMgZm91bmQgZm9yICRmaWxlLCBidWlsZCBJRCB1bmtu b3duXG4iIH07Ci0gIHJldHVybiB1bmRlZjsKLX0KLQotCi0jIFBhcnNlIHRleHQgc2VjdGlvbiBo ZWFkZXIgb2YgYSBsaWJyYXJ5IHVzaW5nIG9iamR1bXAKLXN1YiBQYXJzZVRleHRTZWN0aW9uSGVh ZGVyRnJvbU9iamR1bXAgewotICBteSAkbGliID0gc2hpZnQ7Ci0KLSAgbXkgJHNpemUgPSB1bmRl ZjsKLSAgbXkgJHZtYTsKLSAgbXkgJGZpbGVfb2Zmc2V0OwotICAjIEdldCBvYmpkdW1wIG91dHB1 dCBmcm9tIHRoZSBsaWJyYXJ5IGZpbGUgdG8gZmlndXJlIG91dCBob3cgdG8KLSAgIyBtYXAgYmV0 d2VlbiBtYXBwZWQgYWRkcmVzc2VzIGFuZCBhZGRyZXNzZXMgaW4gdGhlIGxpYnJhcnkuCi0gIG15 ICRjbWQgPSBTaGVsbEVzY2FwZSgkb2JqX3Rvb2xfbWFweyJvYmpkdW1wIn0sICItaCIsICRsaWIp OwotICBvcGVuKE9CSkRVTVAsICIkY21kIHwiKSB8fCBlcnJvcigiJGNtZDogJCFcbiIpOwotICB3 aGlsZSAoPE9CSkRVTVA+KSB7Ci0gICAgcy9cci8vZzsgICAgICAgICAjIHR1cm4gd2luZG93cy1s b29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCi0gICAgIyBJZHggTmFtZSAgICAg ICAgICBTaXplICAgICAgVk1BICAgICAgIExNQSAgICAgICBGaWxlIG9mZiAgQWxnbgotICAgICMg IDEwIC50ZXh0ICAgICAgICAgMDAxMDRiMmMgIDQyMDE1NmYwICA0MjAxNTZmMCAgMDAwMTU2ZjAg IDIqKjQKLSAgICAjIEZvciA2NC1iaXQgb2JqZWN0cywgVk1BIGFuZCBMTUEgd2lsbCBiZSAxNiBo ZXggZGlnaXRzLCBzaXplIGFuZCBmaWxlCi0gICAgIyBvZmZzZXQgbWF5IHN0aWxsIGJlIDguICBC dXQgQWRkcmVzc1N1YiBiZWxvdyB3aWxsIHN0aWxsIGhhbmRsZSB0aGF0LgotICAgIG15IEB4ID0g c3BsaXQ7Ci0gICAgaWYgKCgkI3ggPj0gNikgJiYgKCR4WzFdIGVxICcudGV4dCcpKSB7Ci0gICAg ICAkc2l6ZSA9ICR4WzJdOwotICAgICAgJHZtYSA9ICR4WzNdOwotICAgICAgJGZpbGVfb2Zmc2V0 ID0gJHhbNV07Ci0gICAgICBsYXN0OwotICAgIH0KLSAgfQotICBjbG9zZShPQkpEVU1QKTsKLQot ICBpZiAoIWRlZmluZWQoJHNpemUpKSB7Ci0gICAgcmV0dXJuIHVuZGVmOwotICB9Ci0KLSAgbXkg JHIgPSB7fTsKLSAgJHItPntzaXplfSA9ICRzaXplOwotICAkci0+e3ZtYX0gPSAkdm1hOwotICAk ci0+e2ZpbGVfb2Zmc2V0fSA9ICRmaWxlX29mZnNldDsKLQotICByZXR1cm4gJHI7Ci19Ci0KLSMg UGFyc2UgdGV4dCBzZWN0aW9uIGhlYWRlciBvZiBhIGxpYnJhcnkgdXNpbmcgb3Rvb2wgKG9uIE9T IFgpCi1zdWIgUGFyc2VUZXh0U2VjdGlvbkhlYWRlckZyb21PdG9vbCB7Ci0gIG15ICRsaWIgPSBz aGlmdDsKLQotICBteSAkc2l6ZSA9IHVuZGVmOwotICBteSAkdm1hID0gdW5kZWY7Ci0gIG15ICRm aWxlX29mZnNldCA9IHVuZGVmOwotICAjIEdldCBvdG9vbCBvdXRwdXQgZnJvbSB0aGUgbGlicmFy eSBmaWxlIHRvIGZpZ3VyZSBvdXQgaG93IHRvCi0gICMgbWFwIGJldHdlZW4gbWFwcGVkIGFkZHJl c3NlcyBhbmQgYWRkcmVzc2VzIGluIHRoZSBsaWJyYXJ5LgotICBteSAkY29tbWFuZCA9IFNoZWxs RXNjYXBlKCRvYmpfdG9vbF9tYXB7Im90b29sIn0sICItbCIsICRsaWIpOwotICBvcGVuKE9UT09M LCAiJGNvbW1hbmQgfCIpIHx8IGVycm9yKCIkY29tbWFuZDogJCFcbiIpOwotICBteSAkY21kID0g IiI7Ci0gIG15ICRzZWN0bmFtZSA9ICIiOwotICBteSAkc2VnbmFtZSA9ICIiOwotICBmb3JlYWNo IG15ICRsaW5lICg8T1RPT0w+KSB7Ci0gICAgJGxpbmUgPX4gcy9cci8vZzsgICAgICAjIHR1cm4g d2luZG93cy1sb29raW5nIGxpbmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCi0gICAgIyBMb2Fk IGNvbW1hbmQgPCM+Ci0gICAgIyAgICAgICBjbWQgTENfU0VHTUVOVAotICAgICMgWy4uLl0KLSAg ICAjIFNlY3Rpb24KLSAgICAjICAgc2VjdG5hbWUgX190ZXh0Ci0gICAgIyAgICBzZWduYW1lIF9f VEVYVAotICAgICMgICAgICAgYWRkciAweDAwMDAwOWY4Ci0gICAgIyAgICAgICBzaXplIDB4MDAw MThiOWUKLSAgICAjICAgICBvZmZzZXQgMjU1MgotICAgICMgICAgICBhbGlnbiAyXjIgKDQpCi0g ICAgIyBXZSB3aWxsIG5lZWQgdG8gc3RyaXAgb2ZmIHRoZSBsZWFkaW5nIDB4IGZyb20gdGhlIGhl eCBhZGRyZXNzZXMsCi0gICAgIyBhbmQgY29udmVydCB0aGUgb2Zmc2V0IGludG8gaGV4LgotICAg IGlmICgkbGluZSA9fiAvTG9hZCBjb21tYW5kLykgewotICAgICAgJGNtZCA9ICIiOwotICAgICAg JHNlY3RuYW1lID0gIiI7Ci0gICAgICAkc2VnbmFtZSA9ICIiOwotICAgIH0gZWxzaWYgKCRsaW5l ID1+IC9TZWN0aW9uLykgewotICAgICAgJHNlY3RuYW1lID0gIiI7Ci0gICAgICAkc2VnbmFtZSA9 ICIiOwotICAgIH0gZWxzaWYgKCRsaW5lID1+IC9jbWQgKFx3KykvKSB7Ci0gICAgICAkY21kID0g JDE7Ci0gICAgfSBlbHNpZiAoJGxpbmUgPX4gL3NlY3RuYW1lIChcdyspLykgewotICAgICAgJHNl Y3RuYW1lID0gJDE7Ci0gICAgfSBlbHNpZiAoJGxpbmUgPX4gL3NlZ25hbWUgKFx3KykvKSB7Ci0g ICAgICAkc2VnbmFtZSA9ICQxOwotICAgIH0gZWxzaWYgKCEoKCRjbWQgZXEgIkxDX1NFR01FTlQi IHx8ICRjbWQgZXEgIkxDX1NFR01FTlRfNjQiKSAmJgotICAgICAgICAgICAgICAgJHNlY3RuYW1l IGVxICJfX3RleHQiICYmCi0gICAgICAgICAgICAgICAkc2VnbmFtZSBlcSAiX19URVhUIikpIHsK LSAgICAgIG5leHQ7Ci0gICAgfSBlbHNpZiAoJGxpbmUgPX4gL1xiYWRkciAweChbMC05YS1mQS1G XSspLykgewotICAgICAgJHZtYSA9ICQxOwotICAgIH0gZWxzaWYgKCRsaW5lID1+IC9cYnNpemUg MHgoWzAtOWEtZkEtRl0rKS8pIHsKLSAgICAgICRzaXplID0gJDE7Ci0gICAgfSBlbHNpZiAoJGxp bmUgPX4gL1xib2Zmc2V0IChbMC05XSspLykgewotICAgICAgJGZpbGVfb2Zmc2V0ID0gc3ByaW50 ZigiJTAxNngiLCAkMSk7Ci0gICAgfQotICAgIGlmIChkZWZpbmVkKCR2bWEpICYmIGRlZmluZWQo JHNpemUpICYmIGRlZmluZWQoJGZpbGVfb2Zmc2V0KSkgewotICAgICAgbGFzdDsKLSAgICB9Ci0g IH0KLSAgY2xvc2UoT1RPT0wpOwotCi0gIGlmICghZGVmaW5lZCgkdm1hKSB8fCAhZGVmaW5lZCgk c2l6ZSkgfHwgIWRlZmluZWQoJGZpbGVfb2Zmc2V0KSkgewotICAgICByZXR1cm4gdW5kZWY7Ci0g IH0KLQotICBteSAkciA9IHt9OwotICAkci0+e3NpemV9ID0gJHNpemU7Ci0gICRyLT57dm1hfSA9 ICR2bWE7Ci0gICRyLT57ZmlsZV9vZmZzZXR9ID0gJGZpbGVfb2Zmc2V0OwotCi0gIHJldHVybiAk cjsKLX0KLQotc3ViIFBhcnNlVGV4dFNlY3Rpb25IZWFkZXIgewotICAjIG9ial90b29sX21hcCgi b3Rvb2wiKSBpcyBvbmx5IGRlZmluZWQgaWYgd2UncmUgaW4gYSBNYWNoLU8gZW52aXJvbm1lbnQK LSAgaWYgKGRlZmluZWQoJG9ial90b29sX21hcHsib3Rvb2wifSkpIHsKLSAgICBteSAkciA9IFBh cnNlVGV4dFNlY3Rpb25IZWFkZXJGcm9tT3Rvb2woQF8pOwotICAgIGlmIChkZWZpbmVkKCRyKSl7 Ci0gICAgICByZXR1cm4gJHI7Ci0gICAgfQotICB9Ci0gICMgSWYgb3Rvb2wgZG9lc24ndCB3b3Jr LCBvciB3ZSBkb24ndCBoYXZlIGl0LCBmYWxsIGJhY2sgdG8gb2JqZHVtcAotICByZXR1cm4gUGFy c2VUZXh0U2VjdGlvbkhlYWRlckZyb21PYmpkdW1wKEBfKTsKLX0KLQotIyBTcGxpdCAvcHJvYy9w aWQvbWFwcyBkdW1wIGludG8gYSBsaXN0IG9mIGxpYnJhcmllcwotc3ViIFBhcnNlTGlicmFyaWVz IHsKLSAgcmV0dXJuIGlmICRtYWluOjp1c2Vfc3ltYm9sX3BhZ2U7ICAjIFdlIGRvbid0IG5lZWQg bGlicmFyaWVzIGluZm8uCi0gIG15ICRwcm9nID0gQ3dkOjphYnNfcGF0aChzaGlmdCk7Ci0gIG15 ICRtYXAgPSBzaGlmdDsKLSAgbXkgJHBjcyA9IHNoaWZ0OwotCi0gIG15ICRyZXN1bHQgPSBbXTsK LSAgbXkgJGggPSAiW2EtZjAtOV0rIjsKLSAgbXkgJHplcm9fb2Zmc2V0ID0gSGV4RXh0ZW5kKCIw Iik7Ci0KLSAgbXkgJGJ1aWxkdmFyID0gIiI7Ci0gIGZvcmVhY2ggbXkgJGwgKHNwbGl0KCJcbiIs ICRtYXApKSB7Ci0gICAgaWYgKCRsID1+IG0vXlxzKmJ1aWxkPSguKikkLykgewotICAgICAgJGJ1 aWxkdmFyID0gJDE7Ci0gICAgfQotCi0gICAgbXkgJHN0YXJ0OwotICAgIG15ICRmaW5pc2g7Ci0g ICAgbXkgJG9mZnNldDsKLSAgICBteSAkbGliOwotICAgIGlmICgkbCA9fiAvXigkaCktKCRoKVxz Ky4ueC5ccysoJGgpXHMrXFMrOlxTK1xzK1xkK1xzKyhcUytcLihzb3xkbGx8ZHlsaWJ8YnVuZGxl KSgoXC5cZCspK1x3KihcLlxkKyl7MCwzfSk/KSQvaSkgewotICAgICAgIyBGdWxsIGxpbmUgZnJv bSAvcHJvYy9zZWxmL21hcHMuICBFeGFtcGxlOgotICAgICAgIyAgIDQwMDAwMDAwLTQwMDE1MDAw IHIteHAgMDAwMDAwMDAgMDM6MDEgMTI4NDUwNzEgICAvbGliL2xkLTIuMy4yLnNvCi0gICAgICAk c3RhcnQgPSBIZXhFeHRlbmQoJDEpOwotICAgICAgJGZpbmlzaCA9IEhleEV4dGVuZCgkMik7Ci0g ICAgICAkb2Zmc2V0ID0gSGV4RXh0ZW5kKCQzKTsKLSAgICAgICRsaWIgPSAkNDsKLSAgICAgICRs aWIgPX4gc3xcXHwvfGc7ICAgICAjIHR1cm4gd2luZG93cy1zdHlsZSBwYXRocyBpbnRvIHVuaXgt c3R5bGUgcGF0aHMKLSAgICB9IGVsc2lmICgkbCA9fiAvXlxzKigkaCktKCRoKTpccyooXFMrXC5z byhcLlxkKykqKS8pIHsKLSAgICAgICMgQ29va2VkIGxpbmUgZnJvbSBEdW1wQWRkcmVzc01hcC4g IEV4YW1wbGU6Ci0gICAgICAjICAgNDAwMDAwMDAtNDAwMTUwMDA6IC9saWIvbGQtMi4zLjIuc28K LSAgICAgICRzdGFydCA9IEhleEV4dGVuZCgkMSk7Ci0gICAgICAkZmluaXNoID0gSGV4RXh0ZW5k KCQyKTsKLSAgICAgICRvZmZzZXQgPSAkemVyb19vZmZzZXQ7Ci0gICAgICAkbGliID0gJDM7Ci0g ICAgfSBlbHNpZiAoKCRsID1+IC9eKCRoKS0oJGgpXHMrLi54LlxzKygkaClccytcUys6XFMrXHMr XGQrXHMrKFxTKykkL2kpICYmICgkNCBlcSAkcHJvZykpIHsKLSAgICAgICMgUElFcyBhbmQgYWRk cmVzcyBzcGFjZSByYW5kb21pemF0aW9uIGRvIG5vdCBwbGF5IHdlbGwgd2l0aCBvdXIKLSAgICAg ICMgZGVmYXVsdCBhc3N1bXB0aW9uIHRoYXQgbWFpbiBleGVjdXRhYmxlIGlzIGF0IGxvd2VzdAot ICAgICAgIyBhZGRyZXNzZXMuIFNvIHdlJ3JlIGRldGVjdGluZyBtYWluIGV4ZWN1dGFibGUgaW4K LSAgICAgICMgL3Byb2Mvc2VsZi9tYXBzIGFzIHdlbGwuCi0gICAgICAkc3RhcnQgPSBIZXhFeHRl bmQoJDEpOwotICAgICAgJGZpbmlzaCA9IEhleEV4dGVuZCgkMik7Ci0gICAgICAkb2Zmc2V0ID0g SGV4RXh0ZW5kKCQzKTsKLSAgICAgICRsaWIgPSAkNDsKLSAgICAgICRsaWIgPX4gc3xcXHwvfGc7 ICAgICAjIHR1cm4gd2luZG93cy1zdHlsZSBwYXRocyBpbnRvIHVuaXgtc3R5bGUgcGF0aHMKLSAg ICB9Ci0gICAgIyBGcmVlQlNEIDEwLjAgdmlydHVhbCBtZW1vcnkgbWFwIC9wcm9jL2N1cnByb2Mv bWFwIGFzIGRlZmluZWQgaW4KLSAgICAjIGZ1bmN0aW9uIHByb2Nmc19kb3Byb2NtYXAgKHN5cy9m cy9wcm9jZnMvcHJvY2ZzX21hcC5jKQotICAgICMKLSAgICAjIEV4YW1wbGU6Ci0gICAgIyAweDgw MDYwMDAwMCAweDgwMDYxYTAwMCAyNiAwIDB4ZmZmZmY4MDAwMzVhMDAwMCByLXggNzUgMzMgMHgx MDA0IENPVyBOQyB2bm9kZSAvbGliZXhlYy9sZC1lbGYucwotICAgICMgby4xIE5DSCAtMQotICAg IGVsc2lmICgkbCA9fiAvXigweCRoKVxzKDB4JGgpXHNcZCtcc1xkK1xzMHgkaFxzci14XHNcZCtc c1xkK1xzMHhcZCtccyhDT1d8TkNPKVxzKE5DfE5OQylcc3Zub2RlXHMoXFMrXC5zbyhcLlxkKykq KS8pIHsKLSAgICAgICRzdGFydCA9IEhleEV4dGVuZCgkMSk7Ci0gICAgICAkZmluaXNoID0gSGV4 RXh0ZW5kKCQyKTsKLSAgICAgICRvZmZzZXQgPSAkemVyb19vZmZzZXQ7Ci0gICAgICAkbGliID0g RmluZExpYnJhcnkoJDUpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgIG5leHQ7Ci0gICAgfQotCi0g ICAgIyBFeHBhbmQgIiRidWlsZCIgdmFyaWFibGUgaWYgYXZhaWxhYmxlCi0gICAgJGxpYiA9fiBz L1wkYnVpbGRcYi8kYnVpbGR2YXIvZzsKLQotICAgICRsaWIgPSBGaW5kTGlicmFyeSgkbGliKTsK LQotICAgICMgQ2hlY2sgZm9yIHByZS1yZWxvY2F0ZWQgbGlicmFyaWVzLCB3aGljaCB1c2UgcHJl LXJlbG9jYXRlZCBzeW1ib2wgdGFibGVzCi0gICAgIyBhbmQgdGh1cyByZXF1aXJlIGFkanVzdGlu ZyB0aGUgb2Zmc2V0IHRoYXQgd2UnbGwgdXNlIHRvIHRyYW5zbGF0ZQotICAgICMgVk0gYWRkcmVz c2VzIGludG8gc3ltYm9sIHRhYmxlIGFkZHJlc3Nlcy4KLSAgICAjIE9ubHkgZG8gdGhpcyBpZiB3 ZSdyZSBub3QgZ29pbmcgdG8gZmV0Y2ggdGhlIHN5bWJvbCB0YWJsZSBmcm9tIGEKLSAgICAjIGRl YnVnZ2luZyBjb3B5IG9mIHRoZSBsaWJyYXJ5LgotICAgIGlmICghRGVidWdnaW5nTGlicmFyeSgk bGliKSkgewotICAgICAgbXkgJHRleHQgPSBQYXJzZVRleHRTZWN0aW9uSGVhZGVyKCRsaWIpOwot ICAgICAgaWYgKGRlZmluZWQoJHRleHQpKSB7Ci0gICAgICAgICBteSAkdm1hX29mZnNldCA9IEFk ZHJlc3NTdWIoJHRleHQtPnt2bWF9LCAkdGV4dC0+e2ZpbGVfb2Zmc2V0fSk7Ci0gICAgICAgICAk b2Zmc2V0ID0gQWRkcmVzc0FkZCgkb2Zmc2V0LCAkdm1hX29mZnNldCk7Ci0gICAgICB9Ci0gICAg fQotCi0gICAgaWYoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludGYgU1RERVJSICIkc3RhcnQ6JGZp bmlzaCAoJG9mZnNldCkgJGxpYlxuIjsgfQotICAgIHB1c2goQHskcmVzdWx0fSwgWyRsaWIsICRz dGFydCwgJGZpbmlzaCwgJG9mZnNldF0pOwotICB9Ci0KLSAgIyBBcHBlbmQgc3BlY2lhbCBlbnRy eSBmb3IgYWRkaXRpb25hbCBsaWJyYXJ5IChub3QgcmVsb2NhdGVkKQotICBpZiAoJG1haW46Om9w dF9saWIgbmUgIiIpIHsKLSAgICBteSAkdGV4dCA9IFBhcnNlVGV4dFNlY3Rpb25IZWFkZXIoJG1h aW46Om9wdF9saWIpOwotICAgIGlmIChkZWZpbmVkKCR0ZXh0KSkgewotICAgICAgIG15ICRzdGFy dCA9ICR0ZXh0LT57dm1hfTsKLSAgICAgICBteSAkZmluaXNoID0gQWRkcmVzc0FkZCgkc3RhcnQs ICR0ZXh0LT57c2l6ZX0pOwotCi0gICAgICAgcHVzaChAeyRyZXN1bHR9LCBbJG1haW46Om9wdF9s aWIsICRzdGFydCwgJGZpbmlzaCwgJHN0YXJ0XSk7Ci0gICAgfQotICB9Ci0KLSAgIyBBcHBlbmQg c3BlY2lhbCBlbnRyeSBmb3IgdGhlIG1haW4gcHJvZ3JhbS4gIFRoaXMgY292ZXJzCi0gICMgMC4u bWF4X3BjX3ZhbHVlX3NlZW4sIHNvIHRoYXQgd2UgYXNzdW1lIHBjIHZhbHVlcyBub3QgZm91bmQg aW4gb25lCi0gICMgb2YgdGhlIGxpYnJhcnkgcmFuZ2VzIHdpbGwgYmUgdHJlYXRlZCBhcyBjb21p bmcgZnJvbSB0aGUgbWFpbgotICAjIHByb2dyYW0gYmluYXJ5LgotICBteSAkbWluX3BjID0gSGV4 RXh0ZW5kKCIwIik7Ci0gIG15ICRtYXhfcGMgPSAkbWluX3BjOyAgICAgICAgICAjIGZpbmQgdGhl IG1heGltYWwgUEMgdmFsdWUgaW4gYW55IHNhbXBsZQotICBmb3JlYWNoIG15ICRwYyAoa2V5cygl eyRwY3N9KSkgewotICAgIGlmIChIZXhFeHRlbmQoJHBjKSBndCAkbWF4X3BjKSB7ICRtYXhfcGMg PSBIZXhFeHRlbmQoJHBjKTsgfQotICB9Ci0gIHB1c2goQHskcmVzdWx0fSwgWyRwcm9nLCAkbWlu X3BjLCAkbWF4X3BjLCAkemVyb19vZmZzZXRdKTsKLQotICByZXR1cm4gJHJlc3VsdDsKLX0KLQot IyBBZGQgdHdvIGhleCBhZGRyZXNzZXMgb2YgbGVuZ3RoICRhZGRyZXNzX2xlbmd0aC4KLSMgUnVu IGplcHJvZiAtLXRlc3QgZm9yIHVuaXQgdGVzdCBpZiB0aGlzIGlzIGNoYW5nZWQuCi1zdWIgQWRk cmVzc0FkZCB7Ci0gIG15ICRhZGRyMSA9IHNoaWZ0OwotICBteSAkYWRkcjIgPSBzaGlmdDsKLSAg bXkgJHN1bTsKLQotICBpZiAoJGFkZHJlc3NfbGVuZ3RoID09IDgpIHsKLSAgICAjIFBlcmwgZG9l c24ndCBjb3BlIHdpdGggd3JhcGFyb3VuZCBhcml0aG1ldGljLCBzbyBkbyBpdCBleHBsaWNpdGx5 OgotICAgICRzdW0gPSAoaGV4KCRhZGRyMSkraGV4KCRhZGRyMikpICUgKDB4MTAwMDAwMDAgKiAx Nik7Ci0gICAgcmV0dXJuIHNwcmludGYoIiUwOHgiLCAkc3VtKTsKLQotICB9IGVsc2UgewotICAg ICMgRG8gdGhlIGFkZGl0aW9uIGluIDctbmliYmxlIGNodW5rcyB0byB0cml2aWFsaXplIGNhcnJ5 IGhhbmRsaW5nLgotCi0gICAgaWYgKCRtYWluOjpvcHRfZGVidWcgYW5kICRtYWluOjpvcHRfdGVz dCkgewotICAgICAgcHJpbnQgU1RERVJSICJBZGRyZXNzQWRkICRhZGRyMSArICRhZGRyMiA9ICI7 Ci0gICAgfQotCi0gICAgbXkgJGExID0gc3Vic3RyKCRhZGRyMSwtNyk7Ci0gICAgJGFkZHIxID0g c3Vic3RyKCRhZGRyMSwwLC03KTsKLSAgICBteSAkYTIgPSBzdWJzdHIoJGFkZHIyLC03KTsKLSAg ICAkYWRkcjIgPSBzdWJzdHIoJGFkZHIyLDAsLTcpOwotICAgICRzdW0gPSBoZXgoJGExKSArIGhl eCgkYTIpOwotICAgIG15ICRjID0gMDsKLSAgICBpZiAoJHN1bSA+IDB4ZmZmZmZmZikgewotICAg ICAgJGMgPSAxOwotICAgICAgJHN1bSAtPSAweDEwMDAwMDAwOwotICAgIH0KLSAgICBteSAkciA9 IHNwcmludGYoIiUwN3giLCAkc3VtKTsKLQotICAgICRhMSA9IHN1YnN0cigkYWRkcjEsLTcpOwot ICAgICRhZGRyMSA9IHN1YnN0cigkYWRkcjEsMCwtNyk7Ci0gICAgJGEyID0gc3Vic3RyKCRhZGRy MiwtNyk7Ci0gICAgJGFkZHIyID0gc3Vic3RyKCRhZGRyMiwwLC03KTsKLSAgICAkc3VtID0gaGV4 KCRhMSkgKyBoZXgoJGEyKSArICRjOwotICAgICRjID0gMDsKLSAgICBpZiAoJHN1bSA+IDB4ZmZm ZmZmZikgewotICAgICAgJGMgPSAxOwotICAgICAgJHN1bSAtPSAweDEwMDAwMDAwOwotICAgIH0K LSAgICAkciA9IHNwcmludGYoIiUwN3giLCAkc3VtKSAuICRyOwotCi0gICAgJHN1bSA9IGhleCgk YWRkcjEpICsgaGV4KCRhZGRyMikgKyAkYzsKLSAgICBpZiAoJHN1bSA+IDB4ZmYpIHsgJHN1bSAt PSAweDEwMDsgfQotICAgICRyID0gc3ByaW50ZigiJTAyeCIsICRzdW0pIC4gJHI7Ci0KLSAgICBp ZiAoJG1haW46Om9wdF9kZWJ1ZyBhbmQgJG1haW46Om9wdF90ZXN0KSB7IHByaW50IFNUREVSUiAi JHJcbiI7IH0KLQotICAgIHJldHVybiAkcjsKLSAgfQotfQotCi0KLSMgU3VidHJhY3QgdHdvIGhl eCBhZGRyZXNzZXMgb2YgbGVuZ3RoICRhZGRyZXNzX2xlbmd0aC4KLSMgUnVuIGplcHJvZiAtLXRl c3QgZm9yIHVuaXQgdGVzdCBpZiB0aGlzIGlzIGNoYW5nZWQuCi1zdWIgQWRkcmVzc1N1YiB7Ci0g IG15ICRhZGRyMSA9IHNoaWZ0OwotICBteSAkYWRkcjIgPSBzaGlmdDsKLSAgbXkgJGRpZmY7Ci0K LSAgaWYgKCRhZGRyZXNzX2xlbmd0aCA9PSA4KSB7Ci0gICAgIyBQZXJsIGRvZXNuJ3QgY29wZSB3 aXRoIHdyYXBhcm91bmQgYXJpdGhtZXRpYywgc28gZG8gaXQgZXhwbGljaXRseToKLSAgICAkZGlm ZiA9IChoZXgoJGFkZHIxKS1oZXgoJGFkZHIyKSkgJSAoMHgxMDAwMDAwMCAqIDE2KTsKLSAgICBy ZXR1cm4gc3ByaW50ZigiJTA4eCIsICRkaWZmKTsKLQotICB9IGVsc2UgewotICAgICMgRG8gdGhl IGFkZGl0aW9uIGluIDctbmliYmxlIGNodW5rcyB0byB0cml2aWFsaXplIGJvcnJvdyBoYW5kbGlu Zy4KLSAgICAjIGlmICgkbWFpbjo6b3B0X2RlYnVnKSB7IHByaW50IFNUREVSUiAiQWRkcmVzc1N1 YiAkYWRkcjEgLSAkYWRkcjIgPSAiOyB9Ci0KLSAgICBteSAkYTEgPSBoZXgoc3Vic3RyKCRhZGRy MSwtNykpOwotICAgICRhZGRyMSA9IHN1YnN0cigkYWRkcjEsMCwtNyk7Ci0gICAgbXkgJGEyID0g aGV4KHN1YnN0cigkYWRkcjIsLTcpKTsKLSAgICAkYWRkcjIgPSBzdWJzdHIoJGFkZHIyLDAsLTcp OwotICAgIG15ICRiID0gMDsKLSAgICBpZiAoJGEyID4gJGExKSB7Ci0gICAgICAkYiA9IDE7Ci0g ICAgICAkYTEgKz0gMHgxMDAwMDAwMDsKLSAgICB9Ci0gICAgJGRpZmYgPSAkYTEgLSAkYTI7Ci0g ICAgbXkgJHIgPSBzcHJpbnRmKCIlMDd4IiwgJGRpZmYpOwotCi0gICAgJGExID0gaGV4KHN1YnN0 cigkYWRkcjEsLTcpKTsKLSAgICAkYWRkcjEgPSBzdWJzdHIoJGFkZHIxLDAsLTcpOwotICAgICRh MiA9IGhleChzdWJzdHIoJGFkZHIyLC03KSkgKyAkYjsKLSAgICAkYWRkcjIgPSBzdWJzdHIoJGFk ZHIyLDAsLTcpOwotICAgICRiID0gMDsKLSAgICBpZiAoJGEyID4gJGExKSB7Ci0gICAgICAkYiA9 IDE7Ci0gICAgICAkYTEgKz0gMHgxMDAwMDAwMDsKLSAgICB9Ci0gICAgJGRpZmYgPSAkYTEgLSAk YTI7Ci0gICAgJHIgPSBzcHJpbnRmKCIlMDd4IiwgJGRpZmYpIC4gJHI7Ci0KLSAgICAkYTEgPSBo ZXgoJGFkZHIxKTsKLSAgICAkYTIgPSBoZXgoJGFkZHIyKSArICRiOwotICAgIGlmICgkYTIgPiAk YTEpIHsgJGExICs9IDB4MTAwOyB9Ci0gICAgJGRpZmYgPSAkYTEgLSAkYTI7Ci0gICAgJHIgPSBz cHJpbnRmKCIlMDJ4IiwgJGRpZmYpIC4gJHI7Ci0KLSAgICAjIGlmICgkbWFpbjo6b3B0X2RlYnVn KSB7IHByaW50IFNUREVSUiAiJHJcbiI7IH0KLQotICAgIHJldHVybiAkcjsKLSAgfQotfQotCi0j IEluY3JlbWVudCBhIGhleCBhZGRyZXNzZXMgb2YgbGVuZ3RoICRhZGRyZXNzX2xlbmd0aC4KLSMg UnVuIGplcHJvZiAtLXRlc3QgZm9yIHVuaXQgdGVzdCBpZiB0aGlzIGlzIGNoYW5nZWQuCi1zdWIg QWRkcmVzc0luYyB7Ci0gIG15ICRhZGRyID0gc2hpZnQ7Ci0gIG15ICRzdW07Ci0KLSAgaWYgKCRh ZGRyZXNzX2xlbmd0aCA9PSA4KSB7Ci0gICAgIyBQZXJsIGRvZXNuJ3QgY29wZSB3aXRoIHdyYXBh cm91bmQgYXJpdGhtZXRpYywgc28gZG8gaXQgZXhwbGljaXRseToKLSAgICAkc3VtID0gKGhleCgk YWRkcikrMSkgJSAoMHgxMDAwMDAwMCAqIDE2KTsKLSAgICByZXR1cm4gc3ByaW50ZigiJTA4eCIs ICRzdW0pOwotCi0gIH0gZWxzZSB7Ci0gICAgIyBEbyB0aGUgYWRkaXRpb24gaW4gNy1uaWJibGUg Y2h1bmtzIHRvIHRyaXZpYWxpemUgY2FycnkgaGFuZGxpbmcuCi0gICAgIyBXZSBhcmUgYWx3YXlz IGRvaW5nIHRoaXMgdG8gc3RlcCB0aHJvdWdoIHRoZSBhZGRyZXNzZXMgaW4gYSBmdW5jdGlvbiwK LSAgICAjIGFuZCB3aWxsIGFsbW9zdCBuZXZlciBvdmVyZmxvdyB0aGUgZmlyc3QgY2h1bmssIHNv IHdlIGNoZWNrIGZvciB0aGlzCi0gICAgIyBjYXNlIGFuZCBleGl0IGVhcmx5LgotCi0gICAgIyBp ZiAoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERFUlIgIkFkZHJlc3NJbmMgJGFkZHIxID0g IjsgfQotCi0gICAgbXkgJGExID0gc3Vic3RyKCRhZGRyLC03KTsKLSAgICAkYWRkciA9IHN1YnN0 cigkYWRkciwwLC03KTsKLSAgICAkc3VtID0gaGV4KCRhMSkgKyAxOwotICAgIG15ICRyID0gc3By aW50ZigiJTA3eCIsICRzdW0pOwotICAgIGlmICgkc3VtIDw9IDB4ZmZmZmZmZikgewotICAgICAg JHIgPSAkYWRkciAuICRyOwotICAgICAgIyBpZiAoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBT VERFUlIgIiRyXG4iOyB9Ci0gICAgICByZXR1cm4gSGV4RXh0ZW5kKCRyKTsKLSAgICB9IGVsc2Ug ewotICAgICAgJHIgPSAiMDAwMDAwMCI7Ci0gICAgfQotCi0gICAgJGExID0gc3Vic3RyKCRhZGRy LC03KTsKLSAgICAkYWRkciA9IHN1YnN0cigkYWRkciwwLC03KTsKLSAgICAkc3VtID0gaGV4KCRh MSkgKyAxOwotICAgICRyID0gc3ByaW50ZigiJTA3eCIsICRzdW0pIC4gJHI7Ci0gICAgaWYgKCRz dW0gPD0gMHhmZmZmZmZmKSB7Ci0gICAgICAkciA9ICRhZGRyIC4gJHI7Ci0gICAgICAjIGlmICgk bWFpbjo6b3B0X2RlYnVnKSB7IHByaW50IFNUREVSUiAiJHJcbiI7IH0KLSAgICAgIHJldHVybiBI ZXhFeHRlbmQoJHIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAkciA9ICIwMDAwMDAwMDAwMDAwMCI7 Ci0gICAgfQotCi0gICAgJHN1bSA9IGhleCgkYWRkcikgKyAxOwotICAgIGlmICgkc3VtID4gMHhm ZikgeyAkc3VtIC09IDB4MTAwOyB9Ci0gICAgJHIgPSBzcHJpbnRmKCIlMDJ4IiwgJHN1bSkgLiAk cjsKLQotICAgICMgaWYgKCRtYWluOjpvcHRfZGVidWcpIHsgcHJpbnQgU1RERVJSICIkclxuIjsg fQotICAgIHJldHVybiAkcjsKLSAgfQotfQotCi0jIEV4dHJhY3Qgc3ltYm9scyBmb3IgYWxsIFBD IHZhbHVlcyBmb3VuZCBpbiBwcm9maWxlCi1zdWIgRXh0cmFjdFN5bWJvbHMgewotICBteSAkbGli cyA9IHNoaWZ0OwotICBteSAkcGNzZXQgPSBzaGlmdDsKLQotICBteSAkc3ltYm9scyA9IHt9Owot Ci0gICMgTWFwIGVhY2ggUEMgdmFsdWUgdG8gdGhlIGNvbnRhaW5pbmcgbGlicmFyeS4gIFRvIG1h a2UgdGhpcyBmYXN0ZXIsCi0gICMgd2Ugc29ydCBsaWJyYXJpZXMgYnkgdGhlaXIgc3RhcnRpbmcg cGMgdmFsdWUgKGhpZ2hlc3QgZmlyc3QpLCBhbmQKLSAgIyBhZHZhbmNlIHRocm91Z2ggdGhlIGxp YnJhcmllcyBhcyB3ZSBhZHZhbmNlIHRoZSBwYy4gIFNvbWV0aW1lcyB0aGUKLSAgIyBhZGRyZXNz ZXMgb2YgbGlicmFyaWVzIG1heSBvdmVybGFwIHdpdGggdGhlIGFkZHJlc3NlcyBvZiB0aGUgbWFp bgotICAjIGJpbmFyeSwgc28gdG8gbWFrZSBzdXJlIHRoZSBsaWJyYXJpZXMgJ3dpbicsIHdlIGl0 ZXJhdGUgb3ZlciB0aGUKLSAgIyBsaWJyYXJpZXMgaW4gcmV2ZXJzZSBvcmRlciAod2hpY2ggYXNz dW1lcyB0aGUgYmluYXJ5IGRvZXNuJ3Qgc3RhcnQKLSAgIyBpbiB0aGUgbWlkZGxlIG9mIGEgbGli cmFyeSwgd2hpY2ggc2VlbXMgYSBmYWlyIGFzc3VtcHRpb24pLgotICBteSBAcGNzID0gKHNvcnQg eyAkYSBjbXAgJGIgfSBrZXlzKCV7JHBjc2V0fSkpOyAgIyBwY3NldCBpcyAwLWV4dGVuZGVkIHN0 cmluZ3MKLSAgZm9yZWFjaCBteSAkbGliIChzb3J0IHskYi0+WzFdIGNtcCAkYS0+WzFdfSBAeyRs aWJzfSkgewotICAgIG15ICRsaWJuYW1lID0gJGxpYi0+WzBdOwotICAgIG15ICRzdGFydCA9ICRs aWItPlsxXTsKLSAgICBteSAkZmluaXNoID0gJGxpYi0+WzJdOwotICAgIG15ICRvZmZzZXQgPSAk bGliLT5bM107Ci0KLSAgICAjIFVzZSBkZWJ1ZyBsaWJyYXJ5IGlmIGl0IGV4aXN0cwotICAgIG15 ICRkZWJ1Z19saWJuYW1lID0gRGVidWdnaW5nTGlicmFyeSgkbGlibmFtZSk7Ci0gICAgaWYgKCRk ZWJ1Z19saWJuYW1lKSB7Ci0gICAgICAgICRsaWJuYW1lID0gJGRlYnVnX2xpYm5hbWU7Ci0gICAg fQotCi0gICAgIyBHZXQgbGlzdCBvZiBwY3MgdGhhdCBiZWxvbmcgaW4gdGhpcyBsaWJyYXJ5Lgot ICAgIG15ICRjb250YWluZWQgPSBbXTsKLSAgICBteSAoJHN0YXJ0X3BjX2luZGV4LCAkZmluaXNo X3BjX2luZGV4KTsKLSAgICAjIEZpbmQgc21hbGxlc3QgZmluaXNoX3BjX2luZGV4IHN1Y2ggdGhh dCAkZmluaXNoIDwgJHBjWyRmaW5pc2hfcGNfaW5kZXhdLgotICAgIGZvciAoJGZpbmlzaF9wY19p bmRleCA9ICQjcGNzICsgMTsgJGZpbmlzaF9wY19pbmRleCA+IDA7Ci0gICAgICAgICAkZmluaXNo X3BjX2luZGV4LS0pIHsKLSAgICAgIGxhc3QgaWYgJHBjc1skZmluaXNoX3BjX2luZGV4IC0gMV0g bGUgJGZpbmlzaDsKLSAgICB9Ci0gICAgIyBGaW5kIHNtYWxsZXN0IHN0YXJ0X3BjX2luZGV4IHN1 Y2ggdGhhdCAkc3RhcnQgPD0gJHBjWyRzdGFydF9wY19pbmRleF0uCi0gICAgZm9yICgkc3RhcnRf cGNfaW5kZXggPSAkZmluaXNoX3BjX2luZGV4OyAkc3RhcnRfcGNfaW5kZXggPiAwOwotICAgICAg ICAgJHN0YXJ0X3BjX2luZGV4LS0pIHsKLSAgICAgIGxhc3QgaWYgJHBjc1skc3RhcnRfcGNfaW5k ZXggLSAxXSBsdCAkc3RhcnQ7Ci0gICAgfQotICAgICMgVGhpcyBrZWVwcyBQQyB2YWx1ZXMgaGln aGVyIHRoYW4gJHBjWyRmaW5pc2hfcGNfaW5kZXhdIGluIEBwY3MsCi0gICAgIyBpbiBjYXNlIHRo ZXJlIGFyZSBvdmVybGFwcyBpbiBsaWJyYXJpZXMgYW5kIHRoZSBtYWluIGJpbmFyeS4KLSAgICBA eyRjb250YWluZWR9ID0gc3BsaWNlKEBwY3MsICRzdGFydF9wY19pbmRleCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICRmaW5pc2hfcGNfaW5kZXggLSAkc3RhcnRfcGNfaW5kZXgpOwotICAg ICMgTWFwIHRvIHN5bWJvbHMKLSAgICBNYXBUb1N5bWJvbHMoJGxpYm5hbWUsIEFkZHJlc3NTdWIo JHN0YXJ0LCAkb2Zmc2V0KSwgJGNvbnRhaW5lZCwgJHN5bWJvbHMpOwotICB9Ci0KLSAgcmV0dXJu ICRzeW1ib2xzOwotfQotCi0jIE1hcCBsaXN0IG9mIFBDIHZhbHVlcyB0byBzeW1ib2xzIGZvciBh IGdpdmVuIGltYWdlCi1zdWIgTWFwVG9TeW1ib2xzIHsKLSAgbXkgJGltYWdlID0gc2hpZnQ7Ci0g IG15ICRvZmZzZXQgPSBzaGlmdDsKLSAgbXkgJHBjbGlzdCA9IHNoaWZ0OwotICBteSAkc3ltYm9s cyA9IHNoaWZ0OwotCi0gIG15ICRkZWJ1ZyA9IDA7Ci0KLSAgIyBJZ25vcmUgZW1wdHkgYmluYXJp ZXMKLSAgaWYgKCQjeyRwY2xpc3R9IDwgMCkgeyByZXR1cm47IH0KLQotICAjIEZpZ3VyZSBvdXQg dGhlIGFkZHIybGluZSBjb21tYW5kIHRvIHVzZQotICBteSAkYWRkcjJsaW5lID0gJG9ial90b29s X21hcHsiYWRkcjJsaW5lIn07Ci0gIG15ICRjbWQgPSBTaGVsbEVzY2FwZSgkYWRkcjJsaW5lLCAi LWYiLCAiLUMiLCAiLWUiLCAkaW1hZ2UpOwotICBpZiAoZXhpc3RzICRvYmpfdG9vbF9tYXB7ImFk ZHIybGluZV9wZGIifSkgewotICAgICRhZGRyMmxpbmUgPSAkb2JqX3Rvb2xfbWFweyJhZGRyMmxp bmVfcGRiIn07Ci0gICAgJGNtZCA9IFNoZWxsRXNjYXBlKCRhZGRyMmxpbmUsICItLWRlbWFuZ2xl IiwgIi1mIiwgIi1DIiwgIi1lIiwgJGltYWdlKTsKLSAgfQotCi0gICMgSWYgImFkZHIybGluZSIg aXNuJ3QgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0gYXQgYWxsLCBqdXN0IHVzZQotICAjIG5tIHRv IGdldCB3aGF0IGluZm8gd2UgY2FuIChmdW5jdGlvbiBuYW1lcywgYnV0IG5vdCBsaW5lIG51bWJl cnMpLgotICBpZiAoc3lzdGVtKFNoZWxsRXNjYXBlKCRhZGRyMmxpbmUsICItLWhlbHAiKSAuICIg PiRkZXZfbnVsbCAyPiYxIikgIT0gMCkgewotICAgIE1hcFN5bWJvbHNXaXRoTk0oJGltYWdlLCAk b2Zmc2V0LCAkcGNsaXN0LCAkc3ltYm9scyk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgIyAiYWRk cjJsaW5lIC1pIiBjYW4gcHJvZHVjZSBhIHZhcmlhYmxlIG51bWJlciBvZiBsaW5lcyBwZXIgaW5w dXQKLSAgIyBhZGRyZXNzLCB3aXRoIG5vIHNlcGFyYXRvciB0aGF0IGFsbG93cyB1cyB0byB0ZWxs IHdoZW4gZGF0YSBmb3IKLSAgIyB0aGUgbmV4dCBhZGRyZXNzIHN0YXJ0cy4gIFNvIHdlIGZpbmQg dGhlIGFkZHJlc3MgZm9yIGEgc3BlY2lhbAotICAjIHN5bWJvbCAoX2ZpbmkpIGFuZCBpbnRlcmxl YXZlIHRoaXMgYWRkcmVzcyBiZXR3ZWVuIGFsbCByZWFsCi0gICMgYWRkcmVzc2VzIHBhc3NlZCB0 byBhZGRyMmxpbmUuICBUaGUgbmFtZSBvZiB0aGlzIHNwZWNpYWwgc3ltYm9sCi0gICMgY2FuIHRo ZW4gYmUgdXNlZCBhcyBhIHNlcGFyYXRvci4KLSAgJHNlcF9hZGRyZXNzID0gdW5kZWY7ICAjIE1h eSBiZSBmaWxsZWQgaW4gYnkgTWFwU3ltYm9sc1dpdGhOTSgpCi0gIG15ICRubV9zeW1ib2xzID0g e307Ci0gIE1hcFN5bWJvbHNXaXRoTk0oJGltYWdlLCAkb2Zmc2V0LCAkcGNsaXN0LCAkbm1fc3lt Ym9scyk7Ci0gIGlmIChkZWZpbmVkKCRzZXBfYWRkcmVzcykpIHsKLSAgICAjIE9ubHkgYWRkICIg LWkiIHRvIGFkZHIybGluZSBpZiB0aGUgYmluYXJ5IHN1cHBvcnRzIGl0LgotICAgICMgYWRkcjJs aW5lIC0taGVscCByZXR1cm5zIDAsIGJ1dCBub3QgaWYgaXQgc2VlcyBhbiB1bmtub3duIGZsYWcg Zmlyc3QuCi0gICAgaWYgKHN5c3RlbSgiJGNtZCAtaSAtLWhlbHAgPiRkZXZfbnVsbCAyPiYxIikg PT0gMCkgewotICAgICAgJGNtZCAuPSAiIC1pIjsKLSAgICB9IGVsc2UgewotICAgICAgJHNlcF9h ZGRyZXNzID0gdW5kZWY7ICAgIyBubyBuZWVkIGZvciBzZXBfYWRkcmVzcyBpZiB3ZSBkb24ndCBz dXBwb3J0IC1pCi0gICAgfQotICB9Ci0KLSAgIyBNYWtlIGZpbGUgd2l0aCBhbGwgUEMgdmFsdWVz IHdpdGggaW50ZXJ2ZW5pbmcgJ3NlcF9hZGRyZXNzJyBzbwotICAjIHRoYXQgd2UgY2FuIHJlbGlh Ymx5IGRldGVjdCB0aGUgZW5kIG9mIGlubGluZWQgZnVuY3Rpb24gbGlzdAotICBvcGVuKEFERFJF U1NFUywgIj4kbWFpbjo6dG1wZmlsZV9zeW0iKSB8fCBlcnJvcigiJG1haW46OnRtcGZpbGVfc3lt OiAkIVxuIik7Ci0gIGlmICgkZGVidWcpIHsgcHJpbnQoIi0tLS0gJGltYWdlIC0tLVxuIik7IH0K LSAgZm9yIChteSAkaSA9IDA7ICRpIDw9ICQjeyRwY2xpc3R9OyAkaSsrKSB7Ci0gICAgIyBhZGRy MmxpbmUgYWx3YXlzIHJlYWRzIGhleCBhZGRyZXNzZXMsIGFuZCBkb2VzIG5vdCBuZWVkICcweCcg cHJlZml4LgotICAgIGlmICgkZGVidWcpIHsgcHJpbnRmIFNUREVSUiAoIiVzXG4iLCAkcGNsaXN0 LT5bJGldKTsgfQotICAgIHByaW50ZiBBRERSRVNTRVMgKCIlc1xuIiwgQWRkcmVzc1N1YigkcGNs aXN0LT5bJGldLCAkb2Zmc2V0KSk7Ci0gICAgaWYgKGRlZmluZWQoJHNlcF9hZGRyZXNzKSkgewot ICAgICAgcHJpbnRmIEFERFJFU1NFUyAoIiVzXG4iLCAkc2VwX2FkZHJlc3MpOwotICAgIH0KLSAg fQotICBjbG9zZShBRERSRVNTRVMpOwotICBpZiAoJGRlYnVnKSB7Ci0gICAgcHJpbnQoIi0tLS1c biIpOwotICAgIHN5c3RlbSgiY2F0IiwgJG1haW46OnRtcGZpbGVfc3ltKTsKLSAgICBwcmludCgi LS0tLVxuIik7Ci0gICAgc3lzdGVtKCIkY21kIDwgIiAuIFNoZWxsRXNjYXBlKCRtYWluOjp0bXBm aWxlX3N5bSkpOwotICAgIHByaW50KCItLS0tXG4iKTsKLSAgfQotCi0gIG9wZW4oU1lNQk9MUywg IiRjbWQgPCIgLiBTaGVsbEVzY2FwZSgkbWFpbjo6dG1wZmlsZV9zeW0pIC4gIiB8IikKLSAgICAg IHx8IGVycm9yKCIkY21kOiAkIVxuIik7Ci0gIG15ICRjb3VudCA9IDA7ICAgIyBJbmRleCBpbiBw Y2xpc3QKLSAgd2hpbGUgKDxTWU1CT0xTPikgewotICAgICMgUmVhZCBmdWxsZnVuY3Rpb24gYW5k IGZpbGVsaW5laW5mbyBmcm9tIG5leHQgcGFpciBvZiBsaW5lcwotICAgIHMvXHI/XG4kLy9nOwot ICAgIG15ICRmdWxsZnVuY3Rpb24gPSAkXzsKLSAgICAkXyA9IDxTWU1CT0xTPjsKLSAgICBzL1xy P1xuJC8vZzsKLSAgICBteSAkZmlsZWxpbmVudW0gPSAkXzsKLQotICAgIGlmIChkZWZpbmVkKCRz ZXBfYWRkcmVzcykgJiYgJGZ1bGxmdW5jdGlvbiBlcSAkc2VwX3N5bWJvbCkgewotICAgICAgIyBU ZXJtaW5hdGluZyBtYXJrZXIgZm9yIGRhdGEgZm9yIHRoaXMgYWRkcmVzcwotICAgICAgJGNvdW50 Kys7Ci0gICAgICBuZXh0OwotICAgIH0KLQotICAgICRmaWxlbGluZW51bSA9fiBzfFxcfC98Zzsg IyB0dXJuIHdpbmRvd3Mtc3R5bGUgcGF0aHMgaW50byB1bml4LXN0eWxlIHBhdGhzCi0KLSAgICBt eSAkcGNzdHIgPSAkcGNsaXN0LT5bJGNvdW50XTsKLSAgICBteSAkZnVuY3Rpb24gPSBTaG9ydEZ1 bmN0aW9uTmFtZSgkZnVsbGZ1bmN0aW9uKTsKLSAgICBteSAkbm1zID0gJG5tX3N5bWJvbHMtPnsk cGNzdHJ9OwotICAgIGlmIChkZWZpbmVkKCRubXMpKSB7Ci0gICAgICBpZiAoJGZ1bGxmdW5jdGlv biBlcSAnPz8nKSB7Ci0gICAgICAgICMgbm0gZm91bmQgYSBzeW1ib2wgZm9yIHVzLgotICAgICAg ICAkZnVuY3Rpb24gPSAkbm1zLT5bMF07Ci0gICAgICAgICRmdWxsZnVuY3Rpb24gPSAkbm1zLT5b Ml07Ci0gICAgICB9IGVsc2UgewotCSMgTWFwU3ltYm9sc1dpdGhOTSB0YWdzIGVhY2ggcm91dGlu ZSB3aXRoIGl0cyBzdGFydGluZyBhZGRyZXNzLAotCSMgdXNlZnVsIGluIGNhc2UgdGhlIGltYWdl IGhhcyBtdWx0aXBsZSBvY2N1cnJlbmNlcyBvZiB0aGlzCi0JIyByb3V0aW5lLiAgKEl0IHVzZXMg YSBzeW50YXggdGhhdCByZXNlbWJsZXMgdGVtcGxhdGUgcGFyYW1ldGVycywKLQkjIHRoYXQgYXJl IGF1dG9tYXRpY2FsbHkgc3RyaXBwZWQgb3V0IGJ5IFNob3J0RnVuY3Rpb25OYW1lKCkuKQotCSMg YWRkcjJsaW5lIGRvZXMgbm90IHByb3ZpZGUgdGhlIHNhbWUgaW5mb3JtYXRpb24uICBTbyB3ZSBj aGVjawotCSMgaWYgbm0gZGlzYW1iaWd1YXRlZCBvdXIgc3ltYm9sLCBhbmQgaWYgc28gdGFrZSB0 aGUgYW5ub3RhdGVkCi0JIyAobm0pIHZlcnNpb24gb2YgdGhlIHJvdXRpbmUtbmFtZS4gIFRPRE8o Y3NpbHZlcnMpOiB0aGlzIHdvbid0Ci0JIyBjYXRjaCBvdmVybG9hZGVkLCBpbmxpbmVkIHN5bWJv bHMsIHdoaWNoIG5tIGRvZXNuJ3Qgc2VlLgotCSMgQmV0dGVyIHdvdWxkIGJlIHRvIGRvIGEgY2hl Y2sgc2ltaWxhciB0byBubSdzLCBpbiB0aGlzIGZuLgotCWlmICgkbm1zLT5bMl0gPX4gbS9eXFEk ZnVuY3Rpb25cRS8pIHsgICMgc2FuaXR5IGNoZWNrIGl0J3MgdGhlIHJpZ2h0IGZuCi0JICAkZnVu Y3Rpb24gPSAkbm1zLT5bMF07Ci0JICAkZnVsbGZ1bmN0aW9uID0gJG5tcy0+WzJdOwotCX0KLSAg ICAgIH0KLSAgICB9Ci0KLSAgICAjIFByZXBlbmQgdG8gYWNjdW11bGF0ZWQgc3ltYm9scyBmb3Ig cGNzdHIKLSAgICAjIChzbyB0aGF0IGNhbGxlciBjb21lcyBiZWZvcmUgY2FsbGVlKQotICAgIG15 ICRzeW0gPSAkc3ltYm9scy0+eyRwY3N0cn07Ci0gICAgaWYgKCFkZWZpbmVkKCRzeW0pKSB7Ci0g ICAgICAkc3ltID0gW107Ci0gICAgICAkc3ltYm9scy0+eyRwY3N0cn0gPSAkc3ltOwotICAgIH0K LSAgICB1bnNoaWZ0KEB7JHN5bX0sICRmdW5jdGlvbiwgJGZpbGVsaW5lbnVtLCAkZnVsbGZ1bmN0 aW9uKTsKLSAgICBpZiAoJGRlYnVnKSB7IHByaW50ZiBTVERFUlIgKCIlcyA9PiBbJXNdXG4iLCAk cGNzdHIsIGpvaW4oIiAiLCBAeyRzeW19KSk7IH0KLSAgICBpZiAoIWRlZmluZWQoJHNlcF9hZGRy ZXNzKSkgewotICAgICAgIyBJbmxpbmluZyBpcyBvZmYsIHNvIHRoaXMgZW50cnkgZW5kcyBpbW1l ZGlhdGVseQotICAgICAgJGNvdW50Kys7Ci0gICAgfQotICB9Ci0gIGNsb3NlKFNZTUJPTFMpOwot fQotCi0jIFVzZSBubSB0byBtYXAgdGhlIGxpc3Qgb2YgcmVmZXJlbmNlZCBQQ3MgdG8gc3ltYm9s cy4gIFJldHVybiB0cnVlIGlmZiB3ZQotIyBhcmUgYWJsZSB0byByZWFkIHByb2NlZHVyZSBpbmZv cm1hdGlvbiB2aWEgbm0uCi1zdWIgTWFwU3ltYm9sc1dpdGhOTSB7Ci0gIG15ICRpbWFnZSA9IHNo aWZ0OwotICBteSAkb2Zmc2V0ID0gc2hpZnQ7Ci0gIG15ICRwY2xpc3QgPSBzaGlmdDsKLSAgbXkg JHN5bWJvbHMgPSBzaGlmdDsKLQotICAjIEdldCBubSBvdXRwdXQgc29ydGVkIGJ5IGluY3JlYXNp bmcgYWRkcmVzcwotICBteSAkc3ltYm9sX3RhYmxlID0gR2V0UHJvY2VkdXJlQm91bmRhcmllcygk aW1hZ2UsICIuIik7Ci0gIGlmICghJXskc3ltYm9sX3RhYmxlfSkgewotICAgIHJldHVybiAwOwot ICB9Ci0gICMgU3RhcnQgYWRkcmVzc2VzIGFyZSBhbHJlYWR5IHRoZSByaWdodCBsZW5ndGggKDgg b3IgMTYgaGV4IGRpZ2l0cykuCi0gIG15IEBuYW1lcyA9IHNvcnQgeyAkc3ltYm9sX3RhYmxlLT57 JGF9LT5bMF0gY21wICRzeW1ib2xfdGFibGUtPnskYn0tPlswXSB9Ci0gICAga2V5cygleyRzeW1i b2xfdGFibGV9KTsKLQotICBpZiAoJCNuYW1lcyA8IDApIHsKLSAgICAjIE5vIHN5bWJvbHM6IGp1 c3QgdXNlIGFkZHJlc3NlcwotICAgIGZvcmVhY2ggbXkgJHBjIChAeyRwY2xpc3R9KSB7Ci0gICAg ICBteSAkcGNzdHIgPSAiMHgiIC4gJHBjOwotICAgICAgJHN5bWJvbHMtPnskcGN9ID0gWyRwY3N0 ciwgIj8iLCAkcGNzdHJdOwotICAgIH0KLSAgICByZXR1cm4gMDsKLSAgfQotCi0gICMgU29ydCBh ZGRyZXNzZXMgc28gd2UgY2FuIGRvIGEgam9pbiBhZ2FpbnN0IG5tIG91dHB1dAotICBteSAkaW5k ZXggPSAwOwotICBteSAkZnVsbG5hbWUgPSAkbmFtZXNbMF07Ci0gIG15ICRuYW1lID0gU2hvcnRG dW5jdGlvbk5hbWUoJGZ1bGxuYW1lKTsKLSAgZm9yZWFjaCBteSAkcGMgKHNvcnQgeyAkYSBjbXAg JGIgfSBAeyRwY2xpc3R9KSB7Ci0gICAgIyBBZGp1c3QgZm9yIG1hcHBlZCBvZmZzZXQKLSAgICBt eSAkbXBjID0gQWRkcmVzc1N1YigkcGMsICRvZmZzZXQpOwotICAgIHdoaWxlICgoJGluZGV4IDwg JCNuYW1lcykgJiYgKCRtcGMgZ2UgJHN5bWJvbF90YWJsZS0+eyRmdWxsbmFtZX0tPlsxXSkpewot ICAgICAgJGluZGV4Kys7Ci0gICAgICAkZnVsbG5hbWUgPSAkbmFtZXNbJGluZGV4XTsKLSAgICAg ICRuYW1lID0gU2hvcnRGdW5jdGlvbk5hbWUoJGZ1bGxuYW1lKTsKLSAgICB9Ci0gICAgaWYgKCRt cGMgbHQgJHN5bWJvbF90YWJsZS0+eyRmdWxsbmFtZX0tPlsxXSkgewotICAgICAgJHN5bWJvbHMt PnskcGN9ID0gWyRuYW1lLCAiPyIsICRmdWxsbmFtZV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIG15 ICRwY3N0ciA9ICIweCIgLiAkcGM7Ci0gICAgICAkc3ltYm9scy0+eyRwY30gPSBbJHBjc3RyLCAi PyIsICRwY3N0cl07Ci0gICAgfQotICB9Ci0gIHJldHVybiAxOwotfQotCi1zdWIgU2hvcnRGdW5j dGlvbk5hbWUgewotICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAgd2hpbGUgKCRmdW5jdGlvbiA9 fiBzL1woW14oKV0qXCkoXHMqY29uc3QpPy8vZykgeyB9ICAgIyBBcmd1bWVudCB0eXBlcwotICB3 aGlsZSAoJGZ1bmN0aW9uID1+IHMvPFtePD5dKj4vL2cpICB7IH0gICAgIyBSZW1vdmUgdGVtcGxh dGUgYXJndW1lbnRzCi0gICRmdW5jdGlvbiA9fiBzL14uKlxzKyhcdys6OikvJDEvOyAgICAgICAg ICAjIFJlbW92ZSBsZWFkaW5nIHR5cGUKLSAgcmV0dXJuICRmdW5jdGlvbjsKLX0KLQotIyBUcmlt IG92ZXJseSBsb25nIHN5bWJvbHMgZm91bmQgaW4gZGlzYXNzZW1ibGVyIG91dHB1dAotc3ViIENs ZWFuRGlzYXNzZW1ibHkgewotICBteSAkZCA9IHNoaWZ0OwotICB3aGlsZSAoJGQgPX4gcy9cKFte KCklXSpcKShccypjb25zdCk/Ly9nKSB7IH0gIyBBcmd1bWVudCB0eXBlcywgbm90ICglcmF4KQot ICB3aGlsZSAoJGQgPX4gcy8oXHcrKTxbXjw+XSo+LyQxL2cpICB7IH0gICAgICAgIyBSZW1vdmUg dGVtcGxhdGUgYXJndW1lbnRzCi0gIHJldHVybiAkZDsKLX0KLQotIyBDbGVhbiBmaWxlIG5hbWUg Zm9yIGRpc3BsYXkKLXN1YiBDbGVhbkZpbGVOYW1lIHsKLSAgbXkgKCRmKSA9IEBfOwotICAkZiA9 fiBzfF4vcHJvYy9zZWxmL2N3ZC98fDsKLSAgJGYgPX4gc3xeXC4vfHw7Ci0gIHJldHVybiAkZjsK LX0KLQotIyBNYWtlIGFkZHJlc3MgcmVsYXRpdmUgdG8gc2VjdGlvbiBhbmQgY2xlYW4gdXAgZm9y IGRpc3BsYXkKLXN1YiBVbnBhcnNlQWRkcmVzcyB7Ci0gIG15ICgkb2Zmc2V0LCAkYWRkcmVzcykg PSBAXzsKLSAgJGFkZHJlc3MgPSBBZGRyZXNzU3ViKCRhZGRyZXNzLCAkb2Zmc2V0KTsKLSAgJGFk ZHJlc3MgPX4gcy9eMHgvLzsKLSAgJGFkZHJlc3MgPX4gcy9eMCovLzsKLSAgcmV0dXJuICRhZGRy ZXNzOwotfQotCi0jIyMjIyBNaXNjZWxsYW5lb3VzICMjIyMjCi0KLSMgRmluZCB0aGUgcmlnaHQg dmVyc2lvbnMgb2YgdGhlIGFib3ZlIG9iamVjdCB0b29scyB0byB1c2UuICBUaGUKLSMgYXJndW1l bnQgaXMgdGhlIHByb2dyYW0gZmlsZSBiZWluZyBhbmFseXplZCwgYW5kIHNob3VsZCBiZSBhbiBF TEYKLSMgMzItYml0IG9yIEVMRiA2NC1iaXQgZXhlY3V0YWJsZSBmaWxlLiAgVGhlIGxvY2F0aW9u IG9mIHRoZSB0b29scwotIyBpcyBkZXRlcm1pbmVkIGJ5IGNvbnNpZGVyaW5nIHRoZSBmb2xsb3dp bmcgb3B0aW9ucyBpbiB0aGlzIG9yZGVyOgotIyAgIDEpIC0tdG9vbHMgb3B0aW9uLCBpZiBzZXQK LSMgICAyKSBKRVBST0ZfVE9PTFMgZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHNldAotIyAgIDMp IHRoZSBlbnZpcm9ubWVudAotc3ViIENvbmZpZ3VyZU9ialRvb2xzIHsKLSAgbXkgJHByb2dfZmls ZSA9IHNoaWZ0OwotCi0gICMgQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgJHByb2dfZmlsZSBi ZWNhdXNlIC91c3IvYmluL2ZpbGUgZG9lcyBub3QKLSAgIyBwcmVkaWN0YWJseSByZXR1cm4gZXJy b3Igc3RhdHVzIGluIHByb2QuCi0gICgtZSAkcHJvZ19maWxlKSAgfHwgZXJyb3IoIiRwcm9nX2Zp bGUgZG9lcyBub3QgZXhpc3QuXG4iKTsKLQotICBteSAkZmlsZV90eXBlID0gdW5kZWY7Ci0gIGlm ICgtZSAiL3Vzci9iaW4vZmlsZSIpIHsKLSAgICAjIEZvbGxvdyBzeW1saW5rcyAoYXQgbGVhc3Qg Zm9yIHN5c3RlbXMgd2hlcmUgImZpbGUiIHN1cHBvcnRzIHRoYXQpLgotICAgIG15ICRlc2NhcGVk X3Byb2dfZmlsZSA9IFNoZWxsRXNjYXBlKCRwcm9nX2ZpbGUpOwotICAgICRmaWxlX3R5cGUgPSBg L3Vzci9iaW4vZmlsZSAtTCAkZXNjYXBlZF9wcm9nX2ZpbGUgMj4kZGV2X251bGwgfHwKLSAgICAg ICAgICAgICAgICAgIC91c3IvYmluL2ZpbGUgJGVzY2FwZWRfcHJvZ19maWxlYDsKLSAgfSBlbHNp ZiAoJF5PID09ICJNU1dpbjMyIikgewotICAgICRmaWxlX3R5cGUgPSAiTVMgV2luZG93cyI7Ci0g IH0gZWxzZSB7Ci0gICAgcHJpbnQgU1RERVJSICJXQVJOSU5HOiBDYW4ndCBkZXRlcm1pbmUgdGhl IGZpbGUgdHlwZSBvZiAkcHJvZ19maWxlIjsKLSAgfQotCi0gIGlmICgkZmlsZV90eXBlID1+IC82 NC1iaXQvKSB7Ci0gICAgIyBDaGFuZ2UgJGFkZHJlc3NfbGVuZ3RoIHRvIDE2IGlmIHRoZSBwcm9n cmFtIGZpbGUgaXMgRUxGIDY0LWJpdC4KLSAgICAjIFdlIGNhbid0IGRldGVjdCB0aGlzIGZyb20g bWFueSAobW9zdD8pIGhlYXAgb3IgbG9jayBjb250ZW50aW9uCi0gICAgIyBwcm9maWxlcywgc2lu Y2UgdGhlIGFjdHVhbCBhZGRyZXNzZXMgcmVmZXJlbmNlZCBhcmUgZ2VuZXJhbGx5IGluIGxvdwot ICAgICMgbWVtb3J5IGV2ZW4gZm9yIDY0LWJpdCBwcm9ncmFtcy4KLSAgICAkYWRkcmVzc19sZW5n dGggPSAxNjsKLSAgfQotCi0gIGlmICgkZmlsZV90eXBlID1+IC9NUyBXaW5kb3dzLykgewotICAg ICMgRm9yIHdpbmRvd3MsIHdlIHByb3ZpZGUgYSB2ZXJzaW9uIG9mIG5tIGFuZCBhZGRyMmxpbmUg YXMgcGFydCBvZgotICAgICMgdGhlIG9wZW5zb3VyY2UgcmVsZWFzZSwgd2hpY2ggaXMgY2FwYWJs ZSBvZiBwYXJzaW5nCi0gICAgIyBXaW5kb3dzLXN0eWxlIFBEQiBleGVjdXRhYmxlcy4gIEl0IHNo b3VsZCBsaXZlIGluIHRoZSBwYXRoLCBvcgotICAgICMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFz IGplcHJvZi4KLSAgICAkb2JqX3Rvb2xfbWFweyJubV9wZGIifSA9ICJubS1wZGIiOwotICAgICRv YmpfdG9vbF9tYXB7ImFkZHIybGluZV9wZGIifSA9ICJhZGRyMmxpbmUtcGRiIjsKLSAgfQotCi0g IGlmICgkZmlsZV90eXBlID1+IC9NYWNoLU8vKSB7Ci0gICAgIyBPUyBYIHVzZXMgb3Rvb2wgdG8g ZXhhbWluZSBNYWNoLU8gZmlsZXMsIHJhdGhlciB0aGFuIG9iamR1bXAuCi0gICAgJG9ial90b29s X21hcHsib3Rvb2wifSA9ICJvdG9vbCI7Ci0gICAgJG9ial90b29sX21hcHsiYWRkcjJsaW5lIn0g PSAiZmFsc2UiOyAgIyBubyBhZGRyMmxpbmUKLSAgICAkb2JqX3Rvb2xfbWFweyJvYmpkdW1wIn0g PSAiZmFsc2UiOyAgIyBubyBvYmpkdW1wCi0gIH0KLQotICAjIEdvIGZpbGwgaW4gJW9ial90b29s X21hcCB3aXRoIHRoZSBwYXRobmFtZXMgdG8gdXNlOgotICBmb3JlYWNoIG15ICR0b29sIChrZXlz ICVvYmpfdG9vbF9tYXApIHsKLSAgICAkb2JqX3Rvb2xfbWFweyR0b29sfSA9IENvbmZpZ3VyZVRv b2woJG9ial90b29sX21hcHskdG9vbH0pOwotICB9Ci19Ci0KLSMgUmV0dXJucyB0aGUgcGF0aCBv ZiBhIGNhbGxlci1zcGVjaWZpZWQgb2JqZWN0IHRvb2wuICBJZiAtLXRvb2xzIG9yCi0jIEpFUFJP Rl9UT09MUyBhcmUgc3BlY2lmaWVkLCB0aGVuIHJldHVybnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUg dG9vbAotIyB3aXRoIHRoYXQgcHJlZml4LiAgT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBwYXRoIHVu bW9kaWZpZWQgKHdoaWNoCi0jIG1lYW5zIHdlIHdpbGwgbG9vayBmb3IgaXQgb24gUEFUSCkuCi1z dWIgQ29uZmlndXJlVG9vbCB7Ci0gIG15ICR0b29sID0gc2hpZnQ7Ci0gIG15ICRwYXRoOwotCi0g ICMgLS10b29scyAob3IgJEpFUFJPRl9UT09MUykgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCwg d2hlcmUgZWFjaAotICAjIGl0ZW0gaXMgZWl0aGVyIGEpIGEgcGF0aG5hbWUgcHJlZml4LCBvciBi KSBhIG1hcCBvZiB0aGUgZm9ybQotICAjIDx0b29sPjo8cGF0aD4uICBGaXJzdCB3ZSBsb29rIGZv ciBhbiBlbnRyeSBvZiB0eXBlIChiKSBmb3Igb3VyCi0gICMgdG9vbC4gIElmIG9uZSBpcyBmb3Vu ZCwgd2UgdXNlIGl0LiAgT3RoZXJ3aXNlLCB3ZSBjb25zaWRlciBhbGwgdGhlCi0gICMgcGF0aG5h bWUgcHJlZml4ZXMgaW4gdHVybiwgdW50aWwgb25lIHlpZWxkcyBhbiBleGlzdGluZyBmaWxlLiAg SWYKLSAgIyBub25lIGRvZXMsIHdlIHVzZSBhIGRlZmF1bHQgcGF0aC4KLSAgbXkgJHRvb2xzID0g JG1haW46Om9wdF90b29scyB8fCAkRU5WeyJKRVBST0ZfVE9PTFMifSB8fCAiIjsKLSAgaWYgKCR0 b29scyA9fiBtLygsfF4pXFEkdG9vbFxFOihbXixdKikvKSB7Ci0gICAgJHBhdGggPSAkMjsKLSAg ICAjIFRPRE8oY3NpbHZlcnMpOiBzYW5pdHktY2hlY2sgdGhhdCAkcGF0aCBleGlzdHM/ICBIYXJk IGlmIGl0J3MgcmVsYXRpdmUuCi0gIH0gZWxzaWYgKCR0b29scyBuZSAnJykgewotICAgIGZvcmVh Y2ggbXkgJHByZWZpeCAoc3BsaXQoJywnLCAkdG9vbHMpKSB7Ci0gICAgICBuZXh0IGlmICgkcHJl Zml4ID1+IC86Lyk7ICAgICMgaWdub3JlICJ0b29sOmZ1bGxwYXRoIiBlbnRyaWVzIGluIHRoZSBs aXN0Ci0gICAgICBpZiAoLXggJHByZWZpeCAuICR0b29sKSB7Ci0gICAgICAgICRwYXRoID0gJHBy ZWZpeCAuICR0b29sOwotICAgICAgICBsYXN0OwotICAgICAgfQotICAgIH0KLSAgICBpZiAoISRw YXRoKSB7Ci0gICAgICBlcnJvcigiTm8gJyR0b29sJyBmb3VuZCB3aXRoIHByZWZpeCBzcGVjaWZp ZWQgYnkgIiAuCi0gICAgICAgICAgICAiLS10b29scyAob3IgXCRKRVBST0ZfVE9PTFMpICckdG9v bHMnXG4iKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgIyAuLi4gb3RoZXJ3aXNlIHVzZSB0aGUg dmVyc2lvbiB0aGF0IGV4aXN0cyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKLSAgICAjIGplcHJv Zi4gIElmIHRoZXJlJ3Mgbm90aGluZyB0aGVyZSwgdXNlICRQQVRILgotICAgICQwID1+IG0sW14v XSokLDsgICAgICMgdGhpcyBpcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBsYXN0IHNsYXNoCi0gICAg bXkgJGRpcm5hbWUgPSAkYDsgICAgIyB0aGlzIGlzIGV2ZXJ5dGhpbmcgdXAgdG8gYW5kIGluY2x1 ZGluZyB0aGUgbGFzdCBzbGFzaAotICAgIGlmICgteCAiJGRpcm5hbWUkdG9vbCIpIHsKLSAgICAg ICRwYXRoID0gIiRkaXJuYW1lJHRvb2wiOwotICAgIH0gZWxzZSB7Ci0gICAgICAkcGF0aCA9ICR0 b29sOwotICAgIH0KLSAgfQotICBpZiAoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERFUlIg IlVzaW5nICckcGF0aCcgZm9yICckdG9vbCcuXG4iOyB9Ci0gIHJldHVybiAkcGF0aDsKLX0KLQot c3ViIFNoZWxsRXNjYXBlIHsKLSAgbXkgQGVzY2FwZWRfd29yZHMgPSAoKTsKLSAgZm9yZWFjaCBt eSAkd29yZCAoQF8pIHsKLSAgICBteSAkZXNjYXBlZF93b3JkID0gJHdvcmQ7Ci0gICAgaWYgKCR3 b3JkID1+IG0hW15hLXpBLVowLTkvLixfPS1dISkgeyAgIyBjaGVjayBmb3IgYW55dGhpbmcgbm90 IGluIHdoaXRlbGlzdAotICAgICAgJGVzY2FwZWRfd29yZCA9fiBzLycvJ1xcJycvOwotICAgICAg JGVzY2FwZWRfd29yZCA9ICInJGVzY2FwZWRfd29yZCciOwotICAgIH0KLSAgICBwdXNoKEBlc2Nh cGVkX3dvcmRzLCAkZXNjYXBlZF93b3JkKTsKLSAgfQotICByZXR1cm4gam9pbigiICIsIEBlc2Nh cGVkX3dvcmRzKTsKLX0KLQotc3ViIGNsZWFudXAgewotICB1bmxpbmsoJG1haW46OnRtcGZpbGVf c3ltKTsKLSAgdW5saW5rKGtleXMgJW1haW46OnRlbXBuYW1lcyk7Ci0KLSAgIyBXZSBsZWF2ZSBh bnkgY29sbGVjdGVkIHByb2ZpbGVzIGluICRIT01FL2plcHJvZiBpbiBjYXNlIHRoZSB1c2VyIHdh bnRzCi0gICMgdG8gbG9vayBhdCB0aGVtIGxhdGVyLiAgV2UgcHJpbnQgYSBtZXNzYWdlIGluZm9y bWluZyB0aGVtIG9mIHRoaXMuCi0gIGlmICgoc2NhbGFyKEBtYWluOjpwcm9maWxlX2ZpbGVzKSA+ IDApICYmCi0gICAgICBkZWZpbmVkKCRtYWluOjpjb2xsZWN0ZWRfcHJvZmlsZSkpIHsKLSAgICBp ZiAoc2NhbGFyKEBtYWluOjpwcm9maWxlX2ZpbGVzKSA9PSAxKSB7Ci0gICAgICBwcmludCBTVERF UlIgIkR5bmFtaWNhbGx5IGdhdGhlcmVkIHByb2ZpbGUgaXMgaW4gJG1haW46OmNvbGxlY3RlZF9w cm9maWxlXG4iOwotICAgIH0KLSAgICBwcmludCBTVERFUlIgIklmIHlvdSB3YW50IHRvIGludmVz dGlnYXRlIHRoaXMgcHJvZmlsZSBmdXJ0aGVyLCB5b3UgY2FuIGRvOlxuIjsKLSAgICBwcmludCBT VERFUlIgIlxuIjsKLSAgICBwcmludCBTVERFUlIgIiAgamVwcm9mIFxcXG4iOwotICAgIHByaW50 IFNUREVSUiAiICAgICRtYWluOjpwcm9nIFxcXG4iOwotICAgIHByaW50IFNUREVSUiAiICAgICRt YWluOjpjb2xsZWN0ZWRfcHJvZmlsZVxuIjsKLSAgICBwcmludCBTVERFUlIgIlxuIjsKLSAgfQot fQotCi1zdWIgc2lnaGFuZGxlciB7Ci0gIGNsZWFudXAoKTsKLSAgZXhpdCgxKTsKLX0KLQotc3Vi IGVycm9yIHsKLSAgbXkgJG1zZyA9IHNoaWZ0OwotICBwcmludCBTVERFUlIgJG1zZzsKLSAgY2xl YW51cCgpOwotICBleGl0KDEpOwotfQotCi0KLSMgUnVuICRubV9jb21tYW5kIGFuZCBnZXQgYWxs IHRoZSByZXN1bHRpbmcgcHJvY2VkdXJlIGJvdW5kYXJpZXMgd2hvc2UKLSMgbmFtZXMgbWF0Y2gg IiRyZWdleHAiIGFuZCByZXR1cm5zIHRoZW0gaW4gYSBoYXNodGFibGUgbWFwcGluZyBmcm9tCi0j IHByb2NlZHVyZSBuYW1lIHRvIGEgdHdvLWVsZW1lbnQgdmVjdG9yIG9mIFtzdGFydCBhZGRyZXNz LCBlbmQgYWRkcmVzc10KLXN1YiBHZXRQcm9jZWR1cmVCb3VuZGFyaWVzVmlhTm0gewotICBteSAk ZXNjYXBlZF9ubV9jb21tYW5kID0gc2hpZnQ7ICAgICMgc2hlbGwtZXNjYXBlZAotICBteSAkcmVn ZXhwID0gc2hpZnQ7Ci0KLSAgbXkgJHN5bWJvbF90YWJsZSA9IHt9OwotICBvcGVuKE5NLCAiJGVz Y2FwZWRfbm1fY29tbWFuZCB8IikgfHwgZXJyb3IoIiRlc2NhcGVkX25tX2NvbW1hbmQ6ICQhXG4i KTsKLSAgbXkgJGxhc3Rfc3RhcnQgPSAiMCI7Ci0gIG15ICRyb3V0aW5lID0gIiI7Ci0gIHdoaWxl ICg8Tk0+KSB7Ci0gICAgcy9cci8vZzsgICAgICAgICAjIHR1cm4gd2luZG93cy1sb29raW5nIGxp bmVzIGludG8gdW5peC1sb29raW5nIGxpbmVzCi0gICAgaWYgKG0vXlxzKihbMC05YS1mXSspICgu KSAoLi4qKS8pIHsKLSAgICAgIG15ICRzdGFydF92YWwgPSAkMTsKLSAgICAgIG15ICR0eXBlID0g JDI7Ci0gICAgICBteSAkdGhpc19yb3V0aW5lID0gJDM7Ci0KLSAgICAgICMgSXQncyBwb3NzaWJs ZSBmb3IgdHdvIHN5bWJvbHMgdG8gc2hhcmUgdGhlIHNhbWUgYWRkcmVzcywgaWYKLSAgICAgICMg b25lIGlzIGEgemVyby1sZW5ndGggdmFyaWFibGUgKGxpa2UgX19zdGFydF9nb29nbGVfbWFsbG9j KSBvcgotICAgICAgIyBvbmUgc3ltYm9sIGlzIGEgd2VhayBhbGlhcyB0byBhbm90aGVyIChsaWtl IF9fbGliY19tYWxsb2MpLgotICAgICAgIyBJbiBzdWNoIGNhc2VzLCB3ZSB3YW50IHRvIGlnbm9y ZSBhbGwgdmFsdWVzIGV4Y2VwdCBmb3IgdGhlCi0gICAgICAjIGFjdHVhbCBzeW1ib2wsIHdoaWNo IGluIG5tLXNwZWFrIGhhcyB0eXBlICJUIi4gIFRoZSBsb2dpYwotICAgICAgIyBiZWxvdyBkb2Vz IHRoaXMsIHRob3VnaCBpdCdzIGEgYml0IHRyaWNreTogd2hhdCBoYXBwZW5zIHdoZW4KLSAgICAg ICMgd2UgaGF2ZSBhIHNlcmllcyBvZiBsaW5lcyB3aXRoIHRoZSBzYW1lIGFkZHJlc3MsIGlzIHRo ZSBmaXJzdAotICAgICAgIyBvbmUgZ2V0cyBxdWV1ZWQgdXAgdG8gYmUgcHJvY2Vzc2VkLiAgSG93 ZXZlciwgaXQgd29uJ3QKLSAgICAgICMgKmFjdHVhbGx5KiBiZSBwcm9jZXNzZWQgdW50aWwgbGF0 ZXIsIHdoZW4gd2UgcmVhZCBhIGxpbmUgd2l0aAotICAgICAgIyBhIGRpZmZlcmVudCBhZGRyZXNz LiAgVGhhdCBtZWFucyB0aGF0IGFzIGxvbmcgYXMgd2UncmUgcmVhZGluZwotICAgICAgIyBsaW5l cyB3aXRoIHRoZSBzYW1lIGFkZHJlc3MsIHdlIGhhdmUgYSBjaGFuY2UgdG8gcmVwbGFjZSB0aGF0 Ci0gICAgICAjIGl0ZW0gaW4gdGhlIHF1ZXVlLCB3aGljaCB3ZSBkbyB3aGVuZXZlciB3ZSBzZWUg YSAnVCcgZW50cnkgLS0KLSAgICAgICMgdGhhdCBpcywgYSBsaW5lIHdpdGggdHlwZSAnVCcuICBJ ZiB3ZSBuZXZlciBzZWUgYSAnVCcgZW50cnksCi0gICAgICAjIHdlJ2xsIGp1c3QgZ28gYWhlYWQg YW5kIHByb2Nlc3MgdGhlIGZpcnN0IGVudHJ5ICh3aGljaCBuZXZlcgotICAgICAgIyBnb3QgdG91 Y2hlZCBpbiB0aGUgcXVldWUpLCBhbmQgaWdub3JlIHRoZSBvdGhlcnMuCi0gICAgICBpZiAoJHN0 YXJ0X3ZhbCBlcSAkbGFzdF9zdGFydCAmJiAkdHlwZSA9fiAvdC9pKSB7Ci0gICAgICAgICMgV2Ug YXJlIHRoZSAnVCcgc3ltYm9sIGF0IHRoaXMgYWRkcmVzcywgcmVwbGFjZSBwcmV2aW91cyBzeW1i b2wuCi0gICAgICAgICRyb3V0aW5lID0gJHRoaXNfcm91dGluZTsKLSAgICAgICAgbmV4dDsKLSAg ICAgIH0gZWxzaWYgKCRzdGFydF92YWwgZXEgJGxhc3Rfc3RhcnQpIHsKLSAgICAgICAgIyBXZSdy ZSBub3QgdGhlICdUJyBzeW1ib2wgYXQgdGhpcyBhZGRyZXNzLCBzbyBpZ25vcmUgdXMuCi0gICAg ICAgIG5leHQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmICgkdGhpc19yb3V0aW5lIGVxICRzZXBfc3lt Ym9sKSB7Ci0gICAgICAgICRzZXBfYWRkcmVzcyA9IEhleEV4dGVuZCgkc3RhcnRfdmFsKTsKLSAg ICAgIH0KLQotICAgICAgIyBUYWcgdGhpcyByb3V0aW5lIHdpdGggdGhlIHN0YXJ0aW5nIGFkZHJl c3MgaW4gY2FzZSB0aGUgaW1hZ2UKLSAgICAgICMgaGFzIG11bHRpcGxlIG9jY3VycmVuY2VzIG9m IHRoaXMgcm91dGluZS4gIFdlIHVzZSBhIHN5bnRheAotICAgICAgIyB0aGF0IHJlc2VtYmxlcyB0 ZW1wbGF0ZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkKLSAgICAgICMgc3RyaXBw ZWQgb3V0IGJ5IFNob3J0RnVuY3Rpb25OYW1lKCkKLSAgICAgICR0aGlzX3JvdXRpbmUgLj0gIjwk c3RhcnRfdmFsPiI7Ci0KLSAgICAgIGlmIChkZWZpbmVkKCRyb3V0aW5lKSAmJiAkcm91dGluZSA9 fiBtLyRyZWdleHAvKSB7Ci0gICAgICAgICRzeW1ib2xfdGFibGUtPnskcm91dGluZX0gPSBbSGV4 RXh0ZW5kKCRsYXN0X3N0YXJ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIZXhFeHRlbmQoJHN0YXJ0X3ZhbCldOwotICAgICAgfQotICAgICAgJGxhc3Rfc3RhcnQgPSAk c3RhcnRfdmFsOwotICAgICAgJHJvdXRpbmUgPSAkdGhpc19yb3V0aW5lOwotICAgIH0gZWxzaWYg KG0vXkxvYWRlZCBpbWFnZSBuYW1lOiAoLispLykgewotICAgICAgIyBUaGUgd2luMzIgbm0gd29y a2FsaWtlIGVtaXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiaW5hcnkgaXQgaXMgdXNpbmcuCi0g ICAgICBpZiAoJG1haW46Om9wdF9kZWJ1ZykgeyBwcmludCBTVERFUlIgIlVzaW5nIEltYWdlICQx XG4iOyB9Ci0gICAgfSBlbHNpZiAobS9eUERCIGZpbGUgbmFtZTogKC4rKS8pIHsKLSAgICAgICMg VGhlIHdpbjMyIG5tIHdvcmthbGlrZSBlbWl0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGRiIGl0 IGlzIHVzaW5nLgotICAgICAgaWYgKCRtYWluOjpvcHRfZGVidWcpIHsgcHJpbnQgU1RERVJSICJV c2luZyBQREIgJDFcbiI7IH0KLSAgICB9Ci0gIH0KLSAgY2xvc2UoTk0pOwotICAjIEhhbmRsZSB0 aGUgbGFzdCBsaW5lIGluIHRoZSBubSBvdXRwdXQuICBVbmZvcnR1bmF0ZWx5LCB3ZSBkb24ndCBr bm93Ci0gICMgaG93IGJpZyB0aGlzIGxhc3Qgc3ltYm9sIGlzLCBiZWNhdXNlIHdlIGRvbid0IGtu b3cgaG93IGJpZyB0aGUgZmlsZQotICAjIGlzLiAgRm9yIG5vdywgd2UganVzdCBnaXZlIGl0IGEg c2l6ZSBvZiAwLgotICAjIFRPRE8oY3NpbHZlcnMpOiBkbyBiZXR0ZXIgaGVyZS4KLSAgaWYgKGRl ZmluZWQoJHJvdXRpbmUpICYmICRyb3V0aW5lID1+IG0vJHJlZ2V4cC8pIHsKLSAgICAkc3ltYm9s X3RhYmxlLT57JHJvdXRpbmV9ID0gW0hleEV4dGVuZCgkbGFzdF9zdGFydCksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIZXhFeHRlbmQoJGxhc3Rfc3RhcnQpXTsKLSAgfQotICBy ZXR1cm4gJHN5bWJvbF90YWJsZTsKLX0KLQotIyBHZXRzIHRoZSBwcm9jZWR1cmUgYm91bmRhcmll cyBmb3IgYWxsIHJvdXRpbmVzIGluICIkaW1hZ2UiIHdob3NlIG5hbWVzCi0jIG1hdGNoICIkcmVn ZXhwIiBhbmQgcmV0dXJucyB0aGVtIGluIGEgaGFzaHRhYmxlIG1hcHBpbmcgZnJvbSBwcm9jZWR1 cmUKLSMgbmFtZSB0byBhIHR3by1lbGVtZW50IHZlY3RvciBvZiBbc3RhcnQgYWRkcmVzcywgZW5k IGFkZHJlc3NdLgotIyBXaWxsIHJldHVybiBhbiBlbXB0eSBtYXAgaWYgbm0gaXMgbm90IGluc3Rh bGxlZCBvciBub3Qgd29ya2luZyBwcm9wZXJseS4KLXN1YiBHZXRQcm9jZWR1cmVCb3VuZGFyaWVz IHsKLSAgbXkgJGltYWdlID0gc2hpZnQ7Ci0gIG15ICRyZWdleHAgPSBzaGlmdDsKLQotICAjIElm ICRpbWFnZSBkb2Vzbid0IHN0YXJ0IHdpdGggLywgdGhlbiBwdXQgLi8gaW4gZnJvbnQgb2YgaXQu ICBUaGlzIHdvcmtzCi0gICMgYXJvdW5kIGFuIG9ibm94aW91cyBidWcgaW4gb3VyIHByb2Jpbmcg b2Ygbm0gLWYgYmVoYXZpb3IuCi0gICMgIm5tIC1mICRpbWFnZSIgaXMgc3VwcG9zZWQgdG8gZmFp bCBvbiBHTlUgbm0sIGJ1dCBpZjoKLSAgIwotICAjIGEuICRpbWFnZSBzdGFydHMgd2l0aCBbQmJT c1BwXSAoZm9yIGV4YW1wbGUsIGJpbi9mb28vYmFyKSwgQU5ECi0gICMgYi4geW91IGhhdmUgYS5v dXQgaW4geW91ciBjdXJyZW50IGRpcmVjdG9yeSAoYSBub3QgdW5jb21tb24gb2NjdXJyZW5jZSkK LSAgIwotICAjIHRoZW4gIm5tIC1mICRpbWFnZSIgc3VjY2VlZHMgYmVjYXVzZSAtZiBvbmx5IGxv b2tzIGF0IHRoZSBmaXJzdCBsZXR0ZXIgb2YKLSAgIyB0aGUgYXJndW1lbnQsIHdoaWNoIGxvb2tz IHZhbGlkIGJlY2F1c2UgaXQncyBbQmJTc1BwXSwgYW5kIHRoZW4gc2luY2UKLSAgIyB0aGVyZSdz IG5vIGltYWdlIHByb3ZpZGVkLCBpdCBsb29rcyBmb3IgYS5vdXQgYW5kIGZpbmRzIGl0LgotICAj Ci0gICMgVGhpcyByZWdleCBtYWtlcyBzdXJlIHRoYXQgJGltYWdlIHN0YXJ0cyB3aXRoIC4gb3Ig LywgZm9yY2luZyB0aGUgLWYKLSAgIyBwYXJzaW5nIHRvIGZhaWwgc2luY2UgLiBhbmQgLyBhcmUg bm90IHZhbGlkIGZvcm1hdHMuCi0gICRpbWFnZSA9fiBzI15bXi9dIy4vJCYjOwotCi0gICMgRm9y IGxpYmMgbGlicmFyaWVzLCB0aGUgY29weSBpbiAvdXNyL2xpYi9kZWJ1ZyBjb250YWlucyBkZWJ1 Z2dpbmcgc3ltYm9scwotICBteSAkZGVidWdnaW5nID0gRGVidWdnaW5nTGlicmFyeSgkaW1hZ2Up OwotICBpZiAoJGRlYnVnZ2luZykgewotICAgICRpbWFnZSA9ICRkZWJ1Z2dpbmc7Ci0gIH0KLQot ICBteSAkbm0gPSAkb2JqX3Rvb2xfbWFweyJubSJ9OwotICBteSAkY3BwZmlsdCA9ICRvYmpfdG9v bF9tYXB7ImMrK2ZpbHQifTsKLQotICAjIG5tIGNhbiBmYWlsIGZvciB0d28gcmVhc29uczogMSkg JGltYWdlIGlzbid0IGEgZGVidWcgbGlicmFyeTsgMikgbm0KLSAgIyBiaW5hcnkgZG9lc24ndCBz dXBwb3J0IC0tZGVtYW5nbGUuICBJbiBhZGRpdGlvbiwgZm9yIE9TIFggd2UgbmVlZAotICAjIHRv IHVzZSB0aGUgLWYgZmxhZyB0byBnZXQgJ2ZsYXQnIG5tIG91dHB1dCAob3RoZXJ3aXNlIHdlIGRv bid0IHNvcnQKLSAgIyBwcm9wZXJseSBhbmQgZ2V0IGluY29ycmVjdCByZXN1bHRzKS4gIFVuZm9y dHVuYXRlbHksIEdOVSBubSB1c2VzIC1mCi0gICMgaW4gYW4gaW5jb21wYXRpYmxlIHdheS4gIFNv IGZpcnN0IHdlIHRlc3Qgd2hldGhlciBvdXIgbm0gc3VwcG9ydHMKLSAgIyAtLWRlbWFuZ2xlIGFu ZCAtZi4KLSAgbXkgJGRlbWFuZ2xlX2ZsYWcgPSAiIjsKLSAgbXkgJGNwcGZpbHRfZmxhZyA9ICIi OwotICBteSAkdG9fZGV2bnVsbCA9ICI+JGRldl9udWxsIDI+JjEiOwotICBpZiAoc3lzdGVtKFNo ZWxsRXNjYXBlKCRubSwgIi0tZGVtYW5nbGUiLCAkaW1hZ2UpIC4gJHRvX2Rldm51bGwpID09IDAp IHsKLSAgICAjIEluIHRoaXMgbW9kZSwgd2UgZG8gIm5tIC0tZGVtYW5nbGUgPGZvbz4iCi0gICAg JGRlbWFuZ2xlX2ZsYWcgPSAiLS1kZW1hbmdsZSI7Ci0gICAgJGNwcGZpbHRfZmxhZyA9ICIiOwot ICB9IGVsc2lmIChzeXN0ZW0oU2hlbGxFc2NhcGUoJGNwcGZpbHQsICRpbWFnZSkgLiAkdG9fZGV2 bnVsbCkgPT0gMCkgewotICAgICMgSW4gdGhpcyBtb2RlLCB3ZSBkbyAibm0gPGZvbz4gfCBjKytm aWx0IgotICAgICRjcHBmaWx0X2ZsYWcgPSAiIHwgIiAuIFNoZWxsRXNjYXBlKCRjcHBmaWx0KTsK LSAgfTsKLSAgbXkgJGZsYXR0ZW5fZmxhZyA9ICIiOwotICBpZiAoc3lzdGVtKFNoZWxsRXNjYXBl KCRubSwgIi1mIiwgJGltYWdlKSAuICR0b19kZXZudWxsKSA9PSAwKSB7Ci0gICAgJGZsYXR0ZW5f ZmxhZyA9ICItZiI7Ci0gIH0KLQotICAjIEZpbmFsbHksIGluIHRoZSBjYXNlICRpbWFnaWUgaXNu J3QgYSBkZWJ1ZyBsaWJyYXJ5LCB3ZSB0cnkgYWdhaW4gd2l0aAotICAjIC1EIHRvIGF0IGxlYXN0 IGdldCAqZXhwb3J0ZWQqIHN5bWJvbHMuICBJZiB3ZSBjYW4ndCB1c2UgLS1kZW1hbmdsZSwKLSAg IyB3ZSB1c2UgYysrZmlsdCBpbnN0ZWFkLCBpZiBpdCBleGlzdHMgb24gdGhpcyBzeXN0ZW0uCi0g IG15IEBubV9jb21tYW5kcyA9IChTaGVsbEVzY2FwZSgkbm0sICItbiIsICRmbGF0dGVuX2ZsYWcs ICRkZW1hbmdsZV9mbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltYWdl KSAuICIgMj4kZGV2X251bGwgJGNwcGZpbHRfZmxhZyIsCi0gICAgICAgICAgICAgICAgICAgICBT aGVsbEVzY2FwZSgkbm0sICItRCIsICItbiIsICRmbGF0dGVuX2ZsYWcsICRkZW1hbmdsZV9mbGFn LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltYWdlKSAuICIgMj4kZGV2X251 bGwgJGNwcGZpbHRfZmxhZyIsCi0gICAgICAgICAgICAgICAgICAgICAjIDZubSBpcyBmb3IgR28g YmluYXJpZXMKLSAgICAgICAgICAgICAgICAgICAgIFNoZWxsRXNjYXBlKCI2bm0iLCAiJGltYWdl IikgLiAiIDI+JGRldl9udWxsIHwgc29ydCIsCi0gICAgICAgICAgICAgICAgICAgICApOwotCi0g ICMgSWYgdGhlIGV4ZWN1dGFibGUgaXMgYW4gTVMgV2luZG93cyBQREItZm9ybWF0IGV4ZWN1dGFi bGUsIHdlJ2xsCi0gICMgaGF2ZSBzZXQgdXAgb2JqX3Rvb2xfbWFwKCJubV9wZGIiKS4gIEluIHRo aXMgY2FzZSwgd2UgYWN0dWFsbHkKLSAgIyB3YW50IHRvIHVzZSBib3RoIHVuaXggbm0gYW5kIHdp bmRvd3Mtc3BlY2lmaWMgbm1fcGRiLCBzaW5jZQotICAjIFBEQi1mb3JtYXQgZXhlY3V0YWJsZXMg Y2FuIGFwcGFyZW50bHkgaW5jbHVkZSBkd2FyZiAubyBmaWxlcy4KLSAgaWYgKGV4aXN0cyAkb2Jq X3Rvb2xfbWFweyJubV9wZGIifSkgewotICAgIHB1c2goQG5tX2NvbW1hbmRzLAotICAgICAgICAg U2hlbGxFc2NhcGUoJG9ial90b29sX21hcHsibm1fcGRiIn0sICItLWRlbWFuZ2xlIiwgJGltYWdl KQotICAgICAgICAgLiAiIDI+JGRldl9udWxsIik7Ci0gIH0KLQotICBmb3JlYWNoIG15ICRubV9j b21tYW5kIChAbm1fY29tbWFuZHMpIHsKLSAgICBteSAkc3ltYm9sX3RhYmxlID0gR2V0UHJvY2Vk dXJlQm91bmRhcmllc1ZpYU5tKCRubV9jb21tYW5kLCAkcmVnZXhwKTsKLSAgICByZXR1cm4gJHN5 bWJvbF90YWJsZSBpZiAoJXskc3ltYm9sX3RhYmxlfSk7Ci0gIH0KLSAgbXkgJHN5bWJvbF90YWJs ZSA9IHt9OwotICByZXR1cm4gJHN5bWJvbF90YWJsZTsKLX0KLQotCi0jIFRoZSB0ZXN0IHZlY3Rv cnMgZm9yIEFkZHJlc3NBZGQvU3ViL0luYyBhcmUgOC0xNi1uaWJibGUgaGV4IHN0cmluZ3MuCi0j IFRvIG1ha2UgdGhlbSBtb3JlIHJlYWRhYmxlLCB3ZSBhZGQgdW5kZXJzY29yZXMgYXQgaW50ZXJl c3RpbmcgcGxhY2VzLgotIyBUaGlzIHJvdXRpbmUgcmVtb3ZlcyB0aGUgdW5kZXJzY29yZXMsIHBy b2R1Y2luZyB0aGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uCi0jIHVzZWQgYnkgamVwcm9mIHRv IHJlcHJlc2VudCBhZGRyZXNzZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgdGVzdGVkIHJvdXRpbmVz Lgotc3ViIENhbm9uaWNhbEhleCB7Ci0gIG15ICRhcmcgPSBzaGlmdDsKLSAgcmV0dXJuIGpvaW4g JycsIChzcGxpdCAnXycsJGFyZyk7Ci19Ci0KLQotIyBVbml0IHRlc3QgZm9yIEFkZHJlc3NBZGQ6 Ci1zdWIgQWRkcmVzc0FkZFVuaXRUZXN0IHsKLSAgbXkgJHRlc3RfZGF0YV84ID0gc2hpZnQ7Ci0g IG15ICR0ZXN0X2RhdGFfMTYgPSBzaGlmdDsKLSAgbXkgJGVycm9yX2NvdW50ID0gMDsKLSAgbXkg JGZhaWxfY291bnQgPSAwOwotICBteSAkcGFzc19jb3VudCA9IDA7Ci0gICMgcHJpbnQgU1RERVJS ICJBZGRyZXNzQWRkVW5pdFRlc3Q6ICIsIDErJCN7JHRlc3RfZGF0YV84fSwgIiB0ZXN0c1xuIjsK LQotICAjIEZpcnN0IGEgZmV3IDgtbmliYmxlIGFkZHJlc3Nlcy4gIE5vdGUgdGhhdCB0aGlzIGlt cGxlbWVudGF0aW9uIHVzZXMKLSAgIyBwbGFpbiBvbGQgYXJpdGhtZXRpYywgc28gYSBxdWljayBz YW5pdHkgY2hlY2sgYWxvbmcgd2l0aCB2ZXJpZnlpbmcgd2hhdAotICAjIGhhcHBlbnMgdG8gb3Zl cmZsb3cgKHdlIHdhbnQgaXQgdG8gd3JhcCk6Ci0gICRhZGRyZXNzX2xlbmd0aCA9IDg7Ci0gIGZv cmVhY2ggbXkgJHJvdyAoQHskdGVzdF9kYXRhXzh9KSB7Ci0gICAgaWYgKCRtYWluOjpvcHRfZGVi dWcgYW5kICRtYWluOjpvcHRfdGVzdCkgeyBwcmludCBTVERFUlIgIkB7JHJvd31cbiI7IH0KLSAg ICBteSAkc3VtID0gQWRkcmVzc0FkZCAoJHJvdy0+WzBdLCAkcm93LT5bMV0pOwotICAgIGlmICgk c3VtIG5lICRyb3ctPlsyXSkgewotICAgICAgcHJpbnRmIFNUREVSUiAiRVJST1I6ICVzICE9ICVz ICsgJXMgPSAlc1xuIiwgJHN1bSwKLSAgICAgICAgICAgICAkcm93LT5bMF0sICRyb3ctPlsxXSwg JHJvdy0+WzJdOwotICAgICAgKyskZmFpbF9jb3VudDsKLSAgICB9IGVsc2UgewotICAgICAgKysk cGFzc19jb3VudDsKLSAgICB9Ci0gIH0KLSAgcHJpbnRmIFNUREVSUiAiQWRkcmVzc0FkZCAzMi1i aXQgdGVzdHM6ICVkIHBhc3NlcywgJWQgZmFpbHVyZXNcbiIsCi0gICAgICAgICAkcGFzc19jb3Vu dCwgJGZhaWxfY291bnQ7Ci0gICRlcnJvcl9jb3VudCA9ICRmYWlsX2NvdW50OwotICAkZmFpbF9j b3VudCA9IDA7Ci0gICRwYXNzX2NvdW50ID0gMDsKLQotICAjIE5vdyAxNi1uaWJibGUgYWRkcmVz c2VzLgotICAkYWRkcmVzc19sZW5ndGggPSAxNjsKLSAgZm9yZWFjaCBteSAkcm93IChAeyR0ZXN0 X2RhdGFfMTZ9KSB7Ci0gICAgaWYgKCRtYWluOjpvcHRfZGVidWcgYW5kICRtYWluOjpvcHRfdGVz dCkgeyBwcmludCBTVERFUlIgIkB7JHJvd31cbiI7IH0KLSAgICBteSAkc3VtID0gQWRkcmVzc0Fk ZCAoQ2Fub25pY2FsSGV4KCRyb3ctPlswXSksIENhbm9uaWNhbEhleCgkcm93LT5bMV0pKTsKLSAg ICBteSAkZXhwZWN0ZWQgPSBqb2luICcnLCAoc3BsaXQgJ18nLCRyb3ctPlsyXSk7Ci0gICAgaWYg KCRzdW0gbmUgQ2Fub25pY2FsSGV4KCRyb3ctPlsyXSkpIHsKLSAgICAgIHByaW50ZiBTVERFUlIg IkVSUk9SOiAlcyAhPSAlcyArICVzID0gJXNcbiIsICRzdW0sCi0gICAgICAgICAgICAgJHJvdy0+ WzBdLCAkcm93LT5bMV0sICRyb3ctPlsyXTsKLSAgICAgICsrJGZhaWxfY291bnQ7Ci0gICAgfSBl bHNlIHsKLSAgICAgICsrJHBhc3NfY291bnQ7Ci0gICAgfQotICB9Ci0gIHByaW50ZiBTVERFUlIg IkFkZHJlc3NBZGQgNjQtYml0IHRlc3RzOiAlZCBwYXNzZXMsICVkIGZhaWx1cmVzXG4iLAotICAg ICAgICAgJHBhc3NfY291bnQsICRmYWlsX2NvdW50OwotICAkZXJyb3JfY291bnQgKz0gJGZhaWxf Y291bnQ7Ci0KLSAgcmV0dXJuICRlcnJvcl9jb3VudDsKLX0KLQotCi0jIFVuaXQgdGVzdCBmb3Ig QWRkcmVzc1N1YjoKLXN1YiBBZGRyZXNzU3ViVW5pdFRlc3QgewotICBteSAkdGVzdF9kYXRhXzgg PSBzaGlmdDsKLSAgbXkgJHRlc3RfZGF0YV8xNiA9IHNoaWZ0OwotICBteSAkZXJyb3JfY291bnQg PSAwOwotICBteSAkZmFpbF9jb3VudCA9IDA7Ci0gIG15ICRwYXNzX2NvdW50ID0gMDsKLSAgIyBw cmludCBTVERFUlIgIkFkZHJlc3NTdWJVbml0VGVzdDogIiwgMSskI3skdGVzdF9kYXRhXzh9LCAi IHRlc3RzXG4iOwotCi0gICMgRmlyc3QgYSBmZXcgOC1uaWJibGUgYWRkcmVzc2VzLiAgTm90ZSB0 aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gdXNlcwotICAjIHBsYWluIG9sZCBhcml0aG1ldGljLCBz byBhIHF1aWNrIHNhbml0eSBjaGVjayBhbG9uZyB3aXRoIHZlcmlmeWluZyB3aGF0Ci0gICMgaGFw cGVucyB0byBvdmVyZmxvdyAod2Ugd2FudCBpdCB0byB3cmFwKToKLSAgJGFkZHJlc3NfbGVuZ3Ro ID0gODsKLSAgZm9yZWFjaCBteSAkcm93IChAeyR0ZXN0X2RhdGFfOH0pIHsKLSAgICBpZiAoJG1h aW46Om9wdF9kZWJ1ZyBhbmQgJG1haW46Om9wdF90ZXN0KSB7IHByaW50IFNUREVSUiAiQHskcm93 fVxuIjsgfQotICAgIG15ICRzdW0gPSBBZGRyZXNzU3ViICgkcm93LT5bMF0sICRyb3ctPlsxXSk7 Ci0gICAgaWYgKCRzdW0gbmUgJHJvdy0+WzNdKSB7Ci0gICAgICBwcmludGYgU1RERVJSICJFUlJP UjogJXMgIT0gJXMgLSAlcyA9ICVzXG4iLCAkc3VtLAotICAgICAgICAgICAgICRyb3ctPlswXSwg JHJvdy0+WzFdLCAkcm93LT5bM107Ci0gICAgICArKyRmYWlsX2NvdW50OwotICAgIH0gZWxzZSB7 Ci0gICAgICArKyRwYXNzX2NvdW50OwotICAgIH0KLSAgfQotICBwcmludGYgU1RERVJSICJBZGRy ZXNzU3ViIDMyLWJpdCB0ZXN0czogJWQgcGFzc2VzLCAlZCBmYWlsdXJlc1xuIiwKLSAgICAgICAg ICRwYXNzX2NvdW50LCAkZmFpbF9jb3VudDsKLSAgJGVycm9yX2NvdW50ID0gJGZhaWxfY291bnQ7 Ci0gICRmYWlsX2NvdW50ID0gMDsKLSAgJHBhc3NfY291bnQgPSAwOwotCi0gICMgTm93IDE2LW5p YmJsZSBhZGRyZXNzZXMuCi0gICRhZGRyZXNzX2xlbmd0aCA9IDE2OwotICBmb3JlYWNoIG15ICRy b3cgKEB7JHRlc3RfZGF0YV8xNn0pIHsKLSAgICBpZiAoJG1haW46Om9wdF9kZWJ1ZyBhbmQgJG1h aW46Om9wdF90ZXN0KSB7IHByaW50IFNUREVSUiAiQHskcm93fVxuIjsgfQotICAgIG15ICRzdW0g PSBBZGRyZXNzU3ViIChDYW5vbmljYWxIZXgoJHJvdy0+WzBdKSwgQ2Fub25pY2FsSGV4KCRyb3ct PlsxXSkpOwotICAgIGlmICgkc3VtIG5lIENhbm9uaWNhbEhleCgkcm93LT5bM10pKSB7Ci0gICAg ICBwcmludGYgU1RERVJSICJFUlJPUjogJXMgIT0gJXMgLSAlcyA9ICVzXG4iLCAkc3VtLAotICAg ICAgICAgICAgICRyb3ctPlswXSwgJHJvdy0+WzFdLCAkcm93LT5bM107Ci0gICAgICArKyRmYWls X2NvdW50OwotICAgIH0gZWxzZSB7Ci0gICAgICArKyRwYXNzX2NvdW50OwotICAgIH0KLSAgfQot ICBwcmludGYgU1RERVJSICJBZGRyZXNzU3ViIDY0LWJpdCB0ZXN0czogJWQgcGFzc2VzLCAlZCBm YWlsdXJlc1xuIiwKLSAgICAgICAgICRwYXNzX2NvdW50LCAkZmFpbF9jb3VudDsKLSAgJGVycm9y X2NvdW50ICs9ICRmYWlsX2NvdW50OwotCi0gIHJldHVybiAkZXJyb3JfY291bnQ7Ci19Ci0KLQot IyBVbml0IHRlc3QgZm9yIEFkZHJlc3NJbmM6Ci1zdWIgQWRkcmVzc0luY1VuaXRUZXN0IHsKLSAg bXkgJHRlc3RfZGF0YV84ID0gc2hpZnQ7Ci0gIG15ICR0ZXN0X2RhdGFfMTYgPSBzaGlmdDsKLSAg bXkgJGVycm9yX2NvdW50ID0gMDsKLSAgbXkgJGZhaWxfY291bnQgPSAwOwotICBteSAkcGFzc19j b3VudCA9IDA7Ci0gICMgcHJpbnQgU1RERVJSICJBZGRyZXNzSW5jVW5pdFRlc3Q6ICIsIDErJCN7 JHRlc3RfZGF0YV84fSwgIiB0ZXN0c1xuIjsKLQotICAjIEZpcnN0IGEgZmV3IDgtbmliYmxlIGFk ZHJlc3Nlcy4gIE5vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIHVzZXMKLSAgIyBwbGFpbiBv bGQgYXJpdGhtZXRpYywgc28gYSBxdWljayBzYW5pdHkgY2hlY2sgYWxvbmcgd2l0aCB2ZXJpZnlp bmcgd2hhdAotICAjIGhhcHBlbnMgdG8gb3ZlcmZsb3cgKHdlIHdhbnQgaXQgdG8gd3JhcCk6Ci0g ICRhZGRyZXNzX2xlbmd0aCA9IDg7Ci0gIGZvcmVhY2ggbXkgJHJvdyAoQHskdGVzdF9kYXRhXzh9 KSB7Ci0gICAgaWYgKCRtYWluOjpvcHRfZGVidWcgYW5kICRtYWluOjpvcHRfdGVzdCkgeyBwcmlu dCBTVERFUlIgIkB7JHJvd31cbiI7IH0KLSAgICBteSAkc3VtID0gQWRkcmVzc0luYyAoJHJvdy0+ WzBdKTsKLSAgICBpZiAoJHN1bSBuZSAkcm93LT5bNF0pIHsKLSAgICAgIHByaW50ZiBTVERFUlIg IkVSUk9SOiAlcyAhPSAlcyArIDEgPSAlc1xuIiwgJHN1bSwKLSAgICAgICAgICAgICAkcm93LT5b MF0sICRyb3ctPls0XTsKLSAgICAgICsrJGZhaWxfY291bnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAg ICsrJHBhc3NfY291bnQ7Ci0gICAgfQotICB9Ci0gIHByaW50ZiBTVERFUlIgIkFkZHJlc3NJbmMg MzItYml0IHRlc3RzOiAlZCBwYXNzZXMsICVkIGZhaWx1cmVzXG4iLAotICAgICAgICAgJHBhc3Nf Y291bnQsICRmYWlsX2NvdW50OwotICAkZXJyb3JfY291bnQgPSAkZmFpbF9jb3VudDsKLSAgJGZh aWxfY291bnQgPSAwOwotICAkcGFzc19jb3VudCA9IDA7Ci0KLSAgIyBOb3cgMTYtbmliYmxlIGFk ZHJlc3Nlcy4KLSAgJGFkZHJlc3NfbGVuZ3RoID0gMTY7Ci0gIGZvcmVhY2ggbXkgJHJvdyAoQHsk dGVzdF9kYXRhXzE2fSkgewotICAgIGlmICgkbWFpbjo6b3B0X2RlYnVnIGFuZCAkbWFpbjo6b3B0 X3Rlc3QpIHsgcHJpbnQgU1RERVJSICJAeyRyb3d9XG4iOyB9Ci0gICAgbXkgJHN1bSA9IEFkZHJl c3NJbmMgKENhbm9uaWNhbEhleCgkcm93LT5bMF0pKTsKLSAgICBpZiAoJHN1bSBuZSBDYW5vbmlj YWxIZXgoJHJvdy0+WzRdKSkgewotICAgICAgcHJpbnRmIFNUREVSUiAiRVJST1I6ICVzICE9ICVz ICsgMSA9ICVzXG4iLCAkc3VtLAotICAgICAgICAgICAgICRyb3ctPlswXSwgJHJvdy0+WzRdOwot ICAgICAgKyskZmFpbF9jb3VudDsKLSAgICB9IGVsc2UgewotICAgICAgKyskcGFzc19jb3VudDsK LSAgICB9Ci0gIH0KLSAgcHJpbnRmIFNUREVSUiAiQWRkcmVzc0luYyA2NC1iaXQgdGVzdHM6ICVk IHBhc3NlcywgJWQgZmFpbHVyZXNcbiIsCi0gICAgICAgICAkcGFzc19jb3VudCwgJGZhaWxfY291 bnQ7Ci0gICRlcnJvcl9jb3VudCArPSAkZmFpbF9jb3VudDsKLQotICByZXR1cm4gJGVycm9yX2Nv dW50OwotfQotCi0KLSMgRHJpdmVyIGZvciB1bml0IHRlc3RzLgotIyBDdXJyZW50bHkganVzdCB0 aGUgYWRkcmVzcyBhZGQvc3VidHJhY3QvaW5jcmVtZW50IHJvdXRpbmVzIGZvciA2NC1iaXQuCi1z dWIgUnVuVW5pdFRlc3RzIHsKLSAgbXkgJGVycm9yX2NvdW50ID0gMDsKLQotICAjIFRoaXMgaXMg YSBsaXN0IG9mIHR1cGxlcyBbYSwgYiwgYStiLCBhLWIsIGErMV0KLSAgbXkgJHVuaXRfdGVzdF9k YXRhXzggPSBbCi0gICAgW3F3KGFhYWFhYWFhIDUwNTA1MDUwIGZhZmFmYWZhIDVhNWE1YTVhIGFh YWFhYWFiKV0sCi0gICAgW3F3KDUwNTA1MDUwIGFhYWFhYWFhIGZhZmFmYWZhIGE1YTVhNWE2IDUw NTA1MDUxKV0sCi0gICAgW3F3KGZmZmZmZmZmIGFhYWFhYWFhIGFhYWFhYWE5IDU1NTU1NTU1IDAw MDAwMDAwKV0sCi0gICAgW3F3KDAwMDAwMDAxIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAyIDAw MDAwMDAyKV0sCi0gICAgW3F3KDAwMDAwMDAxIGZmZmZmZmYwIGZmZmZmZmYxIDAwMDAwMDExIDAw MDAwMDAyKV0sCi0gIF07Ci0gIG15ICR1bml0X3Rlc3RfZGF0YV8xNiA9IFsKLSAgICAjIFRoZSBp bXBsZW1lbnRhdGlvbiBoYW5kbGVzIGRhdGEgaW4gNy1uaWJibGUgY2h1bmtzLCBzbyB0aG9zZSBh cmUgdGhlCi0gICAgIyBpbnRlcmVzdGluZyBib3VuZGFyaWVzLgotICAgIFtxdyhhYWFhYWFhYSA1 MDUwNTA1MAotICAgICAgICAwMF8wMDAwMDBmX2FmYWZhZmEgMDBfMDAwMDAwNV9hNWE1YTVhIDAw XzAwMDAwMGFfYWFhYWFhYildLAotICAgIFtxdyg1MDUwNTA1MCBhYWFhYWFhYQotICAgICAgICAw MF8wMDAwMDBmX2FmYWZhZmEgZmZfZmZmZmZmYV81YTVhNWE2IDAwXzAwMDAwMDVfMDUwNTA1MSld LAotICAgIFtxdyhmZmZmZmZmZiBhYWFhYWFhYQotICAgICAgICAwMF8wMDAwMDFhX2FhYWFhYTkg MDBfMDAwMDAwNV81NTU1NTU1IDAwXzAwMDAwMTBfMDAwMDAwMCldLAotICAgIFtxdygwMDAwMDAw MSBmZmZmZmZmZgotICAgICAgICAwMF8wMDAwMDEwXzAwMDAwMDAgZmZfZmZmZmZmMF8wMDAwMDAy IDAwXzAwMDAwMDBfMDAwMDAwMildLAotICAgIFtxdygwMDAwMDAwMSBmZmZmZmZmMAotICAgICAg ICAwMF8wMDAwMDBmX2ZmZmZmZjEgZmZfZmZmZmZmMF8wMDAwMDExIDAwXzAwMDAwMDBfMDAwMDAw MildLAotCi0gICAgW3F3KDAwX2EwMDAwMGFfYWFhYWFhYSA1MDUwNTA1MAotICAgICAgICAwMF9h MDAwMDBmX2FmYWZhZmEgMDBfYTAwMDAwNV9hNWE1YTVhIDAwX2EwMDAwMGFfYWFhYWFhYildLAot ICAgIFtxdygwZl9mZmYwMDA1XzA1MDUwNTAgYWFhYWFhYWEKLSAgICAgICAgMGZfZmZmMDAwZl9h ZmFmYWZhIDBmX2ZmZWZmZmFfNWE1YTVhNiAwZl9mZmYwMDA1XzA1MDUwNTEpXSwKLSAgICBbcXco MDBfMDAwMDAwZl9mZmZmZmZmIDAxXzgwMDAwMGFfYWFhYWFhYQotICAgICAgICAwMV84MDAwMDFh X2FhYWFhYTkgZmVfODAwMDAwNV81NTU1NTU1IDAwXzAwMDAwMTBfMDAwMDAwMCldLAotICAgIFtx dygwMF8wMDAwMDAwXzAwMDAwMDEgZmZfZmZmZmZmZl9mZmZmZmZmCi0gICAgICAgIDAwXzAwMDAw MDBfMDAwMDAwMCAwMF8wMDAwMDAwXzAwMDAwMDIgMDBfMDAwMDAwMF8wMDAwMDAyKV0sCi0gICAg W3F3KDAwXzAwMDAwMDBfMDAwMDAwMSBmZl9mZmZmZmZmX2ZmZmZmZjAKLSAgICAgICAgZmZfZmZm ZmZmZl9mZmZmZmYxIDAwXzAwMDAwMDBfMDAwMDAxMSAwMF8wMDAwMDAwXzAwMDAwMDIpXSwKLSAg XTsKLQotICAkZXJyb3JfY291bnQgKz0gQWRkcmVzc0FkZFVuaXRUZXN0KCR1bml0X3Rlc3RfZGF0 YV84LCAkdW5pdF90ZXN0X2RhdGFfMTYpOwotICAkZXJyb3JfY291bnQgKz0gQWRkcmVzc1N1YlVu aXRUZXN0KCR1bml0X3Rlc3RfZGF0YV84LCAkdW5pdF90ZXN0X2RhdGFfMTYpOwotICAkZXJyb3Jf Y291bnQgKz0gQWRkcmVzc0luY1VuaXRUZXN0KCR1bml0X3Rlc3RfZGF0YV84LCAkdW5pdF90ZXN0 X2RhdGFfMTYpOwotICBpZiAoJGVycm9yX2NvdW50ID4gMCkgewotICAgIHByaW50IFNUREVSUiAk ZXJyb3JfY291bnQsICIgZXJyb3JzOiBGQUlMRURcbiI7Ci0gIH0gZWxzZSB7Ci0gICAgcHJpbnQg U1RERVJSICJQQVNTXG4iOwotICB9Ci0gIGV4aXQgKCRlcnJvcl9jb3VudCk7Ci19CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYnVpbGQtYXV4L2Nv bmZpZy5ndWVzcyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2J1aWxk LWF1eC9jb25maWcuZ3Vlc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY3NzI3MDIu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYnVp bGQtYXV4L2NvbmZpZy5ndWVzcworKysgL2Rldi9udWxsCkBAIC0xLDE3MDEgKzAsMCBAQAotIyEg L2Jpbi9zaAotIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgotIyAg IENvcHlyaWdodCAxOTkyLTIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLXRp bWVzdGFtcD0nMjAyMS0wMS0wMScKLQotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotIyB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwg YnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSMKLSMgQXMgYSBzcGVjaWFs IGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBk aXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEK LSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGlu Y2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVz ZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdAotIyBwcm9ncmFtLiAgVGhpcyBFeGNlcHRpb24gaXMgYW4g YWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNwotIyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCi0jCi0jIE9yaWdpbmFsbHkg d3JpdHRlbiBieSBQZXIgQm90aG5lcjsgbWFpbnRhaW5lZCBzaW5jZSAyMDAwIGJ5IEJlbiBFbGxp c3Rvbi4KLSMKLSMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0 IGZyb206Ci0jIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jb25maWcuZ2l0L3Bs YWluL2NvbmZpZy5ndWVzcwotIwotIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0 Y2hlc0BnbnUub3JnPi4KLQotCi1tZT0kKGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCcpCi0K LXVzYWdlPSJcCi1Vc2FnZTogJDAgW09QVElPTl0KLQotT3V0cHV0IHRoZSBjb25maWd1cmF0aW9u IG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgotCi1PcHRpb25zOgotICAtaCwg LS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLXQsIC0tdGltZS1z dGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAotICAtdiwg LS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotCi1SZXBvcnQg YnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgotCi12ZXJzaW9u PSJcCi1HTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQotCi1PcmlnaW5hbGx5IHdyaXR0ZW4g YnkgUGVyIEJvdGhuZXIuCi1Db3B5cmlnaHQgMTk5Mi0yMDIxIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgotCi1UaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBj b3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotd2FycmFudHk7IG5vdCBldmVuIGZvciBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgotCi1o ZWxwPSIKLVRyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLQotIyBQYXJz ZSBjb21tYW5kIGxpbmUKLXdoaWxlIHRlc3QgJCMgLWd0IDAgOyBkbwotICBjYXNlICQxIGluCi0g ICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKLSAgICAgICBlY2hvICIkdGltZXN0YW1w IiA7IGV4aXQgOzsKLSAgICAtLXZlcnNpb24gfCAtdiApCi0gICAgICAgZWNobyAiJHZlcnNpb24i IDsgZXhpdCA7OwotICAgIC0taGVscCB8IC0taCogfCAtaCApCi0gICAgICAgZWNobyAiJHVzYWdl IjsgZXhpdCA7OwotICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZwotICAgICAg IHNoaWZ0OyBicmVhayA7OwotICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KLSAgICAgICBi cmVhayA7OwotICAgIC0qICkKLSAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhl bHAiID4mMgotICAgICAgIGV4aXQgMSA7OwotICAgICogKQotICAgICAgIGJyZWFrIDs7Ci0gIGVz YWMKLWRvbmUKLQotaWYgdGVzdCAkIyAhPSAwOyB0aGVuCi0gIGVjaG8gIiRtZTogdG9vIG1hbnkg YXJndW1lbnRzJGhlbHAiID4mMgotICBleGl0IDEKLWZpCi0KLSMgQ0NfRk9SX0JVSUxEIC0tIGNv bXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKLSMgY29t cGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVx dWlyZXMKLSMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNl ZSBiZWxvdywgaXQgaXMgYQotIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBm YXNoaW9uLgotCi0jIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1l ZCBgSE9TVF9DQycuIFdlIHN0aWxsCi0jIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0 IGlzIGRlcHJlY2F0ZWQuCi0KLSMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNw aXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KLQotdG1wPQotIyBzaGVsbGNoZWNrIGRpc2FibGU9 U0MyMTcyCi10cmFwICd0ZXN0IC16ICIkdG1wIiB8fCBybSAtZnIgIiR0bXAiJyAwIDEgMiAxMyAx NQotCi1zZXRfY2NfZm9yX2J1aWxkKCkgewotICAgICMgcHJldmVudCBtdWx0aXBsZSBjYWxscyBp ZiAkdG1wIGlzIGFscmVhZHkgc2V0Ci0gICAgdGVzdCAiJHRtcCIgJiYgcmV0dXJuIDAKLSAgICA6 ICIke1RNUERJUj0vdG1wfSIKLSAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMzkKLSAgICB7 IHRtcD0kKCAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rl di9udWxsKSAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKLQl7IHRl c3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3 ICYmIG1rZGlyICIkdG1wIiAyPi9kZXYvbnVsbCkgOyB9IHx8Ci0JeyB0bXA9JFRNUERJUi9jZy0k JCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIiAyPi9kZXYvbnVsbCkgJiYgZWNobyAiV2Fy bmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKLQl7IGVj aG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIg PiYyIDsgZXhpdCAxIDsgfQotICAgIGR1bW15PSR0bXAvZHVtbXkKLSAgICBjYXNlICR7Q0NfRk9S X0JVSUxELX0sJHtIT1NUX0NDLX0sJHtDQy19IGluCi0JLCwpICAgIGVjaG8gImludCB4OyIgPiAi JGR1bW15LmMiCi0JICAgICAgIGZvciBkcml2ZXIgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbwotCQkg ICBpZiAoJGRyaXZlciAtYyAtbyAiJGR1bW15Lm8iICIkZHVtbXkuYyIpID4vZGV2L251bGwgMj4m MSA7IHRoZW4KLQkJICAgICAgIENDX0ZPUl9CVUlMRD0iJGRyaXZlciIKLQkJICAgICAgIGJyZWFr Ci0JCSAgIGZpCi0JICAgICAgIGRvbmUKLQkgICAgICAgaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQi ID0geCA7IHRoZW4KLQkJICAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kCi0JICAgICAg IGZpCi0JICAgICAgIDs7Ci0JLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKLQksKiwqKSAgQ0Nf Rk9SX0JVSUxEPSRIT1NUX0NDIDs7Ci0gICAgZXNhYwotfQotCi0jIFRoaXMgaXMgbmVlZGVkIHRv IGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNl LgotIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCi1pZiB0ZXN0IC1mIC8uYXR0 YmluL3VuYW1lIDsgdGhlbgotCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAotZmkK LQotVU5BTUVfTUFDSElORT0kKCAodW5hbWUgLW0pIDI+L2Rldi9udWxsKSB8fCBVTkFNRV9NQUNI SU5FPXVua25vd24KLVVOQU1FX1JFTEVBU0U9JCggKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCkgfHwg VU5BTUVfUkVMRUFTRT11bmtub3duCi1VTkFNRV9TWVNURU09JCggKHVuYW1lIC1zKSAyPi9kZXYv bnVsbCkgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KLVVOQU1FX1ZFUlNJT049JCggKHVuYW1lIC12 KSAyPi9kZXYvbnVsbCkgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCi0KLWNhc2UgIiRVTkFNRV9T WVNURU0iIGluCi1MaW51eHxHTlV8R05VLyopCi0JTElCQz11bmtub3duCi0KLQlzZXRfY2NfZm9y X2J1aWxkCi0JY2F0IDw8LUVPRiA+ICIkZHVtbXkuYyIKLQkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4K LQkjaWYgZGVmaW5lZChfX1VDTElCQ19fKQotCUxJQkM9dWNsaWJjCi0JI2VsaWYgZGVmaW5lZChf X2RpZXRsaWJjX18pCi0JTElCQz1kaWV0bGliYwotCSNlbGlmIGRlZmluZWQoX19HTElCQ19fKQot CUxJQkM9Z251Ci0JI2Vsc2UKLQkjaW5jbHVkZSA8c3RkYXJnLmg+Ci0JLyogRmlyc3QgaGV1cmlz dGljIHRvIGRldGVjdCBtdXNsIGxpYmMuICAqLwotCSNpZmRlZiBfX0RFRklORURfdmFfbGlzdAot CUxJQkM9bXVzbAotCSNlbmRpZgotCSNlbmRpZgotCUVPRgotCWV2YWwgIiQoJENDX0ZPUl9CVUlM RCAtRSAiJGR1bW15LmMiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnIHwgc2VkICdzLCAsLGcn KSIKLQotCSMgU2Vjb25kIGhldXJpc3RpYyB0byBkZXRlY3QgbXVzbCBsaWJjLgotCWlmIFsgIiRM SUJDIiA9IHVua25vd24gXSAmJgotCSAgIGNvbW1hbmQgLXYgbGRkID4vZGV2L251bGwgJiYKLQkg ICBsZGQgLS12ZXJzaW9uIDI+JjEgfCBncmVwIC1xIF5tdXNsOyB0aGVuCi0JCUxJQkM9bXVzbAot CWZpCi0KLQkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sg Z2xpYmMuCi0JIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgotCWlmIFsgIiRMSUJDIiA9 IHVua25vd24gXTsgdGhlbgotCQlMSUJDPWdudQotCWZpCi0JOzsKLWVzYWMKLQotIyBOb3RlOiBv cmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZl LgotCi1jYXNlICIkVU5BTUVfTUFDSElORTokVU5BTUVfU1lTVEVNOiRVTkFNRV9SRUxFQVNFOiRV TkFNRV9WRVJTSU9OIiBpbgotICAgICo6TmV0QlNEOio6KikKLQkjIE5ldEJTRCAobmJzZCkgdGFy Z2V0cyBzaG91bGQgKHdoZXJlIGFwcGxpY2FibGUpIG1hdGNoIG9uZSBvcgotCSMgbW9yZSBvZiB0 aGUgdHVwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAotCSMgKi0qLW5ldGJz ZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5Ci0JIyBz d2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCi0JIyBvYmpl Y3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAotCSMgY29tcGF0aWJp bGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQotCSMgb2Jq ZWN0IGZpbGUgZm9ybWF0LgotCSMKLQkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJs eSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKLQkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdh eXMgc2V0IGl0IHRvICJ1bmtub3duIi4KLQlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2Fy Y2giCi0JVU5BTUVfTUFDSElORV9BUkNIPSQoICh1bmFtZSAtcCAyPi9kZXYvbnVsbCB8fCBcCi0J ICAgICIvc2Jpbi8kc3lzY3RsIiAyPi9kZXYvbnVsbCB8fCBcCi0JICAgICIvdXNyL3NiaW4vJHN5 c2N0bCIgMj4vZGV2L251bGwgfHwgXAotCSAgICBlY2hvIHVua25vd24pKQotCWNhc2UgIiRVTkFN RV9NQUNISU5FX0FSQ0giIGluCi0JICAgIGFhcmNoNjRlYikgbWFjaGluZT1hYXJjaDY0X2JlLXVu a25vd24gOzsKLQkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OwotCSAgICBhcm0q KSBtYWNoaW5lPWFybS11bmtub3duIDs7Ci0JICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3du IDs7Ci0JICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKLQkgICAgc2g1ZWwpIG1hY2hp bmU9c2g1bGUtdW5rbm93biA7OwotCSAgICBlYXJtdiopCi0JCWFyY2g9JChlY2hvICIkVU5BTUVf TUFDSElORV9BUkNIIiB8IHNlZCAtZSAncyxeZVwoYXJtdlswLTldXCkuKiQsXDEsJykKLQkJZW5k aWFuPSQoZWNobyAiJFVOQU1FX01BQ0hJTkVfQVJDSCIgfCBzZWQgLW5lICdzLF4uKlwoZWJcKSQs XDEscCcpCi0JCW1hY2hpbmU9IiR7YXJjaH0ke2VuZGlhbn0iLXVua25vd24KLQkJOzsKLQkgICAg KikgbWFjaGluZT0iJFVOQU1FX01BQ0hJTkVfQVJDSCItdW5rbm93biA7OwotCWVzYWMKLQkjIFRo ZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dp dGNoZWQKLQkjIHRvIEVMRiByZWNlbnRseSAob3Igd2lsbCBpbiB0aGUgZnV0dXJlKSBhbmQgQUJJ LgotCWNhc2UgIiRVTkFNRV9NQUNISU5FX0FSQ0giIGluCi0JICAgIGVhcm0qKQotCQlvcz1uZXRi c2RlbGYKLQkJOzsKLQkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCi0J CXNldF9jY19mb3JfYnVpbGQKLQkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAt IDI+L2Rldi9udWxsIFwKLQkJCXwgZ3JlcCAtcSBfX0VMRl9fCi0JCXRoZW4KLQkJICAgICMgT25j ZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRi c2Rhb3V0KS4KLQkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPwotCQkgICAg b3M9bmV0YnNkCi0JCWVsc2UKLQkJICAgIG9zPW5ldGJzZGVsZgotCQlmaQotCQk7OwotCSAgICAq KQotCQlvcz1uZXRic2QKLQkJOzsKLQllc2FjCi0JIyBEZXRlcm1pbmUgQUJJIHRhZ3MuCi0JY2Fz ZSAiJFVOQU1FX01BQ0hJTkVfQVJDSCIgaW4KLQkgICAgZWFybSopCi0JCWV4cHI9J3MvXmVhcm12 WzAtOV0vLWVhYmkvO3MvZWIkLy8nCi0JCWFiaT0kKGVjaG8gIiRVTkFNRV9NQUNISU5FX0FSQ0gi IHwgc2VkIC1lICIkZXhwciIpCi0JCTs7Ci0JZXNhYwotCSMgVGhlIE9TIHJlbGVhc2UKLQkjIERl YmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAot CSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5l ZWQKLQkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQg d2l0aCBhCi0JIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCi0JY2Fz ZSAiJFVOQU1FX1ZFUlNJT04iIGluCi0JICAgIERlYmlhbiopCi0JCXJlbGVhc2U9Jy1nbnUnCi0J CTs7Ci0JICAgICopCi0JCXJlbGVhc2U9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUg J3MvWy1fXS4qLy8nIHwgY3V0IC1kLiAtZjEsMikKLQkJOzsKLQllc2FjCi0JIyBTaW5jZSBDUFVf VFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06Ci0JIyBjb250YWlucyBy ZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06Ci0JIyBDUFVfVFlQRS1NQU5V RkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgotCWVjaG8gIiRtYWNoaW5lLSR7b3N9 JHtyZWxlYXNlfSR7YWJpLX0iCi0JZXhpdCA7OwotICAgICo6Qml0cmlnOio6KikKLQlVTkFNRV9N QUNISU5FX0FSQ0g9JChhcmNoIHwgc2VkICdzL0JpdHJpZy4vLycpCi0JZWNobyAiJFVOQU1FX01B Q0hJTkVfQVJDSCItdW5rbm93bi1iaXRyaWciJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAg ICo6T3BlbkJTRDoqOiopCi0JVU5BTUVfTUFDSElORV9BUkNIPSQoYXJjaCB8IHNlZCAncy9PcGVu QlNELi8vJykKLQllY2hvICIkVU5BTUVfTUFDSElORV9BUkNIIi11bmtub3duLW9wZW5ic2QiJFVO QU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgICo6TGliZXJ0eUJTRDoqOiopCi0JVU5BTUVfTUFD SElORV9BUkNIPSQoYXJjaCB8IHNlZCAncy9eLipCU0RcLi8vJykKLQllY2hvICIkVU5BTUVfTUFD SElORV9BUkNIIi11bmtub3duLWxpYmVydHlic2QiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7Owot ICAgICo6TWlkbmlnaHRCU0Q6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLW1p ZG5pZ2h0YnNkIiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICAqOmVra29CU0Q6KjoqKQot CWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWVra29ic2QiJFVOQU1FX1JFTEVBU0UiCi0J ZXhpdCA7OwotICAgICo6U29saWRCU0Q6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtu b3duLXNvbGlkYnNkIiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICAqOk9TMTA4Oio6KikK LQllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1vczEwOF8iJFVOQU1FX1JFTEVBU0UiCi0J ZXhpdCA7OwotICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLW1p cmJzZCIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgKjpNaXJCU0Q6KjoqKQotCWVjaG8g IiRVTkFNRV9NQUNISU5FIi11bmtub3duLW1pcmJzZCIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7 Ci0gICAgKjpTb3J0aXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLXNvcnRp eAotCWV4aXQgOzsKLSAgICAqOlR3aXp6bGVyOio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSIt dW5rbm93bi10d2l6emxlcgotCWV4aXQgOzsKLSAgICAqOlJlZG94Oio6KikKLQllY2hvICIkVU5B TUVfTUFDSElORSItdW5rbm93bi1yZWRveAotCWV4aXQgOzsKLSAgICBtaXBzOk9TRjE6Ki4qKQot CWVjaG8gbWlwcy1kZWMtb3NmMQotCWV4aXQgOzsKLSAgICBhbHBoYTpPU0YxOio6KikKLQljYXNl ICRVTkFNRV9SRUxFQVNFIGluCi0JKjQuMCkKLQkJVU5BTUVfUkVMRUFTRT0kKC91c3Ivc2Jpbi9z aXplciAtdiB8IGF3ayAne3ByaW50ICQzfScpCi0JCTs7Ci0JKjUuKikKLQkJVU5BTUVfUkVMRUFT RT0kKC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fScpCi0JCTs7Ci0JZXNhYwot CSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxh YmxlIG9uCi0JIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAg SSBob3BlIHRoYXQKLQkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMg Y29kZSBwaXBlcyB0aGUgQ1BVCi0JIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25s eSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCi0JQUxQSEFfQ1BVX1RZUEU9JCgvdXNyL3NiaW4v cHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4q JC9cMS9wJyB8IGhlYWQgLW4gMSkKLQljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCi0JICAgICJF VjQgKDIxMDY0KSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKLQkgICAgIkVWNC41ICgyMTA2 NCkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhIDs7Ci0JICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCki KQotCQlVTkFNRV9NQUNISU5FPWFscGhhIDs7Ci0JICAgICJFVjUgKDIxMTY0KSIpCi0JCVVOQU1F X01BQ0hJTkU9YWxwaGFldjUgOzsKLQkgICAgIkVWNS42ICgyMTE2NEEpIikKLQkJVU5BTUVfTUFD SElORT1hbHBoYWV2NTYgOzsKLQkgICAgIkVWNS42ICgyMTE2NFBDKSIpCi0JCVVOQU1FX01BQ0hJ TkU9YWxwaGFwY2E1NiA7OwotCSAgICAiRVY1LjcgKDIxMTY0UEMpIikKLQkJVU5BTUVfTUFDSElO RT1hbHBoYXBjYTU3IDs7Ci0JICAgICJFVjYgKDIxMjY0KSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxw aGFldjYgOzsKLQkgICAgIkVWNi43ICgyMTI2NEEpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2 NjcgOzsKLQkgICAgIkVWNi44Q0IgKDIxMjY0QykiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY2 OCA7OwotCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCi0JCVVOQU1FX01BQ0hJTkU9YWxwaGFldjY4 IDs7Ci0JICAgICJFVjYuOENYICgyMTI2NEQpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2Njgg OzsKLQkgICAgIkVWNi45QSAoMjEyNjQvRVY2OUEpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2 NjkgOzsKLQkgICAgIkVWNyAoMjEzNjQpIikKLQkJVU5BTUVfTUFDSElORT1hbHBoYWV2NyA7Owot CSAgICAiRVY3LjkgKDIxMzY0QSkiKQotCQlVTkFNRV9NQUNISU5FPWFscGhhZXY3OSA7OwotCWVz YWMKLQkjIEEgUG4ubiB2ZXJzaW9uIGlzIGEgcGF0Y2hlZCB2ZXJzaW9uLgotCSMgQSBWbi5uIHZl cnNpb24gaXMgYSByZWxlYXNlZCB2ZXJzaW9uLgotCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxl YXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCi0JIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVh c2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCi0JIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUg LXIuCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLWRlYy1vc2YiJChlY2hvICIkVU5BTUVfUkVMRUFT RSIgfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KSIKLQkjIFJlc2V0IEVYSVQgdHJhcCBiZWZvcmUg ZXhpdGluZyB0byBhdm9pZCBzcHVyaW91cyBub24temVybyBleGl0IGNvZGUuCi0JZXhpdGNvZGU9 JD8KLQl0cmFwICcnIDAKLQlleGl0ICRleGl0Y29kZSA7OwotICAgIEFtaWdhKjpVTklYX1N5c3Rl bV9WOjQuMDoqKQotCWVjaG8gbTY4ay11bmtub3duLXN5c3Y0Ci0JZXhpdCA7OwotICAgICo6W0Fh XW1pZ2FbT29dW1NzXToqOiopCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tYW1pZ2Fv cwotCWV4aXQgOzsKLSAgICAqOltNbV1vcnBoW09vXVtTc106KjoqKQotCWVjaG8gIiRVTkFNRV9N QUNISU5FIi11bmtub3duLW1vcnBob3MKLQlleGl0IDs7Ci0gICAgKjpPUy8zOTA6KjoqKQotCWVj aG8gaTM3MC1pYm0tb3BlbmVkaXRpb24KLQlleGl0IDs7Ci0gICAgKjp6L1ZNOio6KikKLQllY2hv IHMzOTAtaWJtLXp2bW9lCi0JZXhpdCA7OwotICAgICo6T1M0MDA6KjoqKQotCWVjaG8gcG93ZXJw Yy1pYm0tb3M0MDAKLQlleGl0IDs7Ci0gICAgYXJtOlJJU0MqOjEuWzAxMl0qOip8YXJtOnJpc2Np eDoxLlswMTJdKjoqKQotCWVjaG8gYXJtLWFjb3JuLXJpc2NpeCIkVU5BTUVfUkVMRUFTRSIKLQll eGl0IDs7Ci0gICAgYXJtKjpyaXNjb3M6KjoqfGFybSo6UklTQ09TOio6KikKLQllY2hvIGFybS11 bmtub3duLXJpc2NvcwotCWV4aXQgOzsKLSAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAw MDpISS1VWC9NUFA6KjoqKQotCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKLQlleGl0IDs7 Ci0gICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4 KjoqOiopCi0JIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRy aWJ1dGVkIE1JUyBhbmQgTklMRS4KLQlpZiB0ZXN0ICIkKCAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2 L251bGwpIiA9IGF0dCA7IHRoZW4KLQkJZWNobyBweXJhbWlkLXB5cmFtaWQtc3lzdjMKLQllbHNl Ci0JCWVjaG8gcHlyYW1pZC1weXJhbWlkLWJzZAotCWZpCi0JZXhpdCA7OwotICAgIE5JTEUqOio6 KjpkY29zeCkKLQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zdnI0Ci0JZXhpdCA7OwotICAgIERSUz82 MDAwOnVuaXg6NC4wOjYqKQotCWVjaG8gc3BhcmMtaWNsLW54NgotCWV4aXQgOzsKLSAgICBEUlM/ NjAwMDpVTklYX1NWOjQuMio6NyogfCBEUlM/NjAwMDppc2lzOjQuMio6NyopCi0JY2FzZSAkKC91 c3IvYmluL3VuYW1lIC1wKSBpbgotCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0 IDs7Ci0JZXNhYyA7OwotICAgIHMzOTB4OlN1bk9TOio6KikKLQllY2hvICIkVU5BTUVfTUFDSElO RSItaWJtLXNvbGFyaXMyIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1teLl0q Ly8nKSIKLQlleGl0IDs7Ci0gICAgc3VuNEg6U3VuT1M6NS4qOiopCi0JZWNobyBzcGFyYy1oYWwt c29sYXJpczIiJChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLy8nKSIKLQll eGl0IDs7Ci0gICAgc3VuNCo6U3VuT1M6NS4qOiogfCB0YWRwb2xlKjpTdW5PUzo1Lio6KikKLQll Y2hvIHNwYXJjLXN1bi1zb2xhcmlzMiIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAn cy9bXi5dKi8vJykiCi0JZXhpdCA7OwotICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVu OkF1cm9yYVVYOjUuKjoqKQotCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCIkVU5BTUVfUkVMRUFTRSIK LQlleGl0IDs7Ci0gICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCi0J c2V0X2NjX2Zvcl9idWlsZAotCVNVTl9BUkNIPWkzODYKLQkjIElmIHRoZXJlIGlzIGEgY29tcGls ZXIsIHNlZSBpZiBpdCBpcyBjb25maWd1cmVkIGZvciA2NC1iaXQgb2JqZWN0cy4KLQkjIE5vdGUg dGhhdCB0aGUgU3VuIGNjIGRvZXMgbm90IHR1cm4gX19MUDY0X18gaW50byAxIGxpa2UgZ2NjIGRv ZXMuCi0JIyBUaGlzIHRlc3Qgd29ya3MgZm9yIGJvdGggY29tcGlsZXJzLgotCWlmIHRlc3QgIiRD Q19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kOyB0aGVuCi0JICAgIGlmIChlY2hvICcj aWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCi0J CShDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKLQkJZ3JlcCBJ U182NEJJVF9BUkNIID4vZGV2L251bGwKLQkgICAgdGhlbgotCQlTVU5fQVJDSD14ODZfNjQKLQkg ICAgZmkKLQlmaQotCWVjaG8gIiRTVU5fQVJDSCItcGMtc29sYXJpczIiJChlY2hvICIkVU5BTUVf UkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLy8nKSIKLQlleGl0IDs7Ci0gICAgc3VuNCo6U3VuT1M6 Nio6KikKLQkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5 IHRvIGNhbm9uaWNhbGl6ZQotCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQg U3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0Ci0JIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2Ug U29sYXJpcyB0aGFuIFN1bk9TNC4KLQllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMyIkKGVjaG8gIiRV TkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSovLycpIgotCWV4aXQgOzsKLSAgICBzdW40KjpT dW5PUzoqOiopCi0JY2FzZSAiJCgvdXNyL2Jpbi9hcmNoIC1rKSIgaW4KLQkgICAgU2VyaWVzKnxT NCopCi0JCVVOQU1FX1JFTEVBU0U9JCh1bmFtZSAtdikKLQkJOzsKLQllc2FjCi0JIyBKYXBhbmVz ZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwn LgotCWVjaG8gc3BhcmMtc3VuLXN1bm9zIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAn cy8tL18vJykiCi0JZXhpdCA7OwotICAgIHN1bjMqOlN1bk9TOio6KikKLQllY2hvIG02OGstc3Vu LXN1bm9zIiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICBzdW4qOio6NC4yQlNEOiopCi0J VU5BTUVfUkVMRUFTRT0kKCAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigk NSwxLDMpfScpIDI+L2Rldi9udWxsKQotCXRlc3QgIngkVU5BTUVfUkVMRUFTRSIgPSB4ICYmIFVO QU1FX1JFTEVBU0U9MwotCWNhc2UgIiQoL2Jpbi9hcmNoKSIgaW4KLQkgICAgc3VuMykKLQkJZWNo byBtNjhrLXN1bi1zdW5vcyIkVU5BTUVfUkVMRUFTRSIKLQkJOzsKLQkgICAgc3VuNCkKLQkJZWNo byBzcGFyYy1zdW4tc3Vub3MiJFVOQU1FX1JFTEVBU0UiCi0JCTs7Ci0JZXNhYwotCWV4aXQgOzsK LSAgICBhdXNocDpTdW5PUzoqOiopCi0JZWNobyBzcGFyYy1hdXNwZXgtc3Vub3MiJFVOQU1FX1JF TEVBU0UiCi0JZXhpdCA7OwotICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRs ZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCi0gICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2 ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90Ci0gICAgIyAiYXRhcmlzdCIgb3IgImF0 YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgotICAgICMgPiBtNjgwMDAp LiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKLSAg ICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmlu YWxseQotICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2gg aXMgYWN0dWFsbHkgbm90Ci0gICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0 aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCi0gICAgIyBiZSBubyBwcm9ibGVtLgotICAgIGF0 YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipU T1M6KjoqKQotCWVjaG8gbTY4ay1hdGFyaS1taW50IiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsK LSAgICBhdGFyaSo6Kk1pTlQ6KjoqIHwgYXRhcmkqOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRP UzoqOiopCi0JZWNobyBtNjhrLWF0YXJpLW1pbnQiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7Owot ICAgICpmYWxjb24qOipNaU5UOio6KiB8ICpmYWxjb24qOiptaW50Oio6KiB8ICpmYWxjb24qOipU T1M6KjoqKQotCWVjaG8gbTY4ay1hdGFyaS1taW50IiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsK LSAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoq OiopCi0JZWNobyBtNjhrLW1pbGFuLW1pbnQiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAg IGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikK LQllY2hvIG02OGstaGFkZXMtbWludCIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgKjoq TWlOVDoqOiogfCAqOiptaW50Oio6KiB8ICo6KlRPUzoqOiopCi0JZWNobyBtNjhrLXVua25vd24t bWludCIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgbTY4azptYWNodGVuOio6KikKLQll Y2hvIG02OGstYXBwbGUtbWFjaHRlbiIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgcG93 ZXJwYzptYWNodGVuOio6KikKLQllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiIkVU5BTUVfUkVM RUFTRSIKLQlleGl0IDs7Ci0gICAgUklTQyo6TWFjaDoqOiopCi0JZWNobyBtaXBzLWRlYy1tYWNo X2JzZDQuMwotCWV4aXQgOzsKLSAgICBSSVNDKjpVTFRSSVg6KjoqKQotCWVjaG8gbWlwcy1kZWMt dWx0cml4IiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICBWQVgqOlVMVFJJWCo6KjoqKQot CWVjaG8gdmF4LWRlYy11bHRyaXgiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgIDIwMjA6 Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQotCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgi JFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6 UklTQ29zKQotCXNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4gIiRkdW1t eS5jIgotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmlu dGYoKSBwcm90b3R5cGUgKi8KLQlpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewot I2Vsc2UKLQlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgewot I2VuZGlmCi0JI2lmIGRlZmluZWQgKGhvc3RfbWlwcykgJiYgZGVmaW5lZCAoTUlQU0VCKQotCSNp ZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCi0JICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNz eXN2XFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOwotCSNlbmRpZgotCSNpZiBkZWZpbmVkIChTWVNU WVBFX1NWUjQpCi0JICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XFxuIiwgYXJndlsx XSk7IGV4aXQgKDApOwotCSNlbmRpZgotCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBk ZWZpbmVkKFNZU1RZUEVfQlNEKQotCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXFxu IiwgYXJndlsxXSk7IGV4aXQgKDApOwotCSNlbmRpZgotCSNlbmRpZgotCSAgZXhpdCAoLTEpOwot CX0KLUVPRgotCSRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIgIiRkdW1teS5jIiAmJgotCSAgZHVt bXlhcmc9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wx L3AnKSAmJgotCSAgU1lTVEVNX05BTUU9JCgiJGR1bW15IiAiJGR1bW15YXJnIikgJiYKLQkgICAg eyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9Ci0JZWNobyBtaXBzLW1pcHMtcmlzY29zIiRV TkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCi0J ZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4Ci0JZXhpdCA7OwotICAgIE1vdG9yb2xhOio6 NC4zOlBMOC0qKQotCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKLQlleGl0IDs7Ci0gICAg TmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKLQll Y2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4Ci0JZXhpdCA7OwotICAgIE5pZ2h0X0hhd2s6UG93 ZXJfVU5JWDoqOiopCi0JZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKLQlleGl0IDs7Ci0g ICAgbTg4azpDWC9VWDo3KjoqKQotCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKLQlleGl0IDs7Ci0g ICAgbTg4azoqOjQqOlI0KikKLQllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKLQlleGl0IDs7Ci0g ICAgbTg4azoqOjMqOlIzKikKLQllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKLQlleGl0IDs7Ci0g ICAgQVZpaU9OOmRndXg6KjoqKQotCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNo aXRlY3R1cmVzCi0JVU5BTUVfUFJPQ0VTU09SPSQoL3Vzci9iaW4vdW5hbWUgLXApCi0JaWYgdGVz dCAiJFVOQU1FX1BST0NFU1NPUiIgPSBtYzg4MTAwIHx8IHRlc3QgIiRVTkFNRV9QUk9DRVNTT1Ii ID0gbWM4ODExMAotCXRoZW4KLQkgICAgaWYgdGVzdCAiJFRBUkdFVF9CSU5BUllfSU5URVJGQUNF InggPSBtODhrZGd1eGVsZnggfHwgXAotCSAgICAgICB0ZXN0ICIkVEFSR0VUX0JJTkFSWV9JTlRF UkZBQ0UieCA9IHgKLQkgICAgdGhlbgotCQllY2hvIG04OGstZGctZGd1eCIkVU5BTUVfUkVMRUFT RSIKLQkgICAgZWxzZQotCQllY2hvIG04OGstZGctZGd1eGJjcyIkVU5BTUVfUkVMRUFTRSIKLQkg ICAgZmkKLQllbHNlCi0JICAgIGVjaG8gaTU4Ni1kZy1kZ3V4IiRVTkFNRV9SRUxFQVNFIgotCWZp Ci0JZXhpdCA7OwotICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCi0J ZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKLQlleGl0IDs7Ci0gICAgTTg4KjoqOlIzKjoqKQotCSMg RGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKLQllY2hvIG04OGstbW90b3JvbGEtc3lzdjMK LQlleGl0IDs7Ci0gICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5p bmcgVVRla1YgKFNWUjMpCi0JZWNobyBtODhrLXRla3Ryb25peC1zeXN2MwotCWV4aXQgOzsKLSAg ICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5p bmcgVVRlayAoQlNEKQotCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCi0JZXhpdCA7OwotICAgICo6 SVJJWCo6KjoqKQotCWVjaG8gbWlwcy1zZ2ktaXJpeCIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxz ZWQgLWUgJ3MvLS9fL2cnKSIKLQlleGl0IDs7Ci0gICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6Mikg ICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgotCWVjaG8gcm9tcC1pYm0t YWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCi0JZXhpdCA7OyAg ICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInJCh1bmFtZSAtcyknIiBnaXZlcyAnQUlY ICcKLSAgICBpKjg2OkFJWDoqOiopCi0JZWNobyBpMzg2LWlibS1haXgKLQlleGl0IDs7Ci0gICAg aWE2NDpBSVg6KjoqKQotCWlmIHRlc3QgLXggL3Vzci9iaW4vb3NsZXZlbCA7IHRoZW4KLQkJSUJN X1JFVj0kKC91c3IvYmluL29zbGV2ZWwpCi0JZWxzZQotCQlJQk1fUkVWPSIkVU5BTUVfVkVSU0lP Ti4kVU5BTUVfUkVMRUFTRSIKLQlmaQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1pYm0tYWl4IiRJ Qk1fUkVWIgotCWV4aXQgOzsKLSAgICAqOkFJWDoyOjMpCi0JaWYgZ3JlcCBib3MzMjUgL3Vzci9p bmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JCXNldF9jY19mb3JfYnVpbGQK LQkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCi0JCSNpbmNsdWRlIDxzeXMvc3lz dGVtY2ZnLmg+Ci0KLQkJbWFpbigpCi0JCQl7Ci0JCQlpZiAoIV9fcG93ZXJfcGMoKSkKLQkJCQll eGl0KDEpOwotCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4My4yLjUiKTsKLQkJCWV4aXQoMCk7Ci0J CQl9Ci1FT0YKLQkJaWYgJENDX0ZPUl9CVUlMRCAtbyAiJGR1bW15IiAiJGR1bW15LmMiICYmIFNZ U1RFTV9OQU1FPSQoIiRkdW1teSIpCi0JCXRoZW4KLQkJCWVjaG8gIiRTWVNURU1fTkFNRSIKLQkJ ZWxzZQotCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41Ci0JCWZpCi0JZWxpZiBncmVwIGJvczMy NCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJZWNobyByczYw MDAtaWJtLWFpeDMuMi40Ci0JZWxzZQotCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCi0JZmkKLQll eGl0IDs7Ci0gICAgKjpBSVg6KjpbNDU2N10pCi0JSUJNX0NQVV9JRD0kKC91c3Ivc2Jpbi9sc2Rl diAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQx IH0nKQotCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICIkSUJNX0NQVV9JRCIgfCBncmVwICcgUE9X RVInID4vZGV2L251bGwgMj4mMTsgdGhlbgotCQlJQk1fQVJDSD1yczYwMDAKLQllbHNlCi0JCUlC TV9BUkNIPXBvd2VycGMKLQlmaQotCWlmIHRlc3QgLXggL3Vzci9iaW4vbHNscHAgOyB0aGVuCi0J CUlCTV9SRVY9JCgvdXNyL2Jpbi9sc2xwcCAtTHFjIGJvcy5ydGUubGliYyB8Ci0JCQkgICBhd2sg LUY6ICd7IHByaW50ICQzIH0nIHwgc2VkIHMvWzAtOV0qJC8wLykKLQllbHNlCi0JCUlCTV9SRVY9 IiRVTkFNRV9WRVJTSU9OLiRVTkFNRV9SRUxFQVNFIgotCWZpCi0JZWNobyAiJElCTV9BUkNIIi1p Ym0tYWl4IiRJQk1fUkVWIgotCWV4aXQgOzsKLSAgICAqOkFJWDoqOiopCi0JZWNobyByczYwMDAt aWJtLWFpeAotCWV4aXQgOzsKLSAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTo0LjRCU0Q6KikK LQllY2hvIHJvbXAtaWJtLWJzZDQuNAotCWV4aXQgOzsKLSAgICBpYm1ydDoqQlNEOip8cm9tcC1p Ym06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAotCWVjaG8gcm9tcC1p Ym0tYnNkIiRVTkFNRV9SRUxFQVNFIiAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KLQlleGl0 IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQu MwotICAgICo6Qk9TWDoqOiopCi0JZWNobyByczYwMDAtYnVsbC1ib3N4Ci0JZXhpdCA7OwotICAg IERQWC8yPzAwOkIuTy5TLjoqOiopCi0JZWNobyBtNjhrLWJ1bGwtc3lzdjMKLQlleGl0IDs7Ci0g ICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQotCWVjaG8gbTY4ay1ocC1ic2QKLQlleGl0IDs7 Ci0gICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKLQllY2hv IG02OGstaHAtYnNkNC40Ci0JZXhpdCA7OwotICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikK LQlIUFVYX1JFVj0kKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSouWzBCXSov LycpCi0JY2FzZSAiJFVOQU1FX01BQ0hJTkUiIGluCi0JICAgIDkwMDAvMzE/KSAgICAgICAgICAg IEhQX0FSQ0g9bTY4MDAwIDs7Ci0JICAgIDkwMDAvWzM0XT8/KSAgICAgICAgIEhQX0FSQ0g9bTY4 ayA7OwotCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKLQkJaWYgdGVzdCAteCAvdXNyL2Jpbi9n ZXRjb25mOyB0aGVuCi0JCSAgICBzY19jcHVfdmVyc2lvbj0kKC91c3IvYmluL2dldGNvbmYgU0Nf Q1BVX1ZFUlNJT04gMj4vZGV2L251bGwpCi0JCSAgICBzY19rZXJuZWxfYml0cz0kKC91c3IvYmlu L2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGwpCi0JCSAgICBjYXNlICIkc2NfY3B1 X3ZlcnNpb24iIGluCi0JCSAgICAgIDUyMykgSFBfQVJDSD1ocHBhMS4wIDs7ICMgQ1BVX1BBX1JJ U0MxXzAKLQkJICAgICAgNTI4KSBIUF9BUkNIPWhwcGExLjEgOzsgIyBDUFVfUEFfUklTQzFfMQot CQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKLQkJCWNh c2UgIiRzY19rZXJuZWxfYml0cyIgaW4KLQkJCSAgMzIpIEhQX0FSQ0g9aHBwYTIuMG4gOzsKLQkJ CSAgNjQpIEhQX0FSQ0g9aHBwYTIuMHcgOzsKLQkJCSAgJycpIEhQX0FSQ0g9aHBwYTIuMCA7OyAg ICMgSFAtVVggMTAuMjAKLQkJCWVzYWMgOzsKLQkJICAgIGVzYWMKLQkJZmkKLQkJaWYgdGVzdCAi JEhQX0FSQ0giID0gIiI7IHRoZW4KLQkJICAgIHNldF9jY19mb3JfYnVpbGQKLQkJICAgIHNlZCAn cy9eCQkvLycgPDwgRU9GID4gIiRkdW1teS5jIgotCi0JCSNkZWZpbmUgX0hQVVhfU09VUkNFCi0J CSNpbmNsdWRlIDxzdGRsaWIuaD4KLQkJI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0JCWludCBtYWlu ICgpCi0JCXsKLQkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQotCQkgICAgbG9uZyBiaXRz ID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOwotCQkjZW5kaWYKLQkJICAgIGxvbmcgY3B1ICA9 IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7Ci0KLQkJICAgIHN3aXRjaCAoY3B1KQotCQkJewot CQkJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7Ci0JCQljYXNl IENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKLQkJCWNhc2UgQ1BVX1BB X1JJU0MyXzA6Ci0JCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKLQkJCSAgICBzd2l0Y2gg KGJpdHMpCi0JCQkJewotCQkJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKLQkJ CQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7Ci0JCQkJZGVmYXVsdDogcHV0cyAo ImhwcGEyLjAiKTsgYnJlYWs7Ci0JCQkJfSBicmVhazsKLQkJI2Vsc2UgIC8qICFkZWZpbmVkKF9T Q19LRVJORUxfQklUUykgKi8KLQkJCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKLQkJI2Vu ZGlmCi0JCQlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKLQkJCX0KLQkJICAgIGV4 aXQgKDApOwotCQl9Ci1FT0YKLQkJICAgIChDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtbyAiJGR1 bW15IiAiJGR1bW15LmMiIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPSQoIiRkdW1teSIpCi0JCSAg ICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCi0JCWZpIDs7Ci0JZXNhYwotCWlm IHRlc3QgIiRIUF9BUkNIIiA9IGhwcGEyLjB3Ci0JdGhlbgotCSAgICBzZXRfY2NfZm9yX2J1aWxk Ci0KLQkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNv bXBpbGVyIGdlbmVyYXRpbmcKLQkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBo YXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCi0JICAgICMgZ2VuZXJhdGluZyA2NC1i aXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6Ci0JICAgICMK LQkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcwotCSAgICAjID0+IGhwcGEy LjB3LWhwLWhwdXgxMS4yMwotCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2Nv bmZpZy5ndWVzcwotCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKLQotCSAgICBpZiBlY2hv IF9fTFA2NF9fIHwgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwK LQkJZ3JlcCAtcSBfX0xQNjRfXwotCSAgICB0aGVuCi0JCUhQX0FSQ0g9aHBwYTIuMHcKLQkgICAg ZWxzZQotCQlIUF9BUkNIPWhwcGE2NAotCSAgICBmaQotCWZpCi0JZWNobyAiJEhQX0FSQ0giLWhw LWhwdXgiJEhQVVhfUkVWIgotCWV4aXQgOzsKLSAgICBpYTY0OkhQLVVYOio6KikKLQlIUFVYX1JF Vj0kKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSouWzBCXSovLycpCi0JZWNo byBpYTY0LWhwLWhwdXgiJEhQVVhfUkVWIgotCWV4aXQgOzsKLSAgICAzMDUwKjpISS1VWDoqOiop Ci0Jc2V0X2NjX2Zvcl9idWlsZAotCXNlZCAncy9eCS8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCi0J I2luY2x1ZGUgPHVuaXN0ZC5oPgotCWludAotCW1haW4gKCkKLQl7Ci0JICBsb25nIGNwdSA9IHN5 c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7Ci0JICAvKiBUaGUgb3JkZXIgbWF0dGVycywgYmVjYXVz ZSBDUFVfSVNfSFBfTUM2OEsgZXJyb25lb3VzbHkgcmV0dXJucwotCSAgICAgdHJ1ZSBmb3IgQ1BV X1BBX1JJU0MxXzAuICBDUFVfSVNfUEFfUklTQyByZXR1cm5zIGNvcnJlY3QKLQkgICAgIHJlc3Vs dHMsIGhvd2V2ZXIuICAqLwotCSAgaWYgKENQVV9JU19QQV9SSVNDIChjcHUpKQotCSAgICB7Ci0J ICAgICAgc3dpdGNoIChjcHUpCi0JCXsKLQkJICBjYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgi aHBwYTEuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7Ci0JCSAgY2FzZSBDUFVfUEFfUklTQzFf MTogcHV0cyAoImhwcGExLjEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOwotCQkgIGNhc2UgQ1BV X1BBX1JJU0MyXzA6IHB1dHMgKCJocHBhMi4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKLQkJ ICBkZWZhdWx0OiBwdXRzICgiaHBwYS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7Ci0JCX0KLQkg ICAgfQotCSAgZWxzZSBpZiAoQ1BVX0lTX0hQX01DNjhLIChjcHUpKQotCSAgICBwdXRzICgibTY4 ay1oaXRhY2hpLWhpdXh3ZTIiKTsKLQkgIGVsc2UgcHV0cyAoInVua25vd24taGl0YWNoaS1oaXV4 d2UyIik7Ci0JICBleGl0ICgwKTsKLQl9Ci1FT0YKLQkkQ0NfRk9SX0JVSUxEIC1vICIkZHVtbXki ICIkZHVtbXkuYyIgJiYgU1lTVEVNX05BTUU9JCgiJGR1bW15IikgJiYKLQkJeyBlY2hvICIkU1lT VEVNX05BTUUiOyBleGl0OyB9Ci0JZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgotCWV4aXQg OzsKLSAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KikKLQll Y2hvIGhwcGExLjEtaHAtYnNkCi0JZXhpdCA7OwotICAgIDkwMDAvOD8/OjQuM2JzZDoqOiopCi0J ZWNobyBocHBhMS4wLWhwLWJzZAotCWV4aXQgOzsKLSAgICAqOT8/KjpNUEUvaVg6KjoqIHwgKjMw MDAqOk1QRS9pWDoqOiopCi0JZWNobyBocHBhMS4wLWhwLW1wZWl4Ci0JZXhpdCA7OwotICAgIGhw Nz8/Ok9TRjE6KjoqIHwgaHA4P1s3OV06T1NGMToqOiopCi0JZWNobyBocHBhMS4xLWhwLW9zZgot CWV4aXQgOzsKLSAgICBocDg/PzpPU0YxOio6KikKLQllY2hvIGhwcGExLjAtaHAtb3NmCi0JZXhp dCA7OwotICAgIGkqODY6T1NGMToqOiopCi0JaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzdmVyc2lv biA7IHRoZW4KLQkgICAgZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tb3NmMW1rCi0JZWxz ZQotCSAgICBlY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1vc2YxCi0JZmkKLQlleGl0IDs7 Ci0gICAgcGFyaXNjKjpMaXRlcyo6KjoqKQotCWVjaG8gaHBwYTEuMS1ocC1saXRlcwotCWV4aXQg OzsKLSAgICBDMSo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMxKjoqKQotCWVjaG8g YzEtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNv bnZleE9TOkMyKjoqKQotCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwotCXRoZW4gZWNobyBj MzItY29udmV4LWJzZAotCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCi0JZmkKLQlleGl0IDs7Ci0g ICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQotCWVjaG8gYzM0 LWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgQzM4KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29u dmV4T1M6QzM4KjoqKQotCWVjaG8gYzM4LWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgQzQqOkNv bnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKLQllY2hvIGM0LWNvbnZleC1ic2QK LQlleGl0IDs7Ci0gICAgQ1JBWSpZLU1QOio6KjoqKQotCWVjaG8geW1wLWNyYXktdW5pY29zIiRV TkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgIENS QVkqW0EtWl05MDoqOio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItY3JheS11bmljb3MiJFVO QU1FX1JFTEVBU0UiIFwKLQl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKLQkg ICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0 dXZ3eHl6LyBcCi0JICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICBDUkFZ KlRTOio6KjoqKQotCWVjaG8gdDkwLWNyYXktdW5pY29zIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAt ZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgIENSQVkqVDNFOio6KjoqKQotCWVjaG8g YWxwaGFldjUtY3JheS11bmljb3NtayIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXC5bXi5d KiQvLlgvJwotCWV4aXQgOzsKLSAgICBDUkFZKlNWMToqOio6KikKLQllY2hvIHN2MS1jcmF5LXVu aWNvcyIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsK LSAgICAqOlVOSUNPUy9tcDoqOiopCi0JZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCIkVU5BTUVf UkVMRUFTRSIgfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICBGMzBbMDFd OlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKLQlGVUpJVFNVX1BS T0M9JCh1bmFtZSAtbSB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWpr bG1ub3BxcnN0dXZ3eHl6KQotCUZVSklUU1VfU1lTPSQodW5hbWUgLXAgfCB0ciBBQkNERUZHSElK S0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB8IHNlZCAtZSAncy9c Ly8vJykKLQlGVUpJVFNVX1JFTD0kKGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy8g L18vJykKLQllY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVK SVRTVV9SRUx9IgotCWV4aXQgOzsKLSAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCi0JRlVK SVRTVV9TWVM9JCh1bmFtZSAtcCB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzL1wvLy8nKQotCUZVSklUU1VfUkVMPSQo ZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJj ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogfCBzZWQgLWUgJ3MvIC9fLycpCi0JZWNobyAic3BhcmMt ZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgotCWV4aXQgOzsKLSAgICBpKjg2 OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6 KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItcGMtYnNkaSIkVU5BTUVfUkVMRUFTRSIKLQlleGl0 IDs7Ci0gICAgc3BhcmMqOkJTRC9PUzoqOiopCi0JZWNobyBzcGFyYy11bmtub3duLWJzZGkiJFVO QU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgICo6QlNEL09TOio6KikKLQllY2hvICIkVU5BTUVf TUFDSElORSItdW5rbm93bi1ic2RpIiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICBhcm06 RnJlZUJTRDoqOiopCi0JVU5BTUVfUFJPQ0VTU09SPSQodW5hbWUgLXApCi0Jc2V0X2NjX2Zvcl9i dWlsZAotCWlmIGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYv bnVsbCBcCi0JICAgIHwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCi0JdGhlbgotCSAgICBlY2hvICIk e1VOQU1FX1BST0NFU1NPUn0iLXVua25vd24tZnJlZWJzZCIkKGVjaG8gJHtVTkFNRV9SRUxFQVNF fXxzZWQgLWUgJ3MvWy0oXS4qLy8nKSItZ251ZWFiaQotCWVsc2UKLQkgICAgZWNobyAiJHtVTkFN RV9QUk9DRVNTT1J9Ii11bmtub3duLWZyZWVic2QiJChlY2hvICR7VU5BTUVfUkVMRUFTRX18c2Vk IC1lICdzL1stKF0uKi8vJykiLWdudWVhYmloZgotCWZpCi0JZXhpdCA7OwotICAgICo6RnJlZUJT RDoqOiopCi0JVU5BTUVfUFJPQ0VTU09SPSQoL3Vzci9iaW4vdW5hbWUgLXApCi0JY2FzZSAiJFVO QU1FX1BST0NFU1NPUiIgaW4KLQkgICAgYW1kNjQpCi0JCVVOQU1FX1BST0NFU1NPUj14ODZfNjQg OzsKLQkgICAgaTM4NikKLQkJVU5BTUVfUFJPQ0VTU09SPWk1ODYgOzsKLQllc2FjCi0JZWNobyAi JFVOQU1FX1BST0NFU1NPUiItdW5rbm93bi1mcmVlYnNkIiQoZWNobyAiJFVOQU1FX1JFTEVBU0Ui fHNlZCAtZSAncy9bLShdLiovLycpIgotCWV4aXQgOzsKLSAgICBpKjpDWUdXSU4qOiopCi0JZWNo byAiJFVOQU1FX01BQ0hJTkUiLXBjLWN5Z3dpbgotCWV4aXQgOzsKLSAgICAqOk1JTkdXNjQqOiop Ci0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLW1pbmd3NjQKLQlleGl0IDs7Ci0gICAgKjpNSU5H Vyo6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItcGMtbWluZ3czMgotCWV4aXQgOzsKLSAgICAq Ok1TWVMqOiopCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLW1zeXMKLQlleGl0IDs7Ci0gICAg aSo6UFcqOiopCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLXB3MzIKLQlleGl0IDs7Ci0gICAg KjpJbnRlcml4KjoqKQotCWNhc2UgIiRVTkFNRV9NQUNISU5FIiBpbgotCSAgICB4ODYpCi0JCWVj aG8gaTU4Ni1wYy1pbnRlcml4IiRVTkFNRV9SRUxFQVNFIgotCQlleGl0IDs7Ci0JICAgIGF1dGhl bnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQotCQllY2hvIHg4Nl82NC11bmtub3duLWlu dGVyaXgiJFVOQU1FX1JFTEVBU0UiCi0JCWV4aXQgOzsKLQkgICAgSUE2NCkKLQkJZWNobyBpYTY0 LXVua25vd24taW50ZXJpeCIkVU5BTUVfUkVMRUFTRSIKLQkJZXhpdCA7OwotCWVzYWMgOzsKLSAg ICBpKjpVV0lOKjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy11d2luCi0JZXhpdCA7Owot ICAgIGFtZDY0OkNZR1dJTio6KjoqIHwgeDg2XzY0OkNZR1dJTio6KjoqKQotCWVjaG8geDg2XzY0 LXBjLWN5Z3dpbgotCWV4aXQgOzsKLSAgICBwcmVwKjpTdW5PUzo1Lio6KikKLQllY2hvIHBvd2Vy cGNsZS11bmtub3duLXNvbGFyaXMyIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy9b Xi5dKi8vJykiCi0JZXhpdCA7OwotICAgICo6R05VOio6KikKLQkjIHRoZSBHTlUgc3lzdGVtCi0J ZWNobyAiJChlY2hvICIkVU5BTUVfTUFDSElORSJ8c2VkIC1lICdzLFstL10uKiQsLCcpLXVua25v d24tJExJQkMkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MsLy4qJCwsJykiCi0JZXhp dCA7OwotICAgICo6R05VLyo6KjoqKQotCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFu ZCB1c2VybGFuZAotCWVjaG8gIiRVTkFNRV9NQUNISU5FLXVua25vd24tJChlY2hvICIkVU5BTUVf U1lTVEVNIiB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgIls6dXBwZXI6XSIgIls6bG93ZXI6XSIp JChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1stKF0uKi8vJyktJExJQkMiCi0JZXhp dCA7OwotICAgICo6TWluaXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLW1p bml4Ci0JZXhpdCA7OwotICAgIGFhcmNoNjQ6TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNI SU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgYWFyY2g2NF9iZTpMaW51 eDoqOiopCi0JVU5BTUVfTUFDSElORT1hYXJjaDY0X2JlCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUi LXVua25vd24tbGludXgtIiRMSUJDIgotCWV4aXQgOzsKLSAgICBhbHBoYTpMaW51eDoqOiopCi0J Y2FzZSAkKHNlZCAtbiAnL15jcHUgbW9kZWwvcy9eLio6IFwoLipcKS9cMS9wJyAvcHJvYy9jcHVp bmZvIDI+L2Rldi9udWxsKSBpbgotCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsK LQkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OwotCSAgUENBNTYpIFVOQU1FX01B Q0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7 OwotCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKLQkgIEVWNjcpICBVTkFNRV9N QUNISU5FPWFscGhhZXY2NyA7OwotCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7 Ci0JZXNhYwotCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQu c28uMQotCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9Z251bGliYzEgOyBmaQotCWVjaG8g IiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgYXJj OkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItdW5r bm93bi1saW51eC0iJExJQkMiCi0JZXhpdCA7OwotICAgIGFybSo6TGludXg6KjoqKQotCXNldF9j Y19mb3JfYnVpbGQKLQlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAy Pi9kZXYvbnVsbCBcCi0JICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KLQl0aGVuCi0JICAgIGVj aG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKLQllbHNlCi0JICAgIGlm IGVjaG8gX19BUk1fUENTX1ZGUCB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCi0J CXwgZ3JlcCAtcSBfX0FSTV9QQ1NfVkZQCi0JICAgIHRoZW4KLQkJZWNobyAiJFVOQU1FX01BQ0hJ TkUiLXVua25vd24tbGludXgtIiRMSUJDImVhYmkKLQkgICAgZWxzZQotCQllY2hvICIkVU5BTUVf TUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiZWFiaWhmCi0JICAgIGZpCi0JZmkKLQlleGl0 IDs7Ci0gICAgYXZyMzIqOkxpbnV4Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93 bi1saW51eC0iJExJQkMiCi0JZXhpdCA7OwotICAgIGNyaXM6TGludXg6KjoqKQotCWVjaG8gIiRV TkFNRV9NQUNISU5FIi1heGlzLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgY3Jpc3YzMjpM aW51eDoqOiopCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLWF4aXMtbGludXgtIiRMSUJDIgotCWV4 aXQgOzsKLSAgICBlMms6TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3du LWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgZnJ2OkxpbnV4Oio6KikKLQllY2hvICIkVU5B TUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiCi0JZXhpdCA7OwotICAgIGhleGFnb246 TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIK LQlleGl0IDs7Ci0gICAgaSo4NjpMaW51eDoqOiopCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBj LWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgaWE2NDpMaW51eDoqOiopCi0JZWNobyAiJFVO QU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgotCWV4aXQgOzsKLSAgICBrMW9tOkxp bnV4Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiCi0J ZXhpdCA7OwotICAgIGxvb25nYXJjaDMyOkxpbnV4Oio6KiB8IGxvb25nYXJjaDY0OkxpbnV4Oio6 KiB8IGxvb25nYXJjaHgzMjpMaW51eDoqOiopCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25v d24tbGludXgtIiRMSUJDIgotCWV4aXQgOzsKLSAgICBtMzJyKjpMaW51eDoqOiopCi0JZWNobyAi JFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgotCWV4aXQgOzsKLSAgICBtNjgq OkxpbnV4Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMi Ci0JZXhpdCA7OwotICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKLQlzZXRf Y2NfZm9yX2J1aWxkCi0JSVNfR0xJQkM9MAotCXRlc3QgeCIke0xJQkN9IiA9IHhnbnUgJiYgSVNf R0xJQkM9MQotCXNlZCAncy9eCS8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCi0JI3VuZGVmIENQVQot CSN1bmRlZiBtaXBzCi0JI3VuZGVmIG1pcHNlbAotCSN1bmRlZiBtaXBzNjQKLQkjdW5kZWYgbWlw czY0ZWwKLQkjaWYgJHtJU19HTElCQ30gJiYgZGVmaW5lZChfQUJJNjQpCi0JTElCQ0FCST1nbnVh Ymk2NAotCSNlbHNlCi0JI2lmICR7SVNfR0xJQkN9ICYmIGRlZmluZWQoX0FCSU4zMikKLQlMSUJD QUJJPWdudWFiaW4zMgotCSNlbHNlCi0JTElCQ0FCST0ke0xJQkN9Ci0JI2VuZGlmCi0JI2VuZGlm Ci0KLQkjaWYgJHtJU19HTElCQ30gJiYgZGVmaW5lZChfX21pcHM2NCkgJiYgZGVmaW5lZChfX21p cHNfaXNhX3JldikgJiYgX19taXBzX2lzYV9yZXY+PTYKLQlDUFU9bWlwc2lzYTY0cjYKLQkjZWxz ZQotCSNpZiAke0lTX0dMSUJDfSAmJiAhZGVmaW5lZChfX21pcHM2NCkgJiYgZGVmaW5lZChfX21p cHNfaXNhX3JldikgJiYgX19taXBzX2lzYV9yZXY+PTYKLQlDUFU9bWlwc2lzYTMycjYKLQkjZWxz ZQotCSNpZiBkZWZpbmVkKF9fbWlwczY0KQotCUNQVT1taXBzNjQKLQkjZWxzZQotCUNQVT1taXBz Ci0JI2VuZGlmCi0JI2VuZGlmCi0JI2VuZGlmCi0KLQkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8 fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VM KQotCU1JUFNfRU5ESUFOPWVsCi0JI2Vsc2UKLQkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBk ZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQot CU1JUFNfRU5ESUFOPQotCSNlbHNlCi0JTUlQU19FTkRJQU49Ci0JI2VuZGlmCi0JI2VuZGlmCi1F T0YKLQlldmFsICIkKCRDQ19GT1JfQlVJTEQgLUUgIiRkdW1teS5jIiAyPi9kZXYvbnVsbCB8IGdy ZXAgJ15DUFVcfF5NSVBTX0VORElBTlx8XkxJQkNBQkknKSIKLQl0ZXN0ICJ4JENQVSIgIT0geCAm JiB7IGVjaG8gIiRDUFUke01JUFNfRU5ESUFOfS11bmtub3duLWxpbnV4LSRMSUJDQUJJIjsgZXhp dDsgfQotCTs7Ci0gICAgbWlwczY0ZWw6TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5F Ii11bmtub3duLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgb3BlbnJpc2MqOkxpbnV4Oio6 KikKLQllY2hvIG9yMWstdW5rbm93bi1saW51eC0iJExJQkMiCi0JZXhpdCA7OwotICAgIG9yMzI6 TGludXg6KjoqIHwgb3Ixayo6TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtu b3duLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgcGFkcmU6TGludXg6KjoqKQotCWVjaG8g c3BhcmMtdW5rbm93bi1saW51eC0iJExJQkMiCi0JZXhpdCA7OwotICAgIHBhcmlzYzY0OkxpbnV4 Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCi0JZWNobyBocHBhNjQtdW5rbm93bi1saW51eC0iJExJ QkMiCi0JZXhpdCA7OwotICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKLQkj IExvb2sgZm9yIENQVSBsZXZlbAotCWNhc2UgJChncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2Nw dWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyKSBpbgotCSAgUEE3KikgZWNobyBocHBh MS4xLXVua25vd24tbGludXgtIiRMSUJDIiA7OwotCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25v d24tbGludXgtIiRMSUJDIiA7OwotCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtIiRM SUJDIiA7OwotCWVzYWMKLQlleGl0IDs7Ci0gICAgcHBjNjQ6TGludXg6KjoqKQotCWVjaG8gcG93 ZXJwYzY0LXVua25vd24tbGludXgtIiRMSUJDIgotCWV4aXQgOzsKLSAgICBwcGM6TGludXg6Kjoq KQotCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgcHBj NjRsZTpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjNjRsZS11bmtub3duLWxpbnV4LSIkTElCQyIK LQlleGl0IDs7Ci0gICAgcHBjbGU6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwY2xlLXVua25vd24t bGludXgtIiRMSUJDIgotCWV4aXQgOzsKLSAgICByaXNjdjMyOkxpbnV4Oio6KiB8IHJpc2N2MzJi ZTpMaW51eDoqOiogfCByaXNjdjY0OkxpbnV4Oio6KiB8IHJpc2N2NjRiZTpMaW51eDoqOiopCi0J ZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgotCWV4aXQgOzsKLSAg ICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElO RSItaWJtLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgc2g2NCo6TGludXg6KjoqKQotCWVj aG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAg c2gqOkxpbnV4Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJ QkMiCi0JZXhpdCA7OwotICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQot CWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0g ICAgdGlsZSo6TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4 LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgdmF4OkxpbnV4Oio6KikKLQllY2hvICIkVU5BTUVfTUFD SElORSItZGVjLWxpbnV4LSIkTElCQyIKLQlleGl0IDs7Ci0gICAgeDg2XzY0OkxpbnV4Oio6KikK LQlzZXRfY2NfZm9yX2J1aWxkCi0JTElCQ0FCST0kTElCQwotCWlmIHRlc3QgIiRDQ19GT1JfQlVJ TEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kOyB0aGVuCi0JICAgIGlmIChlY2hvICcjaWZkZWYgX19J TFAzMl9fJzsgZWNobyBJU19YMzI7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkoQ0NPUFRTPSIiICRD Q19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCi0JCWdyZXAgSVNfWDMyID4vZGV2L251 bGwKLQkgICAgdGhlbgotCQlMSUJDQUJJPSIkTElCQyJ4MzIKLQkgICAgZmkKLQlmaQotCWVjaG8g IiRVTkFNRV9NQUNISU5FIi1wYy1saW51eC0iJExJQkNBQkkiCi0JZXhpdCA7OwotICAgIHh0ZW5z YSo6TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElC QyIKLQlleGl0IDs7Ci0gICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKLQkjIHB0eCA0LjAgZG9lcyB1 bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgotCSMgZWFybGllciB2 ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKLQkjIHN5 c25hbWUgYW5kIG5vZGVuYW1lLgotCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0Ci0JZXhpdCA7Owot ICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCi0JIyBVbml4d2FyZSBpcyBhbiBvZmZzaG9vdCBv ZiBTVlI0LCBidXQgaXQgaGFzIGl0cyBvd24gdmVyc2lvbgotCSMgbnVtYmVyIHNlcmllcyBzdGFy dGluZyB3aXRoIDIuLi4KLQkjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0 ZW1zIHdvbid0IG1hdGNoIHRoaXMsCi0JIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgot CSMgVXNlIHN5c3Y0LjJ1dy4uLiBzbyB0aGF0IHN5c3Y0KiBtYXRjaGVzIGl0LgotCWVjaG8gIiRV TkFNRV9NQUNISU5FIi1wYy1zeXN2NC4ydXciJFVOQU1FX1ZFUlNJT04iCi0JZXhpdCA7OwotICAg IGkqODY6T1MvMjoqOiopCi0JIyBJZiB3ZSB3ZXJlIGFibGUgdG8gZmluZCBgdW5hbWUnLCB0aGVu IEVNWCBVbml4IGNvbXBhdGliaWxpdHkKLQkjIGlzIHByb2JhYmx5IGluc3RhbGxlZC4KLQllY2hv ICIkVU5BTUVfTUFDSElORSItcGMtb3MyLWVteAotCWV4aXQgOzsKLSAgICBpKjg2OlhUUy0zMDA6 KjpTVE9QKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLXN0b3AKLQlleGl0IDs7Ci0g ICAgaSo4NjphdGhlb3M6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWF0aGVv cwotCWV4aXQgOzsKLSAgICBpKjg2OnN5bGxhYmxlOio6KikKLQllY2hvICIkVU5BTUVfTUFDSElO RSItcGMtc3lsbGFibGUKLQlleGl0IDs7Ci0gICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5 bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCi0JZWNobyBpMzg2LXVua25v d24tbHlueG9zIiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICBpKjg2OipET1M6KjoqKQot CWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1tc2Rvc2RqZ3BwCi0JZXhpdCA7OwotICAgIGkqODY6 Kjo0Lio6KikKLQlVTkFNRV9SRUw9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgJ3MvXC9N UCQvLycpCi0JaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+ L2Rldi9udWxsOyB0aGVuCi0JCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bml2ZWwtc3lzdiIkVU5B TUVfUkVMIgotCWVsc2UKLQkJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLXN5c3YiJFVOQU1FX1JF TCIKLQlmaQotCWV4aXQgOzsKLSAgICBpKjg2Oio6NTpbNjc4XSopCi0JIyBVbml4V2FyZSA3Lngs IE9wZW5VTklYIGFuZCBPcGVuU2VydmVyIDYuCi0JY2FzZSAkKC9iaW4vdW5hbWUgLVggfCBncmVw ICJeTWFjaGluZSIpIGluCi0JICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7Owot CSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKLQkgICAgKlBlbnQqfCpD ZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKLQllc2FjCi0JZWNobyAiJFVOQU1FX01BQ0hJ TkUtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVS U0lPTn0iCi0JZXhpdCA7OwotICAgIGkqODY6KjozLjI6KikKLQlpZiB0ZXN0IC1mIC91c3Ivb3B0 aW9ucy9jYi5uYW1lOyB0aGVuCi0JCVVOQU1FX1JFTD0kKHNlZCAtbiAncy8uKlZlcnNpb24gLy9w JyA8L3Vzci9vcHRpb25zL2NiLm5hbWUpCi0JCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1pc2Mi JFVOQU1FX1JFTCIKLQllbGlmIC9iaW4vdW5hbWUgLVggMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7 IHRoZW4KLQkJVU5BTUVfUkVMPSQoICgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUg J3MvLio9IC8vJykpCi0JCSgvYmluL3VuYW1lIC1YfGdyZXAgaTgwNDg2ID4vZGV2L251bGwpICYm IFVOQU1FX01BQ0hJTkU9aTQ4NgotCQkoL2Jpbi91bmFtZSAtWHxncmVwICdeTWFjaGluZS4qUGVu dGl1bScgPi9kZXYvbnVsbCkgXAotCQkJJiYgVU5BTUVfTUFDSElORT1pNTg2Ci0JCSgvYmluL3Vu YW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50ICpJSScgPi9kZXYvbnVsbCkgXAotCQkJJiYgVU5B TUVfTUFDSElORT1pNjg2Ci0JCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVt IFBybycgPi9kZXYvbnVsbCkgXAotCQkJJiYgVU5BTUVfTUFDSElORT1pNjg2Ci0JCWVjaG8gIiRV TkFNRV9NQUNISU5FIi1wYy1zY28iJFVOQU1FX1JFTCIKLQllbHNlCi0JCWVjaG8gIiRVTkFNRV9N QUNISU5FIi1wYy1zeXN2MzIKLQlmaQotCWV4aXQgOzsKLSAgICBwYzoqOio6KikKLQkjIExlZnQg aGVyZSBmb3IgY29tcGF0aWJpbGl0eToKLQkjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3 YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAotCSMgdGhlIHByb2Nlc3Nvciwg c28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCi0JIyBOb3RlOiB3aGF0ZXZlciB0aGlz IGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgotCSMgcHJpbnRzIGZv ciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cmUgd2lsbCBkZWNpZGUgdGhh dAotCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgotCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCi0J ZXhpdCA7OwotICAgIEludGVsOk1hY2g6Myo6KikKLQllY2hvIGkzODYtcGMtbWFjaDMKLQlleGl0 IDs7Ci0gICAgcGFyYWdvbjoqOio6KikKLQllY2hvIGk4NjAtaW50ZWwtb3NmMQotCWV4aXQgOzsK LSAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0Ci0JaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2lu Y2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KLQkgIGVjaG8gaTg2MC1z dGFyZGVudC1zeXN2IiRVTkFNRV9SRUxFQVNFIiAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQK LQllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRp c2NvdmVyZWQuCi0JICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2IiRVTkFNRV9SRUxFQVNFIiAgIyBV bmtub3duIGk4NjAtU1ZSNAotCWZpCi0JZXhpdCA7OwotICAgIG1pbmkqOkNUSVg6U1lTKjU6KikK LQkjICJtaW5pZnJhbWUiCi0JZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2Ci0JZXhpdCA7Owot ICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKLQllY2hvIG02OGstY29udmVyZ2VudC1zeXN2 Ci0JZXhpdCA7OwotICAgIE02ODA/MDpELU5JWDo1LjM6KikKLQllY2hvIG02OGstZGlhYi1kbml4 Ci0JZXhpdCA7OwotICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCi0JdGVzdCAtciAvc3lzVjY4ICYm IHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OwotICAgIDNbMzQ1XT8/Oio6 NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0 XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQw Oio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0 LjA6My4wKQotCU9TX1JFTD0nJwotCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAotCSYmIE9TX1JFTD0u JChzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJl bGlkKQotCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAot CSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0KLQkvYmluL3Vu YW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKLQkgICYm IHsgZWNobyBpNTg2LW5jci1zeXN2NC4zIiRPU19SRUwiOyBleGl0OyB9IDs7Ci0gICAgM1szNF0/ PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCi0JL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVs bCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0JICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4 aXQ7IH0gOzsKLSAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKLQlPU19SRUw9Jy4z JwotCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAotCSAgICAmJiBPU19SRUw9LiQoc2VkIC1uICdzL1te IF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZCkKLQkvYmluL3Vu YW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKLQkgICAgJiYgeyBlY2hv IGk0ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0KLQkvYmluL3VuYW1lIC1wIDI+L2Rl di9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKLQkgICAgJiYgeyBlY2hvIGk1 ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0KLQkvYmluL3VuYW1lIC1wIDI+L2Rldi9u dWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKLQkgICAgJiYgeyBlY2hvIGk1ODYt bmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0gOzsKLSAgICBtNjgqOkx5bnhPUzoyLio6KiB8 IG02OCo6THlueE9TOjMuMCo6KikKLQllY2hvIG02OGstdW5rbm93bi1seW54b3MiJFVOQU1FX1JF TEVBU0UiCi0JZXhpdCA7OwotICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKLQllY2hv IG02OGstYXRhcmktc3lzdjQKLQlleGl0IDs7Ci0gICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCi0J ZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAg cnM2MDAwOkx5bnhPUzoyLio6KikKLQllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyIkVU5BTUVf UkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5 bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCi0JZWNobyBwb3dlcnBj LXVua25vd24tbHlueG9zIiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAgICBTTVtCRV1TOlVO SVhfU1Y6KjoqKQotCWVjaG8gbWlwcy1kZGUtc3lzdiIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7 Ci0gICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQotCWVjaG8gbWlwcy1zbmktc3lzdjQKLQlleGl0 IDs7Ci0gICAgUk0qOlNJTklYLSo6KjoqKQotCWVjaG8gbWlwcy1zbmktc3lzdjQKLQlleGl0IDs7 Ci0gICAgKjpTSU5JWC0qOio6KikKLQlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxs IDsgdGhlbgotCQlVTkFNRV9NQUNISU5FPSQoICh1bmFtZSAtcCkgMj4vZGV2L251bGwpCi0JCWVj aG8gIiRVTkFNRV9NQUNISU5FIi1zbmktc3lzdjQKLQllbHNlCi0JCWVjaG8gbnMzMmstc25pLXN5 c3YKLQlmaQotCWV4aXQgOzsKLSAgICBQRU5USVVNOio6NC4wKjoqKQkjIFVuaXN5cyBgQ2xlYXJQ YXRoIEhNUCBJWCA0MDAwJyBTVlI0L01QIGVmZm9ydAotCQkJIyBzYXlzIDxSaWNoYXJkLk0uQmFy dGVsQGNjTWFpbC5DZW5zdXMuR09WPgotCWVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKLQlleGl0IDs7 Ci0gICAgKjpVTklYX1N5c3RlbV9WOjQqOkZUWCopCi0JIyBGcm9tIEdlcmFsZCBIZXdlcyA8aGV3 ZXNAb3Blbm1hcmtldC5jb20+LgotCSMgSG93IGFib3V0IGRpZmZlcmVudGlhdGluZyBiZXR3ZWVu IHN0cmF0dXMgYXJjaGl0ZWN0dXJlcz8gLWRqbQotCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXN5c3Y0 Ci0JZXhpdCA7OwotICAgICo6KjoqOkZUWCopCi0JIyBGcm9tIHNlYW5mQHN3ZGMuc3RyYXR1cy5j b20uCi0JZWNobyBpODYwLXN0cmF0dXMtc3lzdjQKLQlleGl0IDs7Ci0gICAgaSo4NjpWT1M6Kjoq KQotCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgotCWVjaG8gIiRVTkFNRV9NQUNISU5F Ii1zdHJhdHVzLXZvcwotCWV4aXQgOzsKLSAgICAqOlZPUzoqOiopCi0JIyBGcm9tIFBhdWwuR3Jl ZW5Ac3RyYXR1cy5jb20uCi0JZWNobyBocHBhMS4xLXN0cmF0dXMtdm9zCi0JZXhpdCA7OwotICAg IG1jNjgqOkEvVVg6KjoqKQotCWVjaG8gbTY4ay1hcHBsZS1hdXgiJFVOQU1FX1JFTEVBU0UiCi0J ZXhpdCA7OwotICAgIG5ld3MqOk5FV1MtT1M6Nio6KikKLQllY2hvIG1pcHMtc29ueS1uZXdzb3M2 Ci0JZXhpdCA7OwotICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNW Oio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQotCWlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQkJ ZWNobyBtaXBzLW5lYy1zeXN2IiRVTkFNRV9SRUxFQVNFIgotCWVsc2UKLQkJZWNobyBtaXBzLXVu a25vd24tc3lzdiIkVU5BTUVfUkVMRUFTRSIKLQlmaQotCWV4aXQgOzsKLSAgICBCZUJveDpCZU9T Oio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCi0J ZWNobyBwb3dlcnBjLWJlLWJlb3MKLQlleGl0IDs7Ci0gICAgQmVNYWM6QmVPUzoqOiopCSMgQmVP UyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgotCWVjaG8gcG93ZXJwYy1h cHBsZS1iZW9zCi0JZXhpdCA7OwotICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9u IEludGVsIFBDIGNvbXBhdGlibGUuCi0JZWNobyBpNTg2LXBjLWJlb3MKLQlleGl0IDs7Ci0gICAg QmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgot CWVjaG8gaTU4Ni1wYy1oYWlrdQotCWV4aXQgOzsKLSAgICB4ODZfNjQ6SGFpa3U6KjoqKQotCWVj aG8geDg2XzY0LXVua25vd24taGFpa3UKLQlleGl0IDs7Ci0gICAgU1gtNDpTVVBFUi1VWDoqOiop Ci0JZWNobyBzeDQtbmVjLXN1cGVydXgiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgIFNY LTU6U1VQRVItVVg6KjoqKQotCWVjaG8gc3g1LW5lYy1zdXBlcnV4IiRVTkFNRV9SRUxFQVNFIgot CWV4aXQgOzsKLSAgICBTWC02OlNVUEVSLVVYOio6KikKLQllY2hvIHN4Ni1uZWMtc3VwZXJ1eCIk VU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgU1gtNzpTVVBFUi1VWDoqOiopCi0JZWNobyBz eDctbmVjLXN1cGVydXgiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgIFNYLTg6U1VQRVIt VVg6KjoqKQotCWVjaG8gc3g4LW5lYy1zdXBlcnV4IiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsK LSAgICBTWC04UjpTVVBFUi1VWDoqOiopCi0JZWNobyBzeDhyLW5lYy1zdXBlcnV4IiRVTkFNRV9S RUxFQVNFIgotCWV4aXQgOzsKLSAgICBTWC1BQ0U6U1VQRVItVVg6KjoqKQotCWVjaG8gc3hhY2Ut bmVjLXN1cGVydXgiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgIFBvd2VyKjpSaGFwc29k eToqOiopCi0JZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5IiRVTkFNRV9SRUxFQVNFIgotCWV4 aXQgOzsKLSAgICAqOlJoYXBzb2R5Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItYXBwbGUt cmhhcHNvZHkiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgIGFybTY0OkRhcndpbjoqOiop Ci0JZWNobyBhYXJjaDY0LWFwcGxlLWRhcndpbiIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0g ICAgKjpEYXJ3aW46KjoqKQotCVVOQU1FX1BST0NFU1NPUj0kKHVuYW1lIC1wKQotCWNhc2UgJFVO QU1FX1BST0NFU1NPUiBpbgotCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7 OwotCWVzYWMKLQlpZiBjb21tYW5kIC12IHhjb2RlLXNlbGVjdCA+IC9kZXYvbnVsbCAyPiAvZGV2 L251bGwgJiYgXAotCQkhIHhjb2RlLXNlbGVjdCAtLXByaW50LXBhdGggPiAvZGV2L251bGwgMj4g L2Rldi9udWxsIDsgdGhlbgotCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBpZiB0aGVyZSBpcyBu byB0b29sY2hhaW4gaW5zdGFsbGVkIGFzCi0JICAgICMgY2Mgd2lsbCBiZSBhIHN0dWIgdGhhdCBw dXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0Ci0JICAgICMgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIGlu c3RhbGwgZGV2ZWxvcGVyIHRvb2xzLgotCSAgICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91 bmQKLQllbHNlCi0JICAgIHNldF9jY19mb3JfYnVpbGQKLQlmaQotCWlmIHRlc3QgIiRDQ19GT1Jf QlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kOyB0aGVuCi0JICAgIGlmIChlY2hvICcjaWZkZWYg X19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkgICAo Q0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCi0JCSAgIGdyZXAg SVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCi0JICAgIHRoZW4KLQkJY2FzZSAkVU5BTUVfUFJPQ0VT U09SIGluCi0JCSAgICBpMzg2KSBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0IDs7Ci0JCSAgICBwb3dl cnBjKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYzY0IDs7Ci0JCWVzYWMKLQkgICAgZmkKLQkgICAg IyBPbiAxMC40LTEwLjYgb25lIG1pZ2h0IGNvbXBpbGUgZm9yIFBvd2VyUEMgdmlhIGdjYyAtYXJj aCBwcGMKLQkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX1BPV0VSUENfXyc7IGVjaG8gSVNfUFBDOyBl Y2hvICcjZW5kaWYnKSB8IFwKLQkJICAgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4v ZGV2L251bGwpIHwgXAotCQkgICBncmVwIElTX1BQQyA+L2Rldi9udWxsCi0JICAgIHRoZW4KLQkJ VU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKLQkgICAgZmkKLQllbGlmIHRlc3QgIiRVTkFNRV9QUk9D RVNTT1IiID0gaTM4NiA7IHRoZW4KLQkgICAgIyB1bmFtZSAtbSByZXR1cm5zIGkzODYgb3IgeDg2 XzY0Ci0JICAgIFVOQU1FX1BST0NFU1NPUj0kVU5BTUVfTUFDSElORQotCWZpCi0JZWNobyAiJFVO QU1FX1BST0NFU1NPUiItYXBwbGUtZGFyd2luIiRVTkFNRV9SRUxFQVNFIgotCWV4aXQgOzsKLSAg ICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKLQlVTkFNRV9QUk9DRVNT T1I9JCh1bmFtZSAtcCkKLQlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IHg4NjsgdGhlbgot CQlVTkFNRV9QUk9DRVNTT1I9aTM4NgotCQlVTkFNRV9NQUNISU5FPXBjCi0JZmkKLQllY2hvICIk VU5BTUVfUFJPQ0VTU09SIi0iJFVOQU1FX01BQ0hJTkUiLW50by1xbngiJFVOQU1FX1JFTEVBU0Ui Ci0JZXhpdCA7OwotICAgICo6UU5YOio6NCopCi0JZWNobyBpMzg2LXBjLXFueAotCWV4aXQgOzsK LSAgICBORU8tKjpOT05TVE9QX0tFUk5FTDoqOiopCi0JZWNobyBuZW8tdGFuZGVtLW5zayIkVU5B TUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgTlNFLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQotCWVj aG8gbnNlLXRhbmRlbS1uc2siJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgIE5TUi0qOk5P TlNUT1BfS0VSTkVMOio6KikKLQllY2hvIG5zci10YW5kZW0tbnNrIiRVTkFNRV9SRUxFQVNFIgot CWV4aXQgOzsKLSAgICBOU1YtKjpOT05TVE9QX0tFUk5FTDoqOiopCi0JZWNobyBuc3YtdGFuZGVt LW5zayIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgTlNYLSo6Tk9OU1RPUF9LRVJORUw6 KjoqKQotCWVjaG8gbnN4LXRhbmRlbS1uc2siJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAg ICo6Tm9uU3RvcC1VWDoqOiopCi0JZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKLQlleGl0IDs7 Ci0gICAgQlMyMDAwOlBPU0lYKjoqOiopCi0JZWNobyBiczIwMDAtc2llbWVucy1zeXN2Ci0JZXhp dCA7OwotICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUi LSIkVU5BTUVfU1lTVEVNIi0iJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotICAgICo6UGxhbjk6 KjoqKQotCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGlu c3RlYWQuIDM4NgotCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGgg b3RoZXIgeDg2Ci0JIyBvcGVyYXRpbmcgc3lzdGVtcy4KLQkjIHNoZWxsY2hlY2sgZGlzYWJsZT1T QzIxNTQKLQlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAzODY7IHRoZW4KLQkgICAgVU5BTUVfTUFDSElO RT1pMzg2Ci0JZWxzZQotCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKLQlmaQotCWVjaG8g IiRVTkFNRV9NQUNISU5FIi11bmtub3duLXBsYW45Ci0JZXhpdCA7OwotICAgICo6VE9QUy0xMDoq OiopCi0JZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAotCWV4aXQgOzsKLSAgICAqOlRFTkVYOio6 KikKLQllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKLQlleGl0IDs7Ci0gICAgS1MxMDpUT1BTLTIw Oio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKLQllY2hvIHBkcDEw LWRlYy10b3BzMjAKLQlleGl0IDs7Ci0gICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BT LTIwOio6KikKLQllY2hvIHBkcDEwLXhrbC10b3BzMjAKLQlleGl0IDs7Ci0gICAgKjpUT1BTLTIw Oio6KikKLQllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCi0JZXhpdCA7OwotICAgICo6SVRTOio6 KikKLQllY2hvIHBkcDEwLXVua25vd24taXRzCi0JZXhpdCA7OwotICAgIFNFSToqOio6U0VJVVgp Ci0JZWNobyBtaXBzLXNlaS1zZWl1eCIkVU5BTUVfUkVMRUFTRSIKLQlleGl0IDs7Ci0gICAgKjpE cmFnb25GbHk6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWRyYWdvbmZseSIk KGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvWy0oXS4qLy8nKSIKLQlleGl0IDs7Ci0g ICAgKjoqVk1TOio6KikKLQlVTkFNRV9NQUNISU5FPSQoICh1bmFtZSAtcCkgMj4vZGV2L251bGwp Ci0JY2FzZSAiJFVOQU1FX01BQ0hJTkUiIGluCi0JICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMg OyBleGl0IDs7Ci0JICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKLQkgICAgViop IGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7Ci0JZXNhYyA7OwotICAgICo6WEVOSVg6KjpTeXNW KQotCWVjaG8gaTM4Ni1wYy14ZW5peAotCWV4aXQgOzsKLSAgICBpKjg2OnNreW9zOio6KikKLQll Y2hvICIkVU5BTUVfTUFDSElORSItcGMtc2t5b3MiJChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBz ZWQgLWUgJ3MvIC4qJC8vJykiCi0JZXhpdCA7OwotICAgIGkqODY6cmRvczoqOiopCi0JZWNobyAi JFVOQU1FX01BQ0hJTkUiLXBjLXJkb3MKLQlleGl0IDs7Ci0gICAgaSo4NjpBUk9TOio6KikKLQll Y2hvICIkVU5BTUVfTUFDSElORSItcGMtYXJvcwotCWV4aXQgOzsKLSAgICB4ODZfNjQ6Vk1rZXJu ZWw6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWVzeAotCWV4aXQgOzsKLSAg ICBhbWQ2NDpJc2lsb25cIE9uZUZTOio6KikKLQllY2hvIHg4Nl82NC11bmtub3duLW9uZWZzCi0J ZXhpdCA7OwotICAgICo6VW5sZWFzaGVkOio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItdW5r bm93bi11bmxlYXNoZWQiJFVOQU1FX1JFTEVBU0UiCi0JZXhpdCA7OwotZXNhYwotCi0jIE5vIHVu YW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLgotc2V0X2NjX2Zvcl9i dWlsZAotY2F0ID4gIiRkdW1teS5jIiA8PEVPRgotI2lmZGVmIF9TRVFVRU5UXwotI2luY2x1ZGUg PHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+Ci0jZW5kaWYKLSNpZiBkZWZp bmVkKHVsdHJpeCkgfHwgZGVmaW5lZChfdWx0cml4KSB8fCBkZWZpbmVkKF9fdWx0cml4KSB8fCBk ZWZpbmVkKF9fdWx0cml4X18pCi0jaWYgZGVmaW5lZCAodmF4KSB8fCBkZWZpbmVkIChfX3ZheCkg fHwgZGVmaW5lZCAoX192YXhfXykgfHwgZGVmaW5lZChtaXBzKSB8fCBkZWZpbmVkKF9fbWlwcykg fHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChNSVBTKSB8fCBkZWZpbmVkKF9fTUlQU19f KQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2lmIGRlZmluZWQoX1NJWkVfVF8pIHx8IGRlZmluZWQo U0lHTE9TVCkKLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi0jZW5kaWYKLSNlbmRp ZgotbWFpbiAoKQotewotI2lmIGRlZmluZWQgKHNvbnkpCi0jaWYgZGVmaW5lZCAoTUlQU0VCKQot ICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNo b3VsZCBiZSBjaGFuZ2VkLAotICAgICBJIGRvbid0IGtub3cuLi4uICAqLwotICBwcmludGYgKCJt aXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9wYXJhbS5o PgotICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCi0jaWZkZWYgTkVXU09TNAotICAi NCIKLSNlbHNlCi0gICIiCi0jZW5kaWYKLSAgKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNlbmRpZgot Ci0jaWYgZGVmaW5lZCAoTmVYVCkKLSNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKLSNk ZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKLSNlbmRpZgotICBpbnQgdmVyc2lvbjsKLSAg dmVyc2lvbj0kKCAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4q L1wxL3AnKSAyPi9kZXYvbnVsbCk7Ci0gIGlmICh2ZXJzaW9uIDwgNCkKLSAgICBwcmludGYgKCIl cy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOwotICBlbHNl Ci0gICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2 ZXJzaW9uKTsKLSAgZXhpdCAoMCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8 fCBkZWZpbmVkIChuMTYpCi0jaWYgZGVmaW5lZCAoVU1BWFYpCi0gIHByaW50ZiAoIm5zMzJrLWVu Y29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotI2lmIGRlZmluZWQgKENNVSkKLSAgcHJp bnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKLSNlbHNlCi0gIHByaW50ZiAo Im5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYK LQotI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCi0gIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsg ZXhpdCAoMCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgKHNlcXVlbnQpCi0jaWYgZGVmaW5lZCAo aTM4NikKLSAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7Ci0jZW5k aWYKLSNpZiBkZWZpbmVkIChuczMyMDAwKQotICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4 XG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX1NFUVVFTlRf KQotICBzdHJ1Y3QgdXRzbmFtZSB1bjsKLQotICB1bmFtZSgmdW4pOwotICBpZiAoc3RybmNtcCh1 bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7Ci0gICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0 eDJcbiIpOyBleGl0ICgwKTsKLSAgfQotICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAy KSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLwotICAgIHByaW50ZiAoImkzODYtc2Vx dWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7Ci0gIH0KLSAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0 eFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkICh2YXgpCi0jaWYgIWRlZmlu ZWQgKHVsdHJpeCkKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpZiBkZWZpbmVkIChCU0QpCi0j aWYgQlNEID09IDQzCi0gIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7Ci0j ZWxzZQotI2lmIEJTRCA9PSAxOTkwMDYKLSAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4i KTsgZXhpdCAoMCk7Ci0jZWxzZQotICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDAp OwotI2VuZGlmCi0jZW5kaWYKLSNlbHNlCi0gIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhp dCAoMCk7Ci0jZW5kaWYKLSNlbHNlCi0jaWYgZGVmaW5lZChfU0laRV9UXykgfHwgZGVmaW5lZChT SUdMT1NUKQotICBzdHJ1Y3QgdXRzbmFtZSB1bjsKLSAgdW5hbWUgKCZ1bik7Ci0gIHByaW50ZiAo InZheC1kZWMtdWx0cml4JXNcbiIsIHVuLnJlbGVhc2UpOyBleGl0ICgwKTsKLSNlbHNlCi0gIHBy aW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNlbmRpZgotI2Vu ZGlmCi0jaWYgZGVmaW5lZCh1bHRyaXgpIHx8IGRlZmluZWQoX3VsdHJpeCkgfHwgZGVmaW5lZChf X3VsdHJpeCkgfHwgZGVmaW5lZChfX3VsdHJpeF9fKQotI2lmIGRlZmluZWQobWlwcykgfHwgZGVm aW5lZChfX21pcHMpIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoTUlQUykgfHwgZGVm aW5lZChfX01JUFNfXykKLSNpZiBkZWZpbmVkKF9TSVpFX1RfKSB8fCBkZWZpbmVkKFNJR0xPU1Qp Ci0gIHN0cnVjdCB1dHNuYW1lICp1bjsKLSAgdW5hbWUgKCZ1bik7Ci0gIHByaW50ZiAoIm1pcHMt ZGVjLXVsdHJpeCVzXG4iLCB1bi5yZWxlYXNlKTsgZXhpdCAoMCk7Ci0jZWxzZQotICBwcmludGYg KCJtaXBzLWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYK LQotI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCi0gIHByaW50ZiAoImk4 NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0gIGV4aXQgKDEpOwotfQot RU9GCi0KLSRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIgIiRkdW1teS5jIiAyPi9kZXYvbnVsbCAm JiBTWVNURU1fTkFNRT0kKCRkdW1teSkgJiYKLQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7 IH0KLQotIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50Lgot dGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gIiRJU1AtYXBvbGxvLSRTWVNUWVBFIjsgZXhp dDsgfQotCi1lY2hvICIkMDogdW5hYmxlIHRvIGd1ZXNzIHN5c3RlbSB0eXBlIiA+JjIKLQotY2Fz ZSAiJFVOQU1FX01BQ0hJTkU6JFVOQU1FX1NZU1RFTSIgaW4KLSAgICBtaXBzOkxpbnV4IHwgbWlw czY0OkxpbnV4KQotCSMgSWYgd2UgZ290IGhlcmUgb24gTUlQUyBHTlUvTGludXgsIG91dHB1dCBl eHRyYSBpbmZvcm1hdGlvbi4KLQljYXQgPiYyIDw8RU9GCi0KLU5PVEU6IE1JUFMgR05VL0xpbnV4 IHN5c3RlbXMgcmVxdWlyZSBhIEMgY29tcGlsZXIgdG8gZnVsbHkgcmVjb2duaXplCi10aGUgc3lz dGVtIHR5cGUuIFBsZWFzZSBpbnN0YWxsIGEgQyBjb21waWxlciBhbmQgdHJ5IGFnYWluLgotRU9G Ci0JOzsKLWVzYWMKLQotY2F0ID4mMiA8PEVPRgotCi1UaGlzIHNjcmlwdCAodmVyc2lvbiAkdGlt ZXN0YW1wKSwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlCi1vcGVyYXRpbmcgc3lzdGVtIHlv dSBhcmUgdXNpbmcuIElmIHlvdXIgc2NyaXB0IGlzIG9sZCwgb3ZlcndyaXRlICphbGwqCi1jb3Bp ZXMgb2YgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9u cyBmcm9tOgotCi0gIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jb25maWcuZ2l0 L3BsYWluL2NvbmZpZy5ndWVzcwotYW5kCi0gIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcv Y2dpdC9jb25maWcuZ2l0L3BsYWluL2NvbmZpZy5zdWIKLUVPRgotCi15ZWFyPSQoZWNobyAkdGlt ZXN0YW1wIHwgc2VkICdzLC0uKiwsJykKLSMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAwMwotaWYg dGVzdCAiJChleHByICIkKGRhdGUgKyVZKSIgLSAiJHllYXIiKSIgLWx0IDMgOyB0aGVuCi0gICBj YXQgPiYyIDw8RU9GCi0KLUlmICQwIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCwgc2VuZCB0aGUg Zm9sbG93aW5nIGRhdGEgYW5kIGFueQotaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlIHBl cnRpbmVudCB0byBjb25maWctcGF0Y2hlc0BnbnUub3JnIHRvCi1wcm92aWRlIHRoZSBuZWNlc3Nh cnkgaW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgotCi1jb25maWcuZ3Vlc3MgdGlt ZXN0YW1wID0gJHRpbWVzdGFtcAotCi11bmFtZSAtbSA9ICQoICh1bmFtZSAtbSkgMj4vZGV2L251 bGwgfHwgZWNobyB1bmtub3duKQotdW5hbWUgLXIgPSAkKCAodW5hbWUgLXIpIDI+L2Rldi9udWxs IHx8IGVjaG8gdW5rbm93bikKLXVuYW1lIC1zID0gJCggKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8 fCBlY2hvIHVua25vd24pCi11bmFtZSAtdiA9ICQoICh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwg ZWNobyB1bmtub3duKQotCi0vdXNyL2Jpbi91bmFtZSAtcCA9ICQoICgvdXNyL2Jpbi91bmFtZSAt cCkgMj4vZGV2L251bGwpCi0vYmluL3VuYW1lIC1YICAgICA9ICQoICgvYmluL3VuYW1lIC1YKSAy Pi9kZXYvbnVsbCkKLQotaG9zdGluZm8gICAgICAgICAgICAgICA9ICQoIChob3N0aW5mbykgMj4v ZGV2L251bGwpCi0vYmluL3VuaXZlcnNlICAgICAgICAgID0gJCggKC9iaW4vdW5pdmVyc2UpIDI+ L2Rldi9udWxsKQotL3Vzci9iaW4vYXJjaCAtayAgICAgICA9ICQoICgvdXNyL2Jpbi9hcmNoIC1r KSAyPi9kZXYvbnVsbCkKLS9iaW4vYXJjaCAgICAgICAgICAgICAgPSAkKCAoL2Jpbi9hcmNoKSAy Pi9kZXYvbnVsbCkKLS91c3IvYmluL29zbGV2ZWwgICAgICAgPSAkKCAoL3Vzci9iaW4vb3NsZXZl bCkgMj4vZGV2L251bGwpCi0vdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gJCggKC91c3IvY29udmV4 L2dldHN5c2luZm8pIDI+L2Rldi9udWxsKQotCi1VTkFNRV9NQUNISU5FID0gIiRVTkFNRV9NQUNI SU5FIgotVU5BTUVfUkVMRUFTRSA9ICIkVU5BTUVfUkVMRUFTRSIKLVVOQU1FX1NZU1RFTSAgPSAi JFVOQU1FX1NZU1RFTSIKLVVOQU1FX1ZFUlNJT04gPSAiJFVOQU1FX1ZFUlNJT04iCi1FT0YKLWZp Ci0KLWV4aXQgMQotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICdiZWZv cmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1w PSciCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKLSMgdGltZS1zdGFtcC1l bmQ6ICInIgotIyBFbmQ6CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvYnVpbGQtYXV4L2NvbmZpZy5zdWIgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9idWlsZC1hdXgvY29uZmlnLnN1YgpkZWxldGVkIGZpbGUgbW9kZSAx MDA3NTUKaW5kZXggYjBmODQ5Mi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9idWlsZC1hdXgvY29uZmlnLnN1YgorKysgL2Rldi9udWxsCkBAIC0x LDE4NTUgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vi cm91dGluZSBzY3JpcHQuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAyMSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KLQotdGltZXN0YW1wPScyMDIxLTAxLTA3JwotCi0jIFRoaXMgZmlsZSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9n cmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkg QXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRp b24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0Ci0jIHByb2dyYW0uICBU aGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3 Ci0jIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMi KS4KLQotCi0jIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+ LgotIwotIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNh bGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KLSMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmln dXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgotIyBJZiBpdCBpcyBpbnZhbGlkLCB3ZSBwcmlu dCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZGVyciBhbmQgZXhpdCB3aXRoIGNvZGUgMS4KLSMgT3Ro ZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQg c3VjY2VlZC4KLQotIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3Jp cHQgZnJvbToKLSMgaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NvbmZpZy5naXQv cGxhaW4vY29uZmlnLnN1YgotCi0jIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2Ft ZSBmb3IgYWxsIEdOVSBwYWNrYWdlcwotIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVz LCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKLSMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICph bnkqIEdOVSBzb2Z0d2FyZS4KLSMgRWFjaCBwYWNrYWdlIGlzIHJlc3BvbnNpYmxlIGZvciByZXBv cnRpbmcgd2hpY2ggdmFsaWQgY29uZmlndXJhdGlvbnMKLSMgaXQgZG9lcyBub3Qgc3VwcG9ydC4g IFRoZSB1c2VyIHNob3VsZCBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoCi0jIGEgZmFpbHVyZSB0byBz dXBwb3J0IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmcm9tIGEgbWVhbmluZ2xlc3MKLSMgY29uZmln dXJhdGlvbi4KLQotIyBUaGUgZ29hbCBvZiB0aGlzIGZpbGUgaXMgdG8gbWFwIGFsbCB0aGUgdmFy aW91cyB2YXJpYXRpb25zIG9mIGEgZ2l2ZW4KLSMgbWFjaGluZSBzcGVjaWZpY2F0aW9uIGludG8g YSBzaW5nbGUgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybToKLSMJQ1BVX1RZUEUtTUFOVUZBQ1RV UkVSLU9QRVJBVElOR19TWVNURU0KLSMgb3IgaW4gc29tZSBjYXNlcywgdGhlIG5ld2VyIGZvdXIt cGFydCBmb3JtOgotIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNU RU0KLSMgSXQgaXMgd3JvbmcgdG8gZWNobyBhbnkgb3RoZXIgdHlwZSBvZiBzcGVjaWZpY2F0aW9u LgotCi1tZT0kKGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCcpCi0KLXVzYWdlPSJcCi1Vc2Fn ZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUyBvciBBTElBUwotCi1DYW5vbmljYWxpemUgYSBj b25maWd1cmF0aW9uIG5hbWUuCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgICBwcmlu dCB0aGlzIGhlbHAsIHRoZW4gZXhpdAotICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBv ZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0Ci0gIC12LCAtLXZlcnNpb24gICAgICBwcmlu dCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0Ci0KLVJlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRv IDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCi0KLXZlcnNpb249IlwKLUdOVSBjb25maWcuc3Vi ICgkdGltZXN0YW1wKQotCi1Db3B5cmlnaHQgMTk5Mi0yMDIxIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgotCi1UaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBj b3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwotd2FycmFudHk7IG5vdCBldmVuIGZvciBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgotCi1o ZWxwPSIKLVRyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLQotIyBQYXJz ZSBjb21tYW5kIGxpbmUKLXdoaWxlIHRlc3QgJCMgLWd0IDAgOyBkbwotICBjYXNlICQxIGluCi0g ICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKLSAgICAgICBlY2hvICIkdGltZXN0YW1w IiA7IGV4aXQgOzsKLSAgICAtLXZlcnNpb24gfCAtdiApCi0gICAgICAgZWNobyAiJHZlcnNpb24i IDsgZXhpdCA7OwotICAgIC0taGVscCB8IC0taCogfCAtaCApCi0gICAgICAgZWNobyAiJHVzYWdl IjsgZXhpdCA7OwotICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZwotICAgICAg IHNoaWZ0OyBicmVhayA7OwotICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KLSAgICAgICBi cmVhayA7OwotICAgIC0qICkKLSAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhl bHAiID4mMgotICAgICAgIGV4aXQgMSA7OwotCi0gICAgKmxvY2FsKikKLSAgICAgICAjIEZpcnN0 IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KLSAgICAgICBlY2hvICIkMSIK LSAgICAgICBleGl0IDs7Ci0KLSAgICAqICkKLSAgICAgICBicmVhayA7OwotICBlc2FjCi1kb25l Ci0KLWNhc2UgJCMgaW4KLSAwKSBlY2hvICIkbWU6IG1pc3NpbmcgYXJndW1lbnQkaGVscCIgPiYy Ci0gICAgZXhpdCAxOzsKLSAxKSA7OwotICopIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRz JGhlbHAiID4mMgotICAgIGV4aXQgMTs7Ci1lc2FjCi0KLSMgU3BsaXQgZmllbGRzIG9mIGNvbmZp Z3VyYXRpb24gdHlwZQotIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTYyCi1JRlM9Ii0iIHJlYWQg ZmllbGQxIGZpZWxkMiBmaWVsZDMgZmllbGQ0IDw8RU9GCi0kMQotRU9GCi0KLSMgU2VwYXJhdGUg aW50byBsb2dpY2FsIGNvbXBvbmVudHMgZm9yIGZ1cnRoZXIgdmFsaWRhdGlvbgotY2FzZSAkMSBp bgotCSotKi0qLSotKikKLQkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAiJDEiXCc6IG1v cmUgdGhhbiBmb3VyIGNvbXBvbmVudHMgPiYyCi0JCWV4aXQgMQotCQk7OwotCSotKi0qLSopCi0J CWJhc2ljX21hY2hpbmU9JGZpZWxkMS0kZmllbGQyCi0JCWJhc2ljX29zPSRmaWVsZDMtJGZpZWxk NAotCQk7OwotCSotKi0qKQotCQkjIEFtYmlndW91cyB3aGV0aGVyIENPTVBBTlkgaXMgcHJlc2Vu dCwgb3Igc2tpcHBlZCBhbmQgS0VSTkVMLU9TIGlzIHR3bwotCQkjIHBhcnRzCi0JCW1heWJlX29z PSRmaWVsZDItJGZpZWxkMwotCQljYXNlICRtYXliZV9vcyBpbgotCQkJbnRvLXFueCogfCBsaW51 eC0qIHwgdWNsaW51eC11Y2xpYmMqIFwKLQkJCXwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdu dSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIFwKLQkJCXwgbmV0YnNkKi1lYWJpKiB8 IGtvcGVuc29sYXJpcyotZ251KiB8IGNsb3VkYWJpKi1lYWJpKiBcCi0JCQl8IHN0b3JtLWNoYW9z KiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKLQkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEKLQkJ CQliYXNpY19vcz0kbWF5YmVfb3MKLQkJCQk7OwotCQkJYW5kcm9pZC1saW51eCkKLQkJCQliYXNp Y19tYWNoaW5lPSRmaWVsZDEtdW5rbm93bgotCQkJCWJhc2ljX29zPWxpbnV4LWFuZHJvaWQKLQkJ CQk7OwotCQkJKikKLQkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEtJGZpZWxkMgotCQkJCWJhc2lj X29zPSRmaWVsZDMKLQkJCQk7OwotCQllc2FjCi0JCTs7Ci0JKi0qKQotCQkjIEEgbG9uZSBjb25m aWcgd2UgaGFwcGVuIHRvIG1hdGNoIG5vdCBmaXR0aW5nIGFueSBwYXR0ZXJuCi0JCWNhc2UgJGZp ZWxkMS0kZmllbGQyIGluCi0JCQlkZWNzdGF0aW9uLTMxMDApCi0JCQkJYmFzaWNfbWFjaGluZT1t aXBzLWRlYwotCQkJCWJhc2ljX29zPQotCQkJCTs7Ci0JCQkqLSopCi0JCQkJIyBTZWNvbmQgY29t cG9uZW50IGlzIHVzdWFsbHksIGJ1dCBub3QgYWx3YXlzIHRoZSBPUwotCQkJCWNhc2UgJGZpZWxk MiBpbgotCQkJCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMg dmFsaWQgb3MKLQkJCQkJc3VuKm9zKikKLQkJCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMQotCQkJ CQkJYmFzaWNfb3M9JGZpZWxkMgotCQkJCQkJOzsKLQkJCQkJIyBNYW51ZmFjdHVyZXJzCi0JCQkJ CWRlYyogfCBtaXBzKiB8IHNlcXVlbnQqIHwgZW5jb3JlKiB8IHBjNTMzKiB8IHNnaSogfCBzb255 KiBcCi0JCQkJCXwgYXR0KiB8IDczMDAqIHwgMzMwMCogfCBkZWx0YSogfCBtb3Rvcm9sYSogfCBz dW5bMjM0XSogXAotCQkJCQl8IHVuaWNvbSogfCBpYm0qIHwgbmV4dCB8IGhwIHwgaXNpKiB8IGFw b2xsbyB8IGFsdG9zKiBcCi0JCQkJCXwgY29udmVyZ2VudCogfCBuY3IqIHwgbmV3cyB8IDMyKiB8 IDM2MDAqIHwgMzEwMCogXAotCQkJCQl8IGhpdGFjaGkqIHwgY1sxMjNdKiB8IGNvbnZleCogfCBz dW4gfCBjcmRzIHwgb21yb24qIHwgZGcgXAotCQkJCQl8IHVsdHJhIHwgdHRpKiB8IGhhcnJpcyB8 IGRvbHBoaW4gfCBoaWdobGV2ZWwgfCBnb3VsZCBcCi0JCQkJCXwgY2JtIHwgbnMgfCBtYXNzY29t cCB8IGFwcGxlIHwgYXhpcyB8IGtudXRoIHwgY3JheSBcCi0JCQkJCXwgbWljcm9ibGF6ZSogfCBz aW0gfCBjaXNjbyBcCi0JCQkJCXwgb2tpIHwgd2VjIHwgd3JzIHwgd2luYm9uZCkKLQkJCQkJCWJh c2ljX21hY2hpbmU9JGZpZWxkMS0kZmllbGQyCi0JCQkJCQliYXNpY19vcz0KLQkJCQkJCTs7Ci0J CQkJCSopCi0JCQkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEKLQkJCQkJCWJhc2ljX29zPSRmaWVs ZDIKLQkJCQkJCTs7Ci0JCQkJZXNhYwotCQkJOzsKLQkJZXNhYwotCQk7OwotCSopCi0JCSMgQ29u dmVydCBzaW5nbGUtY29tcG9uZW50IHNob3J0LWhhbmRzIG5vdCB2YWxpZCBhcyBwYXJ0IG9mCi0J CSMgbXVsdGktY29tcG9uZW50IGNvbmZpZ3VyYXRpb25zLgotCQljYXNlICRmaWVsZDEgaW4KLQkJ CTM4NmJzZCkKLQkJCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJCQliYXNpY19vcz1ic2QKLQkJ CQk7OwotCQkJYTI5a2hpZikKLQkJCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCi0JCQkJYmFzaWNf b3M9dWRpCi0JCQkJOzsKLQkJCWFkb2JlNjhrKQotCQkJCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFk b2JlCi0JCQkJYmFzaWNfb3M9c2NvdXQKLQkJCQk7OwotCQkJYWxsaWFudCkKLQkJCQliYXNpY19t YWNoaW5lPWZ4ODAtYWxsaWFudAotCQkJCWJhc2ljX29zPQotCQkJCTs7Ci0JCQlhbHRvcyB8IGFs dG9zMzA2OCkKLQkJCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKLQkJCQliYXNpY19vcz0KLQkJ CQk7OwotCQkJYW0yOWspCi0JCQkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKLQkJCQliYXNpY19v cz1ic2QKLQkJCQk7OwotCQkJYW1kYWhsKQotCQkJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAot CQkJCWJhc2ljX29zPXN5c3YKLQkJCQk7OwotCQkJYW1pZ2EpCi0JCQkJYmFzaWNfbWFjaGluZT1t NjhrLXVua25vd24KLQkJCQliYXNpY19vcz0KLQkJCQk7OwotCQkJYW1pZ2FvcyB8IGFtaWdhZG9z KQotCQkJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCi0JCQkJYmFzaWNfb3M9YW1pZ2Fvcwot CQkJCTs7Ci0JCQlhbWlnYXVuaXggfCBhbWl4KQotCQkJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtu b3duCi0JCQkJYmFzaWNfb3M9c3lzdjQKLQkJCQk7OwotCQkJYXBvbGxvNjgpCi0JCQkJYmFzaWNf bWFjaGluZT1tNjhrLWFwb2xsbwotCQkJCWJhc2ljX29zPXN5c3YKLQkJCQk7OwotCQkJYXBvbGxv Njhic2QpCi0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwotCQkJCWJhc2ljX29zPWJzZAot CQkJCTs7Ci0JCQlhcm9zKQotCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQkJCWJhc2ljX29z PWFyb3MKLQkJCQk7OwotCQkJYXV4KQotCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQotCQkJ CWJhc2ljX29zPWF1eAotCQkJCTs7Ci0JCQliYWxhbmNlKQotCQkJCWJhc2ljX21hY2hpbmU9bnMz Mmstc2VxdWVudAotCQkJCWJhc2ljX29zPWR5bml4Ci0JCQkJOzsKLQkJCWJsYWNrZmluKQotCQkJ CWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCi0JCQkJYmFzaWNfb3M9bGludXgKLQkJCQk7Owot CQkJY2VnY2MpCi0JCQkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgotCQkJCWJhc2ljX29zPWNl Z2NjCi0JCQkJOzsKLQkJCWNvbnZleC1jMSkKLQkJCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAot CQkJCWJhc2ljX29zPWJzZAotCQkJCTs7Ci0JCQljb252ZXgtYzIpCi0JCQkJYmFzaWNfbWFjaGlu ZT1jMi1jb252ZXgKLQkJCQliYXNpY19vcz1ic2QKLQkJCQk7OwotCQkJY29udmV4LWMzMikKLQkJ CQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKLQkJCQliYXNpY19vcz1ic2QKLQkJCQk7OwotCQkJ Y29udmV4LWMzNCkKLQkJCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKLQkJCQliYXNpY19vcz1i c2QKLQkJCQk7OwotCQkJY29udmV4LWMzOCkKLQkJCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgK LQkJCQliYXNpY19vcz1ic2QKLQkJCQk7OwotCQkJY3JheSkKLQkJCQliYXNpY19tYWNoaW5lPWo5 MC1jcmF5Ci0JCQkJYmFzaWNfb3M9dW5pY29zCi0JCQkJOzsKLQkJCWNyZHMgfCB1bm9zKQotCQkJ CWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCi0JCQkJYmFzaWNfb3M9Ci0JCQkJOzsKLQkJCWRhMzAp Ci0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKLQkJCQliYXNpY19vcz0KLQkJCQk7OwotCQkJ ZGVjc3RhdGlvbiB8IHBtYXggfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQotCQkJCWJhc2lj X21hY2hpbmU9bWlwcy1kZWMKLQkJCQliYXNpY19vcz0KLQkJCQk7OwotCQkJZGVsdGE4OCkKLQkJ CQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKLQkJCQliYXNpY19vcz1zeXN2MwotCQkJCTs7 Ci0JCQlkaWNvcykKLQkJCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJCQliYXNpY19vcz1kaWNv cwotCQkJCTs7Ci0JCQlkamdwcCkKLQkJCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKLQkJCQliYXNp Y19vcz1tc2Rvc2RqZ3BwCi0JCQkJOzsKLQkJCWVibW9uMjlrKQotCQkJCWJhc2ljX21hY2hpbmU9 YTI5ay1hbWQKLQkJCQliYXNpY19vcz1lYm1vbgotCQkJCTs7Ci0JCQllczE4MDAgfCBPU0U2OGsg fCBvc2U2OGsgfCBvc2UgfCBPU0UpCi0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCi0J CQkJYmFzaWNfb3M9b3NlCi0JCQkJOzsKLQkJCWdtaWNybykKLQkJCQliYXNpY19tYWNoaW5lPXRy b24tZ21pY3JvCi0JCQkJYmFzaWNfb3M9c3lzdgotCQkJCTs7Ci0JCQlnbzMyKQotCQkJCWJhc2lj X21hY2hpbmU9aTM4Ni1wYwotCQkJCWJhc2ljX29zPWdvMzIKLQkJCQk7OwotCQkJaDgzMDBobXMp Ci0JCQkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCi0JCQkJYmFzaWNfb3M9aG1zCi0JCQkJ OzsKLQkJCWg4MzAweHJheSkKLQkJCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKLQkJCQli YXNpY19vcz14cmF5Ci0JCQkJOzsKLQkJCWg4NTAwaG1zKQotCQkJCWJhc2ljX21hY2hpbmU9aDg1 MDAtaGl0YWNoaQotCQkJCWJhc2ljX29zPWhtcwotCQkJCTs7Ci0JCQloYXJyaXMpCi0JCQkJYmFz aWNfbWFjaGluZT1tODhrLWhhcnJpcwotCQkJCWJhc2ljX29zPXN5c3YzCi0JCQkJOzsKLQkJCWhw MzAwIHwgaHAzMDBocHV4KQotCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAotCQkJCWJhc2ljX29z PWhwdXgKLQkJCQk7OwotCQkJaHAzMDBic2QpCi0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCi0J CQkJYmFzaWNfb3M9YnNkCi0JCQkJOzsKLQkJCWhwcGFvc2YpCi0JCQkJYmFzaWNfbWFjaGluZT1o cHBhMS4xLWhwCi0JCQkJYmFzaWNfb3M9b3NmCi0JCQkJOzsKLQkJCWhwcHJvKQotCQkJCWJhc2lj X21hY2hpbmU9aHBwYTEuMS1ocAotCQkJCWJhc2ljX29zPXByb2VsZgotCQkJCTs7Ci0JCQlpMzg2 bWFjaCkKLQkJCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAotCQkJCWJhc2ljX29zPW1hY2gKLQkJ CQk7OwotCQkJaXNpNjggfCBpc2kpCi0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQotCQkJCWJh c2ljX29zPXN5c3YKLQkJCQk7OwotCQkJbTY4a25vbW11KQotCQkJCWJhc2ljX21hY2hpbmU9bTY4 ay11bmtub3duCi0JCQkJYmFzaWNfb3M9bGludXgKLQkJCQk7OwotCQkJbWFnbnVtIHwgbTMyMzAp Ci0JCQkJYmFzaWNfbWFjaGluZT1taXBzLW1pcHMKLQkJCQliYXNpY19vcz1zeXN2Ci0JCQkJOzsK LQkJCW1lcmxpbikKLQkJCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKLQkJCQliYXNpY19vcz1z eXN2Ci0JCQkJOzsKLQkJCW1pbmd3NjQpCi0JCQkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKLQkJ CQliYXNpY19vcz1taW5ndzY0Ci0JCQkJOzsKLQkJCW1pbmd3MzIpCi0JCQkJYmFzaWNfbWFjaGlu ZT1pNjg2LXBjCi0JCQkJYmFzaWNfb3M9bWluZ3czMgotCQkJCTs7Ci0JCQltaW5ndzMyY2UpCi0J CQkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgotCQkJCWJhc2ljX29zPW1pbmd3MzJjZQotCQkJ CTs7Ci0JCQltb25pdG9yKQotCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKLQkJCQliYXNp Y19vcz1jb2ZmCi0JCQkJOzsKLQkJCW1vcnBob3MpCi0JCQkJYmFzaWNfbWFjaGluZT1wb3dlcnBj LXVua25vd24KLQkJCQliYXNpY19vcz1tb3JwaG9zCi0JCQkJOzsKLQkJCW1veGllYm94KQotCQkJ CWJhc2ljX21hY2hpbmU9bW94aWUtdW5rbm93bgotCQkJCWJhc2ljX29zPW1veGllYm94Ci0JCQkJ OzsKLQkJCW1zZG9zKQotCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQkJCWJhc2ljX29zPW1z ZG9zCi0JCQkJOzsKLQkJCW1zeXMpCi0JCQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0JCQkJYmFz aWNfb3M9bXN5cwotCQkJCTs7Ci0JCQltdnMpCi0JCQkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQot CQkJCWJhc2ljX29zPW12cwotCQkJCTs7Ci0JCQluYWNsKQotCQkJCWJhc2ljX21hY2hpbmU9bGUz Mi11bmtub3duCi0JCQkJYmFzaWNfb3M9bmFjbAotCQkJCTs7Ci0JCQluY3IzMDAwKQotCQkJCWJh c2ljX21hY2hpbmU9aTQ4Ni1uY3IKLQkJCQliYXNpY19vcz1zeXN2NAotCQkJCTs7Ci0JCQluZXRi c2QzODYpCi0JCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCQkJYmFzaWNfb3M9bmV0YnNkCi0J CQkJOzsKLQkJCW5ldHdpbmRlcikKLQkJCQliYXNpY19tYWNoaW5lPWFybXY0bC1yZWJlbAotCQkJ CWJhc2ljX29zPWxpbnV4Ci0JCQkJOzsKLQkJCW5ld3MgfCBuZXdzNzAwIHwgbmV3czgwMCB8IG5l d3M5MDApCi0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKLQkJCQliYXNpY19vcz1uZXdzb3MK LQkJCQk7OwotCQkJbmV3czEwMDApCi0JCQkJYmFzaWNfbWFjaGluZT1tNjgwMzAtc29ueQotCQkJ CWJhc2ljX29zPW5ld3NvcwotCQkJCTs7Ci0JCQluZWN2NzApCi0JCQkJYmFzaWNfbWFjaGluZT12 NzAtbmVjCi0JCQkJYmFzaWNfb3M9c3lzdgotCQkJCTs7Ci0JCQluaDMwMDApCi0JCQkJYmFzaWNf bWFjaGluZT1tNjhrLWhhcnJpcwotCQkJCWJhc2ljX29zPWN4dXgKLQkJCQk7OwotCQkJbmhbNDVd MDAwKQotCQkJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKLQkJCQliYXNpY19vcz1jeHV4Ci0J CQkJOzsKLQkJCW5pbmR5OTYwKQotCQkJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAotCQkJCWJh c2ljX29zPW5pbmR5Ci0JCQkJOzsKLQkJCW1vbjk2MCkKLQkJCQliYXNpY19tYWNoaW5lPWk5NjAt aW50ZWwKLQkJCQliYXNpY19vcz1tb245NjAKLQkJCQk7OwotCQkJbm9uc3RvcHV4KQotCQkJCWJh c2ljX21hY2hpbmU9bWlwcy1jb21wYXEKLQkJCQliYXNpY19vcz1ub25zdG9wdXgKLQkJCQk7Owot CQkJb3M0MDApCi0JCQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQotCQkJCWJhc2ljX29zPW9z NDAwCi0JCQkJOzsKLQkJCU9TRTY4MDAwIHwgb3NlNjgwMDApCi0JCQkJYmFzaWNfbWFjaGluZT1t NjgwMDAtZXJpY3Nzb24KLQkJCQliYXNpY19vcz1vc2UKLQkJCQk7OwotCQkJb3M2OGspCi0JCQkJ YmFzaWNfbWFjaGluZT1tNjhrLW5vbmUKLQkJCQliYXNpY19vcz1vczY4awotCQkJCTs7Ci0JCQlw YXJhZ29uKQotCQkJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAotCQkJCWJhc2ljX29zPW9zZgot CQkJCTs7Ci0JCQlwYXJpc2MpCi0JCQkJYmFzaWNfbWFjaGluZT1ocHBhLXVua25vd24KLQkJCQli YXNpY19vcz1saW51eAotCQkJCTs7Ci0JCQlwc3ApCi0JCQkJYmFzaWNfbWFjaGluZT1taXBzYWxs ZWdyZXhlbC1zb255Ci0JCQkJYmFzaWNfb3M9cHNwCi0JCQkJOzsKLQkJCXB3MzIpCi0JCQkJYmFz aWNfbWFjaGluZT1pNTg2LXVua25vd24KLQkJCQliYXNpY19vcz1wdzMyCi0JCQkJOzsKLQkJCXJk b3MgfCByZG9zNjQpCi0JCQkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKLQkJCQliYXNpY19vcz1y ZG9zCi0JCQkJOzsKLQkJCXJkb3MzMikKLQkJCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJCQli YXNpY19vcz1yZG9zCi0JCQkJOzsKLQkJCXJvbTY4aykKLQkJCQliYXNpY19tYWNoaW5lPW02OGst cm9tNjhrCi0JCQkJYmFzaWNfb3M9Y29mZgotCQkJCTs7Ci0JCQlzYTI5MjAwKQotCQkJCWJhc2lj X21hY2hpbmU9YTI5ay1hbWQKLQkJCQliYXNpY19vcz11ZGkKLQkJCQk7OwotCQkJc2VpKQotCQkJ CWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKLQkJCQliYXNpY19vcz1zZWl1eAotCQkJCTs7Ci0JCQlz ZXF1ZW50KQotCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50Ci0JCQkJYmFzaWNfb3M9Ci0J CQkJOzsKLQkJCXNwczcpCi0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKLQkJCQliYXNpY19v cz1zeXN2MgotCQkJCTs7Ci0JCQlzdDIwMDApCi0JCQkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRl bQotCQkJCWJhc2ljX29zPQotCQkJCTs7Ci0JCQlzdHJhdHVzKQotCQkJCWJhc2ljX21hY2hpbmU9 aTg2MC1zdHJhdHVzCi0JCQkJYmFzaWNfb3M9c3lzdjQKLQkJCQk7OwotCQkJc3VuMikKLQkJCQli YXNpY19tYWNoaW5lPW02ODAwMC1zdW4KLQkJCQliYXNpY19vcz0KLQkJCQk7OwotCQkJc3VuMm9z MykKLQkJCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KLQkJCQliYXNpY19vcz1zdW5vczMKLQkJ CQk7OwotCQkJc3VuMm9zNCkKLQkJCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KLQkJCQliYXNp Y19vcz1zdW5vczQKLQkJCQk7OwotCQkJc3VuMykKLQkJCQliYXNpY19tYWNoaW5lPW02OGstc3Vu Ci0JCQkJYmFzaWNfb3M9Ci0JCQkJOzsKLQkJCXN1bjNvczMpCi0JCQkJYmFzaWNfbWFjaGluZT1t NjhrLXN1bgotCQkJCWJhc2ljX29zPXN1bm9zMwotCQkJCTs7Ci0JCQlzdW4zb3M0KQotCQkJCWJh c2ljX21hY2hpbmU9bTY4ay1zdW4KLQkJCQliYXNpY19vcz1zdW5vczQKLQkJCQk7OwotCQkJc3Vu NCkKLQkJCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQkJCWJhc2ljX29zPQotCQkJCTs7Ci0J CQlzdW40b3MzKQotCQkJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCQkJYmFzaWNfb3M9c3Vu b3MzCi0JCQkJOzsKLQkJCXN1bjRvczQpCi0JCQkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KLQkJ CQliYXNpY19vcz1zdW5vczQKLQkJCQk7OwotCQkJc3VuNHNvbDIpCi0JCQkJYmFzaWNfbWFjaGlu ZT1zcGFyYy1zdW4KLQkJCQliYXNpY19vcz1zb2xhcmlzMgotCQkJCTs7Ci0JCQlzdW4zODYgfCBz dW4zODZpIHwgcm9hZHJ1bm5lcikKLQkJCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCi0JCQkJYmFz aWNfb3M9Ci0JCQkJOzsKLQkJCXN2MSkKLQkJCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5Ci0JCQkJ YmFzaWNfb3M9dW5pY29zCi0JCQkJOzsKLQkJCXN5bW1ldHJ5KQotCQkJCWJhc2ljX21hY2hpbmU9 aTM4Ni1zZXF1ZW50Ci0JCQkJYmFzaWNfb3M9ZHluaXgKLQkJCQk7OwotCQkJdDNlKQotCQkJCWJh c2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQotCQkJCWJhc2ljX29zPXVuaWNvcwotCQkJCTs7Ci0J CQl0OTApCi0JCQkJYmFzaWNfbWFjaGluZT10OTAtY3JheQotCQkJCWJhc2ljX29zPXVuaWNvcwot CQkJCTs7Ci0JCQl0b2FkMSkKLQkJCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAotCQkJCWJhc2lj X29zPXRvcHMyMAotCQkJCTs7Ci0JCQl0cGYpCi0JCQkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0K LQkJCQliYXNpY19vcz10cGYKLQkJCQk7OwotCQkJdWRpMjlrKQotCQkJCWJhc2ljX21hY2hpbmU9 YTI5ay1hbWQKLQkJCQliYXNpY19vcz11ZGkKLQkJCQk7OwotCQkJdWx0cmEzKQotCQkJCWJhc2lj X21hY2hpbmU9YTI5ay1ueXUKLQkJCQliYXNpY19vcz1zeW0xCi0JCQkJOzsKLQkJCXY4MTAgfCBu ZWN2ODEwKQotCQkJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKLQkJCQliYXNpY19vcz1ub25lCi0J CQkJOzsKLQkJCXZheHYpCi0JCQkJYmFzaWNfbWFjaGluZT12YXgtZGVjCi0JCQkJYmFzaWNfb3M9 c3lzdgotCQkJCTs7Ci0JCQl2bXMpCi0JCQkJYmFzaWNfbWFjaGluZT12YXgtZGVjCi0JCQkJYmFz aWNfb3M9dm1zCi0JCQkJOzsKLQkJCXZzdGEpCi0JCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0J CQkJYmFzaWNfb3M9dnN0YQotCQkJCTs7Ci0JCQl2eHdvcmtzOTYwKQotCQkJCWJhc2ljX21hY2hp bmU9aTk2MC13cnMKLQkJCQliYXNpY19vcz12eHdvcmtzCi0JCQkJOzsKLQkJCXZ4d29ya3M2OCkK LQkJCQliYXNpY19tYWNoaW5lPW02OGstd3JzCi0JCQkJYmFzaWNfb3M9dnh3b3JrcwotCQkJCTs7 Ci0JCQl2eHdvcmtzMjlrKQotCQkJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKLQkJCQliYXNpY19v cz12eHdvcmtzCi0JCQkJOzsKLQkJCXhib3gpCi0JCQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0J CQkJYmFzaWNfb3M9bWluZ3czMgotCQkJCTs7Ci0JCQl5bXApCi0JCQkJYmFzaWNfbWFjaGluZT15 bXAtY3JheQotCQkJCWJhc2ljX29zPXVuaWNvcwotCQkJCTs7Ci0JCQkqKQotCQkJCWJhc2ljX21h Y2hpbmU9JDEKLQkJCQliYXNpY19vcz0KLQkJCQk7OwotCQllc2FjCi0JCTs7Ci1lc2FjCi0KLSMg RGVjb2RlIDEtY29tcG9uZW50IG9yIGFkLWhvYyBiYXNpYyBtYWNoaW5lcwotY2FzZSAkYmFzaWNf bWFjaGluZSBpbgotCSMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9m IGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KLQkjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFu dWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCi0Jdzg5aykKLQkJ Y3B1PWhwcGExLjEKLQkJdmVuZG9yPXdpbmJvbmQKLQkJOzsKLQlvcDUwbikKLQkJY3B1PWhwcGEx LjEKLQkJdmVuZG9yPW9raQotCQk7OwotCW9wNjBjKQotCQljcHU9aHBwYTEuMQotCQl2ZW5kb3I9 b2tpCi0JCTs7Ci0JaWJtKikKLQkJY3B1PWkzNzAKLQkJdmVuZG9yPWlibQotCQk7OwotCW9yaW9u MTA1KQotCQljcHU9Y2xpcHBlcgotCQl2ZW5kb3I9aGlnaGxldmVsCi0JCTs7Ci0JbWFjIHwgbXB3 IHwgbWFjLW1wdykKLQkJY3B1PW02OGsKLQkJdmVuZG9yPWFwcGxlCi0JCTs7Ci0JcG1hYyB8IHBt YWMtbXB3KQotCQljcHU9cG93ZXJwYwotCQl2ZW5kb3I9YXBwbGUKLQkJOzsKLQotCSMgUmVjb2du aXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKLQkj IGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgot CTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5p eHBjKQotCQljcHU9bTY4MDAwCi0JCXZlbmRvcj1hdHQKLQkJOzsKLQkzYiopCi0JCWNwdT13ZTMy awotCQl2ZW5kb3I9YXR0Ci0JCTs7Ci0JYmx1ZWdlbmUqKQotCQljcHU9cG93ZXJwYwotCQl2ZW5k b3I9aWJtCi0JCWJhc2ljX29zPWNuawotCQk7OwotCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKLQkJ Y3B1PXBkcDEwCi0JCXZlbmRvcj1kZWMKLQkJYmFzaWNfb3M9dG9wczEwCi0JCTs7Ci0JZGVjc3lz dGVtMjAqIHwgZGVjMjAqKQotCQljcHU9cGRwMTAKLQkJdmVuZG9yPWRlYwotCQliYXNpY19vcz10 b3BzMjAKLQkJOzsKLQlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVs dGEgXAotCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQotCQljcHU9bTY4 awotCQl2ZW5kb3I9bW90b3JvbGEKLQkJOzsKLQlkcHgyKikKLQkJY3B1PW02OGsKLQkJdmVuZG9y PWJ1bGwKLQkJYmFzaWNfb3M9c3lzdjMKLQkJOzsKLQllbmNvcmUgfCB1bWF4IHwgbW1heCkKLQkJ Y3B1PW5zMzJrCi0JCXZlbmRvcj1lbmNvcmUKLQkJOzsKLQllbHhzaSkKLQkJY3B1PWVseHNpCi0J CXZlbmRvcj1lbHhzaQotCQliYXNpY19vcz0ke2Jhc2ljX29zOi1ic2R9Ci0JCTs7Ci0JZngyODAw KQotCQljcHU9aTg2MAotCQl2ZW5kb3I9YWxsaWFudAotCQk7OwotCWdlbml4KQotCQljcHU9bnMz MmsKLQkJdmVuZG9yPW5zCi0JCTs7Ci0JaDMwNTByKiB8IGhpdXgqKQotCQljcHU9aHBwYTEuMQot CQl2ZW5kb3I9aGl0YWNoaQotCQliYXNpY19vcz1oaXV4d2UyCi0JCTs7Ci0JaHAzazlbMC05XVsw LTldIHwgaHA5WzAtOV1bMC05XSkKLQkJY3B1PWhwcGExLjAKLQkJdmVuZG9yPWhwCi0JCTs7Ci0J aHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCi0JCWNwdT1tNjgwMDAKLQkJdmVuZG9yPWhw Ci0JCTs7Ci0JaHA5azNbMi05XVswLTldKQotCQljcHU9bTY4awotCQl2ZW5kb3I9aHAKLQkJOzsK LQlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQotCQljcHU9aHBwYTEuMAotCQl2ZW5k b3I9aHAKLQkJOzsKLQlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCi0JCWNwdT1o cHBhMS4xCi0JCXZlbmRvcj1ocAotCQk7OwotCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQotCQkj IEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAotCQljcHU9aHBwYTEuMQotCQl2ZW5kb3I9aHAKLQkJ OzsKLQlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlr OFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCi0JCSMgRklYTUU6IHJlYWxseSBo cHBhMi4wLWhwCi0JCWNwdT1ocHBhMS4xCi0JCXZlbmRvcj1ocAotCQk7OwotCWhwOWs4WzAtOV1b MTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQotCQljcHU9aHBwYTEuMQotCQl2ZW5kb3I9aHAKLQkJ OzsKLQlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQotCQljcHU9aHBwYTEuMAotCQl2 ZW5kb3I9aHAKLQkJOzsKLQlpKjg2djMyKQotCQljcHU9JChlY2hvICIkMSIgfCBzZWQgLWUgJ3Mv ODYuKi84Ni8nKQotCQl2ZW5kb3I9cGMKLQkJYmFzaWNfb3M9c3lzdjMyCi0JCTs7Ci0JaSo4NnY0 KikKLQkJY3B1PSQoZWNobyAiJDEiIHwgc2VkIC1lICdzLzg2LiovODYvJykKLQkJdmVuZG9yPXBj Ci0JCWJhc2ljX29zPXN5c3Y0Ci0JCTs7Ci0JaSo4NnYpCi0JCWNwdT0kKGVjaG8gIiQxIiB8IHNl ZCAtZSAncy84Ni4qLzg2LycpCi0JCXZlbmRvcj1wYwotCQliYXNpY19vcz1zeXN2Ci0JCTs7Ci0J aSo4NnNvbDIpCi0JCWNwdT0kKGVjaG8gIiQxIiB8IHNlZCAtZSAncy84Ni4qLzg2LycpCi0JCXZl bmRvcj1wYwotCQliYXNpY19vcz1zb2xhcmlzMgotCQk7OwotCWo5MCB8IGo5MC1jcmF5KQotCQlj cHU9ajkwCi0JCXZlbmRvcj1jcmF5Ci0JCWJhc2ljX29zPSR7YmFzaWNfb3M6LXVuaWNvc30KLQkJ OzsKLQlpcmlzIHwgaXJpczRkKQotCQljcHU9bWlwcwotCQl2ZW5kb3I9c2dpCi0JCWNhc2UgJGJh c2ljX29zIGluCi0JCSAgICBpcml4KikKLQkJCTs7Ci0JCSAgICAqKQotCQkJYmFzaWNfb3M9aXJp eDQKLQkJCTs7Ci0JCWVzYWMKLQkJOzsKLQltaW5pZnJhbWUpCi0JCWNwdT1tNjgwMDAKLQkJdmVu ZG9yPWNvbnZlcmdlbnQKLQkJOzsKLQkqbWludCB8IG1pbnRbMC05XSogfCAqTWlOVCB8ICpNaU5U WzAtOV0qKQotCQljcHU9bTY4awotCQl2ZW5kb3I9YXRhcmkKLQkJYmFzaWNfb3M9bWludAotCQk7 OwotCW5ld3MtMzYwMCB8IHJpc2MtbmV3cykKLQkJY3B1PW1pcHMKLQkJdmVuZG9yPXNvbnkKLQkJ YmFzaWNfb3M9bmV3c29zCi0JCTs7Ci0JbmV4dCB8IG0qLW5leHQpCi0JCWNwdT1tNjhrCi0JCXZl bmRvcj1uZXh0Ci0JCWNhc2UgJGJhc2ljX29zIGluCi0JCSAgICBvcGVuc3RlcCopCi0JCSAgICAg ICAgOzsKLQkJICAgIG5leHRzdGVwKikKLQkJCTs7Ci0JCSAgICBuczIqKQotCQkgICAgICBiYXNp Y19vcz1uZXh0c3RlcDIKLQkJCTs7Ci0JCSAgICAqKQotCQkgICAgICBiYXNpY19vcz1uZXh0c3Rl cDMKLQkJCTs7Ci0JCWVzYWMKLQkJOzsKLQlucDEpCi0JCWNwdT1ucDEKLQkJdmVuZG9yPWdvdWxk Ci0JCTs7Ci0Jb3A1MG4tKiB8IG9wNjBjLSopCi0JCWNwdT1ocHBhMS4xCi0JCXZlbmRvcj1va2kK LQkJYmFzaWNfb3M9cHJvZWxmCi0JCTs7Ci0JcGEtaGl0YWNoaSkKLQkJY3B1PWhwcGExLjEKLQkJ dmVuZG9yPWhpdGFjaGkKLQkJYmFzaWNfb3M9aGl1eHdlMgotCQk7OwotCXBiZCkKLQkJY3B1PXNw YXJjCi0JCXZlbmRvcj10dGkKLQkJOzsKLQlwYmIpCi0JCWNwdT1tNjhrCi0JCXZlbmRvcj10dGkK LQkJOzsKLQlwYzUzMikKLQkJY3B1PW5zMzJrCi0JCXZlbmRvcj1wYzUzMgotCQk7OwotCXBuKQot CQljcHU9cG4KLQkJdmVuZG9yPWdvdWxkCi0JCTs7Ci0JcG93ZXIpCi0JCWNwdT1wb3dlcgotCQl2 ZW5kb3I9aWJtCi0JCTs7Ci0JcHMyKQotCQljcHU9aTM4NgotCQl2ZW5kb3I9aWJtCi0JCTs7Ci0J cm1bNDZdMDApCi0JCWNwdT1taXBzCi0JCXZlbmRvcj1zaWVtZW5zCi0JCTs7Ci0JcnRwYyB8IHJ0 cGMtKikKLQkJY3B1PXJvbXAKLQkJdmVuZG9yPWlibQotCQk7OwotCXNkZSkKLQkJY3B1PW1pcHNp c2EzMgotCQl2ZW5kb3I9c2RlCi0JCWJhc2ljX29zPSR7YmFzaWNfb3M6LWVsZn0KLQkJOzsKLQlz aW1zby13cnMpCi0JCWNwdT1zcGFyY2xpdGUKLQkJdmVuZG9yPXdycwotCQliYXNpY19vcz12eHdv cmtzCi0JCTs7Ci0JdG93ZXIgfCB0b3dlci0zMikKLQkJY3B1PW02OGsKLQkJdmVuZG9yPW5jcgot CQk7OwotCXZwcCp8dnh8dngtKikKLQkJY3B1PWYzMDEKLQkJdmVuZG9yPWZ1aml0c3UKLQkJOzsK LQl3NjUpCi0JCWNwdT13NjUKLQkJdmVuZG9yPXdkYwotCQk7OwotCXc4OWstKikKLQkJY3B1PWhw cGExLjEKLQkJdmVuZG9yPXdpbmJvbmQKLQkJYmFzaWNfb3M9cHJvZWxmCi0JCTs7Ci0Jbm9uZSkK LQkJY3B1PW5vbmUKLQkJdmVuZG9yPW5vbmUKLQkJOzsKLQlsZW9ufGxlb25bMy05XSkKLQkJY3B1 PXNwYXJjCi0JCXZlbmRvcj0kYmFzaWNfbWFjaGluZQotCQk7OwotCWxlb24tKnxsZW9uWzMtOV0t KikKLQkJY3B1PXNwYXJjCi0JCXZlbmRvcj0kKGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAn cy8tLiovLycpCi0JCTs7Ci0KLQkqLSopCi0JCSMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE2Mgot CQlJRlM9Ii0iIHJlYWQgY3B1IHZlbmRvciA8PEVPRgotJGJhc2ljX21hY2hpbmUKLUVPRgotCQk7 OwotCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCi0JIyBiZWNhdXNlICgxKSB0 aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCi0JIyAoMikgdGhlIHdvcmQgInVua25v d24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgotCWkqODYgfCB4ODZfNjQpCi0J CWNwdT0kYmFzaWNfbWFjaGluZQotCQl2ZW5kb3I9cGMKLQkJOzsKLQkjIFRoZXNlIHJ1bGVzIGFy ZSBkdXBsaWNhdGVkIGZyb20gYmVsb3cgZm9yIHNha2Ugb2YgdGhlIHNwZWNpYWwgY2FzZSBhYm92 ZTsKLQkjIGkuZS4gdGhpbmdzIHRoYXQgbm9ybWFsaXplZCB0byB4ODYgYXJjaGVzIHNob3VsZCBh bHNvIGRlZmF1bHQgdG8gInBjIgotCXBjOTgpCi0JCWNwdT1pMzg2Ci0JCXZlbmRvcj1wYwotCQk7 OwotCXg2NCB8IGFtZDY0KQotCQljcHU9eDg2XzY0Ci0JCXZlbmRvcj1wYwotCQk7OwotCSMgUmVj b2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCi0JKikKLQkJ Y3B1PSRiYXNpY19tYWNoaW5lCi0JCXZlbmRvcj11bmtub3duCi0JCTs7Ci1lc2FjCi0KLXVuc2V0 IC12IGJhc2ljX21hY2hpbmUKLQotIyBEZWNvZGUgYmFzaWMgbWFjaGluZXMgaW4gdGhlIGZ1bGwg YW5kIHByb3BlciBDUFUtQ29tcGFueSBmb3JtLgotY2FzZSAkY3B1LSR2ZW5kb3IgaW4KLQkjIEhl cmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG1hbnVmYWN0dXJlciBvZiBjZXJ0YWluIENQVSB0eXBl cyBpbiBjYW5vbmljYWwgZm9ybS4gSXQgaXMgaW4KLQkjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFu dWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCi0JY3JheW52LXVu a25vd24pCi0JCXZlbmRvcj1jcmF5Ci0JCWJhc2ljX29zPSR7YmFzaWNfb3M6LXVuaWNvc21wfQot CQk7OwotCWM5MC11bmtub3duIHwgYzkwLWNyYXkpCi0JCXZlbmRvcj1jcmF5Ci0JCWJhc2ljX29z PSR7QmFzaWNfb3M6LXVuaWNvc30KLQkJOzsKLQlmeDgwLXVua25vd24pCi0JCXZlbmRvcj1hbGxp YW50Ci0JCTs7Ci0Jcm9tcC11bmtub3duKQotCQl2ZW5kb3I9aWJtCi0JCTs7Ci0JbW1peC11bmtu b3duKQotCQl2ZW5kb3I9a251dGgKLQkJOzsKLQltaWNyb2JsYXplLXVua25vd24gfCBtaWNyb2Js YXplZWwtdW5rbm93bikKLQkJdmVuZG9yPXhpbGlueAotCQk7OwotCXJzNjAwMC11bmtub3duKQot CQl2ZW5kb3I9aWJtCi0JCTs7Ci0JdmF4LXVua25vd24pCi0JCXZlbmRvcj1kZWMKLQkJOzsKLQlw ZHAxMS11bmtub3duKQotCQl2ZW5kb3I9ZGVjCi0JCTs7Ci0Jd2UzMmstdW5rbm93bikKLQkJdmVu ZG9yPWF0dAotCQk7OwotCWN5ZHJhLXVua25vd24pCi0JCXZlbmRvcj1jeWRyb21lCi0JCTs7Ci0J aTM3MC1pYm0qKQotCQl2ZW5kb3I9aWJtCi0JCTs7Ci0Jb3Jpb24tdW5rbm93bikKLQkJdmVuZG9y PWhpZ2hsZXZlbAotCQk7OwotCXhwcy11bmtub3duIHwgeHBzMTAwLXVua25vd24pCi0JCWNwdT14 cHMxMDAKLQkJdmVuZG9yPWhvbmV5d2VsbAotCQk7OwotCi0JIyBIZXJlIHdlIG5vcm1hbGl6ZSBD UFUgdHlwZXMgd2l0aCBhIG1pc3Npbmcgb3IgbWF0Y2hpbmcgdmVuZG9yCi0JZHB4MjAtdW5rbm93 biB8IGRweDIwLWJ1bGwpCi0JCWNwdT1yczYwMDAKLQkJdmVuZG9yPWJ1bGwKLQkJYmFzaWNfb3M9 JHtiYXNpY19vczotYm9zeH0KLQkJOzsKLQotCSMgSGVyZSB3ZSBub3JtYWxpemUgQ1BVIHR5cGVz IGlycmVzcGVjdGl2ZSBvZiB0aGUgdmVuZG9yCi0JYW1kNjQtKikKLQkJY3B1PXg4Nl82NAotCQk7 OwotCWJsYWNrZmluLSopCi0JCWNwdT1iZmluCi0JCWJhc2ljX29zPWxpbnV4Ci0JCTs7Ci0JYzU0 eC0qKQotCQljcHU9dGljNTR4Ci0JCTs7Ci0JYzU1eC0qKQotCQljcHU9dGljNTV4Ci0JCTs7Ci0J YzZ4LSopCi0JCWNwdT10aWM2eAotCQk7OwotCWU1MDB2WzEyXS0qKQotCQljcHU9cG93ZXJwYwot CQliYXNpY19vcz0ke2Jhc2ljX29zfSJzcGUiCi0JCTs7Ci0JbWlwczMqLSopCi0JCWNwdT1taXBz NjQKLQkJOzsKLQltczEtKikKLQkJY3B1PW10Ci0JCTs7Ci0JbTY4a25vbW11LSopCi0JCWNwdT1t NjhrCi0JCWJhc2ljX29zPWxpbnV4Ci0JCTs7Ci0JbTlzMTJ6LSogfCBtNjhoY3MxMnotKiB8IGhj czEyei0qIHwgczEyei0qKQotCQljcHU9czEyegotCQk7OwotCW9wZW5yaXNjLSopCi0JCWNwdT1v cjMyCi0JCTs7Ci0JcGFyaXNjLSopCi0JCWNwdT1ocHBhCi0JCWJhc2ljX29zPWxpbnV4Ci0JCTs7 Ci0JcGVudGl1bS0qIHwgcDUtKiB8IGs1LSogfCBrNi0qIHwgbmV4Z2VuLSogfCB2aWFjMy0qKQot CQljcHU9aTU4NgotCQk7OwotCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24t KiB8IGF0aGFsb25fKi0qKQotCQljcHU9aTY4NgotCQk7OwotCXBlbnRpdW1paS0qIHwgcGVudGl1 bTItKiB8IHBlbnRpdW1paWktKiB8IHBlbnRpdW0zLSopCi0JCWNwdT1pNjg2Ci0JCTs7Ci0JcGVu dGl1bTQtKikKLQkJY3B1PWk3ODYKLQkJOzsKLQlwYzk4LSopCi0JCWNwdT1pMzg2Ci0JCTs7Ci0J cHBjLSogfCBwcGNiZS0qKQotCQljcHU9cG93ZXJwYwotCQk7OwotCXBwY2xlLSogfCBwb3dlcnBj bGl0dGxlLSopCi0JCWNwdT1wb3dlcnBjbGUKLQkJOzsKLQlwcGM2NC0qKQotCQljcHU9cG93ZXJw YzY0Ci0JCTs7Ci0JcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCi0JCWNwdT1wb3dlcnBj NjRsZQotCQk7OwotCXNiMS0qKQotCQljcHU9bWlwc2lzYTY0c2IxCi0JCTs7Ci0Jc2IxZWwtKikK LQkJY3B1PW1pcHNpc2E2NHNiMWVsCi0JCTs7Ci0Jc2g1ZVtsYl0tKikKLQkJY3B1PSQoZWNobyAi JGNwdSIgfCBzZWQgJ3MvXlwoc2guXCllXCguXCkkL1wxXDJlLycpCi0JCTs7Ci0Jc3B1ci0qKQot CQljcHU9c3B1cgotCQk7OwotCXN0cm9uZ2FybS0qIHwgdGh1bWItKikKLQkJY3B1PWFybQotCQk7 OwotCXR4MzktKikKLQkJY3B1PW1pcHN0eDM5Ci0JCTs7Ci0JdHgzOWVsLSopCi0JCWNwdT1taXBz dHgzOWVsCi0JCTs7Ci0JeDY0LSopCi0JCWNwdT14ODZfNjQKLQkJOzsKLQl4c2NhbGUtKiB8IHhz Y2FsZWVbYmxdLSopCi0JCWNwdT0kKGVjaG8gIiRjcHUiIHwgc2VkICdzL154c2NhbGUvYXJtLycp Ci0JCTs7Ci0JYXJtNjQtKikKLQkJY3B1PWFhcmNoNjQKLQkJOzsKLQotCSMgUmVjb2duaXplIHRo ZSBjYW5vbmljYWwgQ1BVIFR5cGVzIHRoYXQgbGltaXQgYW5kL29yIG1vZGlmeSB0aGUKLQkjIGNv bXBhbnkgbmFtZXMgdGhleSBhcmUgcGFpcmVkIHdpdGguCi0JY3IxNi0qKQotCQliYXNpY19vcz0k e2Jhc2ljX29zOi1lbGZ9Ci0JCTs7Ci0JY3Jpc3YzMi0qIHwgZXRyYXhmcyotKikKLQkJY3B1PWNy aXN2MzIKLQkJdmVuZG9yPWF4aXMKLQkJOzsKLQljcmlzLSogfCBldHJheCotKikKLQkJY3B1PWNy aXMKLQkJdmVuZG9yPWF4aXMKLQkJOzsKLQljcngtKikKLQkJYmFzaWNfb3M9JHtiYXNpY19vczot ZWxmfQotCQk7OwotCW5lby10YW5kZW0pCi0JCWNwdT1uZW8KLQkJdmVuZG9yPXRhbmRlbQotCQk7 OwotCW5zZS10YW5kZW0pCi0JCWNwdT1uc2UKLQkJdmVuZG9yPXRhbmRlbQotCQk7OwotCW5zci10 YW5kZW0pCi0JCWNwdT1uc3IKLQkJdmVuZG9yPXRhbmRlbQotCQk7OwotCW5zdi10YW5kZW0pCi0J CWNwdT1uc3YKLQkJdmVuZG9yPXRhbmRlbQotCQk7OwotCW5zeC10YW5kZW0pCi0JCWNwdT1uc3gK LQkJdmVuZG9yPXRhbmRlbQotCQk7OwotCW1pcHNhbGxlZ3JleGVsLXNvbnkpCi0JCWNwdT1taXBz YWxsZWdyZXhlbAotCQl2ZW5kb3I9c29ueQotCQk7OwotCXRpbGUqLSopCi0JCWJhc2ljX29zPSR7 YmFzaWNfb3M6LWxpbnV4LWdudX0KLQkJOzsKLQotCSopCi0JCSMgUmVjb2duaXplIHRoZSBjYW5v bmljYWwgQ1BVIHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQgd2l0aCBhbnkKLQkJIyBjb21wYW55IG5h bWUuCi0JCWNhc2UgJGNwdSBpbgotCQkJMTc1MGEgfCA1ODAgXAotCQkJfCBhMjlrIFwKLQkJCXwg YWFyY2g2NCB8IGFhcmNoNjRfYmUgXAotCQkJfCBhYmFjdXMgXAotCQkJfCBhbHBoYSB8IGFscGhh ZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSBcCi0JCQl8IGFscGhhNjQgfCBhbHBo YTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gXAotCQkJfCBhbHBoYXBj YTVbNjddIHwgYWxwaGE2NHBjYTVbNjddIFwKLQkJCXwgYW0zM18yLjAgXAotCQkJfCBhbWRnY24g XAotCQkJfCBhcmMgfCBhcmNlYiBcCi0JCQl8IGFybSB8IGFybVtsYl1lIHwgYXJtZVtsYl0gfCBh cm12KiBcCi0JCQl8IGF2ciB8IGF2cjMyIFwKLQkJCXwgYXNtanMgXAotCQkJfCBiYSBcCi0JCQl8 IGJlMzIgfCBiZTY0IFwKLQkJCXwgYmZpbiB8IGJwZiB8IGJzMjAwMCBcCi0JCQl8IGNbMTIzXSog fCBjMzAgfCBbY2p0XTkwIHwgYzR4IFwKLQkJCXwgYzgwNTEgfCBjbGlwcGVyIHwgY3JheW52IHwg Y3NreSB8IGN5ZHJhIFwKLQkJCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKLQkJCXwg ZTJrIHwgZWx4c2kgfCBlcGlwaGFueSBcCi0JCQl8IGYzMFswMV0gfCBmNzAwIHwgZmlkbyB8IGZy MzAgfCBmcnYgfCBmdDMyIHwgZng4MCBcCi0JCQl8IGg4MzAwIHwgaDg1MDAgXAotCQkJfCBocHBh IHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCi0JCQl8IGhl eGFnb24gXAotCQkJfCBpMzcwIHwgaSo4NiB8IGk4NjAgfCBpOTYwIHwgaWExNiB8IGlhNjQgXAot CQkJfCBpcDJrIHwgaXEyMDAwIFwKLQkJCXwgazFvbSBcCi0JCQl8IGxlMzIgfCBsZTY0IFwKLQkJ CXwgbG0zMiBcCi0JCQl8IGxvb25nYXJjaDMyIHwgbG9vbmdhcmNoNjQgfCBsb29uZ2FyY2h4MzIg XAotCQkJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSBcCi0JCQl8IG01MjAwIHwgbTY4MDAwIHwgbTY4 MFswMTIzNDZdMCB8IG02ODM2MCB8IG02ODM/MiB8IG02OGsgXAotCQkJfCBtNjgxMSB8IG02OGhj MTEgfCBtNjgxMiB8IG02OGhjMTIgfCBtNjhoY3MxMnggXAotCQkJfCBtODgxMTAgfCBtODhrIHwg bWF4cSB8IG1iIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCi0JCQl8IG1pY3JvYmxhemUgfCBtaWNy b2JsYXplZWwgXAotCQkJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xl IFwKLQkJCXwgbWlwczE2IFwKLQkJCXwgbWlwczY0IHwgbWlwczY0ZWIgfCBtaXBzNjRlbCBcCi0J CQl8IG1pcHM2NG9jdGVvbiB8IG1pcHM2NG9jdGVvbmVsIFwKLQkJCXwgbWlwczY0b3Jpb24gfCBt aXBzNjRvcmlvbmVsIFwKLQkJCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKLQkJCXwg bWlwczY0dnIgfCBtaXBzNjR2cmVsIFwKLQkJCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAw ZWwgXAotCQkJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCi0JCQl8IG1pcHM2NHZy NTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKLQkJCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAw ZWwgXAotCQkJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCi0JCQl8IG1pcHNpc2EzMnIyIHwg bWlwc2lzYTMycjJlbCBcCi0JCQl8IG1pcHNpc2EzMnI2IHwgbWlwc2lzYTMycjZlbCBcCi0JCQl8 IG1pcHNpc2E2NCB8IG1pcHNpc2E2NGVsIFwKLQkJCXwgbWlwc2lzYTY0cjIgfCBtaXBzaXNhNjRy MmVsIFwKLQkJCXwgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsIFwKLQkJCXwgbWlwc2lzYTY0 c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAotCQkJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNy NzFrZWwgXAotCQkJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCi0JCQl8IG1pcHN0eDM5IHwg bWlwc3R4MzllbCBcCi0JCQl8IG1taXggXAotCQkJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCi0JCQl8 IG1veGllIFwKLQkJCXwgbXQgXAotCQkJfCBtc3A0MzAgXAotCQkJfCBuZHMzMiB8IG5kczMybGUg fCBuZHMzMmJlIFwKLQkJCXwgbmZwIFwKLQkJCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5p b3MyZWwgXAotCQkJfCBub25lIHwgbnAxIHwgbnMxNmsgfCBuczMyayB8IG52cHR4IFwKLQkJCXwg b3BlbjggXAotCQkJfCBvcjFrKiBcCi0JCQl8IG9yMzIgXAotCQkJfCBvcmlvbiBcCi0JCQl8IHBp Y29jaGlwIFwKLQkJCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIHwgcG4gfCBwb3dlciBcCi0J CQl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSB8IHBvd2Vy cGNzcGUgXAotCQkJfCBwcnUgXAotCQkJfCBweXJhbWlkIFwKLQkJCXwgcmlzY3YgfCByaXNjdjMy IHwgcmlzY3YzMmJlIHwgcmlzY3Y2NCB8IHJpc2N2NjRiZSBcCi0JCQl8IHJsNzggfCByb21wIHwg cnM2MDAwIHwgcnggXAotCQkJfCBzMzkwIHwgczM5MHggXAotCQkJfCBzY29yZSBcCi0JCQl8IHNo IHwgc2hsIFwKLQkJCXwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWVbbGJdIHwgc2hbMjNd ZSB8IHNoZVtsYl0gfCBzaFtsYl1lIFwKLQkJCXwgc2hbMTIzNF1lW2xiXSB8ICBzaFsxMjM0NV1b bGJdZSB8IHNoWzIzXWVsZSB8IHNoNjQgfCBzaDY0bGUgXAotCQkJfCBzcGFyYyB8IHNwYXJjNjQg fCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCBcCi0JCQl8IHNwYXJj bGl0ZSBcCi0JCQl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diB8IHN2 MSB8IHN4KiBcCi0JCQl8IHNwdSBcCi0JCQl8IHRhaG9lIFwKLQkJCXwgdGh1bWJ2NyogXAotCQkJ fCB0aWMzMCB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCBcCi0JCQl8 IHRyb24gXAotCQkJfCB1Ymljb20zMiBcCi0JCQl8IHY3MCB8IHY4NTAgfCB2ODUwZSB8IHY4NTBl MSB8IHY4NTBlcyB8IHY4NTBlMiB8IHY4NTBlMnYzIFwKLQkJCXwgdmF4IFwKLQkJCXwgdmlzaXVt IFwKLQkJCXwgdzY1IFwKLQkJCXwgd2FzbTMyIHwgd2FzbTY0IFwKLQkJCXwgd2UzMmsgXAotCQkJ fCB4ODYgfCB4ODZfNjQgfCB4YzE2eCB8IHhnYXRlIHwgeHBzMTAwIFwKLQkJCXwgeHN0b3JteTE2 IHwgeHRlbnNhKiBcCi0JCQl8IHltcCBcCi0JCQl8IHo4ayB8IHo4MCkKLQkJCQk7OwotCi0JCQkq KQotCQkJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgIiQxIlwnOiBtYWNoaW5lIFxgIiRj cHUtJHZlbmRvciJcJyBub3QgcmVjb2duaXplZCAxPiYyCi0JCQkJZXhpdCAxCi0JCQkJOzsKLQkJ ZXNhYwotCQk7OwotZXNhYwotCi0jIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNl cyBmb3IgbWFudWZhY3R1cmVycy4KLWNhc2UgJHZlbmRvciBpbgotCWRpZ2l0YWwqKQotCQl2ZW5k b3I9ZGVjCi0JCTs7Ci0JY29tbW9kb3JlKikKLQkJdmVuZG9yPWNibQotCQk7OwotCSopCi0JCTs7 Ci1lc2FjCi0KLSMgRGVjb2RlIG1hbnVmYWN0dXJlci1zcGVjaWZpYyBhbGlhc2VzIGZvciBjZXJ0 YWluIG9wZXJhdGluZyBzeXN0ZW1zLgotCi1pZiB0ZXN0IHgkYmFzaWNfb3MgIT0geAotdGhlbgot Ci0jIEZpcnN0IHJlY29nbml6ZSBzb21lIGFkLWhvYyBjYWVzLCBvciBwZXJoYXBzIHNwbGl0IGtl cm5lbC1vcywgb3IgZWxzZSBqdXN0Ci0jIHNldCBvcy4KLWNhc2UgJGJhc2ljX29zIGluCi0JZ251 L2xpbnV4KikKLQkJa2VybmVsPWxpbnV4Ci0JCW9zPSQoZWNobyAkYmFzaWNfb3MgfCBzZWQgLWUg J3N8Z251L2xpbnV4fGdudXwnKQotCQk7OwotCW9zMi1lbXgpCi0JCWtlcm5lbD1vczIKLQkJb3M9 JChlY2hvICRiYXNpY19vcyB8IHNlZCAtZSAnc3xvczItZW14fGVteHwnKQotCQk7OwotCW50by1x bngqKQotCQlrZXJuZWw9bnRvCi0JCW9zPSQoZWNobyAkYmFzaWNfb3MgfCBzZWQgLWUgJ3N8bnRv LXFueHxxbnh8JykKLQkJOzsKLQkqLSopCi0JCSMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjE2Mgot CQlJRlM9Ii0iIHJlYWQga2VybmVsIG9zIDw8RU9GCi0kYmFzaWNfb3MKLUVPRgotCQk7OwotCSMg RGVmYXVsdCBPUyB3aGVuIGp1c3Qga2VybmVsIHdhcyBzcGVjaWZpZWQKLQludG8qKQotCQlrZXJu ZWw9bnRvCi0JCW9zPSQoZWNobyAkYmFzaWNfb3MgfCBzZWQgLWUgJ3N8bnRvfHFueHwnKQotCQk7 OwotCWxpbnV4KikKLQkJa2VybmVsPWxpbnV4Ci0JCW9zPSQoZWNobyAkYmFzaWNfb3MgfCBzZWQg LWUgJ3N8bGludXh8Z251fCcpCi0JCTs7Ci0JKikKLQkJa2VybmVsPQotCQlvcz0kYmFzaWNfb3MK LQkJOzsKLWVzYWMKLQotIyBOb3csIG5vcm1hbGl6ZSB0aGUgT1MgKGtub3dpbmcgd2UganVzdCBo YXZlIG9uZSBjb21wb25lbnQsIGl0J3Mgbm90IGEga2VybmVsLAotIyBldGMuKQotY2FzZSAkb3Mg aW4KLQkjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcyB0aGF0IG1pZ2h0IGdl dCBjb25mdXNlZAotCSMgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCi0JIyBzb2xhcmlzKiBpcyBh IGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KLQlhdXJvcmF1eCkK LQkJb3M9YXVyb3JhdXgKLQkJOzsKLQlibHVlZ2VuZSopCi0JCW9zPWNuawotCQk7OwotCXNvbGFy aXMxIHwgc29sYXJpczEuKikKLQkJb3M9JChlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxz dW5vczR8JykKLQkJOzsKLQlzb2xhcmlzKQotCQlvcz1zb2xhcmlzMgotCQk7OwotCXVuaXh3YXJl KikKLQkJb3M9c3lzdjQuMnV3Ci0JCTs7Ci0JIyBlczE4MDAgaXMgaGVyZSB0byBhdm9pZCBiZWlu ZyBtYXRjaGVkIGJ5IGVzKiAoYSBkaWZmZXJlbnQgT1MpCi0JZXMxODAwKikKLQkJb3M9b3NlCi0J CTs7Ci0JIyBTb21lIHZlcnNpb24gbnVtYmVycyBuZWVkIG1vZGlmaWNhdGlvbgotCWNob3J1c29z KikKLQkJb3M9Y2hvcnVzb3MKLQkJOzsKLQlpc2MpCi0JCW9zPWlzYzIuMgotCQk7OwotCXNjbzYp Ci0JCW9zPXNjbzV2NgotCQk7OwotCXNjbzUpCi0JCW9zPXNjbzMuMnY1Ci0JCTs7Ci0Jc2NvNCkK LQkJb3M9c2NvMy4ydjQKLQkJOzsKLQlzY28zLjIuWzQtOV0qKQotCQlvcz0kKGVjaG8gJG9zIHwg c2VkIC1lICdzL3NjbzMuMi4vc2NvMy4ydi8nKQotCQk7OwotCXNjbyp2KiB8IHNjb3V0KQotCQkj IERvbid0IG1hdGNoIGJlbG93Ci0JCTs7Ci0Jc2NvKikKLQkJb3M9c2NvMy4ydjIKLQkJOzsKLQlw c29zKikKLQkJb3M9cHNvcwotCQk7OwotCXFueCopCi0JCW9zPXFueAotCQk7OwotCWhpdXgqKQot CQlvcz1oaXV4d2UyCi0JCTs7Ci0JbHlueCoxNzgpCi0JCW9zPWx5bnhvczE3OAotCQk7OwotCWx5 bngqNSkKLQkJb3M9bHlueG9zNQotCQk7OwotCWx5bnhvcyopCi0JCSMgZG9uJ3QgZ2V0IGNhdWdo dCB1cCBpbiBuZXh0IHdpbGRjYXJkCi0JCTs7Ci0JbHlueCopCi0JCW9zPWx5bnhvcwotCQk7Owot CW1hY1swLTldKikKLQkJb3M9JChlY2hvICIkb3MiIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnKQot CQk7OwotCW9wZW5lZCopCi0JCW9zPW9wZW5lZGl0aW9uCi0JCTs7Ci0Jb3M0MDAqKQotCQlvcz1v czQwMAotCQk7OwotCXN1bm9zNSopCi0JCW9zPSQoZWNobyAiJG9zIiB8IHNlZCAtZSAnc3xzdW5v czV8c29sYXJpczJ8JykKLQkJOzsKLQlzdW5vczYqKQotCQlvcz0kKGVjaG8gIiRvcyIgfCBzZWQg LWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCcpCi0JCTs7Ci0Jd2luY2UqKQotCQlvcz13aW5jZQotCQk7 OwotCXV0ZWsqKQotCQlvcz1ic2QKLQkJOzsKLQlkeW5peCopCi0JCW9zPWJzZAotCQk7OwotCWFj aXMqKQotCQlvcz1hb3MKLQkJOzsKLQlhdGhlb3MqKQotCQlvcz1hdGhlb3MKLQkJOzsKLQlzeWxs YWJsZSopCi0JCW9zPXN5bGxhYmxlCi0JCTs7Ci0JMzg2YnNkKQotCQlvcz1ic2QKLQkJOzsKLQlj dGl4KiB8IHV0cyopCi0JCW9zPXN5c3YKLQkJOzsKLQlub3ZhKikKLQkJb3M9cnRtay1ub3ZhCi0J CTs7Ci0JbnMyKQotCQlvcz1uZXh0c3RlcDIKLQkJOzsKLQkjIFByZXNlcnZlIHRoZSB2ZXJzaW9u IG51bWJlciBvZiBzaW5peDUuCi0Jc2luaXg1LiopCi0JCW9zPSQoZWNobyAkb3MgfCBzZWQgLWUg J3N8c2luaXh8c3lzdnwnKQotCQk7OwotCXNpbml4KikKLQkJb3M9c3lzdjQKLQkJOzsKLQl0cGYq KQotCQlvcz10cGYKLQkJOzsKLQl0cml0b24qKQotCQlvcz1zeXN2MwotCQk7OwotCW9zcyopCi0J CW9zPXN5c3YzCi0JCTs7Ci0Jc3ZyNCopCi0JCW9zPXN5c3Y0Ci0JCTs7Ci0Jc3ZyMykKLQkJb3M9 c3lzdjMKLQkJOzsKLQlzeXN2cjQpCi0JCW9zPXN5c3Y0Ci0JCTs7Ci0Jb3NlKikKLQkJb3M9b3Nl Ci0JCTs7Ci0JKm1pbnQgfCBtaW50WzAtOV0qIHwgKk1pTlQgfCBNaU5UWzAtOV0qKQotCQlvcz1t aW50Ci0JCTs7Ci0JZGljb3MqKQotCQlvcz1kaWNvcwotCQk7OwotCXBpa2VvcyopCi0JCSMgVW50 aWwgcmVhbCBuZWVkIG9mIE9TIHNwZWNpZmljIHN1cHBvcnQgZm9yCi0JCSMgcGFydGljdWxhciBm ZWF0dXJlcyBjb21lcyB1cCwgYmFyZSBtZXRhbAotCQkjIGNvbmZpZ3VyYXRpb25zIGFyZSBxdWl0 ZSBmdW5jdGlvbmFsLgotCQljYXNlICRjcHUgaW4KLQkJICAgIGFybSopCi0JCQlvcz1lYWJpCi0J CQk7OwotCQkgICAgKikKLQkJCW9zPWVsZgotCQkJOzsKLQkJZXNhYwotCQk7OwotCSopCi0JCSMg Tm8gbm9ybWFsaXphdGlvbiwgYnV0IG5vdCBuZWNlc3NhcmlseSBhY2NlcHRlZCwgdGhhdCBjb21l cyBiZWxvdy4KLQkJOzsKLWVzYWMKLQotZWxzZQotCi0jIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZh dWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCi0j IFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQg dGhlIGRvb3Igd2l0aCB0aGVpcgotIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1v c3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgotCi0jIE5vdGUgdGhhdCBp ZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXks Ci0jICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAg dG93YXJkcyB0aGUgdG9wCi0jIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBz eXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKLSMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5 aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZwotIyBzeXN0ZW0sIGFuZCB3 ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KLQota2VybmVsPQotY2FzZSAkY3B1LSR2ZW5k b3IgaW4KLQlzY29yZS0qKQotCQlvcz1lbGYKLQkJOzsKLQlzcHUtKikKLQkJb3M9ZWxmCi0JCTs7 Ci0JKi1hY29ybikKLQkJb3M9cmlzY2l4MS4yCi0JCTs7Ci0JYXJtKi1yZWJlbCkKLQkJa2VybmVs PWxpbnV4Ci0JCW9zPWdudQotCQk7OwotCWFybSotc2VtaSkKLQkJb3M9YW91dAotCQk7OwotCWM0 eC0qIHwgdGljNHgtKikKLQkJb3M9Y29mZgotCQk7OwotCWM4MDUxLSopCi0JCW9zPWVsZgotCQk7 OwotCWNsaXBwZXItaW50ZXJncmFwaCkKLQkJb3M9Y2xpeAotCQk7OwotCWhleGFnb24tKikKLQkJ b3M9ZWxmCi0JCTs7Ci0JdGljNTR4LSopCi0JCW9zPWNvZmYKLQkJOzsKLQl0aWM1NXgtKikKLQkJ b3M9Y29mZgotCQk7OwotCXRpYzZ4LSopCi0JCW9zPWNvZmYKLQkJOzsKLQkjIFRoaXMgbXVzdCBj b21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCi0JcGRwMTAtKikKLQkJb3M9dG9wczIwCi0JCTs7 Ci0JcGRwMTEtKikKLQkJb3M9bm9uZQotCQk7OwotCSotZGVjIHwgdmF4LSopCi0JCW9zPXVsdHJp eDQuMgotCQk7OwotCW02OCotYXBvbGxvKQotCQlvcz1kb21haW4KLQkJOzsKLQlpMzg2LXN1bikK LQkJb3M9c3Vub3M0LjAuMgotCQk7OwotCW02ODAwMC1zdW4pCi0JCW9zPXN1bm9zMwotCQk7Owot CW02OCotY2lzY28pCi0JCW9zPWFvdXQKLQkJOzsKLQltZXAtKikKLQkJb3M9ZWxmCi0JCTs7Ci0J bWlwcyotY2lzY28pCi0JCW9zPWVsZgotCQk7OwotCW1pcHMqLSopCi0JCW9zPWVsZgotCQk7Owot CW9yMzItKikKLQkJb3M9Y29mZgotCQk7OwotCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJj IGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCi0JCW9zPXN5c3YzCi0JCTs7Ci0Jc3BhcmMt KiB8ICotc3VuKQotCQlvcz1zdW5vczQuMS4xCi0JCTs7Ci0JcHJ1LSopCi0JCW9zPWVsZgotCQk7 OwotCSotYmUpCi0JCW9zPWJlb3MKLQkJOzsKLQkqLWlibSkKLQkJb3M9YWl4Ci0JCTs7Ci0JKi1r bnV0aCkKLQkJb3M9bW1peHdhcmUKLQkJOzsKLQkqLXdlYykKLQkJb3M9cHJvZWxmCi0JCTs7Ci0J Ki13aW5ib25kKQotCQlvcz1wcm9lbGYKLQkJOzsKLQkqLW9raSkKLQkJb3M9cHJvZWxmCi0JCTs7 Ci0JKi1ocCkKLQkJb3M9aHB1eAotCQk7OwotCSotaGl0YWNoaSkKLQkJb3M9aGl1eAotCQk7Owot CWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVy Z2VudCkKLQkJb3M9c3lzdgotCQk7OwotCSotY2JtKQotCQlvcz1hbWlnYW9zCi0JCTs7Ci0JKi1k ZykKLQkJb3M9ZGd1eAotCQk7OwotCSotZG9scGhpbikKLQkJb3M9c3lzdjMKLQkJOzsKLQltNjhr LWNjdXIpCi0JCW9zPXJ0dQotCQk7OwotCW04OGstb21yb24qKQotCQlvcz1sdW5hCi0JCTs7Ci0J Ki1uZXh0KQotCQlvcz1uZXh0c3RlcAotCQk7OwotCSotc2VxdWVudCkKLQkJb3M9cHR4Ci0JCTs7 Ci0JKi1jcmRzKQotCQlvcz11bm9zCi0JCTs7Ci0JKi1ucykKLQkJb3M9Z2VuaXgKLQkJOzsKLQlp MzcwLSopCi0JCW9zPW12cwotCQk7OwotCSotZ291bGQpCi0JCW9zPXN5c3YKLQkJOzsKLQkqLWhp Z2hsZXZlbCkKLQkJb3M9YnNkCi0JCTs7Ci0JKi1lbmNvcmUpCi0JCW9zPWJzZAotCQk7OwotCSot c2dpKQotCQlvcz1pcml4Ci0JCTs7Ci0JKi1zaWVtZW5zKQotCQlvcz1zeXN2NAotCQk7OwotCSot bWFzc2NvbXApCi0JCW9zPXJ0dQotCQk7OwotCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRz dSkKLQkJb3M9dXhwdgotCQk7OwotCSotcm9tNjhrKQotCQlvcz1jb2ZmCi0JCTs7Ci0JKi0qYnVn KQotCQlvcz1jb2ZmCi0JCTs7Ci0JKi1hcHBsZSkKLQkJb3M9bWFjb3MKLQkJOzsKLQkqLWF0YXJp KikKLQkJb3M9bWludAotCQk7OwotCSotd3JzKQotCQlvcz12eHdvcmtzCi0JCTs7Ci0JKikKLQkJ b3M9bm9uZQotCQk7OwotZXNhYwotCi1maQotCi0jIE5vdywgdmFsaWRhdGUgb3VyIChwb3RlbnRp YWxseSBmaXhlZC11cCkgT1MuCi1jYXNlICRvcyBpbgotCSMgU29tZXRpbWVzIHdlIGRvICJrZXJu ZWwtYWJpIiwgc28gdGhvc2UgbmVlZCB0byBjb3VudCBhcyBPU2VzLgotCW11c2wqIHwgbmV3bGli KiB8IHVjbGliYyopCi0JCTs7Ci0JIyBMaWtld2lzZSBmb3IgImtlcm5lbC1saWJjIgotCWVhYmkq IHwgZ251ZWFiaSopCi0JCTs7Ci0JIyBOb3cgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMu Ci0JIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KLQkjIEVhY2ggYWx0ZXJuYXRp dmUgTVVTVCBlbmQgaW4gYSAqIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCi0JZ251KiB8IGFu ZHJvaWQqIHwgYnNkKiB8IG1hY2gqIHwgbWluaXgqIHwgZ2VuaXgqIHwgdWx0cml4KiB8IGlyaXgq IFwKLQkgICAgIHwgKnZtcyogfCBlc2l4KiB8IGFpeCogfCBjbmsqIHwgc3Vub3MgfCBzdW5vc1sz NF0qIFwKLQkgICAgIHwgaHB1eCogfCB1bm9zKiB8IG9zZiogfCBsdW5hKiB8IGRndXgqIHwgYXVy b3JhdXgqIHwgc29sYXJpcyogXAotCSAgICAgfCBzeW0qIHwgIHBsYW45KiB8IHBzcCogfCBzaW0q IHwgeHJheSogfCBvczY4ayogfCB2ODhyKiBcCi0JICAgICB8IGhpdXgqIHwgYWJ1ZyB8IG5hY2wq IHwgbmV0d2FyZSogfCB3aW5kb3dzKiBcCi0JICAgICB8IG9zOSogfCBtYWNvcyogfCBvc3gqIHwg aW9zKiBcCi0JICAgICB8IG1wdyogfCBtYWdpYyogfCBtbWl4d2FyZSogfCBtb245NjAqIHwgbG5l d3MqIFwKLQkgICAgIHwgYW1pZ2FvcyogfCBhbWlnYWRvcyogfCBtc2RvcyogfCBuZXdzb3MqIHwg dW5pY29zKiB8IGFvZiogXAotCSAgICAgfCBhb3MqIHwgYXJvcyogfCBjbG91ZGFiaSogfCBzb3J0 aXgqIHwgdHdpenpsZXIqIFwKLQkgICAgIHwgbmluZHkqIHwgdnhzaW0qIHwgdnh3b3JrcyogfCBl Ym1vbiogfCBobXMqIHwgbXZzKiBcCi0JICAgICB8IGNsaXgqIHwgcmlzY29zKiB8IHVuaXBsdXMq IHwgaXJpcyogfCBpc2MqIHwgcnR1KiB8IHhlbml4KiBcCi0JICAgICB8IG1pcmJzZCogfCBuZXRi c2QqIHwgZGljb3MqIHwgb3BlbmVkaXRpb24qIHwgb3NlKiBcCi0JICAgICB8IGJpdHJpZyogfCBv cGVuYnNkKiB8IHNvbGlkYnNkKiB8IGxpYmVydHlic2QqIHwgb3MxMDgqIFwKLQkgICAgIHwgZWtr b2JzZCogfCBmcmVlYnNkKiB8IHJpc2NpeCogfCBseW54b3MqIHwgb3M0MDAqIFwKLQkgICAgIHwg Ym9zeCogfCBuZXh0c3RlcCogfCBjeHV4KiB8IGFvdXQqIHwgZWxmKiB8IG9hYmkqIFwKLQkgICAg IHwgcHR4KiB8IGNvZmYqIHwgZWNvZmYqIHwgd2lubnQqIHwgZG9tYWluKiB8IHZzdGEqIFwKLQkg ICAgIHwgdWRpKiB8IGxpdGVzKiB8IGllZWUqIHwgZ28zMiogfCBhdXgqIHwgaGNvcyogXAotCSAg ICAgfCBjaG9ydXNyZGIqIHwgY2VnY2MqIHwgZ2xpZGl4KiBcCi0JICAgICB8IGN5Z3dpbiogfCBt c3lzKiB8IHBlKiB8IG1vc3MqIHwgcHJvZWxmKiB8IHJ0ZW1zKiBcCi0JICAgICB8IG1pZGlwaXgq IHwgbWluZ3czMiogfCBtaW5ndzY0KiB8IG1pbnQqIFwKLQkgICAgIHwgdXhwdiogfCBiZW9zKiB8 IG1wZWl4KiB8IHVkayogfCBtb3hpZWJveCogXAotCSAgICAgfCBpbnRlcml4KiB8IHV3aW4qIHwg bWtzKiB8IHJoYXBzb2R5KiB8IGRhcndpbiogXAotCSAgICAgfCBvcGVuc3RlcCogfCBvc2tpdCog fCBjb25peCogfCBwdzMyKiB8IG5vbnN0b3B1eCogXAotCSAgICAgfCBzdG9ybS1jaGFvcyogfCB0 b3BzMTAqIHwgdGVuZXgqIHwgdG9wczIwKiB8IGl0cyogXAotCSAgICAgfCBvczIqIHwgdm9zKiB8 IHBhbG1vcyogfCB1Y2xpbnV4KiB8IG51Y2xldXMqIHwgbW9ycGhvcyogXAotCSAgICAgfCBzY291 dCogfCBzdXBlcnV4KiB8IHN5c3YqIHwgcnRtayogfCB0cGYqIHwgd2luZGlzcyogXAotCSAgICAg fCBwb3dlcm1heCogfCBkbml4KiB8IG54NiB8IG54NyB8IHNlaSogfCBkcmFnb25mbHkqIFwKLQkg ICAgIHwgc2t5b3MqIHwgaGFpa3UqIHwgcmRvcyogfCB0b3BwZXJzKiB8IGRyb3BzKiB8IGVzKiBc Ci0JICAgICB8IG9uZWZzKiB8IHRpcnRvcyogfCBwaG9lbml4KiB8IGZ1Y2hzaWEqIHwgcmVkb3gq IHwgYm1lKiBcCi0JICAgICB8IG1pZG5pZ2h0YnNkKiB8IGFtZGhzYSogfCB1bmxlYXNoZWQqIHwg ZW1zY3JpcHRlbiogfCB3YXNpKiBcCi0JICAgICB8IG5zayogfCBwb3dlcnVuaXgqIHwgZ2Vub2Rl KiB8IHp2bW9lKiB8IHFueCogfCBlbXgqKQotCQk7OwotCSMgVGhpcyBvbmUgaXMgZXh0cmEgc3Ry aWN0IHdpdGggYWxsb3dlZCB2ZXJzaW9ucwotCXNjbzMuMnYyIHwgc2NvMy4ydls0LTldKiB8IHNj bzV2NiopCi0JCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIu Ci0JCTs7Ci0Jbm9uZSkKLQkJOzsKLQkqKQotCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBc YCIkMSJcJzogT1MgXGAiJG9zIlwnIG5vdCByZWNvZ25pemVkIDE+JjIKLQkJZXhpdCAxCi0JCTs7 Ci1lc2FjCi0KLSMgQXMgYSBmaW5hbCBzdGVwIGZvciBPUy1yZWxhdGVkIHRoaW5ncywgdmFsaWRh dGUgdGhlIE9TLWtlcm5lbCBjb21iaW5hdGlvbgotIyAoZ2l2ZW4gYSB2YWxpZCBPUyksIGlmIHRo ZXJlIGlzIGEga2VybmVsLgotY2FzZSAka2VybmVsLSRvcyBpbgotCWxpbnV4LWdudSogfCBsaW51 eC1kaWV0bGliYyogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LW5ld2xpYiogfCBsaW51eC1tdXNs KiB8IGxpbnV4LXVjbGliYyogKQotCQk7OwotCXVjbGludXgtdWNsaWJjKiApCi0JCTs7Ci0JLWRp ZXRsaWJjKiB8IC1uZXdsaWIqIHwgLW11c2wqIHwgLXVjbGliYyogKQotCQkjIFRoZXNlIGFyZSBq dXN0IGxpYmMgaW1wbGVtZW50YXRpb25zLCBub3QgYWN0dWFsIE9TZXMsIGFuZCB0aHVzCi0JCSMg cmVxdWlyZSBhIGtlcm5lbC4KLQkJZWNobyAiSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDEnOiBs aWJjIFxgJG9zJyBuZWVkcyBleHBsaWNpdCBrZXJuZWwuIiAxPiYyCi0JCWV4aXQgMQotCQk7Owot CWtmcmVlYnNkKi1nbnUqIHwga29wZW5zb2xhcmlzKi1nbnUqKQotCQk7OwotCW50by1xbngqKQot CQk7OwotCW9zMi1lbXgpCi0JCTs7Ci0JKi1lYWJpKiB8ICotZ251ZWFiaSopCi0JCTs7Ci0JLSop Ci0JCSMgQmxhbmsga2VybmVsIHdpdGggcmVhbCBPUyBpcyBhbHdheXMgZmluZS4KLQkJOzsKLQkq LSopCi0JCWVjaG8gIkludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxJzogS2VybmVsIFxgJGtlcm5l bCcgbm90IGtub3duIHRvIHdvcmsgd2l0aCBPUyBcYCRvcycuIiAxPiYyCi0JCWV4aXQgMQotCQk7 OwotZXNhYwotCi0jIEhlcmUgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGtub3cgdGhlIG9z LCBhbmQgdGhlIENQVSB0eXBlLCBidXQgbm90IHRoZQotIyBtYW51ZmFjdHVyZXIuICBXZSBwaWNr IHRoZSBsb2dpY2FsIG1hbnVmYWN0dXJlci4KLWNhc2UgJHZlbmRvciBpbgotCXVua25vd24pCi0J CWNhc2UgJGNwdS0kb3MgaW4KLQkJCSotcmlzY2l4KikKLQkJCQl2ZW5kb3I9YWNvcm4KLQkJCQk7 OwotCQkJKi1zdW5vcyopCi0JCQkJdmVuZG9yPXN1bgotCQkJCTs7Ci0JCQkqLWNuayogfCAqLWFp eCopCi0JCQkJdmVuZG9yPWlibQotCQkJCTs7Ci0JCQkqLWJlb3MqKQotCQkJCXZlbmRvcj1iZQot CQkJCTs7Ci0JCQkqLWhwdXgqKQotCQkJCXZlbmRvcj1ocAotCQkJCTs7Ci0JCQkqLW1wZWl4KikK LQkJCQl2ZW5kb3I9aHAKLQkJCQk7OwotCQkJKi1oaXV4KikKLQkJCQl2ZW5kb3I9aGl0YWNoaQot CQkJCTs7Ci0JCQkqLXVub3MqKQotCQkJCXZlbmRvcj1jcmRzCi0JCQkJOzsKLQkJCSotZGd1eCop Ci0JCQkJdmVuZG9yPWRnCi0JCQkJOzsKLQkJCSotbHVuYSopCi0JCQkJdmVuZG9yPW9tcm9uCi0J CQkJOzsKLQkJCSotZ2VuaXgqKQotCQkJCXZlbmRvcj1ucwotCQkJCTs7Ci0JCQkqLWNsaXgqKQot CQkJCXZlbmRvcj1pbnRlcmdyYXBoCi0JCQkJOzsKLQkJCSotbXZzKiB8ICotb3BlbmVkKikKLQkJ CQl2ZW5kb3I9aWJtCi0JCQkJOzsKLQkJCSotb3M0MDAqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7 OwotCQkJczM5MC0qIHwgczM5MHgtKikKLQkJCQl2ZW5kb3I9aWJtCi0JCQkJOzsKLQkJCSotcHR4 KikKLQkJCQl2ZW5kb3I9c2VxdWVudAotCQkJCTs7Ci0JCQkqLXRwZiopCi0JCQkJdmVuZG9yPWli bQotCQkJCTs7Ci0JCQkqLXZ4c2ltKiB8ICotdnh3b3JrcyogfCAqLXdpbmRpc3MqKQotCQkJCXZl bmRvcj13cnMKLQkJCQk7OwotCQkJKi1hdXgqKQotCQkJCXZlbmRvcj1hcHBsZQotCQkJCTs7Ci0J CQkqLWhtcyopCi0JCQkJdmVuZG9yPWhpdGFjaGkKLQkJCQk7OwotCQkJKi1tcHcqIHwgKi1tYWNv cyopCi0JCQkJdmVuZG9yPWFwcGxlCi0JCQkJOzsKLQkJCSotKm1pbnQgfCAqLW1pbnRbMC05XSog fCAqLSpNaU5UIHwgKi1NaU5UWzAtOV0qKQotCQkJCXZlbmRvcj1hdGFyaQotCQkJCTs7Ci0JCQkq LXZvcyopCi0JCQkJdmVuZG9yPXN0cmF0dXMKLQkJCQk7OwotCQllc2FjCi0JCTs7Ci1lc2FjCi0K LWVjaG8gIiRjcHUtJHZlbmRvci0ke2tlcm5lbDorJGtlcm5lbC19JG9zIgotZXhpdAotCi0jIExv Y2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1l LXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCi0jIHRpbWUtc3RhbXAt Zm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKLSMgdGltZS1zdGFtcC1lbmQ6ICInIgotIyBFbmQ6Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvYnVpbGQt YXV4L2luc3RhbGwtc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9i dWlsZC1hdXgvaW5zdGFsbC1zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWJjNjY5 MS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9i dWlsZC1hdXgvaW5zdGFsbC1zaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0jISAv YmluL3NoCi0jCi0jIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRh ZmlsZQotIyBUaGlzIGNvbWVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5z aCkuCi0jCi0jIENvcHlyaWdodCAxOTkxIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBv ZiBUZWNobm9sb2d5Ci0jCi0jIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3Ry aWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotIyBkb2N1bWVudGF0aW9uIGZv ciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhh dAotIyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQg dGhhdCBib3RoIHRoYXQKLSMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwotIyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUg bmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSMgcHVibGljaXR5 IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljLAotIyB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVz ZW50YXRpb25zIGFib3V0IHRoZQotIyBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBh bnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKLSMgd2l0aG91dCBleHByZXNzIG9y IGltcGxpZWQgd2FycmFudHkuCi0jCi0jIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBp cyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50Ci0jIGBtYWtlJyBpbXBsaWNp dCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0Ci0jIHdo ZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCi0jCi0jIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUg d2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KLSMgZnJvbSBzY3Jh dGNoLiAgSXQgY2FuIG9ubHkgaW5zdGFsbCBvbmUgZmlsZSBhdCBhIHRpbWUsIGEgcmVzdHJpY3Rp b24KLSMgc2hhcmVkIHdpdGggbWFueSBPUydzIGluc3RhbGwgcHJvZ3JhbXMuCi0KLQotIyBzZXQg RE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0Ci0KLSMgRG9uJ3QgdXNlIDotIHNp bmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KLWRvaXQ9IiR7RE9J VFBST0ctfSIKLQotCi0jIHB1dCBpbiBhYnNvbHV0ZSBwYXRocyBpZiB5b3UgZG9uJ3QgaGF2ZSB0 aGVtIGluIHlvdXIgcGF0aDsgb3IgdXNlIGVudi4gdmFycy4KLQotbXZwcm9nPSIke01WUFJPRy1t dn0iCi1jcHByb2c9IiR7Q1BQUk9HLWNwfSIKLWNobW9kcHJvZz0iJHtDSE1PRFBST0ctY2htb2R9 IgotY2hvd25wcm9nPSIke0NIT1dOUFJPRy1jaG93bn0iCi1jaGdycHByb2c9IiR7Q0hHUlBQUk9H LWNoZ3JwfSIKLXN0cmlwcHJvZz0iJHtTVFJJUFBST0ctc3RyaXB9Igotcm1wcm9nPSIke1JNUFJP Ry1ybX0iCi1ta2RpcnByb2c9IiR7TUtESVJQUk9HLW1rZGlyfSIKLQotdHJhbnNmb3JtYmFzZW5h bWU9IiIKLXRyYW5zZm9ybV9hcmc9IiIKLWluc3RjbWQ9IiRtdnByb2ciCi1jaG1vZGNtZD0iJGNo bW9kcHJvZyAwNzU1IgotY2hvd25jbWQ9IiIKLWNoZ3JwY21kPSIiCi1zdHJpcGNtZD0iIgotcm1j bWQ9IiRybXByb2cgLWYiCi1tdmNtZD0iJG12cHJvZyIKLXNyYz0iIgotZHN0PSIiCi1kaXJfYXJn PSIiCi0KLXdoaWxlIFsgeCIkMSIgIT0geCBdOyBkbwotICAgIGNhc2UgJDEgaW4KLQktYykgaW5z dGNtZD0iJGNwcHJvZyIKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLWQpIGRpcl9h cmc9dHJ1ZQotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktbSkgY2htb2RjbWQ9IiRj aG1vZHByb2cgJDIiCi0JICAgIHNoaWZ0Ci0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQot CS1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKLQkgICAgc2hpZnQKLQkgICAgc2hpZnQKLQkg ICAgY29udGludWU7OwotCi0JLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgotCSAgICBzaGlm dAotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktcykgc3RyaXBjbWQ9IiRzdHJpcHBy b2ciCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS10PSopIHRyYW5zZm9ybWFyZz1g ZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQot CS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKLQkgICAg c2hpZnQKLQkgICAgY29udGludWU7OwotCi0JKikgIGlmIFsgeCIkc3JjIiA9IHggXQotCSAgICB0 aGVuCi0JCXNyYz0kMQotCSAgICBlbHNlCi0JCSMgdGhpcyBjb2xvbiBpcyB0byB3b3JrIGFyb3Vu ZCBhIDM4NkJTRCAvYmluL3NoIGJ1ZwotCQk6Ci0JCWRzdD0kMQotCSAgICBmaQotCSAgICBzaGlm dAotCSAgICBjb250aW51ZTs7Ci0gICAgZXNhYwotZG9uZQotCi1pZiBbIHgiJHNyYyIgPSB4IF0K LXRoZW4KLQllY2hvICJpbnN0YWxsOglubyBpbnB1dCBmaWxlIHNwZWNpZmllZCIKLQlleGl0IDEK LWVsc2UKLQl0cnVlCi1maQotCi1pZiBbIHgiJGRpcl9hcmciICE9IHggXTsgdGhlbgotCWRzdD0k c3JjCi0Jc3JjPSIiCi0JCi0JaWYgWyAtZCAkZHN0IF07IHRoZW4KLQkJaW5zdGNtZD06Ci0JZWxz ZQotCQlpbnN0Y21kPW1rZGlyCi0JZmkKLWVsc2UKLQotIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJl IGRldGVjdGVkIGJ5IHRoZSAiJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kCi0jIG1pZ2h0 IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFs bHkgYmFkIAotIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCi0KLQlp ZiBbIC1mICRzcmMgLW8gLWQgJHNyYyBdCi0JdGhlbgotCQl0cnVlCi0JZWxzZQotCQllY2hvICJp bnN0YWxsOiAgJHNyYyBkb2VzIG5vdCBleGlzdCIKLQkJZXhpdCAxCi0JZmkKLQkKLQlpZiBbIHgi JGRzdCIgPSB4IF0KLQl0aGVuCi0JCWVjaG8gImluc3RhbGw6CW5vIGRlc3RpbmF0aW9uIHNwZWNp ZmllZCIKLQkJZXhpdCAxCi0JZWxzZQotCQl0cnVlCi0JZmkKLQotIyBJZiBkZXN0aW5hdGlvbiBp cyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgaWYgeW91ciBzeXN0ZW0K LSMgZG9lcyBub3QgbGlrZSBkb3VibGUgc2xhc2hlcyBpbiBmaWxlbmFtZXMsIHlvdSBtYXkgbmVl ZCB0byBhZGQgc29tZSBsb2dpYwotCi0JaWYgWyAtZCAkZHN0IF0KLQl0aGVuCi0JCWRzdD0iJGRz dCIvYGJhc2VuYW1lICRzcmNgCi0JZWxzZQotCQl0cnVlCi0JZmkKLWZpCi0KLSMjIHRoaXMgc2Vk IGNvbW1hbmQgZW11bGF0ZXMgdGhlIGRpcm5hbWUgY29tbWFuZAotZHN0ZGlyPWBlY2hvICRkc3Qg fCBzZWQgLWUgJ3MsW14vXSokLCw7cywvJCwsO3MsXiQsLiwnYAotCi0jIE1ha2Ugc3VyZSB0aGF0 IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzLgotIyAgdGhpcyBwYXJ0IGlzIHRha2Vu IGZyb20gTm9haCBGcmllZG1hbidzIG1raW5zdGFsbGRpcnMgc2NyaXB0Ci0KLSMgU2tpcCBsb3Rz IG9mIHN0YXQgY2FsbHMgaW4gdGhlIHVzdWFsIGNhc2UuCi1pZiBbICEgLWQgIiRkc3RkaXIiIF07 IHRoZW4KLWRlZmF1bHRJRlM9JwkKLScKLUlGUz0iJHtJRlMtJHtkZWZhdWx0SUZTfX0iCi0KLW9J RlM9IiR7SUZTfSIKLSMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFz b24uCi1JRlM9JyUnCi1zZXQgLSBgZWNobyAke2RzdGRpcn0gfCBzZWQgLWUgJ3NAL0AlQGcnIC1l ICdzQF4lQC9AJ2AKLUlGUz0iJHtvSUZTfSIKLQotcGF0aGNvbXA9JycKLQotd2hpbGUgWyAkIyAt bmUgMCBdIDsgZG8KLQlwYXRoY29tcD0iJHtwYXRoY29tcH0kezF9IgotCXNoaWZ0Ci0KLQlpZiBb ICEgLWQgIiR7cGF0aGNvbXB9IiBdIDsKLSAgICAgICAgdGhlbgotCQkkbWtkaXJwcm9nICIke3Bh dGhjb21wfSIKLQllbHNlCi0JCXRydWUKLQlmaQotCi0JcGF0aGNvbXA9IiR7cGF0aGNvbXB9LyIK LWRvbmUKLWZpCi0KLWlmIFsgeCIkZGlyX2FyZyIgIT0geCBdCi10aGVuCi0JJGRvaXQgJGluc3Rj bWQgJGRzdCAmJgotCi0JaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93 bmNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgotCWlmIFsgeCIkY2hncnBjbWQiICE9IHggXTsg dGhlbiAkZG9pdCAkY2hncnBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKLQlpZiBbIHgiJHN0 cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZp ICYmCi0JaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAkZHN0 OyBlbHNlIHRydWUgOyBmaQotZWxzZQotCi0jIElmIHdlJ3JlIGdvaW5nIHRvIHJlbmFtZSB0aGUg ZmluYWwgZXhlY3V0YWJsZSwgZGV0ZXJtaW5lIHRoZSBuYW1lIG5vdy4KLQotCWlmIFsgeCIkdHJh bnNmb3JtYXJnIiA9IHggXSAKLQl0aGVuCi0JCWRzdGZpbGU9YGJhc2VuYW1lICRkc3RgCi0JZWxz ZQotCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0ICR0cmFuc2Zvcm1iYXNlbmFtZSB8IAotCQkJc2Vk ICR0cmFuc2Zvcm1hcmdgJHRyYW5zZm9ybWJhc2VuYW1lCi0JZmkKLQotIyBkb24ndCBhbGxvdyB0 aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCi0KLQlp ZiBbIHgiJGRzdGZpbGUiID0geCBdIAotCXRoZW4KLQkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdGAK LQllbHNlCi0JCXRydWUKLQlmaQotCi0jIE1ha2UgYSB0ZW1wIGZpbGUgbmFtZSBpbiB0aGUgcHJv cGVyIGRpcmVjdG9yeS4KLQotCWRzdHRtcD0kZHN0ZGlyLyNpbnN0LiQkIwotCi0jIE1vdmUgb3Ig Y29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUKLQotCSRkb2l0ICRpbnN0Y21kICRz cmMgJGRzdHRtcCAmJgotCi0JdHJhcCAicm0gLWYgJHtkc3R0bXB9IiAwICYmCi0KLSMgYW5kIHNl dCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cwotCi0j IElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3 YW50IHRvCi0jIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJl IG5vdCB0byBpZ25vcmUKLSMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkaW5zdGNtZCAk c3JjICRkc3R0bXAiIGNvbW1hbmQuCi0KLQlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4g JGRvaXQgJGNob3duY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgotCWlmIFsgeCIkY2hncnBj bWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hncnBjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYm Ci0JaWYgWyB4IiRzdHJpcGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRzdHJpcGNtZCAkZHN0dG1w OyBlbHNlIHRydWU7ZmkgJiYKLQlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQg JGNobW9kY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgotCi0jIE5vdyByZW5hbWUgdGhlIGZp bGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCi0KLQkkZG9pdCAkcm1jbWQgLWYgJGRzdGRpci8k ZHN0ZmlsZSAmJgotCSRkb2l0ICRtdmNtZCAkZHN0dG1wICRkc3RkaXIvJGRzdGZpbGUgCi0KLWZp ICYmCi0KLQotZXhpdCAwCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvY29uZmlnLnN0YW1wLmluIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvY29uZmlnLnN0YW1wLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2NvbmZpZy5zdGFtcC5pbgorKysgL2Rldi9udWxsCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvY29uZmlndXJlLmFjIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvY29uZmlndXJlLmFjCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBmNmQyNWYzLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2NvbmZpZ3VyZS5hYworKysgL2Rldi9udWxsCkBAIC0xLDI2 NjkgKzAsMCBAQAotZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVj ZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCi1BQ19QUkVSRVEoMi42OCkKLUFDX0lOSVQoW01ha2VmaWxl LmluXSkKLQotQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCi0KLWRubCA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci1kbmwgQ3VzdG9tIG1hY3JvIGRlZmluaXRpb25zLgotCi1kbmwgSkVfQ09OQ0FU X1ZWVihyLCBhLCBiKQotZG5sCi1kbmwgU2V0ICRyIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mICRh IGFuZCAkYiwgd2l0aCBhIHNwYWNlIHNlcGFyYXRpbmcgdGhlbSBpZmYKLWRubCBib3RoICRhIGFu ZCAkYiBhcmUgbm9uLWVtcHR5LgotQUNfREVGVU4oW0pFX0NPTkNBVF9WVlZdLAotaWYgdGVzdCAi eFskXXskMn0iID0gIngiIC1vICJ4WyRdeyQzfSIgPSAieCIgOyB0aGVuCi0gICQxPSJbJF17JDJ9 WyRdeyQzfSIKLWVsc2UKLSAgJDE9IlskXXskMn0gWyRdeyQzfSIKLWZpCi0pCi0KLWRubCBKRV9B UFBFTkRfVlMoYSwgYikKLWRubAotZG5sIFNldCAkYSB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiAk YSBhbmQgYiwgd2l0aCBhIHNwYWNlIHNlcGFyYXRpbmcgdGhlbSBpZmYKLWRubCBib3RoICRhIGFu ZCBiIGFyZSBub24tZW1wdHkuCi1BQ19ERUZVTihbSkVfQVBQRU5EX1ZTXSwKLSAgVF9BUFBFTkRf Vj0kMgotICBKRV9DT05DQVRfVlZWKCQxLCAkMSwgVF9BUFBFTkRfVikKLSkKLQotQ09ORklHVVJF X0NGTEFHUz0KLVNQRUNJRklFRF9DRkxBR1M9IiR7Q0ZMQUdTfSIKLWRubCBKRV9DRkxBR1NfQURE KGNmbGFnKQotZG5sCi1kbmwgQ0ZMQUdTIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIENPTkZJR1VS RV9DRkxBR1MgYW5kIFNQRUNJRklFRF9DRkxBR1MKLWRubCAoaWdub3JpbmcgRVhUUkFfQ0ZMQUdT LCB3aGljaCBkb2VzIG5vdCBpbXBhY3QgY29uZmlndXJlIHRlc3RzLiAgVGhpcyBtYWNybwotZG5s IGFwcGVuZHMgdG8gQ09ORklHVVJFX0NGTEFHUyBhbmQgcmVnZW5lcmF0ZXMgQ0ZMQUdTLgotQUNf REVGVU4oW0pFX0NGTEFHU19BRERdLAotWwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGNvbXBp bGVyIHN1cHBvcnRzICQxXSkKLVRfQ09ORklHVVJFX0NGTEFHUz0iJHtDT05GSUdVUkVfQ0ZMQUdT fSIKLUpFX0FQUEVORF9WUyhDT05GSUdVUkVfQ0ZMQUdTLCAkMSkKLUpFX0NPTkNBVF9WVlYoQ0ZM QUdTLCBDT05GSUdVUkVfQ0ZMQUdTLCBTUEVDSUZJRURfQ0ZMQUdTKQotQUNfQ09NUElMRV9JRkVM U0UoW0FDX0xBTkdfUFJPR1JBTSgKLVtbCi1dXSwgW1sKLSAgICByZXR1cm4gMDsKLV1dKV0sCi0g ICAgICAgICAgICAgIFtqZV9jdl9jZmxhZ3NfYWRkZWQ9JDFdCi0gICAgICAgICAgICAgIEFDX01T R19SRVNVTFQoW3llc10pLAotICAgICAgICAgICAgICBbamVfY3ZfY2ZsYWdzX2FkZGVkPV0KLSAg ICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgICAgICAgICAgICBbQ09ORklHVVJF X0NGTEFHUz0iJHtUX0NPTkZJR1VSRV9DRkxBR1N9Il0KLSkKLUpFX0NPTkNBVF9WVlYoQ0ZMQUdT LCBDT05GSUdVUkVfQ0ZMQUdTLCBTUEVDSUZJRURfQ0ZMQUdTKQotXSkKLQotZG5sIEpFX0NGTEFH U19TQVZFKCkKLWRubCBKRV9DRkxBR1NfUkVTVE9SRSgpCi1kbmwKLWRubCBTYXZlL3Jlc3RvcmUg Q0ZMQUdTLiAgTmVzdGluZyBpcyBub3Qgc3VwcG9ydGVkLgotQUNfREVGVU4oW0pFX0NGTEFHU19T QVZFXSwKLVNBVkVEX0NPTkZJR1VSRV9DRkxBR1M9IiR7Q09ORklHVVJFX0NGTEFHU30iCi0pCi1B Q19ERUZVTihbSkVfQ0ZMQUdTX1JFU1RPUkVdLAotQ09ORklHVVJFX0NGTEFHUz0iJHtTQVZFRF9D T05GSUdVUkVfQ0ZMQUdTfSIKLUpFX0NPTkNBVF9WVlYoQ0ZMQUdTLCBDT05GSUdVUkVfQ0ZMQUdT LCBTUEVDSUZJRURfQ0ZMQUdTKQotKQotCi1DT05GSUdVUkVfQ1hYRkxBR1M9Ci1TUEVDSUZJRURf Q1hYRkxBR1M9IiR7Q1hYRkxBR1N9IgotZG5sIEpFX0NYWEZMQUdTX0FERChjeHhmbGFnKQotQUNf REVGVU4oW0pFX0NYWEZMQUdTX0FERF0sCi1bCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgY29t cGlsZXIgc3VwcG9ydHMgJDFdKQotVF9DT05GSUdVUkVfQ1hYRkxBR1M9IiR7Q09ORklHVVJFX0NY WEZMQUdTfSIKLUpFX0FQUEVORF9WUyhDT05GSUdVUkVfQ1hYRkxBR1MsICQxKQotSkVfQ09OQ0FU X1ZWVihDWFhGTEFHUywgQ09ORklHVVJFX0NYWEZMQUdTLCBTUEVDSUZJRURfQ1hYRkxBR1MpCi1B Q19MQU5HX1BVU0goW0MrK10pCi1BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKAot W1sKLV1dLCBbWwotICAgIHJldHVybiAwOwotXV0pXSwKLSAgICAgICAgICAgICAgW2plX2N2X2N4 eGZsYWdzX2FkZGVkPSQxXQotICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKSwKLSAg ICAgICAgICAgICAgW2plX2N2X2N4eGZsYWdzX2FkZGVkPV0KLSAgICAgICAgICAgICAgQUNfTVNH X1JFU1VMVChbbm9dKQotICAgICAgICAgICAgICBbQ09ORklHVVJFX0NYWEZMQUdTPSIke1RfQ09O RklHVVJFX0NYWEZMQUdTfSJdCi0pCi1BQ19MQU5HX1BPUChbQysrXSkKLUpFX0NPTkNBVF9WVlYo Q1hYRkxBR1MsIENPTkZJR1VSRV9DWFhGTEFHUywgU1BFQ0lGSUVEX0NYWEZMQUdTKQotXSkKLQot ZG5sIEpFX0NPTVBJTEFCTEUobGFiZWwsIGhjb2RlLCBtY29kZSwgcnZhcikKLWRubAotZG5sIFVz ZSBBQ19MSU5LX0lGRUxTRSgpIHJhdGhlciB0aGFuIEFDX0NPTVBJTEVfSUZFTFNFKCkgc28gdGhh dCBsaW5rZXIgZXJyb3JzCi1kbmwgY2F1c2UgZmFpbHVyZS4KLUFDX0RFRlVOKFtKRV9DT01QSUxB QkxFXSwKLVsKLUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICQxIGlzIGNvbXBpbGFibGVdLAotICAg ICAgICAgICAgICAgWyQ0XSwKLSAgICAgICAgICAgICAgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFO R19QUk9HUkFNKFskMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBbJDNdKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyQ0PXllc10s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyQ0PW5vXSldKQotXSkKLQotZG5sID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLQotQ09ORklHPWBlY2hvICR7YWNfY29uZmlndXJlX2FyZ3N9IHwg c2VkIC1lICdzIyciJyInXChbXiBdKlwpJyInIicjXDEjZydgCi1BQ19TVUJTVChbQ09ORklHXSkK LQotZG5sIExpYnJhcnkgcmV2aXNpb24uCi1yZXY9MgotQUNfU1VCU1QoW3Jldl0pCi0KLXNyY3Jv b3Q9JHNyY2RpcgotaWYgdGVzdCAieCR7c3Jjcm9vdH0iID0gInguIiA7IHRoZW4KLSAgc3Jjcm9v dD0iIgotZWxzZQotICBzcmNyb290PSIke3NyY3Jvb3R9LyIKLWZpCi1BQ19TVUJTVChbc3Jjcm9v dF0pCi1hYnNfc3Jjcm9vdD0iYGNkIFwiJHtzcmNkaXJ9XCI7IHB3ZGAvIgotQUNfU1VCU1QoW2Fi c19zcmNyb290XSkKLQotb2Jqcm9vdD0iIgotQUNfU1VCU1QoW29ianJvb3RdKQotYWJzX29ianJv b3Q9ImBwd2RgLyIKLUFDX1NVQlNUKFthYnNfb2Jqcm9vdF0pCi0KLWRubCBNdW5nZSBpbnN0YWxs IHBhdGggdmFyaWFibGVzLgotY2FzZSAiJHByZWZpeCIgaW4KLSAgICpcICogKSBBQ19NU0dfRVJS T1IoW1ByZWZpeCBzaG91bGQgbm90IGNvbnRhaW4gc3BhY2VzXSkgOzsKLSAgICJOT05FIiApIHBy ZWZpeD0iL3Vzci9sb2NhbCIgOzsKLWVzYWMKLWNhc2UgIiRleGVjX3ByZWZpeCIgaW4KLSAgICpc ICogKSBBQ19NU0dfRVJST1IoW0V4ZWMgcHJlZml4IHNob3VsZCBub3QgY29udGFpbiBzcGFjZXNd KSA7OwotICAgIk5PTkUiICkgZXhlY19wcmVmaXg9JHByZWZpeCA7OwotZXNhYwotUFJFRklYPSRw cmVmaXgKLUFDX1NVQlNUKFtQUkVGSVhdKQotQklORElSPWBldmFsIGVjaG8gJGJpbmRpcmAKLUJJ TkRJUj1gZXZhbCBlY2hvICRCSU5ESVJgCi1BQ19TVUJTVChbQklORElSXSkKLUlOQ0xVREVESVI9 YGV2YWwgZWNobyAkaW5jbHVkZWRpcmAKLUlOQ0xVREVESVI9YGV2YWwgZWNobyAkSU5DTFVERURJ UmAKLUFDX1NVQlNUKFtJTkNMVURFRElSXSkKLUxJQkRJUj1gZXZhbCBlY2hvICRsaWJkaXJgCi1M SUJESVI9YGV2YWwgZWNobyAkTElCRElSYAotQUNfU1VCU1QoW0xJQkRJUl0pCi1EQVRBRElSPWBl dmFsIGVjaG8gJGRhdGFkaXJgCi1EQVRBRElSPWBldmFsIGVjaG8gJERBVEFESVJgCi1BQ19TVUJT VChbREFUQURJUl0pCi1NQU5ESVI9YGV2YWwgZWNobyAkbWFuZGlyYAotTUFORElSPWBldmFsIGVj aG8gJE1BTkRJUmAKLUFDX1NVQlNUKFtNQU5ESVJdKQotCi1kbmwgU3VwcG9ydCBmb3IgYnVpbGRp bmcgZG9jdW1lbnRhdGlvbi4KLUFDX1BBVEhfUFJPRyhbWFNMVFBST0NdLCBbeHNsdHByb2NdLCBb ZmFsc2VdLCBbJFBBVEhdKQotaWYgdGVzdCAtZCAiL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zdHls ZXNoZWV0L2RvY2Jvb2steHNsIiA7IHRoZW4KLSAgREVGQVVMVF9YU0xST09UPSIvdXNyL3NoYXJl L3htbC9kb2Nib29rL3N0eWxlc2hlZXQvZG9jYm9vay14c2wiCi1lbGlmIHRlc3QgLWQgIi91c3Iv c2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cyIgOyB0aGVuCi0gIERFRkFVTFRfWFNM Uk9PVD0iL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzIgotZWxzZQotICBk bmwgRG9jdW1lbnRhdGlvbiBidWlsZGluZyB3aWxsIGZhaWwgaWYgdGhpcyBkZWZhdWx0IGdldHMg dXNlZC4KLSAgREVGQVVMVF9YU0xST09UPSIiCi1maQotQUNfQVJHX1dJVEgoW3hzbHJvb3RdLAot ICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC14c2xyb290PTxwYXRoPl0sIFtYU0wgc3R5bGVzaGVl dCByb290IHBhdGhdKV0sIFsKLWlmIHRlc3QgIngkd2l0aF94c2xyb290IiA9ICJ4bm8iIDsgdGhl bgotICBYU0xST09UPSIke0RFRkFVTFRfWFNMUk9PVH0iCi1lbHNlCi0gIFhTTFJPT1Q9IiR7d2l0 aF94c2xyb290fSIKLWZpCi1dLAotICBYU0xST09UPSIke0RFRkFVTFRfWFNMUk9PVH0iCi0pCi1p ZiB0ZXN0ICJ4JFhTTFRQUk9DIiA9ICJ4ZmFsc2UiIDsgdGhlbgotICBYU0xST09UPSIiCi1maQot QUNfU1VCU1QoW1hTTFJPT1RdKQotCi1kbmwgSWYgQ0ZMQUdTIGlzbid0IGRlZmluZWQsIHNldCBD RkxBR1MgdG8gc29tZXRoaW5nIHJlYXNvbmFibGUuICBPdGhlcndpc2UsCi1kbmwganVzdCBwcmV2 ZW50IGF1dG9jb25mIGZyb20gbW9sZXN0aW5nIENGTEFHUy4KLUNGTEFHUz0kQ0ZMQUdTCi1BQ19Q Uk9HX0NDCi0KLWlmIHRlc3QgIngkR0NDIiAhPSAieHllcyIgOyB0aGVuCi0gIEFDX0NBQ0hFX0NI RUNLKFt3aGV0aGVyIGNvbXBpbGVyIGlzIE1TVkNdLAotICAgICAgICAgICAgICAgICBbamVfY3Zf bXN2Y10sCi0gICAgICAgICAgICAgICAgIFtBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9H UkFNKFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBbCi0jaWZuZGVmIF9NU0NfVkVSCi0gIGludCBmYWlsWy0xXTsKLSNlbmRpZgotXSldLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtqZV9jdl9tc3ZjPXllc10sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgW2plX2N2X21zdmM9bm9dKV0pCi1maQotCi1kbmwgY2hl Y2sgaWYgYSBjcmF5IHByZ2VudiB3cmFwcGVyIGNvbXBpbGVyIGlzIGJlaW5nIHVzZWQKLWplX2N2 X2NyYXlfcHJnZW52X3dyYXBwZXI9IiIKLWlmIHRlc3QgIngke1BFX0VOVn0iICE9ICJ4IiA7IHRo ZW4KLSAgY2FzZSAiJHtDQ30iIGluCi0gICAgQ0N8Y2MpCi0JamVfY3ZfY3JheV9wcmdlbnZfd3Jh cHBlcj0ieWVzIgotCTs7Ci0gICAgKikKLSAgICAgICA7OwotICBlc2FjCi1maQotCi1BQ19DQUNI RV9DSEVDSyhbd2hldGhlciBjb21waWxlciBpcyBjcmF5XSwKLSAgICAgICAgICAgICAgW2plX2N2 X2NyYXldLAotICAgICAgICAgICAgICBbQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JB TShbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WwotI2lmbmRlZiBfQ1JBWUMKLSAgaW50IGZhaWxbLTFdOwotI2VuZGlmCi1dKV0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgW2plX2N2X2NyYXk9eWVzXSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBbamVfY3ZfY3JheT1ub10pXSkKLQotaWYgdGVzdCAieCR7amVfY3ZfY3JheX0i ID0gInh5ZXMiIDsgdGhlbgotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBjcmF5IGNvbXBpbGVy IHZlcnNpb24gaXMgOC40XSwKLSAgICAgICAgICAgICAgICBbamVfY3ZfY3JheV84NF0sCi0gICAg ICAgICAgICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCi0jaWYg IShfUkVMRUFTRV9NQUpPUiA9PSA4ICYmIF9SRUxFQVNFX01JTk9SID09IDQpCi0gIGludCBmYWls Wy0xXTsKLSNlbmRpZgotXSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2plX2N2 X2NyYXlfODQ9eWVzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtqZV9jdl9jcmF5 Xzg0PW5vXSldKQotZmkKLQotaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIDsgdGhlbgotICBKRV9D RkxBR1NfQUREKFstc3RkPWdudTExXSkKLSAgaWYgdGVzdCAieCRqZV9jdl9jZmxhZ3NfYWRkZWQi ID0gIngtc3RkPWdudTExIiA7IHRoZW4KLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0pFTUFMTE9D X0hBU19SRVNUUklDVF0sIFsgXSwgWyBdKQotICBlbHNlCi0gICAgSkVfQ0ZMQUdTX0FERChbLXN0 ZD1nbnU5OV0pCi0gICAgaWYgdGVzdCAieCRqZV9jdl9jZmxhZ3NfYWRkZWQiID0gIngtc3RkPWdu dTk5IiA7IHRoZW4KLSAgICAgIEFDX0RFRklORV9VTlFVT1RFRChbSkVNQUxMT0NfSEFTX1JFU1RS SUNUXSwgWyBdLCBbIF0pCi0gICAgZmkKLSAgZmkKLSAgSkVfQ0ZMQUdTX0FERChbLVdlcnJvcj11 bmtub3duLXdhcm5pbmctb3B0aW9uXSkKLSAgSkVfQ0ZMQUdTX0FERChbLVdhbGxdKQotICBKRV9D RkxBR1NfQUREKFstV2V4dHJhXSkKLSAgSkVfQ0ZMQUdTX0FERChbLVdzaG9ydGVuLTY0LXRvLTMy XSkKLSAgSkVfQ0ZMQUdTX0FERChbLVdzaWduLWNvbXBhcmVdKQotICBKRV9DRkxBR1NfQUREKFst V3VuZGVmXSkKLSAgSkVfQ0ZMQUdTX0FERChbLVduby1mb3JtYXQtemVyby1sZW5ndGhdKQotICBK RV9DRkxBR1NfQUREKFstV3BvaW50ZXItYXJpdGhdKQotICBkbmwgVGhpcyB3YXJuaW5nIHRyaWdn ZXJzIG9uIHRoZSB1c2Ugb2YgdGhlIHVuaXZlcnNhbCB6ZXJvIGluaXRpYWxpemVyLCB3aGljaAot ICBkbmwgaXMgYSB2ZXJ5IGhhbmR5IGlkaW9tIGZvciB0aGluZ3MgbGlrZSB0aGUgdGNhY2hlIHN0 YXRpYyBpbml0aWFsaXplciAod2hpY2gKLSAgZG5sIGhhcyBsb3RzIG9mIG5lc3RlZCBzdHJ1Y3Rz KS4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBhdC4KLSAgZG5sIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVn emlsbGEvc2hvd19idWcuY2dpP2lkPTUzMTE5Ci0gIEpFX0NGTEFHU19BREQoWy1Xbm8tbWlzc2lu Zy1icmFjZXNdKQotICBkbmwgVGhpcyBvbmUgdG9vLgotICBKRV9DRkxBR1NfQUREKFstV25vLW1p c3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzXSkKLSAgSkVfQ0ZMQUdTX0FERChbLVduby1taXNzaW5n LWF0dHJpYnV0ZXNdKQotICBKRV9DRkxBR1NfQUREKFstcGlwZV0pCi0gIEpFX0NGTEFHU19BREQo Wy1nM10pCi1lbGlmIHRlc3QgIngkamVfY3ZfbXN2YyIgPSAieHllcyIgOyB0aGVuCi0gIENDPSIk Q0MgLW5vbG9nbyIKLSAgSkVfQ0ZMQUdTX0FERChbLVppXSkKLSAgSkVfQ0ZMQUdTX0FERChbLU1U XSkKLSAgSkVfQ0ZMQUdTX0FERChbLVczXSkKLSAgSkVfQ0ZMQUdTX0FERChbLUZTXSkKLSAgSkVf QVBQRU5EX1ZTKENQUEZMQUdTLCAtSSR7c3JjZGlyfS9pbmNsdWRlL21zdmNfY29tcGF0KQotZmkK LWlmIHRlc3QgIngkamVfY3ZfY3JheSIgPSAieHllcyIgOyB0aGVuCi0gIGRubCBjcmF5IGNvbXBp bGVyIDguNCBoYXMgYW4gaW5saW5pbmcgYnVnCi0gIGlmIHRlc3QgIngkamVfY3ZfY3JheV84NCIg PSAieHllcyIgOyB0aGVuCi0gICAgSkVfQ0ZMQUdTX0FERChbLWhpcGEyXSkKLSAgICBKRV9DRkxB R1NfQUREKFstaG5vZ251XSkKLSAgZmkKLSAgZG5sIGlnbm9yZSB1bnJlYWNoYWJsZSBjb2RlIHdh cm5pbmcKLSAgSkVfQ0ZMQUdTX0FERChbLWhub21lc3NhZ2U9MTI4XSkKLSAgZG5sIGlnbm9yZSBy ZWRlZmluaXRpb24gb2YgIm1hbGxvYyIsICJmcmVlIiwgZXRjIHdhcm5pbmcKLSAgSkVfQ0ZMQUdT X0FERChbLWhub21lc3NhZ2U9MTM1N10pCi1maQotQUNfU1VCU1QoW0NPTkZJR1VSRV9DRkxBR1Nd KQotQUNfU1VCU1QoW1NQRUNJRklFRF9DRkxBR1NdKQotQUNfU1VCU1QoW0VYVFJBX0NGTEFHU10p Ci1BQ19QUk9HX0NQUAotCi1BQ19BUkdfRU5BQkxFKFtjeHhdLAotICBbQVNfSEVMUF9TVFJJTkco Wy0tZGlzYWJsZS1jeHhdLCBbRGlzYWJsZSBDKysgaW50ZWdyYXRpb25dKV0sCi1pZiB0ZXN0ICJ4 JGVuYWJsZV9jeHgiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9jeHg9IjAiCi1lbHNlCi0gIGVu YWJsZV9jeHg9IjEiCi1maQotLAotZW5hYmxlX2N4eD0iMSIKLSkKLWlmIHRlc3QgIngkZW5hYmxl X2N4eCIgPSAieDEiIDsgdGhlbgotICBkbmwgUmVxdWlyZSBhdCBsZWFzdCBjKysxNCwgd2hpY2gg aXMgdGhlIGZpcnN0IHZlcnNpb24gdG8gc3VwcG9ydCBzaXplZAotICBkbmwgZGVhbGxvY2F0aW9u LiAgQysrIHN1cHBvcnQgaXMgbm90IGNvbXBpbGVkIG90aGVyd2lzZS4KLSAgbTRfaW5jbHVkZShb bTQvYXhfY3h4X2NvbXBpbGVfc3RkY3h4Lm00XSkKLSAgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYKFsx N10sIFtub2V4dF0sIFtvcHRpb25hbF0pCi0gIGlmIHRlc3QgIngke0hBVkVfQ1hYMTd9IiAhPSAi eDEiOyB0aGVuCi0gICAgQVhfQ1hYX0NPTVBJTEVfU1REQ1hYKFsxNF0sIFtub2V4dF0sIFtvcHRp b25hbF0pCi0gIGZpCi0gIGlmIHRlc3QgIngke0hBVkVfQ1hYMTR9IiA9ICJ4MSIgLW8gIngke0hB VkVfQ1hYMTd9IiA9ICJ4MSI7IHRoZW4KLSAgICBKRV9DWFhGTEFHU19BREQoWy1XYWxsXSkKLSAg ICBKRV9DWFhGTEFHU19BREQoWy1XZXh0cmFdKQotICAgIEpFX0NYWEZMQUdTX0FERChbLWczXSkK LQotICAgIFNBVkVEX0xJQlM9IiR7TElCU30iCi0gICAgSkVfQVBQRU5EX1ZTKExJQlMsIC1sc3Rk YysrKQotICAgIEpFX0NPTVBJTEFCTEUoW2xpYnN0ZGMrKyBsaW5rYWdlXSwgWwotI2luY2x1ZGUg PHN0ZGxpYi5oPgotXSwgW1sKLQlpbnQgKmFyciA9IChpbnQgKiltYWxsb2Moc2l6ZW9mKGludCkg KiA0Mik7Ci0JaWYgKGFyciA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLV1dLCBbamVfY3ZfbGlic3Rk Y3h4XSkKLSAgICBpZiB0ZXN0ICJ4JHtqZV9jdl9saWJzdGRjeHh9IiA9ICJ4bm8iIDsgdGhlbgot ICAgICAgTElCUz0iJHtTQVZFRF9MSUJTfSIKLSAgICBmaQotICBlbHNlCi0gICAgZW5hYmxlX2N4 eD0iMCIKLSAgZmkKLWZpCi1pZiB0ZXN0ICJ4JGVuYWJsZV9jeHgiID0gIngxIjsgdGhlbgotICBB Q19ERUZJTkUoW0pFTUFMTE9DX0VOQUJMRV9DWFhdLCBbIF0sIFsgXSkKLWZpCi1BQ19TVUJTVChb ZW5hYmxlX2N4eF0pCi1BQ19TVUJTVChbQ09ORklHVVJFX0NYWEZMQUdTXSkKLUFDX1NVQlNUKFtT UEVDSUZJRURfQ1hYRkxBR1NdKQotQUNfU1VCU1QoW0VYVFJBX0NYWEZMQUdTXSkKLQotQUNfQ19C SUdFTkRJQU4oW2FjX2N2X2JpZ19lbmRpYW49MV0sIFthY19jdl9iaWdfZW5kaWFuPTBdKQotaWYg dGVzdCAieCR7YWNfY3ZfYmlnX2VuZGlhbn0iID0gIngxIiA7IHRoZW4KLSAgQUNfREVGSU5FX1VO UVVPVEVEKFtKRU1BTExPQ19CSUdfRU5ESUFOXSwgWyBdLCBbIF0pCi1maQotCi1pZiB0ZXN0ICJ4 JHtqZV9jdl9tc3ZjfSIgPSAieHllcyIgLWEgIngke2FjX2N2X2hlYWRlcl9pbnR0eXBlc19ofSIg PSAieG5vIjsgdGhlbgotICBKRV9BUFBFTkRfVlMoQ1BQRkxBR1MsIC1JJHtzcmNkaXJ9L2luY2x1 ZGUvbXN2Y19jb21wYXQvQzk5KQotZmkKLQotaWYgdGVzdCAieCR7amVfY3ZfbXN2Y30iID0gInh5 ZXMiIDsgdGhlbgotICBMR19TSVpFT0ZfUFRSPUxHX1NJWkVPRl9QVFJfV0lOCi0gIEFDX01TR19S RVNVTFQoW1VzaW5nIGEgcHJlZGVmaW5lZCB2YWx1ZSBmb3Igc2l6ZW9mKHZvaWQgKik6IDQgZm9y IDMyLWJpdCwgOCBmb3IgNjQtYml0XSkKLWVsc2UKLSAgQUNfQ0hFQ0tfU0laRU9GKFt2b2lkICpd KQotICBpZiB0ZXN0ICJ4JHthY19jdl9zaXplb2Zfdm9pZF9wfSIgPSAieDgiIDsgdGhlbgotICAg IExHX1NJWkVPRl9QVFI9MwotICBlbGlmIHRlc3QgIngke2FjX2N2X3NpemVvZl92b2lkX3B9IiA9 ICJ4NCIgOyB0aGVuCi0gICAgTEdfU0laRU9GX1BUUj0yCi0gIGVsc2UKLSAgICBBQ19NU0dfRVJS T1IoW1Vuc3VwcG9ydGVkIHBvaW50ZXIgc2l6ZTogJHthY19jdl9zaXplb2Zfdm9pZF9wfV0pCi0g IGZpCi1maQotQUNfREVGSU5FX1VOUVVPVEVEKFtMR19TSVpFT0ZfUFRSXSwgWyRMR19TSVpFT0Zf UFRSXSwgWyBdKQotCi1BQ19DSEVDS19TSVpFT0YoW2ludF0pCi1pZiB0ZXN0ICJ4JHthY19jdl9z aXplb2ZfaW50fSIgPSAieDgiIDsgdGhlbgotICBMR19TSVpFT0ZfSU5UPTMKLWVsaWYgdGVzdCAi eCR7YWNfY3Zfc2l6ZW9mX2ludH0iID0gIng0IiA7IHRoZW4KLSAgTEdfU0laRU9GX0lOVD0yCi1l bHNlCi0gIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQgaW50IHNpemU6ICR7YWNfY3Zfc2l6ZW9m X2ludH1dKQotZmkKLUFDX0RFRklORV9VTlFVT1RFRChbTEdfU0laRU9GX0lOVF0sIFskTEdfU0la RU9GX0lOVF0sIFsgXSkKLQotQUNfQ0hFQ0tfU0laRU9GKFtsb25nXSkKLWlmIHRlc3QgIngke2Fj X2N2X3NpemVvZl9sb25nfSIgPSAieDgiIDsgdGhlbgotICBMR19TSVpFT0ZfTE9ORz0zCi1lbGlm IHRlc3QgIngke2FjX2N2X3NpemVvZl9sb25nfSIgPSAieDQiIDsgdGhlbgotICBMR19TSVpFT0Zf TE9ORz0yCi1lbHNlCi0gIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQgbG9uZyBzaXplOiAke2Fj X2N2X3NpemVvZl9sb25nfV0pCi1maQotQUNfREVGSU5FX1VOUVVPVEVEKFtMR19TSVpFT0ZfTE9O R10sIFskTEdfU0laRU9GX0xPTkddLCBbIF0pCi0KLUFDX0NIRUNLX1NJWkVPRihbbG9uZyBsb25n XSkKLWlmIHRlc3QgIngke2FjX2N2X3NpemVvZl9sb25nX2xvbmd9IiA9ICJ4OCIgOyB0aGVuCi0g IExHX1NJWkVPRl9MT05HX0xPTkc9MwotZWxpZiB0ZXN0ICJ4JHthY19jdl9zaXplb2ZfbG9uZ19s b25nfSIgPSAieDQiIDsgdGhlbgotICBMR19TSVpFT0ZfTE9OR19MT05HPTIKLWVsc2UKLSAgQUNf TVNHX0VSUk9SKFtVbnN1cHBvcnRlZCBsb25nIGxvbmcgc2l6ZTogJHthY19jdl9zaXplb2ZfbG9u Z19sb25nfV0pCi1maQotQUNfREVGSU5FX1VOUVVPVEVEKFtMR19TSVpFT0ZfTE9OR19MT05HXSwg WyRMR19TSVpFT0ZfTE9OR19MT05HXSwgWyBdKQotCi1BQ19DSEVDS19TSVpFT0YoW2ludG1heF90 XSkKLWlmIHRlc3QgIngke2FjX2N2X3NpemVvZl9pbnRtYXhfdH0iID0gIngxNiIgOyB0aGVuCi0g IExHX1NJWkVPRl9JTlRNQVhfVD00Ci1lbGlmIHRlc3QgIngke2FjX2N2X3NpemVvZl9pbnRtYXhf dH0iID0gIng4IiA7IHRoZW4KLSAgTEdfU0laRU9GX0lOVE1BWF9UPTMKLWVsaWYgdGVzdCAieCR7 YWNfY3Zfc2l6ZW9mX2ludG1heF90fSIgPSAieDQiIDsgdGhlbgotICBMR19TSVpFT0ZfSU5UTUFY X1Q9MgotZWxzZQotICBBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIGludG1heF90IHNpemU6ICR7 YWNfY3Zfc2l6ZW9mX2ludG1heF90fV0pCi1maQotQUNfREVGSU5FX1VOUVVPVEVEKFtMR19TSVpF T0ZfSU5UTUFYX1RdLCBbJExHX1NJWkVPRl9JTlRNQVhfVF0sIFsgXSkKLQotQUNfQ0FOT05JQ0FM X0hPU1QKLWRubCBDUFUtc3BlY2lmaWMgc2V0dGluZ3MuCi1DUFVfU1BJTldBSVQ9IiIKLWNhc2Ug IiR7aG9zdF9jcHV9IiBpbgotICBpNjg2fHg4Nl82NCkKLQlIQVZFX0NQVV9TUElOV0FJVD0xCi0J aWYgdGVzdCAieCR7amVfY3ZfbXN2Y30iID0gInh5ZXMiIDsgdGhlbgotCSAgICBBQ19DQUNIRV9W QUwoW2plX2N2X3BhdXNlX21zdmNdLAotCSAgICAgIFtKRV9DT01QSUxBQkxFKFtwYXVzZSBpbnN0 cnVjdGlvbiBNU1ZDXSwgW10sCi0JCQkJCVtbX21tX3BhdXNlKCk7IHJldHVybiAwO11dLAotCQkJ CQlbamVfY3ZfcGF1c2VfbXN2Y10pXSkKLQkgICAgaWYgdGVzdCAieCR7amVfY3ZfcGF1c2VfbXN2 Y30iID0gInh5ZXMiIDsgdGhlbgotCQlDUFVfU1BJTldBSVQ9J19tbV9wYXVzZSgpJwotCSAgICBm aQotCWVsc2UKLQkgICAgQUNfQ0FDSEVfVkFMKFtqZV9jdl9wYXVzZV0sCi0JICAgICAgW0pFX0NP TVBJTEFCTEUoW3BhdXNlIGluc3RydWN0aW9uXSwgW10sCi0JCQkJCVtbX19hc21fXyB2b2xhdGls ZSgicGF1c2UiKTsgcmV0dXJuIDA7XV0sCi0JCQkJCVtqZV9jdl9wYXVzZV0pXSkKLQkgICAgaWYg dGVzdCAieCR7amVfY3ZfcGF1c2V9IiA9ICJ4eWVzIiA7IHRoZW4KLQkJQ1BVX1NQSU5XQUlUPSdf X2FzbV9fIHZvbGF0aWxlKCJwYXVzZSIpJwotCSAgICBmaQotCWZpCi0JOzsKLSAgYWFyY2g2NHxh cm0qKQotCUhBVkVfQ1BVX1NQSU5XQUlUPTEKLQlkbmwgaXNiIGlzIGEgYmV0dGVyIGVxdWl2YWxl bnQgdG8gdGhlIHBhdXNlIGluc3RydWN0aW9uIG9uIHg4Ni4KLQlBQ19DQUNIRV9WQUwoW2plX2N2 X2lzYl0sCi0JICBbSkVfQ09NUElMQUJMRShbaXNiIGluc3RydWN0aW9uXSwgW10sCi0JCQlbW19f YXNtX18gdm9sYXRpbGUoImlzYiIpOyByZXR1cm4gMDtdXSwKLQkJCVtqZV9jdl9pc2JdKV0pCi0J aWYgdGVzdCAieCR7amVfY3ZfaXNifSIgPSAieHllcyIgOyB0aGVuCi0JICAgIENQVV9TUElOV0FJ VD0nX19hc21fXyB2b2xhdGlsZSgiaXNiIiknCi0JZmkKLQk7OwotICAqKQotCUhBVkVfQ1BVX1NQ SU5XQUlUPTAKLQk7OwotZXNhYwotQUNfREVGSU5FX1VOUVVPVEVEKFtIQVZFX0NQVV9TUElOV0FJ VF0sIFskSEFWRV9DUFVfU1BJTldBSVRdLCBbIF0pCi1BQ19ERUZJTkVfVU5RVU9URUQoW0NQVV9T UElOV0FJVF0sIFskQ1BVX1NQSU5XQUlUXSwgWyBdKQotCi1BQ19BUkdfV0lUSChbbGdfdmFkZHJd LAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1sZy12YWRkcj08bGctdmFkZHI+XSwgW051bWJl ciBvZiBzaWduaWZpY2FudCB2aXJ0dWFsIGFkZHJlc3MgYml0c10pXSwKLSAgW0xHX1ZBRERSPSIk d2l0aF9sZ192YWRkciJdLCBbTEdfVkFERFI9ImRldGVjdCJdKQotCi1jYXNlICIke2hvc3RfY3B1 fSIgaW4KLSAgYWFyY2g2NCkKLSAgICBpZiB0ZXN0ICJ4JExHX1ZBRERSIiA9ICJ4ZGV0ZWN0Ijsg dGhlbgotICAgICAgQUNfTVNHX0NIRUNLSU5HKFtudW1iZXIgb2Ygc2lnbmlmaWNhbnQgdmlydHVh bCBhZGRyZXNzIGJpdHNdKQotICAgICAgaWYgdGVzdCAieCR7TEdfU0laRU9GX1BUUn0iID0gIngy IiA7IHRoZW4KLSAgICAgICAgI2FhcmNoNjQgSUxQMzIKLSAgICAgICAgTEdfVkFERFI9MzIKLSAg ICAgIGVsc2UKLSAgICAgICAgI2FhcmNoNjQgTFA2NAotICAgICAgICBMR19WQUREUj00OAotICAg ICAgZmkKLSAgICAgIEFDX01TR19SRVNVTFQoWyRMR19WQUREUl0pCi0gICAgZmkKLSAgICA7Owot ICB4ODZfNjQpCi0gICAgaWYgdGVzdCAieCRMR19WQUREUiIgPSAieGRldGVjdCI7IHRoZW4KLSAg ICAgIEFDX0NBQ0hFX0NIRUNLKFtudW1iZXIgb2Ygc2lnbmlmaWNhbnQgdmlydHVhbCBhZGRyZXNz IGJpdHNdLAotICAgICAgICAgICAgICAgICAgICAgW2plX2N2X2xnX3ZhZGRyXSwKLSAgICAgICAg ICAgICAgICAgICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgKLVtbCi0jaW5jbHVk ZSA8c3RkaW8uaD4KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRl IDxpbnRyaW4uaD4KLXR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzJfdDsKLSNlbHNlCi0j aW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLV1dLCBbWwotCXVpbnQzMl90IHJbWzRdXTsKLQl1 aW50MzJfdCBlYXhfaW4gPSAweDgwMDAwMDA4VTsKLSNpZmRlZiBfV0lOMzIKLQlfX2NwdWlkKChp bnQgKilyLCAoaW50KWVheF9pbik7Ci0jZWxzZQotCWFzbSB2b2xhdGlsZSAoImNwdWlkIgotCSAg ICA6ICI9YSIgKHJbWzBdXSksICI9YiIgKHJbWzFdXSksICI9YyIgKHJbWzJdXSksICI9ZCIgKHJb WzNdXSkKLQkgICAgOiAiYSIgKGVheF9pbiksICJjIiAoMCkKLQkpOwotI2VuZGlmCi0JdWludDMy X3QgZWF4X291dCA9IHJbWzBdXTsKLQl1aW50MzJfdCB2YWRkciA9ICgoZWF4X291dCAmIDB4MDAw MGZmMDBVKSA+PiA4KTsKLQlGSUxFICpmID0gZm9wZW4oImNvbmZ0ZXN0Lm91dCIsICJ3Iik7Ci0J aWYgKGYgPT0gTlVMTCkgewotCQlyZXR1cm4gMTsKLQl9Ci0JaWYgKHZhZGRyID4gKHNpemVvZih2 b2lkICopIDw8IDMpKSB7Ci0JCXZhZGRyID0gc2l6ZW9mKHZvaWQgKikgPDwgMzsKLQl9Ci0JZnBy aW50ZihmLCAiJXUiLCB2YWRkcik7Ci0JZmNsb3NlKGYpOwotCXJldHVybiAwOwotXV0pXSwKLSAg ICAgICAgICAgICAgICAgICBbamVfY3ZfbGdfdmFkZHI9YGNhdCBjb25mdGVzdC5vdXRgXSwKLSAg ICAgICAgICAgICAgICAgICBbamVfY3ZfbGdfdmFkZHI9ZXJyb3JdLAotICAgICAgICAgICAgICAg ICAgIFtqZV9jdl9sZ192YWRkcj01N10pKQotICAgICAgaWYgdGVzdCAieCR7amVfY3ZfbGdfdmFk ZHJ9IiAhPSAieCIgOyB0aGVuCi0gICAgICAgIExHX1ZBRERSPSIke2plX2N2X2xnX3ZhZGRyfSIK LSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICJ4JHtMR19WQUREUn0iICE9ICJ4ZXJyb3IiIDsgdGhl bgotICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoW0xHX1ZBRERSXSwgWyRMR19WQUREUl0sIFsg XSkKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKFtjYW5ub3QgZGV0ZXJtaW5lIG51 bWJlciBvZiBzaWduaWZpY2FudCB2aXJ0dWFsIGFkZHJlc3MgYml0c10pCi0gICAgICBmaQotICAg IGZpCi0gICAgOzsKLSAgKikKLSAgICBpZiB0ZXN0ICJ4JExHX1ZBRERSIiA9ICJ4ZGV0ZWN0Ijsg dGhlbgotICAgICAgQUNfTVNHX0NIRUNLSU5HKFtudW1iZXIgb2Ygc2lnbmlmaWNhbnQgdmlydHVh bCBhZGRyZXNzIGJpdHNdKQotICAgICAgaWYgdGVzdCAieCR7TEdfU0laRU9GX1BUUn0iID0gIngz IiA7IHRoZW4KLSAgICAgICAgTEdfVkFERFI9NjQKLSAgICAgIGVsaWYgdGVzdCAieCR7TEdfU0la RU9GX1BUUn0iID0gIngyIiA7IHRoZW4KLSAgICAgICAgTEdfVkFERFI9MzIKLSAgICAgIGVsaWYg dGVzdCAieCR7TEdfU0laRU9GX1BUUn0iID0gInhMR19TSVpFT0ZfUFRSX1dJTiIgOyB0aGVuCi0g ICAgICAgIExHX1ZBRERSPSIoMVUgPDwgKExHX1NJWkVPRl9QVFJfV0lOKzMpKSIKLSAgICAgIGVs c2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKFtVbnN1cHBvcnRlZCBsZyhwb2ludGVyIHNpemUpOiAk e0xHX1NJWkVPRl9QVFJ9XSkKLSAgICAgIGZpCi0gICAgICBBQ19NU0dfUkVTVUxUKFskTEdfVkFE RFJdKQotICAgIGZpCi0gICAgOzsKLWVzYWMKLUFDX0RFRklORV9VTlFVT1RFRChbTEdfVkFERFJd LCBbJExHX1ZBRERSXSwgWyBdKQotCi1MRF9QUkVMT0FEX1ZBUj0iTERfUFJFTE9BRCIKLXNvPSJz byIKLWltcG9ydGxpYj0iJHtzb30iCi1vPSIkYWNfb2JqZXh0IgotYT0iYSIKLWV4ZT0iJGFjX2V4 ZWV4dCIKLWxpYnByZWZpeD0ibGliIgotbGlua193aG9sZV9hcmNoaXZlPSIwIgotRFNPX0xERkxB R1M9Jy1zaGFyZWQgLVdsLC1zb25hbWUsJChARiknCi1SUEFUSD0nLVdsLC1ycGF0aCwkKDEpJwot U09SRVY9IiR7c299LiR7cmV2fSIKLVBJQ19DRkxBR1M9Jy1mUElDIC1EUElDJwotQ1RBUkdFVD0n LW8gJEAnCi1MRFRBUkdFVD0nLW8gJEAnCi1URVNUX0xEX01PREU9Ci1FWFRSQV9MREZMQUdTPQot QVJGTEFHUz0nY3J1cycKLUFST1VUPScgJEAnCi1DQ19NTT0xCi0KLWlmIHRlc3QgIngkamVfY3Zf Y3JheV9wcmdlbnZfd3JhcHBlciIgPSAieHllcyIgOyB0aGVuCi0gIFRFU1RfTERfTU9ERT0nLWR5 bmFtaWMnCi1maQotCi1pZiB0ZXN0ICJ4JHtqZV9jdl9jcmF5fSIgPSAieHllcyIgOyB0aGVuCi0g IENDX01NPQotZmkKLQotQU5fTUFLRVZBUihbQVJdLCBbQUNfUFJPR19BUl0pCi1BTl9QUk9HUkFN KFthcl0sIFtBQ19QUk9HX0FSXSkKLUFDX0RFRlVOKFtBQ19QUk9HX0FSXSwgW0FDX0NIRUNLX1RP T0woQVIsIGFyLCA6KV0pCi1BQ19QUk9HX0FSCi0KLUFOX01BS0VWQVIoW05NXSwgW0FDX1BST0df Tk1dKQotQU5fUFJPR1JBTShbbm1dLCBbQUNfUFJPR19OTV0pCi1BQ19ERUZVTihbQUNfUFJPR19O TV0sIFtBQ19DSEVDS19UT09MKE5NLCBubSwgOildKQotQUNfUFJPR19OTQotCi1BQ19QUk9HX0FX SwotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIGplbWFsbG9jIHZlcnNpb24uCi1kbmwK LQotQUNfQVJHX1dJVEgoW3ZlcnNpb25dLAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC12ZXJz aW9uPTxtYWpvcj4uPG1pbm9yPi48YnVnZml4Pi08bnJldj4tZzxnaWQ+XSwKLSAgIFtWZXJzaW9u IHN0cmluZ10pXSwKLSAgWwotICAgIGVjaG8gIiR7d2l0aF92ZXJzaW9ufSIgfCBncmVwIFsnXlsw LTldXCtcLlswLTldXCtcLlswLTldXCstWzAtOV1cKy1nWzAtOWEtZl1cKyQnXSAyPiYxIDE+L2Rl di9udWxsCi0gICAgaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLSAgICAgIGVjaG8gIiR3aXRoX3Zl cnNpb24iID4gIiR7b2Jqcm9vdH1WRVJTSU9OIgotICAgIGVsc2UKLSAgICAgIGVjaG8gIiR7d2l0 aF92ZXJzaW9ufSIgfCBncmVwIFsnXlZFUlNJT04kJ10gMj4mMSAxPi9kZXYvbnVsbAotICAgICAg aWYgdGVzdCAkPyAtbmUgMCA7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKFske3dpdGhfdmVy c2lvbn0gZG9lcyBub3QgbWF0Y2ggPG1ham9yPi48bWlub3I+LjxidWdmaXg+LTxucmV2Pi1nPGdp ZD4gb3IgVkVSU0lPTl0pCi0gICAgICBmaQotICAgIGZpCi0gIF0sIFsKLSAgICBkbmwgU2V0IFZF UlNJT04gaWYgc291cmNlIGRpcmVjdG9yeSBpcyBpbnNpZGUgYSBnaXQgcmVwb3NpdG9yeS4KLSAg ICBpZiB0ZXN0ICJ4YHRlc3QgISBcIiR7c3Jjcm9vdH1cIiAmJiBjZCBcIiR7c3Jjcm9vdH1cIjsg Z2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgMj4vZGV2L251bGxgIiA9ICJ4dHJ1 ZSIgOyB0aGVuCi0gICAgICBkbmwgUGF0dGVybiBnbG9icyBhcmVuJ3QgcG93ZXJmdWwgZW5vdWdo IHRvIG1hdGNoIGJvdGggc2luZ2xlLSBhbmQKLSAgICAgIGRubCBkb3VibGUtZGlnaXQgdmVyc2lv biBudW1iZXJzLCBzbyBpdGVyYXRlIG92ZXIgcGF0dGVybnMgdG8gc3VwcG9ydCB1cAotICAgICAg ZG5sIHRvIHZlcnNpb24gOTkuOTkuOTkgd2l0aG91dCBhbnkgYWNjaWRlbnRhbCBtYXRjaGVzLgot ICAgICAgZm9yIHBhdHRlcm4gaW4gWydbMC05XS5bMC05XS5bMC05XScgJ1swLTldLlswLTldLlsw LTldWzAtOV0nIFwKLSAgICAgICAgICAgICAgICAgICAgICdbMC05XS5bMC05XVswLTldLlswLTld JyAnWzAtOV0uWzAtOV1bMC05XS5bMC05XVswLTldJyBcCi0gICAgICAgICAgICAgICAgICAgICAn WzAtOV1bMC05XS5bMC05XS5bMC05XScgJ1swLTldWzAtOV0uWzAtOV0uWzAtOV1bMC05XScgXAot ICAgICAgICAgICAgICAgICAgICAgJ1swLTldWzAtOV0uWzAtOV1bMC05XS5bMC05XScgXAotICAg ICAgICAgICAgICAgICAgICAgJ1swLTldWzAtOV0uWzAtOV1bMC05XS5bMC05XVswLTldJ107IGRv Ci0gICAgICAgICh0ZXN0ICEgIiR7c3Jjcm9vdH0iICYmIGNkICIke3NyY3Jvb3R9IjsgZ2l0IGRl c2NyaWJlIC0tbG9uZyAtLWFiYnJldj00MCAtLW1hdGNoPSIke3BhdHRlcm59IikgPiAiJHtvYmpy b290fVZFUlNJT04udG1wIiAyPi9kZXYvbnVsbAotICAgICAgICBpZiB0ZXN0ICQ/IC1lcSAwIDsg dGhlbgotICAgICAgICAgIG12ICIke29ianJvb3R9VkVSU0lPTi50bXAiICIke29ianJvb3R9VkVS U0lPTiIKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgZG9uZQotICAgIGZpCi0g ICAgcm0gLWYgIiR7b2Jqcm9vdH1WRVJTSU9OLnRtcCIKLSAgXSkKLQotaWYgdGVzdCAhIC1lICIk e29ianJvb3R9VkVSU0lPTiIgOyB0aGVuCi0gIGlmIHRlc3QgISAtZSAiJHtzcmNyb290fVZFUlNJ T04iIDsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoCi0gICAgICBbTWlzc2luZyBWRVJTSU9OIGZp bGUsIGFuZCB1bmFibGUgdG8gZ2VuZXJhdGUgaXQ7IGNyZWF0aW5nIGJvZ3VzIFZFUlNJT05dKQot ICAgIGVjaG8gIjAuMC4wLTAtZzAwMDAwMG1pc3NpbmdfdmVyc2lvbl90cnlfZ2l0X2ZldGNoX3Rh Z3MiID4gIiR7b2Jqcm9vdH1WRVJTSU9OIgotICBlbHNlCi0gICAgY3AgJHtzcmNyb290fVZFUlNJ T04gJHtvYmpyb290fVZFUlNJT04KLSAgZmkKLWZpCi1qZW1hbGxvY192ZXJzaW9uPWBjYXQgIiR7 b2Jqcm9vdH1WRVJTSU9OImAKLWplbWFsbG9jX3ZlcnNpb25fbWFqb3I9YGVjaG8gJHtqZW1hbGxv Y192ZXJzaW9ufSB8IHRyICIuZy0iICIgIiB8IGF3ayAne3ByaW50IFskXTF9J2AKLWplbWFsbG9j X3ZlcnNpb25fbWlub3I9YGVjaG8gJHtqZW1hbGxvY192ZXJzaW9ufSB8IHRyICIuZy0iICIgIiB8 IGF3ayAne3ByaW50IFskXTJ9J2AKLWplbWFsbG9jX3ZlcnNpb25fYnVnZml4PWBlY2hvICR7amVt YWxsb2NfdmVyc2lvbn0gfCB0ciAiLmctIiAiICIgfCBhd2sgJ3twcmludCBbJF0zfSdgCi1qZW1h bGxvY192ZXJzaW9uX25yZXY9YGVjaG8gJHtqZW1hbGxvY192ZXJzaW9ufSB8IHRyICIuZy0iICIg IiB8IGF3ayAne3ByaW50IFskXTR9J2AKLWplbWFsbG9jX3ZlcnNpb25fZ2lkPWBlY2hvICR7amVt YWxsb2NfdmVyc2lvbn0gfCB0ciAiLmctIiAiICIgfCBhd2sgJ3twcmludCBbJF01fSdgCi1BQ19T VUJTVChbamVtYWxsb2NfdmVyc2lvbl0pCi1BQ19TVUJTVChbamVtYWxsb2NfdmVyc2lvbl9tYWpv cl0pCi1BQ19TVUJTVChbamVtYWxsb2NfdmVyc2lvbl9taW5vcl0pCi1BQ19TVUJTVChbamVtYWxs b2NfdmVyc2lvbl9idWdmaXhdKQotQUNfU1VCU1QoW2plbWFsbG9jX3ZlcnNpb25fbnJldl0pCi1B Q19TVUJTVChbamVtYWxsb2NfdmVyc2lvbl9naWRdKQotCi1kbmwgUGxhdGZvcm0tc3BlY2lmaWMg c2V0dGluZ3MuICBhYmkgYW5kIFJQQVRIIGNhbiBwcm9iYWJseSBiZSBkZXRlcm1pbmVkCi1kbmwg cHJvZ3JhbW1hdGljYWxseSwgYnV0IGRvaW5nIHNvIGlzIGVycm9yLXByb25lLCB3aGljaCBtYWtl cyBpdCBnZW5lcmFsbHkKLWRubCBub3Qgd29ydGggdGhlIHRyb3VibGUuCi1kbmwKLWRubCBEZWZp bmUgY3BwIG1hY3JvcyBpbiBDUFBGTEFHUywgcmF0aGVyIHRoYW4gZG9pbmcgQUNfREVGSU5FKG1h Y3JvKSwgc2luY2UgdGhlCi1kbmwgZGVmaW5pdGlvbnMgbmVlZCB0byBiZSBzZWVuIGJlZm9yZSBh bnkgaGVhZGVycyBhcmUgaW5jbHVkZWQsIHdoaWNoIGlzIGEgcGFpbgotZG5sIHRvIG1ha2UgaGFw cGVuIG90aGVyd2lzZS4KLWRlZmF1bHRfcmV0YWluPSIwIgotemVyb19yZWFsbG9jX2RlZmF1bHRf ZnJlZT0iMCIKLW1hcHNfY29hbGVzY2U9IjEiCi1EVU1QX1NZTVM9IiR7Tk19IC1hIgotU1lNX1BS RUZJWD0iIgotY2FzZSAiJHtob3N0fSIgaW4KLSAgKi0qLWRhcndpbiogfCAqLSotaW9zKikKLQlh Ymk9Im1hY2hvIgotCVJQQVRIPSIiCi0JTERfUFJFTE9BRF9WQVI9IkRZTERfSU5TRVJUX0xJQlJB UklFUyIKLQlzbz0iZHlsaWIiCi0JaW1wb3J0bGliPSIke3NvfSIKLQlmb3JjZV90bHM9IjAiCi0J RFNPX0xERkxBR1M9Jy1zaGFyZWQgLVdsLC1pbnN0YWxsX25hbWUsJChMSUJESVIpLyQoQEYpJwot CVNPUkVWPSIke3Jldn0uJHtzb30iCi0Jc2Jya19kZXByZWNhdGVkPSIxIgotCVNZTV9QUkVGSVg9 Il8iCi0JOzsKLSAgKi0qLWZyZWVic2QqKQotCUpFX0FQUEVORF9WUyhDUFBGTEFHUywgLURfQlNE X1NPVVJDRSkKLQlhYmk9ImVsZiIKLQlBQ19ERUZJTkUoW0pFTUFMTE9DX1NZU0NUTF9WTV9PVkVS Q09NTUlUXSwgWyBdLCBbIF0pCi0JZm9yY2VfbGF6eV9sb2NrPSIxIgotCTs7Ci0gICotKi1kcmFn b25mbHkqKQotCWFiaT0iZWxmIgotCTs7Ci0gICotKi1vcGVuYnNkKikKLQlhYmk9ImVsZiIKLQlm b3JjZV90bHM9IjAiCi0JOzsKLSAgKi0qLWJpdHJpZyopCi0JYWJpPSJlbGYiCi0JOzsKLSAgKi0q LWxpbnV4LWFuZHJvaWQqKQotCWRubCBzeXNjYWxsKDIpIGFuZCBzZWN1cmVfZ2V0ZW52KDMpIGFy ZSBleHBvc2VkIGJ5IF9HTlVfU09VUkNFLgotCUpFX0FQUEVORF9WUyhDUFBGTEFHUywgLURfR05V X1NPVVJDRSkKLQlhYmk9ImVsZiIKLQlnbGliYz0iMCIKLQlBQ19ERUZJTkUoW0pFTUFMTE9DX1BV UkdFX01BRFZJU0VfRE9OVE5FRURfWkVST1NdLCBbIF0sIFsgXSkKLQlBQ19ERUZJTkUoW0pFTUFM TE9DX0hBU19BTExPQ0FfSF0sIFsgXSwgWyBdKQotCUFDX0RFRklORShbSkVNQUxMT0NfUFJPQ19T WVNfVk1fT1ZFUkNPTU1JVF9NRU1PUlldLCBbIF0sIFsgXSkKLQlBQ19ERUZJTkUoW0pFTUFMTE9D X1RIUkVBREVEX0lOSVRdLCBbIF0sIFsgXSkKLQlBQ19ERUZJTkUoW0pFTUFMTE9DX0MxMV9BVE9N SUNTXSwgWyBdLCBbIF0pCi0JZm9yY2VfdGxzPSIwIgotCWlmIHRlc3QgIiR7TEdfU0laRU9GX1BU Un0iID0gIjMiOyB0aGVuCi0JICBkZWZhdWx0X3JldGFpbj0iMSIKLQlmaQotCXplcm9fcmVhbGxv Y19kZWZhdWx0X2ZyZWU9IjEiCi0JOzsKLSAgKi0qLWxpbnV4KikKLQlkbmwgc3lzY2FsbCgyKSBh bmQgc2VjdXJlX2dldGVudigzKSBhcmUgZXhwb3NlZCBieSBfR05VX1NPVVJDRS4KLQlKRV9BUFBF TkRfVlMoQ1BQRkxBR1MsIC1EX0dOVV9TT1VSQ0UpCi0JYWJpPSJlbGYiCi0JZ2xpYmM9IjEiCi0J QUNfREVGSU5FKFtKRU1BTExPQ19QVVJHRV9NQURWSVNFX0RPTlRORUVEX1pFUk9TXSwgWyBdLCBb IF0pCi0JQUNfREVGSU5FKFtKRU1BTExPQ19IQVNfQUxMT0NBX0hdLCBbIF0sIFsgXSkKLQlBQ19E RUZJTkUoW0pFTUFMTE9DX1BST0NfU1lTX1ZNX09WRVJDT01NSVRfTUVNT1JZXSwgWyBdLCBbIF0p Ci0JQUNfREVGSU5FKFtKRU1BTExPQ19USFJFQURFRF9JTklUXSwgWyBdLCBbIF0pCi0JQUNfREVG SU5FKFtKRU1BTExPQ19VU0VfQ1hYX1RIUk9XXSwgWyBdLCBbIF0pCi0JaWYgdGVzdCAiJHtMR19T SVpFT0ZfUFRSfSIgPSAiMyI7IHRoZW4KLQkgIGRlZmF1bHRfcmV0YWluPSIxIgotCWZpCi0JemVy b19yZWFsbG9jX2RlZmF1bHRfZnJlZT0iMSIKLQk7OwotICAqLSota2ZyZWVic2QqKQotCWRubCBz eXNjYWxsKDIpIGFuZCBzZWN1cmVfZ2V0ZW52KDMpIGFyZSBleHBvc2VkIGJ5IF9HTlVfU09VUkNF LgotCUpFX0FQUEVORF9WUyhDUFBGTEFHUywgLURfR05VX1NPVVJDRSkKLQlhYmk9ImVsZiIKLQlB Q19ERUZJTkUoW0pFTUFMTE9DX0hBU19BTExPQ0FfSF0sIFsgXSwgWyBdKQotCUFDX0RFRklORShb SkVNQUxMT0NfU1lTQ1RMX1ZNX09WRVJDT01NSVRdLCBbIF0sIFsgXSkKLQlBQ19ERUZJTkUoW0pF TUFMTE9DX1RIUkVBREVEX0lOSVRdLCBbIF0sIFsgXSkKLQlBQ19ERUZJTkUoW0pFTUFMTE9DX1VT RV9DWFhfVEhST1ddLCBbIF0sIFsgXSkKLQk7OwotICAqLSotbmV0YnNkKikKLQlBQ19NU0dfQ0hF Q0tJTkcoW0FCSV0pCi0gICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0o Ci1bWyNpZmRlZiBfX0VMRl9fCi0vKiBFTEYgKi8KLSNlbHNlCi0jZXJyb3IgYW91dAotI2VuZGlm Ci1dXSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbYWJpPSJlbGYiXSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgW2FiaT0iYW91dCJdKQotCUFDX01TR19SRVNVTFQoWyRhYmldKQot CTs7Ci0gICotKi1zb2xhcmlzMiopCi0JYWJpPSJlbGYiCi0JUlBBVEg9Jy1XbCwtUiwkKDEpJwot CWRubCBTb2xhcmlzIG5lZWRzIHRoaXMgZm9yIHNpZ3dhaXQoKS4KLQlKRV9BUFBFTkRfVlMoQ1BQ RkxBR1MsIC1EX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTKQotCUpFX0FQUEVORF9WUyhMSUJTLCAt bHBvc2l4NCAtbHNvY2tldCAtbG5zbCkKLQk7OwotICAqLWlibS1haXgqKQotCWlmIHRlc3QgIiR7 TEdfU0laRU9GX1BUUn0iID0gIjMiOyB0aGVuCi0JICBkbmwgNjRiaXQgQUlYCi0JICBMRF9QUkVM T0FEX1ZBUj0iTERSX1BSRUxPQUQ2NCIKLQllbHNlCi0JICBkbmwgMzJiaXQgQUlYCi0JICBMRF9Q UkVMT0FEX1ZBUj0iTERSX1BSRUxPQUQiCi0JZmkKLQlhYmk9Inhjb2ZmIgotCTs7Ci0gICotKi1t aW5ndyogfCAqLSotY3lnd2luKikKLQlhYmk9InBlY29mZiIKLQlmb3JjZV90bHM9IjAiCi0JbWFw c19jb2FsZXNjZT0iMCIKLQlSUEFUSD0iIgotCXNvPSJkbGwiCi0JaWYgdGVzdCAieCRqZV9jdl9t c3ZjIiA9ICJ4eWVzIiA7IHRoZW4KLQkgIGltcG9ydGxpYj0ibGliIgotCSAgRFNPX0xERkxBR1M9 Ii1MRCIKLQkgIEVYVFJBX0xERkxBR1M9Ii1saW5rIC1ERUJVRyIKLQkgIENUQVJHRVQ9Jy1GbyRA JwotCSAgTERUQVJHRVQ9Jy1GZSRAJwotCSAgQVI9J2xpYicKLQkgIEFSRkxBR1M9Jy1ub2xvZ28g LW91dDonCi0JICBBUk9VVD0nJEAnCi0JICBDQ19NTT0KLSAgICAgICAgZWxzZQotCSAgaW1wb3J0 bGliPSIke3NvfSIKLQkgIERTT19MREZMQUdTPSItc2hhcmVkIgotCSAgbGlua193aG9sZV9hcmNo aXZlPSIxIgotCWZpCi0JY2FzZSAiJHtob3N0fSIgaW4KLQkgICotKi1jeWd3aW4qKQotCSAgICBE VU1QX1NZTVM9ImR1bXBiaW4gL1NZTUJPTFMiCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVz YWMKLQlhPSJsaWIiCi0JbGlicHJlZml4PSIiCi0JU09SRVY9IiR7c299IgotCVBJQ19DRkxBR1M9 IiIKLQlpZiB0ZXN0ICIke0xHX1NJWkVPRl9QVFJ9IiA9ICIzIjsgdGhlbgotCSAgZGVmYXVsdF9y ZXRhaW49IjEiCi0JZmkKLQl6ZXJvX3JlYWxsb2NfZGVmYXVsdF9mcmVlPSIxIgotCTs7Ci0gICot Ki1udG8tcW54KQotCWFiaT0iZWxmIgotICBmb3JjZV90bHM9IjAiCi0gIEFDX0RFRklORShbSkVN QUxMT0NfSEFTX0FMTE9DQV9IXSwgWyBdLCBbIF0pCi0JOzsKLSAgKikKLQlBQ19NU0dfUkVTVUxU KFtVbnN1cHBvcnRlZCBvcGVyYXRpbmcgc3lzdGVtOiAke2hvc3R9XSkKLQlhYmk9ImVsZiIKLQk7 OwotZXNhYwotCi1KRU1BTExPQ19VU0FCTEVfU0laRV9DT05TVD1jb25zdAotQUNfQ0hFQ0tfSEVB REVSUyhbbWFsbG9jLmhdLCBbCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBtYWxsb2NfdXNh YmxlX3NpemUgZGVmaW5pdGlvbiBjYW4gdXNlIGNvbnN0IGFyZ3VtZW50XSkKLSAgQUNfQ09NUElM RV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTSgKLSAgICBbI2luY2x1ZGUgPG1hbGxvYy5oPgotICAg ICAjaW5jbHVkZSA8c3RkZGVmLmg+Ci0gICAgc2l6ZV90IG1hbGxvY191c2FibGVfc2l6ZShjb25z dCB2b2lkICpwdHIpOwotICAgIF0sCi0gICAgW10pXSxbCi0gICAgICAgICAgICAgICAgQUNfTVNH X1JFU1VMVChbeWVzXSkKLSAgICAgICAgIF0sWwotICAgICAgICAgICAgICAgIEpFTUFMTE9DX1VT QUJMRV9TSVpFX0NPTlNUPQotICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKLSAg ICAgICAgIF0pCi1dKQotQUNfREVGSU5FX1VOUVVPVEVEKFtKRU1BTExPQ19VU0FCTEVfU0laRV9D T05TVF0sIFskSkVNQUxMT0NfVVNBQkxFX1NJWkVfQ09OU1RdLCBbIF0pCi1BQ19TVUJTVChbYWJp XSkKLUFDX1NVQlNUKFtSUEFUSF0pCi1BQ19TVUJTVChbTERfUFJFTE9BRF9WQVJdKQotQUNfU1VC U1QoW3NvXSkKLUFDX1NVQlNUKFtpbXBvcnRsaWJdKQotQUNfU1VCU1QoW29dKQotQUNfU1VCU1Qo W2FdKQotQUNfU1VCU1QoW2V4ZV0pCi1BQ19TVUJTVChbbGlicHJlZml4XSkKLUFDX1NVQlNUKFts aW5rX3dob2xlX2FyY2hpdmVdKQotQUNfU1VCU1QoW0RTT19MREZMQUdTXSkKLUFDX1NVQlNUKFtF WFRSQV9MREZMQUdTXSkKLUFDX1NVQlNUKFtTT1JFVl0pCi1BQ19TVUJTVChbUElDX0NGTEFHU10p Ci1BQ19TVUJTVChbQ1RBUkdFVF0pCi1BQ19TVUJTVChbTERUQVJHRVRdKQotQUNfU1VCU1QoW1RF U1RfTERfTU9ERV0pCi1BQ19TVUJTVChbTUtMSUJdKQotQUNfU1VCU1QoW0FSRkxBR1NdKQotQUNf U1VCU1QoW0FST1VUXSkKLUFDX1NVQlNUKFtEVU1QX1NZTVNdKQotQUNfU1VCU1QoW0NDX01NXSkK LQotZG5sIERldGVybWluZSB3aGV0aGVyIGxpYm0gbXVzdCBiZSBsaW5rZWQgdG8gdXNlIGUuZy4g bG9nKDMpLgotQUNfU0VBUkNIX0xJQlMoW2xvZ10sIFttXSwgLCBbQUNfTVNHX0VSUk9SKFtNaXNz aW5nIG1hdGggZnVuY3Rpb25zXSldKQotaWYgdGVzdCAieCRhY19jdl9zZWFyY2hfbG9nIiAhPSAi eG5vbmUgcmVxdWlyZWQiIDsgdGhlbgotICBMTT0iJGFjX2N2X3NlYXJjaF9sb2ciCi1lbHNlCi0g IExNPQotZmkKLUFDX1NVQlNUKExNKQotCi1KRV9DT01QSUxBQkxFKFtfX2F0dHJpYnV0ZV9fIHN5 bnRheF0sCi0gICAgICAgICAgICAgIFtzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgdm9p ZCBmb28odm9pZCl7fV0sCi0gICAgICAgICAgICAgIFtdLAotICAgICAgICAgICAgICBbamVfY3Zf YXR0cmlidXRlXSkKLWlmIHRlc3QgIngke2plX2N2X2F0dHJpYnV0ZX0iID0gInh5ZXMiIDsgdGhl bgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfQVRUUl0sIFsgXSwgWyBdKQotICBpZiB0ZXN0 ICJ4JHtHQ0N9IiA9ICJ4eWVzIiAtYSAieCR7YWJpfSIgPSAieGVsZiI7IHRoZW4KLSAgICBKRV9D RkxBR1NfQUREKFstZnZpc2liaWxpdHk9aGlkZGVuXSkKLSAgICBKRV9DWFhGTEFHU19BREQoWy1m dmlzaWJpbGl0eT1oaWRkZW5dKQotICBmaQotZmkKLWRubCBDaGVjayBmb3IgdGxzX21vZGVsIGF0 dHJpYnV0ZSBzdXBwb3J0IChjbGFuZyAzLjAgc3RpbGwgbGFja3Mgc3VwcG9ydCkuCi1KRV9DRkxB R1NfU0FWRSgpCi1KRV9DRkxBR1NfQUREKFstV2Vycm9yXSkKLUpFX0NGTEFHU19BREQoWy1oZXJy b3Jfb25fd2FybmluZ10pCi1KRV9DT01QSUxBQkxFKFt0bHNfbW9kZWwgYXR0cmlidXRlXSwgW10s Ci0gICAgICAgICAgICAgIFtzdGF0aWMgX190aHJlYWQgaW50Ci0gICAgICAgICAgICAgICBfX2F0 dHJpYnV0ZV9fKCh0bHNfbW9kZWwoImluaXRpYWwtZXhlYyIpLCB1bnVzZWQpKSBmb287Ci0gICAg ICAgICAgICAgICBmb28gPSAwO10sCi0gICAgICAgICAgICAgIFtqZV9jdl90bHNfbW9kZWxdKQot SkVfQ0ZMQUdTX1JFU1RPUkUoKQotZG5sIChTZXR0aW5nIG9mIEpFTUFMTE9DX1RMU19NT0RFTCBp cyBkb25lIGxhdGVyLCBhZnRlciB3ZSd2ZSBjaGVja2VkIGZvcgotZG5sIC0tZGlzYWJsZS1pbml0 aWFsLWV4ZWMtdGxzKQotCi1kbmwgQ2hlY2sgZm9yIGFsbG9jX3NpemUgYXR0cmlidXRlIHN1cHBv cnQuCi1KRV9DRkxBR1NfU0FWRSgpCi1KRV9DRkxBR1NfQUREKFstV2Vycm9yXSkKLUpFX0NGTEFH U19BREQoWy1oZXJyb3Jfb25fd2FybmluZ10pCi1KRV9DT01QSUxBQkxFKFthbGxvY19zaXplIGF0 dHJpYnV0ZV0sIFsjaW5jbHVkZSA8c3RkbGliLmg+XSwKLSAgICAgICAgICAgICAgW3ZvaWQgKmZv byhzaXplX3Qgc2l6ZSkgX19hdHRyaWJ1dGVfXygoYWxsb2Nfc2l6ZSgxKSkpO10sCi0gICAgICAg ICAgICAgIFtqZV9jdl9hbGxvY19zaXplXSkKLUpFX0NGTEFHU19SRVNUT1JFKCkKLWlmIHRlc3Qg Ingke2plX2N2X2FsbG9jX3NpemV9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1B TExPQ19IQVZFX0FUVFJfQUxMT0NfU0laRV0sIFsgXSwgWyBdKQotZmkKLWRubCBDaGVjayBmb3Ig Zm9ybWF0KGdudV9wcmludGYsIC4uLikgYXR0cmlidXRlIHN1cHBvcnQuCi1KRV9DRkxBR1NfU0FW RSgpCi1KRV9DRkxBR1NfQUREKFstV2Vycm9yXSkKLUpFX0NGTEFHU19BREQoWy1oZXJyb3Jfb25f d2FybmluZ10pCi1KRV9DT01QSUxBQkxFKFtmb3JtYXQoZ251X3ByaW50ZiwgLi4uKSBhdHRyaWJ1 dGVdLCBbI2luY2x1ZGUgPHN0ZGxpYi5oPl0sCi0gICAgICAgICAgICAgIFt2b2lkICpmb28oY29u c3QgY2hhciAqZm9ybWF0LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChnbnVfcHJpbnRmLCAx LCAyKSkpO10sCi0gICAgICAgICAgICAgIFtqZV9jdl9mb3JtYXRfZ251X3ByaW50Zl0pCi1KRV9D RkxBR1NfUkVTVE9SRSgpCi1pZiB0ZXN0ICJ4JHtqZV9jdl9mb3JtYXRfZ251X3ByaW50Zn0iID0g Inh5ZXMiIDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfQVRUUl9GT1JNQVRfR05V X1BSSU5URl0sIFsgXSwgWyBdKQotZmkKLWRubCBDaGVjayBmb3IgZm9ybWF0KHByaW50ZiwgLi4u KSBhdHRyaWJ1dGUgc3VwcG9ydC4KLUpFX0NGTEFHU19TQVZFKCkKLUpFX0NGTEFHU19BREQoWy1X ZXJyb3JdKQotSkVfQ0ZMQUdTX0FERChbLWhlcnJvcl9vbl93YXJuaW5nXSkKLUpFX0NPTVBJTEFC TEUoW2Zvcm1hdChwcmludGYsIC4uLikgYXR0cmlidXRlXSwgWyNpbmNsdWRlIDxzdGRsaWIuaD5d LAotICAgICAgICAgICAgICBbdm9pZCAqZm9vKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0 dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpO10sCi0gICAgICAgICAgICAgIFtqZV9j dl9mb3JtYXRfcHJpbnRmXSkKLUpFX0NGTEFHU19SRVNUT1JFKCkKLWlmIHRlc3QgIngke2plX2N2 X2Zvcm1hdF9wcmludGZ9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19I QVZFX0FUVFJfRk9STUFUX1BSSU5URl0sIFsgXSwgWyBdKQotZmkKLQotZG5sIENoZWNrIGZvciBm b3JtYXRfYXJnKC4uLikgYXR0cmlidXRlIHN1cHBvcnQuCi1KRV9DRkxBR1NfU0FWRSgpCi1KRV9D RkxBR1NfQUREKFstV2Vycm9yXSkKLUpFX0NGTEFHU19BREQoWy1oZXJyb3Jfb25fd2FybmluZ10p Ci1KRV9DT01QSUxBQkxFKFtmb3JtYXQocHJpbnRmLCAuLi4pIGF0dHJpYnV0ZV0sIFsjaW5jbHVk ZSA8c3RkbGliLmg+XSwKLSAgICAgICAgICAgICAgW2NvbnN0IGNoYXIgKiBfX2F0dHJpYnV0ZV9f KChfX2Zvcm1hdF9hcmdfXygxKSkpIGZvbyhjb25zdCBjaGFyICpmb3JtYXQpO10sCi0gICAgICAg ICAgICAgIFtqZV9jdl9mb3JtYXRfYXJnXSkKLUpFX0NGTEFHU19SRVNUT1JFKCkKLWlmIHRlc3Qg Ingke2plX2N2X2Zvcm1hdF9hcmd9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1B TExPQ19IQVZFX0FUVFJfRk9STUFUX0FSR10sIFsgXSwgWyBdKQotZmkKLQotZG5sIENoZWNrIGZv ciBmYWxsdGhyb3VnaCBhdHRyaWJ1dGUgc3VwcG9ydC4KLUpFX0NGTEFHU19TQVZFKCkKLUpFX0NG TEFHU19BREQoWy1XaW1wbGljaXQtZmFsbHRocm91Z2hdKQotSkVfQ09NUElMQUJMRShbZmFsbHRo cm91Z2ggYXR0cmlidXRlXSwKLSAgICAgICAgICAgICAgWyNpZiAhX19oYXNfYXR0cmlidXRlKGZh bGx0aHJvdWdoKQotICAgICAgICAgICAgICAgI2Vycm9yICJmb28iCi0gICAgICAgICAgICAgICAj ZW5kaWZdLAotICAgICAgICAgICAgICBbaW50IHggPSAwOwotICAgICAgICAgICAgICAgc3dpdGNo ICh4KSB7Ci0gICAgICAgICAgICAgICBjYXNlIDA6IF9fYXR0cmlidXRlX18oKF9fZmFsbHRocm91 Z2hfXykpOwotICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gMTsKLSAgICAgICAgICAgICAg IH1dLAotICAgICAgICAgICAgICBbamVfY3ZfZmFsbHRocm91Z2hdKQotSkVfQ0ZMQUdTX1JFU1RP UkUoKQotaWYgdGVzdCAieCR7amVfY3ZfZmFsbHRocm91Z2h9IiA9ICJ4eWVzIiA7IHRoZW4KLSAg QUNfREVGSU5FKFtKRU1BTExPQ19IQVZFX0FUVFJfRkFMTFRIUk9VR0hdLCBbIF0sIFsgXSkKLSAg SkVfQ0ZMQUdTX0FERChbLVdpbXBsaWNpdC1mYWxsdGhyb3VnaF0pCi0gIEpFX0NYWEZMQUdTX0FE RChbLVdpbXBsaWNpdC1mYWxsdGhyb3VnaF0pCi1maQotCi1kbmwgQ2hlY2sgZm9yIGNvbGQgYXR0 cmlidXRlIHN1cHBvcnQuCi1KRV9DRkxBR1NfU0FWRSgpCi1KRV9DRkxBR1NfQUREKFstV2Vycm9y XSkKLUpFX0NGTEFHU19BREQoWy1oZXJyb3Jfb25fd2FybmluZ10pCi1KRV9DT01QSUxBQkxFKFtj b2xkIGF0dHJpYnV0ZV0sIFtdLAotICAgICAgICAgICAgICBbX19hdHRyaWJ1dGVfXygoX19jb2xk X18pKSB2b2lkIGZvbygpO10sCi0gICAgICAgICAgICAgIFtqZV9jdl9jb2xkXSkKLUpFX0NGTEFH U19SRVNUT1JFKCkKLWlmIHRlc3QgIngke2plX2N2X2NvbGR9IiA9ICJ4eWVzIiA7IHRoZW4KLSAg QUNfREVGSU5FKFtKRU1BTExPQ19IQVZFX0FUVFJfQ09MRF0sIFsgXSwgWyBdKQotZmkKLQotZG5s IENoZWNrIGZvciBWTV9NQUtFX1RBRyBmb3IgbW1hcCBzdXBwb3J0LgotSkVfQ09NUElMQUJMRShb dm1fbWFrZV90YWddLAotCSAgICAgIFsjaW5jbHVkZSA8c3lzL21tYW4uaD4KLQkgICAgICAgI2lu Y2x1ZGUgPG1hY2gvdm1fc3RhdGlzdGljcy5oPl0sCi0JICAgICAgW3ZvaWQgKnA7Ci0JICAgICAg IHAgPSBtbWFwKDAsIDE2LCBQUk9UX1JFQUQsIE1BUF9BTk9OfE1BUF9QUklWQVRFLCBWTV9NQUtF X1RBRygxKSwgMCk7Ci0JICAgICAgIG11bm1hcChwLCAxNik7XSwKLQkgICAgICBbamVfY3Zfdm1f bWFrZV90YWddKQotaWYgdGVzdCAieCR7amVfY3Zfdm1fbWFrZV90YWd9IiA9ICJ4eWVzIiA7IHRo ZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19IQVZFX1ZNX01BS0VfVEFHXSwgWyBdLCBbIF0pCi1m aQotCi1kbmwgU3VwcG9ydCBvcHRpb25hbCBhZGRpdGlvbnMgdG8gcnBhdGguCi1BQ19BUkdfV0lU SChbcnBhdGhdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1ycGF0aD08cnBhdGg+XSwgW0Nv bG9uLXNlcGFyYXRlZCBycGF0aCAoRUxGIHN5c3RlbXMgb25seSldKV0sCi1pZiB0ZXN0ICJ4JHdp dGhfcnBhdGgiID0gInhubyIgOyB0aGVuCi0gIFJQQVRIX0VYVFJBPQotZWxzZQotICBSUEFUSF9F WFRSQT0iYGVjaG8gJHdpdGhfcnBhdGggfCB0ciBcIjpcIiBcIiBcImAiCi1maSwKLSAgUlBBVEhf RVhUUkE9Ci0pCi1BQ19TVUJTVChbUlBBVEhfRVhUUkFdKQotCi1kbmwgRGlzYWJsZSBydWxlcyB0 aGF0IGRvIGF1dG9tYXRpYyByZWdlbmVyYXRpb24gb2YgY29uZmlndXJlIG91dHB1dCBieSBkZWZh dWx0LgotQUNfQVJHX0VOQUJMRShbYXV0b2dlbl0sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFi bGUtYXV0b2dlbl0sIFtBdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGUgY29uZmlndXJlIG91dHB1dF0p XSwKLWlmIHRlc3QgIngkZW5hYmxlX2F1dG9nZW4iID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9h dXRvZ2VuPSIwIgotZWxzZQotICBlbmFibGVfYXV0b2dlbj0iMSIKLWZpCi0sCi1lbmFibGVfYXV0 b2dlbj0iMCIKLSkKLUFDX1NVQlNUKFtlbmFibGVfYXV0b2dlbl0pCi0KLUFDX1BST0dfSU5TVEFM TAotQUNfUFJPR19SQU5MSUIKLUFDX1BBVEhfUFJPRyhbTERdLCBbbGRdLCBbZmFsc2VdLCBbJFBB VEhdKQotQUNfUEFUSF9QUk9HKFtBVVRPQ09ORl0sIFthdXRvY29uZl0sIFtmYWxzZV0sIFskUEFU SF0pCi0KLWRubCBFbmFibGUgZG9jdW1lbnRhdGlvbgotQUNfQVJHX0VOQUJMRShbZG9jXSwKLQkg ICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWRvY10sIFtCdWlsZCBkb2N1bWVudGF0aW9u XSldLAotaWYgdGVzdCAieCRlbmFibGVfZG9jIiA9ICJ4bm8iIDsgdGhlbgotICBlbmFibGVfZG9j PSIwIgotZWxzZQotICBlbmFibGVfZG9jPSIxIgotZmkKLSwKLWVuYWJsZV9kb2M9IjEiCi0pCi1B Q19TVUJTVChbZW5hYmxlX2RvY10pCi0KLWRubCBFbmFibGUgc2hhcmVkIGxpYnMKLUFDX0FSR19F TkFCTEUoW3NoYXJlZF0sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkXSwgW0J1 aWxkIHNoYXJlZCBsaWJhcmllc10pXSwKLWlmIHRlc3QgIngkZW5hYmxlX3NoYXJlZCIgPSAieG5v IiA7IHRoZW4KLSAgZW5hYmxlX3NoYXJlZD0iMCIKLWVsc2UKLSAgZW5hYmxlX3NoYXJlZD0iMSIK LWZpCi0sCi1lbmFibGVfc2hhcmVkPSIxIgotKQotQUNfU1VCU1QoW2VuYWJsZV9zaGFyZWRdKQot Ci1kbmwgRW5hYmxlIHN0YXRpYyBsaWJzCi1BQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAotICBbQVNf SEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY10sIFtCdWlsZCBzdGF0aWMgbGliYXJpZXNdKV0s Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9zdGF0aWMiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9zdGF0 aWM9IjAiCi1lbHNlCi0gIGVuYWJsZV9zdGF0aWM9IjEiCi1maQotLAotZW5hYmxlX3N0YXRpYz0i MSIKLSkKLUFDX1NVQlNUKFtlbmFibGVfc3RhdGljXSkKLQotaWYgdGVzdCAiJGVuYWJsZV9zaGFy ZWQkZW5hYmxlX3N0YXRpYyIgPSAiMDAiIDsgdGhlbgotICBBQ19NU0dfRVJST1IoW1BsZWFzZSBl bmFibGUgb25lIG9mIHNoYXJlZCBvciBzdGF0aWMgYnVpbGRzXSkKLWZpCi0KLWRubCBQZXJmb3Jt IG5vIG5hbWUgbWFuZ2xpbmcgYnkgZGVmYXVsdC4KLUFDX0FSR19XSVRIKFttYW5nbGluZ10sCi0g IFtBU19IRUxQX1NUUklORyhbLS13aXRoLW1hbmdsaW5nPTxtYXA+XSwgW01hbmdsZSBzeW1ib2xz IGluIDxtYXA+XSldLAotICBbbWFuZ2xpbmdfbWFwPSIkd2l0aF9tYW5nbGluZyJdLCBbbWFuZ2xp bmdfbWFwPSIiXSkKLQotZG5sIERvIG5vdCBwcmVmaXggcHVibGljIEFQSXMgYnkgZGVmYXVsdC4K LUFDX0FSR19XSVRIKFtqZW1hbGxvY19wcmVmaXhdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0 aC1qZW1hbGxvYy1wcmVmaXg9PHByZWZpeD5dLCBbUHJlZml4IHRvIHByZXBlbmQgdG8gYWxsIHB1 YmxpYyBBUElzXSldLAotICBbSkVNQUxMT0NfUFJFRklYPSIkd2l0aF9qZW1hbGxvY19wcmVmaXgi XSwKLSAgW2lmIHRlc3QgIngkYWJpIiAhPSAieG1hY2hvIiAtYSAieCRhYmkiICE9ICJ4cGVjb2Zm IjsgdGhlbgotICBKRU1BTExPQ19QUkVGSVg9IiIKLWVsc2UKLSAgSkVNQUxMT0NfUFJFRklYPSJq ZV8iCi1maV0KLSkKLWlmIHRlc3QgIngkSkVNQUxMT0NfUFJFRklYIiA9ICJ4IiA7IHRoZW4KLSAg QUNfREVGSU5FKFtKRU1BTExPQ19JU19NQUxMT0NdLCBbIF0sIFsgXSkKLWVsc2UKLSAgSkVNQUxM T0NfQ1BSRUZJWD1gZWNobyAke0pFTUFMTE9DX1BSRUZJWH0gfCB0ciAiYS16IiAiQS1aImAKLSAg QUNfREVGSU5FX1VOUVVPVEVEKFtKRU1BTExPQ19QUkVGSVhdLCBbIiRKRU1BTExPQ19QUkVGSVgi XSwgWyBdKQotICBBQ19ERUZJTkVfVU5RVU9URUQoW0pFTUFMTE9DX0NQUkVGSVhdLCBbIiRKRU1B TExPQ19DUFJFRklYIl0sIFsgXSkKLWZpCi1BQ19TVUJTVChbSkVNQUxMT0NfUFJFRklYXSkKLUFD X1NVQlNUKFtKRU1BTExPQ19DUFJFRklYXSkKLQotQUNfQVJHX1dJVEgoW2V4cG9ydF0sCi0gIFtB U19IRUxQX1NUUklORyhbLS13aXRob3V0LWV4cG9ydF0sIFtkaXNhYmxlIGV4cG9ydGluZyBqZW1h bGxvYyBwdWJsaWMgQVBJc10pXSwKLSAgW2lmIHRlc3QgIngkd2l0aF9leHBvcnQiID0gInhubyI7 IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19FWFBPUlRdLFtdLCBbIF0pCi1maV0KLSkKLQot cHVibGljX3N5bXM9ImFsaWduZWRfYWxsb2MgY2FsbG9jIGRhbGxvY3ggZnJlZSBtYWxsY3RsIG1h bGxjdGxieW1pYiBtYWxsY3RsbmFtZXRvbWliIG1hbGxvYyBtYWxsb2NfY29uZiBtYWxsb2NfY29u Zl8yX2NvbmZfaGFyZGVyIG1hbGxvY19tZXNzYWdlIG1hbGxvY19zdGF0c19wcmludCBtYWxsb2Nf dXNhYmxlX3NpemUgbWFsbG9jeCBzbWFsbG9jeF8ke2plbWFsbG9jX3ZlcnNpb25fZ2lkfSBuYWxs b2N4IHBvc2l4X21lbWFsaWduIHJhbGxvY3ggcmVhbGxvYyBzYWxsb2N4IHNkYWxsb2N4IHhhbGxv Y3giCi1kbmwgQ2hlY2sgZm9yIGFkZGl0aW9uYWwgcGxhdGZvcm0tc3BlY2lmaWMgcHVibGljIEFQ SSBmdW5jdGlvbnMuCi1BQ19DSEVDS19GVU5DKFttZW1hbGlnbl0sCi0JICAgICAgW0FDX0RFRklO RShbSkVNQUxMT0NfT1ZFUlJJREVfTUVNQUxJR05dLCBbIF0sIFsgXSkKLQkgICAgICAgcHVibGlj X3N5bXM9IiR7cHVibGljX3N5bXN9IG1lbWFsaWduIl0pCi1BQ19DSEVDS19GVU5DKFt2YWxsb2Nd LAotCSAgICAgIFtBQ19ERUZJTkUoW0pFTUFMTE9DX09WRVJSSURFX1ZBTExPQ10sIFsgXSwgWyBd KQotCSAgICAgICBwdWJsaWNfc3ltcz0iJHtwdWJsaWNfc3ltc30gdmFsbG9jIl0pCi1BQ19DSEVD S19GVU5DKFttYWxsb2Nfc2l6ZV0sCi0JICAgICAgW0FDX0RFRklORShbSkVNQUxMT0NfSEFWRV9N QUxMT0NfU0laRV0sIFsgXSwgWyBdKQotCSAgICAgICBwdWJsaWNfc3ltcz0iJHtwdWJsaWNfc3lt c30gbWFsbG9jX3NpemUiXSkKLQotZG5sIENoZWNrIGZvciBhbGxvY2F0b3ItcmVsYXRlZCBmdW5j dGlvbnMgdGhhdCBzaG91bGQgYmUgd3JhcHBlZC4KLXdyYXBfc3ltcz0KLWlmIHRlc3QgIngke0pF TUFMTE9DX1BSRUZJWH0iID0gIngiIDsgdGhlbgotICBBQ19DSEVDS19GVU5DKFtfX2xpYmNfY2Fs bG9jXSwKLQkJW0FDX0RFRklORShbSkVNQUxMT0NfT1ZFUlJJREVfX19MSUJDX0NBTExPQ10sIFsg XSwgWyBdKQotCQkgd3JhcF9zeW1zPSIke3dyYXBfc3ltc30gX19saWJjX2NhbGxvYyJdKQotICBB Q19DSEVDS19GVU5DKFtfX2xpYmNfZnJlZV0sCi0JCVtBQ19ERUZJTkUoW0pFTUFMTE9DX09WRVJS SURFX19fTElCQ19GUkVFXSwgWyBdLCBbIF0pCi0JCSB3cmFwX3N5bXM9IiR7d3JhcF9zeW1zfSBf X2xpYmNfZnJlZSJdKQotICBBQ19DSEVDS19GVU5DKFtfX2xpYmNfbWFsbG9jXSwKLQkJW0FDX0RF RklORShbSkVNQUxMT0NfT1ZFUlJJREVfX19MSUJDX01BTExPQ10sIFsgXSwgWyBdKQotCQkgd3Jh cF9zeW1zPSIke3dyYXBfc3ltc30gX19saWJjX21hbGxvYyJdKQotICBBQ19DSEVDS19GVU5DKFtf X2xpYmNfbWVtYWxpZ25dLAotCQlbQUNfREVGSU5FKFtKRU1BTExPQ19PVkVSUklERV9fX0xJQkNf TUVNQUxJR05dLCBbIF0sIFsgXSkKLQkJIHdyYXBfc3ltcz0iJHt3cmFwX3N5bXN9IF9fbGliY19t ZW1hbGlnbiJdKQotICBBQ19DSEVDS19GVU5DKFtfX2xpYmNfcmVhbGxvY10sCi0JCVtBQ19ERUZJ TkUoW0pFTUFMTE9DX09WRVJSSURFX19fTElCQ19SRUFMTE9DXSwgWyBdLCBbIF0pCi0JCSB3cmFw X3N5bXM9IiR7d3JhcF9zeW1zfSBfX2xpYmNfcmVhbGxvYyJdKQotICBBQ19DSEVDS19GVU5DKFtf X2xpYmNfdmFsbG9jXSwKLQkJW0FDX0RFRklORShbSkVNQUxMT0NfT1ZFUlJJREVfX19MSUJDX1ZB TExPQ10sIFsgXSwgWyBdKQotCQkgd3JhcF9zeW1zPSIke3dyYXBfc3ltc30gX19saWJjX3ZhbGxv YyJdKQotICBBQ19DSEVDS19GVU5DKFtfX3Bvc2l4X21lbWFsaWduXSwKLQkJW0FDX0RFRklORShb SkVNQUxMT0NfT1ZFUlJJREVfX19QT1NJWF9NRU1BTElHTl0sIFsgXSwgWyBdKQotCQkgd3JhcF9z eW1zPSIke3dyYXBfc3ltc30gX19wb3NpeF9tZW1hbGlnbiJdKQotZmkKLQotY2FzZSAiJHtob3N0 fSIgaW4KLSAgKi0qLW1pbmd3KiB8ICotKi1jeWd3aW4qKQotICAgIHdyYXBfc3ltcz0iJHt3cmFw X3N5bXN9IHRsc19jYWxsYmFjayIKLSAgICA7OwotICAqKQotICAgIDs7Ci1lc2FjCi0KLWRubCBN YW5nbGUgbGlicmFyeS1wcml2YXRlIEFQSXMuCi1BQ19BUkdfV0lUSChbcHJpdmF0ZV9uYW1lc3Bh Y2VdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wcml2YXRlLW5hbWVzcGFjZT08cHJlZml4 Pl0sIFtQcmVmaXggdG8gcHJlcGVuZCB0byBhbGwgbGlicmFyeS1wcml2YXRlIEFQSXNdKV0sCi0g IFtKRU1BTExPQ19QUklWQVRFX05BTUVTUEFDRT0iJHt3aXRoX3ByaXZhdGVfbmFtZXNwYWNlfWpl XyJdLAotICBbSkVNQUxMT0NfUFJJVkFURV9OQU1FU1BBQ0U9ImplXyJdCi0pCi1BQ19ERUZJTkVf VU5RVU9URUQoW0pFTUFMTE9DX1BSSVZBVEVfTkFNRVNQQUNFXSwgWyRKRU1BTExPQ19QUklWQVRF X05BTUVTUEFDRV0sIFsgXSkKLXByaXZhdGVfbmFtZXNwYWNlPSIkSkVNQUxMT0NfUFJJVkFURV9O QU1FU1BBQ0UiCi1BQ19TVUJTVChbcHJpdmF0ZV9uYW1lc3BhY2VdKQotCi1kbmwgRG8gbm90IGFk ZCBzdWZmaXggdG8gaW5zdGFsbGVkIGZpbGVzIGJ5IGRlZmF1bHQuCi1BQ19BUkdfV0lUSChbaW5z dGFsbF9zdWZmaXhdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1pbnN0YWxsLXN1ZmZpeD08 c3VmZml4Pl0sIFtTdWZmaXggdG8gYXBwZW5kIHRvIGFsbCBpbnN0YWxsZWQgZmlsZXNdKV0sCi0g IFtjYXNlICIkd2l0aF9pbnN0YWxsX3N1ZmZpeCIgaW4KLSAgICpcICogKSBBQ19NU0dfRVJST1Io W0luc3RhbGwgc3VmZml4IHNob3VsZCBub3QgY29udGFpbiBzcGFjZXNdKSA7OwotICAgKiApIElO U1RBTExfU1VGRklYPSIkd2l0aF9pbnN0YWxsX3N1ZmZpeCIgOzsKLWVzYWNdLAotICBbSU5TVEFM TF9TVUZGSVg9XQotKQotaW5zdGFsbF9zdWZmaXg9IiRJTlNUQUxMX1NVRkZJWCIKLUFDX1NVQlNU KFtpbnN0YWxsX3N1ZmZpeF0pCi0KLWRubCBTcGVjaWZ5IGRlZmF1bHQgbWFsbG9jX2NvbmYuCi1B Q19BUkdfV0lUSChbbWFsbG9jX2NvbmZdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1tYWxs b2MtY29uZj08bWFsbG9jX2NvbmY+XSwgW2NvbmZpZy5tYWxsb2NfY29uZiBvcHRpb25zIHN0cmlu Z10pXSwKLSAgW0pFTUFMTE9DX0NPTkZJR19NQUxMT0NfQ09ORj0iJHdpdGhfbWFsbG9jX2NvbmYi XSwKLSAgW0pFTUFMTE9DX0NPTkZJR19NQUxMT0NfQ09ORj0iIl0KLSkKLWNvbmZpZ19tYWxsb2Nf Y29uZj0iJEpFTUFMTE9DX0NPTkZJR19NQUxMT0NfQ09ORiIKLUFDX0RFRklORV9VTlFVT1RFRChb SkVNQUxMT0NfQ09ORklHX01BTExPQ19DT05GXSwgWyIkY29uZmlnX21hbGxvY19jb25mIl0sIFsg XSkKLQotZG5sIFN1YnN0aXR1dGUgQGplX0AgaW4gamVtYWxsb2NfcHJvdG9zLmguaW4sIHByaW1h cmlseSB0byBtYWtlIGdlbmVyYXRpb24gb2YKLWRubCBqZW1hbGxvY19wcm90b3NfamV0LmggZWFz eS4KLWplXz0iamVfIgotQUNfU1VCU1QoW2plX10pCi0KLWNmZ291dHB1dHNfaW49Ik1ha2VmaWxl LmluIgotY2Znb3V0cHV0c19pbj0iJHtjZmdvdXRwdXRzX2lufSBqZW1hbGxvYy5wYy5pbiIKLWNm Z291dHB1dHNfaW49IiR7Y2Znb3V0cHV0c19pbn0gZG9jL2h0bWwueHNsLmluIgotY2Znb3V0cHV0 c19pbj0iJHtjZmdvdXRwdXRzX2lufSBkb2MvbWFucGFnZXMueHNsLmluIgotY2Znb3V0cHV0c19p bj0iJHtjZmdvdXRwdXRzX2lufSBkb2MvamVtYWxsb2MueG1sLmluIgotY2Znb3V0cHV0c19pbj0i JHtjZmdvdXRwdXRzX2lufSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21hY3Jvcy5oLmluIgot Y2Znb3V0cHV0c19pbj0iJHtjZmdvdXRwdXRzX2lufSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9j X3Byb3Rvcy5oLmluIgotY2Znb3V0cHV0c19pbj0iJHtjZmdvdXRwdXRzX2lufSBpbmNsdWRlL2pl bWFsbG9jL2plbWFsbG9jX3R5cGVkZWZzLmguaW4iCi1jZmdvdXRwdXRzX2luPSIke2NmZ291dHB1 dHNfaW59IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaC5pbiIK LWNmZ291dHB1dHNfaW49IiR7Y2Znb3V0cHV0c19pbn0gdGVzdC90ZXN0LnNoLmluIgotY2Znb3V0 cHV0c19pbj0iJHtjZmdvdXRwdXRzX2lufSB0ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0 LmguaW4iCi0KLWNmZ291dHB1dHNfb3V0PSJNYWtlZmlsZSIKLWNmZ291dHB1dHNfb3V0PSIke2Nm Z291dHB1dHNfb3V0fSBqZW1hbGxvYy5wYyIKLWNmZ291dHB1dHNfb3V0PSIke2NmZ291dHB1dHNf b3V0fSBkb2MvaHRtbC54c2wiCi1jZmdvdXRwdXRzX291dD0iJHtjZmdvdXRwdXRzX291dH0gZG9j L21hbnBhZ2VzLnhzbCIKLWNmZ291dHB1dHNfb3V0PSIke2NmZ291dHB1dHNfb3V0fSBkb2MvamVt YWxsb2MueG1sIgotY2Znb3V0cHV0c19vdXQ9IiR7Y2Znb3V0cHV0c19vdXR9IGluY2x1ZGUvamVt YWxsb2MvamVtYWxsb2NfbWFjcm9zLmgiCi1jZmdvdXRwdXRzX291dD0iJHtjZmdvdXRwdXRzX291 dH0gaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90b3MuaCIKLWNmZ291dHB1dHNfb3V0PSIk e2NmZ291dHB1dHNfb3V0fSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3R5cGVkZWZzLmgiCi1j ZmdvdXRwdXRzX291dD0iJHtjZmdvdXRwdXRzX291dH0gaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9qZW1hbGxvY19wcmVhbWJsZS5oIgotY2Znb3V0cHV0c19vdXQ9IiR7Y2Znb3V0cHV0c19vdXR9 IHRlc3QvdGVzdC5zaCIKLWNmZ291dHB1dHNfb3V0PSIke2NmZ291dHB1dHNfb3V0fSB0ZXN0L2lu Y2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLWNmZ291dHB1dHNfdHVwPSJNYWtlZmlsZSIK LWNmZ291dHB1dHNfdHVwPSIke2NmZ291dHB1dHNfdHVwfSBqZW1hbGxvYy5wYzpqZW1hbGxvYy5w Yy5pbiIKLWNmZ291dHB1dHNfdHVwPSIke2NmZ291dHB1dHNfdHVwfSBkb2MvaHRtbC54c2w6ZG9j L2h0bWwueHNsLmluIgotY2Znb3V0cHV0c190dXA9IiR7Y2Znb3V0cHV0c190dXB9IGRvYy9tYW5w YWdlcy54c2w6ZG9jL21hbnBhZ2VzLnhzbC5pbiIKLWNmZ291dHB1dHNfdHVwPSIke2NmZ291dHB1 dHNfdHVwfSBkb2MvamVtYWxsb2MueG1sOmRvYy9qZW1hbGxvYy54bWwuaW4iCi1jZmdvdXRwdXRz X3R1cD0iJHtjZmdvdXRwdXRzX3R1cH0gaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19tYWNyb3Mu aDppbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21hY3Jvcy5oLmluIgotY2Znb3V0cHV0c190dXA9 IiR7Y2Znb3V0cHV0c190dXB9IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcHJvdG9zLmg6aW5j bHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90b3MuaC5pbiIKLWNmZ291dHB1dHNfdHVwPSIke2Nm Z291dHB1dHNfdHVwfSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3R5cGVkZWZzLmg6aW5jbHVk ZS9qZW1hbGxvYy9qZW1hbGxvY190eXBlZGVmcy5oLmluIgotY2Znb3V0cHV0c190dXA9IiR7Y2Zn b3V0cHV0c190dXB9IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUu aCIKLWNmZ291dHB1dHNfdHVwPSIke2NmZ291dHB1dHNfdHVwfSB0ZXN0L3Rlc3Quc2g6dGVzdC90 ZXN0LnNoLmluIgotY2Znb3V0cHV0c190dXA9IiR7Y2Znb3V0cHV0c190dXB9IHRlc3QvaW5jbHVk ZS90ZXN0L2plbWFsbG9jX3Rlc3QuaDp0ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0Lmgu aW4iCi0KLWNmZ2hkcnNfaW49ImluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfZGVmcy5oLmluIgot Y2ZnaGRyc19pbj0iJHtjZmdoZHJzX2lufSBpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFs bG9jX2ludGVybmFsX2RlZnMuaC5pbiIKLWNmZ2hkcnNfaW49IiR7Y2ZnaGRyc19pbn0gaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHMuc2giCi1jZmdoZHJzX2luPSIke2Nm Z2hkcnNfaW59IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9uYW1lc3BhY2Uuc2gi Ci1jZmdoZHJzX2luPSIke2NmZ2hkcnNfaW59IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVi bGljX25hbWVzcGFjZS5zaCIKLWNmZ2hkcnNfaW49IiR7Y2ZnaGRyc19pbn0gaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9wdWJsaWNfdW5uYW1lc3BhY2Uuc2giCi1jZmdoZHJzX2luPSIke2NmZ2hk cnNfaW59IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcmVuYW1lLnNoIgotY2ZnaGRyc19pbj0i JHtjZmdoZHJzX2lufSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21hbmdsZS5zaCIKLWNmZ2hk cnNfaW49IiR7Y2ZnaGRyc19pbn0gaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvYy5zaCIKLWNmZ2hk cnNfaW49IiR7Y2ZnaGRyc19pbn0gdGVzdC9pbmNsdWRlL3Rlc3QvamVtYWxsb2NfdGVzdF9kZWZz LmguaW4iCi0KLWNmZ2hkcnNfb3V0PSJpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX2RlZnMuaCIK LWNmZ2hkcnNfb3V0PSIke2NmZ2hkcnNfb3V0fSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jJHtp bnN0YWxsX3N1ZmZpeH0uaCIKLWNmZ2hkcnNfb3V0PSIke2NmZ2hkcnNfb3V0fSBpbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9scy5hd2siCi1jZmdoZHJzX291dD0iJHtjZmdo ZHJzX291dH0gaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHNfamV0LmF3 ayIKLWNmZ2hkcnNfb3V0PSIke2NmZ2hkcnNfb3V0fSBpbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3B1YmxpY19zeW1ib2xzLnR4dCIKLWNmZ2hkcnNfb3V0PSIke2NmZ2hkcnNfb3V0fSBpbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL3B1YmxpY19uYW1lc3BhY2UuaCIKLWNmZ2hkcnNfb3V0PSIke2Nm Z2hkcnNfb3V0fSBpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3B1YmxpY191bm5hbWVzcGFjZS5o IgotY2ZnaGRyc19vdXQ9IiR7Y2ZnaGRyc19vdXR9IGluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2Nf cHJvdG9zX2pldC5oIgotY2ZnaGRyc19vdXQ9IiR7Y2ZnaGRyc19vdXR9IGluY2x1ZGUvamVtYWxs b2MvamVtYWxsb2NfcmVuYW1lLmgiCi1jZmdoZHJzX291dD0iJHtjZmdoZHJzX291dH0gaW5jbHVk ZS9qZW1hbGxvYy9qZW1hbGxvY19tYW5nbGUuaCIKLWNmZ2hkcnNfb3V0PSIke2NmZ2hkcnNfb3V0 fSBpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21hbmdsZV9qZXQuaCIKLWNmZ2hkcnNfb3V0PSIk e2NmZ2hkcnNfb3V0fSBpbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFs X2RlZnMuaCIKLWNmZ2hkcnNfb3V0PSIke2NmZ2hkcnNfb3V0fSB0ZXN0L2luY2x1ZGUvdGVzdC9q ZW1hbGxvY190ZXN0X2RlZnMuaCIKLQotY2ZnaGRyc190dXA9ImluY2x1ZGUvamVtYWxsb2MvamVt YWxsb2NfZGVmcy5oOmluY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfZGVmcy5oLmluIgotY2ZnaGRy c190dXA9IiR7Y2ZnaGRyc190dXB9IGluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2Nf aW50ZXJuYWxfZGVmcy5oOmluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfZGVmcy5oLmluIgotY2ZnaGRyc190dXA9IiR7Y2ZnaGRyc190dXB9IHRlc3QvaW5jbHVkZS90 ZXN0L2plbWFsbG9jX3Rlc3RfZGVmcy5oOnRlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9jX3Rlc3Rf ZGVmcy5oLmluIgotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIGplbWFsbG9jIGJ1aWxk IG9wdGlvbnMuCi1kbmwKLQotZG5sIERvIG5vdCBjb21waWxlIHdpdGggZGVidWdnaW5nIGJ5IGRl ZmF1bHQuCi1BQ19BUkdfRU5BQkxFKFtkZWJ1Z10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFi bGUtZGVidWddLAotICAgICAgICAgICAgICAgICAgW0J1aWxkIGRlYnVnZ2luZyBjb2RlXSldLAot W2lmIHRlc3QgIngkZW5hYmxlX2RlYnVnIiA9ICJ4bm8iIDsgdGhlbgotICBlbmFibGVfZGVidWc9 IjAiCi1lbHNlCi0gIGVuYWJsZV9kZWJ1Zz0iMSIKLWZpCi1dLAotW2VuYWJsZV9kZWJ1Zz0iMCJd Ci0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kZWJ1ZyIgPSAieDEiIDsgdGhlbgotICBBQ19ERUZJTkUo W0pFTUFMTE9DX0RFQlVHXSwgWyBdLCBbIF0pCi1maQotQUNfU1VCU1QoW2VuYWJsZV9kZWJ1Z10p Ci0KLWRubCBPbmx5IG9wdGltaXplIGlmIG5vdCBkZWJ1Z2dpbmcuCi1pZiB0ZXN0ICJ4JGVuYWJs ZV9kZWJ1ZyIgPSAieDAiIDsgdGhlbgotICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgOyB0aGVu Ci0gICAgSkVfQ0ZMQUdTX0FERChbLU8zXSkKLSAgICBKRV9DWFhGTEFHU19BREQoWy1PM10pCi0g ICAgSkVfQ0ZMQUdTX0FERChbLWZ1bnJvbGwtbG9vcHNdKQotICBlbGlmIHRlc3QgIngkamVfY3Zf bXN2YyIgPSAieHllcyIgOyB0aGVuCi0gICAgSkVfQ0ZMQUdTX0FERChbLU8yXSkKLSAgICBKRV9D WFhGTEFHU19BREQoWy1PMl0pCi0gIGVsc2UKLSAgICBKRV9DRkxBR1NfQUREKFstT10pCi0gICAg SkVfQ1hYRkxBR1NfQUREKFstT10pCi0gIGZpCi1maQotCi1kbmwgRW5hYmxlIHN0YXRpc3RpY3Mg Y2FsY3VsYXRpb24gYnkgZGVmYXVsdC4KLUFDX0FSR19FTkFCTEUoW3N0YXRzXSwKLSAgW0FTX0hF TFBfU1RSSU5HKFstLWRpc2FibGUtc3RhdHNdLAotICAgICAgICAgICAgICAgICAgW0Rpc2FibGUg c3RhdGlzdGljcyBjYWxjdWxhdGlvbi9yZXBvcnRpbmddKV0sCi1baWYgdGVzdCAieCRlbmFibGVf c3RhdHMiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9zdGF0cz0iMCIKLWVsc2UKLSAgZW5hYmxl X3N0YXRzPSIxIgotZmkKLV0sCi1bZW5hYmxlX3N0YXRzPSIxIl0KLSkKLWlmIHRlc3QgIngkZW5h YmxlX3N0YXRzIiA9ICJ4MSIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0NfU1RBVFNdLCBb IF0sIFsgXSkKLWZpCi1BQ19TVUJTVChbZW5hYmxlX3N0YXRzXSkKLQotZG5sIERvIG5vdCBlbmFi bGUgc21hbGxvY3ggYnkgZGVmYXVsdC4KLUFDX0FSR19FTkFCTEUoW2V4cGVyaW1lbnRhbF9zbWFs bG9jeF0sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZXhwZXJpbWVudGFsLXNtYWxsb2N4 XSwgW0VuYWJsZSBleHBlcmltZW50YWwgc21hbGxvY3ggQVBJXSldLAotW2lmIHRlc3QgIngkZW5h YmxlX2V4cGVyaW1lbnRhbF9zbWFsbG9jeCIgPSAieG5vIiA7IHRoZW4KLWVuYWJsZV9leHBlcmlt ZW50YWxfc21hbGxvY3g9IjAiCi1lbHNlCi1lbmFibGVfZXhwZXJpbWVudGFsX3NtYWxsb2N4PSIx IgotZmkKLV0sCi1bZW5hYmxlX2V4cGVyaW1lbnRhbF9zbWFsbG9jeD0iMCJdCi0pCi1pZiB0ZXN0 ICJ4JGVuYWJsZV9leHBlcmltZW50YWxfc21hbGxvY3giID0gIngxIiA7IHRoZW4KLSAgQUNfREVG SU5FKFtKRU1BTExPQ19FWFBFUklNRU5UQUxfU01BTExPQ1hfQVBJXSwgWyBdLCBbIF0pCi1maQot QUNfU1VCU1QoW2VuYWJsZV9leHBlcmltZW50YWxfc21hbGxvY3hdKQotCi1kbmwgRG8gbm90IGVu YWJsZSBwcm9maWxpbmcgYnkgZGVmYXVsdC4KLUFDX0FSR19FTkFCTEUoW3Byb2ZdLAotICBbQVNf SEVMUF9TVFJJTkcoWy0tZW5hYmxlLXByb2ZdLCBbRW5hYmxlIGFsbG9jYXRpb24gcHJvZmlsaW5n XSldLAotW2lmIHRlc3QgIngkZW5hYmxlX3Byb2YiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9w cm9mPSIwIgotZWxzZQotICBlbmFibGVfcHJvZj0iMSIKLWZpCi1dLAotW2VuYWJsZV9wcm9mPSIw Il0KLSkKLWlmIHRlc3QgIngkZW5hYmxlX3Byb2YiID0gIngxIiA7IHRoZW4KLSAgYmFja3RyYWNl X21ldGhvZD0iIgotZWxzZQotICBiYWNrdHJhY2VfbWV0aG9kPSJOL0EiCi1maQotCi1BQ19BUkdf RU5BQkxFKFtwcm9mLWxpYnVud2luZF0sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcHJv Zi1saWJ1bndpbmRdLCBbVXNlIGxpYnVud2luZCBmb3IgYmFja3RyYWNpbmddKV0sCi1baWYgdGVz dCAieCRlbmFibGVfcHJvZl9saWJ1bndpbmQiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9wcm9m X2xpYnVud2luZD0iMCIKLWVsc2UKLSAgZW5hYmxlX3Byb2ZfbGlidW53aW5kPSIxIgotICBpZiB0 ZXN0ICJ4JGVuYWJsZV9wcm9mIiA9ICJ4MCIgOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFstLWVu YWJsZS1wcm9mLWxpYnVud2luZCBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggLS1lbmFibGUtcHJv Zl0pCi0gIGZpCi1maQotXSwKLVtlbmFibGVfcHJvZl9saWJ1bndpbmQ9IjAiXQotKQotQUNfQVJH X1dJVEgoW3N0YXRpY19saWJ1bndpbmRdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zdGF0 aWMtbGlidW53aW5kPTxsaWJ1bndpbmQuYT5dLAotICBbUGF0aCB0byBzdGF0aWMgbGlidW53aW5k IGxpYnJhcnk7IHVzZSByYXRoZXIgdGhhbiBkeW5hbWljYWxseSBsaW5raW5nXSldLAotaWYgdGVz dCAieCR3aXRoX3N0YXRpY19saWJ1bndpbmQiID0gInhubyIgOyB0aGVuCi0gIExVTldJTkQ9Ii1s dW53aW5kIgotZWxzZQotICBpZiB0ZXN0ICEgLWYgIiR3aXRoX3N0YXRpY19saWJ1bndpbmQiIDsg dGhlbgotICAgIEFDX01TR19FUlJPUihbU3RhdGljIGxpYnVud2luZCBub3QgZm91bmQ6ICR3aXRo X3N0YXRpY19saWJ1bndpbmRdKQotICBmaQotICBMVU5XSU5EPSIkd2l0aF9zdGF0aWNfbGlidW53 aW5kIgotZmksCi0gIExVTldJTkQ9Ii1sdW53aW5kIgotKQotaWYgdGVzdCAieCRiYWNrdHJhY2Vf bWV0aG9kIiA9ICJ4IiAtYSAieCRlbmFibGVfcHJvZl9saWJ1bndpbmQiID0gIngxIiA7IHRoZW4K LSAgQUNfQ0hFQ0tfSEVBREVSUyhbbGlidW53aW5kLmhdLCAsIFtlbmFibGVfcHJvZl9saWJ1bndp bmQ9IjAiXSkKLSAgaWYgdGVzdCAieCRMVU5XSU5EIiA9ICJ4LWx1bndpbmQiIDsgdGhlbgotICAg IEFDX0NIRUNLX0xJQihbdW53aW5kXSwgW3Vud19iYWNrdHJhY2VdLCBbSkVfQVBQRU5EX1ZTKExJ QlMsICRMVU5XSU5EKV0sCi0gICAgICAgICAgICAgICAgIFtlbmFibGVfcHJvZl9saWJ1bndpbmQ9 IjAiXSkKLSAgZWxzZQotICAgIEpFX0FQUEVORF9WUyhMSUJTLCAkTFVOV0lORCkKLSAgZmkKLSAg aWYgdGVzdCAieCR7ZW5hYmxlX3Byb2ZfbGlidW53aW5kfSIgPSAieDEiIDsgdGhlbgotICAgIGJh Y2t0cmFjZV9tZXRob2Q9ImxpYnVud2luZCIKLSAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX1BST0Zf TElCVU5XSU5EXSwgWyBdLCBbIF0pCi0gIGZpCi1maQotCi1BQ19BUkdfRU5BQkxFKFtwcm9mLWxp YmdjY10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXByb2YtbGliZ2NjXSwKLSAgW0Rv IG5vdCB1c2UgbGliZ2NjIGZvciBiYWNrdHJhY2luZ10pXSwKLVtpZiB0ZXN0ICJ4JGVuYWJsZV9w cm9mX2xpYmdjYyIgPSAieG5vIiA7IHRoZW4KLSAgZW5hYmxlX3Byb2ZfbGliZ2NjPSIwIgotZWxz ZQotICBlbmFibGVfcHJvZl9saWJnY2M9IjEiCi1maQotXSwKLVtlbmFibGVfcHJvZl9saWJnY2M9 IjEiXQotKQotaWYgdGVzdCAieCRiYWNrdHJhY2VfbWV0aG9kIiA9ICJ4IiAtYSAieCRlbmFibGVf cHJvZl9saWJnY2MiID0gIngxIiBcCi0gICAgIC1hICJ4JEdDQyIgPSAieHllcyIgOyB0aGVuCi0g IEFDX0NIRUNLX0hFQURFUlMoW3Vud2luZC5oXSwgLCBbZW5hYmxlX3Byb2ZfbGliZ2NjPSIwIl0p Ci0gIGlmIHRlc3QgIngke2VuYWJsZV9wcm9mX2xpYmdjY30iID0gIngxIiA7IHRoZW4KLSAgICBB Q19DSEVDS19MSUIoW2djY10sIFtfVW53aW5kX0JhY2t0cmFjZV0sIFtKRV9BUFBFTkRfVlMoTElC UywgLWxnY2MpXSwgW2VuYWJsZV9wcm9mX2xpYmdjYz0iMCJdKQotICBmaQotICBpZiB0ZXN0ICJ4 JHtlbmFibGVfcHJvZl9saWJnY2N9IiA9ICJ4MSIgOyB0aGVuCi0gICAgYmFja3RyYWNlX21ldGhv ZD0ibGliZ2NjIgotICAgIEFDX0RFRklORShbSkVNQUxMT0NfUFJPRl9MSUJHQ0NdLCBbIF0sIFsg XSkKLSAgZmkKLWVsc2UKLSAgZW5hYmxlX3Byb2ZfbGliZ2NjPSIwIgotZmkKLQotQUNfQVJHX0VO QUJMRShbcHJvZi1nY2NdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1wcm9mLWdjY10s Ci0gIFtEbyBub3QgdXNlIGdjYyBpbnRyaW5zaWNzIGZvciBiYWNrdHJhY2luZ10pXSwKLVtpZiB0 ZXN0ICJ4JGVuYWJsZV9wcm9mX2djYyIgPSAieG5vIiA7IHRoZW4KLSAgZW5hYmxlX3Byb2ZfZ2Nj PSIwIgotZWxzZQotICBlbmFibGVfcHJvZl9nY2M9IjEiCi1maQotXSwKLVtlbmFibGVfcHJvZl9n Y2M9IjEiXQotKQotaWYgdGVzdCAieCRiYWNrdHJhY2VfbWV0aG9kIiA9ICJ4IiAtYSAieCRlbmFi bGVfcHJvZl9nY2MiID0gIngxIiBcCi0gICAgIC1hICJ4JEdDQyIgPSAieHllcyIgOyB0aGVuCi0g IEpFX0NGTEFHU19BREQoWy1mbm8tb21pdC1mcmFtZS1wb2ludGVyXSkKLSAgYmFja3RyYWNlX21l dGhvZD0iZ2NjIGludHJpbnNpY3MiCi0gIEFDX0RFRklORShbSkVNQUxMT0NfUFJPRl9HQ0NdLCBb IF0sIFsgXSkKLWVsc2UKLSAgZW5hYmxlX3Byb2ZfZ2NjPSIwIgotZmkKLQotaWYgdGVzdCAieCRi YWNrdHJhY2VfbWV0aG9kIiA9ICJ4IiA7IHRoZW4KLSAgYmFja3RyYWNlX21ldGhvZD0ibm9uZSAo ZGlzYWJsaW5nIHByb2ZpbGluZykiCi0gIGVuYWJsZV9wcm9mPSIwIgotZmkKLUFDX01TR19DSEVD S0lORyhbY29uZmlndXJlZCBiYWNrdHJhY2luZyBtZXRob2RdKQotQUNfTVNHX1JFU1VMVChbJGJh Y2t0cmFjZV9tZXRob2RdKQotaWYgdGVzdCAieCRlbmFibGVfcHJvZiIgPSAieDEiIDsgdGhlbgot ICBkbmwgSGVhcCBwcm9maWxpbmcgdXNlcyB0aGUgbG9nKDMpIGZ1bmN0aW9uLgotICBKRV9BUFBF TkRfVlMoTElCUywgJExNKQotCi0gIEFDX0RFRklORShbSkVNQUxMT0NfUFJPRl0sIFsgXSwgWyBd KQotZmkKLUFDX1NVQlNUKFtlbmFibGVfcHJvZl0pCi0KLWRubCBJbmRpY2F0ZSB3aGV0aGVyIGFk amFjZW50IHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzIGF1dG9tYXRpY2FsbHkgY29hbGVzY2UKLWRu bCAoYW5kIGZyYWdtZW50IG9uIGRlbWFuZCkuCi1pZiB0ZXN0ICJ4JHttYXBzX2NvYWxlc2NlfSIg PSAieDEiIDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX01BUFNfQ09BTEVTQ0VdLCBbIF0s IFsgXSkKLWZpCi0KLWRubCBJbmRpY2F0ZSB3aGV0aGVyIHRvIHJldGFpbiBtZW1vcnkgKHJhdGhl ciB0aGFuIHVzaW5nIG11bm1hcCgpKSBieSBkZWZhdWx0LgotaWYgdGVzdCAieCRkZWZhdWx0X3Jl dGFpbiIgPSAieDEiIDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX1JFVEFJTl0sIFsgXSwg WyBdKQotZmkKLQotZG5sIEluZGljYXRlIHdoZXRoZXIgcmVhbGxvYyhwdHIsIDApIGRlZmF1bHRz IHRvIHRoZSAiYWxsb2MiIGJlaGF2aW9yLgotaWYgdGVzdCAieCR6ZXJvX3JlYWxsb2NfZGVmYXVs dF9mcmVlIiA9ICJ4MSIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0NfWkVST19SRUFMTE9D X0RFRkFVTFRfRlJFRV0sIFsgXSwgWyBdKQotZmkKLQotZG5sIEVuYWJsZSBhbGxvY2F0aW9uIGZy b20gRFNTIGlmIHN1cHBvcnRlZCBieSB0aGUgT1MuCi1oYXZlX2Rzcz0iMSIKLWRubCBDaGVjayB3 aGV0aGVyIHRoZSBCU0QvU1VTdjEgc2JyaygpIGV4aXN0cy4gIElmIG5vdCwgZGlzYWJsZSBEU1Mg c3VwcG9ydC4KLUFDX0NIRUNLX0ZVTkMoW3NicmtdLCBbaGF2ZV9zYnJrPSIxIl0sIFtoYXZlX3Ni cms9IjAiXSkKLWlmIHRlc3QgIngkaGF2ZV9zYnJrIiA9ICJ4MSIgOyB0aGVuCi0gIGlmIHRlc3Qg Ingkc2Jya19kZXByZWNhdGVkIiA9ICJ4MSIgOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChbRGlz YWJsaW5nIGRzcyBhbGxvY2F0aW9uIGJlY2F1c2Ugc2JyayBpcyBkZXByZWNhdGVkXSkKLSAgICBo YXZlX2Rzcz0iMCIKLSAgZmkKLWVsc2UKLSAgaGF2ZV9kc3M9IjAiCi1maQotCi1pZiB0ZXN0ICJ4 JGhhdmVfZHNzIiA9ICJ4MSIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0NfRFNTXSwgWyBd LCBbIF0pCi1maQotCi1kbmwgU3VwcG9ydCB0aGUganVuay96ZXJvIGZpbGxpbmcgb3B0aW9uIGJ5 IGRlZmF1bHQuCi1BQ19BUkdfRU5BQkxFKFtmaWxsXSwKLSAgW0FTX0hFTFBfU1RSSU5HKFstLWRp c2FibGUtZmlsbF0sIFtEaXNhYmxlIHN1cHBvcnQgZm9yIGp1bmsvemVybyBmaWxsaW5nXSldLAot W2lmIHRlc3QgIngkZW5hYmxlX2ZpbGwiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9maWxsPSIw IgotZWxzZQotICBlbmFibGVfZmlsbD0iMSIKLWZpCi1dLAotW2VuYWJsZV9maWxsPSIxIl0KLSkK LWlmIHRlc3QgIngkZW5hYmxlX2ZpbGwiID0gIngxIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1B TExPQ19GSUxMXSwgWyBdLCBbIF0pCi1maQotQUNfU1VCU1QoW2VuYWJsZV9maWxsXSkKLQotZG5s IERpc2FibGUgdXRyYWNlKDIpLWJhc2VkIHRyYWNpbmcgYnkgZGVmYXVsdC4KLUFDX0FSR19FTkFC TEUoW3V0cmFjZV0sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdXRyYWNlXSwgW0VuYWJs ZSB1dHJhY2UoMiktYmFzZWQgdHJhY2luZ10pXSwKLVtpZiB0ZXN0ICJ4JGVuYWJsZV91dHJhY2Ui ID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV91dHJhY2U9IjAiCi1lbHNlCi0gIGVuYWJsZV91dHJh Y2U9IjEiCi1maQotXSwKLVtlbmFibGVfdXRyYWNlPSIwIl0KLSkKLUpFX0NPTVBJTEFCTEUoW3V0 cmFjZSgyKV0sIFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0u aD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLSNpbmNsdWRl IDxzeXMva3RyYWNlLmg+Ci1dLCBbCi0JdXRyYWNlKCh2b2lkICopMCwgMCk7Ci1dLCBbamVfY3Zf dXRyYWNlXSkKLWlmIHRlc3QgIngke2plX2N2X3V0cmFjZX0iID0gInhubyIgOyB0aGVuCi0gIEpF X0NPTVBJTEFCTEUoW3V0cmFjZSgyKSB3aXRoIGxhYmVsXSwgWwotICAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+Ci0gICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSAgI2luY2x1ZGUgPHN5cy90aW1lLmg+ Ci0gICNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0gICNpbmNsdWRlIDxzeXMva3RyYWNlLmg+Ci0gIF0s IFsKLQkgIHV0cmFjZSgodm9pZCAqKTAsICh2b2lkICopMCwgMCk7Ci0gIF0sIFtqZV9jdl91dHJh Y2VfbGFiZWxdKQotICBpZiB0ZXN0ICJ4JHtqZV9jdl91dHJhY2VfbGFiZWx9IiA9ICJ4bm8iOyB0 aGVuCi0gICAgZW5hYmxlX3V0cmFjZT0iMCIKLSAgZmkKLSAgaWYgdGVzdCAieCRlbmFibGVfdXRy YWNlIiA9ICJ4MSIgOyB0aGVuCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19VVFJBQ0VfTEFCRUxd LCBbIF0sIFsgXSkKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAieCRlbmFibGVfdXRyYWNlIiA9ICJ4 MSIgOyB0aGVuCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19VVFJBQ0VdLCBbIF0sIFsgXSkKLSAg ZmkKLWZpCi1BQ19TVUJTVChbZW5hYmxlX3V0cmFjZV0pCi0KLWRubCBEbyBub3Qgc3VwcG9ydCB0 aGUgeG1hbGxvYyBvcHRpb24gYnkgZGVmYXVsdC4KLUFDX0FSR19FTkFCTEUoW3htYWxsb2NdLAot ICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXhtYWxsb2NdLCBbU3VwcG9ydCB4bWFsbG9jIG9w dGlvbl0pXSwKLVtpZiB0ZXN0ICJ4JGVuYWJsZV94bWFsbG9jIiA9ICJ4bm8iIDsgdGhlbgotICBl bmFibGVfeG1hbGxvYz0iMCIKLWVsc2UKLSAgZW5hYmxlX3htYWxsb2M9IjEiCi1maQotXSwKLVtl bmFibGVfeG1hbGxvYz0iMCJdCi0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV94bWFsbG9jIiA9ICJ4MSIg OyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0NfWE1BTExPQ10sIFsgXSwgWyBdKQotZmkKLUFD X1NVQlNUKFtlbmFibGVfeG1hbGxvY10pCi0KLWRubCBTdXBwb3J0IGNhY2hlLW9ibGl2aW91cyBh bGxvY2F0aW9uIGFsaWdubWVudCBieSBkZWZhdWx0LgotQUNfQVJHX0VOQUJMRShbY2FjaGUtb2Js aXZpb3VzXSwKLSAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtY2FjaGUtb2JsaXZpb3VzXSwK LSAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIHN1cHBvcnQgZm9yIGNhY2hlLW9ibGl2aW91cyBh bGxvY2F0aW9uIGFsaWdubWVudF0pXSwKLVtpZiB0ZXN0ICJ4JGVuYWJsZV9jYWNoZV9vYmxpdmlv dXMiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9jYWNoZV9vYmxpdmlvdXM9IjAiCi1lbHNlCi0g IGVuYWJsZV9jYWNoZV9vYmxpdmlvdXM9IjEiCi1maQotXSwKLVtlbmFibGVfY2FjaGVfb2JsaXZp b3VzPSIxIl0KLSkKLWlmIHRlc3QgIngkZW5hYmxlX2NhY2hlX29ibGl2aW91cyIgPSAieDEiIDsg dGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX0NBQ0hFX09CTElWSU9VU10sIFsgXSwgWyBdKQot ZmkKLUFDX1NVQlNUKFtlbmFibGVfY2FjaGVfb2JsaXZpb3VzXSkKLQotZG5sIERvIG5vdCBsb2cg YnkgZGVmYXVsdC4KLUFDX0FSR19FTkFCTEUoW2xvZ10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1l bmFibGUtbG9nXSwgW1N1cHBvcnQgZGVidWcgbG9nZ2luZ10pXSwKLVtpZiB0ZXN0ICJ4JGVuYWJs ZV9sb2ciID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9sb2c9IjAiCi1lbHNlCi0gIGVuYWJsZV9s b2c9IjEiCi1maQotXSwKLVtlbmFibGVfbG9nPSIwIl0KLSkKLWlmIHRlc3QgIngkZW5hYmxlX2xv ZyIgPSAieDEiIDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX0xPR10sIFsgXSwgWyBdKQot ZmkKLUFDX1NVQlNUKFtlbmFibGVfbG9nXSkKLQotZG5sIERvIG5vdCB1c2UgcmVhZGxpbmthdCBi eSBkZWZhdWx0Ci1BQ19BUkdfRU5BQkxFKFtyZWFkbGlua2F0XSwKLSAgW0FTX0hFTFBfU1RSSU5H KFstLWVuYWJsZS1yZWFkbGlua2F0XSwgW1VzZSByZWFkbGlua2F0IG92ZXIgcmVhZGxpbmtdKV0s Ci1baWYgdGVzdCAieCRlbmFibGVfcmVhZGxpbmthdCIgPSAieG5vIiA7IHRoZW4KLSAgZW5hYmxl X3JlYWRsaW5rYXQ9IjAiCi1lbHNlCi0gIGVuYWJsZV9yZWFkbGlua2F0PSIxIgotZmkKLV0sCi1b ZW5hYmxlX3JlYWRsaW5rYXQ9IjAiXQotKQotaWYgdGVzdCAieCRlbmFibGVfcmVhZGxpbmthdCIg PSAieDEiIDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX1JFQURMSU5LQVRdLCBbIF0sIFsg XSkKLWZpCi1BQ19TVUJTVChbZW5hYmxlX3JlYWRsaW5rYXRdKQotCi1kbmwgQXZvaWQgZXh0cmEg c2FmZXR5IGNoZWNrcyBieSBkZWZhdWx0Ci1BQ19BUkdfRU5BQkxFKFtvcHQtc2FmZXR5LWNoZWNr c10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtb3B0LXNhZmV0eS1jaGVja3NdLAotICBb UGVyZm9ybSBjZXJ0YWluIGxvdy1vdmVyaGVhZCBjaGVja3MsIGV2ZW4gaW4gb3B0IG1vZGVdKV0s Ci1baWYgdGVzdCAieCRlbmFibGVfb3B0X3NhZmV0eV9jaGVja3MiID0gInhubyIgOyB0aGVuCi0g IGVuYWJsZV9vcHRfc2FmZXR5X2NoZWNrcz0iMCIKLWVsc2UKLSAgZW5hYmxlX29wdF9zYWZldHlf Y2hlY2tzPSIxIgotZmkKLV0sCi1bZW5hYmxlX29wdF9zYWZldHlfY2hlY2tzPSIwIl0KLSkKLWlm IHRlc3QgIngkZW5hYmxlX29wdF9zYWZldHlfY2hlY2tzIiA9ICJ4MSIgOyB0aGVuCi0gIEFDX0RF RklORShbSkVNQUxMT0NfT1BUX1NBRkVUWV9DSEVDS1NdLCBbIF0sIFsgXSkKLWZpCi1BQ19TVUJT VChbZW5hYmxlX29wdF9zYWZldHlfY2hlY2tzXSkKLQotZG5sIExvb2sgZm9yIHNpemVkLWRlYWxs b2NhdGlvbiBidWdzIHdoaWxlIG90aGVyd2lzZSBiZWluZyBpbiBvcHQgbW9kZS4KLUFDX0FSR19F TkFCTEUoW29wdC1zaXplLWNoZWNrc10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtb3B0 LXNpemUtY2hlY2tzXSwKLSAgW1BlcmZvcm0gc2l6ZWQtZGVhbGxvY2F0aW9uIGFyZ3VtZW50IGNo ZWNrcywgZXZlbiBpbiBvcHQgbW9kZV0pXSwKLVtpZiB0ZXN0ICJ4JGVuYWJsZV9vcHRfc2l6ZV9j aGVja3MiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9vcHRfc2l6ZV9jaGVja3M9IjAiCi1lbHNl Ci0gIGVuYWJsZV9vcHRfc2l6ZV9jaGVja3M9IjEiCi1maQotXSwKLVtlbmFibGVfb3B0X3NpemVf Y2hlY2tzPSIwIl0KLSkKLWlmIHRlc3QgIngkZW5hYmxlX29wdF9zaXplX2NoZWNrcyIgPSAieDEi IDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX09QVF9TSVpFX0NIRUNLU10sIFsgXSwgWyBd KQotZmkKLUFDX1NVQlNUKFtlbmFibGVfb3B0X3NpemVfY2hlY2tzXSkKLQotZG5sIERvIG5vdCBj aGVjayBmb3IgdXNlLWFmdGVyLWZyZWUgYnkgZGVmYXVsdC4KLUFDX0FSR19FTkFCTEUoW3VhZi1k ZXRlY3Rpb25dLAotICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXVhZi1kZXRlY3Rpb25dLAot ICBbQWxsb3cgc2FtcGxlZCBqdW5rLWZpbGxpbmcgb24gZGVhbGxvY2F0aW9uIHRvIGRldGVjdCB1 c2UtYWZ0ZXItZnJlZV0pXSwKLVtpZiB0ZXN0ICJ4JGVuYWJsZV91YWZfZGV0ZWN0aW9uIiA9ICJ4 bm8iIDsgdGhlbgotICBlbmFibGVfdWFmX2RldGVjdGlvbj0iMCIKLWVsc2UKLSAgZW5hYmxlX3Vh Zl9kZXRlY3Rpb249IjEiCi1maQotXSwKLVtlbmFibGVfdWFmX2RldGVjdGlvbj0iMCJdCi0pCi1p ZiB0ZXN0ICJ4JGVuYWJsZV91YWZfZGV0ZWN0aW9uIiA9ICJ4MSIgOyB0aGVuCi0gIEFDX0RFRklO RShbSkVNQUxMT0NfVUFGX0RFVEVDVElPTl0sIFsgXSkKLWZpCi1BQ19TVUJTVChbZW5hYmxlX3Vh Zl9kZXRlY3Rpb25dKQotCi1KRV9DT01QSUxBQkxFKFthIHByb2dyYW0gdXNpbmcgX19idWlsdGlu X3VucmVhY2hhYmxlXSwgWwotdm9pZCBmb28gKHZvaWQpIHsKLSAgX19idWlsdGluX3VucmVhY2hh YmxlKCk7Ci19Ci1dLCBbCi0JewotCQlmb28oKTsKLQl9Ci1dLCBbamVfY3ZfZ2NjX2J1aWx0aW5f dW5yZWFjaGFibGVdKQotaWYgdGVzdCAieCR7amVfY3ZfZ2NjX2J1aWx0aW5fdW5yZWFjaGFibGV9 IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19JTlRFUk5BTF9VTlJFQUNI QUJMRV0sIFtfX2J1aWx0aW5fdW5yZWFjaGFibGVdLCBbIF0pCi1lbHNlCi0gIEFDX0RFRklORShb SkVNQUxMT0NfSU5URVJOQUxfVU5SRUFDSEFCTEVdLCBbYWJvcnRdLCBbIF0pCi1maQotCi1kbmwg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotZG5sIENoZWNrIGZvciAgX19idWlsdGluX2Zmc2woKSwgdGhl biBmZnNsKDMpLCBhbmQgZmFpbCBpZiBuZWl0aGVyIGFyZSBmb3VuZC4KLWRubCBPbmUgb2YgdGhv c2UgdHdvIGZ1bmN0aW9ucyBzaG91bGQgKHRoZW9yZXRpY2FsbHkpIGV4aXN0IG9uIGFsbCBwbGF0 Zm9ybXMKLWRubCB0aGF0IGplbWFsbG9jIGN1cnJlbnRseSBoYXMgYSBjaGFuY2Ugb2YgZnVuY3Rp b25pbmcgb24gd2l0aG91dCBtb2RpZmljYXRpb24uCi1kbmwgV2UgYWRkaXRpb25hbGx5IGFzc3Vt ZSBmZnNbbGxdKCkgb3IgX19idWlsdGluX2Zmc1tsbF0oKSBhcmUgZGVmaW5lZCBpZgotZG5sIGZm c2woKSBvciBfX2J1aWx0aW5fZmZzbCgpIGFyZSBkZWZpbmVkLCByZXNwZWN0aXZlbHkuCi1KRV9D T01QSUxBQkxFKFthIHByb2dyYW0gdXNpbmcgX19idWlsdGluX2Zmc2xdLCBbCi0jaW5jbHVkZSA8 c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci1dLCBb Ci0JewotCQlpbnQgcnYgPSBfX2J1aWx0aW5fZmZzbCgweDA4KTsKLQkJcHJpbnRmKCIlZFxuIiwg cnYpOwotCX0KLV0sIFtqZV9jdl9nY2NfYnVpbHRpbl9mZnNsXSkKLWlmIHRlc3QgIngke2plX2N2 X2djY19idWlsdGluX2Zmc2x9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExP Q19JTlRFUk5BTF9GRlNMTF0sIFtfX2J1aWx0aW5fZmZzbGxdLCBbIF0pCi0gIEFDX0RFRklORShb SkVNQUxMT0NfSU5URVJOQUxfRkZTTF0sIFtfX2J1aWx0aW5fZmZzbF0sIFsgXSkKLSAgQUNfREVG SU5FKFtKRU1BTExPQ19JTlRFUk5BTF9GRlNdLCBbX19idWlsdGluX2Zmc10sIFsgXSkKLWVsc2UK LSAgSkVfQ09NUElMQUJMRShbYSBwcm9ncmFtIHVzaW5nIGZmc2xdLCBbCi0gICNpbmNsdWRlIDxz dGRpby5oPgotICAjaW5jbHVkZSA8c3RyaW5ncy5oPgotICAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0g IF0sIFsKLQl7Ci0JCWludCBydiA9IGZmc2woMHgwOCk7Ci0JCXByaW50ZigiJWRcbiIsIHJ2KTsK LQl9Ci0gIF0sIFtqZV9jdl9mdW5jdGlvbl9mZnNsXSkKLSAgaWYgdGVzdCAieCR7amVfY3ZfZnVu Y3Rpb25fZmZzbH0iID0gInh5ZXMiIDsgdGhlbgotICAgIEFDX0RFRklORShbSkVNQUxMT0NfSU5U RVJOQUxfRkZTTExdLCBbZmZzbGxdLCBbIF0pCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19JTlRF Uk5BTF9GRlNMXSwgW2Zmc2xdLCBbIF0pCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19JTlRFUk5B TF9GRlNdLCBbZmZzXSwgWyBdKQotICBlbHNlCi0gICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgYnVp bGQgd2l0aG91dCBmZnNsKDMpIG9yIF9fYnVpbHRpbl9mZnNsKCldKQotICBmaQotZmkKLQotSkVf Q09NUElMQUJMRShbYSBwcm9ncmFtIHVzaW5nIF9fYnVpbHRpbl9wb3Bjb3VudGxdLCBbCi0jaW5j bHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+ Ci1dLCBbCi0JewotCQlpbnQgcnYgPSBfX2J1aWx0aW5fcG9wY291bnRsKDB4MDgpOwotCQlwcmlu dGYoIiVkXG4iLCBydik7Ci0JfQotXSwgW2plX2N2X2djY19idWlsdGluX3BvcGNvdW50bF0pCi1p ZiB0ZXN0ICJ4JHtqZV9jdl9nY2NfYnVpbHRpbl9wb3Bjb3VudGx9IiA9ICJ4eWVzIiA7IHRoZW4K LSAgQUNfREVGSU5FKFtKRU1BTExPQ19JTlRFUk5BTF9QT1BDT1VOVF0sIFtfX2J1aWx0aW5fcG9w Y291bnRdLCBbIF0pCi0gIEFDX0RFRklORShbSkVNQUxMT0NfSU5URVJOQUxfUE9QQ09VTlRMXSwg W19fYnVpbHRpbl9wb3Bjb3VudGxdLCBbIF0pCi0gIEFDX0RFRklORShbSkVNQUxMT0NfSU5URVJO QUxfUE9QQ09VTlRMTF0sIFtfX2J1aWx0aW5fcG9wY291bnRsbF0sIFsgXSkKLWZpCi0KLUFDX0FS R19XSVRIKFtsZ19xdWFudHVtXSwKLSAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGctcXVhbnR1 bT08bGctcXVhbnR1bT5dLAotICAgW0Jhc2UgMiBsb2cgb2YgbWluaW11bSBhbGxvY2F0aW9uIGFs aWdubWVudF0pXSkKLWlmIHRlc3QgIngkd2l0aF9sZ19xdWFudHVtIiAhPSAieCIgOyB0aGVuCi0g IEFDX0RFRklORV9VTlFVT1RFRChbTEdfUVVBTlRVTV0sIFskd2l0aF9sZ19xdWFudHVtXSwgWyBd KQotZmkKLQotQUNfQVJHX1dJVEgoW2xnX3NsYWJfbWF4cmVnc10sCi0gIFtBU19IRUxQX1NUUklO RyhbLS13aXRoLWxnLXNsYWItbWF4cmVncz08bGctc2xhYi1tYXhyZWdzPl0sCi0gICBbQmFzZSAy IGxvZyBvZiBtYXhpbXVtIG51bWJlciBvZiByZWdpb25zIGluIGEgc2xhYiAodXNlZCB3aXRoIG1h bGxvY19jb25mIHNsYWJfc2l6ZXMpXSldLAotICBbQ09ORklHX0xHX1NMQUJfTUFYUkVHUz0id2l0 aF9sZ19zbGFiX21heHJlZ3MiXSwKLSAgW0NPTkZJR19MR19TTEFCX01BWFJFR1M9IiJdKQotaWYg dGVzdCAieCR3aXRoX2xnX3NsYWJfbWF4cmVncyIgIT0gIngiIDsgdGhlbgotICBBQ19ERUZJTkVf VU5RVU9URUQoW0NPTkZJR19MR19TTEFCX01BWFJFR1NdLCBbJHdpdGhfbGdfc2xhYl9tYXhyZWdz XSwgWyBdKQotZmkKLQotQUNfQVJHX1dJVEgoW2xnX3BhZ2VdLAotICBbQVNfSEVMUF9TVFJJTkco Wy0td2l0aC1sZy1wYWdlPTxsZy1wYWdlPl0sIFtCYXNlIDIgbG9nIG9mIHN5c3RlbSBwYWdlIHNp emVdKV0sCi0gIFtMR19QQUdFPSIkd2l0aF9sZ19wYWdlIl0sIFtMR19QQUdFPSJkZXRlY3QiXSkK LWNhc2UgIiR7aG9zdH0iIGluCi0gIGFhcmNoNjQtYXBwbGUtZGFyd2luKikKLSAgICAgIGRubCBX aGVuIGNyb3NzLWNvbXBpbGUgZm9yIEFwcGxlIE0xIGFuZCBubyBwYWdlIHNpemUgc3BlY2lmaWVk LCB1c2UgdGhlCi0gICAgICBkbmwgZGVmYXVsdCBhbmQgc2tpcCBkZXRlY3RpbmcgdGhlIHBhZ2Ug c2l6ZSAod2hpY2ggaXMgbGlrZWx5IGluY29ycmVjdCkuCi0gICAgICBpZiB0ZXN0ICJ4JHtob3N0 fSIgIT0gIngke2J1aWxkfSIgLWEgIngkTEdfUEFHRSIgPSAieGRldGVjdCI7IHRoZW4KLSAgICAg ICAgTEdfUEFHRT0xNAotICAgICAgZmkKLSAgICAgIDs7Ci1lc2FjCi1pZiB0ZXN0ICJ4JExHX1BB R0UiID0gInhkZXRlY3QiOyB0aGVuCi0gIEFDX0NBQ0hFX0NIRUNLKFtMR19QQUdFXSwKLSAgICAg ICAgICAgICAgIFtqZV9jdl9sZ19wYWdlXSwKLSAgICAgICAgICAgICAgIEFDX1JVTl9JRkVMU0Uo W0FDX0xBTkdfUFJPR1JBTSgKLVtbCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2lmZGVmIF9XSU4z MgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5k aWYKLSNpbmNsdWRlIDxzdGRpby5oPgotXV0sCi1bWwotICAgIGludCByZXN1bHQ7Ci0gICAgRklM RSAqZjsKLQotI2lmZGVmIF9XSU4zMgotICAgIFNZU1RFTV9JTkZPIHNpOwotICAgIEdldFN5c3Rl bUluZm8oJnNpKTsKLSAgICByZXN1bHQgPSBzaS5kd1BhZ2VTaXplOwotI2Vsc2UKLSAgICByZXN1 bHQgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7Ci0jZW5kaWYKLSAgICBpZiAocmVzdWx0ID09IC0x KSB7Ci0JcmV0dXJuIDE7Ci0gICAgfQotICAgIHJlc3VsdCA9IEpFTUFMTE9DX0lOVEVSTkFMX0ZG U0wocmVzdWx0KSAtIDE7Ci0KLSAgICBmID0gZm9wZW4oImNvbmZ0ZXN0Lm91dCIsICJ3Iik7Ci0g ICAgaWYgKGYgPT0gTlVMTCkgewotCXJldHVybiAxOwotICAgIH0KLSAgICBmcHJpbnRmKGYsICIl ZCIsIHJlc3VsdCk7Ci0gICAgZmNsb3NlKGYpOwotCi0gICAgcmV0dXJuIDA7Ci1dXSldLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBbamVfY3ZfbGdfcGFnZT1gY2F0IGNvbmZ0ZXN0Lm91 dGBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbamVfY3ZfbGdfcGFnZT11bmRlZmlu ZWRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbamVfY3ZfbGdfcGFnZT0xMl0pKQot ZmkKLWlmIHRlc3QgIngke2plX2N2X2xnX3BhZ2V9IiAhPSAieCIgOyB0aGVuCi0gIExHX1BBR0U9 IiR7amVfY3ZfbGdfcGFnZX0iCi1maQotaWYgdGVzdCAieCR7TEdfUEFHRX0iICE9ICJ4dW5kZWZp bmVkIiA7IHRoZW4KLSAgIEFDX0RFRklORV9VTlFVT1RFRChbTEdfUEFHRV0sIFskTEdfUEFHRV0s IFsgXSkKLWVsc2UKLSAgIEFDX01TR19FUlJPUihbY2Fubm90IGRldGVybWluZSB2YWx1ZSBmb3Ig TEdfUEFHRV0pCi1maQotCi1BQ19BUkdfV0lUSChbbGdfaHVnZXBhZ2VdLAotICBbQVNfSEVMUF9T VFJJTkcoWy0td2l0aC1sZy1odWdlcGFnZT08bGctaHVnZXBhZ2U+XSwKLSAgIFtCYXNlIDIgbG9n IG9mIHN5c3RlbSBodWdlIHBhZ2Ugc2l6ZV0pXSwKLSAgW2plX2N2X2xnX2h1Z2VwYWdlPSIke3dp dGhfbGdfaHVnZXBhZ2V9Il0sCi0gIFtqZV9jdl9sZ19odWdlcGFnZT0iIl0pCi1pZiB0ZXN0ICJ4 JHtqZV9jdl9sZ19odWdlcGFnZX0iID0gIngiIDsgdGhlbgotICBkbmwgTG9vayBpbiAvcHJvYy9t ZW1pbmZvIChMaW51eC1zcGVjaWZpYykgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSBkZWZhdWx0IGh1 Z2UKLSAgZG5sIHBhZ2Ugc2l6ZSwgaWYgYW55LiAgVGhlIHJlbGV2YW50IGxpbmUgbG9va3MgbGlr ZToKLSAgZG5sCi0gIGRubCAgIEh1Z2VwYWdlc2l6ZTogICAgICAgMjA0OCBrQgotICBpZiB0ZXN0 IC1lICIvcHJvYy9tZW1pbmZvIiA7IHRoZW4KLSAgICBocHNrPVtgY2F0IC9wcm9jL21lbWluZm8g Mj4vZGV2L251bGwgfCBcCi0gICAgICAgICAgZ3JlcCAtZSAnXkh1Z2VwYWdlc2l6ZTpbWzpzcGFj ZTpdXVwrWzAtOV1cK1tbOnNwYWNlOl1da0IkJyB8IFwKLSAgICAgICAgICBhd2sgJ3twcmludCAk Mn0nYF0KLSAgICBpZiB0ZXN0ICJ4JHtocHNrfSIgIT0gIngiIDsgdGhlbgotICAgICAgamVfY3Zf bGdfaHVnZXBhZ2U9MTAKLSAgICAgIHdoaWxlIHRlc3QgIiR7aHBza30iIC1ndCAxIDsgZG8KLSAg ICAgICAgaHBzaz0iJCgoaHBzayAvIDIpKSIKLSAgICAgICAgamVfY3ZfbGdfaHVnZXBhZ2U9IiQo KGplX2N2X2xnX2h1Z2VwYWdlICsgMSkpIgotICAgICAgZG9uZQotICAgIGZpCi0gIGZpCi0KLSAg ZG5sIFNldCBkZWZhdWx0IGlmIHVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZS4KLSAg aWYgdGVzdCAieCR7amVfY3ZfbGdfaHVnZXBhZ2V9IiA9ICJ4IiA7IHRoZW4KLSAgICBqZV9jdl9s Z19odWdlcGFnZT0yMQotICBmaQotZmkKLWlmIHRlc3QgIngke0xHX1BBR0V9IiAhPSAieHVuZGVm aW5lZCIgLWEgXAotICAgICAgICAiJHtqZV9jdl9sZ19odWdlcGFnZX0iIC1sdCAiJHtMR19QQUdF fSIgOyB0aGVuCi0gIEFDX01TR19FUlJPUihbSHVnZSBwYWdlIHNpemUgKDJeJHtqZV9jdl9sZ19o dWdlcGFnZX0pIG11c3QgYmUgYXQgbGVhc3QgcGFnZSBzaXplICgyXiR7TEdfUEFHRX0pXSkKLWZp Ci1BQ19ERUZJTkVfVU5RVU9URUQoW0xHX0hVR0VQQUdFXSwgWyR7amVfY3ZfbGdfaHVnZXBhZ2V9 XSwgWyBdKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIEVuYWJsZSBsaWJkbCBieSBk ZWZhdWx0LgotQUNfQVJHX0VOQUJMRShbbGliZGxdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlz YWJsZS1saWJkbF0sCi0gIFtEbyBub3QgdXNlIGxpYmRsXSldLAotW2lmIHRlc3QgIngkZW5hYmxl X2xpYmRsIiA9ICJ4bm8iIDsgdGhlbgotICBlbmFibGVfbGliZGw9IjAiCi1lbHNlCi0gIGVuYWJs ZV9saWJkbD0iMSIKLWZpCi1dLAotW2VuYWJsZV9saWJkbD0iMSJdCi0pCi1BQ19TVUJTVChbbGli ZGxdKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIENvbmZpZ3VyZSBwdGhyZWFkcy4K LQotaWYgdGVzdCAieCRhYmkiICE9ICJ4cGVjb2ZmIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1B TExPQ19IQVZFX1BUSFJFQURdLCBbIF0sIFsgXSkKLSAgQUNfQ0hFQ0tfSEVBREVSUyhbcHRocmVh ZC5oXSwgLCBbQUNfTVNHX0VSUk9SKFtwdGhyZWFkLmggaXMgbWlzc2luZ10pXSkKLSAgZG5sIFNv bWUgc3lzdGVtcyBtYXkgZW1iZWQgcHRocmVhZHMgZnVuY3Rpb25hbGl0eSBpbiBsaWJjOyBjaGVj ayBmb3IgbGlicHRocmVhZAotICBkbmwgZmlyc3QsIGJ1dCB0cnkgbGliYyB0b28gYmVmb3JlIGZh aWxpbmcuCi0gIEFDX0NIRUNLX0xJQihbcHRocmVhZF0sIFtwdGhyZWFkX2NyZWF0ZV0sIFtKRV9B UFBFTkRfVlMoTElCUywgLXB0aHJlYWQpXSwKLSAgICAgICAgICAgICAgIFtBQ19TRUFSQ0hfTElC UyhbcHRocmVhZF9jcmVhdGVdLCAsICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Q19NU0dfRVJST1IoW2xpYnB0aHJlYWQgaXMgbWlzc2luZ10pKV0pCi0gIHdyYXBfc3ltcz0iJHt3 cmFwX3N5bXN9IHB0aHJlYWRfY3JlYXRlIgotICBoYXZlX3B0aHJlYWQ9IjEiCi0KLWRubCBDaGVj ayBpZiB3ZSBoYXZlIGRsc3ltIHN1cHBvcnQuCi0gIGlmIHRlc3QgIngkZW5hYmxlX2xpYmRsIiA9 ICJ4MSIgOyB0aGVuCi0gICAgaGF2ZV9kbHN5bT0iMSIKLSAgICBBQ19DSEVDS19IRUFERVJTKFtk bGZjbi5oXSwKLSAgICAgIEFDX0NIRUNLX0ZVTkMoW2Rsc3ltXSwgW10sCi0gICAgICAgIFtBQ19D SEVDS19MSUIoW2RsXSwgW2Rsc3ltXSwgW0xJQlM9IiRMSUJTIC1sZGwiXSwgW2hhdmVfZGxzeW09 IjAiXSldKSwKLSAgICAgIFtoYXZlX2Rsc3ltPSIwIl0pCi0gICAgaWYgdGVzdCAieCRoYXZlX2Rs c3ltIiA9ICJ4MSIgOyB0aGVuCi0gICAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfRExTWU1d LCBbIF0sIFsgXSkKLSAgICBmaQotICBlbHNlCi0gICAgaGF2ZV9kbHN5bT0iMCIKLSAgZmkKLQot ICBKRV9DT01QSUxBQkxFKFtwdGhyZWFkX2F0Zm9yaygzKV0sIFsKLSNpbmNsdWRlIDxwdGhyZWFk Lmg+Ci1dLCBbCi0gIHB0aHJlYWRfYXRmb3JrKCh2b2lkICopMCwgKHZvaWQgKikwLCAodm9pZCAq KTApOwotXSwgW2plX2N2X3B0aHJlYWRfYXRmb3JrXSkKLSAgaWYgdGVzdCAieCR7amVfY3ZfcHRo cmVhZF9hdGZvcmt9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hB VkVfUFRIUkVBRF9BVEZPUktdLCBbIF0sIFsgXSkKLSAgZmkKLSAgZG5sIENoZWNrIGlmIHB0aHJl YWRfc2V0bmFtZV9ucCBpcyBhdmFpbGFibGUgd2l0aCB0aGUgZXhwZWN0ZWQgQVBJLgotICBKRV9D T01QSUxBQkxFKFtwdGhyZWFkX3NldG5hbWVfbnAoMyldLCBbCi0jaW5jbHVkZSA8cHRocmVhZC5o PgotXSwgWwotICBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF9zZWxmKCksICJzZXRuYW1lX3Rl c3QiKTsKLV0sIFtqZV9jdl9wdGhyZWFkX3NldG5hbWVfbnBdKQotICBpZiB0ZXN0ICJ4JHtqZV9j dl9wdGhyZWFkX3NldG5hbWVfbnB9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBBQ19ERUZJTkUoW0pF TUFMTE9DX0hBVkVfUFRIUkVBRF9TRVROQU1FX05QXSwgWyBdLCBbIF0pCi0gIGZpCi0gIGRubCBD aGVjayBpZiBwdGhyZWFkX2dldG5hbWVfbnAgaXMgbm90IG5lY2Vzc2FyaWx5IHByZXNlbnQgZGVz cGl0ZQotICBkbmwgdGhlIHB0aHJlYWRfc2V0bmFtZV9ucCBjb3VudGVycGFydAotICBKRV9DT01Q SUxBQkxFKFtwdGhyZWFkX2dldG5hbWVfbnAoMyldLCBbCi0jaW5jbHVkZSA8cHRocmVhZC5oPgot I2luY2x1ZGUgPHN0ZGxpYi5oPgotXSwgWwotICB7Ci0gIAljaGFyICpuYW1lID0gbWFsbG9jKDE2 KTsKLSAgCXB0aHJlYWRfZ2V0bmFtZV9ucChwdGhyZWFkX3NlbGYoKSwgbmFtZSwgMTYpOwotCWZy ZWUobmFtZSk7Ci0gIH0KLV0sIFtqZV9jdl9wdGhyZWFkX2dldG5hbWVfbnBdKQotICBpZiB0ZXN0 ICJ4JHtqZV9jdl9wdGhyZWFkX2dldG5hbWVfbnB9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBBQ19E RUZJTkUoW0pFTUFMTE9DX0hBVkVfUFRIUkVBRF9HRVROQU1FX05QXSwgWyBdLCBbIF0pCi0gIGZp Ci0gIGRubCBDaGVjayBpZiBwdGhyZWFkX2dldF9uYW1lX25wIGlzIG5vdCBuZWNlc3NhcmlseSBw cmVzZW50IGRlc3BpdGUKLSAgZG5sIHRoZSBwdGhyZWFkX3NldF9uYW1lX25wIGNvdW50ZXJwYXJ0 Ci0gIEpFX0NPTVBJTEFCTEUoW3B0aHJlYWRfZ2V0X25hbWVfbnAoMyldLCBbCi0jaW5jbHVkZSA8 cHRocmVhZC5oPgotI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4K LV0sIFsKLSAgewotICAJY2hhciAqbmFtZSA9IG1hbGxvYygxNik7Ci0gIAlwdGhyZWFkX2dldF9u YW1lX25wKHB0aHJlYWRfc2VsZigpLCBuYW1lLCAxNik7Ci0JZnJlZShuYW1lKTsKLSAgfQotXSwg W2plX2N2X3B0aHJlYWRfZ2V0X25hbWVfbnBdKQotICBpZiB0ZXN0ICJ4JHtqZV9jdl9wdGhyZWFk X2dldF9uYW1lX25wfSIgPSAieHllcyIgOyB0aGVuCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19I QVZFX1BUSFJFQURfR0VUX05BTUVfTlBdLCBbIF0sIFsgXSkKLSAgZmkKLWZpCi0KLUpFX0FQUEVO RF9WUyhDUFBGTEFHUywgLURfUkVFTlRSQU5UKQotCi1kbmwgQ2hlY2sgd2hldGhlciBjbG9ja19n ZXR0aW1lKDIpIGlzIGluIGxpYmMgb3IgbGlicnQuCi1BQ19TRUFSQ0hfTElCUyhbY2xvY2tfZ2V0 dGltZV0sIFtydF0pCi0KLWRubCBDcmF5IHdyYXBwZXIgY29tcGlsZXIgb2Z0ZW4gYWRkcyBgLWxy dGAgd2hlbiB1c2luZyBgLXN0YXRpY2AuIENoZWNrIHdpdGgKLWRubCBgLWR5bmFtaWNgIGFzIHdl bGwgaW4gY2FzZSBhIHVzZXIgdHJpZXMgdG8gZHluYW1pY2FsbHkgbGluayBpbiBqZW1hbGxvYwot aWYgdGVzdCAieCRqZV9jdl9jcmF5X3ByZ2Vudl93cmFwcGVyIiA9ICJ4eWVzIiA7IHRoZW4KLSAg aWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9jbG9ja19nZXR0aW1lIiAhPSAiLWxydCI7IHRoZW4KLSAg ICBKRV9DRkxBR1NfU0FWRSgpCi0KLSAgICB1bnNldCBhY19jdl9zZWFyY2hfY2xvY2tfZ2V0dGlt ZQotICAgIEpFX0NGTEFHU19BREQoWy1keW5hbWljXSkKLSAgICBBQ19TRUFSQ0hfTElCUyhbY2xv Y2tfZ2V0dGltZV0sIFtydF0pCi0KLSAgICBKRV9DRkxBR1NfUkVTVE9SRSgpCi0gIGZpCi1maQot Ci1kbmwgY2hlY2sgZm9yIENMT0NLX01PTk9UT05JQ19DT0FSU0UgKExpbnV4LXNwZWNpZmljKS4K LUpFX0NPTVBJTEFCTEUoW2Nsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgLi4u KV0sIFsKLSNpbmNsdWRlIDx0aW1lLmg+Ci1dLCBbCi0Jc3RydWN0IHRpbWVzcGVjIHRzOwotCi0J Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCAmdHMpOwotXSwgW2plX2N2X2Ns b2NrX21vbm90b25pY19jb2Fyc2VdKQotaWYgdGVzdCAieCR7amVfY3ZfY2xvY2tfbW9ub3Rvbmlj X2NvYXJzZX0iID0gInh5ZXMiIDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfQ0xP Q0tfTU9OT1RPTklDX0NPQVJTRV0sIFsgXSwgWyBdKQotZmkKLQotZG5sIGNoZWNrIGZvciBDTE9D S19NT05PVE9OSUMuCi1KRV9DT01QSUxBQkxFKFtjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05J QywgLi4uKV0sIFsKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci1dLCBb Ci0Jc3RydWN0IHRpbWVzcGVjIHRzOwotCi0JY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMs ICZ0cyk7Ci0jaWYgIWRlZmluZWQoX1BPU0lYX01PTk9UT05JQ19DTE9DSykgfHwgX1BPU0lYX01P Tk9UT05JQ19DTE9DSyA8IDAKLSMgIGVycm9yIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgbWlzc2lu Zy9pbnZhbGlkCi0jZW5kaWYKLV0sIFtqZV9jdl9jbG9ja19tb25vdG9uaWNdKQotaWYgdGVzdCAi eCR7amVfY3ZfY2xvY2tfbW9ub3RvbmljfSIgPSAieHllcyIgOyB0aGVuCi0gIEFDX0RFRklORShb SkVNQUxMT0NfSEFWRV9DTE9DS19NT05PVE9OSUNdLCBbIF0sIFsgXSkKLWZpCi0KLWRubCBDaGVj ayBmb3IgbWFjaF9hYnNvbHV0ZV90aW1lKCkuCi1KRV9DT01QSUxBQkxFKFttYWNoX2Fic29sdXRl X3RpbWUoKV0sIFsKLSNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgotXSwgWwotCW1hY2hfYWJz b2x1dGVfdGltZSgpOwotXSwgW2plX2N2X21hY2hfYWJzb2x1dGVfdGltZV0pCi1pZiB0ZXN0ICJ4 JHtqZV9jdl9tYWNoX2Fic29sdXRlX3RpbWV9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5F KFtKRU1BTExPQ19IQVZFX01BQ0hfQUJTT0xVVEVfVElNRV0sIFsgXSwgWyBdKQotZmkKLQotZG5s IGNoZWNrIGZvciBDTE9DS19SRUFMVElNRSAoYWx3YXlzIHNob3VsZCBiZSBhdmFpbGFibGUgb24g TGludXgpCi1KRV9DT01QSUxBQkxFKFtjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAuLi4p XSwgWwotI2luY2x1ZGUgPHRpbWUuaD4KLV0sIFsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0KLQlj bG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOwotXSwgW2plX2N2X2Nsb2NrX3JlYWx0 aW1lXSkKLWlmIHRlc3QgIngke2plX2N2X2Nsb2NrX3JlYWx0aW1lfSIgPSAieHllcyIgOyB0aGVu Ci0gIEFDX0RFRklORShbSkVNQUxMT0NfSEFWRV9DTE9DS19SRUFMVElNRV0sIFsgXSwgWyBdKQot ZmkKLQotZG5sIFVzZSBzeXNjYWxsKDIpIChpZiBhdmFpbGFibGUpIGJ5IGRlZmF1bHQuCi1BQ19B UkdfRU5BQkxFKFtzeXNjYWxsXSwKLSAgW0FTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtc3lzY2Fs bF0sIFtEaXNhYmxlIHVzZSBvZiBzeXNjYWxsKDIpXSldLAotW2lmIHRlc3QgIngkZW5hYmxlX3N5 c2NhbGwiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV9zeXNjYWxsPSIwIgotZWxzZQotICBlbmFi bGVfc3lzY2FsbD0iMSIKLWZpCi1dLAotW2VuYWJsZV9zeXNjYWxsPSIxIl0KLSkKLWlmIHRlc3Qg IngkZW5hYmxlX3N5c2NhbGwiID0gIngxIiA7IHRoZW4KLSAgZG5sIENoZWNrIGlmIHN5c2NhbGwo MikgaXMgdXNhYmxlLiAgVHJlYXQgd2FybmluZ3MgYXMgZXJyb3JzLCBzbyB0aGF0IGUuZy4gT1MK LSAgZG5sIFggMTAuMTIncyBkZXByZWNhdGlvbiB3YXJuaW5nIHByZXZlbnRzIHVzZS4KLSAgSkVf Q0ZMQUdTX1NBVkUoKQotICBKRV9DRkxBR1NfQUREKFstV2Vycm9yXSkKLSAgSkVfQ09NUElMQUJM RShbc3lzY2FsbCgyKV0sIFsKLSNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgotI2luY2x1ZGUgPHVu aXN0ZC5oPgotXSwgWwotCXN5c2NhbGwoU1lTX3dyaXRlLCAyLCAiaGVsbG8iLCA1KTsKLV0sCi0g ICAgICAgICAgICAgICAgW2plX2N2X3N5c2NhbGxdKQotICBKRV9DRkxBR1NfUkVTVE9SRSgpCi0g IGlmIHRlc3QgIngkamVfY3Zfc3lzY2FsbCIgPSAieHllcyIgOyB0aGVuCi0gICAgQUNfREVGSU5F KFtKRU1BTExPQ19VU0VfU1lTQ0FMTF0sIFsgXSwgWyBdKQotICBmaQotZmkKLQotZG5sIENoZWNr IGlmIHRoZSBHTlUtc3BlY2lmaWMgc2VjdXJlX2dldGVudiBmdW5jdGlvbiBleGlzdHMuCi1BQ19D SEVDS19GVU5DKFtzZWN1cmVfZ2V0ZW52XSwKLSAgICAgICAgICAgICAgW2hhdmVfc2VjdXJlX2dl dGVudj0iMSJdLAotICAgICAgICAgICAgICBbaGF2ZV9zZWN1cmVfZ2V0ZW52PSIwIl0KLSAgICAg ICAgICAgICApCi1pZiB0ZXN0ICJ4JGhhdmVfc2VjdXJlX2dldGVudiIgPSAieDEiIDsgdGhlbgot ICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfU0VDVVJFX0dFVEVOVl0sIFsgXSwgWyBdKQotZmkK LQotZG5sIENoZWNrIGlmIHRoZSBHTlUtc3BlY2lmaWMgc2NoZWRfZ2V0Y3B1IGZ1bmN0aW9uIGV4 aXN0cy4KLUFDX0NIRUNLX0ZVTkMoW3NjaGVkX2dldGNwdV0sCi0gICAgICAgICAgICAgIFtoYXZl X3NjaGVkX2dldGNwdT0iMSJdLAotICAgICAgICAgICAgICBbaGF2ZV9zY2hlZF9nZXRjcHU9IjAi XQotICAgICAgICAgICAgICkKLWlmIHRlc3QgIngkaGF2ZV9zY2hlZF9nZXRjcHUiID0gIngxIiA7 IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19IQVZFX1NDSEVEX0dFVENQVV0sIFsgXSwgWyBd KQotZmkKLQotZG5sIENoZWNrIGlmIHRoZSBHTlUtc3BlY2lmaWMgc2NoZWRfc2V0YWZmaW5pdHkg ZnVuY3Rpb24gZXhpc3RzLgotQUNfQ0hFQ0tfRlVOQyhbc2NoZWRfc2V0YWZmaW5pdHldLAotICAg ICAgICAgICAgICBbaGF2ZV9zY2hlZF9zZXRhZmZpbml0eT0iMSJdLAotICAgICAgICAgICAgICBb aGF2ZV9zY2hlZF9zZXRhZmZpbml0eT0iMCJdCi0gICAgICAgICAgICAgKQotaWYgdGVzdCAieCRo YXZlX3NjaGVkX3NldGFmZmluaXR5IiA9ICJ4MSIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxM T0NfSEFWRV9TQ0hFRF9TRVRBRkZJTklUWV0sIFsgXSwgWyBdKQotZmkKLQotZG5sIENoZWNrIGlm IHRoZSBTb2xhcmlzL0JTRCBpc3NldHVnaWQgZnVuY3Rpb24gZXhpc3RzLgotQUNfQ0hFQ0tfRlVO QyhbaXNzZXR1Z2lkXSwKLSAgICAgICAgICAgICAgW2hhdmVfaXNzZXR1Z2lkPSIxIl0sCi0gICAg ICAgICAgICAgIFtoYXZlX2lzc2V0dWdpZD0iMCJdCi0gICAgICAgICAgICAgKQotaWYgdGVzdCAi eCRoYXZlX2lzc2V0dWdpZCIgPSAieDEiIDsgdGhlbgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hB VkVfSVNTRVRVR0lEXSwgWyBdLCBbIF0pCi1maQotCi1kbmwgQ2hlY2sgd2hldGhlciB0aGUgQlNE LXNwZWNpZmljIF9tYWxsb2NfdGhyZWFkX2NsZWFudXAoKSBleGlzdHMuICBJZiBzbywgdXNlCi1k bmwgaXQgcmF0aGVyIHRoYW4gcHRocmVhZHMgVFNEIGNsZWFudXAgZnVuY3Rpb25zIHRvIHN1cHBv cnQgY2xlYW51cCBkdXJpbmcKLWRubCB0aHJlYWQgZXhpdCwgaW4gb3JkZXIgdG8gYXZvaWQgcHRo cmVhZHMgbGlicmFyeSByZWN1cnNpb24gZHVyaW5nCi1kbmwgYm9vdHN0cmFwcGluZy4KLUFDX0NI RUNLX0ZVTkMoW19tYWxsb2NfdGhyZWFkX2NsZWFudXBdLAotICAgICAgICAgICAgICBbaGF2ZV9f bWFsbG9jX3RocmVhZF9jbGVhbnVwPSIxIl0sCi0gICAgICAgICAgICAgIFtoYXZlX19tYWxsb2Nf dGhyZWFkX2NsZWFudXA9IjAiXQotICAgICAgICAgICAgICkKLWlmIHRlc3QgIngkaGF2ZV9fbWFs bG9jX3RocmVhZF9jbGVhbnVwIiA9ICJ4MSIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0Nf TUFMTE9DX1RIUkVBRF9DTEVBTlVQXSwgWyBdLCBbIF0pCi0gIHdyYXBfc3ltcz0iJHt3cmFwX3N5 bXN9IF9tYWxsb2NfdGhyZWFkX2NsZWFudXAgX21hbGxvY190c2RfY2xlYW51cF9yZWdpc3RlciIK LSAgZm9yY2VfdGxzPSIxIgotZmkKLQotZG5sIENoZWNrIHdoZXRoZXIgdGhlIEJTRC1zcGVjaWZp YyBfcHRocmVhZF9tdXRleF9pbml0X2NhbGxvY19jYigpIGV4aXN0cy4gIElmCi1kbmwgc28sIG11 dGV4IGluaXRpYWxpemF0aW9uIGNhdXNlcyBhbGxvY2F0aW9uLCBhbmQgd2UgbmVlZCB0byBpbXBs ZW1lbnQgdGhpcwotZG5sIGNhbGxiYWNrIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHByZXZlbnQgcmVj dXJzaXZlIGFsbG9jYXRpb24uCi1BQ19DSEVDS19GVU5DKFtfcHRocmVhZF9tdXRleF9pbml0X2Nh bGxvY19jYl0sCi0gICAgICAgICAgICAgIFtoYXZlX19wdGhyZWFkX211dGV4X2luaXRfY2FsbG9j X2NiPSIxIl0sCi0gICAgICAgICAgICAgIFtoYXZlX19wdGhyZWFkX211dGV4X2luaXRfY2FsbG9j X2NiPSIwIl0KLSAgICAgICAgICAgICApCi1pZiB0ZXN0ICJ4JGhhdmVfX3B0aHJlYWRfbXV0ZXhf aW5pdF9jYWxsb2NfY2IiID0gIngxIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19NVVRF WF9JTklUX0NCXSwgWyBdLCBbIF0pCi0gIHdyYXBfc3ltcz0iJHt3cmFwX3N5bXN9IF9tYWxsb2Nf cHJlZm9yayBfbWFsbG9jX3Bvc3Rmb3JrIgotZmkKLQotQUNfQ0hFQ0tfRlVOQyhbbWVtY250bF0s Ci0JICAgICAgW2hhdmVfbWVtY250bD0iMSJdLAotCSAgICAgIFtoYXZlX21lbWNudGw9IjAiXSwK LQkgICAgICApCi1pZiB0ZXN0ICJ4JGhhdmVfbWVtY250bCIgPSAieDEiIDsgdGhlbgotICBBQ19E RUZJTkUoW0pFTUFMTE9DX0hBVkVfTUVNQ05UTF0sIFsgXSwgWyBdKQotZmkKLQotZG5sIERpc2Fi bGUgbGF6eSBsb2NraW5nIGJ5IGRlZmF1bHQuCi1BQ19BUkdfRU5BQkxFKFtsYXp5X2xvY2tdLAot ICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxhenktbG9ja10sCi0gIFtFbmFibGUgbGF6eSBs b2NraW5nIChvbmx5IGxvY2sgd2hlbiBtdWx0aS10aHJlYWRlZCldKV0sCi1baWYgdGVzdCAieCRl bmFibGVfbGF6eV9sb2NrIiA9ICJ4bm8iIDsgdGhlbgotICBlbmFibGVfbGF6eV9sb2NrPSIwIgot ZWxzZQotICBlbmFibGVfbGF6eV9sb2NrPSIxIgotZmkKLV0sCi1bZW5hYmxlX2xhenlfbG9jaz0i Il0KLSkKLWlmIHRlc3QgIngke2VuYWJsZV9sYXp5X2xvY2t9IiA9ICJ4IiA7IHRoZW4KLSAgaWYg dGVzdCAieCR7Zm9yY2VfbGF6eV9sb2NrfSIgPSAieDEiIDsgdGhlbgotICAgIEFDX01TR19SRVNV TFQoW0ZvcmNpbmcgbGF6eS1sb2NrIHRvIGF2b2lkIGFsbG9jYXRvci90aHJlYWRpbmcgYm9vdHN0 cmFwIGlzc3Vlc10pCi0gICAgZW5hYmxlX2xhenlfbG9jaz0iMSIKLSAgZWxzZQotICAgIGVuYWJs ZV9sYXp5X2xvY2s9IjAiCi0gIGZpCi1maQotaWYgdGVzdCAieCR7ZW5hYmxlX2xhenlfbG9ja30i ID0gIngxIiAtYSAieCR7YWJpfSIgPSAieHBlY29mZiIgOyB0aGVuCi0gIEFDX01TR19SRVNVTFQo W0ZvcmNpbmcgbm8gbGF6eS1sb2NrIGJlY2F1c2UgdGhyZWFkIGNyZWF0aW9uIG1vbml0b3Jpbmcg aXMgdW5pbXBsZW1lbnRlZF0pCi0gIGVuYWJsZV9sYXp5X2xvY2s9IjAiCi1maQotaWYgdGVzdCAi eCRlbmFibGVfbGF6eV9sb2NrIiA9ICJ4MSIgOyB0aGVuCi0gIGlmIHRlc3QgIngkaGF2ZV9kbHN5 bSIgPSAieDEiIDsgdGhlbgotICAgIEFDX0RFRklORShbSkVNQUxMT0NfTEFaWV9MT0NLXSwgWyBd LCBbIF0pCi0gIGVsc2UKLSAgICBBQ19NU0dfRVJST1IoW01pc3NpbmcgZGxzeW0gc3VwcG9ydDog bGF6eS1sb2NrIGNhbm5vdCBiZSBlbmFibGVkLl0pCi0gIGZpCi1maQotQUNfU1VCU1QoW2VuYWJs ZV9sYXp5X2xvY2tdKQotCi1kbmwgQXV0b21hdGljYWxseSBjb25maWd1cmUgVExTLgotaWYgdGVz dCAieCR7Zm9yY2VfdGxzfSIgPSAieDEiIDsgdGhlbgotICBlbmFibGVfdGxzPSIxIgotZWxpZiB0 ZXN0ICJ4JHtmb3JjZV90bHN9IiA9ICJ4MCIgOyB0aGVuCi0gIGVuYWJsZV90bHM9IjAiCi1lbHNl Ci0gIGVuYWJsZV90bHM9IjEiCi1maQotaWYgdGVzdCAieCR7ZW5hYmxlX3Rsc30iID0gIngxIiA7 IHRoZW4KLUFDX01TR19DSEVDS0lORyhbZm9yIFRMU10pCi1BQ19DT01QSUxFX0lGRUxTRShbQUNf TEFOR19QUk9HUkFNKAotW1sKLSAgICBfX3RocmVhZCBpbnQgeDsKLV1dLCBbWwotICAgIHggPSA0 MjsKLQotICAgIHJldHVybiAwOwotXV0pXSwKLSAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChb eWVzXSksCi0gICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKLSAgICAgICAgICAgICAg ZW5hYmxlX3Rscz0iMCIpCi1lbHNlCi0gIGVuYWJsZV90bHM9IjAiCi1maQotQUNfU1VCU1QoW2Vu YWJsZV90bHNdKQotaWYgdGVzdCAieCR7ZW5hYmxlX3Rsc30iID0gIngxIiA7IHRoZW4KLSAgQUNf REVGSU5FX1VOUVVPVEVEKFtKRU1BTExPQ19UTFNdLCBbIF0sIFsgXSkKLWZpCi0KLWRubCA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci1kbmwgQ2hlY2sgZm9yIEMxMSBhdG9taWNzLgotCi1KRV9DT01QSUxB QkxFKFtDMTEgYXRvbWljc10sIFsKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpZiAoX19TVERDX1ZF UlNJT05fXyA+PSAyMDExMTJMKSAmJiAhZGVmaW5lZChfX1NURENfTk9fQVRPTUlDU19fKQotI2lu Y2x1ZGUgPHN0ZGF0b21pYy5oPgotI2Vsc2UKLSNlcnJvciBBdG9taWNzIG5vdCBhdmFpbGFibGUK LSNlbmRpZgotXSwgWwotICAgIHVpbnQ2NF90ICpwID0gKHVpbnQ2NF90ICopMDsKLSAgICB1aW50 NjRfdCB4ID0gMTsKLSAgICB2b2xhdGlsZSBhdG9taWNfdWludF9sZWFzdDY0X3QgKmEgPSAodm9s YXRpbGUgYXRvbWljX3VpbnRfbGVhc3Q2NF90ICopcDsKLSAgICB1aW50NjRfdCByID0gYXRvbWlj X2ZldGNoX2FkZChhLCB4KSArIHg7Ci0gICAgcmV0dXJuIHIgPT0gMDsKLV0sIFtqZV9jdl9jMTFf YXRvbWljc10pCi1pZiB0ZXN0ICJ4JHtqZV9jdl9jMTFfYXRvbWljc30iID0gInh5ZXMiIDsgdGhl bgotICBBQ19ERUZJTkUoW0pFTUFMTE9DX0MxMV9BVE9NSUNTXSwgWyBdLCBbIF0pCi1maQotCi1k bmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotZG5sIENoZWNrIGZvciBHQ0Mtc3R5bGUgX19hdG9taWMg YXRvbWljcy4KLQotSkVfQ09NUElMQUJMRShbR0NDIF9fYXRvbWljIGF0b21pY3NdLCBbCi1dLCBb Ci0gICAgaW50IHggPSAwOwotICAgIGludCB2YWwgPSAxOwotICAgIGludCB5ID0gX19hdG9taWNf ZmV0Y2hfYWRkKCZ4LCB2YWwsIF9fQVRPTUlDX1JFTEFYRUQpOwotICAgIGludCBhZnRlcl9hZGQg PSB4OwotICAgIHJldHVybiBhZnRlcl9hZGQgPT0gMTsKLV0sIFtqZV9jdl9nY2NfYXRvbWljX2F0 b21pY3NdKQotaWYgdGVzdCAieCR7amVfY3ZfZ2NjX2F0b21pY19hdG9taWNzfSIgPSAieHllcyIg OyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0NfR0NDX0FUT01JQ19BVE9NSUNTXSwgWyBdLCBb IF0pCi0KLSAgZG5sIGNoZWNrIGZvciA4LWJpdCBhdG9taWMgc3VwcG9ydAotICBKRV9DT01QSUxB QkxFKFtHQ0MgOC1iaXQgX19hdG9taWMgYXRvbWljc10sIFsKLSAgXSwgWwotICAgICAgdW5zaWdu ZWQgY2hhciB4ID0gMDsKLSAgICAgIGludCB2YWwgPSAxOwotICAgICAgaW50IHkgPSBfX2F0b21p Y19mZXRjaF9hZGQoJngsIHZhbCwgX19BVE9NSUNfUkVMQVhFRCk7Ci0gICAgICBpbnQgYWZ0ZXJf YWRkID0gKGludCl4OwotICAgICAgcmV0dXJuIGFmdGVyX2FkZCA9PSAxOwotICBdLCBbamVfY3Zf Z2NjX3U4X2F0b21pY19hdG9taWNzXSkKLSAgaWYgdGVzdCAieCR7amVfY3ZfZ2NjX3U4X2F0b21p Y19hdG9taWNzfSIgPSAieHllcyIgOyB0aGVuCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19HQ0Nf VThfQVRPTUlDX0FUT01JQ1NdLCBbIF0sIFsgXSkKLSAgZmkKLWZpCi0KLWRubCA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci1kbmwgQ2hlY2sgZm9yIEdDQy1zdHlsZSBfX3N5bmMgYXRvbWljcy4KLQotSkVf Q09NUElMQUJMRShbR0NDIF9fc3luYyBhdG9taWNzXSwgWwotXSwgWwotICAgIGludCB4ID0gMDsK LSAgICBpbnQgYmVmb3JlX2FkZCA9IF9fc3luY19mZXRjaF9hbmRfYWRkKCZ4LCAxKTsKLSAgICBp bnQgYWZ0ZXJfYWRkID0geDsKLSAgICByZXR1cm4gKGJlZm9yZV9hZGQgPT0gMCkgJiYgKGFmdGVy X2FkZCA9PSAxKTsKLV0sIFtqZV9jdl9nY2Nfc3luY19hdG9taWNzXSkKLWlmIHRlc3QgIngke2pl X2N2X2djY19zeW5jX2F0b21pY3N9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1B TExPQ19HQ0NfU1lOQ19BVE9NSUNTXSwgWyBdLCBbIF0pCi0KLSAgZG5sIGNoZWNrIGZvciA4LWJp dCBhdG9taWMgc3VwcG9ydAotICBKRV9DT01QSUxBQkxFKFtHQ0MgOC1iaXQgX19zeW5jIGF0b21p Y3NdLCBbCi0gIF0sIFsKLSAgICAgIHVuc2lnbmVkIGNoYXIgeCA9IDA7Ci0gICAgICBpbnQgYmVm b3JlX2FkZCA9IF9fc3luY19mZXRjaF9hbmRfYWRkKCZ4LCAxKTsKLSAgICAgIGludCBhZnRlcl9h ZGQgPSAoaW50KXg7Ci0gICAgICByZXR1cm4gKGJlZm9yZV9hZGQgPT0gMCkgJiYgKGFmdGVyX2Fk ZCA9PSAxKTsKLSAgXSwgW2plX2N2X2djY191OF9zeW5jX2F0b21pY3NdKQotICBpZiB0ZXN0ICJ4 JHtqZV9jdl9nY2NfdThfc3luY19hdG9taWNzfSIgPSAieHllcyIgOyB0aGVuCi0gICAgQUNfREVG SU5FKFtKRU1BTExPQ19HQ0NfVThfU1lOQ19BVE9NSUNTXSwgWyBdLCBbIF0pCi0gIGZpCi1maQot Ci1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIENoZWNrIGZvciBhdG9taWMoMykgb3BlcmF0 aW9ucyBhcyBwcm92aWRlZCBvbiBEYXJ3aW4uCi1kbmwgV2UgbmVlZCB0aGlzIG5vdCBmb3IgdGhl IGF0b21pYyBvcGVyYXRpb25zICh3aGljaCBhcmUgcHJvdmlkZWQgYWJvdmUpLCBidXQKLWRubCBy YXRoZXIgZm9yIHRoZSBPU191bmZhaXJfbG9jayB0eXBlIGl0IGV4cG9zZXMuCi0KLUpFX0NPTVBJ TEFCTEUoW0RhcndpbiBPU0F0b21pYyooKV0sIFsKLSNpbmNsdWRlIDxsaWJrZXJuL09TQXRvbWlj Lmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLV0sIFsKLQl7Ci0JCWludDMyX3QgeDMyID0gMDsK LQkJdm9sYXRpbGUgaW50MzJfdCAqeDMycCA9ICZ4MzI7Ci0JCU9TQXRvbWljQWRkMzIoMSwgeDMy cCk7Ci0JfQotCXsKLQkJaW50NjRfdCB4NjQgPSAwOwotCQl2b2xhdGlsZSBpbnQ2NF90ICp4NjRw ID0gJng2NDsKLQkJT1NBdG9taWNBZGQ2NCgxLCB4NjRwKTsKLQl9Ci1dLCBbamVfY3Zfb3NhdG9t aWNdKQotaWYgdGVzdCAieCR7amVfY3Zfb3NhdG9taWN9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNf REVGSU5FKFtKRU1BTExPQ19PU0FUT01JQ10sIFsgXSwgWyBdKQotZmkKLQotZG5sID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLWRubCBDaGVjayBmb3IgbWFkdmlzZSgyKS4KLQotSkVfQ09NUElMQUJMRShb bWFkdmlzZSgyKV0sIFsKLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotXSwgWwotCW1hZHZpc2UoKHZv aWQgKikwLCAwLCAwKTsKLV0sIFtqZV9jdl9tYWR2aXNlXSkKLWlmIHRlc3QgIngke2plX2N2X21h ZHZpc2V9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19IQVZFX01BRFZJ U0VdLCBbIF0sIFsgXSkKLQotICBkbmwgQ2hlY2sgZm9yIG1hZHZpc2UoLi4uLCBNQURWX0ZSRUUp LgotICBKRV9DT01QSUxBQkxFKFttYWR2aXNlKC4uLiwgTUFEVl9GUkVFKV0sIFsKLSNpbmNsdWRl IDxzeXMvbW1hbi5oPgotXSwgWwotCW1hZHZpc2UoKHZvaWQgKikwLCAwLCBNQURWX0ZSRUUpOwot XSwgW2plX2N2X21hZHZfZnJlZV0pCi0gIGlmIHRlc3QgIngke2plX2N2X21hZHZfZnJlZX0iID0g Inh5ZXMiIDsgdGhlbgotICAgIEFDX0RFRklORShbSkVNQUxMT0NfUFVSR0VfTUFEVklTRV9GUkVF XSwgWyBdLCBbIF0pCi0gIGVsaWYgdGVzdCAieCR7amVfY3ZfbWFkdmlzZX0iID0gInh5ZXMiIDsg dGhlbgotICAgIGNhc2UgIiR7aG9zdF9jcHV9IiBpbiBpNjg2fHg4Nl82NCkKLSAgICAgICAgY2Fz ZSAiJHtob3N0fSIgaW4gKi0qLWxpbnV4KikKLSAgICAgICAgICAgIEFDX0RFRklORShbSkVNQUxM T0NfUFVSR0VfTUFEVklTRV9GUkVFXSwgWyBdLCBbIF0pCi0gICAgICAgICAgICBBQ19ERUZJTkUo W0pFTUFMTE9DX0RFRklORV9NQURWSVNFX0ZSRUVdLCBbIF0sIFsgXSkKLQkgICAgOzsKLSAgICAg ICAgZXNhYwotICAgICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotICBkbmwgQ2hlY2sgZm9yIG1h ZHZpc2UoLi4uLCBNQURWX0RPTlRORUVEKS4KLSAgSkVfQ09NUElMQUJMRShbbWFkdmlzZSguLi4s IE1BRFZfRE9OVE5FRUQpXSwgWwotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci1dLCBbCi0JbWFkdmlz ZSgodm9pZCAqKTAsIDAsIE1BRFZfRE9OVE5FRUQpOwotXSwgW2plX2N2X21hZHZfZG9udG5lZWRd KQotICBpZiB0ZXN0ICJ4JHtqZV9jdl9tYWR2X2RvbnRuZWVkfSIgPSAieHllcyIgOyB0aGVuCi0g ICAgQUNfREVGSU5FKFtKRU1BTExPQ19QVVJHRV9NQURWSVNFX0RPTlRORUVEXSwgWyBdLCBbIF0p Ci0gIGZpCi0KLSAgZG5sIENoZWNrIGZvciBtYWR2aXNlKC4uLiwgTUFEVl9ET1tOVF1EVU1QKS4K LSAgSkVfQ09NUElMQUJMRShbbWFkdmlzZSguLi4sIE1BRFZfRE9bW05UXV1EVU1QKV0sIFsKLSNp bmNsdWRlIDxzeXMvbW1hbi5oPgotXSwgWwotCW1hZHZpc2UoKHZvaWQgKikwLCAwLCBNQURWX0RP TlREVU1QKTsKLQltYWR2aXNlKCh2b2lkICopMCwgMCwgTUFEVl9ET0RVTVApOwotXSwgW2plX2N2 X21hZHZfZG9udGR1bXBdKQotICBpZiB0ZXN0ICJ4JHtqZV9jdl9tYWR2X2RvbnRkdW1wfSIgPSAi eHllcyIgOyB0aGVuCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19NQURWSVNFX0RPTlREVU1QXSwg WyBdLCBbIF0pCi0gIGZpCi0KLSAgZG5sIENoZWNrIGZvciBtYWR2aXNlKC4uLiwgTUFEVl9bTk9d SFVHRVBBR0UpLgotICBKRV9DT01QSUxBQkxFKFttYWR2aXNlKC4uLiwgTUFEVl9bW05PXV1IVUdF UEFHRSldLCBbCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLV0sIFsKLQltYWR2aXNlKCh2b2lkICop MCwgMCwgTUFEVl9IVUdFUEFHRSk7Ci0JbWFkdmlzZSgodm9pZCAqKTAsIDAsIE1BRFZfTk9IVUdF UEFHRSk7Ci1dLCBbamVfY3ZfdGhwXSkKLSAgZG5sIENoZWNrIGZvciBtYWR2aXNlKC4uLiwgTUFE Vl9bTk9dQ09SRSkuCi0gIEpFX0NPTVBJTEFCTEUoW21hZHZpc2UoLi4uLCBNQURWX1tbTk9dXUNP UkUpXSwgWwotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci1dLCBbCi0JbWFkdmlzZSgodm9pZCAqKTAs IDAsIE1BRFZfTk9DT1JFKTsKLQltYWR2aXNlKCh2b2lkICopMCwgMCwgTUFEVl9DT1JFKTsKLV0s IFtqZV9jdl9tYWR2X25vY29yZV0pCi0gIGlmIHRlc3QgIngke2plX2N2X21hZHZfbm9jb3JlfSIg PSAieHllcyIgOyB0aGVuCi0gICAgQUNfREVGSU5FKFtKRU1BTExPQ19NQURWSVNFX05PQ09SRV0s IFsgXSwgWyBdKQotICBmaQotY2FzZSAiJHtob3N0X2NwdX0iIGluCi0gIGFybSopCi0gICAgOzsK LSAgKikKLSAgaWYgdGVzdCAieCR7amVfY3ZfdGhwfSIgPSAieHllcyIgOyB0aGVuCi0gICAgQUNf REVGSU5FKFtKRU1BTExPQ19IQVZFX01BRFZJU0VfSFVHRV0sIFsgXSwgWyBdKQotICBmaQotICA7 OwotZXNhYwotZWxzZQotICBkbmwgQ2hlY2sgZm9yIHBvc2l4X21hZHZpc2UuCi0gIEpFX0NPTVBJ TEFCTEUoW3Bvc2l4X21hZHZpc2VdLCBbCi0gICNpbmNsdWRlIDxzeXMvbW1hbi5oPgotICBdLCBb Ci0gICAgcG9zaXhfbWFkdmlzZSgodm9pZCAqKTAsIDAsIDApOwotICBdLCBbamVfY3ZfcG9zaXhf bWFkdmlzZV0pCi0gIGlmIHRlc3QgIngke2plX2N2X3Bvc2l4X21hZHZpc2V9IiA9ICJ4eWVzIiA7 IHRoZW4KLSAgICBBQ19ERUZJTkUoW0pFTUFMTE9DX0hBVkVfUE9TSVhfTUFEVklTRV0sIFsgXSwg WyBdKQotCi0gICAgZG5sIENoZWNrIGZvciBwb3NpeF9tYWR2aXNlKC4uLiwgUE9TSVhfTUFEVl9E T05UTkVFRCkuCi0gICAgSkVfQ09NUElMQUJMRShbcG9zaXhfbWFkdmlzZSguLi4sIFBPU0lYX01B RFZfRE9OVE5FRUQpXSwgWwotICAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSAgXSwgWwotICAgIHBv c2l4X21hZHZpc2UoKHZvaWQgKikwLCAwLCBQT1NJWF9NQURWX0RPTlRORUVEKTsKLSAgXSwgW2pl X2N2X3Bvc2l4X21hZHZfZG9udG5lZWRdKQotICAgIGlmIHRlc3QgIngke2plX2N2X3Bvc2l4X21h ZHZfZG9udG5lZWR9IiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgIEFDX0RFRklORShbSkVNQUxMT0Nf UFVSR0VfUE9TSVhfTUFEVklTRV9ET05UTkVFRF0sIFsgXSwgWyBdKQotICAgIGZpCi0gIGZpCi1m aQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIENoZWNrIGZvciBtcHJvdGVjdCgyKS4K LQotSkVfQ09NUElMQUJMRShbbXByb3RlY3QoMildLCBbCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4K LV0sIFsKLQltcHJvdGVjdCgodm9pZCAqKTAsIDAsIFBST1RfTk9ORSk7Ci1dLCBbamVfY3ZfbXBy b3RlY3RdKQotaWYgdGVzdCAieCR7amVfY3ZfbXByb3RlY3R9IiA9ICJ4eWVzIiA7IHRoZW4KLSAg QUNfREVGSU5FKFtKRU1BTExPQ19IQVZFX01QUk9URUNUXSwgWyBdLCBbIF0pCi1maQotCi1kbmwg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotZG5sIENoZWNrIGZvciBfX2J1aWx0aW5fY2x6KCksIF9fYnVp bHRpbl9jbHpsKCksIGFuZCBfX2J1aWx0aW5fY2x6bGwoKS4KLQotQUNfQ0FDSEVfQ0hFQ0soW2Zv ciBfX2J1aWx0aW5fY2x6XSwKLSAgICAgICAgICAgICAgIFtqZV9jdl9idWlsdGluX2Nsel0sCi0g ICAgICAgICAgICAgICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgeCA9IDA7Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB5ID0gX19idWlsdGluX2Nseih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHkgPSBfX2J1aWx0aW5fY2x6bCh4 KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBsb25nIHggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgeSA9IF9fYnVpbHRpbl9jbHpsbCh4KTsKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBbamVfY3ZfYnVpbHRpbl9jbHo9eWVzXSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBbamVfY3ZfYnVpbHRpbl9jbHo9bm9dKV0pCi0KLWlmIHRlc3QgIngke2plX2N2 X2J1aWx0aW5fY2x6fSIgPSAieHllcyIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0NfSEFW RV9CVUlMVElOX0NMWl0sIFsgXSwgWyBdKQotZmkKLQotZG5sID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LWRubCBDaGVjayBmb3Igb3NfdW5mYWlyX2xvY2sgb3BlcmF0aW9ucyBhcyBwcm92aWRlZCBvbiBE YXJ3aW4uCi0KLUpFX0NPTVBJTEFCTEUoW0RhcndpbiBvc191bmZhaXJfbG9ja18qKCldLCBbCi0j aW5jbHVkZSA8b3MvbG9jay5oPgotI2luY2x1ZGUgPEF2YWlsYWJpbGl0eU1hY3Jvcy5oPgotXSwg WwotCSNpZiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTIwMAotCSNlcnJvciAi b3NfdW5mYWlyX2xvY2sgaXMgbm90IHN1cHBvcnRlZCIKLQkjZWxzZQotCW9zX3VuZmFpcl9sb2Nr IGxvY2sgPSBPU19VTkZBSVJfTE9DS19JTklUOwotCW9zX3VuZmFpcl9sb2NrX2xvY2soJmxvY2sp OwotCW9zX3VuZmFpcl9sb2NrX3VubG9jaygmbG9jayk7Ci0JI2VuZGlmCi1dLCBbamVfY3Zfb3Nf dW5mYWlyX2xvY2tdKQotaWYgdGVzdCAieCR7amVfY3Zfb3NfdW5mYWlyX2xvY2t9IiA9ICJ4eWVz IiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19PU19VTkZBSVJfTE9DS10sIFsgXSwgWyBd KQotZmkKLQotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRubCBEYXJ3aW4tcmVsYXRlZCBjb25m aWd1cmF0aW9uLgotCi1BQ19BUkdfRU5BQkxFKFt6b25lLWFsbG9jYXRvcl0sCi0gIFtBU19IRUxQ X1NUUklORyhbLS1kaXNhYmxlLXpvbmUtYWxsb2NhdG9yXSwKLSAgICAgICAgICAgICAgICAgIFtE aXNhYmxlIHpvbmUgYWxsb2NhdG9yIGZvciBEYXJ3aW5dKV0sCi1baWYgdGVzdCAieCRlbmFibGVf em9uZV9hbGxvY2F0b3IiID0gInhubyIgOyB0aGVuCi0gIGVuYWJsZV96b25lX2FsbG9jYXRvcj0i MCIKLWVsc2UKLSAgZW5hYmxlX3pvbmVfYWxsb2NhdG9yPSIxIgotZmkKLV0sCi1baWYgdGVzdCAi eCR7YWJpfSIgPSAieG1hY2hvIjsgdGhlbgotICBlbmFibGVfem9uZV9hbGxvY2F0b3I9IjEiCi1m aQotXQotKQotQUNfU1VCU1QoW2VuYWJsZV96b25lX2FsbG9jYXRvcl0pCi0KLWlmIHRlc3QgIngk e2VuYWJsZV96b25lX2FsbG9jYXRvcn0iID0gIngxIiA7IHRoZW4KLSAgaWYgdGVzdCAieCR7YWJp fSIgIT0gInhtYWNobyI7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWy0tZW5hYmxlLXpvbmUtYWxs b2NhdG9yIGlzIG9ubHkgc3VwcG9ydGVkIG9uIERhcndpbl0pCi0gIGZpCi0gIEFDX0RFRklORShb SkVNQUxMT0NfWk9ORV0sIFsgXSwgWyBdKQotZmkKLQotZG5sID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LWRubCBVc2UgaW5pdGlhbC1leGVjIFRMUyBieSBkZWZhdWx0LgotQUNfQVJHX0VOQUJMRShbaW5p dGlhbC1leGVjLXRsc10sCi0gIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWluaXRpYWwtZXhl Yy10bHNdLAotICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgdGhlIGluaXRpYWwtZXhlYyB0bHMg bW9kZWxdKV0sCi1baWYgdGVzdCAieCRlbmFibGVfaW5pdGlhbF9leGVjX3RscyIgPSAieG5vIiA7 IHRoZW4KLSAgZW5hYmxlX2luaXRpYWxfZXhlY190bHM9IjAiCi1lbHNlCi0gIGVuYWJsZV9pbml0 aWFsX2V4ZWNfdGxzPSIxIgotZmkKLV0sCi1bZW5hYmxlX2luaXRpYWxfZXhlY190bHM9IjEiXQot KQotQUNfU1VCU1QoW2VuYWJsZV9pbml0aWFsX2V4ZWNfdGxzXSkKLQotaWYgdGVzdCAieCR7amVf Y3ZfdGxzX21vZGVsfSIgPSAieHllcyIgLWEgXAotICAgICAgICJ4JHtlbmFibGVfaW5pdGlhbF9l eGVjX3Rsc30iID0gIngxIiA7IHRoZW4KLSAgQUNfREVGSU5FKFtKRU1BTExPQ19UTFNfTU9ERUxd LAotICAgICAgICAgICAgW19fYXR0cmlidXRlX18oKHRsc19tb2RlbCgiaW5pdGlhbC1leGVjIikp KV0sIAotICAgICAgICAgICAgWyBdKQotZWxzZQotICBBQ19ERUZJTkUoW0pFTUFMTE9DX1RMU19N T0RFTF0sIFsgXSwgWyBdKQotZmkKLQotZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWRubCBFbmFi bGUgYmFja2dyb3VuZCB0aHJlYWRzIGlmIHBvc3NpYmxlLgotCi1pZiB0ZXN0ICJ4JHtoYXZlX3B0 aHJlYWR9IiA9ICJ4MSIgLWEgIngke2plX2N2X29zX3VuZmFpcl9sb2NrfSIgIT0gInh5ZXMiIC1h IFwKLSAgICAgICAieCR7YWJpfSIgIT0gInhtYWNobyIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVN QUxMT0NfQkFDS0dST1VORF9USFJFQURdLCBbIF0sIFsgXSkKLWZpCi0KLWRubCA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci1kbmwgQ2hlY2sgZm9yIGdsaWJjIG1hbGxvYyBob29rcwotCi1pZiB0ZXN0ICJ4 JGdsaWJjIiA9ICJ4MSIgOyB0aGVuCi0gIEpFX0NPTVBJTEFCTEUoW2dsaWJjIG1hbGxvYyBob29r XSwgWwotICAjaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLSAgZXh0ZXJuIHZvaWQgKCogX19mcmVlX2hv b2spKHZvaWQgKnB0cik7Ci0gIGV4dGVybiB2b2lkICooKiBfX21hbGxvY19ob29rKShzaXplX3Qg c2l6ZSk7Ci0gIGV4dGVybiB2b2lkICooKiBfX3JlYWxsb2NfaG9vaykodm9pZCAqcHRyLCBzaXpl X3Qgc2l6ZSk7Ci1dLCBbCi0gICAgdm9pZCAqcHRyID0gMEw7Ci0gICAgaWYgKF9fbWFsbG9jX2hv b2spIHB0ciA9IF9fbWFsbG9jX2hvb2soMSk7Ci0gICAgaWYgKF9fcmVhbGxvY19ob29rKSBwdHIg PSBfX3JlYWxsb2NfaG9vayhwdHIsIDIpOwotICAgIGlmIChfX2ZyZWVfaG9vayAmJiBwdHIpIF9f ZnJlZV9ob29rKHB0cik7Ci1dLCBbamVfY3ZfZ2xpYmNfbWFsbG9jX2hvb2tdKQotICBpZiB0ZXN0 ICJ4JHtqZV9jdl9nbGliY19tYWxsb2NfaG9va30iID0gInh5ZXMiIDsgdGhlbgotICAgIGlmIHRl c3QgIngke0pFTUFMTE9DX1BSRUZJWH0iID0gIngiIDsgdGhlbgotICAgICAgQUNfREVGSU5FKFtK RU1BTExPQ19HTElCQ19NQUxMT0NfSE9PS10sIFsgXSwgWyBdKQotICAgICAgd3JhcF9zeW1zPSIk e3dyYXBfc3ltc30gX19mcmVlX2hvb2sgX19tYWxsb2NfaG9vayBfX3JlYWxsb2NfaG9vayIKLSAg ICBmaQotICBmaQotCi0gIEpFX0NPTVBJTEFCTEUoW2dsaWJjIG1lbWFsaWduIGhvb2tdLCBbCi0g ICNpbmNsdWRlIDxzdGRkZWYuaD4KLQotICBleHRlcm4gdm9pZCAqKCogX19tZW1hbGlnbl9ob29r KShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSk7Ci1dLCBbCi0gICAgdm9pZCAqcHRyID0g MEw7Ci0gICAgaWYgKF9fbWVtYWxpZ25faG9vaykgcHRyID0gX19tZW1hbGlnbl9ob29rKDE2LCA3 KTsKLV0sIFtqZV9jdl9nbGliY19tZW1hbGlnbl9ob29rXSkKLSAgaWYgdGVzdCAieCR7amVfY3Zf Z2xpYmNfbWVtYWxpZ25faG9va30iID0gInh5ZXMiIDsgdGhlbgotICAgIGlmIHRlc3QgIngke0pF TUFMTE9DX1BSRUZJWH0iID0gIngiIDsgdGhlbgotICAgICAgQUNfREVGSU5FKFtKRU1BTExPQ19H TElCQ19NRU1BTElHTl9IT09LXSwgWyBdLCBbIF0pCi0gICAgICB3cmFwX3N5bXM9IiR7d3JhcF9z eW1zfSBfX21lbWFsaWduX2hvb2siCi0gICAgZmkKLSAgZmkKLWZpCi0KLUpFX0NPTVBJTEFCTEUo W3B0aHJlYWRzIGFkYXB0aXZlIG11dGV4ZXNdLCBbCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotXSwg WwotICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7Ci0gIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQo JmF0dHIpOwotICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVY X0FEQVBUSVZFX05QKTsKLSAgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmYXR0cik7Ci1dLCBb amVfY3ZfcHRocmVhZF9tdXRleF9hZGFwdGl2ZV9ucF0pCi1pZiB0ZXN0ICJ4JHtqZV9jdl9wdGhy ZWFkX211dGV4X2FkYXB0aXZlX25wfSIgPSAieHllcyIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVN QUxMT0NfSEFWRV9QVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QXSwgWyBdLCBbIF0pCi1maQotCi1K RV9DRkxBR1NfU0FWRSgpCi1KRV9DRkxBR1NfQUREKFstRF9HTlVfU09VUkNFXSkKLUpFX0NGTEFH U19BREQoWy1XZXJyb3JdKQotSkVfQ0ZMQUdTX0FERChbLWhlcnJvcl9vbl93YXJuaW5nXSkKLUpF X0NPTVBJTEFCTEUoW3N0cmVycm9yX3IgcmV0dXJucyBjaGFyIHdpdGggZ251IHNvdXJjZV0sIFsK LSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGli Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci1dLCBbCi0gIGNoYXIgKmJ1ZmZlciA9IChjaGFyICop IG1hbGxvYygxMDApOwotICBjaGFyICplcnJvciA9IHN0cmVycm9yX3IoRUlOVkFMLCBidWZmZXIs IDEwMCk7Ci0gIHByaW50ZigiJXNcbiIsIGVycm9yKTsKLV0sIFtqZV9jdl9zdHJlcnJvcl9yX3Jl dHVybnNfY2hhcl93aXRoX2dudV9zb3VyY2VdKQotSkVfQ0ZMQUdTX1JFU1RPUkUoKQotaWYgdGVz dCAieCR7amVfY3Zfc3RyZXJyb3Jfcl9yZXR1cm5zX2NoYXJfd2l0aF9nbnVfc291cmNlfSIgPSAi eHllcyIgOyB0aGVuCi0gIEFDX0RFRklORShbSkVNQUxMT0NfU1RSRVJST1JfUl9SRVRVUk5TX0NI QVJfV0lUSF9HTlVfU09VUkNFXSwgWyBdLCBbIF0pCi1maQotCi1kbmwgPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotZG5sIENoZWNrIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNo YXJhY3RlcmlzdGljcy4KLUFDX0hFQURFUl9TVERCT09MCi0KLWRubCA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci1kbmwgRGVmaW5lIGNvbW1hbmRzIHRoYXQgZ2VuZXJhdGUgb3V0cHV0IGZpbGVzLgotCi1B Q19DT05GSUdfQ09NTUFORFMoW2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3N5bWJv bHMudHh0XSwgWwotICBmPSIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJs aWNfc3ltYm9scy50eHQiCi0gIG1rZGlyIC1wICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbCIKLSAgY3AgL2Rldi9udWxsICIke2Z9IgotICBmb3Igbm0gaW4gYGVjaG8gJHttYW5n bGluZ19tYXB9IHx0ciAnLCcgJyAnYCA7IGRvCi0gICAgbj1gZWNobyAke25tfSB8dHIgJzonICcg JyB8YXdrICd7cHJpbnQgJFtdMX0nYAotICAgIG09YGVjaG8gJHtubX0gfHRyICc6JyAnICcgfGF3 ayAne3ByaW50ICRbXTJ9J2AKLSAgICBlY2hvICIke259OiR7bX0iID4+ICIke2Z9IgotICAgIGRu bCBSZW1vdmUgbmFtZSBmcm9tIHB1YmxpY19zeW1zIHNvIHRoYXQgaXQgaXNuJ3QgcmVkZWZpbmVk IGxhdGVyLgotICAgIHB1YmxpY19zeW1zPWBmb3Igc3ltIGluICR7cHVibGljX3N5bXN9OyBkbyBl Y2hvICIke3N5bX0iOyBkb25lIHxncmVwIC12ICJeJHtufVwkIiB8dHIgJ1xuJyAnICdgCi0gIGRv bmUKLSAgZm9yIHN5bSBpbiAke3B1YmxpY19zeW1zfSA7IGRvCi0gICAgbj0iJHtzeW19IgotICAg IG09IiR7SkVNQUxMT0NfUFJFRklYfSR7c3ltfSIKLSAgICBlY2hvICIke259OiR7bX0iID4+ICIk e2Z9IgotICBkb25lCi1dLCBbCi0gIHNyY2Rpcj0iJHtzcmNkaXJ9IgotICBvYmpyb290PSIke29i anJvb3R9IgotICBtYW5nbGluZ19tYXA9IiR7bWFuZ2xpbmdfbWFwfSIKLSAgcHVibGljX3N5bXM9 IiR7cHVibGljX3N5bXN9IgotICBKRU1BTExPQ19QUkVGSVg9IiR7SkVNQUxMT0NfUFJFRklYfSIK LV0pCi1BQ19DT05GSUdfQ09NTUFORFMoW2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0 ZV9zeW1ib2xzLmF3a10sIFsKLSAgZj0iJHtvYmpyb290fWluY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvcHJpdmF0ZV9zeW1ib2xzLmF3ayIKLSAgbWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsIgotICBleHBvcnRfc3ltcz1gZm9yIHN5bSBpbiAke3B1YmxpY19zeW1z fTsgZG8gZWNobyAiJHtKRU1BTExPQ19QUkVGSVh9JHtzeW19IjsgZG9uZTsgZm9yIHN5bSBpbiAk e3dyYXBfc3ltc307IGRvIGVjaG8gIiR7c3ltfSI7IGRvbmU7YAotICAiJHtzcmNkaXJ9L2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9zeW1ib2xzLnNoIiAiJHtTWU1fUFJFRklYfSIg JHtleHBvcnRfc3ltc30gPiAiJHtvYmpyb290fWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJp dmF0ZV9zeW1ib2xzLmF3ayIKLV0sIFsKLSAgc3JjZGlyPSIke3NyY2Rpcn0iCi0gIG9ianJvb3Q9 IiR7b2Jqcm9vdH0iCi0gIHB1YmxpY19zeW1zPSIke3B1YmxpY19zeW1zfSIKLSAgd3JhcF9zeW1z PSIke3dyYXBfc3ltc30iCi0gIFNZTV9QUkVGSVg9IiR7U1lNX1BSRUZJWH0iCi0gIEpFTUFMTE9D X1BSRUZJWD0iJHtKRU1BTExPQ19QUkVGSVh9IgotXSkKLUFDX0NPTkZJR19DT01NQU5EUyhbaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHNfamV0LmF3a10sIFsKLSAgZj0i JHtvYmpyb290fWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9zeW1ib2xzX2pldC5h d2siCi0gIG1rZGlyIC1wICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbCIKLSAg ZXhwb3J0X3N5bXM9YGZvciBzeW0gaW4gJHtwdWJsaWNfc3ltc307IGRvIGVjaG8gImpldF8ke3N5 bX0iOyBkb25lOyBmb3Igc3ltIGluICR7d3JhcF9zeW1zfTsgZG8gZWNobyAiJHtzeW19IjsgZG9u ZTtgCi0gICIke3NyY2Rpcn0vaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJv bHMuc2giICIke1NZTV9QUkVGSVh9IiAke2V4cG9ydF9zeW1zfSA+ICIke29ianJvb3R9aW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX3N5bWJvbHNfamV0LmF3ayIKLV0sIFsKLSAgc3Jj ZGlyPSIke3NyY2Rpcn0iCi0gIG9ianJvb3Q9IiR7b2Jqcm9vdH0iCi0gIHB1YmxpY19zeW1zPSIk e3B1YmxpY19zeW1zfSIKLSAgd3JhcF9zeW1zPSIke3dyYXBfc3ltc30iCi0gIFNZTV9QUkVGSVg9 IiR7U1lNX1BSRUZJWH0iCi1dKQotQUNfQ09ORklHX0NPTU1BTkRTKFtpbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL3B1YmxpY19uYW1lc3BhY2UuaF0sIFsKLSAgbWtkaXIgLXAgIiR7b2Jqcm9vdH1p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsIgotICAiJHtzcmNkaXJ9L2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5zaCIgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL3B1YmxpY19zeW1ib2xzLnR4dCIgPiAiJHtvYmpyb290fWluY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5oIgotXSwgWwotICBzcmNkaXI9IiR7c3JjZGly fSIKLSAgb2Jqcm9vdD0iJHtvYmpyb290fSIKLV0pCi1BQ19DT05GSUdfQ09NTUFORFMoW2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3VubmFtZXNwYWNlLmhdLCBbCi0gIG1rZGlyIC1w ICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbCIKLSAgIiR7c3JjZGlyfS9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3B1YmxpY191bm5hbWVzcGFjZS5zaCIgIiR7b2Jqcm9vdH1p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3B1YmxpY19zeW1ib2xzLnR4dCIgPiAiJHtvYmpyb290 fWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3VubmFtZXNwYWNlLmgiCi1dLCBbCi0g IHNyY2Rpcj0iJHtzcmNkaXJ9IgotICBvYmpyb290PSIke29ianJvb3R9IgotXSkKLUFDX0NPTkZJ R19DT01NQU5EUyhbaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90b3NfamV0LmhdLCBbCi0g IG1rZGlyIC1wICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYyIKLSAgY2F0ICIke3NyY2Rpcn0v aW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90b3MuaC5pbiIgfCBzZWQgLWUgJ3MvQGplX0Av amV0Xy9nJyA+ICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90b3NfamV0 LmgiCi1dLCBbCi0gIHNyY2Rpcj0iJHtzcmNkaXJ9IgotICBvYmpyb290PSIke29ianJvb3R9Igot XSkKLUFDX0NPTkZJR19DT01NQU5EUyhbaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUu aF0sIFsKLSAgbWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jIgotICAiJHtzcmNk aXJ9L2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcmVuYW1lLnNoIiAiJHtvYmpyb290fWluY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3N5bWJvbHMudHh0IiA+ICIke29ianJvb3R9aW5j bHVkZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuaCIKLV0sIFsKLSAgc3JjZGlyPSIke3NyY2Rp cn0iCi0gIG9ianJvb3Q9IiR7b2Jqcm9vdH0iCi1dKQotQUNfQ09ORklHX0NPTU1BTkRTKFtpbmNs dWRlL2plbWFsbG9jL2plbWFsbG9jX21hbmdsZS5oXSwgWwotICBta2RpciAtcCAiJHtvYmpyb290 fWluY2x1ZGUvamVtYWxsb2MiCi0gICIke3NyY2Rpcn0vaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxv Y19tYW5nbGUuc2giICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNf c3ltYm9scy50eHQiIGplXyA+ICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19t YW5nbGUuaCIKLV0sIFsKLSAgc3JjZGlyPSIke3NyY2Rpcn0iCi0gIG9ianJvb3Q9IiR7b2Jqcm9v dH0iCi1dKQotQUNfQ09ORklHX0NPTU1BTkRTKFtpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21h bmdsZV9qZXQuaF0sIFsKLSAgbWtkaXIgLXAgIiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jIgot ICAiJHtzcmNkaXJ9L2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlLnNoIiAiJHtvYmpy b290fWluY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3N5bWJvbHMudHh0IiBqZXRfID4g IiR7b2Jqcm9vdH1pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX21hbmdsZV9qZXQuaCIKLV0sIFsK LSAgc3JjZGlyPSIke3NyY2Rpcn0iCi0gIG9ianJvb3Q9IiR7b2Jqcm9vdH0iCi1dKQotQUNfQ09O RklHX0NPTU1BTkRTKFtpbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jLmhdLCBbCi0gIG1rZGlyIC1w ICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYyIKLSAgIiR7c3JjZGlyfS9pbmNsdWRlL2plbWFs bG9jL2plbWFsbG9jLnNoIiAiJHtvYmpyb290fSIgPiAiJHtvYmpyb290fWluY2x1ZGUvamVtYWxs b2MvamVtYWxsb2Mke2luc3RhbGxfc3VmZml4fS5oIgotXSwgWwotICBzcmNkaXI9IiR7c3JjZGly fSIKLSAgb2Jqcm9vdD0iJHtvYmpyb290fSIKLSAgaW5zdGFsbF9zdWZmaXg9IiR7aW5zdGFsbF9z dWZmaXh9IgotXSkKLQotZG5sIFByb2Nlc3MgLmluIGZpbGVzLgotQUNfU1VCU1QoW2NmZ2hkcnNf aW5dKQotQUNfU1VCU1QoW2NmZ2hkcnNfb3V0XSkKLUFDX0NPTkZJR19IRUFERVJTKFskY2ZnaGRy c190dXBdKQotCi1kbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZG5sIEdlbmVyYXRlIG91dHB1dHMu Ci0KLUFDX0NPTkZJR19GSUxFUyhbJGNmZ291dHB1dHNfdHVwIGNvbmZpZy5zdGFtcCBiaW4vamVt YWxsb2MtY29uZmlnIGJpbi9qZW1hbGxvYy5zaCBiaW4vamVwcm9mXSkKLUFDX1NVQlNUKFtjZmdv dXRwdXRzX2luXSkKLUFDX1NVQlNUKFtjZmdvdXRwdXRzX291dF0pCi1BQ19PVVRQVVQKLQotZG5s ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLWRubCBQcmludCBvdXQgdGhlIHJlc3VsdHMgb2YgY29uZmln dXJhdGlvbi4KLUFDX01TR19SRVNVTFQoWz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1dKQotQUNfTVNH X1JFU1VMVChbamVtYWxsb2MgdmVyc2lvbiAgIDogJHtqZW1hbGxvY192ZXJzaW9ufV0pCi1BQ19N U0dfUkVTVUxUKFtsaWJyYXJ5IHJldmlzaW9uICAgOiAke3Jldn1dKQotQUNfTVNHX1JFU1VMVChb XSkKLUFDX01TR19SRVNVTFQoW0NPTkZJRyAgICAgICAgICAgICA6ICR7Q09ORklHfV0pCi1BQ19N U0dfUkVTVUxUKFtDQyAgICAgICAgICAgICAgICAgOiAke0NDfV0pCi1BQ19NU0dfUkVTVUxUKFtD T05GSUdVUkVfQ0ZMQUdTICAgOiAke0NPTkZJR1VSRV9DRkxBR1N9XSkKLUFDX01TR19SRVNVTFQo W1NQRUNJRklFRF9DRkxBR1MgICA6ICR7U1BFQ0lGSUVEX0NGTEFHU31dKQotQUNfTVNHX1JFU1VM VChbRVhUUkFfQ0ZMQUdTICAgICAgIDogJHtFWFRSQV9DRkxBR1N9XSkKLUFDX01TR19SRVNVTFQo W0NQUEZMQUdTICAgICAgICAgICA6ICR7Q1BQRkxBR1N9XSkKLUFDX01TR19SRVNVTFQoW0NYWCAg ICAgICAgICAgICAgICA6ICR7Q1hYfV0pCi1BQ19NU0dfUkVTVUxUKFtDT05GSUdVUkVfQ1hYRkxB R1MgOiAke0NPTkZJR1VSRV9DWFhGTEFHU31dKQotQUNfTVNHX1JFU1VMVChbU1BFQ0lGSUVEX0NY WEZMQUdTIDogJHtTUEVDSUZJRURfQ1hYRkxBR1N9XSkKLUFDX01TR19SRVNVTFQoW0VYVFJBX0NY WEZMQUdTICAgICA6ICR7RVhUUkFfQ1hYRkxBR1N9XSkKLUFDX01TR19SRVNVTFQoW0xERkxBR1Mg ICAgICAgICAgICA6ICR7TERGTEFHU31dKQotQUNfTVNHX1JFU1VMVChbRVhUUkFfTERGTEFHUyAg ICAgIDogJHtFWFRSQV9MREZMQUdTfV0pCi1BQ19NU0dfUkVTVUxUKFtEU09fTERGTEFHUyAgICAg ICAgOiAke0RTT19MREZMQUdTfV0pCi1BQ19NU0dfUkVTVUxUKFtMSUJTICAgICAgICAgICAgICAg OiAke0xJQlN9XSkKLUFDX01TR19SRVNVTFQoW1JQQVRIX0VYVFJBICAgICAgICA6ICR7UlBBVEhf RVhUUkF9XSkKLUFDX01TR19SRVNVTFQoW10pCi1BQ19NU0dfUkVTVUxUKFtYU0xUUFJPQyAgICAg ICAgICAgOiAke1hTTFRQUk9DfV0pCi1BQ19NU0dfUkVTVUxUKFtYU0xST09UICAgICAgICAgICAg OiAke1hTTFJPT1R9XSkKLUFDX01TR19SRVNVTFQoW10pCi1BQ19NU0dfUkVTVUxUKFtQUkVGSVgg ICAgICAgICAgICAgOiAke1BSRUZJWH1dKQotQUNfTVNHX1JFU1VMVChbQklORElSICAgICAgICAg ICAgIDogJHtCSU5ESVJ9XSkKLUFDX01TR19SRVNVTFQoW0RBVEFESVIgICAgICAgICAgICA6ICR7 REFUQURJUn1dKQotQUNfTVNHX1JFU1VMVChbSU5DTFVERURJUiAgICAgICAgIDogJHtJTkNMVURF RElSfV0pCi1BQ19NU0dfUkVTVUxUKFtMSUJESVIgICAgICAgICAgICAgOiAke0xJQkRJUn1dKQot QUNfTVNHX1JFU1VMVChbTUFORElSICAgICAgICAgICAgIDogJHtNQU5ESVJ9XSkKLUFDX01TR19S RVNVTFQoW10pCi1BQ19NU0dfUkVTVUxUKFtzcmNyb290ICAgICAgICAgICAgOiAke3NyY3Jvb3R9 XSkKLUFDX01TR19SRVNVTFQoW2Fic19zcmNyb290ICAgICAgICA6ICR7YWJzX3NyY3Jvb3R9XSkK LUFDX01TR19SRVNVTFQoW29ianJvb3QgICAgICAgICAgICA6ICR7b2Jqcm9vdH1dKQotQUNfTVNH X1JFU1VMVChbYWJzX29ianJvb3QgICAgICAgIDogJHthYnNfb2Jqcm9vdH1dKQotQUNfTVNHX1JF U1VMVChbXSkKLUFDX01TR19SRVNVTFQoW0pFTUFMTE9DX1BSRUZJWCAgICA6ICR7SkVNQUxMT0Nf UFJFRklYfV0pCi1BQ19NU0dfUkVTVUxUKFtKRU1BTExPQ19QUklWQVRFX05BTUVTUEFDRV0pCi1B Q19NU0dfUkVTVUxUKFsgICAgICAgICAgICAgICAgICAgOiAke0pFTUFMTE9DX1BSSVZBVEVfTkFN RVNQQUNFfV0pCi1BQ19NU0dfUkVTVUxUKFtpbnN0YWxsX3N1ZmZpeCAgICAgOiAke2luc3RhbGxf c3VmZml4fV0pCi1BQ19NU0dfUkVTVUxUKFttYWxsb2NfY29uZiAgICAgICAgOiAke2NvbmZpZ19t YWxsb2NfY29uZn1dKQotQUNfTVNHX1JFU1VMVChbZG9jdW1lbnRhdGlvbiAgICAgIDogJHtlbmFi bGVfZG9jfV0pCi1BQ19NU0dfUkVTVUxUKFtzaGFyZWQgbGlicyAgICAgICAgOiAke2VuYWJsZV9z aGFyZWR9XSkKLUFDX01TR19SRVNVTFQoW3N0YXRpYyBsaWJzICAgICAgICA6ICR7ZW5hYmxlX3N0 YXRpY31dKQotQUNfTVNHX1JFU1VMVChbYXV0b2dlbiAgICAgICAgICAgIDogJHtlbmFibGVfYXV0 b2dlbn1dKQotQUNfTVNHX1JFU1VMVChbZGVidWcgICAgICAgICAgICAgIDogJHtlbmFibGVfZGVi dWd9XSkKLUFDX01TR19SRVNVTFQoW3N0YXRzICAgICAgICAgICAgICA6ICR7ZW5hYmxlX3N0YXRz fV0pCi1BQ19NU0dfUkVTVUxUKFtleHBlcmltZW50YWxfc21hbGxvY3ggOiAke2VuYWJsZV9leHBl cmltZW50YWxfc21hbGxvY3h9XSkKLUFDX01TR19SRVNVTFQoW3Byb2YgICAgICAgICAgICAgICA6 ICR7ZW5hYmxlX3Byb2Z9XSkKLUFDX01TR19SRVNVTFQoW3Byb2YtbGlidW53aW5kICAgICA6ICR7 ZW5hYmxlX3Byb2ZfbGlidW53aW5kfV0pCi1BQ19NU0dfUkVTVUxUKFtwcm9mLWxpYmdjYyAgICAg ICAgOiAke2VuYWJsZV9wcm9mX2xpYmdjY31dKQotQUNfTVNHX1JFU1VMVChbcHJvZi1nY2MgICAg ICAgICAgIDogJHtlbmFibGVfcHJvZl9nY2N9XSkKLUFDX01TR19SRVNVTFQoW2ZpbGwgICAgICAg ICAgICAgICA6ICR7ZW5hYmxlX2ZpbGx9XSkKLUFDX01TR19SRVNVTFQoW3V0cmFjZSAgICAgICAg ICAgICA6ICR7ZW5hYmxlX3V0cmFjZX1dKQotQUNfTVNHX1JFU1VMVChbeG1hbGxvYyAgICAgICAg ICAgIDogJHtlbmFibGVfeG1hbGxvY31dKQotQUNfTVNHX1JFU1VMVChbbG9nICAgICAgICAgICAg ICAgIDogJHtlbmFibGVfbG9nfV0pCi1BQ19NU0dfUkVTVUxUKFtsYXp5X2xvY2sgICAgICAgICAg OiAke2VuYWJsZV9sYXp5X2xvY2t9XSkKLUFDX01TR19SRVNVTFQoW2NhY2hlLW9ibGl2aW91cyAg ICA6ICR7ZW5hYmxlX2NhY2hlX29ibGl2aW91c31dKQotQUNfTVNHX1JFU1VMVChbY3h4ICAgICAg ICAgICAgICAgIDogJHtlbmFibGVfY3h4fV0pCi1BQ19NU0dfUkVTVUxUKFs9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09XSkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9kb2MvaHRtbC54c2wuaW4gYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9kb2MvaHRtbC54c2wuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVj NGZhNjUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvZG9jL2h0bWwueHNsLmluCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08eHNsOnN0 eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0i IHZlcnNpb249IjEuMCI+Ci0gIDx4c2w6aW1wb3J0IGhyZWY9IkBYU0xST09UQC9odG1sL2RvY2Jv b2sueHNsIi8+Ci0gIDx4c2w6aW1wb3J0IGhyZWY9IkBhYnNfc3Jjcm9vdEBkb2Mvc3R5bGVzaGVl dC54c2wiLz4KLSAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGVuY29kaW5nPSJ1dGYtOCIvPgot PC94c2w6c3R5bGVzaGVldD4KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9kb2MvamVtYWxsb2MueG1sLmluIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvZG9jL2plbWFsbG9jLnhtbC5pbgpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZTI4ZThmMy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9kb2MvamVtYWxsb2MueG1sLmluCisrKyAvZGV2L251bGwKQEAgLTEs Mzc2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPD94 bWwtc3R5bGVzaGVldCB0eXBlPSJ0ZXh0L3hzbCIKLSAgICAgICAgaHJlZj0iaHR0cDovL2RvY2Jv b2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQvbWFucGFnZXMvZG9jYm9vay54 c2wiPz4KLTwhRE9DVFlQRSByZWZlbnRyeSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBY TUwgVjQuNC8vRU4iCi0gICAgICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sv eG1sLzQuNC9kb2Nib29reC5kdGQiIFsKLV0+Ci0KLTxyZWZlbnRyeT4KLSAgPHJlZmVudHJ5aW5m bz4KLSAgICA8dGl0bGU+VXNlciBNYW51YWw8L3RpdGxlPgotICAgIDxwcm9kdWN0bmFtZT5qZW1h bGxvYzwvcHJvZHVjdG5hbWU+Ci0gICAgPHJlbGVhc2VpbmZvIHJvbGU9InZlcnNpb24iPkBqZW1h bGxvY192ZXJzaW9uQDwvcmVsZWFzZWluZm8+Ci0gICAgPGF1dGhvcmdyb3VwPgotICAgICAgPGF1 dGhvcj4KLSAgICAgICAgPGZpcnN0bmFtZT5KYXNvbjwvZmlyc3RuYW1lPgotICAgICAgICA8c3Vy bmFtZT5FdmFuczwvc3VybmFtZT4KLSAgICAgICAgPHBlcnNvbmJsdXJiPkF1dGhvcjwvcGVyc29u Ymx1cmI+Ci0gICAgICA8L2F1dGhvcj4KLSAgICA8L2F1dGhvcmdyb3VwPgotICA8L3JlZmVudHJ5 aW5mbz4KLSAgPHJlZm1ldGE+Ci0gICAgPHJlZmVudHJ5dGl0bGU+SkVNQUxMT0M8L3JlZmVudHJ5 dGl0bGU+Ci0gICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+Ci0gIDwvcmVmbWV0YT4KLSAgPHJl Zm5hbWVkaXY+Ci0gICAgPHJlZmRlc2NyaXB0b3I+amVtYWxsb2M8L3JlZmRlc2NyaXB0b3I+Ci0g ICAgPHJlZm5hbWU+amVtYWxsb2M8L3JlZm5hbWU+Ci0gICAgPCEtLSBFYWNoIHJlZm5hbWUgY2F1 c2VzIGEgbWFuIHBhZ2UgZmlsZSB0byBiZSBjcmVhdGVkLiAgT25seSBpZiB0aGlzIHdlcmUKLSAg ICAgICAgIHRoZSBzeXN0ZW0gbWFsbG9jKDMpIGltcGxlbWVudGF0aW9uIHdvdWxkIHRoZXNlIGZp bGVzIGJlIGFwcHJvcHJpYXRlLgotICAgIDxyZWZuYW1lPm1hbGxvYzwvcmVmbmFtZT4KLSAgICA8 cmVmbmFtZT5jYWxsb2M8L3JlZm5hbWU+Ci0gICAgPHJlZm5hbWU+cG9zaXhfbWVtYWxpZ248L3Jl Zm5hbWU+Ci0gICAgPHJlZm5hbWU+YWxpZ25lZF9hbGxvYzwvcmVmbmFtZT4KLSAgICA8cmVmbmFt ZT5yZWFsbG9jPC9yZWZuYW1lPgotICAgIDxyZWZuYW1lPmZyZWU8L3JlZm5hbWU+Ci0gICAgPHJl Zm5hbWU+bWFsbG9jeDwvcmVmbmFtZT4KLSAgICA8cmVmbmFtZT5yYWxsb2N4PC9yZWZuYW1lPgot ICAgIDxyZWZuYW1lPnhhbGxvY3g8L3JlZm5hbWU+Ci0gICAgPHJlZm5hbWU+c2FsbG9jeDwvcmVm bmFtZT4KLSAgICA8cmVmbmFtZT5kYWxsb2N4PC9yZWZuYW1lPgotICAgIDxyZWZuYW1lPnNkYWxs b2N4PC9yZWZuYW1lPgotICAgIDxyZWZuYW1lPm5hbGxvY3g8L3JlZm5hbWU+Ci0gICAgPHJlZm5h bWU+bWFsbGN0bDwvcmVmbmFtZT4KLSAgICA8cmVmbmFtZT5tYWxsY3RsbmFtZXRvbWliPC9yZWZu YW1lPgotICAgIDxyZWZuYW1lPm1hbGxjdGxieW1pYjwvcmVmbmFtZT4KLSAgICA8cmVmbmFtZT5t YWxsb2Nfc3RhdHNfcHJpbnQ8L3JlZm5hbWU+Ci0gICAgPHJlZm5hbWU+bWFsbG9jX3VzYWJsZV9z aXplPC9yZWZuYW1lPgotICAgIC0tPgotICAgIDxyZWZwdXJwb3NlPmdlbmVyYWwgcHVycG9zZSBt ZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnM8L3JlZnB1cnBvc2U+Ci0gIDwvcmVmbmFtZWRpdj4K LSAgPHJlZnNlY3QxIGlkPSJsaWJyYXJ5Ij4KLSAgICA8dGl0bGU+TElCUkFSWTwvdGl0bGU+Ci0g ICAgPHBhcmE+VGhpcyBtYW51YWwgZGVzY3JpYmVzIGplbWFsbG9jIEBqZW1hbGxvY192ZXJzaW9u QC4gIE1vcmUgaW5mb3JtYXRpb24KLSAgICBjYW4gYmUgZm91bmQgYXQgdGhlIDx1bGluawotICAg IHVybD0iaHR0cDovL2plbWFsbG9jLm5ldC8iPmplbWFsbG9jIHdlYnNpdGU8L3VsaW5rPi48L3Bh cmE+Ci0gIDwvcmVmc2VjdDE+Ci0gIDxyZWZzeW5vcHNpc2Rpdj4KLSAgICA8dGl0bGU+U1lOT1BT SVM8L3RpdGxlPgotICAgIDxmdW5jc3lub3BzaXM+Ci0gICAgICA8ZnVuY3N5bm9wc2lzaW5mbz4j aW5jbHVkZSAmbHQ7PGZpbGVuYW1lIGNsYXNzPSJoZWFkZXJmaWxlIj5qZW1hbGxvYy9qZW1hbGxv Yy5oPC9maWxlbmFtZT4mZ3Q7PC9mdW5jc3lub3BzaXNpbmZvPgotICAgICAgPHJlZnNlY3QyPgot ICAgICAgICA8dGl0bGU+U3RhbmRhcmQgQVBJPC90aXRsZT4KLSAgICAgICAgPGZ1bmNwcm90b3R5 cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9uPm1hbGxvYzwvZnVuY3Rpb24+ PC9mdW5jZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXplPC9w YXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgPC9mdW5jcHJvdG90eXBlPgotICAgICAgICA8 ZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgICA8ZnVuY2RlZj52b2lkICo8ZnVuY3Rpb24+Y2FsbG9j PC9mdW5jdGlvbj48L2Z1bmNkZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1l dGVyPm51bWJlcjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnNp emVfdCA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1 bmNwcm90b3R5cGU+Ci0gICAgICAgIDxmdW5jcHJvdG90eXBlPgotICAgICAgICAgIDxmdW5jZGVm PmludCA8ZnVuY3Rpb24+cG9zaXhfbWVtYWxpZ248L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAg ICAgICA8cGFyYW1kZWY+dm9pZCAqKjxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRl Zj4KLSAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+YWxpZ25tZW50PC9wYXJh bWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+ c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAg ICAgICAgPGZ1bmNwcm90b3R5cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9u PmFsaWduZWRfYWxsb2M8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+ c2l6ZV90IDxwYXJhbWV0ZXI+YWxpZ25tZW50PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAg ICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgPGZ1bmNwcm90b3R5cGU+Ci0g ICAgICAgICAgPGZ1bmNkZWY+dm9pZCAqPGZ1bmN0aW9uPnJlYWxsb2M8L2Z1bmN0aW9uPjwvZnVu Y2RlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgPC9mdW5jcHJvdG90eXBlPgotICAgICAg ICA8ZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgICA8ZnVuY2RlZj52b2lkIDxmdW5jdGlvbj5mcmVl PC9mdW5jdGlvbj48L2Z1bmNkZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0 ZXI+cHRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgPC9mdW5jcHJvdG90eXBlPgot ICAgICAgPC9yZWZzZWN0Mj4KLSAgICAgIDxyZWZzZWN0Mj4KLSAgICAgICAgPHRpdGxlPk5vbi1z dGFuZGFyZCBBUEk8L3RpdGxlPgotICAgICAgICA8ZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgICA8 ZnVuY2RlZj52b2lkICo8ZnVuY3Rpb24+bWFsbG9jeDwvZnVuY3Rpb24+PC9mdW5jZGVmPgotICAg ICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJh bWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1bmNwcm90b3R5cGU+Ci0gICAgICAgIDxmdW5jcHJv dG90eXBlPgotICAgICAgICAgIDxmdW5jZGVmPnZvaWQgKjxmdW5jdGlvbj5yYWxsb2N4PC9mdW5j dGlvbj48L2Z1bmNkZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+cHRy PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJh bWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPmlu dCA8cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgPC9mdW5j cHJvdG90eXBlPgotICAgICAgICA8ZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgICA8ZnVuY2RlZj5z aXplX3QgPGZ1bmN0aW9uPnhhbGxvY3g8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAgICAgICA8 cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAg ICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJh bWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+ZXh0cmE8L3BhcmFt ZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mbGFn czwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICAg ICAgPGZ1bmNwcm90b3R5cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+c2l6ZV90IDxmdW5jdGlvbj5z YWxsb2N4PC9mdW5jdGlvbj48L2Z1bmNkZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxw YXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+ aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1 bmNwcm90b3R5cGU+Ci0gICAgICAgIDxmdW5jcHJvdG90eXBlPgotICAgICAgICAgIDxmdW5jZGVm PnZvaWQgPGZ1bmN0aW9uPmRhbGxvY3g8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAgICAgICA8 cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAg ICAgICAgIDxwYXJhbWRlZj5pbnQgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgPGZ1bmNwcm90b3R5cGU+Ci0g ICAgICAgICAgPGZ1bmNkZWY+dm9pZCA8ZnVuY3Rpb24+c2RhbGxvY3g8L2Z1bmN0aW9uPjwvZnVu Y2RlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+aW50IDxwYXJhbWV0 ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1bmNwcm90b3R5cGU+ Ci0gICAgICAgIDxmdW5jcHJvdG90eXBlPgotICAgICAgICAgIDxmdW5jZGVmPnNpemVfdCA8ZnVu Y3Rpb24+bmFsbG9jeDwvZnVuY3Rpb24+PC9mdW5jZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5z aXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8 cGFyYW1kZWY+aW50IDxwYXJhbWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAg ICAgICA8L2Z1bmNwcm90b3R5cGU+Ci0gICAgICAgIDxmdW5jcHJvdG90eXBlPgotICAgICAgICAg IDxmdW5jZGVmPmludCA8ZnVuY3Rpb24+bWFsbGN0bDwvZnVuY3Rpb24+PC9mdW5jZGVmPgotICAg ICAgICAgIDxwYXJhbWRlZj5jb25zdCBjaGFyICo8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj48 L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1ldGVyPm9sZHA8L3Bh cmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgKjxwYXJhbWV0 ZXI+b2xkbGVucDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnZv aWQgKjxwYXJhbWV0ZXI+bmV3cDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBh cmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPm5ld2xlbjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0g ICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgPGZ1bmNwcm90b3R5cGU+Ci0gICAgICAg ICAgPGZ1bmNkZWY+aW50IDxmdW5jdGlvbj5tYWxsY3RsbmFtZXRvbWliPC9mdW5jdGlvbj48L2Z1 bmNkZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPmNvbnN0IGNoYXIgKjxwYXJhbWV0ZXI+bmFtZTwv cGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCAqPHBhcmFt ZXRlcj5taWJwPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+c2l6 ZV90ICo8cGFyYW1ldGVyPm1pYmxlbnA8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8 L2Z1bmNwcm90b3R5cGU+Ci0gICAgICAgIDxmdW5jcHJvdG90eXBlPgotICAgICAgICAgIDxmdW5j ZGVmPmludCA8ZnVuY3Rpb24+bWFsbGN0bGJ5bWliPC9mdW5jdGlvbj48L2Z1bmNkZWY+Ci0gICAg ICAgICAgPHBhcmFtZGVmPmNvbnN0IHNpemVfdCAqPHBhcmFtZXRlcj5taWI8L3BhcmFtZXRlcj48 L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5taWJsZW48 L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1l dGVyPm9sZHA8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXpl X3QgKjxwYXJhbWV0ZXI+b2xkbGVucDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAg PHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+bmV3cDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0g ICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPm5ld2xlbjwvcGFyYW1ldGVyPjwv cGFyYW1kZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgPGZ1bmNwcm90b3R5 cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+dm9pZCA8ZnVuY3Rpb24+bWFsbG9jX3N0YXRzX3ByaW50 PC9mdW5jdGlvbj48L2Z1bmNkZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnZvaWQgPHBhcmFtZXRl cj4oKndyaXRlX2NiKTwvcGFyYW1ldGVyPgotICAgICAgICAgICAgPGZ1bmNwYXJhbXM+dm9pZCAq LCBjb25zdCBjaGFyICo8L2Z1bmNwYXJhbXM+Ci0gICAgICAgICAgPC9wYXJhbWRlZj4KLSAgICAg ICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5jYm9wYXF1ZTwvcGFyYW1ldGVyPjwvcGFy YW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPmNvbnN0IGNoYXIgKjxwYXJhbWV0ZXI+b3B0czwv cGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT4KLSAgICAgICAg PGZ1bmNwcm90b3R5cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+c2l6ZV90IDxmdW5jdGlvbj5tYWxs b2NfdXNhYmxlX3NpemU8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+ Y29uc3Qgdm9pZCAqPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAg ICA8L2Z1bmNwcm90b3R5cGU+Ci0gICAgICAgIDxmdW5jcHJvdG90eXBlPgotICAgICAgICAgIDxm dW5jZGVmPnZvaWQgPGZ1bmN0aW9uPigqbWFsbG9jX21lc3NhZ2UpPC9mdW5jdGlvbj48L2Z1bmNk ZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+Y2JvcGFxdWU8L3BhcmFt ZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5jb25zdCBjaGFyICo8cGFyYW1l dGVyPnM8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1bmNwcm90b3R5cGU+Ci0g ICAgICAgIDxwYXJhPjx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT48dmFybmFtZT5tYWxsb2NfY29u ZjwvdmFybmFtZT47PC9wYXJhPgotICAgICAgPC9yZWZzZWN0Mj4KLSAgICA8L2Z1bmNzeW5vcHNp cz4KLSAgPC9yZWZzeW5vcHNpc2Rpdj4KLSAgPHJlZnNlY3QxIGlkPSJkZXNjcmlwdGlvbiI+Ci0g ICAgPHRpdGxlPkRFU0NSSVBUSU9OPC90aXRsZT4KLSAgICA8cmVmc2VjdDI+Ci0gICAgICA8dGl0 bGU+U3RhbmRhcmQgQVBJPC90aXRsZT4KLQotICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5tYWxs b2MoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGFsbG9jYXRlcwotICAgICAgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+IGJ5dGVzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiAgVGhlIGFsbG9jYXRl ZAotICAgICAgc3BhY2UgaXMgc3VpdGFibHkgYWxpZ25lZCAoYWZ0ZXIgcG9zc2libGUgcG9pbnRl ciBjb2VyY2lvbikgZm9yIHN0b3JhZ2UKLSAgICAgIG9mIGFueSB0eXBlIG9mIG9iamVjdC48L3Bh cmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+Y2FsbG9jKCk8L2Z1bmN0aW9uPiBmdW5j dGlvbiBhbGxvY2F0ZXMKLSAgICAgIHNwYWNlIGZvciA8cGFyYW1ldGVyPm51bWJlcjwvcGFyYW1l dGVyPiBvYmplY3RzLCBlYWNoCi0gICAgICA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0 ZXMgaW4gbGVuZ3RoLiAgVGhlIHJlc3VsdCBpcyBpZGVudGljYWwgdG8KLSAgICAgIGNhbGxpbmcg PGZ1bmN0aW9uPm1hbGxvYygpPC9mdW5jdGlvbj4gd2l0aCBhbiBhcmd1bWVudCBvZgotICAgICAg PHBhcmFtZXRlcj5udW1iZXI8L3BhcmFtZXRlcj4gKiA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRl cj4sIHdpdGggdGhlCi0gICAgICBleGNlcHRpb24gdGhhdCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBp cyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8KLSAgICAgIGJ5dGVzLjwvcGFyYT4KLQot ICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5wb3NpeF9tZW1hbGlnbigpPC9mdW5jdGlvbj4gZnVu Y3Rpb24KLSAgICAgIGFsbG9jYXRlcyA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0ZXMg b2YgbWVtb3J5IHN1Y2ggdGhhdCB0aGUKLSAgICAgIGFsbG9jYXRpb24ncyBiYXNlIGFkZHJlc3Mg aXMgYSBtdWx0aXBsZSBvZgotICAgICAgPHBhcmFtZXRlcj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4s IGFuZCByZXR1cm5zIHRoZSBhbGxvY2F0aW9uIGluIHRoZSB2YWx1ZQotICAgICAgcG9pbnRlZCB0 byBieSA8cGFyYW1ldGVyPnB0cjwvcGFyYW1ldGVyPi4gIFRoZSByZXF1ZXN0ZWQKLSAgICAgIDxw YXJhbWV0ZXI+YWxpZ25tZW50PC9wYXJhbWV0ZXI+IG11c3QgYmUgYSBwb3dlciBvZiAyIGF0IGxl YXN0IGFzIGxhcmdlIGFzCi0gICAgICA8Y29kZSBsYW5ndWFnZT0iQyI+c2l6ZW9mKDx0eXBlPnZv aWQgKjwvdHlwZT4pPC9jb2RlPi48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+ YWxpZ25lZF9hbGxvYygpPC9mdW5jdGlvbj4gZnVuY3Rpb24KLSAgICAgIGFsbG9jYXRlcyA8cGFy YW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0ZXMgb2YgbWVtb3J5IHN1Y2ggdGhhdCB0aGUKLSAg ICAgIGFsbG9jYXRpb24ncyBiYXNlIGFkZHJlc3MgaXMgYSBtdWx0aXBsZSBvZgotICAgICAgPHBh cmFtZXRlcj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4uICBUaGUgcmVxdWVzdGVkCi0gICAgICA8cGFy YW1ldGVyPmFsaWdubWVudDwvcGFyYW1ldGVyPiBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gIEJlaGF2 aW9yIGlzCi0gICAgICB1bmRlZmluZWQgaWYgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGlz IG5vdCBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZgotICAgICAgPHBhcmFtZXRlcj5hbGlnbm1lbnQ8 L3BhcmFtZXRlcj4uPC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnJlYWxsb2Mo KTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNoYW5nZXMgdGhlCi0gICAgICBzaXplIG9mIHRoZSBwcmV2 aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgcmVmZXJlbmNlZCBieQotICAgICAgPHBhcmFtZXRlcj5w dHI8L3BhcmFtZXRlcj4gdG8gPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGJ5dGVzLiAgVGhl Ci0gICAgICBjb250ZW50cyBvZiB0aGUgbWVtb3J5IGFyZSB1bmNoYW5nZWQgdXAgdG8gdGhlIGxl c3NlciBvZiB0aGUgbmV3IGFuZCBvbGQKLSAgICAgIHNpemVzLiAgSWYgdGhlIG5ldyBzaXplIGlz IGxhcmdlciwgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQKLSAgICAgIHBvcnRp b24gb2YgdGhlIG1lbW9yeSBhcmUgdW5kZWZpbmVkLiAgVXBvbiBzdWNjZXNzLCB0aGUgbWVtb3J5 IHJlZmVyZW5jZWQKLSAgICAgIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IGlzIGZyZWVk IGFuZCBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5Ci0gICAgICBhbGxvY2F0ZWQgbWVtb3J5IGlzIHJl dHVybmVkLiAgTm90ZSB0aGF0Ci0gICAgICA8ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4g bWF5IG1vdmUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLAotICAgICAgcmVzdWx0aW5nIGluIGEgZGlm ZmVyZW50IHJldHVybiB2YWx1ZSB0aGFuIDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+LgotICAg ICAgSWYgPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj4gaXMgPGNvbnN0YW50Pk5VTEw8L2NvbnN0 YW50PiwgdGhlCi0gICAgICA8ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4gZnVuY3Rpb24g YmVoYXZlcyBpZGVudGljYWxseSB0bwotICAgICAgPGZ1bmN0aW9uPm1hbGxvYygpPC9mdW5jdGlv bj4gZm9yIHRoZSBzcGVjaWZpZWQgc2l6ZS48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVu Y3Rpb24+ZnJlZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gY2F1c2VzIHRoZQotICAgICAgYWxsb2Nh dGVkIG1lbW9yeSByZWZlcmVuY2VkIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IHRvIGJl IG1hZGUKLSAgICAgIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLiAgSWYgPHBhcmFt ZXRlcj5wdHI8L3BhcmFtZXRlcj4gaXMKLSAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4s IG5vIGFjdGlvbiBvY2N1cnMuPC9wYXJhPgotICAgIDwvcmVmc2VjdDI+Ci0gICAgPHJlZnNlY3Qy PgotICAgICAgPHRpdGxlPk5vbi1zdGFuZGFyZCBBUEk8L3RpdGxlPgotICAgICAgPHBhcmE+VGhl IDxmdW5jdGlvbj5tYWxsb2N4KCk8L2Z1bmN0aW9uPiwKLSAgICAgIDxmdW5jdGlvbj5yYWxsb2N4 KCk8L2Z1bmN0aW9uPiwKLSAgICAgIDxmdW5jdGlvbj54YWxsb2N4KCk8L2Z1bmN0aW9uPiwKLSAg ICAgIDxmdW5jdGlvbj5zYWxsb2N4KCk8L2Z1bmN0aW9uPiwKLSAgICAgIDxmdW5jdGlvbj5kYWxs b2N4KCk8L2Z1bmN0aW9uPiwKLSAgICAgIDxmdW5jdGlvbj5zZGFsbG9jeCgpPC9mdW5jdGlvbj4s IGFuZAotICAgICAgPGZ1bmN0aW9uPm5hbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBhbGwg aGF2ZSBhCi0gICAgICA8cGFyYW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IHRoYXQg Y2FuIGJlIHVzZWQgdG8gc3BlY2lmeQotICAgICAgb3B0aW9ucy4gIFRoZSBmdW5jdGlvbnMgb25s eSBjaGVjayB0aGUgb3B0aW9ucyB0aGF0IGFyZSBjb250ZXh0dWFsbHkKLSAgICAgIHJlbGV2YW50 LiAgVXNlIGJpdHdpc2Ugb3IgKDxjb2RlIGxhbmd1YWdlPSJDIj58PC9jb2RlPikgb3BlcmF0aW9u cyB0bwotICAgICAgc3BlY2lmeSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgotICAgICAg ICA8dmFyaWFibGVsaXN0PgotICAgICAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Ik1BTExPQ1hfTEdf QUxJR04iPgotICAgICAgICAgICAgPHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfTEdfQUxJR04oPHBh cmFtZXRlcj5sYTwvcGFyYW1ldGVyPikKLSAgICAgICAgICAgIDwvY29uc3RhbnQ+PC90ZXJtPgot Ci0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QWxpZ24gdGhlIG1lbW9yeSBhbGxvY2F0aW9u IHRvIHN0YXJ0IGF0IGFuIGFkZHJlc3MKLSAgICAgICAgICAgIHRoYXQgaXMgYSBtdWx0aXBsZSBv ZiA8Y29kZSBsYW5ndWFnZT0iQyI+KDEgJmx0OyZsdDsKLSAgICAgICAgICAgIDxwYXJhbWV0ZXI+ bGE8L3BhcmFtZXRlcj4pPC9jb2RlPi4gIFRoaXMgbWFjcm8gZG9lcyBub3QgdmFsaWRhdGUKLSAg ICAgICAgICAgIHRoYXQgPHBhcmFtZXRlcj5sYTwvcGFyYW1ldGVyPiBpcyB3aXRoaW4gdGhlIHZh bGlkCi0gICAgICAgICAgICByYW5nZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8L3Zh cmxpc3RlbnRyeT4KLSAgICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJNQUxMT0NYX0FMSUdOIj4K LSAgICAgICAgICAgIDx0ZXJtPjxjb25zdGFudD5NQUxMT0NYX0FMSUdOKDxwYXJhbWV0ZXI+YTwv cGFyYW1ldGVyPikKLSAgICAgICAgICAgIDwvY29uc3RhbnQ+PC90ZXJtPgotCi0gICAgICAgICAg ICA8bGlzdGl0ZW0+PHBhcmE+QWxpZ24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHRvIHN0YXJ0IGF0 IGFuIGFkZHJlc3MKLSAgICAgICAgICAgIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiA8cGFyYW1ldGVy PmE8L3BhcmFtZXRlcj4sIHdoZXJlCi0gICAgICAgICAgICA8cGFyYW1ldGVyPmE8L3BhcmFtZXRl cj4gaXMgYSBwb3dlciBvZiB0d28uICBUaGlzIG1hY3JvIGRvZXMgbm90Ci0gICAgICAgICAgICB2 YWxpZGF0ZSB0aGF0IDxwYXJhbWV0ZXI+YTwvcGFyYW1ldGVyPiBpcyBhIHBvd2VyIG9mIDIuCi0g ICAgICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4K LSAgICAgICAgICA8dmFybGlzdGVudHJ5IGlkPSJNQUxMT0NYX1pFUk8iPgotICAgICAgICAgICAg PHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfWkVSTzwvY29uc3RhbnQ+PC90ZXJtPgotCi0gICAgICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+SW5pdGlhbGl6ZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IHRv IGNvbnRhaW4gemVybwotICAgICAgICAgICAgYnl0ZXMuICBJbiB0aGUgZ3Jvd2luZyByZWFsbG9j YXRpb24gY2FzZSwgdGhlIHJlYWwgc2l6ZSBwcmlvciB0bwotICAgICAgICAgICAgcmVhbGxvY2F0 aW9uIGRlZmluZXMgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdW50b3VjaGVkIGJ5dGVzIGFuZCB0aG9z ZQotICAgICAgICAgICAgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgdG8gY29udGFpbiB6ZXJvIGJ5dGVz LiAgSWYgdGhpcyBtYWNybyBpcwotICAgICAgICAgICAgYWJzZW50LCBuZXdseSBhbGxvY2F0ZWQg bWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPC92 YXJsaXN0ZW50cnk+Ci0gICAgICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iTUFMTE9DWF9UQ0FDSEUi PgotICAgICAgICAgICAgPHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfVENBQ0hFKDxwYXJhbWV0ZXI+ dGM8L3BhcmFtZXRlcj4pCi0gICAgICAgICAgICA8L2NvbnN0YW50PjwvdGVybT4KLQotICAgICAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlVzZSB0aGUgdGhyZWFkLXNwZWNpZmljIGNhY2hlICh0Y2Fj aGUpIHNwZWNpZmllZCBieQotICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgPHBhcmFtZXRlcj50 YzwvcGFyYW1ldGVyPiwgd2hpY2ggbXVzdCBoYXZlIGJlZW4KLSAgICAgICAgICAgIGFjcXVpcmVk IHZpYSB0aGUgPGxpbmsKLSAgICAgICAgICAgIGxpbmtlbmQ9InRjYWNoZS5jcmVhdGUiPjxtYWxs Y3RsPnRjYWNoZS5jcmVhdGU8L21hbGxjdGw+PC9saW5rPgotICAgICAgICAgICAgbWFsbGN0bC4g IFRoaXMgbWFjcm8gZG9lcyBub3QgdmFsaWRhdGUgdGhhdAotICAgICAgICAgICAgPHBhcmFtZXRl cj50YzwvcGFyYW1ldGVyPiBzcGVjaWZpZXMgYSB2YWxpZAotICAgICAgICAgICAgaWRlbnRpZmll ci48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgICAg ICA8dmFybGlzdGVudHJ5IGlkPSJNQUxMT0NfVENBQ0hFX05PTkUiPgotICAgICAgICAgICAgPHRl cm0+PGNvbnN0YW50Pk1BTExPQ1hfVENBQ0hFX05PTkU8L2NvbnN0YW50PjwvdGVybT4KLQotICAg ICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRvIG5vdCB1c2UgYSB0aHJlYWQtc3BlY2lmaWMgY2Fj aGUgKHRjYWNoZSkuICBVbmxlc3MKLSAgICAgICAgICAgIDxjb25zdGFudD5NQUxMT0NYX1RDQUNI RSg8cGFyYW1ldGVyPnRjPC9wYXJhbWV0ZXI+KTwvY29uc3RhbnQ+IG9yCi0gICAgICAgICAgICA8 Y29uc3RhbnQ+TUFMTE9DWF9UQ0FDSEVfTk9ORTwvY29uc3RhbnQ+IGlzIHNwZWNpZmllZCwgYW4K LSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCB0Y2FjaGUgd2lsbCBiZSB1c2VkIHVu ZGVyIG1hbnkgY2lyY3Vtc3RhbmNlcy4KLSAgICAgICAgICAgIFRoaXMgbWFjcm8gY2Fubm90IGJl IHVzZWQgaW4gdGhlIHNhbWUgPHBhcmFtZXRlcj5mbGFnczwvcGFyYW1ldGVyPgotICAgICAgICAg ICAgYXJndW1lbnQgYXMKLSAgICAgICAgICAgIDxjb25zdGFudD5NQUxMT0NYX1RDQUNIRSg8cGFy YW1ldGVyPnRjPC9wYXJhbWV0ZXI+KTwvY29uc3RhbnQ+LjwvcGFyYT48L2xpc3RpdGVtPgotICAg ICAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Ik1BTExP Q1hfQVJFTkEiPgotICAgICAgICAgICAgPHRlcm0+PGNvbnN0YW50Pk1BTExPQ1hfQVJFTkEoPHBh cmFtZXRlcj5hPC9wYXJhbWV0ZXI+KQotICAgICAgICAgICAgPC9jb25zdGFudD48L3Rlcm0+Ci0K LSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgdGhlIGFyZW5hIHNwZWNpZmllZCBieSB0 aGUgaW5kZXgKLSAgICAgICAgICAgIDxwYXJhbWV0ZXI+YTwvcGFyYW1ldGVyPi4gIFRoaXMgbWFj cm8gaGFzIG5vIGVmZmVjdCBmb3IgcmVnaW9ucyB0aGF0Ci0gICAgICAgICAgICB3ZXJlIGFsbG9j YXRlZCB2aWEgYW4gYXJlbmEgb3RoZXIgdGhhbiB0aGUgb25lIHNwZWNpZmllZC4gIFRoaXMKLSAg ICAgICAgICAgIG1hY3JvIGRvZXMgbm90IHZhbGlkYXRlIHRoYXQgPHBhcmFtZXRlcj5hPC9wYXJh bWV0ZXI+IHNwZWNpZmllcyBhbgotICAgICAgICAgICAgYXJlbmEgaW5kZXggaW4gdGhlIHZhbGlk IHJhbmdlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgIDwvdmFybGlzdGVudHJ5PgotICAg ICAgICA8L3ZhcmlhYmxlbGlzdD4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+VGhlIDxm dW5jdGlvbj5tYWxsb2N4KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBhbGxvY2F0ZXMgYXQKLSAgICAg IGxlYXN0IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPiBieXRlcyBvZiBtZW1vcnksIGFuZCBy ZXR1cm5zIGEgcG9pbnRlcgotICAgICAgdG8gdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgYWxsb2Nh dGlvbi4gIEJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZgotICAgICAgPHBhcmFtZXRlcj5zaXplPC9w YXJhbWV0ZXI+IGlzIDxjb25zdGFudD4wPC9jb25zdGFudD4uPC9wYXJhPgotCi0gICAgICA8cGFy YT5UaGUgPGZ1bmN0aW9uPnJhbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHJlc2l6ZXMgdGhl Ci0gICAgICBhbGxvY2F0aW9uIGF0IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IHRvIGJlIGF0 IGxlYXN0Ci0gICAgICA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYnl0ZXMsIGFuZCByZXR1 cm5zIGEgcG9pbnRlciB0byB0aGUgYmFzZQotICAgICAgYWRkcmVzcyBvZiB0aGUgcmVzdWx0aW5n IGFsbG9jYXRpb24sIHdoaWNoIG1heSBvciBtYXkgbm90IGhhdmUgbW92ZWQgZnJvbQotICAgICAg aXRzIG9yaWdpbmFsIGxvY2F0aW9uLiAgQmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmCi0gICAgICA8 cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgPGNvbnN0YW50PjA8L2NvbnN0YW50Pi48L3Bh cmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+eGFsbG9jeCgpPC9mdW5jdGlvbj4gZnVu Y3Rpb24gcmVzaXplcyB0aGUKLSAgICAgIGFsbG9jYXRpb24gYXQgPHBhcmFtZXRlcj5wdHI8L3Bh cmFtZXRlcj4gaW4gcGxhY2UgdG8gYmUgYXQgbGVhc3QKLSAgICAgIDxwYXJhbWV0ZXI+c2l6ZTwv cGFyYW1ldGVyPiBieXRlcywgYW5kIHJldHVybnMgdGhlIHJlYWwgc2l6ZSBvZiB0aGUKLSAgICAg IGFsbG9jYXRpb24uICBJZiA8cGFyYW1ldGVyPmV4dHJhPC9wYXJhbWV0ZXI+IGlzIG5vbi16ZXJv LCBhbiBhdHRlbXB0IGlzCi0gICAgICBtYWRlIHRvIHJlc2l6ZSB0aGUgYWxsb2NhdGlvbiB0byBi ZSBhdCBsZWFzdCA8Y29kZQotICAgICAgbGFuZ3VhZ2U9IkMiPig8cGFyYW1ldGVyPnNpemU8L3Bh cmFtZXRlcj4gKwotICAgICAgPHBhcmFtZXRlcj5leHRyYTwvcGFyYW1ldGVyPik8L2NvZGU+IGJ5 dGVzLCB0aG91Z2ggaW5hYmlsaXR5IHRvIGFsbG9jYXRlCi0gICAgICB0aGUgZXh0cmEgYnl0ZShz KSB3aWxsIG5vdCBieSBpdHNlbGYgcmVzdWx0IGluIGZhaWx1cmUgdG8gcmVzaXplLgotICAgICAg QmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPiBpcwot ICAgICAgPGNvbnN0YW50PjA8L2NvbnN0YW50Piwgb3IgaWYgPGNvZGUKLSAgICAgIGxhbmd1YWdl PSJDIj4oPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+ICsgPHBhcmFtZXRlcj5leHRyYTwvcGFy YW1ldGVyPgotICAgICAgJmd0OyA8Y29uc3RhbnQ+U0laRV9UX01BWDwvY29uc3RhbnQ+KTwvY29k ZT4uPC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnNhbGxvY3goKTwvZnVuY3Rp b24+IGZ1bmN0aW9uIHJldHVybnMgdGhlCi0gICAgICByZWFsIHNpemUgb2YgdGhlIGFsbG9jYXRp b24gYXQgPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj4uPC9wYXJhPgotCi0gICAgICA8cGFyYT5U aGUgPGZ1bmN0aW9uPmRhbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNhdXNlcyB0aGUKLSAg ICAgIG1lbW9yeSByZWZlcmVuY2VkIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+IHRvIGJl IG1hZGUgYXZhaWxhYmxlIGZvcgotICAgICAgZnV0dXJlIGFsbG9jYXRpb25zLjwvcGFyYT4KLQot ICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5zZGFsbG9jeCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24g aXMgYW4KLSAgICAgIGV4dGVuc2lvbiBvZiA8ZnVuY3Rpb24+ZGFsbG9jeCgpPC9mdW5jdGlvbj4g d2l0aCBhCi0gICAgICA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIHRvIGFs bG93IHRoZSBjYWxsZXIgdG8gcGFzcyBpbiB0aGUKLSAgICAgIGFsbG9jYXRpb24gc2l6ZSBhcyBh biBvcHRpbWl6YXRpb24uICBUaGUgbWluaW11bSB2YWxpZCBpbnB1dCBzaXplIGlzIHRoZQotICAg ICAgb3JpZ2luYWwgcmVxdWVzdGVkIHNpemUgb2YgdGhlIGFsbG9jYXRpb24sIGFuZCB0aGUgbWF4 aW11bSB2YWxpZCBpbnB1dAotICAgICAgc2l6ZSBpcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBy ZXR1cm5lZCBieQotICAgICAgPGZ1bmN0aW9uPm5hbGxvY3goKTwvZnVuY3Rpb24+IG9yCi0gICAg ICA8ZnVuY3Rpb24+c2FsbG9jeCgpPC9mdW5jdGlvbj4uPC9wYXJhPgotCi0gICAgICA8cGFyYT5U aGUgPGZ1bmN0aW9uPm5hbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGFsbG9jYXRlcyBubwot ICAgICAgbWVtb3J5LCBidXQgaXQgcGVyZm9ybXMgdGhlIHNhbWUgc2l6ZSBjb21wdXRhdGlvbiBh cyB0aGUKLSAgICAgIDxmdW5jdGlvbj5tYWxsb2N4KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgYW5k IHJldHVybnMgdGhlIHJlYWwKLSAgICAgIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gdGhhdCB3b3Vs ZCByZXN1bHQgZnJvbSB0aGUgZXF1aXZhbGVudAotICAgICAgPGZ1bmN0aW9uPm1hbGxvY3goKTwv ZnVuY3Rpb24+IGZ1bmN0aW9uIGNhbGwsIG9yCi0gICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+ IGlmIHRoZSBpbnB1dHMgZXhjZWVkIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBzaXplCi0gICAgICBj bGFzcyBhbmQvb3IgYWxpZ25tZW50LiAgQmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmCi0gICAgICA8 cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgPGNvbnN0YW50PjA8L2NvbnN0YW50Pi48L3Bh cmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bWFsbGN0bCgpPC9mdW5jdGlvbj4gZnVu Y3Rpb24gcHJvdmlkZXMgYQotICAgICAgZ2VuZXJhbCBpbnRlcmZhY2UgZm9yIGludHJvc3BlY3Rp bmcgdGhlIG1lbW9yeSBhbGxvY2F0b3IsIGFzIHdlbGwgYXMKLSAgICAgIHNldHRpbmcgbW9kaWZp YWJsZSBwYXJhbWV0ZXJzIGFuZCB0cmlnZ2VyaW5nIGFjdGlvbnMuICBUaGUKLSAgICAgIHBlcmlv ZC1zZXBhcmF0ZWQgPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IHNwZWNpZmll cyBhCi0gICAgICBsb2NhdGlvbiBpbiBhIHRyZWUtc3RydWN0dXJlZCBuYW1lc3BhY2U7IHNlZSB0 aGUgPHhyZWYKLSAgICAgIGxpbmtlbmQ9Im1hbGxjdGxfbmFtZXNwYWNlIiB4cmVmc3R5bGU9InRl bXBsYXRlOiV0Ii8+IHNlY3Rpb24gZm9yCi0gICAgICBkb2N1bWVudGF0aW9uIG9uIHRoZSB0cmVl IGNvbnRlbnRzLiAgVG8gcmVhZCBhIHZhbHVlLCBwYXNzIGEgcG9pbnRlciB2aWEKLSAgICAgIDxw YXJhbWV0ZXI+b2xkcDwvcGFyYW1ldGVyPiB0byBhZGVxdWF0ZSBzcGFjZSB0byBjb250YWluIHRo ZSB2YWx1ZSwgYW5kIGEKLSAgICAgIHBvaW50ZXIgdG8gaXRzIGxlbmd0aCB2aWEgPHBhcmFtZXRl cj5vbGRsZW5wPC9wYXJhbWV0ZXI+OyBvdGhlcndpc2UgcGFzcwotICAgICAgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50Pk5VTEw8L2NvbnN0YW50Pi4gIFNpbWlsYXJseSwg dG8KLSAgICAgIHdyaXRlIGEgdmFsdWUsIHBhc3MgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSB2aWEK LSAgICAgIDxwYXJhbWV0ZXI+bmV3cDwvcGFyYW1ldGVyPiwgYW5kIGl0cyBsZW5ndGggdmlhCi0g ICAgICA8cGFyYW1ldGVyPm5ld2xlbjwvcGFyYW1ldGVyPjsgb3RoZXJ3aXNlIHBhc3MgPGNvbnN0 YW50Pk5VTEw8L2NvbnN0YW50PgotICAgICAgYW5kIDxjb25zdGFudD4wPC9jb25zdGFudD4uPC9w YXJhPgotCi0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1hbGxjdGxuYW1ldG9taWIoKTwvZnVu Y3Rpb24+IGZ1bmN0aW9uCi0gICAgICBwcm92aWRlcyBhIHdheSB0byBhdm9pZCByZXBlYXRlZCBu YW1lIGxvb2t1cHMgZm9yIGFwcGxpY2F0aW9ucyB0aGF0Ci0gICAgICByZXBlYXRlZGx5IHF1ZXJ5 IHRoZSBzYW1lIHBvcnRpb24gb2YgdGhlIG5hbWVzcGFjZSwgYnkgdHJhbnNsYXRpbmcgYSBuYW1l Ci0gICAgICB0byBhIDxxdW90ZT5NYW5hZ2VtZW50IEluZm9ybWF0aW9uIEJhc2U8L3F1b3RlPiAo TUlCKSB0aGF0IGNhbiBiZSBwYXNzZWQKLSAgICAgIHJlcGVhdGVkbHkgdG8gPGZ1bmN0aW9uPm1h bGxjdGxieW1pYigpPC9mdW5jdGlvbj4uICBVcG9uCi0gICAgICBzdWNjZXNzZnVsIHJldHVybiBm cm9tIDxmdW5jdGlvbj5tYWxsY3RsbmFtZXRvbWliKCk8L2Z1bmN0aW9uPiwKLSAgICAgIDxwYXJh bWV0ZXI+bWlicDwvcGFyYW1ldGVyPiBjb250YWlucyBhbiBhcnJheSBvZgotICAgICAgPHBhcmFt ZXRlcj4qbWlibGVucDwvcGFyYW1ldGVyPiBpbnRlZ2Vycywgd2hlcmUKLSAgICAgIDxwYXJhbWV0 ZXI+Km1pYmxlbnA8L3BhcmFtZXRlcj4gaXMgdGhlIGxlc3NlciBvZiB0aGUgbnVtYmVyIG9mIGNv bXBvbmVudHMKLSAgICAgIGluIDxwYXJhbWV0ZXI+bmFtZTwvcGFyYW1ldGVyPiBhbmQgdGhlIGlu cHV0IHZhbHVlIG9mCi0gICAgICA8cGFyYW1ldGVyPiptaWJsZW5wPC9wYXJhbWV0ZXI+LiAgVGh1 cyBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEKLSAgICAgIDxwYXJhbWV0ZXI+Km1pYmxlbnA8L3Bh cmFtZXRlcj4gdGhhdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZgotICAgICAgcGVyaW9k LXNlcGFyYXRlZCBuYW1lIGNvbXBvbmVudHMsIHdoaWNoIHJlc3VsdHMgaW4gYSBwYXJ0aWFsIE1J QiB0aGF0IGNhbgotICAgICAgYmUgdXNlZCBhcyB0aGUgYmFzaXMgZm9yIGNvbnN0cnVjdGluZyBh IGNvbXBsZXRlIE1JQi4gIEZvciBuYW1lCi0gICAgICBjb21wb25lbnRzIHRoYXQgYXJlIGludGVn ZXJzIChlLmcuIHRoZSAyIGluCi0gICAgICA8bGluawotICAgICAgbGlua2VuZD0iYXJlbmFzLmJp bi5pLnNpemUiPjxtYWxsY3RsPmFyZW5hcy5iaW4uMi5zaXplPC9tYWxsY3RsPjwvbGluaz4pLAot ICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIGNvbXBvbmVudCB3aWxsIGFsd2F5cyBiZSB0aGF0 IGludGVnZXIuICBUaGVyZWZvcmUsCi0gICAgICBpdCBpcyBsZWdpdGltYXRlIHRvIGNvbnN0cnVj dCBjb2RlIGxpa2UgdGhlIGZvbGxvd2luZzogPHByb2dyYW1saXN0aW5nCi0gICAgICBsYW5ndWFn ZT0iQyI+PCFbQ0RBVEFbCi11bnNpZ25lZCBuYmlucywgaTsKLXNpemVfdCBtaWJbNF07Ci1zaXpl X3QgbGVuLCBtaWJsZW47Ci0KLWxlbiA9IHNpemVvZihuYmlucyk7Ci1tYWxsY3RsKCJhcmVuYXMu bmJpbnMiLCAmbmJpbnMsICZsZW4sIE5VTEwsIDApOwotCi1taWJsZW4gPSA0OwotbWFsbGN0bG5h bWV0b21pYigiYXJlbmFzLmJpbi4wLnNpemUiLCBtaWIsICZtaWJsZW4pOwotZm9yIChpID0gMDsg aSA8IG5iaW5zOyBpKyspIHsKLQlzaXplX3QgYmluX3NpemU7Ci0KLQltaWJbMl0gPSBpOwotCWxl biA9IHNpemVvZihiaW5fc2l6ZSk7Ci0JbWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAq KSZiaW5fc2l6ZSwgJmxlbiwgTlVMTCwgMCk7Ci0JLyogRG8gc29tZXRoaW5nIHdpdGggYmluX3Np emUuLi4gKi8KLX1dXT48L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KLQotICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ibWFsbG9jX3N0YXRzX3ByaW50X29wdHMiPgotICAgICAgPC92YXJsaXN0ZW50cnk+ Ci0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlv bj4gZnVuY3Rpb24gd3JpdGVzCi0gICAgICBzdW1tYXJ5IHN0YXRpc3RpY3MgdmlhIHRoZSA8cGFy YW1ldGVyPndyaXRlX2NiPC9wYXJhbWV0ZXI+IGNhbGxiYWNrCi0gICAgICBmdW5jdGlvbiBwb2lu dGVyIGFuZCA8cGFyYW1ldGVyPmNib3BhcXVlPC9wYXJhbWV0ZXI+IGRhdGEgcGFzc2VkIHRvCi0g ICAgICA8cGFyYW1ldGVyPndyaXRlX2NiPC9wYXJhbWV0ZXI+LCBvciA8ZnVuY3Rpb24+bWFsbG9j X21lc3NhZ2UoKTwvZnVuY3Rpb24+Ci0gICAgICBpZiA8cGFyYW1ldGVyPndyaXRlX2NiPC9wYXJh bWV0ZXI+IGlzIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4uICBUaGUKLSAgICAgIHN0YXRpc3Rp Y3MgYXJlIHByZXNlbnRlZCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtIHVubGVzcyA8cXVvdGU+Sjwv cXVvdGU+IGlzCi0gICAgICBzcGVjaWZpZWQgYXMgYSBjaGFyYWN0ZXIgd2l0aGluIHRoZSA8cGFy YW1ldGVyPm9wdHM8L3BhcmFtZXRlcj4gc3RyaW5nLCBpbgotICAgICAgd2hpY2ggY2FzZSB0aGUg c3RhdGlzdGljcyBhcmUgcHJlc2VudGVkIGluIDx1bGluawotICAgICAgdXJsPSJodHRwOi8vd3d3 Lmpzb24ub3JnLyI+SlNPTiBmb3JtYXQ8L3VsaW5rPi4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlCi0g ICAgICBjYWxsZWQgcmVwZWF0ZWRseS4gIEdlbmVyYWwgaW5mb3JtYXRpb24gdGhhdCBuZXZlciBj aGFuZ2VzIGR1cmluZwotICAgICAgZXhlY3V0aW9uIGNhbiBiZSBvbWl0dGVkIGJ5IHNwZWNpZnlp bmcgPHF1b3RlPmc8L3F1b3RlPiBhcyBhIGNoYXJhY3RlcgotICAgICAgd2l0aGluIHRoZSA8cGFy YW1ldGVyPm9wdHM8L3BhcmFtZXRlcj4gc3RyaW5nLiAgTm90ZSB0aGF0Ci0gICAgICA8ZnVuY3Rp b24+bWFsbG9jX3N0YXRzX3ByaW50KCk8L2Z1bmN0aW9uPiB1c2VzIHRoZQotICAgICAgPGZ1bmN0 aW9uPm1hbGxjdGwqKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgaW50ZXJuYWxseSwgc28gaW5jb25z aXN0ZW50Ci0gICAgICBzdGF0aXN0aWNzIGNhbiBiZSByZXBvcnRlZCBpZiBtdWx0aXBsZSB0aHJl YWRzIHVzZSB0aGVzZSBmdW5jdGlvbnMKLSAgICAgIHNpbXVsdGFuZW91c2x5LiAgSWYgPG9wdGlv bj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPiBpcyBzcGVjaWZpZWQgZHVyaW5nCi0gICAgICBjb25m aWd1cmF0aW9uLCA8cXVvdGU+bTwvcXVvdGU+LCA8cXVvdGU+ZDwvcXVvdGU+LCBhbmQgPHF1b3Rl PmE8L3F1b3RlPgotICAgICAgY2FuIGJlIHNwZWNpZmllZCB0byBvbWl0IG1lcmdlZCBhcmVuYSwg ZGVzdHJveWVkIG1lcmdlZCBhcmVuYSwgYW5kIHBlcgotICAgICAgYXJlbmEgc3RhdGlzdGljcywg cmVzcGVjdGl2ZWx5OyA8cXVvdGU+YjwvcXVvdGU+IGFuZCA8cXVvdGU+bDwvcXVvdGU+IGNhbgot ICAgICAgYmUgc3BlY2lmaWVkIHRvIG9taXQgcGVyIHNpemUgY2xhc3Mgc3RhdGlzdGljcyBmb3Ig YmlucyBhbmQgbGFyZ2Ugb2JqZWN0cywKLSAgICAgIHJlc3BlY3RpdmVseTsgPHF1b3RlPng8L3F1 b3RlPiBjYW4gYmUgc3BlY2lmaWVkIHRvIG9taXQgYWxsIG11dGV4Ci0gICAgICBzdGF0aXN0aWNz OyA8cXVvdGU+ZTwvcXVvdGU+IGNhbiBiZSB1c2VkIHRvIG9taXQgZXh0ZW50IHN0YXRpc3RpY3Mu Ci0gICAgICBVbnJlY29nbml6ZWQgY2hhcmFjdGVycyBhcmUgc2lsZW50bHkgaWdub3JlZC4gIE5v dGUgdGhhdCB0aHJlYWQgY2FjaGluZwotICAgICAgbWF5IHByZXZlbnQgc29tZSBzdGF0aXN0aWNz IGZyb20gYmVpbmcgY29tcGxldGVseSB1cCB0byBkYXRlLCBzaW5jZSBleHRyYQotICAgICAgbG9j a2luZyB3b3VsZCBiZSByZXF1aXJlZCB0byBtZXJnZSBjb3VudGVycyB0aGF0IHRyYWNrIHRocmVh ZCBjYWNoZQotICAgICAgb3BlcmF0aW9ucy48L3BhcmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVu Y3Rpb24+bWFsbG9jX3VzYWJsZV9zaXplKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbgotICAgICAgcmV0 dXJucyB0aGUgdXNhYmxlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24gcG9pbnRlZCB0byBieQotICAg ICAgPHBhcmFtZXRlcj5wdHI8L3BhcmFtZXRlcj4uICBUaGUgcmV0dXJuIHZhbHVlIG1heSBiZSBs YXJnZXIgdGhhbiB0aGUgc2l6ZQotICAgICAgdGhhdCB3YXMgcmVxdWVzdGVkIGR1cmluZyBhbGxv Y2F0aW9uLiAgVGhlCi0gICAgICA8ZnVuY3Rpb24+bWFsbG9jX3VzYWJsZV9zaXplKCk8L2Z1bmN0 aW9uPiBmdW5jdGlvbiBpcyBub3QgYQotICAgICAgbWVjaGFuaXNtIGZvciBpbi1wbGFjZSA8ZnVu Y3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj47IHJhdGhlcgotICAgICAgaXQgaXMgcHJvdmlkZWQg c29sZWx5IGFzIGEgdG9vbCBmb3IgaW50cm9zcGVjdGlvbiBwdXJwb3Nlcy4gIEFueQotICAgICAg ZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24gc2l6ZSBhbmQgdGhl IHNpemUgcmVwb3J0ZWQKLSAgICAgIGJ5IDxmdW5jdGlvbj5tYWxsb2NfdXNhYmxlX3NpemUoKTwv ZnVuY3Rpb24+IHNob3VsZCBub3QgYmUKLSAgICAgIGRlcGVuZGVkIG9uLCBzaW5jZSBzdWNoIGJl aGF2aW9yIGlzIGVudGlyZWx5IGltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4KLSAgICAgIDwvcGFy YT4KLSAgICA8L3JlZnNlY3QyPgotICA8L3JlZnNlY3QxPgotICA8cmVmc2VjdDEgaWQ9InR1bmlu ZyI+Ci0gICAgPHRpdGxlPlRVTklORzwvdGl0bGU+Ci0gICAgPHBhcmE+T25jZSwgd2hlbiB0aGUg Zmlyc3QgY2FsbCBpcyBtYWRlIHRvIG9uZSBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24KLSAgICBy b3V0aW5lcywgdGhlIGFsbG9jYXRvciBpbml0aWFsaXplcyBpdHMgaW50ZXJuYWxzIGJhc2VkIGlu IHBhcnQgb24gdmFyaW91cwotICAgIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGF0IGNv bXBpbGUtIG9yIHJ1bi10aW1lLjwvcGFyYT4KLQotICAgIDxwYXJhPlRoZSBzdHJpbmcgc3BlY2lm aWVkIHZpYSA8b3B0aW9uPi0td2l0aC1tYWxsb2MtY29uZjwvb3B0aW9uPiwgdGhlCi0gICAgc3Ry aW5nIHBvaW50ZWQgdG8gYnkgdGhlIGdsb2JhbCB2YXJpYWJsZSA8dmFybmFtZT5tYWxsb2NfY29u ZjwvdmFybmFtZT4sIHRoZQotICAgIDxxdW90ZT5uYW1lPC9xdW90ZT4gb2YgdGhlIGZpbGUgcmVm ZXJlbmNlZCBieSB0aGUgc3ltYm9saWMgbGluayBuYW1lZAotICAgIDxmaWxlbmFtZSBjbGFzcz0i c3ltbGluayI+L2V0Yy9tYWxsb2MuY29uZjwvZmlsZW5hbWU+LCBhbmQgdGhlIHZhbHVlIG9mIHRo ZQotICAgIGVudmlyb25tZW50IHZhcmlhYmxlIDxlbnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+LCB3 aWxsIGJlIGludGVycHJldGVkLCBpbgotICAgIHRoYXQgb3JkZXIsIGZyb20gbGVmdCB0byByaWdo dCBhcyBvcHRpb25zLiAgTm90ZSB0aGF0Ci0gICAgPHZhcm5hbWU+bWFsbG9jX2NvbmY8L3Zhcm5h bWU+IG1heSBiZSByZWFkIGJlZm9yZQotICAgIDxmdW5jdGlvbj5tYWluKCk8L2Z1bmN0aW9uPiBp cyBlbnRlcmVkLCBzbyB0aGUgZGVjbGFyYXRpb24gb2YKLSAgICA8dmFybmFtZT5tYWxsb2NfY29u ZjwvdmFybmFtZT4gc2hvdWxkIHNwZWNpZnkgYW4gaW5pdGlhbGl6ZXIgdGhhdCBjb250YWlucwot ICAgIHRoZSBmaW5hbCB2YWx1ZSB0byBiZSByZWFkIGJ5IGplbWFsbG9jLiAgPG9wdGlvbj4tLXdp dGgtbWFsbG9jLWNvbmY8L29wdGlvbj4KLSAgICBhbmQgPHZhcm5hbWU+bWFsbG9jX2NvbmY8L3Zh cm5hbWU+IGFyZSBjb21waWxlLXRpbWUgbWVjaGFuaXNtcywgd2hlcmVhcwotICAgIDxmaWxlbmFt ZSBjbGFzcz0ic3ltbGluayI+L2V0Yy9tYWxsb2MuY29uZjwvZmlsZW5hbWU+IGFuZAotICAgIDxl bnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+IGNhbiBiZSBzYWZlbHkgc2V0IGFueSB0aW1lIHByaW9y IHRvIHByb2dyYW0KLSAgICBpbnZvY2F0aW9uLjwvcGFyYT4KLQotICAgIDxwYXJhPkFuIG9wdGlv bnMgc3RyaW5nIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb3B0aW9uOnZhbHVlIHBhaXJz LgotICAgIFRoZXJlIGlzIG9uZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIDxsaW5rCi0gICAg bGlua2VuZD0ib3B0LmFib3J0Ij48bWFsbGN0bD5vcHQuKjwvbWFsbGN0bD48L2xpbms+IG1hbGxj dGwgKHNlZSB0aGUgPHhyZWYKLSAgICBsaW5rZW5kPSJtYWxsY3RsX25hbWVzcGFjZSIgeHJlZnN0 eWxlPSJ0ZW1wbGF0ZToldCIvPiBzZWN0aW9uIGZvciBvcHRpb25zCi0gICAgZG9jdW1lbnRhdGlv bikuICBGb3IgZXhhbXBsZSwgPGxpdGVyYWw+YWJvcnQ6dHJ1ZSxuYXJlbmFzOjE8L2xpdGVyYWw+ IHNldHMKLSAgICB0aGUgPGxpbmsgbGlua2VuZD0ib3B0LmFib3J0Ij48bWFsbGN0bD5vcHQuYWJv cnQ8L21hbGxjdGw+PC9saW5rPiBhbmQgPGxpbmsKLSAgICBsaW5rZW5kPSJvcHQubmFyZW5hcyI+ PG1hbGxjdGw+b3B0Lm5hcmVuYXM8L21hbGxjdGw+PC9saW5rPiBvcHRpb25zLiAgU29tZQotICAg IG9wdGlvbnMgaGF2ZSBib29sZWFuIHZhbHVlcyAodHJ1ZS9mYWxzZSksIG90aGVycyBoYXZlIGlu dGVnZXIgdmFsdWVzIChiYXNlCi0gICAgOCwgMTAsIG9yIDE2LCBkZXBlbmRpbmcgb24gcHJlZml4 KSwgYW5kIHlldCBvdGhlcnMgaGF2ZSByYXcgc3RyaW5nCi0gICAgdmFsdWVzLjwvcGFyYT4KLSAg PC9yZWZzZWN0MT4KLSAgPHJlZnNlY3QxIGlkPSJpbXBsZW1lbnRhdGlvbl9ub3RlcyI+Ci0gICAg PHRpdGxlPklNUExFTUVOVEFUSU9OIE5PVEVTPC90aXRsZT4KLSAgICA8cGFyYT5UcmFkaXRpb25h bGx5LCBhbGxvY2F0b3JzIGhhdmUgdXNlZAotICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0 bGU+c2JyazwvcmVmZW50cnl0aXRsZT4KLSAgICA8bWFudm9sbnVtPjI8L21hbnZvbG51bT48L2Np dGVyZWZlbnRyeT4gdG8gb2J0YWluIG1lbW9yeSwgd2hpY2ggaXMKLSAgICBzdWJvcHRpbWFsIGZv ciBzZXZlcmFsIHJlYXNvbnMsIGluY2x1ZGluZyByYWNlIGNvbmRpdGlvbnMsIGluY3JlYXNlZAot ICAgIGZyYWdtZW50YXRpb24sIGFuZCBhcnRpZmljaWFsIGxpbWl0YXRpb25zIG9uIG1heGltdW0g dXNhYmxlIG1lbW9yeS4gIElmCi0gICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5zYnJr PC9yZWZlbnRyeXRpdGxlPgotICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVu dHJ5PiBpcyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZwotICAgIHN5c3RlbSwgdGhpcyBhbGxv Y2F0b3IgdXNlcyBib3RoCi0gICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5tbWFwPC9y ZWZlbnRyeXRpdGxlPgotICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5 PiBhbmQKLSAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnNicms8L3JlZmVudHJ5dGl0 bGU+Ci0gICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+LCBpbiB0aGF0 IG9yZGVyIG9mIHByZWZlcmVuY2U7Ci0gICAgb3RoZXJ3aXNlIG9ubHkgPGNpdGVyZWZlbnRyeT48 cmVmZW50cnl0aXRsZT5tbWFwPC9yZWZlbnRyeXRpdGxlPgotICAgIDxtYW52b2xudW0+MjwvbWFu dm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBpcyB1c2VkLjwvcGFyYT4KLQotICAgIDxwYXJhPlRoaXMg YWxsb2NhdG9yIHVzZXMgbXVsdGlwbGUgYXJlbmFzIGluIG9yZGVyIHRvIHJlZHVjZSBsb2NrCi0g ICAgY29udGVudGlvbiBmb3IgdGhyZWFkZWQgcHJvZ3JhbXMgb24gbXVsdGktcHJvY2Vzc29yIHN5 c3RlbXMuICBUaGlzIHdvcmtzCi0gICAgd2VsbCB3aXRoIHJlZ2FyZCB0byB0aHJlYWRpbmcgc2Nh bGFiaWxpdHksIGJ1dCBpbmN1cnMgc29tZSBjb3N0cy4gIFRoZXJlIGlzCi0gICAgYSBzbWFsbCBm aXhlZCBwZXItYXJlbmEgb3ZlcmhlYWQsIGFuZCBhZGRpdGlvbmFsbHksIGFyZW5hcyBtYW5hZ2Ug bWVtb3J5Ci0gICAgY29tcGxldGVseSBpbmRlcGVuZGVudGx5IG9mIGVhY2ggb3RoZXIsIHdoaWNo IG1lYW5zIGEgc21hbGwgZml4ZWQgaW5jcmVhc2UKLSAgICBpbiBvdmVyYWxsIG1lbW9yeSBmcmFn bWVudGF0aW9uLiAgVGhlc2Ugb3ZlcmhlYWRzIGFyZSBub3QgZ2VuZXJhbGx5IGFuCi0gICAgaXNz dWUsIGdpdmVuIHRoZSBudW1iZXIgb2YgYXJlbmFzIG5vcm1hbGx5IHVzZWQuICBOb3RlIHRoYXQg dXNpbmcKLSAgICBzdWJzdGFudGlhbGx5IG1vcmUgYXJlbmFzIHRoYW4gdGhlIGRlZmF1bHQgaXMg bm90IGxpa2VseSB0byBpbXByb3ZlCi0gICAgcGVyZm9ybWFuY2UsIG1haW5seSBkdWUgdG8gcmVk dWNlZCBjYWNoZSBwZXJmb3JtYW5jZS4gIEhvd2V2ZXIsIGl0IG1heSBtYWtlCi0gICAgc2Vuc2Ug dG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgYXJlbmFzIGlmIGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90 IG1ha2UgbXVjaAotICAgIHVzZSBvZiB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMuPC9wYXJhPgot Ci0gICAgPHBhcmE+SW4gYWRkaXRpb24gdG8gbXVsdGlwbGUgYXJlbmFzLCB0aGlzIGFsbG9jYXRv ciBzdXBwb3J0cwotICAgIHRocmVhZC1zcGVjaWZpYyBjYWNoaW5nLCBpbiBvcmRlciB0byBtYWtl IGl0IHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgYXZvaWQKLSAgICBzeW5jaHJvbml6YXRpb24gZm9y IG1vc3QgYWxsb2NhdGlvbiByZXF1ZXN0cy4gIFN1Y2ggY2FjaGluZyBhbGxvd3MgdmVyeSBmYXN0 Ci0gICAgYWxsb2NhdGlvbiBpbiB0aGUgY29tbW9uIGNhc2UsIGJ1dCBpdCBpbmNyZWFzZXMgbWVt b3J5IHVzYWdlIGFuZAotICAgIGZyYWdtZW50YXRpb24sIHNpbmNlIGEgYm91bmRlZCBudW1iZXIg b2Ygb2JqZWN0cyBjYW4gcmVtYWluIGFsbG9jYXRlZCBpbgotICAgIGVhY2ggdGhyZWFkIGNhY2hl LjwvcGFyYT4KLQotICAgIDxwYXJhPk1lbW9yeSBpcyBjb25jZXB0dWFsbHkgYnJva2VuIGludG8g ZXh0ZW50cy4gIEV4dGVudHMgYXJlIGFsd2F5cwotICAgIGFsaWduZWQgdG8gbXVsdGlwbGVzIG9m IHRoZSBwYWdlIHNpemUuICBUaGlzIGFsaWdubWVudCBtYWtlcyBpdCBwb3NzaWJsZSB0bwotICAg IGZpbmQgbWV0YWRhdGEgZm9yIHVzZXIgb2JqZWN0cyBxdWlja2x5LiAgVXNlciBvYmplY3RzIGFy ZSBicm9rZW4gaW50byB0d28KLSAgICBjYXRlZ29yaWVzIGFjY29yZGluZyB0byBzaXplOiBzbWFs bCBhbmQgbGFyZ2UuICBDb250aWd1b3VzIHNtYWxsIG9iamVjdHMKLSAgICBjb21wcmlzZSBhIHNs YWIsIHdoaWNoIHJlc2lkZXMgd2l0aGluIGEgc2luZ2xlIGV4dGVudCwgd2hlcmVhcyBsYXJnZSBv YmplY3RzCi0gICAgZWFjaCBoYXZlIHRoZWlyIG93biBleHRlbnRzIGJhY2tpbmcgdGhlbS48L3Bh cmE+Ci0KLSAgICA8cGFyYT5TbWFsbCBvYmplY3RzIGFyZSBtYW5hZ2VkIGluIGdyb3VwcyBieSBz bGFicy4gIEVhY2ggc2xhYiBtYWludGFpbnMKLSAgICBhIGJpdG1hcCB0byB0cmFjayB3aGljaCBy ZWdpb25zIGFyZSBpbiB1c2UuICBBbGxvY2F0aW9uIHJlcXVlc3RzIHRoYXQgYXJlIG5vCi0gICAg bW9yZSB0aGFuIGhhbGYgdGhlIHF1YW50dW0gKDggb3IgMTYsIGRlcGVuZGluZyBvbiBhcmNoaXRl Y3R1cmUpIGFyZSByb3VuZGVkCi0gICAgdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgdHdvIHRo YXQgaXMgYXQgbGVhc3QgPGNvZGUKLSAgICBsYW5ndWFnZT0iQyI+c2l6ZW9mKDx0eXBlPmRvdWJs ZTwvdHlwZT4pPC9jb2RlPi4gIEFsbCBvdGhlciBvYmplY3Qgc2l6ZQotICAgIGNsYXNzZXMgYXJl IG11bHRpcGxlcyBvZiB0aGUgcXVhbnR1bSwgc3BhY2VkIHN1Y2ggdGhhdCB0aGVyZSBhcmUgZm91 ciBzaXplCi0gICAgY2xhc3NlcyBmb3IgZWFjaCBkb3VibGluZyBpbiBzaXplLCB3aGljaCBsaW1p dHMgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiB0bwotICAgIGFwcHJveGltYXRlbHkgMjAlIGZvciBh bGwgYnV0IHRoZSBzbWFsbGVzdCBzaXplIGNsYXNzZXMuICBTbWFsbCBzaXplIGNsYXNzZXMKLSAg ICBhcmUgc21hbGxlciB0aGFuIGZvdXIgdGltZXMgdGhlIHBhZ2Ugc2l6ZSwgYW5kIGxhcmdlIHNp emUgY2xhc3NlcyBleHRlbmQKLSAgICBmcm9tIGZvdXIgdGltZXMgdGhlIHBhZ2Ugc2l6ZSB1cCB0 byB0aGUgbGFyZ2VzdCBzaXplIGNsYXNzIHRoYXQgZG9lcyBub3QKLSAgICBleGNlZWQgPGNvbnN0 YW50PlBUUkRJRkZfTUFYPC9jb25zdGFudD4uPC9wYXJhPgotCi0gICAgPHBhcmE+QWxsb2NhdGlv bnMgYXJlIHBhY2tlZCB0aWdodGx5IHRvZ2V0aGVyLCB3aGljaCBjYW4gYmUgYW4gaXNzdWUgZm9y Ci0gICAgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgSWYgeW91IG5lZWQgdG8gYXNzdXJl IHRoYXQgYWxsb2NhdGlvbnMgZG8gbm90Ci0gICAgc3VmZmVyIGZyb20gY2FjaGVsaW5lIHNoYXJp bmcsIHJvdW5kIHlvdXIgYWxsb2NhdGlvbiByZXF1ZXN0cyB1cCB0byB0aGUKLSAgICBuZWFyZXN0 IG11bHRpcGxlIG9mIHRoZSBjYWNoZWxpbmUgc2l6ZSwgb3Igc3BlY2lmeSBjYWNoZWxpbmUgYWxp Z25tZW50IHdoZW4KLSAgICBhbGxvY2F0aW5nLjwvcGFyYT4KLQotICAgIDxwYXJhPlRoZSA8ZnVu Y3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4sCi0gICAgPGZ1bmN0aW9uPnJhbGxvY3goKTwvZnVu Y3Rpb24+LCBhbmQKLSAgICA8ZnVuY3Rpb24+eGFsbG9jeCgpPC9mdW5jdGlvbj4gZnVuY3Rpb25z IG1heSByZXNpemUgYWxsb2NhdGlvbnMKLSAgICB3aXRob3V0IG1vdmluZyB0aGVtIHVuZGVyIGxp bWl0ZWQgY2lyY3Vtc3RhbmNlcy4gIFVubGlrZSB0aGUKLSAgICA8ZnVuY3Rpb24+KmFsbG9jeCgp PC9mdW5jdGlvbj4gQVBJLCB0aGUgc3RhbmRhcmQgQVBJIGRvZXMgbm90Ci0gICAgb2ZmaWNpYWxs eSByb3VuZCB1cCB0aGUgdXNhYmxlIHNpemUgb2YgYW4gYWxsb2NhdGlvbiB0byB0aGUgbmVhcmVz dCBzaXplCi0gICAgY2xhc3MsIHNvIHRlY2huaWNhbGx5IGl0IGlzIG5lY2Vzc2FyeSB0byBjYWxs Ci0gICAgPGZ1bmN0aW9uPnJlYWxsb2MoKTwvZnVuY3Rpb24+IHRvIGdyb3cgZS5nLiBhIDktYnl0 ZSBhbGxvY2F0aW9uIHRvCi0gICAgMTYgYnl0ZXMsIG9yIHNocmluayBhIDE2LWJ5dGUgYWxsb2Nh dGlvbiB0byA5IGJ5dGVzLiAgR3Jvd3RoIGFuZCBzaHJpbmthZ2UKLSAgICB0cml2aWFsbHkgc3Vj Y2VlZHMgaW4gcGxhY2UgYXMgbG9uZyBhcyB0aGUgcHJlLXNpemUgYW5kIHBvc3Qtc2l6ZSBib3Ro IHJvdW5kCi0gICAgdXAgdG8gdGhlIHNhbWUgc2l6ZSBjbGFzcy4gIE5vIG90aGVyIEFQSSBndWFy YW50ZWVzIGFyZSBtYWRlIHJlZ2FyZGluZwotICAgIGluLXBsYWNlIHJlc2l6aW5nLCBidXQgdGhl IGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYWxzbyB0cmllcyB0byByZXNpemUgbGFyZ2UKLSAgICBh bGxvY2F0aW9ucyBpbiBwbGFjZSwgYXMgbG9uZyBhcyB0aGUgcHJlLXNpemUgYW5kIHBvc3Qtc2l6 ZSBhcmUgYm90aCBsYXJnZS4KLSAgICBGb3Igc2hyaW5rYWdlIHRvIHN1Y2NlZWQsIHRoZSBleHRl bnQgYWxsb2NhdG9yIG11c3Qgc3VwcG9ydCBzcGxpdHRpbmcgKHNlZQotICAgIDxsaW5rCi0gICAg bGlua2VuZD0iYXJlbmEuaS5leHRlbnRfaG9va3MiPjxtYWxsY3RsPmFyZW5hLiZsdDtpJmd0Oy5l eHRlbnRfaG9va3M8L21hbGxjdGw+PC9saW5rPikuCi0gICAgR3Jvd3RoIG9ubHkgc3VjY2VlZHMg aWYgdGhlIHRyYWlsaW5nIG1lbW9yeSBpcyBjdXJyZW50bHkgYXZhaWxhYmxlLCBhbmQgdGhlCi0g ICAgZXh0ZW50IGFsbG9jYXRvciBzdXBwb3J0cyBtZXJnaW5nLjwvcGFyYT4KLQotICAgIDxwYXJh PkFzc3VtaW5nIDQgS2lCIHBhZ2VzIGFuZCBhIDE2LWJ5dGUgcXVhbnR1bSBvbiBhIDY0LWJpdCBz eXN0ZW0sIHRoZQotICAgIHNpemUgY2xhc3NlcyBpbiBlYWNoIGNhdGVnb3J5IGFyZSBhcyBzaG93 biBpbiA8eHJlZiBsaW5rZW5kPSJzaXplX2NsYXNzZXMiCi0gICAgeHJlZnN0eWxlPSJ0ZW1wbGF0 ZTpUYWJsZSAlbiIvPi48L3BhcmE+Ci0KLSAgICA8dGFibGUgeG1sOmlkPSJzaXplX2NsYXNzZXMi IGZyYW1lPSJhbGwiPgotICAgICAgPHRpdGxlPlNpemUgY2xhc3NlczwvdGl0bGU+Ci0gICAgICA8 dGdyb3VwIGNvbHM9IjMiIGNvbHNlcD0iMSIgcm93c2VwPSIxIj4KLSAgICAgIDxjb2xzcGVjIGNv bG5hbWU9ImMxIiBhbGlnbj0ibGVmdCIvPgotICAgICAgPGNvbHNwZWMgY29sbmFtZT0iYzIiIGFs aWduPSJyaWdodCIvPgotICAgICAgPGNvbHNwZWMgY29sbmFtZT0iYzMiIGFsaWduPSJsZWZ0Ii8+ Ci0gICAgICA8dGhlYWQ+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PkNhdGVnb3J5 PC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+U3BhY2luZzwvZW50cnk+Ci0gICAgICAgICAgPGVu dHJ5PlNpemU8L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgIDwvdGhlYWQ+Ci0gICAgICA8 dGJvZHk+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5IG1vcmVyb3dzPSI4Ij5TbWFs bDwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5PmxnPC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+ WzhdPC9lbnRyeT4KLSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVu dHJ5PjE2PC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+WzE2LCAzMiwgNDgsIDY0LCA4MCwgOTYs IDExMiwgMTI4XTwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgICA8cm93PgotICAgICAg ICAgIDxlbnRyeT4zMjwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5PlsxNjAsIDE5MiwgMjI0LCAy NTZdPC9lbnRyeT4KLSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVu dHJ5PjY0PC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+WzMyMCwgMzg0LCA0NDgsIDUxMl08L2Vu dHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+MTI4 PC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+WzY0MCwgNzY4LCA4OTYsIDEwMjRdPC9lbnRyeT4K LSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PjI1NjwvZW50 cnk+Ci0gICAgICAgICAgPGVudHJ5PlsxMjgwLCAxNTM2LCAxNzkyLCAyMDQ4XTwvZW50cnk+Ci0g ICAgICAgIDwvcm93PgotICAgICAgICA8cm93PgotICAgICAgICAgIDxlbnRyeT41MTI8L2VudHJ5 PgotICAgICAgICAgIDxlbnRyeT5bMjU2MCwgMzA3MiwgMzU4NCwgNDA5Nl08L2VudHJ5PgotICAg ICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+MSBLaUI8L2VudHJ5 PgotICAgICAgICAgIDxlbnRyeT5bNSBLaUIsIDYgS2lCLCA3IEtpQiwgOCBLaUJdPC9lbnRyeT4K LSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PjIgS2lCPC9l bnRyeT4KLSAgICAgICAgICA8ZW50cnk+WzEwIEtpQiwgMTIgS2lCLCAxNCBLaUJdPC9lbnRyeT4K LSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5IG1vcmVyb3dz PSIxNSI+TGFyZ2U8L2VudHJ5PgotICAgICAgICAgIDxlbnRyeT4yIEtpQjwvZW50cnk+Ci0gICAg ICAgICAgPGVudHJ5PlsxNiBLaUJdPC9lbnRyeT4KLSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxy b3c+Ci0gICAgICAgICAgPGVudHJ5PjQgS2lCPC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+WzIw IEtpQiwgMjQgS2lCLCAyOCBLaUIsIDMyIEtpQl08L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAg ICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+OCBLaUI8L2VudHJ5PgotICAgICAgICAgIDxl bnRyeT5bNDAgS2lCLCA0OCBLaUIsIDU2IEtpQiwgNjQgS2lCXTwvZW50cnk+Ci0gICAgICAgIDwv cm93PgotICAgICAgICA8cm93PgotICAgICAgICAgIDxlbnRyeT4xNiBLaUI8L2VudHJ5PgotICAg ICAgICAgIDxlbnRyeT5bODAgS2lCLCA5NiBLaUIsIDExMiBLaUIsIDEyOCBLaUJdPC9lbnRyeT4K LSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5PjMyIEtpQjwv ZW50cnk+Ci0gICAgICAgICAgPGVudHJ5PlsxNjAgS2lCLCAxOTIgS2lCLCAyMjQgS2lCLCAyNTYg S2lCXTwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgICA8cm93PgotICAgICAgICAgIDxl bnRyeT42NCBLaUI8L2VudHJ5PgotICAgICAgICAgIDxlbnRyeT5bMzIwIEtpQiwgMzg0IEtpQiwg NDQ4IEtpQiwgNTEyIEtpQl08L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4K LSAgICAgICAgICA8ZW50cnk+MTI4IEtpQjwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5Pls2NDAg S2lCLCA3NjggS2lCLCA4OTYgS2lCLCAxIE1pQl08L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAg ICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+MjU2IEtpQjwvZW50cnk+Ci0gICAgICAgICAg PGVudHJ5PlsxMjgwIEtpQiwgMTUzNiBLaUIsIDE3OTIgS2lCLCAyIE1pQl08L2VudHJ5PgotICAg ICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+NTEyIEtpQjwvZW50 cnk+Ci0gICAgICAgICAgPGVudHJ5PlsyNTYwIEtpQiwgMyBNaUIsIDM1ODQgS2lCLCA0IE1pQl08 L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICA8ZW50cnk+ MSBNaUI8L2VudHJ5PgotICAgICAgICAgIDxlbnRyeT5bNSBNaUIsIDYgTWlCLCA3IE1pQiwgOCBN aUJdPC9lbnRyeT4KLSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgPGVu dHJ5PjIgTWlCPC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+WzEwIE1pQiwgMTIgTWlCLCAxNCBN aUIsIDE2IE1pQl08L2VudHJ5PgotICAgICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4KLSAgICAg ICAgICA8ZW50cnk+NCBNaUI8L2VudHJ5PgotICAgICAgICAgIDxlbnRyeT5bMjAgTWlCLCAyNCBN aUIsIDI4IE1pQiwgMzIgTWlCXTwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgICA8cm93 PgotICAgICAgICAgIDxlbnRyeT44IE1pQjwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5Pls0MCBN aUIsIDQ4IE1pQiwgNTYgTWlCLCA2NCBNaUJdPC9lbnRyeT4KLSAgICAgICAgPC9yb3c+Ci0gICAg ICAgIDxyb3c+Ci0gICAgICAgICAgPGVudHJ5Pi4uLjwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5 Pi4uLjwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgICA8cm93PgotICAgICAgICAgIDxl bnRyeT41MTIgUGlCPC9lbnRyeT4KLSAgICAgICAgICA8ZW50cnk+WzI1NjAgUGlCLCAzIEVpQiwg MzU4NCBQaUIsIDQgRWlCXTwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgICA8cm93Pgot ICAgICAgICAgIDxlbnRyeT4xIEVpQjwvZW50cnk+Ci0gICAgICAgICAgPGVudHJ5Pls1IEVpQiwg NiBFaUIsIDcgRWlCXTwvZW50cnk+Ci0gICAgICAgIDwvcm93PgotICAgICAgPC90Ym9keT4KLSAg ICAgIDwvdGdyb3VwPgotICAgIDwvdGFibGU+Ci0gIDwvcmVmc2VjdDE+Ci0gIDxyZWZzZWN0MSBp ZD0ibWFsbGN0bF9uYW1lc3BhY2UiPgotICAgIDx0aXRsZT5NQUxMQ1RMIE5BTUVTUEFDRTwvdGl0 bGU+Ci0gICAgPHBhcmE+VGhlIGZvbGxvd2luZyBuYW1lcyBhcmUgZGVmaW5lZCBpbiB0aGUgbmFt ZXNwYWNlIGFjY2Vzc2libGUgdmlhIHRoZQotICAgIDxmdW5jdGlvbj5tYWxsY3RsKigpPC9mdW5j dGlvbj4gZnVuY3Rpb25zLiAgVmFsdWUgdHlwZXMgYXJlIHNwZWNpZmllZCBpbgotICAgIHBhcmVu dGhlc2VzLCB0aGVpciByZWFkYWJsZS93cml0YWJsZSBzdGF0dXNlcyBhcmUgZW5jb2RlZCBhcwot ICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPiwgPGxpdGVyYWw+ci08L2xpdGVyYWw+LCA8bGl0ZXJh bD4tdzwvbGl0ZXJhbD4sIG9yCi0gICAgPGxpdGVyYWw+LS08L2xpdGVyYWw+LCBhbmQgcmVxdWly ZWQgYnVpbGQgY29uZmlndXJhdGlvbiBmbGFncyBmb2xsb3csIGlmCi0gICAgYW55LiAgQSBuYW1l IGVsZW1lbnQgZW5jb2RlZCBhcyA8bGl0ZXJhbD4mbHQ7aSZndDs8L2xpdGVyYWw+IG9yCi0gICAg PGxpdGVyYWw+Jmx0O2omZ3Q7PC9saXRlcmFsPiBpbmRpY2F0ZXMgYW4gaW50ZWdlciBjb21wb25l bnQsIHdoZXJlIHRoZQotICAgIGludGVnZXIgdmFyaWVzIGZyb20gMCB0byBzb21lIHVwcGVyIHZh bHVlIHRoYXQgbXVzdCBiZSBkZXRlcm1pbmVkIHZpYQotICAgIGludHJvc3BlY3Rpb24uICBJbiB0 aGUgY2FzZSBvZiA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lio8L21hbGxjdGw+Ci0g ICAgYW5kIDxtYWxsY3RsPmFyZW5hLiZsdDtpJmd0Oy57aW5pdGlhbGl6ZWQscHVyZ2UsZGVjYXks ZHNzfTwvbWFsbGN0bD4sCi0gICAgPGxpdGVyYWw+Jmx0O2kmZ3Q7PC9saXRlcmFsPiBlcXVhbCB0 bwotICAgIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19BTEw8L2NvbnN0YW50PiBjYW4gYmUgdXNl ZCB0byBvcGVyYXRlIG9uIGFsbCBhcmVuYXMKLSAgICBvciBhY2Nlc3MgdGhlIHN1bW1hdGlvbiBv ZiBzdGF0aXN0aWNzIGZyb20gYWxsIGFyZW5hczsgc2ltaWxhcmx5Ci0gICAgPGxpdGVyYWw+Jmx0 O2kmZ3Q7PC9saXRlcmFsPiBlcXVhbCB0bwotICAgIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19E RVNUUk9ZRUQ8L2NvbnN0YW50PiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlCi0gICAgc3VtbWF0 aW9uIG9mIHN0YXRpc3RpY3MgZnJvbSBhbGwgZGVzdHJveWVkIGFyZW5hcy4gIFRoZXNlIGNvbnN0 YW50cyBjYW4gYmUKLSAgICB1dGlsaXplZCBlaXRoZXIgdmlhIDxmdW5jdGlvbj5tYWxsY3RsbmFt ZXRvbWliKCk8L2Z1bmN0aW9uPiBmb2xsb3dlZCBieQotICAgIDxmdW5jdGlvbj5tYWxsY3RsYnlt aWIoKTwvZnVuY3Rpb24+LCBvciB2aWEgY29kZSBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6Ci0gICAg PHByb2dyYW1saXN0aW5nIGxhbmd1YWdlPSJDIj48IVtDREFUQVsKLSNkZWZpbmUgU1RSSU5HSUZZ X0hFTFBFUih4KSAjeAotI2RlZmluZSBTVFJJTkdJRlkoeCkgU1RSSU5HSUZZX0hFTFBFUih4KQot Ci1tYWxsY3RsKCJhcmVuYS4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpICIuZGVjYXki LAotICAgIE5VTEwsIE5VTEwsIE5VTEwsIDApO11dPjwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgVGFr ZSBzcGVjaWFsIG5vdGUgb2YgdGhlIDxsaW5rCi0gICAgbGlua2VuZD0iZXBvY2giPjxtYWxsY3Rs PmVwb2NoPC9tYWxsY3RsPjwvbGluaz4gbWFsbGN0bCwgd2hpY2ggY29udHJvbHMKLSAgICByZWZy ZXNoaW5nIG9mIGNhY2hlZCBkeW5hbWljIHN0YXRpc3RpY3MuPC9wYXJhPgotCi0gICAgPHZhcmlh YmxlbGlzdD4KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InZlcnNpb24iPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD52ZXJzaW9uPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlw ZT5jb25zdCBjaGFyICo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgot ICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXR1cm4gdGhlIGplbWFs bG9jIHZlcnNpb24gc3RyaW5nLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50 cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImVwb2NoIj4KLSAgICAgICAgPHRlcm0+Ci0g ICAgICAgICAgPG1hbGxjdGw+ZXBvY2g8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2 NF90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KLSAgICAgICAgPC90 ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+SWYgYSB2YWx1ZSBpcyBwYXNzZWQgaW4sIHJl ZnJlc2ggdGhlIGRhdGEgZnJvbSB3aGljaAotICAgICAgICB0aGUgPGZ1bmN0aW9uPm1hbGxjdGwq KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgcmVwb3J0IHZhbHVlcywKLSAgICAgICAgYW5kIGluY3Jl bWVudCB0aGUgZXBvY2guICBSZXR1cm4gdGhlIGN1cnJlbnQgZXBvY2guICBUaGlzIGlzIHVzZWZ1 bCBmb3IKLSAgICAgICAgZGV0ZWN0aW5nIHdoZXRoZXIgYW5vdGhlciB0aHJlYWQgY2F1c2VkIGEg cmVmcmVzaC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAg ICA8dmFybGlzdGVudHJ5IGlkPSJiYWNrZ3JvdW5kX3RocmVhZCI+Ci0gICAgICAgIDx0ZXJtPgot ICAgICAgICAgIDxtYWxsY3RsPmJhY2tncm91bmRfdGhyZWFkPC9tYWxsY3RsPgotICAgICAgICAg ICg8dHlwZT5ib29sPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KLSAg ICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5hYmxlL2Rpc2FibGUgaW50 ZXJuYWwgYmFja2dyb3VuZCB3b3JrZXIgdGhyZWFkcy4gIFdoZW4KLSAgICAgICAgc2V0IHRvIHRy dWUsIGJhY2tncm91bmQgdGhyZWFkcyBhcmUgY3JlYXRlZCBvbiBkZW1hbmQgKHRoZSBudW1iZXIg b2YKLSAgICAgICAgYmFja2dyb3VuZCB0aHJlYWRzIHdpbGwgYmUgbm8gbW9yZSB0aGFuIHRoZSBu dW1iZXIgb2YgQ1BVcyBvciBhY3RpdmUKLSAgICAgICAgYXJlbmFzKS4gIFRocmVhZHMgcnVuIHBl cmlvZGljYWxseSwgYW5kIGhhbmRsZSA8bGluawotICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRl Y2F5Ij5wdXJnaW5nPC9saW5rPiBhc3luY2hyb25vdXNseS4gIFdoZW4gc3dpdGNoaW5nCi0gICAg ICAgIG9mZiwgYmFja2dyb3VuZCB0aHJlYWRzIGFyZSB0ZXJtaW5hdGVkIHN5bmNocm9ub3VzbHku ICBOb3RlIHRoYXQgYWZ0ZXIKLSAgICAgICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5m b3JrPC9yZWZlbnRyeXRpdGxlPjxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5 PgotICAgICAgICBmdW5jdGlvbiwgdGhlIHN0YXRlIGluIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwg YmUgZGlzYWJsZWQgcmVnYXJkbGVzcwotICAgICAgICB0aGUgc3RhdGUgaW4gcGFyZW50IHByb2Nl c3MuIFNlZSA8bGluawotICAgICAgICBsaW5rZW5kPSJzdGF0cy5iYWNrZ3JvdW5kX3RocmVhZC5u dW1fdGhyZWFkcyI+PG1hbGxjdGw+c3RhdHMuYmFja2dyb3VuZF90aHJlYWQ8L21hbGxjdGw+PC9s aW5rPgotICAgICAgICBmb3IgcmVsYXRlZCBzdGF0cy4gIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9 Im9wdC5iYWNrZ3JvdW5kX3RocmVhZCI+PG1hbGxjdGw+b3B0LmJhY2tncm91bmRfdGhyZWFkPC9t YWxsY3RsPjwvbGluaz4KLSAgICAgICAgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBkZWZhdWx0IG9w dGlvbi4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uCi0gICAgICAgIHNlbGVjdGVk IHB0aHJlYWQtYmFzZWQgcGxhdGZvcm1zLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJs aXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im1heF9iYWNrZ3JvdW5kX3RocmVh ZHMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5tYXhfYmFja2dyb3VuZF90 aHJlYWRzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAg ICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0 aXRlbT48cGFyYT5NYXhpbXVtIG51bWJlciBvZiBiYWNrZ3JvdW5kIHdvcmtlciB0aHJlYWRzIHRo YXQgd2lsbAotICAgICAgICBiZSBjcmVhdGVkLiAgVGhpcyB2YWx1ZSBpcyBjYXBwZWQgYXQgPGxp bmsKLSAgICAgICAgbGlua2VuZD0ib3B0Lm1heF9iYWNrZ3JvdW5kX3RocmVhZHMiPjxtYWxsY3Rs Pm9wdC5tYXhfYmFja2dyb3VuZF90aHJlYWRzPC9tYWxsY3RsPjwvbGluaz4gYXQKLSAgICAgICAg c3RhcnR1cC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAg ICA8dmFybGlzdGVudHJ5IGlkPSJjb25maWcuY2FjaGVfb2JsaXZpb3VzIj4KLSAgICAgICAgPHRl cm0+Ci0gICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLmNhY2hlX29ibGl2aW91czwvbWFsbGN0bD4K LSAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxvcHRpb24+ LS1lbmFibGUtY2FjaGUtb2JsaXZpb3VzPC9vcHRpb24+IHdhcyBzcGVjaWZpZWQKLSAgICAgICAg ZHVyaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zh cmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iY29uZmlnLmRlYnVnIj4KLSAg ICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLmRlYnVnPC9tYWxsY3RsPgot ICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PG9wdGlvbj4t LWVuYWJsZS1kZWJ1Zzwvb3B0aW9uPiB3YXMgc3BlY2lmaWVkIGR1cmluZwotICAgICAgICBidWls ZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+ Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImNvbmZpZy5maWxsIj4KLSAgICAgICAgPHRlcm0+ Ci0gICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLmZpbGw8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0 eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAg ICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT48b3B0aW9uPi0tZW5hYmxlLWZpbGw8 L29wdGlvbj4gd2FzIHNwZWNpZmllZCBkdXJpbmcKLSAgICAgICAgYnVpbGQgY29uZmlndXJhdGlv bi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFy bGlzdGVudHJ5IGlkPSJjb25maWcubGF6eV9sb2NrIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAg ICAgPG1hbGxjdGw+Y29uZmlnLmxhenlfbG9jazwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+ Ym9vbDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwv dGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPjxvcHRpb24+LS1lbmFibGUtbGF6eS1sb2Nr PC9vcHRpb24+IHdhcyBzcGVjaWZpZWQKLSAgICAgICAgZHVyaW5nIGJ1aWxkIGNvbmZpZ3VyYXRp b24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZh cmxpc3RlbnRyeSBpZD0iY29uZmlnLm1hbGxvY19jb25mIj4KLSAgICAgICAgPHRlcm0+Ci0gICAg ICAgICAgPG1hbGxjdGw+Y29uZmlnLm1hbGxvY19jb25mPC9tYWxsY3RsPgotICAgICAgICAgICg8 dHlwZT5jb25zdCBjaGFyICo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFs PgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5FbWJlZGRlZCBjb25m aWd1cmUtdGltZS1zcGVjaWZpZWQgcnVuLXRpbWUgb3B0aW9ucwotICAgICAgICBzdHJpbmcsIGVt cHR5IHVubGVzcyA8b3B0aW9uPi0td2l0aC1tYWxsb2MtY29uZjwvb3B0aW9uPiB3YXMgc3BlY2lm aWVkCi0gICAgICAgIGR1cmluZyBidWlsZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3RpdGVt PgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImNvbmZp Zy5wcm9mIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLnByb2Y8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxsaXRl cmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFy YT48b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj4gd2FzIHNwZWNpZmllZCBkdXJpbmcKLSAg ICAgICAgYnVpbGQgY29uZmlndXJhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFy bGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJjb25maWcucHJvZl9saWJnY2Mi PgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5jb25maWcucHJvZl9saWJnY2M8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxsaXRl cmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFy YT48b3B0aW9uPi0tZGlzYWJsZS1wcm9mLWxpYmdjYzwvb3B0aW9uPiB3YXMgbm90Ci0gICAgICAg IHNwZWNpZmllZCBkdXJpbmcgYnVpbGQgY29uZmlndXJhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJjb25maWcu cHJvZl9saWJ1bndpbmQiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5jb25m aWcucHJvZl9saWJ1bndpbmQ8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+ KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAg ICAgIDxsaXN0aXRlbT48cGFyYT48b3B0aW9uPi0tZW5hYmxlLXByb2YtbGlidW53aW5kPC9vcHRp b24+IHdhcyBzcGVjaWZpZWQKLSAgICAgICAgZHVyaW5nIGJ1aWxkIGNvbmZpZ3VyYXRpb24uPC9w YXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0iY29uZmlnLnN0YXRzIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxj dGw+Y29uZmlnLnN0YXRzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikK LSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAg ICA8bGlzdGl0ZW0+PHBhcmE+PG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPiB3YXMgc3Bl Y2lmaWVkIGR1cmluZwotICAgICAgICBidWlsZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3Rp dGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i Y29uZmlnLnV0cmFjZSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPmNvbmZp Zy51dHJhY2U8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAg ICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0 aXRlbT48cGFyYT48b3B0aW9uPi0tZW5hYmxlLXV0cmFjZTwvb3B0aW9uPiB3YXMgc3BlY2lmaWVk IGR1cmluZwotICAgICAgICBidWlsZCBjb25maWd1cmF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgot ICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImNvbmZpZy54 bWFsbG9jIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+Y29uZmlnLnhtYWxs b2M8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxs aXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48 cGFyYT48b3B0aW9uPi0tZW5hYmxlLXhtYWxsb2M8L29wdGlvbj4gd2FzIHNwZWNpZmllZCBkdXJp bmcKLSAgICAgICAgYnVpbGQgY29uZmlndXJhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAg IDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQuYWJvcnQiPgot ICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQuYWJvcnQ8L21hbGxjdGw+Ci0g ICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5BYm9ydC1vbi13 YXJuaW5nIGVuYWJsZWQvZGlzYWJsZWQuICBJZiB0cnVlLCBtb3N0Ci0gICAgICAgIHdhcm5pbmdz IGFyZSBmYXRhbC4gIE5vdGUgdGhhdCBydW50aW1lIG9wdGlvbiB3YXJuaW5ncyBhcmUgbm90IGlu Y2x1ZGVkCi0gICAgICAgIChzZWUgPGxpbmsKLSAgICAgICAgbGlua2VuZD0ib3B0LmFib3J0X2Nv bmYiPjxtYWxsY3RsPm9wdC5hYm9ydF9jb25mPC9tYWxsY3RsPjwvbGluaz4gZm9yCi0gICAgICAg IHRoYXQpLiBUaGUgcHJvY2VzcyB3aWxsIGNhbGwKLSAgICAgICAgPGNpdGVyZWZlbnRyeT48cmVm ZW50cnl0aXRsZT5hYm9ydDwvcmVmZW50cnl0aXRsZT4KLSAgICAgICAgPG1hbnZvbG51bT4zPC9t YW52b2xudW0+PC9jaXRlcmVmZW50cnk+IGluIHRoZXNlIGNhc2VzLiAgVGhpcyBvcHRpb24gaXMK LSAgICAgICAgZGlzYWJsZWQgYnkgZGVmYXVsdCB1bmxlc3MgPG9wdGlvbj4tLWVuYWJsZS1kZWJ1 Zzwvb3B0aW9uPiBpcwotICAgICAgICBzcGVjaWZpZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24sIGlu IHdoaWNoIGNhc2UgaXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotICAgICAgICA8L3BhcmE+PC9s aXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlk PSJvcHQuY29uZmlybV9jb25mIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+ b3B0LmNvbmZpcm1fY29uZjwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4p Ci0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLQk8bGlz dGl0ZW0+PHBhcmE+Q29uZmlybS1ydW50aW1lLW9wdGlvbnMtd2hlbi1wcm9ncmFtLXN0YXJ0cwot CWVuYWJsZWQvZGlzYWJsZWQuICBJZiB0cnVlLCB0aGUgc3RyaW5nIHNwZWNpZmllZCB2aWEKLQk8 b3B0aW9uPi0td2l0aC1tYWxsb2MtY29uZjwvb3B0aW9uPiwgdGhlIHN0cmluZyBwb2ludGVkIHRv IGJ5IHRoZQotCWdsb2JhbCB2YXJpYWJsZSA8dmFybmFtZT5tYWxsb2NfY29uZjwvdmFybmFtZT4s IHRoZSA8cXVvdGU+bmFtZTwvcXVvdGU+Ci0Jb2YgdGhlIGZpbGUgcmVmZXJlbmNlZCBieSB0aGUg c3ltYm9saWMgbGluayBuYW1lZAotCTxmaWxlbmFtZSBjbGFzcz0ic3ltbGluayI+L2V0Yy9tYWxs b2MuY29uZjwvZmlsZW5hbWU+LCBhbmQgdGhlIHZhbHVlIG9mCi0JdGhlIGVudmlyb25tZW50IHZh cmlhYmxlIDxlbnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+LCB3aWxsIGJlIHByaW50ZWQgaW4KLQlv cmRlci4gIFRoZW4sIGVhY2ggb3B0aW9uIGJlaW5nIHNldCB3aWxsIGJlIGluZGl2aWR1YWxseSBw cmludGVkLiAgVGhpcwotCW9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LjwvcGFyYT48L2xp c3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 Im9wdC5hYm9ydF9jb25mIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+b3B0 LmFib3J0X2NvbmY8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAg ICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxs aXN0aXRlbT48cGFyYT5BYm9ydC1vbi1pbnZhbGlkLWNvbmZpZ3VyYXRpb24gZW5hYmxlZC9kaXNh YmxlZC4gIElmCi0gICAgICAgIHRydWUsIGludmFsaWQgcnVudGltZSBvcHRpb25zIGFyZSBmYXRh bC4gIFRoZSBwcm9jZXNzIHdpbGwgY2FsbAotICAgICAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRy eXRpdGxlPmFib3J0PC9yZWZlbnRyeXRpdGxlPgotICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZv bG51bT48L2NpdGVyZWZlbnRyeT4gaW4gdGhlc2UgY2FzZXMuICBUaGlzIG9wdGlvbiBpcwotICAg ICAgICBkaXNhYmxlZCBieSBkZWZhdWx0IHVubGVzcyA8b3B0aW9uPi0tZW5hYmxlLWRlYnVnPC9v cHRpb24+IGlzCi0gICAgICAgIHNwZWNpZmllZCBkdXJpbmcgY29uZmlndXJhdGlvbiwgaW4gd2hp Y2ggY2FzZSBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIDwvcGFyYT48L2xpc3Rp dGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9w dC5jYWNoZV9vYmxpdmlvdXMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5v cHQuY2FjaGVfb2JsaXZpb3VzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5ib29sPC90eXBl PikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5hYmxlIC8gRGlzYWJsZSBjYWNoZS1vYmxpdmlvdXMgbGFy Z2UgYWxsb2NhdGlvbgotICAgICAgICBhbGlnbm1lbnQsIGZvciBsYXJnZSByZXF1ZXN0cyB3aXRo IG5vIGFsaWdubWVudCBjb25zdHJhaW50cy4gIElmIHRoaXMKLSAgICAgICAgZmVhdHVyZSBpcyBk aXNhYmxlZCwgYWxsIGxhcmdlIGFsbG9jYXRpb25zIGFyZSBwYWdlLWFsaWduZWQgYXMgYW4KLSAg ICAgICAgaW1wbGVtZW50YXRpb24gYXJ0aWZhY3QsIHdoaWNoIGNhbiBzZXZlcmVseSBoYXJtIENQ VSBjYWNoZSB1dGlsaXphdGlvbi4KLSAgICAgICAgSG93ZXZlciwgdGhlIGNhY2hlLW9ibGl2aW91 cyBsYXlvdXQgY29tZXMgYXQgdGhlIGNvc3Qgb2Ygb25lIGV4dHJhIHBhZ2UKLSAgICAgICAgcGVy IGxhcmdlIGFsbG9jYXRpb24sIHdoaWNoIGluIHRoZSBtb3N0IGV4dHJlbWUgY2FzZSBpbmNyZWFz ZXMgcGh5c2ljYWwKLSAgICAgICAgbWVtb3J5IHVzYWdlIGZvciB0aGUgMTYgS2lCIHNpemUgY2xh c3MgdG8gMjAgS2lCLiBUaGlzIG9wdGlvbiBpcyBlbmFibGVkCi0gICAgICAgIGJ5IGRlZmF1bHQu PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ib3B0Lm1ldGFkYXRhX3RocCI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAg IDxtYWxsY3RsPm9wdC5tZXRhZGF0YV90aHA8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmNv bnN0IGNoYXIgKjwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAg ICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2xzIHdoZXRoZXIgdG8g YWxsb3cgamVtYWxsb2MgdG8gdXNlIHRyYW5zcGFyZW50Ci0gICAgICAgIGh1Z2UgcGFnZSAoVEhQ KSBmb3IgaW50ZXJuYWwgbWV0YWRhdGEgKHNlZSA8bGluawotICAgICAgICBsaW5rZW5kPSJzdGF0 cy5tZXRhZGF0YSI+c3RhdHMubWV0YWRhdGE8L2xpbms+KS4gIDxxdW90ZT5hbHdheXM8L3F1b3Rl PgotICAgICAgICBhbGxvd3Mgc3VjaCB1c2FnZS4gIDxxdW90ZT5hdXRvPC9xdW90ZT4gdXNlcyBu byBUSFAgaW5pdGlhbGx5LCBidXQgbWF5Ci0gICAgICAgIGJlZ2luIHRvIGRvIHNvIHdoZW4gbWV0 YWRhdGEgdXNhZ2UgcmVhY2hlcyBjZXJ0YWluIGxldmVsLiAgVGhlIGRlZmF1bHQKLSAgICAgICAg aXMgPHF1b3RlPmRpc2FibGVkPC9xdW90ZT4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zh cmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnRydXN0X21hZHZpc2Ui PgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQudHJ1c3RfbWFkdmlzZTwv bWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVy YWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJh PklmIHRydWUsIGRvIG5vdCBwZXJmb3JtIHJ1bnRpbWUgY2hlY2sgZm9yIE1BRFZfRE9OVE5FRUQs Ci0gICAgICAgIHRvIGNoZWNrIHRoYXQgaXQgYWN0dWFsbHkgemVyb3MgcGFnZXMuICBUaGUgZGVm YXVsdCBpcyBkaXNhYmxlZCBvbiBMaW51eAotICAgICAgICBhbmQgZW5hYmxlZCBlbHNld2hlcmUu PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ib3B0LnJldGFpbiI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxs Y3RsPm9wdC5yZXRhaW48L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQot ICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAg IDxsaXN0aXRlbT48cGFyYT5JZiB0cnVlLCByZXRhaW4gdW51c2VkIHZpcnR1YWwgbWVtb3J5IGZv ciBsYXRlciByZXVzZQotICAgICAgICByYXRoZXIgdGhhbiBkaXNjYXJkaW5nIGl0IGJ5IGNhbGxp bmcKLSAgICAgICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5tdW5tYXA8L3JlZmVudHJ5 dGl0bGU+Ci0gICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBv ciBlcXVpdmFsZW50IChzZWUgPGxpbmsKLSAgICAgICAgbGlua2VuZD0ic3RhdHMucmV0YWluZWQi PnN0YXRzLnJldGFpbmVkPC9saW5rPiBmb3IgcmVsYXRlZCBkZXRhaWxzKS4KLSAgICAgICAgSXQg YWxzbyBtYWtlcyBqZW1hbGxvYyB1c2UgPGNpdGVyZWZlbnRyeT4KLSAgICAgICAgPHJlZmVudHJ5 dGl0bGU+bW1hcDwvcmVmZW50cnl0aXRsZT48bWFudm9sbnVtPjI8L21hbnZvbG51bT4KLSAgICAg ICAgPC9jaXRlcmVmZW50cnk+IG9yIGVxdWl2YWxlbnQgaW4gYSBtb3JlIGdyZWVkeSB3YXksIG1h cHBpbmcgbGFyZ2VyCi0gICAgICAgIGNodW5rcyBpbiBvbmUgZ28uICBUaGlzIG9wdGlvbiBpcyBk aXNhYmxlZCBieSBkZWZhdWx0IHVubGVzcyBkaXNjYXJkaW5nCi0gICAgICAgIHZpcnR1YWwgbWVt b3J5IGlzIGtub3duIHRvIHRyaWdnZXIgcGxhdGZvcm0tc3BlY2lmaWMgcGVyZm9ybWFuY2UKLSAg ICAgICAgcHJvYmxlbXMsIG5hbWVseSAxKSBmb3IgWzY0LWJpdF0gTGludXgsIHdoaWNoIGhhcyBh IHF1aXJrIGluIGl0cyB2aXJ0dWFsCi0gICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uIGFsZ29yaXRo bSB0aGF0IGNhdXNlcyBzZW1pLXBlcm1hbmVudCBWTSBtYXAgaG9sZXMKLSAgICAgICAgdW5kZXIg bm9ybWFsIGplbWFsbG9jIG9wZXJhdGlvbjsgYW5kIDIpIGZvciBbNjQtYml0XSBXaW5kb3dzLCB3 aGljaAotICAgICAgICBkaXNhbGxvd3Mgc3BsaXQgLyBtZXJnZWQgcmVnaW9ucyB3aXRoCi0gICAg ICAgIDxwYXJhbWV0ZXI+PGNvbnN0YW50Pk1FTV9SRUxFQVNFPC9jb25zdGFudD48L3BhcmFtZXRl cj4uICBBbHRob3VnaCB0aGUKLSAgICAgICAgc2FtZSBpc3N1ZXMgbWF5IHByZXNlbnQgb24gMzIt Yml0IHBsYXRmb3JtcyBhcyB3ZWxsLCByZXRhaW5pbmcgdmlydHVhbAotICAgICAgICBtZW1vcnkg Zm9yIDMyLWJpdCBMaW51eCBhbmQgV2luZG93cyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGR1ZSB0 byB0aGUKLSAgICAgICAgcHJhY3RpY2FsIHBvc3NpYmlsaXR5IG9mIGFkZHJlc3Mgc3BhY2UgZXho YXVzdGlvbi4gIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5kc3MiPgotICAgICAgICA8dGVybT4KLSAgICAgICAg ICA8bWFsbGN0bD5vcHQuZHNzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFy ICo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rl cm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5kc3MgKDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5 dGl0bGU+c2JyazwvcmVmZW50cnl0aXRsZT4KLSAgICAgICAgPG1hbnZvbG51bT4yPC9tYW52b2xu dW0+PC9jaXRlcmVmZW50cnk+KSBhbGxvY2F0aW9uIHByZWNlZGVuY2UgYXMKLSAgICAgICAgcmVs YXRlZCB0byA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPm1tYXA8L3JlZmVudHJ5dGl0bGU+ Ci0gICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBhbGxvY2F0 aW9uLiAgVGhlIGZvbGxvd2luZwotICAgICAgICBzZXR0aW5ncyBhcmUgc3VwcG9ydGVkIGlmCi0g ICAgICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+c2JyazwvcmVmZW50cnl0aXRsZT4K LSAgICAgICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+IGlzIHN1cHBv cnRlZCBieSB0aGUgb3BlcmF0aW5nCi0gICAgICAgIHN5c3RlbTogPHF1b3RlPmRpc2FibGVkPC9x dW90ZT4sIDxxdW90ZT5wcmltYXJ5PC9xdW90ZT4sIGFuZAotICAgICAgICA8cXVvdGU+c2Vjb25k YXJ5PC9xdW90ZT47IG90aGVyd2lzZSBvbmx5IDxxdW90ZT5kaXNhYmxlZDwvcXVvdGU+IGlzCi0g ICAgICAgIHN1cHBvcnRlZC4gIFRoZSBkZWZhdWx0IGlzIDxxdW90ZT5zZWNvbmRhcnk8L3F1b3Rl PiBpZgotICAgICAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnNicms8L3JlZmVudHJ5 dGl0bGU+Ci0gICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBp cyBzdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZwotICAgICAgICBzeXN0ZW07IDxxdW90ZT5kaXNh YmxlZDwvcXVvdGU+IG90aGVyd2lzZS4KLSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAg ICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0Lm5hcmVuYXMi PgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQubmFyZW5hczwvbWFsbGN0 bD4KLSAgICAgICAgICAoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFs PnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5N YXhpbXVtIG51bWJlciBvZiBhcmVuYXMgdG8gdXNlIGZvciBhdXRvbWF0aWMKLSAgICAgICAgbXVs dGlwbGV4aW5nIG9mIHRocmVhZHMgYW5kIGFyZW5hcy4gIFRoZSBkZWZhdWx0IGlzIGZvdXIgdGlt ZXMgdGhlCi0gICAgICAgIG51bWJlciBvZiBDUFVzLCBvciBvbmUgaWYgdGhlcmUgaXMgYSBzaW5n bGUgQ1BVLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5vdmVyc2l6ZV90aHJlc2hvbGQiPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQub3ZlcnNpemVfdGhyZXNob2xkPC9tYWxsY3RsPgot ICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaGUgdGhy ZXNob2xkIGluIGJ5dGVzIG9mIHdoaWNoIHJlcXVlc3RzIGFyZSBjb25zaWRlcmVkCi0gICAgICAg IG92ZXJzaXplLiAgQWxsb2NhdGlvbiByZXF1ZXN0cyB3aXRoIGdyZWF0ZXIgc2l6ZXMgYXJlIGZ1 bGZpbGxlZCBmcm9tIGEKLSAgICAgICAgZGVkaWNhdGVkIGFyZW5hIChhdXRvbWF0aWNhbGx5IG1h bmFnZWQsIGhvd2V2ZXIgbm90IHdpdGhpbgotICAgICAgICA8bGl0ZXJhbD5uYXJlbmFzPC9saXRl cmFsPiksIGluIG9yZGVyIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIGJ5IG5vdAotICAgICAgICBt aXhpbmcgaHVnZSBhbGxvY2F0aW9ucyB3aXRoIHNtYWxsIG9uZXMuICBJbiBhZGRpdGlvbiwgdGhl IGRlY2F5IEFQSQotICAgICAgICBndWFyYW50ZWVzIG9uIHRoZSBleHRlbnRzIGdyZWF0ZXIgdGhh biB0aGUgc3BlY2lmaWVkIHRocmVzaG9sZCBtYXkgYmUKLSAgICAgICAgb3ZlcnJpZGRlbi4gIE5v dGUgdGhhdCByZXF1ZXN0cyB3aXRoIGFyZW5hIGluZGV4IHNwZWNpZmllZCB2aWEKLSAgICAgICAg PGNvbnN0YW50Pk1BTExPQ1hfQVJFTkE8L2NvbnN0YW50Piwgb3IgdGhyZWFkcyBhc3NvY2lhdGVk IHdpdGggZXhwbGljaXQKLSAgICAgICAgYXJlbmFzIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQuICBU aGUgZGVmYXVsdCB0aHJlc2hvbGQgaXMgOE1pQi4gIFZhbHVlcwotICAgICAgICBub3Qgd2l0aGlu IGxhcmdlIHNpemUgY2xhc3NlcyBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuPC9wYXJhPjwvbGlzdGl0 ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0 LnBlcmNwdV9hcmVuYSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPm9wdC5w ZXJjcHVfYXJlbmE8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlw ZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlBlciBDUFUgYXJlbmEgbW9kZS4gIFVzZSB0aGUgPHF1b3Rl PnBlcmNwdTwvcXVvdGU+Ci0gICAgICAgIHNldHRpbmcgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwg d2hpY2ggdXNlcyBudW1iZXIgb2YgQ1BVcyB0byBkZXRlcm1pbmUKLSAgICAgICAgbnVtYmVyIG9m IGFyZW5hcywgYW5kIGJpbmQgdGhyZWFkcyB0byBhcmVuYXMgZHluYW1pY2FsbHkgYmFzZWQgb24g dGhlCi0gICAgICAgIENQVSB0aGUgdGhyZWFkIHJ1bnMgb24gY3VycmVudGx5LiAgPHF1b3RlPnBo eWNwdTwvcXVvdGU+IHNldHRpbmcgdXNlcwotICAgICAgICBvbmUgYXJlbmEgcGVyIHBoeXNpY2Fs IENQVSwgd2hpY2ggbWVhbnMgdGhlIHR3byBoeXBlciB0aHJlYWRzIG9uIHRoZQotICAgICAgICBz YW1lIENQVSBzaGFyZSBvbmUgYXJlbmEuICBOb3RlIHRoYXQgbm8gcnVudGltZSBjaGVja2luZyBy ZWdhcmRpbmcgdGhlCi0gICAgICAgIGF2YWlsYWJpbGl0eSBvZiBoeXBlciB0aHJlYWRpbmcgaXMg ZG9uZSBhdCB0aGUgbW9tZW50LiAgV2hlbiBzZXQgdG8KLSAgICAgICAgPHF1b3RlPmRpc2FibGVk PC9xdW90ZT4sIG5hcmVuYXMgYW5kIHRocmVhZCB0byBhcmVuYSBhc3NvY2lhdGlvbiB3aWxsCi0g ICAgICAgIG5vdCBiZSBpbXBhY3RlZCBieSB0aGlzIG9wdGlvbi4gIFRoZSBkZWZhdWx0IGlzIDxx dW90ZT5kaXNhYmxlZDwvcXVvdGU+LgotICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAg IDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQuYmFja2dyb3Vu ZF90aHJlYWQiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQuYmFja2dy b3VuZF90aHJlYWQ8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAg ICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxs aXN0aXRlbT48cGFyYT5JbnRlcm5hbCBiYWNrZ3JvdW5kIHdvcmtlciB0aHJlYWRzIGVuYWJsZWQv ZGlzYWJsZWQuCi0gICAgICAgIEJlY2F1c2Ugb2YgcG90ZW50aWFsIGNpcmN1bGFyIGRlcGVuZGVu Y2llcywgZW5hYmxpbmcgYmFja2dyb3VuZCB0aHJlYWQKLSAgICAgICAgdXNpbmcgdGhpcyBvcHRp b24gbWF5IGNhdXNlIGNyYXNoIG9yIGRlYWRsb2NrIGR1cmluZyBpbml0aWFsaXphdGlvbi4gRm9y Ci0gICAgICAgIGEgcmVsaWFibGUgd2F5IHRvIHVzZSB0aGlzIGZlYXR1cmUsIHNlZSA8bGluawot ICAgICAgICBsaW5rZW5kPSJiYWNrZ3JvdW5kX3RocmVhZCI+YmFja2dyb3VuZF90aHJlYWQ8L2xp bms+IGZvciBkeW5hbWljIGNvbnRyb2wKLSAgICAgICAgb3B0aW9ucyBhbmQgZGV0YWlscy4gIFRo aXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5Ci0gICAgICAgIGRlZmF1bHQuPC9wYXJhPjwvbGlzdGl0 ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0 Lm1heF9iYWNrZ3JvdW5kX3RocmVhZHMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFs bGN0bD5vcHQubWF4X2JhY2tncm91bmRfdGhyZWFkczwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5 cGU+c2l6ZV90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAg ICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWF4aW11bSBudW1iZXIgb2YgYmFj a2dyb3VuZCB0aHJlYWRzIHRoYXQgd2lsbCBiZSBjcmVhdGVkCi0gICAgICAgIGlmIDxsaW5rIGxp bmtlbmQ9ImJhY2tncm91bmRfdGhyZWFkIj5iYWNrZ3JvdW5kX3RocmVhZDwvbGluaz4gaXMgc2V0 LgotICAgICAgICBEZWZhdWx0cyB0byBudW1iZXIgb2YgY3B1cy48L3BhcmE+PC9saXN0aXRlbT4K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQuZGly dHlfZGVjYXlfbXMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQuZGly dHlfZGVjYXlfbXM8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNzaXplX3Q8L3R5cGU+KQot ICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAg IDxsaXN0aXRlbT48cGFyYT5BcHByb3hpbWF0ZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBmcm9tIHRo ZSBjcmVhdGlvbiBvZiBhCi0gICAgICAgIHNldCBvZiB1bnVzZWQgZGlydHkgcGFnZXMgdW50aWwg YW4gZXF1aXZhbGVudCBzZXQgb2YgdW51c2VkIGRpcnR5IHBhZ2VzCi0gICAgICAgIGlzIHB1cmdl ZCAoaS5lLiBjb252ZXJ0ZWQgdG8gbXV6enkgdmlhIGUuZy4KLSAgICAgICAgPGZ1bmN0aW9uPm1h ZHZpc2UoPHBhcmFtZXRlcj4uLi48L3BhcmFtZXRlcj48cGFyYW1ldGVyPjxjb25zdGFudD5NQURW X0ZSRUU8L2NvbnN0YW50PjwvcGFyYW1ldGVyPik8L2Z1bmN0aW9uPgotICAgICAgICBpZiBzdXBw b3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIG9yIGNvbnZlcnRlZCB0byBjbGVhbiBvdGhl cndpc2UpCi0gICAgICAgIGFuZC9vciByZXVzZWQuICBEaXJ0eSBwYWdlcyBhcmUgZGVmaW5lZCBh cyBwcmV2aW91c2x5IGhhdmluZyBiZWVuCi0gICAgICAgIHBvdGVudGlhbGx5IHdyaXR0ZW4gdG8g YnkgdGhlIGFwcGxpY2F0aW9uLCBhbmQgdGhlcmVmb3JlIGNvbnN1bWluZwotICAgICAgICBwaHlz aWNhbCBtZW1vcnksIHlldCBoYXZpbmcgbm8gY3VycmVudCB1c2UuICBUaGUgcGFnZXMgYXJlIGlu Y3JlbWVudGFsbHkKLSAgICAgICAgcHVyZ2VkIGFjY29yZGluZyB0byBhIHNpZ21vaWRhbCBkZWNh eSBjdXJ2ZSB0aGF0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoCi0gICAgICAgIHplcm8gcHVyZ2UgcmF0 ZS4gIEEgZGVjYXkgdGltZSBvZiAwIGNhdXNlcyBhbGwgdW51c2VkIGRpcnR5IHBhZ2VzIHRvIGJl Ci0gICAgICAgIHB1cmdlZCBpbW1lZGlhdGVseSB1cG9uIGNyZWF0aW9uLiAgQSBkZWNheSB0aW1l IG9mIC0xIGRpc2FibGVzIHB1cmdpbmcuCi0gICAgICAgIFRoZSBkZWZhdWx0IGRlY2F5IHRpbWUg aXMgMTAgc2Vjb25kcy4gIFNlZSA8bGluawotICAgICAgICBsaW5rZW5kPSJhcmVuYXMuZGlydHlf ZGVjYXlfbXMiPjxtYWxsY3RsPmFyZW5hcy5kaXJ0eV9kZWNheV9tczwvbWFsbGN0bD48L2xpbms+ Ci0gICAgICAgIGFuZCA8bGluawotICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRpcnR5X2RlY2F5 X21zIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsuZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9s aW5rPgotICAgICAgICBmb3IgcmVsYXRlZCBkeW5hbWljIGNvbnRyb2wgb3B0aW9ucy4gIFNlZSA8 bGluawotICAgICAgICBsaW5rZW5kPSJvcHQubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPm9wdC5t dXp6eV9kZWNheV9tczwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIGZvciBhIGRlc2NyaXB0aW9u IG9mIG11enp5IHBhZ2VzLmZvciBhIGRlc2NyaXB0aW9uIG9mIG11enp5IHBhZ2VzLiAgTm90ZQot ICAgICAgICB0aGF0IHdoZW4gdGhlIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC5vdmVyc2l6 ZV90aHJlc2hvbGQiPjxtYWxsY3RsPm92ZXJzaXplX3RocmVzaG9sZDwvbWFsbGN0bD48L2xpbms+ Ci0gICAgICAgIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIGFyZW5hcyByZXNlcnZlZCBmb3Igb3Zl cnNpemUgcmVxdWVzdHMgbWF5IGhhdmUKLSAgICAgICAgaXRzIG93biBkZWZhdWx0IGRlY2F5IHNl dHRpbmdzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5tdXp6eV9kZWNheV9tcyI+Ci0gICAgICAgIDx0ZXJtPgot ICAgICAgICAgIDxtYWxsY3RsPm9wdC5tdXp6eV9kZWNheV9tczwvbWFsbGN0bD4KLSAgICAgICAg ICAoPHR5cGU+c3NpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFwcHJveGltYXRlIHRp bWUgaW4gbWlsbGlzZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9mIGEKLSAgICAgICAgc2V0IG9m IHVudXNlZCBtdXp6eSBwYWdlcyB1bnRpbCBhbiBlcXVpdmFsZW50IHNldCBvZiB1bnVzZWQgbXV6 enkgcGFnZXMKLSAgICAgICAgaXMgcHVyZ2VkIChpLmUuIGNvbnZlcnRlZCB0byBjbGVhbikgYW5k L29yIHJldXNlZC4gIE11enp5IHBhZ2VzIGFyZQotICAgICAgICBkZWZpbmVkIGFzIHByZXZpb3Vz bHkgaGF2aW5nIGJlZW4gdW51c2VkIGRpcnR5IHBhZ2VzIHRoYXQgd2VyZQotICAgICAgICBzdWJz ZXF1ZW50bHkgcHVyZ2VkIGluIGEgbWFubmVyIHRoYXQgbGVmdCB0aGVtIHN1YmplY3QgdG8gdGhl Ci0gICAgICAgIHJlY2xhbWF0aW9uIHdoaW1zIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIChlLmcu Ci0gICAgICAgIDxmdW5jdGlvbj5tYWR2aXNlKDxwYXJhbWV0ZXI+Li4uPC9wYXJhbWV0ZXI+PHBh cmFtZXRlcj48Y29uc3RhbnQ+TUFEVl9GUkVFPC9jb25zdGFudD48L3BhcmFtZXRlcj4pPC9mdW5j dGlvbj4pLAotICAgICAgICBhbmQgdGhlcmVmb3JlIGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUu ICBUaGUgcGFnZXMgYXJlIGluY3JlbWVudGFsbHkKLSAgICAgICAgcHVyZ2VkIGFjY29yZGluZyB0 byBhIHNpZ21vaWRhbCBkZWNheSBjdXJ2ZSB0aGF0IHN0YXJ0cyBhbmQgZW5kcyB3aXRoCi0gICAg ICAgIHplcm8gcHVyZ2UgcmF0ZS4gIEEgZGVjYXkgdGltZSBvZiAwIGNhdXNlcyBhbGwgdW51c2Vk IG11enp5IHBhZ2VzIHRvIGJlCi0gICAgICAgIHB1cmdlZCBpbW1lZGlhdGVseSB1cG9uIGNyZWF0 aW9uLiAgQSBkZWNheSB0aW1lIG9mIC0xIGRpc2FibGVzIHB1cmdpbmcuCi0gICAgICAgIFRoZSBk ZWZhdWx0IGRlY2F5IHRpbWUgaXMgMTAgc2Vjb25kcy4gIFNlZSA8bGluawotICAgICAgICBsaW5r ZW5kPSJhcmVuYXMubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPmFyZW5hcy5tdXp6eV9kZWNheV9t czwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIGFuZCA8bGluawotICAgICAgICBsaW5rZW5kPSJh cmVuYS5pLm11enp5X2RlY2F5X21zIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsubXV6enlfZGVj YXlfbXM8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBmb3IgcmVsYXRlZCBkeW5hbWljIGNvbnRy b2wgb3B0aW9ucy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0g ICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQubGdfZXh0ZW50X21heF9hY3RpdmVfZml0Ij4KLSAg ICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+b3B0LmxnX2V4dGVudF9tYXhfYWN0aXZl X2ZpdDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKLSAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+V2hlbiByZXVzaW5nIGRpcnR5IGV4dGVudHMsIHRoaXMgZGV0ZXJtaW5lcyB0aGUg KGxvZwotICAgICAgICBiYXNlIDIgb2YgdGhlKSBtYXhpbXVtIHJhdGlvIGJldHdlZW4gdGhlIHNp emUgb2YgdGhlIGFjdGl2ZSBleHRlbnQKLSAgICAgICAgc2VsZWN0ZWQgKHRvIHNwbGl0IG9mZiBm cm9tKSBhbmQgdGhlIHNpemUgb2YgdGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uLgotICAgICAgICBU aGlzIHByZXZlbnRzIHRoZSBzcGxpdHRpbmcgb2YgbGFyZ2UgYWN0aXZlIGV4dGVudHMgZm9yIHNt YWxsZXIKLSAgICAgICAgYWxsb2NhdGlvbnMsIHdoaWNoIGNhbiByZWR1Y2UgZnJhZ21lbnRhdGlv biBvdmVyIHRoZSBsb25nIHJ1bgotICAgICAgICAoZXNwZWNpYWxseSBmb3Igbm9uLWFjdGl2ZSBl eHRlbnRzKS4gIExvd2VyIHZhbHVlIG1heSByZWR1Y2UKLSAgICAgICAgZnJhZ21lbnRhdGlvbiwg YXQgdGhlIGNvc3Qgb2YgZXh0cmEgYWN0aXZlIGV4dGVudHMuICBUaGUgZGVmYXVsdCB2YWx1ZQot ICAgICAgICBpcyA2LCB3aGljaCBnaXZlcyBhIG1heGltdW0gcmF0aW8gb2YgNjQgKDJeNikuPC9w YXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ib3B0LnN0YXRzX3ByaW50Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1h bGxjdGw+b3B0LnN0YXRzX3ByaW50PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5ib29sPC90 eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgot ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RW5hYmxlL2Rpc2FibGUgc3RhdGlzdGljcyBwcmludGlu ZyBhdCBleGl0LiAgSWYKLSAgICAgICAgZW5hYmxlZCwgdGhlIDxmdW5jdGlvbj5tYWxsb2Nfc3Rh dHNfcHJpbnQoKTwvZnVuY3Rpb24+Ci0gICAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9n cmFtIGV4aXQgdmlhIGFuCi0gICAgICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+YXRl eGl0PC9yZWZlbnRyeXRpdGxlPgotICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZvbG51bT48L2Np dGVyZWZlbnRyeT4gZnVuY3Rpb24uICA8bGluawotICAgICAgICBsaW5rZW5kPSJvcHQuc3RhdHNf cHJpbnRfb3B0cyI+PG1hbGxjdGw+b3B0LnN0YXRzX3ByaW50X29wdHM8L21hbGxjdGw+PC9saW5r PgotICAgICAgICBjYW4gYmUgY29tYmluZWQgdG8gc3BlY2lmeSBvdXRwdXQgb3B0aW9ucy4gSWYK LSAgICAgICAgPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPiBpcyBzcGVjaWZpZWQgZHVy aW5nIGNvbmZpZ3VyYXRpb24sIHRoaXMKLSAgICAgICAgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY2F1 c2UgZGVhZGxvY2sgZm9yIGEgbXVsdGktdGhyZWFkZWQgcHJvY2VzcyB0aGF0Ci0gICAgICAgIGV4 aXRzIHdoaWxlIG9uZSBvciBtb3JlIHRocmVhZHMgYXJlIGV4ZWN1dGluZyBpbiB0aGUgbWVtb3J5 IGFsbG9jYXRpb24KLSAgICAgICAgZnVuY3Rpb25zLiAgRnVydGhlcm1vcmUsIDxmdW5jdGlvbj5h dGV4aXQoKTwvZnVuY3Rpb24+IG1heQotICAgICAgICBhbGxvY2F0ZSBtZW1vcnkgZHVyaW5nIGFw cGxpY2F0aW9uIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIGRlYWRsb2NrCi0gICAgICAgIGludGVy bmFsbHkgd2hlbiBqZW1hbGxvYyBpbiB0dXJuIGNhbGxzCi0gICAgICAgIDxmdW5jdGlvbj5hdGV4 aXQoKTwvZnVuY3Rpb24+LCBzbyB0aGlzIG9wdGlvbiBpcyBub3QKLSAgICAgICAgdW5pdmVyc2Fs bHkgdXNhYmxlICh0aG91Z2ggdGhlIGFwcGxpY2F0aW9uIGNhbiByZWdpc3RlciBpdHMgb3duCi0g ICAgICAgIDxmdW5jdGlvbj5hdGV4aXQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHdpdGggZXF1aXZh bGVudAotICAgICAgICBmdW5jdGlvbmFsaXR5KS4gIFRoZXJlZm9yZSwgdGhpcyBvcHRpb24gc2hv dWxkIG9ubHkgYmUgdXNlZCB3aXRoIGNhcmU7Ci0gICAgICAgIGl0IGlzIHByaW1hcmlseSBpbnRl bmRlZCBhcyBhIHBlcmZvcm1hbmNlIHR1bmluZyBhaWQgZHVyaW5nIGFwcGxpY2F0aW9uCi0gICAg ICAgIGRldmVsb3BtZW50LiAgVGhpcyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC48L3Bh cmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVu dHJ5IGlkPSJvcHQuc3RhdHNfcHJpbnRfb3B0cyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAg IDxtYWxsY3RsPm9wdC5zdGF0c19wcmludF9vcHRzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlw ZT5jb25zdCBjaGFyICo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgot ICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5PcHRpb25zICh0aGUgPHBh cmFtZXRlcj5vcHRzPC9wYXJhbWV0ZXI+IHN0cmluZykgdG8gcGFzcwotICAgICAgICB0byB0aGUg PGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj4gYXQgZXhpdCAoZW5hYmxl ZAotICAgICAgICB0aHJvdWdoIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC5zdGF0c19wcmlu dCI+PG1hbGxjdGw+b3B0LnN0YXRzX3ByaW50PC9tYWxsY3RsPjwvbGluaz4pLiBTZWUKLSAgICAg ICAgYXZhaWxhYmxlIG9wdGlvbnMgaW4gPGxpbmsKLSAgICAgICAgbGlua2VuZD0ibWFsbG9jX3N0 YXRzX3ByaW50X29wdHMiPjxmdW5jdGlvbj5tYWxsb2Nfc3RhdHNfcHJpbnQoKTwvZnVuY3Rpb24+ PC9saW5rPi4KLSAgICAgICAgSGFzIG5vIGVmZmVjdCB1bmxlc3MgPGxpbmsKLSAgICAgICAgbGlu a2VuZD0ib3B0LnN0YXRzX3ByaW50Ij48bWFsbGN0bD5vcHQuc3RhdHNfcHJpbnQ8L21hbGxjdGw+ PC9saW5rPiBpcwotICAgICAgICBlbmFibGVkLiAgVGhlIGRlZmF1bHQgaXMgPHF1b3RlPjwvcXVv dGU+LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Im9wdC5zdGF0c19pbnRlcnZhbCI+Ci0gICAgICAgIDx0ZXJtPgotICAg ICAgICAgIDxtYWxsY3RsPm9wdC5zdGF0c19pbnRlcnZhbDwvbWFsbGN0bD4KLSAgICAgICAgICAo PHR5cGU+aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0g ICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkF2ZXJhZ2UgaW50ZXJ2YWwg YmV0d2VlbiBzdGF0aXN0aWNzIG91dHB1dHMsIGFzIG1lYXN1cmVkCi0gICAgICAgIGluIGJ5dGVz IG9mIGFsbG9jYXRpb24gYWN0aXZpdHkuICBUaGUgYWN0dWFsIGludGVydmFsIG1heSBiZSBzcG9y YWRpYwotICAgICAgICBiZWNhdXNlIGRlY2VudHJhbGl6ZWQgZXZlbnQgY291bnRlcnMgYXJlIHVz ZWQgdG8gYXZvaWQgc3luY2hyb25pemF0aW9uCi0gICAgICAgIGJvdHRsZW5lY2tzLiAgVGhlIG91 dHB1dCBtYXkgYmUgdHJpZ2dlcmVkIG9uIGFueSB0aHJlYWQsIHdoaWNoIHRoZW4KLSAgICAgICAg Y2FsbHMgPGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj4uICA8bGluawot ICAgICAgICBsaW5rZW5kPSJvcHQuc3RhdHNfaW50ZXJ2YWxfb3B0cyI+PG1hbGxjdGw+b3B0LnN0 YXRzX2ludGVydmFsX29wdHM8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBjYW4gYmUgY29tYmlu ZWQgdG8gc3BlY2lmeSBvdXRwdXQgb3B0aW9ucy4gIEJ5IGRlZmF1bHQsCi0gICAgICAgIGludGVy dmFsLXRyaWdnZXJlZCBzdGF0cyBvdXRwdXQgaXMgZGlzYWJsZWQgKGVuY29kZWQgYXMKLSAgICAg ICAgLTEpLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAg IDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5zdGF0c19pbnRlcnZhbF9vcHRzIj4KLSAgICAgICAgPHRl cm0+Ci0gICAgICAgICAgPG1hbGxjdGw+b3B0LnN0YXRzX2ludGVydmFsX29wdHM8L21hbGxjdGw+ Ci0gICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVy YWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJh Pk9wdGlvbnMgKHRoZSA8cGFyYW1ldGVyPm9wdHM8L3BhcmFtZXRlcj4gc3RyaW5nKSB0byBwYXNz Ci0gICAgICAgIHRvIHRoZSA8ZnVuY3Rpb24+bWFsbG9jX3N0YXRzX3ByaW50KCk8L2Z1bmN0aW9u PiBmb3IgaW50ZXJ2YWwgYmFzZWQKLQlzdGF0aXN0aWNzIHByaW50aW5nIChlbmFibGVkCi0gICAg ICAgIHRocm91Z2ggPGxpbmsKLSAgICAgICAgbGlua2VuZD0ib3B0LnN0YXRzX2ludGVydmFsIj48 bWFsbGN0bD5vcHQuc3RhdHNfaW50ZXJ2YWw8L21hbGxjdGw+PC9saW5rPikuIFNlZQotICAgICAg ICBhdmFpbGFibGUgb3B0aW9ucyBpbiA8bGluawotICAgICAgICBsaW5rZW5kPSJtYWxsb2Nfc3Rh dHNfcHJpbnRfb3B0cyI+PGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj48 L2xpbms+LgotICAgICAgICBIYXMgbm8gZWZmZWN0IHVubGVzcyA8bGluawotICAgICAgICBsaW5r ZW5kPSJvcHQuc3RhdHNfaW50ZXJ2YWwiPjxtYWxsY3RsPm9wdC5zdGF0c19pbnRlcnZhbDwvbWFs bGN0bD48L2xpbms+IGlzCi0gICAgICAgIGVuYWJsZWQuICBUaGUgZGVmYXVsdCBpcyA8cXVvdGU+ PC9xdW90ZT4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0Lmp1bmsiPgotICAgICAgICA8dGVybT4KLSAgICAgICAg ICA8bWFsbGN0bD5vcHQuanVuazwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Y29uc3QgY2hh ciAqPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBb PG9wdGlvbj4tLWVuYWJsZS1maWxsPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAg IDxsaXN0aXRlbT48cGFyYT5KdW5rIGZpbGxpbmcuICBJZiBzZXQgdG8gPHF1b3RlPmFsbG9jPC9x dW90ZT4sIGVhY2ggYnl0ZQotICAgICAgICBvZiB1bmluaXRpYWxpemVkIGFsbG9jYXRlZCBtZW1v cnkgd2lsbCBiZSBpbml0aWFsaXplZCB0bwotICAgICAgICA8bGl0ZXJhbD4weGE1PC9saXRlcmFs Pi4gIElmIHNldCB0byA8cXVvdGU+ZnJlZTwvcXVvdGU+LCBhbGwgZGVhbGxvY2F0ZWQKLSAgICAg ICAgbWVtb3J5IHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gPGxpdGVyYWw+MHg1YTwvbGl0ZXJhbD4u ICBJZiBzZXQgdG8KLSAgICAgICAgPHF1b3RlPnRydWU8L3F1b3RlPiwgYm90aCBhbGxvY2F0ZWQg YW5kIGRlYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlCi0gICAgICAgIGluaXRpYWxpemVkLCBhbmQg aWYgc2V0IHRvIDxxdW90ZT5mYWxzZTwvcXVvdGU+LCBqdW5rIGZpbGxpbmcgYmUKLSAgICAgICAg ZGlzYWJsZWQgZW50aXJlbHkuICBUaGlzIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgYW5kIHdp bGwgaW1wYWN0Ci0gICAgICAgIHBlcmZvcm1hbmNlIG5lZ2F0aXZlbHkuICBUaGlzIG9wdGlvbiBp cyA8cXVvdGU+ZmFsc2U8L3F1b3RlPiBieSBkZWZhdWx0Ci0gICAgICAgIHVubGVzcyA8b3B0aW9u Pi0tZW5hYmxlLWRlYnVnPC9vcHRpb24+IGlzIHNwZWNpZmllZCBkdXJpbmcKLSAgICAgICAgY29u ZmlndXJhdGlvbiwgaW4gd2hpY2ggY2FzZSBpdCBpcyA8cXVvdGU+dHJ1ZTwvcXVvdGU+IGJ5Ci0g ICAgICAgIGRlZmF1bHQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4K LQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0Lnplcm8iPgotICAgICAgICA8dGVybT4KLSAg ICAgICAgICA8bWFsbGN0bD5vcHQuemVybzwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Ym9v bDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxv cHRpb24+LS1lbmFibGUtZmlsbDwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+WmVybyBmaWxsaW5nIGVuYWJsZWQvZGlzYWJsZWQuICBJZiBlbmFibGVk LCBlYWNoIGJ5dGUKLSAgICAgICAgb2YgdW5pbml0aWFsaXplZCBhbGxvY2F0ZWQgbWVtb3J5IHdp bGwgYmUgaW5pdGlhbGl6ZWQgdG8gMC4gIE5vdGUgdGhhdAotICAgICAgICB0aGlzIGluaXRpYWxp emF0aW9uIG9ubHkgaGFwcGVucyBvbmNlIGZvciBlYWNoIGJ5dGUsIHNvCi0gICAgICAgIDxmdW5j dGlvbj5yZWFsbG9jKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgICAgPGZ1bmN0aW9uPnJhbGxvY3go KTwvZnVuY3Rpb24+IGNhbGxzIGRvIG5vdCB6ZXJvIG1lbW9yeSB0aGF0Ci0gICAgICAgIHdhcyBw cmV2aW91c2x5IGFsbG9jYXRlZC4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBhbmQg d2lsbAotICAgICAgICBpbXBhY3QgcGVyZm9ybWFuY2UgbmVnYXRpdmVseS4gIFRoaXMgb3B0aW9u IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAg ICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC51dHJhY2Ui PgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQudXRyYWNlPC9tYWxsY3Rs PgotICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwv bGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS11dHJhY2U8L29wdGlvbj5dCi0g ICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFsbG9jYXRpb24gdHJhY2lu ZyBiYXNlZCBvbgotICAgICAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnV0cmFjZTwv cmVmZW50cnl0aXRsZT4KLSAgICAgICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRlcmVm ZW50cnk+IGVuYWJsZWQvZGlzYWJsZWQuICBUaGlzIG9wdGlvbgotICAgICAgICBpcyBkaXNhYmxl ZCBieSBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0K LSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC54bWFsbG9jIj4KLSAgICAgICAgPHRlcm0+Ci0g ICAgICAgICAgPG1hbGxjdGw+b3B0LnhtYWxsb2M8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBl PmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAg IFs8b3B0aW9uPi0tZW5hYmxlLXhtYWxsb2M8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPkFib3J0LW9uLW91dC1vZi1tZW1vcnkgZW5hYmxlZC9kaXNh YmxlZC4gIElmIGVuYWJsZWQsCi0gICAgICAgIHJhdGhlciB0aGFuIHJldHVybmluZyBmYWlsdXJl IGZvciBhbnkgYWxsb2NhdGlvbiBmdW5jdGlvbiwgZGlzcGxheSBhCi0gICAgICAgIGRpYWdub3N0 aWMgbWVzc2FnZSBvbiA8Y29uc3RhbnQ+U1RERVJSX0ZJTEVOTzwvY29uc3RhbnQ+IGFuZCBjYXVz ZSB0aGUKLSAgICAgICAgcHJvZ3JhbSB0byBkcm9wIGNvcmUgKHVzaW5nCi0gICAgICAgIDxjaXRl cmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+YWJvcnQ8L3JlZmVudHJ5dGl0bGU+Ci0gICAgICAgIDxt YW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PikuICBJZiBhbiBhcHBsaWNhdGlv biBpcwotICAgICAgICBkZXNpZ25lZCB0byBkZXBlbmQgb24gdGhpcyBiZWhhdmlvciwgc2V0IHRo ZSBvcHRpb24gYXQgY29tcGlsZSB0aW1lIGJ5Ci0gICAgICAgIGluY2x1ZGluZyB0aGUgZm9sbG93 aW5nIGluIHRoZSBzb3VyY2UgY29kZToKLSAgICAgICAgPHByb2dyYW1saXN0aW5nIGxhbmd1YWdl PSJDIj48IVtDREFUQVsKLW1hbGxvY19jb25mID0gInhtYWxsb2M6dHJ1ZSI7XV0+PC9wcm9ncmFt bGlzdGluZz4KLSAgICAgICAgVGhpcyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC48L3Bh cmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVu dHJ5IGlkPSJvcHQudGNhY2hlIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+ b3B0LnRjYWNoZTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCi0gICAg ICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxp c3RpdGVtPjxwYXJhPlRocmVhZC1zcGVjaWZpYyBjYWNoaW5nICh0Y2FjaGUpIGVuYWJsZWQvZGlz YWJsZWQuICBXaGVuCi0gICAgICAgIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzLCBlYWNoIHRo cmVhZCB1c2VzIGEgdGNhY2hlIGZvciBvYmplY3RzIHVwIHRvCi0gICAgICAgIGEgY2VydGFpbiBz aXplLiAgVGhyZWFkLXNwZWNpZmljIGNhY2hpbmcgYWxsb3dzIG1hbnkgYWxsb2NhdGlvbnMgdG8g YmUKLSAgICAgICAgc2F0aXNmaWVkIHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgdGhyZWFkIHN5bmNo cm9uaXphdGlvbiwgYXQgdGhlIGNvc3Qgb2YKLSAgICAgICAgaW5jcmVhc2VkIG1lbW9yeSB1c2Uu ICBTZWUgdGhlIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC50Y2FjaGVfbWF4Ij48bWFsbGN0 bD5vcHQudGNhY2hlX21heDwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIG9wdGlvbiBmb3IgcmVs YXRlZCB0dW5pbmcgaW5mb3JtYXRpb24uICBUaGlzIG9wdGlvbiBpcyBlbmFibGVkIGJ5Ci0gICAg ICAgIGRlZmF1bHQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQot ICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnRjYWNoZV9tYXgiPgotICAgICAgICA8dGVybT4K LSAgICAgICAgICA8bWFsbGN0bD5vcHQudGNhY2hlX21heDwvbWFsbGN0bD4KLSAgICAgICAgICAo PHR5cGU+c2l6ZV90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAg ICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWF4aW11bSBzaXplIGNsYXNz IHRvIGNhY2hlIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgY2FjaGUKLSAgICAgICAgKHRjYWNoZSku ICBBdCBhIG1pbmltdW0sIHRoZSBmaXJzdCBzaXplIGNsYXNzIGlzIGNhY2hlZDsgYW5kIGF0IGEK LSAgICAgICAgbWF4aW11bSwgc2l6ZSBjbGFzc2VzIHVwIHRvIDggTWlCIGNhbiBiZSBjYWNoZWQu ICBUaGUgZGVmYXVsdCBtYXhpbXVtIGlzCi0gICAgICAgIDMyIEtpQiAoMl4xNSkuICBBcyBhIGNv bnZlbmllbmNlLCB0aGlzIG1heSBhbHNvIGJlIHNldCBieSBzcGVjaWZ5aW5nCi0gICAgICAgIGxn X3RjYWNoZV9tYXgsIHdoaWNoIHdpbGwgYmUgdGFrZW4gdG8gYmUgdGhlIGJhc2UtMiBsb2dhcml0 aG0gb2YgdGhlCi0gICAgICAgIHNldHRpbmcgb2YgdGNhY2hlX21heC48L3BhcmE+PC9saXN0aXRl bT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQu dGhwIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+b3B0LnRocDwvbWFsbGN0 bD4KLSAgICAgICAgICAoPHR5cGU+Y29uc3QgY2hhciAqPC90eXBlPikKLSAgICAgICAgICA8bGl0 ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBh cmE+VHJhbnNwYXJlbnQgaHVnZXBhZ2UgKFRIUCkgbW9kZS4gU2V0dGluZ3MgImFsd2F5cyIsCi0g ICAgICAgICJuZXZlciIgYW5kICJkZWZhdWx0IiBhcmUgYXZhaWxhYmxlIGlmIFRIUCBpcyBzdXBw b3J0ZWQgYnkgdGhlIG9wZXJhdGluZwotICAgICAgICBzeXN0ZW0uICBUaGUgImFsd2F5cyIgc2V0 dGluZyBlbmFibGVzIHRyYW5zcGFyZW50IGh1Z2VwYWdlIGZvciBhbGwgdXNlcgotICAgICAgICBt ZW1vcnkgbWFwcGluZ3Mgd2l0aAotICAgICAgICA8cGFyYW1ldGVyPjxjb25zdGFudD5NQURWX0hV R0VQQUdFPC9jb25zdGFudD48L3BhcmFtZXRlcj47ICJuZXZlciIKLSAgICAgICAgZW5zdXJlcyBu byB0cmFuc3BhcmVudCBodWdlcGFnZSB3aXRoCi0gICAgICAgIDxwYXJhbWV0ZXI+PGNvbnN0YW50 Pk1BRFZfTk9IVUdFUEFHRTwvY29uc3RhbnQ+PC9wYXJhbWV0ZXI+OyB0aGUgZGVmYXVsdAotICAg ICAgICBzZXR0aW5nICJkZWZhdWx0IiBtYWtlcyBubyBjaGFuZ2VzLiAgTm90ZSB0aGF0OiB0aGlz IG9wdGlvbiBkb2VzIG5vdAotICAgICAgICBhZmZlY3QgVEhQIGZvciBqZW1hbGxvYyBpbnRlcm5h bCBtZXRhZGF0YSAoc2VlIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC5tZXRhZGF0YV90aHAi PjxtYWxsY3RsPm9wdC5tZXRhZGF0YV90aHA8L21hbGxjdGw+PC9saW5rPik7Ci0gICAgICAgIGlu IGFkZGl0aW9uLCBmb3IgYXJlbmFzIHdpdGggY3VzdG9taXplZCA8bGluawotICAgICAgICBsaW5r ZW5kPSJhcmVuYS5pLmV4dGVudF9ob29rcyI+PG1hbGxjdGw+ZXh0ZW50X2hvb2tzPC9tYWxsY3Rs PjwvbGluaz4sCi0gICAgICAgIHRoaXMgb3B0aW9uIGlzIGJ5cGFzc2VkIGFzIGl0IGlzIGltcGxl bWVudGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQKLSAgICAgICAgZXh0ZW50IGhvb2tzLjwvcGFy YT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9Im9wdC5wcm9mIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+b3B0 LnByb2Y8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAg IDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8 L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1lbW9y eSBwcm9maWxpbmcgZW5hYmxlZC9kaXNhYmxlZC4gIElmIGVuYWJsZWQsIHByb2ZpbGUKLSAgICAg ICAgbWVtb3J5IGFsbG9jYXRpb24gYWN0aXZpdHkuICBTZWUgdGhlIDxsaW5rCi0gICAgICAgIGxp bmtlbmQ9Im9wdC5wcm9mX2FjdGl2ZSI+PG1hbGxjdGw+b3B0LnByb2ZfYWN0aXZlPC9tYWxsY3Rs PjwvbGluaz4KLSAgICAgICAgb3B0aW9uIGZvciBvbi10aGUtZmx5IGFjdGl2YXRpb24vZGVhY3Rp dmF0aW9uLiAgU2VlIHRoZSA8bGluawotICAgICAgICBsaW5rZW5kPSJvcHQubGdfcHJvZl9zYW1w bGUiPjxtYWxsY3RsPm9wdC5sZ19wcm9mX3NhbXBsZTwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAg IG9wdGlvbiBmb3IgcHJvYmFiaWxpc3RpYyBzYW1wbGluZyBjb250cm9sLiAgU2VlIHRoZSA8bGlu awotICAgICAgICBsaW5rZW5kPSJvcHQucHJvZl9hY2N1bSI+PG1hbGxjdGw+b3B0LnByb2ZfYWNj dW08L21hbGxjdGw+PC9saW5rPgotICAgICAgICBvcHRpb24gZm9yIGNvbnRyb2wgb2YgY3VtdWxh dGl2ZSBzYW1wbGUgcmVwb3J0aW5nLiAgU2VlIHRoZSA8bGluawotICAgICAgICBsaW5rZW5kPSJv cHQubGdfcHJvZl9pbnRlcnZhbCI+PG1hbGxjdGw+b3B0LmxnX3Byb2ZfaW50ZXJ2YWw8L21hbGxj dGw+PC9saW5rPgotICAgICAgICBvcHRpb24gZm9yIGluZm9ybWF0aW9uIG9uIGludGVydmFsLXRy aWdnZXJlZCBwcm9maWxlIGR1bXBpbmcsIHRoZSA8bGluawotICAgICAgICBsaW5rZW5kPSJvcHQu cHJvZl9nZHVtcCI+PG1hbGxjdGw+b3B0LnByb2ZfZ2R1bXA8L21hbGxjdGw+PC9saW5rPgotICAg ICAgICBvcHRpb24gZm9yIGluZm9ybWF0aW9uIG9uIGhpZ2gtd2F0ZXItdHJpZ2dlcmVkIHByb2Zp bGUgZHVtcGluZywgYW5kIHRoZQotICAgICAgICA8bGluayBsaW5rZW5kPSJvcHQucHJvZl9maW5h bCI+PG1hbGxjdGw+b3B0LnByb2ZfZmluYWw8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBvcHRp b24gZm9yIGZpbmFsIHByb2ZpbGUgZHVtcGluZy4gIFByb2ZpbGUgb3V0cHV0IGlzIGNvbXBhdGli bGUgd2l0aAotICAgICAgICB0aGUgPGNvbW1hbmQ+amVwcm9mPC9jb21tYW5kPiBjb21tYW5kLCB3 aGljaCBpcyBiYXNlZCBvbiB0aGUKLSAgICAgICAgPGNvbW1hbmQ+cHByb2Y8L2NvbW1hbmQ+IHRo YXQgaXMgZGV2ZWxvcGVkIGFzIHBhcnQgb2YgdGhlIDx1bGluawotICAgICAgICB1cmw9Imh0dHA6 Ly9jb2RlLmdvb2dsZS5jb20vcC9ncGVyZnRvb2xzLyI+Z3BlcmZ0b29scwotICAgICAgICBwYWNr YWdlPC91bGluaz4uICBTZWUgPGxpbmsgbGlua2VuZD0iaGVhcF9wcm9maWxlX2Zvcm1hdCI+SEVB UCBQUk9GSUxFCi0gICAgICAgIEZPUk1BVDwvbGluaz4gZm9yIGhlYXAgcHJvZmlsZSBmb3JtYXQg ZG9jdW1lbnRhdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5Pgot Ci0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQucHJvZl9wcmVmaXgiPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl9wcmVmaXg8L21hbGxjdGw+Ci0gICAgICAg ICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KLSAgICAg ICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RmlsZW5hbWUgcHJlZml4IGZvciBw cm9maWxlIGR1bXBzLiAgSWYgdGhlIHByZWZpeCBpcwotICAgICAgICBzZXQgdG8gdGhlIGVtcHR5 IHN0cmluZywgbm8gYXV0b21hdGljIGR1bXBzIHdpbGwgb2NjdXI7IHRoaXMgaXMKLSAgICAgICAg cHJpbWFyaWx5IHVzZWZ1bCBmb3IgZGlzYWJsaW5nIHRoZSBhdXRvbWF0aWMgZmluYWwgaGVhcCBk dW1wICh3aGljaAotICAgICAgICBhbHNvIGRpc2FibGVzIGxlYWsgcmVwb3J0aW5nLCBpZiBlbmFi bGVkKS4gIFRoZSBkZWZhdWx0IHByZWZpeCBpcwotICAgICAgICA8ZmlsZW5hbWU+amVwcm9mPC9m aWxlbmFtZT4uICBUaGlzIHByZWZpeCB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieQotICAgICAg ICA8bGluayBsaW5rZW5kPSJwcm9mLnByZWZpeCI+PG1hbGxjdGw+cHJvZi5wcmVmaXg8L21hbGxj dGw+PC9saW5rPi4KLSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3Rl bnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnByb2ZfYWN0aXZlIj4KLSAgICAg ICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+b3B0LnByb2ZfYWN0aXZlPC9tYWxsY3RsPgot ICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1wcm9mPC9vcHRpb24+XQotICAgICAg ICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5Qcm9maWxpbmcgYWN0aXZhdGVkL2Rl YWN0aXZhdGVkLiAgVGhpcyBpcyBhIHNlY29uZGFyeQotICAgICAgICBjb250cm9sIG1lY2hhbmlz bSB0aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbiB3aXRoCi0g ICAgICAgIHByb2ZpbGluZyBlbmFibGVkIChzZWUgdGhlIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9 Im9wdC5wcm9mIj48bWFsbGN0bD5vcHQucHJvZjwvbWFsbGN0bD48L2xpbms+IG9wdGlvbikgYnV0 Ci0gICAgICAgIGluYWN0aXZlLCB0aGVuIHRvZ2dsZSBwcm9maWxpbmcgYXQgYW55IHRpbWUgZHVy aW5nIHByb2dyYW0gZXhlY3V0aW9uCi0gICAgICAgIHdpdGggdGhlIDxsaW5rCi0gICAgICAgIGxp bmtlbmQ9InByb2YuYWN0aXZlIj48bWFsbGN0bD5wcm9mLmFjdGl2ZTwvbWFsbGN0bD48L2xpbms+ IG1hbGxjdGwuCi0gICAgICAgIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC48L3Bh cmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVu dHJ5IGlkPSJvcHQucHJvZl90aHJlYWRfYWN0aXZlX2luaXQiPgotICAgICAgICA8dGVybT4KLSAg ICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl90aHJlYWRfYWN0aXZlX2luaXQ8L21hbGxjdGw+Ci0g ICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAg IDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkluaXRpYWwgc2V0dGluZyBmb3IgPGxp bmsKLSAgICAgICAgbGlua2VuZD0idGhyZWFkLnByb2YuYWN0aXZlIj48bWFsbGN0bD50aHJlYWQu cHJvZi5hY3RpdmU8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBpbiBuZXdseSBjcmVhdGVkIHRo cmVhZHMuICBUaGUgaW5pdGlhbCBzZXR0aW5nIGZvciBuZXdseSBjcmVhdGVkIHRocmVhZHMKLSAg ICAgICAgY2FuIGFsc28gYmUgY2hhbmdlZCBkdXJpbmcgZXhlY3V0aW9uIHZpYSB0aGUgPGxpbmsK LSAgICAgICAgbGlua2VuZD0icHJvZi50aHJlYWRfYWN0aXZlX2luaXQiPjxtYWxsY3RsPnByb2Yu dGhyZWFkX2FjdGl2ZV9pbml0PC9tYWxsY3RsPjwvbGluaz4KLSAgICAgICAgbWFsbGN0bC4gIFRo aXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAg IDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQubGdfcHJvZl9z YW1wbGUiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQubGdfcHJvZl9z YW1wbGU8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAg ICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJv Zjwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QXZl cmFnZSBpbnRlcnZhbCAobG9nIGJhc2UgMikgYmV0d2VlbiBhbGxvY2F0aW9uCi0gICAgICAgIHNh bXBsZXMsIGFzIG1lYXN1cmVkIGluIGJ5dGVzIG9mIGFsbG9jYXRpb24gYWN0aXZpdHkuICBJbmNy ZWFzaW5nIHRoZQotICAgICAgICBzYW1wbGluZyBpbnRlcnZhbCBkZWNyZWFzZXMgcHJvZmlsZSBm aWRlbGl0eSwgYnV0IGFsc28gZGVjcmVhc2VzIHRoZQotICAgICAgICBjb21wdXRhdGlvbmFsIG92 ZXJoZWFkLiAgVGhlIGRlZmF1bHQgc2FtcGxlIGludGVydmFsIGlzIDUxMiBLaUIgKDJeMTkKLSAg ICAgICAgQikuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnByb2ZfYWNjdW0iPgotICAgICAgICA8dGVybT4KLSAg ICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl9hY2N1bTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5 cGU+Ym9vbDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVwb3J0aW5nIG9mIGN1bXVsYXRpdmUgb2JqZWN0L2J5dGUg Y291bnRzIGluIHByb2ZpbGUKLSAgICAgICAgZHVtcHMgZW5hYmxlZC9kaXNhYmxlZC4gIElmIHRo aXMgb3B0aW9uIGlzIGVuYWJsZWQsIGV2ZXJ5IHVuaXF1ZQotICAgICAgICBiYWNrdHJhY2UgbXVz dCBiZSBzdG9yZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBleGVjdXRpb24uICBEZXBlbmRpbmcgb24K LSAgICAgICAgdGhlIGFwcGxpY2F0aW9uLCB0aGlzIGNhbiBpbXBvc2UgYSBsYXJnZSBtZW1vcnkg b3ZlcmhlYWQsIGFuZCB0aGUKLSAgICAgICAgY3VtdWxhdGl2ZSBjb3VudHMgYXJlIG5vdCBhbHdh eXMgb2YgaW50ZXJlc3QuICBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZAotICAgICAgICBieSBkZWZh dWx0LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Im9wdC5sZ19wcm9mX2ludGVydmFsIj4KLSAgICAgICAgPHRlcm0+Ci0g ICAgICAgICAgPG1hbGxjdGw+b3B0LmxnX3Byb2ZfaW50ZXJ2YWw8L21hbGxjdGw+Ci0gICAgICAg ICAgKDx0eXBlPnNzaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFs PgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAgIDwv dGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkF2ZXJhZ2UgaW50ZXJ2YWwgKGxvZyBiYXNl IDIpIGJldHdlZW4gbWVtb3J5IHByb2ZpbGUKLSAgICAgICAgZHVtcHMsIGFzIG1lYXN1cmVkIGlu IGJ5dGVzIG9mIGFsbG9jYXRpb24gYWN0aXZpdHkuICBUaGUgYWN0dWFsCi0gICAgICAgIGludGVy dmFsIGJldHdlZW4gZHVtcHMgbWF5IGJlIHNwb3JhZGljIGJlY2F1c2UgZGVjZW50cmFsaXplZCBh bGxvY2F0aW9uCi0gICAgICAgIGNvdW50ZXJzIGFyZSB1c2VkIHRvIGF2b2lkIHN5bmNocm9uaXph dGlvbiBib3R0bGVuZWNrcy4gIFByb2ZpbGVzIGFyZQotICAgICAgICBkdW1wZWQgdG8gZmlsZXMg bmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBwYXR0ZXJuCi0gICAgICAgIDxmaWxlbmFtZT4mbHQ7cHJl Zml4Jmd0Oy4mbHQ7cGlkJmd0Oy4mbHQ7c2VxJmd0Oy5pJmx0O2lzZXEmZ3Q7LmhlYXA8L2ZpbGVu YW1lPiwKLSAgICAgICAgd2hlcmUgPGxpdGVyYWw+Jmx0O3ByZWZpeCZndDs8L2xpdGVyYWw+IGlz IGNvbnRyb2xsZWQgYnkgdGhlCi0gICAgICAgIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC5w cm9mX3ByZWZpeCI+PG1hbGxjdGw+b3B0LnByb2ZfcHJlZml4PC9tYWxsY3RsPjwvbGluaz4gYW5k Ci0gICAgICAgIDxsaW5rIGxpbmtlbmQ9InByb2YucHJlZml4Ij48bWFsbGN0bD5wcm9mLnByZWZp eDwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIG9wdGlvbnMuICBCeSBkZWZhdWx0LCBpbnRlcnZh bC10cmlnZ2VyZWQgcHJvZmlsZSBkdW1waW5nIGlzIGRpc2FibGVkCi0gICAgICAgIChlbmNvZGVk IGFzIC0xKS4KLSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRy eT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ib3B0LnByb2ZfZ2R1bXAiPgotICAgICAgICA8 dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQucHJvZl9nZHVtcDwvbWFsbGN0bD4KLSAgICAg ICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KLSAgICAgICAgPC90 ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIDxs aW5rCi0gICAgICAgIGxpbmtlbmQ9InByb2YuZ2R1bXAiPjxtYWxsY3RsPnByb2YuZ2R1bXA8L21h bGxjdGw+PC9saW5rPiwgd2hpY2ggd2hlbgotICAgICAgICBlbmFibGVkIHRyaWdnZXJzIGEgbWVt b3J5IHByb2ZpbGUgZHVtcCBldmVyeSB0aW1lIHRoZSB0b3RhbCB2aXJ0dWFsCi0gICAgICAgIG1l bW9yeSBleGNlZWRzIHRoZSBwcmV2aW91cyBtYXhpbXVtLiAgVGhpcyBvcHRpb24gaXMgZGlzYWJs ZWQgYnkKLSAgICAgICAgZGVmYXVsdC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlz dGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQucHJvZl9maW5hbCI+Ci0gICAg ICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPm9wdC5wcm9mX2ZpbmFsPC9tYWxsY3RsPgot ICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1wcm9mPC9vcHRpb24+XQotICAgICAg ICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5Vc2UgYW4KLSAgICAgICAgPGNpdGVy ZWZlbnRyeT48cmVmZW50cnl0aXRsZT5hdGV4aXQ8L3JlZmVudHJ5dGl0bGU+Ci0gICAgICAgIDxt YW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiBmdW5jdGlvbiB0byBkdW1wIGZp bmFsIG1lbW9yeQotICAgICAgICB1c2FnZSB0byBhIGZpbGUgbmFtZWQgYWNjb3JkaW5nIHRvIHRo ZSBwYXR0ZXJuCi0gICAgICAgIDxmaWxlbmFtZT4mbHQ7cHJlZml4Jmd0Oy4mbHQ7cGlkJmd0Oy4m bHQ7c2VxJmd0Oy5mLmhlYXA8L2ZpbGVuYW1lPiwKLSAgICAgICAgd2hlcmUgPGxpdGVyYWw+Jmx0 O3ByZWZpeCZndDs8L2xpdGVyYWw+IGlzIGNvbnRyb2xsZWQgYnkgdGhlIDxsaW5rCi0gICAgICAg IGxpbmtlbmQ9Im9wdC5wcm9mX3ByZWZpeCI+PG1hbGxjdGw+b3B0LnByb2ZfcHJlZml4PC9tYWxs Y3RsPjwvbGluaz4gYW5kCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9InByb2YucHJlZml4Ij48bWFs bGN0bD5wcm9mLnByZWZpeDwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIG9wdGlvbnMuICBOb3Rl IHRoYXQgPGZ1bmN0aW9uPmF0ZXhpdCgpPC9mdW5jdGlvbj4gbWF5IGFsbG9jYXRlCi0gICAgICAg IG1lbW9yeSBkdXJpbmcgYXBwbGljYXRpb24gaW5pdGlhbGl6YXRpb24gYW5kIHRoZW4gZGVhZGxv Y2sgaW50ZXJuYWxseQotICAgICAgICB3aGVuIGplbWFsbG9jIGluIHR1cm4gY2FsbHMgPGZ1bmN0 aW9uPmF0ZXhpdCgpPC9mdW5jdGlvbj4sIHNvCi0gICAgICAgIHRoaXMgb3B0aW9uIGlzIG5vdCB1 bml2ZXJzYWxseSB1c2FibGUgKHRob3VnaCB0aGUgYXBwbGljYXRpb24gY2FuCi0gICAgICAgIHJl Z2lzdGVyIGl0cyBvd24gPGZ1bmN0aW9uPmF0ZXhpdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gd2l0 aAotICAgICAgICBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkpLiAgVGhpcyBvcHRpb24gaXMgZGlz YWJsZWQgYnkKLSAgICAgICAgZGVmYXVsdC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFy bGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJvcHQucHJvZl9sZWFrIj4KLSAg ICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+b3B0LnByb2ZfbGVhazwvbWFsbGN0bD4K LSAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KLSAgICAg ICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TGVhayByZXBvcnRpbmcgZW5hYmxl ZC9kaXNhYmxlZC4gIElmIGVuYWJsZWQsIHVzZSBhbgotICAgICAgICA8Y2l0ZXJlZmVudHJ5Pjxy ZWZlbnRyeXRpdGxlPmF0ZXhpdDwvcmVmZW50cnl0aXRsZT4KLSAgICAgICAgPG1hbnZvbG51bT4z PC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+IGZ1bmN0aW9uIHRvIHJlcG9ydCBtZW1vcnkgbGVh a3MKLSAgICAgICAgZGV0ZWN0ZWQgYnkgYWxsb2NhdGlvbiBzYW1wbGluZy4gIFNlZSB0aGUKLSAg ICAgICAgPGxpbmsgbGlua2VuZD0ib3B0LnByb2YiPjxtYWxsY3RsPm9wdC5wcm9mPC9tYWxsY3Rs PjwvbGluaz4gb3B0aW9uIGZvcgotICAgICAgICBpbmZvcm1hdGlvbiBvbiBhbmFseXppbmcgaGVh cCBwcm9maWxlIG91dHB1dC4gIFdvcmtzIG9ubHkgd2hlbiBjb21iaW5lZAotICAgICAgICB3aXRo IDxsaW5rIGxpbmtlbmQ9Im9wdC5wcm9mX2ZpbmFsIj48bWFsbGN0bD5vcHQucHJvZl9maW5hbDwv bWFsbGN0bD4KLSAgICAgICAgPC9saW5rPiwgb3RoZXJ3aXNlIGRvZXMgbm90aGluZy4gIFRoaXMg b3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIDwvcGFyYT48L2xpc3RpdGVt PgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9wdC5w cm9mX2xlYWtfZXJyb3IiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQu cHJvZl9sZWFrX2Vycm9yPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikK LSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVu YWJsZS1wcm9mPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48 cGFyYT5TaW1pbGFyIHRvIDxsaW5rIGxpbmtlbmQ9Im9wdC5wcm9mX2xlYWsiPjxtYWxsY3RsPgot ICAgICAgICBvcHQucHJvZl9sZWFrPC9tYWxsY3RsPjwvbGluaz4sIGJ1dCBtYWtlcyB0aGUgcHJv Y2VzcyBleGl0IHdpdGggZXJyb3IKLSAgICAgICAgY29kZSAxIGlmIGEgbWVtb3J5IGxlYWsgaXMg ZGV0ZWN0ZWQuICBUaGlzIG9wdGlvbiBzdXBlcnNlZGVzCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9 Im9wdC5wcm9mX2xlYWsiPjxtYWxsY3RsPm9wdC5wcm9mX2xlYWs8L21hbGxjdGw+PC9saW5rPiwK LSAgICAgICAgbWVhbmluZyB0aGF0IGlmIGJvdGggYXJlIHNwZWNpZmllZCwgdGhpcyBvcHRpb24g dGFrZXMgcHJlY2VkZW5jZS4gIFdoZW4KLSAgICAgICAgZW5hYmxlZCwgYWxzbyBlbmFibGVzIDxs aW5rIGxpbmtlbmQ9Im9wdC5wcm9mX2xlYWsiPjxtYWxsY3RsPgotICAgICAgICBvcHQucHJvZl9s ZWFrPC9tYWxsY3RsPjwvbGluaz4uICBXb3JrcyBvbmx5IHdoZW4gY29tYmluZWQgd2l0aAotICAg ICAgICA8bGluayBsaW5rZW5kPSJvcHQucHJvZl9maW5hbCI+PG1hbGxjdGw+b3B0LnByb2ZfZmlu YWw8L21hbGxjdGw+PC9saW5rPiwKLSAgICAgICAgb3RoZXJ3aXNlIGRvZXMgbm90aGluZy4gIFRo aXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIDwvcGFyYT48L2xpc3Rp dGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Im9w dC56ZXJvX3JlYWxsb2MiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5vcHQu emVyb19yZWFsbG9jPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFyICo8L3R5 cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0g ICAgICAgIDxsaXN0aXRlbT48cGFyYT4gRGV0ZXJtaW5lcyB0aGUgYmVoYXZpb3Igb2YKLSAgICAg ICAgPGZ1bmN0aW9uPnJlYWxsb2MoKTwvZnVuY3Rpb24+IHdoZW4gcGFzc2VkIGEgdmFsdWUgb2Yg emVybyBmb3IgdGhlIG5ldwotICAgICAgICBzaXplLiAgPHF1b3RlPmFsbG9jPC9xdW90ZT4gdHJl YXRzIHRoaXMgYXMgYW4gYWxsb2NhdGlvbiBvZiBzaXplIHplcm8KLSAgICAgICAgKGFuZCByZXR1 cm5zIGEgbm9uLW51bGwgcmVzdWx0IGV4Y2VwdCBpbiBjYXNlIG9mIHJlc291cmNlIGV4aGF1c3Rp b24pLgotICAgICAgICA8cXVvdGU+ZnJlZTwvcXVvdGU+IHRyZWF0cyB0aGlzIGFzIGEgZGVhbGxv Y2F0aW9uIG9mIHRoZSBwb2ludGVyLCBhbmQKLSAgICAgICAgcmV0dXJucyA8Y29uc3RhbnQ+TlVM TDwvY29uc3RhbnQ+IHdpdGhvdXQgc2V0dGluZwotICAgICAgICA8dmFybmFtZT5lcnJubzwvdmFy bmFtZT4uICA8cXVvdGU+YWJvcnQ8L3F1b3RlPiBhYm9ydHMgdGhlIHByb2Nlc3MgaWYKLSAgICAg ICAgemVybyBpcyBwYXNzZWQuICBUaGUgZGVmYXVsdCBpcyA8cXVvdGU+ZnJlZTwvcXVvdGU+IG9u IExpbnV4IGFuZAotICAgICAgICBXaW5kb3dzLCBhbmQgPHF1b3RlPmFsbG9jPC9xdW90ZT4gZWxz ZXdoZXJlLjwvcGFyYT4KLQotCTxwYXJhPlRoZXJlIGlzIGNvbnNpZGVyYWJsZSBkaXZlcmdlbmNl IG9mIGJlaGF2aW9ycyBhY3Jvc3MKLQlpbXBsZW1lbnRhdGlvbnMgaW4gaGFuZGxpbmcgdGhpcyBj YXNlLiBNYW55IGhhdmUgdGhlIGJlaGF2aW9yIG9mCi0JPHF1b3RlPmZyZWU8L3F1b3RlPi4gVGhp cyBjYW4gaW50cm9kdWNlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgc2luY2UKLQlhIDxjb25z dGFudD5OVUxMPC9jb25zdGFudD4gcmV0dXJuIHZhbHVlIGluZGljYXRlcyBmYWlsdXJlLCBhbmQg dGhlCi0JY29udGludWVkIHZhbGlkaXR5IG9mIHRoZSBwYXNzZWQtaW4gcG9pbnRlciAocGVyIFBP U0lYIGFuZCBDMTEpLgotCTxxdW90ZT5hbGxvYzwvcXVvdGU+IGlzIHNhZmUsIGJ1dCBjYW4gY2F1 c2UgbGVha3MgaW4gcHJvZ3JhbXMgdGhhdAotCWV4cGVjdCB0aGUgY29tbW9uIGJlaGF2aW9yLiAg UHJvZ3JhbXMgaW50ZW5kZWQgdG8gYmUgcG9ydGFibGUgYW5kCi0JbGVhay1mcmVlIGNhbm5vdCBh c3N1bWUgZWl0aGVyIGJlaGF2aW9yLCBhbmQgbXVzdCB0aGVyZWZvcmUgbmV2ZXIgY2FsbAotCXJl YWxsb2Mgd2l0aCBhIHNpemUgb2YgMC4gIFRoZSA8cXVvdGU+YWJvcnQ8L3F1b3RlPiBvcHRpb24g ZW5hYmxlcyB0aGVzZQotCXRlc3RpbmcgdGhpcyBiZWhhdmlvci48L3BhcmE+PC9saXN0aXRlbT4K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJ0aHJlYWQu YXJlbmEiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD50aHJlYWQuYXJlbmE8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVuc2lnbmVkPC90eXBlPikKLSAgICAgICAgICA8 bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+R2V0IG9yIHNldCB0aGUgYXJlbmEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxsaW5nCi0g ICAgICAgIHRocmVhZC4gIElmIHRoZSBzcGVjaWZpZWQgYXJlbmEgd2FzIG5vdCBpbml0aWFsaXpl ZCBiZWZvcmVoYW5kIChzZWUgdGhlCi0gICAgICAgIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImFy ZW5hLmkuaW5pdGlhbGl6ZWQiPjxtYWxsY3RsPmFyZW5hLmkuaW5pdGlhbGl6ZWQ8L21hbGxjdGw+ PC9saW5rPgotICAgICAgICBtYWxsY3RsKSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluaXRp YWxpemVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YKLSAgICAgICAgY2FsbGluZyB0aGlzIGludGVyZmFj ZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFy bGlzdGVudHJ5IGlkPSJ0aHJlYWQuYWxsb2NhdGVkIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAg ICAgPG1hbGxjdGw+dGhyZWFkLmFsbG9jYXRlZDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+ dWludDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAg ICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0g ICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZXQgdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBldmVy IGFsbG9jYXRlZCBieSB0aGUKLSAgICAgICAgY2FsbGluZyB0aHJlYWQuICBUaGlzIGNvdW50ZXIg aGFzIHRoZSBwb3RlbnRpYWwgdG8gd3JhcCBhcm91bmQ7IGl0IGlzCi0gICAgICAgIHVwIHRvIHRo ZSBhcHBsaWNhdGlvbiB0byBhcHByb3ByaWF0ZWx5IGludGVycHJldCB0aGUgY291bnRlciBpbiBz dWNoCi0gICAgICAgIGNhc2VzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50 cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5hbGxvY2F0ZWRwIj4KLSAgICAg ICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+dGhyZWFkLmFsbG9jYXRlZHA8L21hbGxjdGw+ Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90ICo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFs PnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+ XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZXQgYSBwb2ludGVy IHRvIHRoZSB0aGUgdmFsdWUgdGhhdCBpcyByZXR1cm5lZCBieSB0aGUKLSAgICAgICAgPGxpbmsK LSAgICAgICAgbGlua2VuZD0idGhyZWFkLmFsbG9jYXRlZCI+PG1hbGxjdGw+dGhyZWFkLmFsbG9j YXRlZDwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIG1hbGxjdGwuICBUaGlzIGlzIHVzZWZ1bCBm b3IgYXZvaWRpbmcgdGhlIG92ZXJoZWFkIG9mIHJlcGVhdGVkCi0gICAgICAgIDxmdW5jdGlvbj5t YWxsY3RsKigpPC9mdW5jdGlvbj4gY2FsbHMuICBOb3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY291 bnRlcgotICAgICAgICBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbi48 L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlz dGVudHJ5IGlkPSJ0aHJlYWQuZGVhbGxvY2F0ZWQiPgotICAgICAgICA8dGVybT4KLSAgICAgICAg ICA8bWFsbGN0bD50aHJlYWQuZGVhbGxvY2F0ZWQ8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBl PnVpbnQ2NF90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAg ICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgot ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgZXZl ciBkZWFsbG9jYXRlZCBieSB0aGUKLSAgICAgICAgY2FsbGluZyB0aHJlYWQuICBUaGlzIGNvdW50 ZXIgaGFzIHRoZSBwb3RlbnRpYWwgdG8gd3JhcCBhcm91bmQ7IGl0IGlzCi0gICAgICAgIHVwIHRv IHRoZSBhcHBsaWNhdGlvbiB0byBhcHByb3ByaWF0ZWx5IGludGVycHJldCB0aGUgY291bnRlciBp biBzdWNoCi0gICAgICAgIGNhc2VzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0 ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5kZWFsbG9jYXRlZHAiPgot ICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD50aHJlYWQuZGVhbGxvY2F0ZWRwPC9t YWxsY3RsPgotICAgICAgICAgICg8dHlwZT51aW50NjRfdCAqPC90eXBlPikKLSAgICAgICAgICA8 bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwv b3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0IGEg cG9pbnRlciB0byB0aGUgdGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhlCi0gICAgICAg IDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9InRocmVhZC5kZWFsbG9jYXRlZCI+PG1hbGxjdGw+dGhy ZWFkLmRlYWxsb2NhdGVkPC9tYWxsY3RsPjwvbGluaz4KLSAgICAgICAgbWFsbGN0bC4gIFRoaXMg aXMgdXNlZnVsIGZvciBhdm9pZGluZyB0aGUgb3ZlcmhlYWQgb2YgcmVwZWF0ZWQKLSAgICAgICAg PGZ1bmN0aW9uPm1hbGxjdGwqKCk8L2Z1bmN0aW9uPiBjYWxscy4gIE5vdGUgdGhhdCB0aGUgdW5k ZXJseWluZyBjb3VudGVyCi0gICAgICAgIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGFw cGxpY2F0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5wZWFrLnJlYWQiPgotICAgICAgICA8dGVybT4K LSAgICAgICAgICA8bWFsbGN0bD50aHJlYWQucGVhay5yZWFkPC9tYWxsY3RsPgotICAgICAgICAg ICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwv dGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdldCBhbiBhcHByb3hpbWF0aW9uIG9mIHRo ZSBtYXhpbXVtIHZhbHVlIG9mIHRoZQotICAgICAgICBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51 bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMKLSAgICAgICAg ZGVhbGxvY2F0ZWQgYnkgdGhlIGNhbGxpbmcgdGhyZWFkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8g PGxpbmsKLSAgICAgICAgbGlua2VuZD0idGhyZWFkLnBlYWsucmVzZXQiPjxtYWxsY3RsPnRocmVh ZC5wZWFrLnJlc2V0PC9tYWxsY3RsPjwvbGluaz4sCi0gICAgICAgIG9yIHNpbmNlIHRoZSB0aHJl YWQncyBjcmVhdGlvbiBpZiBpdCBoYXMgbm90IGNhbGxlZCA8bGluawotICAgICAgICBsaW5rZW5k PSJ0aHJlYWQucGVhay5yZXNldCI+PG1hbGxjdGw+dGhyZWFkLnBlYWsucmVzZXQ8L21hbGxjdGw+ PC9saW5rPi4KLSAgICAgICAgTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB0aGUgcXVhbGl0 eSBvZiB0aGUgYXBwcm94aW1hdGlvbiwgYnV0Ci0gICAgICAgIGplbWFsbG9jIGN1cnJlbnRseSBl bmRlYXZvcnMgdG8gbWFpbnRhaW4gYWNjdXJhY3kgdG8gd2l0aGluIG9uZSBodW5kcmVkCi0gICAg ICAgIGtpbG9ieXRlcy4KLSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxp c3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0idGhyZWFkLnBlYWsucmVzZXQiPgot ICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD50aHJlYWQucGVhay5yZXNldDwvbWFs bGN0bD4KLSAgICAgICAgICAoPHR5cGU+dm9pZDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ LS08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJlc2V0cyB0aGUgY291 bnRlciBmb3IgbmV0IGJ5dGVzIGFsbG9jYXRlZCBpbiB0aGUgY2FsbGluZwotICAgICAgICB0aHJl YWQgdG8gemVyby4gVGhpcyBhZmZlY3RzIHN1YnNlcXVlbnQgY2FsbHMgdG8gPGxpbmsKLSAgICAg ICAgbGlua2VuZD0idGhyZWFkLnBlYWsucmVhZCI+PG1hbGxjdGw+dGhyZWFkLnBlYWsucmVhZDwv bWFsbGN0bD48L2xpbms+LAotICAgICAgICBidXQgbm90IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkg PGxpbmsKLSAgICAgICAgbGlua2VuZD0idGhyZWFkLmFsbG9jYXRlZCI+PG1hbGxjdGw+dGhyZWFk LmFsbG9jYXRlZDwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIG9yIDxsaW5rCi0gICAgICAgIGxp bmtlbmQ9InRocmVhZC5kZWFsbG9jYXRlZCI+PG1hbGxjdGw+dGhyZWFkLmRlYWxsb2NhdGVkPC9t YWxsY3RsPjwvbGluaz4uCi0gICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJs aXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC50Y2FjaGUuZW5hYmxl ZCI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnRocmVhZC50Y2FjaGUuZW5h YmxlZDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Ym9vbDwvdHlwZT4pCi0gICAgICAgICAg PGxpdGVyYWw+cnc8L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVt PjxwYXJhPkVuYWJsZS9kaXNhYmxlIGNhbGxpbmcgdGhyZWFkJ3MgdGNhY2hlLiAgVGhlIHRjYWNo ZSBpcwotICAgICAgICBpbXBsaWNpdGx5IGZsdXNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBiZWNv bWluZwotICAgICAgICBkaXNhYmxlZCAoc2VlIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9InRocmVh ZC50Y2FjaGUuZmx1c2giPjxtYWxsY3RsPnRocmVhZC50Y2FjaGUuZmx1c2g8L21hbGxjdGw+PC9s aW5rPikuCi0gICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+ Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC50Y2FjaGUuZmx1c2giPgotICAgICAg ICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD50aHJlYWQudGNhY2hlLmZsdXNoPC9tYWxsY3Rs PgotICAgICAgICAgICg8dHlwZT52b2lkPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD4tLTwv bGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Rmx1c2gg Y2FsbGluZyB0aHJlYWQncyB0aHJlYWQtc3BlY2lmaWMgY2FjaGUgKHRjYWNoZSkuCi0gICAgICAg IFRoaXMgaW50ZXJmYWNlIHJlbGVhc2VzIGFsbCBjYWNoZWQgb2JqZWN0cyBhbmQgaW50ZXJuYWwg ZGF0YSBzdHJ1Y3R1cmVzCi0gICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsbGluZyB0aHJl YWQncyB0Y2FjaGUuICBPcmRpbmFyaWx5LCB0aGlzIGludGVyZmFjZQotICAgICAgICBuZWVkIG5v dCBiZSBjYWxsZWQsIHNpbmNlIGF1dG9tYXRpYyBwZXJpb2RpYyBpbmNyZW1lbnRhbCBnYXJiYWdl Ci0gICAgICAgIGNvbGxlY3Rpb24gb2NjdXJzLCBhbmQgdGhlIHRocmVhZCBjYWNoZSBpcyBhdXRv bWF0aWNhbGx5IGRpc2NhcmRlZCB3aGVuCi0gICAgICAgIGEgdGhyZWFkIGV4aXRzLiAgSG93ZXZl ciwgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIHRyaWdnZXJlZCBieSBhbGxvY2F0aW9uCi0gICAgICAg IGFjdGl2aXR5LCBzbyBpdCBpcyBwb3NzaWJsZSBmb3IgYSB0aHJlYWQgdGhhdCBzdG9wcwotICAg ICAgICBhbGxvY2F0aW5nL2RlYWxsb2NhdGluZyB0byByZXRhaW4gaXRzIGNhY2hlIGluZGVmaW5p dGVseSwgaW4gd2hpY2ggY2FzZQotICAgICAgICB0aGUgZGV2ZWxvcGVyIG1heSBmaW5kIG1hbnVh bCBmbHVzaGluZyB1c2VmdWwuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRy eT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0idGhyZWFkLnByb2YubmFtZSI+Ci0gICAgICAg IDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnRocmVhZC5wcm9mLm5hbWU8L21hbGxjdGw+Ci0g ICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ ci08L2xpdGVyYWw+IG9yCi0gICAgICAgICAgPGxpdGVyYWw+LXc8L2xpdGVyYWw+Ci0gICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0L3NldCB0aGUgZGVzY3JpcHRpdmUgbmFtZSBhc3NvY2lh dGVkIHdpdGggdGhlIGNhbGxpbmcKLSAgICAgICAgdGhyZWFkIGluIG1lbW9yeSBwcm9maWxlIGR1 bXBzLiAgQW4gaW50ZXJuYWwgY29weSBvZiB0aGUgbmFtZSBzdHJpbmcgaXMKLSAgICAgICAgY3Jl YXRlZCwgc28gdGhlIGlucHV0IHN0cmluZyBuZWVkIG5vdCBiZSBtYWludGFpbmVkIGFmdGVyIHRo aXMgaW50ZXJmYWNlCi0gICAgICAgIGNvbXBsZXRlcyBleGVjdXRpb24uICBUaGUgb3V0cHV0IHN0 cmluZyBvZiB0aGlzIGludGVyZmFjZSBzaG91bGQgYmUKLSAgICAgICAgY29waWVkIGZvciBub24t ZXBoZW1lcmFsIHVzZXMsIGJlY2F1c2UgbXVsdGlwbGUgaW1wbGVtZW50YXRpb24gZGV0YWlscwot ICAgICAgICBjYW4gY2F1c2UgYXN5bmNocm9ub3VzIHN0cmluZyBkZWFsbG9jYXRpb24uICBGdXJ0 aGVybW9yZSwgZWFjaAotICAgICAgICBpbnZvY2F0aW9uIG9mIHRoaXMgaW50ZXJmYWNlIGNhbiBv bmx5IHJlYWQgb3Igd3JpdGU7IHNpbXVsdGFuZW91cwotICAgICAgICByZWFkL3dyaXRlIGlzIG5v dCBzdXBwb3J0ZWQgZHVlIHRvIHN0cmluZyBsaWZldGltZSBsaW1pdGF0aW9ucy4gIFRoZQotICAg ICAgICBuYW1lIHN0cmluZyBtdXN0IGJlIG5pbC10ZXJtaW5hdGVkIGFuZCBjb21wcmlzZWQgb25s eSBvZiBjaGFyYWN0ZXJzIGluCi0gICAgICAgIHRoZSBzZXRzIHJlY29nbml6ZWQKLSAgICAgICAg YnkgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5pc2dyYXBoPC9yZWZlbnRyeXRpdGxlPgot ICAgICAgICA8bWFudm9sbnVtPjM8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4gYW5kCi0gICAg ICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+aXNibGFuazwvcmVmZW50cnl0aXRsZT4K LSAgICAgICAgPG1hbnZvbG51bT4zPC9tYW52b2xudW0+PC9jaXRlcmVmZW50cnk+LjwvcGFyYT48 L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InRocmVhZC5wcm9mLmFjdGl2ZSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxs Y3RsPnRocmVhZC5wcm9mLmFjdGl2ZTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Ym9vbDwv dHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+cnc8L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRp b24+LS1lbmFibGUtcHJvZjwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+Q29udHJvbCB3aGV0aGVyIHNhbXBsaW5nIGlzIGN1cnJlbnRseSBhY3RpdmUg Zm9yIHRoZQotICAgICAgICBjYWxsaW5nIHRocmVhZC4gIFRoaXMgaXMgYW4gYWN0aXZhdGlvbiBt ZWNoYW5pc20gaW4gYWRkaXRpb24gdG8gPGxpbmsKLSAgICAgICAgbGlua2VuZD0icHJvZi5hY3Rp dmUiPjxtYWxsY3RsPnByb2YuYWN0aXZlPC9tYWxsY3RsPjwvbGluaz47IGJvdGggbXVzdAotICAg ICAgICBiZSBhY3RpdmUgZm9yIHRoZSBjYWxsaW5nIHRocmVhZCB0byBzYW1wbGUuICBUaGlzIGZs YWcgaXMgZW5hYmxlZCBieQotICAgICAgICBkZWZhdWx0LjwvcGFyYT48L2xpc3RpdGVtPgotICAg ICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InRocmVhZC5pZGxl Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+dGhyZWFkLmlkbGU8L21hbGxj dGw+Ci0gICAgICAgICAgKDx0eXBlPnZvaWQ8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPi0t PC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5IaW50 cyB0byBqZW1hbGxvYyB0aGF0IHRoZSBjYWxsaW5nIHRocmVhZCB3aWxsIGJlIGlkbGUKLQlmb3Ig c29tZSBub250cml2aWFsIHBlcmlvZCBvZiB0aW1lIChzYXksIG9uIHRoZSBvcmRlciBvZiBzZWNv bmRzKSwgYW5kCi0JdGhhdCBkb2luZyBzb21lIGNsZWFudXAgb3BlcmF0aW9ucyBtYXkgYmUgYmVu ZWZpY2lhbC4gIFRoZXJlIGFyZSBubwotCWd1YXJhbnRlZXMgYXMgdG8gd2hhdCBzcGVjaWZpYyBv cGVyYXRpb25zIHdpbGwgYmUgcGVyZm9ybWVkOyBjdXJyZW50bHkKLQl0aGlzIGZsdXNoZXMgdGhl IGNhbGxlcidzIHRjYWNoZSBhbmQgbWF5IChhY2NvcmRpbmcgdG8gc29tZSBoZXVyaXN0aWMpCi0J cHVyZ2UgaXRzIGFzc29jaWF0ZWQgYXJlbmEuPC9wYXJhPgotCTxwYXJhPlRoaXMgaXMgbm90IGlu dGVuZGVkIHRvIGJlIGEgZ2VuZXJhbC1wdXJwb3NlIGJhY2tncm91bmQgYWN0aXZpdHkKLQltZWNo YW5pc20sIGFuZCB0aHJlYWRzIHNob3VsZCBub3Qgd2FrZSB1cCBtdWx0aXBsZSB0aW1lcyBzb2xl bHkgdG8gY2FsbAotCWl0LiAgUmF0aGVyLCBhIHRocmVhZCB3YWl0aW5nIGZvciBhIHRhc2sgc2hv dWxkIGRvIGEgdGltZWQgd2FpdCBmaXJzdCwKLQljYWxsIDxsaW5rIGxpbmtlbmQ9InRocmVhZC5p ZGxlIj48bWFsbGN0bD50aHJlYWQuaWRsZTwvbWFsbGN0bD48L2xpbms+Ci0JaWYgbm8gdGFzayBh cHBlYXJzIGluIHRoZSB0aW1lb3V0IGludGVydmFsLCBhbmQgdGhlbiBkbyBhbiB1bnRpbWVkIHdh aXQuCi0JRm9yIHN1Y2ggYSBiYWNrZ3JvdW5kIGFjdGl2aXR5IG1lY2hhbmlzbSwgc2VlCi0JPGxp bmsgbGlua2VuZD0iYmFja2dyb3VuZF90aHJlYWQiPjxtYWxsY3RsPmJhY2tncm91bmRfdGhyZWFk PC9tYWxsY3RsPjwvbGluaz4uCi0JPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3Rl bnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0idGNhY2hlLmNyZWF0ZSI+Ci0gICAgICAg IDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnRjYWNoZS5jcmVhdGU8L21hbGxjdGw+Ci0gICAg ICAgICAgKDx0eXBlPnVuc2lnbmVkPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3JlYXRlIGFu IGV4cGxpY2l0IHRocmVhZC1zcGVjaWZpYyBjYWNoZSAodGNhY2hlKSBhbmQKLSAgICAgICAgcmV0 dXJuIGFuIGlkZW50aWZpZXIgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSA8bGluawotICAgICAg ICBsaW5rZW5kPSJNQUxMT0NYX1RDQUNIRSI+PGNvbnN0YW50Pk1BTExPQ1hfVENBQ0hFKDxwYXJh bWV0ZXI+dGM8L3BhcmFtZXRlcj4pPC9jb25zdGFudD48L2xpbms+Ci0gICAgICAgIG1hY3JvIHRv IGV4cGxpY2l0bHkgdXNlIHRoZSBzcGVjaWZpZWQgY2FjaGUgcmF0aGVyIHRoYW4gdGhlCi0gICAg ICAgIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBvbmUgdGhhdCBpcyB1c2VkIGJ5IGRlZmF1bHQuICBF YWNoIGV4cGxpY2l0IGNhY2hlCi0gICAgICAgIGNhbiBiZSB1c2VkIGJ5IG9ubHkgb25lIHRocmVh ZCBhdCBhIHRpbWU7IHRoZSBhcHBsaWNhdGlvbiBtdXN0IGFzc3VyZQotICAgICAgICB0aGF0IHRo aXMgY29uc3RyYWludCBob2xkcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPklm IHRoZSBhbW91bnQgb2Ygc3BhY2Ugc3VwcGxpZWQgZm9yIHN0b3JpbmcgdGhlIHRocmVhZC1zcGVj aWZpYwotICAgICAgICBjYWNoZSBpZGVudGlmaWVyIGRvZXMgbm90IGVxdWFsCi0gICAgICAgIDxj b2RlIGxhbmd1YWdlPSJDIj5zaXplb2YoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KTwvY29kZT4sIG5v Ci0gICAgICAgIHRocmVhZC1zcGVjaWZpYyBjYWNoZSB3aWxsIGJlIGNyZWF0ZWQsIG5vIGRhdGEg d2lsbCBiZSB3cml0dGVuIHRvIHRoZQotICAgICAgICBzcGFjZSBwb2ludGVkIGJ5IDxwYXJhbWV0 ZXI+b2xkcDwvcGFyYW1ldGVyPiwgYW5kCi0gICAgICAgIDxwYXJhbWV0ZXI+Km9sZGxlbnA8L3Bh cmFtZXRlcj4gd2lsbCBiZSBzZXQgdG8gMC4KLSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJ0Y2FjaGUu Zmx1c2giPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD50Y2FjaGUuZmx1c2g8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVuc2lnbmVkPC90eXBlPikKLSAgICAgICAgICA8 bGl0ZXJhbD4tdzwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+Rmx1c2ggdGhlIHNwZWNpZmllZCB0aHJlYWQtc3BlY2lmaWMgY2FjaGUgKHRjYWNoZSku ICBUaGUKLSAgICAgICAgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSB0byB0aGlzIGludGVyZmFj ZSBhcyB0byA8bGluawotICAgICAgICBsaW5rZW5kPSJ0aHJlYWQudGNhY2hlLmZsdXNoIj48bWFs bGN0bD50aHJlYWQudGNhY2hlLmZsdXNoPC9tYWxsY3RsPjwvbGluaz4sCi0gICAgICAgIGV4Y2Vw dCB0aGF0IHRoZSB0Y2FjaGUgd2lsbCBuZXZlciBiZSBhdXRvbWF0aWNhbGx5IGRpc2NhcmRlZC4K LSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0idGNhY2hlLmRlc3Ryb3kiPgotICAgICAgICA8dGVybT4KLSAg ICAgICAgICA8bWFsbGN0bD50Y2FjaGUuZGVzdHJveTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5 cGU+dW5zaWduZWQ8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPi13PC9saXRlcmFsPgotICAg ICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5GbHVzaCB0aGUgc3BlY2lmaWVk IHRocmVhZC1zcGVjaWZpYyBjYWNoZSAodGNhY2hlKSBhbmQKLSAgICAgICAgbWFrZSB0aGUgaWRl bnRpZmllciBhdmFpbGFibGUgZm9yIHVzZSBkdXJpbmcgYSBmdXR1cmUgdGNhY2hlIGNyZWF0aW9u LgotICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0g ICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5pLmluaXRpYWxpemVkIj4KLSAgICAgICAgPHRl cm0+Ci0gICAgICAgICAgPG1hbGxjdGw+YXJlbmEuJmx0O2kmZ3Q7LmluaXRpYWxpemVkPC9tYWxs Y3RsPgotICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5y LTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+R2V0 IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBhcmVuYSdzIHN0YXRpc3RpY3MgYXJlCi0gICAgICAgIGlu aXRpYWxpemVkIChpLmUuIHRoZSBhcmVuYSB3YXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gdGhlIGN1 cnJlbnQgZXBvY2gpLgotICAgICAgICBUaGlzIGludGVyZmFjZSBjYW4gYWxzbyBiZSBub21pbmFs bHkgdXNlZCB0byBxdWVyeSB3aGV0aGVyIHRoZSBtZXJnZWQKLSAgICAgICAgc3RhdGlzdGljcyBj b3JyZXNwb25kaW5nIHRvIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19BTEw8L2NvbnN0YW50PiBh cmUKLSAgICAgICAgaW5pdGlhbGl6ZWQgKGFsd2F5cyB0cnVlKS48L3BhcmE+PC9saXN0aXRlbT4K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5p LmRlY2F5Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+YXJlbmEuJmx0O2km Z3Q7LmRlY2F5PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT52b2lkPC90eXBlPikKLSAgICAg ICAgICA8bGl0ZXJhbD4tLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+VHJpZ2dlciBkZWNheS1iYXNlZCBwdXJnaW5nIG9mIHVudXNlZCBkaXJ0eS9t dXp6eSBwYWdlcwotICAgICAgICBmb3IgYXJlbmEgJmx0O2kmZ3Q7LCBvciBmb3IgYWxsIGFyZW5h cyBpZiAmbHQ7aSZndDsgZXF1YWxzCi0gICAgICAgIDxjb25zdGFudD5NQUxMQ1RMX0FSRU5BU19B TEw8L2NvbnN0YW50Pi4gIFRoZSBwcm9wb3J0aW9uIG9mIHVudXNlZAotICAgICAgICBkaXJ0eS9t dXp6eSBwYWdlcyB0byBiZSBwdXJnZWQgZGVwZW5kcyBvbiB0aGUgY3VycmVudCB0aW1lOyBzZWUg PGxpbmsKLSAgICAgICAgbGlua2VuZD0ib3B0LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQu ZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBhbmQgPGxpbmsKLSAgICAg ICAgbGlua2VuZD0ib3B0Lm11enp5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQubXV6eV9kZWNheV9t czwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIGZvciBkZXRhaWxzLjwvcGFyYT48L2xpc3RpdGVt PgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFyZW5h LmkucHVyZ2UiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7 aSZndDsucHVyZ2U8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnZvaWQ8L3R5cGU+KQotICAg ICAgICAgIDxsaXRlcmFsPi0tPC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxs aXN0aXRlbT48cGFyYT5QdXJnZSBhbGwgdW51c2VkIGRpcnR5IHBhZ2VzIGZvciBhcmVuYSAmbHQ7 aSZndDssIG9yIGZvcgotICAgICAgICBhbGwgYXJlbmFzIGlmICZsdDtpJmd0OyBlcXVhbHMgPGNv bnN0YW50Pk1BTExDVExfQVJFTkFTX0FMTDwvY29uc3RhbnQ+LgotICAgICAgICA8L3BhcmE+PC9s aXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlk PSJhcmVuYS5pLnJlc2V0Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+YXJl bmEuJmx0O2kmZ3Q7LnJlc2V0PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT52b2lkPC90eXBl PikKLSAgICAgICAgICA8bGl0ZXJhbD4tLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+RGlzY2FyZCBhbGwgb2YgdGhlIGFyZW5hJ3MgZXh0YW50IGFs bG9jYXRpb25zLiAgVGhpcwotICAgICAgICBpbnRlcmZhY2UgY2FuIG9ubHkgYmUgdXNlZCB3aXRo IGFyZW5hcyBleHBsaWNpdGx5IGNyZWF0ZWQgdmlhIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImFy ZW5hcy5jcmVhdGUiPjxtYWxsY3RsPmFyZW5hcy5jcmVhdGU8L21hbGxjdGw+PC9saW5rPi4gIE5v bmUKLSAgICAgICAgb2YgdGhlIGFyZW5hJ3MgZGlzY2FyZGVkL2NhY2hlZCBhbGxvY2F0aW9ucyBt YXkgYWNjZXNzZWQgYWZ0ZXJ3YXJkLiAgQXMKLSAgICAgICAgcGFydCBvZiB0aGlzIHJlcXVpcmVt ZW50LCBhbGwgdGhyZWFkIGNhY2hlcyB3aGljaCB3ZXJlIHVzZWQgdG8KLSAgICAgICAgYWxsb2Nh dGUvZGVhbGxvY2F0ZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBhcmVuYSBtdXN0IGJlIGZsdXNo ZWQKLSAgICAgICAgYmVmb3JlaGFuZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlz dGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5pLmRlc3Ryb3kiPgotICAg ICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsuZGVzdHJveTwv bWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dm9pZDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVy YWw+LS08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJh PkRlc3Ryb3kgdGhlIGFyZW5hLiAgRGlzY2FyZCBhbGwgb2YgdGhlIGFyZW5hJ3MgZXh0YW50Ci0g ICAgICAgIGFsbG9jYXRpb25zIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyBmb3IgPGxpbmsK LSAgICAgICAgbGlua2VuZD0iYXJlbmEuaS5yZXNldCI+PG1hbGxjdGw+YXJlbmEuJmx0O2kmZ3Q7 LnJlc2V0PC9tYWxsY3RsPjwvbGluaz4KLSAgICAgICAgKHdpdGggYWxsIHRoZSBzYW1lIGNvbnN0 cmFpbnRzIGFuZCBzaWRlIGVmZmVjdHMpLCBtZXJnZSB0aGUgYXJlbmEgc3RhdHMKLSAgICAgICAg aW50byB0aG9zZSBhY2Nlc3NpYmxlIGF0IGFyZW5hIGluZGV4Ci0gICAgICAgIDxjb25zdGFudD5N QUxMQ1RMX0FSRU5BU19ERVNUUk9ZRUQ8L2NvbnN0YW50PiwgYW5kIHRoZW4gY29tcGxldGVseQot ICAgICAgICBkaXNjYXJkIGFsbCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGFyZW5hLiAg RnV0dXJlIGNhbGxzIHRvIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImFyZW5hcy5jcmVhdGUiPjxt YWxsY3RsPmFyZW5hcy5jcmVhdGU8L21hbGxjdGw+PC9saW5rPiBtYXkKLSAgICAgICAgcmVjeWNs ZSB0aGUgYXJlbmEgaW5kZXguICBEZXN0cnVjdGlvbiB3aWxsIGZhaWwgaWYgYW55IHRocmVhZHMg YXJlCi0gICAgICAgIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIGFyZW5hIGFzIGEgcmVz dWx0IG9mIGNhbGxzIHRvIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9InRocmVhZC5hcmVuYSI+PG1h bGxjdGw+dGhyZWFkLmFyZW5hPC9tYWxsY3RsPjwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0g ICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmEuaS5k c3MiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsu ZHNzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFyICo8L3R5cGU+KQotICAg ICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxs aXN0aXRlbT48cGFyYT5TZXQgdGhlIHByZWNlZGVuY2Ugb2YgZHNzIGFsbG9jYXRpb24gYXMgcmVs YXRlZCB0byBtbWFwCi0gICAgICAgIGFsbG9jYXRpb24gZm9yIGFyZW5hICZsdDtpJmd0Oywgb3Ig Zm9yIGFsbCBhcmVuYXMgaWYgJmx0O2kmZ3Q7IGVxdWFscwotICAgICAgICA8Y29uc3RhbnQ+TUFM TENUTF9BUkVOQVNfQUxMPC9jb25zdGFudD4uICBTZWUgPGxpbmsKLSAgICAgICAgbGlua2VuZD0i b3B0LmRzcyI+PG1hbGxjdGw+b3B0LmRzczwvbWFsbGN0bD48L2xpbms+IGZvciBzdXBwb3J0ZWQK LSAgICAgICAgc2V0dGluZ3MuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRy eT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmEuaS5kaXJ0eV9kZWNheV9tcyI+Ci0g ICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPmFyZW5hLiZsdDtpJmd0Oy5kaXJ0eV9k ZWNheV9tczwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c3NpemVfdDwvdHlwZT4pCi0gICAg ICAgICAgPGxpdGVyYWw+cnc8L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxp c3RpdGVtPjxwYXJhPkN1cnJlbnQgcGVyLWFyZW5hIGFwcHJveGltYXRlIHRpbWUgaW4gbWlsbGlz ZWNvbmRzIGZyb20KLSAgICAgICAgdGhlIGNyZWF0aW9uIG9mIGEgc2V0IG9mIHVudXNlZCBkaXJ0 eSBwYWdlcyB1bnRpbCBhbiBlcXVpdmFsZW50IHNldCBvZgotICAgICAgICB1bnVzZWQgZGlydHkg cGFnZXMgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQuICBFYWNoIHRpbWUgdGhpcyBpbnRlcmZhY2Ug aXMKLSAgICAgICAgc2V0LCBhbGwgY3VycmVudGx5IHVudXNlZCBkaXJ0eSBwYWdlcyBhcmUgY29u c2lkZXJlZCB0byBoYXZlIGZ1bGx5Ci0gICAgICAgIGRlY2F5ZWQsIHdoaWNoIGNhdXNlcyBpbW1l ZGlhdGUgcHVyZ2luZyBvZiBhbGwgdW51c2VkIGRpcnR5IHBhZ2VzIHVubGVzcwotICAgICAgICB0 aGUgZGVjYXkgdGltZSBpcyBzZXQgdG8gLTEgKGkuZS4gcHVyZ2luZyBkaXNhYmxlZCkuICBTZWUg PGxpbmsKLSAgICAgICAgbGlua2VuZD0ib3B0LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQu ZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBmb3IgYWRkaXRpb25hbCBp bmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0g ICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5pLm11enp5X2RlY2F5X21zIj4KLSAgICAgICAg PHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+YXJlbmEuJmx0O2kmZ3Q7Lm11enp5X2RlY2F5X21z PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zc2l6ZV90PC90eXBlPikKLSAgICAgICAgICA8 bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+Q3VycmVudCBwZXItYXJlbmEgYXBwcm94aW1hdGUgdGltZSBpbiBtaWxsaXNlY29uZHMg ZnJvbQotICAgICAgICB0aGUgY3JlYXRpb24gb2YgYSBzZXQgb2YgdW51c2VkIG11enp5IHBhZ2Vz IHVudGlsIGFuIGVxdWl2YWxlbnQgc2V0IG9mCi0gICAgICAgIHVudXNlZCBtdXp6eSBwYWdlcyBp cyBwdXJnZWQgYW5kL29yIHJldXNlZC4gIEVhY2ggdGltZSB0aGlzIGludGVyZmFjZSBpcwotICAg ICAgICBzZXQsIGFsbCBjdXJyZW50bHkgdW51c2VkIG11enp5IHBhZ2VzIGFyZSBjb25zaWRlcmVk IHRvIGhhdmUgZnVsbHkKLSAgICAgICAgZGVjYXllZCwgd2hpY2ggY2F1c2VzIGltbWVkaWF0ZSBw dXJnaW5nIG9mIGFsbCB1bnVzZWQgbXV6enkgcGFnZXMgdW5sZXNzCi0gICAgICAgIHRoZSBkZWNh eSB0aW1lIGlzIHNldCB0byAtMSAoaS5lLiBwdXJnaW5nIGRpc2FibGVkKS4gIFNlZSA8bGluawot ICAgICAgICBsaW5rZW5kPSJvcHQubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPm9wdC5tdXp6eV9k ZWNheV9tczwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0 aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9ImFyZW5hLmkucmV0YWluX2dyb3dfbGltaXQiPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsucmV0YWluX2dyb3dfbGltaXQ8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxp dGVyYWw+cnc8L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxw YXJhPk1heGltdW0gc2l6ZSB0byBncm93IHJldGFpbmVkIHJlZ2lvbiAob25seSByZWxldmFudCB3 aGVuCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9Im9wdC5yZXRhaW4iPjxtYWxsY3RsPm9wdC5yZXRh aW48L21hbGxjdGw+PC9saW5rPiBpcwotICAgICAgICBlbmFibGVkKS4gIFRoaXMgY29udHJvbHMg dGhlIG1heGltdW0gaW5jcmVtZW50IHRvIGV4cGFuZCB2aXJ0dWFsIG1lbW9yeSwKLSAgICAgICAg b3IgYWxsb2NhdGlvbiB0aHJvdWdoIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImFyZW5hLmkuZXh0 ZW50X2hvb2tzIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDtleHRlbnRfaG9va3M8L21hbGxjdGw+ PC9saW5rPi4KLSAgICAgICAgSW4gcGFydGljdWxhciwgaWYgY3VzdG9taXplZCBleHRlbnQgaG9v a3MgcmVzZXJ2ZSBwaHlzaWNhbCBtZW1vcnkKLSAgICAgICAgKGUuZy4gMUcgaHVnZSBwYWdlcyks IHRoaXMgaXMgdXNlZnVsIHRvIGNvbnRyb2wgdGhlIGFsbG9jYXRpb24gaG9vaydzCi0gICAgICAg IGlucHV0IHNpemUuICBUaGUgZGVmYXVsdCBpcyBubyBsaW1pdC48L3BhcmE+PC9saXN0aXRlbT4K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYS5p LmV4dGVudF9ob29rcyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPmFyZW5h LiZsdDtpJmd0Oy5leHRlbnRfaG9va3M8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmV4dGVu dF9ob29rc190ICo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgotICAg ICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5HZXQgb3Igc2V0IHRoZSBleHRl bnQgbWFuYWdlbWVudCBob29rIGZ1bmN0aW9ucyBmb3IKLSAgICAgICAgYXJlbmEgJmx0O2kmZ3Q7 LiAgVGhlIGZ1bmN0aW9ucyBtdXN0IGJlIGNhcGFibGUgb2Ygb3BlcmF0aW5nIG9uIGFsbAotICAg ICAgICBleHRhbnQgZXh0ZW50cyBhc3NvY2lhdGVkIHdpdGggYXJlbmEgJmx0O2kmZ3Q7LCB1c3Vh bGx5IGJ5IHBhc3NpbmcKLSAgICAgICAgdW5rbm93biBleHRlbnRzIHRvIHRoZSByZXBsYWNlZCBm dW5jdGlvbnMuICBJbiBwcmFjdGljZSwgaXQgaXMgZmVhc2libGUKLSAgICAgICAgdG8gY29udHJv bCBhbGxvY2F0aW9uIGZvciBhcmVuYXMgZXhwbGljaXRseSBjcmVhdGVkIHZpYSA8bGluawotICAg ICAgICBsaW5rZW5kPSJhcmVuYXMuY3JlYXRlIj48bWFsbGN0bD5hcmVuYXMuY3JlYXRlPC9tYWxs Y3RsPjwvbGluaz4gc3VjaAotICAgICAgICB0aGF0IGFsbCBleHRlbnRzIG9yaWdpbmF0ZSBmcm9t IGFuIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGV4dGVudCBhbGxvY2F0b3IKLSAgICAgICAgKGJ5IHNw ZWNpZnlpbmcgdGhlIGN1c3RvbSBleHRlbnQgaG9vayBmdW5jdGlvbnMgZHVyaW5nIGFyZW5hIGNy ZWF0aW9uKS4KLSAgICAgICAgSG93ZXZlciwgdGhlIEFQSSBndWFyYW50ZWVzIGZvciB0aGUgYXV0 b21hdGljYWxseSBjcmVhdGVkIGFyZW5hcyBtYXkgYmUKLSAgICAgICAgcmVsYXhlZCAtLSBob29r cyBzZXQgdGhlcmUgbWF5IGJlIGNhbGxlZCBpbiBhICJiZXN0IGVmZm9ydCIgZmFzaGlvbjsgaW4K LSAgICAgICAgYWRkaXRpb24gdGhlcmUgbWF5IGJlIGV4dGVudHMgY3JlYXRlZCBwcmlvciB0byB0 aGUgYXBwbGljYXRpb24gaGF2aW5nIGFuCi0gICAgICAgIG9wcG9ydHVuaXR5IHRvIHRha2Ugb3Zl ciBleHRlbnQgYWxsb2NhdGlvbi48L3BhcmE+Ci0KLSAgICAgICAgPHByb2dyYW1saXN0aW5nIGxh bmd1YWdlPSJDIj48IVtDREFUQVsKLXR5cGVkZWYgZXh0ZW50X2hvb2tzX3MgZXh0ZW50X2hvb2tz X3Q7Ci1zdHJ1Y3QgZXh0ZW50X2hvb2tzX3MgewotCWV4dGVudF9hbGxvY190CQkqYWxsb2M7Ci0J ZXh0ZW50X2RhbGxvY190CQkqZGFsbG9jOwotCWV4dGVudF9kZXN0cm95X3QJKmRlc3Ryb3k7Ci0J ZXh0ZW50X2NvbW1pdF90CQkqY29tbWl0OwotCWV4dGVudF9kZWNvbW1pdF90CSpkZWNvbW1pdDsK LQlleHRlbnRfcHVyZ2VfdAkJKnB1cmdlX2xhenk7Ci0JZXh0ZW50X3B1cmdlX3QJCSpwdXJnZV9m b3JjZWQ7Ci0JZXh0ZW50X3NwbGl0X3QJCSpzcGxpdDsKLQlleHRlbnRfbWVyZ2VfdAkJKm1lcmdl OwotfTtdXT48L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8cGFyYT5UaGUgPHR5cGU+ZXh0ZW50 X2hvb2tzX3Q8L3R5cGU+IHN0cnVjdHVyZSBjb21wcmlzZXMgZnVuY3Rpb24KLSAgICAgICAgcG9p bnRlcnMgd2hpY2ggYXJlIGRlc2NyaWJlZCBpbmRpdmlkdWFsbHkgYmVsb3cuICBqZW1hbGxvYyB1 c2VzIHRoZXNlCi0gICAgICAgIGZ1bmN0aW9ucyB0byBtYW5hZ2UgZXh0ZW50IGxpZmV0aW1lLCB3 aGljaCBzdGFydHMgb2ZmIHdpdGggYWxsb2NhdGlvbiBvZgotICAgICAgICBtYXBwZWQgY29tbWl0 dGVkIG1lbW9yeSwgaW4gdGhlIHNpbXBsZXN0IGNhc2UgZm9sbG93ZWQgYnkgZGVhbGxvY2F0aW9u LgotICAgICAgICBIb3dldmVyLCB0aGVyZSBhcmUgcGVyZm9ybWFuY2UgYW5kIHBsYXRmb3JtIHJl YXNvbnMgdG8gcmV0YWluIGV4dGVudHMKLSAgICAgICAgZm9yIGxhdGVyIHJldXNlLiAgQ2xlYW51 cCBhdHRlbXB0cyBjYXNjYWRlIGZyb20gZGVhbGxvY2F0aW9uIHRvIGRlY29tbWl0Ci0gICAgICAg IHRvIGZvcmNlZCBwdXJnaW5nIHRvIGxhenkgcHVyZ2luZywgd2hpY2ggZ2l2ZXMgdGhlIGV4dGVu dCBtYW5hZ2VtZW50Ci0gICAgICAgIGZ1bmN0aW9ucyBvcHBvcnR1bml0aWVzIHRvIHJlamVjdCB0 aGUgbW9zdCBwZXJtYW5lbnQgY2xlYW51cCBvcGVyYXRpb25zCi0gICAgICAgIGluIGZhdm9yIG9m IGxlc3MgcGVybWFuZW50IChhbmQgb2Z0ZW4gbGVzcyBjb3N0bHkpIG9wZXJhdGlvbnMuICBBbGwK LSAgICAgICAgb3BlcmF0aW9ucyBleGNlcHQgYWxsb2NhdGlvbiBjYW4gYmUgdW5pdmVyc2FsbHkg b3B0ZWQgb3V0IG9mIGJ5IHNldHRpbmcKLSAgICAgICAgdGhlIGhvb2sgcG9pbnRlcnMgdG8gPGNv bnN0YW50Pk5VTEw8L2NvbnN0YW50Piwgb3Igc2VsZWN0aXZlbHkgb3B0ZWQgb3V0Ci0gICAgICAg IG9mIGJ5IHJldHVybmluZyBmYWlsdXJlLiAgTm90ZSB0aGF0IG9uY2UgdGhlIGV4dGVudCBob29r IGlzIHNldCwgdGhlCi0gICAgICAgIHN0cnVjdHVyZSBpcyBhY2Nlc3NlZCBkaXJlY3RseSBieSB0 aGUgYXNzb2NpYXRlZCBhcmVuYXMsIHNvIGl0IG11c3QKLSAgICAgICAgcmVtYWluIHZhbGlkIGZv ciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBhcmVuYXMuPC9wYXJhPgotCi0gICAgICAgIDxm dW5jc3lub3BzaXM+PGZ1bmNwcm90b3R5cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+dHlwZWRlZiB2 b2lkICo8ZnVuY3Rpb24+KGV4dGVudF9hbGxvY190KTwvZnVuY3Rpb24+PC9mdW5jZGVmPgotICAg ICAgICAgIDxwYXJhbWRlZj5leHRlbnRfaG9va3NfdCAqPHBhcmFtZXRlcj5leHRlbnRfaG9va3M8 L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1l dGVyPm5ld19hZGRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+ c2l6ZV90IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAg PHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmFsaWdubWVudDwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPmJvb2wgKjxwYXJhbWV0ZXI+emVybzwvcGFyYW1ldGVy PjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPmJvb2wgKjxwYXJhbWV0ZXI+Y29tbWl0 PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dW5zaWduZWQgPHBh cmFtZXRlcj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1bmNw cm90b3R5cGU+PC9mdW5jc3lub3BzaXM+Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0PjwvbGl0ZXJh bGxheW91dD4KLSAgICAgICAgPHBhcmE+QW4gZXh0ZW50IGFsbG9jYXRpb24gZnVuY3Rpb24gY29u Zm9ybXMgdG8gdGhlCi0gICAgICAgIDx0eXBlPmV4dGVudF9hbGxvY190PC90eXBlPiB0eXBlIGFu ZCB1cG9uIHN1Y2Nlc3MgcmV0dXJucyBhIHBvaW50ZXIgdG8KLSAgICAgICAgPHBhcmFtZXRlcj5z aXplPC9wYXJhbWV0ZXI+IGJ5dGVzIG9mIG1hcHBlZCBtZW1vcnkgb24gYmVoYWxmIG9mIGFyZW5h Ci0gICAgICAgIDxwYXJhbWV0ZXI+YXJlbmFfaW5kPC9wYXJhbWV0ZXI+IHN1Y2ggdGhhdCB0aGUg ZXh0ZW50J3MgYmFzZSBhZGRyZXNzIGlzCi0gICAgICAgIGEgbXVsdGlwbGUgb2YgPHBhcmFtZXRl cj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4sIGFzIHdlbGwgYXMgc2V0dGluZwotICAgICAgICA8cGFy YW1ldGVyPip6ZXJvPC9wYXJhbWV0ZXI+IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGV4dGVudCBp cyB6ZXJvZWQKLSAgICAgICAgYW5kIDxwYXJhbWV0ZXI+KmNvbW1pdDwvcGFyYW1ldGVyPiB0byBp bmRpY2F0ZSB3aGV0aGVyIHRoZSBleHRlbnQgaXMKLSAgICAgICAgY29tbWl0dGVkLiAgVXBvbiBl cnJvciB0aGUgZnVuY3Rpb24gcmV0dXJucyA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+Ci0gICAg ICAgIGFuZCBsZWF2ZXMgPHBhcmFtZXRlcj4qemVybzwvcGFyYW1ldGVyPiBhbmQKLSAgICAgICAg PHBhcmFtZXRlcj4qY29tbWl0PC9wYXJhbWV0ZXI+IHVubW9kaWZpZWQuICBUaGUKLSAgICAgICAg PHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IHBhcmFtZXRlciBpcyBhbHdheXMgYSBtdWx0aXBs ZSBvZiB0aGUgcGFnZQotICAgICAgICBzaXplLiAgVGhlIDxwYXJhbWV0ZXI+YWxpZ25tZW50PC9w YXJhbWV0ZXI+IHBhcmFtZXRlciBpcyBhbHdheXMgYSBwb3dlcgotICAgICAgICBvZiB0d28gYXQg bGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHBhZ2Ugc2l6ZS4gIFplcm9pbmcgaXMgbWFuZGF0b3J5IGlm Ci0gICAgICAgIDxwYXJhbWV0ZXI+Knplcm88L3BhcmFtZXRlcj4gaXMgdHJ1ZSB1cG9uIGZ1bmN0 aW9uIGVudHJ5LiAgQ29tbWl0dGluZyBpcwotICAgICAgICBtYW5kYXRvcnkgaWYgPHBhcmFtZXRl cj4qY29tbWl0PC9wYXJhbWV0ZXI+IGlzIHRydWUgdXBvbiBmdW5jdGlvbiBlbnRyeS4KLSAgICAg ICAgSWYgPHBhcmFtZXRlcj5uZXdfYWRkcjwvcGFyYW1ldGVyPiBpcyBub3QgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PiwgdGhlCi0gICAgICAgIHJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSA8cGFy YW1ldGVyPm5ld19hZGRyPC9wYXJhbWV0ZXI+IG9uIHN1Y2Nlc3Mgb3IKLSAgICAgICAgPGNvbnN0 YW50Pk5VTEw8L2NvbnN0YW50PiBvbiBlcnJvci4gIENvbW1pdHRlZCBtZW1vcnkgbWF5IGJlIGNv bW1pdHRlZAotICAgICAgICBpbiBhYnNvbHV0ZSB0ZXJtcyBhcyBvbiBhIHN5c3RlbSB0aGF0IGRv ZXMgbm90IG92ZXJjb21taXQsIG9yIGluCi0gICAgICAgIGltcGxpY2l0IHRlcm1zIGFzIG9uIGEg c3lzdGVtIHRoYXQgb3ZlcmNvbW1pdHMgYW5kIHNhdGlzZmllcyBwaHlzaWNhbAotICAgICAgICBt ZW1vcnkgbmVlZHMgb24gZGVtYW5kIHZpYSBzb2Z0IHBhZ2UgZmF1bHRzLiAgTm90ZSB0aGF0IHJl cGxhY2luZyB0aGUKLSAgICAgICAgZGVmYXVsdCBleHRlbnQgYWxsb2NhdGlvbiBmdW5jdGlvbiBt YWtlcyB0aGUgYXJlbmEncyA8bGluawotICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRzcyI+PG1h bGxjdGw+YXJlbmEuJmx0O2kmZ3Q7LmRzczwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIHNldHRp bmcgaXJyZWxldmFudC48L3BhcmE+Ci0KLSAgICAgICAgPGZ1bmNzeW5vcHNpcz48ZnVuY3Byb3Rv dHlwZT4KLSAgICAgICAgICA8ZnVuY2RlZj50eXBlZGVmIGJvb2wgPGZ1bmN0aW9uPihleHRlbnRf ZGFsbG9jX3QpPC9mdW5jdGlvbj48L2Z1bmNkZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPmV4dGVu dF9ob29rc190ICo8cGFyYW1ldGVyPmV4dGVudF9ob29rczwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+ Ci0gICAgICAgICAgPHBhcmFtZGVmPnZvaWQgKjxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVyPjwv cGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPnNpemU8L3Bh cmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5ib29sIDxwYXJhbWV0ZXI+ Y29tbWl0dGVkPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dW5z aWduZWQgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAg ICA8L2Z1bmNwcm90b3R5cGU+PC9mdW5jc3lub3BzaXM+Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0 PjwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIEFuIGV4dGVudCBkZWFs bG9jYXRpb24gZnVuY3Rpb24gY29uZm9ybXMgdG8gdGhlCi0gICAgICAgIDx0eXBlPmV4dGVudF9k YWxsb2NfdDwvdHlwZT4gdHlwZSBhbmQgZGVhbGxvY2F0ZXMgYW4gZXh0ZW50IGF0IGdpdmVuCi0g ICAgICAgIDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5zaXplPC9w YXJhbWV0ZXI+IHdpdGgKLSAgICAgICAgPHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj4v ZGVjb21taXRlZCBtZW1vcnkgYXMgaW5kaWNhdGVkLCBvbgotICAgICAgICBiZWhhbGYgb2YgYXJl bmEgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj4sIHJldHVybmluZyBmYWxzZSB1cG9u Ci0gICAgICAgIHN1Y2Nlc3MuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzIGlu ZGljYXRlcyBvcHQtb3V0IGZyb20KLSAgICAgICAgZGVhbGxvY2F0aW9uOyB0aGUgdmlydHVhbCBt ZW1vcnkgbWFwcGluZyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4dGVudAotICAgICAgICByZW1haW5z IG1hcHBlZCwgaW4gdGhlIHNhbWUgY29tbWl0IHN0YXRlLCBhbmQgYXZhaWxhYmxlIGZvciBmdXR1 cmUgdXNlLAotICAgICAgICBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBy ZXRhaW5lZCBmb3IgbGF0ZXIgcmV1c2UuPC9wYXJhPgotCi0gICAgICAgIDxmdW5jc3lub3BzaXM+ PGZ1bmNwcm90b3R5cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+dHlwZWRlZiB2b2lkIDxmdW5jdGlv bj4oZXh0ZW50X2Rlc3Ryb3lfdCk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAgICAgICA8cGFy YW1kZWY+ZXh0ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50X2hvb2tzPC9wYXJhbWV0ZXI+ PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hZGRyPC9w YXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0 ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPmJvb2wg PHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxw YXJhbWRlZj51bnNpZ25lZCA8cGFyYW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT48L2Z1bmNzeW5vcHNpcz4KLSAgICAgICAgPGxp dGVyYWxsYXlvdXQ+PC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8cGFyYT4KLSAgICAgICAgQW4g ZXh0ZW50IGRlc3RydWN0aW9uIGZ1bmN0aW9uIGNvbmZvcm1zIHRvIHRoZQotICAgICAgICA8dHlw ZT5leHRlbnRfZGVzdHJveV90PC90eXBlPiB0eXBlIGFuZCB1bmNvbmRpdGlvbmFsbHkgZGVzdHJv eXMgYW4KLSAgICAgICAgZXh0ZW50IGF0IGdpdmVuIDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVy PiBhbmQKLSAgICAgICAgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IHdpdGgKLSAgICAgICAg PHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj4vZGVjb21taXRlZCBtZW1vcnkgYXMgaW5k aWNhdGVkLCBvbgotICAgICAgICBiZWhhbGYgb2YgYXJlbmEgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8 L3BhcmFtZXRlcj4uICBUaGlzIGZ1bmN0aW9uIG1heSBiZQotICAgICAgICBjYWxsZWQgdG8gZGVz dHJveSByZXRhaW5lZCBleHRlbnRzIGR1cmluZyBhcmVuYSBkZXN0cnVjdGlvbiAoc2VlIDxsaW5r Ci0gICAgICAgIGxpbmtlbmQ9ImFyZW5hLmkuZGVzdHJveSI+PG1hbGxjdGw+YXJlbmEuJmx0O2km Z3Q7LmRlc3Ryb3k8L21hbGxjdGw+PC9saW5rPikuPC9wYXJhPgotCi0gICAgICAgIDxmdW5jc3lu b3BzaXM+PGZ1bmNwcm90b3R5cGU+Ci0gICAgICAgICAgPGZ1bmNkZWY+dHlwZWRlZiBib29sIDxm dW5jdGlvbj4oZXh0ZW50X2NvbW1pdF90KTwvZnVuY3Rpb24+PC9mdW5jZGVmPgotICAgICAgICAg IDxwYXJhbWRlZj5leHRlbnRfaG9va3NfdCAqPHBhcmFtZXRlcj5leHRlbnRfaG9va3M8L3BhcmFt ZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFyYW1ldGVyPmFk ZHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBh cmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+ c2l6ZV90IDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAg ICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+PC9wYXJhbWRl Zj4KLSAgICAgICAgICA8cGFyYW1kZWY+dW5zaWduZWQgPHBhcmFtZXRlcj5hcmVuYV9pbmQ8L3Bh cmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1bmNwcm90b3R5cGU+PC9mdW5jc3lub3Bz aXM+Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0PjwvbGl0ZXJhbGxheW91dD4KLSAgICAgICAgPHBh cmE+QW4gZXh0ZW50IGNvbW1pdCBmdW5jdGlvbiBjb25mb3JtcyB0byB0aGUKLSAgICAgICAgPHR5 cGU+ZXh0ZW50X2NvbW1pdF90PC90eXBlPiB0eXBlIGFuZCBjb21taXRzIHplcm9lZCBwaHlzaWNh bCBtZW1vcnkgdG8KLSAgICAgICAgYmFjayBwYWdlcyB3aXRoaW4gYW4gZXh0ZW50IGF0IGdpdmVu IDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1ldGVyPiBhbmQKLSAgICAgICAgPHBhcmFtZXRlcj5zaXpl PC9wYXJhbWV0ZXI+IGF0IDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+IGJ5dGVzLAotICAg ICAgICBleHRlbmRpbmcgZm9yIDxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+IG9uIGJlaGFs ZiBvZiBhcmVuYQotICAgICAgICA8cGFyYW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPiwgcmV0 dXJuaW5nIGZhbHNlIHVwb24gc3VjY2Vzcy4KLSAgICAgICAgQ29tbWl0dGVkIG1lbW9yeSBtYXkg YmUgY29tbWl0dGVkIGluIGFic29sdXRlIHRlcm1zIGFzIG9uIGEgc3lzdGVtIHRoYXQKLSAgICAg ICAgZG9lcyBub3Qgb3ZlcmNvbW1pdCwgb3IgaW4gaW1wbGljaXQgdGVybXMgYXMgb24gYSBzeXN0 ZW0gdGhhdAotICAgICAgICBvdmVyY29tbWl0cyBhbmQgc2F0aXNmaWVzIHBoeXNpY2FsIG1lbW9y eSBuZWVkcyBvbiBkZW1hbmQgdmlhIHNvZnQgcGFnZQotICAgICAgICBmYXVsdHMuIElmIHRoZSBm dW5jdGlvbiByZXR1cm5zIHRydWUsIHRoaXMgaW5kaWNhdGVzIGluc3VmZmljaWVudAotICAgICAg ICBwaHlzaWNhbCBtZW1vcnkgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdC48L3BhcmE+Ci0KLSAgICAg ICAgPGZ1bmNzeW5vcHNpcz48ZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgICA8ZnVuY2RlZj50eXBl ZGVmIGJvb2wgPGZ1bmN0aW9uPihleHRlbnRfZGVjb21taXRfdCk8L2Z1bmN0aW9uPjwvZnVuY2Rl Zj4KLSAgICAgICAgICA8cGFyYW1kZWY+ZXh0ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50 X2hvb2tzPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAq PHBhcmFtZXRlcj5hZGRyPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1k ZWY+c2l6ZV90IDxwYXJhbWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAg ICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPm9mZnNldDwvcGFyYW1ldGVyPjwvcGFyYW1k ZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPmxlbmd0aDwvcGFyYW1l dGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnVuc2lnbmVkIDxwYXJhbWV0ZXI+ YXJlbmFfaW5kPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgPC9mdW5jcHJvdG90eXBl PjwvZnVuY3N5bm9wc2lzPgotICAgICAgICA8bGl0ZXJhbGxheW91dD48L2xpdGVyYWxsYXlvdXQ+ Ci0gICAgICAgIDxwYXJhPkFuIGV4dGVudCBkZWNvbW1pdCBmdW5jdGlvbiBjb25mb3JtcyB0byB0 aGUKLSAgICAgICAgPHR5cGU+ZXh0ZW50X2RlY29tbWl0X3Q8L3R5cGU+IHR5cGUgYW5kIGRlY29t bWl0cyBhbnkgcGh5c2ljYWwgbWVtb3J5Ci0gICAgICAgIHRoYXQgaXMgYmFja2luZyBwYWdlcyB3 aXRoaW4gYW4gZXh0ZW50IGF0IGdpdmVuCi0gICAgICAgIDxwYXJhbWV0ZXI+YWRkcjwvcGFyYW1l dGVyPiBhbmQgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGF0Ci0gICAgICAgIDxwYXJhbWV0 ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+IGJ5dGVzLCBleHRlbmRpbmcgZm9yCi0gICAgICAgIDxwYXJh bWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+IG9uIGJlaGFsZiBvZiBhcmVuYQotICAgICAgICA8cGFy YW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPiwgcmV0dXJuaW5nIGZhbHNlIHVwb24gc3VjY2Vz cywgaW4gd2hpY2gKLSAgICAgICAgY2FzZSB0aGUgcGFnZXMgd2lsbCBiZSBjb21taXR0ZWQgdmlh IHRoZSBleHRlbnQgY29tbWl0IGZ1bmN0aW9uIGJlZm9yZQotICAgICAgICBiZWluZyByZXVzZWQu ICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzIGluZGljYXRlcyBvcHQtb3V0IGZy b20KLSAgICAgICAgZGVjb21taXQ7IHRoZSBtZW1vcnkgcmVtYWlucyBjb21taXR0ZWQgYW5kIGF2 YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSwgaW4KLSAgICAgICAgd2hpY2ggY2FzZSBpdCB3aWxsIGJl IGF1dG9tYXRpY2FsbHkgcmV0YWluZWQgZm9yIGxhdGVyIHJldXNlLjwvcGFyYT4KLQotICAgICAg ICA8ZnVuY3N5bm9wc2lzPjxmdW5jcHJvdG90eXBlPgotICAgICAgICAgIDxmdW5jZGVmPnR5cGVk ZWYgYm9vbCA8ZnVuY3Rpb24+KGV4dGVudF9wdXJnZV90KTwvZnVuY3Rpb24+PC9mdW5jZGVmPgot ICAgICAgICAgIDxwYXJhbWRlZj5leHRlbnRfaG9va3NfdCAqPHBhcmFtZXRlcj5leHRlbnRfaG9v a3M8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFy YW1ldGVyPmFkZHI8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5z aXplX3QgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8 cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4K LSAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJhbWV0ZXI+bGVuZ3RoPC9wYXJhbWV0ZXI+ PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dW5zaWduZWQgPHBhcmFtZXRlcj5hcmVu YV9pbmQ8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICA8L2Z1bmNwcm90b3R5cGU+PC9m dW5jc3lub3BzaXM+Ci0gICAgICAgIDxsaXRlcmFsbGF5b3V0PjwvbGl0ZXJhbGxheW91dD4KLSAg ICAgICAgPHBhcmE+QW4gZXh0ZW50IHB1cmdlIGZ1bmN0aW9uIGNvbmZvcm1zIHRvIHRoZQotICAg ICAgICA8dHlwZT5leHRlbnRfcHVyZ2VfdDwvdHlwZT4gdHlwZSBhbmQgZGlzY2FyZHMgcGh5c2lj YWwgcGFnZXMKLSAgICAgICAgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5nIGFzc29j aWF0ZWQgd2l0aCBhbiBleHRlbnQgYXQgZ2l2ZW4KLSAgICAgICAgPHBhcmFtZXRlcj5hZGRyPC9w YXJhbWV0ZXI+IGFuZCA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gYXQKLSAgICAgICAgPHBh cmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj4gYnl0ZXMsIGV4dGVuZGluZyBmb3IKLSAgICAgICAg PHBhcmFtZXRlcj5sZW5ndGg8L3BhcmFtZXRlcj4gb24gYmVoYWxmIG9mIGFyZW5hCi0gICAgICAg IDxwYXJhbWV0ZXI+YXJlbmFfaW5kPC9wYXJhbWV0ZXI+LiAgQSBsYXp5IGV4dGVudCBwdXJnZSBm dW5jdGlvbiAoZS5nLgotICAgICAgICBpbXBsZW1lbnRlZCB2aWEKLSAgICAgICAgPGZ1bmN0aW9u Pm1hZHZpc2UoPHBhcmFtZXRlcj4uLi48L3BhcmFtZXRlcj48cGFyYW1ldGVyPjxjb25zdGFudD5N QURWX0ZSRUU8L2NvbnN0YW50PjwvcGFyYW1ldGVyPik8L2Z1bmN0aW9uPikKLSAgICAgICAgY2Fu IGRlbGF5IHB1cmdpbmcgaW5kZWZpbml0ZWx5IGFuZCBsZWF2ZSB0aGUgcGFnZXMgd2l0aGluIHRo ZSBwdXJnZWQKLSAgICAgICAgdmlydHVhbCBtZW1vcnkgcmFuZ2UgaW4gYW4gaW5kZXRlcm1pbml0 ZSBzdGF0ZSwgd2hlcmVhcyBhIGZvcmNlZCBleHRlbnQKLSAgICAgICAgcHVyZ2UgZnVuY3Rpb24g aW1tZWRpYXRlbHkgcHVyZ2VzLCBhbmQgdGhlIHBhZ2VzIHdpdGhpbiB0aGUgdmlydHVhbAotICAg ICAgICBtZW1vcnkgcmFuZ2Ugd2lsbCBiZSB6ZXJvLWZpbGxlZCB0aGUgbmV4dCB0aW1lIHRoZXkg YXJlIGFjY2Vzc2VkLiAgSWYKLSAgICAgICAgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhp cyBpbmRpY2F0ZXMgZmFpbHVyZSB0byBwdXJnZS48L3BhcmE+Ci0KLSAgICAgICAgPGZ1bmNzeW5v cHNpcz48ZnVuY3Byb3RvdHlwZT4KLSAgICAgICAgICA8ZnVuY2RlZj50eXBlZGVmIGJvb2wgPGZ1 bmN0aW9uPihleHRlbnRfc3BsaXRfdCk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAgICAgICA8 cGFyYW1kZWY+ZXh0ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50X2hvb2tzPC9wYXJhbWV0 ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hZGRy PC9wYXJhbWV0ZXI+PC9wYXJhbWRlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+c2l6ZV90IDxwYXJh bWV0ZXI+c2l6ZTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVmPnNp emVfdCA8cGFyYW1ldGVyPnNpemVfYTwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAg PHBhcmFtZGVmPnNpemVfdCA8cGFyYW1ldGVyPnNpemVfYjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+ Ci0gICAgICAgICAgPHBhcmFtZGVmPmJvb2wgPHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj51bnNpZ25lZCA8cGFyYW1ldGVyPmFy ZW5hX2luZDwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT48 L2Z1bmNzeW5vcHNpcz4KLSAgICAgICAgPGxpdGVyYWxsYXlvdXQ+PC9saXRlcmFsbGF5b3V0Pgot ICAgICAgICA8cGFyYT5BbiBleHRlbnQgc3BsaXQgZnVuY3Rpb24gY29uZm9ybXMgdG8gdGhlCi0g ICAgICAgIDx0eXBlPmV4dGVudF9zcGxpdF90PC90eXBlPiB0eXBlIGFuZCBvcHRpb25hbGx5IHNw bGl0cyBhbiBleHRlbnQgYXQKLSAgICAgICAgZ2l2ZW4gPHBhcmFtZXRlcj5hZGRyPC9wYXJhbWV0 ZXI+IGFuZCA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaW50bwotICAgICAgICB0d28gYWRq YWNlbnQgZXh0ZW50cywgdGhlIGZpcnN0IG9mIDxwYXJhbWV0ZXI+c2l6ZV9hPC9wYXJhbWV0ZXI+ IGJ5dGVzLAotICAgICAgICBhbmQgdGhlIHNlY29uZCBvZiA8cGFyYW1ldGVyPnNpemVfYjwvcGFy YW1ldGVyPiBieXRlcywgb3BlcmF0aW5nIG9uCi0gICAgICAgIDxwYXJhbWV0ZXI+Y29tbWl0dGVk PC9wYXJhbWV0ZXI+L2RlY29tbWl0dGVkIG1lbW9yeSBhcyBpbmRpY2F0ZWQsIG9uCi0gICAgICAg IGJlaGFsZiBvZiBhcmVuYSA8cGFyYW1ldGVyPmFyZW5hX2luZDwvcGFyYW1ldGVyPiwgcmV0dXJu aW5nIGZhbHNlIHVwb24KLSAgICAgICAgc3VjY2Vzcy4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5z IHRydWUsIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGV4dGVudAotICAgICAgICByZW1haW5zIHVu c3BsaXQgYW5kIHRoZXJlZm9yZSBzaG91bGQgY29udGludWUgdG8gYmUgb3BlcmF0ZWQgb24gYXMg YQotICAgICAgICB3aG9sZS48L3BhcmE+Ci0KLSAgICAgICAgPGZ1bmNzeW5vcHNpcz48ZnVuY3By b3RvdHlwZT4KLSAgICAgICAgICA8ZnVuY2RlZj50eXBlZGVmIGJvb2wgPGZ1bmN0aW9uPihleHRl bnRfbWVyZ2VfdCk8L2Z1bmN0aW9uPjwvZnVuY2RlZj4KLSAgICAgICAgICA8cGFyYW1kZWY+ZXh0 ZW50X2hvb2tzX3QgKjxwYXJhbWV0ZXI+ZXh0ZW50X2hvb2tzPC9wYXJhbWV0ZXI+PC9wYXJhbWRl Zj4KLSAgICAgICAgICA8cGFyYW1kZWY+dm9pZCAqPHBhcmFtZXRlcj5hZGRyX2E8L3BhcmFtZXRl cj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj5zaXplX3QgPHBhcmFtZXRlcj5zaXpl X2E8L3BhcmFtZXRlcj48L3BhcmFtZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj52b2lkICo8cGFy YW1ldGVyPmFkZHJfYjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgICAgPHBhcmFtZGVm PnNpemVfdCA8cGFyYW1ldGVyPnNpemVfYjwvcGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAg ICAgPHBhcmFtZGVmPmJvb2wgPHBhcmFtZXRlcj5jb21taXR0ZWQ8L3BhcmFtZXRlcj48L3BhcmFt ZGVmPgotICAgICAgICAgIDxwYXJhbWRlZj51bnNpZ25lZCA8cGFyYW1ldGVyPmFyZW5hX2luZDwv cGFyYW1ldGVyPjwvcGFyYW1kZWY+Ci0gICAgICAgIDwvZnVuY3Byb3RvdHlwZT48L2Z1bmNzeW5v cHNpcz4KLSAgICAgICAgPGxpdGVyYWxsYXlvdXQ+PC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8 cGFyYT5BbiBleHRlbnQgbWVyZ2UgZnVuY3Rpb24gY29uZm9ybXMgdG8gdGhlCi0gICAgICAgIDx0 eXBlPmV4dGVudF9tZXJnZV90PC90eXBlPiB0eXBlIGFuZCBvcHRpb25hbGx5IG1lcmdlcyBhZGph Y2VudCBleHRlbnRzLAotICAgICAgICBhdCBnaXZlbiA8cGFyYW1ldGVyPmFkZHJfYTwvcGFyYW1l dGVyPiBhbmQgPHBhcmFtZXRlcj5zaXplX2E8L3BhcmFtZXRlcj4KLSAgICAgICAgd2l0aCBnaXZl biA8cGFyYW1ldGVyPmFkZHJfYjwvcGFyYW1ldGVyPiBhbmQKLSAgICAgICAgPHBhcmFtZXRlcj5z aXplX2I8L3BhcmFtZXRlcj4gaW50byBvbmUgY29udGlndW91cyBleHRlbnQsIG9wZXJhdGluZyBv bgotICAgICAgICA8cGFyYW1ldGVyPmNvbW1pdHRlZDwvcGFyYW1ldGVyPi9kZWNvbW1pdHRlZCBt ZW1vcnkgYXMgaW5kaWNhdGVkLCBvbgotICAgICAgICBiZWhhbGYgb2YgYXJlbmEgPHBhcmFtZXRl cj5hcmVuYV9pbmQ8L3BhcmFtZXRlcj4sIHJldHVybmluZyBmYWxzZSB1cG9uCi0gICAgICAgIHN1 Y2Nlc3MuICBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzIGluZGljYXRlcyB0aGF0 IHRoZSBleHRlbnRzCi0gICAgICAgIHJlbWFpbiBkaXN0aW5jdCBtYXBwaW5ncyBhbmQgdGhlcmVm b3JlIHNob3VsZCBjb250aW51ZSB0byBiZSBvcGVyYXRlZCBvbgotICAgICAgICBpbmRlcGVuZGVu dGx5LjwvcGFyYT4KLSAgICAgICAgPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5Pgot Ci0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMubmFyZW5hcyI+Ci0gICAgICAgIDx0ZXJt PgotICAgICAgICAgIDxtYWxsY3RsPmFyZW5hcy5uYXJlbmFzPC9tYWxsY3RsPgotICAgICAgICAg ICg8dHlwZT51bnNpZ25lZDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1cnJlbnQgbGltaXQg b24gbnVtYmVyIG9mIGFyZW5hcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVu dHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMuZGlydHlfZGVjYXlfbXMiPgot ICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5hcmVuYXMuZGlydHlfZGVjYXlfbXM8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNzaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxs aXRlcmFsPnJ3PC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48 cGFyYT5DdXJyZW50IGRlZmF1bHQgcGVyLWFyZW5hIGFwcHJveGltYXRlIHRpbWUgaW4KLSAgICAg ICAgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9mIGEgc2V0IG9mIHVudXNlZCBkaXJ0 eSBwYWdlcyB1bnRpbCBhbgotICAgICAgICBlcXVpdmFsZW50IHNldCBvZiB1bnVzZWQgZGlydHkg cGFnZXMgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQsIHVzZWQgdG8KLSAgICAgICAgaW5pdGlhbGl6 ZSA8bGluawotICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLmRpcnR5X2RlY2F5X21zIj48bWFsbGN0 bD5hcmVuYS4mbHQ7aSZndDsuZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgotICAgICAg ICBkdXJpbmcgYXJlbmEgY3JlYXRpb24uICBTZWUgPGxpbmsKLSAgICAgICAgbGlua2VuZD0ib3B0 LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQuZGlydHlfZGVjYXlfbXM8L21hbGxjdGw+PC9s aW5rPgotICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRl bT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVu YXMubXV6enlfZGVjYXlfbXMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5h cmVuYXMubXV6enlfZGVjYXlfbXM8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNzaXplX3Q8 L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+ Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdXJyZW50IGRlZmF1bHQgcGVyLWFyZW5hIGFwcHJv eGltYXRlIHRpbWUgaW4KLSAgICAgICAgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9m IGEgc2V0IG9mIHVudXNlZCBtdXp6eSBwYWdlcyB1bnRpbCBhbgotICAgICAgICBlcXVpdmFsZW50 IHNldCBvZiB1bnVzZWQgbXV6enkgcGFnZXMgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQsIHVzZWQg dG8KLSAgICAgICAgaW5pdGlhbGl6ZSA8bGluawotICAgICAgICBsaW5rZW5kPSJhcmVuYS5pLm11 enp5X2RlY2F5X21zIj48bWFsbGN0bD5hcmVuYS4mbHQ7aSZndDsubXV6enlfZGVjYXlfbXM8L21h bGxjdGw+PC9saW5rPgotICAgICAgICBkdXJpbmcgYXJlbmEgY3JlYXRpb24uICBTZWUgPGxpbmsK LSAgICAgICAgbGlua2VuZD0ib3B0Lm11enp5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQubXV6enlf ZGVjYXlfbXM8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBmb3IgYWRkaXRpb25hbCBpbmZvcm1h dGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8 dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMucXVhbnR1bSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAg ICAgIDxtYWxsY3RsPmFyZW5hcy5xdWFudHVtPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5z aXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8 L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5RdWFudHVtIHNpemUuPC9wYXJhPjwvbGlz dGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i YXJlbmFzLnBhZ2UiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5hcmVuYXMu cGFnZTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKLSAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+UGFnZSBzaXplLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50 cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFyZW5hcy50Y2FjaGVfbWF4Ij4KLSAgICAg ICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+YXJlbmFzLnRjYWNoZV9tYXg8L21hbGxjdGw+ Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08 L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1heGlt dW0gdGhyZWFkLWNhY2hlZCBzaXplIGNsYXNzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92 YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImFyZW5hcy5uYmlucyI+Ci0g ICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPmFyZW5hcy5uYmluczwvbWFsbGN0bD4K LSAgICAgICAgICAoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnIt PC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5OdW1i ZXIgb2YgYmluIHNpemUgY2xhc3Nlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlz dGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcmVuYXMubmhiaW5zIj4KLSAgICAg ICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+YXJlbmFzLm5oYmluczwvbWFsbGN0bD4KLSAg ICAgICAgICAoPHR5cGU+dW5zaWduZWQ8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ub3RhbCBu dW1iZXIgb2YgdGhyZWFkIGNhY2hlIGJpbiBzaXplCi0gICAgICAgIGNsYXNzZXMuPC9wYXJhPjwv bGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBp ZD0iYXJlbmFzLmJpbi5pLnNpemUiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0 bD5hcmVuYXMuYmluLiZsdDtpJmd0Oy5zaXplPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5z aXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8 L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYXhpbXVtIHNpemUgc3VwcG9ydGVkIGJ5 IHNpemUgY2xhc3MuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQot ICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmFzLmJpbi5pLm5yZWdzIj4KLSAgICAgICAgPHRl cm0+Ci0gICAgICAgICAgPG1hbGxjdGw+YXJlbmFzLmJpbi4mbHQ7aSZndDsubnJlZ3M8L21hbGxj dGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQzMl90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJh bD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ TnVtYmVyIG9mIHJlZ2lvbnMgcGVyIHNsYWIuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zh cmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmFzLmJpbi5pLnNsYWJf c2l6ZSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPmFyZW5hcy5iaW4uJmx0 O2kmZ3Q7LnNsYWJfc2l6ZTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBl PikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAg ICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIGJ5dGVzIHBlciBzbGFiLjwvcGFyYT48L2xp c3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 ImFyZW5hcy5ubGV4dGVudHMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5h cmVuYXMubmxleHRlbnRzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT51bnNpZ25lZDwvdHlw ZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlRvdGFsIG51bWJlciBvZiBsYXJnZSBzaXplIGNsYXNzZXMu PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxp c3RlbnRyeSBpZD0iYXJlbmFzLmxleHRlbnQuaS5zaXplIj4KLSAgICAgICAgPHRlcm0+Ci0gICAg ICAgICAgPG1hbGxjdGw+YXJlbmFzLmxleHRlbnQuJmx0O2kmZ3Q7LnNpemU8L21hbGxjdGw+Ci0g ICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk1heGltdW0g c2l6ZSBzdXBwb3J0ZWQgYnkgdGhpcyBsYXJnZSBzaXplCi0gICAgICAgIGNsYXNzLjwvcGFyYT48 L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9ImFyZW5hcy5jcmVhdGUiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5h cmVuYXMuY3JlYXRlPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT51bnNpZ25lZDwvdHlwZT4s IDx0eXBlPmV4dGVudF9ob29rc190ICo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnJ3PC9s aXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5FeHBsaWNp dGx5IGNyZWF0ZSBhIG5ldyBhcmVuYSBvdXRzaWRlIHRoZSByYW5nZSBvZgotICAgICAgICBhdXRv bWF0aWNhbGx5IG1hbmFnZWQgYXJlbmFzLCB3aXRoIG9wdGlvbmFsbHkgc3BlY2lmaWVkIGV4dGVu dCBob29rcywKLSAgICAgICAgYW5kIHJldHVybiB0aGUgbmV3IGFyZW5hIGluZGV4LjwvcGFyYT4K LQotICAgICAgICA8cGFyYT5JZiB0aGUgYW1vdW50IG9mIHNwYWNlIHN1cHBsaWVkIGZvciBzdG9y aW5nIHRoZSBhcmVuYSBpbmRleCBkb2VzCi0gICAgICAgIG5vdCBlcXVhbCA8Y29kZSBsYW5ndWFn ZT0iQyI+c2l6ZW9mKDx0eXBlPnVuc2lnbmVkPC90eXBlPik8L2NvZGU+LCBubwotICAgICAgICBh cmVuYSB3aWxsIGJlIGNyZWF0ZWQsIG5vIGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzcGFj ZSBwb2ludGVkIGJ5Ci0gICAgICAgIDxwYXJhbWV0ZXI+b2xkcDwvcGFyYW1ldGVyPiwgYW5kIDxw YXJhbWV0ZXI+Km9sZGxlbnA8L3BhcmFtZXRlcj4gd2lsbAotICAgICAgICBiZSBzZXQgdG8gMC4K LSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAg ICAgPHZhcmxpc3RlbnRyeSBpZD0iYXJlbmFzLmxvb2t1cCI+Ci0gICAgICAgIDx0ZXJtPgotICAg ICAgICAgIDxtYWxsY3RsPmFyZW5hcy5sb29rdXA8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBl PnVuc2lnbmVkPC90eXBlPiwgPHR5cGU+dm9pZCo8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFs PnJ3PC9saXRlcmFsPgotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5J bmRleCBvZiB0aGUgYXJlbmEgdG8gd2hpY2ggYW4gYWxsb2NhdGlvbiBiZWxvbmdzIHRvLjwvcGFy YT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InByb2YudGhyZWFkX2FjdGl2ZV9pbml0Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAg ICAgPG1hbGxjdGw+cHJvZi50aHJlYWRfYWN0aXZlX2luaXQ8L21hbGxjdGw+Ci0gICAgICAgICAg KDx0eXBlPmJvb2w8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgotICAg ICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4K LSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNvbnRyb2wgdGhlIGluaXRpYWwgc2V0dGluZyBmb3Ig PGxpbmsKLSAgICAgICAgbGlua2VuZD0idGhyZWFkLnByb2YuYWN0aXZlIj48bWFsbGN0bD50aHJl YWQucHJvZi5hY3RpdmU8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBpbiBuZXdseSBjcmVhdGVk IHRocmVhZHMuICBTZWUgdGhlIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC5wcm9mX3RocmVh ZF9hY3RpdmVfaW5pdCI+PG1hbGxjdGw+b3B0LnByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0PC9tYWxs Y3RsPjwvbGluaz4KLSAgICAgICAgb3B0aW9uIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwv cGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9InByb2YuYWN0aXZlIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxj dGw+cHJvZi5hY3RpdmU8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmJvb2w8L3R5cGU+KQot ICAgICAgICAgIDxsaXRlcmFsPnJ3PC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5h YmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxw YXJhPkNvbnRyb2wgd2hldGhlciBzYW1wbGluZyBpcyBjdXJyZW50bHkgYWN0aXZlLiAgU2VlIHRo ZQotICAgICAgICA8bGluawotICAgICAgICBsaW5rZW5kPSJvcHQucHJvZl9hY3RpdmUiPjxtYWxs Y3RsPm9wdC5wcm9mX2FjdGl2ZTwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIG9wdGlvbiBmb3Ig YWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgYXMgd2VsbCBhcyB0aGUgaW50ZXJyZWxhdGVkIDxsaW5r Ci0gICAgICAgIGxpbmtlbmQ9InRocmVhZC5wcm9mLmFjdGl2ZSI+PG1hbGxjdGw+dGhyZWFkLnBy b2YuYWN0aXZlPC9tYWxsY3RsPjwvbGluaz4KLSAgICAgICAgbWFsbGN0bC48L3BhcmE+PC9saXN0 aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJw cm9mLmR1bXAiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5wcm9mLmR1bXA8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmNvbnN0IGNoYXIgKjwvdHlwZT4pCi0gICAgICAg ICAgPGxpdGVyYWw+LXc8L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtcHJv Zjwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+RHVt cCBhIG1lbW9yeSBwcm9maWxlIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSwgb3IgaWYgTlVMTAotICAg ICAgICBpcyBzcGVjaWZpZWQsIHRvIGEgZmlsZSBhY2NvcmRpbmcgdG8gdGhlIHBhdHRlcm4KLSAg ICAgICAgPGZpbGVuYW1lPiZsdDtwcmVmaXgmZ3Q7LiZsdDtwaWQmZ3Q7LiZsdDtzZXEmZ3Q7Lm0m bHQ7bXNlcSZndDsuaGVhcDwvZmlsZW5hbWU+LAotICAgICAgICB3aGVyZSA8bGl0ZXJhbD4mbHQ7 cHJlZml4Jmd0OzwvbGl0ZXJhbD4gaXMgY29udHJvbGxlZCBieSB0aGUKLSAgICAgICAgPGxpbmsg bGlua2VuZD0ib3B0LnByb2ZfcHJlZml4Ij48bWFsbGN0bD5vcHQucHJvZl9wcmVmaXg8L21hbGxj dGw+PC9saW5rPgotICAgICAgICBhbmQgPGxpbmsgbGlua2VuZD0icHJvZi5wcmVmaXgiPjxtYWxs Y3RsPnByb2YucHJlZml4PC9tYWxsY3RsPjwvbGluaz4KLSAgICAgICAgb3B0aW9ucy48L3BhcmE+ PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5 IGlkPSJwcm9mLnByZWZpeCI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnBy b2YucHJlZml4PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb25zdCBjaGFyICo8L3R5cGU+ KQotICAgICAgICAgIDxsaXRlcmFsPi13PC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0t ZW5hYmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVt PjxwYXJhPlNldCB0aGUgZmlsZW5hbWUgcHJlZml4IGZvciBwcm9maWxlIGR1bXBzLiBTZWUKLSAg ICAgICAgPGxpbmsKLSAgICAgICAgbGlua2VuZD0ib3B0LnByb2ZfcHJlZml4Ij48bWFsbGN0bD5v cHQucHJvZl9wcmVmaXg8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBmb3IgdGhlIGRlZmF1bHQg c2V0dGluZy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBkaWZmZXJlbnRpYXRlIHByb2ZpbGUKLSAg ICAgICAgZHVtcHMgc3VjaCBhcyBmcm9tIGZvcmtlZCBwcm9jZXNzZXMuCi0gICAgICAgIDwvcGFy YT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InByb2YuZ2R1bXAiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5w cm9mLmdkdW1wPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5ib29sPC90eXBlPikKLSAgICAg ICAgICA8bGl0ZXJhbD5ydzwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1w cm9mPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5X aGVuIGVuYWJsZWQsIHRyaWdnZXIgYSBtZW1vcnkgcHJvZmlsZSBkdW1wIGV2ZXJ5IHRpbWUKLSAg ICAgICAgdGhlIHRvdGFsIHZpcnR1YWwgbWVtb3J5IGV4Y2VlZHMgdGhlIHByZXZpb3VzIG1heGlt dW0uICBQcm9maWxlcyBhcmUKLSAgICAgICAgZHVtcGVkIHRvIGZpbGVzIG5hbWVkIGFjY29yZGlu ZyB0byB0aGUgcGF0dGVybgotICAgICAgICA8ZmlsZW5hbWU+Jmx0O3ByZWZpeCZndDsuJmx0O3Bp ZCZndDsuJmx0O3NlcSZndDsudSZsdDt1c2VxJmd0Oy5oZWFwPC9maWxlbmFtZT4sCi0gICAgICAg IHdoZXJlIDxsaXRlcmFsPiZsdDtwcmVmaXgmZ3Q7PC9saXRlcmFsPiBpcyBjb250cm9sbGVkIGJ5 IHRoZSA8bGluawotICAgICAgICBsaW5rZW5kPSJvcHQucHJvZl9wcmVmaXgiPjxtYWxsY3RsPm9w dC5wcm9mX3ByZWZpeDwvbWFsbGN0bD48L2xpbms+IGFuZAotICAgICAgICA8bGluayBsaW5rZW5k PSJwcm9mLnByZWZpeCI+PG1hbGxjdGw+cHJvZi5wcmVmaXg8L21hbGxjdGw+PC9saW5rPgotICAg ICAgICBvcHRpb25zLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0K LSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InByb2YucmVzZXQiPgotICAgICAgICA8dGVybT4KLSAg ICAgICAgICA8bWFsbGN0bD5wcm9mLnJlc2V0PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5z aXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPi13PC9saXRlcmFsPgotICAgICAgICAg IFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAg ICAgPGxpc3RpdGVtPjxwYXJhPlJlc2V0IGFsbCBtZW1vcnkgcHJvZmlsZSBzdGF0aXN0aWNzLCBh bmQgb3B0aW9uYWxseQotICAgICAgICB1cGRhdGUgdGhlIHNhbXBsZSByYXRlIChzZWUgPGxpbmsK LSAgICAgICAgbGlua2VuZD0ib3B0LmxnX3Byb2Zfc2FtcGxlIj48bWFsbGN0bD5vcHQubGdfcHJv Zl9zYW1wbGU8L21hbGxjdGw+PC9saW5rPgotICAgICAgICBhbmQgPGxpbmsKLSAgICAgICAgbGlu a2VuZD0icHJvZi5sZ19zYW1wbGUiPjxtYWxsY3RsPnByb2YubGdfc2FtcGxlPC9tYWxsY3RsPjwv bGluaz4pLgotICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5 PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJwcm9mLmxnX3NhbXBsZSI+Ci0gICAgICAgIDx0 ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnByb2YubGdfc2FtcGxlPC9tYWxsY3RsPgotICAgICAg ICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFs PgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAgIDwv dGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkdldCB0aGUgY3VycmVudCBzYW1wbGUgcmF0 ZSAoc2VlIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC5sZ19wcm9mX3NhbXBsZSI+PG1hbGxj dGw+b3B0LmxnX3Byb2Zfc2FtcGxlPC9tYWxsY3RsPjwvbGluaz4pLgotICAgICAgICA8L3BhcmE+ PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5 IGlkPSJwcm9mLmludGVydmFsIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+ cHJvZi5pbnRlcnZhbDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+ KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0t ZW5hYmxlLXByb2Y8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVt PjxwYXJhPkF2ZXJhZ2UgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBiZXR3ZWVuCi0gICAgICAg IGludGVydmFsLWJhc2VkIHByb2ZpbGUgZHVtcHMuICBTZWUgdGhlCi0gICAgICAgIDxsaW5rCi0g ICAgICAgIGxpbmtlbmQ9Im9wdC5sZ19wcm9mX2ludGVydmFsIj48bWFsbGN0bD5vcHQubGdfcHJv Zl9pbnRlcnZhbDwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIG9wdGlvbiBmb3IgYWRkaXRpb25h bCBpbmZvcm1hdGlvbi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5Pgot Ci0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hbGxvY2F0ZWQiPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hbGxvY2F0ZWQ8L21hbGxjdGw+Ci0gICAgICAg ICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+ Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwv dGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlRvdGFsIG51bWJlciBvZiBieXRlcyBhbGxv Y2F0ZWQgYnkgdGhlCi0gICAgICAgIGFwcGxpY2F0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAg ICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFjdGl2 ZSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFjdGl2ZTwvbWFs bGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJh bD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9u Pl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+VG90YWwgbnVtYmVy IG9mIGJ5dGVzIGluIGFjdGl2ZSBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlCi0gICAgICAgIGFwcGxp Y2F0aW9uLiAgVGhpcyBpcyBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUsIGFuZCBncmVhdGVy IHRoYW4gb3IKLSAgICAgICAgZXF1YWwgdG8gPGxpbmsKLSAgICAgICAgbGlua2VuZD0ic3RhdHMu YWxsb2NhdGVkIj48bWFsbGN0bD5zdGF0cy5hbGxvY2F0ZWQ8L21hbGxjdGw+PC9saW5rPi4KLSAg ICAgICAgVGhpcyBkb2VzIG5vdCBpbmNsdWRlIDxsaW5rIGxpbmtlbmQ9InN0YXRzLmFyZW5hcy5p LnBkaXJ0eSI+Ci0gICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsucGRpcnR5 PC9tYWxsY3RsPjwvbGluaz4sCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9InN0YXRzLmFyZW5hcy5p LnBtdXp6eSI+Ci0gICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsucG11enp5 PC9tYWxsY3RsPjwvbGluaz4sIG5vciBwYWdlcwotICAgICAgICBlbnRpcmVseSBkZXZvdGVkIHRv IGFsbG9jYXRvciBtZXRhZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVu dHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tZXRhZGF0YSI+Ci0gICAgICAg IDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLm1ldGFkYXRhPC9tYWxsY3RsPgotICAg ICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAg ICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5Ub3RhbCBudW1iZXIgb2YgYnl0ZXMg ZGVkaWNhdGVkIHRvIG1ldGFkYXRhLCB3aGljaAotICAgICAgICBjb21wcmlzZSBiYXNlIGFsbG9j YXRpb25zIHVzZWQgZm9yIGJvb3RzdHJhcC1zZW5zaXRpdmUgYWxsb2NhdG9yCi0gICAgICAgIG1l dGFkYXRhIHN0cnVjdHVyZXMgKHNlZSA8bGluawotICAgICAgICBsaW5rZW5kPSJzdGF0cy5hcmVu YXMuaS5iYXNlIj48bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJhc2U8L21hbGxjdGw+ PC9saW5rPikKLSAgICAgICAgYW5kIGludGVybmFsIGFsbG9jYXRpb25zIChzZWUgPGxpbmsKLSAg ICAgICAgbGlua2VuZD0ic3RhdHMuYXJlbmFzLmkuaW50ZXJuYWwiPjxtYWxsY3RsPnN0YXRzLmFy ZW5hcy4mbHQ7aSZndDsuaW50ZXJuYWw8L21hbGxjdGw+PC9saW5rPikuCi0gICAgICAgIFRyYW5z cGFyZW50IGh1Z2UgcGFnZSAoZW5hYmxlZCB3aXRoIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9w dC5tZXRhZGF0YV90aHAiPm9wdC5tZXRhZGF0YV90aHA8L2xpbms+KSB1c2FnZSBpcyBub3QKLSAg ICAgICAgY29uc2lkZXJlZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5 PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tZXRhZGF0YV90aHAiPgotICAgICAg ICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5tZXRhZGF0YV90aHA8L21hbGxjdGw+ Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08 L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0g ICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiB0cmFuc3Bh cmVudCBodWdlIHBhZ2VzIChUSFApIHVzZWQgZm9yCi0gICAgICAgIG1ldGFkYXRhLiAgU2VlIDxs aW5rCi0gICAgICAgIGxpbmtlbmQ9InN0YXRzLm1ldGFkYXRhIj48bWFsbGN0bD5zdGF0cy5tZXRh ZGF0YTwvbWFsbGN0bD48L2xpbms+IGFuZAotICAgICAgICA8bGluayBsaW5rZW5kPSJvcHQubWV0 YWRhdGFfdGhwIj5vcHQubWV0YWRhdGFfdGhwPC9saW5rPikgZm9yCi0gICAgICAgIGRldGFpbHMu PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ic3RhdHMucmVzaWRlbnQiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8 bWFsbGN0bD5zdGF0cy5yZXNpZGVudDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90 PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gcGh5c2ljYWxseSByZXNp ZGVudCBkYXRhCi0gICAgICAgIHBhZ2VzIG1hcHBlZCBieSB0aGUgYWxsb2NhdG9yLCBjb21wcmlz aW5nIGFsbCBwYWdlcyBkZWRpY2F0ZWQgdG8KLSAgICAgICAgYWxsb2NhdG9yIG1ldGFkYXRhLCBw YWdlcyBiYWNraW5nIGFjdGl2ZSBhbGxvY2F0aW9ucywgYW5kIHVudXNlZCBkaXJ0eQotICAgICAg ICBwYWdlcy4gIFRoaXMgaXMgYSBtYXhpbXVtIHJhdGhlciB0aGFuIHByZWNpc2UgYmVjYXVzZSBw YWdlcyBtYXkgbm90Ci0gICAgICAgIGFjdHVhbGx5IGJlIHBoeXNpY2FsbHkgcmVzaWRlbnQgaWYg dGhleSBjb3JyZXNwb25kIHRvIGRlbWFuZC16ZXJvZWQKLSAgICAgICAgdmlydHVhbCBtZW1vcnkg dGhhdCBoYXMgbm90IHlldCBiZWVuIHRvdWNoZWQuICBUaGlzIGlzIGEgbXVsdGlwbGUgb2YgdGhl Ci0gICAgICAgIHBhZ2Ugc2l6ZSwgYW5kIGlzIGxhcmdlciB0aGFuIDxsaW5rCi0gICAgICAgIGxp bmtlbmQ9InN0YXRzLmFjdGl2ZSI+PG1hbGxjdGw+c3RhdHMuYWN0aXZlPC9tYWxsY3RsPjwvbGlu az4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZh cmxpc3RlbnRyeSBpZD0ic3RhdHMubWFwcGVkIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAg PG1hbGxjdGw+c3RhdHMubWFwcGVkPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zaXplX3Q8 L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0 aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxs aXN0aXRlbT48cGFyYT5Ub3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gYWN0aXZlIGV4dGVudHMgbWFw cGVkIGJ5IHRoZQotICAgICAgICBhbGxvY2F0b3IuICBUaGlzIGlzIGxhcmdlciB0aGFuIDxsaW5r Ci0gICAgICAgIGxpbmtlbmQ9InN0YXRzLmFjdGl2ZSI+PG1hbGxjdGw+c3RhdHMuYWN0aXZlPC9t YWxsY3RsPjwvbGluaz4uICBUaGlzCi0gICAgICAgIGRvZXMgbm90IGluY2x1ZGUgaW5hY3RpdmUg ZXh0ZW50cywgZXZlbiB0aG9zZSB0aGF0IGNvbnRhaW4gdW51c2VkIGRpcnR5Ci0gICAgICAgIHBh Z2VzLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHN0cmljdCBvcmRlcmluZyBiZXR3ZWVu IHRoaXMgYW5kCi0gICAgICAgIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9InN0YXRzLnJlc2lkZW50 Ij48bWFsbGN0bD5zdGF0cy5yZXNpZGVudDwvbWFsbGN0bD48L2xpbms+LjwvcGFyYT48L2xpc3Rp dGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0 YXRzLnJldGFpbmVkIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMu cmV0YWluZWQ8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAg ICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUt c3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJh PlRvdGFsIG51bWJlciBvZiBieXRlcyBpbiB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncyB0aGF0Ci0g ICAgICAgIHdlcmUgcmV0YWluZWQgcmF0aGVyIHRoYW4gYmVpbmcgcmV0dXJuZWQgdG8gdGhlIG9w ZXJhdGluZyBzeXN0ZW0gdmlhCi0gICAgICAgIGUuZy4gPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0 aXRsZT5tdW5tYXA8L3JlZmVudHJ5dGl0bGU+Ci0gICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9s bnVtPjwvY2l0ZXJlZmVudHJ5PiBvciBzaW1pbGFyLiAgUmV0YWluZWQgdmlydHVhbAotICAgICAg ICBtZW1vcnkgaXMgdHlwaWNhbGx5IHVudG91Y2hlZCwgZGVjb21taXR0ZWQsIG9yIHB1cmdlZCwg c28gaXQgaGFzIG5vCi0gICAgICAgIHN0cm9uZ2x5IGFzc29jaWF0ZWQgcGh5c2ljYWwgbWVtb3J5 IChzZWUgPGxpbmsKLSAgICAgICAgbGlua2VuZD0iYXJlbmEuaS5leHRlbnRfaG9va3MiPmV4dGVu dCBob29rczwvbGluaz4gZm9yIGRldGFpbHMpLgotICAgICAgICBSZXRhaW5lZCBtZW1vcnkgaXMg ZXhjbHVkZWQgZnJvbSBtYXBwZWQgbWVtb3J5IHN0YXRpc3RpY3MsIGUuZy4gPGxpbmsKLSAgICAg ICAgbGlua2VuZD0ic3RhdHMubWFwcGVkIj48bWFsbGN0bD5zdGF0cy5tYXBwZWQ8L21hbGxjdGw+ PC9saW5rPi4KLSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRy eT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuemVyb19yZWFsbG9jcyI+Ci0gICAg ICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLnplcm9fcmVhbGxvY3M8L21hbGxj dGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiB0aW1l cyB0aGF0IHRoZSA8ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4KLSAgICAgICAgd2FzIGNh bGxlZCB3aXRoIGEgbm9uLTxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gcG9pbnRlciBhcmd1bWVu dCBhbmQgYQotICAgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IHNpemUgYXJndW1lbnQuICBU aGlzIGlzIGEgZnVuZGFtZW50YWxseSB1bnNhZmUKLSAgICAgICAgcGF0dGVybiBpbiBwb3J0YWJs ZSBwcm9ncmFtczsgc2VlIDxsaW5rIGxpbmtlbmQ9Im9wdC56ZXJvX3JlYWxsb2MiPgotICAgICAg ICA8bWFsbGN0bD5vcHQuemVyb19yZWFsbG9jPC9tYWxsY3RsPjwvbGluaz4gZm9yIGRldGFpbHMu Ci0gICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmJhY2tncm91bmRfdGhyZWFkLm51bV90aHJlYWRz Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYmFja2dyb3VuZF90 aHJlYWQubnVtX3RocmVhZHM8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlw ZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+ LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3Rp dGVtPjxwYXJhPiBOdW1iZXIgb2YgPGxpbmsgbGlua2VuZD0iYmFja2dyb3VuZF90aHJlYWQiPmJh Y2tncm91bmQKLSAgICAgICAgdGhyZWFkczwvbGluaz4gcnVubmluZyBjdXJyZW50bHkuPC9wYXJh PjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYmFja2dyb3VuZF90aHJlYWQubnVtX3J1bnMiPgotICAgICAgICA8dGVybT4K LSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5iYWNrZ3JvdW5kX3RocmVhZC5udW1fcnVuczwvbWFs bGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRl cmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRp b24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT4gVG90YWwgbnVt YmVyIG9mIHJ1bnMgZnJvbSBhbGwgPGxpbmsKLSAgICAgICAgbGlua2VuZD0iYmFja2dyb3VuZF90 aHJlYWQiPmJhY2tncm91bmQgdGhyZWFkczwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAg ICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYmFja2dy b3VuZF90aHJlYWQucnVuX2ludGVydmFsIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1h bGxjdGw+c3RhdHMuYmFja2dyb3VuZF90aHJlYWQucnVuX2ludGVydmFsPC9tYWxsY3RsPgotICAg ICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAg ICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiBBdmVyYWdlIHJ1biBpbnRlcnZh bCBpbiBuYW5vc2Vjb25kcyBvZiA8bGluawotICAgICAgICBsaW5rZW5kPSJiYWNrZ3JvdW5kX3Ro cmVhZCI+YmFja2dyb3VuZCB0aHJlYWRzPC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAg IDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tdXRleGVz LmN0bCI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLm11dGV4ZXMu Y3RsLntjb3VudGVyfTs8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmNvdW50ZXIgc3BlY2lm aWMgdHlwZTwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+Y3RsPC92YXJuYW1l PiBtdXRleCAoZ2xvYmFsCi0gICAgICAgIHNjb3BlOyBtYWxsY3RsIHJlbGF0ZWQpLiAgPG1hbGxj dGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhlCi0gICAgICAgIGNvdW50ZXJzIGJl bG93OjwvcGFyYT4KLSAgICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ibXV0ZXhfY291bnRlcnMiPgot ICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT48dmFybmFtZT5udW1fb3BzPC92YXJuYW1lPiAoPHR5 cGU+dWludDY0X3Q8L3R5cGU+KToKLSAgICAgICAgICBUb3RhbCBudW1iZXIgb2YgbG9jayBhY3F1 aXNpdGlvbiBvcGVyYXRpb25zIG9uIHRoaXMgbXV0ZXguPC9wYXJhPgotCi0JICA8cGFyYT48dmFy bmFtZT5udW1fc3Bpbl9hY3E8L3Zhcm5hbWU+ICg8dHlwZT51aW50NjRfdDwvdHlwZT4pOiBOdW1i ZXIKLQkgIG9mIHRpbWVzIHRoZSBtdXRleCB3YXMgc3Bpbi1hY3F1aXJlZC4gIFdoZW4gdGhlIG11 dGV4IGlzIGN1cnJlbnRseQotCSAgbG9ja2VkIGFuZCBjYW5ub3QgYmUgYWNxdWlyZWQgaW1tZWRp YXRlbHksIGEgc2hvcnQgcGVyaW9kIG9mCi0JICBzcGluLXJldHJ5IHdpdGhpbiBqZW1hbGxvYyB3 aWxsIGJlIHBlcmZvcm1lZC4gIEFjcXVpcmVkIHRocm91Z2ggc3BpbgotCSAgZ2VuZXJhbGx5IG1l YW5zIHRoZSBjb250ZW50aW9uIHdhcyBsaWdodHdlaWdodCBhbmQgbm90IGNhdXNpbmcgY29udGV4 dAotCSAgc3dpdGNoZXMuPC9wYXJhPgotCi0JICA8cGFyYT48dmFybmFtZT5udW1fd2FpdDwvdmFy bmFtZT4gKDx0eXBlPnVpbnQ2NF90PC90eXBlPik6IE51bWJlciBvZgotCSAgdGltZXMgdGhlIG11 dGV4IHdhcyB3YWl0LWFjcXVpcmVkLCB3aGljaCBtZWFucyB0aGUgbXV0ZXggY29udGVudGlvbgot CSAgd2FzIG5vdCBzb2x2ZWQgYnkgc3Bpbi1yZXRyeSwgYW5kIGJsb2NraW5nIG9wZXJhdGlvbiB3 YXMgbGlrZWx5Ci0JICBpbnZvbHZlZCBpbiBvcmRlciB0byBhY3F1aXJlIHRoZSBtdXRleC4gIFRo aXMgZXZlbnQgZ2VuZXJhbGx5IGltcGxpZXMKLQkgIGhpZ2hlciBjb3N0IC8gbG9uZ2VyIGRlbGF5 LCBhbmQgc2hvdWxkIGJlIGludmVzdGlnYXRlZCBpZiBpdCBoYXBwZW5zCi0JICBvZnRlbi48L3Bh cmE+Ci0KLQkgIDxwYXJhPjx2YXJuYW1lPm1heF93YWl0X3RpbWU8L3Zhcm5hbWU+ICg8dHlwZT51 aW50NjRfdDwvdHlwZT4pOgotCSAgTWF4aW11bSBsZW5ndGggb2YgdGltZSBpbiBuYW5vc2Vjb25k cyBzcGVudCBvbiBhIHNpbmdsZSB3YWl0LWFjcXVpcmVkCi0JICBsb2NrIG9wZXJhdGlvbi4gIE5v dGUgdGhhdCB0byBhdm9pZCBwcm9maWxpbmcgb3ZlcmhlYWQgb24gdGhlIGNvbW1vbgotCSAgcGF0 aCwgdGhpcyBkb2VzIG5vdCBjb25zaWRlciBzcGluLWFjcXVpcmVkIGNhc2VzLjwvcGFyYT4KLQot CSAgPHBhcmE+PHZhcm5hbWU+dG90YWxfd2FpdF90aW1lPC92YXJuYW1lPiAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KToKLQkgIEN1bXVsYXRpdmUgdGltZSBpbiBuYW5vc2Vjb25kcyBzcGVudCBvbiB3 YWl0LWFjcXVpcmVkIGxvY2sgb3BlcmF0aW9ucy4KLQkgIFNpbWlsYXJseSwgc3Bpbi1hY3F1aXJl ZCBjYXNlcyBhcmUgbm90IGNvbnNpZGVyZWQuPC9wYXJhPgotCi0JICA8cGFyYT48dmFybmFtZT5t YXhfbnVtX3RoZHM8L3Zhcm5hbWU+ICg8dHlwZT51aW50MzJfdDwvdHlwZT4pOiBNYXhpbXVtCi0J ICBudW1iZXIgb2YgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgbXV0ZXggc2ltdWx0YW5lb3VzbHku ICBTaW1pbGFybHksCi0JICBzcGluLWFjcXVpcmVkIGNhc2VzIGFyZSBub3QgY29uc2lkZXJlZC48 L3BhcmE+Ci0KLQkgIDxwYXJhPjx2YXJuYW1lPm51bV9vd25lcl9zd2l0Y2g8L3Zhcm5hbWU+ICg8 dHlwZT51aW50NjRfdDwvdHlwZT4pOgotCSAgTnVtYmVyIG9mIHRpbWVzIHRoZSBjdXJyZW50IG11 dGV4IG93bmVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cwotCSAgb25lLiAgVGhpcyBl dmVudCBkb2VzIG5vdCBnZW5lcmFsbHkgaW1wbHkgYW4gaXNzdWU7IHJhdGhlciBpdCBpcyBhbgot CSAgaW5kaWNhdG9yIG9mIGhvdyBvZnRlbiB0aGUgcHJvdGVjdGVkIGRhdGEgYXJlIGFjY2Vzc2Vk IGJ5IGRpZmZlcmVudAotCSAgdGhyZWFkcy4KLQkgIDwvcGFyYT4KLQkgIDwvbGlzdGl0ZW0+Ci0J PC92YXJsaXN0ZW50cnk+Ci0JPC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0g ICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5tdXRleGVzLmJhY2tncm91bmRfdGhyZWFkIj4K LSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMubXV0ZXhlcy5iYWNrZ3Jv dW5kX3RocmVhZC57Y291bnRlcn08L21hbGxjdGw+Ci0JICAoPHR5cGU+Y291bnRlciBzcGVjaWZp YyB0eXBlPC90eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+ LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3Rp dGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+YmFja2dyb3VuZF90aHJlYWQ8L3Zhcm5h bWU+IG11dGV4Ci0gICAgICAgIChnbG9iYWwgc2NvcGU7IDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9 ImJhY2tncm91bmRfdGhyZWFkIj48bWFsbGN0bD5iYWNrZ3JvdW5kX3RocmVhZDwvbWFsbGN0bD48 L2xpbms+Ci0gICAgICAgIHJlbGF0ZWQpLiAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBp cyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im11dGV4X2Nv dW50ZXJzIj5tdXRleCBwcm9maWxpbmcKLSAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48 L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InN0YXRzLm11dGV4ZXMucHJvZiI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxs Y3RsPnN0YXRzLm11dGV4ZXMucHJvZi57Y291bnRlcn08L21hbGxjdGw+Ci0JICAoPHR5cGU+Y291 bnRlciBzcGVjaWZpYyB0eXBlPC90eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAg ICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAg ICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+cHJvZjwvdmFybmFt ZT4gbXV0ZXggKGdsb2JhbAotICAgICAgICBzY29wZTsgcHJvZmlsaW5nIHJlbGF0ZWQpLiAgPG1h bGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhlCi0gICAgICAgIGNvdW50ZXJz IGluIDxsaW5rIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKLSAgICAg ICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50 cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLm11dGV4ZXMucHJvZl90aGRzX2Rh dGEiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5tdXRleGVzLnBy b2ZfdGhkc19kYXRhLntjb3VudGVyfTwvbWFsbGN0bD4KLQkgICg8dHlwZT5jb3VudGVyIHNwZWNp ZmljIHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlv bj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotCTxsaXN0aXRlbT48 cGFyYT5TdGF0aXN0aWNzIG9uIDx2YXJuYW1lPnByb2Y8L3Zhcm5hbWU+IHRocmVhZHMgZGF0YSBt dXRleAotCShnbG9iYWwgc2NvcGU7IHByb2ZpbGluZyByZWxhdGVkKS4gIDxtYWxsY3RsPntjb3Vu dGVyfTwvbWFsbGN0bD4gaXMgb25lCi0Jb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rIGxpbmtlbmQ9 Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKLSAgICAgICAgY291bnRlcnM8L2xpbms+ LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJs aXN0ZW50cnkgaWQ9InN0YXRzLm11dGV4ZXMucHJvZl9kdW1wIj4KLSAgICAgICAgPHRlcm0+Ci0g ICAgICAgICAgPG1hbGxjdGw+c3RhdHMubXV0ZXhlcy5wcm9mX2R1bXAue2NvdW50ZXJ9PC9tYWxs Y3RsPgotCSAgKDx0eXBlPmNvdW50ZXIgc3BlY2lmaWMgdHlwZTwvdHlwZT4pIDxsaXRlcmFsPnIt PC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQot ICAgICAgICA8L3Rlcm0+Ci0JPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+ cHJvZjwvdmFybmFtZT4gZHVtcGluZyBtdXRleAotCShnbG9iYWwgc2NvcGU7IHByb2ZpbGluZyBy ZWxhdGVkKS4gIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lCi0Jb2YgdGhlIGNv dW50ZXJzIGluIDxsaW5rIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcK LSAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJs aXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLm11dGV4ZXMucmVzZXQi PgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5tdXRleGVzLnJlc2V0 PC9tYWxsY3RsPgotCSAgKDx0eXBlPnZvaWQ8L3R5cGU+KSA8bGl0ZXJhbD4tLTwvbGl0ZXJhbD4K LSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90 ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzZXQgYWxsIG11dGV4IHByb2ZpbGUgc3Rh dGlzdGljcywgaW5jbHVkaW5nIGdsb2JhbAotICAgICAgICBtdXRleGVzLCBhcmVuYSBtdXRleGVz IGFuZCBiaW4gbXV0ZXhlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5 PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5kc3MiPgotICAgICAg ICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmRzczwv bWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Y29uc3QgY2hhciAqPC90eXBlPikKLSAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+ZHNzICg8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPnNicms8L3JlZmVudHJ5 dGl0bGU+Ci0gICAgICAgIDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5Pikg YWxsb2NhdGlvbiBwcmVjZWRlbmNlIGFzCi0gICAgICAgIHJlbGF0ZWQgdG8gPGNpdGVyZWZlbnRy eT48cmVmZW50cnl0aXRsZT5tbWFwPC9yZWZlbnRyeXRpdGxlPgotICAgICAgICA8bWFudm9sbnVt PjI8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4gYWxsb2NhdGlvbi4gIFNlZSA8bGluawotICAg ICAgICBsaW5rZW5kPSJvcHQuZHNzIj48bWFsbGN0bD5vcHQuZHNzPC9tYWxsY3RsPjwvbGluaz4g Zm9yIGRldGFpbHMuCi0gICAgICAgIDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0 ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmRpcnR5X2Rl Y2F5X21zIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFz LiZsdDtpJmd0Oy5kaXJ0eV9kZWNheV9tczwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c3Np emVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwv dGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkFwcHJveGltYXRlIHRpbWUgaW4gbWlsbGlz ZWNvbmRzIGZyb20gdGhlIGNyZWF0aW9uIG9mIGEKLSAgICAgICAgc2V0IG9mIHVudXNlZCBkaXJ0 eSBwYWdlcyB1bnRpbCBhbiBlcXVpdmFsZW50IHNldCBvZiB1bnVzZWQgZGlydHkgcGFnZXMKLSAg ICAgICAgaXMgcHVyZ2VkIGFuZC9vciByZXVzZWQuICBTZWUgPGxpbmsKLSAgICAgICAgbGlua2Vu ZD0ib3B0LmRpcnR5X2RlY2F5X21zIj48bWFsbGN0bD5vcHQuZGlydHlfZGVjYXlfbXM8L21hbGxj dGw+PC9saW5rPgotICAgICAgICBmb3IgZGV0YWlscy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAg IDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMu aS5tdXp6eV9kZWNheV9tcyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0 YXRzLmFyZW5hcy4mbHQ7aSZndDsubXV6enlfZGVjYXlfbXM8L21hbGxjdGw+Ci0gICAgICAgICAg KDx0eXBlPnNzaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgot ICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5BcHByb3hpbWF0ZSB0aW1l IGluIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBjcmVhdGlvbiBvZiBhCi0gICAgICAgIHNldCBvZiB1 bnVzZWQgbXV6enkgcGFnZXMgdW50aWwgYW4gZXF1aXZhbGVudCBzZXQgb2YgdW51c2VkIG11enp5 IHBhZ2VzCi0gICAgICAgIGlzIHB1cmdlZCBhbmQvb3IgcmV1c2VkLiAgU2VlIDxsaW5rCi0gICAg ICAgIGxpbmtlbmQ9Im9wdC5tdXp6eV9kZWNheV9tcyI+PG1hbGxjdGw+b3B0Lm11enp5X2RlY2F5 X21zPC9tYWxsY3RsPjwvbGluaz4KLSAgICAgICAgZm9yIGRldGFpbHMuPC9wYXJhPjwvbGlzdGl0 ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3Rh dHMuYXJlbmFzLmkubnRocmVhZHMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0 bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm50aHJlYWRzPC9tYWxsY3RsPgotICAgICAgICAgICg8 dHlwZT51bnNpZ25lZDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0g ICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiB0aHJlYWRz IGN1cnJlbnRseSBhc3NpZ25lZCB0bwotICAgICAgICBhcmVuYS48L3BhcmE+PC9saXN0aXRlbT4K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5h cmVuYXMuaS51cHRpbWUiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0 cy5hcmVuYXMuJmx0O2kmZ3Q7LnVwdGltZTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWlu dDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICA8 L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5UaW1lIGVsYXBzZWQgKGluIG5hbm9zZWNv bmRzKSBzaW5jZSB0aGUgYXJlbmEgd2FzCi0gICAgICAgIGNyZWF0ZWQuICBJZiAmbHQ7aSZndDsg ZXF1YWxzIDxjb25zdGFudD4wPC9jb25zdGFudD4gb3IKLSAgICAgICAgPGNvbnN0YW50Pk1BTExD VExfQVJFTkFTX0FMTDwvY29uc3RhbnQ+LCB0aGlzIGlzIHRoZSB1cHRpbWUgc2luY2UgbWFsbG9j Ci0gICAgICAgIGluaXRpYWxpemF0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJs aXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLnBhY3Rp dmUiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0 O2kmZ3Q7LnBhY3RpdmU8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4p Ci0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAg ICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiBwYWdlcyBpbiBhY3RpdmUgZXh0ZW50cy48L3Bh cmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVu dHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5wZGlydHkiPgotICAgICAgICA8dGVybT4KLSAgICAgICAg ICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LnBkaXJ0eTwvbWFsbGN0bD4KLSAgICAg ICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJh bD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIHBh Z2VzIHdpdGhpbiB1bnVzZWQgZXh0ZW50cyB0aGF0IGFyZQotICAgICAgICBwb3RlbnRpYWxseSBk aXJ0eSwgYW5kIGZvciB3aGljaCA8ZnVuY3Rpb24+bWFkdmlzZSgpPC9mdW5jdGlvbj4gb3IKLSAg ICAgICAgc2ltaWxhciBoYXMgbm90IGJlZW4gY2FsbGVkLiAgU2VlIDxsaW5rCi0gICAgICAgIGxp bmtlbmQ9Im9wdC5kaXJ0eV9kZWNheV9tcyI+PG1hbGxjdGw+b3B0LmRpcnR5X2RlY2F5X21zPC9t YWxsY3RsPjwvbGluaz4KLSAgICAgICAgZm9yIGEgZGVzY3JpcHRpb24gb2YgZGlydHkgcGFnZXMu PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkucG11enp5Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAg ICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5wbXV6enk8L21hbGxjdGw+Ci0g ICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xp dGVyYWw+Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBv ZiBwYWdlcyB3aXRoaW4gdW51c2VkIGV4dGVudHMgdGhhdCBhcmUgbXV6enkuCi0gICAgICAgIFNl ZSA8bGluawotICAgICAgICBsaW5rZW5kPSJvcHQubXV6enlfZGVjYXlfbXMiPjxtYWxsY3RsPm9w dC5tdXp6eV9kZWNheV9tczwvbWFsbGN0bD48L2xpbms+Ci0gICAgICAgIGZvciBhIGRlc2NyaXB0 aW9uIG9mIG11enp5IHBhZ2VzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50 cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm1hcHBlZCI+Ci0g ICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsu bWFwcGVkPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAg ICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0 YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5O dW1iZXIgb2YgbWFwcGVkIGJ5dGVzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0 ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLnJldGFpbmVk Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtp Jmd0Oy5yZXRhaW5lZDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikK LSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVu YWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+TnVtYmVyIG9mIHJldGFpbmVkIGJ5dGVzLiAgU2VlIDxsaW5rCi0gICAgICAgIGxpbmtl bmQ9InN0YXRzLnJldGFpbmVkIj48bWFsbGN0bD5zdGF0cy5yZXRhaW5lZDwvbWFsbGN0bD48L2xp bms+IGZvcgotICAgICAgICBkZXRhaWxzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJs aXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmV4dGVu dF9hdmFpbCI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5h cy4mbHQ7aSZndDsuZXh0ZW50X2F2YWlsPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zaXpl X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAg IDxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgYWxsb2NhdGVkIChidXQgdW51c2VkKSBleHRlbnQg c3RydWN0cyBpbiB0aGlzCi0JYXJlbmEuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxp c3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuYmFzZSI+ Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZn dDsuYmFzZTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90PC90eXBlPikKLSAgICAg ICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1z dGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ Ci0gICAgICAgIE51bWJlciBvZiBieXRlcyBkZWRpY2F0ZWQgdG8gYm9vdHN0cmFwLXNlbnNpdGl2 ZSBhbGxvY2F0b3IgbWV0YWRhdGEKLSAgICAgICAgc3RydWN0dXJlcy48L3BhcmE+PC9saXN0aXRl bT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0 cy5hcmVuYXMuaS5pbnRlcm5hbCI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3Rs PnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuaW50ZXJuYWw8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0 eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAg ICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4K LSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPk51bWJlciBvZiBieXRlcyBkZWRpY2F0ZWQgdG8gaW50 ZXJuYWwgYWxsb2NhdGlvbnMuCi0gICAgICAgIEludGVybmFsIGFsbG9jYXRpb25zIGRpZmZlciBm cm9tIGFwcGxpY2F0aW9uLW9yaWdpbmF0ZWQgYWxsb2NhdGlvbnMgaW4KLSAgICAgICAgdGhhdCB0 aGV5IGFyZSBmb3IgaW50ZXJuYWwgdXNlLCBhbmQgdGhhdCB0aGV5IGFyZSBvbWl0dGVkIGZyb20g aGVhcAotICAgICAgICBwcm9maWxlcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlz dGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5tZXRhZGF0 YV90aHAiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMu Jmx0O2kmZ3Q7Lm1ldGFkYXRhX3RocDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90 PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkgdXNl ZCBmb3IKLSAgICAgICAgbWV0YWRhdGEuICBTZWUgPGxpbmsgbGlua2VuZD0ib3B0Lm1ldGFkYXRh X3RocCI+b3B0Lm1ldGFkYXRhX3RocDwvbGluaz4KLSAgICAgICAgZm9yIGRldGFpbHMuPC9wYXJh PjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkucmVzaWRlbnQiPgotICAgICAgICA8dGVybT4KLSAgICAgICAg ICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LnJlc2lkZW50PC9tYWxsY3RsPgotICAg ICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAg ICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5NYXhpbXVtIG51bWJlciBvZiBieXRl cyBpbiBwaHlzaWNhbGx5IHJlc2lkZW50IGRhdGEKLSAgICAgICAgcGFnZXMgbWFwcGVkIGJ5IHRo ZSBhcmVuYSwgY29tcHJpc2luZyBhbGwgcGFnZXMgZGVkaWNhdGVkIHRvIGFsbG9jYXRvcgotICAg ICAgICBtZXRhZGF0YSwgcGFnZXMgYmFja2luZyBhY3RpdmUgYWxsb2NhdGlvbnMsIGFuZCB1bnVz ZWQgZGlydHkgcGFnZXMuCi0gICAgICAgIFRoaXMgaXMgYSBtYXhpbXVtIHJhdGhlciB0aGFuIHBy ZWNpc2UgYmVjYXVzZSBwYWdlcyBtYXkgbm90IGFjdHVhbGx5IGJlCi0gICAgICAgIHBoeXNpY2Fs bHkgcmVzaWRlbnQgaWYgdGhleSBjb3JyZXNwb25kIHRvIGRlbWFuZC16ZXJvZWQgdmlydHVhbCBt ZW1vcnkKLSAgICAgICAgdGhhdCBoYXMgbm90IHlldCBiZWVuIHRvdWNoZWQuICBUaGlzIGlzIGEg bXVsdGlwbGUgb2YgdGhlIHBhZ2UKLSAgICAgICAgc2l6ZS48L3BhcmE+PC9saXN0aXRlbT4KLSAg ICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVu YXMuaS5kaXJ0eV9ucHVyZ2UiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5z dGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmRpcnR5X25wdXJnZTwvbWFsbGN0bD4KLSAgICAgICAgICAo PHR5cGU+dWludDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgot ICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rl cm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgZGlydHkgcGFnZSBwdXJnZSBz d2VlcHMgcGVyZm9ybWVkLgotICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFy bGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5kaXJ0 eV9ubWFkdmlzZSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFy ZW5hcy4mbHQ7aSZndDsuZGlydHlfbm1hZHZpc2U8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBl PnVpbnQ2NF90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAg ICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgot ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIDxmdW5jdGlvbj5tYWR2aXNlKCk8L2Z1 bmN0aW9uPiBvciBzaW1pbGFyCi0gICAgICAgIGNhbGxzIG1hZGUgdG8gcHVyZ2UgZGlydHkgcGFn ZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZh cmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuZGlydHlfcHVyZ2VkIj4KLSAgICAgICAgPHRl cm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5kaXJ0eV9wdXJn ZWQ8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKLSAgICAgICAg ICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0 czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVt YmVyIG9mIGRpcnR5IHBhZ2VzIHB1cmdlZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFy bGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5tdXp6 eV9ucHVyZ2UiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVu YXMuJmx0O2kmZ3Q7Lm11enp5X25wdXJnZTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWlu dDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAg IFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAg ICAgIDxsaXN0aXRlbT48cGFyYT5OdW1iZXIgb2YgbXV6enkgcGFnZSBwdXJnZSBzd2VlcHMgcGVy Zm9ybWVkLgotICAgICAgICA8L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5 PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5tdXp6eV9ubWFkdmlz ZSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7 aSZndDsubXV6enlfbm1hZHZpc2U8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90 PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIDxmdW5jdGlvbj5tYWR2aXNlKCk8L2Z1bmN0aW9uPiBv ciBzaW1pbGFyCi0gICAgICAgIGNhbGxzIG1hZGUgdG8gcHVyZ2UgbXV6enkgcGFnZXMuPC9wYXJh PjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkubXV6enlfcHVyZ2VkIj4KLSAgICAgICAgPHRlcm0+Ci0gICAg ICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXp6eV9wdXJnZWQ8L21hbGxj dGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJh bD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9u Pl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIG11 enp5IHBhZ2VzIHB1cmdlZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5 PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5zbWFsbC5hbGxvY2F0 ZWQiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0 O2kmZ3Q7LnNtYWxsLmFsbG9jYXRlZDwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+c2l6ZV90 PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnkgc21h bGwgb2JqZWN0cy4KLSAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3Rl bnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuc21hbGwubm1h bGxvYyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4m bHQ7aSZndDsuc21hbGwubm1hbGxvYzwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAg IDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0aW1lcyBhIHNtYWxsIGFsbG9j YXRpb24gd2FzCi0gICAgICAgIHJlcXVlc3RlZCBmcm9tIHRoZSBhcmVuYSdzIGJpbnMsIHdoZXRo ZXIgdG8gZmlsbCB0aGUgcmVsZXZhbnQgdGNhY2hlIGlmCi0gICAgICAgIDxsaW5rIGxpbmtlbmQ9 Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8L21hbGxjdGw+PC9saW5rPiBpcwotICAg ICAgICBlbmFibGVkLCBvciB0byBkaXJlY3RseSBzYXRpc2Z5IGFuIGFsbG9jYXRpb24gcmVxdWVz dAotICAgICAgICBvdGhlcndpc2UuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3Rl bnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuc21hbGwubmRh bGxvYyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4m bHQ7aSZndDsuc21hbGwubmRhbGxvYzwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAg IDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0aW1lcyBhIHNtYWxsIGFsbG9j YXRpb24gd2FzCi0gICAgICAgIHJldHVybmVkIHRvIHRoZSBhcmVuYSdzIGJpbnMsIHdoZXRoZXIg dG8gZmx1c2ggdGhlIHJlbGV2YW50IHRjYWNoZSBpZgotICAgICAgICA8bGluayBsaW5rZW5kPSJv cHQudGNhY2hlIj48bWFsbGN0bD5vcHQudGNhY2hlPC9tYWxsY3RsPjwvbGluaz4gaXMKLSAgICAg ICAgZW5hYmxlZCwgb3IgdG8gZGlyZWN0bHkgZGVhbGxvY2F0ZSBhbiBhbGxvY2F0aW9uCi0gICAg ICAgIG90aGVyd2lzZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5Pgot Ci0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5zbWFsbC5ucmVxdWVzdHMi PgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2km Z3Q7LnNtYWxsLm5yZXF1ZXN0czwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8 L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0 aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxs aXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHNh dGlzZmllZCBieQotICAgICAgICBhbGwgYmluIHNpemUgY2xhc3Nlcy48L3BhcmE+PC9saXN0aXRl bT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0 cy5hcmVuYXMuaS5zbWFsbC5uZmlsbHMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFs bGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LnNtYWxsLm5maWxsczwvbWFsbGN0bD4KLSAgICAg ICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAg ICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0 Y2FjaGUgZmlsbHMgYnkgYWxsIHNtYWxsIHNpemUKLQljbGFzc2VzLjwvcGFyYT48L2xpc3RpdGVt PgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRz LmFyZW5hcy5pLnNtYWxsLm5mbHVzaGVzIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1h bGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5zbWFsbC5uZmx1c2hlczwvbWFsbGN0bD4KLSAg ICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAg ICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBv ZiB0Y2FjaGUgZmx1c2hlcyBieSBhbGwgc21hbGwgc2l6ZQotICAgICAgICBjbGFzc2VzLjwvcGFy YT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmxhcmdlLmFsbG9jYXRlZCI+Ci0gICAgICAgIDx0ZXJtPgot ICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubGFyZ2UuYWxsb2NhdGVk PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAgICAgIDxs aXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9v cHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5OdW1iZXIg b2YgYnl0ZXMgY3VycmVudGx5IGFsbG9jYXRlZCBieSBsYXJnZSBvYmplY3RzLgotICAgICAgICA8 L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlz dGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5sYXJnZS5ubWFsbG9jIj4KLSAgICAgICAgPHRlcm0+ Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5sYXJnZS5ubWFsbG9j PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAg PGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8 L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVs YXRpdmUgbnVtYmVyIG9mIHRpbWVzIGEgbGFyZ2UgZXh0ZW50IHdhcyBhbGxvY2F0ZWQKLSAgICAg ICAgZnJvbSB0aGUgYXJlbmEsIHdoZXRoZXIgdG8gZmlsbCB0aGUgcmVsZXZhbnQgdGNhY2hlIGlm IDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8 L21hbGxjdGw+PC9saW5rPiBpcyBlbmFibGVkIGFuZAotICAgICAgICB0aGUgc2l6ZSBjbGFzcyBp cyB3aXRoaW4gdGhlIHJhbmdlIGJlaW5nIGNhY2hlZCwgb3IgdG8gZGlyZWN0bHkgc2F0aXNmeQot ICAgICAgICBhbiBhbGxvY2F0aW9uIHJlcXVlc3Qgb3RoZXJ3aXNlLjwvcGFyYT48L2xpc3RpdGVt PgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRz LmFyZW5hcy5pLmxhcmdlLm5kYWxsb2MiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFs bGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmxhcmdlLm5kYWxsb2M8L21hbGxjdGw+Ci0gICAg ICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKLSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0 ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAg ICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2Yg dGltZXMgYSBsYXJnZSBleHRlbnQgd2FzIHJldHVybmVkCi0gICAgICAgIHRvIHRoZSBhcmVuYSwg d2hldGhlciB0byBmbHVzaCB0aGUgcmVsZXZhbnQgdGNhY2hlIGlmIDxsaW5rCi0gICAgICAgIGxp bmtlbmQ9Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8L21hbGxjdGw+PC9saW5rPiBp cyBlbmFibGVkIGFuZAotICAgICAgICB0aGUgc2l6ZSBjbGFzcyBpcyB3aXRoaW4gdGhlIHJhbmdl IGJlaW5nIGNhY2hlZCwgb3IgdG8gZGlyZWN0bHkKLSAgICAgICAgZGVhbGxvY2F0ZSBhbiBhbGxv Y2F0aW9uIG90aGVyd2lzZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5 PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5sYXJnZS5ucmVxdWVz dHMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0 O2kmZ3Q7LmxhcmdlLm5yZXF1ZXN0czwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWludDY0 X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8 b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAg IDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiBhbGxvY2F0aW9uIHJlcXVlc3Rz IHNhdGlzZmllZCBieQotICAgICAgICBhbGwgbGFyZ2Ugc2l6ZSBjbGFzc2VzLjwvcGFyYT48L2xp c3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9 InN0YXRzLmFyZW5hcy5pLmxhcmdlLm5maWxscyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAg IDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubGFyZ2UubmZpbGxzPC9tYWxsY3RsPgot ICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08 L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0g ICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVsYXRpdmUgbnVtYmVy IG9mIHRjYWNoZSBmaWxscyBieSBhbGwgbGFyZ2Ugc2l6ZQotCWNsYXNzZXMuPC9wYXJhPjwvbGlz dGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0i c3RhdHMuYXJlbmFzLmkubGFyZ2UubmZsdXNoZXMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAg ICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmxhcmdlLm5mbHVzaGVzPC9tYWxsY3Rs PgotICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVsYXRpdmUgbnVt YmVyIG9mIHRjYWNoZSBmbHVzaGVzIGJ5IGFsbCBsYXJnZSBzaXplCi0gICAgICAgIGNsYXNzZXMu PC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLm5tYWxsb2MiPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJpbnMuJmx0O2om Z3Q7Lm5tYWxsb2M8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikK LSAgICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVu YWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2YgdGltZXMgYSBiaW4gcmVnaW9uIG9mIHRoZQotICAg ICAgICBjb3JyZXNwb25kaW5nIHNpemUgY2xhc3Mgd2FzIGFsbG9jYXRlZCBmcm9tIHRoZSBhcmVu YSwgd2hldGhlciB0byBmaWxsCi0gICAgICAgIHRoZSByZWxldmFudCB0Y2FjaGUgaWYgPGxpbmsK LSAgICAgICAgbGlua2VuZD0ib3B0LnRjYWNoZSI+PG1hbGxjdGw+b3B0LnRjYWNoZTwvbWFsbGN0 bD48L2xpbms+IGlzIGVuYWJsZWQsIG9yCi0gICAgICAgIHRvIGRpcmVjdGx5IHNhdGlzZnkgYW4g YWxsb2NhdGlvbiByZXF1ZXN0IG90aGVyd2lzZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwv dmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5i aW5zLmoubmRhbGxvYyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRz LmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsubmRhbGxvYzwvbWFsbGN0bD4KLSAgICAg ICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRl cmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAg ICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0 aW1lcyBhIGJpbiByZWdpb24gb2YgdGhlCi0gICAgICAgIGNvcnJlc3BvbmRpbmcgc2l6ZSBjbGFz cyB3YXMgcmV0dXJuZWQgdG8gdGhlIGFyZW5hLCB3aGV0aGVyIHRvIGZsdXNoIHRoZQotICAgICAg ICByZWxldmFudCB0Y2FjaGUgaWYgPGxpbmsKLSAgICAgICAgbGlua2VuZD0ib3B0LnRjYWNoZSI+ PG1hbGxjdGw+b3B0LnRjYWNoZTwvbWFsbGN0bD48L2xpbms+IGlzIGVuYWJsZWQsIG9yCi0gICAg ICAgIHRvIGRpcmVjdGx5IGRlYWxsb2NhdGUgYW4gYWxsb2NhdGlvbiBvdGhlcndpc2UuPC9wYXJh PjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLm5yZXF1ZXN0cyI+Ci0gICAgICAgIDx0ZXJtPgot ICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsu bnJlcXVlc3RzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0g ICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFi bGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxw YXJhPkN1bXVsYXRpdmUgbnVtYmVyIG9mIGFsbG9jYXRpb24gcmVxdWVzdHMgc2F0aXNmaWVkIGJ5 Ci0gICAgICAgIGJpbiByZWdpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNpemUgY2xhc3MuPC9w YXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLmN1cnJlZ3MiPgotICAgICAgICA8dGVybT4K LSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJpbnMuJmx0O2omZ3Q7 LmN1cnJlZ3M8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAg ICAgICAgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUt c3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJh PkN1cnJlbnQgbnVtYmVyIG9mIHJlZ2lvbnMgZm9yIHRoaXMgc2l6ZQotICAgICAgICBjbGFzcy48 L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlz dGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5iaW5zLmoubmZpbGxzIj4KLSAgICAgICAgPHRlcm0+ Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5iaW5zLiZsdDtqJmd0 Oy5uZmlsbHM8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKLSAg ICAgICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2YgdGNhY2hlIGZpbGxzLjwvcGFyYT48 L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InN0YXRzLmFyZW5hcy5pLmJpbnMuai5uZmx1c2hlcyI+Ci0gICAgICAgIDx0ZXJtPgotICAg ICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsubmZs dXNoZXM8L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKLSAgICAg ICAgICA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+Q3VtdWxhdGl2ZSBudW1iZXIgb2YgdGNhY2hlIGZsdXNoZXMuPC9wYXJhPjwv bGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBp ZD0ic3RhdHMuYXJlbmFzLmkuYmlucy5qLm5zbGFicyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAg ICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsuYmlucy4mbHQ7aiZndDsubnNsYWJz PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAg PGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8 L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVs YXRpdmUgbnVtYmVyIG9mIHNsYWJzIGNyZWF0ZWQuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICA8 L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJlbmFzLmku Ymlucy5qLm5yZXNsYWJzIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3Rh dHMuYXJlbmFzLiZsdDtpJmd0Oy5iaW5zLiZsdDtqJmd0Oy5ucmVzbGFiczwvbWFsbGN0bD4KLSAg ICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9s aXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAg ICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBv ZiB0aW1lcyB0aGUgY3VycmVudCBzbGFiIGZyb20gd2hpY2gKLSAgICAgICAgdG8gYWxsb2NhdGUg Y2hhbmdlZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAg ICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5iaW5zLmouY3Vyc2xhYnMiPgotICAg ICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7LmJp bnMuJmx0O2omZ3Q7LmN1cnNsYWJzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zaXplX3Q8 L3R5cGU+KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0 aW9uPi0tZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxs aXN0aXRlbT48cGFyYT5DdXJyZW50IG51bWJlciBvZiBzbGFicy48L3BhcmE+PC9saXN0aXRlbT4K LSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRz LmFyZW5hcy5pLmJpbnMuai5ub25mdWxsX3NsYWJzIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAg ICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5iaW5zLiZsdDtqJmd0Oy5ub25mdWxs X3NsYWJzPC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5zaXplX3Q8L3R5cGU+KQotICAgICAg ICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxlLXN0 YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFyYT5D dXJyZW50IG51bWJlciBvZiBub25mdWxsIHNsYWJzLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAg PC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5p LmJpbnMubXV0ZXgiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5h cmVuYXMuJmx0O2kmZ3Q7LmJpbnMuJmx0O2omZ3Q7Lm11dGV4Lntjb3VudGVyfTwvbWFsbGN0bD4K LSAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBlPC90eXBlPikgPGxpdGVyYWw+ ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5d Ci0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3RpY3Mgb24K LSAgICAgICAgPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LmJpbnMuJmx0O2omZ3Q7PC92YXJuYW1l PiBtdXRleCAoYXJlbmEgYmluCi0gICAgICAgIHNjb3BlOyBiaW4gb3BlcmF0aW9uIHJlbGF0ZWQp LiAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YKLSAgICAgICAgdGhlIGNv dW50ZXJzIGluIDxsaW5rIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcK LSAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJs aXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmV4dGVu dHMubiI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4m bHQ7aSZndDsuZXh0ZW50cy4mbHQ7aiZndDsubntleHRlbnRfdHlwZX08L21hbGxjdGw+Ci0gICAg ICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVy YWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAg IDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPiBOdW1iZXIgb2YgZXh0ZW50cyBvZiB0 aGUgZ2l2ZW4gdHlwZSBpbiB0aGlzIGFyZW5hIGluCi0JdGhlIGJ1Y2tldCBjb3JyZXNwb25kaW5n IHRvIHBhZ2Ugc2l6ZSBpbmRleCAmbHQ7aiZndDsuIFRoZSBleHRlbnQgdHlwZQotCWlzIG9uZSBv ZiBkaXJ0eSwgbXV6enksIG9yIHJldGFpbmVkLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92 YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmV4 dGVudHMuYnl0ZXMiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5h cmVuYXMuJmx0O2kmZ3Q7LmV4dGVudHMuJmx0O2omZ3Q7LntleHRlbnRfdHlwZX1fYnl0ZXM8L21h bGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVy YWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlv bj5dCi0gICAgICAgIDwvdGVybT4KLQk8bGlzdGl0ZW0+PHBhcmE+IFN1bSBvZiB0aGUgYnl0ZXMg bWFuYWdlZCBieSBleHRlbnRzIG9mIHRoZSBnaXZlbiB0eXBlCi0JaW4gdGhpcyBhcmVuYSBpbiB0 aGUgYnVja2V0IGNvcnJlc3BvbmRpbmcgdG8gcGFnZSBzaXplIGluZGV4ICZsdDtqJmd0Oy4KLQlU aGUgZXh0ZW50IHR5cGUgaXMgb25lIG9mIGRpcnR5LCBtdXp6eSwgb3IgcmV0YWluZWQuPC9wYXJh PjwvbGlzdGl0ZW0+Ci0gICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRy eSBpZD0ic3RhdHMuYXJlbmFzLmkubGV4dGVudHMuai5ubWFsbG9jIj4KLSAgICAgICAgPHRlcm0+ Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5sZXh0ZW50cy4mbHQ7 aiZndDsubm1hbGxvYzwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+dWludDY0X3Q8L3R5cGU+ KQotICAgICAgICAgIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0t ZW5hYmxlLXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRl bT48cGFyYT5DdW11bGF0aXZlIG51bWJlciBvZiB0aW1lcyBhIGxhcmdlIGV4dGVudCBvZiB0aGUK LSAgICAgICAgY29ycmVzcG9uZGluZyBzaXplIGNsYXNzIHdhcyBhbGxvY2F0ZWQgZnJvbSB0aGUg YXJlbmEsIHdoZXRoZXIgdG8gZmlsbAotICAgICAgICB0aGUgcmVsZXZhbnQgdGNhY2hlIGlmIDxs aW5rCi0gICAgICAgIGxpbmtlbmQ9Im9wdC50Y2FjaGUiPjxtYWxsY3RsPm9wdC50Y2FjaGU8L21h bGxjdGw+PC9saW5rPiBpcyBlbmFibGVkIGFuZAotICAgICAgICB0aGUgc2l6ZSBjbGFzcyBpcyB3 aXRoaW4gdGhlIHJhbmdlIGJlaW5nIGNhY2hlZCwgb3IgdG8gZGlyZWN0bHkgc2F0aXNmeQotICAg ICAgICBhbiBhbGxvY2F0aW9uIHJlcXVlc3Qgb3RoZXJ3aXNlLjwvcGFyYT48L2xpc3RpdGVtPgot ICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFy ZW5hcy5pLmxleHRlbnRzLmoubmRhbGxvYyI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxt YWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubGV4dGVudHMuJmx0O2omZ3Q7Lm5kYWxsb2M8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnVpbnQ2NF90PC90eXBlPikKLSAgICAgICAgICA8 bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4tLWVuYWJsZS1zdGF0czwv b3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q3VtdWxh dGl2ZSBudW1iZXIgb2YgdGltZXMgYSBsYXJnZSBleHRlbnQgb2YgdGhlCi0gICAgICAgIGNvcnJl c3BvbmRpbmcgc2l6ZSBjbGFzcyB3YXMgcmV0dXJuZWQgdG8gdGhlIGFyZW5hLCB3aGV0aGVyIHRv IGZsdXNoIHRoZQotICAgICAgICByZWxldmFudCB0Y2FjaGUgaWYgPGxpbmsKLSAgICAgICAgbGlu a2VuZD0ib3B0LnRjYWNoZSI+PG1hbGxjdGw+b3B0LnRjYWNoZTwvbWFsbGN0bD48L2xpbms+IGlz IGVuYWJsZWQgYW5kCi0gICAgICAgIHRoZSBzaXplIGNsYXNzIGlzIHdpdGhpbiB0aGUgcmFuZ2Ug YmVpbmcgY2FjaGVkLCBvciB0byBkaXJlY3RseQotICAgICAgICBkZWFsbG9jYXRlIGFuIGFsbG9j YXRpb24gb3RoZXJ3aXNlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+ Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLmxleHRlbnRzLmoubnJl cXVlc3RzIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFz LiZsdDtpJmd0Oy5sZXh0ZW50cy4mbHQ7aiZndDsubnJlcXVlc3RzPC9tYWxsY3RsPgotICAgICAg ICAgICg8dHlwZT51aW50NjRfdDwvdHlwZT4pCi0gICAgICAgICAgPGxpdGVyYWw+ci08L2xpdGVy YWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAg IDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1bXVsYXRpdmUgbnVtYmVyIG9mIGFs bG9jYXRpb24gcmVxdWVzdHMgc2F0aXNmaWVkIGJ5Ci0gICAgICAgIGxhcmdlIGV4dGVudHMgb2Yg dGhlIGNvcnJlc3BvbmRpbmcgc2l6ZSBjbGFzcy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwv dmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5s ZXh0ZW50cy5qLmN1cmxleHRlbnRzIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxj dGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5sZXh0ZW50cy4mbHQ7aiZndDsuY3VybGV4dGVudHM8 L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPnNpemVfdDwvdHlwZT4pCi0gICAgICAgICAgPGxp dGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29w dGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkN1cnJlbnQg bnVtYmVyIG9mIGxhcmdlIGFsbG9jYXRpb25zIGZvciB0aGlzIHNpemUgY2xhc3MuCi0gICAgICAg IDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJs aXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMubGFyZ2UiPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMubGFy Z2Uue2NvdW50ZXJ9PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNwZWNpZmlj IHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4t LWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsubGFyZ2U8L3Zh cm5hbWU+Ci0gICAgICAgIG11dGV4IChhcmVuYSBzY29wZTsgbGFyZ2UgYWxsb2NhdGlvbiByZWxh dGVkKS4KLSAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhl IGNvdW50ZXJzIGluIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRl eCBwcm9maWxpbmcKLSAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgot ICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFy ZW5hcy5pLm11dGV4ZXMuZXh0ZW50X2F2YWlsIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAg PG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXRleGVzLmV4dGVudF9hdmFpbC57Y291 bnRlcn08L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmNvdW50ZXIgc3BlY2lmaWMgdHlwZTwv dHlwZT4pIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxl LXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFy YT5TdGF0aXN0aWNzIG9uIDx2YXJuYW1lPmFyZW5hLiZsdDtpJmd0Oy5leHRlbnRfYXZhaWwKLSAg ICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGV4dGVudCBhdmFpbCByZWxhdGVk KS4KLSAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBpcyBvbmUgb2YgdGhlIGNv dW50ZXJzIGluIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im11dGV4X2NvdW50ZXJzIj5tdXRleCBw cm9maWxpbmcKLSAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48L2xpc3RpdGVtPgotICAg ICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9InN0YXRzLmFyZW5h cy5pLm11dGV4ZXMuZXh0ZW50c19kaXJ0eSI+Ci0gICAgICAgIDx0ZXJtPgotICAgICAgICAgIDxt YWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubXV0ZXhlcy5leHRlbnRzX2RpcnR5Lntjb3Vu dGVyfTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBlPC90 eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUt c3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJh PlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LmV4dGVudHNfZGlydHkKLSAg ICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGRpcnR5IGV4dGVudHMgcmVsYXRl ZCkuCi0gICAgICAgIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lIG9mIHRoZSBj b3VudGVycyBpbiA8bGluawotICAgICAgICBsaW5rZW5kPSJtdXRleF9jb3VudGVycyI+bXV0ZXgg cHJvZmlsaW5nCi0gICAgICAgIGNvdW50ZXJzPC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KLSAg ICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVu YXMuaS5tdXRleGVzLmV4dGVudHNfbXV6enkiPgotICAgICAgICA8dGVybT4KLSAgICAgICAgICA8 bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMuZXh0ZW50c19tdXp6eS57Y291 bnRlcn08L21hbGxjdGw+Ci0gICAgICAgICAgKDx0eXBlPmNvdW50ZXIgc3BlY2lmaWMgdHlwZTwv dHlwZT4pIDxsaXRlcmFsPnItPC9saXRlcmFsPgotICAgICAgICAgIFs8b3B0aW9uPi0tZW5hYmxl LXN0YXRzPC9vcHRpb24+XQotICAgICAgICA8L3Rlcm0+Ci0gICAgICAgIDxsaXN0aXRlbT48cGFy YT5TdGF0aXN0aWNzIG9uIDx2YXJuYW1lPmFyZW5hLiZsdDtpJmd0Oy5leHRlbnRzX211enp5Ci0g ICAgICAgIDwvdmFybmFtZT4gbXV0ZXggKGFyZW5hIHNjb3BlOyBtdXp6eSBleHRlbnRzIHJlbGF0 ZWQpLgotICAgICAgICA8bWFsbGN0bD57Y291bnRlcn08L21hbGxjdGw+IGlzIG9uZSBvZiB0aGUg Y291bnRlcnMgaW4gPGxpbmsKLSAgICAgICAgbGlua2VuZD0ibXV0ZXhfY291bnRlcnMiPm11dGV4 IHByb2ZpbGluZwotICAgICAgICBjb3VudGVyczwvbGluaz4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0g ICAgICA8L3Zhcmxpc3RlbnRyeT4KLQotICAgICAgPHZhcmxpc3RlbnRyeSBpZD0ic3RhdHMuYXJl bmFzLmkubXV0ZXhlcy5leHRlbnRzX3JldGFpbmVkIj4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAg ICAgPG1hbGxjdGw+c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXRleGVzLmV4dGVudHNfcmV0YWlu ZWQue2NvdW50ZXJ9PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNwZWNpZmlj IHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlvbj4t LWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlzdGl0 ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsuZXh0ZW50c19y ZXRhaW5lZAotICAgICAgICA8L3Zhcm5hbWU+IG11dGV4IChhcmVuYSBzY29wZTsgcmV0YWluZWQg ZXh0ZW50cyByZWxhdGVkKS4KLSAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3RsPiBp cyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im11dGV4X2Nv dW50ZXJzIj5tdXRleCBwcm9maWxpbmcKLSAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFyYT48 L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50cnkg aWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMuZGVjYXlfZGlydHkiPgotICAgICAgICA8dGVybT4K LSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMuZGVjYXlf ZGlydHkue2NvdW50ZXJ9PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNwZWNp ZmljIHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9wdGlv bj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8bGlz dGl0ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsuZGVjYXlf ZGlydHkKLSAgICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGRlY2F5IGZvciBk aXJ0eSBwYWdlcyByZWxhdGVkKS4KLSAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxsY3Rs PiBpcyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im11dGV4 X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKLSAgICAgICAgY291bnRlcnM8L2xpbms+LjwvcGFy YT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMuZGVjYXlfbXV6enkiPgotICAgICAgICA8dGVy bT4KLSAgICAgICAgICA8bWFsbGN0bD5zdGF0cy5hcmVuYXMuJmx0O2kmZ3Q7Lm11dGV4ZXMuZGVj YXlfbXV6enkue2NvdW50ZXJ9PC9tYWxsY3RsPgotICAgICAgICAgICg8dHlwZT5jb3VudGVyIHNw ZWNpZmljIHR5cGU8L3R5cGU+KSA8bGl0ZXJhbD5yLTwvbGl0ZXJhbD4KLSAgICAgICAgICBbPG9w dGlvbj4tLWVuYWJsZS1zdGF0czwvb3B0aW9uPl0KLSAgICAgICAgPC90ZXJtPgotICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+U3RhdGlzdGljcyBvbiA8dmFybmFtZT5hcmVuYS4mbHQ7aSZndDsuZGVj YXlfbXV6enkKLSAgICAgICAgPC92YXJuYW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7IGRlY2F5IGZv ciBtdXp6eSBwYWdlcyByZWxhdGVkKS4KLSAgICAgICAgPG1hbGxjdGw+e2NvdW50ZXJ9PC9tYWxs Y3RsPiBpcyBvbmUgb2YgdGhlIGNvdW50ZXJzIGluIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9Im11 dGV4X2NvdW50ZXJzIj5tdXRleCBwcm9maWxpbmcKLSAgICAgICAgY291bnRlcnM8L2xpbms+Ljwv cGFyYT48L2xpc3RpdGVtPgotICAgICAgPC92YXJsaXN0ZW50cnk+Ci0KLSAgICAgIDx2YXJsaXN0 ZW50cnkgaWQ9InN0YXRzLmFyZW5hcy5pLm11dGV4ZXMuYmFzZSI+Ci0gICAgICAgIDx0ZXJtPgot ICAgICAgICAgIDxtYWxsY3RsPnN0YXRzLmFyZW5hcy4mbHQ7aSZndDsubXV0ZXhlcy5iYXNlLntj b3VudGVyfTwvbWFsbGN0bD4KLSAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBl PC90eXBlPikgPGxpdGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFi bGUtc3RhdHM8L29wdGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxw YXJhPlN0YXRpc3RpY3Mgb24gPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LmJhc2U8L3Zhcm5hbWU+ Ci0gICAgICAgIG11dGV4IChhcmVuYSBzY29wZTsgYmFzZSBhbGxvY2F0b3IgcmVsYXRlZCkuCi0g ICAgICAgIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lIG9mIHRoZSBjb3VudGVy cyBpbiA8bGluawotICAgICAgICBsaW5rZW5kPSJtdXRleF9jb3VudGVycyI+bXV0ZXggcHJvZmls aW5nCi0gICAgICAgIGNvdW50ZXJzPC9saW5rPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgIDwv dmFybGlzdGVudHJ5PgotCi0gICAgICA8dmFybGlzdGVudHJ5IGlkPSJzdGF0cy5hcmVuYXMuaS5t dXRleGVzLnRjYWNoZV9saXN0Ij4KLSAgICAgICAgPHRlcm0+Ci0gICAgICAgICAgPG1hbGxjdGw+ c3RhdHMuYXJlbmFzLiZsdDtpJmd0Oy5tdXRleGVzLnRjYWNoZV9saXN0Lntjb3VudGVyfTwvbWFs bGN0bD4KLSAgICAgICAgICAoPHR5cGU+Y291bnRlciBzcGVjaWZpYyB0eXBlPC90eXBlPikgPGxp dGVyYWw+ci08L2xpdGVyYWw+Ci0gICAgICAgICAgWzxvcHRpb24+LS1lbmFibGUtc3RhdHM8L29w dGlvbj5dCi0gICAgICAgIDwvdGVybT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0YXRpc3Rp Y3Mgb24KLSAgICAgICAgPHZhcm5hbWU+YXJlbmEuJmx0O2kmZ3Q7LnRjYWNoZV9saXN0PC92YXJu YW1lPiBtdXRleCAoYXJlbmEgc2NvcGU7Ci0gICAgICAgIHRjYWNoZSB0byBhcmVuYSBhc3NvY2lh dGlvbiByZWxhdGVkKS4gIFRoaXMgbXV0ZXggaXMgZXhwZWN0ZWQgdG8gYmUKLSAgICAgICAgYWNj ZXNzZWQgbGVzcyBvZnRlbi4gIDxtYWxsY3RsPntjb3VudGVyfTwvbWFsbGN0bD4gaXMgb25lIG9m IHRoZQotICAgICAgICBjb3VudGVycyBpbiA8bGluayBsaW5rZW5kPSJtdXRleF9jb3VudGVycyI+ bXV0ZXggcHJvZmlsaW5nCi0gICAgICAgIGNvdW50ZXJzPC9saW5rPi48L3BhcmE+PC9saXN0aXRl bT4KLSAgICAgIDwvdmFybGlzdGVudHJ5PgotCi0gICAgPC92YXJpYWJsZWxpc3Q+Ci0gIDwvcmVm c2VjdDE+Ci0gIDxyZWZzZWN0MSBpZD0iaGVhcF9wcm9maWxlX2Zvcm1hdCI+Ci0gICAgPHRpdGxl PkhFQVAgUFJPRklMRSBGT1JNQVQ8L3RpdGxlPgotICAgIDxwYXJhPkFsdGhvdWdoIHRoZSBoZWFw IHByb2ZpbGluZyBmdW5jdGlvbmFsaXR5IHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIHRvCi0gICAg YmUgY29tcGF0aWJsZSB3aXRoIHRoZQotICAgIDxjb21tYW5kPnBwcm9mPC9jb21tYW5kPiBjb21t YW5kIHRoYXQgaXMgZGV2ZWxvcGVkIGFzIHBhcnQgb2YgdGhlIDx1bGluawotICAgIHVybD0iaHR0 cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dwZXJmdG9vbHMvIj5ncGVyZnRvb2xzCi0gICAgcGFja2Fn ZTwvdWxpbms+LCB0aGUgYWRkaXRpb24gb2YgcGVyIHRocmVhZCBoZWFwIHByb2ZpbGluZyBmdW5j dGlvbmFsaXR5Ci0gICAgcmVxdWlyZWQgYSBkaWZmZXJlbnQgaGVhcCBwcm9maWxlIGZvcm1hdC4g IFRoZSA8Y29tbWFuZD5qZXByb2Y8L2NvbW1hbmQ+Ci0gICAgY29tbWFuZCBpcyBkZXJpdmVkIGZy b20gPGNvbW1hbmQ+cHByb2Y8L2NvbW1hbmQ+LCB3aXRoIGVuaGFuY2VtZW50cyB0bwotICAgIHN1 cHBvcnQgdGhlIGhlYXAgcHJvZmlsZSBmb3JtYXQgZGVzY3JpYmVkIGhlcmUuPC9wYXJhPgotCi0g ICAgPHBhcmE+SW4gdGhlIGZvbGxvd2luZyBoeXBvdGhldGljYWwgaGVhcCBwcm9maWxlLCA8Y29u c3RhbnQ+Wy4uLl08L2NvbnN0YW50PgotICAgIGluZGljYXRlcyBlbGlzaW9uIGZvciB0aGUgc2Fr ZSBvZiBjb21wYWN0bmVzcy4gIDxwcm9ncmFtbGlzdGluZz48IVtDREFUQVsKLWhlYXBfdjIvNTI0 Mjg4Ci0gIHQqOiAyODEwNjogNTY2Mzc1MTIgWzA6IDBdCi0gIFsuLi5dCi0gIHQzOiAzNTI6IDE2 Nzc3MzQ0IFswOiAwXQotICBbLi4uXQotICB0OTk6IDE3NzU0OiAyOTM0MTY0MCBbMDogMF0KLSAg Wy4uLl0KLUAgMHg1Zjg2ZGE4IDB4NWY1YTFkYyBbLi4uXSAweDI5ZTRkNGUgMHhhMjAwMzE2IDB4 YWJiMjk4OCBbLi4uXQotICB0KjogMTM6IDY2ODggWzA6IDBdCi0gIHQzOiAxMjogNjQ5NiBbMDog MF0KLSAgdDk5OiAxOiAxOTIgWzA6IDBdCi1bLi4uXQotCi1NQVBQRURfTElCUkFSSUVTOgotWy4u Ll1dXT48L3Byb2dyYW1saXN0aW5nPiBUaGUgZm9sbG93aW5nIG1hdGNoZXMgdGhlIGFib3ZlIGhl YXAgcHJvZmlsZSwgYnV0IG1vc3QKLXRva2VucyBhcmUgcmVwbGFjZWQgd2l0aCA8Y29uc3RhbnQ+ Jmx0O2Rlc2NyaXB0aW9uJmd0OzwvY29uc3RhbnQ+IHRvIGluZGljYXRlCi1kZXNjcmlwdGlvbnMg b2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzLiAgPHByb2dyYW1saXN0aW5nPjwhW0NEQVRBWwot PGhlYXBfcHJvZmlsZV9mb3JtYXRfdmVyc2lvbj4vPG1lYW5fc2FtcGxlX2ludGVydmFsPgotICA8 YWdncmVnYXRlPjogPGN1cm9ianM+OiA8Y3VyYnl0ZXM+IFs8Y3Vtb2Jqcz46IDxjdW1ieXRlcz5d Ci0gIFsuLi5dCi0gIDx0aHJlYWRfM19hZ2dyZWdhdGU+OiA8Y3Vyb2Jqcz46IDxjdXJieXRlcz4g WzxjdW1vYmpzPjogPGN1bWJ5dGVzPl0KLSAgWy4uLl0KLSAgPHRocmVhZF85OV9hZ2dyZWdhdGU+ OiA8Y3Vyb2Jqcz46IDxjdXJieXRlcz4gWzxjdW1vYmpzPjogPGN1bWJ5dGVzPl0KLSAgWy4uLl0K LUAgPHRvcF9mcmFtZT4gPGZyYW1lPiBbLi4uXSA8ZnJhbWU+IDxmcmFtZT4gPGZyYW1lPiBbLi4u XQotICA8YmFja3RyYWNlX2FnZ3JlZ2F0ZT46IDxjdXJvYmpzPjogPGN1cmJ5dGVzPiBbPGN1bW9i anM+OiA8Y3VtYnl0ZXM+XQotICA8YmFja3RyYWNlX3RocmVhZF8zPjogPGN1cm9ianM+OiA8Y3Vy Ynl0ZXM+IFs8Y3Vtb2Jqcz46IDxjdW1ieXRlcz5dCi0gIDxiYWNrdHJhY2VfdGhyZWFkXzk5Pjog PGN1cm9ianM+OiA8Y3VyYnl0ZXM+IFs8Y3Vtb2Jqcz46IDxjdW1ieXRlcz5dCi1bLi4uXQotCi1N QVBQRURfTElCUkFSSUVTOgotPC9wcm9jLzxwaWQ+L21hcHM+XV0+PC9wcm9ncmFtbGlzdGluZz48 L3BhcmE+Ci0gIDwvcmVmc2VjdDE+Ci0KLSAgPHJlZnNlY3QxIGlkPSJkZWJ1Z2dpbmdfbWFsbG9j X3Byb2JsZW1zIj4KLSAgICA8dGl0bGU+REVCVUdHSU5HIE1BTExPQyBQUk9CTEVNUzwvdGl0bGU+ Ci0gICAgPHBhcmE+V2hlbiBkZWJ1Z2dpbmcsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGNvbmZpZ3Vy ZS9idWlsZCBqZW1hbGxvYyB3aXRoCi0gICAgdGhlIDxvcHRpb24+LS1lbmFibGUtZGVidWc8L29w dGlvbj4gYW5kIDxvcHRpb24+LS1lbmFibGUtZmlsbDwvb3B0aW9uPgotICAgIG9wdGlvbnMsIGFu ZCByZWNvbXBpbGUgdGhlIHByb2dyYW0gd2l0aCBzdWl0YWJsZSBvcHRpb25zIGFuZCBzeW1ib2xz IGZvcgotICAgIGRlYnVnZ2VyIHN1cHBvcnQuICBXaGVuIHNvIGNvbmZpZ3VyZWQsIGplbWFsbG9j IGluY29ycG9yYXRlcyBhIHdpZGUgdmFyaWV0eQotICAgIG9mIHJ1bi10aW1lIGFzc2VydGlvbnMg dGhhdCBjYXRjaCBhcHBsaWNhdGlvbiBlcnJvcnMgc3VjaCBhcyBkb3VibGUtZnJlZSwKLSAgICB3 cml0ZS1hZnRlci1mcmVlLCBldGMuPC9wYXJhPgotCi0gICAgPHBhcmE+UHJvZ3JhbXMgb2Z0ZW4g YWNjaWRlbnRhbGx5IGRlcGVuZCBvbiA8cXVvdGU+dW5pbml0aWFsaXplZDwvcXVvdGU+Ci0gICAg bWVtb3J5IGFjdHVhbGx5IGJlaW5nIGZpbGxlZCB3aXRoIHplcm8gYnl0ZXMuICBKdW5rIGZpbGxp bmcKLSAgICAoc2VlIHRoZSA8bGluayBsaW5rZW5kPSJvcHQuanVuayI+PG1hbGxjdGw+b3B0Lmp1 bms8L21hbGxjdGw+PC9saW5rPgotICAgIG9wdGlvbikgdGVuZHMgdG8gZXhwb3NlIHN1Y2ggYnVn cyBpbiB0aGUgZm9ybSBvZiBvYnZpb3VzbHkgaW5jb3JyZWN0Ci0gICAgcmVzdWx0cyBhbmQvb3Ig Y29yZWR1bXBzLiAgQ29udmVyc2VseSwgemVybwotICAgIGZpbGxpbmcgKHNlZSB0aGUgPGxpbmsK LSAgICBsaW5rZW5kPSJvcHQuemVybyI+PG1hbGxjdGw+b3B0Lnplcm88L21hbGxjdGw+PC9saW5r PiBvcHRpb24pIGVsaW1pbmF0ZXMKLSAgICB0aGUgc3ltcHRvbXMgb2Ygc3VjaCBidWdzLiAgQmV0 d2VlbiB0aGVzZSB0d28gb3B0aW9ucywgaXQgaXMgdXN1YWxseQotICAgIHBvc3NpYmxlIHRvIHF1 aWNrbHkgZGV0ZWN0LCBkaWFnbm9zZSwgYW5kIGVsaW1pbmF0ZSBzdWNoIGJ1Z3MuPC9wYXJhPgot Ci0gICAgPHBhcmE+VGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIG11Y2ggZGV0 YWlsIGFib3V0IHRoZSBwcm9ibGVtcwotICAgIGl0IGRldGVjdHMsIGJlY2F1c2UgdGhlIHBlcmZv cm1hbmNlIGltcGFjdCBmb3Igc3RvcmluZyBzdWNoIGluZm9ybWF0aW9uCi0gICAgd291bGQgYmUg cHJvaGliaXRpdmUuPC9wYXJhPgotICA8L3JlZnNlY3QxPgotICA8cmVmc2VjdDEgaWQ9ImRpYWdu b3N0aWNfbWVzc2FnZXMiPgotICAgIDx0aXRsZT5ESUFHTk9TVElDIE1FU1NBR0VTPC90aXRsZT4K LSAgICA8cGFyYT5JZiBhbnkgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBm dW5jdGlvbnMgZGV0ZWN0IGFuCi0gICAgZXJyb3Igb3Igd2FybmluZyBjb25kaXRpb24sIGEgbWVz c2FnZSB3aWxsIGJlIHByaW50ZWQgdG8gZmlsZSBkZXNjcmlwdG9yCi0gICAgPGNvbnN0YW50PlNU REVSUl9GSUxFTk88L2NvbnN0YW50Pi4gIEVycm9ycyB3aWxsIHJlc3VsdCBpbiB0aGUgcHJvY2Vz cwotICAgIGR1bXBpbmcgY29yZS4gIElmIHRoZSA8bGluawotICAgIGxpbmtlbmQ9Im9wdC5hYm9y dCI+PG1hbGxjdGw+b3B0LmFib3J0PC9tYWxsY3RsPjwvbGluaz4gb3B0aW9uIGlzIHNldCwgbW9z dAotICAgIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycy48L3BhcmE+Ci0KLSAgICA8cGFy YT5UaGUgPHZhcm5hbWU+bWFsbG9jX21lc3NhZ2U8L3Zhcm5hbWU+IHZhcmlhYmxlIGFsbG93cyB0 aGUgcHJvZ3JhbW1lcgotICAgIHRvIG92ZXJyaWRlIHRoZSBmdW5jdGlvbiB3aGljaCBlbWl0cyB0 aGUgdGV4dCBzdHJpbmdzIGZvcm1pbmcgdGhlIGVycm9ycwotICAgIGFuZCB3YXJuaW5ncyBpZiBm b3Igc29tZSByZWFzb24gdGhlIDxjb25zdGFudD5TVERFUlJfRklMRU5PPC9jb25zdGFudD4gZmls ZQotICAgIGRlc2NyaXB0b3IgaXMgbm90IHN1aXRhYmxlIGZvciB0aGlzLgotICAgIDxmdW5jdGlv bj5tYWxsb2NfbWVzc2FnZSgpPC9mdW5jdGlvbj4gdGFrZXMgdGhlCi0gICAgPHBhcmFtZXRlcj5j Ym9wYXF1ZTwvcGFyYW1ldGVyPiBwb2ludGVyIGFyZ3VtZW50IHRoYXQgaXMKLSAgICA8Y29uc3Rh bnQ+TlVMTDwvY29uc3RhbnQ+IHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZSBhcmd1bWVudHMgaW4g YSBjYWxsIHRvCi0gICAgPGZ1bmN0aW9uPm1hbGxvY19zdGF0c19wcmludCgpPC9mdW5jdGlvbj4s IGZvbGxvd2VkIGJ5IGEgc3RyaW5nCi0gICAgcG9pbnRlci4gIFBsZWFzZSBub3RlIHRoYXQgZG9p bmcgYW55dGhpbmcgd2hpY2ggdHJpZXMgdG8gYWxsb2NhdGUgbWVtb3J5IGluCi0gICAgdGhpcyBm dW5jdGlvbiBpcyBsaWtlbHkgdG8gcmVzdWx0IGluIGEgY3Jhc2ggb3IgZGVhZGxvY2suPC9wYXJh PgotCi0gICAgPHBhcmE+QWxsIG1lc3NhZ2VzIGFyZSBwcmVmaXhlZCBieQotICAgIDxxdW90ZT48 Y29tcHV0ZXJvdXRwdXQ+Jmx0O2plbWFsbG9jJmd0OzogPC9jb21wdXRlcm91dHB1dD48L3F1b3Rl Pi48L3BhcmE+Ci0gIDwvcmVmc2VjdDE+Ci0gIDxyZWZzZWN0MSBpZD0icmV0dXJuX3ZhbHVlcyI+ Ci0gICAgPHRpdGxlPlJFVFVSTiBWQUxVRVM8L3RpdGxlPgotICAgIDxyZWZzZWN0Mj4KLSAgICAg IDx0aXRsZT5TdGFuZGFyZCBBUEk8L3RpdGxlPgotICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5t YWxsb2MoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgPGZ1bmN0aW9uPmNhbGxvYygpPC9mdW5jdGlv bj4gZnVuY3Rpb25zIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlCi0gICAgICBhbGxvY2F0ZWQgbWVt b3J5IGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4K LSAgICAgIHBvaW50ZXIgaXMgcmV0dXJuZWQgYW5kIDx2YXJuYW1lPmVycm5vPC92YXJuYW1lPiBp cyBzZXQgdG8KLSAgICAgIDxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5hbWU+LjwvcGFyYT4KLQot ICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5wb3NpeF9tZW1hbGlnbigpPC9mdW5jdGlvbj4gZnVu Y3Rpb24KLSAgICAgIHJldHVybnMgdGhlIHZhbHVlIDAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNl IGl0IHJldHVybnMgYW4gZXJyb3IgdmFsdWUuCi0gICAgICBUaGUgPGZ1bmN0aW9uPnBvc2l4X21l bWFsaWduKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiB3aWxsIGZhaWwKLSAgICAgIGlmOgotICAgICAg ICA8dmFyaWFibGVsaXN0PgotICAgICAgICAgIDx2YXJsaXN0ZW50cnk+Ci0gICAgICAgICAgICA8 dGVybT48ZXJyb3JuYW1lPkVJTlZBTDwvZXJyb3JuYW1lPjwvdGVybT4KLQotICAgICAgICAgICAg PGxpc3RpdGVtPjxwYXJhPlRoZSA8cGFyYW1ldGVyPmFsaWdubWVudDwvcGFyYW1ldGVyPiBwYXJh bWV0ZXIgaXMKLSAgICAgICAgICAgIG5vdCBhIHBvd2VyIG9mIDIgYXQgbGVhc3QgYXMgbGFyZ2Ug YXMKLSAgICAgICAgICAgIDxjb2RlIGxhbmd1YWdlPSJDIj5zaXplb2YoPHR5cGU+dm9pZCAqPC90 eXBlPik8L2NvZGU+LgotICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAg PC92YXJsaXN0ZW50cnk+Ci0gICAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgICAgIDx0 ZXJtPjxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5hbWU+PC90ZXJtPgotCi0gICAgICAgICAgICA8 bGlzdGl0ZW0+PHBhcmE+TWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuPC9wYXJhPjwvbGlzdGl0ZW0+ Ci0gICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgIDwvdmFyaWFibGVsaXN0PgotICAg ICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPmFsaWduZWRfYWxsb2MoKTwv ZnVuY3Rpb24+IGZ1bmN0aW9uIHJldHVybnMKLSAgICAgIGEgcG9pbnRlciB0byB0aGUgYWxsb2Nh dGVkIG1lbW9yeSBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYQotICAgICAgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PiBwb2ludGVyIGlzIHJldHVybmVkIGFuZAotICAgICAgPHZhcm5hbWU+ZXJy bm88L3Zhcm5hbWU+IGlzIHNldC4gIFRoZQotICAgICAgPGZ1bmN0aW9uPmFsaWduZWRfYWxsb2Mo KTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHdpbGwgZmFpbCBpZjoKLSAgICAgICAgPHZhcmlhYmxlbGlz dD4KLSAgICAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICAgICAgPHRlcm0+PGVycm9ybmFt ZT5FSU5WQUw8L2Vycm9ybmFtZT48L3Rlcm0+Ci0KLSAgICAgICAgICAgIDxsaXN0aXRlbT48cGFy YT5UaGUgPHBhcmFtZXRlcj5hbGlnbm1lbnQ8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIGlzCi0gICAg ICAgICAgICBub3QgYSBwb3dlciBvZiAyLgotICAgICAgICAgICAgPC9wYXJhPjwvbGlzdGl0ZW0+ Ci0gICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAg ICAgICAgICAgIDx0ZXJtPjxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5hbWU+PC90ZXJtPgotCi0g ICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+TWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuPC9wYXJh PjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgIDwvdmFyaWFi bGVsaXN0PgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPnJlYWxs b2MoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHJldHVybnMgYQotICAgICAgcG9pbnRlciwgcG9zc2li bHkgaWRlbnRpY2FsIHRvIDxwYXJhbWV0ZXI+cHRyPC9wYXJhbWV0ZXI+LCB0byB0aGUKLSAgICAg IGFsbG9jYXRlZCBtZW1vcnkgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIGEgPGNvbnN0YW50Pk5V TEw8L2NvbnN0YW50PgotICAgICAgcG9pbnRlciBpcyByZXR1cm5lZCwgYW5kIDx2YXJuYW1lPmVy cm5vPC92YXJuYW1lPiBpcyBzZXQgdG8KLSAgICAgIDxlcnJvcm5hbWU+RU5PTUVNPC9lcnJvcm5h bWU+IGlmIHRoZSBlcnJvciB3YXMgdGhlIHJlc3VsdCBvZiBhbgotICAgICAgYWxsb2NhdGlvbiBm YWlsdXJlLiAgVGhlIDxmdW5jdGlvbj5yZWFsbG9jKCk8L2Z1bmN0aW9uPgotICAgICAgZnVuY3Rp b24gYWx3YXlzIGxlYXZlcyB0aGUgb3JpZ2luYWwgYnVmZmVyIGludGFjdCB3aGVuIGFuIGVycm9y IG9jY3Vycy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+VGhlIDxmdW5jdGlvbj5mcmVl KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiByZXR1cm5zIG5vCi0gICAgICB2YWx1ZS48L3BhcmE+Ci0g ICAgPC9yZWZzZWN0Mj4KLSAgICA8cmVmc2VjdDI+Ci0gICAgICA8dGl0bGU+Tm9uLXN0YW5kYXJk IEFQSTwvdGl0bGU+Ci0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1hbGxvY3goKTwvZnVuY3Rp b24+IGFuZAotICAgICAgPGZ1bmN0aW9uPnJhbGxvY3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucyBy ZXR1cm4gYSBwb2ludGVyIHRvCi0gICAgICB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBzdWNjZXNz ZnVsOyBvdGhlcndpc2UgYSA8Y29uc3RhbnQ+TlVMTDwvY29uc3RhbnQ+Ci0gICAgICBwb2ludGVy IGlzIHJldHVybmVkIHRvIGluZGljYXRlIGluc3VmZmljaWVudCBjb250aWd1b3VzIG1lbW9yeSB3 YXMKLSAgICAgIGF2YWlsYWJsZSB0byBzZXJ2aWNlIHRoZSBhbGxvY2F0aW9uIHJlcXVlc3QuICA8 L3BhcmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+eGFsbG9jeCgpPC9mdW5jdGlvbj4g ZnVuY3Rpb24gcmV0dXJucyB0aGUKLSAgICAgIHJlYWwgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIHJl c2l6ZWQgYWxsb2NhdGlvbiBwb2ludGVkIHRvIGJ5Ci0gICAgICA8cGFyYW1ldGVyPnB0cjwvcGFy YW1ldGVyPiwgd2hpY2ggaXMgYSB2YWx1ZSBsZXNzIHRoYW4KLSAgICAgIDxwYXJhbWV0ZXI+c2l6 ZTwvcGFyYW1ldGVyPiBpZiB0aGUgYWxsb2NhdGlvbiBjb3VsZCBub3QgYmUgYWRlcXVhdGVseQot ICAgICAgZ3Jvd24gaW4gcGxhY2UuICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rp b24+c2FsbG9jeCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gcmV0dXJucyB0aGUKLSAgICAgIHJlYWwg c2l6ZSBvZiB0aGUgYWxsb2NhdGlvbiBwb2ludGVkIHRvIGJ5IDxwYXJhbWV0ZXI+cHRyPC9wYXJh bWV0ZXI+LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm5hbGxv Y3goKTwvZnVuY3Rpb24+IHJldHVybnMgdGhlIHJlYWwgc2l6ZQotICAgICAgdGhhdCB3b3VsZCBy ZXN1bHQgZnJvbSBhIHN1Y2Nlc3NmdWwgZXF1aXZhbGVudAotICAgICAgPGZ1bmN0aW9uPm1hbGxv Y3goKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNhbGwsIG9yIHplcm8gaWYKLSAgICAgIGluc3VmZmlj aWVudCBtZW1vcnkgaXMgYXZhaWxhYmxlIHRvIHBlcmZvcm0gdGhlIHNpemUgY29tcHV0YXRpb24u ICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bWFsbGN0bCgpPC9mdW5jdGlv bj4sCi0gICAgICA8ZnVuY3Rpb24+bWFsbGN0bG5hbWV0b21pYigpPC9mdW5jdGlvbj4sIGFuZAot ICAgICAgPGZ1bmN0aW9uPm1hbGxjdGxieW1pYigpPC9mdW5jdGlvbj4gZnVuY3Rpb25zIHJldHVy biAwIG9uCi0gICAgICBzdWNjZXNzOyBvdGhlcndpc2UgdGhleSByZXR1cm4gYW4gZXJyb3IgdmFs dWUuICBUaGUgZnVuY3Rpb25zIHdpbGwgZmFpbAotICAgICAgaWY6Ci0gICAgICAgIDx2YXJpYWJs ZWxpc3Q+Ci0gICAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAgICAgICAgIDx0ZXJtPjxlcnJv cm5hbWU+RUlOVkFMPC9lcnJvcm5hbWU+PC90ZXJtPgotCi0gICAgICAgICAgICA8bGlzdGl0ZW0+ PHBhcmE+PHBhcmFtZXRlcj5uZXdwPC9wYXJhbWV0ZXI+IGlzIG5vdAotICAgICAgICAgICAgPGNv bnN0YW50Pk5VTEw8L2NvbnN0YW50PiwgYW5kIDxwYXJhbWV0ZXI+bmV3bGVuPC9wYXJhbWV0ZXI+ IGlzIHRvbwotICAgICAgICAgICAgbGFyZ2Ugb3IgdG9vIHNtYWxsLiAgQWx0ZXJuYXRpdmVseSwg PHBhcmFtZXRlcj4qb2xkbGVucDwvcGFyYW1ldGVyPgotICAgICAgICAgICAgaXMgdG9vIGxhcmdl IG9yIHRvbyBzbWFsbDsgd2hlbiBpdCBoYXBwZW5zLCBleGNlcHQgZm9yIGEgdmVyeSBmZXcKLSAg ICAgICAgICAgIGNhc2VzIGV4cGxpY2l0bHkgZG9jdW1lbnRlZCBvdGhlcndpc2UsIGFzIG11Y2gg ZGF0YSBhcyBwb3NzaWJsZQotICAgICAgICAgICAgYXJlIHJlYWQgZGVzcGl0ZSB0aGUgZXJyb3Is IHdpdGggdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQgYmVpbmcKLSAgICAgICAgICAgIHJlY29yZGVk IGluIDxwYXJhbWV0ZXI+Km9sZGxlbnA8L3BhcmFtZXRlcj4uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0g ICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgICAgPHZhcmxpc3RlbnRyeT4KLSAgICAg ICAgICAgIDx0ZXJtPjxlcnJvcm5hbWU+RU5PRU5UPC9lcnJvcm5hbWU+PC90ZXJtPgotCi0gICAg ICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+PHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+IG9yCi0g ICAgICAgICAgICA8cGFyYW1ldGVyPm1pYjwvcGFyYW1ldGVyPiBzcGVjaWZpZXMgYW4gdW5rbm93 bi9pbnZhbGlkCi0gICAgICAgICAgICB2YWx1ZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KLSAgICAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICAgICAg PHRlcm0+PGVycm9ybmFtZT5FUEVSTTwvZXJyb3JuYW1lPjwvdGVybT4KLQotICAgICAgICAgICAg PGxpc3RpdGVtPjxwYXJhPkF0dGVtcHQgdG8gcmVhZCBvciB3cml0ZSB2b2lkIHZhbHVlLCBvciBh dHRlbXB0IHRvCi0gICAgICAgICAgICB3cml0ZSByZWFkLW9ubHkgdmFsdWUuPC9wYXJhPjwvbGlz dGl0ZW0+Ci0gICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgICAgPHZhcmxpc3RlbnRy eT4KLSAgICAgICAgICAgIDx0ZXJtPjxlcnJvcm5hbWU+RUFHQUlOPC9lcnJvcm5hbWU+PC90ZXJt PgotCi0gICAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QSBtZW1vcnkgYWxsb2NhdGlvbiBmYWls dXJlCi0gICAgICAgICAgICBvY2N1cnJlZC48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8 L3Zhcmxpc3RlbnRyeT4KLSAgICAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICAgICAgPHRl cm0+PGVycm9ybmFtZT5FRkFVTFQ8L2Vycm9ybmFtZT48L3Rlcm0+Ci0KLSAgICAgICAgICAgIDxs aXN0aXRlbT48cGFyYT5BbiBpbnRlcmZhY2Ugd2l0aCBzaWRlIGVmZmVjdHMgZmFpbGVkIGluIHNv bWUgd2F5Ci0gICAgICAgICAgICBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byA8ZnVuY3Rpb24+bWFs bGN0bCooKTwvZnVuY3Rpb24+Ci0gICAgICAgICAgICByZWFkL3dyaXRlIHByb2Nlc3NpbmcuPC9w YXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgICAgPC92YXJsaXN0ZW50cnk+Ci0gICAgICAgIDwvdmFy aWFibGVsaXN0PgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT5UaGUgPGZ1bmN0aW9uPm1h bGxvY191c2FibGVfc2l6ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24KLSAgICAgIHJldHVybnMgdGhl IHVzYWJsZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uIHBvaW50ZWQgdG8gYnkKLSAgICAgIDxwYXJh bWV0ZXI+cHRyPC9wYXJhbWV0ZXI+LiAgPC9wYXJhPgotICAgIDwvcmVmc2VjdDI+Ci0gIDwvcmVm c2VjdDE+Ci0gIDxyZWZzZWN0MSBpZD0iZW52aXJvbm1lbnQiPgotICAgIDx0aXRsZT5FTlZJUk9O TUVOVDwvdGl0bGU+Ci0gICAgPHBhcmE+VGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJs ZSBhZmZlY3RzIHRoZSBleGVjdXRpb24gb2YgdGhlCi0gICAgYWxsb2NhdGlvbiBmdW5jdGlvbnM6 Ci0gICAgICA8dmFyaWFibGVsaXN0PgotICAgICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgICAg IDx0ZXJtPjxlbnZhcj5NQUxMT0NfQ09ORjwvZW52YXI+PC90ZXJtPgotCi0gICAgICAgICAgPGxp c3RpdGVtPjxwYXJhPklmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotICAgICAgICAgIDxlbnZh cj5NQUxMT0NfQ09ORjwvZW52YXI+IGlzIHNldCwgdGhlIGNoYXJhY3RlcnMgaXQgY29udGFpbnMK LSAgICAgICAgICB3aWxsIGJlIGludGVycHJldGVkIGFzIG9wdGlvbnMuPC9wYXJhPjwvbGlzdGl0 ZW0+Ci0gICAgICAgIDwvdmFybGlzdGVudHJ5PgotICAgICAgPC92YXJpYWJsZWxpc3Q+Ci0gICAg PC9wYXJhPgotICA8L3JlZnNlY3QxPgotICA8cmVmc2VjdDEgaWQ9ImV4YW1wbGVzIj4KLSAgICA8 dGl0bGU+RVhBTVBMRVM8L3RpdGxlPgotICAgIDxwYXJhPlRvIGR1bXAgY29yZSB3aGVuZXZlciBh IHByb2JsZW0gb2NjdXJzOgotICAgICAgPHNjcmVlbj5sbiAtcyAnYWJvcnQ6dHJ1ZScgL2V0Yy9t YWxsb2MuY29uZjwvc2NyZWVuPgotICAgIDwvcGFyYT4KLSAgICA8cGFyYT5UbyBzcGVjaWZ5IGlu IHRoZSBzb3VyY2UgdGhhdCBvbmx5IG9uZSBhcmVuYSBzaG91bGQgYmUgYXV0b21hdGljYWxseQot ICAgIGNyZWF0ZWQ6Ci0gICAgICA8cHJvZ3JhbWxpc3RpbmcgbGFuZ3VhZ2U9IkMiPjwhW0NEQVRB WwotbWFsbG9jX2NvbmYgPSAibmFyZW5hczoxIjtdXT48L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4K LSAgPC9yZWZzZWN0MT4KLSAgPHJlZnNlY3QxIGlkPSJzZWVfYWxzbyI+Ci0gICAgPHRpdGxlPlNF RSBBTFNPPC90aXRsZT4KLSAgICA8cGFyYT48Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPm1h ZHZpc2U8L3JlZmVudHJ5dGl0bGU+Ci0gICAgPG1hbnZvbG51bT4yPC9tYW52b2xudW0+PC9jaXRl cmVmZW50cnk+LAotICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+bW1hcDwvcmVmZW50 cnl0aXRsZT4KLSAgICA8bWFudm9sbnVtPjI8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4sCi0g ICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5zYnJrPC9yZWZlbnRyeXRpdGxlPgotICAg IDxtYW52b2xudW0+MjwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiwKLSAgICA8Y2l0ZXJlZmVu dHJ5PjxyZWZlbnRyeXRpdGxlPnV0cmFjZTwvcmVmZW50cnl0aXRsZT4KLSAgICA8bWFudm9sbnVt PjI8L21hbnZvbG51bT48L2NpdGVyZWZlbnRyeT4sCi0gICAgPGNpdGVyZWZlbnRyeT48cmVmZW50 cnl0aXRsZT5hbGxvY2E8L3JlZmVudHJ5dGl0bGU+Ci0gICAgPG1hbnZvbG51bT4zPC9tYW52b2xu dW0+PC9jaXRlcmVmZW50cnk+LAotICAgIDxjaXRlcmVmZW50cnk+PHJlZmVudHJ5dGl0bGU+YXRl eGl0PC9yZWZlbnRyeXRpdGxlPgotICAgIDxtYW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJl ZmVudHJ5PiwKLSAgICA8Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPmdldHBhZ2VzaXplPC9y ZWZlbnRyeXRpdGxlPgotICAgIDxtYW52b2xudW0+MzwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5 PjwvcGFyYT4KLSAgPC9yZWZzZWN0MT4KLSAgPHJlZnNlY3QxIGlkPSJzdGFuZGFyZHMiPgotICAg IDx0aXRsZT5TVEFOREFSRFM8L3RpdGxlPgotICAgIDxwYXJhPlRoZSA8ZnVuY3Rpb24+bWFsbG9j KCk8L2Z1bmN0aW9uPiwKLSAgICA8ZnVuY3Rpb24+Y2FsbG9jKCk8L2Z1bmN0aW9uPiwKLSAgICA8 ZnVuY3Rpb24+cmVhbGxvYygpPC9mdW5jdGlvbj4sIGFuZAotICAgIDxmdW5jdGlvbj5mcmVlKCk8 L2Z1bmN0aW9uPiBmdW5jdGlvbnMgY29uZm9ybSB0byBJU08vSUVDCi0gICAgOTg5OToxOTkwICg8 cXVvdGU+SVNPIEM5MDwvcXVvdGU+KS48L3BhcmE+Ci0KLSAgICA8cGFyYT5UaGUgPGZ1bmN0aW9u PnBvc2l4X21lbWFsaWduKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjb25mb3JtcwotICAgIHRvIElF RUUgU3RkIDEwMDMuMS0yMDAxICg8cXVvdGU+UE9TSVguMTwvcXVvdGU+KS48L3BhcmE+Ci0gIDwv cmVmc2VjdDE+Ci08L3JlZmVudHJ5PgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2RvYy9tYW5wYWdlcy54c2wuaW4gYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2MvbWFucGFnZXMueHNsLmluCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA4OGIyNjI2Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvYy9tYW5wYWdlcy54c2wuaW4KKysrIC9kZXYvbnVsbApA QCAtMSw0ICswLDAgQEAKLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMu b3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVyc2lvbj0iMS4wIj4KLSAgPHhzbDppbXBvcnQgaHJl Zj0iQFhTTFJPT1RAL21hbnBhZ2VzL2RvY2Jvb2sueHNsIi8+Ci0gIDx4c2w6aW1wb3J0IGhyZWY9 IkBhYnNfc3Jjcm9vdEBkb2Mvc3R5bGVzaGVldC54c2wiLz4KLTwveHNsOnN0eWxlc2hlZXQ+Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvZG9jL3N0 eWxlc2hlZXQueHNsIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvZG9j L3N0eWxlc2hlZXQueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTkzNjVkLi4w MDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvYy9z dHlsZXNoZWV0LnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTx4c2w6c3R5bGVz aGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgdmVy c2lvbj0iMS4wIj4KLSAgPHhzbDpwYXJhbSBuYW1lPSJmdW5jc3lub3BzaXMuc3R5bGUiPmFuc2k8 L3hzbDpwYXJhbT4KLSAgPHhzbDpwYXJhbSBuYW1lPSJmdW5jdGlvbi5wYXJlbnMiIHNlbGVjdD0i MCIvPgotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJmdW5jdGlvbiI+Ci0gICAgPHhzbDpjYWxsLXRl bXBsYXRlIG5hbWU9ImlubGluZS5tb25vc2VxIi8+Ci0gIDwveHNsOnRlbXBsYXRlPgotICA8eHNs OnRlbXBsYXRlIG1hdGNoPSJtYWxsY3RsIj4KLSAgICA8cXVvdGU+PHhzbDpjYWxsLXRlbXBsYXRl IG5hbWU9ImlubGluZS5tb25vc2VxIi8+PC9xdW90ZT4KLSAgPC94c2w6dGVtcGxhdGU+Ci08L3hz bDpzdHlsZXNoZWV0PgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2RvY19pbnRlcm5hbC9QUk9GSUxJTkdfSU5URVJOQUxTLm1kIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvZG9jX2ludGVybmFsL1BST0ZJTElOR19JTlRF Uk5BTFMubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhOWYzMWMuLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvZG9jX2ludGVybmFs L1BST0ZJTElOR19JTlRFUk5BTFMubWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAot IyBqZW1hbGxvYyBwcm9maWxpbmcKLVRoaXMgZGVzY3JpYmVzIHRoZSBtYXRoZW1hdGljYWwgYmFz aXMgYmVoaW5kIGplbWFsbG9jJ3MgcHJvZmlsaW5nIGltcGxlbWVudGF0aW9uLCBhcyB3ZWxsIGFz IHRoZSBpbXBsZW1lbnRhdGlvbiB0cmlja3MgdGhhdCBtYWtlIGl0IGVmZmVjdGl2ZS4gSGlzdG9y aWNhbGx5LCB0aGUgamVtYWxsb2MgcHJvZmlsaW5nIGRlc2lnbiBzaW1wbHkgY29waWVkIHRjbWFs bG9jJ3MuIFRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgc2luY2UgZGl2ZXJnZWQsIGR1ZSB0byBib3Ro IHRoZSBkZXNpcmUgdG8gcmVjb3JkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGFuZCB0byBjb3Jy ZWN0IHNvbWUgYmlhc2luZyBidWdzLgotCi1Ob3RlOiB0aGlzIGRvY3VtZW50IGlzIG1hcmtkb3du IHdpdGggZW1iZWRkZWQgTGFUZVg7IGRpZmZlcmVudCBtYXJrZG93biByZW5kZXJlcnMgbWF5IG5v dCBwcm9kdWNlIHRoZSBleHBlY3RlZCBvdXRwdXQuICBWaWV3aW5nIHdpdGggYHBhbmRvYyAtcyBQ Uk9GSUxJTkdfSU5URVJOQUxTLm1kIC1vIFBST0ZJTElOR19JTlRFUk5BTFMucGRmYCBpcyByZWNv bW1lbmRlZC4KLQotIyMgU29tZSB0cmlja3MgaW4gb3VyIGltcGxlbWVudGF0aW9uIHRvb2xiYWcK LQotIyMjIFNhbXBsaW5nCi1SZWNvcmRpbmcgb3VyIG1ldGFkYXRhIGlzIHF1aXRlIGV4cGVuc2l2 ZTsgd2UgbmVlZCB0byB3YWxrIHVwIHRoZSBzdGFjayB0byBnZXQgYSBzdGFjayB0cmFjZS4gT24g dG9wIG9mIHRoYXQsIHdlIG5lZWQgdG8gYWxsb2NhdGUgc3RvcmFnZSB0byByZWNvcmQgdGhhdCBz dGFjayB0cmFjZSwgYW5kIHN0aWNrIGl0IHNvbWV3aGVyZSB3aGVyZSBhIHByb2ZpbGUtZHVtcGlu ZyBjYWxsIGNhbiBmaW5kIGl0LiBUaGF0IGNhbGwgbWlnaHQgaGFwcGVuIG9uIGFub3RoZXIgdGhy ZWFkLCBzbyB3ZSdsbCBwcm9iYWJseSBuZWVkIHRvIHRha2UgYSBsb2NrIHRvIGRvIHNvLiBUaGVz ZSBjb3N0cyBhcmUgcXVpdGUgbGFyZ2UgY29tcGFyZWQgdG8gdGhlIGF2ZXJhZ2UgY29zdCBvZiBh biBhbGxvY2F0aW9uLiBUbyBtYW5hZ2UgdGhpcywgd2UnbGwgb25seSBzYW1wbGUgc29tZSBmcmFj dGlvbiBvZiBhbGxvY2F0aW9ucy4gVGhpcyB3aWxsIG1pc3Mgc29tZSBvZiB0aGVtLCBzbyBvdXIg ZGF0YSB3aWxsIGJlIGluY29tcGxldGUsIGJ1dCB3ZSdsbCB0cnkgdG8gbWFrZSB1cCBmb3IgaXQu IFdlIGNhbiB0dW5lIG91ciBzYW1wbGluZyByYXRlIHRvIGJhbGFuY2UgYWNjdXJhY3kgYW5kIHBl cmZvcm1hbmNlLgotCi0jIyMgRmFzdCBCZXJub3VsbGkgc2FtcGxpbmcKLUNvbXBhcmVkIHRvIG91 ciBmYXN0IHBhdGhzLCBldmVuIGEgYGNvaW5mbGlwKHApYCBmdW5jdGlvbiBjYW4gYmUgcXVpdGUg ZXhwZW5zaXZlLiBIYXZpbmcgdG8gZG8gYSByYW5kb20tbnVtYmVyIGdlbmVyYXRpb24gYW5kIHNv bWUgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyB3b3VsZCBiZSBhIHNpemVhYmxlIHJlbGF0aXZl IGNvc3QuIEhvd2V2ZXIgKGFzIHBvaW50ZWQgb3V0IGluIFtbVml0dGVyLCAxOTg3XShodHRwczov L2RsLmFjbS5vcmcvZG9pLzEwLjExNDUvMjMwMDIuMjMwMDMpXSksIGlmIHdlIGNhbiBvcmNoZXN0 cmF0ZSBvdXIgYWxnb3JpdGhtIHNvIHRoYXQgbWFueSBvZiBvdXIgYGNvaW5mbGlwYCBjYWxscyBz aGFyZSB0aGVpciBwYXJhbWV0ZXIgdmFsdWUsIHdlIGNhbiBkbyBiZXR0ZXIuIFdlIGNhbiBzYW1w bGUgZnJvbSB0aGUgZ2VvbWV0cmljIGRpc3RyaWJ1dGlvbiwgYW5kIGluaXRpYWxpemUgYSBjb3Vu dGVyIHdpdGggdGhlIHJlc3VsdC4gV2hlbiB0aGUgY291bnRlciBoaXRzIDAsIHRoZSBgY29pbmZs aXBgIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSAoYW5kIHJlaW5pdGlhbGl6ZXMgaXRzIGludGVybmFs IGNvdW50ZXIpLgotVGhpcyBjYW4gbGV0IHVzIGRvIGEgcmFuZG9tLW51bWJlciBnZW5lcmF0aW9u IG9uY2UgcGVyIChsb2dpY2FsKSBjb2luZmxpcCB0aGF0IGNvbWVzIHVwIGhlYWRzLCByYXRoZXIg dGhhbiBvbmNlIHBlciAobG9naWNhbCkgY29pbmZsaXAuIFNpbmNlIHdlIGV4cGVjdCB0byBzYW1w bGUgcmVsYXRpdmVseSByYXJlbHksIHRoaXMgY2FuIGJlIGEgbGFyZ2Ugd2luLgotCi0jIyMgRmFz dC1wYXRoIC8gc2xvdy1wYXRoIHRoaW5raW5nCi1Nb3N0IHByb2dyYW1zIGhhdmUgYSBza2V3ZWQg ZGlzdHJpYnV0aW9uIG9mIGFsbG9jYXRpb25zLiBTbWFsbGVyIGFsbG9jYXRpb25zIGFyZSBtdWNo IG1vcmUgZnJlcXVlbnQgdGhhbiBsYXJnZSBvbmVzLCBidXQgc2hvcnRlciBsaXZlZCBhbmQgbGVz cyBjb21tb24gYXMgYSBmcmFjdGlvbiBvZiBwcm9ncmFtIG1lbW9yeS4gIlNtYWxsIiBhbmQgImxh cmdlIiBhcmUgbmVjZXNzYXJpbHkgc29ydCBvZiBmdXp6eSB0ZXJtcywgYnV0IGlmIHdlIGRlZmlu ZSAic21hbGwiIGFzICJhbGxvY2F0aW9ucyBqZW1hbGxvYyBwdXRzIGludG8gc2xhYnMiIGFuZCAi bGFyZ2UiIGFzIHRoZSBvdGhlcnMsIHRoZW4gaXQncyBub3QgdW5jb21tb24gZm9yIHNtYWxsIGFs bG9jYXRpb25zIHRvIGJlIGh1bmRyZWRzIG9mIHRpbWVzIG1vcmUgZnJlcXVlbnQgdGhhbiBsYXJn ZSBvbmVzLCBidXQgdGFrZSB1cCBhcm91bmQgaGFsZiB0aGUgYW1vdW50IG9mIGhlYXAgc3BhY2Ug YXMgbGFyZ2Ugb25lcy4gTW9yZW92ZXIsIHNtYWxsIGFsbG9jYXRpb25zIHRlbmQgdG8gYmUgbXVj aCBjaGVhcGVyIHRoYW4gbGFyZ2Ugb25lcyAob2Z0ZW4gYnkgYSBmYWN0b3Igb2YgMjAtMzApOiB0 aGV5J3JlIG1vcmUgbGlrZWx5IHRvIGhpdCBpbiB0aHJlYWQgY2FjaGVzLCBsZXNzIGxpa2VseSB0 byBoYXZlIHRvIGRvIGFuIG1tYXAsIGFuZCBjaGVhcGVyIHRvIGZpbGwgKGJ5IHRoZSB1c2VyKSBv bmNlIHRoZSBhbGxvY2F0aW9uIGhhcyBiZWVuIHJldHVybmVkLgotCi0jIyBBbiB1bmJpYXNlZCBl c3RpbWF0b3Igb2Ygc3BhY2UgY29uc3VtcHRpb24gZnJvbSAoYWxtb3N0KSBhcmJpdHJhcnkgc2Ft cGxpbmcgc3RyYXRlZ2llcwotU3VwcG9zZSB3ZSBoYXZlIGEgc2FtcGxpbmcgc3RyYXRlZ3kgdGhh dCBtZWV0cyB0aGUgZm9sbG93aW5nIGNyaXRlcmlhOgotCi0gIC0gT25lIGFsbG9jYXRpb24gYmVp bmcgc2FtcGxlZCBpcyBpbmRlcGVuZGVudCBvZiBvdGhlciBhbGxvY2F0aW9ucyBiZWluZyBzYW1w bGVkLgotICAtIEVhY2ggYWxsb2NhdGlvbiBoYXMgYSBub24temVybyBwcm9iYWJpbGl0eSBvZiBi ZWluZyBzYW1wbGVkLgotCi1XZSBjYW4gdGhlbiBlc3RpbWF0ZSB0aGUgYnl0ZXMgaW4gbGl2ZSBh bGxvY2F0aW9ucyB0aHJvdWdoIHNvbWUgcGFydGljdWxhciBzdGFjayB0cmFjZSBhczoKLQotJCQg XHN1bV9pIFNfaSBJX2kgXGZyYWN7MX17XG1hdGhybXtFfVtJX2ldfSAkJAotCi13aGVyZSB0aGUg c3VtIHJhbmdlcyBvdmVyIHNvbWUgaW5kZXggdmFyaWFibGUgb2YgbGl2ZSBhbGxvY2F0aW9ucyBm cm9tIHRoYXQgc3RhY2ssICRTX2kkIGlzIHRoZSBzaXplIG9mIHRoZSAkaSQndGggYWxsb2NhdGlv biwgYW5kICRJX2kkIGlzIGFuIGluZGljYXRvciByYW5kb20gdmFyaWFibGUgZm9yIHdoZXRoZXIg b3Igbm90IHRoZSAkaSd0aCQgYWxsb2NhdGlvbiBpcyBzYW1wbGVkLiAkU19pJCBhbmQgJFxtYXRo cm17RX1bSV9pXSQgYXJlIGNvbnN0YW50cyAodGhlIHByb2dyYW0gYWxsb2NhdGlvbnMgYXJlIGZp eGVkOyB0aGUgcmFuZG9tIHZhcmlhYmxlcyBhcmUgdGhlIHNhbXBsaW5nIGRlY2lzaW9ucyksIHNv IHRha2luZyB0aGUgZXhwZWN0YXRpb24gd2UgZ2V0Ci0KLSQkIFxzdW1faSBTX2kgXG1hdGhybXtF fVtJX2ldIFxmcmFjezF9e1xtYXRocm17RX1bSV9pXX0uJCQKLQotVGhpcyBpcyBvZiBjb3Vyc2Ug JFxzdW1faSBTX2kkLCBhcyB3ZSB3YW50IChhbmQsIGEgc2ltaWxhciBjYWxjdWxhdGlvbiBjb3Vs ZCBiZSBkb25lIGZvciBhbGxvY2F0aW9uIGNvdW50cyBhcyB3ZWxsKS4KLVRoaXMgaXMgYSBmYWly bHkgZ2VuZXJhbCBzdHJhdGVneTsgbm90ZSB0aGF0IHdoaWxlIHdlIHJlcXVpcmUgdGhhdCBzYW1w bGluZyBkZWNpc2lvbnMgYmUgaW5kZXBlbmRlbnQgb2Ygb25lIGFub3RoZXIncyBvdXRjb21lcywg dGhleSBkb24ndCBoYXZlIHRvIGJlIGluZGVwZW5kZW50IG9mIHByZXZpb3VzIGFsbG9jYXRpb25z LCB0b3RhbCBieXRlcyBhbGxvY2F0ZWQsIGV0Yy4gWW91IGNhbiBpbWFnaW5lIHN0cmF0ZWdpZXMg dGhhdDoKLQotICAtIFNhbXBsZSBhbGxvY2F0aW9ucyBhdCBwcm9ncmFtIHN0YXJ0dXAgYXQgYSBo aWdoZXIgcmF0ZSB0aGFuIHN1YnNlcXVlbnQgYWxsb2NhdGlvbnMKLSAgLSBTYW1wbGUgZXZlbi1p bmRleGVkIGFsbG9jYXRpb25zIG1vcmUgZnJlcXVlbnRseSB0aGFuIG9kZC1pbmRleGVkIG9uZXMg KHNvIGxvbmcgYXMgbm8gYWxsb2NhdGlvbiBoYXMgemVybyBzYW1wbGluZyBwcm9iYWJpbGl0eSkK LSAgLSBMZXQgdGhyZWFkcyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgaGlnaC1zYW1wbGluZy1wcmlv cml0eSwgYW5kIHNhbXBsZSB0aGVpciBhbGxvY2F0aW9ucyBhdCBhbiBpbmNyZWFzZWQgcmF0ZS4K LQotVGhlc2UgY2FuIGFsbCBiZSBmaXQgaW50byB0aGlzIGZyYW1ld29yayB0byBnaXZlIGFuIHVu Ymlhc2VkIGVzdGltYXRvci4KLQotIyMgRXZhbHVhdGluZyBzYW1wbGluZyBzdHJhdGVnaWVzCi1O b3QgYWxsIHN0cmF0ZWdpZXMgZm9yIHBpY2tpbmcgYWxsb2NhdGlvbnMgdG8gc2FtcGxlIGFyZSBl cXVhbGx5IGdvb2QsIG9mIGNvdXJzZS4gQW1vbmcgdW5iaWFzZWQgZXN0aW1hdG9ycywgdGhlIGxv d2VyIHRoZSB2YXJpYW5jZSwgdGhlIGxvd2VyIHRoZSBtZWFuIHNxdWFyZWQgZXJyb3IuIFVzaW5n IHRoZSBlc3RpbWF0b3IgYWJvdmUsIHRoZSB2YXJpYW5jZSBpczoKLQotJCQKLVxiZWdpbnthbGln bmVkfQotJiBcbWF0aHJte1Zhcn1bXHN1bV9pIFNfaSBJX2kgXGZyYWN7MX17XG1hdGhybXtFfVtJ X2ldfV0gIFxcCi09JiBcc3VtX2kgXG1hdGhybXtWYXJ9W1NfaSBJX2kgXGZyYWN7MX17XG1hdGhy bXtFfVtJX2ldfV0gXFwKLT0mIFxzdW1faSBcZnJhY3tTX2leMn17XG1hdGhybXtFfVtJX2ldXjJ9 IFxtYXRocm17VmFyfVtJX2ldIFxcCi09JiBcc3VtX2kgXGZyYWN7U19pXjJ9e1xtYXRocm17RX1b SV9pXV4yfSBcbWF0aHJte1Zhcn1bSV9pXSBcXAotPSYgXHN1bV9pIFxmcmFje1NfaV4yfXtcbWF0 aHJte0V9W0lfaV1eMn0gXG1hdGhybXtFfVtJX2ldKDEgLSBcbWF0aHJte0V9W0lfaV0pIFxcCi09 JiBcc3VtX2kgU19pXjIgXGZyYWN7MSAtIFxtYXRocm17RX1bSV9pXX17XG1hdGhybXtFfVtJX2ld fS4KLVxlbmR7YWxpZ25lZH0KLSQkCi0KLVdlIGNhbiB1c2UgdGhpcyBmb3JtdWxhIHRvIGNvbXBh cmUgdmFyaW91cyBzdHJhdGVneSBjaG9pY2VzLiBBbGwgZWxzZSBiZWluZyBlcXVhbCwgbG93ZXIt dmFyaWFuY2Ugc3RyYXRlZ2llcyBhcmUgYmV0dGVyLgotCi0jIyBQb3NzaWJsZSBzYW1wbGluZyBz dHJhdGVnaWVzCi1CZWNhdXNlIG9mIHRoZSBkZXNpcmUgdG8gYXZvaWQgdGhlIGZhc3QtcGF0aCBj b3N0cywgd2UnZCBsaWtlIHRvIHVzZSBvdXIgQmVybm91bGxpIHRyaWNrIGlmIHBvc3NpYmxlLiBU aGVyZSBhcmUgdHdvIG9idmlvdXMgY291bnRlcnMgdG8gdXNlOiBhIGNvaW5mbGlwIHBlciBhbGxv Y2F0aW9uLCBhbmQgYSBjb2luZmxpcCBwZXIgYnl0ZSBhbGxvY2F0ZWQuCi0KLSMjIyBCZXJub3Vs bGkgc2FtcGxpbmcgcGVyLWFsbG9jYXRpb24KLUFuIG9idmlvdXMgc3RyYXRlZ3kgaXMgdG8gcGlj ayBzb21lIGxhcmdlICROJCwgYW5kIGdpdmUgZWFjaCBhbGxvY2F0aW9uIGEgJDEvTiQgY2hhbmNl IG9mIGJlaW5nIHNhbXBsZWQuIFRoaXMgd291bGQgbGV0IHVzIHVzZSBvdXIgQmVybm91bGxpLXZp YS1HZW9tZXRyaWMgdHJpY2suIFVzaW5nIHRoZSBmb3JtdWxhIGZyb20gYWJvdmUsIHdlIGNhbiBj b21wdXRlIHRoZSB2YXJpYW5jZSBhczoKLQotJCQgXHN1bV9pIFNfaV4yIFxmcmFjezEgLSBcZnJh Y3sxfXtOfX17XGZyYWN7MX17Tn19ICA9IChOLTEpIFxzdW1faSBTX2leMi4kJAotCi1UaGF0IGlz LCBhbiBhbGxvY2F0aW9uIG9mIHNpemUgJFokIGNvbnRyaWJ1dGVzIGEgdGVybSBvZiAkKE4tMSla XjIkIHRvIHRoZSB2YXJpYW5jZS4KLQotIyMjIEJlcm5vdWxsaSBzYW1wbGluZyBwZXItYnl0ZQot QW5vdGhlciBvcHRpb24gd2UgaGF2ZSBpcyB0byBwaWNrIHNvbWUgcmF0ZSAkUiQsIGFuZCBnaXZl IGVhY2ggYnl0ZSBhICQxL1IkIGNoYW5jZSBvZiBiZWluZyBwaWNrZWQgZm9yIHNhbXBsaW5nIChh dCB3aGljaCBwb2ludCB3ZSB3b3VsZCBzYW1wbGUgaXRzIGNvbnRhaW5lZCBhbGxvY2F0aW9uKS4g VGhlIGNoYW5jZSBvZiBhbiBhbGxvY2F0aW9uIG9mIHNpemUgJFokIGJlaW5nIHNhbXBsZWQsIHRo ZW4sIGlzCi0KLSQkMS0oMS1cZnJhY3sxfXtSfSlee1p9JCQKLQotYW5kIGFuIGFsbG9jYXRpb24g b2Ygc2l6ZSAkWiQgY29udHJpYnV0ZXMgYSB0ZXJtIG9mCi0KLSQkWl4yIFxmcmFjeygxLVxmcmFj ezF9e1J9KV57Wn19ezEtKDEtXGZyYWN7MX17Un0pXntafX0uJCQKLQotSW4gcHJhY3RpY2FsIHNl dHRpbmdzLCAkUiQgaXMgbGFyZ2UsIGFuZCBzbyB0aGlzIGlzIHdlbGwtYXBwcm94aW1hdGVkIGJ5 Ci0KLSQkWl4yIFxmcmFje2Veey1aL1J9fXsxIC0gZV57LVovUn19IC4kJAotCi1KdXN0IHRvIGdl dCBhIHNlbnNlIG9mIHRoZSBkeW5hbWljcyBoZXJlLCBsZXQncyBsb29rIGF0IHRoZSBiZWhhdmlv ciBmb3IgdmFyaW91cyB2YWx1ZXMgb2YgJFokLiBXaGVuICRaJCBpcyBzbWFsbCByZWxhdGl2ZSB0 byAkUiQsIHdlIGNhbiB1c2UgJGVeeiBcYXBwcm94IDEgKyB4JCwgYW5kIGNvbmNsdWRlIHRoYXQg dGhlIHZhcmlhbmNlIGNvbnRyaWJ1dGVkIGJ5IGEgc21hbGwtJFokIGFsbG9jYXRpb24gaXMgYXJv dW5kCi0KLSQkWl4yIFxmcmFjezEtWi9SfXtaL1J9IFxhcHByb3ggUlouJCQKLQotV2hlbiAkWiQg aXMgY29tcGFyYWJsZSB0byAkUiQsIHRoZSB2YXJpYW5jZSB0ZXJtIGlzIG5lYXIgJFpeMiQgKHdl IGhhdmUgJFxmcmFje2Veey1aL1J9fXsxIC0gZV57LVovUn19ID0gMSQgd2hlbiAkWi9SID0gXGxu IDIgXGFwcHJveCAwLjY5MyQpLiBXaGVuICRaJCBpcyBsYXJnZSByZWxhdGl2ZSB0byAkUiQsIHRo ZSB2YXJpYW5jZSB0ZXJtIGdvZXMgdG8gemVyby4KLQotIyMgUGlja2luZyBhIHNhbXBsaW5nIHN0 cmF0ZWd5Ci1UaGUgZmFzdC1wYXRoL3Nsb3ctcGF0aCBkeW5hbWljcyBvZiBhbGxvY2F0aW9uIHBh dHRlcm5zIHBvaW50IHVzIHRvd2FyZHMgdGhlIHBlci1ieXRlIHNhbXBsaW5nIGFwcHJvYWNoOgot Ci0gIC0gVGhlIHF1YWRyYXRpYyBpbmNyZWFzZSBpbiB2YXJpYW5jZSBwZXIgYWxsb2NhdGlvbiBp biB0aGUgZmlyc3QgYXBwcm9hY2ggaXMgcXVpdGUgY29zdGx5IHdoZW4gaGVhcHMgaGF2ZSBhIG5v bi1uZWdsaWdpYmxlIHBvcnRpb24gb2YgdGhlaXIgYnl0ZXMgaW4gdGhvc2UgYWxsb2NhdGlvbnMs IHdoaWNoIGlzIHByYWN0aWNhbGx5IG9mdGVuIHRoZSBjYXNlLgotICAtIFRoZSBCZXJub3VsbGkt cGVyLWJ5dGUgYXBwcm9hY2ggc2hpZnRzIG1vcmUgb2YgaXRzIHNhbXBsZXMgdG93YXJkcyBsYXJn ZSBhbGxvY2F0aW9ucywgd2hpY2ggYXJlIGFscmVhZHkgYSBzbG93LXBhdGguCi0gIC0gV2UgZHJp dmUgc2V2ZXJhbCB0aWNrZXJzIChlLmcuIHRjYWNoZSBnYykgYnkgYnl0ZXMgYWxsb2NhdGVkLCBh bmQgcmVwb3J0IGJ5dGVzLWFsbG9jYXRlZCBhcyBhIHVzZXItdmlzaWJsZSBzdGF0aXN0aWMsIHNv IHdlIGhhdmUgdG8gZG8gYWxsIHRoZSBuZWNlc3NhcnkgYm9va2tlZXBpbmcgYW55d2F5cy4KLQot SW5kZWVkLCB0aGlzIGlzIHRoZSBhcHByb2FjaCB3ZSB1c2UgaW4gamVtYWxsb2MuIE91ciBoZWFw IGR1bXBzIHJlY29yZCB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGlvbiBhbmQgdGhlIHNhbXBsaW5n IHJhdGUgJFIkLCBhbmQgamVwcm9mIHVuYmlhc2VzIGJ5IGRpdmlkaW5nIGJ5ICQxIC0gZV57LVov Un0kLiAgVGhlIGZyYW1ld29yayBhYm92ZSB3b3VsZCBzdWdnZXN0IGRpdmlkaW5nIGJ5ICQxLSgx LTEvUileWiQ7IGluc3RlYWQsIHdlIHVzZSB0aGUgZmFjdCB0aGF0ICRSJCBpcyBsYXJnZSBpbiBw cmFjdGljYWwgc2l0dWF0aW9ucywgYW5kIHNvICRlXnstWi9SfSQgaXMgYSBnb29kIGFwcHJveGlt YXRpb24gKGFuZCBmYXN0ZXIgdG8gY29tcHV0ZSkuICAoRXF1aXZhbGVudGx5LCB3ZSBtYXkgYWxz byBzZWUgdGhpcyBhcyB0aGUgZmFjdG9yIHRoYXQgZmFsbHMgb3V0IGZyb20gdmlld2luZyBzYW1w bGluZyBhcyBhIFBvaXNzb24gcHJvY2VzcyBkaXJlY3RseSkuCi0KLSMjIENvbnNlcXVlbmNlcyBm b3IgaGVhcCBkdW1wIGNvbnN1bWVycwotVXNpbmcgdGhpcyBhcHByb2FjaCBtZWFucyB0aGF0IHRo ZXJlIGFyZSBhIGZldyB0aGluZ3MgdXNlcnMgbmVlZCB0byBiZSBhd2FyZSBvZi4KLQotIyMjIFN0 YWNrIGNvdW50cyBhcmUgbm90IHByb3BvcnRpb25hbCB0byBhbGxvY2F0aW9uIGZyZXF1ZW5jaWVz Ci1JZiBvbmUgc3RhY2sgYXBwZWFycyB0d2ljZSBhcyBvZnRlbiBhcyBhbm90aGVyLCB0aGlzIGJ5 IGl0c2VsZiBkb2VzIG5vdCBpbXBseSB0aGF0IGl0IGFsbG9jYXRlcyB0d2ljZSBhcyBvZnRlbi4g Q29uc2lkZXIgdGhlIGNhc2UgaW4gd2hpY2ggdGhlcmUgYXJlIG9ubHkgdHdvIHR5cGVzIG9mIGFs bG9jYXRpbmcgY2FsbCBzdGFja3MgaW4gYSBwcm9ncmFtLiBTdGFjayBBIGFsbG9jYXRlcyA4IGJ5 dGVzLCBhbmQgb2NjdXJzIGEgbWlsbGlvbiB0aW1lcyBpbiBhIHByb2dyYW0uIFN0YWNrIEIgYWxs b2NhdGVzIDggTUIsIGFuZCBvY2N1cnMganVzdCBvbmNlIGluIGEgcHJvZ3JhbS4gSWYgb3VyIHNh bXBsaW5nIHJhdGUgJFIkIGlzIGFib3V0IDFNQiwgd2UgZXhwZWN0IHN0YWNrIEEgdG8gc2hvdyB1 cCBhYm91dCA4IHRpbWVzLCBhbmQgc3RhY2sgQiB0byBzaG93IHVwIG9uY2UuIFN0YWNrIEEgaXNu J3QgOCB0aW1lcyBtb3JlIGZyZXF1ZW50IHRoYW4gc3RhY2sgQiwgdGhvdWdoOyBpdCdzIGEgbWls bGlvbiB0aW1lcyBtb3JlIGZyZXF1ZW50LgotCi0jIyMgQWdncmVnYXRpb24gbXVzdCBiZSBkb25l IGFmdGVyIHVuYmlhc2luZyBzYW1wbGVzCi1Tb21lIHRvb2xzIG1hbnVhbGx5IHBhcnNlIGhlYXAg ZHVtcCBvdXRwdXQsIGFuZCBhZ2dyZWdhdGUgYWNyb3NzIHN0YWNrcyAob3IgYWNyb3NzIHByb2dy YW0gcnVucykgdG8gcHJvdmlkZSB3aWRlci1zY2FsZSBkYXRhIGFuYWx5c2VzLiBXaGVuIGRvaW5n IHRoaXMgYWdncmVnYXRpb24sIHRob3VnaCwgaXQncyBpbXBvcnRhbnQgdG8gdW5iaWFzLWFuZC10 aGVuLXN1bSwgcmF0aGVyIHRoYW4gc3VtLWFuZC10aGVuLXVuYmlhcy4gUmV1c2luZyBvdXIgZXhh bXBsZSBmcm9tIHRoZSBwcmV2aW91cyBzZWN0aW9uOiBzdXBwb3NlIHdlIGNvbGxlY3QgaGVhcCBk dW1wcyBvZiB0aGUgcHJvZ3JhbSBmcm9tIGEgbWlsbGlvbiBtYWNoaW5lcy4gV2UgdGhlbiBoYXZl IDggbWlsbGlvbiBvY2N1cnMgb2Ygc3RhY2sgQSAoZWFjaCBvZiA4IGJ5dGVzKSwgYW5kIGEgbWls bGlvbiBvY2N1cnJlbmNlcyBvZiBzdGFjayBCIChlYWNoIG9mIDggTUIpLiBJZiB3ZSBzdW0gZmly c3QsIHdlJ2xsIGF0dHJpYnV0ZSA2NCBNQiB0byBzdGFjayBBLCBhbmQgOCBUQiB0byBzdGFjayBC LiBVbmJpYXNpbmcgY2hhbmdlcyB0aGVzZSBudW1iZXJzIGJ5IGFuIGluZmluaXRlc2ltYWwgYW1v dW50LCBzbyB0aGF0IHN1bS10aGVuLXVuYmlhcyBkcmFtYXRpY2FsbHkgdW5kZXJyZXBvcnRzIHRo ZSBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSBzdGFjayBBLgotCi0jIyBBbiBhdmVudWUg Zm9yIGZ1dHVyZSBleHBsb3JhdGlvbgotV2hpbGUgdGhlIGZyYW1ld29yayB3ZSBsYWlkIG91dCBh Ym92ZSBpcyBwcmV0dHkgZ2VuZXJhbCwgYXMgYW4gZW5naW5lZXJpbmcgZGVjaXNpb24gd2UncmUg b25seSBpbnRlcmVzdGVkIGluIGZhaXJseSBzaW1wbGUgYXBwcm9hY2hlcyAoaS5lLiBvbmVzIGZv ciB3aGljaCB0aGUgY2hhbmNlIG9mIGFuIGFsbG9jYXRpb24gYmVpbmcgc2FtcGxlZCBkZXBlbmRz IG9ubHkgb24gaXRzIHNpemUpLiBPdXIgam9iIGlzIHRoZW46IGZvciBlYWNoIHNpemUgY2xhc3Mg JFokLCBwaWNrIGEgcHJvYmFiaWxpdHkgJHBfWiQgdGhhdCBhbiBhbGxvY2F0aW9uIG9mIHRoYXQg c2l6ZSB3aWxsIGJlIHNhbXBsZWQuIFdlIG1hZGUgc29tZSBoYW5kd2F2ZS15IHJlZmVyZW5jZXMg dG8gc3RhdGlzdGljYWwgZGlzdHJpYnV0aW9ucyB0byBqdXN0aWZ5IG91ciBjaG9pY2VzLCBidXQg dGhlcmUncyBubyByZWFzb24gd2UgbmVlZCB0byBwaWNrIHRoZW0gdGhhdCB3YXkuIEFueSBzZXQg b2Ygbm9uLXplcm8gcHJvYmFiaWxpdGllcyBpcyBhIHZhbGlkIGNob2ljZS4KLVRoZSByZWFsIGxp bWl0aW5nIGZhY3RvciBpbiBvdXIgYWJpbGl0eSB0byByZWR1Y2UgZXN0aW1hdG9yIHZhcmlhbmNl IGlzIHRoYXQgZmFjdCB0aGF0IHNhbXBsaW5nIGlzIGV4cGVuc2l2ZTsgd2Ugd2FudCB0byBtYWtl IHN1cmUgd2Ugb25seSBkbyBpdCBvbiBhIHNtYWxsIGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zLiBP dXIgZ29hbCwgdGhlbiwgaXMgdG8gcGljayB0aGUgJHBfWiQgdG8gbWluaW1pemUgdmFyaWFuY2Ug Z2l2ZW4gc29tZSBtYXhpbXVtIHNhbXBsaW5nIHJhdGUgJFAkLiBJZiB3ZSBkZWZpbmUgJGFfWiQg dG8gYmUgdGhlIGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zIG9mIHNpemUgJFokLCBhbmQgJGxfWiQg dG8gYmUgdGhlIGZyYWN0aW9uIG9mIGFsbG9jYXRpb25zIG9mIHNpemUgJFokIHN0aWxsIGFsaXZl IGF0IHRoZSB0aW1lIG9mIGEgaGVhcCBkdW1wLCB0aGVuIHdlIGNhbiBwaHJhc2UgdGhpcyBhcyBh biBvcHRpbWl6YXRpb24gcHJvYmxlbSBvdmVyIHRoZSBjaG9pY2VzIG9mICRwX1okOgotCi1NaW5p bWl6ZQotCi0kJCBcc3VtX1ogWl4yIGxfWiBcZnJhY3sxLXBfWn17cF9afSAkJAotCi1zdWJqZWN0 IHRvCi0KLSQkIFxzdW1fWiBhX1ogcF9aIFxsZXEgUCAkJAotCi1JZ25vcmluZyBhIHRlcm0gdGhh dCBkb2Vzbid0IGRlcGVuZCBvbiAkcF9aJCwgdGhlIG9iamVjdGl2ZSBpcyBtaW5pbWl6ZWQgd2hl bmV2ZXIKLQotJCQgXHN1bV9aIFpeMiBsX1ogXGZyYWN7MX17cF9afSAkJAotCi1pcy4gRm9yIGEg cGFydGljdWxhciBwcm9ncmFtLCAkbF9aJCBhbmQgJGFfWiQgYXJlIGp1c3QgbnVtYmVycyB0aGF0 IGNhbiBiZSBvYnRhaW5lZCAoZXhhY3RseSkgZnJvbSBleGlzdGluZyBzdGF0cyBpbnRyb3NwZWN0 aW9uIGZhY2lsaXRpZXMsIGFuZCB3ZSBoYXZlIGEgZmFpcmx5IHRyYWN0YWJsZSBjb252ZXggb3B0 aW1pemF0aW9uIHByb2JsZW0gKGl0IGNhbiBiZSBmcmFtZWQgYXMgYSBzZWNvbmQtb3JkZXIgY29u ZSBwcm9ncmFtKS4gSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gZXZhbHVhdGUsIGZvciB2YXJp b3VzIGNvbW1vbiBhbGxvY2F0aW9uIHBhdHRlcm5zLCBob3cgd2VsbCBvdXIgY3VycmVudCBzdHJh dGVneSBhZGFwdHMuIERvIG91ciBhY3R1YWwgY2hvaWNlcyBmb3IgJHBfWiQgY2xvc2VseSBjb3Jy ZXNwb25kIHRvIHRoZSBvcHRpbWFsIG9uZXM/IEhvdyBjbG9zZSBpcyB0aGUgdmFyaWFuY2Ugb2Yg b3VyIGNob2ljZXMgdG8gdGhlIHZhcmlhbmNlIG9mIHRoZSBvcHRpbWFsIHN0cmF0ZWd5PwotWW91 IGNhbiBpbWFnaW5lIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgYWN0dWFsbHkgZ29lcyBhbGwgdGhl IHdheSwgYW5kIG1ha2VzICRwX1okIHNlbGVjdGlvbnMgYSB0dW5pbmcgcGFyYW1ldGVyLiBJIGRv bid0IHRoaW5rIHRoaXMgaXMgYSBnb29kIHVzZSBvZiBkZXZlbG9wbWVudCB0aW1lIGZvciB0aGUg Zm9yZXNlZWFibGUgZnV0dXJlOyBidXQgSSBkbyB3b25kZXIgYWJvdXQgdGhlIGFuc3dlcnMgdG8g c29tZSBvZiB0aGVzZSBxdWVzdGlvbnMuCi0KLSMjIEltcGxlbWVudGF0aW9uIHJlYWxpdGllcwot Ci1UaGUgbmljZSBzdG9yeSBhYm92ZSBpcyBhdCBsZWFzdCBwYXJ0aWFsbHkgYSBsaWUuIEluaXRp YWxseSwgamVwcm9mIChjb3B5aW5nIGl0cyBsb2dpYyBmcm9tIHBwcm9mKSAgaGFkIHRoZSBzdW0t dGhlbi11bmJpYXMgZXJyb3IgZGVzY3JpYmVkIGFib3ZlLiAgVGhlIGN1cnJlbnQgdmVyc2lvbiBv ZiBqZW1hbGxvYyBkb2VzIHRoZSB1bmJpYXNpbmcgc3RlcCBvbiBhIHBlci1hbGxvY2F0aW9uIGJh c2lzIGludGVybmFsbHksIHNvIHRoYXQgd2UncmUgYWx3YXlzIHRyYWNraW5nIHdoYXQgdGhlIHVu Ymlhc2VkIG51bWJlcnMgInNob3VsZCIgYmUuICBUaGUgcHJvYmxlbSBpcywgYWN0dWFsbHkgc3Vy ZmFjaW5nIHRob3NlIHVuYmlhc2VkIG51bWJlcnMgd291bGQgcmVxdWlyZSBhIGJyZWFraW5nIGNo YW5nZSB0byBqZXByb2YgKGFuZCB0aGUgdmFyaW91cyBhbHJlYWR5LWRlcGxveWVkIHRvb2xzIHRo YXQgaGF2ZSBjb3BpZWQgaXRzIGxvZ2ljKS4gSW5zdGVhZCwgd2UgdXNlIGEgbGl0dGxlIGJpdCBt b3JlIHRyaWNrZXJ5LiBTaW5jZSB3ZSBrbm93IGF0IGR1bXAgdGltZSB0aGUgbnVtYmVycyB3ZSB3 YW50IGplcHJvZiB0byByZXBvcnQsIHdlIHNpbXBseSBjaG9vc2UgdGhlIHZhbHVlcyB3ZSdsbCBv dXRwdXQgc28gdGhhdCB0aGUgamVwcm9mIG51bWJlcnMgd2lsbCBtYXRjaCB0aGUgdHJ1ZSBudW1i ZXJzLiAgVGhlIG1hdGggaXMgZGVzY3JpYmVkIGluIGBzcmMvcHJvZl9kYXRhLmNgICh3aGVyZSB0 aGUgb25seSBjbGV2ZXJuZXNzIGlzIGEgY2hhbmdlIG9mIHZhcmlhYmxlcyB0aGF0IGxldHMgdGhl IGV4cG9uZW50aWFscyBmYWxsIG91dCkuCi0KLVRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5n IHRoZSBvdXRwdXQgb2YgamVwcm9mIChhbmQgcmVsYXRlZCB0b29scykgY29ycmVjdCwgd2hpbGUg bWFraW5nIGl0cyBpbnB1dHMgaW5jb3JyZWN0LiAgVGhpcyBjYW4gYmUgYW5ub3lpbmcgdG8gaHVt YW4gcmVhZGVycyBvZiByYXcgcHJvZmlsaW5nIGR1bXAgb3V0cHV0LgoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvY19pbnRlcm5hbC9qZW1hbGxv Yy5zdmcgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9kb2NfaW50ZXJu YWwvamVtYWxsb2Muc3ZnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTc3MzI3Li4w MDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2RvY19p bnRlcm5hbC9qZW1hbGxvYy5zdmcKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08c3ZnIGlk PSJMYXllcl8zIiBkYXRhLW5hbWU9IkxheWVyIDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y MDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdC b3g9IjAgMCA0OTkgMTg0LjI3Ij48ZGVmcz48c3R5bGU+LmNscy0xLC5jbHMtM3tmaWxsOm5vbmU7 fS5jbHMtMntjbGlwLXBhdGg6dXJsKCNjbGlwLXBhdGgpO30uY2xzLTN7c3Ryb2tlOiMyNjIyNjI7 c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDo0 cHg7fTwvc3R5bGU+PGNsaXBQYXRoIGlkPSJjbGlwLXBhdGgiIHRyYW5zZm9ybT0idHJhbnNsYXRl KC0xMDAuNjYgLTI1OS44NykiPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE0NC41NywzOTZjMCwx OC4yLTkuMzcsMjcuODMtMzcuMzMsMjMuNTVWNDAwLjFjMTEuMTEsMi4xNCwxMi4xOC0uMjcsMTIu MTgtMTEuNVYzMjQuMTFoMjVabS0xMi43MS03OC42NmMtOSwwLTE1LjUyLTEuNDgtMTUuNTItMTIu NzFTMTIyLjksMjkyLDEzMS44NiwyOTJzMTUuNTIsMS4yLDE1LjUyLDEyLjU4QzE0Ny4zOCwzMTUu NTUsMTQxLDMxNy4yOSwxMzEuODYsMzE3LjI5Wm01MC41Nyw3Ni4zOWMtMzAuNjQsMC0zNS44NS0x OC44Ni0zNS44NS0zNS41OXM1LjYxLTM1LjMyLDM1LjcyLTM1LjMyYzM1LjMyLDAsMzMuNDQsMjgs MzMuNDQsNDAuNjdIMTcwLjEyYy41NCw5LjUsNCwxNC4wNSwxMS4zNywxNC4wNSw2LjgzLDAsOS42 NC0zLjM0LDEwLTcuODlsMjQuNzUuMTNDMjE1LjQ4LDM4My4zOCwyMDUuODQsMzkzLjY4LDE4Mi40 MywzOTMuNjhabS0xLjQ3LTU1Yy02LjY5LDAtMTAsMi44MS0xMC44NCwxMmgyMS40MUMxOTAuNzMs MzQxLjksMTg4LjE4LDMzOC42OSwxODEsMzM4LjY5Wm0xMTIuNzgsNTMuNjVWMzUxLjRjMC00LjE1 LTEuMzMtOC4xNi02LTguMTYtNSwwLTYsMy43NS02LDguMTZ2NDAuOTRIMjU2LjQyVjM1MS40YzAt NC4xNS0uODEtOC4xNi01Ljg5LTguMTZzLTYuMjksMy43NS02LjI5LDguMTZ2NDAuOTRIMjE5LjA5 VjMyNC4xMWgxNGw0LjE1LDhjMi42Ny00LjY5LDEwLjU2LTkuMzcsMTguODYtOS4zNyw3LjM2LDAs MTYuMTksMi4xNCwyMSw5LjEsMy40OC01LjIyLDExLjExLTkuMSwyMC4yMS05LjEsMTkuMTMsMCwy MS41NCwxMS4zNywyMS41NCwyNy4xNnY0Mi40MVptODMuMDksMEwzNzIuNDEsMzgzYy01LjQ4LDcu MjItMTMuMTEsMTAuNy0yNC4zNSwxMC43LTE0Ljg1LDAtMjYuNzUtNi0yNi43NS0xOS45MywwLTE1 LjI2LDEyLjQ0LTIwLjg4LDQ0LjI4LTIzLDAtOS41LTEuNjEtMTIuNTctOC44My0xMi41Ny02LjY5 LDAtOC41NiwzLjQ4LTguNTYsOS45SDMyMy40NWMwLTEyLjg1LDYuODItMjUuMjksMzIuNjQtMjUu MjksMzAsMCwzNC42NSwxNC40NSwzNC42NSwzMS4xN3YzOC40Wm0tMjEuNTQtMjguNjNjLTYuMjku OTQtOC4zLDQuMjgtOC4zLDcuMzYsMCw0LjI4LDIuNDEsNi42OSw4LjMsNi42OXMxMC4xNy00Ljgy LDEwLjE3LTE1LjEyWk0zOTYsMzkyLjM0VjI5Ny43NWgyNC43NXY5NC41OVptMzAuNzcsMFYyOTcu NzVoMjQuNzV2OTQuNTlabTYyLjIxLDEuMzRjLTI4LjA5LDAtMzQuMTEtMTguNi0zNC4xMS0zNS4z MnM2LjI5LTM1LjU5LDM0LjM4LTM1LjU5YzI3LjcsMCwzNC4xMiwxOSwzNC4xMiwzNS41OUM1MjMu MzMsMzc1LjIyLDUxNi45MSwzOTMuNjgsNDg4Ljk0LDM5My42OFptLjI3LTUwLjg0Yy03Ljg5LDAt MTEuMzcsNC44Mi0xMS4zNywxNS41MnMzLjYxLDE1LjM5LDExLjEsMTUuMzljNy45LDAsMTEuMzgt NC40MiwxMS4zOC0xNS4zOUM1MDAuMzIsMzQ3Ljc5LDQ5Ny4yNCwzNDIuODQsNDg5LjIxLDM0Mi44 NFptNjkuMTcsNTAuODRjLTI4LjksMC0zNC41Mi0xOC42LTM0LjUyLTM1LjMyczUuNzYtMzUuNTks MzQuMTItMzUuNTljMjEuMTQsMCwzNC41MiwxMC44NCwzNC41MiwzMS4xN0g1NjguNDJjMC05LjIz LTUuNDktMTEuMjMtMTAuMTctMTEuMjMtNywwLTExLjExLDQuNTQtMTEuMTEsMTUuMzhzNCwxNS41 MiwxMS4xMSwxNS41MmM0LjgxLDAsMTAtMi40MSwxMC0xMC41N0g1OTIuNUM1OTIuNSwzODMuMzgs NTc5LDM5My42OCw1NTguMzgsMzkzLjY4WiIvPjwvY2xpcFBhdGg+PC9kZWZzPjx0aXRsZT5qZW1h bGxvYyBGaW5hbCBMb2dvPC90aXRsZT48ZyBjbGFzcz0iY2xzLTIiPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjM0NSIgeTE9IjE4Mi4yNyIgeDI9IjM0NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSIyMjUiIHkxPSIxODIuMjciIHgyPSIyMjUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iMTA1IiB5MT0iMTgyLjI3IiB4Mj0iMTA1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjQzIiB5MT0iMTgyLjI3IiB4Mj0iNDMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iNDc1IiB5MT0iMTgyLjI3IiB4Mj0iNDc1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjE5NSIgeTE9IjE4Mi4yNyIgeDI9IjE5NSIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSI3NSIgeTE9IjE4Mi4yNyIgeDI9Ijc1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjMzNyIgeTE9IjE4Mi4yNyIgeDI9IjMzNyIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIyMTUiIHkxPSIxODIuMjciIHgyPSIyMTUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iOTUiIHkxPSIxODIuMjciIHgyPSI5NSIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSI0MTUiIHkxPSIxODIuMjciIHgyPSI0MTUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iMzg1IiB5MT0iMTgyLjI3IiB4Mj0iMzg1IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjE4MyIgeTE9IjE4Mi4yNyIgeDI9IjE4MyIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSI2NSIgeTE9IjE4Mi4yNyIgeDI9IjY1IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjE3MyIgeTE9IjE4Mi4yNyIgeDI9IjE3MyIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSIxNDUiIHkxPSIxODIuMjciIHgyPSIxNDUiIHkyPSIyIi8+PGxpbmUgY2xh c3M9ImNscy0zIiB4MT0iMTYzIiB5MT0iMTgyLjI3IiB4Mj0iMTYzIiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjQ2MCIgeTE9IjE4Mi4yNyIgeDI9IjQ2MCIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSIyODEiIHkxPSIxODIuMjciIHgyPSIyODEiIHkyPSIyIi8+PGxpbmUg Y2xhc3M9ImNscy0zIiB4MT0iMzEzIiB5MT0iMTgyLjI3IiB4Mj0iMzEzIiB5Mj0iMiIvPjxsaW5l IGNsYXNzPSJjbHMtMyIgeDE9IjI1MiIgeTE9IjE4Mi4yNyIgeDI9IjI1MiIgeTI9IjIiLz48bGlu ZSBjbGFzcz0iY2xzLTMiIHgxPSI0NTAiIHkxPSIxODIuMjciIHgyPSI0NTAiIHkyPSIyIi8+PGxp bmUgY2xhc3M9ImNscy0zIiB4MT0iMjcxIiB5MT0iMTgyLjI3IiB4Mj0iMjcxIiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMzMiIgeTE9IjE4Mi4yNyIgeDI9IjMzMiIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMDMiIHkxPSIxODIuMjciIHgyPSIyMDMiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTMiIHkxPSIxODIuMjciIHgyPSIxMyIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzNzMiIHkxPSIxODIuMjciIHgyPSIzNzMiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzU0IiB5MT0iMTgyLjI3IiB4Mj0iMzU0IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIzNSIgeTE9IjE4Mi4yNyIgeDI9IjIzNSIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMTUiIHkxPSIxODIuMjciIHgyPSIxMTUiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNTMiIHkxPSIxODIuMjciIHgyPSI1MyIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0ODQiIHkxPSIxODIuMjciIHgyPSI0ODQiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDA1IiB5MT0iMTgyLjI3IiB4Mj0iNDA1IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9Ijg1IiB5MT0iMTgyLjI3IiB4Mj0iODUiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjI1IiB5MT0iMTgyLjI3IiB4Mj0iMjI1IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjEwNSIgeTE9IjE4Mi4yNyIgeDI9IjEwNSIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MyIgeTE9IjE4Mi4yNyIgeDI9IjQzIiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQzNSIgeTE9IjE4Mi4yNyIgeDI9IjQzNSIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMjMiIHkxPSIxODIuMjciIHgyPSIxMjMiIHky PSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNzUiIHkxPSIxODIuMjciIHgyPSI3NSIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxODMiIHkxPSIxODIuMjciIHgyPSIxODMiIHky PSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTU1IiB5MT0iMTgyLjI3IiB4Mj0iMTU1IiB5 Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE3MyIgeTE9IjE4Mi4yNyIgeDI9IjE3MyIg eTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxNDUiIHkxPSIxODIuMjciIHgyPSIxNDUi IHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDcwIiB5MT0iMTgyLjI3IiB4Mj0iNDcw IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI5MiIgeTE9IjE4Mi4yNyIgeDI9IjI5 MiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyNjIiIHkxPSIxODIuMjciIHgyPSIy NjIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDYwIiB5MT0iMTgyLjI3IiB4Mj0i NDYwIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI4MSIgeTE9IjE4Mi4yNyIgeDI9 IjI4MSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzMTMiIHkxPSIxODIuMjciIHgy PSIzMTMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjQzIiB5MT0iMTgyLjI3IiB4 Mj0iMjQzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIyIiB5MT0iMTgyLjI3IiB4 Mj0iMjIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzgzIiB5MT0iMTgyLjI3IiB4 Mj0iMzgzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjUiIHkxPSIxODIuMjciIHgy PSI1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjEzMyIgeTE9IjE4Mi4yNyIgeDI9 IjEzMyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzNjIiIHkxPSIxODIuMjciIHgy PSIzNjIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjg4IiB5MT0iMTgyLjI3IiB4 Mj0iMjg4IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI5OCIgeTE9IjE4Mi4yNyIg eDI9IjI5OCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MjMiIHkxPSIxODIuMjci IHgyPSI0MjMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzY5IiB5MT0iMTgyLjI3 IiB4Mj0iMzY5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ5MCIgeTE9IjE4Mi4y NyIgeDI9IjQ5MCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyIiB5MT0iMTgyLjI3 IiB4Mj0iMiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0OTMiIHkxPSIxODIuMjci IHgyPSI0OTMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjI1IiB5MT0iMTgyLjI3 IiB4Mj0iMjI1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjEwNSIgeTE9IjE4Mi4y NyIgeDI9IjEwNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MyIgeTE9IjE4Mi4y NyIgeDI9IjQzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ3NSIgeTE9IjE4Mi4y NyIgeDI9IjQ3NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxOTUiIHkxPSIxODIu MjciIHgyPSIxOTUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNzUiIHkxPSIxODIu MjciIHgyPSI3NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzMzciIHkxPSIxODIu MjciIHgyPSIzMzciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjE1IiB5MT0iMTgy LjI3IiB4Mj0iMjE1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9Ijk1IiB5MT0iMTgy LjI3IiB4Mj0iOTUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDE1IiB5MT0iMTgy LjI3IiB4Mj0iNDE1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM4NSIgeTE9IjE4 Mi4yNyIgeDI9IjM4NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxODMiIHkxPSIx ODIuMjciIHgyPSIxODMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNjUiIHkxPSIx ODIuMjciIHgyPSI2NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxNzMiIHkxPSIx ODIuMjciIHgyPSIxNzMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTQ1IiB5MT0i MTgyLjI3IiB4Mj0iMTQ1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE2MyIgeTE9 IjE4Mi4yNyIgeDI9IjE2MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NjAiIHkx PSIxODIuMjciIHgyPSI0NjAiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjgxIiB5 MT0iMTgyLjI3IiB4Mj0iMjgxIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMxMyIg eTE9IjE4Mi4yNyIgeDI9IjMxMyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyNTIi IHkxPSIxODIuMjciIHgyPSIyNTIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDUw IiB5MT0iMTgyLjI3IiB4Mj0iNDUwIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI3 MSIgeTE9IjE4Mi4yNyIgeDI9IjI3MSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIz MDYiIHkxPSIxODIuMjciIHgyPSIzMDYiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i MjAzIiB5MT0iMTgyLjI3IiB4Mj0iMjAzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjEzIiB5MT0iMTgyLjI3IiB4Mj0iMTMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i MzczIiB5MT0iMTgyLjI3IiB4Mj0iMzczIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjM1NCIgeTE9IjE4Mi4yNyIgeDI9IjM1NCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSIyMzUiIHkxPSIxODIuMjciIHgyPSIyMzUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4 MT0iMTE1IiB5MT0iMTgyLjI3IiB4Mj0iMTE1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjUzIiB5MT0iMTgyLjI3IiB4Mj0iNTMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4 MT0iNDg0IiB5MT0iMTgyLjI3IiB4Mj0iNDg0IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjQwNSIgeTE9IjE4Mi4yNyIgeDI9IjQwNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSI4NSIgeTE9IjE4Mi4yNyIgeDI9Ijg1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjIyNSIgeTE9IjE4Mi4yNyIgeDI9IjIyNSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSIxMDUiIHkxPSIxODIuMjciIHgyPSIxMDUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iNDMiIHkxPSIxODIuMjciIHgyPSI0MyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSI0MzUiIHkxPSIxODIuMjciIHgyPSI0MzUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iMTIzIiB5MT0iMTgyLjI3IiB4Mj0iMTIzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9Ijc1IiB5MT0iMTgyLjI3IiB4Mj0iNzUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iMTgzIiB5MT0iMTgyLjI3IiB4Mj0iMTgzIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjE1NSIgeTE9IjE4Mi4yNyIgeDI9IjE1NSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSIxNzMiIHkxPSIxODIuMjciIHgyPSIxNzMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iMTQ1IiB5MT0iMTgyLjI3IiB4Mj0iMTQ1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjQ3MCIgeTE9IjE4Mi4yNyIgeDI9IjQ3MCIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIyOTIiIHkxPSIxODIuMjciIHgyPSIyOTIiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iMjYyIiB5MT0iMTgyLjI3IiB4Mj0iMjYyIiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjQ2MCIgeTE9IjE4Mi4yNyIgeDI9IjQ2MCIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSIyODEiIHkxPSIxODIuMjciIHgyPSIyODEiIHkyPSIyIi8+PGxpbmUgY2xh c3M9ImNscy0zIiB4MT0iMzI4IiB5MT0iMTgyLjI3IiB4Mj0iMzI4IiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjI0MyIgeTE9IjE4Mi4yNyIgeDI9IjI0MyIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSIyMiIgeTE9IjE4Mi4yNyIgeDI9IjIyIiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjM4MyIgeTE9IjE4Mi4yNyIgeDI9IjM4MyIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSI1IiB5MT0iMTgyLjI3IiB4Mj0iNSIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSIzMiIgeTE9IjE4Mi4yNyIgeDI9IjMyIiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjEzMyIgeTE9IjE4Mi4yNyIgeDI9IjEzMyIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSIzNjIiIHkxPSIxODIuMjciIHgyPSIzNjIiIHkyPSIyIi8+PGxpbmUgY2xh c3M9ImNscy0zIiB4MT0iMjg4IiB5MT0iMTgyLjI3IiB4Mj0iMjg4IiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjI5OCIgeTE9IjE4Mi4yNyIgeDI9IjI5OCIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSI0MjMiIHkxPSIxODIuMjciIHgyPSI0MjMiIHkyPSIyIi8+PGxpbmUg Y2xhc3M9ImNscy0zIiB4MT0iMzY5IiB5MT0iMTgyLjI3IiB4Mj0iMzY5IiB5Mj0iMiIvPjxsaW5l IGNsYXNzPSJjbHMtMyIgeDE9IjQ5MCIgeTE9IjE4Mi4yNyIgeDI9IjQ5MCIgeTI9IjIiLz48bGlu ZSBjbGFzcz0iY2xzLTMiIHgxPSIyIiB5MT0iMTgyLjI3IiB4Mj0iMiIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSI0OTMiIHkxPSIxODIuMjciIHgyPSI0OTMiIHkyPSIyIi8+PGxpbmUg Y2xhc3M9ImNscy0zIiB4MT0iMzQ5IiB5MT0iMTgyLjI3IiB4Mj0iMzQ5IiB5Mj0iMiIvPjxsaW5l IGNsYXNzPSJjbHMtMyIgeDE9IjIyOSIgeTE9IjE4Mi4yNyIgeDI9IjIyOSIgeTI9IjIiLz48bGlu ZSBjbGFzcz0iY2xzLTMiIHgxPSIxMDkiIHkxPSIxODIuMjciIHgyPSIxMDkiIHkyPSIyIi8+PGxp bmUgY2xhc3M9ImNscy0zIiB4MT0iNDciIHkxPSIxODIuMjciIHgyPSI0NyIgeTI9IjIiLz48bGlu ZSBjbGFzcz0iY2xzLTMiIHgxPSI0NzkiIHkxPSIxODIuMjciIHgyPSI0NzkiIHkyPSIyIi8+PGxp bmUgY2xhc3M9ImNscy0zIiB4MT0iMzk5IiB5MT0iMTgyLjI3IiB4Mj0iMzk5IiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE5OSIgeTE9IjE4Mi4yNyIgeDI9IjE5OSIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI3OSIgeTE9IjE4Mi4yNyIgeDI9Ijc5IiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM0MSIgeTE9IjE4Mi4yNyIgeDI9IjM0MSIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMTkiIHkxPSIxODIuMjciIHgyPSIyMTkiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iOTkiIHkxPSIxODIuMjciIHgyPSI5OSIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0MSIgeTE9IjE4Mi4yNyIgeDI9IjQxIiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQxOSIgeTE9IjE4Mi4yNyIgeDI9IjQxOSIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzODkiIHkxPSIxODIuMjciIHgyPSIzODkiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTg3IiB5MT0iMTgyLjI3IiB4Mj0iMTg3IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjY5IiB5MT0iMTgyLjI3IiB4Mj0iNjkiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTc3IiB5MT0iMTgyLjI3IiB4Mj0iMTc3IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE0OSIgeTE9IjE4Mi4yNyIgeDI9IjE0OSIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NjQiIHkxPSIxODIuMjciIHgyPSI0NjQiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjg1IiB5MT0iMTgyLjI3IiB4Mj0iMjg1IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMxNyIgeTE9IjE4Mi4yNyIgeDI9IjMxNyIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NTQiIHkxPSIxODIuMjciIHgyPSI0NTQiIHky PSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjc1IiB5MT0iMTgyLjI3IiB4Mj0iMjc1IiB5 Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMwOCIgeTE9IjE4Mi4yNyIgeDI9IjMwOCIg eTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMDciIHkxPSIxODIuMjciIHgyPSIyMDci IHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTciIHkxPSIxODIuMjciIHgyPSIxNyIg eTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzNzciIHkxPSIxODIuMjciIHgyPSIzNzci IHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzU4IiB5MT0iMTgyLjI3IiB4Mj0iMzU4 IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjIzOCIgeTE9IjE4Mi4yNyIgeDI9IjIz OCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMTkiIHkxPSIxODIuMjciIHgyPSIx MTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDg4IiB5MT0iMTgyLjI3IiB4Mj0i NDg4IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQwOSIgeTE9IjE4Mi4yNyIgeDI9 IjQwOSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMjkiIHkxPSIxODIuMjciIHgy PSIyMjkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTA5IiB5MT0iMTgyLjI3IiB4 Mj0iMTA5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ3IiB5MT0iMTgyLjI3IiB4 Mj0iNDciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDM5IiB5MT0iMTgyLjI3IiB4 Mj0iNDM5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM5OSIgeTE9IjE4Mi4yNyIg eDI9IjM5OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxMjciIHkxPSIxODIuMjci IHgyPSIxMjciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNzkiIHkxPSIxODIuMjci IHgyPSI3OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxODciIHkxPSIxODIuMjci IHgyPSIxODciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTU5IiB5MT0iMTgyLjI3 IiB4Mj0iMTU5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjE3NyIgeTE9IjE4Mi4y NyIgeDI9IjE3NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIxNDkiIHkxPSIxODIu MjciIHgyPSIxNDkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDc0IiB5MT0iMTgy LjI3IiB4Mj0iNDc0IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI2NiIgeTE9IjE4 Mi4yNyIgeDI9IjI2NiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0NjQiIHkxPSIx ODIuMjciIHgyPSI0NjQiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjg1IiB5MT0i MTgyLjI3IiB4Mj0iMjg1IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjMxNyIgeTE9 IjE4Mi4yNyIgeDI9IjMxNyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyNDciIHkx PSIxODIuMjciIHgyPSIyNDciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjYiIHkx PSIxODIuMjciIHgyPSIyNiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzODciIHkx PSIxODIuMjciIHgyPSIzODciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iOSIgeTE9 IjE4Mi4yNyIgeDI9IjkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTM3IiB5MT0i MTgyLjI3IiB4Mj0iMTM3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI5MiIgeTE9 IjE4Mi4yNyIgeDI9IjI5MiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzNzMiIHkx PSIxODIuMjciIHgyPSIzNzMiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNTYiIHkx PSIxODIuMjciIHgyPSI1NiIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0OTQiIHkx PSIxODIuMjciIHgyPSI0OTQiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDk3IiB5 MT0iMTgyLjI3IiB4Mj0iNDk3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM0OSIg eTE9IjE4Mi4yNyIgeDI9IjM0OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyMjki IHkxPSIxODIuMjciIHgyPSIyMjkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMTA5 IiB5MT0iMTgyLjI3IiB4Mj0iMTA5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ3 IiB5MT0iMTgyLjI3IiB4Mj0iNDciIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDc5 IiB5MT0iMTgyLjI3IiB4Mj0iNDc5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM5 OSIgeTE9IjE4Mi4yNyIgeDI9IjM5OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIx OTkiIHkxPSIxODIuMjciIHgyPSIxOTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i NzkiIHkxPSIxODIuMjciIHgyPSI3OSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIz NDEiIHkxPSIxODIuMjciIHgyPSIzNDEiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i MjE5IiB5MT0iMTgyLjI3IiB4Mj0iMjE5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 Ijk5IiB5MT0iMTgyLjI3IiB4Mj0iOTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i NDEiIHkxPSIxODIuMjciIHgyPSI0MSIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0 MTkiIHkxPSIxODIuMjciIHgyPSI0MTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0i Mzg5IiB5MT0iMTgyLjI3IiB4Mj0iMzg5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjE4NyIgeTE9IjE4Mi4yNyIgeDI9IjE4NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSI2OSIgeTE9IjE4Mi4yNyIgeDI9IjY5IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9 IjE3NyIgeTE9IjE4Mi4yNyIgeDI9IjE3NyIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgx PSIxNDkiIHkxPSIxODIuMjciIHgyPSIxNDkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0zIiB4 MT0iMTQxIiB5MT0iMTgyLjI3IiB4Mj0iMTQxIiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIg eDE9IjQ2NCIgeTE9IjE4Mi4yNyIgeDI9IjQ2NCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xzLTMi IHgxPSIyODUiIHkxPSIxODIuMjciIHgyPSIyODUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNscy0z IiB4MT0iMzE3IiB5MT0iMTgyLjI3IiB4Mj0iMzE3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJjbHMt MyIgeDE9IjQ1NCIgeTE9IjE4Mi4yNyIgeDI9IjQ1NCIgeTI9IjIiLz48bGluZSBjbGFzcz0iY2xz LTMiIHgxPSIyNzUiIHkxPSIxODIuMjciIHgyPSIyNzUiIHkyPSIyIi8+PGxpbmUgY2xhc3M9ImNs cy0zIiB4MT0iMzA4IiB5MT0iMTgyLjI3IiB4Mj0iMzA4IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjIwNyIgeTE9IjE4Mi4yNyIgeDI9IjIwNyIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIxNyIgeTE9IjE4Mi4yNyIgeDI9IjE3IiB5Mj0iMiIvPjxsaW5lIGNsYXNzPSJj bHMtMyIgeDE9IjM3NyIgeTE9IjE4Mi4yNyIgeDI9IjM3NyIgeTI9IjIiLz48bGluZSBjbGFzcz0i Y2xzLTMiIHgxPSIxMTkiIHkxPSIxODIuMjciIHgyPSIxMTkiIHkyPSIyIi8+PGxpbmUgY2xhc3M9 ImNscy0zIiB4MT0iNDg4IiB5MT0iMTgyLjI3IiB4Mj0iNDg4IiB5Mj0iMiIvPjxsaW5lIGNsYXNz PSJjbHMtMyIgeDE9IjQwOSIgeTE9IjE4Mi4yNyIgeDI9IjQwOSIgeTI9IjIiLz48bGluZSBjbGFz cz0iY2xzLTMiIHgxPSIyMjkiIHkxPSIxODIuMjciIHgyPSIyMjkiIHkyPSIyIi8+PGxpbmUgY2xh c3M9ImNscy0zIiB4MT0iMTA5IiB5MT0iMTgyLjI3IiB4Mj0iMTA5IiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjQ3IiB5MT0iMTgyLjI3IiB4Mj0iNDciIHkyPSIyIi8+PGxpbmUgY2xh c3M9ImNscy0zIiB4MT0iNDM5IiB5MT0iMTgyLjI3IiB4Mj0iNDM5IiB5Mj0iMiIvPjxsaW5lIGNs YXNzPSJjbHMtMyIgeDE9IjM5OSIgeTE9IjE4Mi4yNyIgeDI9IjM5OSIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSIxMjciIHkxPSIxODIuMjciIHgyPSIxMjciIHkyPSIyIi8+PGxpbmUg Y2xhc3M9ImNscy0zIiB4MT0iNzkiIHkxPSIxODIuMjciIHgyPSI3OSIgeTI9IjIiLz48bGluZSBj bGFzcz0iY2xzLTMiIHgxPSIxODciIHkxPSIxODIuMjciIHgyPSIxODciIHkyPSIyIi8+PGxpbmUg Y2xhc3M9ImNscy0zIiB4MT0iMTU5IiB5MT0iMTgyLjI3IiB4Mj0iMTU5IiB5Mj0iMiIvPjxsaW5l IGNsYXNzPSJjbHMtMyIgeDE9IjE3NyIgeTE9IjE4Mi4yNyIgeDI9IjE3NyIgeTI9IjIiLz48bGlu ZSBjbGFzcz0iY2xzLTMiIHgxPSIxNDkiIHkxPSIxODIuMjciIHgyPSIxNDkiIHkyPSIyIi8+PGxp bmUgY2xhc3M9ImNscy0zIiB4MT0iNDc0IiB5MT0iMTgyLjI3IiB4Mj0iNDc0IiB5Mj0iMiIvPjxs aW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI5NSIgeTE9IjE4Mi4yNyIgeDI9IjI5NSIgeTI9IjIiLz48 bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIyNjYiIHkxPSIxODIuMjciIHgyPSIyNjYiIHkyPSIyIi8+ PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDY0IiB5MT0iMTgyLjI3IiB4Mj0iNDY0IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI4NSIgeTE9IjE4Mi4yNyIgeDI9IjI4NSIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzMTciIHkxPSIxODIuMjciIHgyPSIzMTciIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMjQ3IiB5MT0iMTgyLjI3IiB4Mj0iMjQ3IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjU4IiB5MT0iMTgyLjI3IiB4Mj0iNTgiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iMzg3IiB5MT0iMTgyLjI3IiB4Mj0iMzg3IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjkiIHkxPSIxODIuMjciIHgyPSI5IiB5Mj0iMiIv PjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjI5MiIgeTE9IjE4Mi4yNyIgeDI9IjI5MiIgeTI9IjIi Lz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSIzMDEiIHkxPSIxODIuMjciIHgyPSIzMDEiIHkyPSIy Ii8+PGxpbmUgY2xhc3M9ImNscy0zIiB4MT0iNDI4IiB5MT0iMTgyLjI3IiB4Mj0iNDI4IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjM3MyIgeTE9IjE4Mi4yNyIgeDI9IjM3MyIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI1NiIgeTE9IjE4Mi4yNyIgeDI9IjU2IiB5Mj0i MiIvPjxsaW5lIGNsYXNzPSJjbHMtMyIgeDE9IjQ5NCIgeTE9IjE4Mi4yNyIgeDI9IjQ5NCIgeTI9 IjIiLz48bGluZSBjbGFzcz0iY2xzLTMiIHgxPSI0OTciIHkxPSIxODIuMjciIHgyPSI0OTciIHky PSIyIi8+PC9nPjwvc3ZnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2FjdGl2aXR5X2NhbGxiYWNrLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2FjdGl2aXR5X2NhbGxiYWNr LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMmU4NGUuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9hY3Rpdml0eV9jYWxsYmFjay5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBA QAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BQ1RJVklUWV9DQUxMQkFDS19ICi0jZGVmaW5l IEpFTUFMTE9DX0lOVEVSTkFMX0FDVElWSVRZX0NBTExCQUNLX0gKLQotLyoKLSAqIFRoZSBjYWxs YmFjayB0byBiZSBleGVjdXRlZCAicGVyaW9kaWNhbGx5IiwgaW4gcmVzcG9uc2UgdG8gc29tZSBh bW91bnQgb2YKLSAqIGFsbG9jYXRvciBhY3Rpdml0eS4KLSAqCi0gKiBUaGlzIGNhbGxiYWNrIG5l ZWQgbm90IGJlIGNvbXB1dGluZyBhbnkgc29ydCBvZiBwZWFrIChhbHRob3VnaCB0aGF0J3MgdGhl Ci0gKiBpbnRlbmRlZCBmaXJzdCB1c2UgY2FzZSksIGJ1dCB3ZSBkcml2ZSBpdCBmcm9tIHRoZSBw ZWFrIGNvdW50ZXIsIHNvIGl0J3MKLSAqIGtlZXBzIHRoaW5ncyB0aWR5IHRvIGtlZXAgaXQgaGVy ZS4KLSAqCi0gKiBUaGUgY2FsbHMgdG8gdGhpcyB0aHVuayBnZXQgZHJpdmVuIGJ5IHRoZSBwZWFr X2V2ZW50IG1vZHVsZS4KLSAqLwotI2RlZmluZSBBQ1RJVklUWV9DQUxMQkFDS19USFVOS19JTklU SUFMSVpFUiB7TlVMTCwgTlVMTH0KLXR5cGVkZWYgdm9pZCAoKmFjdGl2aXR5X2NhbGxiYWNrX3Qp KHZvaWQgKnVjdHgsIHVpbnQ2NF90IGFsbG9jYXRlZCwKLSAgICB1aW50NjRfdCBkZWFsbG9jYXRl ZCk7Ci10eXBlZGVmIHN0cnVjdCBhY3Rpdml0eV9jYWxsYmFja190aHVua19zIGFjdGl2aXR5X2Nh bGxiYWNrX3RodW5rX3Q7Ci1zdHJ1Y3QgYWN0aXZpdHlfY2FsbGJhY2tfdGh1bmtfcyB7Ci0JYWN0 aXZpdHlfY2FsbGJhY2tfdCBjYWxsYmFjazsKLQl2b2lkICp1Y3R4OwotfTsKLQotI2VuZGlmIC8q IEpFTUFMTE9DX0lOVEVSTkFMX0FDVElWSVRZX0NBTExCQUNLX0ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2FyZW5hX2V4dGVybnMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfZXh0ZXJucy5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmZjZWFhLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJl bmFfZXh0ZXJucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLSNpZm5kZWYgSkVN QUxMT0NfSU5URVJOQUxfQVJFTkFfRVhURVJOU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFM X0FSRU5BX0VYVEVSTlNfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmluLmgiCi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZGl2LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvZXh0ZW50X2Rzcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hvb2suaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wYWdlcy5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3N0YXRzLmgiCi0KLS8qCi0gKiBXaGVuIHRoZSBhbW91bnQgb2YgcGFnZXMgdG8g YmUgcHVyZ2VkIGV4Y2VlZHMgdGhpcyBhbW91bnQsIGRlZmVycmVkIHB1cmdlCi0gKiBzaG91bGQg aGFwcGVuLgotICovCi0jZGVmaW5lIEFSRU5BX0RFRkVSUkVEX1BVUkdFX05QQUdFU19USFJFU0hP TEQgVUlOVDY0X0MoMTAyNCkKLQotZXh0ZXJuIHNzaXplX3Qgb3B0X2RpcnR5X2RlY2F5X21zOwot ZXh0ZXJuIHNzaXplX3Qgb3B0X211enp5X2RlY2F5X21zOwotCi1leHRlcm4gcGVyY3B1X2FyZW5h X21vZGVfdCBvcHRfcGVyY3B1X2FyZW5hOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnBlcmNwdV9hcmVu YV9tb2RlX25hbWVzW107Ci0KLWV4dGVybiBkaXZfaW5mb190IGFyZW5hX2JpbmluZF9kaXZfaW5m b1tTQ19OQklOU107Ci0KLWV4dGVybiBtYWxsb2NfbXV0ZXhfdCBhcmVuYXNfbG9jazsKLWV4dGVy biBlbWFwX3QgYXJlbmFfZW1hcF9nbG9iYWw7Ci0KLWV4dGVybiBzaXplX3Qgb3B0X292ZXJzaXpl X3RocmVzaG9sZDsKLWV4dGVybiBzaXplX3Qgb3ZlcnNpemVfdGhyZXNob2xkOwotCi0vKgotICog YXJlbmFfYmluX29mZnNldHNbYmluaW5kXSBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBiaW4g c2hhcmQgZm9yIHNpemUgY2xhc3MKLSAqIGJpbmluZC4KLSAqLwotZXh0ZXJuIHVpbnQzMl90IGFy ZW5hX2Jpbl9vZmZzZXRzW1NDX05CSU5TXTsKLQotdm9pZCBhcmVuYV9iYXNpY19zdGF0c19tZXJn ZSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLAotICAgIHVuc2lnbmVkICpudGhyZWFkcywg Y29uc3QgY2hhciAqKmRzcywgc3NpemVfdCAqZGlydHlfZGVjYXlfbXMsCi0gICAgc3NpemVfdCAq bXV6enlfZGVjYXlfbXMsIHNpemVfdCAqbmFjdGl2ZSwgc2l6ZV90ICpuZGlydHksIHNpemVfdCAq bm11enp5KTsKLXZvaWQgYXJlbmFfc3RhdHNfbWVyZ2UodHNkbl90ICp0c2RuLCBhcmVuYV90ICph cmVuYSwgdW5zaWduZWQgKm50aHJlYWRzLAotICAgIGNvbnN0IGNoYXIgKipkc3MsIHNzaXplX3Qg KmRpcnR5X2RlY2F5X21zLCBzc2l6ZV90ICptdXp6eV9kZWNheV9tcywKLSAgICBzaXplX3QgKm5h Y3RpdmUsIHNpemVfdCAqbmRpcnR5LCBzaXplX3QgKm5tdXp6eSwgYXJlbmFfc3RhdHNfdCAqYXN0 YXRzLAotICAgIGJpbl9zdGF0c19kYXRhX3QgKmJzdGF0cywgYXJlbmFfc3RhdHNfbGFyZ2VfdCAq bHN0YXRzLAotICAgIHBhY19lc3RhdHNfdCAqZXN0YXRzLCBocGFfc2hhcmRfc3RhdHNfdCAqaHBh c3RhdHMsIHNlY19zdGF0c190ICpzZWNzdGF0cyk7Ci12b2lkIGFyZW5hX2hhbmRsZV9kZWZlcnJl ZF93b3JrKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpOwotZWRhdGFfdCAqYXJlbmFfZXh0 ZW50X2FsbG9jX2xhcmdlKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsCi0gICAgc2l6ZV90 IHVzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8pOwotdm9pZCBhcmVuYV9leHRlbnRf ZGFsbG9jX2xhcmdlX3ByZXAodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwKLSAgICBlZGF0 YV90ICplZGF0YSk7Ci12b2lkIGFyZW5hX2V4dGVudF9yYWxsb2NfbGFyZ2Vfc2hyaW5rKHRzZG5f dCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsCi0gICAgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRz aXplKTsKLXZvaWQgYXJlbmFfZXh0ZW50X3JhbGxvY19sYXJnZV9leHBhbmQodHNkbl90ICp0c2Ru LCBhcmVuYV90ICphcmVuYSwKLSAgICBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9sZHNpemUpOwot Ym9vbCBhcmVuYV9kZWNheV9tc19zZXQodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZXh0 ZW50X3N0YXRlX3Qgc3RhdGUsCi0gICAgc3NpemVfdCBkZWNheV9tcyk7Ci1zc2l6ZV90IGFyZW5h X2RlY2F5X21zX2dldChhcmVuYV90ICphcmVuYSwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUpOwotdm9p ZCBhcmVuYV9kZWNheSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBib29sIGlzX2JhY2tn cm91bmRfdGhyZWFkLAotICAgIGJvb2wgYWxsKTsKLXVpbnQ2NF90IGFyZW5hX3RpbWVfdW50aWxf ZGVmZXJyZWQodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSk7Ci12b2lkIGFyZW5hX2RvX2Rl ZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSk7Ci12b2lkIGFyZW5hX3Jl c2V0KHRzZF90ICp0c2QsIGFyZW5hX3QgKmFyZW5hKTsKLXZvaWQgYXJlbmFfZGVzdHJveSh0c2Rf dCAqdHNkLCBhcmVuYV90ICphcmVuYSk7Ci12b2lkIGFyZW5hX2NhY2hlX2Jpbl9maWxsX3NtYWxs KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsCi0gICAgY2FjaGVfYmluX3QgKmNhY2hlX2Jp biwgY2FjaGVfYmluX2luZm9fdCAqY2FjaGVfYmluX2luZm8sIHN6aW5kX3QgYmluaW5kLAotICAg IGNvbnN0IHVuc2lnbmVkIG5maWxsKTsKLQotdm9pZCAqYXJlbmFfbWFsbG9jX2hhcmQodHNkbl90 ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHNpemUsCi0gICAgc3ppbmRfdCBpbmQsIGJv b2wgemVybyk7Ci12b2lkICphcmVuYV9wYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVu YSwgc2l6ZV90IHVzaXplLAotICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgdGNhY2hl X3QgKnRjYWNoZSk7Ci12b2lkIGFyZW5hX3Byb2ZfcHJvbW90ZSh0c2RuX3QgKnRzZG4sIHZvaWQg KnB0ciwgc2l6ZV90IHVzaXplKTsKLXZvaWQgYXJlbmFfZGFsbG9jX3Byb21vdGVkKHRzZG5fdCAq dHNkbiwgdm9pZCAqcHRyLCB0Y2FjaGVfdCAqdGNhY2hlLAotICAgIGJvb2wgc2xvd19wYXRoKTsK LXZvaWQgYXJlbmFfc2xhYl9kYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRh dGFfdCAqc2xhYik7Ci0KLXZvaWQgYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfaGFuZGxlX25ld2x5 X2VtcHR5KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsCi0gICAgZWRhdGFfdCAqc2xhYiwg YmluX3QgKmJpbik7Ci12b2lkIGFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2hhbmRsZV9uZXdseV9u b25lbXB0eSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLAotICAgIGVkYXRhX3QgKnNsYWIs IGJpbl90ICpiaW4pOwotdm9pZCBhcmVuYV9kYWxsb2Nfc21hbGwodHNkbl90ICp0c2RuLCB2b2lk ICpwdHIpOwotYm9vbCBhcmVuYV9yYWxsb2Nfbm9fbW92ZSh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0 ciwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBleHRyYSwgYm9vbCB6 ZXJvLCBzaXplX3QgKm5ld3NpemUpOwotdm9pZCAqYXJlbmFfcmFsbG9jKHRzZG5fdCAqdHNkbiwg YXJlbmFfdCAqYXJlbmEsIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsCi0gICAgc2l6ZV90IHNp emUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSwKLSAgICBo b29rX3JhbGxvY19hcmdzX3QgKmhvb2tfYXJncyk7Ci1kc3NfcHJlY190IGFyZW5hX2Rzc19wcmVj X2dldChhcmVuYV90ICphcmVuYSk7Ci1laG9va3NfdCAqYXJlbmFfZ2V0X2Vob29rcyhhcmVuYV90 ICphcmVuYSk7Ci1leHRlbnRfaG9va3NfdCAqYXJlbmFfc2V0X2V4dGVudF9ob29rcyh0c2RfdCAq dHNkLCBhcmVuYV90ICphcmVuYSwKLSAgICBleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzKTsK LWJvb2wgYXJlbmFfZHNzX3ByZWNfc2V0KGFyZW5hX3QgKmFyZW5hLCBkc3NfcHJlY190IGRzc19w cmVjKTsKLXNzaXplX3QgYXJlbmFfZGlydHlfZGVjYXlfbXNfZGVmYXVsdF9nZXQodm9pZCk7Ci1i b29sIGFyZW5hX2RpcnR5X2RlY2F5X21zX2RlZmF1bHRfc2V0KHNzaXplX3QgZGVjYXlfbXMpOwot c3NpemVfdCBhcmVuYV9tdXp6eV9kZWNheV9tc19kZWZhdWx0X2dldCh2b2lkKTsKLWJvb2wgYXJl bmFfbXV6enlfZGVjYXlfbXNfZGVmYXVsdF9zZXQoc3NpemVfdCBkZWNheV9tcyk7Ci1ib29sIGFy ZW5hX3JldGFpbl9ncm93X2xpbWl0X2dldF9zZXQodHNkX3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEs Ci0gICAgc2l6ZV90ICpvbGRfbGltaXQsIHNpemVfdCAqbmV3X2xpbWl0KTsKLXVuc2lnbmVkIGFy ZW5hX250aHJlYWRzX2dldChhcmVuYV90ICphcmVuYSwgYm9vbCBpbnRlcm5hbCk7Ci12b2lkIGFy ZW5hX250aHJlYWRzX2luYyhhcmVuYV90ICphcmVuYSwgYm9vbCBpbnRlcm5hbCk7Ci12b2lkIGFy ZW5hX250aHJlYWRzX2RlYyhhcmVuYV90ICphcmVuYSwgYm9vbCBpbnRlcm5hbCk7Ci1hcmVuYV90 ICphcmVuYV9uZXcodHNkbl90ICp0c2RuLCB1bnNpZ25lZCBpbmQsIGNvbnN0IGFyZW5hX2NvbmZp Z190ICpjb25maWcpOwotYm9vbCBhcmVuYV9pbml0X2h1Z2Uodm9pZCk7Ci1ib29sIGFyZW5hX2lz X2h1Z2UodW5zaWduZWQgYXJlbmFfaW5kKTsKLWFyZW5hX3QgKmFyZW5hX2Nob29zZV9odWdlKHRz ZF90ICp0c2QpOwotYmluX3QgKmFyZW5hX2Jpbl9jaG9vc2UodHNkbl90ICp0c2RuLCBhcmVuYV90 ICphcmVuYSwgc3ppbmRfdCBiaW5pbmQsCi0gICAgdW5zaWduZWQgKmJpbnNoYXJkKTsKLXNpemVf dCBhcmVuYV9maWxsX3NtYWxsX2ZyZXNoKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHN6 aW5kX3QgYmluaW5kLAotICAgIHZvaWQgKipwdHJzLCBzaXplX3QgbmZpbGwsIGJvb2wgemVybyk7 Ci1ib29sIGFyZW5hX2Jvb3Qoc2NfZGF0YV90ICpzY19kYXRhLCBiYXNlX3QgKmJhc2UsIGJvb2wg aHBhKTsKLXZvaWQgYXJlbmFfcHJlZm9yazAodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSk7 Ci12b2lkIGFyZW5hX3ByZWZvcmsxKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpOwotdm9p ZCBhcmVuYV9wcmVmb3JrMih0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKTsKLXZvaWQgYXJl bmFfcHJlZm9yazModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSk7Ci12b2lkIGFyZW5hX3By ZWZvcms0KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpOwotdm9pZCBhcmVuYV9wcmVmb3Jr NSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKTsKLXZvaWQgYXJlbmFfcHJlZm9yazYodHNk bl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSk7Ci12b2lkIGFyZW5hX3ByZWZvcms3KHRzZG5fdCAq dHNkbiwgYXJlbmFfdCAqYXJlbmEpOwotdm9pZCBhcmVuYV9wcmVmb3JrOCh0c2RuX3QgKnRzZG4s IGFyZW5hX3QgKmFyZW5hKTsKLXZvaWQgYXJlbmFfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNk biwgYXJlbmFfdCAqYXJlbmEpOwotdm9pZCBhcmVuYV9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRz ZG4sIGFyZW5hX3QgKmFyZW5hKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5B X0VYVEVSTlNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfaW5saW5lc19hLmggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2FyZW5hX2lubGluZXNfYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4 NTY4MzU4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfaW5saW5lc19hLmgKKysrIC9kZXYv bnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX0lO TElORVNfQV9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX0lOTElORVNfQV9ICi0K LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLWFyZW5hX2luZF9nZXQoY29uc3QgYXJlbmFfdCAqYXJl bmEpIHsKLQlyZXR1cm4gYXJlbmEtPmluZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1hcmVu YV9pbnRlcm5hbF9hZGQoYXJlbmFfdCAqYXJlbmEsIHNpemVfdCBzaXplKSB7Ci0JYXRvbWljX2Zl dGNoX2FkZF96dSgmYXJlbmEtPnN0YXRzLmludGVybmFsLCBzaXplLCBBVE9NSUNfUkVMQVhFRCk7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYXJlbmFfaW50ZXJuYWxfc3ViKGFyZW5hX3QgKmFy ZW5hLCBzaXplX3Qgc2l6ZSkgewotCWF0b21pY19mZXRjaF9zdWJfenUoJmFyZW5hLT5zdGF0cy5p bnRlcm5hbCwgc2l6ZSwgQVRPTUlDX1JFTEFYRUQpOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVf dAotYXJlbmFfaW50ZXJuYWxfZ2V0KGFyZW5hX3QgKmFyZW5hKSB7Ci0JcmV0dXJuIGF0b21pY19s b2FkX3p1KCZhcmVuYS0+c3RhdHMuaW50ZXJuYWwsIEFUT01JQ19SRUxBWEVEKTsKLX0KLQotI2Vu ZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX0lOTElORVNfQV9IICovCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9hcmVuYV9pbmxpbmVzX2IuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfaW5saW5lc19iLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhODE1MzcuLjAwMDAwMDAKLS0tIGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9hcmVuYV9pbmxpbmVzX2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1MCArMCwwIEBACi0j aWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX0lOTElORVNfQl9ICi0jZGVmaW5lIEpFTUFM TE9DX0lOVEVSTkFMX0FSRU5BX0lOTElORVNfQl9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9kaXYuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lbWFwLmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfdHlwZXMuaCIKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3J0cmVlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FmZXR5X2NoZWNrLmgiCi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9zei5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3RpY2tlci5oIgotCi1zdGF0 aWMgaW5saW5lIGFyZW5hX3QgKgotYXJlbmFfZ2V0X2Zyb21fZWRhdGEoZWRhdGFfdCAqZWRhdGEp IHsKLQlyZXR1cm4gKGFyZW5hX3QgKilhdG9taWNfbG9hZF9wKCZhcmVuYXNbZWRhdGFfYXJlbmFf aW5kX2dldChlZGF0YSldLAotCSAgICBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLUpFTUFMTE9DX0FM V0FZU19JTkxJTkUgYXJlbmFfdCAqCi1hcmVuYV9jaG9vc2VfbWF5YmVfaHVnZSh0c2RfdCAqdHNk LCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHNpemUpIHsKLQlpZiAoYXJlbmEgIT0gTlVMTCkgewot CQlyZXR1cm4gYXJlbmE7Ci0JfQotCi0JLyoKLQkgKiBGb3IgaHVnZSBhbGxvY2F0aW9ucywgdXNl IHRoZSBkZWRpY2F0ZWQgaHVnZSBhcmVuYSBpZiBib3RoIGFyZSB0cnVlOgotCSAqIDEpIGlzIHVz aW5nIGF1dG8gYXJlbmEgc2VsZWN0aW9uIChpLmUuIGFyZW5hID09IE5VTEwpLCBhbmQgMikgdGhl Ci0JICogdGhyZWFkIGlzIG5vdCBhc3NpZ25lZCB0byBhIG1hbnVhbCBhcmVuYS4KLQkgKi8KLQlp ZiAodW5saWtlbHkoc2l6ZSA+PSBvdmVyc2l6ZV90aHJlc2hvbGQpKSB7Ci0JCWFyZW5hX3QgKnRz ZF9hcmVuYSA9IHRzZF9hcmVuYV9nZXQodHNkKTsKLQkJaWYgKHRzZF9hcmVuYSA9PSBOVUxMIHx8 IGFyZW5hX2lzX2F1dG8odHNkX2FyZW5hKSkgewotCQkJcmV0dXJuIGFyZW5hX2Nob29zZV9odWdl KHRzZCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gYXJlbmFfY2hvb3NlKHRzZCwgTlVMTCk7Ci19Ci0K LUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotYXJlbmFfcHJvZl9pbmZvX2dldCh0c2RfdCAq dHNkLCBjb25zdCB2b2lkICpwdHIsIGVtYXBfYWxsb2NfY3R4X3QgKmFsbG9jX2N0eCwKLSAgICBw cm9mX2luZm9fdCAqcHJvZl9pbmZvLCBib29sIHJlc2V0X3JlY2VudCkgewotCWNhc3NlcnQoY29u ZmlnX3Byb2YpOwotCWFzc2VydChwdHIgIT0gTlVMTCk7Ci0JYXNzZXJ0KHByb2ZfaW5mbyAhPSBO VUxMKTsKLQotCWVkYXRhX3QgKmVkYXRhID0gTlVMTDsKLQlib29sIGlzX3NsYWI7Ci0KLQkvKiBT dGF0aWMgY2hlY2suICovCi0JaWYgKGFsbG9jX2N0eCA9PSBOVUxMKSB7Ci0JCWVkYXRhID0gZW1h cF9lZGF0YV9sb29rdXAodHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLAotCQkgICAg cHRyKTsKLQkJaXNfc2xhYiA9IGVkYXRhX3NsYWJfZ2V0KGVkYXRhKTsKLQl9IGVsc2UgaWYgKHVu bGlrZWx5KCEoaXNfc2xhYiA9IGFsbG9jX2N0eC0+c2xhYikpKSB7Ci0JCWVkYXRhID0gZW1hcF9l ZGF0YV9sb29rdXAodHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLAotCQkgICAgcHRy KTsKLQl9Ci0KLQlpZiAodW5saWtlbHkoIWlzX3NsYWIpKSB7Ci0JCS8qIGVkYXRhIG11c3QgaGF2 ZSBiZWVuIGluaXRpYWxpemVkIGF0IHRoaXMgcG9pbnQuICovCi0JCWFzc2VydChlZGF0YSAhPSBO VUxMKTsKLQkJbGFyZ2VfcHJvZl9pbmZvX2dldCh0c2QsIGVkYXRhLCBwcm9mX2luZm8sIHJlc2V0 X3JlY2VudCk7Ci0JfSBlbHNlIHsKLQkJcHJvZl9pbmZvLT5hbGxvY190Y3R4ID0gKHByb2ZfdGN0 eF90ICopKHVpbnRwdHJfdCkxVTsKLQkJLyoKLQkJICogTm8gbmVlZCB0byBzZXQgb3RoZXIgZmll bGRzIGluIHByb2ZfaW5mbzsgdGhleSB3aWxsIG5ldmVyIGJlCi0JCSAqIGFjY2Vzc2VkIGlmICh1 aW50cHRyX3QpYWxsb2NfdGN0eCA9PSAodWludHB0cl90KTFVLgotCQkgKi8KLQl9Ci19Ci0KLUpF TUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotYXJlbmFfcHJvZl90Y3R4X3Jlc2V0KHRzZF90ICp0 c2QsIGNvbnN0IHZvaWQgKnB0ciwKLSAgICBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsK LQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQocHRyICE9IE5VTEwpOwotCi0JLyogU3Rh dGljIGNoZWNrLiAqLwotCWlmIChhbGxvY19jdHggPT0gTlVMTCkgewotCQllZGF0YV90ICplZGF0 YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZF90c2RuKHRzZCksCi0JCSAgICAmYXJlbmFfZW1hcF9n bG9iYWwsIHB0cik7Ci0JCWlmICh1bmxpa2VseSghZWRhdGFfc2xhYl9nZXQoZWRhdGEpKSkgewot CQkJbGFyZ2VfcHJvZl90Y3R4X3Jlc2V0KGVkYXRhKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh1 bmxpa2VseSghYWxsb2NfY3R4LT5zbGFiKSkgewotCQkJZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2Vk YXRhX2xvb2t1cCh0c2RfdHNkbih0c2QpLAotCQkJICAgICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRy KTsKLQkJCWxhcmdlX3Byb2ZfdGN0eF9yZXNldChlZGF0YSk7Ci0JCX0KLQl9Ci19Ci0KLUpFTUFM TE9DX0FMV0FZU19JTkxJTkUgdm9pZAotYXJlbmFfcHJvZl90Y3R4X3Jlc2V0X3NhbXBsZWQodHNk X3QgKnRzZCwgY29uc3Qgdm9pZCAqcHRyKSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0JYXNz ZXJ0KHB0ciAhPSBOVUxMKTsKLQotCWVkYXRhX3QgKmVkYXRhID0gZW1hcF9lZGF0YV9sb29rdXAo dHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLAotCSAgICBwdHIpOwotCWFzc2VydCgh ZWRhdGFfc2xhYl9nZXQoZWRhdGEpKTsKLQotCWxhcmdlX3Byb2ZfdGN0eF9yZXNldChlZGF0YSk7 Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotYXJlbmFfcHJvZl9pbmZvX3NldCh0 c2RfdCAqdHNkLCBlZGF0YV90ICplZGF0YSwgcHJvZl90Y3R4X3QgKnRjdHgsCi0gICAgc2l6ZV90 IHNpemUpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQotCWFzc2VydCghZWRhdGFfc2xhYl9n ZXQoZWRhdGEpKTsKLQlsYXJnZV9wcm9mX2luZm9fc2V0KGVkYXRhLCB0Y3R4LCBzaXplKTsKLX0K LQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1hcmVuYV9kZWNheV90aWNrcyh0c2RuX3Qg KnRzZG4sIGFyZW5hX3QgKmFyZW5hLCB1bnNpZ25lZCBudGlja3MpIHsKLQlpZiAodW5saWtlbHko dHNkbl9udWxsKHRzZG4pKSkgewotCQlyZXR1cm47Ci0JfQotCXRzZF90ICp0c2QgPSB0c2RuX3Rz ZCh0c2RuKTsKLQkvKgotCSAqIFdlIHVzZSB0aGUgdGlja2VyX2dlb21fdCB0byBhdm9pZCBoYXZp bmcgcGVyLWFyZW5hIHN0YXRlIGluIHRoZSB0c2QuCi0JICogSW5zdGVhZCBvZiBoYXZpbmcgYSBj b3VudGRvd24tdW50aWwtZGVjYXkgdGltZXIgcnVubmluZyBmb3IgZXZlcnkKLQkgKiBhcmVuYSBp biBldmVyeSB0aHJlYWQsIHdlIGZsaXAgYSBjb2luIG9uY2UgcGVyIHRpY2ssIHdob3NlCi0JICog cHJvYmFiaWxpdHkgb2YgY29taW5nIHVwIGhlYWRzIGlzIDEvbnRpY2tzOyB0aGlzIGlzIGVmZmVj dGl2ZWx5IHRoZQotCSAqIG9wZXJhdGlvbiBvZiB0aGUgdGlja2VyX2dlb21fdC4gIEVhY2ggYXJl bmEgaGFzIHRoZSBzYW1lIGNoYW5jZSBvZiBhCi0JICogY29pbmZsaXAgY29taW5nIHVwIGhlYWRz ICgxL0FSRU5BX0RFQ0FZX05USUNLU19QRVJfVVBEQVRFKSwgc28gd2UgY2FuCi0JICogdXNlIGEg c2luZ2xlIHRpY2tlciBmb3IgYWxsIG9mIHRoZW0uCi0JICovCi0JdGlja2VyX2dlb21fdCAqZGVj YXlfdGlja2VyID0gdHNkX2FyZW5hX2RlY2F5X3RpY2tlcnBfZ2V0KHRzZCk7Ci0JdWludDY0X3Qg KnBybmdfc3RhdGUgPSB0c2RfcHJuZ19zdGF0ZXBfZ2V0KHRzZCk7Ci0JaWYgKHVubGlrZWx5KHRp Y2tlcl9nZW9tX3RpY2tzKGRlY2F5X3RpY2tlciwgcHJuZ19zdGF0ZSwgbnRpY2tzKSkpIHsKLQkJ YXJlbmFfZGVjYXkodHNkbiwgYXJlbmEsIGZhbHNlLCBmYWxzZSk7Ci0JfQotfQotCi1KRU1BTExP Q19BTFdBWVNfSU5MSU5FIHZvaWQKLWFyZW5hX2RlY2F5X3RpY2sodHNkbl90ICp0c2RuLCBhcmVu YV90ICphcmVuYSkgewotCWFyZW5hX2RlY2F5X3RpY2tzKHRzZG4sIGFyZW5hLCAxKTsKLX0KLQot SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLWFyZW5hX21hbGxvYyh0c2RuX3QgKnRzZG4s IGFyZW5hX3QgKmFyZW5hLCBzaXplX3Qgc2l6ZSwgc3ppbmRfdCBpbmQsIGJvb2wgemVybywKLSAg ICB0Y2FjaGVfdCAqdGNhY2hlLCBib29sIHNsb3dfcGF0aCkgewotCWFzc2VydCghdHNkbl9udWxs KHRzZG4pIHx8IHRjYWNoZSA9PSBOVUxMKTsKLQotCWlmIChsaWtlbHkodGNhY2hlICE9IE5VTEwp KSB7Ci0JCWlmIChsaWtlbHkoc2l6ZSA8PSBTQ19TTUFMTF9NQVhDTEFTUykpIHsKLQkJCXJldHVy biB0Y2FjaGVfYWxsb2Nfc21hbGwodHNkbl90c2QodHNkbiksIGFyZW5hLAotCQkJICAgIHRjYWNo ZSwgc2l6ZSwgaW5kLCB6ZXJvLCBzbG93X3BhdGgpOwotCQl9Ci0JCWlmIChsaWtlbHkoc2l6ZSA8 PSB0Y2FjaGVfbWF4Y2xhc3MpKSB7Ci0JCQlyZXR1cm4gdGNhY2hlX2FsbG9jX2xhcmdlKHRzZG5f dHNkKHRzZG4pLCBhcmVuYSwKLQkJCSAgICB0Y2FjaGUsIHNpemUsIGluZCwgemVybywgc2xvd19w YXRoKTsKLQkJfQotCQkvKiAoc2l6ZSA+IHRjYWNoZV9tYXhjbGFzcykgY2FzZSBmYWxscyB0aHJv dWdoLiAqLwotCQlhc3NlcnQoc2l6ZSA+IHRjYWNoZV9tYXhjbGFzcyk7Ci0JfQotCi0JcmV0dXJu IGFyZW5hX21hbGxvY19oYXJkKHRzZG4sIGFyZW5hLCBzaXplLCBpbmQsIHplcm8pOwotfQotCi1K RU1BTExPQ19BTFdBWVNfSU5MSU5FIGFyZW5hX3QgKgotYXJlbmFfYWFsbG9jKHRzZG5fdCAqdHNk biwgY29uc3Qgdm9pZCAqcHRyKSB7Ci0JZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1 cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cik7Ci0JdW5zaWduZWQgYXJlbmFfaW5kID0g ZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSk7Ci0JcmV0dXJuIChhcmVuYV90ICopYXRvbWljX2xv YWRfcCgmYXJlbmFzW2FyZW5hX2luZF0sIEFUT01JQ19SRUxBWEVEKTsKLX0KLQotSkVNQUxMT0Nf QUxXQVlTX0lOTElORSBzaXplX3QKLWFyZW5hX3NhbGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZv aWQgKnB0cikgewotCWFzc2VydChwdHIgIT0gTlVMTCk7Ci0JZW1hcF9hbGxvY19jdHhfdCBhbGxv Y19jdHg7Ci0JZW1hcF9hbGxvY19jdHhfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwg cHRyLCAmYWxsb2NfY3R4KTsKLQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kICE9IFNDX05TSVpFUyk7 Ci0KLQlyZXR1cm4gc3pfaW5kZXgyc2l6ZShhbGxvY19jdHguc3ppbmQpOwotfQotCi1KRU1BTExP Q19BTFdBWVNfSU5MSU5FIHNpemVfdAotYXJlbmFfdnNhbGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0 IHZvaWQgKnB0cikgewotCS8qCi0JICogUmV0dXJuIDAgaWYgcHRyIGlzIG5vdCB3aXRoaW4gYW4g ZXh0ZW50IG1hbmFnZWQgYnkgamVtYWxsb2MuICBUaGlzCi0JICogZnVuY3Rpb24gaGFzIHR3byBl eHRyYSBjb3N0cyByZWxhdGl2ZSB0byBpc2FsbG9jKCk6Ci0JICogLSBUaGUgcnRyZWUgY2FsbHMg Y2Fubm90IGNsYWltIHRvIGJlIGRlcGVuZGVudCBsb29rdXBzLCB3aGljaCBpbmR1Y2VzCi0JICog ICBydHJlZSBsb29rdXAgbG9hZCBkZXBlbmRlbmNpZXMuCi0JICogLSBUaGUgbG9va3VwIG1heSBm YWlsLCBzbyB0aGVyZSBpcyBhbiBleHRyYSBicmFuY2ggdG8gY2hlY2sgZm9yCi0JICogICBmYWls dXJlLgotCSAqLwotCi0JZW1hcF9mdWxsX2FsbG9jX2N0eF90IGZ1bGxfYWxsb2NfY3R4OwotCWJv b2wgbWlzc2luZyA9IGVtYXBfZnVsbF9hbGxvY19jdHhfdHJ5X2xvb2t1cCh0c2RuLCAmYXJlbmFf ZW1hcF9nbG9iYWwsCi0JICAgIHB0ciwgJmZ1bGxfYWxsb2NfY3R4KTsKLQlpZiAobWlzc2luZykg ewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZnVsbF9hbGxvY19jdHguZWRhdGEgPT0gTlVMTCkg ewotCQlyZXR1cm4gMDsKLQl9Ci0JYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChmdWxsX2FsbG9jX2N0 eC5lZGF0YSkgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSk7Ci0JLyogT25seSBzbGFiIG1lbWJlcnMg c2hvdWxkIGJlIGxvb2tlZCB1cCB2aWEgaW50ZXJpb3IgcG9pbnRlcnMuICovCi0JYXNzZXJ0KGVk YXRhX2FkZHJfZ2V0KGZ1bGxfYWxsb2NfY3R4LmVkYXRhKSA9PSBwdHIKLQkgICAgfHwgZWRhdGFf c2xhYl9nZXQoZnVsbF9hbGxvY19jdHguZWRhdGEpKTsKLQotCWFzc2VydChmdWxsX2FsbG9jX2N0 eC5zemluZCAhPSBTQ19OU0laRVMpOwotCi0JcmV0dXJuIHN6X2luZGV4MnNpemUoZnVsbF9hbGxv Y19jdHguc3ppbmQpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLWxhcmdlX2Rh bGxvY19zYWZldHlfY2hlY2tzKGVkYXRhX3QgKmVkYXRhLCB2b2lkICpwdHIsIHN6aW5kX3Qgc3pp bmQpIHsKLQlpZiAoIWNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcykgewotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCi0JLyoKLQkgKiBFYWdlcmx5IGRldGVjdCBkb3VibGUgZnJlZSBhbmQgc2l6ZWQgZGVh bGxvYyBidWdzIGZvciBsYXJnZSBzaXplcy4KLQkgKiBUaGUgY29zdCBpcyBsb3cgZW5vdWdoIChh cyBlZGF0YSB3aWxsIGJlIGFjY2Vzc2VkIGFueXdheSkgdG8gYmUKLQkgKiBlbmFibGVkIGFsbCB0 aGUgdGltZS4KLQkgKi8KLQlpZiAodW5saWtlbHkoZWRhdGEgPT0gTlVMTCB8fAotCSAgICBlZGF0 YV9zdGF0ZV9nZXQoZWRhdGEpICE9IGV4dGVudF9zdGF0ZV9hY3RpdmUpKSB7Ci0JCXNhZmV0eV9j aGVja19mYWlsKCJJbnZhbGlkIGRlYWxsb2NhdGlvbiBkZXRlY3RlZDogIgotCQkgICAgInBhZ2Vz IGJlaW5nIGZyZWVkICglcCkgbm90IGN1cnJlbnRseSBhY3RpdmUsICIKLQkJICAgICJwb3NzaWJs eSBjYXVzZWQgYnkgZG91YmxlIGZyZWUgYnVncy4iLAotCQkgICAgKHVpbnRwdHJfdCllZGF0YV9h ZGRyX2dldChlZGF0YSkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0Jc2l6ZV90IGlucHV0X3NpemUg PSBzel9pbmRleDJzaXplKHN6aW5kKTsKLQlpZiAodW5saWtlbHkoaW5wdXRfc2l6ZSAhPSBlZGF0 YV91c2l6ZV9nZXQoZWRhdGEpKSkgewotCQlzYWZldHlfY2hlY2tfZmFpbF9zaXplZF9kZWFsbG9j KC8qIGN1cnJlbnRfZGVhbGxvYyAqLyB0cnVlLCBwdHIsCi0JCSAgICAvKiB0cnVlX3NpemUgKi8g ZWRhdGFfdXNpemVfZ2V0KGVkYXRhKSwgaW5wdXRfc2l6ZSk7Ci0JCXJldHVybiB0cnVlOwotCX0K LQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1hcmVuYV9kYWxsb2Nf bGFyZ2Vfbm9fdGNhY2hlKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCBzemluZF90IHN6aW5kKSB7 Ci0JaWYgKGNvbmZpZ19wcm9mICYmIHVubGlrZWx5KHN6aW5kIDwgU0NfTkJJTlMpKSB7Ci0JCWFy ZW5hX2RhbGxvY19wcm9tb3RlZCh0c2RuLCBwdHIsIE5VTEwsIHRydWUpOwotCX0gZWxzZSB7Ci0J CWVkYXRhX3QgKmVkYXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xv YmFsLAotCQkgICAgcHRyKTsKLQkJaWYgKGxhcmdlX2RhbGxvY19zYWZldHlfY2hlY2tzKGVkYXRh LCBwdHIsIHN6aW5kKSkgewotCQkJLyogU2VlIHRoZSBjb21tZW50IGluIGlzZnJlZS4gKi8KLQkJ CXJldHVybjsKLQkJfQotCQlsYXJnZV9kYWxsb2ModHNkbiwgZWRhdGEpOwotCX0KLX0KLQotc3Rh dGljIGlubGluZSB2b2lkCi1hcmVuYV9kYWxsb2Nfbm9fdGNhY2hlKHRzZG5fdCAqdHNkbiwgdm9p ZCAqcHRyKSB7Ci0JYXNzZXJ0KHB0ciAhPSBOVUxMKTsKLQotCWVtYXBfYWxsb2NfY3R4X3QgYWxs b2NfY3R4OwotCWVtYXBfYWxsb2NfY3R4X2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWws IHB0ciwgJmFsbG9jX2N0eCk7Ci0KLQlpZiAoY29uZmlnX2RlYnVnKSB7Ci0JCWVkYXRhX3QgKmVk YXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLAotCQkgICAg cHRyKTsKLQkJYXNzZXJ0KGFsbG9jX2N0eC5zemluZCA9PSBlZGF0YV9zemluZF9nZXQoZWRhdGEp KTsKLQkJYXNzZXJ0KGFsbG9jX2N0eC5zemluZCA8IFNDX05TSVpFUyk7Ci0JCWFzc2VydChhbGxv Y19jdHguc2xhYiA9PSBlZGF0YV9zbGFiX2dldChlZGF0YSkpOwotCX0KLQotCWlmIChsaWtlbHko YWxsb2NfY3R4LnNsYWIpKSB7Ci0JCS8qIFNtYWxsIGFsbG9jYXRpb24uICovCi0JCWFyZW5hX2Rh bGxvY19zbWFsbCh0c2RuLCBwdHIpOwotCX0gZWxzZSB7Ci0JCWFyZW5hX2RhbGxvY19sYXJnZV9u b190Y2FjaGUodHNkbiwgcHRyLCBhbGxvY19jdHguc3ppbmQpOwotCX0KLX0KLQotSkVNQUxMT0Nf QUxXQVlTX0lOTElORSB2b2lkCi1hcmVuYV9kYWxsb2NfbGFyZ2UodHNkbl90ICp0c2RuLCB2b2lk ICpwdHIsIHRjYWNoZV90ICp0Y2FjaGUsIHN6aW5kX3Qgc3ppbmQsCi0gICAgYm9vbCBzbG93X3Bh dGgpIHsKLQlpZiAoc3ppbmQgPCBuaGJpbnMpIHsKLQkJaWYgKGNvbmZpZ19wcm9mICYmIHVubGlr ZWx5KHN6aW5kIDwgU0NfTkJJTlMpKSB7Ci0JCQlhcmVuYV9kYWxsb2NfcHJvbW90ZWQodHNkbiwg cHRyLCB0Y2FjaGUsIHNsb3dfcGF0aCk7Ci0JCX0gZWxzZSB7Ci0JCQl0Y2FjaGVfZGFsbG9jX2xh cmdlKHRzZG5fdHNkKHRzZG4pLCB0Y2FjaGUsIHB0ciwgc3ppbmQsCi0JCQkgICAgc2xvd19wYXRo KTsKLQkJfQotCX0gZWxzZSB7Ci0JCWVkYXRhX3QgKmVkYXRhID0gZW1hcF9lZGF0YV9sb29rdXAo dHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLAotCQkgICAgcHRyKTsKLQkJaWYgKGxhcmdlX2RhbGxv Y19zYWZldHlfY2hlY2tzKGVkYXRhLCBwdHIsIHN6aW5kKSkgewotCQkJLyogU2VlIHRoZSBjb21t ZW50IGluIGlzZnJlZS4gKi8KLQkJCXJldHVybjsKLQkJfQotCQlsYXJnZV9kYWxsb2ModHNkbiwg ZWRhdGEpOwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1hcmVuYV9kYWxs b2ModHNkbl90ICp0c2RuLCB2b2lkICpwdHIsIHRjYWNoZV90ICp0Y2FjaGUsCi0gICAgZW1hcF9h bGxvY19jdHhfdCAqY2FsbGVyX2FsbG9jX2N0eCwgYm9vbCBzbG93X3BhdGgpIHsKLQlhc3NlcnQo IXRzZG5fbnVsbCh0c2RuKSB8fCB0Y2FjaGUgPT0gTlVMTCk7Ci0JYXNzZXJ0KHB0ciAhPSBOVUxM KTsKLQotCWlmICh1bmxpa2VseSh0Y2FjaGUgPT0gTlVMTCkpIHsKLQkJYXJlbmFfZGFsbG9jX25v X3RjYWNoZSh0c2RuLCBwdHIpOwotCQlyZXR1cm47Ci0JfQotCi0JZW1hcF9hbGxvY19jdHhfdCBh bGxvY19jdHg7Ci0JaWYgKGNhbGxlcl9hbGxvY19jdHggIT0gTlVMTCkgewotCQlhbGxvY19jdHgg PSAqY2FsbGVyX2FsbG9jX2N0eDsKLQl9IGVsc2UgewotCQl1dGlsX2Fzc3VtZSghdHNkbl9udWxs KHRzZG4pKTsKLQkJZW1hcF9hbGxvY19jdHhfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2Jh bCwgcHRyLAotCQkgICAgJmFsbG9jX2N0eCk7Ci0JfQotCi0JaWYgKGNvbmZpZ19kZWJ1Zykgewot CQllZGF0YV90ICplZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2ds b2JhbCwKLQkJICAgIHB0cik7Ci0JCWFzc2VydChhbGxvY19jdHguc3ppbmQgPT0gZWRhdGFfc3pp bmRfZ2V0KGVkYXRhKSk7Ci0JCWFzc2VydChhbGxvY19jdHguc3ppbmQgPCBTQ19OU0laRVMpOwot CQlhc3NlcnQoYWxsb2NfY3R4LnNsYWIgPT0gZWRhdGFfc2xhYl9nZXQoZWRhdGEpKTsKLQl9Ci0K LQlpZiAobGlrZWx5KGFsbG9jX2N0eC5zbGFiKSkgewotCQkvKiBTbWFsbCBhbGxvY2F0aW9uLiAq LwotCQl0Y2FjaGVfZGFsbG9jX3NtYWxsKHRzZG5fdHNkKHRzZG4pLCB0Y2FjaGUsIHB0ciwKLQkJ ICAgIGFsbG9jX2N0eC5zemluZCwgc2xvd19wYXRoKTsKLQl9IGVsc2UgewotCQlhcmVuYV9kYWxs b2NfbGFyZ2UodHNkbiwgcHRyLCB0Y2FjaGUsIGFsbG9jX2N0eC5zemluZCwKLQkJICAgIHNsb3df cGF0aCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFyZW5hX3NkYWxsb2Nfbm9fdGNh Y2hlKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgewotCWFzc2VydChwdHIg IT0gTlVMTCk7Ci0JYXNzZXJ0KHNpemUgPD0gU0NfTEFSR0VfTUFYQ0xBU1MpOwotCi0JZW1hcF9h bGxvY19jdHhfdCBhbGxvY19jdHg7Ci0JaWYgKCFjb25maWdfcHJvZiB8fCAhb3B0X3Byb2YpIHsK LQkJLyoKLQkJICogVGhlcmUgaXMgbm8gcmlzayBvZiBiZWluZyBjb25mdXNlZCBieSBhIHByb21v dGVkIHNhbXBsZWQKLQkJICogb2JqZWN0LCBzbyBiYXNlIHN6aW5kIGFuZCBzbGFiIG9uIHRoZSBn aXZlbiBzaXplLgotCQkgKi8KLQkJYWxsb2NfY3R4LnN6aW5kID0gc3pfc2l6ZTJpbmRleChzaXpl KTsKLQkJYWxsb2NfY3R4LnNsYWIgPSAoYWxsb2NfY3R4LnN6aW5kIDwgU0NfTkJJTlMpOwotCX0K LQotCWlmICgoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YpIHx8IGNvbmZpZ19kZWJ1ZykgewotCQll bWFwX2FsbG9jX2N0eF9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIsCi0JCSAg ICAmYWxsb2NfY3R4KTsKLQotCQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kID09IHN6X3NpemUyaW5k ZXgoc2l6ZSkpOwotCQlhc3NlcnQoKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mKQotCQkgICAgfHwg YWxsb2NfY3R4LnNsYWIgPT0gKGFsbG9jX2N0eC5zemluZCA8IFNDX05CSU5TKSk7Ci0KLQkJaWYg KGNvbmZpZ19kZWJ1ZykgewotCQkJZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1cCh0 c2RuLAotCQkJICAgICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKLQkJCWFzc2VydChhbGxvY19j dHguc3ppbmQgPT0gZWRhdGFfc3ppbmRfZ2V0KGVkYXRhKSk7Ci0JCQlhc3NlcnQoYWxsb2NfY3R4 LnNsYWIgPT0gZWRhdGFfc2xhYl9nZXQoZWRhdGEpKTsKLQkJfQotCX0KLQotCWlmIChsaWtlbHko YWxsb2NfY3R4LnNsYWIpKSB7Ci0JCS8qIFNtYWxsIGFsbG9jYXRpb24uICovCi0JCWFyZW5hX2Rh bGxvY19zbWFsbCh0c2RuLCBwdHIpOwotCX0gZWxzZSB7Ci0JCWFyZW5hX2RhbGxvY19sYXJnZV9u b190Y2FjaGUodHNkbiwgcHRyLCBhbGxvY19jdHguc3ppbmQpOwotCX0KLX0KLQotSkVNQUxMT0Nf QUxXQVlTX0lOTElORSB2b2lkCi1hcmVuYV9zZGFsbG9jKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRy LCBzaXplX3Qgc2l6ZSwgdGNhY2hlX3QgKnRjYWNoZSwKLSAgICBlbWFwX2FsbG9jX2N0eF90ICpj YWxsZXJfYWxsb2NfY3R4LCBib29sIHNsb3dfcGF0aCkgewotCWFzc2VydCghdHNkbl9udWxsKHRz ZG4pIHx8IHRjYWNoZSA9PSBOVUxMKTsKLQlhc3NlcnQocHRyICE9IE5VTEwpOwotCWFzc2VydChz aXplIDw9IFNDX0xBUkdFX01BWENMQVNTKTsKLQotCWlmICh1bmxpa2VseSh0Y2FjaGUgPT0gTlVM TCkpIHsKLQkJYXJlbmFfc2RhbGxvY19ub190Y2FjaGUodHNkbiwgcHRyLCBzaXplKTsKLQkJcmV0 dXJuOwotCX0KLQotCWVtYXBfYWxsb2NfY3R4X3QgYWxsb2NfY3R4OwotCWlmIChjb25maWdfcHJv ZiAmJiBvcHRfcHJvZikgewotCQlpZiAoY2FsbGVyX2FsbG9jX2N0eCA9PSBOVUxMKSB7Ci0JCQkv KiBVbmNvbW1vbiBjYXNlIGFuZCBzaG91bGQgYmUgYSBzdGF0aWMgY2hlY2suICovCi0JCQllbWFw X2FsbG9jX2N0eF9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIsCi0JCQkgICAg JmFsbG9jX2N0eCk7Ci0JCQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kID09IHN6X3NpemUyaW5kZXgo c2l6ZSkpOwotCQl9IGVsc2UgewotCQkJYWxsb2NfY3R4ID0gKmNhbGxlcl9hbGxvY19jdHg7Ci0J CX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBUaGVyZSBpcyBubyByaXNrIG9mIGJlaW5nIGNvbmZ1 c2VkIGJ5IGEgcHJvbW90ZWQgc2FtcGxlZAotCQkgKiBvYmplY3QsIHNvIGJhc2Ugc3ppbmQgYW5k IHNsYWIgb24gdGhlIGdpdmVuIHNpemUuCi0JCSAqLwotCQlhbGxvY19jdHguc3ppbmQgPSBzel9z aXplMmluZGV4KHNpemUpOwotCQlhbGxvY19jdHguc2xhYiA9IChhbGxvY19jdHguc3ppbmQgPCBT Q19OQklOUyk7Ci0JfQotCi0JaWYgKGNvbmZpZ19kZWJ1ZykgewotCQllZGF0YV90ICplZGF0YSA9 IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwKLQkJICAgIHB0cik7 Ci0JCWFzc2VydChhbGxvY19jdHguc3ppbmQgPT0gZWRhdGFfc3ppbmRfZ2V0KGVkYXRhKSk7Ci0J CWFzc2VydChhbGxvY19jdHguc2xhYiA9PSBlZGF0YV9zbGFiX2dldChlZGF0YSkpOwotCX0KLQot CWlmIChsaWtlbHkoYWxsb2NfY3R4LnNsYWIpKSB7Ci0JCS8qIFNtYWxsIGFsbG9jYXRpb24uICov Ci0JCXRjYWNoZV9kYWxsb2Nfc21hbGwodHNkbl90c2QodHNkbiksIHRjYWNoZSwgcHRyLAotCQkg ICAgYWxsb2NfY3R4LnN6aW5kLCBzbG93X3BhdGgpOwotCX0gZWxzZSB7Ci0JCWFyZW5hX2RhbGxv Y19sYXJnZSh0c2RuLCBwdHIsIHRjYWNoZSwgYWxsb2NfY3R4LnN6aW5kLAotCQkgICAgc2xvd19w YXRoKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYXJlbmFfY2FjaGVfb2JsaXZpb3Vz X3JhbmRvbWl6ZSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBlZGF0YV90ICplZGF0YSwK LSAgICBzaXplX3QgYWxpZ25tZW50KSB7Ci0JYXNzZXJ0KGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSA9 PSBlZGF0YV9hZGRyX2dldChlZGF0YSkpOwotCi0JaWYgKGFsaWdubWVudCA8IFBBR0UpIHsKLQkJ dW5zaWduZWQgbGdfcmFuZ2UgPSBMR19QQUdFIC0KLQkJICAgIGxnX2Zsb29yKENBQ0hFTElORV9D RUlMSU5HKGFsaWdubWVudCkpOwotCQlzaXplX3QgcjsKLQkJaWYgKCF0c2RuX251bGwodHNkbikp IHsKLQkJCXRzZF90ICp0c2QgPSB0c2RuX3RzZCh0c2RuKTsKLQkJCXIgPSAoc2l6ZV90KXBybmdf bGdfcmFuZ2VfdTY0KAotCQkJICAgIHRzZF9wcm5nX3N0YXRlcF9nZXQodHNkKSwgbGdfcmFuZ2Up OwotCQl9IGVsc2UgewotCQkJdWludDY0X3Qgc3RhY2tfdmFsdWUgPSAodWludDY0X3QpKHVpbnRw dHJfdCkmcjsKLQkJCXIgPSAoc2l6ZV90KXBybmdfbGdfcmFuZ2VfdTY0KCZzdGFja192YWx1ZSwg bGdfcmFuZ2UpOwotCQl9Ci0JCXVpbnRwdHJfdCByYW5kb21fb2Zmc2V0ID0gKCh1aW50cHRyX3Qp cikgPDwgKExHX1BBR0UgLQotCQkgICAgbGdfcmFuZ2UpOwotCQllZGF0YS0+ZV9hZGRyID0gKHZv aWQgKikoKHVpbnRwdHJfdCllZGF0YS0+ZV9hZGRyICsKLQkJICAgIHJhbmRvbV9vZmZzZXQpOwot CQlhc3NlcnQoQUxJR05NRU5UX0FERFIyQkFTRShlZGF0YS0+ZV9hZGRyLCBhbGlnbm1lbnQpID09 Ci0JCSAgICBlZGF0YS0+ZV9hZGRyKTsKLQl9Ci19Ci0KLS8qCi0gKiBUaGUgZGFsbG9jIGJpbiBp bmZvIGNvbnRhaW5zIGp1c3QgdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhlIGNvbW1vbiBwYXRocyBu ZWVkCi0gKiBkdXJpbmcgdGNhY2hlIGZsdXNoZXMuICBCeSBmb3JjZS1pbmxpbmluZyB0aGVzZSBw YXRocywgYW5kIHVzaW5nIGxvY2FsIGNvcGllcwotICogb2YgZGF0YSAoc28gdGhhdCB0aGUgY29t cGlsZXIga25vd3MgaXQncyBjb25zdGFudCksIHdlIGF2b2lkIGEgd2hvbGUgYnVuY2ggb2YKLSAq IHJlZHVuZGFudCBsb2FkcyBhbmQgc3RvcmVzIGJ5IGxlYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBp biByZWdpc3RlcnMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IGFyZW5hX2RhbGxvY19iaW5fbG9ja2Vk X2luZm9fcyBhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9pbmZvX3Q7Ci1zdHJ1Y3QgYXJlbmFfZGFs bG9jX2Jpbl9sb2NrZWRfaW5mb19zIHsKLQlkaXZfaW5mb190IGRpdl9pbmZvOwotCXVpbnQzMl90 IG5yZWdzOwotCXVpbnQ2NF90IG5kYWxsb2M7Ci19OwotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5F IHNpemVfdAotYXJlbmFfc2xhYl9yZWdpbmQoYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfaW5mb190 ICppbmZvLCBzemluZF90IGJpbmluZCwKLSAgICBlZGF0YV90ICpzbGFiLCBjb25zdCB2b2lkICpw dHIpIHsKLQlzaXplX3QgZGlmZiwgcmVnaW5kOwotCi0JLyogRnJlZWluZyBhIHBvaW50ZXIgb3V0 c2lkZSB0aGUgc2xhYiBjYW4gY2F1c2UgYXNzZXJ0aW9uIGZhaWx1cmUuICovCi0JYXNzZXJ0KCh1 aW50cHRyX3QpcHRyID49ICh1aW50cHRyX3QpZWRhdGFfYWRkcl9nZXQoc2xhYikpOwotCWFzc2Vy dCgodWludHB0cl90KXB0ciA8ICh1aW50cHRyX3QpZWRhdGFfcGFzdF9nZXQoc2xhYikpOwotCS8q IEZyZWVpbmcgYW4gaW50ZXJpb3IgcG9pbnRlciBjYW4gY2F1c2UgYXNzZXJ0aW9uIGZhaWx1cmUu ICovCi0JYXNzZXJ0KCgodWludHB0cl90KXB0ciAtICh1aW50cHRyX3QpZWRhdGFfYWRkcl9nZXQo c2xhYikpICUKLQkgICAgKHVpbnRwdHJfdCliaW5faW5mb3NbYmluaW5kXS5yZWdfc2l6ZSA9PSAw KTsKLQotCWRpZmYgPSAoc2l6ZV90KSgodWludHB0cl90KXB0ciAtICh1aW50cHRyX3QpZWRhdGFf YWRkcl9nZXQoc2xhYikpOwotCi0JLyogQXZvaWQgZG9pbmcgZGl2aXNpb24gd2l0aCBhIHZhcmlh YmxlIGRpdmlzb3IuICovCi0JcmVnaW5kID0gZGl2X2NvbXB1dGUoJmluZm8tPmRpdl9pbmZvLCBk aWZmKTsKLQotCWFzc2VydChyZWdpbmQgPCBiaW5faW5mb3NbYmluaW5kXS5ucmVncyk7Ci0KLQly ZXR1cm4gcmVnaW5kOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLWFyZW5hX2Rh bGxvY19iaW5fbG9ja2VkX2JlZ2luKGFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2luZm9fdCAqaW5m bywKLSAgICBzemluZF90IGJpbmluZCkgewotCWluZm8tPmRpdl9pbmZvID0gYXJlbmFfYmluaW5k X2Rpdl9pbmZvW2JpbmluZF07Ci0JaW5mby0+bnJlZ3MgPSBiaW5faW5mb3NbYmluaW5kXS5ucmVn czsKLQlpbmZvLT5uZGFsbG9jID0gMDsKLX0KLQotLyoKLSAqIERvZXMgdGhlIGRlYWxsb2NhdGlv biB3b3JrIGFzc29jaWF0ZWQgd2l0aCBmcmVlaW5nIGEgc2luZ2xlIHBvaW50ZXIgKGEKLSAqICJz dGVwIikgaW4gYmV0d2VlbiBhIGFyZW5hX2RhbGxvY19iaW5fbG9ja2VkIGJlZ2luIGFuZCBlbmQg Y2FsbC4KLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgYXJlbmFfc2xhYl9kYWxsb2MgbXVzdCBiZSBj YWxsZWQgb24gc2xhYi4gIERvZXNuJ3QgZG8KLSAqIHN0YXRzIHVwZGF0ZXMsIHdoaWNoIGhhcHBl biBkdXJpbmcgZmluaXNoICh0aGlzIGxldHMgcnVubmluZyBjb3VudHMgZ2V0IGxlZnQKLSAqIGlu IGEgcmVnaXN0ZXIpLgotICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLWFyZW5hX2Rh bGxvY19iaW5fbG9ja2VkX3N0ZXAodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgYmluX3Qg KmJpbiwKLSAgICBhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9pbmZvX3QgKmluZm8sIHN6aW5kX3Qg YmluaW5kLCBlZGF0YV90ICpzbGFiLAotICAgIHZvaWQgKnB0cikgewotCWNvbnN0IGJpbl9pbmZv X3QgKmJpbl9pbmZvID0gJmJpbl9pbmZvc1tiaW5pbmRdOwotCXNpemVfdCByZWdpbmQgPSBhcmVu YV9zbGFiX3JlZ2luZChpbmZvLCBiaW5pbmQsIHNsYWIsIHB0cik7Ci0Jc2xhYl9kYXRhX3QgKnNs YWJfZGF0YSA9IGVkYXRhX3NsYWJfZGF0YV9nZXQoc2xhYik7Ci0KLQlhc3NlcnQoZWRhdGFfbmZy ZWVfZ2V0KHNsYWIpIDwgYmluX2luZm8tPm5yZWdzKTsKLQkvKiBGcmVlaW5nIGFuIHVuYWxsb2Nh dGVkIHBvaW50ZXIgY2FuIGNhdXNlIGFzc2VydGlvbiBmYWlsdXJlLiAqLwotCWFzc2VydChiaXRt YXBfZ2V0KHNsYWJfZGF0YS0+Yml0bWFwLCAmYmluX2luZm8tPmJpdG1hcF9pbmZvLCByZWdpbmQp KTsKLQotCWJpdG1hcF91bnNldChzbGFiX2RhdGEtPmJpdG1hcCwgJmJpbl9pbmZvLT5iaXRtYXBf aW5mbywgcmVnaW5kKTsKLQllZGF0YV9uZnJlZV9pbmMoc2xhYik7Ci0KLQlpZiAoY29uZmlnX3N0 YXRzKSB7Ci0JCWluZm8tPm5kYWxsb2MrKzsKLQl9Ci0KLQl1bnNpZ25lZCBuZnJlZSA9IGVkYXRh X25mcmVlX2dldChzbGFiKTsKLQlpZiAobmZyZWUgPT0gYmluX2luZm8tPm5yZWdzKSB7Ci0JCWFy ZW5hX2RhbGxvY19iaW5fbG9ja2VkX2hhbmRsZV9uZXdseV9lbXB0eSh0c2RuLCBhcmVuYSwgc2xh YiwKLQkJICAgIGJpbik7Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSBpZiAobmZyZWUgPT0gMSAm JiBzbGFiICE9IGJpbi0+c2xhYmN1cikgewotCQlhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9oYW5k bGVfbmV3bHlfbm9uZW1wdHkodHNkbiwgYXJlbmEsIHNsYWIsCi0JCSAgICBiaW4pOwotCX0KLQly ZXR1cm4gZmFsc2U7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotYXJlbmFfZGFs bG9jX2Jpbl9sb2NrZWRfZmluaXNoKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGJpbl90 ICpiaW4sCi0gICAgYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfaW5mb190ICppbmZvKSB7Ci0JaWYg KGNvbmZpZ19zdGF0cykgewotCQliaW4tPnN0YXRzLm5kYWxsb2MgKz0gaW5mby0+bmRhbGxvYzsK LQkJYXNzZXJ0KGJpbi0+c3RhdHMuY3VycmVncyA+PSAoc2l6ZV90KWluZm8tPm5kYWxsb2MpOwot CQliaW4tPnN0YXRzLmN1cnJlZ3MgLT0gKHNpemVfdClpbmZvLT5uZGFsbG9jOwotCX0KLX0KLQot c3RhdGljIGlubGluZSBiaW5fdCAqCi1hcmVuYV9nZXRfYmluKGFyZW5hX3QgKmFyZW5hLCBzemlu ZF90IGJpbmluZCwgdW5zaWduZWQgYmluc2hhcmQpIHsKLQliaW5fdCAqc2hhcmQwID0gKGJpbl90 ICopKCh1aW50cHRyX3QpYXJlbmEgKyBhcmVuYV9iaW5fb2Zmc2V0c1tiaW5pbmRdKTsKLQlyZXR1 cm4gc2hhcmQwICsgYmluc2hhcmQ7Ci19Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9B UkVOQV9JTkxJTkVTX0JfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfc3RhdHMuaCBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvYXJlbmFfc3RhdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVm MWQzNC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2FyZW5hX3N0YXRzLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxMTQgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9TVEFUU19I Ci0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0FSRU5BX1NUQVRTX0gKLQotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2xv Y2tlZGludC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXhfcHJvZi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3BhLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKLQotSkVNQUxM T0NfRElBR05PU1RJQ19ESVNBQkxFX1NQVVJJT1VTCi0KLXR5cGVkZWYgc3RydWN0IGFyZW5hX3N0 YXRzX2xhcmdlX3MgYXJlbmFfc3RhdHNfbGFyZ2VfdDsKLXN0cnVjdCBhcmVuYV9zdGF0c19sYXJn ZV9zIHsKLQkvKgotCSAqIFRvdGFsIG51bWJlciBvZiBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBy ZXF1ZXN0cyBzZXJ2ZWQgZGlyZWN0bHkgYnkKLQkgKiB0aGUgYXJlbmEuCi0JICovCi0JbG9ja2Vk X3U2NF90CW5tYWxsb2M7Ci0JbG9ja2VkX3U2NF90CW5kYWxsb2M7Ci0KLQkvKgotCSAqIE51bWJl ciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGlzIHNpemUgY2xh c3MuCi0JICogVGhpcyBpbmNsdWRlcyByZXF1ZXN0cyBzZXJ2ZWQgYnkgdGNhY2hlLCB0aG91Z2gg dGNhY2hlIG9ubHkKLQkgKiBwZXJpb2RpY2FsbHkgbWVyZ2VzIGludG8gdGhpcyBjb3VudGVyLgot CSAqLwotCWxvY2tlZF91NjRfdAlucmVxdWVzdHM7IC8qIFBhcnRpYWxseSBkZXJpdmVkLiAqLwot CS8qCi0JICogTnVtYmVyIG9mIHRjYWNoZSBmaWxscyAvIGZsdXNoZXMgZm9yIGxhcmdlIChzaW1p bGFybHksIHBlcmlvZGljYWxseQotCSAqIG1lcmdlZCkuICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8g bGFyZ2UgdGNhY2hlIGJhdGNoLWZpbGwgY3VycmVudGx5Ci0JICogKGkuZS4gb25seSBmaWxsIDEg YXQgYSB0aW1lKTsgaG93ZXZlciBmbHVzaCBtYXkgYmUgYmF0Y2hlZC4KLQkgKi8KLQlsb2NrZWRf dTY0X3QJbmZpbGxzOyAvKiBQYXJ0aWFsbHkgZGVyaXZlZC4gKi8KLQlsb2NrZWRfdTY0X3QJbmZs dXNoZXM7IC8qIFBhcnRpYWxseSBkZXJpdmVkLiAqLwotCi0JLyogQ3VycmVudCBudW1iZXIgb2Yg YWxsb2NhdGlvbnMgb2YgdGhpcyBzaXplIGNsYXNzLiAqLwotCXNpemVfdAkJY3VybGV4dGVudHM7 IC8qIERlcml2ZWQuICovCi19OwotCi0vKgotICogQXJlbmEgc3RhdHMuICBOb3RlIHRoYXQgZmll bGRzIG1hcmtlZCAiZGVyaXZlZCIgYXJlIG5vdCBkaXJlY3RseSBtYWludGFpbmVkCi0gKiB3aXRo aW4gdGhlIGFyZW5hIGNvZGU7IHJhdGhlciB0aGVpciB2YWx1ZXMgYXJlIGRlcml2ZWQgZHVyaW5n IHN0YXRzIG1lcmdlCi0gKiByZXF1ZXN0cy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgYXJlbmFfc3Rh dHNfcyBhcmVuYV9zdGF0c190Owotc3RydWN0IGFyZW5hX3N0YXRzX3MgewotCUxPQ0tFRElOVF9N VFhfREVDTEFSRShtdHgpCi0KLQkvKgotCSAqIHJlc2lkZW50IGluY2x1ZGVzIHRoZSBiYXNlIHN0 YXRzIC0tIHRoYXQncyB3aHkgaXQgbGl2ZXMgaGVyZSBhbmQgbm90Ci0JICogaW4gcGFfc2hhcmRf c3RhdHNfdC4KLQkgKi8KLQlzaXplX3QJCQliYXNlOyAvKiBEZXJpdmVkLiAqLwotCXNpemVfdAkJ CXJlc2lkZW50OyAvKiBEZXJpdmVkLiAqLwotCXNpemVfdAkJCW1ldGFkYXRhX3RocDsgLyogRGVy aXZlZC4gKi8KLQlzaXplX3QJCQltYXBwZWQ7IC8qIERlcml2ZWQuICovCi0KLQlhdG9taWNfenVf dAkJaW50ZXJuYWw7Ci0KLQlzaXplX3QJCQlhbGxvY2F0ZWRfbGFyZ2U7IC8qIERlcml2ZWQuICov Ci0JdWludDY0X3QJCW5tYWxsb2NfbGFyZ2U7IC8qIERlcml2ZWQuICovCi0JdWludDY0X3QJCW5k YWxsb2NfbGFyZ2U7IC8qIERlcml2ZWQuICovCi0JdWludDY0X3QJCW5maWxsc19sYXJnZTsgLyog RGVyaXZlZC4gKi8KLQl1aW50NjRfdAkJbmZsdXNoZXNfbGFyZ2U7IC8qIERlcml2ZWQuICovCi0J dWludDY0X3QJCW5yZXF1ZXN0c19sYXJnZTsgLyogRGVyaXZlZC4gKi8KLQotCS8qCi0JICogVGhl IHN0YXRzIGxvZ2ljYWxseSBvd25lZCBieSB0aGUgcGFfc2hhcmQgaW4gdGhlIHNhbWUgYXJlbmEu ICBUaGlzCi0JICogbGl2ZXMgaGVyZSBvbmx5IGJlY2F1c2UgaXQncyBjb252ZW5pZW50IGZvciB0 aGUgcHVycG9zZXMgb2YgdGhlIGN0bAotCSAqIG1vZHVsZSAtLSBpdCBvbmx5IGtub3dzIGFib3V0 IHRoZSBzaW5nbGUgYXJlbmFfc3RhdHMuCi0JICovCi0JcGFfc2hhcmRfc3RhdHNfdAlwYV9zaGFy ZF9zdGF0czsKLQotCS8qIE51bWJlciBvZiBieXRlcyBjYWNoZWQgaW4gdGNhY2hlIGFzc29jaWF0 ZWQgd2l0aCB0aGlzIGFyZW5hLiAqLwotCXNpemVfdAkJCXRjYWNoZV9ieXRlczsgLyogRGVyaXZl ZC4gKi8KLQlzaXplX3QJCQl0Y2FjaGVfc3Rhc2hlZF9ieXRlczsgLyogRGVyaXZlZC4gKi8KLQot CW11dGV4X3Byb2ZfZGF0YV90IG11dGV4X3Byb2ZfZGF0YVttdXRleF9wcm9mX251bV9hcmVuYV9t dXRleGVzXTsKLQotCS8qIE9uZSBlbGVtZW50IGZvciBlYWNoIGxhcmdlIHNpemUgY2xhc3MuICov Ci0JYXJlbmFfc3RhdHNfbGFyZ2VfdAlsc3RhdHNbU0NfTlNJWkVTIC0gU0NfTkJJTlNdOwotCi0J LyogQXJlbmEgdXB0aW1lLiAqLwotCW5zdGltZV90CQl1cHRpbWU7Ci19OwotCi1zdGF0aWMgaW5s aW5lIGJvb2wKLWFyZW5hX3N0YXRzX2luaXQodHNkbl90ICp0c2RuLCBhcmVuYV9zdGF0c190ICph cmVuYV9zdGF0cykgewotCWlmIChjb25maWdfZGVidWcpIHsKLQkJZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBzaXplb2YoYXJlbmFfc3RhdHNfdCk7IGkrKykgewotCQkJYXNzZXJ0KCgoY2hhciAqKWFy ZW5hX3N0YXRzKVtpXSA9PSAwKTsKLQkJfQotCX0KLQlpZiAoTE9DS0VESU5UX01UWF9JTklUKGFy ZW5hX3N0YXRzLT5tdHgsICJhcmVuYV9zdGF0cyIsCi0JICAgIFdJVE5FU1NfUkFOS19BUkVOQV9T VEFUUywgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9 Ci0JLyogTWVtb3J5IGlzIHplcm9lZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjbGVhciBzdGF0 cy4gKi8KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYXJlbmFfc3Rh dHNfbGFyZ2VfZmx1c2hfbnJlcXVlc3RzX2FkZCh0c2RuX3QgKnRzZG4sIGFyZW5hX3N0YXRzX3Qg KmFyZW5hX3N0YXRzLAotICAgIHN6aW5kX3Qgc3ppbmQsIHVpbnQ2NF90IG5yZXF1ZXN0cykgewot CUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCBhcmVuYV9zdGF0cy0+bXR4KTsKLQlhcmVuYV9zdGF0 c19sYXJnZV90ICpsc3RhdHMgPSAmYXJlbmFfc3RhdHMtPmxzdGF0c1tzemluZCAtIFNDX05CSU5T XTsKLQlsb2NrZWRfaW5jX3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKGFyZW5hX3N0YXRzLT5tdHgp LAotCSAgICAmbHN0YXRzLT5ucmVxdWVzdHMsIG5yZXF1ZXN0cyk7Ci0JbG9ja2VkX2luY191NjQo dHNkbiwgTE9DS0VESU5UX01UWChhcmVuYV9zdGF0cy0+bXR4KSwKLQkgICAgJmxzdGF0cy0+bmZs dXNoZXMsIDEpOwotCUxPQ0tFRElOVF9NVFhfVU5MT0NLKHRzZG4sIGFyZW5hX3N0YXRzLT5tdHgp OwotfQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVJFTkFfU1RBVFNfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvYXJlbmFfc3RydWN0cy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV9zdHJ1Y3Rz LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYTVhNDAuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9hcmVuYV9zdHJ1Y3RzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAot I2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9TVFJVQ1RTX0gKLSNkZWZpbmUgSkVNQUxM T0NfSU5URVJOQUxfQVJFTkFfU1RSVUNUU19ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9hcmVuYV9zdGF0cy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Jpbi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2JpdG1hcC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2NvdW50ZXIuaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lY2FjaGUuaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9lZGF0YV9jYWNoZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4 dGVudF9kc3MuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5h bF90eXBlcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvbnN0aW1lLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvcGEuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9xbC5oIgotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3NjLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdGlja2Vy LmgiCi0KLXN0cnVjdCBhcmVuYV9zIHsKLQkvKgotCSAqIE51bWJlciBvZiB0aHJlYWRzIGN1cnJl bnRseSBhc3NpZ25lZCB0byB0aGlzIGFyZW5hLiAgRWFjaCB0aHJlYWQgaGFzCi0JICogdHdvIGRp c3RpbmN0IGFzc2lnbm1lbnRzLCBvbmUgZm9yIGFwcGxpY2F0aW9uLXNlcnZpbmcgYWxsb2NhdGlv biwgYW5kCi0JICogdGhlIG90aGVyIGZvciBpbnRlcm5hbCBtZXRhZGF0YSBhbGxvY2F0aW9uLiAg SW50ZXJuYWwgbWV0YWRhdGEgbXVzdAotCSAqIG5vdCBiZSBhbGxvY2F0ZWQgZnJvbSBhcmVuYXMg ZXhwbGljaXRseSBjcmVhdGVkIHZpYSB0aGUgYXJlbmFzLmNyZWF0ZQotCSAqIG1hbGxjdGwsIGJl Y2F1c2UgdGhlIGFyZW5hLjxpPi5yZXNldCBtYWxsY3RsIGluZGlzY3JpbWluYXRlbHkKLQkgKiBk aXNjYXJkcyBhbGwgYWxsb2NhdGlvbnMgZm9yIHRoZSBhZmZlY3RlZCBhcmVuYS4KLQkgKgotCSAq ICAgMDogQXBwbGljYXRpb24gYWxsb2NhdGlvbi4KLQkgKiAgIDE6IEludGVybmFsIG1ldGFkYXRh IGFsbG9jYXRpb24uCi0JICoKLQkgKiBTeW5jaHJvbml6YXRpb246IGF0b21pYy4KLQkgKi8KLQlh dG9taWNfdV90CQludGhyZWFkc1syXTsKLQotCS8qIE5leHQgYmluIHNoYXJkIGZvciBiaW5kaW5n IG5ldyB0aHJlYWRzLiBTeW5jaHJvbml6YXRpb246IGF0b21pYy4gKi8KLQlhdG9taWNfdV90CQli aW5zaGFyZF9uZXh0OwotCi0JLyoKLQkgKiBXaGVuIHBlcmNwdV9hcmVuYSBpcyBlbmFibGVkLCB0 byBhbW9ydGl6ZSB0aGUgY29zdCBvZiByZWFkaW5nIC8KLQkgKiB1cGRhdGluZyB0aGUgY3VycmVu dCBDUFUgaWQsIHRyYWNrIHRoZSBtb3N0IHJlY2VudCB0aHJlYWQgYWNjZXNzaW5nCi0JICogdGhp cyBhcmVuYSwgYW5kIG9ubHkgcmVhZCBDUFUgaWYgdGhlcmUgaXMgYSBtaXNtYXRjaC4KLQkgKi8K LQl0c2RuX3QJCSpsYXN0X3RoZDsKLQotCS8qIFN5bmNocm9uaXphdGlvbjogaW50ZXJuYWwuICov Ci0JYXJlbmFfc3RhdHNfdAkJc3RhdHM7Ci0KLQkvKgotCSAqIExpc3RzIG9mIHRjYWNoZXMgYW5k IGNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9ycyBmb3IgZXh0YW50IHRocmVhZHMKLQkgKiBhc3Nv Y2lhdGVkIHdpdGggdGhpcyBhcmVuYS4gIFN0YXRzIGZyb20gdGhlc2UgYXJlIG1lcmdlZAotCSAq IGluY3JlbWVudGFsbHksIGFuZCBhdCBleGl0IGlmIG9wdF9zdGF0c19wcmludCBpcyBlbmFibGVk LgotCSAqCi0JICogU3luY2hyb25pemF0aW9uOiB0Y2FjaGVfcWxfbXR4LgotCSAqLwotCXFsX2hl YWQodGNhY2hlX3Nsb3dfdCkJCQl0Y2FjaGVfcWw7Ci0JcWxfaGVhZChjYWNoZV9iaW5fYXJyYXlf ZGVzY3JpcHRvcl90KQljYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9xbDsKLQltYWxsb2NfbXV0 ZXhfdAkJCQl0Y2FjaGVfcWxfbXR4OwotCi0JLyoKLQkgKiBSZXByZXNlbnRzIGEgZHNzX3ByZWNf dCwgYnV0IGF0b21pY2FsbHkuCi0JICoKLQkgKiBTeW5jaHJvbml6YXRpb246IGF0b21pYy4KLQkg Ki8KLQlhdG9taWNfdV90CQlkc3NfcHJlYzsKLQotCS8qCi0JICogRXh0YW50IGxhcmdlIGFsbG9j YXRpb25zLgotCSAqCi0JICogU3luY2hyb25pemF0aW9uOiBsYXJnZV9tdHguCi0JICovCi0JZWRh dGFfbGlzdF9hY3RpdmVfdAlsYXJnZTsKLQkvKiBTeW5jaHJvbml6ZXMgYWxsIGxhcmdlIGFsbG9j YXRpb24vdXBkYXRlL2RlYWxsb2NhdGlvbi4gKi8KLQltYWxsb2NfbXV0ZXhfdAkJbGFyZ2VfbXR4 OwotCi0JLyogVGhlIHBhZ2UtbGV2ZWwgYWxsb2NhdG9yIHNoYXJkIHRoaXMgYXJlbmEgdXNlcy4g Ki8KLQlwYV9zaGFyZF90CQlwYV9zaGFyZDsKLQotCS8qCi0JICogQSBjYWNoZWQgY29weSBvZiBi YXNlLT5pbmQuICBUaGlzIGNhbiBnZXQgYWNjZXNzZWQgb24gaG90IHBhdGhzOwotCSAqIGxvb2tp bmcgaXQgdXAgaW4gYmFzZSByZXF1aXJlcyBhbiBleHRyYSBwb2ludGVyIGhvcCAvIGNhY2hlIG1p c3MuCi0JICovCi0JdW5zaWduZWQgaW5kOwotCi0JLyoKLQkgKiBCYXNlIGFsbG9jYXRvciwgZnJv bSB3aGljaCBhcmVuYSBtZXRhZGF0YSBhcmUgYWxsb2NhdGVkLgotCSAqCi0JICogU3luY2hyb25p emF0aW9uOiBpbnRlcm5hbC4KLQkgKi8KLQliYXNlX3QJCQkqYmFzZTsKLQkvKiBVc2VkIHRvIGRl dGVybWluZSB1cHRpbWUuICBSZWFkLW9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uICovCi0JbnN0 aW1lX3QJCWNyZWF0ZV90aW1lOwotCi0JLyoKLQkgKiBUaGUgYXJlbmEgaXMgYWxsb2NhdGVkIGFs b25nc2lkZSBpdHMgYmluczsgcmVhbGx5IHRoaXMgaXMgYQotCSAqIGR5bmFtaWNhbGx5IHNpemVk IGFycmF5IGRldGVybWluZWQgYnkgdGhlIGJpbnNoYXJkIHNldHRpbmdzLgotCSAqLwotCWJpbl90 CQkJYmluc1swXTsKLX07Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9TVFJV Q1RTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2FyZW5hX3R5cGVzLmggYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Fy ZW5hX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTEyOTEuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAs MCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BUkVOQV9UWVBFU19ICi0jZGVmaW5lIEpF TUFMTE9DX0lOVEVSTkFMX0FSRU5BX1RZUEVTX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL3NjLmgiCi0KLS8qIERlZmF1bHQgZGVjYXkgdGltZXMgaW4gbWlsbGlzZWNvbmRzLiAqLwot I2RlZmluZSBESVJUWV9ERUNBWV9NU19ERUZBVUxUCVpEKDEwICogMTAwMCkKLSNkZWZpbmUgTVVa WllfREVDQVlfTVNfREVGQVVMVAkoMCkKLS8qIE51bWJlciBvZiBldmVudCB0aWNrcyBiZXR3ZWVu IHRpbWUgY2hlY2tzLiAqLwotI2RlZmluZSBBUkVOQV9ERUNBWV9OVElDS1NfUEVSX1VQREFURQkx MDAwCi0KLXR5cGVkZWYgc3RydWN0IGFyZW5hX2RlY2F5X3MgYXJlbmFfZGVjYXlfdDsKLXR5cGVk ZWYgc3RydWN0IGFyZW5hX3MgYXJlbmFfdDsKLQotdHlwZWRlZiBlbnVtIHsKLQlwZXJjcHVfYXJl bmFfbW9kZV9uYW1lc19iYXNlICAgPSAwLCAvKiBVc2VkIGZvciBvcHRpb25zIHByb2Nlc3Npbmcu ICovCi0KLQkvKgotCSAqICpfdW5pbml0IGFyZSB1c2VkIG9ubHkgZHVyaW5nIGJvb3RzdHJhcHBp bmcsIGFuZCBtdXN0IGNvcnJlc3BvbmQKLQkgKiB0byBpbml0aWFsaXplZCB2YXJpYW50IHBsdXMg cGVyY3B1X2FyZW5hX21vZGVfZW5hYmxlZF9iYXNlLgotCSAqLwotCXBlcmNwdV9hcmVuYV91bmlu aXQgICAgICAgICAgICA9IDAsCi0JcGVyX3BoeWNwdV9hcmVuYV91bmluaXQgICAgICAgID0gMSwK LQotCS8qIEFsbCBub24tZGlzYWJsZWQgbW9kZXMgbXVzdCBjb21lIGFmdGVyIHBlcmNwdV9hcmVu YV9kaXNhYmxlZC4gKi8KLQlwZXJjcHVfYXJlbmFfZGlzYWJsZWQgICAgICAgICAgPSAyLAotCi0J cGVyY3B1X2FyZW5hX21vZGVfbmFtZXNfbGltaXQgID0gMywgLyogVXNlZCBmb3Igb3B0aW9ucyBw cm9jZXNzaW5nLiAqLwotCXBlcmNwdV9hcmVuYV9tb2RlX2VuYWJsZWRfYmFzZSA9IDMsCi0KLQlw ZXJjcHVfYXJlbmEgICAgICAgICAgICAgICAgICAgPSAzLAotCXBlcl9waHljcHVfYXJlbmEgICAg ICAgICAgICAgICA9IDQgIC8qIEh5cGVyIHRocmVhZHMgc2hhcmUgYXJlbmEuICovCi19IHBlcmNw dV9hcmVuYV9tb2RlX3Q7Ci0KLSNkZWZpbmUgUEVSQ1BVX0FSRU5BX0VOQUJMRUQobSkJKChtKSA+ PSBwZXJjcHVfYXJlbmFfbW9kZV9lbmFibGVkX2Jhc2UpCi0jZGVmaW5lIFBFUkNQVV9BUkVOQV9E RUZBVUxUCXBlcmNwdV9hcmVuYV9kaXNhYmxlZAotCi0vKgotICogV2hlbiBhbGxvY2F0aW9uX3Np emUgPj0gb3ZlcnNpemVfdGhyZXNob2xkLCB1c2UgdGhlIGRlZGljYXRlZCBodWdlIGFyZW5hCi0g KiAodW5sZXNzIGhhdmUgZXhwbGljaXRseSBzcGljaWZpZWQgYXJlbmEgaW5kZXgpLiAgMCBkaXNh YmxlcyB0aGUgZmVhdHVyZS4KLSAqLwotI2RlZmluZSBPVkVSU0laRV9USFJFU0hPTERfREVGQVVM VCAoOCA8PCAyMCkKLQotc3RydWN0IGFyZW5hX2NvbmZpZ19zIHsKLQkvKiBleHRlbnQgaG9va3Mg dG8gYmUgdXNlZCBmb3IgdGhlIGFyZW5hICovCi0JZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29r czsKLQotCS8qCi0JICogVXNlIGV4dGVudCBob29rcyBmb3IgbWV0YWRhdGEgKGJhc2UpIGFsbG9j YXRpb25zIHdoZW4gdHJ1ZS4KLQkgKi8KLQlib29sIG1ldGFkYXRhX3VzZV9ob29rczsKLX07Ci0K LXR5cGVkZWYgc3RydWN0IGFyZW5hX2NvbmZpZ19zIGFyZW5hX2NvbmZpZ190OwotCi1leHRlcm4g Y29uc3QgYXJlbmFfY29uZmlnX3QgYXJlbmFfY29uZmlnX2RlZmF1bHQ7Ci0KLSNlbmRpZiAvKiBK RU1BTExPQ19JTlRFUk5BTF9BUkVOQV9UWVBFU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9h c3NlcnQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGJlNGQ0NWIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaAorKysgL2Rldi9udWxsCkBA IC0xLDU2ICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC91dGlsLmgiCi0KLS8qCi0gKiBEZWZpbmUgYSBj dXN0b20gYXNzZXJ0KCkgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBjaGFuY2VzIG9mIGRlYWRsb2Nr IGR1cmluZwotICogYXNzZXJ0aW9uIGZhaWx1cmUuCi0gKi8KLSNpZm5kZWYgYXNzZXJ0Ci0jZGVm aW5lIGFzc2VydChlKSBkbyB7CQkJCQkJCVwKLQlpZiAodW5saWtlbHkoY29uZmlnX2RlYnVnICYm ICEoZSkpKSB7CQkJCVwKLQkJbWFsbG9jX3ByaW50ZigJCQkJCQlcCi0JCSAgICAiPGplbWFsbG9j PjogJXM6JWQ6IEZhaWxlZCBhc3NlcnRpb246IFwiJXNcIlxuIiwJXAotCQkgICAgX19GSUxFX18s IF9fTElORV9fLCAjZSk7CQkJCVwKLQkJYWJvcnQoKTsJCQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3 aGlsZSAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIG5vdF9yZWFjaGVkCi0jZGVmaW5lIG5vdF9yZWFj aGVkKCkgZG8gewkJCQkJCVwKLQlpZiAoY29uZmlnX2RlYnVnKSB7CQkJCQkJXAotCQltYWxsb2Nf cHJpbnRmKAkJCQkJCVwKLQkJICAgICI8amVtYWxsb2M+OiAlczolZDogVW5yZWFjaGFibGUgY29k ZSByZWFjaGVkXG4iLAlcCi0JCSAgICBfX0ZJTEVfXywgX19MSU5FX18pOwkJCQlcCi0JCWFib3J0 KCk7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQl1bnJlYWNoYWJsZSgpOwkJCQkJCQlcCi19IHdoaWxl ICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgbm90X2ltcGxlbWVudGVkCi0jZGVmaW5lIG5vdF9pbXBs ZW1lbnRlZCgpIGRvIHsJCQkJCQlcCi0JaWYgKGNvbmZpZ19kZWJ1ZykgewkJCQkJCVwKLQkJbWFs bG9jX3ByaW50ZigiPGplbWFsbG9jPjogJXM6JWQ6IE5vdCBpbXBsZW1lbnRlZFxuIiwJXAotCQkg ICAgX19GSUxFX18sIF9fTElORV9fKTsJCQkJXAotCQlhYm9ydCgpOwkJCQkJCVwKLQl9CQkJCQkJ CQlcCi19IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgYXNzZXJ0X25vdF9pbXBsZW1lbnRl ZAotI2RlZmluZSBhc3NlcnRfbm90X2ltcGxlbWVudGVkKGUpIGRvIHsJCQkJCVwKLQlpZiAodW5s aWtlbHkoY29uZmlnX2RlYnVnICYmICEoZSkpKSB7CQkJCVwKLQkJbm90X2ltcGxlbWVudGVkKCk7 CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKiBVc2UgdG8gYXNz ZXJ0IGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uLCBlLmcuLCBjYXNzZXJ0KGNvbmZpZ19kZWJ1 ZykuICovCi0jaWZuZGVmIGNhc3NlcnQKLSNkZWZpbmUgY2Fzc2VydChjKSBkbyB7CQkJCQkJCVwK LQlpZiAodW5saWtlbHkoIShjKSkpIHsJCQkJCQlcCi0JCW5vdF9yZWFjaGVkKCk7CQkJCQkJXAot CX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2F0 b21pYy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YzBmNzMxMi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2F0b21pYy5oCisrKyAvZGV2L251bGwKQEAg LTEsMTA3ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0gKLSNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0gKLQotI2RlZmluZSBBVE9NSUNfSU5MSU5FIEpF TUFMTE9DX0FMV0FZU19JTkxJTkUKLQotI2RlZmluZSBKRU1BTExPQ19VOF9BVE9NSUNTCi0jaWYg ZGVmaW5lZChKRU1BTExPQ19HQ0NfQVRPTUlDX0FUT01JQ1MpCi0jICBpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9hdG9taWNfZ2NjX2F0b21pYy5oIgotIyAgaWYgIWRlZmluZWQoSkVNQUxMT0Nf R0NDX1U4X0FUT01JQ19BVE9NSUNTKQotIyAgICB1bmRlZiBKRU1BTExPQ19VOF9BVE9NSUNTCi0j ICBlbmRpZgotI2VsaWYgZGVmaW5lZChKRU1BTExPQ19HQ0NfU1lOQ19BVE9NSUNTKQotIyAgaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX2djY19zeW5jLmgiCi0jICBpZiAhZGVmaW5l ZChKRU1BTExPQ19HQ0NfVThfU1lOQ19BVE9NSUNTKQotIyAgICB1bmRlZiBKRU1BTExPQ19VOF9B VE9NSUNTCi0jICBlbmRpZgotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSMgIGluY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2F0b21pY19tc3ZjLmgiCi0jZWxpZiBkZWZpbmVkKEpFTUFMTE9DX0Mx MV9BVE9NSUNTKQotIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX2MxMS5oIgot I2Vsc2UKLSMgIGVycm9yICJEb24ndCBoYXZlIGF0b21pY3MgaW1wbGVtZW50ZWQgb24gdGhpcyBw bGF0Zm9ybS4iCi0jZW5kaWYKLQotLyoKLSAqIFRoaXMgaGVhZGVyIGdpdmVzIG1vcmUgb3IgbGVz cyBhIGJhY2twb3J0IG9mIEMxMSBhdG9taWNzLiBUaGUgdXNlciBjYW4gd3JpdGUKLSAqIEpFTUFM TE9DX0dFTkVSQVRFX0FUT01JQ1ModHlwZSwgc2hvcnRfdHlwZSwgbGdfc2l6ZW9mX3R5cGUpOyB0 byBnZW5lcmF0ZQotICogY291bnRlcnBhcnRzIG9mIHRoZSBDMTEgYXRvbWljIGZ1bmN0aW9ucyBm b3IgdHlwZSwgYXMgc286Ci0gKiAgIEpFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1MoaW50ICosIHBp LCAzKTsKLSAqIGFuZCB0aGVuIHdyaXRlIHRoaW5ncyBsaWtlOgotICogICBpbnQgKnNvbWVfcHRy OwotICogICBhdG9taWNfcGlfdCBhdG9taWNfcHRyX3RvX2ludDsKLSAqICAgYXRvbWljX3N0b3Jl X3BpKCZhdG9taWNfcHRyX3RvX2ludCwgc29tZV9wdHIsIEFUT01JQ19SRUxBWEVEKTsKLSAqICAg aW50ICpwcmV2X3ZhbHVlID0gYXRvbWljX2V4Y2hhbmdlX3BpKCZwdHJfdG9faW50LCBOVUxMLCBB VE9NSUNfQUNRX1JFTCk7Ci0gKiAgIGFzc2VydChzb21lX3B0ciA9PSBwcmV2X3ZhbHVlKTsKLSAq IGFuZCBleHBlY3QgdGhpbmdzIHRvIHdvcmsgaW4gdGhlIG9idmlvdXMgd2F5LgotICoKLSAqIEFs c28gaW5jbHVkZWQgKHdpdGggbmFtaW5nIGRpZmZlcmVuY2VzIHRvIGF2b2lkIGNvbmZsaWN0cyB3 aXRoIHRoZSBzdGFuZGFyZAotICogbGlicmFyeSk6Ci0gKiAgIGF0b21pY19mZW5jZShhdG9taWNf bWVtb3J5X29yZGVyX3QpIChtaW1pY3MgQzExJ3MgYXRvbWljX3RocmVhZF9mZW5jZSkuCi0gKiAg IEFUT01JQ19JTklUIChtaW1pY3MgQzExJ3MgQVRPTUlDX1ZBUl9JTklUKS4KLSAqLwotCi0vKgot ICogUHVyZSBjb252ZW5pZW5jZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHR5cGUgImF0b21p Y19tZW1vcnlfb3JkZXJfIgotICogcXVpdGUgc28gb2Z0ZW4uCi0gKi8KLSNkZWZpbmUgQVRPTUlD X1JFTEFYRUQgYXRvbWljX21lbW9yeV9vcmRlcl9yZWxheGVkCi0jZGVmaW5lIEFUT01JQ19BQ1FV SVJFIGF0b21pY19tZW1vcnlfb3JkZXJfYWNxdWlyZQotI2RlZmluZSBBVE9NSUNfUkVMRUFTRSBh dG9taWNfbWVtb3J5X29yZGVyX3JlbGVhc2UKLSNkZWZpbmUgQVRPTUlDX0FDUV9SRUwgYXRvbWlj X21lbW9yeV9vcmRlcl9hY3FfcmVsCi0jZGVmaW5lIEFUT01JQ19TRVFfQ1NUIGF0b21pY19tZW1v cnlfb3JkZXJfc2VxX2NzdAotCi0vKgotICogQW5vdGhlciBjb252ZW5pZW5jZSAtLSBzaW1wbGUg YXRvbWljIGhlbHBlciBmdW5jdGlvbnMuCi0gKi8KLSNkZWZpbmUgSkVNQUxMT0NfR0VORVJBVEVf RVhQQU5ERURfSU5UX0FUT01JQ1ModHlwZSwgc2hvcnRfdHlwZSwJXAotICAgIGxnX3NpemUpCQkJ CQkJCQlcCi0gICAgSkVNQUxMT0NfR0VORVJBVEVfSU5UX0FUT01JQ1ModHlwZSwgc2hvcnRfdHlw ZSwgbGdfc2l6ZSkJCVwKLSAgICBBVE9NSUNfSU5MSU5FIHZvaWQJCQkJCQkJXAotICAgIGF0b21p Y19sb2FkX2FkZF9zdG9yZV8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEs CVwKLQl0eXBlIGluYykgewkJCQkJCQlcCi0JICAgIHR5cGUgb2xkdmFsID0gYXRvbWljX2xvYWRf IyNzaG9ydF90eXBlKGEsIEFUT01JQ19SRUxBWEVEKTsJXAotCSAgICB0eXBlIG5ld3ZhbCA9IG9s ZHZhbCArIGluYzsJCQkJCVwKLQkgICAgYXRvbWljX3N0b3JlXyMjc2hvcnRfdHlwZShhLCBuZXd2 YWwsIEFUT01JQ19SRUxBWEVEKTsJXAotCX0JCQkJCQkJCVwKLSAgICBBVE9NSUNfSU5MSU5FIHZv aWQJCQkJCQkJXAotICAgIGF0b21pY19sb2FkX3N1Yl9zdG9yZV8jI3Nob3J0X3R5cGUoYXRvbWlj XyMjc2hvcnRfdHlwZSMjX3QgKmEsCVwKLQl0eXBlIGluYykgewkJCQkJCQlcCi0JICAgIHR5cGUg b2xkdmFsID0gYXRvbWljX2xvYWRfIyNzaG9ydF90eXBlKGEsIEFUT01JQ19SRUxBWEVEKTsJXAot CSAgICB0eXBlIG5ld3ZhbCA9IG9sZHZhbCAtIGluYzsJCQkJCVwKLQkgICAgYXRvbWljX3N0b3Jl XyMjc2hvcnRfdHlwZShhLCBuZXd2YWwsIEFUT01JQ19SRUxBWEVEKTsJXAotCX0KLQotLyoKLSAq IE5vdCBhbGwgcGxhdGZvcm1zIGhhdmUgNjQtYml0IGF0b21pY3MuICBJZiB3ZSBkbywgdGhpcyAj ZGVmaW5lIGV4cG9zZXMgdGhhdAotICogZmFjdC4KLSAqLwotI2lmIChMR19TSVpFT0ZfUFRSID09 IDMgfHwgTEdfU0laRU9GX0lOVCA9PSAzKQotIyAgZGVmaW5lIEpFTUFMTE9DX0FUT01JQ19VNjQK LSNlbmRpZgotCi1KRU1BTExPQ19HRU5FUkFURV9BVE9NSUNTKHZvaWQgKiwgcCwgTEdfU0laRU9G X1BUUikKLQotLyoKLSAqIFRoZXJlJ3Mgbm8gYWN0dWFsIGd1YXJhbnRlZSB0aGF0IHNpemVvZihi b29sKSA9PSAxLCBidXQgaXQncyB0cnVlIG9uIHRoZSBvbmx5Ci0gKiBwbGF0Zm9ybSB0aGF0IGFj dHVhbGx5IG5lZWRzIHRvIGtub3cgdGhlIHNpemUsIE1TVkMuCi0gKi8KLUpFTUFMTE9DX0dFTkVS QVRFX0FUT01JQ1MoYm9vbCwgYiwgMCkKLQotSkVNQUxMT0NfR0VORVJBVEVfRVhQQU5ERURfSU5U X0FUT01JQ1ModW5zaWduZWQsIHUsIExHX1NJWkVPRl9JTlQpCi0KLUpFTUFMTE9DX0dFTkVSQVRF X0VYUEFOREVEX0lOVF9BVE9NSUNTKHNpemVfdCwgenUsIExHX1NJWkVPRl9QVFIpCi0KLUpFTUFM TE9DX0dFTkVSQVRFX0VYUEFOREVEX0lOVF9BVE9NSUNTKHNzaXplX3QsIHpkLCBMR19TSVpFT0Zf UFRSKQotCi1KRU1BTExPQ19HRU5FUkFURV9FWFBBTkRFRF9JTlRfQVRPTUlDUyh1aW50OF90LCB1 OCwgMCkKLQotSkVNQUxMT0NfR0VORVJBVEVfRVhQQU5ERURfSU5UX0FUT01JQ1ModWludDMyX3Qs IHUzMiwgMikKLQotI2lmZGVmIEpFTUFMTE9DX0FUT01JQ19VNjQKLUpFTUFMTE9DX0dFTkVSQVRF X0VYUEFOREVEX0lOVF9BVE9NSUNTKHVpbnQ2NF90LCB1NjQsIDMpCi0jZW5kaWYKLQotI3VuZGVm IEFUT01JQ19JTkxJTkUKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19IICov CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hdG9taWNfYzExLmggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2F0b21pY19jMTEu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmOTMxMy4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2F0b21pY19jMTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSNpZm5k ZWYgSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0MxMV9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVS TkFMX0FUT01JQ19DMTFfSAotCi0jaW5jbHVkZSA8c3RkYXRvbWljLmg+Ci0KLSNkZWZpbmUgQVRP TUlDX0lOSVQoLi4uKSBBVE9NSUNfVkFSX0lOSVQoX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXRv bWljX21lbW9yeV9vcmRlcl90IG1lbW9yeV9vcmRlcgotI2RlZmluZSBhdG9taWNfbWVtb3J5X29y ZGVyX3JlbGF4ZWQgbWVtb3J5X29yZGVyX3JlbGF4ZWQKLSNkZWZpbmUgYXRvbWljX21lbW9yeV9v cmRlcl9hY3F1aXJlIG1lbW9yeV9vcmRlcl9hY3F1aXJlCi0jZGVmaW5lIGF0b21pY19tZW1vcnlf b3JkZXJfcmVsZWFzZSBtZW1vcnlfb3JkZXJfcmVsZWFzZQotI2RlZmluZSBhdG9taWNfbWVtb3J5 X29yZGVyX2FjcV9yZWwgbWVtb3J5X29yZGVyX2FjcV9yZWwKLSNkZWZpbmUgYXRvbWljX21lbW9y eV9vcmRlcl9zZXFfY3N0IG1lbW9yeV9vcmRlcl9zZXFfY3N0Ci0KLSNkZWZpbmUgYXRvbWljX2Zl bmNlIGF0b21pY190aHJlYWRfZmVuY2UKLQotI2RlZmluZSBKRU1BTExPQ19HRU5FUkFURV9BVE9N SUNTKHR5cGUsIHNob3J0X3R5cGUsCQkJXAotICAgIC8qIHVudXNlZCAqLyBsZ19zaXplKQkJCQkJ CVwKLXR5cGVkZWYgX0F0b21pYyh0eXBlKSBhdG9taWNfIyNzaG9ydF90eXBlIyNfdDsJCQkJXAot CQkJCQkJCQkJXAotQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKLWF0b21pY19sb2FkXyMjc2hv cnRfdHlwZShjb25zdCBhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJCVwKLSAgICBhdG9taWNf bWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCi0JLyoJCQkJCQkJCVwKLQkgKiBBIHN0cmljdCBp bnRlcnByZXRhdGlvbiBvZiB0aGUgQyBzdGFuZGFyZCBwcmV2ZW50cwkJXAotCSAqIGF0b21pY19s b2FkIGZyb20gdGFraW5nIGEgY29uc3QgYXJndW1lbnQsIGJ1dCBpdCdzCQlcCi0JICogY29udmVu aWVudCBmb3Igb3VyIHB1cnBvc2VzLiBUaGlzIGNhc3QgaXMgYSB3b3JrYXJvdW5kLglcCi0JICov CQkJCQkJCQlcCi0JYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QqIGFfbm9uY29uc3QgPQkJCQlcCi0J ICAgIChhdG9taWNfIyNzaG9ydF90eXBlIyNfdCopYTsJCQkJXAotCXJldHVybiBhdG9taWNfbG9h ZF9leHBsaWNpdChhX25vbmNvbnN0LCBtbyk7CQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwK LUFUT01JQ19JTkxJTkUgdm9pZAkJCQkJCQlcCi1hdG9taWNfc3RvcmVfIyNzaG9ydF90eXBlKGF0 b21pY18jI3Nob3J0X3R5cGUjI190ICphLAkJCVwKLSAgICB0eXBlIHZhbCwgYXRvbWljX21lbW9y eV9vcmRlcl90IG1vKSB7CQkJCVwKLQlhdG9taWNfc3RvcmVfZXhwbGljaXQoYSwgdmFsLCBtbyk7 CQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJ XAotYXRvbWljX2V4Y2hhbmdlXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAq YSwgdHlwZSB2YWwsCVwKLSAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCi0J cmV0dXJuIGF0b21pY19leGNoYW5nZV9leHBsaWNpdChhLCB2YWwsIG1vKTsJCQlcCi19CQkJCQkJ CQkJXAotCQkJCQkJCQkJXAotQVRPTUlDX0lOTElORSBib29sCQkJCQkJCVwKLWF0b21pY19jb21w YXJlX2V4Y2hhbmdlX3dlYWtfIyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICph LAlcCi0gICAgdHlwZSAqZXhwZWN0ZWQsIHR5cGUgZGVzaXJlZCwgYXRvbWljX21lbW9yeV9vcmRl cl90IHN1Y2Nlc3NfbW8sCVwKLSAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgZmFpbHVyZV9tbykg ewkJCQkJXAotCXJldHVybiBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KGEs IGV4cGVjdGVkLAlcCi0JICAgIGRlc2lyZWQsIHN1Y2Nlc3NfbW8sIGZhaWx1cmVfbW8pOwkJCQlc Ci19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotQVRPTUlDX0lOTElORSBib29sCQkJCQkJCVwKLWF0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ18jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRf dHlwZSMjX3QgKmEsCVwKLSAgICB0eXBlICpleHBlY3RlZCwgdHlwZSBkZXNpcmVkLCBhdG9taWNf bWVtb3J5X29yZGVyX3Qgc3VjY2Vzc19tbywJXAotICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBm YWlsdXJlX21vKSB7CQkJCQlcCi0JcmV0dXJuIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9u Z19leHBsaWNpdChhLCBleHBlY3RlZCwJXAotCSAgICBkZXNpcmVkLCBzdWNjZXNzX21vLCBmYWls dXJlX21vKTsJCQkJXAotfQotCi0vKgotICogSW50ZWdyYWwgdHlwZXMgaGF2ZSBzb21lIHNwZWNp YWwgb3BlcmF0aW9ucyBhdmFpbGFibGUgdGhhdCBub24taW50ZWdyYWwgb25lcwotICogbGFjay4K LSAqLwotI2RlZmluZSBKRU1BTExPQ19HRU5FUkFURV9JTlRfQVRPTUlDUyh0eXBlLCBzaG9ydF90 eXBlLCAJCVwKLSAgICAvKiB1bnVzZWQgKi8gbGdfc2l6ZSkJCQkJCQlcCi1KRU1BTExPQ19HRU5F UkFURV9BVE9NSUNTKHR5cGUsIHNob3J0X3R5cGUsIC8qIHVudXNlZCAqLyBsZ19zaXplKQlcCi0J CQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAotYXRvbWljX2ZldGNoX2FkZF8j I3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCQlcCi0gICAgdHlwZSB2YWws IGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQlcCi0JcmV0dXJuIGF0b21pY19mZXRjaF9h ZGRfZXhwbGljaXQoYSwgdmFsLCBtbyk7CQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLUFU T01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCi1hdG9taWNfZmV0Y2hfc3ViXyMjc2hvcnRfdHlwZShh dG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJCVwKLSAgICB0eXBlIHZhbCwgYXRvbWljX21lbW9y eV9vcmRlcl90IG1vKSB7CQkJCVwKLQlyZXR1cm4gYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChh LCB2YWwsIG1vKTsJCQlcCi19CQkJCQkJCQkJXAotQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwK LWF0b21pY19mZXRjaF9hbmRfIyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICph LAkJXAotICAgIHR5cGUgdmFsLCBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJXAotCXJl dHVybiBhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KGEsIHZhbCwgbW8pOwkJCVwKLX0JCQkJCQkJ CQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAotYXRvbWljX2ZldGNoX29yXyMjc2hvcnRf dHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJCVwKLSAgICB0eXBlIHZhbCwgYXRvbWlj X21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCVwKLQlyZXR1cm4gYXRvbWljX2ZldGNoX29yX2V4cGxp Y2l0KGEsIHZhbCwgbW8pOwkJCVwKLX0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJ CQkJXAotYXRvbWljX2ZldGNoX3hvcl8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMj X3QgKmEsCQlcCi0gICAgdHlwZSB2YWwsIGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQlc Ci0JcmV0dXJuIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQoYSwgdmFsLCBtbyk7CQkJXAotfQot Ci0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0MxMV9IICovCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9hdG9taWNfZ2NjX2F0b21pYy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9hdG9taWNfZ2NjX2F0b21p Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzE1MTVlLi4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvYXRvbWljX2djY19hdG9taWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCww IEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19HQ0NfQVRPTUlDX0gKLSNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0dDQ19BVE9NSUNfSAotCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0KLSNkZWZpbmUgQVRPTUlDX0lOSVQoLi4uKSB7X19W QV9BUkdTX199Ci0KLXR5cGVkZWYgZW51bSB7Ci0JYXRvbWljX21lbW9yeV9vcmRlcl9yZWxheGVk LAotCWF0b21pY19tZW1vcnlfb3JkZXJfYWNxdWlyZSwKLQlhdG9taWNfbWVtb3J5X29yZGVyX3Jl bGVhc2UsCi0JYXRvbWljX21lbW9yeV9vcmRlcl9hY3FfcmVsLAotCWF0b21pY19tZW1vcnlfb3Jk ZXJfc2VxX2NzdAotfSBhdG9taWNfbWVtb3J5X29yZGVyX3Q7Ci0KLUFUT01JQ19JTkxJTkUgaW50 Ci1hdG9taWNfZW51bV90b19idWlsdGluKGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewotCXN3 aXRjaCAobW8pIHsKLQljYXNlIGF0b21pY19tZW1vcnlfb3JkZXJfcmVsYXhlZDoKLQkJcmV0dXJu IF9fQVRPTUlDX1JFTEFYRUQ7Ci0JY2FzZSBhdG9taWNfbWVtb3J5X29yZGVyX2FjcXVpcmU6Ci0J CXJldHVybiBfX0FUT01JQ19BQ1FVSVJFOwotCWNhc2UgYXRvbWljX21lbW9yeV9vcmRlcl9yZWxl YXNlOgotCQlyZXR1cm4gX19BVE9NSUNfUkVMRUFTRTsKLQljYXNlIGF0b21pY19tZW1vcnlfb3Jk ZXJfYWNxX3JlbDoKLQkJcmV0dXJuIF9fQVRPTUlDX0FDUV9SRUw7Ci0JY2FzZSBhdG9taWNfbWVt b3J5X29yZGVyX3NlcV9jc3Q6Ci0JCXJldHVybiBfX0FUT01JQ19TRVFfQ1NUOwotCX0KLQkvKiBD YW4ndCBoYXBwZW47IHRoZSBzd2l0Y2ggaXMgZXhoYXVzdGl2ZS4gKi8KLQlub3RfcmVhY2hlZCgp OwotfQotCi1BVE9NSUNfSU5MSU5FIHZvaWQKLWF0b21pY19mZW5jZShhdG9taWNfbWVtb3J5X29y ZGVyX3QgbW8pIHsKLQlfX2F0b21pY190aHJlYWRfZmVuY2UoYXRvbWljX2VudW1fdG9fYnVpbHRp bihtbykpOwotfQotCi0jZGVmaW5lIEpFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1ModHlwZSwgc2hv cnRfdHlwZSwJCQlcCi0gICAgLyogdW51c2VkICovIGxnX3NpemUpCQkJCQkJXAotdHlwZWRlZiBz dHJ1Y3QgewkJCQkJCQlcCi0JdHlwZSByZXByOwkJCQkJCQlcCi19IGF0b21pY18jI3Nob3J0X3R5 cGUjI190OwkJCQkJCVwKLQkJCQkJCQkJCVwKLUFUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCi1h dG9taWNfbG9hZF8jI3Nob3J0X3R5cGUoY29uc3QgYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEs CQlcCi0gICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAotCXR5cGUgcmVzdWx0 OwkJCQkJCQlcCi0JX19hdG9taWNfbG9hZCgmYS0+cmVwciwgJnJlc3VsdCwgYXRvbWljX2VudW1f dG9fYnVpbHRpbihtbykpOwlcCi0JcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAotfQkJCQkJCQkJCVwK LQkJCQkJCQkJCVwKLUFUT01JQ19JTkxJTkUgdm9pZAkJCQkJCQlcCi1hdG9taWNfc3RvcmVfIyNz aG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJCVwKLSAgICBh dG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCi0JX19hdG9taWNfc3RvcmUoJmEtPnJl cHIsICZ2YWwsIGF0b21pY19lbnVtX3RvX2J1aWx0aW4obW8pKTsJXAotfQkJCQkJCQkJCVwKLQkJ CQkJCQkJCVwKLUFUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCi1hdG9taWNfZXhjaGFuZ2VfIyNz aG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAotICAgIGF0 b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQkJCVwKLQl0eXBlIHJlc3VsdDsJCQkJCQkJXAot CV9fYXRvbWljX2V4Y2hhbmdlKCZhLT5yZXByLCAmdmFsLCAmcmVzdWx0LAkJCVwKLQkgICAgYXRv bWljX2VudW1fdG9fYnVpbHRpbihtbykpOwkJCQlcCi0JcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAot fQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLUFUT01JQ19JTkxJTkUgYm9vbAkJCQkJCQlcCi1hdG9t aWNfY29tcGFyZV9leGNoYW5nZV93ZWFrXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBl IyNfdCAqYSwJXAotICAgIFVOVVNFRCB0eXBlICpleHBlY3RlZCwgdHlwZSBkZXNpcmVkLAkJCQlc Ci0gICAgYXRvbWljX21lbW9yeV9vcmRlcl90IHN1Y2Nlc3NfbW8sCQkJCQlcCi0gICAgYXRvbWlj X21lbW9yeV9vcmRlcl90IGZhaWx1cmVfbW8pIHsJCQkJCVwKLQlyZXR1cm4gX19hdG9taWNfY29t cGFyZV9leGNoYW5nZSgmYS0+cmVwciwgZXhwZWN0ZWQsICZkZXNpcmVkLAlcCi0JICAgIHRydWUs IGF0b21pY19lbnVtX3RvX2J1aWx0aW4oc3VjY2Vzc19tbyksCQkJXAotCSAgICBhdG9taWNfZW51 bV90b19idWlsdGluKGZhaWx1cmVfbW8pKTsJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAot QVRPTUlDX0lOTElORSBib29sCQkJCQkJCVwKLWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9u Z18jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCVwKLSAgICBVTlVTRUQg dHlwZSAqZXhwZWN0ZWQsIHR5cGUgZGVzaXJlZCwJCQkJXAotICAgIGF0b21pY19tZW1vcnlfb3Jk ZXJfdCBzdWNjZXNzX21vLAkJCQkJXAotICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBmYWlsdXJl X21vKSB7CQkJCQlcCi0JcmV0dXJuIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoJmEtPnJlcHIs IGV4cGVjdGVkLCAmZGVzaXJlZCwJXAotCSAgICBmYWxzZSwJCQkJCQkJXAotCSAgICBhdG9taWNf ZW51bV90b19idWlsdGluKHN1Y2Nlc3NfbW8pLAkJCQlcCi0JICAgIGF0b21pY19lbnVtX3RvX2J1 aWx0aW4oZmFpbHVyZV9tbykpOwkJCVwKLX0KLQotCi0jZGVmaW5lIEpFTUFMTE9DX0dFTkVSQVRF X0lOVF9BVE9NSUNTKHR5cGUsIHNob3J0X3R5cGUsCQkJXAotICAgIC8qIHVudXNlZCAqLyBsZ19z aXplKQkJCQkJCVwKLUpFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1ModHlwZSwgc2hvcnRfdHlwZSwg LyogdW51c2VkICovIGxnX3NpemUpCVwKLQkJCQkJCQkJCVwKLUFUT01JQ19JTkxJTkUgdHlwZQkJ CQkJCQlcCi1hdG9taWNfZmV0Y2hfYWRkXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBl IyNfdCAqYSwgdHlwZSB2YWwsCVwKLSAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJ CQlcCi0JcmV0dXJuIF9fYXRvbWljX2ZldGNoX2FkZCgmYS0+cmVwciwgdmFsLAkJCVwKLQkgICAg YXRvbWljX2VudW1fdG9fYnVpbHRpbihtbykpOwkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJ XAotQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKLWF0b21pY19mZXRjaF9zdWJfIyNzaG9ydF90 eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAotICAgIGF0b21pY19t ZW1vcnlfb3JkZXJfdCBtbykgewkJCQkJCVwKLQlyZXR1cm4gX19hdG9taWNfZmV0Y2hfc3ViKCZh LT5yZXByLCB2YWwsCQkJXAotCSAgICBhdG9taWNfZW51bV90b19idWlsdGluKG1vKSk7CQkJCVwK LX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAotYXRv bWljX2ZldGNoX2FuZF8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5 cGUgdmFsLAlcCi0gICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAotCXJldHVy biBfX2F0b21pY19mZXRjaF9hbmQoJmEtPnJlcHIsIHZhbCwJCQlcCi0JICAgIGF0b21pY19lbnVt X3RvX2J1aWx0aW4obW8pKTsJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLUFUT01JQ19J TkxJTkUgdHlwZQkJCQkJCQlcCi1hdG9taWNfZmV0Y2hfb3JfIyNzaG9ydF90eXBlKGF0b21pY18j I3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAotICAgIGF0b21pY19tZW1vcnlfb3JkZXJf dCBtbykgewkJCQkJCVwKLQlyZXR1cm4gX19hdG9taWNfZmV0Y2hfb3IoJmEtPnJlcHIsIHZhbCwJ CQkJXAotCSAgICBhdG9taWNfZW51bV90b19idWlsdGluKG1vKSk7CQkJCVwKLX0JCQkJCQkJCQlc Ci0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAotYXRvbWljX2ZldGNoX3hv cl8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5cGUgdmFsLAlcCi0g ICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAotCXJldHVybiBfX2F0b21pY19m ZXRjaF94b3IoJmEtPnJlcHIsIHZhbCwJCQlcCi0JICAgIGF0b21pY19lbnVtX3RvX2J1aWx0aW4o bW8pKTsJCQkJXAotfQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQVRPTUlDX0dDQ19B VE9NSUNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX2djY19zeW5jLmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL2F0b21pY19nY2Nfc3luYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDJi N2NiLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX2djY19zeW5jLmgKKysrIC9kZXYvbnVs bApAQCAtMSwxOTUgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BVE9NSUNfR0ND X1NZTkNfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9BVE9NSUNfR0NDX1NZTkNfSAotCi0j ZGVmaW5lIEFUT01JQ19JTklUKC4uLikge19fVkFfQVJHU19ffQotCi10eXBlZGVmIGVudW0gewot CWF0b21pY19tZW1vcnlfb3JkZXJfcmVsYXhlZCwKLQlhdG9taWNfbWVtb3J5X29yZGVyX2FjcXVp cmUsCi0JYXRvbWljX21lbW9yeV9vcmRlcl9yZWxlYXNlLAotCWF0b21pY19tZW1vcnlfb3JkZXJf YWNxX3JlbCwKLQlhdG9taWNfbWVtb3J5X29yZGVyX3NlcV9jc3QKLX0gYXRvbWljX21lbW9yeV9v cmRlcl90OwotCi1BVE9NSUNfSU5MSU5FIHZvaWQKLWF0b21pY19mZW5jZShhdG9taWNfbWVtb3J5 X29yZGVyX3QgbW8pIHsKLQkvKiBFYXN5IGNhc2VzIGZpcnN0OiBubyBiYXJyaWVyLCBhbmQgZnVs bCBiYXJyaWVyLiAqLwotCWlmIChtbyA9PSBhdG9taWNfbWVtb3J5X29yZGVyX3JlbGF4ZWQpIHsK LQkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKG1v ID09IGF0b21pY19tZW1vcnlfb3JkZXJfc2VxX2NzdCkgewotCQlhc20gdm9sYXRpbGUoIiIgOjo6 ICJtZW1vcnkiKTsKLQkJX19zeW5jX3N5bmNocm9uaXplKCk7Ci0JCWFzbSB2b2xhdGlsZSgiIiA6 OjogIm1lbW9yeSIpOwotCQlyZXR1cm47Ci0JfQotCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9y eSIpOwotIyAgaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQotCS8q IFRoaXMgaXMgaW1wbGljaXQgb24geDg2LiAqLwotIyAgZWxpZiBkZWZpbmVkKF9fcHBjNjRfXykK LQlhc20gdm9sYXRpbGUoImx3c3luYyIpOwotIyAgZWxpZiBkZWZpbmVkKF9fcHBjX18pCi0JYXNt IHZvbGF0aWxlKCJzeW5jIik7Ci0jICBlbGlmIGRlZmluZWQoX19zcGFyY19fKSAmJiBkZWZpbmVk KF9fYXJjaDY0X18pCi0JaWYgKG1vID09IGF0b21pY19tZW1vcnlfb3JkZXJfYWNxdWlyZSkgewot CQlhc20gdm9sYXRpbGUoIm1lbWJhciAjTG9hZExvYWQgfCAjTG9hZFN0b3JlIik7Ci0JfSBlbHNl IGlmIChtbyA9PSBhdG9taWNfbWVtb3J5X29yZGVyX3JlbGVhc2UpIHsKLQkJYXNtIHZvbGF0aWxl KCJtZW1iYXIgI0xvYWRTdG9yZSB8ICNTdG9yZVN0b3JlIik7Ci0JfSBlbHNlIHsKLQkJYXNtIHZv bGF0aWxlKCJtZW1iYXIgI0xvYWRMb2FkIHwgI0xvYWRTdG9yZSB8ICNTdG9yZVN0b3JlIik7Ci0J fQotIyAgZWxzZQotCV9fc3luY19zeW5jaHJvbml6ZSgpOwotIyAgZW5kaWYKLQlhc20gdm9sYXRp bGUoIiIgOjo6ICJtZW1vcnkiKTsKLX0KLQotLyoKLSAqIEEgY29ycmVjdCBpbXBsZW1lbnRhdGlv biBvZiBzZXFfY3N0IGxvYWRzIGFuZCBzdG9yZXMgb24gd2Vha2x5IG9yZGVyZWQKLSAqIGFyY2hp dGVjdHVyZXMgY291bGQgZG8gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmc6Ci0gKiAgIDEuIHN0b3Jl KCkgaXMgd2Vhay1mZW5jZSAtPiBzdG9yZSAtPiBzdHJvbmcgZmVuY2UsIGxvYWQoKSBpcyBsb2Fk IC0+Ci0gKiAgICAgIHN0cm9uZy1mZW5jZS4KLSAqICAgMi4gc3RvcmUoKSBpcyBzdHJvbmctZmVu Y2UgLT4gc3RvcmUsIGxvYWQoKSBpcyBzdHJvbmctZmVuY2UgLT4gbG9hZCAtPgotICogICAgICB3 ZWFrLWZlbmNlLgotICogVGhlIHRyaWNreSB0aGluZyBpcywgbG9hZCgpIGFuZCBzdG9yZSgpIGFi b3ZlIGNhbiBiZSB0aGUgbG9hZCBvciBzdG9yZQotICogcG9ydGlvbnMgb2YgYSBnY2MgX19zeW5j IGJ1aWx0aW4sIHNvIHdlIGhhdmUgdG8gZm9sbG93IEdDQydzIGxlYWQsIHdoaWNoCi0gKiBtZWFu cyBnb2luZyB3aXRoIHN0cmF0ZWd5IDIuCi0gKiBPbiBzdHJvbmdseSBvcmRlcmVkIGFyY2hpdGVj dHVyZXMsIHRoZSBuYXR1cmFsIHN0cmF0ZWd5IGlzIHRvIHN0aWNrIGEgc3Ryb25nCi0gKiBmZW5j ZSBhZnRlciBzZXFfY3N0IHN0b3JlcywgYW5kIGhhdmUgbmFrZWQgbG9hZHMuICBTbyB3ZSB3YW50 IHRoZSBzdHJvbmcKLSAqIGZlbmNlcyBpbiBkaWZmZXJlbnQgcGxhY2VzIG9uIGRpZmZlcmVudCBh cmNoaXRlY3R1cmVzLgotICogYXRvbWljX3ByZV9zY19sb2FkX2ZlbmNlIGFuZCBhdG9taWNfcG9z dF9zY19zdG9yZV9mZW5jZSBhbGxvdyB1cyB0bwotICogYWNjb21wbGlzaCB0aGlzLgotICovCi0K LUFUT01JQ19JTkxJTkUgdm9pZAotYXRvbWljX3ByZV9zY19sb2FkX2ZlbmNlKCkgewotIyAgaWYg ZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fAkJCVwKLSAgICAoZGVm aW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpCi0JYXRvbWljX2ZlbmNlKGF0 b21pY19tZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0jICBlbHNlCi0JYXRvbWljX2ZlbmNlKGF0b21p Y19tZW1vcnlfb3JkZXJfc2VxX2NzdCk7Ci0jICBlbmRpZgotfQotCi1BVE9NSUNfSU5MSU5FIHZv aWQKLWF0b21pY19wb3N0X3NjX3N0b3JlX2ZlbmNlKCkgewotIyAgaWYgZGVmaW5lZChfX2kzODZf XykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fAkJCVwKLSAgICAoZGVmaW5lZChfX3NwYXJjX18p ICYmIGRlZmluZWQoX19hcmNoNjRfXykpCi0JYXRvbWljX2ZlbmNlKGF0b21pY19tZW1vcnlfb3Jk ZXJfc2VxX2NzdCk7Ci0jICBlbHNlCi0JYXRvbWljX2ZlbmNlKGF0b21pY19tZW1vcnlfb3JkZXJf cmVsYXhlZCk7Ci0jICBlbmRpZgotCi19Ci0KLSNkZWZpbmUgSkVNQUxMT0NfR0VORVJBVEVfQVRP TUlDUyh0eXBlLCBzaG9ydF90eXBlLAkJCVwKLSAgICAvKiB1bnVzZWQgKi8gbGdfc2l6ZSkJCQkJ CQlcCi10eXBlZGVmIHN0cnVjdCB7CQkJCQkJCVwKLQl0eXBlIHZvbGF0aWxlIHJlcHI7CQkJCQkJ XAotfSBhdG9taWNfIyNzaG9ydF90eXBlIyNfdDsJCQkJCQlcCi0JCQkJCQkJCQlcCi1BVE9NSUNf SU5MSU5FIHR5cGUJCQkJCQkJXAotYXRvbWljX2xvYWRfIyNzaG9ydF90eXBlKGNvbnN0IGF0b21p Y18jI3Nob3J0X3R5cGUjI190ICphLAkJXAotICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykg ewkJCQkJCVwKLQlpZiAobW8gPT0gYXRvbWljX21lbW9yeV9vcmRlcl9zZXFfY3N0KSB7CQkJXAot CQlhdG9taWNfcHJlX3NjX2xvYWRfZmVuY2UoKTsJCQkJXAotCX0JCQkJCQkJCVwKLQl0eXBlIHJl c3VsdCA9IGEtPnJlcHI7CQkJCQkJXAotCWlmIChtbyAhPSBhdG9taWNfbWVtb3J5X29yZGVyX3Jl bGF4ZWQpIHsJCQlcCi0JCWF0b21pY19mZW5jZShhdG9taWNfbWVtb3J5X29yZGVyX2FjcXVpcmUp OwkJXAotCX0JCQkJCQkJCVwKLQlyZXR1cm4gcmVzdWx0OwkJCQkJCQlcCi19CQkJCQkJCQkJXAot CQkJCQkJCQkJXAotQVRPTUlDX0lOTElORSB2b2lkCQkJCQkJCVwKLWF0b21pY19zdG9yZV8jI3No b3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCQkJXAotICAgIHR5cGUgdmFsLCBh dG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJXAotCWlmIChtbyAhPSBhdG9taWNfbWVtb3J5 X29yZGVyX3JlbGF4ZWQpIHsJCQlcCi0JCWF0b21pY19mZW5jZShhdG9taWNfbWVtb3J5X29yZGVy X3JlbGVhc2UpOwkJXAotCX0JCQkJCQkJCVwKLQlhLT5yZXByID0gdmFsOwkJCQkJCQlcCi0JaWYg KG1vID09IGF0b21pY19tZW1vcnlfb3JkZXJfc2VxX2NzdCkgewkJCVwKLQkJYXRvbWljX3Bvc3Rf c2Nfc3RvcmVfZmVuY2UoKTsJCQkJXAotCX0JCQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJ CQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAotYXRvbWljX2V4Y2hhbmdlXyMjc2hvcnRf dHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwgdHlwZSB2YWwsIFwKLSAgICBhdG9taWNf bWVtb3J5X29yZGVyX3QgbW8pIHsgICAgICAgICAgICAgICAgICAJCQkJCSBcCi0JLyoJCQkJCQkJ CVwKLQkgKiBCZWNhdXNlIG9mIEZyZWVCU0QsIHdlIGNhcmUgYWJvdXQgZ2NjIDQuMiwgd2hpY2gg ZG9lc24ndCBoYXZlXAotCSAqIGFuIGF0b21pYyBleGNoYW5nZSBidWlsdGluLiAgV2UgZmFrZSBp dCB3aXRoIGEgQ0FTIGxvb3AuCVwKLQkgKi8JCQkJCQkJCVwKLQl3aGlsZSAodHJ1ZSkgewkJCQkJ CQlcCi0JCXR5cGUgb2xkID0gYS0+cmVwcjsJCQkJCVwKLQkJaWYgKF9fc3luY19ib29sX2NvbXBh cmVfYW5kX3N3YXAoJmEtPnJlcHIsIG9sZCwgdmFsKSkgewlcCi0JCQlyZXR1cm4gb2xkOwkJCQkJ XAotCQl9CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotQVRP TUlDX0lOTElORSBib29sCQkJCQkJCVwKLWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfIyNz aG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLAlcCi0gICAgdHlwZSAqZXhwZWN0 ZWQsIHR5cGUgZGVzaXJlZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBzdWNjZXNzX21vLCAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBmYWlsdXJlX21vKSB7CQkJCSAgICAg ICAgICAgICAgICBcCi0JdHlwZSBwcmV2ID0gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZh LT5yZXByLCAqZXhwZWN0ZWQsCVwKLQkgICAgZGVzaXJlZCk7CQkJCQkJCVwKLQlpZiAocHJldiA9 PSAqZXhwZWN0ZWQpIHsJCQkJCVwKLQkJcmV0dXJuIHRydWU7CQkJCQkJXAotCX0gZWxzZSB7CQkJ CQkJCVwKLQkJKmV4cGVjdGVkID0gcHJldjsJCQkJCVwKLQkJcmV0dXJuIGZhbHNlOwkJCQkJCVwK LQl9CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotQVRPTUlDX0lOTElORSBib29sCQkJCQkJCVwKLWF0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ18jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRf dHlwZSMjX3QgKmEsCVwKLSAgICB0eXBlICpleHBlY3RlZCwgdHlwZSBkZXNpcmVkLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBhdG9taWNfbWVtb3J5X29yZGVy X3Qgc3VjY2Vzc19tbywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGF0b21pY19t ZW1vcnlfb3JkZXJfdCBmYWlsdXJlX21vKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0J dHlwZSBwcmV2ID0gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZhLT5yZXByLCAqZXhwZWN0 ZWQsCVwKLQkgICAgZGVzaXJlZCk7CQkJCQkJCVwKLQlpZiAocHJldiA9PSAqZXhwZWN0ZWQpIHsJ CQkJCVwKLQkJcmV0dXJuIHRydWU7CQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkJKmV4cGVj dGVkID0gcHJldjsJCQkJCVwKLQkJcmV0dXJuIGZhbHNlOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19 Ci0KLSNkZWZpbmUgSkVNQUxMT0NfR0VORVJBVEVfSU5UX0FUT01JQ1ModHlwZSwgc2hvcnRfdHlw ZSwJCQlcCi0gICAgLyogdW51c2VkICovIGxnX3NpemUpCQkJCQkJXAotSkVNQUxMT0NfR0VORVJB VEVfQVRPTUlDUyh0eXBlLCBzaG9ydF90eXBlLCAvKiB1bnVzZWQgKi8gbGdfc2l6ZSkJXAotCQkJ CQkJCQkJXAotQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKLWF0b21pY19mZXRjaF9hZGRfIyNz aG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5cGUjI190ICphLCB0eXBlIHZhbCwJXAotICAgIGF0 b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQkJCVwKLQlyZXR1cm4gX19zeW5jX2ZldGNoX2Fu ZF9hZGQoJmEtPnJlcHIsIHZhbCk7CQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLUFUT01J Q19JTkxJTkUgdHlwZQkJCQkJCQlcCi1hdG9taWNfZmV0Y2hfc3ViXyMjc2hvcnRfdHlwZShhdG9t aWNfIyNzaG9ydF90eXBlIyNfdCAqYSwgdHlwZSB2YWwsCVwKLSAgICBhdG9taWNfbWVtb3J5X29y ZGVyX3QgbW8pIHsJCQkJCQlcCi0JcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfc3ViKCZhLT5yZXBy LCB2YWwpOwkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJ CQkJCQkJXAotYXRvbWljX2ZldGNoX2FuZF8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlw ZSMjX3QgKmEsIHR5cGUgdmFsLAlcCi0gICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJ CQkJXAotCXJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmYS0+cmVwciwgdmFsKTsJCQlcCi19 CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotQVRPTUlDX0lOTElORSB0eXBlCQkJCQkJCVwKLWF0b21p Y19mZXRjaF9vcl8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5cGUg dmFsLAlcCi0gICAgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAotCXJldHVybiBf X3N5bmNfZmV0Y2hfYW5kX29yKCZhLT5yZXByLCB2YWwpOwkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJ CQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAotYXRvbWljX2ZldGNoX3hvcl8jI3No b3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsIHR5cGUgdmFsLAlcCi0gICAgYXRv bWljX21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCQkJXAotCXJldHVybiBfX3N5bmNfZmV0Y2hfYW5k X3hvcigmYS0+cmVwciwgdmFsKTsJCQlcCi19Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5B TF9BVE9NSUNfR0NDX1NZTkNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljX21zdmMu aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvYXRvbWljX21zdmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NjcwNTdjZS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2F0b21pY19tc3ZjLmgKKysrIC9kZXYvbnVs bApAQCAtMSwxNTggKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9BVE9NSUNfTVNW Q19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0FUT01JQ19NU1ZDX0gKLQotI2RlZmluZSBB VE9NSUNfSU5JVCguLi4pIHtfX1ZBX0FSR1NfX30KLQotdHlwZWRlZiBlbnVtIHsKLQlhdG9taWNf bWVtb3J5X29yZGVyX3JlbGF4ZWQsCi0JYXRvbWljX21lbW9yeV9vcmRlcl9hY3F1aXJlLAotCWF0 b21pY19tZW1vcnlfb3JkZXJfcmVsZWFzZSwKLQlhdG9taWNfbWVtb3J5X29yZGVyX2FjcV9yZWws Ci0JYXRvbWljX21lbW9yeV9vcmRlcl9zZXFfY3N0Ci19IGF0b21pY19tZW1vcnlfb3JkZXJfdDsK LQotdHlwZWRlZiBjaGFyIGF0b21pY19yZXByXzBfdDsKLXR5cGVkZWYgc2hvcnQgYXRvbWljX3Jl cHJfMV90OwotdHlwZWRlZiBsb25nIGF0b21pY19yZXByXzJfdDsKLXR5cGVkZWYgX19pbnQ2NCBh dG9taWNfcmVwcl8zX3Q7Ci0KLUFUT01JQ19JTkxJTkUgdm9pZAotYXRvbWljX2ZlbmNlKGF0b21p Y19tZW1vcnlfb3JkZXJfdCBtbykgewotCV9SZWFkV3JpdGVCYXJyaWVyKCk7Ci0jICBpZiBkZWZp bmVkKF9NX0FSTSkgfHwgZGVmaW5lZChfTV9BUk02NCkKLQkvKiBBUk0gbmVlZHMgYSBiYXJyaWVy IGZvciBldmVyeXRoaW5nIGJ1dCByZWxheGVkLiAqLwotCWlmIChtbyAhPSBhdG9taWNfbWVtb3J5 X29yZGVyX3JlbGF4ZWQpIHsKLQkJTWVtb3J5QmFycmllcigpOwotCX0KLSMgIGVsaWYgZGVmaW5l ZChfTV9JWDg2KSB8fCBkZWZpbmVkIChfTV9YNjQpCi0JLyogeDg2IG5lZWRzIGEgYmFycmllciBv bmx5IGZvciBzZXFfY3N0LiAqLwotCWlmIChtbyA9PSBhdG9taWNfbWVtb3J5X29yZGVyX3NlcV9j c3QpIHsKLQkJTWVtb3J5QmFycmllcigpOwotCX0KLSMgIGVsc2UKLSMgIGVycm9yICJEb24ndCBr bm93IGhvdyB0byBjcmVhdGUgYXRvbWljcyBmb3IgdGhpcyBwbGF0Zm9ybSBmb3IgTVNWQy4iCi0j ICBlbmRpZgotCV9SZWFkV3JpdGVCYXJyaWVyKCk7Ci19Ci0KLSNkZWZpbmUgQVRPTUlDX0lOVEVS TE9DS0VEX1JFUFIobGdfc2l6ZSkgYXRvbWljX3JlcHJfICMjIGxnX3NpemUgIyMgX3QKLQotI2Rl ZmluZSBBVE9NSUNfQ09OQ0FUKGEsIGIpIEFUT01JQ19SQVdfQ09OQ0FUKGEsIGIpCi0jZGVmaW5l IEFUT01JQ19SQVdfQ09OQ0FUKGEsIGIpIGEgIyMgYgotCi0jZGVmaW5lIEFUT01JQ19JTlRFUkxP Q0tFRF9OQU1FKGJhc2VfbmFtZSwgbGdfc2l6ZSkgQVRPTUlDX0NPTkNBVCgJXAotICAgIGJhc2Vf bmFtZSwgQVRPTUlDX0lOVEVSTE9DS0VEX1NVRkZJWChsZ19zaXplKSkKLQotI2RlZmluZSBBVE9N SUNfSU5URVJMT0NLRURfU1VGRklYKGxnX3NpemUpCQkJCVwKLSAgICBBVE9NSUNfQ09OQ0FUKEFU T01JQ19JTlRFUkxPQ0tFRF9TVUZGSVhfLCBsZ19zaXplKQotCi0jZGVmaW5lIEFUT01JQ19JTlRF UkxPQ0tFRF9TVUZGSVhfMCA4Ci0jZGVmaW5lIEFUT01JQ19JTlRFUkxPQ0tFRF9TVUZGSVhfMSAx NgotI2RlZmluZSBBVE9NSUNfSU5URVJMT0NLRURfU1VGRklYXzIKLSNkZWZpbmUgQVRPTUlDX0lO VEVSTE9DS0VEX1NVRkZJWF8zIDY0Ci0KLSNkZWZpbmUgSkVNQUxMT0NfR0VORVJBVEVfQVRPTUlD Uyh0eXBlLCBzaG9ydF90eXBlLCBsZ19zaXplKQkJXAotdHlwZWRlZiBzdHJ1Y3QgewkJCQkJCQlc Ci0JQVRPTUlDX0lOVEVSTE9DS0VEX1JFUFIobGdfc2l6ZSkgcmVwcjsJCQkJXAotfSBhdG9taWNf IyNzaG9ydF90eXBlIyNfdDsJCQkJCQlcCi0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJ CQkJCQkJXAotYXRvbWljX2xvYWRfIyNzaG9ydF90eXBlKGNvbnN0IGF0b21pY18jI3Nob3J0X3R5 cGUjI190ICphLAkJXAotICAgIGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQkJCVwKLQlB VE9NSUNfSU5URVJMT0NLRURfUkVQUihsZ19zaXplKSByZXQgPSBhLT5yZXByOwkJCVwKLQlpZiAo bW8gIT0gYXRvbWljX21lbW9yeV9vcmRlcl9yZWxheGVkKSB7CQkJXAotCQlhdG9taWNfZmVuY2Uo YXRvbWljX21lbW9yeV9vcmRlcl9hY3F1aXJlKTsJCVwKLQl9CQkJCQkJCQlcCi0JcmV0dXJuICh0 eXBlKSByZXQ7CQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLUFUT01JQ19JTkxJTkUg dm9pZAkJCQkJCQlcCi1hdG9taWNfc3RvcmVfIyNzaG9ydF90eXBlKGF0b21pY18jI3Nob3J0X3R5 cGUjI190ICphLAkJCVwKLSAgICB0eXBlIHZhbCwgYXRvbWljX21lbW9yeV9vcmRlcl90IG1vKSB7 CQkJCVwKLQlpZiAobW8gIT0gYXRvbWljX21lbW9yeV9vcmRlcl9yZWxheGVkKSB7CQkJXAotCQlh dG9taWNfZmVuY2UoYXRvbWljX21lbW9yeV9vcmRlcl9yZWxlYXNlKTsJCVwKLQl9CQkJCQkJCQlc Ci0JYS0+cmVwciA9IChBVE9NSUNfSU5URVJMT0NLRURfUkVQUihsZ19zaXplKSkgdmFsOwkJXAot CWlmIChtbyA9PSBhdG9taWNfbWVtb3J5X29yZGVyX3NlcV9jc3QpIHsJCQlcCi0JCWF0b21pY19m ZW5jZShhdG9taWNfbWVtb3J5X29yZGVyX3NlcV9jc3QpOwkJXAotCX0JCQkJCQkJCVwKLX0JCQkJ CQkJCQlcCi0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJXAotYXRvbWljX2V4 Y2hhbmdlXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwgdHlwZSB2YWws CVwKLSAgICBhdG9taWNfbWVtb3J5X29yZGVyX3QgbW8pIHsJCQkJCQlcCi0JcmV0dXJuICh0eXBl KUFUT01JQ19JTlRFUkxPQ0tFRF9OQU1FKF9JbnRlcmxvY2tlZEV4Y2hhbmdlLAlcCi0JICAgIGxn X3NpemUpKCZhLT5yZXByLCAoQVRPTUlDX0lOVEVSTE9DS0VEX1JFUFIobGdfc2l6ZSkpdmFsKTsJ XAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLUFUT01JQ19JTkxJTkUgYm9vbAkJCQkJCQlcCi1h dG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90 eXBlIyNfdCAqYSwJXAotICAgIHR5cGUgKmV4cGVjdGVkLCB0eXBlIGRlc2lyZWQsIGF0b21pY19t ZW1vcnlfb3JkZXJfdCBzdWNjZXNzX21vLAlcCi0gICAgYXRvbWljX21lbW9yeV9vcmRlcl90IGZh aWx1cmVfbW8pIHsJCQkJCVwKLQlBVE9NSUNfSU5URVJMT0NLRURfUkVQUihsZ19zaXplKSBlID0J CQkJXAotCSAgICAoQVRPTUlDX0lOVEVSTE9DS0VEX1JFUFIobGdfc2l6ZSkpKmV4cGVjdGVkOwkJ XAotCUFUT01JQ19JTlRFUkxPQ0tFRF9SRVBSKGxnX3NpemUpIGQgPQkJCQlcCi0JICAgIChBVE9N SUNfSU5URVJMT0NLRURfUkVQUihsZ19zaXplKSlkZXNpcmVkOwkJCVwKLQlBVE9NSUNfSU5URVJM T0NLRURfUkVQUihsZ19zaXplKSBvbGQgPQkJCQlcCi0JICAgIEFUT01JQ19JTlRFUkxPQ0tFRF9O QU1FKF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSwgCVwKLQkJbGdfc2l6ZSkoJmEtPnJlcHIs IGQsIGUpOwkJCQlcCi0JaWYgKG9sZCA9PSBlKSB7CQkJCQkJCVwKLQkJcmV0dXJuIHRydWU7CQkJ CQkJXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkJKmV4cGVjdGVkID0gKHR5cGUpb2xkOwkJCQkJXAot CQlyZXR1cm4gZmFsc2U7CQkJCQkJXAotCX0JCQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJ CQlcCi1BVE9NSUNfSU5MSU5FIGJvb2wJCQkJCQkJXAotYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vf c3Ryb25nXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJXAotICAgIHR5 cGUgKmV4cGVjdGVkLCB0eXBlIGRlc2lyZWQsIGF0b21pY19tZW1vcnlfb3JkZXJfdCBzdWNjZXNz X21vLAlcCi0gICAgYXRvbWljX21lbW9yeV9vcmRlcl90IGZhaWx1cmVfbW8pIHsJCQkJCVwKLQkv KiBXZSBpbXBsZW1lbnQgdGhlIHdlYWsgdmVyc2lvbiB3aXRoIHN0cm9uZyBzZW1hbnRpY3MuICov CVwKLQlyZXR1cm4gYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha18jI3Nob3J0X3R5cGUoYSwg ZXhwZWN0ZWQsCVwKLQkgICAgZGVzaXJlZCwgc3VjY2Vzc19tbywgZmFpbHVyZV9tbyk7CQkJCVwK LX0KLQotCi0jZGVmaW5lIEpFTUFMTE9DX0dFTkVSQVRFX0lOVF9BVE9NSUNTKHR5cGUsIHNob3J0 X3R5cGUsIGxnX3NpemUpCVwKLUpFTUFMTE9DX0dFTkVSQVRFX0FUT01JQ1ModHlwZSwgc2hvcnRf dHlwZSwgbGdfc2l6ZSkJCQlcCi0JCQkJCQkJCQlcCi1BVE9NSUNfSU5MSU5FIHR5cGUJCQkJCQkJ XAotYXRvbWljX2ZldGNoX2FkZF8jI3Nob3J0X3R5cGUoYXRvbWljXyMjc2hvcnRfdHlwZSMjX3Qg KmEsCQlcCi0gICAgdHlwZSB2YWwsIGF0b21pY19tZW1vcnlfb3JkZXJfdCBtbykgewkJCQlcCi0J cmV0dXJuICh0eXBlKUFUT01JQ19JTlRFUkxPQ0tFRF9OQU1FKF9JbnRlcmxvY2tlZEV4Y2hhbmdl QWRkLAlcCi0JICAgIGxnX3NpemUpKCZhLT5yZXByLCAoQVRPTUlDX0lOVEVSTE9DS0VEX1JFUFIo bGdfc2l6ZSkpdmFsKTsJXAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLUFUT01JQ19JTkxJTkUg dHlwZQkJCQkJCQlcCi1hdG9taWNfZmV0Y2hfc3ViXyMjc2hvcnRfdHlwZShhdG9taWNfIyNzaG9y dF90eXBlIyNfdCAqYSwJCVwKLSAgICB0eXBlIHZhbCwgYXRvbWljX21lbW9yeV9vcmRlcl90IG1v KSB7CQkJCVwKLQkvKgkJCQkJCQkJXAotCSAqIE1TVkMgd2FybnMgb24gbmVnYXRpb24gb2YgdW5z aWduZWQgb3BlcmFuZHMsIGJ1dCBmb3IgdXMgaXQJXAotCSAqIGdpdmVzIGV4YWN0bHkgdGhlIHJp Z2h0IHNlbWFudGljcyAoTUFYX1RZUEUgKyAxIC0gb3BlcmFuZCkuCVwKLQkgKi8JCQkJCQkJCVwK LQlfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKQkJCQkJCVwKLQlfX3ByYWdtYSh3YXJuaW5nKGRpc2Fi bGU6IDQxNDYpKQkJCQlcCi0JcmV0dXJuIGF0b21pY19mZXRjaF9hZGRfIyNzaG9ydF90eXBlKGEs IC12YWwsIG1vKTsJCVwKLQlfX3ByYWdtYSh3YXJuaW5nKHBvcCkpCQkJCQkJXAotfQkJCQkJCQkJ CVwKLUFUT01JQ19JTkxJTkUgdHlwZQkJCQkJCQlcCi1hdG9taWNfZmV0Y2hfYW5kXyMjc2hvcnRf dHlwZShhdG9taWNfIyNzaG9ydF90eXBlIyNfdCAqYSwJCVwKLSAgICB0eXBlIHZhbCwgYXRvbWlj X21lbW9yeV9vcmRlcl90IG1vKSB7CQkJCVwKLQlyZXR1cm4gKHR5cGUpQVRPTUlDX0lOVEVSTE9D S0VEX05BTUUoX0ludGVybG9ja2VkQW5kLCBsZ19zaXplKSgJXAotCSAgICAmYS0+cmVwciwgKEFU T01JQ19JTlRFUkxPQ0tFRF9SRVBSKGxnX3NpemUpKXZhbCk7CQlcCi19CQkJCQkJCQkJXAotQVRP TUlDX0lOTElORSB0eXBlCQkJCQkJCVwKLWF0b21pY19mZXRjaF9vcl8jI3Nob3J0X3R5cGUoYXRv bWljXyMjc2hvcnRfdHlwZSMjX3QgKmEsCQlcCi0gICAgdHlwZSB2YWwsIGF0b21pY19tZW1vcnlf b3JkZXJfdCBtbykgewkJCQlcCi0JcmV0dXJuICh0eXBlKUFUT01JQ19JTlRFUkxPQ0tFRF9OQU1F KF9JbnRlcmxvY2tlZE9yLCBsZ19zaXplKSgJXAotCSAgICAmYS0+cmVwciwgKEFUT01JQ19JTlRF UkxPQ0tFRF9SRVBSKGxnX3NpemUpKXZhbCk7CQlcCi19CQkJCQkJCQkJXAotQVRPTUlDX0lOTElO RSB0eXBlCQkJCQkJCVwKLWF0b21pY19mZXRjaF94b3JfIyNzaG9ydF90eXBlKGF0b21pY18jI3No b3J0X3R5cGUjI190ICphLAkJXAotICAgIHR5cGUgdmFsLCBhdG9taWNfbWVtb3J5X29yZGVyX3Qg bW8pIHsJCQkJXAotCXJldHVybiAodHlwZSlBVE9NSUNfSU5URVJMT0NLRURfTkFNRShfSW50ZXJs b2NrZWRYb3IsIGxnX3NpemUpKAlcCi0JICAgICZhLT5yZXByLCAoQVRPTUlDX0lOVEVSTE9DS0VE X1JFUFIobGdfc2l6ZSkpdmFsKTsJCVwKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X0FUT01JQ19NU1ZDX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2JhY2tncm91bmRfdGhyZWFk X2V4dGVybnMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmFja2dyb3VuZF90aHJlYWRfZXh0ZXJucy5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWUzYzhkLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmFj a2dyb3VuZF90aHJlYWRfZXh0ZXJucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot I2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9CQUNLR1JPVU5EX1RIUkVBRF9FWFRFUk5TX0gKLSNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfQkFDS0dST1VORF9USFJFQURfRVhURVJOU19ICi0KLWV4 dGVybiBib29sIG9wdF9iYWNrZ3JvdW5kX3RocmVhZDsKLWV4dGVybiBzaXplX3Qgb3B0X21heF9i YWNrZ3JvdW5kX3RocmVhZHM7Ci1leHRlcm4gbWFsbG9jX211dGV4X3QgYmFja2dyb3VuZF90aHJl YWRfbG9jazsKLWV4dGVybiBhdG9taWNfYl90IGJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc3Rh dGU7Ci1leHRlcm4gc2l6ZV90IG5fYmFja2dyb3VuZF90aHJlYWRzOwotZXh0ZXJuIHNpemVfdCBt YXhfYmFja2dyb3VuZF90aHJlYWRzOwotZXh0ZXJuIGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAq YmFja2dyb3VuZF90aHJlYWRfaW5mbzsKLQotYm9vbCBiYWNrZ3JvdW5kX3RocmVhZF9jcmVhdGUo dHNkX3QgKnRzZCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKLWJvb2wgYmFja2dyb3VuZF90aHJlYWRz X2VuYWJsZSh0c2RfdCAqdHNkKTsKLWJvb2wgYmFja2dyb3VuZF90aHJlYWRzX2Rpc2FibGUodHNk X3QgKnRzZCk7Ci1ib29sIGJhY2tncm91bmRfdGhyZWFkX2lzX3N0YXJ0ZWQoYmFja2dyb3VuZF90 aHJlYWRfaW5mb190KiBpbmZvKTsKLXZvaWQgYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX2Vhcmx5 KGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbywKLSAgICBuc3RpbWVfdCAqcmVtYWluaW5n X3NsZWVwKTsKLXZvaWQgYmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazAodHNkbl90ICp0c2RuKTsK LXZvaWQgYmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazEodHNkbl90ICp0c2RuKTsKLXZvaWQgYmFj a2dyb3VuZF90aHJlYWRfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbik7Ci12b2lkIGJhY2tn cm91bmRfdGhyZWFkX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbik7Ci1ib29sIGJhY2tncm91 bmRfdGhyZWFkX3N0YXRzX3JlYWQodHNkbl90ICp0c2RuLAotICAgIGJhY2tncm91bmRfdGhyZWFk X3N0YXRzX3QgKnN0YXRzKTsKLXZvaWQgYmFja2dyb3VuZF90aHJlYWRfY3RsX2luaXQodHNkbl90 ICp0c2RuKTsKLQotI2lmZGVmIEpFTUFMTE9DX1BUSFJFQURfQ1JFQVRFX1dSQVBQRVIKLWV4dGVy biBpbnQgcHRocmVhZF9jcmVhdGVfd3JhcHBlcihwdGhyZWFkX3QgKl9fcmVzdHJpY3QsIGNvbnN0 IHB0aHJlYWRfYXR0cl90ICosCi0gICAgdm9pZCAqKCopKHZvaWQgKiksIHZvaWQgKl9fcmVzdHJp Y3QpOwotI2VuZGlmCi1ib29sIGJhY2tncm91bmRfdGhyZWFkX2Jvb3QwKHZvaWQpOwotYm9vbCBi YWNrZ3JvdW5kX3RocmVhZF9ib290MSh0c2RuX3QgKnRzZG4sIGJhc2VfdCAqYmFzZSk7Ci0KLSNl bmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9CQUNLR1JPVU5EX1RIUkVBRF9FWFRFUk5TX0ggKi8K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2JhY2tncm91bmRfdGhyZWFkX2lubGluZXMuaCBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvYmFja2dyb3VuZF90aHJlYWRfaW5saW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA5MmM1ZmViLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYmFja2dyb3VuZF90aHJlYWRfaW5s aW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19J TlRFUk5BTF9CQUNLR1JPVU5EX1RIUkVBRF9JTkxJTkVTX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5U RVJOQUxfQkFDS0dST1VORF9USFJFQURfSU5MSU5FU19ICi0KLUpFTUFMTE9DX0FMV0FZU19JTkxJ TkUgYm9vbAotYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCh2b2lkKSB7Ci0JcmV0dXJuIGF0b21p Y19sb2FkX2IoJmJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfc3RhdGUsIEFUT01JQ19SRUxBWEVE KTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1iYWNrZ3JvdW5kX3RocmVhZF9l bmFibGVkX3NldCh0c2RuX3QgKnRzZG4sIGJvb2wgc3RhdGUpIHsKLQltYWxsb2NfbXV0ZXhfYXNz ZXJ0X293bmVyKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKLQlhdG9taWNfc3RvcmVf YigmYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZF9zdGF0ZSwgc3RhdGUsIEFUT01JQ19SRUxBWEVE KTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3Qg KgotYXJlbmFfYmFja2dyb3VuZF90aHJlYWRfaW5mb19nZXQoYXJlbmFfdCAqYXJlbmEpIHsKLQl1 bnNpZ25lZCBhcmVuYV9pbmQgPSBhcmVuYV9pbmRfZ2V0KGFyZW5hKTsKLQlyZXR1cm4gJmJhY2tn cm91bmRfdGhyZWFkX2luZm9bYXJlbmFfaW5kICUgbWF4X2JhY2tncm91bmRfdGhyZWFkc107Ci19 Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICoKLWJh Y2tncm91bmRfdGhyZWFkX2luZm9fZ2V0KHNpemVfdCBpbmQpIHsKLQlyZXR1cm4gJmJhY2tncm91 bmRfdGhyZWFkX2luZm9baW5kICUgbWF4X2JhY2tncm91bmRfdGhyZWFkc107Ci19Ci0KLUpFTUFM TE9DX0FMV0FZU19JTkxJTkUgdWludDY0X3QKLWJhY2tncm91bmRfdGhyZWFkX3dha2V1cF90aW1l X2dldChiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8pIHsKLQl1aW50NjRfdCBuZXh0X3dh a2V1cCA9IG5zdGltZV9ucygmaW5mby0+bmV4dF93YWtldXApOwotCWFzc2VydChhdG9taWNfbG9h ZF9iKCZpbmZvLT5pbmRlZmluaXRlX3NsZWVwLCBBVE9NSUNfQUNRVUlSRSkgPT0KLQkgICAgKG5l eHRfd2FrZXVwID09IEJBQ0tHUk9VTkRfVEhSRUFEX0lOREVGSU5JVEVfU0xFRVApKTsKLQlyZXR1 cm4gbmV4dF93YWtldXA7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotYmFja2dy b3VuZF90aHJlYWRfd2FrZXVwX3RpbWVfc2V0KHRzZG5fdCAqdHNkbiwgYmFja2dyb3VuZF90aHJl YWRfaW5mb190ICppbmZvLAotICAgIHVpbnQ2NF90IHdha2V1cF90aW1lKSB7Ci0JbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmaW5mby0+bXR4KTsKLQlhdG9taWNfc3RvcmVfYigmaW5m by0+aW5kZWZpbml0ZV9zbGVlcCwKLQkgICAgd2FrZXVwX3RpbWUgPT0gQkFDS0dST1VORF9USFJF QURfSU5ERUZJTklURV9TTEVFUCwgQVRPTUlDX1JFTEVBU0UpOwotCW5zdGltZV9pbml0KCZpbmZv LT5uZXh0X3dha2V1cCwgd2FrZXVwX3RpbWUpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5F IGJvb2wKLWJhY2tncm91bmRfdGhyZWFkX2luZGVmaW5pdGVfc2xlZXAoYmFja2dyb3VuZF90aHJl YWRfaW5mb190ICppbmZvKSB7Ci0JcmV0dXJuIGF0b21pY19sb2FkX2IoJmluZm8tPmluZGVmaW5p dGVfc2xlZXAsIEFUT01JQ19BQ1FVSVJFKTsKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVS TkFMX0JBQ0tHUk9VTkRfVEhSRUFEX0lOTElORVNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv YmFja2dyb3VuZF90aHJlYWRfc3RydWN0cy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iYWNrZ3JvdW5kX3RocmVhZF9z dHJ1Y3RzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYTkxOTguLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9iYWNrZ3JvdW5kX3RocmVhZF9zdHJ1Y3RzLmgKKysrIC9kZXYvbnVsbApA QCAtMSw2NiArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0JBQ0tHUk9VTkRfVEhS RUFEX1NUUlVDVFNfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CQUNLR1JPVU5EX1RIUkVB RF9TVFJVQ1RTX0gKLQotLyogVGhpcyBmaWxlIHJlYWxseSBjb21iaW5lcyAic3RydWN0cyIgYW5k ICJ0eXBlcyIsIGJ1dCBvbmx5IHRyYW5zaXRpb25hbGx5LiAqLwotCi0jaWYgZGVmaW5lZChKRU1B TExPQ19CQUNLR1JPVU5EX1RIUkVBRCkgfHwgZGVmaW5lZChKRU1BTExPQ19MQVpZX0xPQ0spCi0j ICBkZWZpbmUgSkVNQUxMT0NfUFRIUkVBRF9DUkVBVEVfV1JBUFBFUgotI2VuZGlmCi0KLSNkZWZp bmUgQkFDS0dST1VORF9USFJFQURfSU5ERUZJTklURV9TTEVFUCBVSU5UNjRfTUFYCi0jZGVmaW5l IE1BWF9CQUNLR1JPVU5EX1RIUkVBRF9MSU1JVCBNQUxMT0NYX0FSRU5BX0xJTUlUCi0jZGVmaW5l IERFRkFVTFRfTlVNX0JBQ0tHUk9VTkRfVEhSRUFEIDQKLQotLyoKLSAqIFRoZXNlIGV4aXN0IG9u bHkgYXMgYSB0cmFuc2l0aW9uYWwgc3RhdGUuICBFdmVudHVhbGx5LCBkZWZlcnJhbCBzaG91bGQg YmUKLSAqIHBhcnQgb2YgdGhlIFBBSSwgYW5kIGVhY2ggaW1wbGVtZW50YXRpb24gY2FuIGluZGlj YXRlIHdhaXQgdGltZXMgd2l0aCBtb3JlCi0gKiBzcGVjaWZpY2l0eS4KLSAqLwotI2RlZmluZSBC QUNLR1JPVU5EX1RIUkVBRF9IUEFfSU5URVJWQUxfTUFYX1VOSU5JVElBTElaRUQgKC0yKQotI2Rl ZmluZSBCQUNLR1JPVU5EX1RIUkVBRF9IUEFfSU5URVJWQUxfTUFYX0RFRkFVTFRfV0hFTl9FTkFC TEVEIDUwMDAKLQotI2RlZmluZSBCQUNLR1JPVU5EX1RIUkVBRF9ERUZFUlJFRF9NSU4gVUlOVDY0 X0MoMCkKLSNkZWZpbmUgQkFDS0dST1VORF9USFJFQURfREVGRVJSRURfTUFYIFVJTlQ2NF9NQVgK LQotdHlwZWRlZiBlbnVtIHsKLQliYWNrZ3JvdW5kX3RocmVhZF9zdG9wcGVkLAotCWJhY2tncm91 bmRfdGhyZWFkX3N0YXJ0ZWQsCi0JLyogVGhyZWFkIHdhaXRzIG9uIHRoZSBnbG9iYWwgbG9jayB3 aGVuIHBhdXNlZCAoZm9yIGFyZW5hX3Jlc2V0KS4gKi8KLQliYWNrZ3JvdW5kX3RocmVhZF9wYXVz ZWQsCi19IGJhY2tncm91bmRfdGhyZWFkX3N0YXRlX3Q7Ci0KLXN0cnVjdCBiYWNrZ3JvdW5kX3Ro cmVhZF9pbmZvX3MgewotI2lmZGVmIEpFTUFMTE9DX0JBQ0tHUk9VTkRfVEhSRUFECi0JLyogQmFj a2dyb3VuZCB0aHJlYWQgaXMgcHRocmVhZCBzcGVjaWZpYy4gKi8KLQlwdGhyZWFkX3QJCXRocmVh ZDsKLQlwdGhyZWFkX2NvbmRfdAkJY29uZDsKLSNlbmRpZgotCW1hbGxvY19tdXRleF90CQltdHg7 Ci0JYmFja2dyb3VuZF90aHJlYWRfc3RhdGVfdAlzdGF0ZTsKLQkvKiBXaGVuIHRydWUsIGl0IG1l YW5zIG5vIHdha2V1cCBzY2hlZHVsZWQuICovCi0JYXRvbWljX2JfdAkJaW5kZWZpbml0ZV9zbGVl cDsKLQkvKiBOZXh0IHNjaGVkdWxlZCB3YWtldXAgdGltZSAoYWJzb2x1dGUgdGltZSBpbiBucyku ICovCi0JbnN0aW1lX3QJCW5leHRfd2FrZXVwOwotCS8qCi0JICogIFNpbmNlIHRoZSBsYXN0IGJh Y2tncm91bmQgdGhyZWFkIHJ1biwgbmV3bHkgYWRkZWQgbnVtYmVyIG9mIHBhZ2VzCi0JICogIHRo YXQgbmVlZCB0byBiZSBwdXJnZWQgYnkgdGhlIG5leHQgd2FrZXVwLiAgVGhpcyBpcyBhZGp1c3Rl ZCBvbgotCSAqICBlcG9jaCBhZHZhbmNlLCBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhl ciB3ZSBzaG91bGQgc2lnbmFsIHRoZQotCSAqICBiYWNrZ3JvdW5kIHRocmVhZCB0byB3YWtlIHVw IGVhcmxpZXIuCi0JICovCi0Jc2l6ZV90CQkJbnBhZ2VzX3RvX3B1cmdlX25ldzsKLQkvKiBTdGF0 czogdG90YWwgbnVtYmVyIG9mIHJ1bnMgc2luY2Ugc3RhcnRlZC4gKi8KLQl1aW50NjRfdAkJdG90 X25fcnVuczsKLQkvKiBTdGF0czogdG90YWwgc2xlZXAgdGltZSBzaW5jZSBzdGFydGVkLiAqLwot CW5zdGltZV90CQl0b3Rfc2xlZXBfdGltZTsKLX07Ci10eXBlZGVmIHN0cnVjdCBiYWNrZ3JvdW5k X3RocmVhZF9pbmZvX3MgYmFja2dyb3VuZF90aHJlYWRfaW5mb190OwotCi1zdHJ1Y3QgYmFja2dy b3VuZF90aHJlYWRfc3RhdHNfcyB7Ci0Jc2l6ZV90IG51bV90aHJlYWRzOwotCXVpbnQ2NF90IG51 bV9ydW5zOwotCW5zdGltZV90IHJ1bl9pbnRlcnZhbDsKLQltdXRleF9wcm9mX2RhdGFfdCBtYXhf Y291bnRlcl9wZXJfYmdfdGhkOwotfTsKLXR5cGVkZWYgc3RydWN0IGJhY2tncm91bmRfdGhyZWFk X3N0YXRzX3MgYmFja2dyb3VuZF90aHJlYWRfc3RhdHNfdDsKLQotI2VuZGlmIC8qIEpFTUFMTE9D X0lOVEVSTkFMX0JBQ0tHUk9VTkRfVEhSRUFEX1NUUlVDVFNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvYmFzZS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDliMmM5ZmIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iYXNlLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxMTAgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9CQVNFX0gKLSNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfQkFTRV9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9lZGF0YS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Vob29rcy5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0KLWVudW0gbWV0YWRhdGFfdGhwX21vZGVf ZSB7Ci0JbWV0YWRhdGFfdGhwX2Rpc2FibGVkICAgPSAwLAotCS8qCi0JICogTGF6aWx5IGVuYWJs ZSBodWdlcGFnZSBmb3IgbWV0YWRhdGEuIFRvIGF2b2lkIGhpZ2ggUlNTIGNhdXNlZCBieSBUSFAK LQkgKiArIGxvdyB1c2FnZSBhcmVuYSAoaS5lLiBUSFAgYmVjb21lcyBhIHNpZ25pZmljYW50IHBl cmNlbnRhZ2UpLCB0aGUKLQkgKiAiYXV0byIgb3B0aW9uIG9ubHkgc3RhcnRzIHVzaW5nIFRIUCBh ZnRlciBhIGJhc2UgYWxsb2NhdG9yIHVzZWQgdXAKLQkgKiB0aGUgZmlyc3QgVEhQIHJlZ2lvbi4g IFN0YXJ0aW5nIGZyb20gdGhlIHNlY29uZCBodWdlcGFnZSAoaW4gYSBzaW5nbGUKLQkgKiBhcmVu YSksICJhdXRvIiBiZWhhdmVzIHRoZSBzYW1lIGFzICJhbHdheXMiLCBpLmUuIG1hZHZpc2UgaHVn ZXBhZ2UKLQkgKiByaWdodCBhd2F5LgotCSAqLwotCW1ldGFkYXRhX3RocF9hdXRvICAgICAgID0g MSwKLQltZXRhZGF0YV90aHBfYWx3YXlzICAgICA9IDIsCi0JbWV0YWRhdGFfdGhwX21vZGVfbGlt aXQgPSAzCi19OwotdHlwZWRlZiBlbnVtIG1ldGFkYXRhX3RocF9tb2RlX2UgbWV0YWRhdGFfdGhw X21vZGVfdDsKLQotI2RlZmluZSBNRVRBREFUQV9USFBfREVGQVVMVCBtZXRhZGF0YV90aHBfZGlz YWJsZWQKLWV4dGVybiBtZXRhZGF0YV90aHBfbW9kZV90IG9wdF9tZXRhZGF0YV90aHA7Ci1leHRl cm4gY29uc3QgY2hhciAqbWV0YWRhdGFfdGhwX21vZGVfbmFtZXNbXTsKLQotCi0vKiBFbWJlZGRl ZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGJsb2NrIG9mIGJhc2UtbWFuYWdlZCB2aXJ0dWFs IG1lbW9yeS4gKi8KLXR5cGVkZWYgc3RydWN0IGJhc2VfYmxvY2tfcyBiYXNlX2Jsb2NrX3Q7Ci1z dHJ1Y3QgYmFzZV9ibG9ja19zIHsKLQkvKiBUb3RhbCBzaXplIG9mIGJsb2NrJ3MgdmlydHVhbCBt ZW1vcnkgbWFwcGluZy4gKi8KLQlzaXplX3Qgc2l6ZTsKLQotCS8qIE5leHQgYmxvY2sgaW4gbGlz dCBvZiBiYXNlJ3MgYmxvY2tzLiAqLwotCWJhc2VfYmxvY2tfdCAqbmV4dDsKLQotCS8qIFRyYWNr cyB1bnVzZWQgdHJhaWxpbmcgc3BhY2UuICovCi0JZWRhdGFfdCBlZGF0YTsKLX07Ci0KLXR5cGVk ZWYgc3RydWN0IGJhc2VfcyBiYXNlX3Q7Ci1zdHJ1Y3QgYmFzZV9zIHsKLQkvKgotCSAqIFVzZXIt Y29uZmlndXJhYmxlIGV4dGVudCBob29rIGZ1bmN0aW9ucy4KLQkgKi8KLQllaG9va3NfdCBlaG9v a3M7Ci0KLQkvKgotCSAqIFVzZXItY29uZmlndXJhYmxlIGV4dGVudCBob29rIGZ1bmN0aW9ucyBm b3IgbWV0YWRhdGEgYWxsb2NhdGlvbnMuCi0JICovCi0JZWhvb2tzX3QgZWhvb2tzX2Jhc2U7Ci0K LQkvKiBQcm90ZWN0cyBiYXNlX2FsbG9jKCkgYW5kIGJhc2Vfc3RhdHNfZ2V0KCkgb3BlcmF0aW9u cy4gKi8KLQltYWxsb2NfbXV0ZXhfdCBtdHg7Ci0KLQkvKiBVc2luZyBUSFAgd2hlbiB0cnVlICht ZXRhZGF0YV90aHAgYXV0byBtb2RlKS4gKi8KLQlib29sIGF1dG9fdGhwX3N3aXRjaGVkOwotCS8q Ci0JICogTW9zdCByZWNlbnQgc2l6ZSBjbGFzcyBpbiB0aGUgc2VyaWVzIG9mIGluY3JlYXNpbmds eSBsYXJnZSBiYXNlCi0JICogZXh0ZW50cy4gIExvZ2FyaXRobWljIHNwYWNpbmcgYmV0d2VlbiBz dWJzZXF1ZW50IGFsbG9jYXRpb25zIGVuc3VyZXMKLQkgKiB0aGF0IHRoZSB0b3RhbCBudW1iZXIg b2YgZGlzdGluY3QgbWFwcGluZ3MgcmVtYWlucyBzbWFsbC4KLQkgKi8KLQlwc3ppbmRfdCBwaW5k X2xhc3Q7Ci0KLQkvKiBTZXJpYWwgbnVtYmVyIGdlbmVyYXRpb24gc3RhdGUuICovCi0Jc2l6ZV90 IGV4dGVudF9zbl9uZXh0OwotCi0JLyogQ2hhaW4gb2YgYWxsIGJsb2NrcyBhc3NvY2lhdGVkIHdp dGggYmFzZS4gKi8KLQliYXNlX2Jsb2NrX3QgKmJsb2NrczsKLQotCS8qIEhlYXAgb2YgZXh0ZW50 cyB0aGF0IHRyYWNrIHVudXNlZCB0cmFpbGluZyBzcGFjZSB3aXRoaW4gYmxvY2tzLiAqLwotCWVk YXRhX2hlYXBfdCBhdmFpbFtTQ19OU0laRVNdOwotCi0JLyogU3RhdHMsIG9ubHkgbWFpbnRhaW5l ZCBpZiBjb25maWdfc3RhdHMuICovCi0Jc2l6ZV90IGFsbG9jYXRlZDsKLQlzaXplX3QgcmVzaWRl bnQ7Ci0Jc2l6ZV90IG1hcHBlZDsKLQkvKiBOdW1iZXIgb2YgVEhQIHJlZ2lvbnMgdG91Y2hlZC4g Ki8KLQlzaXplX3Qgbl90aHA7Ci19OwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1iYXNlX2lu ZF9nZXQoY29uc3QgYmFzZV90ICpiYXNlKSB7Ci0JcmV0dXJuIGVob29rc19pbmRfZ2V0KCZiYXNl LT5laG9va3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLW1ldGFkYXRhX3RocF9lbmFibGVk KHZvaWQpIHsKLQlyZXR1cm4gKG9wdF9tZXRhZGF0YV90aHAgIT0gbWV0YWRhdGFfdGhwX2Rpc2Fi bGVkKTsKLX0KLQotYmFzZV90ICpiMGdldCh2b2lkKTsKLWJhc2VfdCAqYmFzZV9uZXcodHNkbl90 ICp0c2RuLCB1bnNpZ25lZCBpbmQsCi0gICAgY29uc3QgZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9o b29rcywgYm9vbCBtZXRhZGF0YV91c2VfaG9va3MpOwotdm9pZCBiYXNlX2RlbGV0ZSh0c2RuX3Qg KnRzZG4sIGJhc2VfdCAqYmFzZSk7Ci1laG9va3NfdCAqYmFzZV9laG9va3NfZ2V0KGJhc2VfdCAq YmFzZSk7Ci1laG9va3NfdCAqYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0YShiYXNlX3QgKmJh c2UpOwotZXh0ZW50X2hvb2tzX3QgKmJhc2VfZXh0ZW50X2hvb2tzX3NldChiYXNlX3QgKmJhc2Us Ci0gICAgZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcyk7Ci12b2lkICpiYXNlX2FsbG9jKHRz ZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCk7 Ci1lZGF0YV90ICpiYXNlX2FsbG9jX2VkYXRhKHRzZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlKTsK LXZvaWQgYmFzZV9zdGF0c19nZXQodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UsIHNpemVfdCAq YWxsb2NhdGVkLAotICAgIHNpemVfdCAqcmVzaWRlbnQsIHNpemVfdCAqbWFwcGVkLCBzaXplX3Qg Km5fdGhwKTsKLXZvaWQgYmFzZV9wcmVmb3JrKHRzZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlKTsK LXZvaWQgYmFzZV9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UpOwot dm9pZCBiYXNlX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbiwgYmFzZV90ICpiYXNlKTsKLWJv b2wgYmFzZV9ib290KHRzZG5fdCAqdHNkbik7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5B TF9CQVNFX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Jpbi5oIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iaW4uaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNmOTczOS4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL2Jpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExP Q19JTlRFUk5BTF9CSU5fSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CSU5fSAotCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmluX3N0YXRzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvYmluX3R5cGVzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZWRhdGEu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgotI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3NjLmgiCi0KLS8qCi0gKiBBIGJpbiBjb250YWlucyBhIHNldCBvZiBleHRl bnRzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyB1c2VkIGZvciBzbGFiCi0gKiBhbGxvY2F0aW9u cy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgYmluX3MgYmluX3Q7Ci1zdHJ1Y3QgYmluX3MgewotCS8q IEFsbCBvcGVyYXRpb25zIG9uIGJpbl90IGZpZWxkcyByZXF1aXJlIGxvY2sgb3duZXJzaGlwLiAq LwotCW1hbGxvY19tdXRleF90CQlsb2NrOwotCi0JLyoKLQkgKiBCaW4gc3RhdGlzdGljcy4gIFRo ZXNlIGdldCB0b3VjaGVkIGV2ZXJ5IHRpbWUgdGhlIGxvY2sgaXMgYWNxdWlyZWQsCi0JICogc28g cHV0IHRoZW0gY2xvc2UgYnkgaW4gdGhlIGhvcGVzIG9mIGdldHRpbmcgc29tZSBjYWNoZSBsb2Nh bGl0eS4KLQkgKi8KLQliaW5fc3RhdHNfdAlzdGF0czsKLQotCS8qCi0JICogQ3VycmVudCBzbGFi IGJlaW5nIHVzZWQgdG8gc2VydmljZSBhbGxvY2F0aW9ucyBvZiB0aGlzIGJpbidzIHNpemUKLQkg KiBjbGFzcy4gIHNsYWJjdXIgaXMgaW5kZXBlbmRlbnQgb2Ygc2xhYnNfe25vbmZ1bGwsZnVsbH07 IHdoZW5ldmVyCi0JICogc2xhYmN1ciBpcyByZWFzc2lnbmVkLCB0aGUgcHJldmlvdXMgc2xhYiBt dXN0IGJlIGRlYWxsb2NhdGVkIG9yCi0JICogaW5zZXJ0ZWQgaW50byBzbGFic197bm9uZnVsbCxm dWxsfS4KLQkgKi8KLQllZGF0YV90CQkJKnNsYWJjdXI7Ci0KLQkvKgotCSAqIEhlYXAgb2Ygbm9u LWZ1bGwgc2xhYnMuICBUaGlzIGhlYXAgaXMgdXNlZCB0byBhc3N1cmUgdGhhdCBuZXcKLQkgKiBh bGxvY2F0aW9ucyBjb21lIGZyb20gdGhlIG5vbi1mdWxsIHNsYWIgdGhhdCBpcyBvbGRlc3QvbG93 ZXN0IGluCi0JICogbWVtb3J5LgotCSAqLwotCWVkYXRhX2hlYXBfdAkJc2xhYnNfbm9uZnVsbDsK LQotCS8qIExpc3QgdXNlZCB0byB0cmFjayBmdWxsIHNsYWJzLiAqLwotCWVkYXRhX2xpc3RfYWN0 aXZlX3QJc2xhYnNfZnVsbDsKLX07Ci0KLS8qIEEgc2V0IG9mIHNoYXJkZWQgYmlucyBvZiB0aGUg c2FtZSBzaXplIGNsYXNzLiAqLwotdHlwZWRlZiBzdHJ1Y3QgYmluc19zIGJpbnNfdDsKLXN0cnVj dCBiaW5zX3MgewotCS8qIFNoYXJkZWQgYmlucy4gIER5bmFtaWNhbGx5IHNpemVkLiAqLwotCWJp bl90ICpiaW5fc2hhcmRzOwotfTsKLQotdm9pZCBiaW5fc2hhcmRfc2l6ZXNfYm9vdCh1bnNpZ25l ZCBiaW5fc2hhcmRzW1NDX05CSU5TXSk7Ci1ib29sIGJpbl91cGRhdGVfc2hhcmRfc2l6ZSh1bnNp Z25lZCBiaW5fc2hhcmRzW1NDX05CSU5TXSwgc2l6ZV90IHN0YXJ0X3NpemUsCi0gICAgc2l6ZV90 IGVuZF9zaXplLCBzaXplX3QgbnNoYXJkcyk7Ci0KLS8qIEluaXRpYWxpemVzIGEgYmluIHRvIGVt cHR5LiAgUmV0dXJucyB0cnVlIG9uIGVycm9yLiAqLwotYm9vbCBiaW5faW5pdChiaW5fdCAqYmlu KTsKLQotLyogRm9ya2luZy4gKi8KLXZvaWQgYmluX3ByZWZvcmsodHNkbl90ICp0c2RuLCBiaW5f dCAqYmluKTsKLXZvaWQgYmluX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGJpbl90ICpi aW4pOwotdm9pZCBiaW5fcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBiaW5fdCAqYmluKTsK LQotLyogU3RhdHMuICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWJpbl9zdGF0c19tZXJnZSh0c2Ru X3QgKnRzZG4sIGJpbl9zdGF0c19kYXRhX3QgKmRzdF9iaW5fc3RhdHMsIGJpbl90ICpiaW4pIHsK LQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYmluLT5sb2NrKTsKLQltYWxsb2NfbXV0ZXhfcHJv Zl9hY2N1bSh0c2RuLCAmZHN0X2Jpbl9zdGF0cy0+bXV0ZXhfZGF0YSwgJmJpbi0+bG9jayk7Ci0J YmluX3N0YXRzX3QgKnN0YXRzID0gJmRzdF9iaW5fc3RhdHMtPnN0YXRzX2RhdGE7Ci0Jc3RhdHMt Pm5tYWxsb2MgKz0gYmluLT5zdGF0cy5ubWFsbG9jOwotCXN0YXRzLT5uZGFsbG9jICs9IGJpbi0+ c3RhdHMubmRhbGxvYzsKLQlzdGF0cy0+bnJlcXVlc3RzICs9IGJpbi0+c3RhdHMubnJlcXVlc3Rz OwotCXN0YXRzLT5jdXJyZWdzICs9IGJpbi0+c3RhdHMuY3VycmVnczsKLQlzdGF0cy0+bmZpbGxz ICs9IGJpbi0+c3RhdHMubmZpbGxzOwotCXN0YXRzLT5uZmx1c2hlcyArPSBiaW4tPnN0YXRzLm5m bHVzaGVzOwotCXN0YXRzLT5uc2xhYnMgKz0gYmluLT5zdGF0cy5uc2xhYnM7Ci0Jc3RhdHMtPnJl c2xhYnMgKz0gYmluLT5zdGF0cy5yZXNsYWJzOwotCXN0YXRzLT5jdXJzbGFicyArPSBiaW4tPnN0 YXRzLmN1cnNsYWJzOwotCXN0YXRzLT5ub25mdWxsX3NsYWJzICs9IGJpbi0+c3RhdHMubm9uZnVs bF9zbGFiczsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZiaW4tPmxvY2spOwotfQotCi0j ZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQklOX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2Jpbl9pbmZvLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2Jpbl9pbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDdmZTY1YzguLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iaW5faW5mby5oCisrKyAvZGV2 L251bGwKQEAgLTEsNTAgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9CSU5fSU5G T19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0JJTl9JTkZPX0gKLQotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2JpdG1hcC5oIgotCi0vKgotICogUmVhZC1vbmx5IGluZm9ybWF0aW9u IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGVsZW1lbnQgb2YgYXJlbmFfdCdzIGJpbnMgYXJyYXkKLSAq IGlzIHN0b3JlZCBzZXBhcmF0ZWx5LCBwYXJ0bHkgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZSAob25s eSBvbmUgY29weSwgcmF0aGVyCi0gKiB0aGFuIG9uZSBwZXIgYXJlbmEpLCBidXQgbWFpbmx5IHRv IGF2b2lkIGZhbHNlIGNhY2hlbGluZSBzaGFyaW5nLgotICoKLSAqIEVhY2ggc2xhYiBoYXMgdGhl IGZvbGxvd2luZyBsYXlvdXQ6Ci0gKgotICogICAvLS0tLS0tLS0tLS0tLS0tLS0tLS1cCi0gKiAg IHwgcmVnaW9uIDAgICAgICAgICAgIHwKLSAqICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAotICog ICB8IHJlZ2lvbiAxICAgICAgICAgICB8Ci0gKiAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAq ICAgfCAuLi4gICAgICAgICAgICAgICAgfAotICogICB8IC4uLiAgICAgICAgICAgICAgICB8Ci0g KiAgIHwgLi4uICAgICAgICAgICAgICAgIHwKLSAqICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAot ICogICB8IHJlZ2lvbiBucmVncy0xICAgICB8Ci0gKiAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLS8K LSAqLwotdHlwZWRlZiBzdHJ1Y3QgYmluX2luZm9fcyBiaW5faW5mb190Owotc3RydWN0IGJpbl9p bmZvX3MgewotCS8qIFNpemUgb2YgcmVnaW9ucyBpbiBhIHNsYWIgZm9yIHRoaXMgYmluJ3Mgc2l6 ZSBjbGFzcy4gKi8KLQlzaXplX3QJCQlyZWdfc2l6ZTsKLQotCS8qIFRvdGFsIHNpemUgb2YgYSBz bGFiIGZvciB0aGlzIGJpbidzIHNpemUgY2xhc3MuICovCi0Jc2l6ZV90CQkJc2xhYl9zaXplOwot Ci0JLyogVG90YWwgbnVtYmVyIG9mIHJlZ2lvbnMgaW4gYSBzbGFiIGZvciB0aGlzIGJpbidzIHNp emUgY2xhc3MuICovCi0JdWludDMyX3QJCW5yZWdzOwotCi0JLyogTnVtYmVyIG9mIHNoYXJkZWQg YmlucyBpbiBlYWNoIGFyZW5hIGZvciB0aGlzIHNpemUgY2xhc3MuICovCi0JdWludDMyX3QJCW5f c2hhcmRzOwotCi0JLyoKLQkgKiBNZXRhZGF0YSB1c2VkIHRvIG1hbmlwdWxhdGUgYml0bWFwcyBm b3Igc2xhYnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLQkgKiBiaW4uCi0JICovCi0JYml0bWFwX2lu Zm9fdAkJYml0bWFwX2luZm87Ci19OwotCi1leHRlcm4gYmluX2luZm9fdCBiaW5faW5mb3NbU0Nf TkJJTlNdOwotCi12b2lkIGJpbl9pbmZvX2Jvb3Qoc2NfZGF0YV90ICpzY19kYXRhLCB1bnNpZ25l ZCBiaW5fc2hhcmRfc2l6ZXNbU0NfTkJJTlNdKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVS TkFMX0JJTl9JTkZPX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Jpbl9zdGF0cy5oIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9iaW5fc3RhdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI5OTI5Ny4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2Jpbl9zdGF0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcg KzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9CSU5fU1RBVFNfSAotI2RlZmluZSBK RU1BTExPQ19JTlRFUk5BTF9CSU5fU1RBVFNfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvbXV0ZXhfcHJvZi5oIgotCi10eXBlZGVmIHN0cnVjdCBiaW5fc3RhdHNfcyBiaW5fc3RhdHNf dDsKLXN0cnVjdCBiaW5fc3RhdHNfcyB7Ci0JLyoKLQkgKiBUb3RhbCBudW1iZXIgb2YgYWxsb2Nh dGlvbi9kZWFsbG9jYXRpb24gcmVxdWVzdHMgc2VydmVkIGRpcmVjdGx5IGJ5Ci0JICogdGhlIGJp bi4gIE5vdGUgdGhhdCB0Y2FjaGUgbWF5IGFsbG9jYXRlIGFuIG9iamVjdCwgdGhlbiByZWN5Y2xl IGl0Ci0JICogbWFueSB0aW1lcywgcmVzdWx0aW5nIG1hbnkgaW5jcmVtZW50cyB0byBucmVxdWVz dHMsIGJ1dCBvbmx5IG9uZQotCSAqIGVhY2ggdG8gbm1hbGxvYyBhbmQgbmRhbGxvYy4KLQkgKi8K LQl1aW50NjRfdAlubWFsbG9jOwotCXVpbnQ2NF90CW5kYWxsb2M7Ci0KLQkvKgotCSAqIE51bWJl ciBvZiBhbGxvY2F0aW9uIHJlcXVlc3RzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc2l6ZSBvZiB0 aGlzCi0JICogYmluLiAgVGhpcyBpbmNsdWRlcyByZXF1ZXN0cyBzZXJ2ZWQgYnkgdGNhY2hlLCB0 aG91Z2ggdGNhY2hlIG9ubHkKLQkgKiBwZXJpb2RpY2FsbHkgbWVyZ2VzIGludG8gdGhpcyBjb3Vu dGVyLgotCSAqLwotCXVpbnQ2NF90CW5yZXF1ZXN0czsKLQotCS8qCi0JICogQ3VycmVudCBudW1i ZXIgb2YgcmVnaW9ucyBvZiB0aGlzIHNpemUgY2xhc3MsIGluY2x1ZGluZyByZWdpb25zCi0JICog Y3VycmVudGx5IGNhY2hlZCBieSB0Y2FjaGUuCi0JICovCi0Jc2l6ZV90CQljdXJyZWdzOwotCi0J LyogTnVtYmVyIG9mIHRjYWNoZSBmaWxscyBmcm9tIHRoaXMgYmluLiAqLwotCXVpbnQ2NF90CW5m aWxsczsKLQotCS8qIE51bWJlciBvZiB0Y2FjaGUgZmx1c2hlcyB0byB0aGlzIGJpbi4gKi8KLQl1 aW50NjRfdAluZmx1c2hlczsKLQotCS8qIFRvdGFsIG51bWJlciBvZiBzbGFicyBjcmVhdGVkIGZv ciB0aGlzIGJpbidzIHNpemUgY2xhc3MuICovCi0JdWludDY0X3QJbnNsYWJzOwotCi0JLyoKLQkg KiBUb3RhbCBudW1iZXIgb2Ygc2xhYnMgcmV1c2VkIGJ5IGV4dHJhY3RpbmcgdGhlbSBmcm9tIHRo ZSBzbGFicyBoZWFwCi0JICogZm9yIHRoaXMgYmluJ3Mgc2l6ZSBjbGFzcy4KLQkgKi8KLQl1aW50 NjRfdAlyZXNsYWJzOwotCi0JLyogQ3VycmVudCBudW1iZXIgb2Ygc2xhYnMgaW4gdGhpcyBiaW4u ICovCi0Jc2l6ZV90CQljdXJzbGFiczsKLQotCS8qIEN1cnJlbnQgc2l6ZSBvZiBub25mdWxsIHNs YWJzIGhlYXAgaW4gdGhpcyBiaW4uICovCi0Jc2l6ZV90CQlub25mdWxsX3NsYWJzOwotfTsKLQot dHlwZWRlZiBzdHJ1Y3QgYmluX3N0YXRzX2RhdGFfcyBiaW5fc3RhdHNfZGF0YV90Owotc3RydWN0 IGJpbl9zdGF0c19kYXRhX3MgewotCWJpbl9zdGF0c190IHN0YXRzX2RhdGE7Ci0JbXV0ZXhfcHJv Zl9kYXRhX3QgbXV0ZXhfZGF0YTsKLX07Ci0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQklO X1NUQVRTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Jpbl90eXBlcy5oIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9i aW5fdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ1ZTgzMi4uMDAwMDAw MAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL2Jpbl90eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBA QAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9CSU5fVFlQRVNfSAotI2RlZmluZSBKRU1BTExP Q19JTlRFUk5BTF9CSU5fVFlQRVNfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2Mu aCIKLQotI2RlZmluZSBCSU5fU0hBUkRTX01BWCAoMSA8PCBFREFUQV9CSVRTX0JJTlNIQVJEX1dJ RFRIKQotI2RlZmluZSBOX0JJTl9TSEFSRFNfREVGQVVMVCAxCi0KLS8qIFVzZWQgaW4gVFNEIHN0 YXRpYyBpbml0aWFsaXplciBvbmx5LiBSZWFsIGluaXQgaW4gYXJlbmFfYmluZCgpLiAqLwotI2Rl ZmluZSBUU0RfQklOU0hBUkRTX1pFUk9fSU5JVElBTElaRVIge3tVSU5UOF9NQVh9fQotCi10eXBl ZGVmIHN0cnVjdCB0c2RfYmluc2hhcmRzX3MgdHNkX2JpbnNoYXJkc190Owotc3RydWN0IHRzZF9i aW5zaGFyZHNfcyB7Ci0JdWludDhfdCBiaW5zaGFyZFtTQ19OQklOU107Ci19OwotCi0jZW5kaWYg LyogSkVNQUxMT0NfSU5URVJOQUxfQklOX1RZUEVTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2JpdF91dGlsLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2JpdF91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGJhYzU5MTQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9iaXRfdXRpbC5oCisrKyAvZGV2 L251bGwKQEAgLTEsNDIyICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfQklUX1VU SUxfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CSVRfVVRJTF9ICi0KLSNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKLQotLyogU2FuaXR5IGNoZWNrLiAqLwotI2lmICFk ZWZpbmVkKEpFTUFMTE9DX0lOVEVSTkFMX0ZGU0xMKSB8fCAhZGVmaW5lZChKRU1BTExPQ19JTlRF Uk5BTF9GRlNMKSBcCi0gICAgfHwgIWRlZmluZWQoSkVNQUxMT0NfSU5URVJOQUxfRkZTKQotIyAg ZXJyb3IgSkVNQUxMT0NfSU5URVJOQUxfRkZTeyxMLExMfSBzaG91bGQgaGF2ZSBiZWVuIGRlZmlu ZWQgYnkgY29uZmlndXJlCi0jZW5kaWYKLQotLyoKLSAqIFVubGlrZSB0aGUgYnVpbHRpbnMgYW5k IHBvc2l4IGZmcyBmdW5jdGlvbnMsIG91ciBmZnMgcmVxdWlyZXMgYSBub24temVybwotICogaW5w dXQsIGFuZCByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbG93ZXN0IGJpdCBzZXQgKGFzIG9w cG9zZWQgdG8gdGhlCi0gKiBwb3NpeCB2ZXJzaW9ucywgd2hpY2ggcmV0dXJuIDEgbGFyZ2VyIHRo YW4gdGhhdCBwb3NpdGlvbiBhbmQgdXNlIGEgcmV0dXJuCi0gKiB2YWx1ZSBvZiB6ZXJvIGFzIGEg c2VudGluZWwuICBUaGlzIHRlbmRzIHRvIHNpbXBsaWZ5IGxvZ2ljIGluIGNhbGxlcnMsIGFuZAot ICogYWxsb3dzIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBidWlsdGlucyB3ZSBidWlsZCBmbHMg b24gdG9wIG9mLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1mZnNfbGx1KHVuc2lnbmVk IGxvbmcgbG9uZyB4KSB7Ci0JdXRpbF9hc3N1bWUoeCAhPSAwKTsKLQlyZXR1cm4gSkVNQUxMT0Nf SU5URVJOQUxfRkZTTEwoeCkgLSAxOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1mZnNf bHUodW5zaWduZWQgbG9uZyB4KSB7Ci0JdXRpbF9hc3N1bWUoeCAhPSAwKTsKLQlyZXR1cm4gSkVN QUxMT0NfSU5URVJOQUxfRkZTTCh4KSAtIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQK LWZmc191KHVuc2lnbmVkIHgpIHsKLQl1dGlsX2Fzc3VtZSh4ICE9IDApOwotCXJldHVybiBKRU1B TExPQ19JTlRFUk5BTF9GRlMoeCkgLSAxOwotfQotCi0jZGVmaW5lIERPX0ZMU19TTE9XKHgsIHN1 ZmZpeCkgZG8gewkJCQkJXAotCXV0aWxfYXNzdW1lKHggIT0gMCk7CQkJCQkJXAotCXggfD0gKHgg Pj4gMSk7CQkJCQkJCVwKLQl4IHw9ICh4ID4+IDIpOwkJCQkJCQlcCi0JeCB8PSAoeCA+PiA0KTsJ CQkJCQkJXAotCXggfD0gKHggPj4gOCk7CQkJCQkJCVwKLQl4IHw9ICh4ID4+IDE2KTsJCQkJCQkJ XAotCWlmIChzaXplb2YoeCkgPiA0KSB7CQkJCQkJXAotCQkvKgkJCQkJCQlcCi0JCSAqIElmIHNp emVvZih4KSBpcyA0LCB0aGVuIHRoZSBleHByZXNzaW9uICJ4ID4+IDMyIglcCi0JCSAqIHdpbGwg Z2VuZXJhdGUgY29tcGlsZXIgd2FybmluZ3MgZXZlbiBpZiB0aGUgY29kZQlcCi0JCSAqIG5ldmVy IGV4ZWN1dGVzLiAgVGhpcyBjaXJjdW12ZW50cyB0aGUgd2FybmluZywgYW5kCVwKLQkJICogZ2V0 cyBjb21waWxlZCBvdXQgaW4gb3B0aW1pemVkIGJ1aWxkcy4JCVwKLQkJICovCQkJCQkJCVwKLQkJ aW50IGNvbnN0YW50XzMyID0gc2l6ZW9mKHgpICogNDsJCQlcCi0JCXggfD0gKHggPj4gY29uc3Rh bnRfMzIpOwkJCQlcCi0JfQkJCQkJCQkJXAotCXgrKzsJCQkJCQkJCVwKLQlpZiAoeCA9PSAwKSB7 CQkJCQkJCVwKLQkJcmV0dXJuIDggKiBzaXplb2YoeCkgLSAxOwkJCQlcCi0JfQkJCQkJCQkJXAot CXJldHVybiBmZnNfIyNzdWZmaXgoeCkgLSAxOwkJCQkJXAotfSB3aGlsZSgwKQotCi1zdGF0aWMg aW5saW5lIHVuc2lnbmVkCi1mbHNfbGx1X3Nsb3codW5zaWduZWQgbG9uZyBsb25nIHgpIHsKLQlE T19GTFNfU0xPVyh4LCBsbHUpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1mbHNfbHVf c2xvdyh1bnNpZ25lZCBsb25nIHgpIHsKLQlET19GTFNfU0xPVyh4LCBsdSk7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgdW5zaWduZWQKLWZsc191X3Nsb3codW5zaWduZWQgeCkgewotCURPX0ZMU19TTE9X KHgsIHUpOwotfQotCi0jdW5kZWYgRE9fRkxTX1NMT1cKLQotI2lmZGVmIEpFTUFMTE9DX0hBVkVf QlVJTFRJTl9DTFoKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLWZsc19sbHUodW5zaWduZWQgbG9u ZyBsb25nIHgpIHsKLQl1dGlsX2Fzc3VtZSh4ICE9IDApOwotCS8qCi0JICogTm90ZSB0aGF0IHRo ZSB4b3IgaGVyZSBpcyBtb3JlIG5hdHVyYWxseSB3cml0dGVuIGFzIHN1YnRyYWN0aW9uOyB0aGUK LQkgKiBsYXN0IGJpdCBzZXQgaXMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSB0eXBlIG1pbnVz IHRoZSBudW1iZXIgb2YKLQkgKiBsZWFkaW5nIHplcm8gYml0cy4gIEJ1dCBHQ0MgaW1wbGVtZW50 cyB0aGF0IGFzOgotCSAqICAgIGJzciAgICAgZWRpLCBlZGkKLQkgKiAgICBtb3YgICAgIGVheCwg MzEKLQkgKiAgICB4b3IgICAgIGVkaSwgMzEKLQkgKiAgICBzdWIgICAgIGVheCwgZWRpCi0JICog SWYgd2Ugd3JpdGUgaXQgYXMgeG9yIGluc3RlYWQsIHRoZW4gd2UgZ2V0Ci0JICogICAgYnNyICAg ICBlYXgsIGVkaQotCSAqIGFzIGRlc2lyZWQuCi0JICovCi0JcmV0dXJuICg4ICogc2l6ZW9mKHgp IC0gMSkgXiBfX2J1aWx0aW5fY2x6bGwoeCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQK LWZsc19sdSh1bnNpZ25lZCBsb25nIHgpIHsKLQl1dGlsX2Fzc3VtZSh4ICE9IDApOwotCXJldHVy biAoOCAqIHNpemVvZih4KSAtIDEpIF4gX19idWlsdGluX2NsemwoeCk7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdW5zaWduZWQKLWZsc191KHVuc2lnbmVkIHgpIHsKLQl1dGlsX2Fzc3VtZSh4ICE9IDAp OwotCXJldHVybiAoOCAqIHNpemVvZih4KSAtIDEpIF4gX19idWlsdGluX2Nseih4KTsKLX0KLSNl bGlmIGRlZmluZWQoX01TQ19WRVIpCi0KLSNpZiBMR19TSVpFT0ZfUFRSID09IDMKLSNkZWZpbmUg RE9fQlNSNjQoYml0LCB4KSBfQml0U2NhblJldmVyc2U2NCgmYml0LCB4KQotI2Vsc2UKLS8qCi0g KiBUaGlzIG5ldmVyIGFjdHVhbGx5IHJ1bnM7IHdlJ3JlIGp1c3QgZG9kZ2luZyBhIGNvbXBpbGVy IGVycm9yIGZvciB0aGUKLSAqIG5ldmVyLXRha2VuIGJyYW5jaCB3aGVyZSBzaXplb2Yodm9pZCAq KSA9PSA4LgotICovCi0jZGVmaW5lIERPX0JTUjY0KGJpdCwgeCkgYml0ID0gMDsgdW5yZWFjaGFi bGUoKQotI2VuZGlmCi0KLSNkZWZpbmUgRE9fRkxTKHgpIGRvIHsJCQkJCQkJXAotCWlmICh4ID09 IDApIHsJCQkJCQkJXAotCQlyZXR1cm4gOCAqIHNpemVvZih4KTsJCQkJCVwKLQl9CQkJCQkJCQlc Ci0JdW5zaWduZWQgbG9uZyBiaXQ7CQkJCQkJXAotCWlmIChzaXplb2YoeCkgPT0gNCkgewkJCQkJ CVwKLQkJX0JpdFNjYW5SZXZlcnNlKCZiaXQsICh1bnNpZ25lZCl4KTsJCQlcCi0JCXJldHVybiAo dW5zaWduZWQpYml0OwkJCQkJXAotCX0JCQkJCQkJCVwKLQlpZiAoc2l6ZW9mKHgpID09IDggJiYg c2l6ZW9mKHZvaWQgKikgPT0gOCkgewkJCVwKLQkJRE9fQlNSNjQoYml0LCB4KTsJCQkJCVwKLQkJ cmV0dXJuICh1bnNpZ25lZCliaXQ7CQkJCQlcCi0JfQkJCQkJCQkJXAotCWlmIChzaXplb2YoeCkg PT0gOCAmJiBzaXplb2Yodm9pZCAqKSA9PSA0KSB7CQkJXAotCQkvKiBEb2RnZSBhIGNvbXBpbGVy IHdhcm5pbmcsIGFzIGFib3ZlLiAqLwkJXAotCQlpbnQgY29uc3RhbnRfMzIgPSBzaXplb2YoeCkg KiA0OwkJCVwKLQkJaWYgKF9CaXRTY2FuUmV2ZXJzZSgmYml0LAkJCQlcCi0JCSAgICAodW5zaWdu ZWQpKHggPj4gY29uc3RhbnRfMzIpKSkgewkJCVwKLQkJCXJldHVybiAzMiArICh1bnNpZ25lZCli aXQ7CQkJXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJCV9CaXRTY2FuUmV2ZXJzZSgmYml0LCAodW5z aWduZWQpeCk7CQlcCi0JCQlyZXR1cm4gKHVuc2lnbmVkKWJpdDsJCQkJXAotCQl9CQkJCQkJCVwK LQl9CQkJCQkJCQlcCi0JdW5yZWFjaGFibGUoKTsJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotc3Rh dGljIGlubGluZSB1bnNpZ25lZAotZmxzX2xsdSh1bnNpZ25lZCBsb25nIGxvbmcgeCkgewotCURP X0ZMUyh4KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZAotZmxzX2x1KHVuc2lnbmVkIGxv bmcgeCkgewotCURPX0ZMUyh4KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZAotZmxzX3Uo dW5zaWduZWQgeCkgewotCURPX0ZMUyh4KTsKLX0KLQotI3VuZGVmIERPX0ZMUwotI3VuZGVmIERP X0JTUjY0Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1mbHNfbGx1KHVuc2lnbmVk IGxvbmcgbG9uZyB4KSB7Ci0JcmV0dXJuIGZsc19sbHVfc2xvdyh4KTsKLX0KLQotc3RhdGljIGlu bGluZSB1bnNpZ25lZAotZmxzX2x1KHVuc2lnbmVkIGxvbmcgeCkgewotCXJldHVybiBmbHNfbHVf c2xvdyh4KTsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZAotZmxzX3UodW5zaWduZWQgeCkg ewotCXJldHVybiBmbHNfdV9zbG93KHgpOwotfQotI2VuZGlmCi0KLSNpZiBMR19TSVpFT0ZfTE9O R19MT05HID4gMwotIyAgZXJyb3IgIkhhdmVuJ3QgaW1wbGVtZW50ZWQgcG9wY291bnQgZm9yIDE2 LWJ5dGUgaW50cy4iCi0jZW5kaWYKLQotI2RlZmluZSBET19QT1BDT1VOVCh4LCB0eXBlKSBkbyB7 CQkJCQlcCi0JLyoJCQkJCQkJCVwKLQkgKiBBbGdvcml0aG0gZnJvbSBhbiBvbGQgQU1EIG9wdGlt aXphdGlvbiByZWZlcmVuY2UgbWFudWFsLglcCi0JICogV2UncmUgcHV0dGluZyBhIGxpdHRsZSBi aXQgbW9yZSB3b3JrIHRoYW4geW91IG1pZ2h0IGV4cGVjdAlcCi0JICogaW50byB0aGUgbm8taW5z dHJpbnNpYyBjYXNlLCBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgdGhlCVwKLQkgKiBHQ0MgaW50cmlu c2ljcyBzcGVsbGluZyBvZiBwb3Bjb3VudCAoZm9yIG5vdykuICBEZXRlY3RpbmcJXAotCSAqIHdo ZXRoZXIgb3Igbm90IHRoZSBwb3Bjb3VudCBidWlsdGluIGlzIGFjdHVhbGx5IHVzZWFibGUgaW4J XAotCSAqIE1TVkMgaXMgbm9udHJpdmlhbC4JCQkJCQlcCi0JICovCQkJCQkJCQlcCi0JCQkJCQkJ CQlcCi0JdHlwZSBibXVsID0gKHR5cGUpMHgwMTAxMDEwMTAxMDEwMTAxVUxMOwkJCVwKLQkJCQkJ CQkJCVwKLQkvKgkJCQkJCQkJXAotCSAqIFJlcGxhY2UgZWFjaCAyIGJpdHMgd2l0aCB0aGUgc2lk ZXdheXMgc3VtIG9mIHRoZSBvcmlnaW5hbAlcCi0JICogdmFsdWVzLiAgMHg1ID0gMGIwMTAxLgkJ CQkJXAotCSAqCQkJCQkJCQlcCi0JICogWW91IG1pZ2h0IGV4cGVjdCB0aGlzIHRvIGJlOgkJCQkJ XAotCSAqICAgeCA9ICh4ICYgMHg1NS4uLikgKyAoKHggPj4gMSkgJiAweDU1Li4uKS4JCQlcCi0J ICogVGhhdCBjb3N0cyBhbiBleHRyYSBtYXNrIHJlbGF0aXZlIHRvIHRoaXMsIHRob3VnaC4JCVwK LQkgKi8JCQkJCQkJCVwKLQl4ID0geCAtICgoeCA+PiAxKSAmICgweDU1VSAqIGJtdWwpKTsJCQkJ XAotCS8qIFJlcGxhY2UgZWFjaCA0IGJpdHMgd2l0aCB0aGVpciBzaWRlYXlzIHN1bS4gIDB4MyA9 IDBiMDAxMS4gKi9cCi0JeCA9ICh4ICYgKGJtdWwgKiAweDMzVSkpICsgKCh4ID4+IDIpICYgKGJt dWwgKiAweDMzVSkpOwkJXAotCS8qCQkJCQkJCQlcCi0JICogUmVwbGFjZSBlYWNoIDggYml0cyB3 aXRoIHRoZWlyIHNpZGV3YXlzIHN1bS4gIE5vdGUgdGhhdCB3ZQlcCi0JICogY2FuJ3Qgb3ZlcmZs b3cgd2l0aGluIGVhY2ggNC1iaXQgc3VtIGhlcmUsIHNvIHdlIGNhbiBza2lwCVwKLQkgKiB0aGUg aW5pdGlhbCBtYXNrLgkJCQkJCVwKLQkgKi8JCQkJCQkJCVwKLQl4ID0gKHggKyAoeCA+PiA0KSkg JiAoYm11bCAqIDB4MEZVKTsJCQkJXAotCS8qCQkJCQkJCQlcCi0JICogTm9uZSBvZiB0aGUgcGFy dGlhbCBzdW1zIGluIHRoaXMgbXVsdGlwbGljYXRpb24gKHZpZXdlZCBpbglcCi0JICogYmFzZS0y NTYpIGNhbiBvdmVyZmxvdyBpbnRvIHRoZSBuZXh0IGRpZ2l0LiAgU28gdGhlIGxlYXN0CVwKLQkg KiBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBwcm9kdWN0IHdpbGwgYmUgdGhlIGxlYXN0CQlcCi0J ICogc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgb3JpZ2luYWwgdmFsdWUsIHRoZSBzZWNvbmQgbGVh c3QJXAotCSAqIHNpZ25pZmljYW50IGJ5dGUgd2lsbCBiZSB0aGUgc3VtIG9mIHRoZSB0d28gbGVh c3QJCVwKLQkgKiBzaWduaWZpY2FudCBieXRlcyBvZiB0aGUgb3JpZ2luYWwgdmFsdWUsIGFuZCBz byBvbi4JCVwKLQkgKiBJbXBvcnRhbnRseSwgdGhlIGhpZ2ggYnl0ZSB3aWxsIGJlIHRoZSBieXRl LXdpc2Ugc3VtIG9mIGFsbAlcCi0JICogdGhlIGJ5dGVzIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS4J CQkJXAotCSAqLwkJCQkJCQkJXAotCXggPSB4ICogYm11bDsJCQkJCQkJXAotCXggPj49ICgoc2l6 ZW9mKHgpIC0gMSkgKiA4KTsJCQkJCVwKLQlyZXR1cm4gKHVuc2lnbmVkKXg7CQkJCQkJXAotfSB3 aGlsZSgwKQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1wb3Bjb3VudF91X3Nsb3codW5zaWdu ZWQgYml0bWFwKSB7Ci0JRE9fUE9QQ09VTlQoYml0bWFwLCB1bnNpZ25lZCk7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgdW5zaWduZWQKLXBvcGNvdW50X2x1X3Nsb3codW5zaWduZWQgbG9uZyBiaXRtYXAp IHsKLQlET19QT1BDT1VOVChiaXRtYXAsIHVuc2lnbmVkIGxvbmcpOwotfQotCi1zdGF0aWMgaW5s aW5lIHVuc2lnbmVkCi1wb3Bjb3VudF9sbHVfc2xvdyh1bnNpZ25lZCBsb25nIGxvbmcgYml0bWFw KSB7Ci0JRE9fUE9QQ09VTlQoYml0bWFwLCB1bnNpZ25lZCBsb25nIGxvbmcpOwotfQotCi0jdW5k ZWYgRE9fUE9QQ09VTlQKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZAotcG9wY291bnRfdSh1bnNp Z25lZCBiaXRtYXApIHsKLSNpZmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QT1BDT1VOVAotCXJldHVy biBKRU1BTExPQ19JTlRFUk5BTF9QT1BDT1VOVChiaXRtYXApOwotI2Vsc2UKLQlyZXR1cm4gcG9w Y291bnRfdV9zbG93KGJpdG1hcCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25l ZAotcG9wY291bnRfbHUodW5zaWduZWQgbG9uZyBiaXRtYXApIHsKLSNpZmRlZiBKRU1BTExPQ19J TlRFUk5BTF9QT1BDT1VOVEwKLQlyZXR1cm4gSkVNQUxMT0NfSU5URVJOQUxfUE9QQ09VTlRMKGJp dG1hcCk7Ci0jZWxzZQotCXJldHVybiBwb3Bjb3VudF9sdV9zbG93KGJpdG1hcCk7Ci0jZW5kaWYK LX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZAotcG9wY291bnRfbGx1KHVuc2lnbmVkIGxvbmcg bG9uZyBiaXRtYXApIHsKLSNpZmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QT1BDT1VOVExMCi0JcmV0 dXJuIEpFTUFMTE9DX0lOVEVSTkFMX1BPUENPVU5UTEwoYml0bWFwKTsKLSNlbHNlCi0JcmV0dXJu IHBvcGNvdW50X2xsdV9zbG93KGJpdG1hcCk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIENsZWFycyBm aXJzdCB1bnNldCBiaXQgaW4gYml0bWFwLCBhbmQgcmV0dXJucwotICogcGxhY2Ugb2YgYml0LiAg Yml0bWFwICptdXN0IG5vdCogYmUgMC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHNpemVfdAotY2Zz X2x1KHVuc2lnbmVkIGxvbmcqIGJpdG1hcCkgewotCXV0aWxfYXNzdW1lKCpiaXRtYXAgIT0gMCk7 Ci0Jc2l6ZV90IGJpdCA9IGZmc19sdSgqYml0bWFwKTsKLQkqYml0bWFwIF49IFpVKDEpIDw8IGJp dDsKLQlyZXR1cm4gYml0OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkCi1mZnNfenUoc2l6 ZV90IHgpIHsKLSNpZiBMR19TSVpFT0ZfUFRSID09IExHX1NJWkVPRl9JTlQKLQlyZXR1cm4gZmZz X3UoeCk7Ci0jZWxpZiBMR19TSVpFT0ZfUFRSID09IExHX1NJWkVPRl9MT05HCi0JcmV0dXJuIGZm c19sdSh4KTsKLSNlbGlmIExHX1NJWkVPRl9QVFIgPT0gTEdfU0laRU9GX0xPTkdfTE9ORwotCXJl dHVybiBmZnNfbGx1KHgpOwotI2Vsc2UKLSNlcnJvciBObyBpbXBsZW1lbnRhdGlvbiBmb3Igc2l6 ZV90IGZmcygpCi0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZAotZmxzX3p1KHNp emVfdCB4KSB7Ci0jaWYgTEdfU0laRU9GX1BUUiA9PSBMR19TSVpFT0ZfSU5UCi0JcmV0dXJuIGZs c191KHgpOwotI2VsaWYgTEdfU0laRU9GX1BUUiA9PSBMR19TSVpFT0ZfTE9ORwotCXJldHVybiBm bHNfbHUoeCk7Ci0jZWxpZiBMR19TSVpFT0ZfUFRSID09IExHX1NJWkVPRl9MT05HX0xPTkcKLQly ZXR1cm4gZmxzX2xsdSh4KTsKLSNlbHNlCi0jZXJyb3IgTm8gaW1wbGVtZW50YXRpb24gZm9yIHNp emVfdCBmbHMoKQotI2VuZGlmCi19Ci0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZAotZmZzX3U2 NCh1aW50NjRfdCB4KSB7Ci0jaWYgTEdfU0laRU9GX0xPTkcgPT0gMwotCXJldHVybiBmZnNfbHUo eCk7Ci0jZWxpZiBMR19TSVpFT0ZfTE9OR19MT05HID09IDMKLQlyZXR1cm4gZmZzX2xsdSh4KTsK LSNlbHNlCi0jZXJyb3IgTm8gaW1wbGVtZW50YXRpb24gZm9yIDY0LWJpdCBmZnMoKQotI2VuZGlm Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLWZsc191NjQodWludDY0X3QgeCkgewotI2lm IExHX1NJWkVPRl9MT05HID09IDMKLQlyZXR1cm4gZmxzX2x1KHgpOwotI2VsaWYgTEdfU0laRU9G X0xPTkdfTE9ORyA9PSAzCi0JcmV0dXJuIGZsc19sbHUoeCk7Ci0jZWxzZQotI2Vycm9yIE5vIGlt cGxlbWVudGF0aW9uIGZvciA2NC1iaXQgZmxzKCkKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5l IHVuc2lnbmVkCi1mZnNfdTMyKHVpbnQzMl90IHgpIHsKLSNpZiBMR19TSVpFT0ZfSU5UID09IDIK LQlyZXR1cm4gZmZzX3UoeCk7Ci0jZWxzZQotI2Vycm9yIE5vIGltcGxlbWVudGF0aW9uIGZvciAz Mi1iaXQgZmZzKCkKLSNlbmRpZgotCXJldHVybiBmZnNfdSh4KTsKLX0KLQotc3RhdGljIGlubGlu ZSB1bnNpZ25lZAotZmxzX3UzMih1aW50MzJfdCB4KSB7Ci0jaWYgTEdfU0laRU9GX0lOVCA9PSAy Ci0JcmV0dXJuIGZsc191KHgpOwotI2Vsc2UKLSNlcnJvciBObyBpbXBsZW1lbnRhdGlvbiBmb3Ig MzItYml0IGZscygpCi0jZW5kaWYKLQlyZXR1cm4gZmxzX3UoeCk7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgdWludDY0X3QKLXBvdzJfY2VpbF91NjQodWludDY0X3QgeCkgewotCWlmICh1bmxpa2VseSh4 IDw9IDEpKSB7Ci0JCXJldHVybiB4OwotCX0KLQlzaXplX3QgbXNiX29uX2luZGV4ID0gZmxzX3U2 NCh4IC0gMSk7Ci0JLyoKLQkgKiBSYW5nZS1jaGVjazsgaXQncyBvbiB0aGUgY2FsbGVycyB0byBl bnN1cmUgdGhhdCB0aGUgcmVzdWx0IG9mIHRoaXMKLQkgKiBjYWxsIHdvbid0IG92ZXJmbG93Lgot CSAqLwotCWFzc2VydChtc2Jfb25faW5kZXggPCA2Myk7Ci0JcmV0dXJuIDFVTEwgPDwgKG1zYl9v bl9pbmRleCArIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90Ci1wb3cyX2NlaWxfdTMy KHVpbnQzMl90IHgpIHsKLQlpZiAodW5saWtlbHkoeCA8PSAxKSkgewotCSAgICByZXR1cm4geDsK LQl9Ci0Jc2l6ZV90IG1zYl9vbl9pbmRleCA9IGZsc191MzIoeCAtIDEpOwotCS8qIEFzIGFib3Zl LiAqLwotCWFzc2VydChtc2Jfb25faW5kZXggPCAzMSk7Ci0JcmV0dXJuIDFVIDw8IChtc2Jfb25f aW5kZXggKyAxKTsKLX0KLQotLyogQ29tcHV0ZSB0aGUgc21hbGxlc3QgcG93ZXIgb2YgMiB0aGF0 IGlzID49IHguICovCi1zdGF0aWMgaW5saW5lIHNpemVfdAotcG93Ml9jZWlsX3p1KHNpemVfdCB4 KSB7Ci0jaWYgKExHX1NJWkVPRl9QVFIgPT0gMykKLQlyZXR1cm4gcG93Ml9jZWlsX3U2NCh4KTsK LSNlbHNlCi0JcmV0dXJuIHBvdzJfY2VpbF91MzIoeCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlu bGluZSB1bnNpZ25lZAotbGdfZmxvb3Ioc2l6ZV90IHgpIHsKLQl1dGlsX2Fzc3VtZSh4ICE9IDAp OwotI2lmIChMR19TSVpFT0ZfUFRSID09IDMpCi0JcmV0dXJuIGZsc191NjQoeCk7Ci0jZWxzZQot CXJldHVybiBmbHNfdTMyKHgpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQK LWxnX2NlaWwoc2l6ZV90IHgpIHsKLQlyZXR1cm4gbGdfZmxvb3IoeCkgKyAoKHggJiAoeCAtIDEp KSA9PSAwID8gMCA6IDEpOwotfQotCi0vKiBBIGNvbXBpbGUtdGltZSB2ZXJzaW9uIG9mIGxnX2Zs b29yIGFuZCBsZ19jZWlsLiAqLwotI2RlZmluZSBMR19GTE9PUl8xKHgpIDAKLSNkZWZpbmUgTEdf RkxPT1JfMih4KSAoeCA8ICgxVUxMIDw8IDEpID8gTEdfRkxPT1JfMSh4KSA6IDEgKyBMR19GTE9P Ul8xKHggPj4gMSkpCi0jZGVmaW5lIExHX0ZMT09SXzQoeCkgKHggPCAoMVVMTCA8PCAyKSA/IExH X0ZMT09SXzIoeCkgOiAyICsgTEdfRkxPT1JfMih4ID4+IDIpKQotI2RlZmluZSBMR19GTE9PUl84 KHgpICh4IDwgKDFVTEwgPDwgNCkgPyBMR19GTE9PUl80KHgpIDogNCArIExHX0ZMT09SXzQoeCA+ PiA0KSkKLSNkZWZpbmUgTEdfRkxPT1JfMTYoeCkgKHggPCAoMVVMTCA8PCA4KSA/IExHX0ZMT09S XzgoeCkgOiA4ICsgTEdfRkxPT1JfOCh4ID4+IDgpKQotI2RlZmluZSBMR19GTE9PUl8zMih4KSAo eCA8ICgxVUxMIDw8IDE2KSA/IExHX0ZMT09SXzE2KHgpIDogMTYgKyBMR19GTE9PUl8xNih4ID4+ IDE2KSkKLSNkZWZpbmUgTEdfRkxPT1JfNjQoeCkgKHggPCAoMVVMTCA8PCAzMikgPyBMR19GTE9P Ul8zMih4KSA6IDMyICsgTEdfRkxPT1JfMzIoeCA+PiAzMikpCi0jaWYgTEdfU0laRU9GX1BUUiA9 PSAyCi0jICBkZWZpbmUgTEdfRkxPT1IoeCkgTEdfRkxPT1JfMzIoKHgpKQotI2Vsc2UKLSMgIGRl ZmluZSBMR19GTE9PUih4KSBMR19GTE9PUl82NCgoeCkpCi0jZW5kaWYKLQotI2RlZmluZSBMR19D RUlMKHgpIChMR19GTE9PUih4KSArICgoKHgpICYgKCh4KSAtIDEpKSA9PSAwID8gMCA6IDEpKQot Ci0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQklUX1VUSUxfSCAqLwoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvYml0bWFwLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2JpdG1hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBkYzE5NDU0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvYml0bWFwLmgKKysrIC9k ZXYvbnVsbApAQCAtMSwzNjggKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9CSVRN QVBfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9CSVRNQVBfSAotCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9z Yy5oIgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgYml0bWFwX3Q7Ci0jZGVmaW5lIExHX1NJWkVP Rl9CSVRNQVAJTEdfU0laRU9GX0xPTkcKLQotLyogTWF4aW11bSBiaXRtYXAgYml0IGNvdW50IGlz IDJeTEdfQklUTUFQX01BWEJJVFMuICovCi0jaWYgU0NfTEdfU0xBQl9NQVhSRUdTID4gTEdfQ0VJ TChTQ19OU0laRVMpCi0vKiBNYXhpbXVtIGJpdG1hcCBiaXQgY291bnQgaXMgZGV0ZXJtaW5lZCBi eSBtYXhpbXVtIHJlZ2lvbnMgcGVyIHNsYWIuICovCi0jICBkZWZpbmUgTEdfQklUTUFQX01BWEJJ VFMJU0NfTEdfU0xBQl9NQVhSRUdTCi0jZWxzZQotLyogTWF4aW11bSBiaXRtYXAgYml0IGNvdW50 IGlzIGRldGVybWluZWQgYnkgbnVtYmVyIG9mIGV4dGVudCBzaXplIGNsYXNzZXMuICovCi0jICBk ZWZpbmUgTEdfQklUTUFQX01BWEJJVFMJTEdfQ0VJTChTQ19OU0laRVMpCi0jZW5kaWYKLSNkZWZp bmUgQklUTUFQX01BWEJJVFMJCShaVSgxKSA8PCBMR19CSVRNQVBfTUFYQklUUykKLQotLyogTnVt YmVyIG9mIGJpdHMgcGVyIGdyb3VwLiAqLwotI2RlZmluZSBMR19CSVRNQVBfR1JPVVBfTkJJVFMJ CShMR19TSVpFT0ZfQklUTUFQICsgMykKLSNkZWZpbmUgQklUTUFQX0dST1VQX05CSVRTCQkoMVUg PDwgTEdfQklUTUFQX0dST1VQX05CSVRTKQotI2RlZmluZSBCSVRNQVBfR1JPVVBfTkJJVFNfTUFT SwkJKEJJVE1BUF9HUk9VUF9OQklUUy0xKQotCi0vKgotICogRG8gc29tZSBhbmFseXNpcyBvbiBo b3cgYmlnIHRoZSBiaXRtYXAgaXMgYmVmb3JlIHdlIHVzZSBhIHRyZWUuICBGb3IgYSBicnV0ZQot ICogZm9yY2UgbGluZWFyIHNlYXJjaCwgaWYgd2Ugd291bGQgaGF2ZSB0byBjYWxsIGZmc19sdSgp IG1vcmUgdGhhbiAyXjMgdGltZXMsCi0gKiB1c2UgYSB0cmVlIGluc3RlYWQuCi0gKi8KLSNpZiBM R19CSVRNQVBfTUFYQklUUyAtIExHX0JJVE1BUF9HUk9VUF9OQklUUyA+IDMKLSMgIGRlZmluZSBC SVRNQVBfVVNFX1RSRUUKLSNlbmRpZgotCi0vKiBOdW1iZXIgb2YgZ3JvdXBzIHJlcXVpcmVkIHRv IHN0b3JlIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMuICovCi0jZGVmaW5lIEJJVE1BUF9CSVRTMkdS T1VQUyhuYml0cykJCQkJCVwKLSAgICAoKChuYml0cykgKyBCSVRNQVBfR1JPVVBfTkJJVFNfTUFT SykgPj4gTEdfQklUTUFQX0dST1VQX05CSVRTKQotCi0vKgotICogTnVtYmVyIG9mIGdyb3VwcyBy ZXF1aXJlZCBhdCBhIHBhcnRpY3VsYXIgbGV2ZWwgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGJpdHMu Ci0gKi8KLSNkZWZpbmUgQklUTUFQX0dST1VQU19MMChuYml0cykJCQkJCQlcCi0gICAgQklUTUFQ X0JJVFMyR1JPVVBTKG5iaXRzKQotI2RlZmluZSBCSVRNQVBfR1JPVVBTX0wxKG5iaXRzKQkJCQkJ CVwKLSAgICBCSVRNQVBfQklUUzJHUk9VUFMoQklUTUFQX0JJVFMyR1JPVVBTKG5iaXRzKSkKLSNk ZWZpbmUgQklUTUFQX0dST1VQU19MMihuYml0cykJCQkJCQlcCi0gICAgQklUTUFQX0JJVFMyR1JP VVBTKEJJVE1BUF9CSVRTMkdST1VQUyhCSVRNQVBfQklUUzJHUk9VUFMoKG5iaXRzKSkpKQotI2Rl ZmluZSBCSVRNQVBfR1JPVVBTX0wzKG5iaXRzKQkJCQkJCVwKLSAgICBCSVRNQVBfQklUUzJHUk9V UFMoQklUTUFQX0JJVFMyR1JPVVBTKEJJVE1BUF9CSVRTMkdST1VQUygJCVwKLQlCSVRNQVBfQklU UzJHUk9VUFMoKG5iaXRzKSkpKSkKLSNkZWZpbmUgQklUTUFQX0dST1VQU19MNChuYml0cykJCQkJ CQlcCi0gICAgQklUTUFQX0JJVFMyR1JPVVBTKEJJVE1BUF9CSVRTMkdST1VQUyhCSVRNQVBfQklU UzJHUk9VUFMoCQlcCi0JQklUTUFQX0JJVFMyR1JPVVBTKEJJVE1BUF9CSVRTMkdST1VQUygobmJp dHMpKSkpKSkKLQotLyoKLSAqIEFzc3VtaW5nIHRoZSBudW1iZXIgb2YgbGV2ZWxzLCBudW1iZXIg b2YgZ3JvdXBzIHJlcXVpcmVkIGZvciBhIGdpdmVuIG51bWJlcgotICogb2YgYml0cy4KLSAqLwot I2RlZmluZSBCSVRNQVBfR1JPVVBTXzFfTEVWRUwobmJpdHMpCQkJCQlcCi0gICAgQklUTUFQX0dS T1VQU19MMChuYml0cykKLSNkZWZpbmUgQklUTUFQX0dST1VQU18yX0xFVkVMKG5iaXRzKQkJCQkJ XAotICAgIChCSVRNQVBfR1JPVVBTXzFfTEVWRUwobmJpdHMpICsgQklUTUFQX0dST1VQU19MMShu Yml0cykpCi0jZGVmaW5lIEJJVE1BUF9HUk9VUFNfM19MRVZFTChuYml0cykJCQkJCVwKLSAgICAo QklUTUFQX0dST1VQU18yX0xFVkVMKG5iaXRzKSArIEJJVE1BUF9HUk9VUFNfTDIobmJpdHMpKQot I2RlZmluZSBCSVRNQVBfR1JPVVBTXzRfTEVWRUwobmJpdHMpCQkJCQlcCi0gICAgKEJJVE1BUF9H Uk9VUFNfM19MRVZFTChuYml0cykgKyBCSVRNQVBfR1JPVVBTX0wzKG5iaXRzKSkKLSNkZWZpbmUg QklUTUFQX0dST1VQU181X0xFVkVMKG5iaXRzKQkJCQkJXAotICAgIChCSVRNQVBfR1JPVVBTXzRf TEVWRUwobmJpdHMpICsgQklUTUFQX0dST1VQU19MNChuYml0cykpCi0KLS8qCi0gKiBNYXhpbXVt IG51bWJlciBvZiBncm91cHMgcmVxdWlyZWQgdG8gc3VwcG9ydCBMR19CSVRNQVBfTUFYQklUUy4K LSAqLwotI2lmZGVmIEJJVE1BUF9VU0VfVFJFRQotCi0jaWYgTEdfQklUTUFQX01BWEJJVFMgPD0g TEdfQklUTUFQX0dST1VQX05CSVRTCi0jICBkZWZpbmUgQklUTUFQX0dST1VQUyhuYml0cykJQklU TUFQX0dST1VQU18xX0xFVkVMKG5iaXRzKQotIyAgZGVmaW5lIEJJVE1BUF9HUk9VUFNfTUFYCUJJ VE1BUF9HUk9VUFNfMV9MRVZFTChCSVRNQVBfTUFYQklUUykKLSNlbGlmIExHX0JJVE1BUF9NQVhC SVRTIDw9IExHX0JJVE1BUF9HUk9VUF9OQklUUyAqIDIKLSMgIGRlZmluZSBCSVRNQVBfR1JPVVBT KG5iaXRzKQlCSVRNQVBfR1JPVVBTXzJfTEVWRUwobmJpdHMpCi0jICBkZWZpbmUgQklUTUFQX0dS T1VQU19NQVgJQklUTUFQX0dST1VQU18yX0xFVkVMKEJJVE1BUF9NQVhCSVRTKQotI2VsaWYgTEdf QklUTUFQX01BWEJJVFMgPD0gTEdfQklUTUFQX0dST1VQX05CSVRTICogMwotIyAgZGVmaW5lIEJJ VE1BUF9HUk9VUFMobmJpdHMpCUJJVE1BUF9HUk9VUFNfM19MRVZFTChuYml0cykKLSMgIGRlZmlu ZSBCSVRNQVBfR1JPVVBTX01BWAlCSVRNQVBfR1JPVVBTXzNfTEVWRUwoQklUTUFQX01BWEJJVFMp Ci0jZWxpZiBMR19CSVRNQVBfTUFYQklUUyA8PSBMR19CSVRNQVBfR1JPVVBfTkJJVFMgKiA0Ci0j ICBkZWZpbmUgQklUTUFQX0dST1VQUyhuYml0cykJQklUTUFQX0dST1VQU180X0xFVkVMKG5iaXRz KQotIyAgZGVmaW5lIEJJVE1BUF9HUk9VUFNfTUFYCUJJVE1BUF9HUk9VUFNfNF9MRVZFTChCSVRN QVBfTUFYQklUUykKLSNlbGlmIExHX0JJVE1BUF9NQVhCSVRTIDw9IExHX0JJVE1BUF9HUk9VUF9O QklUUyAqIDUKLSMgIGRlZmluZSBCSVRNQVBfR1JPVVBTKG5iaXRzKQlCSVRNQVBfR1JPVVBTXzVf TEVWRUwobmJpdHMpCi0jICBkZWZpbmUgQklUTUFQX0dST1VQU19NQVgJQklUTUFQX0dST1VQU181 X0xFVkVMKEJJVE1BUF9NQVhCSVRTKQotI2Vsc2UKLSMgIGVycm9yICJVbnN1cHBvcnRlZCBiaXRt YXAgc2l6ZSIKLSNlbmRpZgotCi0vKgotICogTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzIHBvc3Np YmxlLiAgVGhpcyBjb3VsZCBiZSBzdGF0aWNhbGx5IGNvbXB1dGVkIGJhc2VkCi0gKiBvbiBMR19C SVRNQVBfTUFYQklUUzoKLSAqCi0gKiAjZGVmaW5lIEJJVE1BUF9NQVhfTEVWRUxTIFwKLSAqICAg ICAoTEdfQklUTUFQX01BWEJJVFMgLyBMR19TSVpFT0ZfQklUTUFQKSBcCi0gKiAgICAgKyAhIShM R19CSVRNQVBfTUFYQklUUyAlIExHX1NJWkVPRl9CSVRNQVApCi0gKgotICogSG93ZXZlciwgdGhh dCB3b3VsZCBub3QgYWxsb3cgdGhlIGdlbmVyaWMgQklUTUFQX0lORk9fSU5JVElBTElaRVIoKSBt YWNybywgc28KLSAqIGluc3RlYWQgaGFyZGNvZGUgQklUTUFQX01BWF9MRVZFTFMgdG8gdGhlIGxh cmdlc3QgbnVtYmVyIHN1cHBvcnRlZCBieSB0aGUKLSAqIHZhcmlvdXMgY2FzY2FkaW5nIG1hY3Jv cy4gIFRoZSBvbmx5IGFkZGl0aW9uYWwgY29zdCB0aGlzIGluY3VycyBpcyBzb21lCi0gKiB1bnVz ZWQgdHJhaWxpbmcgZW50cmllcyBpbiBiaXRtYXBfaW5mb190IHN0cnVjdHVyZXM7IHRoZSBiaXRt YXBzIHRoZW1zZWx2ZXMKLSAqIGFyZSBub3QgaW1wYWN0ZWQuCi0gKi8KLSNkZWZpbmUgQklUTUFQ X01BWF9MRVZFTFMJNQotCi0jZGVmaW5lIEJJVE1BUF9JTkZPX0lOSVRJQUxJWkVSKG5iaXRzKSB7 CQkJCVwKLQkvKiBuYml0cy4gKi8JCQkJCQkJXAotCW5iaXRzLAkJCQkJCQkJXAotCS8qIG5sZXZl bHMuICovCQkJCQkJCVwKLQkoQklUTUFQX0dST1VQU19MMChuYml0cykgPiBCSVRNQVBfR1JPVVBT X0wxKG5iaXRzKSkgKwkJXAotCSAgICAoQklUTUFQX0dST1VQU19MMShuYml0cykgPiBCSVRNQVBf R1JPVVBTX0wyKG5iaXRzKSkgKwlcCi0JICAgIChCSVRNQVBfR1JPVVBTX0wyKG5iaXRzKSA+IEJJ VE1BUF9HUk9VUFNfTDMobmJpdHMpKSArCVwKLQkgICAgKEJJVE1BUF9HUk9VUFNfTDMobmJpdHMp ID4gQklUTUFQX0dST1VQU19MNChuYml0cykpICsgMSwJXAotCS8qIGxldmVscy4gKi8JCQkJCQkJ XAotCXsJCQkJCQkJCVwKLQkJezB9LAkJCQkJCQlcCi0JCXtCSVRNQVBfR1JPVVBTX0wwKG5iaXRz KX0sCQkJCVwKLQkJe0JJVE1BUF9HUk9VUFNfTDEobmJpdHMpICsgQklUTUFQX0dST1VQU19MMChu Yml0cyl9LAlcCi0JCXtCSVRNQVBfR1JPVVBTX0wyKG5iaXRzKSArIEJJVE1BUF9HUk9VUFNfTDEo bmJpdHMpICsJXAotCQkgICAgQklUTUFQX0dST1VQU19MMChuYml0cyl9LAkJCQlcCi0JCXtCSVRN QVBfR1JPVVBTX0wzKG5iaXRzKSArIEJJVE1BUF9HUk9VUFNfTDIobmJpdHMpICsJXAotCQkgICAg QklUTUFQX0dST1VQU19MMShuYml0cykgKyBCSVRNQVBfR1JPVVBTX0wwKG5iaXRzKX0sCVwKLQkJ e0JJVE1BUF9HUk9VUFNfTDQobmJpdHMpICsgQklUTUFQX0dST1VQU19MMyhuYml0cykgKwlcCi0J CSAgICAgQklUTUFQX0dST1VQU19MMihuYml0cykgKyBCSVRNQVBfR1JPVVBTX0wxKG5iaXRzKQlc Ci0JCSAgICAgKyBCSVRNQVBfR1JPVVBTX0wwKG5iaXRzKX0JCQkJXAotCX0JCQkJCQkJCVwKLX0K LQotI2Vsc2UgLyogQklUTUFQX1VTRV9UUkVFICovCi0KLSNkZWZpbmUgQklUTUFQX0dST1VQUyhu Yml0cykJQklUTUFQX0JJVFMyR1JPVVBTKG5iaXRzKQotI2RlZmluZSBCSVRNQVBfR1JPVVBTX01B WAlCSVRNQVBfQklUUzJHUk9VUFMoQklUTUFQX01BWEJJVFMpCi0KLSNkZWZpbmUgQklUTUFQX0lO Rk9fSU5JVElBTElaRVIobmJpdHMpIHsJCQkJXAotCS8qIG5iaXRzLiAqLwkJCQkJCQlcCi0JbmJp dHMsCQkJCQkJCQlcCi0JLyogbmdyb3Vwcy4gKi8JCQkJCQkJXAotCUJJVE1BUF9CSVRTMkdST1VQ UyhuYml0cykJCQkJCVwKLX0KLQotI2VuZGlmIC8qIEJJVE1BUF9VU0VfVFJFRSAqLwotCi10eXBl ZGVmIHN0cnVjdCBiaXRtYXBfbGV2ZWxfcyB7Ci0JLyogT2Zmc2V0IG9mIHRoaXMgbGV2ZWwncyBn cm91cHMgd2l0aGluIHRoZSBhcnJheSBvZiBncm91cHMuICovCi0Jc2l6ZV90IGdyb3VwX29mZnNl dDsKLX0gYml0bWFwX2xldmVsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGJpdG1hcF9pbmZvX3Mgewot CS8qIExvZ2ljYWwgbnVtYmVyIG9mIGJpdHMgaW4gYml0bWFwIChzdG9yZWQgYXQgYm90dG9tIGxl dmVsKS4gKi8KLQlzaXplX3QgbmJpdHM7Ci0KLSNpZmRlZiBCSVRNQVBfVVNFX1RSRUUKLQkvKiBO dW1iZXIgb2YgbGV2ZWxzIG5lY2Vzc2FyeSBmb3IgbmJpdHMuICovCi0JdW5zaWduZWQgbmxldmVs czsKLQotCS8qCi0JICogT25seSB0aGUgZmlyc3QgKG5sZXZlbHMrMSkgZWxlbWVudHMgYXJlIHVz ZWQsIGFuZCBsZXZlbHMgYXJlIG9yZGVyZWQKLQkgKiBib3R0b20gdG8gdG9wIChlLmcuIHRoZSBi b3R0b20gbGV2ZWwgaXMgc3RvcmVkIGluIGxldmVsc1swXSkuCi0JICovCi0JYml0bWFwX2xldmVs X3QgbGV2ZWxzW0JJVE1BUF9NQVhfTEVWRUxTKzFdOwotI2Vsc2UgLyogQklUTUFQX1VTRV9UUkVF ICovCi0JLyogTnVtYmVyIG9mIGdyb3VwcyBuZWNlc3NhcnkgZm9yIG5iaXRzLiAqLwotCXNpemVf dCBuZ3JvdXBzOwotI2VuZGlmIC8qIEJJVE1BUF9VU0VfVFJFRSAqLwotfSBiaXRtYXBfaW5mb190 OwotCi12b2lkIGJpdG1hcF9pbmZvX2luaXQoYml0bWFwX2luZm9fdCAqYmluZm8sIHNpemVfdCBu Yml0cyk7Ci12b2lkIGJpdG1hcF9pbml0KGJpdG1hcF90ICpiaXRtYXAsIGNvbnN0IGJpdG1hcF9p bmZvX3QgKmJpbmZvLCBib29sIGZpbGwpOwotc2l6ZV90IGJpdG1hcF9zaXplKGNvbnN0IGJpdG1h cF9pbmZvX3QgKmJpbmZvKTsKLQotc3RhdGljIGlubGluZSBib29sCi1iaXRtYXBfZnVsbChiaXRt YXBfdCAqYml0bWFwLCBjb25zdCBiaXRtYXBfaW5mb190ICpiaW5mbykgewotI2lmZGVmIEJJVE1B UF9VU0VfVFJFRQotCXNpemVfdCByZ29mZiA9IGJpbmZvLT5sZXZlbHNbYmluZm8tPm5sZXZlbHNd Lmdyb3VwX29mZnNldCAtIDE7Ci0JYml0bWFwX3QgcmcgPSBiaXRtYXBbcmdvZmZdOwotCS8qIFRo ZSBiaXRtYXAgaXMgZnVsbCBpZmYgdGhlIHJvb3QgZ3JvdXAgaXMgMC4gKi8KLQlyZXR1cm4gKHJn ID09IDApOwotI2Vsc2UKLQlzaXplX3QgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBiaW5mby0+bmdy b3VwczsgaSsrKSB7Ci0JCWlmIChiaXRtYXBbaV0gIT0gMCkgewotCQkJcmV0dXJuIGZhbHNlOwot CQl9Ci0JfQotCXJldHVybiB0cnVlOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAot Yml0bWFwX2dldChiaXRtYXBfdCAqYml0bWFwLCBjb25zdCBiaXRtYXBfaW5mb190ICpiaW5mbywg c2l6ZV90IGJpdCkgewotCXNpemVfdCBnb2ZmOwotCWJpdG1hcF90IGc7Ci0KLQlhc3NlcnQoYml0 IDwgYmluZm8tPm5iaXRzKTsKLQlnb2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsK LQlnID0gYml0bWFwW2dvZmZdOwotCXJldHVybiAhKGcgJiAoWlUoMSkgPDwgKGJpdCAmIEJJVE1B UF9HUk9VUF9OQklUU19NQVNLKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWJpdG1hcF9z ZXQoYml0bWFwX3QgKmJpdG1hcCwgY29uc3QgYml0bWFwX2luZm9fdCAqYmluZm8sIHNpemVfdCBi aXQpIHsKLQlzaXplX3QgZ29mZjsKLQliaXRtYXBfdCAqZ3A7Ci0JYml0bWFwX3QgZzsKLQotCWFz c2VydChiaXQgPCBiaW5mby0+bmJpdHMpOwotCWFzc2VydCghYml0bWFwX2dldChiaXRtYXAsIGJp bmZvLCBiaXQpKTsKLQlnb2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsKLQlncCA9 ICZiaXRtYXBbZ29mZl07Ci0JZyA9ICpncDsKLQlhc3NlcnQoZyAmIChaVSgxKSA8PCAoYml0ICYg QklUTUFQX0dST1VQX05CSVRTX01BU0spKSk7Ci0JZyBePSBaVSgxKSA8PCAoYml0ICYgQklUTUFQ X0dST1VQX05CSVRTX01BU0spOwotCSpncCA9IGc7Ci0JYXNzZXJ0KGJpdG1hcF9nZXQoYml0bWFw LCBiaW5mbywgYml0KSk7Ci0jaWZkZWYgQklUTUFQX1VTRV9UUkVFCi0JLyogUHJvcGFnYXRlIGdy b3VwIHN0YXRlIHRyYW5zaXRpb25zIHVwIHRoZSB0cmVlLiAqLwotCWlmIChnID09IDApIHsKLQkJ dW5zaWduZWQgaTsKLQkJZm9yIChpID0gMTsgaSA8IGJpbmZvLT5ubGV2ZWxzOyBpKyspIHsKLQkJ CWJpdCA9IGdvZmY7Ci0JCQlnb2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsKLQkJ CWdwID0gJmJpdG1hcFtiaW5mby0+bGV2ZWxzW2ldLmdyb3VwX29mZnNldCArIGdvZmZdOwotCQkJ ZyA9ICpncDsKLQkJCWFzc2VydChnICYgKFpVKDEpIDw8IChiaXQgJiBCSVRNQVBfR1JPVVBfTkJJ VFNfTUFTSykpKTsKLQkJCWcgXj0gWlUoMSkgPDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9OQklUU19N QVNLKTsKLQkJCSpncCA9IGc7Ci0JCQlpZiAoZyAhPSAwKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0J CX0KLQl9Ci0jZW5kaWYKLX0KLQotLyogZmZ1OiBmaW5kIGZpcnN0IHVuc2V0ID49IGJpdC4gKi8K LXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1iaXRtYXBfZmZ1KGNvbnN0IGJpdG1hcF90ICpiaXRtYXAs IGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbWluX2JpdCkgewotCWFzc2VydCht aW5fYml0IDwgYmluZm8tPm5iaXRzKTsKLQotI2lmZGVmIEJJVE1BUF9VU0VfVFJFRQotCXNpemVf dCBiaXQgPSAwOwotCWZvciAodW5zaWduZWQgbGV2ZWwgPSBiaW5mby0+bmxldmVsczsgbGV2ZWwt LTspIHsKLQkJc2l6ZV90IGxnX2JpdHNfcGVyX2dyb3VwID0gKExHX0JJVE1BUF9HUk9VUF9OQklU UyAqIChsZXZlbCArCi0JCSAgICAxKSk7Ci0JCWJpdG1hcF90IGdyb3VwID0gYml0bWFwW2JpbmZv LT5sZXZlbHNbbGV2ZWxdLmdyb3VwX29mZnNldCArIChiaXQKLQkJICAgID4+IGxnX2JpdHNfcGVy X2dyb3VwKV07Ci0JCXVuc2lnbmVkIGdyb3VwX25tYXNrID0gKHVuc2lnbmVkKSgoKG1pbl9iaXQg PiBiaXQpID8gKG1pbl9iaXQgLQotCQkgICAgYml0KSA6IDApID4+IChsZ19iaXRzX3Blcl9ncm91 cCAtIExHX0JJVE1BUF9HUk9VUF9OQklUUykpOwotCQlhc3NlcnQoZ3JvdXBfbm1hc2sgPD0gQklU TUFQX0dST1VQX05CSVRTKTsKLQkJYml0bWFwX3QgZ3JvdXBfbWFzayA9IH4oKDFMVSA8PCBncm91 cF9ubWFzaykgLSAxKTsKLQkJYml0bWFwX3QgZ3JvdXBfbWFza2VkID0gZ3JvdXAgJiBncm91cF9t YXNrOwotCQlpZiAoZ3JvdXBfbWFza2VkID09IDBMVSkgewotCQkJaWYgKGdyb3VwID09IDBMVSkg ewotCQkJCXJldHVybiBiaW5mby0+bmJpdHM7Ci0JCQl9Ci0JCQkvKgotCQkJICogbWluX2JpdCB3 YXMgcHJlY2VkZWQgYnkgb25lIG9yIG1vcmUgdW5zZXQgYml0cyBpbgotCQkJICogdGhpcyBncm91 cCwgYnV0IHRoZXJlIGFyZSBubyBvdGhlciB1bnNldCBiaXRzIGluIHRoaXMKLQkJCSAqIGdyb3Vw LiAgVHJ5IGFnYWluIHN0YXJ0aW5nIGF0IHRoZSBmaXJzdCBiaXQgb2YgdGhlCi0JCQkgKiBuZXh0 IHNpYmxpbmcuICBUaGlzIHdpbGwgcmVjdXJzZSBhdCBtb3N0IG9uY2UgcGVyCi0JCQkgKiBub24t cm9vdCBsZXZlbC4KLQkJCSAqLwotCQkJc2l6ZV90IHNpYl9iYXNlID0gYml0ICsgKFpVKDEpIDw8 IGxnX2JpdHNfcGVyX2dyb3VwKTsKLQkJCWFzc2VydChzaWJfYmFzZSA+IG1pbl9iaXQpOwotCQkJ YXNzZXJ0KHNpYl9iYXNlID4gYml0KTsKLQkJCWlmIChzaWJfYmFzZSA+PSBiaW5mby0+bmJpdHMp IHsKLQkJCQlyZXR1cm4gYmluZm8tPm5iaXRzOwotCQkJfQotCQkJcmV0dXJuIGJpdG1hcF9mZnUo Yml0bWFwLCBiaW5mbywgc2liX2Jhc2UpOwotCQl9Ci0JCWJpdCArPSAoKHNpemVfdClmZnNfbHUo Z3JvdXBfbWFza2VkKSkgPDwKLQkJICAgIChsZ19iaXRzX3Blcl9ncm91cCAtIExHX0JJVE1BUF9H Uk9VUF9OQklUUyk7Ci0JfQotCWFzc2VydChiaXQgPj0gbWluX2JpdCk7Ci0JYXNzZXJ0KGJpdCA8 IGJpbmZvLT5uYml0cyk7Ci0JcmV0dXJuIGJpdDsKLSNlbHNlCi0Jc2l6ZV90IGkgPSBtaW5fYml0 ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsKLQliaXRtYXBfdCBnID0gYml0bWFwW2ldICYgfigo MUxVIDw8IChtaW5fYml0ICYgQklUTUFQX0dST1VQX05CSVRTX01BU0spKQotCSAgICAtIDEpOwot CXNpemVfdCBiaXQ7Ci0JZG8gewotCQlpZiAoZyAhPSAwKSB7Ci0JCQliaXQgPSBmZnNfbHUoZyk7 Ci0JCQlyZXR1cm4gKGkgPDwgTEdfQklUTUFQX0dST1VQX05CSVRTKSArIGJpdDsKLQkJfQotCQlp Kys7Ci0JCWcgPSBiaXRtYXBbaV07Ci0JfSB3aGlsZSAoaSA8IGJpbmZvLT5uZ3JvdXBzKTsKLQly ZXR1cm4gYmluZm8tPm5iaXRzOwotI2VuZGlmCi19Ci0KLS8qIHNmdTogc2V0IGZpcnN0IHVuc2V0 LiAqLwotc3RhdGljIGlubGluZSBzaXplX3QKLWJpdG1hcF9zZnUoYml0bWFwX3QgKmJpdG1hcCwg Y29uc3QgYml0bWFwX2luZm9fdCAqYmluZm8pIHsKLQlzaXplX3QgYml0OwotCWJpdG1hcF90IGc7 Ci0JdW5zaWduZWQgaTsKLQotCWFzc2VydCghYml0bWFwX2Z1bGwoYml0bWFwLCBiaW5mbykpOwot Ci0jaWZkZWYgQklUTUFQX1VTRV9UUkVFCi0JaSA9IGJpbmZvLT5ubGV2ZWxzIC0gMTsKLQlnID0g Yml0bWFwW2JpbmZvLT5sZXZlbHNbaV0uZ3JvdXBfb2Zmc2V0XTsKLQliaXQgPSBmZnNfbHUoZyk7 Ci0Jd2hpbGUgKGkgPiAwKSB7Ci0JCWktLTsKLQkJZyA9IGJpdG1hcFtiaW5mby0+bGV2ZWxzW2ld Lmdyb3VwX29mZnNldCArIGJpdF07Ci0JCWJpdCA9IChiaXQgPDwgTEdfQklUTUFQX0dST1VQX05C SVRTKSArIGZmc19sdShnKTsKLQl9Ci0jZWxzZQotCWkgPSAwOwotCWcgPSBiaXRtYXBbMF07Ci0J d2hpbGUgKGcgPT0gMCkgewotCQlpKys7Ci0JCWcgPSBiaXRtYXBbaV07Ci0JfQotCWJpdCA9IChp IDw8IExHX0JJVE1BUF9HUk9VUF9OQklUUykgKyBmZnNfbHUoZyk7Ci0jZW5kaWYKLQliaXRtYXBf c2V0KGJpdG1hcCwgYmluZm8sIGJpdCk7Ci0JcmV0dXJuIGJpdDsKLX0KLQotc3RhdGljIGlubGlu ZSB2b2lkCi1iaXRtYXBfdW5zZXQoYml0bWFwX3QgKmJpdG1hcCwgY29uc3QgYml0bWFwX2luZm9f dCAqYmluZm8sIHNpemVfdCBiaXQpIHsKLQlzaXplX3QgZ29mZjsKLQliaXRtYXBfdCAqZ3A7Ci0J Yml0bWFwX3QgZzsKLQlVTlVTRUQgYm9vbCBwcm9wYWdhdGU7Ci0KLQlhc3NlcnQoYml0IDwgYmlu Zm8tPm5iaXRzKTsKLQlhc3NlcnQoYml0bWFwX2dldChiaXRtYXAsIGJpbmZvLCBiaXQpKTsKLQln b2ZmID0gYml0ID4+IExHX0JJVE1BUF9HUk9VUF9OQklUUzsKLQlncCA9ICZiaXRtYXBbZ29mZl07 Ci0JZyA9ICpncDsKLQlwcm9wYWdhdGUgPSAoZyA9PSAwKTsKLQlhc3NlcnQoKGcgJiAoWlUoMSkg PDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKSkpID09IDApOwotCWcgXj0gWlUoMSkg PDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKTsKLQkqZ3AgPSBnOwotCWFzc2VydCgh Yml0bWFwX2dldChiaXRtYXAsIGJpbmZvLCBiaXQpKTsKLSNpZmRlZiBCSVRNQVBfVVNFX1RSRUUK LQkvKiBQcm9wYWdhdGUgZ3JvdXAgc3RhdGUgdHJhbnNpdGlvbnMgdXAgdGhlIHRyZWUuICovCi0J aWYgKHByb3BhZ2F0ZSkgewotCQl1bnNpZ25lZCBpOwotCQlmb3IgKGkgPSAxOyBpIDwgYmluZm8t Pm5sZXZlbHM7IGkrKykgewotCQkJYml0ID0gZ29mZjsKLQkJCWdvZmYgPSBiaXQgPj4gTEdfQklU TUFQX0dST1VQX05CSVRTOwotCQkJZ3AgPSAmYml0bWFwW2JpbmZvLT5sZXZlbHNbaV0uZ3JvdXBf b2Zmc2V0ICsgZ29mZl07Ci0JCQlnID0gKmdwOwotCQkJcHJvcGFnYXRlID0gKGcgPT0gMCk7Ci0J CQlhc3NlcnQoKGcgJiAoWlUoMSkgPDwgKGJpdCAmIEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKSkp Ci0JCQkgICAgPT0gMCk7Ci0JCQlnIF49IFpVKDEpIDw8IChiaXQgJiBCSVRNQVBfR1JPVVBfTkJJ VFNfTUFTSyk7Ci0JCQkqZ3AgPSBnOwotCQkJaWYgKCFwcm9wYWdhdGUpIHsKLQkJCQlicmVhazsK LQkJCX0KLQkJfQotCX0KLSNlbmRpZiAvKiBCSVRNQVBfVVNFX1RSRUUgKi8KLX0KLQotI2VuZGlm IC8qIEpFTUFMTE9DX0lOVEVSTkFMX0JJVE1BUF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9i dWZfd3JpdGVyLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMzdhYTZkZS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaAorKysg L2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfQlVG X1dSSVRFUl9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0JVRl9XUklURVJfSAotCi0vKgot ICogTm90ZTogd2hlbiB1c2luZyB0aGUgYnVmZmVyZWQgd3JpdGVyLCBjYm9wYXF1ZSBpcyBwYXNz ZWQgdG8gd3JpdGVfY2Igb25seQotICogd2hlbiB0aGUgYnVmZmVyIGlzIGZsdXNoZWQuICBJdCB3 b3VsZCBtYWtlIGEgZGlmZmVyZW5jZSBpZiBjYm9wYXF1ZSBwb2ludHMKLSAqIHRvIHNvbWV0aGlu ZyB0aGF0J3MgY2hhbmdpbmcgZm9yIGVhY2ggd3JpdGVfY2IgY2FsbCwgb3Igc29tZXRoaW5nIHRo YXQKLSAqIGFmZmVjdHMgd3JpdGVfY2IgaW4gYSB3YXkgZGVwZW5kZW50IG9uIHRoZSBjb250ZW50 IG9mIHRoZSBvdXRwdXQgc3RyaW5nLgotICogSG93ZXZlciwgdGhlIG1vc3QgdHlwaWNhbCB1c2Fn ZSBjYXNlIGluIHByYWN0aWNlIGlzIHRoYXQgY2JvcGFxdWUgcG9pbnRzIHRvCi0gKiBzb21lICJv cHRpb24gbGlrZSIgY29udGVudCBmb3IgdGhlIHdyaXRlX2NiLCBzbyBpdCBkb2Vzbid0IG1hdHRl ci4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0Jd3JpdGVfY2JfdCAqd3JpdGVfY2I7Ci0Jdm9p ZCAqY2JvcGFxdWU7Ci0JY2hhciAqYnVmOwotCXNpemVfdCBidWZfc2l6ZTsKLQlzaXplX3QgYnVm X2VuZDsKLQlib29sIGludGVybmFsX2J1ZjsKLX0gYnVmX3dyaXRlcl90OwotCi1ib29sIGJ1Zl93 cml0ZXJfaW5pdCh0c2RuX3QgKnRzZG4sIGJ1Zl93cml0ZXJfdCAqYnVmX3dyaXRlciwKLSAgICB3 cml0ZV9jYl90ICp3cml0ZV9jYiwgdm9pZCAqY2JvcGFxdWUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1 Zl9sZW4pOwotdm9pZCBidWZfd3JpdGVyX2ZsdXNoKGJ1Zl93cml0ZXJfdCAqYnVmX3dyaXRlcik7 Ci13cml0ZV9jYl90IGJ1Zl93cml0ZXJfY2I7Ci12b2lkIGJ1Zl93cml0ZXJfdGVybWluYXRlKHRz ZG5fdCAqdHNkbiwgYnVmX3dyaXRlcl90ICpidWZfd3JpdGVyKTsKLQotdHlwZWRlZiBzc2l6ZV90 IChyZWFkX2NiX3QpKHZvaWQgKnJlYWRfY2JvcGFxdWUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxpbWl0 KTsKLXZvaWQgYnVmX3dyaXRlcl9waXBlKGJ1Zl93cml0ZXJfdCAqYnVmX3dyaXRlciwgcmVhZF9j Yl90ICpyZWFkX2NiLAotICAgIHZvaWQgKnJlYWRfY2JvcGFxdWUpOwotCi0jZW5kaWYgLyogSkVN QUxMT0NfSU5URVJOQUxfQlVGX1dSSVRFUl9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jYWNo ZV9iaW4uaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvY2FjaGVfYmluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGNhZjViZTMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jYWNoZV9iaW4uaAorKysgL2Rldi9u dWxsCkBAIC0xLDY3MCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0NBQ0hFX0JJ Tl9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0NBQ0hFX0JJTl9ICi0KLSNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9xbC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3N6Lmgi Ci0KLS8qCi0gKiBUaGUgY2FjaGVfYmlucyBhcmUgdGhlIG1lY2hhbmlzbSB0aGF0IHRoZSB0Y2Fj aGUgYW5kIHRoZSBhcmVuYSB1c2UgdG8KLSAqIGNvbW11bmljYXRlLiAgVGhlIHRjYWNoZSBmaWxs cyBmcm9tIGFuZCBmbHVzaGVzIHRvIHRoZSBhcmVuYSBieSBwYXNzaW5nIGEKLSAqIGNhY2hlX2Jp bl90IHRvIGZpbGwvZmx1c2guICBXaGVuIHRoZSBhcmVuYSBuZWVkcyB0byBwdWxsIHN0YXRzIGZy b20gdGhlCi0gKiB0Y2FjaGVzIGFzc29jaWF0ZWQgd2l0aCBpdCwgaXQgZG9lcyBzbyBieSBpdGVy YXRpbmcgb3ZlciBpdHMKLSAqIGNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3Qgb2JqZWN0cyBh bmQgcmVhZGluZyBvdXQgcGVyLWJpbiBzdGF0cyBpdAotICogY29udGFpbnMuICBUaGlzIG1ha2Vz IGl0IHNvIHRoYXQgdGhlIGFyZW5hIG5lZWQgbm90IGtub3cgYWJvdXQgdGhlIGV4aXN0ZW5jZQot ICogb2YgdGhlIHRjYWNoZSBhdCBhbGwuCi0gKi8KLQotLyoKLSAqIFRoZSBzaXplIGluIGJ5dGVz IG9mIGVhY2ggY2FjaGUgYmluIHN0YWNrLiAgV2UgYWxzbyB1c2UgdGhpcyB0byBpbmRpY2F0ZQot ICogKmNvdW50cyogb2YgaW5kaXZpZHVhbCBvYmplY3RzLgotICovCi10eXBlZGVmIHVpbnQxNl90 IGNhY2hlX2Jpbl9zel90OwotCi0vKgotICogTGVhdmUgYSBub3RpY2VhYmxlIG1hcmsgcGF0dGVy biBvbiB0aGUgY2FjaGUgYmluIHN0YWNrIGJvdW5kYXJpZXMsIGluIGNhc2UgYQotICogYnVnIHN0 YXJ0cyBsZWFraW5nIHRob3NlLiAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIGp1bmsgcGF0dGVybiBi dXQgYmUgZGlzdGluY3QKLSAqIGZyb20gaXQuCi0gKi8KLXN0YXRpYyBjb25zdCB1aW50cHRyX3Qg Y2FjaGVfYmluX3ByZWNlZGluZ19qdW5rID0KLSAgICAodWludHB0cl90KTB4N2E3YTdhN2E3YTdh N2E3YVVMTDsKLS8qIE5vdGU6IGE3IHZzLiA3YSBhYm92ZSAtLSB0aGlzIHRlbGxzIHlvdSB3aGlj aCBwb2ludGVyIGxlYWtlZC4gKi8KLXN0YXRpYyBjb25zdCB1aW50cHRyX3QgY2FjaGVfYmluX3Ry YWlsaW5nX2p1bmsgPQotICAgICh1aW50cHRyX3QpMHhhN2E3YTdhN2E3YTdhN2E3VUxMOwotCi0v KgotICogVGhhdCBpbXBsaWVzIHRoZSBmb2xsb3dpbmcgdmFsdWUsIGZvciB0aGUgbWF4aW11bSBu dW1iZXIgb2YgaXRlbXMgaW4gYW55Ci0gKiBpbmRpdmlkdWFsIGJpbi4gIFRoZSBjYWNoZSBiaW5z IHRyYWNrIHRoZWlyIGJvdW5kcyBsb29raW5nIGp1c3QgYXQgdGhlIGxvdwotICogYml0cyBvZiBh IHBvaW50ZXIsIGNvbXBhcmVkIGFnYWluc3QgYSBjYWNoZV9iaW5fc3pfdC4gIFNvIHRoYXQncwot ICogICAxIDw8IChzaXplb2YoY2FjaGVfYmluX3N6X3QpICogOCkKLSAqIGJ5dGVzIHNwcmVhZCBh Y3Jvc3MgcG9pbnRlciBzaXplZCBvYmplY3RzIHRvIGdldCB0aGUgbWF4aW11bS4KLSAqLwotI2Rl ZmluZSBDQUNIRV9CSU5fTkNBQ0hFRF9NQVggKCgoc2l6ZV90KTEgPDwgc2l6ZW9mKGNhY2hlX2Jp bl9zel90KSAqIDgpIFwKLSAgICAvIHNpemVvZih2b2lkICopIC0gMSkKLQotLyoKLSAqIFRoaXMg bGl2ZXMgaW5zaWRlIHRoZSBjYWNoZV9iaW4gKGZvciBsb2NhbGl0eSByZWFzb25zKSwgYW5kIGlz IGluaXRpYWxpemVkCi0gKiBhbG9uZ3NpZGUgaXQsIGJ1dCBpcyBvdGhlcndpc2Ugbm90IG1vZGlm aWVkIGJ5IGFueSBjYWNoZSBiaW4gb3BlcmF0aW9ucy4KLSAqIEl0J3MgbG9naWNhbGx5IHB1Ymxp YyBhbmQgbWFpbnRhaW5lZCBieSBpdHMgY2FsbGVycy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgY2Fj aGVfYmluX3N0YXRzX3MgY2FjaGVfYmluX3N0YXRzX3Q7Ci1zdHJ1Y3QgY2FjaGVfYmluX3N0YXRz X3MgewotCS8qCi0JICogTnVtYmVyIG9mIGFsbG9jYXRpb24gcmVxdWVzdHMgdGhhdCBjb3JyZXNw b25kZWQgdG8gdGhlIHNpemUgb2YgdGhpcwotCSAqIGJpbi4KLQkgKi8KLQl1aW50NjRfdCBucmVx dWVzdHM7Ci19OwotCi0vKgotICogUmVhZC1vbmx5IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0 aCBlYWNoIGVsZW1lbnQgb2YgdGNhY2hlX3QncyB0YmlucyBhcnJheQotICogaXMgc3RvcmVkIHNl cGFyYXRlbHksIG1haW5seSB0byByZWR1Y2UgbWVtb3J5IHVzYWdlLgotICovCi10eXBlZGVmIHN0 cnVjdCBjYWNoZV9iaW5faW5mb19zIGNhY2hlX2Jpbl9pbmZvX3Q7Ci1zdHJ1Y3QgY2FjaGVfYmlu X2luZm9fcyB7Ci0JY2FjaGVfYmluX3N6X3QgbmNhY2hlZF9tYXg7Ci19OwotCi0vKgotICogUmVz cG9uc2libGUgZm9yIGNhY2hpbmcgYWxsb2NhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xl IHNpemUuCi0gKgotICogU2V2ZXJhbCBwb2ludGVycyBhcmUgdXNlZCB0byB0cmFjayB0aGUgc3Rh Y2suICBUbyBzYXZlIG9uIG1ldGFkYXRhIGJ5dGVzLAotICogb25seSB0aGUgc3RhY2tfaGVhZCBp cyBhIGZ1bGwgc2l6ZWQgcG9pbnRlciAod2hpY2ggaXMgZGVyZWZlcmVuY2VkIG9uIHRoZQotICog ZmFzdHBhdGgpLCB3aGlsZSB0aGUgb3RoZXJzIHN0b3JlIG9ubHkgdGhlIGxvdyAxNiBiaXRzIC0t IHRoaXMgaXMgY29ycmVjdAotICogYmVjYXVzZSBhIHNpbmdsZSBzdGFjayBuZXZlciB0YWtlcyBt b3JlIHNwYWNlIHRoYW4gMl4xNiBieXRlcywgYW5kIGF0IHRoZQotICogc2FtZSB0aW1lIG9ubHkg ZXF1YWxpdHkgY2hlY2tzIGFyZSBwZXJmb3JtZWQgb24gdGhlIGxvdyBiaXRzLgotICoKLSAqIChs b3cgYWRkcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChoaWdoIGFkZHIpCi0gKiB8LS0tLS0tc3Rhc2hlZC0tLS0tLXwtLS0tLS1hdmFpbGFibGUtLS0t LS18LS0tLS0tY2FjaGVkLS0tLS18Ci0gKiBeICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAg ICAgICAgICAgICBeICAgICAgICAgICAgICAgICBeCi0gKiBsb3dfYm91bmQoZGVyaXZlZCkgIGxv d19iaXRzX2Z1bGwgICAgICAgICBzdGFja19oZWFkICAgICAgICBsb3dfYml0c19lbXB0eQotICov Ci10eXBlZGVmIHN0cnVjdCBjYWNoZV9iaW5fcyBjYWNoZV9iaW5fdDsKLXN0cnVjdCBjYWNoZV9i aW5fcyB7Ci0JLyoKLQkgKiBUaGUgc3RhY2sgZ3Jvd3MgZG93bi4gIFdoZW5ldmVyIHRoZSBiaW4g aXMgbm9uZW1wdHksIHRoZSBoZWFkIHBvaW50cwotCSAqIHRvIGFuIGFycmF5IGVudHJ5IGNvbnRh aW5pbmcgYSB2YWxpZCBhbGxvY2F0aW9uLiAgV2hlbiBpdCBpcyBlbXB0eSwKLQkgKiB0aGUgaGVh ZCBwb2ludHMgdG8gb25lIGVsZW1lbnQgcGFzdCB0aGUgb3duZWQgYXJyYXkuCi0JICovCi0Jdm9p ZCAqKnN0YWNrX2hlYWQ7Ci0JLyoKLQkgKiBjdXJfcHRyIGFuZCBzdGF0cyBhcmUgYm90aCBtb2Rp ZmllZCBmcmVxdWVudGx5LiAgTGV0J3Mga2VlcCB0aGVtCi0JICogY2xvc2Ugc28gdGhhdCB0aGV5 IGhhdmUgYSBoaWdoZXIgY2hhbmNlIG9mIGJlaW5nIG9uIHRoZSBzYW1lCi0JICogY2FjaGVsaW5l LCB0aHVzIGxlc3Mgd3JpdGUtYmFja3MuCi0JICovCi0JY2FjaGVfYmluX3N0YXRzX3QgdHN0YXRz OwotCi0JLyoKLQkgKiBUaGUgbG93IGJpdHMgb2YgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGl0 ZW0gaW4gdGhlIHN0YWNrIHRoYXQKLQkgKiBoYXNuJ3QgYmVlbiB1c2VkIHNpbmNlIHRoZSBsYXN0 IEdDLCB0byB0cmFjayB0aGUgbG93IHdhdGVyIG1hcmsgKG1pbgotCSAqICMgb2YgY2FjaGVkIGl0 ZW1zKS4KLQkgKgotCSAqIFNpbmNlIHRoZSBzdGFjayBncm93cyBkb3duLCB0aGlzIGlzIGEgaGln aGVyIGFkZHJlc3MgdGhhbgotCSAqIGxvd19iaXRzX2Z1bGwuCi0JICovCi0JdWludDE2X3QgbG93 X2JpdHNfbG93X3dhdGVyOwotCi0JLyoKLQkgKiBUaGUgbG93IGJpdHMgb2YgdGhlIHZhbHVlIHRo YXQgc3RhY2tfaGVhZCB3aWxsIHRha2Ugb24gd2hlbiB0aGUgYXJyYXkKLQkgKiBpcyBmdWxsIChv ZiBjYWNoZWQgJiBzdGFzaGVkIGl0ZW1zKS4gIEJ1dCByZW1lbWJlciB0aGF0IHN0YWNrX2hlYWQK LQkgKiBhbHdheXMgcG9pbnRzIHRvIGEgdmFsaWQgaXRlbSB3aGVuIHRoZSBhcnJheSBpcyBub25l bXB0eSAtLSB0aGlzIGlzCi0JICogaW4gdGhlIGFycmF5LgotCSAqCi0JICogUmVjYWxsIHRoYXQg c2luY2UgdGhlIHN0YWNrIGdyb3dzIGRvd24sIHRoaXMgaXMgdGhlIGxvd2VzdCBhdmFpbGFibGUK LQkgKiBhZGRyZXNzIGluIHRoZSBhcnJheSBmb3IgY2FjaGluZy4gIE9ubHkgYWRqdXN0ZWQgd2hl biBzdGFzaGluZyBpdGVtcy4KLQkgKi8KLQl1aW50MTZfdCBsb3dfYml0c19mdWxsOwotCi0JLyoK LQkgKiBUaGUgbG93IGJpdHMgb2YgdGhlIHZhbHVlIHRoYXQgc3RhY2tfaGVhZCB3aWxsIHRha2Ug b24gd2hlbiB0aGUgYXJyYXkKLQkgKiBpcyBlbXB0eS4KLQkgKgotCSAqIFRoZSBzdGFjayBncm93 cyBkb3duIC0tIHRoaXMgaXMgb25lIHBhc3QgdGhlIGhpZ2hlc3QgYWRkcmVzcyBpbiB0aGUKLQkg KiBhcnJheS4gIEltbXV0YWJsZSBhZnRlciBpbml0aWFsaXphdGlvbi4KLQkgKi8KLQl1aW50MTZf dCBsb3dfYml0c19lbXB0eTsKLX07Ci0KLS8qCi0gKiBUaGUgY2FjaGVfYmlucyBsaXZlIGluc2lk ZSB0aGUgdGNhY2hlLCBidXQgdGhlIGFyZW5hIChieSBkZXNpZ24pIGlzbid0Ci0gKiBzdXBwb3Nl ZCB0byBrbm93IG11Y2ggYWJvdXQgdGNhY2hlIGludGVybmFscy4gIFRvIGxldCB0aGUgYXJlbmEg aXRlcmF0ZSBvdmVyCi0gKiBhc3NvY2lhdGVkIGJpbnMsIHdlIGtlZXAgKHdpdGggdGhlIHRjYWNo ZSkgYSBsaW5rZWQgbGlzdCBvZgotICogY2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3JfdHMgdGhh dCB0ZWxsIHRoZSBhcmVuYSBob3cgdG8gZmluZCB0aGUgYmlucy4KLSAqLwotdHlwZWRlZiBzdHJ1 Y3QgY2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3JfcyBjYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRv cl90Owotc3RydWN0IGNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3MgewotCS8qCi0JICogVGhl IGFyZW5hIGtlZXBzIGEgbGlzdCBvZiB0aGUgY2FjaGUgYmlucyBhc3NvY2lhdGVkIHdpdGggaXQs IGZvcgotCSAqIHN0YXRzIGNvbGxlY3Rpb24uCi0JICovCi0JcWxfZWxtKGNhY2hlX2Jpbl9hcnJh eV9kZXNjcmlwdG9yX3QpIGxpbms7Ci0JLyogUG9pbnRlcnMgdG8gdGhlIHRjYWNoZSBiaW5zLiAq LwotCWNhY2hlX2Jpbl90ICpiaW5zOwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkCi1jYWNoZV9i aW5fYXJyYXlfZGVzY3JpcHRvcl9pbml0KGNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX3QgKmRl c2NyaXB0b3IsCi0gICAgY2FjaGVfYmluX3QgKmJpbnMpIHsKLQlxbF9lbG1fbmV3KGRlc2NyaXB0 b3IsIGxpbmspOwotCWRlc2NyaXB0b3ItPmJpbnMgPSBiaW5zOwotfQotCi1KRU1BTExPQ19BTFdB WVNfSU5MSU5FIGJvb2wKLWNhY2hlX2Jpbl9ub25mYXN0X2FsaWduZWQoY29uc3Qgdm9pZCAqcHRy KSB7Ci0JaWYgKCFjb25maWdfdWFmX2RldGVjdGlvbikgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQot CS8qCi0JICogQ3VycmVudGx5IHdlIHVzZSBhbGlnbm1lbnQgdG8gZGVjaWRlIHdoaWNoIHBvaW50 ZXIgdG8ganVuayAmIHN0YXNoIG9uCi0JICogZGVhbGxvYyAoZm9yIGNhdGNoaW5nIHVzZS1hZnRl ci1mcmVlKS4gIEluIHNvbWUgY29tbW9uIGNhc2VzIGEKLQkgKiBwYWdlLWFsaWduZWQgY2hlY2sg aXMgbmVlZGVkIGFscmVhZHkgKHNkYWxsb2Mgdy8gY29uZmlnX3Byb2YpLCBzbyB3ZQotCSAqIGFy ZSBnZXR0aW5nIGl0IG1vcmUgb3IgbGVzcyBmb3IgZnJlZSAtLSBubyBhZGRlZCBpbnN0cnVjdGlv bnMgb24KLQkgKiBmcmVlX2Zhc3RwYXRoLgotCSAqCi0JICogQW5vdGhlciB3YXkgb2YgZGVjaWRp bmcgd2hpY2ggcG9pbnRlciB0byBzYW1wbGUsIGlzIGFkZGluZyBhbm90aGVyCi0JICogdGhyZWFk X2V2ZW50IHRvIHBpY2sgb25lIGV2ZXJ5IE4gYnl0ZXMuICBUaGF0IGFsc28gYWRkcyBubyBjb3N0 IG9uCi0JICogdGhlIGZhc3RwYXRoLCBob3dldmVyIGl0IHdpbGwgdGVuZCB0byBwaWNrIGxhcmdl IGFsbG9jYXRpb25zIHdoaWNoIGlzCi0JICogbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLgotCSAq LwotCXJldHVybiAoKHVpbnRwdHJfdClwdHIgJiBzYW5fY2FjaGVfYmluX25vbmZhc3RfbWFzaykg PT0gMDsKLX0KLQotLyogUmV0dXJucyBuY2FjaGVkX21heDogVXBwZXIgbGltaXQgb24gbmNhY2hl ZC4gKi8KLXN0YXRpYyBpbmxpbmUgY2FjaGVfYmluX3N6X3QKLWNhY2hlX2Jpbl9pbmZvX25jYWNo ZWRfbWF4KGNhY2hlX2Jpbl9pbmZvX3QgKmluZm8pIHsKLQlyZXR1cm4gaW5mby0+bmNhY2hlZF9t YXg7Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbC4KLSAqCi0gKiBBc3NlcnRzIHRoYXQgdGhlIHBvaW50 ZXIgYXNzb2NpYXRlZCB3aXRoIGVhcmxpZXIgaXMgPD0gdGhlIG9uZSBhc3NvY2lhdGVkCi0gKiB3 aXRoIGxhdGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNhY2hlX2Jpbl9hc3NlcnRfZWFy bGllcihjYWNoZV9iaW5fdCAqYmluLCB1aW50MTZfdCBlYXJsaWVyLCB1aW50MTZfdCBsYXRlcikg ewotCWlmIChlYXJsaWVyID4gbGF0ZXIpIHsKLQkJYXNzZXJ0KGJpbi0+bG93X2JpdHNfZnVsbCA+ IGJpbi0+bG93X2JpdHNfZW1wdHkpOwotCX0KLX0KLQotLyoKLSAqIEludGVybmFsLgotICoKLSAq IERvZXMgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbnMgdGhhdCBoYW5kbGUgd3JhcGFyb3VuZCBjb3Jy ZWN0bHkuICBFYXJsaWVyIG11c3QKLSAqIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9zaXRpb24g ZWFybGllciBpbiBtZW1vcnkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdWludDE2X3QKLWNhY2hlX2Jp bl9kaWZmKGNhY2hlX2Jpbl90ICpiaW4sIHVpbnQxNl90IGVhcmxpZXIsIHVpbnQxNl90IGxhdGVy LCBib29sIHJhY3kpIHsKLQkvKgotCSAqIFdoZW4gaXQncyByYWN5LCBiaW4tPmxvd19iaXRzX2Z1 bGwgY2FuIGJlIG1vZGlmaWVkIGNvbmN1cnJlbnRseS4gSXQKLQkgKiBjYW4gY3Jvc3MgdGhlIHVp bnQxNl90IG1heCB2YWx1ZSBhbmQgYmVjb21lIGxlc3MgdGhhbgotCSAqIGJpbi0+bG93X2JpdHNf ZW1wdHkgYXQgdGhlIHRpbWUgb2YgdGhlIGNoZWNrLgotCSAqLwotCWlmICghcmFjeSkgewotCQlj YWNoZV9iaW5fYXNzZXJ0X2VhcmxpZXIoYmluLCBlYXJsaWVyLCBsYXRlcik7Ci0JfQotCXJldHVy biBsYXRlciAtIGVhcmxpZXI7Ci19Ci0KLS8qCi0gKiBOdW1iZXIgb2YgaXRlbXMgY3VycmVudGx5 IGNhY2hlZCBpbiB0aGUgYmluLCB3aXRob3V0IGNoZWNraW5nIG5jYWNoZWRfbWF4LgotICogV2Ug cmVxdWlyZSBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRoZSByZXF1ZXN0IGlzIHJhY3kgb3Ig bm90IChpLmUuIHdoZXRoZXIKLSAqIG9yIG5vdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgYXJl IHBvc3NpYmxlKS4KLSAqLwotc3RhdGljIGlubGluZSBjYWNoZV9iaW5fc3pfdAotY2FjaGVfYmlu X25jYWNoZWRfZ2V0X2ludGVybmFsKGNhY2hlX2Jpbl90ICpiaW4sIGJvb2wgcmFjeSkgewotCWNh Y2hlX2Jpbl9zel90IGRpZmYgPSBjYWNoZV9iaW5fZGlmZihiaW4sCi0JICAgICh1aW50MTZfdCko dWludHB0cl90KWJpbi0+c3RhY2tfaGVhZCwgYmluLT5sb3dfYml0c19lbXB0eSwgcmFjeSk7Ci0J Y2FjaGVfYmluX3N6X3QgbiA9IGRpZmYgLyBzaXplb2Yodm9pZCAqKTsKLQkvKgotCSAqIFdlIGhh dmUgdW5kZWZpbmVkIGJlaGF2aW9yIGhlcmU7IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZy b20gdGhlCi0JICogYXJlbmEgc3RhdHMgdXBkYXRpbmcgY29kZSwgdGhlbiBzdGFja19oZWFkIGNv dWxkIGNoYW5nZSBmcm9tIHRoZQotCSAqIGZpcnN0IGxpbmUgdG8gdGhlIG5leHQgb25lLiAgTW9y YWxseSwgdGhlc2UgbG9hZHMgc2hvdWxkIGJlIGF0b21pYywKLQkgKiBidXQgY29tcGlsZXJzIHdv bid0IGN1cnJlbnRseSBnZW5lcmF0ZSBjb21wYXJpc29ucyB3aXRoIGluLW1lbW9yeQotCSAqIG9w ZXJhbmRzIGFnYWluc3QgYXRvbWljcywgYW5kIHRoZXNlIHZhcmlhYmxlcyBnZXQgYWNjZXNzZWQg b24gdGhlCi0JICogZmFzdCBwYXRocy4gIFRoaXMgc2hvdWxkIHN0aWxsIGJlICJzYWZlIiBpbiB0 aGUgc2Vuc2Ugb2YgZ2VuZXJhdGluZwotCSAqIHRoZSBjb3JyZWN0IGFzc2VtYmx5IGZvciB0aGUg Zm9yZXNlZWFibGUgZnV0dXJlLCB0aG91Z2guCi0JICovCi0JYXNzZXJ0KG4gPT0gMCB8fCAqKGJp bi0+c3RhY2tfaGVhZCkgIT0gTlVMTCB8fCByYWN5KTsKLQlyZXR1cm4gbjsKLX0KLQotLyoKLSAq IE51bWJlciBvZiBpdGVtcyBjdXJyZW50bHkgY2FjaGVkIGluIHRoZSBiaW4sIHdpdGggY2hlY2tp bmcgbmNhY2hlZF9tYXguICBUaGUKLSAqIGNhbGxlciBtdXN0IGtub3cgdGhhdCBubyBjb25jdXJy ZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUgY2FjaGVfYmluIGlzCi0gKiBwb3NzaWJsZS4KLSAqLwot c3RhdGljIGlubGluZSBjYWNoZV9iaW5fc3pfdAotY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2Fs KGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZvX3QgKmluZm8pIHsKLQljYWNoZV9iaW5f c3pfdCBuID0gY2FjaGVfYmluX25jYWNoZWRfZ2V0X2ludGVybmFsKGJpbiwKLQkgICAgLyogcmFj eSAqLyBmYWxzZSk7Ci0JYXNzZXJ0KG4gPD0gY2FjaGVfYmluX2luZm9fbmNhY2hlZF9tYXgoaW5m bykpOwotCXJldHVybiBuOwotfQotCi0vKgotICogSW50ZXJuYWwuCi0gKgotICogQSBwb2ludGVy IHRvIHRoZSBwb3NpdGlvbiBvbmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBiYWNraW5nIGFycmF5Lgot ICoKLSAqIERvIG5vdCBjYWxsIGlmIHJhY3ksIGJlY2F1c2UgYm90aCAnYmluLT5zdGFja19oZWFk JyBhbmQgJ2Jpbi0+bG93X2JpdHNfZnVsbCcKLSAqIGFyZSBzdWJqZWN0IHRvIGNvbmN1cnJlbnQg bW9kaWZpY2F0aW9ucy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkICoqCi1jYWNoZV9iaW5fZW1w dHlfcG9zaXRpb25fZ2V0KGNhY2hlX2Jpbl90ICpiaW4pIHsKLQljYWNoZV9iaW5fc3pfdCBkaWZm ID0gY2FjaGVfYmluX2RpZmYoYmluLAotCSAgICAodWludDE2X3QpKHVpbnRwdHJfdCliaW4tPnN0 YWNrX2hlYWQsIGJpbi0+bG93X2JpdHNfZW1wdHksCi0JICAgIC8qIHJhY3kgKi8gZmFsc2UpOwot CXVpbnRwdHJfdCBlbXB0eV9iaXRzID0gKHVpbnRwdHJfdCliaW4tPnN0YWNrX2hlYWQgKyBkaWZm OwotCXZvaWQgKipyZXQgPSAodm9pZCAqKillbXB0eV9iaXRzOwotCi0JYXNzZXJ0KHJldCA+PSBi aW4tPnN0YWNrX2hlYWQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIEludGVybmFsLgot ICoKLSAqIENhbGN1bGF0ZXMgbG93IGJpdHMgb2YgdGhlIGxvd2VyIGJvdW5kIG9mIHRoZSB1c2Fi bGUgY2FjaGUgYmluJ3MgcmFuZ2UgKHNlZQotICogY2FjaGVfYmluX3QgdmlzdWFsIHJlcHJlc2Vu dGF0aW9uIGFib3ZlKS4KLSAqCi0gKiBObyB2YWx1ZXMgYXJlIGNvbmN1cnJlbnRseSBtb2RpZmll ZCwgc28gc2hvdWxkIGJlIHNhZmUgdG8gcmVhZCBpbiBhCi0gKiBtdWx0aXRocmVhZGVkIGVudmly b25tZW50LiBDdXJyZW50bHkgY29uY3VycmVudCBhY2Nlc3MgaGFwcGVucyBvbmx5IGR1cmluZwot ICogYXJlbmEgc3RhdGlzdGljcyBjb2xsZWN0aW9uLgotICovCi1zdGF0aWMgaW5saW5lIHVpbnQx Nl90Ci1jYWNoZV9iaW5fbG93X2JpdHNfbG93X2JvdW5kX2dldChjYWNoZV9iaW5fdCAqYmluLCBj YWNoZV9iaW5faW5mb190ICppbmZvKSB7Ci0JcmV0dXJuICh1aW50MTZfdCliaW4tPmxvd19iaXRz X2VtcHR5IC0KLQkgICAgaW5mby0+bmNhY2hlZF9tYXggKiBzaXplb2Yodm9pZCAqKTsKLX0KLQot LyoKLSAqIEludGVybmFsLgotICoKLSAqIEEgcG9pbnRlciB0byB0aGUgcG9zaXRpb24gd2l0aCB0 aGUgbG93ZXN0IGFkZHJlc3Mgb2YgdGhlIGJhY2tpbmcgYXJyYXkuCi0gKi8KLXN0YXRpYyBpbmxp bmUgdm9pZCAqKgotY2FjaGVfYmluX2xvd19ib3VuZF9nZXQoY2FjaGVfYmluX3QgKmJpbiwgY2Fj aGVfYmluX2luZm9fdCAqaW5mbykgewotCWNhY2hlX2Jpbl9zel90IG5jYWNoZWRfbWF4ID0gY2Fj aGVfYmluX2luZm9fbmNhY2hlZF9tYXgoaW5mbyk7Ci0Jdm9pZCAqKnJldCA9IGNhY2hlX2Jpbl9l bXB0eV9wb3NpdGlvbl9nZXQoYmluKSAtIG5jYWNoZWRfbWF4OwotCWFzc2VydChyZXQgPD0gYmlu LT5zdGFja19oZWFkKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBBcyB0aGUgbmFtZSBp bXBsaWVzLiAgVGhpcyBpcyBpbXBvcnRhbnQgc2luY2UgaXQncyBub3QgY29ycmVjdCB0byB0cnkg dG8KLSAqIGJhdGNoIGZpbGwgYSBub25lbXB0eSBjYWNoZSBiaW4uCi0gKi8KLXN0YXRpYyBpbmxp bmUgdm9pZAotY2FjaGVfYmluX2Fzc2VydF9lbXB0eShjYWNoZV9iaW5fdCAqYmluLCBjYWNoZV9i aW5faW5mb190ICppbmZvKSB7Ci0JYXNzZXJ0KGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbChi aW4sIGluZm8pID09IDApOwotCWFzc2VydChjYWNoZV9iaW5fZW1wdHlfcG9zaXRpb25fZ2V0KGJp bikgPT0gYmluLT5zdGFja19oZWFkKTsKLX0KLQotLyoKLSAqIEdldCBsb3cgd2F0ZXIsIGJ1dCB3 aXRob3V0IGFueSBvZiB0aGUgY29ycmVjdG5lc3MgY2hlY2tpbmcgd2UgZG8gZm9yIHRoZQotICog Y2FsbGVyLXVzYWJsZSB2ZXJzaW9uLCBpZiB3ZSBhcmUgdGVtcG9yYXJpbHkgYnJlYWtpbmcgaW52 YXJpYW50cyAobGlrZQotICogbmNhY2hlZCA+PSBsb3dfd2F0ZXIgZHVyaW5nIGZsdXNoKS4KLSAq Lwotc3RhdGljIGlubGluZSBjYWNoZV9iaW5fc3pfdAotY2FjaGVfYmluX2xvd193YXRlcl9nZXRf aW50ZXJuYWwoY2FjaGVfYmluX3QgKmJpbikgewotCXJldHVybiBjYWNoZV9iaW5fZGlmZihiaW4s IGJpbi0+bG93X2JpdHNfbG93X3dhdGVyLAotCSAgICBiaW4tPmxvd19iaXRzX2VtcHR5LCAvKiBy YWN5ICovIGZhbHNlKSAvIHNpemVvZih2b2lkICopOwotfQotCi0vKiBSZXR1cm5zIHRoZSBudW1l cmljIHZhbHVlIG9mIGxvdyB3YXRlciBpbiBbMCwgbmNhY2hlZF0uICovCi1zdGF0aWMgaW5saW5l IGNhY2hlX2Jpbl9zel90Ci1jYWNoZV9iaW5fbG93X3dhdGVyX2dldChjYWNoZV9iaW5fdCAqYmlu LCBjYWNoZV9iaW5faW5mb190ICppbmZvKSB7Ci0JY2FjaGVfYmluX3N6X3QgbG93X3dhdGVyID0g Y2FjaGVfYmluX2xvd193YXRlcl9nZXRfaW50ZXJuYWwoYmluKTsKLQlhc3NlcnQobG93X3dhdGVy IDw9IGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KGluZm8pKTsKLQlhc3NlcnQobG93X3dhdGVy IDw9IGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbChiaW4sIGluZm8pKTsKLQotCWNhY2hlX2Jp bl9hc3NlcnRfZWFybGllcihiaW4sICh1aW50MTZfdCkodWludHB0cl90KWJpbi0+c3RhY2tfaGVh ZCwKLQkgICAgYmluLT5sb3dfYml0c19sb3dfd2F0ZXIpOwotCi0JcmV0dXJuIGxvd193YXRlcjsK LX0KLQotLyoKLSAqIEluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IGNhY2hlIGJpbiBwb3NpdGlv biBzaG91bGQgYmUgdGhlIGxvdyB3YXRlciBtYXJrCi0gKiBnb2luZyBmb3J3YXJkLgotICovCi1z dGF0aWMgaW5saW5lIHZvaWQKLWNhY2hlX2Jpbl9sb3dfd2F0ZXJfc2V0KGNhY2hlX2Jpbl90ICpi aW4pIHsKLQliaW4tPmxvd19iaXRzX2xvd193YXRlciA9ICh1aW50MTZfdCkodWludHB0cl90KWJp bi0+c3RhY2tfaGVhZDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1jYWNoZV9iaW5fbG93X3dh dGVyX2FkanVzdChjYWNoZV9iaW5fdCAqYmluKSB7Ci0JaWYgKGNhY2hlX2Jpbl9uY2FjaGVkX2dl dF9pbnRlcm5hbChiaW4sIC8qIHJhY3kgKi8gZmFsc2UpCi0JICAgIDwgY2FjaGVfYmluX2xvd193 YXRlcl9nZXRfaW50ZXJuYWwoYmluKSkgewotCQljYWNoZV9iaW5fbG93X3dhdGVyX3NldChiaW4p OwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLWNhY2hlX2Jpbl9hbGxv Y19pbXBsKGNhY2hlX2Jpbl90ICpiaW4sIGJvb2wgKnN1Y2Nlc3MsIGJvb2wgYWRqdXN0X2xvd193 YXRlcikgewotCS8qCi0JICogc3VjY2VzcyAoaW5zdGVhZCBvZiByZXQpIHNob3VsZCBiZSBjaGVj a2VkIHVwb24gdGhlIHJldHVybiBvZiB0aGlzCi0JICogZnVuY3Rpb24uICBXZSBhdm9pZCBjaGVj a2luZyAocmV0ID09IE5VTEwpIGJlY2F1c2UgdGhlcmUgaXMgbmV2ZXIgYQotCSAqIG51bGwgc3Rv cmVkIG9uIHRoZSBhdmFpbCBzdGFjayAod2hpY2ggaXMgdW5rbm93biB0byB0aGUgY29tcGlsZXIp LAotCSAqIGFuZCBlYWdlcmx5IGNoZWNraW5nIHJldCB3b3VsZCBjYXVzZSBwaXBlbGluZSBzdGFs bCAod2FpdGluZyBmb3IgdGhlCi0JICogY2FjaGVsaW5lKS4KLQkgKi8KLQotCS8qCi0JICogVGhp cyBtYXkgcmVhZCBmcm9tIHRoZSBlbXB0eSBwb3NpdGlvbjsgaG93ZXZlciB0aGUgbG9hZGVkIHZh bHVlIHdvbid0Ci0JICogYmUgdXNlZC4gIEl0J3Mgc2FmZSBiZWNhdXNlIHRoZSBzdGFjayBoYXMg b25lIG1vcmUgc2xvdCByZXNlcnZlZC4KLQkgKi8KLQl2b2lkICpyZXQgPSAqYmluLT5zdGFja19o ZWFkOwotCXVpbnQxNl90IGxvd19iaXRzID0gKHVpbnQxNl90KSh1aW50cHRyX3QpYmluLT5zdGFj a19oZWFkOwotCXZvaWQgKipuZXdfaGVhZCA9IGJpbi0+c3RhY2tfaGVhZCArIDE7Ci0KLQkvKgot CSAqIE5vdGUgdGhhdCB0aGUgbG93IHdhdGVyIG1hcmsgaXMgYXQgbW9zdCBlbXB0eTsgaWYgd2Ug cGFzcyB0aGlzIGNoZWNrLAotCSAqIHdlIGtub3cgd2UncmUgbm9uLWVtcHR5LgotCSAqLwotCWlm IChsaWtlbHkobG93X2JpdHMgIT0gYmluLT5sb3dfYml0c19sb3dfd2F0ZXIpKSB7Ci0JCWJpbi0+ c3RhY2tfaGVhZCA9IG5ld19oZWFkOwotCQkqc3VjY2VzcyA9IHRydWU7Ci0JCXJldHVybiByZXQ7 Ci0JfQotCWlmICghYWRqdXN0X2xvd193YXRlcikgewotCQkqc3VjY2VzcyA9IGZhbHNlOwotCQly ZXR1cm4gTlVMTDsKLQl9Ci0JLyoKLQkgKiBJbiB0aGUgZmFzdC1wYXRoIGNhc2Ugd2hlcmUgd2Ug Y2FsbCBhbGxvY19lYXN5IGFuZCB0aGVuIGFsbG9jLCB0aGUKLQkgKiBwcmV2aW91cyBjaGVja2lu ZyBhbmQgY29tcHV0YXRpb24gaXMgb3B0aW1pemVkIGF3YXkgLS0gd2UgZGlkbid0Ci0JICogYWN0 dWFsbHkgY29tbWl0IGFueSBvZiBvdXIgb3BlcmF0aW9ucy4KLQkgKi8KLQlpZiAobGlrZWx5KGxv d19iaXRzICE9IGJpbi0+bG93X2JpdHNfZW1wdHkpKSB7Ci0JCWJpbi0+c3RhY2tfaGVhZCA9IG5l d19oZWFkOwotCQliaW4tPmxvd19iaXRzX2xvd193YXRlciA9ICh1aW50MTZfdCkodWludHB0cl90 KW5ld19oZWFkOwotCQkqc3VjY2VzcyA9IHRydWU7Ci0JCXJldHVybiByZXQ7Ci0JfQotCSpzdWNj ZXNzID0gZmFsc2U7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhbiBpdGVt IG91dCBvZiB0aGUgYmluLCBmYWlsaW5nIGlmIHdlJ3JlIGF0IHRoZSBsb3ctd2F0ZXIgbWFyay4K LSAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLWNhY2hlX2Jpbl9hbGxvY19lYXN5 KGNhY2hlX2Jpbl90ICpiaW4sIGJvb2wgKnN1Y2Nlc3MpIHsKLQkvKiBXZSBkb24ndCBsb29rIGF0 IGluZm8gaWYgd2UncmUgbm90IGFkanVzdGluZyBsb3ctd2F0ZXIuICovCi0JcmV0dXJuIGNhY2hl X2Jpbl9hbGxvY19pbXBsKGJpbiwgc3VjY2VzcywgZmFsc2UpOwotfQotCi0vKgotICogQWxsb2Nh dGUgYW4gaXRlbSBvdXQgb2YgdGhlIGJpbiwgZXZlbiBpZiB3ZSdyZSBjdXJyZW50bHkgYXQgdGhl IGxvdy13YXRlcgotICogbWFyayAoYW5kIGZhaWxpbmcgb25seSBpZiB0aGUgYmluIGlzIGVtcHR5 KS4KLSAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLWNhY2hlX2Jpbl9hbGxvYyhj YWNoZV9iaW5fdCAqYmluLCBib29sICpzdWNjZXNzKSB7Ci0JcmV0dXJuIGNhY2hlX2Jpbl9hbGxv Y19pbXBsKGJpbiwgc3VjY2VzcywgdHJ1ZSk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUg Y2FjaGVfYmluX3N6X3QKLWNhY2hlX2Jpbl9hbGxvY19iYXRjaChjYWNoZV9iaW5fdCAqYmluLCBz aXplX3QgbnVtLCB2b2lkICoqb3V0KSB7Ci0JY2FjaGVfYmluX3N6X3QgbiA9IGNhY2hlX2Jpbl9u Y2FjaGVkX2dldF9pbnRlcm5hbChiaW4sCi0JICAgIC8qIHJhY3kgKi8gZmFsc2UpOwotCWlmIChu ID4gbnVtKSB7Ci0JCW4gPSAoY2FjaGVfYmluX3N6X3QpbnVtOwotCX0KLQltZW1jcHkob3V0LCBi aW4tPnN0YWNrX2hlYWQsIG4gKiBzaXplb2Yodm9pZCAqKSk7Ci0JYmluLT5zdGFja19oZWFkICs9 IG47Ci0JY2FjaGVfYmluX2xvd193YXRlcl9hZGp1c3QoYmluKTsKLQotCXJldHVybiBuOwotfQot Ci1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLWNhY2hlX2Jpbl9mdWxsKGNhY2hlX2Jpbl90 ICpiaW4pIHsKLQlyZXR1cm4gKCh1aW50MTZfdCkodWludHB0cl90KWJpbi0+c3RhY2tfaGVhZCA9 PSBiaW4tPmxvd19iaXRzX2Z1bGwpOwotfQotCi0vKgotICogRnJlZSBhbiBvYmplY3QgaW50byB0 aGUgZ2l2ZW4gYmluLiAgRmFpbHMgb25seSBpZiB0aGUgYmluIGlzIGZ1bGwuCi0gKi8KLUpFTUFM TE9DX0FMV0FZU19JTkxJTkUgYm9vbAotY2FjaGVfYmluX2RhbGxvY19lYXN5KGNhY2hlX2Jpbl90 ICpiaW4sIHZvaWQgKnB0cikgewotCWlmICh1bmxpa2VseShjYWNoZV9iaW5fZnVsbChiaW4pKSkg ewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JYmluLT5zdGFja19oZWFkLS07Ci0JKmJpbi0+c3Rh Y2tfaGVhZCA9IHB0cjsKLQljYWNoZV9iaW5fYXNzZXJ0X2VhcmxpZXIoYmluLCBiaW4tPmxvd19i aXRzX2Z1bGwsCi0JICAgICh1aW50MTZfdCkodWludHB0cl90KWJpbi0+c3RhY2tfaGVhZCk7Ci0K LQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyogUmV0dXJucyBmYWxzZSBpZiBmYWlsZWQgdG8gc3Rhc2gg KGkuZS4gYmluIGlzIGZ1bGwpLiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi1jYWNo ZV9iaW5fc3Rhc2goY2FjaGVfYmluX3QgKmJpbiwgdm9pZCAqcHRyKSB7Ci0JaWYgKGNhY2hlX2Jp bl9mdWxsKGJpbikpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIFN0YXNoIGF0IHRoZSBm dWxsIHBvc2l0aW9uLCBpbiB0aGUgW2Z1bGwsIGhlYWQpIHJhbmdlLiAqLwotCXVpbnQxNl90IGxv d19iaXRzX2hlYWQgPSAodWludDE2X3QpKHVpbnRwdHJfdCliaW4tPnN0YWNrX2hlYWQ7Ci0JLyog V3JhcGFyb3VuZCBoYW5kbGVkIGFzIHdlbGwuICovCi0JdWludDE2X3QgZGlmZiA9IGNhY2hlX2Jp bl9kaWZmKGJpbiwgYmluLT5sb3dfYml0c19mdWxsLCBsb3dfYml0c19oZWFkLAotCSAgICAvKiBy YWN5ICovIGZhbHNlKTsKLQkqKHZvaWQgKiopKCh1aW50cHRyX3QpYmluLT5zdGFja19oZWFkIC0g ZGlmZikgPSBwdHI7Ci0KLQlhc3NlcnQoIWNhY2hlX2Jpbl9mdWxsKGJpbikpOwotCWJpbi0+bG93 X2JpdHNfZnVsbCArPSBzaXplb2Yodm9pZCAqKTsKLQljYWNoZV9iaW5fYXNzZXJ0X2VhcmxpZXIo YmluLCBiaW4tPmxvd19iaXRzX2Z1bGwsIGxvd19iaXRzX2hlYWQpOwotCi0JcmV0dXJuIHRydWU7 Ci19Ci0KLS8qCi0gKiBHZXQgdGhlIG51bWJlciBvZiBzdGFzaGVkIHBvaW50ZXJzLgotICoKLSAq IFdoZW4gY2FsbGVkIGZyb20gYSB0aHJlYWQgbm90IG93bmluZyB0aGUgVExTIChpLmUuIHJhY3kg PSB0cnVlKSwgaXQncwotICogaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZCB0aGF0ICdiaW4tPnN0 YWNrX2hlYWQnIGFuZCAnYmluLT5sb3dfYml0c19mdWxsJyBjYW4KLSAqIGJlIG1vZGlmaWVkIGNv bmN1cnJlbnRseSBhbmQgYWxtb3N0IG5vbmUgYXNzZXJ0aW9ucyBhYm91dCB0aGVpciB2YWx1ZXMg Y2FuIGJlCi0gKiBtYWRlLgotICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGNhY2hlX2Jpbl9z el90Ci1jYWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2ludGVybmFsKGNhY2hlX2Jpbl90ICpiaW4sIGNh Y2hlX2Jpbl9pbmZvX3QgKmluZm8sCi0gICAgYm9vbCByYWN5KSB7Ci0JY2FjaGVfYmluX3N6X3Qg bmNhY2hlZF9tYXggPSBjYWNoZV9iaW5faW5mb19uY2FjaGVkX21heChpbmZvKTsKLQl1aW50MTZf dCBsb3dfYml0c19sb3dfYm91bmQgPSBjYWNoZV9iaW5fbG93X2JpdHNfbG93X2JvdW5kX2dldChi aW4sCi0JICAgIGluZm8pOwotCi0JY2FjaGVfYmluX3N6X3QgbiA9IGNhY2hlX2Jpbl9kaWZmKGJp biwgbG93X2JpdHNfbG93X2JvdW5kLAotCSAgICBiaW4tPmxvd19iaXRzX2Z1bGwsIHJhY3kpIC8g c2l6ZW9mKHZvaWQgKik7Ci0JYXNzZXJ0KG4gPD0gbmNhY2hlZF9tYXgpOwotCi0JaWYgKCFyYWN5 KSB7Ci0JCS8qIEJlbG93IGFyZSBmb3IgYXNzZXJ0aW9ucyBvbmx5LiAqLwotCQl2b2lkICoqbG93 X2JvdW5kID0gY2FjaGVfYmluX2xvd19ib3VuZF9nZXQoYmluLCBpbmZvKTsKLQotCQlhc3NlcnQo KHVpbnQxNl90KSh1aW50cHRyX3QpbG93X2JvdW5kID09IGxvd19iaXRzX2xvd19ib3VuZCk7Ci0J CXZvaWQgKnN0YXNoZWQgPSAqKGxvd19ib3VuZCArIG4gLSAxKTsKLQkJYm9vbCBhbGlnbmVkID0g Y2FjaGVfYmluX25vbmZhc3RfYWxpZ25lZChzdGFzaGVkKTsKLSNpZmRlZiBKRU1BTExPQ19KRVQK LQkJLyogQWxsb3cgYXJiaXRyYXJ5IHBvaW50ZXJzIHRvIGJlIHN0YXNoZWQgaW4gdGVzdHMuICov Ci0JCWFsaWduZWQgPSB0cnVlOwotI2VuZGlmCi0JCWFzc2VydChuID09IDAgfHwgKHN0YXNoZWQg IT0gTlVMTCAmJiBhbGlnbmVkKSk7Ci0JfQotCi0JcmV0dXJuIG47Ci19Ci0KLUpFTUFMTE9DX0FM V0FZU19JTkxJTkUgY2FjaGVfYmluX3N6X3QKLWNhY2hlX2Jpbl9uc3Rhc2hlZF9nZXRfbG9jYWwo Y2FjaGVfYmluX3QgKmJpbiwgY2FjaGVfYmluX2luZm9fdCAqaW5mbykgewotCWNhY2hlX2Jpbl9z el90IG4gPSBjYWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2ludGVybmFsKGJpbiwgaW5mbywKLQkgICAg LyogcmFjeSAqLyBmYWxzZSk7Ci0JYXNzZXJ0KG4gPD0gY2FjaGVfYmluX2luZm9fbmNhY2hlZF9t YXgoaW5mbykpOwotCXJldHVybiBuOwotfQotCi0vKgotICogT2J0YWluIGEgcmFjeSB2aWV3IG9m IHRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IGluIHRoZSBjYWNoZSBiaW4sIGluIHRoZQot ICogcHJlc2VuY2Ugb2YgcG9zc2libGUgY29uY3VycmVudCBtb2RpZmljYXRpb25zLgotICovCi1z dGF0aWMgaW5saW5lIHZvaWQKLWNhY2hlX2Jpbl9uaXRlbXNfZ2V0X3JlbW90ZShjYWNoZV9iaW5f dCAqYmluLCBjYWNoZV9iaW5faW5mb190ICppbmZvLAotICAgIGNhY2hlX2Jpbl9zel90ICpuY2Fj aGVkLCBjYWNoZV9iaW5fc3pfdCAqbnN0YXNoZWQpIHsKLQljYWNoZV9iaW5fc3pfdCBuID0gY2Fj aGVfYmluX25jYWNoZWRfZ2V0X2ludGVybmFsKGJpbiwgLyogcmFjeSAqLyB0cnVlKTsKLQlhc3Nl cnQobiA8PSBjYWNoZV9iaW5faW5mb19uY2FjaGVkX21heChpbmZvKSk7Ci0JKm5jYWNoZWQgPSBu OwotCi0JbiA9IGNhY2hlX2Jpbl9uc3Rhc2hlZF9nZXRfaW50ZXJuYWwoYmluLCBpbmZvLCAvKiBy YWN5ICovIHRydWUpOwotCWFzc2VydChuIDw9IGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KGlu Zm8pKTsKLQkqbnN0YXNoZWQgPSBuOwotCS8qIE5vdGUgdGhhdCBjYW5ub3QgYXNzZXJ0IG5jYWNo ZWQgKyBuc3Rhc2hlZCA8PSBuY2FjaGVkX21heCAocmFjeSkuICovCi19Ci0KLS8qCi0gKiBGaWxs aW5nIGFuZCBmbHVzaGluZyBhcmUgZG9uZSBpbiBiYXRjaCwgb24gYXJyYXlzIG9mIHZvaWQgKnMu ICBGb3IgZmlsbGluZywKLSAqIHRoZSBhcnJheXMgZ28gZm9yd2FyZCwgYW5kIGNhbiBiZSBhY2Nl c3NlZCB3aXRoIG9yZGluYXJ5IGFycmF5IGFyaXRobWV0aWMuCi0gKiBGb3IgZmx1c2hpbmcsIHdl IHdvcmsgZnJvbSB0aGUgZW5kIGJhY2t3YXJkcywgYW5kIHNvIG5lZWQgdG8gdXNlIHNwZWNpYWwK LSAqIGFjY2Vzc29ycyB0aGF0IGludmVydCB0aGUgdXN1YWwgb3JkZXJpbmcuCi0gKgotICogVGhp cyBpcyBpbXBvcnRhbnQgZm9yIG1haW50YWluaW5nIGZpcnN0LWZpdDsgdGhlIGFyZW5hIGNvZGUg ZmlsbHMgd2l0aAotICogZWFybGllc3Qgb2JqZWN0cyBmaXJzdCwgYW5kIHNvIHRob3NlIGFyZSB0 aGUgb25lcyB3ZSBzaG91bGQgcmV0dXJuIGZpcnN0IGZvcgotICogY2FjaGVfYmluX2FsbG9jIGNh bGxzLiAgV2hlbiBmbHVzaGluZywgd2Ugc2hvdWxkIGZsdXNoIHRoZSBvYmplY3RzIHRoYXQgd2UK LSAqIHdpc2ggdG8gcmV0dXJuIGxhdGVyOyB0aG9zZSBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4g IFRoaXMgaXMgYmV0dGVyIGZvciB0aGUKLSAqIGZpcnN0LWZpdCBoZXVyaXN0aWMgYXMgd2VsbCBh cyBmb3IgY2FjaGUgbG9jYWxpdHk7IHRoZSBtb3N0IHJlY2VudGx5IGZyZWVkCi0gKiBvYmplY3Rz IGFyZSB0aGUgb25lcyBtb3N0IGxpa2VseSB0byBzdGlsbCBiZSBpbiBjYWNoZS4KLSAqCi0gKiBU aGlzIGFsbCBzb3VuZHMgdmVyeSBoYW5kLXdhdmV5IGFuZCB0aGVvcmV0aWNhbCwgYnV0IHJldmVy dGluZyB0aGUgb3JkZXJpbmcKLSAqIG9uIG9uZSBvciB0aGUgb3RoZXIgcGF0aHdheSBsZWFkcyB0 byBtZWFzdXJhYmxlIHNsb3dkb3ducy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBjYWNoZV9iaW5f cHRyX2FycmF5X3MgY2FjaGVfYmluX3B0cl9hcnJheV90Owotc3RydWN0IGNhY2hlX2Jpbl9wdHJf YXJyYXlfcyB7Ci0JY2FjaGVfYmluX3N6X3QgbjsKLQl2b2lkICoqcHRyOwotfTsKLQotLyoKLSAq IERlY2xhcmUgYSBjYWNoZV9iaW5fcHRyX2FycmF5X3Qgc3VmZmljaWVudCBmb3IgbnZhbCBpdGVt cy4KLSAqCi0gKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBjb3VsZCBiZSBq dXN0IHBhcnQgb2YgYQotICogY2FjaGVfYmluX3B0cl9hcnJheV9pbml0Xy4uLiBjYWxsLCBzaW5j ZSB3ZSByZXVzZSB0aGUgY2FjaGUgYmluIHN0YWNrIG1lbW9yeS4KLSAqIEluZGlyZWN0aW5nIGJl aGluZCBhIG1hY3JvLCB0aG91Z2gsIG1lYW5zIGV4cGVyaW1lbnRpbmcgd2l0aCBsaW5rZWQtbGlz dAotICogcmVwcmVzZW50YXRpb25zIGlzIGVhc3kgKHNpbmNlIHRoZXknbGwgcmVxdWlyZSBhbiBh bGxvY2EgaW4gdGhlIGNhbGxpbmcKLSAqIGZyYW1lKS4KLSAqLwotI2RlZmluZSBDQUNIRV9CSU5f UFRSX0FSUkFZX0RFQ0xBUkUobmFtZSwgbnZhbCkJCQkJXAotICAgIGNhY2hlX2Jpbl9wdHJfYXJy YXlfdCBuYW1lOwkJCQkJCVwKLSAgICBuYW1lLm4gPSAobnZhbCkKLQotLyoKLSAqIFN0YXJ0IGEg ZmlsbC4gIFRoZSBiaW4gbXVzdCBiZSBlbXB0eSwgYW5kIFRoaXMgbXVzdCBiZSBmb2xsb3dlZCBi eSBhCi0gKiBmaW5pc2hfZmlsbCBjYWxsIGJlZm9yZSBkb2luZyBhbnkgYWxsb2MvZGFsbG9jIG9w ZXJhdGlvbnMgb24gdGhlIGJpbi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1jYWNoZV9iaW5f aW5pdF9wdHJfYXJyYXlfZm9yX2ZpbGwoY2FjaGVfYmluX3QgKmJpbiwgY2FjaGVfYmluX2luZm9f dCAqaW5mbywKLSAgICBjYWNoZV9iaW5fcHRyX2FycmF5X3QgKmFyciwgY2FjaGVfYmluX3N6X3Qg bmZpbGwpIHsKLQljYWNoZV9iaW5fYXNzZXJ0X2VtcHR5KGJpbiwgaW5mbyk7Ci0JYXJyLT5wdHIg PSBjYWNoZV9iaW5fZW1wdHlfcG9zaXRpb25fZ2V0KGJpbikgLSBuZmlsbDsKLX0KLQotLyoKLSAq IFdoaWxlIG5maWxsIGluIGNhY2hlX2Jpbl9pbml0X3B0cl9hcnJheV9mb3JfZmlsbCBpcyB0aGUg bnVtYmVyIHdlICppbnRlbmQqIHRvCi0gKiBmaWxsLCBuZmlsbGVkIGhlcmUgaXMgdGhlIG51bWJl ciB3ZSBhY3R1YWxseSBmaWxsZWQgKHdoaWNoIG1heSBiZSBsZXNzLCBpbgotICogY2FzZSBvZiBP T00uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotY2FjaGVfYmluX2ZpbmlzaF9maWxsKGNhY2hl X2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZvX3QgKmluZm8sCi0gICAgY2FjaGVfYmluX3B0cl9h cnJheV90ICphcnIsIGNhY2hlX2Jpbl9zel90IG5maWxsZWQpIHsKLQljYWNoZV9iaW5fYXNzZXJ0 X2VtcHR5KGJpbiwgaW5mbyk7Ci0Jdm9pZCAqKmVtcHR5X3Bvc2l0aW9uID0gY2FjaGVfYmluX2Vt cHR5X3Bvc2l0aW9uX2dldChiaW4pOwotCWlmIChuZmlsbGVkIDwgYXJyLT5uKSB7Ci0JCW1lbW1v dmUoZW1wdHlfcG9zaXRpb24gLSBuZmlsbGVkLCBlbXB0eV9wb3NpdGlvbiAtIGFyci0+biwKLQkJ ICAgIG5maWxsZWQgKiBzaXplb2Yodm9pZCAqKSk7Ci0JfQotCWJpbi0+c3RhY2tfaGVhZCA9IGVt cHR5X3Bvc2l0aW9uIC0gbmZpbGxlZDsKLX0KLQotLyoKLSAqIFNhbWUgZGVhbCwgYnV0IHdpdGgg Zmx1c2guICBVbmxpa2UgZmlsbCAod2hpY2ggY2FuIGZhaWwpLCB0aGUgdXNlciBtdXN0IGZsdXNo Ci0gKiBldmVyeXRoaW5nIHdlIGdpdmUgdGhlbS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1j YWNoZV9iaW5faW5pdF9wdHJfYXJyYXlfZm9yX2ZsdXNoKGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hl X2Jpbl9pbmZvX3QgKmluZm8sCi0gICAgY2FjaGVfYmluX3B0cl9hcnJheV90ICphcnIsIGNhY2hl X2Jpbl9zel90IG5mbHVzaCkgewotCWFyci0+cHRyID0gY2FjaGVfYmluX2VtcHR5X3Bvc2l0aW9u X2dldChiaW4pIC0gbmZsdXNoOwotCWFzc2VydChjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwo YmluLCBpbmZvKSA9PSAwCi0JICAgIHx8ICphcnItPnB0ciAhPSBOVUxMKTsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkCi1jYWNoZV9iaW5fZmluaXNoX2ZsdXNoKGNhY2hlX2Jpbl90ICpiaW4sIGNh Y2hlX2Jpbl9pbmZvX3QgKmluZm8sCi0gICAgY2FjaGVfYmluX3B0cl9hcnJheV90ICphcnIsIGNh Y2hlX2Jpbl9zel90IG5mbHVzaGVkKSB7Ci0JdW5zaWduZWQgcmVtID0gY2FjaGVfYmluX25jYWNo ZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgLSBuZmx1c2hlZDsKLQltZW1tb3ZlKGJpbi0+c3RhY2tf aGVhZCArIG5mbHVzaGVkLCBiaW4tPnN0YWNrX2hlYWQsCi0JICAgIHJlbSAqIHNpemVvZih2b2lk ICopKTsKLQliaW4tPnN0YWNrX2hlYWQgPSBiaW4tPnN0YWNrX2hlYWQgKyBuZmx1c2hlZDsKLQlj YWNoZV9iaW5fbG93X3dhdGVyX2FkanVzdChiaW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQK LWNhY2hlX2Jpbl9pbml0X3B0cl9hcnJheV9mb3Jfc3Rhc2hlZChjYWNoZV9iaW5fdCAqYmluLCBz emluZF90IGJpbmluZCwKLSAgICBjYWNoZV9iaW5faW5mb190ICppbmZvLCBjYWNoZV9iaW5fcHRy X2FycmF5X3QgKmFyciwKLSAgICBjYWNoZV9iaW5fc3pfdCBuc3Rhc2hlZCkgewotCWFzc2VydChu c3Rhc2hlZCA+IDApOwotCWFzc2VydChjYWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2xvY2FsKGJpbiwg aW5mbykgPT0gbnN0YXNoZWQpOwotCi0Jdm9pZCAqKmxvd19ib3VuZCA9IGNhY2hlX2Jpbl9sb3df Ym91bmRfZ2V0KGJpbiwgaW5mbyk7Ci0JYXJyLT5wdHIgPSBsb3dfYm91bmQ7Ci0JYXNzZXJ0KCph cnItPnB0ciAhPSBOVUxMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1jYWNoZV9iaW5fZmlu aXNoX2ZsdXNoX3N0YXNoZWQoY2FjaGVfYmluX3QgKmJpbiwgY2FjaGVfYmluX2luZm9fdCAqaW5m bykgewotCXZvaWQgKipsb3dfYm91bmQgPSBjYWNoZV9iaW5fbG93X2JvdW5kX2dldChiaW4sIGlu Zm8pOwotCi0JLyogUmVzZXQgdGhlIGJpbiBsb2NhbCBmdWxsIHBvc2l0aW9uLiAqLwotCWJpbi0+ bG93X2JpdHNfZnVsbCA9ICh1aW50MTZfdCkodWludHB0cl90KWxvd19ib3VuZDsKLQlhc3NlcnQo Y2FjaGVfYmluX25zdGFzaGVkX2dldF9sb2NhbChiaW4sIGluZm8pID09IDApOwotfQotCi0vKgot ICogSW5pdGlhbGl6ZSBhIGNhY2hlX2Jpbl9pbmZvIHRvIHJlcHJlc2VudCB1cCB0byB0aGUgZ2l2 ZW4gbnVtYmVyIG9mIGl0ZW1zIGluCi0gKiB0aGUgY2FjaGVfYmlucyBpdCBpcyBhc3NvY2lhdGVk IHdpdGguCi0gKi8KLXZvaWQgY2FjaGVfYmluX2luZm9faW5pdChjYWNoZV9iaW5faW5mb190ICpi aW5faW5mbywKLSAgICBjYWNoZV9iaW5fc3pfdCBuY2FjaGVkX21heCk7Ci0vKgotICogR2l2ZW4g YW4gYXJyYXkgb2YgaW5pdGlhbGl6ZWQgY2FjaGVfYmluX2luZm9fdHMsIGRldGVybWluZSBob3cg YmlnIGFuCi0gKiBhbGxvY2F0aW9uIGlzIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgYSBmdWxsIHNl dCBvZiBjYWNoZV9iaW5fdHMuCi0gKi8KLXZvaWQgY2FjaGVfYmluX2luZm9fY29tcHV0ZV9hbGxv YyhjYWNoZV9iaW5faW5mb190ICppbmZvcywgc3ppbmRfdCBuaW5mb3MsCi0gICAgc2l6ZV90ICpz aXplLCBzaXplX3QgKmFsaWdubWVudCk7Ci0KLS8qCi0gKiBBY3R1YWxseSBpbml0aWFsaXplIHNv bWUgY2FjaGUgYmlucy4gIENhbGxlcnMgc2hvdWxkIGFsbG9jYXRlIHRoZSBiYWNraW5nCi0gKiBt ZW1vcnkgaW5kaWNhdGVkIGJ5IGEgY2FsbCB0byBjYWNoZV9iaW5fY29tcHV0ZV9hbGxvYy4gIFRo ZXkgc2hvdWxkIHRoZW4KLSAqIHByZWluY3JlbWVudCwgY2FsbCBpbml0IG9uY2UgZm9yIGVhY2gg YmluIGFuZCBpbmZvLCBhbmQgdGhlbiBjYWxsCi0gKiBjYWNoZV9iaW5fcG9zdGluY3JlbWVudC4g ICphbGxvY19jdXIgd2lsbCB0aGVuIHBvaW50IGltbWVkaWF0ZWx5IHBhc3QgdGhlIGVuZAotICog b2YgdGhlIGFsbG9jYXRpb24uCi0gKi8KLXZvaWQgY2FjaGVfYmluX3ByZWluY3JlbWVudChjYWNo ZV9iaW5faW5mb190ICppbmZvcywgc3ppbmRfdCBuaW5mb3MsCi0gICAgdm9pZCAqYWxsb2MsIHNp emVfdCAqY3VyX29mZnNldCk7Ci12b2lkIGNhY2hlX2Jpbl9wb3N0aW5jcmVtZW50KGNhY2hlX2Jp bl9pbmZvX3QgKmluZm9zLCBzemluZF90IG5pbmZvcywKLSAgICB2b2lkICphbGxvYywgc2l6ZV90 ICpjdXJfb2Zmc2V0KTsKLXZvaWQgY2FjaGVfYmluX2luaXQoY2FjaGVfYmluX3QgKmJpbiwgY2Fj aGVfYmluX2luZm9fdCAqaW5mbywgdm9pZCAqYWxsb2MsCi0gICAgc2l6ZV90ICpjdXJfb2Zmc2V0 KTsKLQotLyoKLSAqIElmIGEgY2FjaGUgYmluIHdhcyB6ZXJvIGluaXRpYWxpemVkIChlaXRoZXIg YmVjYXVzZSBpdCBsaXZlcyBpbiBzdGF0aWMgb3IKLSAqIHRocmVhZC1sb2NhbCBzdG9yYWdlLCBv ciB3YXMgbWVtc2V0IHRvIDApLCB0aGlzIGZ1bmN0aW9uIGluZGljYXRlcyB3aGV0aGVyIG9yCi0g KiBub3QgY2FjaGVfYmluX2luaXQgd2FzIGNhbGxlZCBvbiBpdC4KLSAqLwotYm9vbCBjYWNoZV9i aW5fc3RpbGxfemVyb19pbml0aWFsaXplZChjYWNoZV9iaW5fdCAqYmluKTsKLQotI2VuZGlmIC8q IEpFTUFMTE9DX0lOVEVSTkFMX0NBQ0hFX0JJTl9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9j a2guaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvY2toLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMzg1 MGIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ja2guaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSAr MCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0NLSF9ICi0jZGVmaW5lIEpFTUFMTE9D X0lOVEVSTkFMX0NLSF9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2QuaCIKLQot LyogQ3Vja29vIGhhc2hpbmcgaW1wbGVtZW50YXRpb24uICBTa2lwIHRvIHRoZSBlbmQgZm9yIHRo ZSBpbnRlcmZhY2UuICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJTlRFUk5BTCBE RUZJTklUSU9OUyAtLSBJR05PUkUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE1h aW50YWluIGNvdW50ZXJzIHVzZWQgdG8gZ2V0IGFuIGlkZWEgb2YgcGVyZm9ybWFuY2UuICovCi0v KiAjZGVmaW5lIENLSF9DT1VOVCAqLwotLyogUHJpbnQgY291bnRlciB2YWx1ZXMgaW4gY2toX2Rl bGV0ZSgpIChyZXF1aXJlcyBDS0hfQ09VTlQpLiAqLwotLyogI2RlZmluZSBDS0hfVkVSQk9TRSAq LwotCi0vKgotICogVGhlcmUgYXJlIDJeTEdfQ0tIX0JVQ0tFVF9DRUxMUyBjZWxscyBpbiBlYWNo IGhhc2ggdGFibGUgYnVja2V0LiAgVHJ5IHRvIGZpdAotICogb25lIGJ1Y2tldCBwZXIgTDEgY2Fj aGUgbGluZS4KLSAqLwotI2RlZmluZSBMR19DS0hfQlVDS0VUX0NFTExTIChMR19DQUNIRUxJTkUg LSBMR19TSVpFT0ZfUFRSIC0gMSkKLQotLyogVHlwZWRlZnMgdG8gYWxsb3cgZWFzeSBmdW5jdGlv biBwb2ludGVyIHBhc3NpbmcuICovCi10eXBlZGVmIHZvaWQgY2toX2hhc2hfdCAoY29uc3Qgdm9p ZCAqLCBzaXplX3RbMl0pOwotdHlwZWRlZiBib29sIGNraF9rZXljb21wX3QgKGNvbnN0IHZvaWQg KiwgY29uc3Qgdm9pZCAqKTsKLQotLyogSGFzaCB0YWJsZSBjZWxsLiAqLwotdHlwZWRlZiBzdHJ1 Y3QgewotCWNvbnN0IHZvaWQgKmtleTsKLQljb25zdCB2b2lkICpkYXRhOwotfSBja2hjX3Q7Ci0K LS8qIFRoZSBoYXNoIHRhYmxlIGl0c2VsZi4gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSNpZmRlZiBD S0hfQ09VTlQKLQkvKiBDb3VudGVycyB1c2VkIHRvIGdldCBhbiBpZGVhIG9mIHBlcmZvcm1hbmNl LiAqLwotCXVpbnQ2NF90IG5ncm93czsKLQl1aW50NjRfdCBuc2hyaW5rczsKLQl1aW50NjRfdCBu c2hyaW5rZmFpbHM7Ci0JdWludDY0X3Qgbmluc2VydHM7Ci0JdWludDY0X3QgbnJlbG9jczsKLSNl bmRpZgotCi0JLyogVXNlZCBmb3IgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gKi8K LQl1aW50NjRfdCBwcm5nX3N0YXRlOwotCi0JLyogVG90YWwgbnVtYmVyIG9mIGl0ZW1zLiAqLwot CXNpemVfdCBjb3VudDsKLQotCS8qCi0JICogTWluaW11bSBhbmQgY3VycmVudCBudW1iZXIgb2Yg aGFzaCB0YWJsZSBidWNrZXRzLiAgVGhlcmUgYXJlCi0JICogMl5MR19DS0hfQlVDS0VUX0NFTExT IGNlbGxzIHBlciBidWNrZXQuCi0JICovCi0JdW5zaWduZWQgbGdfbWluYnVja2V0czsKLQl1bnNp Z25lZCBsZ19jdXJidWNrZXRzOwotCi0JLyogSGFzaCBhbmQgY29tcGFyaXNvbiBmdW5jdGlvbnMu ICovCi0JY2toX2hhc2hfdCAqaGFzaDsKLQlja2hfa2V5Y29tcF90ICprZXljb21wOwotCi0JLyog SGFzaCB0YWJsZSB3aXRoIDJebGdfY3VyYnVja2V0cyBidWNrZXRzLiAqLwotCWNraGNfdCAqdGFi OwotfSBja2hfdDsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEJFR0lOIFBVQkxJQyBB UEkgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIExpZmV0aW1lIG1hbmFnZW1lbnQu ICBNaW5pdGVtcyBpcyB0aGUgaW5pdGlhbCBjYXBhY2l0eS4gKi8KLWJvb2wgY2toX25ldyh0c2Rf dCAqdHNkLCBja2hfdCAqY2toLCBzaXplX3QgbWluaXRlbXMsIGNraF9oYXNoX3QgKmhhc2gsCi0g ICAgY2toX2tleWNvbXBfdCAqa2V5Y29tcCk7Ci12b2lkIGNraF9kZWxldGUodHNkX3QgKnRzZCwg Y2toX3QgKmNraCk7Ci0KLS8qIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXQu ICovCi1zaXplX3QgY2toX2NvdW50KGNraF90ICpja2gpOwotCi0vKgotICogVG8gaXRlcmF0ZSBv dmVyIHRoZSBlbGVtZW50cyBpbiB0aGUgdGFibGUsIGluaXRpYWxpemUgKnRhYmluZCB0byAwIGFu ZCBjYWxsCi0gKiB0aGlzIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgdHJ1ZS4gIEVhY2ggY2Fs bCB0aGF0IHJldHVybnMgZmFsc2Ugd2lsbAotICogdXBkYXRlICprZXkgYW5kICpkYXRhIHRvIHRo ZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHRhYmxlLCBhc3N1bWluZyB0aGUgcG9pbnRlcnMKLSAqIGFy ZSBub24tTlVMTC4KLSAqLwotYm9vbCBja2hfaXRlcihja2hfdCAqY2toLCBzaXplX3QgKnRhYmlu ZCwgdm9pZCAqKmtleSwgdm9pZCAqKmRhdGEpOwotCi0vKgotICogQmFzaWMgaGFzaCB0YWJsZSBv cGVyYXRpb25zIC0tIGluc2VydCwgcmVtb3ZhbCwgbG9va3VwLiAgRm9yIGNraF9yZW1vdmUgYW5k Ci0gKiBja2hfc2VhcmNoLCBrZXkgb3IgZGF0YSBjYW4gYmUgTlVMTC4gIFRoZSBoYXNoLXRhYmxl IG9ubHkgc3RvcmVzIHBvaW50ZXJzIHRvCi0gKiB0aGUga2V5IGFuZCB2YWx1ZSwgYW5kIGRvZXNu J3QgZG8gYW55IGxpZmV0aW1lIG1hbmFnZW1lbnQuCi0gKi8KLWJvb2wgY2toX2luc2VydCh0c2Rf dCAqdHNkLCBja2hfdCAqY2toLCBjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmRhdGEpOwot Ym9vbCBja2hfcmVtb3ZlKHRzZF90ICp0c2QsIGNraF90ICpja2gsIGNvbnN0IHZvaWQgKnNlYXJj aGtleSwgdm9pZCAqKmtleSwKLSAgICB2b2lkICoqZGF0YSk7Ci1ib29sIGNraF9zZWFyY2goY2to X3QgKmNraCwgY29uc3Qgdm9pZCAqc2VhcmNoa2V5LCB2b2lkICoqa2V5LCB2b2lkICoqZGF0YSk7 Ci0KLS8qIFNvbWUgdXNlZnVsIGhhc2ggYW5kIGNvbXBhcmlzb24gZnVuY3Rpb25zIGZvciBzdHJp bmdzIGFuZCBwb2ludGVycy4gKi8KLXZvaWQgY2toX3N0cmluZ19oYXNoKGNvbnN0IHZvaWQgKmtl eSwgc2l6ZV90IHJfaGFzaFsyXSk7Ci1ib29sIGNraF9zdHJpbmdfa2V5Y29tcChjb25zdCB2b2lk ICprMSwgY29uc3Qgdm9pZCAqazIpOwotdm9pZCBja2hfcG9pbnRlcl9oYXNoKGNvbnN0IHZvaWQg KmtleSwgc2l6ZV90IHJfaGFzaFsyXSk7Ci1ib29sIGNraF9wb2ludGVyX2tleWNvbXAoY29uc3Qg dm9pZCAqazEsIGNvbnN0IHZvaWQgKmsyKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X0NLSF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jb3VudGVyLmggYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2NvdW50 ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlhYmYwNi4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2NvdW50ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpZm5k ZWYgSkVNQUxMT0NfSU5URVJOQUxfQ09VTlRFUl9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFM X0NPVU5URVJfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKLQotdHlw ZWRlZiBzdHJ1Y3QgY291bnRlcl9hY2N1bV9zIHsKLQlMT0NLRURJTlRfTVRYX0RFQ0xBUkUobXR4 KQotCWxvY2tlZF91NjRfdCBhY2N1bWJ5dGVzOwotCXVpbnQ2NF90IGludGVydmFsOwotfSBjb3Vu dGVyX2FjY3VtX3Q7Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotY291bnRlcl9hY2N1 bSh0c2RuX3QgKnRzZG4sIGNvdW50ZXJfYWNjdW1fdCAqY291bnRlciwgdWludDY0X3QgYnl0ZXMp IHsKLQl1aW50NjRfdCBpbnRlcnZhbCA9IGNvdW50ZXItPmludGVydmFsOwotCWFzc2VydChpbnRl cnZhbCA+IDApOwotCUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCBjb3VudGVyLT5tdHgpOwotCS8q Ci0JICogSWYgdGhlIGV2ZW50IG1vdmVzIGZhc3QgZW5vdWdoIChhbmQvb3IgaWYgdGhlIGV2ZW50 IGhhbmRsaW5nIGlzIHNsb3cKLQkgKiBlbm91Z2gpLCBleHRyZW1lIG92ZXJmbG93IGNhbiBjYXVz ZSBjb3VudGVyIHRyaWdnZXIgY29hbGVzY2luZy4KLQkgKiBUaGlzIGlzIGFuIGludGVudGlvbmFs IG1lY2hhbmlzbSB0aGF0IGF2b2lkcyByYXRlLWxpbWl0aW5nCi0JICogYWxsb2NhdGlvbi4KLQkg Ki8KLQlib29sIG92ZXJmbG93ID0gbG9ja2VkX2luY19tb2RfdTY0KHRzZG4sIExPQ0tFRElOVF9N VFgoY291bnRlci0+bXR4KSwKLQkgICAgJmNvdW50ZXItPmFjY3VtYnl0ZXMsIGJ5dGVzLCBpbnRl cnZhbCk7Ci0JTE9DS0VESU5UX01UWF9VTkxPQ0sodHNkbiwgY291bnRlci0+bXR4KTsKLQlyZXR1 cm4gb3ZlcmZsb3c7Ci19Ci0KLWJvb2wgY291bnRlcl9hY2N1bV9pbml0KGNvdW50ZXJfYWNjdW1f dCAqY291bnRlciwgdWludDY0X3QgaW50ZXJ2YWwpOwotdm9pZCBjb3VudGVyX3ByZWZvcmsodHNk bl90ICp0c2RuLCBjb3VudGVyX2FjY3VtX3QgKmNvdW50ZXIpOwotdm9pZCBjb3VudGVyX3Bvc3Rm b3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGNvdW50ZXJfYWNjdW1fdCAqY291bnRlcik7Ci12b2lk IGNvdW50ZXJfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBjb3VudGVyX2FjY3VtX3QgKmNv dW50ZXIpOwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQ09VTlRFUl9IICovCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9jdGwuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvY3RsLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDYzZDI3ZjguLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9jdGwuaAorKysgL2Rl di9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0NUTF9I Ci0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0NUTF9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF90eXBlcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL21hbGxvY19pby5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4X3By b2YuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9xbC5oIgotI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3NjLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc3RhdHMuaCIK LQotLyogTWF4aW11bSBjdGwgdHJlZSBkZXB0aC4gKi8KLSNkZWZpbmUgQ1RMX01BWF9ERVBUSAk3 Ci0KLXR5cGVkZWYgc3RydWN0IGN0bF9ub2RlX3MgewotCWJvb2wgbmFtZWQ7Ci19IGN0bF9ub2Rl X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGN0bF9uYW1lZF9ub2RlX3MgewotCWN0bF9ub2RlX3Qgbm9k ZTsKLQljb25zdCBjaGFyICpuYW1lOwotCS8qIElmIChuY2hpbGRyZW4gPT0gMCksIHRoaXMgaXMg YSB0ZXJtaW5hbCBub2RlLiAqLwotCXNpemVfdCBuY2hpbGRyZW47Ci0JY29uc3QgY3RsX25vZGVf dCAqY2hpbGRyZW47Ci0JaW50ICgqY3RsKSh0c2RfdCAqLCBjb25zdCBzaXplX3QgKiwgc2l6ZV90 LCB2b2lkICosIHNpemVfdCAqLCB2b2lkICosCi0JICAgIHNpemVfdCk7Ci19IGN0bF9uYW1lZF9u b2RlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGN0bF9pbmRleGVkX25vZGVfcyB7Ci0Jc3RydWN0IGN0 bF9ub2RlX3Mgbm9kZTsKLQljb25zdCBjdGxfbmFtZWRfbm9kZV90ICooKmluZGV4KSh0c2RuX3Qg KiwgY29uc3Qgc2l6ZV90ICosIHNpemVfdCwKLQkgICAgc2l6ZV90KTsKLX0gY3RsX2luZGV4ZWRf bm9kZV90OwotCi10eXBlZGVmIHN0cnVjdCBjdGxfYXJlbmFfc3RhdHNfcyB7Ci0JYXJlbmFfc3Rh dHNfdCBhc3RhdHM7Ci0KLQkvKiBBZ2dyZWdhdGUgc3RhdHMgZm9yIHNtYWxsIHNpemUgY2xhc3Nl cywgYmFzZWQgb24gYmluIHN0YXRzLiAqLwotCXNpemVfdCBhbGxvY2F0ZWRfc21hbGw7Ci0JdWlu dDY0X3Qgbm1hbGxvY19zbWFsbDsKLQl1aW50NjRfdCBuZGFsbG9jX3NtYWxsOwotCXVpbnQ2NF90 IG5yZXF1ZXN0c19zbWFsbDsKLQl1aW50NjRfdCBuZmlsbHNfc21hbGw7Ci0JdWludDY0X3QgbmZs dXNoZXNfc21hbGw7Ci0KLQliaW5fc3RhdHNfZGF0YV90IGJzdGF0c1tTQ19OQklOU107Ci0JYXJl bmFfc3RhdHNfbGFyZ2VfdCBsc3RhdHNbU0NfTlNJWkVTIC0gU0NfTkJJTlNdOwotCXBhY19lc3Rh dHNfdCBlc3RhdHNbU0NfTlBTSVpFU107Ci0JaHBhX3NoYXJkX3N0YXRzX3QgaHBhc3RhdHM7Ci0J c2VjX3N0YXRzX3Qgc2Vjc3RhdHM7Ci19IGN0bF9hcmVuYV9zdGF0c190OwotCi10eXBlZGVmIHN0 cnVjdCBjdGxfc3RhdHNfcyB7Ci0Jc2l6ZV90IGFsbG9jYXRlZDsKLQlzaXplX3QgYWN0aXZlOwot CXNpemVfdCBtZXRhZGF0YTsKLQlzaXplX3QgbWV0YWRhdGFfdGhwOwotCXNpemVfdCByZXNpZGVu dDsKLQlzaXplX3QgbWFwcGVkOwotCXNpemVfdCByZXRhaW5lZDsKLQotCWJhY2tncm91bmRfdGhy ZWFkX3N0YXRzX3QgYmFja2dyb3VuZF90aHJlYWQ7Ci0JbXV0ZXhfcHJvZl9kYXRhX3QgbXV0ZXhf cHJvZl9kYXRhW211dGV4X3Byb2ZfbnVtX2dsb2JhbF9tdXRleGVzXTsKLX0gY3RsX3N0YXRzX3Q7 Ci0KLXR5cGVkZWYgc3RydWN0IGN0bF9hcmVuYV9zIGN0bF9hcmVuYV90Owotc3RydWN0IGN0bF9h cmVuYV9zIHsKLQl1bnNpZ25lZCBhcmVuYV9pbmQ7Ci0JYm9vbCBpbml0aWFsaXplZDsKLQlxbF9l bG0oY3RsX2FyZW5hX3QpIGRlc3Ryb3llZF9saW5rOwotCi0JLyogQmFzaWMgc3RhdHMsIHN1cHBv cnRlZCBldmVuIGlmICFjb25maWdfc3RhdHMuICovCi0JdW5zaWduZWQgbnRocmVhZHM7Ci0JY29u c3QgY2hhciAqZHNzOwotCXNzaXplX3QgZGlydHlfZGVjYXlfbXM7Ci0Jc3NpemVfdCBtdXp6eV9k ZWNheV9tczsKLQlzaXplX3QgcGFjdGl2ZTsKLQlzaXplX3QgcGRpcnR5OwotCXNpemVfdCBwbXV6 enk7Ci0KLQkvKiBOVUxMIGlmICFjb25maWdfc3RhdHMuICovCi0JY3RsX2FyZW5hX3N0YXRzX3Qg KmFzdGF0czsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IGN0bF9hcmVuYXNfcyB7Ci0JdWludDY0X3Qg ZXBvY2g7Ci0JdW5zaWduZWQgbmFyZW5hczsKLQlxbF9oZWFkKGN0bF9hcmVuYV90KSBkZXN0cm95 ZWQ7Ci0KLQkvKgotCSAqIEVsZW1lbnQgMCBjb3JyZXNwb25kcyB0byBtZXJnZWQgc3RhdHMgZm9y IGV4dGFudCBhcmVuYXMgKGFjY2Vzc2VkIHZpYQotCSAqIE1BTExDVExfQVJFTkFTX0FMTCksIGVs ZW1lbnQgMSBjb3JyZXNwb25kcyB0byBtZXJnZWQgc3RhdHMgZm9yCi0JICogZGVzdHJveWVkIGFy ZW5hcyAoYWNjZXNzZWQgdmlhIE1BTExDVExfQVJFTkFTX0RFU1RST1lFRCksIGFuZCB0aGUKLQkg KiByZW1haW5pbmcgTUFMTE9DWF9BUkVOQV9MSU1JVCBlbGVtZW50cyBjb3JyZXNwb25kIHRvIGFy ZW5hcy4KLQkgKi8KLQljdGxfYXJlbmFfdCAqYXJlbmFzWzIgKyBNQUxMT0NYX0FSRU5BX0xJTUlU XTsKLX0gY3RsX2FyZW5hc190OwotCi1pbnQgY3RsX2J5bmFtZSh0c2RfdCAqdHNkLCBjb25zdCBj aGFyICpuYW1lLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsCi0gICAgdm9pZCAqbmV3cCwg c2l6ZV90IG5ld2xlbik7Ci1pbnQgY3RsX25hbWV0b21pYih0c2RfdCAqdHNkLCBjb25zdCBjaGFy ICpuYW1lLCBzaXplX3QgKm1pYnAsIHNpemVfdCAqbWlibGVucCk7Ci1pbnQgY3RsX2J5bWliKHRz ZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLAot ICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbik7Ci1pbnQgY3Rs X21pYm5hbWV0b21pYih0c2RfdCAqdHNkLCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgY29u c3QgY2hhciAqbmFtZSwKLSAgICBzaXplX3QgKm1pYmxlbnApOwotaW50IGN0bF9ieW1pYm5hbWUo dHNkX3QgKnRzZCwgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIGNvbnN0IGNoYXIgKm5hbWUs Ci0gICAgc2l6ZV90ICptaWJsZW5wLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQg Km5ld3AsIHNpemVfdCBuZXdsZW4pOwotYm9vbCBjdGxfYm9vdCh2b2lkKTsKLXZvaWQgY3RsX3By ZWZvcmsodHNkbl90ICp0c2RuKTsKLXZvaWQgY3RsX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRz ZG4pOwotdm9pZCBjdGxfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuKTsKLXZvaWQgY3RsX210 eF9hc3NlcnRfaGVsZCh0c2RuX3QgKnRzZG4pOwotCi0jZGVmaW5lIHhtYWxsY3RsKG5hbWUsIG9s ZHAsIG9sZGxlbnAsIG5ld3AsIG5ld2xlbikgZG8gewkJXAotCWlmIChqZV9tYWxsY3RsKG5hbWUs IG9sZHAsIG9sZGxlbnAsIG5ld3AsIG5ld2xlbikJCVwKLQkgICAgIT0gMCkgewkJCQkJCQlcCi0J CW1hbGxvY19wcmludGYoCQkJCQkJXAotCQkgICAgIjxqZW1hbGxvYz46IEZhaWx1cmUgaW4geG1h bGxjdGwoXCIlc1wiLCAuLi4pXG4iLAlcCi0JCSAgICBuYW1lKTsJCQkJCQlcCi0JCWFib3J0KCk7 CQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgeG1hbGxjdGxuYW1l dG9taWIobmFtZSwgbWlicCwgbWlibGVucCkgZG8gewkJCVwKLQlpZiAoamVfbWFsbGN0bG5hbWV0 b21pYihuYW1lLCBtaWJwLCBtaWJsZW5wKSAhPSAwKSB7CQlcCi0JCW1hbGxvY19wcmludGYoIjxq ZW1hbGxvYz46IEZhaWx1cmUgaW4gIgkJCVwKLQkJICAgICJ4bWFsbGN0bG5hbWV0b21pYihcIiVz XCIsIC4uLilcbiIsIG5hbWUpOwkJXAotCQlhYm9ydCgpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19 IHdoaWxlICgwKQotCi0jZGVmaW5lIHhtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIG9sZHAsIG9s ZGxlbnAsIG5ld3AsIG5ld2xlbikgZG8gewlcCi0JaWYgKGplX21hbGxjdGxieW1pYihtaWIsIG1p Ymxlbiwgb2xkcCwgb2xkbGVucCwgbmV3cCwJCVwKLQkgICAgbmV3bGVuKSAhPSAwKSB7CQkJCQkJ XAotCQltYWxsb2Nfd3JpdGUoCQkJCQkJXAotCQkgICAgIjxqZW1hbGxvYz46IEZhaWx1cmUgaW4g eG1hbGxjdGxieW1pYigpXG4iKTsJXAotCQlhYm9ydCgpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19 IHdoaWxlICgwKQotCi0jZGVmaW5lIHhtYWxsY3RsbWlibmFtZXRvbWliKG1pYiwgbWlibGVuLCBu YW1lLCBtaWJsZW5wKSBkbyB7CQlcCi0JaWYgKGN0bF9taWJuYW1ldG9taWIodHNkX2ZldGNoKCks IG1pYiwgbWlibGVuLCBuYW1lLCBtaWJsZW5wKQlcCi0JICAgICE9IDApIHsJCQkJCQkJXAotCQlt YWxsb2Nfd3JpdGUoCQkJCQkJXAotCQkgICAgIjxqZW1hbGxvYz46IEZhaWx1cmUgaW4gY3RsX21p Ym5hbWV0b21pYigpXG4iKTsJXAotCQlhYm9ydCgpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdo aWxlICgwKQotCi0jZGVmaW5lIHhtYWxsY3RsYnltaWJuYW1lKG1pYiwgbWlibGVuLCBuYW1lLCBt aWJsZW5wLCBvbGRwLCBvbGRsZW5wLAlcCi0gICAgbmV3cCwgbmV3bGVuKSBkbyB7CQkJCQkJCVwK LQlpZiAoY3RsX2J5bWlibmFtZSh0c2RfZmV0Y2goKSwgbWliLCBtaWJsZW4sIG5hbWUsIG1pYmxl bnAsCVwKLQkgICAgb2xkcCwgb2xkbGVucCwgbmV3cCwgbmV3bGVuKSAhPSAwKSB7CQkJXAotCQlt YWxsb2Nfd3JpdGUoCQkJCQkJXAotCQkgICAgIjxqZW1hbGxvYz46IEZhaWx1cmUgaW4gY3RsX2J5 bWlibmFtZSgpXG4iKTsJXAotCQlhYm9ydCgpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxl ICgwKQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfQ1RMX0ggKi8KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2RlY2F5LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2RlY2F5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGNmNmE5ZDIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9kZWNheS5oCisrKyAvZGV2 L251bGwKQEAgLTEsMTg2ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfREVDQVlf SAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9ERUNBWV9ICi0KLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9zbW9vdGhzdGVwLmgiCi0KLSNkZWZpbmUgREVDQVlfVU5CT1VOREVEX1RJTUVf VE9fUFVSR0UgKCh1aW50NjRfdCktMSkKLQotLyoKLSAqIFRoZSBkZWNheV90IGNvbXB1dGVzIHRo ZSBudW1iZXIgb2YgcGFnZXMgd2Ugc2hvdWxkIHB1cmdlIGF0IGFueSBnaXZlbiB0aW1lLgotICog UGFnZSBhbGxvY2F0b3JzIGluZm9ybSBhIGRlY2F5IG9iamVjdCB3aGVuIHBhZ2VzIGVudGVyIGEg ZGVjYXktYWJsZSBzdGF0ZQotICogKGkuZS4gZGlydHkgb3IgbXV6enkpLCBhbmQgcXVlcnkgaXQg dG8gZGV0ZXJtaW5lIGhvdyBtYW55IHBhZ2VzIHNob3VsZCBiZQotICogcHVyZ2VkIGF0IGFueSBn aXZlbiB0aW1lLgotICoKLSAqIFRoaXMgaXMgbW9zdGx5IGEgc2luZ2xlLXRocmVhZGVkIGRhdGEg c3RydWN0dXJlIGFuZCBkb2Vzbid0IGNhcmUgYWJvdXQKLSAqIHN5bmNocm9uaXphdGlvbiBhdCBh bGw7IGl0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIG1hbmFnZSB0aGVpcgotICog c3luY2hyb25pemF0aW9uIG9uIHRoZWlyIG93bi4gIFRoZXJlIGFyZSB0d28gZXhjZXB0aW9uczoK LSAqIDEpIEl0J3MgT0sgdG8gcmFjaWx5IGNhbGwgZGVjYXlfbXNfcmVhZCAoaS5lLiBqdXN0IHRo ZSBzaW1wbGVzdCBzdGF0ZSBxdWVyeSkuCi0gKiAyKSBUaGUgbXR4IGFuZCBwdXJnaW5nIGZpZWxk cyBsaXZlIChhbmQgYXJlIGluaXRpYWxpemVkKSBoZXJlLCBidXQgYXJlCi0gKiAgICBsb2dpY2Fs bHkgb3duZWQgYnkgdGhlIHBhZ2UgYWxsb2NhdG9yLiAgVGhpcyBpcyBqdXN0IGEgY29udmVuaWVu Y2UgKHNpbmNlCi0gKiAgICB0aG9zZSBmaWVsZHMgd291bGQgYmUgZHVwbGljYXRlZCBmb3IgYm90 aCB0aGUgZGlydHkgYW5kIG11enp5IHN0YXRlcwotICogICAgb3RoZXJ3aXNlKS4KLSAqLwotdHlw ZWRlZiBzdHJ1Y3QgZGVjYXlfcyBkZWNheV90Owotc3RydWN0IGRlY2F5X3MgewotCS8qIFN5bmNo cm9uaXplcyBhbGwgbm9uLWF0b21pYyBmaWVsZHMuICovCi0JbWFsbG9jX211dGV4X3QgbXR4Owot CS8qCi0JICogVHJ1ZSBpZiBhIHRocmVhZCBpcyBjdXJyZW50bHkgcHVyZ2luZyB0aGUgZXh0ZW50 cyBhc3NvY2lhdGVkIHdpdGgKLQkgKiB0aGlzIGRlY2F5IHN0cnVjdHVyZS4KLQkgKi8KLQlib29s IHB1cmdpbmc7Ci0JLyoKLQkgKiBBcHByb3hpbWF0ZSB0aW1lIGluIG1pbGxpc2Vjb25kcyBmcm9t IHRoZSBjcmVhdGlvbiBvZiBhIHNldCBvZiB1bnVzZWQKLQkgKiBkaXJ0eSBwYWdlcyB1bnRpbCBh biBlcXVpdmFsZW50IHNldCBvZiB1bnVzZWQgZGlydHkgcGFnZXMgaXMgcHVyZ2VkCi0JICogYW5k L29yIHJldXNlZC4KLQkgKi8KLQlhdG9taWNfemRfdCB0aW1lX21zOwotCS8qIHRpbWUgLyBTTU9P VEhTVEVQX05TVEVQUy4gKi8KLQluc3RpbWVfdCBpbnRlcnZhbDsKLQkvKgotCSAqIFRpbWUgYXQg d2hpY2ggdGhlIGN1cnJlbnQgZGVjYXkgaW50ZXJ2YWwgbG9naWNhbGx5IHN0YXJ0ZWQuICBXZSBk bwotCSAqIG5vdCBhY3R1YWxseSBhZHZhbmNlIHRvIGEgbmV3IGVwb2NoIHVudGlsIHNvbWV0aW1l IGFmdGVyIGl0IHN0YXJ0cwotCSAqIGJlY2F1c2Ugb2Ygc2NoZWR1bGluZyBhbmQgY29tcHV0YXRp b24gZGVsYXlzLCBhbmQgaXQgaXMgZXZlbiBwb3NzaWJsZQotCSAqIHRvIGNvbXBsZXRlbHkgc2tp cCBlcG9jaHMuICBJbiBhbGwgY2FzZXMsIGR1cmluZyBlcG9jaCBhZHZhbmNlbWVudCB3ZQotCSAq IG1lcmdlIGFsbCByZWxldmFudCBhY3Rpdml0eSBpbnRvIHRoZSBtb3N0IHJlY2VudGx5IHJlY29y ZGVkIGVwb2NoLgotCSAqLwotCW5zdGltZV90IGVwb2NoOwotCS8qIERlYWRsaW5lIHJhbmRvbW5l c3MgZ2VuZXJhdG9yLiAqLwotCXVpbnQ2NF90IGppdHRlcl9zdGF0ZTsKLQkvKgotCSAqIERlYWRs aW5lIGZvciBjdXJyZW50IGVwb2NoLiAgVGhpcyBpcyB0aGUgc3VtIG9mIGludGVydmFsIGFuZCBw ZXIKLQkgKiBlcG9jaCBqaXR0ZXIgd2hpY2ggaXMgYSB1bmlmb3JtIHJhbmRvbSB2YXJpYWJsZSBp biBbMC4uaW50ZXJ2YWwpLgotCSAqIEVwb2NocyBhbHdheXMgYWR2YW5jZSBieSBwcmVjaXNlIG11 bHRpcGxlcyBvZiBpbnRlcnZhbCwgYnV0IHdlCi0JICogcmFuZG9taXplIHRoZSBkZWFkbGluZSB0 byByZWR1Y2UgdGhlIGxpa2VsaWhvb2Qgb2YgYXJlbmFzIHB1cmdpbmcgaW4KLQkgKiBsb2Nrc3Rl cC4KLQkgKi8KLQluc3RpbWVfdCBkZWFkbGluZTsKLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgcGFn ZXMgd2UgY2FwIG91cnNlbHZlcyBhdCBpbiB0aGUgY3VycmVudCBlcG9jaCwgcGVyCi0JICogZGVj YXkgcG9saWNpZXMuICBVcGRhdGVkIG9uIGFuIGVwb2NoIGNoYW5nZS4gIEFmdGVyIGFuIGVwb2No IGNoYW5nZSwKLQkgKiB0aGUgY2FsbGVyIHNob3VsZCB0YWtlIHN0ZXBzIHRvIHRyeSB0byBwdXJn ZSBkb3duIHRvIHRoaXMgYW1vdW50LgotCSAqLwotCXNpemVfdCBucGFnZXNfbGltaXQ7Ci0JLyoK LQkgKiBOdW1iZXIgb2YgdW5wdXJnZWQgcGFnZXMgYXQgYmVnaW5uaW5nIG9mIGN1cnJlbnQgZXBv Y2guICBEdXJpbmcgZXBvY2gKLQkgKiBhZHZhbmNlbWVudCB3ZSB1c2UgdGhlIGRlbHRhIGJldHdl ZW4gYXJlbmEtPmRlY2F5XyoubnVucHVyZ2VkIGFuZAotCSAqIGVjYWNoZV9ucGFnZXNfZ2V0KCZh cmVuYS0+ZWNhY2hlXyopIHRvIGRldGVybWluZSBob3cgbWFueSBkaXJ0eSBwYWdlcywKLQkgKiBp ZiBhbnksIHdlcmUgZ2VuZXJhdGVkLgotCSAqLwotCXNpemVfdCBudW5wdXJnZWQ7Ci0JLyoKLQkg KiBUcmFpbGluZyBsb2cgb2YgaG93IG1hbnkgdW51c2VkIGRpcnR5IHBhZ2VzIHdlcmUgZ2VuZXJh dGVkIGR1cmluZwotCSAqIGVhY2ggb2YgdGhlIHBhc3QgU01PT1RIU1RFUF9OU1RFUFMgZGVjYXkg ZXBvY2hzLCB3aGVyZSB0aGUgbGFzdAotCSAqIGVsZW1lbnQgaXMgdGhlIG1vc3QgcmVjZW50IGVw b2NoLiAgQ29ycmVzcG9uZGluZyBlcG9jaCB0aW1lcyBhcmUKLQkgKiByZWxhdGl2ZSB0byBlcG9j aC4KLQkgKgotCSAqIFVwZGF0ZWQgb25seSBvbiBlcG9jaCBhZHZhbmNlLCB0cmlnZ2VyZWQgYnkK LQkgKiBkZWNheV9tYXliZV9hZHZhbmNlX2Vwb2NoLCBiZWxvdy4KLQkgKi8KLQlzaXplX3QgYmFj a2xvZ1tTTU9PVEhTVEVQX05TVEVQU107Ci0KLQkvKiBQZWFrIG51bWJlciBvZiBwYWdlcyBpbiBh c3NvY2lhdGVkIGV4dGVudHMuICBVc2VkIGZvciBkZWJ1ZyBvbmx5LiAqLwotCXVpbnQ2NF90IGNl aWxfbnBhZ2VzOwotfTsKLQotLyoKLSAqIFRoZSBjdXJyZW50IGRlY2F5IHRpbWUgc2V0dGluZy4g IFRoaXMgaXMgdGhlIG9ubHkgcHVibGljIGFjY2VzcyB0byBhIGRlY2F5X3QKLSAqIHRoYXQncyBh bGxvd2VkIHdpdGhvdXQgaG9sZGluZyBtdHguCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3NpemVfdAot ZGVjYXlfbXNfcmVhZChjb25zdCBkZWNheV90ICpkZWNheSkgewotCXJldHVybiBhdG9taWNfbG9h ZF96ZCgmZGVjYXktPnRpbWVfbXMsIEFUT01JQ19SRUxBWEVEKTsKLX0KLQotLyoKLSAqIFNlZSB0 aGUgY29tbWVudCBvbiB0aGUgc3RydWN0IGZpZWxkIC0tIHRoZSBsaW1pdCBvbiBwYWdlcyB3ZSBz aG91bGQgYWxsb3cgaW4KLSAqIHRoaXMgZGVjYXkgc3RhdGUgdGhpcyBlcG9jaC4KLSAqLwotc3Rh dGljIGlubGluZSBzaXplX3QKLWRlY2F5X25wYWdlc19saW1pdF9nZXQoY29uc3QgZGVjYXlfdCAq ZGVjYXkpIHsKLQlyZXR1cm4gZGVjYXktPm5wYWdlc19saW1pdDsKLX0KLQotLyogSG93IG1hbnkg dW51c2VkIGRpcnR5IHBhZ2VzIHdlcmUgZ2VuZXJhdGVkIGR1cmluZyB0aGUgbGFzdCBlcG9jaC4g Ki8KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1kZWNheV9lcG9jaF9ucGFnZXNfZGVsdGEoY29uc3Qg ZGVjYXlfdCAqZGVjYXkpIHsKLQlyZXR1cm4gZGVjYXktPmJhY2tsb2dbU01PT1RIU1RFUF9OU1RF UFMgLSAxXTsKLX0KLQotLyoKLSAqIEN1cnJlbnQgZXBvY2ggZHVyYXRpb24sIGluIG5hbm9zZWNv bmRzLiAgR2l2ZW4gdGhhdCBuZXcgZXBvY2hzIGFyZSBzdGFydGVkCi0gKiBzb21ld2hhdCBoYXBo YXphcmRseSwgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgZXhhY3RseSB0aGUgdGltZSBiZXR3ZWVu IGFueQotICogdHdvIGNhbGxzIHRvIGRlY2F5X21heWJlX2FkdmFuY2VfZXBvY2g7IHNlZSB0aGUg Y29tbWVudHMgb24gZmllbGRzIGluIHRoZQotICogZGVjYXlfdC4KLSAqLwotc3RhdGljIGlubGlu ZSB1aW50NjRfdAotZGVjYXlfZXBvY2hfZHVyYXRpb25fbnMoY29uc3QgZGVjYXlfdCAqZGVjYXkp IHsKLQlyZXR1cm4gbnN0aW1lX25zKCZkZWNheS0+aW50ZXJ2YWwpOwotfQotCi1zdGF0aWMgaW5s aW5lIGJvb2wKLWRlY2F5X2ltbWVkaWF0ZWx5KGNvbnN0IGRlY2F5X3QgKmRlY2F5KSB7Ci0Jc3Np emVfdCBkZWNheV9tcyA9IGRlY2F5X21zX3JlYWQoZGVjYXkpOwotCXJldHVybiBkZWNheV9tcyA9 PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWRlY2F5X2Rpc2FibGVkKGNvbnN0IGRlY2F5 X3QgKmRlY2F5KSB7Ci0Jc3NpemVfdCBkZWNheV9tcyA9IGRlY2F5X21zX3JlYWQoZGVjYXkpOwot CXJldHVybiBkZWNheV9tcyA8IDA7Ci19Ci0KLS8qIFJldHVybnMgdHJ1ZSBpZiBkZWNheSBpcyBl bmFibGVkIGFuZCBkb25lIGdyYWR1YWxseS4gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotZGVjYXlf Z3JhZHVhbGx5KGNvbnN0IGRlY2F5X3QgKmRlY2F5KSB7Ci0Jc3NpemVfdCBkZWNheV9tcyA9IGRl Y2F5X21zX3JlYWQoZGVjYXkpOwotCXJldHVybiBkZWNheV9tcyA+IDA7Ci19Ci0KLS8qCi0gKiBS ZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCBpbiBkZWNheSB0aW1lIHNldHRpbmcgaXMgdmFsaWQu Ci0gKiA8IC0xIDogaW52YWxpZAotICogLTEgICA6IG5ldmVyIGRlY2F5Ci0gKiAgMCAgIDogZGVj YXkgaW1tZWRpYXRlbHkKLSAqICA+IDAgOiBzb21lIHBvc2l0aXZlIGRlY2F5IHRpbWUsIHVwIHRv IGEgbWF4aW11bSBhbGxvd2VkIHZhbHVlIG9mCi0gKiAgTlNUSU1FX1NFQ19NQVggKiAxMDAwLCB3 aGljaCBjb3JyZXNwb25kcyB0byBkZWNheWluZyBzb21ld2hlcmUgaW4gdGhlIGVhcmx5Ci0gKiAg Mjd0aCBjZW50dXJ5LiAgQnkgdGhhdCB0aW1lLCB3ZSBleHBlY3QgdG8gaGF2ZSBpbXBsZW1lbnRl ZCBhbHRlcm5hdGUgcHVyZ2luZwotICogIHN0cmF0ZWdpZXMuCi0gKi8KLWJvb2wgZGVjYXlfbXNf dmFsaWQoc3NpemVfdCBkZWNheV9tcyk7Ci0KLS8qCi0gKiBBcyBhIHByZWNvbmRpdGlvbiwgdGhl IGRlY2F5X3QgbXVzdCBiZSB6ZXJvZWQgb3V0IChhcyBpZiB3aXRoIG1lbXNldCkuCi0gKgotICog UmV0dXJucyB0cnVlIG9uIGVycm9yLgotICovCi1ib29sIGRlY2F5X2luaXQoZGVjYXlfdCAqZGVj YXksIG5zdGltZV90ICpjdXJfdGltZSwgc3NpemVfdCBkZWNheV9tcyk7Ci0KLS8qCi0gKiBHaXZl biBhbiBhbHJlYWR5LWluaXRpYWxpemVkIGRlY2F5X3QsIHJlaW5pdGlhbGl6ZSBpdCB3aXRoIHRo ZSBnaXZlbiBkZWNheQotICogdGltZS4gIFRoZSBkZWNheV90IG11c3QgaGF2ZSBwcmV2aW91c2x5 IGJlZW4gaW5pdGlhbGl6ZWQgKGFuZCBzaG91bGQgbm90IHRoZW4KLSAqIGJlIHplcm9lZCkuCi0g Ki8KLXZvaWQgZGVjYXlfcmVpbml0KGRlY2F5X3QgKmRlY2F5LCBuc3RpbWVfdCAqY3VyX3RpbWUs IHNzaXplX3QgZGVjYXlfbXMpOwotCi0vKgotICogQ29tcHV0ZSBob3cgbWFueSBvZiAnbnBhZ2Vz X25ldycgcGFnZXMgd2Ugd291bGQgbmVlZCB0byBwdXJnZSBpbiAndGltZScuCi0gKi8KLXVpbnQ2 NF90IGRlY2F5X25wYWdlc19wdXJnZV9pbihkZWNheV90ICpkZWNheSwgbnN0aW1lX3QgKnRpbWUs Ci0gICAgc2l6ZV90IG5wYWdlc19uZXcpOwotCi0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVwb2No IGFkdmFuY2VkIGFuZCB0aGVyZSBhcmUgcGFnZXMgdG8gcHVyZ2UuICovCi1ib29sIGRlY2F5X21h eWJlX2FkdmFuY2VfZXBvY2goZGVjYXlfdCAqZGVjYXksIG5zdGltZV90ICpuZXdfdGltZSwKLSAg ICBzaXplX3QgY3VycmVudF9ucGFnZXMpOwotCi0vKgotICogQ2FsY3VsYXRlcyB3YWl0IHRpbWUg dW50aWwgYSBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIGludGVydmFsCi0gKiBbMC41ICogbnBhZ2Vz X3RocmVzaG9sZCAuLiAxLjUgKiBucGFnZXNfdGhyZXNob2xkXSBzaG91bGQgYmUgcHVyZ2VkLgot ICoKLSAqIFJldHVybnMgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIG9yIERFQ0FZX1VOQk9VTkRFRF9U SU1FX1RPX1BVUkdFIGluIGNhc2Ugb2YKLSAqIGluZGVmaW5pdGUgd2FpdC4KLSAqLwotdWludDY0 X3QgZGVjYXlfbnNfdW50aWxfcHVyZ2UoZGVjYXlfdCAqZGVjYXksIHNpemVfdCBucGFnZXNfY3Vy cmVudCwKLSAgICB1aW50NjRfdCBucGFnZXNfdGhyZXNob2xkKTsKLQotI2VuZGlmIC8qIEpFTUFM TE9DX0lOVEVSTkFMX0RFQ0FZX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Rpdi5oIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9kaXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViYWU5My4uMDAwMDAw MAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL2Rpdi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9ESVZfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9E SVZfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0KLS8qCi0gKiBU aGlzIG1vZHVsZSBkb2VzIHRoZSBkaXZpc2lvbiB0aGF0IGNvbXB1dGVzIHRoZSBpbmRleCBvZiBh IHJlZ2lvbiBpbiBhIHNsYWIsCi0gKiBnaXZlbiBpdHMgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBi YXNlLgotICogVGhhdCBpcywgZ2l2ZW4gYSBkaXZpc29yIGQsIGFuIG4gPSBpICogZCAoYWxsIGlu dGVnZXJzKSwgd2UnbGwgcmV0dXJuIGkuCi0gKiBXZSBkbyBzb21lIHByZS1jb21wdXRhdGlvbiB0 byBkbyB0aGlzIG1vcmUgcXVpY2tseSB0aGFuIGEgQ1BVIGRpdmlzaW9uCi0gKiBpbnN0cnVjdGlv bi4KLSAqIFdlIGJvdW5kIG4gPCAyXjMyLCBhbmQgZG9uJ3Qgc3VwcG9ydCBkaXZpZGluZyBieSBv bmUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZGl2X2luZm9fcyBkaXZfaW5mb190Owotc3RydWN0 IGRpdl9pbmZvX3MgewotCXVpbnQzMl90IG1hZ2ljOwotI2lmZGVmIEpFTUFMTE9DX0RFQlVHCi0J c2l6ZV90IGQ7Ci0jZW5kaWYKLX07Ci0KLXZvaWQgZGl2X2luaXQoZGl2X2luZm9fdCAqZGl2X2lu Zm8sIHNpemVfdCBkaXZpc29yKTsKLQotc3RhdGljIGlubGluZSBzaXplX3QKLWRpdl9jb21wdXRl KGRpdl9pbmZvX3QgKmRpdl9pbmZvLCBzaXplX3QgbikgewotCWFzc2VydChuIDw9ICh1aW50MzJf dCktMSk7Ci0JLyoKLQkgKiBUaGlzIGdlbmVyYXRlcywgZS5nLiBtb3Y7IGltdWw7IHNociBvbiB4 ODYtNjQuIE9uIGEgMzItYml0IG1hY2hpbmUsCi0JICogdGhlIGNvbXBpbGVycyBJIHRyaWVkIHdl cmUgYWxsIHNtYXJ0IGVub3VnaCB0byB0dXJuIHRoaXMgaW50byB0aGUKLQkgKiBhcHByb3ByaWF0 ZSAiZ2V0IHRoZSBoaWdoIDMyIGJpdHMgb2YgdGhlIHJlc3VsdCBvZiBhIG11bHRpcGx5IiAoZS5n LgotCSAqIG11bDsgbW92IGVkeCBlYXg7IG9uIHg4NiwgdW11bGwgb24gYXJtLCBldGMuKS4KLQkg Ki8KLQlzaXplX3QgaSA9ICgodWludDY0X3QpbiAqICh1aW50NjRfdClkaXZfaW5mby0+bWFnaWMp ID4+IDMyOwotI2lmZGVmIEpFTUFMTE9DX0RFQlVHCi0JYXNzZXJ0KGkgKiBkaXZfaW5mby0+ZCA9 PSBuKTsKLSNlbmRpZgotCXJldHVybiBpOwotfQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJO QUxfRElWX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VjYWNoZS5oIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9lY2Fj aGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFjYWUzZS4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2VjYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRl ZiBKRU1BTExPQ19JTlRFUk5BTF9FQ0FDSEVfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9F Q0FDSEVfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZXNldC5oIgotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL3Nhbi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211 dGV4LmgiCi0KLXR5cGVkZWYgc3RydWN0IGVjYWNoZV9zIGVjYWNoZV90Owotc3RydWN0IGVjYWNo ZV9zIHsKLQltYWxsb2NfbXV0ZXhfdCBtdHg7Ci0JZXNldF90IGVzZXQ7Ci0JZXNldF90IGd1YXJk ZWRfZXNldDsKLQkvKiBBbGwgc3RvcmVkIGV4dGVudHMgbXVzdCBiZSBpbiB0aGUgc2FtZSBzdGF0 ZS4gKi8KLQlleHRlbnRfc3RhdGVfdCBzdGF0ZTsKLQkvKiBUaGUgaW5kZXggb2YgdGhlIGVob29r cyB0aGUgZWNhY2hlIGlzIGFzc29jaWF0ZWQgd2l0aC4gKi8KLQl1bnNpZ25lZCBpbmQ7Ci0JLyoK LQkgKiBJZiB0cnVlLCBkZWxheSBjb2FsZXNjaW5nIHVudGlsIGV2aWN0aW9uOyBvdGhlcndpc2Ug Y29hbGVzY2UgZHVyaW5nCi0JICogZGVhbGxvY2F0aW9uLgotCSAqLwotCWJvb2wgZGVsYXlfY29h bGVzY2U7Ci19OwotCi1zdGF0aWMgaW5saW5lIHNpemVfdAotZWNhY2hlX25wYWdlc19nZXQoZWNh Y2hlX3QgKmVjYWNoZSkgewotCXJldHVybiBlc2V0X25wYWdlc19nZXQoJmVjYWNoZS0+ZXNldCkg KwotCSAgICBlc2V0X25wYWdlc19nZXQoJmVjYWNoZS0+Z3VhcmRlZF9lc2V0KTsKLX0KLQotLyog R2V0IHRoZSBudW1iZXIgb2YgZXh0ZW50cyBpbiB0aGUgZ2l2ZW4gcGFnZSBzaXplIGluZGV4LiAq Lwotc3RhdGljIGlubGluZSBzaXplX3QKLWVjYWNoZV9uZXh0ZW50c19nZXQoZWNhY2hlX3QgKmVj YWNoZSwgcHN6aW5kX3QgaW5kKSB7Ci0JcmV0dXJuIGVzZXRfbmV4dGVudHNfZ2V0KCZlY2FjaGUt PmVzZXQsIGluZCkgKwotCSAgICBlc2V0X25leHRlbnRzX2dldCgmZWNhY2hlLT5ndWFyZGVkX2Vz ZXQsIGluZCk7Ci19Ci0KLS8qIEdldCB0aGUgc3VtIHRvdGFsIGJ5dGVzIG9mIHRoZSBleHRlbnRz IGluIHRoZSBnaXZlbiBwYWdlIHNpemUgaW5kZXguICovCi1zdGF0aWMgaW5saW5lIHNpemVfdAot ZWNhY2hlX25ieXRlc19nZXQoZWNhY2hlX3QgKmVjYWNoZSwgcHN6aW5kX3QgaW5kKSB7Ci0JcmV0 dXJuIGVzZXRfbmJ5dGVzX2dldCgmZWNhY2hlLT5lc2V0LCBpbmQpICsKLQkgICAgZXNldF9uYnl0 ZXNfZ2V0KCZlY2FjaGUtPmd1YXJkZWRfZXNldCwgaW5kKTsKLX0KLQotc3RhdGljIGlubGluZSB1 bnNpZ25lZAotZWNhY2hlX2luZF9nZXQoZWNhY2hlX3QgKmVjYWNoZSkgewotCXJldHVybiBlY2Fj aGUtPmluZDsKLX0KLQotYm9vbCBlY2FjaGVfaW5pdCh0c2RuX3QgKnRzZG4sIGVjYWNoZV90ICpl Y2FjaGUsIGV4dGVudF9zdGF0ZV90IHN0YXRlLAotICAgIHVuc2lnbmVkIGluZCwgYm9vbCBkZWxh eV9jb2FsZXNjZSk7Ci12b2lkIGVjYWNoZV9wcmVmb3JrKHRzZG5fdCAqdHNkbiwgZWNhY2hlX3Qg KmVjYWNoZSk7Ci12b2lkIGVjYWNoZV9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuLCBlY2Fj aGVfdCAqZWNhY2hlKTsKLXZvaWQgZWNhY2hlX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbiwg ZWNhY2hlX3QgKmVjYWNoZSk7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9FQ0FDSEVf SCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZWRhdGEuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZWRhdGEuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwMzllYS4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2VkYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OTggKzAsMCBAQAotI2lmbmRlZiBKRU1BTExP Q19JTlRFUk5BTF9FREFUQV9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0VEQVRBX0gKLQot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2Jpbl9pbmZvLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0X3V0 aWwuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ocGRhdGEuaCIKLSNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9uc3RpbWUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9w aC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3FsLmgiCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvc2MuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zbGFiX2RhdGEu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3R5cGVkX2xpc3QuaCIKLQotLyoKLSAqIHNpemVvZihlZGF0YV90KSBpcyAxMjgg Ynl0ZXMgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMuICBFbnN1cmUgdGhlIGFsaWdubWVudAotICog dG8gZnJlZSB1cCB0aGUgbG93IGJpdHMgaW4gdGhlIHJ0cmVlIGxlYWYuCi0gKi8KLSNkZWZpbmUg RURBVEFfQUxJR05NRU5UIDEyOAotCi1lbnVtIGV4dGVudF9zdGF0ZV9lIHsKLQlleHRlbnRfc3Rh dGVfYWN0aXZlICAgPSAwLAotCWV4dGVudF9zdGF0ZV9kaXJ0eSAgICA9IDEsCi0JZXh0ZW50X3N0 YXRlX211enp5ICAgID0gMiwKLQlleHRlbnRfc3RhdGVfcmV0YWluZWQgPSAzLAotCWV4dGVudF9z dGF0ZV90cmFuc2l0aW9uID0gNCwgLyogU3RhdGVzIGJlbG93IGFyZSBpbnRlcm1lZGlhdGUuICov Ci0JZXh0ZW50X3N0YXRlX21lcmdpbmcgPSA1LAotCWV4dGVudF9zdGF0ZV9tYXggPSA1IC8qIFNh bml0eSBjaGVja2luZyBvbmx5LiAqLwotfTsKLXR5cGVkZWYgZW51bSBleHRlbnRfc3RhdGVfZSBl eHRlbnRfc3RhdGVfdDsKLQotZW51bSBleHRlbnRfaGVhZF9zdGF0ZV9lIHsKLQlFWFRFTlRfTk9U X0hFQUQsCi0JRVhURU5UX0lTX0hFQUQgICAvKiBTZWUgY29tbWVudHMgaW4gZWhvb2tzX2RlZmF1 bHRfbWVyZ2VfaW1wbCgpLiAqLwotfTsKLXR5cGVkZWYgZW51bSBleHRlbnRfaGVhZF9zdGF0ZV9l IGV4dGVudF9oZWFkX3N0YXRlX3Q7Ci0KLS8qCi0gKiBXaGljaCBpbXBsZW1lbnRhdGlvbiBvZiB0 aGUgcGFnZSBhbGxvY2F0b3IgaW50ZXJmYWNlLCAoUEFJLCBkZWZpbmVkIGluCi0gKiBwYWkuaCkg b3ducyB0aGUgZ2l2ZW4gZXh0ZW50PwotICovCi1lbnVtIGV4dGVudF9wYWlfZSB7Ci0JRVhURU5U X1BBSV9QQUMgPSAwLAotCUVYVEVOVF9QQUlfSFBBID0gMQotfTsKLXR5cGVkZWYgZW51bSBleHRl bnRfcGFpX2UgZXh0ZW50X3BhaV90OwotCi1zdHJ1Y3QgZV9wcm9mX2luZm9fcyB7Ci0JLyogVGlt ZSB3aGVuIHRoaXMgd2FzIGFsbG9jYXRlZC4gKi8KLQluc3RpbWVfdAllX3Byb2ZfYWxsb2NfdGlt ZTsKLQkvKiBBbGxvY2F0aW9uIHJlcXVlc3Qgc2l6ZS4gKi8KLQlzaXplX3QJCWVfcHJvZl9hbGxv Y19zaXplOwotCS8qIFBvaW50cyB0byBhIHByb2ZfdGN0eF90LiAqLwotCWF0b21pY19wX3QJZV9w cm9mX3RjdHg7Ci0JLyoKLQkgKiBQb2ludHMgdG8gYSBwcm9mX3JlY2VudF90IGZvciB0aGUgYWxs b2NhdGlvbjsgTlVMTAotCSAqIG1lYW5zIHRoZSByZWNlbnQgYWxsb2NhdGlvbiByZWNvcmQgbm8g bG9uZ2VyIGV4aXN0cy4KLQkgKiBQcm90ZWN0ZWQgYnkgcHJvZl9yZWNlbnRfYWxsb2NfbXR4Lgot CSAqLwotCWF0b21pY19wX3QJZV9wcm9mX3JlY2VudF9hbGxvYzsKLX07Ci10eXBlZGVmIHN0cnVj dCBlX3Byb2ZfaW5mb19zIGVfcHJvZl9pbmZvX3Q7Ci0KLS8qCi0gKiBUaGUgaW5mb3JtYXRpb24g YWJvdXQgYSBwYXJ0aWN1bGFyIGVkYXRhIHRoYXQgbGl2ZXMgaW4gYW4gZW1hcC4gIFNwYWNlIGlz Ci0gKiBtb3JlIHByZWNpb3VzIHRoZXJlICh0aGUgaW5mb3JtYXRpb24sIHBsdXMgdGhlIGVkYXRh IHBvaW50ZXIsIGhhcyB0byBsaXZlIGluCi0gKiBhIDY0LWJpdCB3b3JkIGlmIHdlIHdhbnQgdG8g ZW5hYmxlIGEgcGFja2VkIHJlcHJlc2VudGF0aW9uLgotICoKLSAqIFRoZXJlIGFyZSB0d28gdGhp bmdzIHRoYXQgYXJlIHNwZWNpYWwgYWJvdXQgdGhlIGluZm9ybWF0aW9uIGhlcmU6Ci0gKiAtIEl0 J3MgcXVpY2tlciB0byBhY2Nlc3MuICBZb3UgaGF2ZSBvbmUgZmV3ZXIgcG9pbnRlciBob3AsIHNp bmNlIGZpbmRpbmcgdGhlCi0gKiAgIGVkYXRhX3QgYXNzb2NpYXRlZCB3aXRoIGFuIGl0ZW0gYWx3 YXlzIHJlcXVpcmVzIGFjY2Vzc2luZyB0aGUgcnRyZWUgbGVhZiBpbgotICogICB3aGljaCB0aGlz IGRhdGEgaXMgc3RvcmVkLgotICogLSBJdCBjYW4gYmUgcmVhZCB1bnN5bmNocm9uaXplZCwgYW5k IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgbGlmZXRpbWUgaXNzdWVzLgotICovCi10eXBlZGVmIHN0 cnVjdCBlZGF0YV9tYXBfaW5mb19zIGVkYXRhX21hcF9pbmZvX3Q7Ci1zdHJ1Y3QgZWRhdGFfbWFw X2luZm9fcyB7Ci0JYm9vbCBzbGFiOwotCXN6aW5kX3Qgc3ppbmQ7Ci19OwotCi10eXBlZGVmIHN0 cnVjdCBlZGF0YV9jbXBfc3VtbWFyeV9zIGVkYXRhX2NtcF9zdW1tYXJ5X3Q7Ci1zdHJ1Y3QgZWRh dGFfY21wX3N1bW1hcnlfcyB7Ci0JdWludDY0X3Qgc247Ci0JdWludHB0cl90IGFkZHI7Ci19Owot Ci0vKiBFeHRlbnQgKHNwYW4gb2YgcGFnZXMpLiAgVXNlIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3Ig ZV8qIGZpZWxkcy4gKi8KLXR5cGVkZWYgc3RydWN0IGVkYXRhX3MgZWRhdGFfdDsKLXBoX3N0cnVj dHMoZWRhdGFfYXZhaWwsIGVkYXRhX3QpOwotcGhfc3RydWN0cyhlZGF0YV9oZWFwLCBlZGF0YV90 KTsKLXN0cnVjdCBlZGF0YV9zIHsKLQkvKgotCSAqIEJpdGZpZWxkIGNvbnRhaW5pbmcgc2V2ZXJh bCBmaWVsZHM6Ci0JICoKLQkgKiBhOiBhcmVuYV9pbmQKLQkgKiBiOiBzbGFiCi0JICogYzogY29t bWl0dGVkCi0JICogcDogcGFpCi0JICogejogemVyb2VkCi0JICogZzogZ3VhcmRlZAotCSAqIHQ6 IHN0YXRlCi0JICogaTogc3ppbmQKLQkgKiBmOiBuZnJlZQotCSAqIHM6IGJpbl9zaGFyZAotCSAq Ci0JICogMDAwMDAwMDAgLi4uIDAwMDBzc3NzIHNzZmZmZmZmIGZmZmZpaWlpIGlpaWl0dHRnIHpw Y2JhYWFhIGFhYWFhYWFhCi0JICoKLQkgKiBhcmVuYV9pbmQ6IEFyZW5hIGZyb20gd2hpY2ggdGhp cyBleHRlbnQgY2FtZSwgb3IgYWxsIDEgYml0cyBpZgotCSAqICAgICAgICAgICAgdW5hc3NvY2lh dGVkLgotCSAqCi0JICogc2xhYjogVGhlIHNsYWIgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGUg ZXh0ZW50IGlzIHVzZWQgZm9yIGEgc2xhYgotCSAqICAgICAgIG9mIHNtYWxsIHJlZ2lvbnMuICBU aGlzIGhlbHBzIGRpZmZlcmVudGlhdGUgc21hbGwgc2l6ZSBjbGFzc2VzLAotCSAqICAgICAgIGFu ZCBpdCBpbmRpY2F0ZXMgd2hldGhlciBpbnRlcmlvciBwb2ludGVycyBjYW4gYmUgbG9va2VkIHVw IHZpYQotCSAqICAgICAgIGllYWxsb2MoKS4KLQkgKgotCSAqIGNvbW1pdHRlZDogVGhlIGNvbW1p dHRlZCBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHBoeXNpY2FsIG1lbW9yeSBpcwotCSAqICAgICAg ICAgICAgY29tbWl0dGVkIHRvIHRoZSBleHRlbnQsIHdoZXRoZXIgZXhwbGljaXRseSBvciBpbXBs aWNpdGx5Ci0JICogICAgICAgICAgICBhcyBvbiBhIHN5c3RlbSB0aGF0IG92ZXJjb21taXRzIGFu ZCBzYXRpc2ZpZXMgcGh5c2ljYWwKLQkgKiAgICAgICAgICAgIG1lbW9yeSBuZWVkcyBvbiBkZW1h bmQgdmlhIHNvZnQgcGFnZSBmYXVsdHMuCi0JICoKLQkgKiBwYWk6IFRoZSBwYWkgZmxhZyBpcyBh biBleHRlbnRfcGFpX3QuCi0JICoKLQkgKiB6ZXJvZWQ6IFRoZSB6ZXJvZWQgZmxhZyBpcyB1c2Vk IGJ5IGV4dGVudCByZWN5Y2xpbmcgY29kZSB0byB0cmFjawotCSAqICAgICAgICAgd2hldGhlciBt ZW1vcnkgaXMgemVyby1maWxsZWQuCi0JICoKLQkgKiBndWFyZGVkOiBUaGUgZ3VhcmRlZCBmbGFn IGlzIHVzZSBieSB0aGUgc2FuaXRpemVyIHRvIHRyYWNrIHdoZXRoZXIKLQkgKiAgICAgICAgICB0 aGUgZXh0ZW50IGhhcyBwYWdlIGd1YXJkcyBhcm91bmQgaXQuCi0JICoKLQkgKiBzdGF0ZTogVGhl IHN0YXRlIGZsYWcgaXMgYW4gZXh0ZW50X3N0YXRlX3QuCi0JICoKLQkgKiBzemluZDogVGhlIHN6 aW5kIGZsYWcgaW5kaWNhdGVzIHVzYWJsZSBzaXplIGNsYXNzIGluZGV4IGZvcgotCSAqICAgICAg ICBhbGxvY2F0aW9ucyByZXNpZGluZyBpbiB0aGlzIGV4dGVudCwgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZQotCSAqICAgICAgICBleHRlbnQgaXMgYSBzbGFiLiAgRXh0ZW50IHNpemUgYW5kIHVz YWJsZSBzaXplIG9mdGVuIGRpZmZlcgotCSAqICAgICAgICBldmVuIGZvciBub24tc2xhYnMsIGVp dGhlciBkdWUgdG8gc3pfbGFyZ2VfcGFkIG9yIHByb21vdGlvbiBvZgotCSAqICAgICAgICBzYW1w bGVkIHNtYWxsIHJlZ2lvbnMuCi0JICoKLQkgKiBuZnJlZTogTnVtYmVyIG9mIGZyZWUgcmVnaW9u cyBpbiBzbGFiLgotCSAqCi0JICogYmluX3NoYXJkOiB0aGUgc2hhcmQgb2YgdGhlIGJpbiBmcm9t IHdoaWNoIHRoaXMgZXh0ZW50IGNhbWUuCi0JICovCi0JdWludDY0X3QJCWVfYml0czsKLSNkZWZp bmUgTUFTSyhDVVJSRU5UX0ZJRUxEX1dJRFRILCBDVVJSRU5UX0ZJRUxEX1NISUZUKSAoKCgoKCh1 aW50NjRfdCkweDFVKSA8PCAoQ1VSUkVOVF9GSUVMRF9XSURUSCkpIC0gMSkpIDw8IChDVVJSRU5U X0ZJRUxEX1NISUZUKSkKLQotI2RlZmluZSBFREFUQV9CSVRTX0FSRU5BX1dJRFRIICBNQUxMT0NY X0FSRU5BX0JJVFMKLSNkZWZpbmUgRURBVEFfQklUU19BUkVOQV9TSElGVCAgMAotI2RlZmluZSBF REFUQV9CSVRTX0FSRU5BX01BU0sgIE1BU0soRURBVEFfQklUU19BUkVOQV9XSURUSCwgRURBVEFf QklUU19BUkVOQV9TSElGVCkKLQotI2RlZmluZSBFREFUQV9CSVRTX1NMQUJfV0lEVEggIDEKLSNk ZWZpbmUgRURBVEFfQklUU19TTEFCX1NISUZUICAoRURBVEFfQklUU19BUkVOQV9XSURUSCArIEVE QVRBX0JJVFNfQVJFTkFfU0hJRlQpCi0jZGVmaW5lIEVEQVRBX0JJVFNfU0xBQl9NQVNLICBNQVNL KEVEQVRBX0JJVFNfU0xBQl9XSURUSCwgRURBVEFfQklUU19TTEFCX1NISUZUKQotCi0jZGVmaW5l IEVEQVRBX0JJVFNfQ09NTUlUVEVEX1dJRFRIICAxCi0jZGVmaW5lIEVEQVRBX0JJVFNfQ09NTUlU VEVEX1NISUZUICAoRURBVEFfQklUU19TTEFCX1dJRFRIICsgRURBVEFfQklUU19TTEFCX1NISUZU KQotI2RlZmluZSBFREFUQV9CSVRTX0NPTU1JVFRFRF9NQVNLICBNQVNLKEVEQVRBX0JJVFNfQ09N TUlUVEVEX1dJRFRILCBFREFUQV9CSVRTX0NPTU1JVFRFRF9TSElGVCkKLQotI2RlZmluZSBFREFU QV9CSVRTX1BBSV9XSURUSCAgMQotI2RlZmluZSBFREFUQV9CSVRTX1BBSV9TSElGVCAgKEVEQVRB X0JJVFNfQ09NTUlUVEVEX1dJRFRIICsgRURBVEFfQklUU19DT01NSVRURURfU0hJRlQpCi0jZGVm aW5lIEVEQVRBX0JJVFNfUEFJX01BU0sgIE1BU0soRURBVEFfQklUU19QQUlfV0lEVEgsIEVEQVRB X0JJVFNfUEFJX1NISUZUKQotCi0jZGVmaW5lIEVEQVRBX0JJVFNfWkVST0VEX1dJRFRIICAxCi0j ZGVmaW5lIEVEQVRBX0JJVFNfWkVST0VEX1NISUZUICAoRURBVEFfQklUU19QQUlfV0lEVEggKyBF REFUQV9CSVRTX1BBSV9TSElGVCkKLSNkZWZpbmUgRURBVEFfQklUU19aRVJPRURfTUFTSyAgTUFT SyhFREFUQV9CSVRTX1pFUk9FRF9XSURUSCwgRURBVEFfQklUU19aRVJPRURfU0hJRlQpCi0KLSNk ZWZpbmUgRURBVEFfQklUU19HVUFSREVEX1dJRFRIICAxCi0jZGVmaW5lIEVEQVRBX0JJVFNfR1VB UkRFRF9TSElGVCAgKEVEQVRBX0JJVFNfWkVST0VEX1dJRFRIICsgRURBVEFfQklUU19aRVJPRURf U0hJRlQpCi0jZGVmaW5lIEVEQVRBX0JJVFNfR1VBUkRFRF9NQVNLICBNQVNLKEVEQVRBX0JJVFNf R1VBUkRFRF9XSURUSCwgRURBVEFfQklUU19HVUFSREVEX1NISUZUKQotCi0jZGVmaW5lIEVEQVRB X0JJVFNfU1RBVEVfV0lEVEggIDMKLSNkZWZpbmUgRURBVEFfQklUU19TVEFURV9TSElGVCAgKEVE QVRBX0JJVFNfR1VBUkRFRF9XSURUSCArIEVEQVRBX0JJVFNfR1VBUkRFRF9TSElGVCkKLSNkZWZp bmUgRURBVEFfQklUU19TVEFURV9NQVNLICBNQVNLKEVEQVRBX0JJVFNfU1RBVEVfV0lEVEgsIEVE QVRBX0JJVFNfU1RBVEVfU0hJRlQpCi0KLSNkZWZpbmUgRURBVEFfQklUU19TWklORF9XSURUSCAg TEdfQ0VJTChTQ19OU0laRVMpCi0jZGVmaW5lIEVEQVRBX0JJVFNfU1pJTkRfU0hJRlQgIChFREFU QV9CSVRTX1NUQVRFX1dJRFRIICsgRURBVEFfQklUU19TVEFURV9TSElGVCkKLSNkZWZpbmUgRURB VEFfQklUU19TWklORF9NQVNLICBNQVNLKEVEQVRBX0JJVFNfU1pJTkRfV0lEVEgsIEVEQVRBX0JJ VFNfU1pJTkRfU0hJRlQpCi0KLSNkZWZpbmUgRURBVEFfQklUU19ORlJFRV9XSURUSCAgKFNDX0xH X1NMQUJfTUFYUkVHUyArIDEpCi0jZGVmaW5lIEVEQVRBX0JJVFNfTkZSRUVfU0hJRlQgIChFREFU QV9CSVRTX1NaSU5EX1dJRFRIICsgRURBVEFfQklUU19TWklORF9TSElGVCkKLSNkZWZpbmUgRURB VEFfQklUU19ORlJFRV9NQVNLICBNQVNLKEVEQVRBX0JJVFNfTkZSRUVfV0lEVEgsIEVEQVRBX0JJ VFNfTkZSRUVfU0hJRlQpCi0KLSNkZWZpbmUgRURBVEFfQklUU19CSU5TSEFSRF9XSURUSCAgNgot I2RlZmluZSBFREFUQV9CSVRTX0JJTlNIQVJEX1NISUZUICAoRURBVEFfQklUU19ORlJFRV9XSURU SCArIEVEQVRBX0JJVFNfTkZSRUVfU0hJRlQpCi0jZGVmaW5lIEVEQVRBX0JJVFNfQklOU0hBUkRf TUFTSyAgTUFTSyhFREFUQV9CSVRTX0JJTlNIQVJEX1dJRFRILCBFREFUQV9CSVRTX0JJTlNIQVJE X1NISUZUKQotCi0jZGVmaW5lIEVEQVRBX0JJVFNfSVNfSEVBRF9XSURUSCAxCi0jZGVmaW5lIEVE QVRBX0JJVFNfSVNfSEVBRF9TSElGVCAgKEVEQVRBX0JJVFNfQklOU0hBUkRfV0lEVEggKyBFREFU QV9CSVRTX0JJTlNIQVJEX1NISUZUKQotI2RlZmluZSBFREFUQV9CSVRTX0lTX0hFQURfTUFTSyAg TUFTSyhFREFUQV9CSVRTX0lTX0hFQURfV0lEVEgsIEVEQVRBX0JJVFNfSVNfSEVBRF9TSElGVCkK LQotCS8qIFBvaW50ZXIgdG8gdGhlIGV4dGVudCB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIHJlc3Bv bnNpYmxlIGZvci4gKi8KLQl2b2lkCQkJKmVfYWRkcjsKLQotCXVuaW9uIHsKLQkJLyoKLQkJICog RXh0ZW50IHNpemUgYW5kIHNlcmlhbCBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBleHRlbnQK LQkJICogc3RydWN0dXJlIChkaWZmZXJlbnQgdGhhbiB0aGUgc2VyaWFsIG51bWJlciBmb3IgdGhl IGV4dGVudCBhdAotCQkgKiBlX2FkZHIpLgotCQkgKgotCQkgKiBzc3Nzc3NzcyBbLi4uXSBzc3Nz c3NzcyBzc3Nzbm5ubiBubm5ubm5ubgotCQkgKi8KLQkJc2l6ZV90CQkJZV9zaXplX2VzbjsKLQkj ZGVmaW5lIEVEQVRBX1NJWkVfTUFTSwkoKHNpemVfdCl+KFBBR0UtMSkpCi0JI2RlZmluZSBFREFU QV9FU05fTUFTSwkJKChzaXplX3QpUEFHRS0xKQotCQkvKiBCYXNlIGV4dGVudCBzaXplLCB3aGlj aCBtYXkgbm90IGJlIGEgbXVsdGlwbGUgb2YgUEFHRS4gKi8KLQkJc2l6ZV90CQkJZV9ic2l6ZTsK LQl9OwotCi0JLyoKLQkgKiBJZiB0aGlzIGVkYXRhIGlzIGEgdXNlciBhbGxvY2F0aW9uIGZyb20g YW4gSFBBLCBpdCBjb21lcyBvdXQgb2Ygc29tZQotCSAqIHBhZ2VzbGFiICh3ZSBkb24ndCB5ZXQg c3VwcG9ydCBodWVncGFnZSBhbGxvY2F0aW9ucyB0aGF0IGRvbid0IGZpdAotCSAqIGludG8gcGFn ZXNsYWJzKS4gIFRoaXMgdHJhY2tzIGl0LgotCSAqLwotCWhwZGF0YV90ICplX3BzOwotCi0JLyoK LQkgKiBTZXJpYWwgbnVtYmVyLiAgVGhlc2UgYXJlIG5vdCBuZWNlc3NhcmlseSB1bmlxdWU7IHNw bGl0dGluZyBhbiBleHRlbnQKLQkgKiByZXN1bHRzIGluIHR3byBleHRlbnRzIHdpdGggdGhlIHNh bWUgc2VyaWFsIG51bWJlci4KLQkgKi8KLQl1aW50NjRfdCBlX3NuOwotCi0JdW5pb24gewotCQkv KgotCQkgKiBMaXN0IGxpbmthZ2UgdXNlZCB3aGVuIHRoZSBlZGF0YV90IGlzIGFjdGl2ZTsgZWl0 aGVyIGluCi0JCSAqIGFyZW5hJ3MgbGFyZ2UgYWxsb2NhdGlvbnMgb3IgYmluX3QncyBzbGFic19m dWxsLgotCQkgKi8KLQkJcWxfZWxtKGVkYXRhX3QpCXFsX2xpbmtfYWN0aXZlOwotCQkvKgotCQkg KiBQYWlyaW5nIGhlYXAgbGlua2FnZS4gIFVzZWQgd2hlbmV2ZXIgdGhlIGV4dGVudCBpcyBpbmFj dGl2ZQotCQkgKiAoaW4gdGhlIHBhZ2UgYWxsb2NhdG9ycyksIG9yIHdoZW4gaXQgaXMgYWN0aXZl IGFuZCBpbgotCQkgKiBzbGFic19ub25mdWxsLCBvciB3aGVuIHRoZSBlZGF0YV90IGlzIHVuYXNz b2NpYXRlZCB3aXRoIGFuCi0JCSAqIGV4dGVudCBhbmQgc2l0dGluZyBpbiBhbiBlZGF0YV9jYWNo ZS4KLQkJICovCi0JCXVuaW9uIHsKLQkJCWVkYXRhX2hlYXBfbGlua190IGhlYXBfbGluazsKLQkJ CWVkYXRhX2F2YWlsX2xpbmtfdCBhdmFpbF9saW5rOwotCQl9OwotCX07Ci0KLQl1bmlvbiB7Ci0J CS8qCi0JCSAqIExpc3QgbGlua2FnZSB1c2VkIHdoZW4gdGhlIGV4dGVudCBpcyBpbmFjdGl2ZToK LQkJICogLSBTdGFzaGVkIGRpcnR5IGV4dGVudHMKLQkJICogLSBFY2FjaGUgTFJVIGZ1bmN0aW9u YWxpdHkuCi0JCSAqLwotCQlxbF9lbG0oZWRhdGFfdCkgcWxfbGlua19pbmFjdGl2ZTsKLQkJLyog U21hbGwgcmVnaW9uIHNsYWIgbWV0YWRhdGEuICovCi0JCXNsYWJfZGF0YV90CWVfc2xhYl9kYXRh OwotCi0JCS8qIFByb2ZpbGluZyBkYXRhLCB1c2VkIGZvciBsYXJnZSBvYmplY3RzLiAqLwotCQll X3Byb2ZfaW5mb190CWVfcHJvZl9pbmZvOwotCX07Ci19OwotCi1UWVBFRF9MSVNUKGVkYXRhX2xp c3RfYWN0aXZlLCBlZGF0YV90LCBxbF9saW5rX2FjdGl2ZSkKLVRZUEVEX0xJU1QoZWRhdGFfbGlz dF9pbmFjdGl2ZSwgZWRhdGFfdCwgcWxfbGlua19pbmFjdGl2ZSkKLQotc3RhdGljIGlubGluZSB1 bnNpZ25lZAotZWRhdGFfYXJlbmFfaW5kX2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgewotCXVu c2lnbmVkIGFyZW5hX2luZCA9ICh1bnNpZ25lZCkoKGVkYXRhLT5lX2JpdHMgJgotCSAgICBFREFU QV9CSVRTX0FSRU5BX01BU0spID4+IEVEQVRBX0JJVFNfQVJFTkFfU0hJRlQpOwotCWFzc2VydChh cmVuYV9pbmQgPCBNQUxMT0NYX0FSRU5BX0xJTUlUKTsKLQotCXJldHVybiBhcmVuYV9pbmQ7Ci19 Ci0KLXN0YXRpYyBpbmxpbmUgc3ppbmRfdAotZWRhdGFfc3ppbmRfZ2V0X21heWJlX2ludmFsaWQo Y29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlzemluZF90IHN6aW5kID0gKHN6aW5kX3QpKChlZGF0 YS0+ZV9iaXRzICYgRURBVEFfQklUU19TWklORF9NQVNLKSA+PgotCSAgICBFREFUQV9CSVRTX1Na SU5EX1NISUZUKTsKLQlhc3NlcnQoc3ppbmQgPD0gU0NfTlNJWkVTKTsKLQlyZXR1cm4gc3ppbmQ7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3ppbmRfdAotZWRhdGFfc3ppbmRfZ2V0KGNvbnN0IGVkYXRh X3QgKmVkYXRhKSB7Ci0Jc3ppbmRfdCBzemluZCA9IGVkYXRhX3N6aW5kX2dldF9tYXliZV9pbnZh bGlkKGVkYXRhKTsKLQlhc3NlcnQoc3ppbmQgPCBTQ19OU0laRVMpOyAvKiBOZXZlciBjYWxsIHdo ZW4gImludmFsaWQiLiAqLwotCXJldHVybiBzemluZDsKLX0KLQotc3RhdGljIGlubGluZSBzaXpl X3QKLWVkYXRhX3VzaXplX2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgewotCXJldHVybiBzel9p bmRleDJzaXplKGVkYXRhX3N6aW5kX2dldChlZGF0YSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVu c2lnbmVkCi1lZGF0YV9iaW5zaGFyZF9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQl1bnNp Z25lZCBiaW5zaGFyZCA9ICh1bnNpZ25lZCkoKGVkYXRhLT5lX2JpdHMgJgotCSAgICBFREFUQV9C SVRTX0JJTlNIQVJEX01BU0spID4+IEVEQVRBX0JJVFNfQklOU0hBUkRfU0hJRlQpOwotCWFzc2Vy dChiaW5zaGFyZCA8IGJpbl9pbmZvc1tlZGF0YV9zemluZF9nZXQoZWRhdGEpXS5uX3NoYXJkcyk7 Ci0JcmV0dXJuIGJpbnNoYXJkOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1lZGF0YV9z bl9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlyZXR1cm4gZWRhdGEtPmVfc247Ci19Ci0K LXN0YXRpYyBpbmxpbmUgZXh0ZW50X3N0YXRlX3QKLWVkYXRhX3N0YXRlX2dldChjb25zdCBlZGF0 YV90ICplZGF0YSkgewotCXJldHVybiAoZXh0ZW50X3N0YXRlX3QpKChlZGF0YS0+ZV9iaXRzICYg RURBVEFfQklUU19TVEFURV9NQVNLKSA+PgotCSAgICBFREFUQV9CSVRTX1NUQVRFX1NISUZUKTsK LX0KLQotc3RhdGljIGlubGluZSBib29sCi1lZGF0YV9ndWFyZGVkX2dldChjb25zdCBlZGF0YV90 ICplZGF0YSkgewotCXJldHVybiAoYm9vbCkoKGVkYXRhLT5lX2JpdHMgJiBFREFUQV9CSVRTX0dV QVJERURfTUFTSykgPj4KLQkgICAgRURBVEFfQklUU19HVUFSREVEX1NISUZUKTsKLX0KLQotc3Rh dGljIGlubGluZSBib29sCi1lZGF0YV96ZXJvZWRfZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7 Ci0JcmV0dXJuIChib29sKSgoZWRhdGEtPmVfYml0cyAmIEVEQVRBX0JJVFNfWkVST0VEX01BU0sp ID4+Ci0JICAgIEVEQVRBX0JJVFNfWkVST0VEX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSBi b29sCi1lZGF0YV9jb21taXR0ZWRfZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7Ci0JcmV0dXJu IChib29sKSgoZWRhdGEtPmVfYml0cyAmIEVEQVRBX0JJVFNfQ09NTUlUVEVEX01BU0spID4+Ci0J ICAgIEVEQVRBX0JJVFNfQ09NTUlUVEVEX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSBleHRl bnRfcGFpX3QKLWVkYXRhX3BhaV9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlyZXR1cm4g KGV4dGVudF9wYWlfdCkoKGVkYXRhLT5lX2JpdHMgJiBFREFUQV9CSVRTX1BBSV9NQVNLKSA+Pgot CSAgICBFREFUQV9CSVRTX1BBSV9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotZWRh dGFfc2xhYl9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlyZXR1cm4gKGJvb2wpKChlZGF0 YS0+ZV9iaXRzICYgRURBVEFfQklUU19TTEFCX01BU0spID4+Ci0JICAgIEVEQVRBX0JJVFNfU0xB Ql9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLWVkYXRhX25mcmVlX2dldChj b25zdCBlZGF0YV90ICplZGF0YSkgewotCWFzc2VydChlZGF0YV9zbGFiX2dldChlZGF0YSkpOwot CXJldHVybiAodW5zaWduZWQpKChlZGF0YS0+ZV9iaXRzICYgRURBVEFfQklUU19ORlJFRV9NQVNL KSA+PgotCSAgICBFREFUQV9CSVRTX05GUkVFX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSB2 b2lkICoKLWVkYXRhX2Jhc2VfZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7Ci0JYXNzZXJ0KGVk YXRhLT5lX2FkZHIgPT0gUEFHRV9BRERSMkJBU0UoZWRhdGEtPmVfYWRkcikgfHwKLQkgICAgIWVk YXRhX3NsYWJfZ2V0KGVkYXRhKSk7Ci0JcmV0dXJuIFBBR0VfQUREUjJCQVNFKGVkYXRhLT5lX2Fk ZHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotZWRhdGFfYWRkcl9nZXQoY29uc3QgZWRh dGFfdCAqZWRhdGEpIHsKLQlhc3NlcnQoZWRhdGEtPmVfYWRkciA9PSBQQUdFX0FERFIyQkFTRShl ZGF0YS0+ZV9hZGRyKSB8fAotCSAgICAhZWRhdGFfc2xhYl9nZXQoZWRhdGEpKTsKLQlyZXR1cm4g ZWRhdGEtPmVfYWRkcjsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLWVkYXRhX3NpemVfZ2V0 KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7Ci0JcmV0dXJuIChlZGF0YS0+ZV9zaXplX2VzbiAmIEVE QVRBX1NJWkVfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1lZGF0YV9lc25fZ2V0 KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7Ci0JcmV0dXJuIChlZGF0YS0+ZV9zaXplX2VzbiAmIEVE QVRBX0VTTl9NQVNLKTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLWVkYXRhX2JzaXplX2dl dChjb25zdCBlZGF0YV90ICplZGF0YSkgewotCXJldHVybiBlZGF0YS0+ZV9ic2l6ZTsKLX0KLQot c3RhdGljIGlubGluZSBocGRhdGFfdCAqCi1lZGF0YV9wc19nZXQoY29uc3QgZWRhdGFfdCAqZWRh dGEpIHsKLQlhc3NlcnQoZWRhdGFfcGFpX2dldChlZGF0YSkgPT0gRVhURU5UX1BBSV9IUEEpOwot CXJldHVybiBlZGF0YS0+ZV9wczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICoKLWVkYXRhX2Jl Zm9yZV9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlyZXR1cm4gKHZvaWQgKikoKHVpbnRw dHJfdCllZGF0YV9iYXNlX2dldChlZGF0YSkgLSBQQUdFKTsKLX0KLQotc3RhdGljIGlubGluZSB2 b2lkICoKLWVkYXRhX2xhc3RfZ2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7Ci0JcmV0dXJuICh2 b2lkICopKCh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpICsKLQkgICAgZWRhdGFfc2l6 ZV9nZXQoZWRhdGEpIC0gUEFHRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1lZGF0YV9w YXN0X2dldChjb25zdCBlZGF0YV90ICplZGF0YSkgewotCXJldHVybiAodm9pZCAqKSgodWludHB0 cl90KWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSArCi0JICAgIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSk7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2xhYl9kYXRhX3QgKgotZWRhdGFfc2xhYl9kYXRhX2dldChl ZGF0YV90ICplZGF0YSkgewotCWFzc2VydChlZGF0YV9zbGFiX2dldChlZGF0YSkpOwotCXJldHVy biAmZWRhdGEtPmVfc2xhYl9kYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IHNsYWJfZGF0 YV90ICoKLWVkYXRhX3NsYWJfZGF0YV9nZXRfY29uc3QoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsK LQlhc3NlcnQoZWRhdGFfc2xhYl9nZXQoZWRhdGEpKTsKLQlyZXR1cm4gJmVkYXRhLT5lX3NsYWJf ZGF0YTsKLX0KLQotc3RhdGljIGlubGluZSBwcm9mX3RjdHhfdCAqCi1lZGF0YV9wcm9mX3RjdHhf Z2V0KGNvbnN0IGVkYXRhX3QgKmVkYXRhKSB7Ci0JcmV0dXJuIChwcm9mX3RjdHhfdCAqKWF0b21p Y19sb2FkX3AoJmVkYXRhLT5lX3Byb2ZfaW5mby5lX3Byb2ZfdGN0eCwKLQkgICAgQVRPTUlDX0FD UVVJUkUpOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IG5zdGltZV90ICoKLWVkYXRhX3Byb2Zf YWxsb2NfdGltZV9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlyZXR1cm4gJmVkYXRhLT5l X3Byb2ZfaW5mby5lX3Byb2ZfYWxsb2NfdGltZTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QK LWVkYXRhX3Byb2ZfYWxsb2Nfc2l6ZV9nZXQoY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlyZXR1 cm4gZWRhdGEtPmVfcHJvZl9pbmZvLmVfcHJvZl9hbGxvY19zaXplOwotfQotCi1zdGF0aWMgaW5s aW5lIHByb2ZfcmVjZW50X3QgKgotZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2NfZ2V0X2RvbnRfY2Fs bF9kaXJlY3RseShjb25zdCBlZGF0YV90ICplZGF0YSkgewotCXJldHVybiAocHJvZl9yZWNlbnRf dCAqKWF0b21pY19sb2FkX3AoCi0JICAgICZlZGF0YS0+ZV9wcm9mX2luZm8uZV9wcm9mX3JlY2Vu dF9hbGxvYywgQVRPTUlDX1JFTEFYRUQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRh X2FyZW5hX2luZF9zZXQoZWRhdGFfdCAqZWRhdGEsIHVuc2lnbmVkIGFyZW5hX2luZCkgewotCWVk YXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmIH5FREFUQV9CSVRTX0FSRU5BX01BU0spIHwK LQkgICAgKCh1aW50NjRfdClhcmVuYV9pbmQgPDwgRURBVEFfQklUU19BUkVOQV9TSElGVCk7Ci19 Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZWRhdGFfYmluc2hhcmRfc2V0KGVkYXRhX3QgKmVkYXRh LCB1bnNpZ25lZCBiaW5zaGFyZCkgewotCS8qIFRoZSBhc3NlcnRpb24gYXNzdW1lcyBzemluZCBp cyBzZXQgYWxyZWFkeS4gKi8KLQlhc3NlcnQoYmluc2hhcmQgPCBiaW5faW5mb3NbZWRhdGFfc3pp bmRfZ2V0KGVkYXRhKV0ubl9zaGFyZHMpOwotCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0 cyAmIH5FREFUQV9CSVRTX0JJTlNIQVJEX01BU0spIHwKLQkgICAgKCh1aW50NjRfdCliaW5zaGFy ZCA8PCBFREFUQV9CSVRTX0JJTlNIQVJEX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk Ci1lZGF0YV9hZGRyX3NldChlZGF0YV90ICplZGF0YSwgdm9pZCAqYWRkcikgewotCWVkYXRhLT5l X2FkZHIgPSBhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRhX3NpemVfc2V0KGVk YXRhX3QgKmVkYXRhLCBzaXplX3Qgc2l6ZSkgewotCWFzc2VydCgoc2l6ZSAmIH5FREFUQV9TSVpF X01BU0spID09IDApOwotCWVkYXRhLT5lX3NpemVfZXNuID0gc2l6ZSB8IChlZGF0YS0+ZV9zaXpl X2VzbiAmIH5FREFUQV9TSVpFX01BU0spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRh X2Vzbl9zZXQoZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBlc24pIHsKLQllZGF0YS0+ZV9zaXplX2Vz biA9IChlZGF0YS0+ZV9zaXplX2VzbiAmIH5FREFUQV9FU05fTUFTSykgfCAoZXNuICYKLQkgICAg RURBVEFfRVNOX01BU0spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRhX2JzaXplX3Nl dChlZGF0YV90ICplZGF0YSwgc2l6ZV90IGJzaXplKSB7Ci0JZWRhdGEtPmVfYnNpemUgPSBic2l6 ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1lZGF0YV9wc19zZXQoZWRhdGFfdCAqZWRhdGEs IGhwZGF0YV90ICpwcykgewotCWFzc2VydChlZGF0YV9wYWlfZ2V0KGVkYXRhKSA9PSBFWFRFTlRf UEFJX0hQQSk7Ci0JZWRhdGEtPmVfcHMgPSBwczsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1l ZGF0YV9zemluZF9zZXQoZWRhdGFfdCAqZWRhdGEsIHN6aW5kX3Qgc3ppbmQpIHsKLQlhc3NlcnQo c3ppbmQgPD0gU0NfTlNJWkVTKTsgLyogU0NfTlNJWkVTIG1lYW5zICJpbnZhbGlkIi4gKi8KLQll ZGF0YS0+ZV9iaXRzID0gKGVkYXRhLT5lX2JpdHMgJiB+RURBVEFfQklUU19TWklORF9NQVNLKSB8 Ci0JICAgICgodWludDY0X3Qpc3ppbmQgPDwgRURBVEFfQklUU19TWklORF9TSElGVCk7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgdm9pZAotZWRhdGFfbmZyZWVfc2V0KGVkYXRhX3QgKmVkYXRhLCB1bnNp Z25lZCBuZnJlZSkgewotCWFzc2VydChlZGF0YV9zbGFiX2dldChlZGF0YSkpOwotCWVkYXRhLT5l X2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmIH5FREFUQV9CSVRTX05GUkVFX01BU0spIHwKLQkgICAg KCh1aW50NjRfdCluZnJlZSA8PCBFREFUQV9CSVRTX05GUkVFX1NISUZUKTsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkCi1lZGF0YV9uZnJlZV9iaW5zaGFyZF9zZXQoZWRhdGFfdCAqZWRhdGEsIHVu c2lnbmVkIG5mcmVlLCB1bnNpZ25lZCBiaW5zaGFyZCkgewotCS8qIFRoZSBhc3NlcnRpb24gYXNz dW1lcyBzemluZCBpcyBzZXQgYWxyZWFkeS4gKi8KLQlhc3NlcnQoYmluc2hhcmQgPCBiaW5faW5m b3NbZWRhdGFfc3ppbmRfZ2V0KGVkYXRhKV0ubl9zaGFyZHMpOwotCWVkYXRhLT5lX2JpdHMgPSAo ZWRhdGEtPmVfYml0cyAmCi0JICAgICh+RURBVEFfQklUU19ORlJFRV9NQVNLICYgfkVEQVRBX0JJ VFNfQklOU0hBUkRfTUFTSykpIHwKLQkgICAgKCh1aW50NjRfdCliaW5zaGFyZCA8PCBFREFUQV9C SVRTX0JJTlNIQVJEX1NISUZUKSB8Ci0JICAgICgodWludDY0X3QpbmZyZWUgPDwgRURBVEFfQklU U19ORlJFRV9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZWRhdGFfbmZyZWVfaW5j KGVkYXRhX3QgKmVkYXRhKSB7Ci0JYXNzZXJ0KGVkYXRhX3NsYWJfZ2V0KGVkYXRhKSk7Ci0JZWRh dGEtPmVfYml0cyArPSAoKHVpbnQ2NF90KTFVIDw8IEVEQVRBX0JJVFNfTkZSRUVfU0hJRlQpOwot fQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRhX25mcmVlX2RlYyhlZGF0YV90ICplZGF0YSkg ewotCWFzc2VydChlZGF0YV9zbGFiX2dldChlZGF0YSkpOwotCWVkYXRhLT5lX2JpdHMgLT0gKCh1 aW50NjRfdCkxVSA8PCBFREFUQV9CSVRTX05GUkVFX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGlu ZSB2b2lkCi1lZGF0YV9uZnJlZV9zdWIoZWRhdGFfdCAqZWRhdGEsIHVpbnQ2NF90IG4pIHsKLQlh c3NlcnQoZWRhdGFfc2xhYl9nZXQoZWRhdGEpKTsKLQllZGF0YS0+ZV9iaXRzIC09IChuIDw8IEVE QVRBX0JJVFNfTkZSRUVfU0hJRlQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRhX3Nu X3NldChlZGF0YV90ICplZGF0YSwgdWludDY0X3Qgc24pIHsKLQllZGF0YS0+ZV9zbiA9IHNuOwot fQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRhX3N0YXRlX3NldChlZGF0YV90ICplZGF0YSwg ZXh0ZW50X3N0YXRlX3Qgc3RhdGUpIHsKLQllZGF0YS0+ZV9iaXRzID0gKGVkYXRhLT5lX2JpdHMg JiB+RURBVEFfQklUU19TVEFURV9NQVNLKSB8Ci0JICAgICgodWludDY0X3Qpc3RhdGUgPDwgRURB VEFfQklUU19TVEFURV9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZWRhdGFfZ3Vh cmRlZF9zZXQoZWRhdGFfdCAqZWRhdGEsIGJvb2wgZ3VhcmRlZCkgewotCWVkYXRhLT5lX2JpdHMg PSAoZWRhdGEtPmVfYml0cyAmIH5FREFUQV9CSVRTX0dVQVJERURfTUFTSykgfAotCSAgICAoKHVp bnQ2NF90KWd1YXJkZWQgPDwgRURBVEFfQklUU19HVUFSREVEX1NISUZUKTsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkCi1lZGF0YV96ZXJvZWRfc2V0KGVkYXRhX3QgKmVkYXRhLCBib29sIHplcm9l ZCkgewotCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVfYml0cyAmIH5FREFUQV9CSVRTX1pFUk9F RF9NQVNLKSB8Ci0JICAgICgodWludDY0X3QpemVyb2VkIDw8IEVEQVRBX0JJVFNfWkVST0VEX1NI SUZUKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1lZGF0YV9jb21taXR0ZWRfc2V0KGVkYXRh X3QgKmVkYXRhLCBib29sIGNvbW1pdHRlZCkgewotCWVkYXRhLT5lX2JpdHMgPSAoZWRhdGEtPmVf Yml0cyAmIH5FREFUQV9CSVRTX0NPTU1JVFRFRF9NQVNLKSB8Ci0JICAgICgodWludDY0X3QpY29t bWl0dGVkIDw8IEVEQVRBX0JJVFNfQ09NTUlUVEVEX1NISUZUKTsKLX0KLQotc3RhdGljIGlubGlu ZSB2b2lkCi1lZGF0YV9wYWlfc2V0KGVkYXRhX3QgKmVkYXRhLCBleHRlbnRfcGFpX3QgcGFpKSB7 Ci0JZWRhdGEtPmVfYml0cyA9IChlZGF0YS0+ZV9iaXRzICYgfkVEQVRBX0JJVFNfUEFJX01BU0sp IHwKLQkgICAgKCh1aW50NjRfdClwYWkgPDwgRURBVEFfQklUU19QQUlfU0hJRlQpOwotfQotCi1z dGF0aWMgaW5saW5lIHZvaWQKLWVkYXRhX3NsYWJfc2V0KGVkYXRhX3QgKmVkYXRhLCBib29sIHNs YWIpIHsKLQllZGF0YS0+ZV9iaXRzID0gKGVkYXRhLT5lX2JpdHMgJiB+RURBVEFfQklUU19TTEFC X01BU0spIHwKLQkgICAgKCh1aW50NjRfdClzbGFiIDw8IEVEQVRBX0JJVFNfU0xBQl9TSElGVCk7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZWRhdGFfcHJvZl90Y3R4X3NldChlZGF0YV90ICpl ZGF0YSwgcHJvZl90Y3R4X3QgKnRjdHgpIHsKLQlhdG9taWNfc3RvcmVfcCgmZWRhdGEtPmVfcHJv Zl9pbmZvLmVfcHJvZl90Y3R4LCB0Y3R4LCBBVE9NSUNfUkVMRUFTRSk7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdm9pZAotZWRhdGFfcHJvZl9hbGxvY190aW1lX3NldChlZGF0YV90ICplZGF0YSwgbnN0 aW1lX3QgKnQpIHsKLQluc3RpbWVfY29weSgmZWRhdGEtPmVfcHJvZl9pbmZvLmVfcHJvZl9hbGxv Y190aW1lLCB0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1lZGF0YV9wcm9mX2FsbG9jX3Np emVfc2V0KGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qgc2l6ZSkgewotCWVkYXRhLT5lX3Byb2ZfaW5m by5lX3Byb2ZfYWxsb2Nfc2l6ZSA9IHNpemU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZWRh dGFfcHJvZl9yZWNlbnRfYWxsb2Nfc2V0X2RvbnRfY2FsbF9kaXJlY3RseShlZGF0YV90ICplZGF0 YSwKLSAgICBwcm9mX3JlY2VudF90ICpyZWNlbnRfYWxsb2MpIHsKLQlhdG9taWNfc3RvcmVfcCgm ZWRhdGEtPmVfcHJvZl9pbmZvLmVfcHJvZl9yZWNlbnRfYWxsb2MsIHJlY2VudF9hbGxvYywKLQkg ICAgQVRPTUlDX1JFTEFYRUQpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWVkYXRhX2lzX2hl YWRfZ2V0KGVkYXRhX3QgKmVkYXRhKSB7Ci0JcmV0dXJuIChib29sKSgoZWRhdGEtPmVfYml0cyAm IEVEQVRBX0JJVFNfSVNfSEVBRF9NQVNLKSA+PgotCSAgICBFREFUQV9CSVRTX0lTX0hFQURfU0hJ RlQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVkYXRhX2lzX2hlYWRfc2V0KGVkYXRhX3Qg KmVkYXRhLCBib29sIGlzX2hlYWQpIHsKLQllZGF0YS0+ZV9iaXRzID0gKGVkYXRhLT5lX2JpdHMg JiB+RURBVEFfQklUU19JU19IRUFEX01BU0spIHwKLQkgICAgKCh1aW50NjRfdClpc19oZWFkIDw8 IEVEQVRBX0JJVFNfSVNfSEVBRF9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotZWRh dGFfc3RhdGVfaW5fdHJhbnNpdGlvbihleHRlbnRfc3RhdGVfdCBzdGF0ZSkgewotCXJldHVybiBz dGF0ZSA+PSBleHRlbnRfc3RhdGVfdHJhbnNpdGlvbjsKLX0KLQotLyoKLSAqIEJlY2F1c2UgdGhp cyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIHNlcXVlbmNlIG9mIGJpdGZpZWxkIG1vZGlm aWNhdGlvbnMsCi0gKiBldmVuIHRob3VnaCBlYWNoIGluZGl2aWR1YWwgYml0IGlzIHByb3Blcmx5 IGluaXRpYWxpemVkLCB3ZSB0ZWNobmljYWxseSByZWFkCi0gKiB1bmluaXRpYWxpemVkIGRhdGEg d2l0aGluIGl0LiAgVGhpcyBpcyBtb3N0bHkgZmluZSwgc2luY2UgbW9zdCBjYWxsZXJzIGdldAot ICogdGhlaXIgZWRhdGFzIGZyb20gemVyb2luZyBzb3VyY2VzLCBidXQgY2FsbGVycyB3aG8gbWFr ZSBzdGFjayBlZGF0YV90cyBuZWVkCi0gKiB0byBtYW51YWxseSB6ZXJvIHRoZW0uCi0gKi8KLXN0 YXRpYyBpbmxpbmUgdm9pZAotZWRhdGFfaW5pdChlZGF0YV90ICplZGF0YSwgdW5zaWduZWQgYXJl bmFfaW5kLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBib29sIHNsYWIsIHN6aW5kX3Qg c3ppbmQsIHVpbnQ2NF90IHNuLCBleHRlbnRfc3RhdGVfdCBzdGF0ZSwgYm9vbCB6ZXJvZWQsCi0g ICAgYm9vbCBjb21taXR0ZWQsIGV4dGVudF9wYWlfdCBwYWksIGV4dGVudF9oZWFkX3N0YXRlX3Qg aXNfaGVhZCkgewotCWFzc2VydChhZGRyID09IFBBR0VfQUREUjJCQVNFKGFkZHIpIHx8ICFzbGFi KTsKLQotCWVkYXRhX2FyZW5hX2luZF9zZXQoZWRhdGEsIGFyZW5hX2luZCk7Ci0JZWRhdGFfYWRk cl9zZXQoZWRhdGEsIGFkZHIpOwotCWVkYXRhX3NpemVfc2V0KGVkYXRhLCBzaXplKTsKLQllZGF0 YV9zbGFiX3NldChlZGF0YSwgc2xhYik7Ci0JZWRhdGFfc3ppbmRfc2V0KGVkYXRhLCBzemluZCk7 Ci0JZWRhdGFfc25fc2V0KGVkYXRhLCBzbik7Ci0JZWRhdGFfc3RhdGVfc2V0KGVkYXRhLCBzdGF0 ZSk7Ci0JZWRhdGFfZ3VhcmRlZF9zZXQoZWRhdGEsIGZhbHNlKTsKLQllZGF0YV96ZXJvZWRfc2V0 KGVkYXRhLCB6ZXJvZWQpOwotCWVkYXRhX2NvbW1pdHRlZF9zZXQoZWRhdGEsIGNvbW1pdHRlZCk7 Ci0JZWRhdGFfcGFpX3NldChlZGF0YSwgcGFpKTsKLQllZGF0YV9pc19oZWFkX3NldChlZGF0YSwg aXNfaGVhZCA9PSBFWFRFTlRfSVNfSEVBRCk7Ci0JaWYgKGNvbmZpZ19wcm9mKSB7Ci0JCWVkYXRh X3Byb2ZfdGN0eF9zZXQoZWRhdGEsIE5VTEwpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lk Ci1lZGF0YV9iaW5pdChlZGF0YV90ICplZGF0YSwgdm9pZCAqYWRkciwgc2l6ZV90IGJzaXplLCB1 aW50NjRfdCBzbikgewotCWVkYXRhX2FyZW5hX2luZF9zZXQoZWRhdGEsICgxVSA8PCBNQUxMT0NY X0FSRU5BX0JJVFMpIC0gMSk7Ci0JZWRhdGFfYWRkcl9zZXQoZWRhdGEsIGFkZHIpOwotCWVkYXRh X2JzaXplX3NldChlZGF0YSwgYnNpemUpOwotCWVkYXRhX3NsYWJfc2V0KGVkYXRhLCBmYWxzZSk7 Ci0JZWRhdGFfc3ppbmRfc2V0KGVkYXRhLCBTQ19OU0laRVMpOwotCWVkYXRhX3NuX3NldChlZGF0 YSwgc24pOwotCWVkYXRhX3N0YXRlX3NldChlZGF0YSwgZXh0ZW50X3N0YXRlX2FjdGl2ZSk7Ci0J ZWRhdGFfZ3VhcmRlZF9zZXQoZWRhdGEsIGZhbHNlKTsKLQllZGF0YV96ZXJvZWRfc2V0KGVkYXRh LCB0cnVlKTsKLQllZGF0YV9jb21taXR0ZWRfc2V0KGVkYXRhLCB0cnVlKTsKLQkvKgotCSAqIFRo aXMgaXNuJ3Qgc3RyaWN0bHkgdHJ1ZSwgYnV0IGJhc2UgYWxsb2NhdGVkIGV4dGVudHMgbmV2ZXIg Z2V0Ci0JICogZGVhbGxvY2F0ZWQgYW5kIGNhbid0IGJlIGxvb2tlZCB1cCBpbiB0aGUgZW1hcCwg YnV0IG5vIHNlbnNlIGluCi0JICogd2FzdGluZyBhIHN0YXRlIGJpdCB0byBlbmNvZGUgdGhpcyBm YWN0LgotCSAqLwotCWVkYXRhX3BhaV9zZXQoZWRhdGEsIEVYVEVOVF9QQUlfUEFDKTsKLX0KLQot c3RhdGljIGlubGluZSBpbnQKLWVkYXRhX2Vzbl9jb21wKGNvbnN0IGVkYXRhX3QgKmEsIGNvbnN0 IGVkYXRhX3QgKmIpIHsKLQlzaXplX3QgYV9lc24gPSBlZGF0YV9lc25fZ2V0KGEpOwotCXNpemVf dCBiX2VzbiA9IGVkYXRhX2Vzbl9nZXQoYik7Ci0KLQlyZXR1cm4gKGFfZXNuID4gYl9lc24pIC0g KGFfZXNuIDwgYl9lc24pOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZWRhdGFfZWFkX2NvbXAo Y29uc3QgZWRhdGFfdCAqYSwgY29uc3QgZWRhdGFfdCAqYikgewotCXVpbnRwdHJfdCBhX2VhZGRy ID0gKHVpbnRwdHJfdClhOwotCXVpbnRwdHJfdCBiX2VhZGRyID0gKHVpbnRwdHJfdCliOwotCi0J cmV0dXJuIChhX2VhZGRyID4gYl9lYWRkcikgLSAoYV9lYWRkciA8IGJfZWFkZHIpOwotfQotCi1z dGF0aWMgaW5saW5lIGVkYXRhX2NtcF9zdW1tYXJ5X3QKLWVkYXRhX2NtcF9zdW1tYXJ5X2dldChj b25zdCBlZGF0YV90ICplZGF0YSkgewotCXJldHVybiAoZWRhdGFfY21wX3N1bW1hcnlfdCl7ZWRh dGFfc25fZ2V0KGVkYXRhKSwKLQkJKHVpbnRwdHJfdCllZGF0YV9hZGRyX2dldChlZGF0YSl9Owot fQotCi1zdGF0aWMgaW5saW5lIGludAotZWRhdGFfY21wX3N1bW1hcnlfY29tcChlZGF0YV9jbXBf c3VtbWFyeV90IGEsIGVkYXRhX2NtcF9zdW1tYXJ5X3QgYikgewotCWludCByZXQ7Ci0JcmV0ID0g KGEuc24gPiBiLnNuKSAtIChhLnNuIDwgYi5zbik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCXJldHVy biByZXQ7Ci0JfQotCXJldCA9IChhLmFkZHIgPiBiLmFkZHIpIC0gKGEuYWRkciA8IGIuYWRkcik7 Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWVkYXRhX3NuYWRfY29tcChj b25zdCBlZGF0YV90ICphLCBjb25zdCBlZGF0YV90ICpiKSB7Ci0JZWRhdGFfY21wX3N1bW1hcnlf dCBhX2NtcCA9IGVkYXRhX2NtcF9zdW1tYXJ5X2dldChhKTsKLQllZGF0YV9jbXBfc3VtbWFyeV90 IGJfY21wID0gZWRhdGFfY21wX3N1bW1hcnlfZ2V0KGIpOwotCi0JcmV0dXJuIGVkYXRhX2NtcF9z dW1tYXJ5X2NvbXAoYV9jbXAsIGJfY21wKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWVkYXRh X2VzbmVhZF9jb21wKGNvbnN0IGVkYXRhX3QgKmEsIGNvbnN0IGVkYXRhX3QgKmIpIHsKLQlpbnQg cmV0OwotCi0JcmV0ID0gZWRhdGFfZXNuX2NvbXAoYSwgYik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0J CXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gZWRhdGFfZWFkX2NvbXAoYSwgYik7Ci0JcmV0dXJu IHJldDsKLX0KLQotcGhfcHJvdG8oLCBlZGF0YV9hdmFpbCwgZWRhdGFfdCkKLXBoX3Byb3RvKCwg ZWRhdGFfaGVhcCwgZWRhdGFfdCkKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VEQVRB X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VkYXRhX2NhY2hlLmggYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VkYXRh X2NhY2hlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNmMwZWYuLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9lZGF0YV9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBA QAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FREFUQV9DQUNIRV9ICi0jZGVmaW5lIEpFTUFM TE9DX0lOVEVSTkFMX0VEQVRBX0NBQ0hFX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2Jhc2UuaCIKLQotLyogRm9yIHRlc3RzIG9ubHkuICovCi0jZGVmaW5lIEVEQVRBX0NBQ0hFX0ZB U1RfRklMTCA0Ci0KLS8qCi0gKiBBIGNhY2hlIG9mIGVkYXRhX3Qgc3RydWN0dXJlcyBhbGxvY2F0 ZWQgdmlhIGJhc2VfYWxsb2NfZWRhdGEgKGFzIG9wcG9zZWQgdG8KLSAqIHRoZSB1bmRlcmx5aW5n IGV4dGVudHMgdGhleSBkZXNjcmliZSkuICBUaGUgY29udGVudHMgb2YgcmV0dXJuZWQgZWRhdGFf dAotICogb2JqZWN0cyBhcmUgZ2FyYmFnZSBhbmQgY2Fubm90IGJlIHJlbGllZCB1cG9uLgotICov Ci0KLXR5cGVkZWYgc3RydWN0IGVkYXRhX2NhY2hlX3MgZWRhdGFfY2FjaGVfdDsKLXN0cnVjdCBl ZGF0YV9jYWNoZV9zIHsKLQllZGF0YV9hdmFpbF90IGF2YWlsOwotCWF0b21pY196dV90IGNvdW50 OwotCW1hbGxvY19tdXRleF90IG10eDsKLQliYXNlX3QgKmJhc2U7Ci19OwotCi1ib29sIGVkYXRh X2NhY2hlX2luaXQoZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUsIGJhc2VfdCAqYmFzZSk7Ci1l ZGF0YV90ICplZGF0YV9jYWNoZV9nZXQodHNkbl90ICp0c2RuLCBlZGF0YV9jYWNoZV90ICplZGF0 YV9jYWNoZSk7Ci12b2lkIGVkYXRhX2NhY2hlX3B1dCh0c2RuX3QgKnRzZG4sIGVkYXRhX2NhY2hl X3QgKmVkYXRhX2NhY2hlLCBlZGF0YV90ICplZGF0YSk7Ci0KLXZvaWQgZWRhdGFfY2FjaGVfcHJl Zm9yayh0c2RuX3QgKnRzZG4sIGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlKTsKLXZvaWQgZWRh dGFfY2FjaGVfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfdCAqZWRh dGFfY2FjaGUpOwotdm9pZCBlZGF0YV9jYWNoZV9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4s IGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlKTsKLQotLyoKLSAqIEFuIGVkYXRhX2NhY2hlX3Nt YWxsIGlzIGxpa2UgYW4gZWRhdGFfY2FjaGUsIGJ1dCBpdCByZWxpZXMgb24gZXh0ZXJuYWwKLSAq IHN5bmNocm9uaXphdGlvbiBhbmQgYXZvaWRzIGZpcnN0LWZpdCBzdHJhdGVnaWVzLgotICovCi0K LXR5cGVkZWYgc3RydWN0IGVkYXRhX2NhY2hlX2Zhc3RfcyBlZGF0YV9jYWNoZV9mYXN0X3Q7Ci1z dHJ1Y3QgZWRhdGFfY2FjaGVfZmFzdF9zIHsKLQllZGF0YV9saXN0X2luYWN0aXZlX3QgbGlzdDsK LQllZGF0YV9jYWNoZV90ICpmYWxsYmFjazsKLQlib29sIGRpc2FibGVkOwotfTsKLQotdm9pZCBl ZGF0YV9jYWNoZV9mYXN0X2luaXQoZWRhdGFfY2FjaGVfZmFzdF90ICplY3MsIGVkYXRhX2NhY2hl X3QgKmZhbGxiYWNrKTsKLWVkYXRhX3QgKmVkYXRhX2NhY2hlX2Zhc3RfZ2V0KHRzZG5fdCAqdHNk biwgZWRhdGFfY2FjaGVfZmFzdF90ICplY3MpOwotdm9pZCBlZGF0YV9jYWNoZV9mYXN0X3B1dCh0 c2RuX3QgKnRzZG4sIGVkYXRhX2NhY2hlX2Zhc3RfdCAqZWNzLAotICAgIGVkYXRhX3QgKmVkYXRh KTsKLXZvaWQgZWRhdGFfY2FjaGVfZmFzdF9kaXNhYmxlKHRzZG5fdCAqdHNkbiwgZWRhdGFfY2Fj aGVfZmFzdF90ICplY3MpOwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRURBVEFfQ0FD SEVfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZWhvb2tzLmggYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Vob29rcy5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDk1MTNlLi4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvZWhvb2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTIgKzAsMCBAQAotI2lmbmRlZiBK RU1BTExPQ19JTlRFUk5BTF9FSE9PS1NfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9FSE9P S1NfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXRvbWljLmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50X21tYXAuaCIKLQotLyoKLSAqIFRoaXMgbW9kdWxlIGlz IHRoZSBpbnRlcm5hbCBpbnRlcmZhY2UgdG8gdGhlIGV4dGVudCBob29rcyAoYm90aAotICogdXNl ci1zcGVjaWZpZWQgYW5kIGV4dGVybmFsKS4gIEV2ZW50dWFsbHksIHRoaXMgd2lsbCBnaXZlIHVz IHRoZSBmbGV4aWJpbGl0eQotICogdG8gdXNlIG11bHRpcGxlIGRpZmZlcmVudCB2ZXJzaW9ucyBv ZiB1c2VyLXZpc2libGUgZXh0ZW50LWhvb2sgQVBJcyB1bmRlciBhCi0gKiBzaW5nbGUgdXNlciBp bnRlcmZhY2UuCi0gKgotICogQ3VycmVudCBBUEkgZXhwYW5zaW9ucyAobm90IGF2YWlsYWJsZSB0 byBhbnlvbmUgYnV0IHRoZSBkZWZhdWx0IGhvb2tzIHlldCk6Ci0gKiAgIC0gSGVhZCBzdGF0ZSB0 cmFja2luZy4gIEhvb2tzIGNhbiBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gbWVyZ2UgdHdvCi0g KiAgICAgZXh0ZW50cyBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCBvbmUgb2YgdGhlbSBpcyB0aGUg aGVhZCAoaS5lLiB3YXMKLSAqICAgICBhbGxvY2F0ZWQgb24gaXRzIG93bikuICBUaGUgbGF0ZXIg ZXh0ZW50IGxvc2VzIGl0cyAiaGVhZCIgc3RhdHVzLgotICovCi0KLWV4dGVybiBjb25zdCBleHRl bnRfaG9va3NfdCBlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3M7Ci0KLXR5cGVkZWYgc3RydWN0 IGVob29rc19zIGVob29rc190Owotc3RydWN0IGVob29rc19zIHsKLQkvKgotCSAqIFRoZSB1c2Vy LXZpc2libGUgaWQgdGhhdCBnb2VzIHdpdGggdGhlIGVob29rcyAoaS5lLiB0aGF0IG9mIHRoZSBi YXNlCi0JICogdGhleSdyZSBhIHBhcnQgb2YsIHRoZSBhc3NvY2lhdGVkIGFyZW5hJ3MgaW5kZXgg d2l0aGluIHRoZSBhcmVuYXMKLQkgKiBhcnJheSkuCi0JICovCi0JdW5zaWduZWQgaW5kOwotCS8q IExvZ2ljYWxseSBhbiBleHRlbnRfaG9va3NfdCAqLiAqLwotCWF0b21pY19wX3QgcHRyOwotfTsK LQotZXh0ZXJuIGNvbnN0IGV4dGVudF9ob29rc190IGVob29rc19kZWZhdWx0X2V4dGVudF9ob29r czsKLQotLyoKLSAqIFRoZXNlIGFyZSBub3QgcmVhbGx5IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEku ICBFYWNoIGhvb2sgaGFzIGEgZmFzdC1wYXRoIGZvcgotICogdGhlIGRlZmF1bHQtaG9va3MgY2Fz ZSB0aGF0IGNhbiBhdm9pZCB2YXJpb3VzIHNtYWxsIGluZWZmaWNpZW5jaWVzOgotICogICAtIEZv cmdldHRpbmcgdHNkIGFuZCB0aGVuIGNhbGxpbmcgdHNkX2dldCB3aXRoaW4gdGhlIGhvb2suCi0g KiAgIC0gR2V0dGluZyBtb3JlIHN0YXRlIHRoYW4gbmVjZXNzYXJ5IG91dCBvZiB0aGUgZXh0ZW50 X3QuCi0gKiAgIC0gRG9pbmcgYXJlbmFfaW5kIC0+IGFyZW5hIC0+IGFyZW5hX2luZCBsb29rdXBz LgotICogQnkgbWFraW5nIHRoZSBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgdmlzaWJsZSB0byB0 aGUgY29tcGlsZXIsIGl0IGNhbiBtb3ZlCi0gKiB0aG9zZSBleHRyYSBiaXRzIG9mIGNvbXB1dGF0 aW9uIGRvd24gYmVsb3cgdGhlIGZhc3QtcGF0aHMgd2hlcmUgdGhleSBnZXQgaWdub3JlZC4KLSAq Lwotdm9pZCAqZWhvb2tzX2RlZmF1bHRfYWxsb2NfaW1wbCh0c2RuX3QgKnRzZG4sIHZvaWQgKm5l d19hZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLCBi b29sICpjb21taXQsIHVuc2lnbmVkIGFyZW5hX2luZCk7Ci1ib29sIGVob29rc19kZWZhdWx0X2Rh bGxvY19pbXBsKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsKLXZvaWQgZWhvb2tzX2RlZmF1bHRf ZGVzdHJveV9pbXBsKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKTsKLWJvb2wgZWhvb2tzX2RlZmF1 bHRfY29tbWl0X2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCk7 Ci1ib29sIGVob29rc19kZWZhdWx0X2RlY29tbWl0X2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IG9m ZnNldCwgc2l6ZV90IGxlbmd0aCk7Ci0jaWZkZWYgUEFHRVNfQ0FOX1BVUkdFX0xBWlkKLWJvb2wg ZWhvb2tzX2RlZmF1bHRfcHVyZ2VfbGF6eV9pbXBsKHZvaWQgKmFkZHIsIHNpemVfdCBvZmZzZXQs IHNpemVfdCBsZW5ndGgpOwotI2VuZGlmCi0jaWZkZWYgUEFHRVNfQ0FOX1BVUkdFX0ZPUkNFRAot Ym9vbCBlaG9va3NfZGVmYXVsdF9wdXJnZV9mb3JjZWRfaW1wbCh2b2lkICphZGRyLCBzaXplX3Qg b2Zmc2V0LCBzaXplX3QgbGVuZ3RoKTsKLSNlbmRpZgotYm9vbCBlaG9va3NfZGVmYXVsdF9zcGxp dF9pbXBsKCk7Ci0vKgotICogTWVyZ2UgaXMgdGhlIG9ubHkgZGVmYXVsdCBleHRlbnQgaG9vayB3 ZSBkZWNsYXJlIC0tIHNlZSB0aGUgY29tbWVudCBpbgotICogZWhvb2tzX21lcmdlLgotICovCi1i b29sIGVob29rc19kZWZhdWx0X21lcmdlKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZv aWQgKmFkZHJfYSwKLSAgICBzaXplX3Qgc2l6ZV9hLCB2b2lkICphZGRyX2IsIHNpemVfdCBzaXpl X2IsIGJvb2wgY29tbWl0dGVkLAotICAgIHVuc2lnbmVkIGFyZW5hX2luZCk7Ci1ib29sIGVob29r c19kZWZhdWx0X21lcmdlX2ltcGwodHNkbl90ICp0c2RuLCB2b2lkICphZGRyX2EsIHZvaWQgKmFk ZHJfYik7Ci12b2lkIGVob29rc19kZWZhdWx0X3plcm9faW1wbCh2b2lkICphZGRyLCBzaXplX3Qg c2l6ZSk7Ci12b2lkIGVob29rc19kZWZhdWx0X2d1YXJkX2ltcGwodm9pZCAqZ3VhcmQxLCB2b2lk ICpndWFyZDIpOwotdm9pZCBlaG9va3NfZGVmYXVsdF91bmd1YXJkX2ltcGwodm9pZCAqZ3VhcmQx LCB2b2lkICpndWFyZDIpOwotCi0vKgotICogV2UgZG9uJ3Qgb2ZmaWNpYWxseSBzdXBwb3J0IHJl ZW50cmFuY3kgZnJvbSB3dGloaW4gdGhlIGV4dGVudCBob29rcy4gIEJ1dAotICogdmFyaW91cyBw ZW9wbGUgd2hvIHNpdCB3aXRoaW4gdGhyb3dpbmcgZGlzdGFuY2Ugb2YgdGhlIGplbWFsbG9jIHRl YW0gd2FudAotICogdGhhdCBmdW5jdGlvbmFsaXR5IGluIGNlcnRhaW4gbGltaXRlZCBjYXNlcy4g IFRoZSBkZWZhdWx0IHJlZW50cmFuY3kgZ3VhcmRzCi0gKiBhc3NlcnQgdGhhdCB3ZSdyZSBub3Qg cmVlbnRyYW50IGZyb20gYTAgKHNpbmNlIGl0J3MgdGhlIGJvb3RzdHJhcCBhcmVuYSwKLSAqIHdo ZXJlIHJlZW50cmFudCBhbGxvY2F0aW9ucyB3b3VsZCBiZSByZWRpcmVjdGVkKSwgd2hpY2ggd2Ug d291bGQgaW5jb3JyZWN0bHkKLSAqIHRyaWdnZXIgaW4gY2FzZXMgd2hlcmUgYTAgaGFzIGV4dGVu dCBob29rcyAodGhvc2UgaG9va3MgdGhlbXNlbHZlcyBjYW4ndCBiZQotICogcmVlbnRyYW50LCB0 aGVuLCBidXQgdGhlcmUgYXJlIHJlYXNvbmFibGUgdXNlcyBmb3Igc3VjaCBmdW5jdGlvbmFsaXR5 LCBsaWtlCi0gKiBwdXR0aW5nIGludGVybmFsIG1ldGFkYXRhIG9uIGh1Z2VwYWdlcykuICBUaGVy ZWZvcmUsIHdlIHVzZSB0aGUgcmF3Ci0gKiByZWVudHJhbmN5IGd1YXJkcy4KLSAqCi0gKiBFdmVu dHVhbGx5LCB3ZSBuZWVkIHRvIHRoaW5rIG1vcmUgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIgYW5k IHdoZXJlIHdlCi0gKiBzdXBwb3J0IGFsbG9jYXRpbmcgZnJvbSB3aXRoaW4gZXh0ZW50IGhvb2tz IChhbmQgd2hhdCB0aGF0IG1lYW5zIGZvciB0aGluZ3MKLSAqIGxpa2UgcHJvZmlsaW5nLCBzdGF0 cyBjb2xsZWN0aW9uLCBldGMuKSwgYW5kIGRvY3VtZW50IHdoYXQgdGhlIGd1YXJhbnRlZSBpcy4K LSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1laG9va3NfcHJlX3JlZW50cmFuY3kodHNkbl90ICp0 c2RuKSB7Ci0JdHNkX3QgKnRzZCA9IHRzZG5fbnVsbCh0c2RuKSA/IHRzZF9mZXRjaCgpIDogdHNk bl90c2QodHNkbik7Ci0JdHNkX3ByZV9yZWVudHJhbmN5X3Jhdyh0c2QpOwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQKLWVob29rc19wb3N0X3JlZW50cmFuY3kodHNkbl90ICp0c2RuKSB7Ci0JdHNk X3QgKnRzZCA9IHRzZG5fbnVsbCh0c2RuKSA/IHRzZF9mZXRjaCgpIDogdHNkbl90c2QodHNkbik7 Ci0JdHNkX3Bvc3RfcmVlbnRyYW5jeV9yYXcodHNkKTsKLX0KLQotLyogQmVnaW5uaW5nIG9mIHRo ZSBwdWJsaWMgQVBJLiAqLwotdm9pZCBlaG9va3NfaW5pdChlaG9va3NfdCAqZWhvb2tzLCBleHRl bnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB1bnNpZ25lZCBpbmQpOwotCi1zdGF0aWMgaW5saW5l IHVuc2lnbmVkCi1laG9va3NfaW5kX2dldChjb25zdCBlaG9va3NfdCAqZWhvb2tzKSB7Ci0JcmV0 dXJuIGVob29rcy0+aW5kOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVob29rc19zZXRfZXh0 ZW50X2hvb2tzX3B0cihlaG9va3NfdCAqZWhvb2tzLCBleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hv b2tzKSB7Ci0JYXRvbWljX3N0b3JlX3AoJmVob29rcy0+cHRyLCBleHRlbnRfaG9va3MsIEFUT01J Q19SRUxFQVNFKTsKLX0KLQotc3RhdGljIGlubGluZSBleHRlbnRfaG9va3NfdCAqCi1laG9va3Nf Z2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzX3QgKmVob29rcykgewotCXJldHVybiAoZXh0ZW50 X2hvb2tzX3QgKilhdG9taWNfbG9hZF9wKCZlaG9va3MtPnB0ciwgQVRPTUlDX0FDUVVJUkUpOwot fQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWVob29rc19hcmVfZGVmYXVsdChlaG9va3NfdCAqZWhv b2tzKSB7Ci0JcmV0dXJuIGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9va3MpID09Ci0J ICAgICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3M7Ci19Ci0KLS8qCi0gKiBJbiBzb21lIGNh c2VzLCBhIGNhbGxlciBuZWVkcyB0byBhbGxvY2F0ZSByZXNvdXJjZXMgYmVmb3JlIGF0dGVtcHRp bmcgdG8gY2FsbAotICogYSBob29rLiAgSWYgdGhhdCBob29rIGlzIGRvb21lZCB0byBmYWlsLCB0 aGlzIGlzIHdhc3RlZnVsLiAgV2UgdGhlcmVmb3JlCi0gKiBpbmNsdWRlIHNvbWUgY2hlY2tzIGZv ciBzdWNoIGNhc2VzLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLWVob29rc19kYWxsb2Nfd2ls bF9mYWlsKGVob29rc190ICplaG9va3MpIHsKLQlpZiAoZWhvb2tzX2FyZV9kZWZhdWx0KGVob29r cykpIHsKLQkJcmV0dXJuIG9wdF9yZXRhaW47Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGVob29rc19n ZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9va3MpLT5kYWxsb2MgPT0gTlVMTDsKLQl9Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgYm9vbAotZWhvb2tzX3NwbGl0X3dpbGxfZmFpbChlaG9va3NfdCAqZWhvb2tz KSB7Ci0JcmV0dXJuIGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9va3MpLT5zcGxpdCA9 PSBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWVob29rc19tZXJnZV93aWxsX2ZhaWwo ZWhvb2tzX3QgKmVob29rcykgewotCXJldHVybiBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIo ZWhvb2tzKS0+bWVyZ2UgPT0gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1laG9va3Nf Z3VhcmRfd2lsbF9mYWlsKGVob29rc190ICplaG9va3MpIHsKLQkvKgotCSAqIEJlZm9yZSB0aGUg Z3VhcmQgaG9va3MgYXJlIG9mZmljaWFsbHkgaW50cm9kdWNlZCwgbGltaXQgdGhlIHVzZSB0bwot CSAqIHRoZSBkZWZhdWx0IGhvb2tzIG9ubHkuCi0JICovCi0JcmV0dXJuICFlaG9va3NfYXJlX2Rl ZmF1bHQoZWhvb2tzKTsKLX0KLQotLyoKLSAqIFNvbWUgaG9va3MgYXJlIHJlcXVpcmVkIHRvIHJl dHVybiB6ZXJvZWQgbWVtb3J5IGluIGNlcnRhaW4gc2l0dWF0aW9ucy4gIEluCi0gKiBkZWJ1ZyBt b2RlLCB3ZSBkbyBzb21lIGhldXJpc3RpYyBjaGVja3MgdGhhdCB0aGV5IGRpZCB3aGF0IHRoZXkg d2VyZSBzdXBwb3NlZAotICogdG8uCi0gKgotICogVGhpcyBpc24ndCByZWFsbHkgZWhvb2tzLXNw ZWNpZmljIChpLmUuIGFueW9uZSBjYW4gY2hlY2sgZm9yIHplcm9lZCBtZW1vcnkpLgotICogQnV0 IGluY29ycmVjdCB6ZXJvIGluZm9ybWF0aW9uIGluZGljYXRlcyBhbiBlaG9vayBidWcuCi0gKi8K LXN0YXRpYyBpbmxpbmUgdm9pZAotZWhvb2tzX2RlYnVnX3plcm9fY2hlY2sodm9pZCAqYWRkciwg c2l6ZV90IHNpemUpIHsKLQlhc3NlcnQoKCh1aW50cHRyX3QpYWRkciAmIFBBR0VfTUFTSykgPT0g MCk7Ci0JYXNzZXJ0KChzaXplICYgUEFHRV9NQVNLKSA9PSAwKTsKLQlhc3NlcnQoc2l6ZSA+IDAp OwotCWlmIChjb25maWdfZGVidWcpIHsKLQkJLyogQ2hlY2sgdGhlIHdob2xlIGZpcnN0IHBhZ2Uu ICovCi0JCXNpemVfdCAqcCA9IChzaXplX3QgKilhZGRyOwotCQlmb3IgKHNpemVfdCBpID0gMDsg aSA8IFBBR0UgLyBzaXplb2Yoc2l6ZV90KTsgaSsrKSB7Ci0JCQlhc3NlcnQocFtpXSA9PSAwKTsK LQkJfQotCQkvKgotCQkgKiBBbmQgNCBzcG90cyB3aXRoaW4uICBUaGVyZSdzIGEgdHJhZGVvZmYg aGVyZTsgdGhlIGxhcmdlcgotCQkgKiB0aGlzIG51bWJlciwgdGhlIG1vcmUgbGlrZWx5IGl0IGlz IHRoYXQgd2UnbGwgY2F0Y2ggYSBidWcKLQkJICogd2hlcmUgZWhvb2tzIHJldHVybiBhIHNwYXJz ZWx5IG5vbi16ZXJvIHJhbmdlLiAgQnV0Ci0JCSAqIGluY3JlYXNpbmcgdGhlIG51bWJlciBvZiBj aGVja3MgYWxzbyBpbmNyZWFzZXMgdGhlIG51bWJlciBvZgotCQkgKiBwYWdlIGZhdWx0cyBpbiBk ZWJ1ZyBtb2RlLiAgRnJlZUJTRCBkb2VzIG11Y2ggb2YgdGhlaXIKLQkJICogZGF5LXRvLWRheSBk ZXZlbG9wbWVudCB3b3JrIGluIGRlYnVnIG1vZGUsIHNvIHdlIGRvbid0IHdhbnQKLQkJICogZXZl biB0aGUgZGVidWcgYnVpbGRzIHRvIGJlIHRvbyBzbG93LgotCQkgKi8KLQkJY29uc3Qgc2l6ZV90 IG5jaGVja3MgPSA0OwotCQlhc3NlcnQoUEFHRSA+PSBzaXplb2Yoc2l6ZV90KSAqIG5jaGVja3Mp OwotCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5jaGVja3M7ICsraSkgewotCQkJYXNzZXJ0KHBb aSAqIChzaXplIC8gc2l6ZW9mKHNpemVfdCkgLyBuY2hlY2tzKV0gPT0gMCk7Ci0JCX0KLQl9Ci19 Ci0KLQotc3RhdGljIGlubGluZSB2b2lkICoKLWVob29rc19hbGxvYyh0c2RuX3QgKnRzZG4sIGVo b29rc190ICplaG9va3MsIHZvaWQgKm5ld19hZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3Qg YWxpZ25tZW50LCBib29sICp6ZXJvLCBib29sICpjb21taXQpIHsKLQlib29sIG9yaWdfemVybyA9 ICp6ZXJvOwotCXZvaWQgKnJldDsKLQlleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzID0gZWhv b2tzX2dldF9leHRlbnRfaG9va3NfcHRyKGVob29rcyk7Ci0JaWYgKGV4dGVudF9ob29rcyA9PSAm ZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzKSB7Ci0JCXJldCA9IGVob29rc19kZWZhdWx0X2Fs bG9jX2ltcGwodHNkbiwgbmV3X2FkZHIsIHNpemUsCi0JCSAgICBhbGlnbm1lbnQsIHplcm8sIGNv bW1pdCwgZWhvb2tzX2luZF9nZXQoZWhvb2tzKSk7Ci0JfSBlbHNlIHsKLQkJZWhvb2tzX3ByZV9y ZWVudHJhbmN5KHRzZG4pOwotCQlyZXQgPSBleHRlbnRfaG9va3MtPmFsbG9jKGV4dGVudF9ob29r cywgbmV3X2FkZHIsIHNpemUsCi0JCSAgICBhbGlnbm1lbnQsIHplcm8sIGNvbW1pdCwgZWhvb2tz X2luZF9nZXQoZWhvb2tzKSk7Ci0JCWVob29rc19wb3N0X3JlZW50cmFuY3kodHNkbik7Ci0JfQot CWFzc2VydChuZXdfYWRkciA9PSBOVUxMIHx8IHJldCA9PSBOVUxMIHx8IG5ld19hZGRyID09IHJl dCk7Ci0JYXNzZXJ0KCFvcmlnX3plcm8gfHwgKnplcm8pOwotCWlmICgqemVybyAmJiByZXQgIT0g TlVMTCkgewotCQllaG9va3NfZGVidWdfemVyb19jaGVjayhyZXQsIHNpemUpOwotCX0KLQlyZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWVob29rc19kYWxsb2ModHNkbl90ICp0 c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBib29s IGNvbW1pdHRlZCkgewotCWV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MgPSBlaG9va3NfZ2V0 X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsKLQlpZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3Nf ZGVmYXVsdF9leHRlbnRfaG9va3MpIHsKLQkJcmV0dXJuIGVob29rc19kZWZhdWx0X2RhbGxvY19p bXBsKGFkZHIsIHNpemUpOwotCX0gZWxzZSBpZiAoZXh0ZW50X2hvb2tzLT5kYWxsb2MgPT0gTlVM TCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9IGVsc2UgewotCQllaG9va3NfcHJlX3JlZW50cmFuY3ko dHNkbik7Ci0JCWJvb2wgZXJyID0gZXh0ZW50X2hvb2tzLT5kYWxsb2MoZXh0ZW50X2hvb2tzLCBh ZGRyLCBzaXplLAotCQkgICAgY29tbWl0dGVkLCBlaG9va3NfaW5kX2dldChlaG9va3MpKTsKLQkJ ZWhvb2tzX3Bvc3RfcmVlbnRyYW5jeSh0c2RuKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgdm9pZAotZWhvb2tzX2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBlaG9va3NfdCAq ZWhvb2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBib29sIGNvbW1pdHRlZCkgewot CWV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MgPSBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19w dHIoZWhvb2tzKTsKLQlpZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3NfZGVmYXVsdF9leHRlbnRf aG9va3MpIHsKLQkJZWhvb2tzX2RlZmF1bHRfZGVzdHJveV9pbXBsKGFkZHIsIHNpemUpOwotCX0g ZWxzZSBpZiAoZXh0ZW50X2hvb2tzLT5kZXN0cm95ID09IE5VTEwpIHsKLQkJLyogRG8gbm90aGlu Zy4gKi8KLQl9IGVsc2UgewotCQllaG9va3NfcHJlX3JlZW50cmFuY3kodHNkbik7Ci0JCWV4dGVu dF9ob29rcy0+ZGVzdHJveShleHRlbnRfaG9va3MsIGFkZHIsIHNpemUsIGNvbW1pdHRlZCwKLQkJ ICAgIGVob29rc19pbmRfZ2V0KGVob29rcykpOwotCQllaG9va3NfcG9zdF9yZWVudHJhbmN5KHRz ZG4pOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBib29sCi1laG9va3NfY29tbWl0KHRzZG5fdCAq dHNkbiwgZWhvb2tzX3QgKmVob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gICAgc2l6 ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgewotCWV4dGVudF9ob29rc190ICpleHRlbnRfaG9v a3MgPSBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsKLQlib29sIGVycjsKLQlp ZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MpIHsKLQkJZXJy ID0gZWhvb2tzX2RlZmF1bHRfY29tbWl0X2ltcGwoYWRkciwgb2Zmc2V0LCBsZW5ndGgpOwotCX0g ZWxzZSBpZiAoZXh0ZW50X2hvb2tzLT5jb21taXQgPT0gTlVMTCkgewotCQllcnIgPSB0cnVlOwot CX0gZWxzZSB7Ci0JCWVob29rc19wcmVfcmVlbnRyYW5jeSh0c2RuKTsKLQkJZXJyID0gZXh0ZW50 X2hvb2tzLT5jb21taXQoZXh0ZW50X2hvb2tzLCBhZGRyLCBzaXplLAotCQkgICAgb2Zmc2V0LCBs ZW5ndGgsIGVob29rc19pbmRfZ2V0KGVob29rcykpOwotCQllaG9va3NfcG9zdF9yZWVudHJhbmN5 KHRzZG4pOwotCX0KLQlpZiAoIWVycikgewotCQllaG9va3NfZGVidWdfemVyb19jaGVjayhhZGRy LCBzaXplKTsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1laG9v a3NfZGVjb21taXQodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2b2lkICphZGRyLCBz aXplX3Qgc2l6ZSwKLSAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSB7Ci0JZXh0ZW50 X2hvb2tzX3QgKmV4dGVudF9ob29rcyA9IGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9v a3MpOwotCWlmIChleHRlbnRfaG9va3MgPT0gJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcykg ewotCQlyZXR1cm4gZWhvb2tzX2RlZmF1bHRfZGVjb21taXRfaW1wbChhZGRyLCBvZmZzZXQsIGxl bmd0aCk7Ci0JfSBlbHNlIGlmIChleHRlbnRfaG9va3MtPmRlY29tbWl0ID09IE5VTEwpIHsKLQkJ cmV0dXJuIHRydWU7Ci0JfSBlbHNlIHsKLQkJZWhvb2tzX3ByZV9yZWVudHJhbmN5KHRzZG4pOwot CQlib29sIGVyciA9IGV4dGVudF9ob29rcy0+ZGVjb21taXQoZXh0ZW50X2hvb2tzLCBhZGRyLCBz aXplLAotCQkgICAgb2Zmc2V0LCBsZW5ndGgsIGVob29rc19pbmRfZ2V0KGVob29rcykpOwotCQll aG9va3NfcG9zdF9yZWVudHJhbmN5KHRzZG4pOwotCQlyZXR1cm4gZXJyOwotCX0KLX0KLQotc3Rh dGljIGlubGluZSBib29sCi1laG9va3NfcHVyZ2VfbGF6eSh0c2RuX3QgKnRzZG4sIGVob29rc190 ICplaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBvZmZzZXQsIHNp emVfdCBsZW5ndGgpIHsKLQlleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzID0gZWhvb2tzX2dl dF9leHRlbnRfaG9va3NfcHRyKGVob29rcyk7Ci0jaWZkZWYgUEFHRVNfQ0FOX1BVUkdFX0xBWlkK LQlpZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MpIHsKLQkJ cmV0dXJuIGVob29rc19kZWZhdWx0X3B1cmdlX2xhenlfaW1wbChhZGRyLCBvZmZzZXQsIGxlbmd0 aCk7Ci0JfQotI2VuZGlmCi0JaWYgKGV4dGVudF9ob29rcy0+cHVyZ2VfbGF6eSA9PSBOVUxMKSB7 Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSB7Ci0JCWVob29rc19wcmVfcmVlbnRyYW5jeSh0c2Ru KTsKLQkJYm9vbCBlcnIgPSBleHRlbnRfaG9va3MtPnB1cmdlX2xhenkoZXh0ZW50X2hvb2tzLCBh ZGRyLCBzaXplLAotCQkgICAgb2Zmc2V0LCBsZW5ndGgsIGVob29rc19pbmRfZ2V0KGVob29rcykp OwotCQllaG9va3NfcG9zdF9yZWVudHJhbmN5KHRzZG4pOwotCQlyZXR1cm4gZXJyOwotCX0KLX0K LQotc3RhdGljIGlubGluZSBib29sCi1laG9va3NfcHVyZ2VfZm9yY2VkKHRzZG5fdCAqdHNkbiwg ZWhvb2tzX3QgKmVob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IG9m ZnNldCwgc2l6ZV90IGxlbmd0aCkgewotCWV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MgPSBl aG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsKLQkvKgotCSAqIEl0IHdvdWxkIGJl IGNvcnJlY3QgdG8gaGF2ZSBhIGVob29rc19kZWJ1Z196ZXJvX2NoZWNrIGNhbGwgYXQgdGhlIGVu ZAotCSAqIG9mIHRoaXMgZnVuY3Rpb247IHB1cmdlX2ZvcmNlZCBpcyByZXF1aXJlZCB0byB6ZXJv LiAgQnV0IGNoZWNraW5nCi0JICogd291bGQgdG91Y2ggdGhlIHBhZ2UgaW4gcXVlc3Rpb24sIHdo aWNoIG1heSBoYXZlIHBlcmZvcm1hbmNlCi0JICogY29uc2VxdWVuY2VzIChpbWFnaW5lIHRoZSBo b29rcyBhcmUgdXNpbmcgaHVnZXBhZ2VzLCB3aXRoIGEgZ2xvYmFsCi0JICogemVybyBwYWdlIG9m ZikuICBFdmVuIGluIGRlYnVnIG1vZGUsIGl0J3MgdXN1YWxseSBhIGdvb2QgaWRlYSB0bwotCSAq IGF2b2lkIGNhc2VzIHRoYXQgY2FuIGRyYW1hdGljYWxseSBpbmNyZWFzZSBtZW1vcnkgY29uc3Vt cHRpb24uCi0JICovCi0jaWZkZWYgUEFHRVNfQ0FOX1BVUkdFX0ZPUkNFRAotCWlmIChleHRlbnRf aG9va3MgPT0gJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcykgewotCQlyZXR1cm4gZWhvb2tz X2RlZmF1bHRfcHVyZ2VfZm9yY2VkX2ltcGwoYWRkciwgb2Zmc2V0LCBsZW5ndGgpOwotCX0KLSNl bmRpZgotCWlmIChleHRlbnRfaG9va3MtPnB1cmdlX2ZvcmNlZCA9PSBOVUxMKSB7Ci0JCXJldHVy biB0cnVlOwotCX0gZWxzZSB7Ci0JCWVob29rc19wcmVfcmVlbnRyYW5jeSh0c2RuKTsKLQkJYm9v bCBlcnIgPSBleHRlbnRfaG9va3MtPnB1cmdlX2ZvcmNlZChleHRlbnRfaG9va3MsIGFkZHIsIHNp emUsCi0JCSAgICBvZmZzZXQsIGxlbmd0aCwgZWhvb2tzX2luZF9nZXQoZWhvb2tzKSk7Ci0JCWVo b29rc19wb3N0X3JlZW50cmFuY3kodHNkbik7Ci0JCXJldHVybiBlcnI7Ci0JfQotfQotCi1zdGF0 aWMgaW5saW5lIGJvb2wKLWVob29rc19zcGxpdCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9v a3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBzaXplX2EsIHNpemVfdCBz aXplX2IsIGJvb2wgY29tbWl0dGVkKSB7Ci0JZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcyA9 IGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9va3MpOwotCWlmIChlaG9va3NfYXJlX2Rl ZmF1bHQoZWhvb2tzKSkgewotCQlyZXR1cm4gZWhvb2tzX2RlZmF1bHRfc3BsaXRfaW1wbCgpOwot CX0gZWxzZSBpZiAoZXh0ZW50X2hvb2tzLT5zcGxpdCA9PSBOVUxMKSB7Ci0JCXJldHVybiB0cnVl OwotCX0gZWxzZSB7Ci0JCWVob29rc19wcmVfcmVlbnRyYW5jeSh0c2RuKTsKLQkJYm9vbCBlcnIg PSBleHRlbnRfaG9va3MtPnNwbGl0KGV4dGVudF9ob29rcywgYWRkciwgc2l6ZSwgc2l6ZV9hLAot CQkgICAgc2l6ZV9iLCBjb21taXR0ZWQsIGVob29rc19pbmRfZ2V0KGVob29rcykpOwotCQllaG9v a3NfcG9zdF9yZWVudHJhbmN5KHRzZG4pOwotCQlyZXR1cm4gZXJyOwotCX0KLX0KLQotc3RhdGlj IGlubGluZSBib29sCi1laG9va3NfbWVyZ2UodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tz LCB2b2lkICphZGRyX2EsIHNpemVfdCBzaXplX2EsCi0gICAgdm9pZCAqYWRkcl9iLCBzaXplX3Qg c2l6ZV9iLCBib29sIGNvbW1pdHRlZCkgewotCWV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3Mg PSBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsKLQlpZiAoZXh0ZW50X2hvb2tz ID09ICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MpIHsKLQkJcmV0dXJuIGVob29rc19kZWZh dWx0X21lcmdlX2ltcGwodHNkbiwgYWRkcl9hLCBhZGRyX2IpOwotCX0gZWxzZSBpZiAoZXh0ZW50 X2hvb2tzLT5tZXJnZSA9PSBOVUxMKSB7Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSB7Ci0JCWVo b29rc19wcmVfcmVlbnRyYW5jeSh0c2RuKTsKLQkJYm9vbCBlcnIgPSBleHRlbnRfaG9va3MtPm1l cmdlKGV4dGVudF9ob29rcywgYWRkcl9hLCBzaXplX2EsCi0JCSAgICBhZGRyX2IsIHNpemVfYiwg Y29tbWl0dGVkLCBlaG9va3NfaW5kX2dldChlaG9va3MpKTsKLQkJZWhvb2tzX3Bvc3RfcmVlbnRy YW5jeSh0c2RuKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAot ZWhvb2tzX3plcm8odHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2b2lkICphZGRyLCBz aXplX3Qgc2l6ZSkgewotCWV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MgPSBlaG9va3NfZ2V0 X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsKLQlpZiAoZXh0ZW50X2hvb2tzID09ICZlaG9va3Nf ZGVmYXVsdF9leHRlbnRfaG9va3MpIHsKLQkJZWhvb2tzX2RlZmF1bHRfemVyb19pbXBsKGFkZHIs IHNpemUpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEl0IHdvdWxkIGJlIGNvcnJlY3QgdG8gdHJ5 IHVzaW5nIHRoZSB1c2VyLXByb3ZpZGVkIHB1cmdlCi0JCSAqIGhvb2tzIChzaW5jZSB0aGV5IGFy ZSByZXF1aXJlZCB0byBoYXZlIHplcm9lZCB0aGUgZXh0ZW50IGlmCi0JCSAqIHRoZXkgaW5kaWNh dGUgc3VjY2VzcyksIGJ1dCB3ZSBkb24ndCBuZWNlc3NhcmlseSBrbm93IHRoZWlyCi0JCSAqIGNv c3QuICBXZSdsbCBiZSBjb25zZXJ2YXRpdmUgYW5kIHVzZSBtZW1zZXQuCi0JCSAqLwotCQltZW1z ZXQoYWRkciwgMCwgc2l6ZSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWVob29rc19n dWFyZCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIHZvaWQgKmd1YXJkMSwgdm9pZCAq Z3VhcmQyKSB7Ci0JYm9vbCBlcnI7Ci0JZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcyA9IGVo b29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihlaG9va3MpOwotCi0JaWYgKGV4dGVudF9ob29rcyA9 PSAmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzKSB7Ci0JCWVob29rc19kZWZhdWx0X2d1YXJk X2ltcGwoZ3VhcmQxLCBndWFyZDIpOwotCQllcnIgPSBmYWxzZTsKLQl9IGVsc2UgewotCQllcnIg PSB0cnVlOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotZWhv b2tzX3VuZ3VhcmQodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCB2b2lkICpndWFyZDEs IHZvaWQgKmd1YXJkMikgewotCWJvb2wgZXJyOwotCWV4dGVudF9ob29rc190ICpleHRlbnRfaG9v a3MgPSBlaG9va3NfZ2V0X2V4dGVudF9ob29rc19wdHIoZWhvb2tzKTsKLQotCWlmIChleHRlbnRf aG9va3MgPT0gJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcykgewotCQllaG9va3NfZGVmYXVs dF91bmd1YXJkX2ltcGwoZ3VhcmQxLCBndWFyZDIpOwotCQllcnIgPSBmYWxzZTsKLQl9IGVsc2Ug ewotCQllcnIgPSB0cnVlOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLSNlbmRpZiAvKiBKRU1B TExPQ19JTlRFUk5BTF9FSE9PS1NfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9lbWFwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0N2FmMzIuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9lbWFwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNTcgKzAsMCBA QAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FTUFQX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5U RVJOQUxfRU1BUF9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iYXNlLmgiCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcnRyZWUuaCIKLQotLyoKLSAqIE5vdGU6IEVuZHMgd2l0 aG91dCBhdCBzZW1pY29sb24sIHNvIHRoYXQKLSAqICAgICBFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RY OwotICogaW4gdXNlcyB3aWxsIGF2b2lkIGVtcHR5LXN0YXRlbWVudCB3YXJuaW5ncy4KLSAqLwot I2RlZmluZSBFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYCQkJCQkJXAotICAgIHJ0cmVlX2N0eF90IHJ0 cmVlX2N0eF9mYWxsYmFjazsJCQkJCVwKLSAgICBydHJlZV9jdHhfdCAqcnRyZWVfY3R4ID0gdHNk bl9ydHJlZV9jdHgodHNkbiwgJnJ0cmVlX2N0eF9mYWxsYmFjaykKLQotdHlwZWRlZiBzdHJ1Y3Qg ZW1hcF9zIGVtYXBfdDsKLXN0cnVjdCBlbWFwX3MgewotCXJ0cmVlX3QgcnRyZWU7Ci19OwotCi0v KiBVc2VkIHRvIHBhc3MgcnRyZWUgbG9va3VwIGNvbnRleHQgZG93biB0aGUgcGF0aC4gKi8KLXR5 cGVkZWYgc3RydWN0IGVtYXBfYWxsb2NfY3R4X3QgZW1hcF9hbGxvY19jdHhfdDsKLXN0cnVjdCBl bWFwX2FsbG9jX2N0eF90IHsKLQlzemluZF90IHN6aW5kOwotCWJvb2wgc2xhYjsKLX07Ci0KLXR5 cGVkZWYgc3RydWN0IGVtYXBfZnVsbF9hbGxvY19jdHhfcyBlbWFwX2Z1bGxfYWxsb2NfY3R4X3Q7 Ci1zdHJ1Y3QgZW1hcF9mdWxsX2FsbG9jX2N0eF9zIHsKLQlzemluZF90IHN6aW5kOwotCWJvb2wg c2xhYjsKLQllZGF0YV90ICplZGF0YTsKLX07Ci0KLWJvb2wgZW1hcF9pbml0KGVtYXBfdCAqZW1h cCwgYmFzZV90ICpiYXNlLCBib29sIHplcm9lZCk7Ci0KLXZvaWQgZW1hcF9yZW1hcCh0c2RuX3Qg KnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsIHN6aW5kX3Qgc3ppbmQsCi0gICAg Ym9vbCBzbGFiKTsKLQotdm9pZCBlbWFwX3VwZGF0ZV9lZGF0YV9zdGF0ZSh0c2RuX3QgKnRzZG4s IGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsCi0gICAgZXh0ZW50X3N0YXRlX3Qgc3RhdGUp OwotCi0vKgotICogVGhlIHR3byBhY3F1aXJlIGZ1bmN0aW9ucyBiZWxvdyBhbGxvdyBhY2Nlc3Np bmcgbmVpZ2hib3IgZWRhdGFzLCBpZiBpdCdzIHNhZmUKLSAqIGFuZCB2YWxpZCB0byBkbyBzbyAo aS5lLiBmcm9tIHRoZSBzYW1lIGFyZW5hLCBvZiB0aGUgc2FtZSBzdGF0ZSwgZXRjLikuICBUaGlz Ci0gKiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZWNhY2hlIGxvY2tzIGFyZSBzdGF0ZSBiYXNl ZCwgYW5kIG9ubHkgcHJvdGVjdAotICogZWRhdGFzIHdpdGggdGhlIHNhbWUgc3RhdGUuICBUaGVy ZWZvcmUgdGhlIG5laWdoYm9yIGVkYXRhJ3Mgc3RhdGUgbmVlZHMgdG8gYmUKLSAqIHZlcmlmaWVk IGZpcnN0LCBiZWZvcmUgY2hhc2luZyB0aGUgZWRhdGEgcG9pbnRlci4gIFRoZSByZXR1cm5lZCBl ZGF0YSB3aWxsIGJlCi0gKiBpbiBhbiBhY3F1aXJlZCBzdGF0ZSwgbWVhbmluZyBvdGhlciB0aHJl YWRzIHdpbGwgYmUgcHJldmVudGVkIGZyb20gYWNjZXNzaW5nCi0gKiBpdCwgZXZlbiBpZiB0ZWNo bmljYWxseSB0aGUgZWRhdGEgY2FuIHN0aWxsIGJlIGRpc2NvdmVyZWQgZnJvbSB0aGUgcnRyZWUu Ci0gKgotICogVGhpcyBtZWFucywgYXQgYW55IG1vbWVudCB3aGVuIGhvbGRpbmcgcG9pbnRlcnMg dG8gZWRhdGEsIGVpdGhlciBvbmUgb2YgdGhlCi0gKiBzdGF0ZSBiYXNlZCBsb2NrcyBpcyBoZWxk IChhbmQgdGhlIGVkYXRhcyBhcmUgYWxsIG9mIHRoZSBwcm90ZWN0ZWQgc3RhdGUpLCBvcgotICog dGhlIGVkYXRhcyBhcmUgaW4gYW4gYWNxdWlyZWQgc3RhdGUgKGUuZy4gaW4gYWN0aXZlIG9yIG1l cmdpbmcgc3RhdGUpLiAgVGhlCi0gKiBhY3F1aXJlIG9wZXJhdGlvbiBpdHNlbGYgKGNoYW5naW5n IHRoZSBlZGF0YSB0byBhbiBhY3F1aXJlZCBzdGF0ZSkgaXMgZG9uZQotICogdW5kZXIgdGhlIHN0 YXRlIGxvY2tzLgotICovCi1lZGF0YV90ICplbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9y KHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLAotICAgIGVkYXRhX3QgKmVkYXRhLCBleHRlbnRf cGFpX3QgcGFpLCBleHRlbnRfc3RhdGVfdCBleHBlY3RlZF9zdGF0ZSwKLSAgICBib29sIGZvcndh cmQpOwotZWRhdGFfdCAqZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWlnaGJvcl9leHBhbmQodHNk bl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsCi0gICAgZWRhdGFfdCAqZWRhdGEsIGV4dGVudF9wYWlf dCBwYWksIGV4dGVudF9zdGF0ZV90IGV4cGVjdGVkX3N0YXRlKTsKLXZvaWQgZW1hcF9yZWxlYXNl X2VkYXRhKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSwKLSAgICBl eHRlbnRfc3RhdGVfdCBuZXdfc3RhdGUpOwotCi0vKgotICogQXNzb2NpYXRlIHRoZSBnaXZlbiBl ZGF0YSB3aXRoIGl0cyBiZWdpbm5pbmcgYW5kIGVuZCBhZGRyZXNzLCBzZXR0aW5nIHRoZQotICog c3ppbmQgYW5kIHNsYWIgaW5mbyBhcHByb3ByaWF0ZWx5LgotICogUmV0dXJucyB0cnVlIG9uIGVy cm9yIChpLmUuIHJlc291cmNlIGV4aGF1c3Rpb24pLgotICovCi1ib29sIGVtYXBfcmVnaXN0ZXJf Ym91bmRhcnkodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhLAotICAg IHN6aW5kX3Qgc3ppbmQsIGJvb2wgc2xhYik7Ci0KLS8qCi0gKiBEb2VzIHRoZSBzYW1lIHRoaW5n LCBidXQgd2l0aCB0aGUgaW50ZXJpb3Igb2YgdGhlIHJhbmdlLCBmb3Igc2xhYgotICogYWxsb2Nh dGlvbnMuCi0gKgotICogWW91IG1pZ2h0IHdvbmRlciB3aHkgd2UgZG9uJ3QganVzdCBoYXZlIGEg c2luZ2xlIGVtYXBfcmVnaXN0ZXIgZnVuY3Rpb24gdGhhdAotICogZG9lcyBib3RoIGRlcGVuZGlu ZyBvbiB0aGUgdmFsdWUgb2YgJ3NsYWInLiAgVGhlIGFuc3dlciBpcyB0d29mb2xkOgotICogLSBB cyBhIHByYWN0aWNhbCBtYXR0ZXIsIGluIHBsYWNlcyBsaWtlIHRoZSBleHRyYWN0LT5zcGxpdC0+ Y29tbWl0IHBhdGh3YXksCi0gKiAgIHdlIGRlZmVyIHRoZSBpbnRlcmlvciBvcGVyYXRpb24gdW50 aWwgd2UncmUgc3VyZSB0aGF0IHRoZSBjb21taXQgd29uJ3QgZmFpbAotICogICAoYnV0IHdlIGhh dmUgdG8gcmVnaXN0ZXIgdGhlIHNwbGl0IGJvdW5kYXJpZXMgdGhlcmUpLgotICogLSBJbiBnZW5l cmFsLCB3ZSdyZSB0cnlpbmcgdG8gbW92ZSB0byBhIHdvcmxkIHdoZXJlIHRoZSBwYWdlLXNwZWNp ZmljCi0gKiAgIGFsbG9jYXRvciBkb2Vzbid0IGtub3cgYXMgbXVjaCBhYm91dCBob3cgdGhlIHBh Z2VzIGl0IGFsbG9jYXRlcyB3aWxsIGJlCi0gKiAgIHVzZWQsIGFuZCBwYXNzaW5nIGEgJ3NsYWIn IHBhcmFtZXRlciBldmVyeXdoZXJlIG1ha2VzIHRoYXQgbW9yZQotICogICBjb21wbGljYXRlZC4K LSAqCi0gKiBVbmxpa2UgdGhlIGJvdW5kYXJ5IHZlcnNpb24sIHRoaXMgZnVuY3Rpb24gY2FuJ3Qg ZmFpbDsgdGhpcyBpcyBiZWNhdXNlIHNsYWJzCi0gKiBjYW4ndCBnZXQgYmlnIGVub3VnaCB0byB0 b3VjaCBhIG5ldyBwYWdlIHRoYXQgbmVpdGhlciBvZiB0aGUgYm91bmRhcmllcwotICogdG91Y2hl ZCwgc28gbm8gYWxsb2NhdGlvbiBpcyBuZWNlc3NhcnkgdG8gZmlsbCB0aGUgaW50ZXJpb3Igb25j ZSB0aGUgYm91bmRhcnkKLSAqIGhhcyBiZWVuIHRvdWNoZWQuCi0gKi8KLXZvaWQgZW1hcF9yZWdp c3Rlcl9pbnRlcmlvcih0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEs Ci0gICAgc3ppbmRfdCBzemluZCk7Ci0KLXZvaWQgZW1hcF9kZXJlZ2lzdGVyX2JvdW5kYXJ5KHRz ZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSk7Ci12b2lkIGVtYXBfZGVy ZWdpc3Rlcl9pbnRlcmlvcih0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRh dGEpOwotCi10eXBlZGVmIHN0cnVjdCBlbWFwX3ByZXBhcmVfcyBlbWFwX3ByZXBhcmVfdDsKLXN0 cnVjdCBlbWFwX3ByZXBhcmVfcyB7Ci0JcnRyZWVfbGVhZl9lbG1fdCAqbGVhZF9lbG1fYTsKLQly dHJlZV9sZWFmX2VsbV90ICpsZWFkX2VsbV9iOwotCXJ0cmVlX2xlYWZfZWxtX3QgKnRyYWlsX2Vs bV9hOwotCXJ0cmVlX2xlYWZfZWxtX3QgKnRyYWlsX2VsbV9iOwotfTsKLQotLyoqCi0gKiBUaGVz ZSBmdW5jdGlvbnMgdGhlIGVtYXAgbWV0YWRhdGEgbWFuYWdlbWVudCBmb3IgbWVyZ2luZywgc3Bs aXR0aW5nLCBhbmQKLSAqIHJldXNpbmcgZXh0ZW50cy4gIEluIHBhcnRpY3VsYXIsIHRoZXkgc2V0 IHRoZSBib3VuZGFyeSBtYXBwaW5ncyBmcm9tCi0gKiBhZGRyZXNzZXMgdG8gZWRhdGFzLiAgSWYg dGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSB1c2VkIGFzIGEgc2xhYiwgeW91Ci0gKiBzdGlsbCBu ZWVkIHRvIGNhbGwgZW1hcF9yZWdpc3Rlcl9pbnRlcmlvciBvbiBpdCwgdGhvdWdoLgotICoKLSAq IFJlbWFwIHNpbXBseSBjaGFuZ2VzIHRoZSBzemluZCBhbmQgc2xhYiBzdGF0dXMgb2YgYW4gZXh0 ZW50J3MgYm91bmRhcnkKLSAqIG1hcHBpbmdzLiAgSWYgdGhlIGV4dGVudCBpcyBub3QgYSBzbGFi LCBpdCBkb2Vzbid0IGJvdGhlciB3aXRoIHVwZGF0aW5nIHRoZQotICogZW5kIG1hcHBpbmcgKHNp bmNlIGxvb2t1cHMgb25seSBvY2N1ciBpbiB0aGUgaW50ZXJpb3Igb2YgYW4gZXh0ZW50IGZvcgot ICogc2xhYnMpLiAgU2luY2UgdGhlIHN6aW5kIGFuZCBzbGFiIHN0YXR1cyBvbmx5IG1ha2Ugc2Vu c2UgZm9yIGFjdGl2ZSBleHRlbnRzLAotICogdGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hp bGUgYWN0aXZhdGluZyBvciBkZWFjdGl2YXRpbmcgYW4gZXh0ZW50LgotICoKLSAqIFNwbGl0IGFu ZCBtZXJnZSBoYXZlIGEgInByZXBhcmUiIGFuZCBhICJjb21taXQiIHBvcnRpb24uICBUaGUgcHJl cGFyZSBwb3J0aW9uCi0gKiBkb2VzIHRoZSBvcGVyYXRpb25zIHRoYXQgY2FuIGJlIGRvbmUgd2l0 aG91dCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBleHRlbnQKLSAqIGluIHF1ZXN0aW9uLCB3aGls ZSB0aGUgY29tbWl0IHZhcmlhbnQgcmVxdWlyZXMgZXhjbHVzaXZlIGFjY2VzcyB0byBtYWludGFp bgotICogdGhlIGVtYXAgaW52YXJpYW50cy4gIFRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FuIGZh aWwgaXMgZW1hcF9zcGxpdF9wcmVwYXJlLAotICogYW5kIGl0IHJldHVybnMgdHJ1ZSBvbiBmYWls dXJlIChhdCB3aGljaCBwb2ludCB0aGUgY2FsbGVyIHNob3VsZG4ndCBjb21taXQpLgotICoKLSAq IEluIGFsbCBjYXNlcywgImxlYWQiIHJlZmVycyB0byB0aGUgbG93ZXItYWRkcmVzc2VkIGV4dGVu dCwgYW5kIHRyYWlsIHRvIHRoZQotICogaGlnaGVyLWFkZHJlc3NlZCBvbmUuICBJdCdzIHRoZSBj YWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBzZXQgdGhlIGVkYXRhCi0gKiBzdGF0ZSBhcHByb3By aWF0ZWx5LgotICovCi1ib29sIGVtYXBfc3BsaXRfcHJlcGFyZSh0c2RuX3QgKnRzZG4sIGVtYXBf dCAqZW1hcCwgZW1hcF9wcmVwYXJlX3QgKnByZXBhcmUsCi0gICAgZWRhdGFfdCAqZWRhdGEsIHNp emVfdCBzaXplX2EsIGVkYXRhX3QgKnRyYWlsLCBzaXplX3Qgc2l6ZV9iKTsKLXZvaWQgZW1hcF9z cGxpdF9jb21taXQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVtYXBfcHJlcGFyZV90ICpw cmVwYXJlLAotICAgIGVkYXRhX3QgKmxlYWQsIHNpemVfdCBzaXplX2EsIGVkYXRhX3QgKnRyYWls LCBzaXplX3Qgc2l6ZV9iKTsKLXZvaWQgZW1hcF9tZXJnZV9wcmVwYXJlKHRzZG5fdCAqdHNkbiwg ZW1hcF90ICplbWFwLCBlbWFwX3ByZXBhcmVfdCAqcHJlcGFyZSwKLSAgICBlZGF0YV90ICpsZWFk LCBlZGF0YV90ICp0cmFpbCk7Ci12b2lkIGVtYXBfbWVyZ2VfY29tbWl0KHRzZG5fdCAqdHNkbiwg ZW1hcF90ICplbWFwLCBlbWFwX3ByZXBhcmVfdCAqcHJlcGFyZSwKLSAgICBlZGF0YV90ICpsZWFk LCBlZGF0YV90ICp0cmFpbCk7Ci0KLS8qIEFzc2VydCB0aGF0IHRoZSBlbWFwJ3MgdmlldyBvZiB0 aGUgZ2l2ZW4gZWRhdGEgbWF0Y2hlcyB0aGUgZWRhdGEncyB2aWV3LiAqLwotdm9pZCBlbWFwX2Rv X2Fzc2VydF9tYXBwZWQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRh KTsKLXN0YXRpYyBpbmxpbmUgdm9pZAotZW1hcF9hc3NlcnRfbWFwcGVkKHRzZG5fdCAqdHNkbiwg ZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSkgewotCWlmIChjb25maWdfZGVidWcpIHsKLQkJ ZW1hcF9kb19hc3NlcnRfbWFwcGVkKHRzZG4sIGVtYXAsIGVkYXRhKTsKLQl9Ci19Ci0KLS8qIEFz c2VydCB0aGF0IHRoZSBnaXZlbiBlZGF0YSBpc24ndCBpbiB0aGUgbWFwLiAqLwotdm9pZCBlbWFw X2RvX2Fzc2VydF9ub3RfbWFwcGVkKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90 ICplZGF0YSk7Ci1zdGF0aWMgaW5saW5lIHZvaWQKLWVtYXBfYXNzZXJ0X25vdF9tYXBwZWQodHNk bl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhKSB7Ci0JaWYgKGNvbmZpZ19k ZWJ1ZykgewotCQllbWFwX2RvX2Fzc2VydF9ub3RfbWFwcGVkKHRzZG4sIGVtYXAsIGVkYXRhKTsK LQl9Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotZW1hcF9lZGF0YV9pbl90cmFu c2l0aW9uKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSkgewotCWFz c2VydChjb25maWdfZGVidWcpOwotCWVtYXBfYXNzZXJ0X21hcHBlZCh0c2RuLCBlbWFwLCBlZGF0 YSk7Ci0KLQlFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYOwotCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVu dHMgPSBydHJlZV9yZWFkKHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVfY3R4LAotCSAgICAodWlu dHB0cl90KWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSk7Ci0KLQlyZXR1cm4gZWRhdGFfc3RhdGVfaW5f dHJhbnNpdGlvbihjb250ZW50cy5tZXRhZGF0YS5zdGF0ZSk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgYm9vbAotZW1hcF9lZGF0YV9pc19hY3F1aXJlZCh0c2RuX3QgKnRzZG4sIGVtYXBf dCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEpIHsKLQlpZiAoIWNvbmZpZ19kZWJ1ZykgewotCQkvKiBG b3IgYXNzZXJ0aW9ucyBvbmx5LiAqLwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBU aGUgZWRhdGEgaXMgY29uc2lkZXJlZCBhY3F1aXJlZCBpZiBubyBvdGhlciB0aHJlYWRzIHdpbGwg YXR0ZW1wdCB0bwotCSAqIHJlYWQgLyB3cml0ZSBhbnkgZmllbGRzIGZyb20gaXQuICBUaGlzIGlu Y2x1ZGVzIGEgZmV3IGNhc2VzOgotCSAqCi0JICogMSkgZWRhdGEgbm90IGhvb2tlZCBpbnRvIGVt YXAgeWV0IC0tIFRoaXMgaW1wbGllcyB0aGUgZWRhdGEganVzdCBnb3QKLQkgKiBhbGxvY2F0ZWQg b3IgaW5pdGlhbGl6ZWQuCi0JICoKLQkgKiAyKSBpbiBhbiBhY3RpdmUgb3IgdHJhbnNpdGlvbiBz dGF0ZSAtLSBJbiBib3RoIGNhc2VzLCB0aGUgZWRhdGEgY2FuCi0JICogYmUgZGlzY292ZXJlZCBm cm9tIHRoZSBlbWFwLCBob3dldmVyIHRoZSBzdGF0ZSB0cmFja2VkIGluIHRoZSBydHJlZQotCSAq IHdpbGwgcHJldmVudCBvdGhlciB0aHJlYWRzIGZyb20gYWNjZXNzaW5nIHRoZSBhY3R1YWwgZWRh dGEuCi0JICovCi0JRU1BUF9ERUNMQVJFX1JUUkVFX0NUWDsKLQlydHJlZV9sZWFmX2VsbV90ICpl bG0gPSBydHJlZV9sZWFmX2VsbV9sb29rdXAodHNkbiwgJmVtYXAtPnJ0cmVlLAotCSAgICBydHJl ZV9jdHgsICh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpLCAvKiBkZXBlbmRlbnQgKi8g dHJ1ZSwKLQkgICAgLyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsKLQlpZiAoZWxtID09IE5VTEwp IHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHMgPSBydHJl ZV9sZWFmX2VsbV9yZWFkKHRzZG4sICZlbWFwLT5ydHJlZSwgZWxtLAotCSAgICAvKiBkZXBlbmRl bnQgKi8gdHJ1ZSk7Ci0JaWYgKGNvbnRlbnRzLmVkYXRhID09IE5VTEwgfHwKLQkgICAgY29udGVu dHMubWV0YWRhdGEuc3RhdGUgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSB8fAotCSAgICBlZGF0YV9z dGF0ZV9pbl90cmFuc2l0aW9uKGNvbnRlbnRzLm1ldGFkYXRhLnN0YXRlKSkgewotCQlyZXR1cm4g dHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUg dm9pZAotZXh0ZW50X2Fzc2VydF9jYW5fY29hbGVzY2UoY29uc3QgZWRhdGFfdCAqaW5uZXIsIGNv bnN0IGVkYXRhX3QgKm91dGVyKSB7Ci0JYXNzZXJ0KGVkYXRhX2FyZW5hX2luZF9nZXQoaW5uZXIp ID09IGVkYXRhX2FyZW5hX2luZF9nZXQob3V0ZXIpKTsKLQlhc3NlcnQoZWRhdGFfcGFpX2dldChp bm5lcikgPT0gZWRhdGFfcGFpX2dldChvdXRlcikpOwotCWFzc2VydChlZGF0YV9jb21taXR0ZWRf Z2V0KGlubmVyKSA9PSBlZGF0YV9jb21taXR0ZWRfZ2V0KG91dGVyKSk7Ci0JYXNzZXJ0KGVkYXRh X3N0YXRlX2dldChpbm5lcikgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSk7Ci0JYXNzZXJ0KGVkYXRh X3N0YXRlX2dldChvdXRlcikgPT0gZXh0ZW50X3N0YXRlX21lcmdpbmcpOwotCWFzc2VydCghZWRh dGFfZ3VhcmRlZF9nZXQoaW5uZXIpICYmICFlZGF0YV9ndWFyZGVkX2dldChvdXRlcikpOwotCWFz c2VydChlZGF0YV9iYXNlX2dldChpbm5lcikgPT0gZWRhdGFfcGFzdF9nZXQob3V0ZXIpIHx8Ci0J ICAgIGVkYXRhX2Jhc2VfZ2V0KG91dGVyKSA9PSBlZGF0YV9wYXN0X2dldChpbm5lcikpOwotfQot Ci1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLWV4dGVudF9hc3NlcnRfY2FuX2V4cGFuZChj b25zdCBlZGF0YV90ICpvcmlnaW5hbCwgY29uc3QgZWRhdGFfdCAqZXhwYW5kKSB7Ci0JYXNzZXJ0 KGVkYXRhX2FyZW5hX2luZF9nZXQob3JpZ2luYWwpID09IGVkYXRhX2FyZW5hX2luZF9nZXQoZXhw YW5kKSk7Ci0JYXNzZXJ0KGVkYXRhX3BhaV9nZXQob3JpZ2luYWwpID09IGVkYXRhX3BhaV9nZXQo ZXhwYW5kKSk7Ci0JYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChvcmlnaW5hbCkgPT0gZXh0ZW50X3N0 YXRlX2FjdGl2ZSk7Ci0JYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChleHBhbmQpID09IGV4dGVudF9z dGF0ZV9tZXJnaW5nKTsKLQlhc3NlcnQoZWRhdGFfcGFzdF9nZXQob3JpZ2luYWwpID09IGVkYXRh X2Jhc2VfZ2V0KGV4cGFuZCkpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGVkYXRhX3Qg KgotZW1hcF9lZGF0YV9sb29rdXAodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGNvbnN0IHZv aWQgKnB0cikgewotCUVNQVBfREVDTEFSRV9SVFJFRV9DVFg7Ci0KLQlyZXR1cm4gcnRyZWVfcmVh ZCh0c2RuLCAmZW1hcC0+cnRyZWUsIHJ0cmVlX2N0eCwgKHVpbnRwdHJfdClwdHIpLmVkYXRhOwot fQotCi0vKiBGaWxscyBpbiBhbGxvY19jdHggd2l0aCB0aGUgaW5mbyBpbiB0aGUgbWFwLiAqLwot SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1lbWFwX2FsbG9jX2N0eF9sb29rdXAodHNkbl90 ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGNvbnN0IHZvaWQgKnB0ciwKLSAgICBlbWFwX2FsbG9jX2N0 eF90ICphbGxvY19jdHgpIHsKLQlFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYOwotCi0JcnRyZWVfbWV0 YWRhdGFfdCBtZXRhZGF0YSA9IHJ0cmVlX21ldGFkYXRhX3JlYWQodHNkbiwgJmVtYXAtPnJ0cmVl LAotCSAgICBydHJlZV9jdHgsICh1aW50cHRyX3QpcHRyKTsKLQlhbGxvY19jdHgtPnN6aW5kID0g bWV0YWRhdGEuc3ppbmQ7Ci0JYWxsb2NfY3R4LT5zbGFiID0gbWV0YWRhdGEuc2xhYjsKLX0KLQot LyogVGhlIHBvaW50ZXIgbXVzdCBiZSBtYXBwZWQuICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5F IHZvaWQKLWVtYXBfZnVsbF9hbGxvY19jdHhfbG9va3VwKHRzZG5fdCAqdHNkbiwgZW1hcF90ICpl bWFwLCBjb25zdCB2b2lkICpwdHIsCi0gICAgZW1hcF9mdWxsX2FsbG9jX2N0eF90ICpmdWxsX2Fs bG9jX2N0eCkgewotCUVNQVBfREVDTEFSRV9SVFJFRV9DVFg7Ci0KLQlydHJlZV9jb250ZW50c190 IGNvbnRlbnRzID0gcnRyZWVfcmVhZCh0c2RuLCAmZW1hcC0+cnRyZWUsIHJ0cmVlX2N0eCwKLQkg ICAgKHVpbnRwdHJfdClwdHIpOwotCWZ1bGxfYWxsb2NfY3R4LT5lZGF0YSA9IGNvbnRlbnRzLmVk YXRhOwotCWZ1bGxfYWxsb2NfY3R4LT5zemluZCA9IGNvbnRlbnRzLm1ldGFkYXRhLnN6aW5kOwot CWZ1bGxfYWxsb2NfY3R4LT5zbGFiID0gY29udGVudHMubWV0YWRhdGEuc2xhYjsKLX0KLQotLyoK LSAqIFRoZSBwb2ludGVyIGlzIGFsbG93ZWQgdG8gbm90IGJlIG1hcHBlZC4KLSAqCi0gKiBSZXR1 cm5zIHRydWUgd2hlbiB0aGUgcG9pbnRlciBpcyBub3QgcHJlc2VudC4KLSAqLwotSkVNQUxMT0Nf QUxXQVlTX0lOTElORSBib29sCi1lbWFwX2Z1bGxfYWxsb2NfY3R4X3RyeV9sb29rdXAodHNkbl90 ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGNvbnN0IHZvaWQgKnB0ciwKLSAgICBlbWFwX2Z1bGxfYWxs b2NfY3R4X3QgKmZ1bGxfYWxsb2NfY3R4KSB7Ci0JRU1BUF9ERUNMQVJFX1JUUkVFX0NUWDsKLQot CXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHM7Ci0JYm9vbCBlcnIgPSBydHJlZV9yZWFkX2luZGVw ZW5kZW50KHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVfY3R4LAotCSAgICAodWludHB0cl90KXB0 ciwgJmNvbnRlbnRzKTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlmdWxsX2Fs bG9jX2N0eC0+ZWRhdGEgPSBjb250ZW50cy5lZGF0YTsKLQlmdWxsX2FsbG9jX2N0eC0+c3ppbmQg PSBjb250ZW50cy5tZXRhZGF0YS5zemluZDsKLQlmdWxsX2FsbG9jX2N0eC0+c2xhYiA9IGNvbnRl bnRzLm1ldGFkYXRhLnNsYWI7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0vKgotICogT25seSB1c2Vk IG9uIHRoZSBmYXN0cGF0aCBvZiBmcmVlLiAgUmV0dXJucyB0cnVlIHdoZW4gY2Fubm90IGJlIGZ1 bGZpbGxlZCBieQotICogZmFzdCBwYXRoLCBlLmcuIHdoZW4gdGhlIG1ldGFkYXRhIGtleSBpcyBu b3QgY2FjaGVkLgotICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLWVtYXBfYWxsb2Nf Y3R4X3RyeV9sb29rdXBfZmFzdCh0c2RfdCAqdHNkLCBlbWFwX3QgKmVtYXAsIGNvbnN0IHZvaWQg KnB0ciwKLSAgICBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsKLQkvKiBVc2UgdGhlIHVu c2FmZSBnZXR0ZXIgc2luY2UgdGhpcyBtYXkgZ2V0cyBjYWxsZWQgZHVyaW5nIGV4aXQuICovCi0J cnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCA9IHRzZF9ydHJlZV9jdHhwX2dldF91bnNhZmUodHNkKTsK LQotCXJ0cmVlX21ldGFkYXRhX3QgbWV0YWRhdGE7Ci0JYm9vbCBlcnIgPSBydHJlZV9tZXRhZGF0 YV90cnlfcmVhZF9mYXN0KHRzZF90c2RuKHRzZCksICZlbWFwLT5ydHJlZSwKLQkgICAgcnRyZWVf Y3R4LCAodWludHB0cl90KXB0ciwgJm1ldGFkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiB0 cnVlOwotCX0KLQlhbGxvY19jdHgtPnN6aW5kID0gbWV0YWRhdGEuc3ppbmQ7Ci0JYWxsb2NfY3R4 LT5zbGFiID0gbWV0YWRhdGEuc2xhYjsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBXZSB3 YW50IHRvIGRvIGJhdGNoIGxvb2t1cHMgb3V0IG9mIHRoZSBjYWNoZSBiaW5zLCB3aGljaCB1c2UK LSAqIGNhY2hlX2Jpbl9wdHJfYXJyYXlfZ2V0IHRvIGFjY2VzcyB0aGUgaSd0aCBlbGVtZW50IG9m IHRoZSBiaW4gKHNpbmNlIHRoZXkKLSAqIGludmVydCB1c3VhbCBvcmRlcmluZyBpbiBkZWNpZGlu ZyB3aGF0IHRvIGZsdXNoKS4gIFRoaXMgbGV0cyB0aGUgZW1hcCBhdm9pZAotICogY2FyaW5nIGFi b3V0IGl0cyBjYWxsZXIncyBvcmRlcmluZy4KLSAqLwotdHlwZWRlZiBjb25zdCB2b2lkICooKmVt YXBfcHRyX2dldHRlcikodm9pZCAqY3R4LCBzaXplX3QgaW5kKTsKLS8qCi0gKiBUaGlzIGFsbG93 cyBzaXplLWNoZWNraW5nIGFzc2VydGlvbnMsIHdoaWNoIHdlIGNhbiBvbmx5IGRvIHdoaWxlIHdl J3JlIGluIHRoZQotICogcHJvY2VzcyBvZiBlZGF0YSBsb29rdXBzLgotICovCi10eXBlZGVmIHZv aWQgKCplbWFwX21ldGFkYXRhX3Zpc2l0b3IpKHZvaWQgKmN0eCwgZW1hcF9mdWxsX2FsbG9jX2N0 eF90ICphbGxvY19jdHgpOwotCi10eXBlZGVmIHVuaW9uIGVtYXBfYmF0Y2hfbG9va3VwX3Jlc3Vs dF91IGVtYXBfYmF0Y2hfbG9va3VwX3Jlc3VsdF90OwotdW5pb24gZW1hcF9iYXRjaF9sb29rdXBf cmVzdWx0X3UgewotCWVkYXRhX3QgKmVkYXRhOwotCXJ0cmVlX2xlYWZfZWxtX3QgKnJ0cmVlX2xl YWY7Ci19OwotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLWVtYXBfZWRhdGFfbG9va3Vw X2JhdGNoKHRzZF90ICp0c2QsIGVtYXBfdCAqZW1hcCwgc2l6ZV90IG5wdHJzLAotICAgIGVtYXBf cHRyX2dldHRlciBwdHJfZ2V0dGVyLCB2b2lkICpwdHJfZ2V0dGVyX2N0eCwKLSAgICBlbWFwX21l dGFkYXRhX3Zpc2l0b3IgbWV0YWRhdGFfdmlzaXRvciwgdm9pZCAqbWV0YWRhdGFfdmlzaXRvcl9j dHgsCi0gICAgZW1hcF9iYXRjaF9sb29rdXBfcmVzdWx0X3QgKnJlc3VsdCkgewotCS8qIEF2b2lk cyBudWxsLWNoZWNraW5nIHRzZG4gaW4gdGhlIGxvb3AgYmVsb3cuICovCi0JdXRpbF9hc3N1bWUo dHNkICE9IE5VTEwpOwotCXJ0cmVlX2N0eF90ICpydHJlZV9jdHggPSB0c2RfcnRyZWVfY3R4cF9n ZXQodHNkKTsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnB0cnM7IGkrKykgewotCQljb25z dCB2b2lkICpwdHIgPSBwdHJfZ2V0dGVyKHB0cl9nZXR0ZXJfY3R4LCBpKTsKLQkJLyoKLQkJICog UmV1c2UgdGhlIGVkYXRhcyBhcnJheSBhcyBhIHRlbXAgYnVmZmVyLCBseWluZyBhIGxpdHRsZSBh Ym91dAotCQkgKiB0aGUgdHlwZXMuCi0JCSAqLwotCQlyZXN1bHRbaV0ucnRyZWVfbGVhZiA9IHJ0 cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2RfdHNkbih0c2QpLAotCQkgICAgJmVtYXAtPnJ0cmVlLCBy dHJlZV9jdHgsICh1aW50cHRyX3QpcHRyLAotCQkgICAgLyogZGVwZW5kZW50ICovIHRydWUsIC8q IGluaXRfbWlzc2luZyAqLyBmYWxzZSk7Ci0JfQotCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu cHRyczsgaSsrKSB7Ci0JCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJlc3VsdFtpXS5ydHJlZV9s ZWFmOwotCQlydHJlZV9jb250ZW50c190IGNvbnRlbnRzID0gcnRyZWVfbGVhZl9lbG1fcmVhZCh0 c2RfdHNkbih0c2QpLAotCQkgICAgJmVtYXAtPnJ0cmVlLCBlbG0sIC8qIGRlcGVuZGVudCAqLyB0 cnVlKTsKLQkJcmVzdWx0W2ldLmVkYXRhID0gY29udGVudHMuZWRhdGE7Ci0JCWVtYXBfZnVsbF9h bGxvY19jdHhfdCBhbGxvY19jdHg7Ci0JCS8qCi0JCSAqIE5vdCBhbGwgdGhlc2UgZmllbGRzIGFy ZSByZWFkIGluIHByYWN0aWNlIGJ5IHRoZSBtZXRhZGF0YQotCQkgKiB2aXNpdG9yLiAgQnV0IHRo ZSBjb21waWxlciBjYW4gZWFzaWx5IG9wdGltaXplIGF3YXkgdGhlIG9uZXMKLQkJICogdGhhdCBh cmVuJ3QsIHNvIG5vIHNlbnNlIGluIGJlaW5nIGluY29tcGxldGUuCi0JCSAqLwotCQlhbGxvY19j dHguc3ppbmQgPSBjb250ZW50cy5tZXRhZGF0YS5zemluZDsKLQkJYWxsb2NfY3R4LnNsYWIgPSBj b250ZW50cy5tZXRhZGF0YS5zbGFiOwotCQlhbGxvY19jdHguZWRhdGEgPSBjb250ZW50cy5lZGF0 YTsKLQkJbWV0YWRhdGFfdmlzaXRvcihtZXRhZGF0YV92aXNpdG9yX2N0eCwgJmFsbG9jX2N0eCk7 Ci0JfQotfQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRU1BUF9IICovCgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9lbWl0dGVyLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VtaXR0ZXIuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggOTQ4MmY2OC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2VtaXR0ZXIu aAorKysgL2Rldi9udWxsCkBAIC0xLDUxMCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVS TkFMX0VNSVRURVJfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9FTUlUVEVSX0gKLQotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3FsLmgiCi0KLXR5cGVkZWYgZW51bSBlbWl0dGVyX291 dHB1dF9lIGVtaXR0ZXJfb3V0cHV0X3Q7Ci1lbnVtIGVtaXR0ZXJfb3V0cHV0X2UgewotCWVtaXR0 ZXJfb3V0cHV0X2pzb24sCi0JZW1pdHRlcl9vdXRwdXRfanNvbl9jb21wYWN0LAotCWVtaXR0ZXJf b3V0cHV0X3RhYmxlCi19OwotCi10eXBlZGVmIGVudW0gZW1pdHRlcl9qdXN0aWZ5X2UgZW1pdHRl cl9qdXN0aWZ5X3Q7Ci1lbnVtIGVtaXR0ZXJfanVzdGlmeV9lIHsKLQllbWl0dGVyX2p1c3RpZnlf bGVmdCwKLQllbWl0dGVyX2p1c3RpZnlfcmlnaHQsCi0JLyogTm90IGZvciB1c2VyczsganVzdCB0 byBwYXNzIHRvIGludGVybmFsIGZ1bmN0aW9ucy4gKi8KLQllbWl0dGVyX2p1c3RpZnlfbm9uZQot fTsKLQotdHlwZWRlZiBlbnVtIGVtaXR0ZXJfdHlwZV9lIGVtaXR0ZXJfdHlwZV90OwotZW51bSBl bWl0dGVyX3R5cGVfZSB7Ci0JZW1pdHRlcl90eXBlX2Jvb2wsCi0JZW1pdHRlcl90eXBlX2ludCwK LQllbWl0dGVyX3R5cGVfaW50NjQsCi0JZW1pdHRlcl90eXBlX3Vuc2lnbmVkLAotCWVtaXR0ZXJf dHlwZV91aW50MzIsCi0JZW1pdHRlcl90eXBlX3VpbnQ2NCwKLQllbWl0dGVyX3R5cGVfc2l6ZSwK LQllbWl0dGVyX3R5cGVfc3NpemUsCi0JZW1pdHRlcl90eXBlX3N0cmluZywKLQkvKgotCSAqIEEg dGl0bGUgaXMgYSBjb2x1bW4gdGl0bGUgaW4gYSB0YWJsZTsgaXQncyBqdXN0IGEgc3RyaW5nLCBi dXQgaXQncwotCSAqIG5vdCBxdW90ZWQuCi0JICovCi0JZW1pdHRlcl90eXBlX3RpdGxlLAotfTsK LQotdHlwZWRlZiBzdHJ1Y3QgZW1pdHRlcl9jb2xfcyBlbWl0dGVyX2NvbF90Owotc3RydWN0IGVt aXR0ZXJfY29sX3MgewotCS8qIEZpbGxlZCBpbiBieSB0aGUgdXNlci4gKi8KLQllbWl0dGVyX2p1 c3RpZnlfdCBqdXN0aWZ5OwotCWludCB3aWR0aDsKLQllbWl0dGVyX3R5cGVfdCB0eXBlOwotCXVu aW9uIHsKLQkJYm9vbCBib29sX3ZhbDsKLQkJaW50IGludF92YWw7Ci0JCXVuc2lnbmVkIHVuc2ln bmVkX3ZhbDsKLQkJdWludDMyX3QgdWludDMyX3ZhbDsKLQkJdWludDMyX3QgdWludDMyX3RfdmFs OwotCQl1aW50NjRfdCB1aW50NjRfdmFsOwotCQl1aW50NjRfdCB1aW50NjRfdF92YWw7Ci0JCXNp emVfdCBzaXplX3ZhbDsKLQkJc3NpemVfdCBzc2l6ZV92YWw7Ci0JCWNvbnN0IGNoYXIgKnN0cl92 YWw7Ci0JfTsKLQotCS8qIEZpbGxlZCBpbiBieSBpbml0aWFsaXphdGlvbi4gKi8KLQlxbF9lbG0o ZW1pdHRlcl9jb2xfdCkgbGluazsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IGVtaXR0ZXJfcm93X3Mg ZW1pdHRlcl9yb3dfdDsKLXN0cnVjdCBlbWl0dGVyX3Jvd19zIHsKLQlxbF9oZWFkKGVtaXR0ZXJf Y29sX3QpIGNvbHM7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBlbWl0dGVyX3MgZW1pdHRlcl90Owot c3RydWN0IGVtaXR0ZXJfcyB7Ci0JZW1pdHRlcl9vdXRwdXRfdCBvdXRwdXQ7Ci0JLyogVGhlIG91 dHB1dCBpbmZvcm1hdGlvbi4gKi8KLQl3cml0ZV9jYl90ICp3cml0ZV9jYjsKLQl2b2lkICpjYm9w YXF1ZTsKLQlpbnQgbmVzdGluZ19kZXB0aDsKLQkvKiBUcnVlIGlmIHdlJ3ZlIGFscmVhZHkgZW1p dHRlZCBhIHZhbHVlIGF0IHRoZSBnaXZlbiBkZXB0aC4gKi8KLQlib29sIGl0ZW1fYXRfZGVwdGg7 Ci0JLyogVHJ1ZSBpZiB3ZSBlbWl0dGVkIGEga2V5IGFuZCB3aWxsIGVtaXQgY29ycmVzcG9uZGlu ZyB2YWx1ZSBuZXh0LiAqLwotCWJvb2wgZW1pdHRlZF9rZXk7Ci19OwotCi1zdGF0aWMgaW5saW5l IGJvb2wKLWVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXJfdCAqZW1pdHRlcikgewotCXJldHVy biBlbWl0dGVyLT5vdXRwdXQgPT0gZW1pdHRlcl9vdXRwdXRfanNvbiB8fAotCSAgICBlbWl0dGVy LT5vdXRwdXQgPT0gZW1pdHRlcl9vdXRwdXRfanNvbl9jb21wYWN0OwotfQotCi0vKiBJbnRlcm5h bCBjb252ZW5pZW5jZSBmdW5jdGlvbi4gIFdyaXRlIHRvIHRoZSBlbWl0dGVyIHRoZSBnaXZlbiBz dHJpbmcuICovCi1KRU1BTExPQ19GT1JNQVRfUFJJTlRGKDIsIDMpCi1zdGF0aWMgaW5saW5lIHZv aWQKLWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXJfdCAqZW1pdHRlciwgY29uc3QgY2hhciAqZm9ybWF0 LCAuLi4pIHsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JbWFsbG9j X3ZjcHJpbnRmKGVtaXR0ZXItPndyaXRlX2NiLCBlbWl0dGVyLT5jYm9wYXF1ZSwgZm9ybWF0LCBh cCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICogSkVNQUxM T0NfRk9STUFUX0FSRygzKQotZW1pdHRlcl9nZW5fZm10KGNoYXIgKm91dF9mbXQsIHNpemVfdCBv dXRfc2l6ZSwgY29uc3QgY2hhciAqZm10X3NwZWNpZmllciwKLSAgICBlbWl0dGVyX2p1c3RpZnlf dCBqdXN0aWZ5LCBpbnQgd2lkdGgpIHsKLQlzaXplX3Qgd3JpdHRlbjsKLQlmbXRfc3BlY2lmaWVy Kys7Ci0JaWYgKGp1c3RpZnkgPT0gZW1pdHRlcl9qdXN0aWZ5X25vbmUpIHsKLQkJd3JpdHRlbiA9 IG1hbGxvY19zbnByaW50ZihvdXRfZm10LCBvdXRfc2l6ZSwKLQkJICAgICIlJSVzIiwgZm10X3Nw ZWNpZmllcik7Ci0JfSBlbHNlIGlmIChqdXN0aWZ5ID09IGVtaXR0ZXJfanVzdGlmeV9sZWZ0KSB7 Ci0JCXdyaXR0ZW4gPSBtYWxsb2Nfc25wcmludGYob3V0X2ZtdCwgb3V0X3NpemUsCi0JCSAgICAi JSUtJWQlcyIsIHdpZHRoLCBmbXRfc3BlY2lmaWVyKTsKLQl9IGVsc2UgewotCQl3cml0dGVuID0g bWFsbG9jX3NucHJpbnRmKG91dF9mbXQsIG91dF9zaXplLAotCQkgICAgIiUlJWQlcyIsIHdpZHRo LCBmbXRfc3BlY2lmaWVyKTsKLQl9Ci0JLyogT25seSBoYXBwZW5zIGluIGNhc2Ugb2YgYmFkIGZv cm1hdCBzdHJpbmcsIHdoaWNoICp3ZSogY2hvb3NlLiAqLwotCWFzc2VydCh3cml0dGVuIDwgIG91 dF9zaXplKTsKLQlyZXR1cm4gb3V0X2ZtdDsKLX0KLQotLyoKLSAqIEludGVybmFsLiAgRW1pdCB0 aGUgZ2l2ZW4gdmFsdWUgdHlwZSBpbiB0aGUgcmVsZXZhbnQgZW5jb2RpbmcgKHNvIHRoYXQgdGhl Ci0gKiBib29sIHRydWUgZ2V0cyBtYXBwZWQgdG8ganNvbiAidHJ1ZSIsIGJ1dCB0aGUgc3RyaW5n ICJ0cnVlIiBnZXRzIG1hcHBlZCB0bwotICoganNvbiAiXCJ0cnVlXCIiLCBmb3IgaW5zdGFuY2Uu Ci0gKgotICogV2lkdGggaXMgaWdub3JlZCBpZiBqdXN0aWZ5IGlzIGVtaXR0ZXJfanVzdGlmeV9u b25lLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfcHJpbnRfdmFsdWUoZW1pdHRl cl90ICplbWl0dGVyLCBlbWl0dGVyX2p1c3RpZnlfdCBqdXN0aWZ5LCBpbnQgd2lkdGgsCi0gICAg ZW1pdHRlcl90eXBlX3QgdmFsdWVfdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUpIHsKLQlzaXplX3Qg c3RyX3dyaXR0ZW47Ci0jZGVmaW5lIEJVRl9TSVpFIDI1NgotI2RlZmluZSBGTVRfU0laRSAxMAot CS8qCi0JICogV2UgZHluYW1pY2FsbHkgZ2VuZXJhdGUgYSBmb3JtYXQgc3RyaW5nIHRvIGVtaXQs IHRvIGxldCB1cyB1c2UgdGhlCi0JICogc25wcmludGYgbWFjaGluZXJ5LiAgVGhpcyBpcyBraW5k YSBoYWNreSwgYnV0IGdldHMgdGhlIGpvYiBkb25lCi0JICogcXVpY2tseSB3aXRob3V0IGhhdmlu ZyB0byB0aGluayBhYm91dCB0aGUgdmFyaW91cyBzbnByaW50ZiBlZGdlCi0JICogY2FzZXMuCi0J ICovCi0JY2hhciBmbXRbRk1UX1NJWkVdOwotCWNoYXIgYnVmW0JVRl9TSVpFXTsKLQotI2RlZmlu ZSBFTUlUX1NJTVBMRSh0eXBlLCBmb3JtYXQpCQkJCQlcCi0JZW1pdHRlcl9wcmludGYoZW1pdHRl ciwJCQkJCQlcCi0JICAgIGVtaXR0ZXJfZ2VuX2ZtdChmbXQsIEZNVF9TSVpFLCBmb3JtYXQsIGp1 c3RpZnksIHdpZHRoKSwJXAotCSAgICAqKGNvbnN0IHR5cGUgKil2YWx1ZSk7Ci0KLQlzd2l0Y2gg KHZhbHVlX3R5cGUpIHsKLQljYXNlIGVtaXR0ZXJfdHlwZV9ib29sOgotCQllbWl0dGVyX3ByaW50 ZihlbWl0dGVyLAotCQkgICAgZW1pdHRlcl9nZW5fZm10KGZtdCwgRk1UX1NJWkUsICIlcyIsIGp1 c3RpZnksIHdpZHRoKSwKLQkJICAgICooY29uc3QgYm9vbCAqKXZhbHVlID8gICJ0cnVlIiA6ICJm YWxzZSIpOwotCQlicmVhazsKLQljYXNlIGVtaXR0ZXJfdHlwZV9pbnQ6Ci0JCUVNSVRfU0lNUExF KGludCwgIiVkIikKLQkJYnJlYWs7Ci0JY2FzZSBlbWl0dGVyX3R5cGVfaW50NjQ6Ci0JCUVNSVRf U0lNUExFKGludDY0X3QsICIlIiBGTVRkNjQpCi0JCWJyZWFrOwotCWNhc2UgZW1pdHRlcl90eXBl X3Vuc2lnbmVkOgotCQlFTUlUX1NJTVBMRSh1bnNpZ25lZCwgIiV1IikKLQkJYnJlYWs7Ci0JY2Fz ZSBlbWl0dGVyX3R5cGVfc3NpemU6Ci0JCUVNSVRfU0lNUExFKHNzaXplX3QsICIlemQiKQotCQli cmVhazsKLQljYXNlIGVtaXR0ZXJfdHlwZV9zaXplOgotCQlFTUlUX1NJTVBMRShzaXplX3QsICIl enUiKQotCQlicmVhazsKLQljYXNlIGVtaXR0ZXJfdHlwZV9zdHJpbmc6Ci0JCXN0cl93cml0dGVu ID0gbWFsbG9jX3NucHJpbnRmKGJ1ZiwgQlVGX1NJWkUsICJcIiVzXCIiLAotCQkgICAgKihjb25z dCBjaGFyICpjb25zdCAqKXZhbHVlKTsKLQkJLyoKLQkJICogV2UgY29udHJvbCB0aGUgc3RyaW5n cyB3ZSBvdXRwdXQ7IHdlIHNob3VsZG4ndCBnZXQgYW55dGhpbmcKLQkJICogYW55d2hlcmUgbmVh ciB0aGUgZm10IHNpemUuCi0JCSAqLwotCQlhc3NlcnQoc3RyX3dyaXR0ZW4gPCBCVUZfU0laRSk7 Ci0JCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsCi0JCSAgICBlbWl0dGVyX2dlbl9mbXQoZm10LCBG TVRfU0laRSwgIiVzIiwganVzdGlmeSwgd2lkdGgpLCBidWYpOwotCQlicmVhazsKLQljYXNlIGVt aXR0ZXJfdHlwZV91aW50MzI6Ci0JCUVNSVRfU0lNUExFKHVpbnQzMl90LCAiJSIgRk1UdTMyKQot CQlicmVhazsKLQljYXNlIGVtaXR0ZXJfdHlwZV91aW50NjQ6Ci0JCUVNSVRfU0lNUExFKHVpbnQ2 NF90LCAiJSIgRk1UdTY0KQotCQlicmVhazsKLQljYXNlIGVtaXR0ZXJfdHlwZV90aXRsZToKLQkJ RU1JVF9TSU1QTEUoY2hhciAqY29uc3QsICIlcyIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl1 bnJlYWNoYWJsZSgpOwotCX0KLSN1bmRlZiBCVUZfU0laRQotI3VuZGVmIEZNVF9TSVpFCi19Ci0K LQotLyogSW50ZXJuYWwgZnVuY3Rpb25zLiAgSW4ganNvbiBtb2RlLCB0cmFja3MgbmVzdGluZyBz dGF0ZS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZW1pdHRlcl9uZXN0X2luYyhlbWl0dGVyX3Qg KmVtaXR0ZXIpIHsKLQllbWl0dGVyLT5uZXN0aW5nX2RlcHRoKys7Ci0JZW1pdHRlci0+aXRlbV9h dF9kZXB0aCA9IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfbmVzdF9k ZWMoZW1pdHRlcl90ICplbWl0dGVyKSB7Ci0JZW1pdHRlci0+bmVzdGluZ19kZXB0aC0tOwotCWVt aXR0ZXItPml0ZW1fYXRfZGVwdGggPSB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVt aXR0ZXJfaW5kZW50KGVtaXR0ZXJfdCAqZW1pdHRlcikgewotCWludCBhbW91bnQgPSBlbWl0dGVy LT5uZXN0aW5nX2RlcHRoOwotCWNvbnN0IGNoYXIgKmluZGVudF9zdHI7Ci0JYXNzZXJ0KGVtaXR0 ZXItPm91dHB1dCAhPSBlbWl0dGVyX291dHB1dF9qc29uX2NvbXBhY3QpOwotCWlmIChlbWl0dGVy LT5vdXRwdXQgPT0gZW1pdHRlcl9vdXRwdXRfanNvbikgewotCQlpbmRlbnRfc3RyID0gIlx0IjsK LQl9IGVsc2UgewotCQlhbW91bnQgKj0gMjsKLQkJaW5kZW50X3N0ciA9ICIgIjsKLQl9Ci0JZm9y IChpbnQgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykgewotCQllbWl0dGVyX3ByaW50ZihlbWl0dGVy LCAiJXMiLCBpbmRlbnRfc3RyKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZW1pdHRl cl9qc29uX2tleV9wcmVmaXgoZW1pdHRlcl90ICplbWl0dGVyKSB7Ci0JYXNzZXJ0KGVtaXR0ZXJf b3V0cHV0c19qc29uKGVtaXR0ZXIpKTsKLQlpZiAoZW1pdHRlci0+ZW1pdHRlZF9rZXkpIHsKLQkJ ZW1pdHRlci0+ZW1pdHRlZF9rZXkgPSBmYWxzZTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZW1pdHRl ci0+aXRlbV9hdF9kZXB0aCkgewotCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiLCIpOwotCX0K LQlpZiAoZW1pdHRlci0+b3V0cHV0ICE9IGVtaXR0ZXJfb3V0cHV0X2pzb25fY29tcGFjdCkgewot CQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiXG4iKTsKLQkJZW1pdHRlcl9pbmRlbnQoZW1pdHRl cik7Ci0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUHVibGljIGZ1bmN0aW9u cyBmb3IgZW1pdHRlcl90LiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfaW5pdChl bWl0dGVyX3QgKmVtaXR0ZXIsIGVtaXR0ZXJfb3V0cHV0X3QgZW1pdHRlcl9vdXRwdXQsCi0gICAg d3JpdGVfY2JfdCAqd3JpdGVfY2IsIHZvaWQgKmNib3BhcXVlKSB7Ci0JZW1pdHRlci0+b3V0cHV0 ID0gZW1pdHRlcl9vdXRwdXQ7Ci0JZW1pdHRlci0+d3JpdGVfY2IgPSB3cml0ZV9jYjsKLQllbWl0 dGVyLT5jYm9wYXF1ZSA9IGNib3BhcXVlOwotCWVtaXR0ZXItPml0ZW1fYXRfZGVwdGggPSBmYWxz ZTsKLQllbWl0dGVyLT5lbWl0dGVkX2tleSA9IGZhbHNlOwotCWVtaXR0ZXItPm5lc3RpbmdfZGVw dGggPSAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSlNPTiBwdWJsaWMgQVBJ LiAqLwotCi0vKgotICogRW1pdHMgYSBrZXkgKGUuZy4gYXMgYXBwZWFycyBpbiBhbiBvYmplY3Qp LiBUaGUgbmV4dCBqc29uIGVudGl0eSBlbWl0dGVkIHdpbGwKLSAqIGJlIHRoZSBjb3JyZXNwb25k aW5nIHZhbHVlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfanNvbl9rZXkoZW1p dHRlcl90ICplbWl0dGVyLCBjb25zdCBjaGFyICpqc29uX2tleSkgewotCWlmIChlbWl0dGVyX291 dHB1dHNfanNvbihlbWl0dGVyKSkgewotCQllbWl0dGVyX2pzb25fa2V5X3ByZWZpeChlbWl0dGVy KTsKLQkJZW1pdHRlcl9wcmludGYoZW1pdHRlciwgIlwiJXNcIjolcyIsIGpzb25fa2V5LAotCQkg ICAgZW1pdHRlci0+b3V0cHV0ID09IGVtaXR0ZXJfb3V0cHV0X2pzb25fY29tcGFjdCA/ICIiIDog IiAiKTsKLQkJZW1pdHRlci0+ZW1pdHRlZF9rZXkgPSB0cnVlOwotCX0KLX0KLQotc3RhdGljIGlu bGluZSB2b2lkCi1lbWl0dGVyX2pzb25fdmFsdWUoZW1pdHRlcl90ICplbWl0dGVyLCBlbWl0dGVy X3R5cGVfdCB2YWx1ZV90eXBlLAotICAgIGNvbnN0IHZvaWQgKnZhbHVlKSB7Ci0JaWYgKGVtaXR0 ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7Ci0JCWVtaXR0ZXJfanNvbl9rZXlfcHJlZml4KGVt aXR0ZXIpOwotCQllbWl0dGVyX3ByaW50X3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfanVzdGlmeV9u b25lLCAtMSwKLQkJICAgIHZhbHVlX3R5cGUsIHZhbHVlKTsKLQkJZW1pdHRlci0+aXRlbV9hdF9k ZXB0aCA9IHRydWU7Ci0JfQotfQotCi0vKiBTaG9ydGhhbmQgZm9yIGNhbGxpbmcgZW1pdHRlcl9q c29uX2tleSBhbmQgdGhlbiBlbWl0dGVyX2pzb25fdmFsdWUuICovCi1zdGF0aWMgaW5saW5lIHZv aWQKLWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKmpzb25f a2V5LAotICAgIGVtaXR0ZXJfdHlwZV90IHZhbHVlX3R5cGUsIGNvbnN0IHZvaWQgKnZhbHVlKSB7 Ci0JZW1pdHRlcl9qc29uX2tleShlbWl0dGVyLCBqc29uX2tleSk7Ci0JZW1pdHRlcl9qc29uX3Zh bHVlKGVtaXR0ZXIsIHZhbHVlX3R5cGUsIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk Ci1lbWl0dGVyX2pzb25fYXJyYXlfYmVnaW4oZW1pdHRlcl90ICplbWl0dGVyKSB7Ci0JaWYgKGVt aXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7Ci0JCWVtaXR0ZXJfanNvbl9rZXlfcHJlZml4 KGVtaXR0ZXIpOwotCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiWyIpOwotCQllbWl0dGVyX25l c3RfaW5jKGVtaXR0ZXIpOwotCX0KLX0KLQotLyogU2hvcnRoYW5kIGZvciBjYWxsaW5nIGVtaXR0 ZXJfanNvbl9rZXkgYW5kIHRoZW4gZW1pdHRlcl9qc29uX2FycmF5X2JlZ2luLiAqLwotc3RhdGlj IGlubGluZSB2b2lkCi1lbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlcl90ICplbWl0 dGVyLCBjb25zdCBjaGFyICpqc29uX2tleSkgewotCWVtaXR0ZXJfanNvbl9rZXkoZW1pdHRlciwg anNvbl9rZXkpOwotCWVtaXR0ZXJfanNvbl9hcnJheV9iZWdpbihlbWl0dGVyKTsKLX0KLQotc3Rh dGljIGlubGluZSB2b2lkCi1lbWl0dGVyX2pzb25fYXJyYXlfZW5kKGVtaXR0ZXJfdCAqZW1pdHRl cikgewotCWlmIChlbWl0dGVyX291dHB1dHNfanNvbihlbWl0dGVyKSkgewotCQlhc3NlcnQoZW1p dHRlci0+bmVzdGluZ19kZXB0aCA+IDApOwotCQllbWl0dGVyX25lc3RfZGVjKGVtaXR0ZXIpOwot CQlpZiAoZW1pdHRlci0+b3V0cHV0ICE9IGVtaXR0ZXJfb3V0cHV0X2pzb25fY29tcGFjdCkgewot CQkJZW1pdHRlcl9wcmludGYoZW1pdHRlciwgIlxuIik7Ci0JCQllbWl0dGVyX2luZGVudChlbWl0 dGVyKTsKLQkJfQotCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiXSIpOwotCX0KLX0KLQotc3Rh dGljIGlubGluZSB2b2lkCi1lbWl0dGVyX2pzb25fb2JqZWN0X2JlZ2luKGVtaXR0ZXJfdCAqZW1p dHRlcikgewotCWlmIChlbWl0dGVyX291dHB1dHNfanNvbihlbWl0dGVyKSkgewotCQllbWl0dGVy X2pzb25fa2V5X3ByZWZpeChlbWl0dGVyKTsKLQkJZW1pdHRlcl9wcmludGYoZW1pdHRlciwgInsi KTsKLQkJZW1pdHRlcl9uZXN0X2luYyhlbWl0dGVyKTsKLQl9Ci19Ci0KLS8qIFNob3J0aGFuZCBm b3IgY2FsbGluZyBlbWl0dGVyX2pzb25fa2V5IGFuZCB0aGVuIGVtaXR0ZXJfanNvbl9vYmplY3Rf YmVnaW4uICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVn aW4oZW1pdHRlcl90ICplbWl0dGVyLCBjb25zdCBjaGFyICpqc29uX2tleSkgewotCWVtaXR0ZXJf anNvbl9rZXkoZW1pdHRlciwganNvbl9rZXkpOwotCWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4o ZW1pdHRlcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZW1pdHRlcl9qc29uX29iamVjdF9l bmQoZW1pdHRlcl90ICplbWl0dGVyKSB7Ci0JaWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0 ZXIpKSB7Ci0JCWFzc2VydChlbWl0dGVyLT5uZXN0aW5nX2RlcHRoID4gMCk7Ci0JCWVtaXR0ZXJf bmVzdF9kZWMoZW1pdHRlcik7Ci0JCWlmIChlbWl0dGVyLT5vdXRwdXQgIT0gZW1pdHRlcl9vdXRw dXRfanNvbl9jb21wYWN0KSB7Ci0JCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiXG4iKTsKLQkJ CWVtaXR0ZXJfaW5kZW50KGVtaXR0ZXIpOwotCQl9Ci0JCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIs ICJ9Iik7Ci0JfQotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUYWJsZSBwdWJs aWMgQVBJLiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfdGFibGVfZGljdF9iZWdp bihlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKnRhYmxlX2tleSkgewotCWlmIChlbWl0 dGVyLT5vdXRwdXQgPT0gZW1pdHRlcl9vdXRwdXRfdGFibGUpIHsKLQkJZW1pdHRlcl9pbmRlbnQo ZW1pdHRlcik7Ci0JCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICIlc1xuIiwgdGFibGVfa2V5KTsK LQkJZW1pdHRlcl9uZXN0X2luYyhlbWl0dGVyKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9p ZAotZW1pdHRlcl90YWJsZV9kaWN0X2VuZChlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKLQlpZiAoZW1p dHRlci0+b3V0cHV0ID09IGVtaXR0ZXJfb3V0cHV0X3RhYmxlKSB7Ci0JCWVtaXR0ZXJfbmVzdF9k ZWMoZW1pdHRlcik7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfdGFibGVf a3Zfbm90ZShlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKnRhYmxlX2tleSwKLSAgICBl bWl0dGVyX3R5cGVfdCB2YWx1ZV90eXBlLCBjb25zdCB2b2lkICp2YWx1ZSwKLSAgICBjb25zdCBj aGFyICp0YWJsZV9ub3RlX2tleSwgZW1pdHRlcl90eXBlX3QgdGFibGVfbm90ZV92YWx1ZV90eXBl LAotICAgIGNvbnN0IHZvaWQgKnRhYmxlX25vdGVfdmFsdWUpIHsKLQlpZiAoZW1pdHRlci0+b3V0 cHV0ID09IGVtaXR0ZXJfb3V0cHV0X3RhYmxlKSB7Ci0JCWVtaXR0ZXJfaW5kZW50KGVtaXR0ZXIp OwotCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiJXM6ICIsIHRhYmxlX2tleSk7Ci0JCWVtaXR0 ZXJfcHJpbnRfdmFsdWUoZW1pdHRlciwgZW1pdHRlcl9qdXN0aWZ5X25vbmUsIC0xLAotCQkgICAg dmFsdWVfdHlwZSwgdmFsdWUpOwotCQlpZiAodGFibGVfbm90ZV9rZXkgIT0gTlVMTCkgewotCQkJ ZW1pdHRlcl9wcmludGYoZW1pdHRlciwgIiAoJXM6ICIsIHRhYmxlX25vdGVfa2V5KTsKLQkJCWVt aXR0ZXJfcHJpbnRfdmFsdWUoZW1pdHRlciwgZW1pdHRlcl9qdXN0aWZ5X25vbmUsIC0xLAotCQkJ ICAgIHRhYmxlX25vdGVfdmFsdWVfdHlwZSwgdGFibGVfbm90ZV92YWx1ZSk7Ci0JCQllbWl0dGVy X3ByaW50ZihlbWl0dGVyLCAiKSIpOwotCQl9Ci0JCWVtaXR0ZXJfcHJpbnRmKGVtaXR0ZXIsICJc biIpOwotCX0KLQllbWl0dGVyLT5pdGVtX2F0X2RlcHRoID0gdHJ1ZTsKLX0KLQotc3RhdGljIGlu bGluZSB2b2lkCi1lbWl0dGVyX3RhYmxlX2t2KGVtaXR0ZXJfdCAqZW1pdHRlciwgY29uc3QgY2hh ciAqdGFibGVfa2V5LAotICAgIGVtaXR0ZXJfdHlwZV90IHZhbHVlX3R5cGUsIGNvbnN0IHZvaWQg KnZhbHVlKSB7Ci0JZW1pdHRlcl90YWJsZV9rdl9ub3RlKGVtaXR0ZXIsIHRhYmxlX2tleSwgdmFs dWVfdHlwZSwgdmFsdWUsIE5VTEwsCi0JICAgIGVtaXR0ZXJfdHlwZV9ib29sLCBOVUxMKTsKLX0K LQotCi0vKiBXcml0ZSB0byB0aGUgZW1pdHRlciB0aGUgZ2l2ZW4gc3RyaW5nLCBidXQgb25seSBp biB0YWJsZSBtb2RlLiAqLwotSkVNQUxMT0NfRk9STUFUX1BSSU5URigyLCAzKQotc3RhdGljIGlu bGluZSB2b2lkCi1lbWl0dGVyX3RhYmxlX3ByaW50ZihlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0 IGNoYXIgKmZvcm1hdCwgLi4uKSB7Ci0JaWYgKGVtaXR0ZXItPm91dHB1dCA9PSBlbWl0dGVyX291 dHB1dF90YWJsZSkgewotCQl2YV9saXN0IGFwOwotCQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQkJ bWFsbG9jX3ZjcHJpbnRmKGVtaXR0ZXItPndyaXRlX2NiLCBlbWl0dGVyLT5jYm9wYXF1ZSwgZm9y bWF0LCBhcCk7Ci0JCXZhX2VuZChhcCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVt aXR0ZXJfdGFibGVfcm93KGVtaXR0ZXJfdCAqZW1pdHRlciwgZW1pdHRlcl9yb3dfdCAqcm93KSB7 Ci0JaWYgKGVtaXR0ZXItPm91dHB1dCAhPSBlbWl0dGVyX291dHB1dF90YWJsZSkgewotCQlyZXR1 cm47Ci0JfQotCWVtaXR0ZXJfY29sX3QgKmNvbDsKLQlxbF9mb3JlYWNoKGNvbCwgJnJvdy0+Y29s cywgbGluaykgewotCQllbWl0dGVyX3ByaW50X3ZhbHVlKGVtaXR0ZXIsIGNvbC0+anVzdGlmeSwg Y29sLT53aWR0aCwKLQkJICAgIGNvbC0+dHlwZSwgKGNvbnN0IHZvaWQgKikmY29sLT5ib29sX3Zh bCk7Ci0JfQotCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsICJcbiIpOwotfQotCi1zdGF0 aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfcm93X2luaXQoZW1pdHRlcl9yb3dfdCAqcm93KSB7Ci0J cWxfbmV3KCZyb3ctPmNvbHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfY29s X2luaXQoZW1pdHRlcl9jb2xfdCAqY29sLCBlbWl0dGVyX3Jvd190ICpyb3cpIHsKLQlxbF9lbG1f bmV3KGNvbCwgbGluayk7Ci0JcWxfdGFpbF9pbnNlcnQoJnJvdy0+Y29scywgY29sLCBsaW5rKTsK LX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIEdlbmVyYWxpemVkIHB1Ymxp YyBBUEkuIEVtaXRzIHVzaW5nIGVpdGhlciBKU09OIG9yIHRhYmxlLCBhY2NvcmRpbmcgdG8KLSAq IHNldHRpbmdzIGluIHRoZSBlbWl0dGVyX3QuICovCi0KLS8qCi0gKiBOb3RlIGVtaXRzIGEgZGlm ZmVyZW50IGt2IHBhaXIgYXMgd2VsbCwgYnV0IG9ubHkgaW4gdGFibGUgbW9kZS4gIE9taXRzIHRo ZQotICogbm90ZSBpZiB0YWJsZV9ub3RlX2tleSBpcyBOVUxMLgotICovCi1zdGF0aWMgaW5saW5l IHZvaWQKLWVtaXR0ZXJfa3Zfbm90ZShlbWl0dGVyX3QgKmVtaXR0ZXIsIGNvbnN0IGNoYXIgKmpz b25fa2V5LCBjb25zdCBjaGFyICp0YWJsZV9rZXksCi0gICAgZW1pdHRlcl90eXBlX3QgdmFsdWVf dHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsCi0gICAgY29uc3QgY2hhciAqdGFibGVfbm90ZV9rZXks IGVtaXR0ZXJfdHlwZV90IHRhYmxlX25vdGVfdmFsdWVfdHlwZSwKLSAgICBjb25zdCB2b2lkICp0 YWJsZV9ub3RlX3ZhbHVlKSB7Ci0JaWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIpKSB7 Ci0JCWVtaXR0ZXJfanNvbl9rZXkoZW1pdHRlciwganNvbl9rZXkpOwotCQllbWl0dGVyX2pzb25f dmFsdWUoZW1pdHRlciwgdmFsdWVfdHlwZSwgdmFsdWUpOwotCX0gZWxzZSB7Ci0JCWVtaXR0ZXJf dGFibGVfa3Zfbm90ZShlbWl0dGVyLCB0YWJsZV9rZXksIHZhbHVlX3R5cGUsIHZhbHVlLAotCQkg ICAgdGFibGVfbm90ZV9rZXksIHRhYmxlX25vdGVfdmFsdWVfdHlwZSwgdGFibGVfbm90ZV92YWx1 ZSk7Ci0JfQotCWVtaXR0ZXItPml0ZW1fYXRfZGVwdGggPSB0cnVlOwotfQotCi1zdGF0aWMgaW5s aW5lIHZvaWQKLWVtaXR0ZXJfa3YoZW1pdHRlcl90ICplbWl0dGVyLCBjb25zdCBjaGFyICpqc29u X2tleSwgY29uc3QgY2hhciAqdGFibGVfa2V5LAotICAgIGVtaXR0ZXJfdHlwZV90IHZhbHVlX3R5 cGUsIGNvbnN0IHZvaWQgKnZhbHVlKSB7Ci0JZW1pdHRlcl9rdl9ub3RlKGVtaXR0ZXIsIGpzb25f a2V5LCB0YWJsZV9rZXksIHZhbHVlX3R5cGUsIHZhbHVlLCBOVUxMLAotCSAgICBlbWl0dGVyX3R5 cGVfYm9vbCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZW1pdHRlcl9kaWN0X2Jl Z2luKGVtaXR0ZXJfdCAqZW1pdHRlciwgY29uc3QgY2hhciAqanNvbl9rZXksCi0gICAgY29uc3Qg Y2hhciAqdGFibGVfaGVhZGVyKSB7Ci0JaWYgKGVtaXR0ZXJfb3V0cHV0c19qc29uKGVtaXR0ZXIp KSB7Ci0JCWVtaXR0ZXJfanNvbl9rZXkoZW1pdHRlciwganNvbl9rZXkpOwotCQllbWl0dGVyX2pz b25fb2JqZWN0X2JlZ2luKGVtaXR0ZXIpOwotCX0gZWxzZSB7Ci0JCWVtaXR0ZXJfdGFibGVfZGlj dF9iZWdpbihlbWl0dGVyLCB0YWJsZV9oZWFkZXIpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2 b2lkCi1lbWl0dGVyX2RpY3RfZW5kKGVtaXR0ZXJfdCAqZW1pdHRlcikgewotCWlmIChlbWl0dGVy X291dHB1dHNfanNvbihlbWl0dGVyKSkgewotCQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0 dGVyKTsKLQl9IGVsc2UgewotCQllbWl0dGVyX3RhYmxlX2RpY3RfZW5kKGVtaXR0ZXIpOwotCX0K LX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1lbWl0dGVyX2JlZ2luKGVtaXR0ZXJfdCAqZW1pdHRl cikgewotCWlmIChlbWl0dGVyX291dHB1dHNfanNvbihlbWl0dGVyKSkgewotCQlhc3NlcnQoZW1p dHRlci0+bmVzdGluZ19kZXB0aCA9PSAwKTsKLQkJZW1pdHRlcl9wcmludGYoZW1pdHRlciwgInsi KTsKLQkJZW1pdHRlcl9uZXN0X2luYyhlbWl0dGVyKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBU aGlzIGd1YXJhbnRlZXMgdGhhdCB3ZSBhbHdheXMgY2FsbCB3cml0ZV9jYiBhdCBsZWFzdCBvbmNl LgotCQkgKiBUaGlzIGlzIHVzZWZ1bCBpZiBzb21lIGludmFyaWFudCBpcyBlc3RhYmxpc2hlZCBi eSBlYWNoIGNhbGwKLQkJICogdG8gd3JpdGVfY2IsIGJ1dCBkb2Vzbid0IGhvbGQgaW5pdGlhbGx5 OiBlLmcuLCBzb21lIGJ1ZmZlcgotCQkgKiBob2xkcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcu Ci0JCSAqLwotCQllbWl0dGVyX3ByaW50ZihlbWl0dGVyLCAiJXMiLCAiIik7Ci0JfQotfQotCi1z dGF0aWMgaW5saW5lIHZvaWQKLWVtaXR0ZXJfZW5kKGVtaXR0ZXJfdCAqZW1pdHRlcikgewotCWlm IChlbWl0dGVyX291dHB1dHNfanNvbihlbWl0dGVyKSkgewotCQlhc3NlcnQoZW1pdHRlci0+bmVz dGluZ19kZXB0aCA9PSAxKTsKLQkJZW1pdHRlcl9uZXN0X2RlYyhlbWl0dGVyKTsKLQkJZW1pdHRl cl9wcmludGYoZW1pdHRlciwgIiVzIiwgZW1pdHRlci0+b3V0cHV0ID09Ci0JCSAgICBlbWl0dGVy X291dHB1dF9qc29uX2NvbXBhY3QgPyAifSIgOiAiXG59XG4iKTsKLQl9Ci19Ci0KLSNlbmRpZiAv KiBKRU1BTExPQ19JTlRFUk5BTF9FTUlUVEVSX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Vz ZXQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvZXNldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjY4 OWI0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXNldC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcg KzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FU0VUX0gKLSNkZWZpbmUgSkVNQUxM T0NfSU5URVJOQUxfRVNFVF9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9mYi5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2VkYXRhLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIK LQotLyoKLSAqIEFuIGVzZXQgKCJleHRlbnQgc2V0IikgaXMgYSBxdWFudGl6ZWQgY29sbGVjdGlv biBvZiBleHRlbnRzLCB3aXRoIGJ1aWx0LWluCi0gKiBMUlUgcXVldWUuCi0gKgotICogVGhpcyBj bGFzcyBpcyBub3QgdGhyZWFkLXNhZmU7IHN5bmNocm9uaXphdGlvbiBtdXN0IGJlIGRvbmUgZXh0 ZXJuYWxseSBpZgotICogdGhlcmUgYXJlIG11dGF0aW5nIG9wZXJhdGlvbnMuICBPbmUgZXhjZXB0 aW9uIGlzIHRoZSBzdGF0cyBjb3VudGVycywgd2hpY2gKLSAqIG1heSBiZSByZWFkIHdpdGhvdXQg YW55IGxvY2tpbmcuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZXNldF9iaW5fcyBlc2V0X2Jpbl90 Owotc3RydWN0IGVzZXRfYmluX3MgewotCWVkYXRhX2hlYXBfdCBoZWFwOwotCS8qCi0JICogV2Ug ZG8gZmlyc3QtZml0IGFjcm9zcyBtdWx0aXBsZSBzaXplIGNsYXNzZXMuICBJZiB3ZSBjb21wYXJl ZCBhZ2FpbnN0Ci0JICogdGhlIG1pbiBlbGVtZW50IGluIGVhY2ggaGVhcCBkaXJlY3RseSwgd2Un ZCB0YWtlIGEgY2FjaGUgbWlzcyBwZXIKLQkgKiBleHRlbnQgd2UgbG9va2VkIGF0LiAgSWYgd2Ug Y28tbG9jYXRlIHRoZSBlZGF0YSBzdW1tYXJpZXMsIHdlIG9ubHkKLQkgKiB0YWtlIGEgbWlzcyBv biB0aGUgZWRhdGEgd2UncmUgYWN0dWFsbHkgZ29pbmcgdG8gcmV0dXJuICh3aGljaCBpcwotCSAq IGluZXZpdGFibGUgYW55d2F5cykuCi0JICovCi0JZWRhdGFfY21wX3N1bW1hcnlfdCBoZWFwX21p bjsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IGVzZXRfYmluX3N0YXRzX3MgZXNldF9iaW5fc3RhdHNf dDsKLXN0cnVjdCBlc2V0X2Jpbl9zdGF0c19zIHsKLQlhdG9taWNfenVfdCBuZXh0ZW50czsKLQlh dG9taWNfenVfdCBuYnl0ZXM7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBlc2V0X3MgZXNldF90Owot c3RydWN0IGVzZXRfcyB7Ci0JLyogQml0bWFwIGZvciB3aGljaCBzZXQgYml0cyBjb3JyZXNwb25k IHRvIG5vbi1lbXB0eSBoZWFwcy4gKi8KLQlmYl9ncm91cF90IGJpdG1hcFtGQl9OR1JPVVBTKFND X05QU0laRVMgKyAxKV07Ci0KLQkvKiBRdWFudGl6ZWQgcGVyIHNpemUgY2xhc3MgaGVhcHMgb2Yg ZXh0ZW50cy4gKi8KLQllc2V0X2Jpbl90IGJpbnNbU0NfTlBTSVpFUyArIDFdOwotCi0JZXNldF9i aW5fc3RhdHNfdCBiaW5fc3RhdHNbU0NfTlBTSVpFUyArIDFdOwotCi0JLyogTFJVIG9mIGFsbCBl eHRlbnRzIGluIGhlYXBzLiAqLwotCWVkYXRhX2xpc3RfaW5hY3RpdmVfdCBscnU7Ci0KLQkvKiBQ YWdlIHN1bSBmb3IgYWxsIGV4dGVudHMgaW4gaGVhcHMuICovCi0JYXRvbWljX3p1X3QgbnBhZ2Vz OwotCi0JLyoKLQkgKiBBIGR1cGxpY2F0aW9uIG9mIHRoZSBkYXRhIGluIHRoZSBjb250YWluaW5n IGVjYWNoZS4gIFdlIHVzZSB0aGlzIG9ubHkKLQkgKiBmb3IgYXNzZXJ0aW9ucyBvbiB0aGUgc3Rh dGVzIG9mIHRoZSBwYXNzZWQtaW4gZXh0ZW50cy4KLQkgKi8KLQlleHRlbnRfc3RhdGVfdCBzdGF0 ZTsKLX07Ci0KLXZvaWQgZXNldF9pbml0KGVzZXRfdCAqZXNldCwgZXh0ZW50X3N0YXRlX3Qgc3Rh dGUpOwotCi1zaXplX3QgZXNldF9ucGFnZXNfZ2V0KGVzZXRfdCAqZXNldCk7Ci0vKiBHZXQgdGhl IG51bWJlciBvZiBleHRlbnRzIGluIHRoZSBnaXZlbiBwYWdlIHNpemUgaW5kZXguICovCi1zaXpl X3QgZXNldF9uZXh0ZW50c19nZXQoZXNldF90ICplc2V0LCBwc3ppbmRfdCBpbmQpOwotLyogR2V0 IHRoZSBzdW0gdG90YWwgYnl0ZXMgb2YgdGhlIGV4dGVudHMgaW4gdGhlIGdpdmVuIHBhZ2Ugc2l6 ZSBpbmRleC4gKi8KLXNpemVfdCBlc2V0X25ieXRlc19nZXQoZXNldF90ICplc2V0LCBwc3ppbmRf dCBpbmQpOwotCi12b2lkIGVzZXRfaW5zZXJ0KGVzZXRfdCAqZXNldCwgZWRhdGFfdCAqZWRhdGEp Owotdm9pZCBlc2V0X3JlbW92ZShlc2V0X3QgKmVzZXQsIGVkYXRhX3QgKmVkYXRhKTsKLS8qCi0g KiBTZWxlY3QgYW4gZXh0ZW50IGZyb20gdGhpcyBlc2V0IG9mIHRoZSBnaXZlbiBzaXplIGFuZCBh bGlnbm1lbnQuICBSZXR1cm5zCi0gKiBudWxsIGlmIG5vIHN1Y2ggaXRlbSBjb3VsZCBiZSBmb3Vu ZC4KLSAqLwotZWRhdGFfdCAqZXNldF9maXQoZXNldF90ICplc2V0LCBzaXplX3QgZXNpemUsIHNp emVfdCBhbGlnbm1lbnQsIGJvb2wgZXhhY3Rfb25seSwKLSAgICB1bnNpZ25lZCBsZ19tYXhfZml0 KTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VTRVRfSCAqLwoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvZXhwX2dyb3cuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXhwX2dyb3cuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggODU2NmI4YS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2V4cF9ncm93LmgK KysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFM X0VYUF9HUk9XX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfRVhQX0dST1dfSAotCi10eXBl ZGVmIHN0cnVjdCBleHBfZ3Jvd19zIGV4cF9ncm93X3Q7Ci1zdHJ1Y3QgZXhwX2dyb3dfcyB7Ci0J LyoKLQkgKiBOZXh0IGV4dGVudCBzaXplIGNsYXNzIGluIGEgZ3Jvd2luZyBzZXJpZXMgdG8gdXNl IHdoZW4gc2F0aXNmeWluZyBhCi0JICogcmVxdWVzdCB2aWEgdGhlIGV4dGVudCBob29rcyAob25s eSBpZiBvcHRfcmV0YWluKS4gIFRoaXMgbGltaXRzIHRoZQotCSAqIG51bWJlciBvZiBkaXNqb2lu dCB2aXJ0dWFsIG1lbW9yeSByYW5nZXMgc28gdGhhdCBleHRlbnQgbWVyZ2luZyBjYW4KLQkgKiBi ZSBlZmZlY3RpdmUgZXZlbiBpZiBtdWx0aXBsZSBhcmVuYXMnIGV4dGVudCBhbGxvY2F0aW9uIHJl cXVlc3RzIGFyZQotCSAqIGhpZ2hseSBpbnRlcmxlYXZlZC4KLQkgKgotCSAqIHJldGFpbl9ncm93 X2xpbWl0IGlzIHRoZSBtYXggYWxsb3dlZCBzaXplIGluZCB0byBleHBhbmQgKHVubGVzcyB0aGUK LQkgKiByZXF1aXJlZCBzaXplIGlzIGdyZWF0ZXIpLiAgRGVmYXVsdCBpcyBubyBsaW1pdCwgYW5k IGNvbnRyb2xsZWQKLQkgKiB0aHJvdWdoIG1hbGxjdGwgb25seS4KLQkgKi8KLQlwc3ppbmRfdCBu ZXh0OwotCXBzemluZF90IGxpbWl0OwotfTsKLQotc3RhdGljIGlubGluZSBib29sCi1leHBfZ3Jv d19zaXplX3ByZXBhcmUoZXhwX2dyb3dfdCAqZXhwX2dyb3csIHNpemVfdCBhbGxvY19zaXplX21p biwKLSAgICBzaXplX3QgKnJfYWxsb2Nfc2l6ZSwgcHN6aW5kX3QgKnJfc2tpcCkgewotCSpyX3Nr aXAgPSAwOwotCSpyX2FsbG9jX3NpemUgPSBzel9waW5kMnN6KGV4cF9ncm93LT5uZXh0ICsgKnJf c2tpcCk7Ci0Jd2hpbGUgKCpyX2FsbG9jX3NpemUgPCBhbGxvY19zaXplX21pbikgewotCQkoKnJf c2tpcCkrKzsKLQkJaWYgKGV4cF9ncm93LT5uZXh0ICsgKnJfc2tpcCAgPj0KLQkJICAgIHN6X3Bz ejJpbmQoU0NfTEFSR0VfTUFYQ0xBU1MpKSB7Ci0JCQkvKiBPdXRzaWRlIGxlZ2FsIHJhbmdlLiAq LwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJKnJfYWxsb2Nfc2l6ZSA9IHN6X3BpbmQyc3ooZXhw X2dyb3ctPm5leHQgKyAqcl9za2lwKTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQKLWV4cF9ncm93X3NpemVfY29tbWl0KGV4cF9ncm93X3QgKmV4cF9ncm93LCBw c3ppbmRfdCBza2lwKSB7Ci0JaWYgKGV4cF9ncm93LT5uZXh0ICsgc2tpcCArIDEgPD0gZXhwX2dy b3ctPmxpbWl0KSB7Ci0JCWV4cF9ncm93LT5uZXh0ICs9IHNraXAgKyAxOwotCX0gZWxzZSB7Ci0J CWV4cF9ncm93LT5uZXh0ID0gZXhwX2dyb3ctPmxpbWl0OwotCX0KLQotfQotCi12b2lkIGV4cF9n cm93X2luaXQoZXhwX2dyb3dfdCAqZXhwX2dyb3cpOwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5U RVJOQUxfRVhQX0dST1dfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50LmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL2V4dGVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDUxZDQxLi4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBA QAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FWFRFTlRfSAotI2RlZmluZSBKRU1BTExPQ19J TlRFUk5BTF9FWFRFTlRfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZWNhY2hlLmgi Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZWhvb2tzLmgiCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvcGguaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ydHJlZS5oIgot Ci0vKgotICogVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIHBhZ2UtbGV2ZWwgYWxsb2NhdG9yLiAg SXQgY2hvb3NlcyB0aGUgYWRkcmVzc2VzIHRoYXQKLSAqIGFsbG9jYXRpb25zIHJlcXVlc3RlZCBi eSBvdGhlciBtb2R1bGVzIHdpbGwgaW5oYWJpdCwgYW5kIHVwZGF0ZXMgdGhlIGdsb2JhbAotICog bWV0YWRhdGEgdG8gcmVmbGVjdCBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbi9wdXJnaW5nIGRlY2lz aW9ucy4KLSAqLwotCi0vKgotICogV2hlbiByZXVzZSAoYW5kIHNwbGl0KSBhbiBhY3RpdmUgZXh0 ZW50LCAoMVUgPDwgb3B0X2xnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCkKLSAqIGlzIHRoZSBtYXgg cmF0aW8gYmV0d2VlbiB0aGUgc2l6ZSBvZiB0aGUgYWN0aXZlIGV4dGVudCBhbmQgdGhlIG5ldyBl eHRlbnQuCi0gKi8KLSNkZWZpbmUgTEdfRVhURU5UX01BWF9BQ1RJVkVfRklUX0RFRkFVTFQgNgot ZXh0ZXJuIHNpemVfdCBvcHRfbGdfZXh0ZW50X21heF9hY3RpdmVfZml0OwotCi1lZGF0YV90ICpl Y2FjaGVfYWxsb2ModHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAot ICAgIGVjYWNoZV90ICplY2FjaGUsIGVkYXRhX3QgKmV4cGFuZF9lZGF0YSwgc2l6ZV90IHNpemUs IHNpemVfdCBhbGlnbm1lbnQsCi0gICAgYm9vbCB6ZXJvLCBib29sIGd1YXJkZWQpOwotZWRhdGFf dCAqZWNhY2hlX2FsbG9jX2dyb3codHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAq ZWhvb2tzLAotICAgIGVjYWNoZV90ICplY2FjaGUsIGVkYXRhX3QgKmV4cGFuZF9lZGF0YSwgc2l6 ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsCi0gICAgYm9vbCB6ZXJvLCBib29sIGd1YXJkZWQp Owotdm9pZCBlY2FjaGVfZGFsbG9jKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3Qg KmVob29rcywKLSAgICBlY2FjaGVfdCAqZWNhY2hlLCBlZGF0YV90ICplZGF0YSk7Ci1lZGF0YV90 ICplY2FjaGVfZXZpY3QodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tz LAotICAgIGVjYWNoZV90ICplY2FjaGUsIHNpemVfdCBucGFnZXNfbWluKTsKLQotdm9pZCBleHRl bnRfZ2R1bXBfYWRkKHRzZG5fdCAqdHNkbiwgY29uc3QgZWRhdGFfdCAqZWRhdGEpOwotdm9pZCBl eHRlbnRfcmVjb3JkKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywg ZWNhY2hlX3QgKmVjYWNoZSwKLSAgICBlZGF0YV90ICplZGF0YSk7Ci12b2lkIGV4dGVudF9kYWxs b2NfZ2FwKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKLSAgICBl ZGF0YV90ICplZGF0YSk7Ci1lZGF0YV90ICpleHRlbnRfYWxsb2Nfd3JhcHBlcih0c2RuX3QgKnRz ZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCi0gICAgdm9pZCAqbmV3X2FkZHIsIHNp emVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sIGJvb2wgKmNvbW1pdCwKLSAg ICBib29sIGdyb3dpbmdfcmV0YWluZWQpOwotdm9pZCBleHRlbnRfZGFsbG9jX3dyYXBwZXIodHNk bl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAotICAgIGVkYXRhX3QgKmVk YXRhKTsKLXZvaWQgZXh0ZW50X2Rlc3Ryb3lfd3JhcHBlcih0c2RuX3QgKnRzZG4sIHBhY190ICpw YWMsIGVob29rc190ICplaG9va3MsCi0gICAgZWRhdGFfdCAqZWRhdGEpOwotYm9vbCBleHRlbnRf Y29tbWl0X3dyYXBwZXIodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICpl ZGF0YSwKLSAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKTsKLWJvb2wgZXh0ZW50X2Rl Y29tbWl0X3dyYXBwZXIodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICpl ZGF0YSwKLSAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKTsKLWJvb2wgZXh0ZW50X3B1 cmdlX2xhenlfd3JhcHBlcih0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3Qg KmVkYXRhLAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOwotYm9vbCBleHRlbnRf cHVyZ2VfZm9yY2VkX3dyYXBwZXIodHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0 YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKTsKLWVkYXRhX3Qg KmV4dGVudF9zcGxpdF93cmFwcGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywKLSAgICBlaG9v a3NfdCAqZWhvb2tzLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IHNpemVfYSwgc2l6ZV90IHNpemVf YiwKLSAgICBib29sIGhvbGRpbmdfY29yZV9sb2Nrcyk7Ci1ib29sIGV4dGVudF9tZXJnZV93cmFw cGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKLSAgICBlZGF0 YV90ICphLCBlZGF0YV90ICpiKTsKLWJvb2wgZXh0ZW50X2NvbW1pdF96ZXJvKHRzZG5fdCAqdHNk biwgZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAqZWRhdGEsCi0gICAgYm9vbCBjb21taXQsIGJv b2wgemVybywgYm9vbCBncm93aW5nX3JldGFpbmVkKTsKLXNpemVfdCBleHRlbnRfc25fbmV4dChw YWNfdCAqcGFjKTsKLWJvb2wgZXh0ZW50X2Jvb3Qodm9pZCk7Ci0KLUpFTUFMTE9DX0FMV0FZU19J TkxJTkUgYm9vbAotZXh0ZW50X25laWdoYm9yX2hlYWRfc3RhdGVfbWVyZ2VhYmxlKGJvb2wgZWRh dGFfaXNfaGVhZCwKLSAgICBib29sIG5laWdoYm9yX2lzX2hlYWQsIGJvb2wgZm9yd2FyZCkgewot CS8qCi0JICogSGVhZCBzdGF0ZXMgY2hlY2tpbmc6IGRpc2FsbG93IG1lcmdpbmcgaWYgdGhlIGhp Z2hlciBhZGRyIGV4dGVudCBpcyBhCi0JICogaGVhZCBleHRlbnQuICBUaGlzIGhlbHBzIHByZXNl cnZlIGZpcnN0LWZpdCwgYW5kIG1vcmUgaW1wb3J0YW50bHkKLQkgKiBtYWtlcyBzdXJlIG5vIG1l cmdlIGFjcm9zcyBhcmVuYXMuCi0JICovCi0JaWYgKGZvcndhcmQpIHsKLQkJaWYgKG5laWdoYm9y X2lzX2hlYWQpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChlZGF0 YV9pc19oZWFkKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRydWU7Ci19 Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotZXh0ZW50X2Nhbl9hY3F1aXJlX25laWdo Ym9yKGVkYXRhX3QgKmVkYXRhLCBydHJlZV9jb250ZW50c190IGNvbnRlbnRzLAotICAgIGV4dGVu dF9wYWlfdCBwYWksIGV4dGVudF9zdGF0ZV90IGV4cGVjdGVkX3N0YXRlLCBib29sIGZvcndhcmQs Ci0gICAgYm9vbCBleHBhbmRpbmcpIHsKLQllZGF0YV90ICpuZWlnaGJvciA9IGNvbnRlbnRzLmVk YXRhOwotCWlmIChuZWlnaGJvciA9PSBOVUxMKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JLyog SXQncyBub3Qgc2FmZSB0byBhY2Nlc3MgKm5laWdoYm9yIHlldDsgbXVzdCB2ZXJpZnkgc3RhdGVz IGZpcnN0LiAqLwotCWJvb2wgbmVpZ2hib3JfaXNfaGVhZCA9IGNvbnRlbnRzLm1ldGFkYXRhLmlz X2hlYWQ7Ci0JaWYgKCFleHRlbnRfbmVpZ2hib3JfaGVhZF9zdGF0ZV9tZXJnZWFibGUoZWRhdGFf aXNfaGVhZF9nZXQoZWRhdGEpLAotCSAgICBuZWlnaGJvcl9pc19oZWFkLCBmb3J3YXJkKSkgewot CQlyZXR1cm4gZmFsc2U7Ci0JfQotCWV4dGVudF9zdGF0ZV90IG5laWdoYm9yX3N0YXRlID0gY29u dGVudHMubWV0YWRhdGEuc3RhdGU7Ci0JaWYgKHBhaSA9PSBFWFRFTlRfUEFJX1BBQykgewotCQlp ZiAobmVpZ2hib3Jfc3RhdGUgIT0gZXhwZWN0ZWRfc3RhdGUpIHsKLQkJCXJldHVybiBmYWxzZTsK LQkJfQotCQkvKiBGcm9tIHRoaXMgcG9pbnQsIGl0J3Mgc2FmZSB0byBhY2Nlc3MgKm5laWdoYm9y LiAqLwotCQlpZiAoIWV4cGFuZGluZyAmJiAoZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSkgIT0K LQkJICAgIGVkYXRhX2NvbW1pdHRlZF9nZXQobmVpZ2hib3IpKSkgewotCQkJLyoKLQkJCSAqIFNv bWUgcGxhdGZvcm1zIChlLmcuIFdpbmRvd3MpIHJlcXVpcmUgYW4gZXhwbGljaXQKLQkJCSAqIGNv bW1pdCBzdGVwIChhbmQgd3JpdGluZyB0byB1bmNvbW1pdHRlZCBtZW1vcnkgaXMgbm90Ci0JCQkg KiBhbGxvd2VkKS4KLQkJCSAqLwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfSBlbHNlIHsKLQkJ aWYgKG5laWdoYm9yX3N0YXRlID09IGV4dGVudF9zdGF0ZV9hY3RpdmUpIHsKLQkJCXJldHVybiBm YWxzZTsKLQkJfQotCQkvKiBGcm9tIHRoaXMgcG9pbnQsIGl0J3Mgc2FmZSB0byBhY2Nlc3MgKm5l aWdoYm9yLiAqLwotCX0KLQotCWFzc2VydChlZGF0YV9wYWlfZ2V0KGVkYXRhKSA9PSBwYWkpOwot CWlmIChlZGF0YV9wYWlfZ2V0KG5laWdoYm9yKSAhPSBwYWkpIHsKLQkJcmV0dXJuIGZhbHNlOwot CX0KLQlpZiAob3B0X3JldGFpbikgewotCQlhc3NlcnQoZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0 YSkgPT0KLQkJICAgIGVkYXRhX2FyZW5hX2luZF9nZXQobmVpZ2hib3IpKTsKLQl9IGVsc2Ugewot CQlpZiAoZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSkgIT0KLQkJICAgIGVkYXRhX2FyZW5hX2lu ZF9nZXQobmVpZ2hib3IpKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JYXNzZXJ0KCFl ZGF0YV9ndWFyZGVkX2dldChlZGF0YSkgJiYgIWVkYXRhX2d1YXJkZWRfZ2V0KG5laWdoYm9yKSk7 Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVO VF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfZHNzLmggYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2V4dGVu dF9kc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThmMDJjZS4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL2V4dGVudF9kc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAK LSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfRVhURU5UX0RTU19ICi0jZGVmaW5lIEpFTUFMTE9D X0lOVEVSTkFMX0VYVEVOVF9EU1NfSAotCi10eXBlZGVmIGVudW0gewotCWRzc19wcmVjX2Rpc2Fi bGVkICA9IDAsCi0JZHNzX3ByZWNfcHJpbWFyeSAgID0gMSwKLQlkc3NfcHJlY19zZWNvbmRhcnkg PSAyLAotCi0JZHNzX3ByZWNfbGltaXQgICAgID0gMwotfSBkc3NfcHJlY190OwotI2RlZmluZSBE U1NfUFJFQ19ERUZBVUxUIGRzc19wcmVjX3NlY29uZGFyeQotI2RlZmluZSBEU1NfREVGQVVMVCAi c2Vjb25kYXJ5IgotCi1leHRlcm4gY29uc3QgY2hhciAqZHNzX3ByZWNfbmFtZXNbXTsKLQotZXh0 ZXJuIGNvbnN0IGNoYXIgKm9wdF9kc3M7Ci0KLWRzc19wcmVjX3QgZXh0ZW50X2Rzc19wcmVjX2dl dCh2b2lkKTsKLWJvb2wgZXh0ZW50X2Rzc19wcmVjX3NldChkc3NfcHJlY190IGRzc19wcmVjKTsK LXZvaWQgKmV4dGVudF9hbGxvY19kc3ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgdm9p ZCAqbmV3X2FkZHIsCi0gICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgKnpl cm8sIGJvb2wgKmNvbW1pdCk7Ci1ib29sIGV4dGVudF9pbl9kc3Modm9pZCAqYWRkcik7Ci1ib29s IGV4dGVudF9kc3NfbWVyZ2VhYmxlKHZvaWQgKmFkZHJfYSwgdm9pZCAqYWRkcl9iKTsKLXZvaWQg ZXh0ZW50X2Rzc19ib290KHZvaWQpOwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfRVhU RU5UX0RTU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfbW1hcC5oIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9leHRlbnRfbW1hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWYxN2VlLi4w MDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvZXh0ZW50X21tYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEw ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfRVhURU5UX01NQVBfRVhURVJOU19I Ci0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVOVF9NTUFQX0VYVEVSTlNfSAotCi1leHRl cm4gYm9vbCBvcHRfcmV0YWluOwotCi12b2lkICpleHRlbnRfYWxsb2NfbW1hcCh2b2lkICpuZXdf YWRkciwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsCi0gICAgYm9vbCAqemVybywgYm9v bCAqY29tbWl0KTsKLWJvb2wgZXh0ZW50X2RhbGxvY19tbWFwKHZvaWQgKmFkZHIsIHNpemVfdCBz aXplKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0VYVEVOVF9NTUFQX0VYVEVSTlNf SCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZmIuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvZmIuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggOTBjNDA5MS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2ZiLmgK KysrIC9kZXYvbnVsbApAQCAtMSwzNzMgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5B TF9GQl9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0ZCX0gKLQotLyoKLSAqIFRoZSBmbGF0 IGJpdG1hcCBtb2R1bGUuICBUaGlzIGhhcyBhIGxhcmdlciBBUEkgcmVsYXRpdmUgdG8gdGhlIGJp dG1hcCBtb2R1bGUKLSAqIChzdXBwb3J0aW5nIHRoaW5ncyBsaWtlIGJhY2t3YXJkcyBzZWFyY2hl cywgYW5kIHNlYXJjaGluZyBmb3IgYm90aCBzZXQgYW5kCi0gKiB1bnNldCBiaXRzKSwgYXQgdGhl IGNvc3Qgb2Ygc2xvd2VyIG9wZXJhdGlvbnMgZm9yIHZlcnkgbGFyZ2UgYml0bWFwcy4KLSAqCi0g KiBJbml0aWFsaXplZCBmbGF0IGJpdG1hcHMgc3RhcnQgYXQgYWxsLXplcm9zIChhbGwgYml0cyB1 bnNldCkuCi0gKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGZiX2dyb3VwX3Q7Ci0jZGVmaW5l IEZCX0dST1VQX0JJVFMgKFpVKDEpIDw8IChMR19TSVpFT0ZfTE9ORyArIDMpKQotI2RlZmluZSBG Ql9OR1JPVVBTKG5iaXRzKSAoKG5iaXRzKSAvIEZCX0dST1VQX0JJVFMgXAotICAgICsgKChuYml0 cykgJSBGQl9HUk9VUF9CSVRTID09IDAgPyAwIDogMSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAot ZmJfaW5pdChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzKSB7Ci0Jc2l6ZV90IG5ncm91cHMg PSBGQl9OR1JPVVBTKG5iaXRzKTsKLQltZW1zZXQoZmIsIDAsIG5ncm91cHMgKiBzaXplb2YoZmJf Z3JvdXBfdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWZiX2VtcHR5KGZiX2dyb3VwX3Qg KmZiLCBzaXplX3QgbmJpdHMpIHsKLQlzaXplX3Qgbmdyb3VwcyA9IEZCX05HUk9VUFMobmJpdHMp OwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmdyb3VwczsgaSsrKSB7Ci0JCWlmIChmYltpXSAh PSAwKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgYm9vbAotZmJfZnVsbChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzKSB7 Ci0Jc2l6ZV90IG5ncm91cHMgPSBGQl9OR1JPVVBTKG5iaXRzKTsKLQlzaXplX3QgdHJhaWxpbmdf Yml0cyA9IG5iaXRzICUgRkJfR1JPVVBfQklUUzsKLQlzaXplX3QgbGltaXQgPSAodHJhaWxpbmdf Yml0cyA9PSAwID8gbmdyb3VwcyA6IG5ncm91cHMgLSAxKTsKLQlmb3IgKHNpemVfdCBpID0gMDsg aSA8IGxpbWl0OyBpKyspIHsKLQkJaWYgKGZiW2ldICE9IH4oZmJfZ3JvdXBfdCkwKSB7Ci0JCQly ZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JaWYgKHRyYWlsaW5nX2JpdHMgPT0gMCkgewotCQlyZXR1 cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZiW25ncm91cHMgLSAxXSA9PSAoKGZiX2dyb3VwX3QpMSA8 PCB0cmFpbGluZ19iaXRzKSAtIDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotZmJfZ2V0KGZi X2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBiaXQpIHsKLQlhc3NlcnQoYml0IDwg bmJpdHMpOwotCXNpemVfdCBncm91cF9pbmQgPSBiaXQgLyBGQl9HUk9VUF9CSVRTOwotCXNpemVf dCBiaXRfaW5kID0gYml0ICUgRkJfR1JPVVBfQklUUzsKLQlyZXR1cm4gKGJvb2wpKGZiW2dyb3Vw X2luZF0gJiAoKGZiX2dyb3VwX3QpMSA8PCBiaXRfaW5kKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg dm9pZAotZmJfc2V0KGZiX2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBiaXQpIHsK LQlhc3NlcnQoYml0IDwgbmJpdHMpOwotCXNpemVfdCBncm91cF9pbmQgPSBiaXQgLyBGQl9HUk9V UF9CSVRTOwotCXNpemVfdCBiaXRfaW5kID0gYml0ICUgRkJfR1JPVVBfQklUUzsKLQlmYltncm91 cF9pbmRdIHw9ICgoZmJfZ3JvdXBfdCkxIDw8IGJpdF9pbmQpOwotfQotCi1zdGF0aWMgaW5saW5l IHZvaWQKLWZiX3Vuc2V0KGZiX2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBiaXQp IHsKLQlhc3NlcnQoYml0IDwgbmJpdHMpOwotCXNpemVfdCBncm91cF9pbmQgPSBiaXQgLyBGQl9H Uk9VUF9CSVRTOwotCXNpemVfdCBiaXRfaW5kID0gYml0ICUgRkJfR1JPVVBfQklUUzsKLQlmYltn cm91cF9pbmRdICY9IH4oKGZiX2dyb3VwX3QpMSA8PCBiaXRfaW5kKTsKLX0KLQotCi0vKgotICog U29tZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiAgVGhpcyB2aXNpdGF0aW9uIGZ1bmN0aW9uIGxl dHMgdXMgYXBwbHkgYSBncm91cAotICogdmlzaXRvciB0byBlYWNoIGdyb3VwIGluIHRoZSBiaXRt YXAgKHBvdGVudGlhbGx5IG1vZGlmeWluZyBpdCkuICBUaGUgbWFzawotICogaW5kaWNhdGVzIHdo aWNoIGJpdHMgYXJlIGxvZ2ljYWxseSBwYXJ0IG9mIHRoZSB2aXNpdGF0aW9uLgotICovCi10eXBl ZGVmIHZvaWQgKCpmYl9ncm91cF92aXNpdG9yX3QpKHZvaWQgKmN0eCwgZmJfZ3JvdXBfdCAqZmIs IGZiX2dyb3VwX3QgbWFzayk7Ci1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLWZiX3Zpc2l0 X2ltcGwoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgZmJfZ3JvdXBfdmlzaXRvcl90IHZp c2l0LCB2b2lkICpjdHgsCi0gICAgc2l6ZV90IHN0YXJ0LCBzaXplX3QgY250KSB7Ci0JYXNzZXJ0 KGNudCA+IDApOwotCWFzc2VydChzdGFydCArIGNudCA8PSBuYml0cyk7Ci0Jc2l6ZV90IGdyb3Vw X2luZCA9IHN0YXJ0IC8gRkJfR1JPVVBfQklUUzsKLQlzaXplX3Qgc3RhcnRfYml0X2luZCA9IHN0 YXJ0ICUgRkJfR1JPVVBfQklUUzsKLQkvKgotCSAqIFRoZSBmaXJzdCBncm91cCBpcyBzcGVjaWFs OyBpdCdzIHRoZSBvbmx5IG9uZSB3ZSBkb24ndCBzdGFydCB3cml0aW5nCi0JICogdG8gZnJvbSBi aXQgMC4KLQkgKi8KLQlzaXplX3QgZmlyc3RfZ3JvdXBfY250ID0gKHN0YXJ0X2JpdF9pbmQgKyBj bnQgPiBGQl9HUk9VUF9CSVRTCi0JCT8gRkJfR1JPVVBfQklUUyAtIHN0YXJ0X2JpdF9pbmQgOiBj bnQpOwotCS8qCi0JICogV2UgY2FuIGJhc2ljYWxseSBzcGxpdCBhZmZlY3RlZCB3b3JkcyBpbnRv OgotCSAqICAgLSBUaGUgZmlyc3QgZ3JvdXAsIHdoZXJlIHdlIHRvdWNoIG9ubHkgdGhlIGhpZ2gg Yml0cwotCSAqICAgLSBUaGUgbGFzdCBncm91cCwgd2hlcmUgd2UgdG91Y2ggb25seSB0aGUgbG93 IGJpdHMKLQkgKiAgIC0gVGhlIG1pZGRsZSwgd2hlcmUgd2Ugc2V0IGFsbCB0aGUgYml0cyB0byB0 aGUgc2FtZSB0aGluZy4KLQkgKiBXZSB0cmVhdCBlYWNoIGNhc2UgaW5kaXZpZHVhbGx5LiAgVGhl IGxhc3QgdHdvIGNvdWxkIGJlIG1lcmdlZCwgYnV0Ci0JICogdGhpcyBjYW4gbGVhZCB0byBiYWQg Y29kZWdlbiBmb3IgdGhvc2UgbWlkZGxlIHdvcmRzLgotCSAqLwotCS8qIEZpcnN0IGdyb3VwICov Ci0JZmJfZ3JvdXBfdCBtYXNrID0gKCh+KGZiX2dyb3VwX3QpMCkKLQkgICAgPj4gKEZCX0dST1VQ X0JJVFMgLSBmaXJzdF9ncm91cF9jbnQpKQotCSAgICA8PCBzdGFydF9iaXRfaW5kOwotCXZpc2l0 KGN0eCwgJmZiW2dyb3VwX2luZF0sIG1hc2spOwotCi0JY250IC09IGZpcnN0X2dyb3VwX2NudDsK LQlncm91cF9pbmQrKzsKLQkvKiBNaWRkbGUgZ3JvdXBzICovCi0Jd2hpbGUgKGNudCA+IEZCX0dS T1VQX0JJVFMpIHsKLQkJdmlzaXQoY3R4LCAmZmJbZ3JvdXBfaW5kXSwgfihmYl9ncm91cF90KTAp OwotCQljbnQgLT0gRkJfR1JPVVBfQklUUzsKLQkJZ3JvdXBfaW5kKys7Ci0JfQotCS8qIExhc3Qg Z3JvdXAgKi8KLQlpZiAoY250ICE9IDApIHsKLQkJbWFzayA9ICh+KGZiX2dyb3VwX3QpMCkgPj4g KEZCX0dST1VQX0JJVFMgLSBjbnQpOwotCQl2aXNpdChjdHgsICZmYltncm91cF9pbmRdLCBtYXNr KTsKLQl9Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotZmJfYXNzaWduX3Zpc2l0 b3Iodm9pZCAqY3R4LCBmYl9ncm91cF90ICpmYiwgZmJfZ3JvdXBfdCBtYXNrKSB7Ci0JYm9vbCB2 YWwgPSAqKGJvb2wgKiljdHg7Ci0JaWYgKHZhbCkgewotCQkqZmIgfD0gbWFzazsKLQl9IGVsc2Ug ewotCQkqZmIgJj0gfm1hc2s7Ci0JfQotfQotCi0vKiBTZXRzIHRoZSBjbnQgYml0cyBzdGFydGlu ZyBhdCBwb3NpdGlvbiBzdGFydC4gIE11c3Qgbm90IGhhdmUgYSAwIGNvdW50LiAqLwotc3RhdGlj IGlubGluZSB2b2lkCi1mYl9zZXRfcmFuZ2UoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywg c2l6ZV90IHN0YXJ0LCBzaXplX3QgY250KSB7Ci0JYm9vbCB2YWwgPSB0cnVlOwotCWZiX3Zpc2l0 X2ltcGwoZmIsIG5iaXRzLCAmZmJfYXNzaWduX3Zpc2l0b3IsICZ2YWwsIHN0YXJ0LCBjbnQpOwot fQotCi0vKiBVbnNldHMgdGhlIGNudCBiaXRzIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIHN0YXJ0LiAg TXVzdCBub3QgaGF2ZSBhIDAgY291bnQuICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZiX3Vuc2V0 X3JhbmdlKGZiX2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBzdGFydCwgc2l6ZV90 IGNudCkgewotCWJvb2wgdmFsID0gZmFsc2U7Ci0JZmJfdmlzaXRfaW1wbChmYiwgbmJpdHMsICZm Yl9hc3NpZ25fdmlzaXRvciwgJnZhbCwgc3RhcnQsIGNudCk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdm9pZAotZmJfc2NvdW50X3Zpc2l0b3Iodm9pZCAqY3R4LCBmYl9ncm91cF90ICpm YiwgZmJfZ3JvdXBfdCBtYXNrKSB7Ci0Jc2l6ZV90ICpzY291bnQgPSAoc2l6ZV90ICopY3R4Owot CSpzY291bnQgKz0gcG9wY291bnRfbHUoKmZiICYgbWFzayk7Ci19Ci0KLS8qIEZpbmRzIHRoZSBu dW1iZXIgb2Ygc2V0IGJpdCBpbiB0aGUgb2YgbGVuZ3RoIGNudCBzdGFydGluZyBhdCBzdGFydC4g Ki8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Ci1mYl9zY291bnQoZmJfZ3JvdXBfdCAq ZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IHN0YXJ0LCBzaXplX3QgY250KSB7Ci0Jc2l6ZV90IHNj b3VudCA9IDA7Ci0JZmJfdmlzaXRfaW1wbChmYiwgbmJpdHMsICZmYl9zY291bnRfdmlzaXRvciwg JnNjb3VudCwgc3RhcnQsIGNudCk7Ci0JcmV0dXJuIHNjb3VudDsKLX0KLQotLyogRmluZHMgdGhl IG51bWJlciBvZiB1bnNldCBiaXQgaW4gdGhlIG9mIGxlbmd0aCBjbnQgc3RhcnRpbmcgYXQgc3Rh cnQuICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAotZmJfdWNvdW50KGZiX2dyb3Vw X3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBzdGFydCwgc2l6ZV90IGNudCkgewotCXNpemVf dCBzY291bnQgPSBmYl9zY291bnQoZmIsIG5iaXRzLCBzdGFydCwgY250KTsKLQlyZXR1cm4gY250 IC0gc2NvdW50OwotfQotCi0vKgotICogQW4gaW1wbGVtZW50YXRpb24gZGV0YWlsOyBmaW5kIHRo ZSBmaXJzdCBiaXQgYXQgcG9zaXRpb24gPj0gbWluX2JpdCB3aXRoIHRoZQotICogdmFsdWUgdmFs LgotICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBiaXRtYXAgaWYgbm8g c3VjaCBiaXQgZXhpc3RzLgotICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNzaXplX3QKLWZi X2ZpbmRfaW1wbChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQsIGJv b2wgdmFsLAotICAgIGJvb2wgZm9yd2FyZCkgewotCWFzc2VydChzdGFydCA8IG5iaXRzKTsKLQlz aXplX3Qgbmdyb3VwcyA9IEZCX05HUk9VUFMobmJpdHMpOwotCXNzaXplX3QgZ3JvdXBfaW5kID0g c3RhcnQgLyBGQl9HUk9VUF9CSVRTOwotCXNpemVfdCBiaXRfaW5kID0gc3RhcnQgJSBGQl9HUk9V UF9CSVRTOwotCi0JZmJfZ3JvdXBfdCBtYXliZV9pbnZlcnQgPSAodmFsID8gMCA6IChmYl9ncm91 cF90KS0xKTsKLQotCWZiX2dyb3VwX3QgZ3JvdXAgPSBmYltncm91cF9pbmRdOwotCWdyb3VwIF49 IG1heWJlX2ludmVydDsKLQlpZiAoZm9yd2FyZCkgewotCQkvKiBPbmx5IGtlZXAgb25lcyBpbiBi aXRzIGJpdF9pbmQgYW5kIGFib3ZlLiAqLwotCQlncm91cCAmPSB+KCgxTFUgPDwgYml0X2luZCkg LSAxKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBPbmx5IGtlZXAgb25lcyBpbiBiaXRzIGJpdF9p bmQgYW5kIGJlbG93LiAgWW91IG1pZ2h0IG1vcmUKLQkJICogbmF0dXJhbGx5IGV4cHJlc3MgdGhp cyBhcyAoMSA8PCAoYml0X2luZCArIDEpKSAtIDEsIGJ1dAotCQkgKiB0aGF0IHNoaWZ0cyBieSBh biBpbnZhbGlkIGFtb3VudCBpZiBiaXRfaW5kIGlzIG9uZSBsZXNzIHRoYW4KLQkJICogRkJfR1JP VVBfQklUUy4KLQkJICovCi0JCWdyb3VwICY9ICgoMkxVIDw8IGJpdF9pbmQpIC0gMSk7Ci0JfQot CXNzaXplX3QgZ3JvdXBfaW5kX2JvdW5kID0gZm9yd2FyZCA/IChzc2l6ZV90KW5ncm91cHMgOiAt MTsKLQl3aGlsZSAoZ3JvdXAgPT0gMCkgewotCQlncm91cF9pbmQgKz0gZm9yd2FyZCA/IDEgOiAt MTsKLQkJaWYgKGdyb3VwX2luZCA9PSBncm91cF9pbmRfYm91bmQpIHsKLQkJCXJldHVybiBmb3J3 YXJkID8gKHNzaXplX3QpbmJpdHMgOiAoc3NpemVfdCktMTsKLQkJfQotCQlncm91cCA9IGZiW2dy b3VwX2luZF07Ci0JCWdyb3VwIF49IG1heWJlX2ludmVydDsKLQl9Ci0JYXNzZXJ0KGdyb3VwICE9 IDApOwotCXNpemVfdCBiaXQgPSBmb3J3YXJkID8gZmZzX2x1KGdyb3VwKSA6IGZsc19sdShncm91 cCk7Ci0Jc2l6ZV90IHBvcyA9IGdyb3VwX2luZCAqIEZCX0dST1VQX0JJVFMgKyBiaXQ7Ci0JLyoK LQkgKiBUaGUgaGlnaCBiaXRzIG9mIGEgcGFydGlhbGx5IGZpbGxlZCBsYXN0IGdyb3VwIGFyZSB6 ZXJvcywgc28gaWYgd2UncmUKLQkgKiBsb29raW5nIGZvciB6ZXJvcyB3ZSBkb24ndCB3YW50IHRv IHJlcG9ydCBhbiBpbnZhbGlkIHJlc3VsdC4KLQkgKi8KLQlpZiAoZm9yd2FyZCAmJiAhdmFsICYm IHBvcyA+IG5iaXRzKSB7Ci0JCXJldHVybiBuYml0czsKLQl9Ci0JcmV0dXJuIHBvczsKLX0KLQot LyoKLSAqIEZpbmQgdGhlIGZpcnN0IHNldCBiaXQgaW4gdGhlIGJpdG1hcCB3aXRoIGFuIGluZGV4 ID49IG1pbl9iaXQuICBSZXR1cm5zIHRoZQotICogbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1h cCBpZiBubyBzdWNoIGJpdCBleGlzdHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1mYl9m ZnUoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IG1pbl9iaXQpIHsKLQlyZXR1 cm4gKHNpemVfdClmYl9maW5kX2ltcGwoZmIsIG5iaXRzLCBtaW5fYml0LCAvKiB2YWwgKi8gZmFs c2UsCi0JICAgIC8qIGZvcndhcmQgKi8gdHJ1ZSk7Ci19Ci0KLS8qIFRoZSBzYW1lLCBidXQgbG9v a3MgZm9yIGFuIHVuc2V0IGJpdC4gKi8KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1mYl9mZnMoZmJf Z3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IG1pbl9iaXQpIHsKLQlyZXR1cm4gKHNp emVfdClmYl9maW5kX2ltcGwoZmIsIG5iaXRzLCBtaW5fYml0LCAvKiB2YWwgKi8gdHJ1ZSwKLQkg ICAgLyogZm9yd2FyZCAqLyB0cnVlKTsKLX0KLQotLyoKLSAqIEZpbmQgdGhlIGxhc3Qgc2V0IGJp dCBpbiB0aGUgYml0bWFwIHdpdGggYW4gaW5kZXggPD0gbWF4X2JpdC4gIFJldHVybnMgLTEgaWYK LSAqIG5vIHN1Y2ggYml0IGV4aXN0cy4KLSAqLwotc3RhdGljIGlubGluZSBzc2l6ZV90Ci1mYl9m bHUoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IG1heF9iaXQpIHsKLQlyZXR1 cm4gZmJfZmluZF9pbXBsKGZiLCBuYml0cywgbWF4X2JpdCwgLyogdmFsICovIGZhbHNlLAotCSAg ICAvKiBmb3J3YXJkICovIGZhbHNlKTsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90Ci1mYl9m bHMoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgc2l6ZV90IG1heF9iaXQpIHsKLQlyZXR1 cm4gZmJfZmluZF9pbXBsKGZiLCBuYml0cywgbWF4X2JpdCwgLyogdmFsICovIHRydWUsCi0JICAg IC8qIGZvcndhcmQgKi8gZmFsc2UpOwotfQotCi0vKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHdl IGZvdW5kIGEgcmFuZ2UuICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLWZiX2l0ZXJf cmFuZ2VfaW1wbChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQsIHNp emVfdCAqcl9iZWdpbiwKLSAgICBzaXplX3QgKnJfbGVuLCBib29sIHZhbCwgYm9vbCBmb3J3YXJk KSB7Ci0JYXNzZXJ0KHN0YXJ0IDwgbmJpdHMpOwotCXNzaXplX3QgbmV4dF9yYW5nZV9iZWdpbiA9 IGZiX2ZpbmRfaW1wbChmYiwgbmJpdHMsIHN0YXJ0LCB2YWwsIGZvcndhcmQpOwotCWlmICgoZm9y d2FyZCAmJiBuZXh0X3JhbmdlX2JlZ2luID09IChzc2l6ZV90KW5iaXRzKQotCSAgICB8fCAoIWZv cndhcmQgJiYgbmV4dF9yYW5nZV9iZWdpbiA9PSAoc3NpemVfdCktMSkpIHsKLQkJcmV0dXJuIGZh bHNlOwotCX0KLQkvKiBIYWxmIG9wZW4gcmFuZ2U7IHRoZSBzZXQgYml0cyBhcmUgW2JlZ2luLCBl bmQpLiAqLwotCXNzaXplX3QgbmV4dF9yYW5nZV9lbmQgPSBmYl9maW5kX2ltcGwoZmIsIG5iaXRz LCBuZXh0X3JhbmdlX2JlZ2luLCAhdmFsLAotCSAgICBmb3J3YXJkKTsKLQlpZiAoZm9yd2FyZCkg ewotCQkqcl9iZWdpbiA9IG5leHRfcmFuZ2VfYmVnaW47Ci0JCSpyX2xlbiA9IG5leHRfcmFuZ2Vf ZW5kIC0gbmV4dF9yYW5nZV9iZWdpbjsKLQl9IGVsc2UgewotCQkqcl9iZWdpbiA9IG5leHRfcmFu Z2VfZW5kICsgMTsKLQkJKnJfbGVuID0gbmV4dF9yYW5nZV9iZWdpbiAtIG5leHRfcmFuZ2VfZW5k OwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdo IHJhbmdlcyBvZiBzZXQgYml0cy4KLSAqCi0gKiBUcmllcyB0byBmaW5kIHRoZSBuZXh0IGNvbnRp Z3VvdXMgc2VxdWVuY2Ugb2Ygc2V0IGJpdHMgd2l0aCBhIGZpcnN0IGluZGV4ID49Ci0gKiBzdGFy dC4gIElmIG9uZSBleGlzdHMsIHB1dHMgdGhlIGVhcmxpZXN0IGJpdCBvZiB0aGUgcmFuZ2UgaW4g KnJfYmVnaW4sIGl0cwotICogbGVuZ3RoIGluICpyX2xlbiwgYW5kIHJldHVybnMgdHJ1ZS4gIE90 aGVyd2lzZSwgcmV0dXJucyBmYWxzZSAod2l0aG91dAotICogdG91Y2hpbmcgKnJfYmVnaW4gb3Ig KnJfZW5kKS4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1mYl9zcmFuZ2VfaXRlcihmYl9ncm91 cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQsIHNpemVfdCAqcl9iZWdpbiwKLSAg ICBzaXplX3QgKnJfbGVuKSB7Ci0JcmV0dXJuIGZiX2l0ZXJfcmFuZ2VfaW1wbChmYiwgbmJpdHMs IHN0YXJ0LCByX2JlZ2luLCByX2xlbiwKLQkgICAgLyogdmFsICovIHRydWUsIC8qIGZvcndhcmQg Ki8gdHJ1ZSk7Ci19Ci0KLS8qCi0gKiBUaGUgc2FtZSBhcyBmYl9zcmFuZ2VfaXRlciwgYnV0IHNl YXJjaGVzIGJhY2t3YXJkcyBmcm9tIHN0YXJ0IHJhdGhlciB0aGFuCi0gKiBmb3J3YXJkcy4gIChU aGUgcG9zaXRpb24gcmV0dXJuZWQgaXMgc3RpbGwgdGhlIGVhcmxpZXN0IGJpdCBpbiB0aGUgcmFu Z2UpLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLWZiX3NyYW5nZV9yaXRlcihmYl9ncm91cF90 ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQsIHNpemVfdCAqcl9iZWdpbiwKLSAgICBz aXplX3QgKnJfbGVuKSB7Ci0JcmV0dXJuIGZiX2l0ZXJfcmFuZ2VfaW1wbChmYiwgbmJpdHMsIHN0 YXJ0LCByX2JlZ2luLCByX2xlbiwKLQkgICAgLyogdmFsICovIHRydWUsIC8qIGZvcndhcmQgKi8g ZmFsc2UpOwotfQotCi0vKiBTaW1pbGFyIHRvIGZiX3NyYW5nZV9pdGVyLCBidXQgc2VhcmNoZXMg Zm9yIHVuc2V0IGJpdHMuICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLWZiX3VyYW5nZV9pdGVyKGZi X2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMsIHNpemVfdCBzdGFydCwgc2l6ZV90ICpyX2JlZ2lu LAotICAgIHNpemVfdCAqcl9sZW4pIHsKLQlyZXR1cm4gZmJfaXRlcl9yYW5nZV9pbXBsKGZiLCBu Yml0cywgc3RhcnQsIHJfYmVnaW4sIHJfbGVuLAotCSAgICAvKiB2YWwgKi8gZmFsc2UsIC8qIGZv cndhcmQgKi8gdHJ1ZSk7Ci19Ci0KLS8qIFNpbWlsYXIgdG8gZmJfc3JhbmdlX3JpdGVyLCBidXQg c2VhcmNoZXMgZm9yIHVuc2V0IGJpdHMuICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLWZiX3VyYW5n ZV9yaXRlcihmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQsIHNpemVf dCAqcl9iZWdpbiwKLSAgICBzaXplX3QgKnJfbGVuKSB7Ci0JcmV0dXJuIGZiX2l0ZXJfcmFuZ2Vf aW1wbChmYiwgbmJpdHMsIHN0YXJ0LCByX2JlZ2luLCByX2xlbiwKLQkgICAgLyogdmFsICovIGZh bHNlLCAvKiBmb3J3YXJkICovIGZhbHNlKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBz aXplX3QKLWZiX3JhbmdlX2xvbmdlc3RfaW1wbChmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRz LCBib29sIHZhbCkgewotCXNpemVfdCBiZWdpbiA9IDA7Ci0Jc2l6ZV90IGxvbmdlc3RfbGVuID0g MDsKLQlzaXplX3QgbGVuID0gMDsKLQl3aGlsZSAoYmVnaW4gPCBuYml0cyAmJiBmYl9pdGVyX3Jh bmdlX2ltcGwoZmIsIG5iaXRzLCBiZWdpbiwgJmJlZ2luLAotCSAgICAmbGVuLCB2YWwsIC8qIGZv cndhcmQgKi8gdHJ1ZSkpIHsKLQkJaWYgKGxlbiA+IGxvbmdlc3RfbGVuKSB7Ci0JCQlsb25nZXN0 X2xlbiA9IGxlbjsKLQkJfQotCQliZWdpbiArPSBsZW47Ci0JfQotCXJldHVybiBsb25nZXN0X2xl bjsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLWZiX3NyYW5nZV9sb25nZXN0KGZiX2dyb3Vw X3QgKmZiLCBzaXplX3QgbmJpdHMpIHsKLQlyZXR1cm4gZmJfcmFuZ2VfbG9uZ2VzdF9pbXBsKGZi LCBuYml0cywgLyogdmFsICovIHRydWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVfdAotZmJf dXJhbmdlX2xvbmdlc3QoZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cykgewotCXJldHVybiBm Yl9yYW5nZV9sb25nZXN0X2ltcGwoZmIsIG5iaXRzLCAvKiB2YWwgKi8gZmFsc2UpOwotfQotCi0v KgotICogSW5pdGlhbGl6ZXMgZWFjaCBiaXQgb2YgZHN0IHdpdGggdGhlIGJpdHdpc2UtQU5EIG9m IHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YKLSAqIHNyYzEgYW5kIHNyYzIuICBBbGwgYml0bWFw cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZmJfYml0 X2FuZChmYl9ncm91cF90ICpkc3QsIGZiX2dyb3VwX3QgKnNyYzEsIGZiX2dyb3VwX3QgKnNyYzIs IHNpemVfdCBuYml0cykgewotCXNpemVfdCBuZ3JvdXBzID0gRkJfTkdST1VQUyhuYml0cyk7Ci0J Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZ3JvdXBzOyBpKyspIHsKLQkJZHN0W2ldID0gc3JjMVtp XSAmIHNyYzJbaV07Ci0JfQotfQotCi0vKiBMaWtlIGZiX2JpdF9hbmQsIGJ1dCB3aXRoIGJpdHdp c2UtT1IuICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZiX2JpdF9vcihmYl9ncm91cF90ICpkc3Qs IGZiX2dyb3VwX3QgKnNyYzEsIGZiX2dyb3VwX3QgKnNyYzIsIHNpemVfdCBuYml0cykgewotCXNp emVfdCBuZ3JvdXBzID0gRkJfTkdST1VQUyhuYml0cyk7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkg PCBuZ3JvdXBzOyBpKyspIHsKLQkJZHN0W2ldID0gc3JjMVtpXSB8IHNyYzJbaV07Ci0JfQotfQot Ci0vKiBJbml0aWFsaXplcyBkc3QgYml0IGkgdG8gdGhlIG5lZ2F0aW9uIG9mIHNvdXJjZSBiaXQg aS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZmJfYml0X25vdChmYl9ncm91cF90ICpkc3QsIGZi X2dyb3VwX3QgKnNyYywgc2l6ZV90IG5iaXRzKSB7Ci0Jc2l6ZV90IG5ncm91cHMgPSBGQl9OR1JP VVBTKG5iaXRzKTsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5ncm91cHM7IGkrKykgewotCQlk c3RbaV0gPSB+c3JjW2ldOwotCX0KLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0ZC X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Z4cC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9meHAuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1YTk4Mi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2Z4 cC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5U RVJOQUxfRlhQX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfRlhQX0gKLQotLyoKLSAqIEEg c2ltcGxlIGZpeGVkLXBvaW50IG1hdGggaW1wbGVtZW50YXRpb24sIHN1cHBvcnRpbmcgb25seSB1 bnNpZ25lZCB2YWx1ZXMKLSAqICh3aXRoIG92ZXJmbG93IGJlaW5nIGFuIGVycm9yKS4KLSAqCi0g KiBJdCdzIG5vdCBpbiBnZW5lcmFsIHNhZmUgdG8gdXNlIGZsb2F0aW5nIHBvaW50IGluIGNvcmUg Y29kZSwgYmVjYXVzZSB2YXJpb3VzCi0gKiBsaWJjIGltcGxlbWVudGF0aW9ucyB3ZSBnZXQgbGlu a2VkIGFnYWluc3QgY2FuIGFzc3VtZSB0aGF0IG1hbGxvYyB3b24ndCB0b3VjaAotICogZmxvYXRp bmcgcG9pbnQgc3RhdGUgYW5kIGNhbGwgaXQgd2l0aCBhbiB1bnVzdWFsIGNhbGxpbmcgY29udmVu dGlvbi4KLSAqLwotCi0vKgotICogSGlnaCAxNiBiaXRzIGFyZSB0aGUgaW50ZWdlciBwYXJ0LCBs b3cgMTYgYXJlIHRoZSBmcmFjdGlvbmFsIHBhcnQuICBPcgotICogZXF1aXZhbGVudGx5LCByZXBy ID09IDIqKjE2ICogdmFsLCB3aGVyZSB3ZSB1c2UgInZhbCIgdG8gcmVmZXIgdG8gdGhlCi0gKiAo aW1hZ2luYXJ5KSBmcmFjdGlvbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cnVlIHZhbHVlLgot ICoKLSAqIFdlIHBpY2sgYSB1aW50MzJfdCBoZXJlIHNpbmNlIGl0J3MgY29udmVuaWVudCBpbiBz b21lIHBsYWNlcyB0bwotICogZG91YmxlIHRoZSByZXByZXNlbnRhdGlvbiBzaXplIChpLmUuIG11 bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiB1c2UKLSAqIDY0LWJpdCBpbnRlZ2VyIHR5cGVzKSwg YW5kIGEgdWludDY0X3QgaXMgdGhlIGxhcmdlc3QgdHlwZSB3ZSdyZQotICogY2VydGFpbiBpcyBh dmFpbGFibGUuCi0gKi8KLXR5cGVkZWYgdWludDMyX3QgZnhwX3Q7Ci0jZGVmaW5lIEZYUF9JTklU X0lOVCh4KSAoKHgpIDw8IDE2KQotI2RlZmluZSBGWFBfSU5JVF9QRVJDRU5UKHBjdCkgKCgocGN0 KSA8PCAxNikgLyAxMDApCi0KLS8qCi0gKiBBbW91bnQgb2YgcHJlY2lzaW9uIHVzZWQgaW4gcGFy c2luZyBhbmQgcHJpbnRpbmcgbnVtYmVycy4gIFRoZSBpbnRlZ2VyIGJvdW5kCi0gKiBpcyBzaW1w bHkgYmVjYXVzZSB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSBudW1iZXIgZ2V0cyAxNiBiaXRzLCBh bmQgc28gaXMKLSAqIGJvdW5kZWQgYnkgNjU1MzYuCi0gKgotICogV2UgdXNlIGEgbG90IG9mIHBy ZWNpc2lvbiBmb3IgdGhlIGZyYWN0aW9uYWwgcGFydCwgZXZlbiB0aG91Z2ggbW9zdCBvZiBpdAot ICogZ2V0cyByb3VuZGVkIG9mZjsgdGhpcyBsZXRzIHVzIGdldCBleGFjdCB2YWx1ZXMgZm9yIHRo ZSBpbXBvcnRhbnQgc3BlY2lhbAotICogY2FzZSB3aGVyZSB0aGUgZGVub21pbmF0b3IgaXMgYSBz bWFsbCBwb3dlciBvZiAyIChmb3IgaW5zdGFuY2UsCi0gKiAxLzUxMiA9PSAwLjAwMTk1MzEyNSBp cyBleGFjdGx5IHJlcHJlc2VudGFibGUgZXZlbiB3aXRoIG9ubHkgMTYgYml0cyBvZgotICogZnJh Y3Rpb25hbCBwcmVjaXNpb24pLiAgV2UgbmVlZCB0byBsZWZ0LXNoaWZ0IGJ5IDE2IGJlZm9yZSBk aXZpZGluZyBieQotICogMTAqKnByZWNpc2lvbiwgc28gd2UgcGljayBwcmVjaXNpb24gdG8gYmUg Zmxvb3IobG9nKDIqKjQ4KSkgPSAxNC4KLSAqLwotI2RlZmluZSBGWFBfSU5URUdFUl9QQVJUX0RJ R0lUUyA1Ci0jZGVmaW5lIEZYUF9GUkFDVElPTkFMX1BBUlRfRElHSVRTIDE0Ci0KLS8qCi0gKiBJ biBhZGRpdGlvbiB0byB0aGUgaW50ZWdlciBhbmQgZnJhY3Rpb25hbCBwYXJ0cyBvZiB0aGUgbnVt YmVyLCB3ZSBuZWVkIHRvCi0gKiBpbmNsdWRlIGEgbnVsbCBjaGFyYWN0ZXIgYW5kIChwb3NzaWJs eSkgYSBkZWNpbWFsIHBvaW50LgotICovCi0jZGVmaW5lIEZYUF9CVUZfU0laRSAoRlhQX0lOVEVH RVJfUEFSVF9ESUdJVFMgKyBGWFBfRlJBQ1RJT05BTF9QQVJUX0RJR0lUUyArIDIpCi0KLXN0YXRp YyBpbmxpbmUgZnhwX3QKLWZ4cF9hZGQoZnhwX3QgYSwgZnhwX3QgYikgewotCXJldHVybiBhICsg YjsKLX0KLQotc3RhdGljIGlubGluZSBmeHBfdAotZnhwX3N1YihmeHBfdCBhLCBmeHBfdCBiKSB7 Ci0JYXNzZXJ0KGEgPj0gYik7Ci0JcmV0dXJuIGEgLSBiOwotfQotCi1zdGF0aWMgaW5saW5lIGZ4 cF90Ci1meHBfbXVsKGZ4cF90IGEsIGZ4cF90IGIpIHsKLQl1aW50NjRfdCB1bnNoaWZ0ZWQgPSAo dWludDY0X3QpYSAqICh1aW50NjRfdCliOwotCS8qCi0JICogVW5zaGlmdGVkIGlzIChhLnZhbCAq IDIqKjE2KSAqIChiLnZhbCAqIDIqKjE2KQotCSAqICAgPT0gKGEudmFsICogYi52YWwpICogMioq MzIsIGJ1dCB3ZSB3YW50Ci0JICogKGEudmFsICogYi52YWwpICogMiAqKiAxNi4KLQkgKi8KLQly ZXR1cm4gKHVpbnQzMl90KSh1bnNoaWZ0ZWQgPj4gMTYpOwotfQotCi1zdGF0aWMgaW5saW5lIGZ4 cF90Ci1meHBfZGl2KGZ4cF90IGEsIGZ4cF90IGIpIHsKLQlhc3NlcnQoYiAhPSAwKTsKLQl1aW50 NjRfdCB1bnNoaWZ0ZWQgPSAoKHVpbnQ2NF90KWEgPDwgMzIpIC8gKHVpbnQ2NF90KWI7Ci0JLyoK LQkgKiBVbnNoaWZ0ZWQgaXMgKGEudmFsICogMioqMTYpICogKDIqKjMyKSAvIChiLnZhbCAqIDIq KjE2KQotCSAqICAgPT0gKGEudmFsIC8gYi52YWwpICogKDIgKiogMzIpLCB3aGljaCBhZ2FpbiBj b3JyZXNwb25kcyB0byBhIHJpZ2h0Ci0JICogICBzaGlmdCBvZiAxNi4KLQkgKi8KLQlyZXR1cm4g KHVpbnQzMl90KSh1bnNoaWZ0ZWQgPj4gMTYpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90 Ci1meHBfcm91bmRfZG93bihmeHBfdCBhKSB7Ci0JcmV0dXJuIGEgPj4gMTY7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgdWludDMyX3QKLWZ4cF9yb3VuZF9uZWFyZXN0KGZ4cF90IGEpIHsKLQl1aW50MzJf dCBmcmFjdGlvbmFsX3BhcnQgPSAoYSAgJiAoKDFVIDw8IDE2KSAtIDEpKTsKLQl1aW50MzJfdCBp bmNyZW1lbnQgPSAodWludDMyX3QpKGZyYWN0aW9uYWxfcGFydCA+PSAoMVUgPDwgMTUpKTsKLQly ZXR1cm4gKGEgPj4gMTYpICsgaW5jcmVtZW50OwotfQotCi0vKgotICogQXBwcm94aW1hdGVseSBj b21wdXRlcyB4ICogZnJhYywgd2l0aG91dCB0aGUgc2l6ZSBsaW1pdGF0aW9ucyB0aGF0IHdvdWxk IGJlCi0gKiBpbXBvc2VkIGJ5IGNvbnZlcnRpbmcgdSB0byBhbiBmeHBfdC4KLSAqLwotc3RhdGlj IGlubGluZSBzaXplX3QKLWZ4cF9tdWxfZnJhYyhzaXplX3QgeF9vcmlnLCBmeHBfdCBmcmFjKSB7 Ci0JYXNzZXJ0KGZyYWMgPD0gKDFVIDw8IDE2KSk7Ci0JLyoKLQkgKiBXb3JrIGFyb3VuZCBhbiBv dmVyLWVudGh1c2lhc3RpYyB3YXJuaW5nIGFib3V0IHR5cGUgbGltaXRzIGJlbG93IChvbgotCSAq IDMyLWJpdCBwbGF0Zm9ybXMsIGEgc2l6ZV90IGlzIGFsd2F5cyBsZXNzIHRoYW4gMVVMTCA8PCA0 OCkuCi0JICovCi0JdWludDY0X3QgeCA9ICh1aW50NjRfdCl4X29yaWc7Ci0JLyoKLQkgKiBJZiB3 ZSBjYW4gZ3VhcmFudGVlIG5vIG92ZXJmbG93LCBtdWx0aXBseSBmaXJzdCBiZWZvcmUgc2hpZnRp bmcsIHRvCi0JICogcHJlc2VydmUgc29tZSBwcmVjaXNpb24uICBPdGhlcndpc2UsIHNoaWZ0IGZp cnN0IGFuZCB0aGVuIG11bHRpcGx5LgotCSAqIEluIHRoZSBsYXR0ZXIgY2FzZSwgd2Ugb25seSBs b3NlIHRoZSBsb3cgMTYgYml0cyBvZiBhIDQ4LWJpdCBudW1iZXIsCi0JICogc28gd2UncmUgc3Rp bGwgYWNjdXJhdGUgdG8gd2l0aGluIDEvMioqMzIuCi0JICovCi0JaWYgKHggPCAoMVVMTCA8PCA0 OCkpIHsKLQkJcmV0dXJuIChzaXplX3QpKCh4ICogZnJhYykgPj4gMTYpOwotCX0gZWxzZSB7Ci0J CXJldHVybiAoc2l6ZV90KSgoeCA+PiAxNikgKiAodWludDY0X3QpZnJhYyk7Ci0JfQotfQotCi0v KgotICogUmV0dXJucyB0cnVlIG9uIGVycm9yLiAgT3RoZXJ3aXNlLCByZXR1cm5zIGZhbHNlIGFu ZCB1cGRhdGVzICpwdHIgdG8gcG9pbnQgdG8KLSAqIHRoZSBmaXJzdCBjaGFyYWN0ZXIgbm90IHBh cnNlZCAoYmVjYXVzZSBpdCB3YXNuJ3QgYSBkaWdpdCkuCi0gKi8KLWJvb2wgZnhwX3BhcnNlKGZ4 cF90ICphLCBjb25zdCBjaGFyICpwdHIsIGNoYXIgKiplbmQpOwotdm9pZCBmeHBfcHJpbnQoZnhw X3QgYSwgY2hhciBidWZbRlhQX0JVRl9TSVpFXSk7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRF Uk5BTF9GWFBfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaGFzaC5oIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9oYXNo LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmOTQ1NjcuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9oYXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjAgKzAsMCBAQAotI2lmbmRlZiBK RU1BTExPQ19JTlRFUk5BTF9IQVNIX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfSEFTSF9I Ci0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKLQotLyoKLSAqIFRoZSBm b2xsb3dpbmcgaGFzaCBmdW5jdGlvbiBpcyBiYXNlZCBvbiBNdXJtdXJIYXNoMywgcGxhY2VkIGlu dG8gdGhlIHB1YmxpYwotICogZG9tYWluIGJ5IEF1c3RpbiBBcHBsZWJ5LiAgU2VlIGh0dHBzOi8v Z2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlciBmb3IKLSAqIGRldGFpbHMuCi0gKi8KLQotLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLS8qIEludGVybmFsIGltcGxlbWVudGF0aW9uLiAqLwotc3Rh dGljIGlubGluZSB1aW50MzJfdAotaGFzaF9yb3RsXzMyKHVpbnQzMl90IHgsIGludDhfdCByKSB7 Ci0JcmV0dXJuICgoeCA8PCByKSB8ICh4ID4+ICgzMiAtIHIpKSk7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgdWludDY0X3QKLWhhc2hfcm90bF82NCh1aW50NjRfdCB4LCBpbnQ4X3QgcikgewotCXJldHVy biAoKHggPDwgcikgfCAoeCA+PiAoNjQgLSByKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQz Ml90Ci1oYXNoX2dldF9ibG9ja18zMihjb25zdCB1aW50MzJfdCAqcCwgaW50IGkpIHsKLQkvKiBI YW5kbGUgdW5hbGlnbmVkIHJlYWQuICovCi0JaWYgKHVubGlrZWx5KCh1aW50cHRyX3QpcCAmIChz aXplb2YodWludDMyX3QpLTEpKSAhPSAwKSB7Ci0JCXVpbnQzMl90IHJldDsKLQotCQltZW1jcHko JnJldCwgKHVpbnQ4X3QgKikocCArIGkpLCBzaXplb2YodWludDMyX3QpKTsKLQkJcmV0dXJuIHJl dDsKLQl9Ci0KLQlyZXR1cm4gcFtpXTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjRfdAotaGFz aF9nZXRfYmxvY2tfNjQoY29uc3QgdWludDY0X3QgKnAsIGludCBpKSB7Ci0JLyogSGFuZGxlIHVu YWxpZ25lZCByZWFkLiAqLwotCWlmICh1bmxpa2VseSgodWludHB0cl90KXAgJiAoc2l6ZW9mKHVp bnQ2NF90KS0xKSkgIT0gMCkgewotCQl1aW50NjRfdCByZXQ7Ci0KLQkJbWVtY3B5KCZyZXQsICh1 aW50OF90ICopKHAgKyBpKSwgc2l6ZW9mKHVpbnQ2NF90KSk7Ci0JCXJldHVybiByZXQ7Ci0JfQot Ci0JcmV0dXJuIHBbaV07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDMyX3QKLWhhc2hfZm1peF8z Mih1aW50MzJfdCBoKSB7Ci0JaCBePSBoID4+IDE2OwotCWggKj0gMHg4NWViY2E2YjsKLQloIF49 IGggPj4gMTM7Ci0JaCAqPSAweGMyYjJhZTM1OwotCWggXj0gaCA+PiAxNjsKLQotCXJldHVybiBo OwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1oYXNoX2ZtaXhfNjQodWludDY0X3Qgaykg ewotCWsgXj0gayA+PiAzMzsKLQlrICo9IEtRVSgweGZmNTFhZmQ3ZWQ1NThjY2QpOwotCWsgXj0g ayA+PiAzMzsKLQlrICo9IEtRVSgweGM0Y2ViOWZlMWE4NWVjNTMpOwotCWsgXj0gayA+PiAzMzsK LQotCXJldHVybiBrOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90Ci1oYXNoX3g4Nl8zMihj b25zdCB2b2lkICprZXksIGludCBsZW4sIHVpbnQzMl90IHNlZWQpIHsKLQljb25zdCB1aW50OF90 ICpkYXRhID0gKGNvbnN0IHVpbnQ4X3QgKikga2V5OwotCWNvbnN0IGludCBuYmxvY2tzID0gbGVu IC8gNDsKLQotCXVpbnQzMl90IGgxID0gc2VlZDsKLQotCWNvbnN0IHVpbnQzMl90IGMxID0gMHhj YzllMmQ1MTsKLQljb25zdCB1aW50MzJfdCBjMiA9IDB4MWI4NzM1OTM7Ci0KLQkvKiBib2R5ICov Ci0JewotCQljb25zdCB1aW50MzJfdCAqYmxvY2tzID0gKGNvbnN0IHVpbnQzMl90ICopIChkYXRh ICsgbmJsb2Nrcyo0KTsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gLW5ibG9ja3M7IGk7IGkrKykg ewotCQkJdWludDMyX3QgazEgPSBoYXNoX2dldF9ibG9ja18zMihibG9ja3MsIGkpOwotCi0JCQlr MSAqPSBjMTsKLQkJCWsxID0gaGFzaF9yb3RsXzMyKGsxLCAxNSk7Ci0JCQlrMSAqPSBjMjsKLQot CQkJaDEgXj0gazE7Ci0JCQloMSA9IGhhc2hfcm90bF8zMihoMSwgMTMpOwotCQkJaDEgPSBoMSo1 ICsgMHhlNjU0NmI2NDsKLQkJfQotCX0KLQotCS8qIHRhaWwgKi8KLQl7Ci0JCWNvbnN0IHVpbnQ4 X3QgKnRhaWwgPSAoY29uc3QgdWludDhfdCAqKSAoZGF0YSArIG5ibG9ja3MqNCk7Ci0KLQkJdWlu dDMyX3QgazEgPSAwOwotCi0JCXN3aXRjaCAobGVuICYgMykgewotCQljYXNlIDM6IGsxIF49IHRh aWxbMl0gPDwgMTY7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOwotCQljYXNlIDI6IGsxIF49IHRhaWxb MV0gPDwgODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWNhc2UgMTogazEgXj0gdGFpbFswXTsg azEgKj0gYzE7IGsxID0gaGFzaF9yb3RsXzMyKGsxLCAxNSk7Ci0JCQlrMSAqPSBjMjsgaDEgXj0g azE7Ci0JCX0KLQl9Ci0KLQkvKiBmaW5hbGl6YXRpb24gKi8KLQloMSBePSBsZW47Ci0KLQloMSA9 IGhhc2hfZm1peF8zMihoMSk7Ci0KLQlyZXR1cm4gaDE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9p ZAotaGFzaF94ODZfMTI4KGNvbnN0IHZvaWQgKmtleSwgY29uc3QgaW50IGxlbiwgdWludDMyX3Qg c2VlZCwKLSAgICB1aW50NjRfdCByX291dFsyXSkgewotCWNvbnN0IHVpbnQ4X3QgKiBkYXRhID0g KGNvbnN0IHVpbnQ4X3QgKikga2V5OwotCWNvbnN0IGludCBuYmxvY2tzID0gbGVuIC8gMTY7Ci0K LQl1aW50MzJfdCBoMSA9IHNlZWQ7Ci0JdWludDMyX3QgaDIgPSBzZWVkOwotCXVpbnQzMl90IGgz ID0gc2VlZDsKLQl1aW50MzJfdCBoNCA9IHNlZWQ7Ci0KLQljb25zdCB1aW50MzJfdCBjMSA9IDB4 MjM5Yjk2MWI7Ci0JY29uc3QgdWludDMyX3QgYzIgPSAweGFiMGU5Nzg5OwotCWNvbnN0IHVpbnQz Ml90IGMzID0gMHgzOGIzNGFlNTsKLQljb25zdCB1aW50MzJfdCBjNCA9IDB4YTFlMzhiOTM7Ci0K LQkvKiBib2R5ICovCi0JewotCQljb25zdCB1aW50MzJfdCAqYmxvY2tzID0gKGNvbnN0IHVpbnQz Ml90ICopIChkYXRhICsgbmJsb2NrcyoxNik7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IC1uYmxv Y2tzOyBpOyBpKyspIHsKLQkJCXVpbnQzMl90IGsxID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tz LCBpKjQgKyAwKTsKLQkJCXVpbnQzMl90IGsyID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tzLCBp KjQgKyAxKTsKLQkJCXVpbnQzMl90IGszID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tzLCBpKjQg KyAyKTsKLQkJCXVpbnQzMl90IGs0ID0gaGFzaF9nZXRfYmxvY2tfMzIoYmxvY2tzLCBpKjQgKyAz KTsKLQotCQkJazEgKj0gYzE7IGsxID0gaGFzaF9yb3RsXzMyKGsxLCAxNSk7IGsxICo9IGMyOyBo MSBePSBrMTsKLQotCQkJaDEgPSBoYXNoX3JvdGxfMzIoaDEsIDE5KTsgaDEgKz0gaDI7Ci0JCQlo MSA9IGgxKjUgKyAweDU2MWNjZDFiOwotCi0JCQlrMiAqPSBjMjsgazIgPSBoYXNoX3JvdGxfMzIo azIsIDE2KTsgazIgKj0gYzM7IGgyIF49IGsyOwotCi0JCQloMiA9IGhhc2hfcm90bF8zMihoMiwg MTcpOyBoMiArPSBoMzsKLQkJCWgyID0gaDIqNSArIDB4MGJjYWE3NDc7Ci0KLQkJCWszICo9IGMz OyBrMyA9IGhhc2hfcm90bF8zMihrMywgMTcpOyBrMyAqPSBjNDsgaDMgXj0gazM7Ci0KLQkJCWgz ID0gaGFzaF9yb3RsXzMyKGgzLCAxNSk7IGgzICs9IGg0OwotCQkJaDMgPSBoMyo1ICsgMHg5NmNk MWMzNTsKLQotCQkJazQgKj0gYzQ7IGs0ID0gaGFzaF9yb3RsXzMyKGs0LCAxOCk7IGs0ICo9IGMx OyBoNCBePSBrNDsKLQotCQkJaDQgPSBoYXNoX3JvdGxfMzIoaDQsIDEzKTsgaDQgKz0gaDE7Ci0J CQloNCA9IGg0KjUgKyAweDMyYWMzYjE3OwotCQl9Ci0JfQotCi0JLyogdGFpbCAqLwotCXsKLQkJ Y29uc3QgdWludDhfdCAqdGFpbCA9IChjb25zdCB1aW50OF90ICopIChkYXRhICsgbmJsb2Nrcyox Nik7Ci0JCXVpbnQzMl90IGsxID0gMDsKLQkJdWludDMyX3QgazIgPSAwOwotCQl1aW50MzJfdCBr MyA9IDA7Ci0JCXVpbnQzMl90IGs0ID0gMDsKLQotCQlzd2l0Y2ggKGxlbiAmIDE1KSB7Ci0JCWNh c2UgMTU6IGs0IF49IHRhaWxbMTRdIDw8IDE2OyBKRU1BTExPQ19GQUxMVEhST1VHSDsKLQkJY2Fz ZSAxNDogazQgXj0gdGFpbFsxM10gPDwgODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWNhc2Ug MTM6IGs0IF49IHRhaWxbMTJdIDw8IDA7Ci0JCQlrNCAqPSBjNDsgazQgPSBoYXNoX3JvdGxfMzIo azQsIDE4KTsgazQgKj0gYzE7IGg0IF49IGs0OwotCQkJSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0J CWNhc2UgMTI6IGszIF49ICh1aW50MzJfdCkgdGFpbFsxMV0gPDwgMjQ7IEpFTUFMTE9DX0ZBTExU SFJPVUdIOwotCQljYXNlIDExOiBrMyBePSB0YWlsWzEwXSA8PCAxNjsgSkVNQUxMT0NfRkFMTFRI Uk9VR0g7Ci0JCWNhc2UgMTA6IGszIF49IHRhaWxbIDldIDw8IDg7IEpFTUFMTE9DX0ZBTExUSFJP VUdIOwotCQljYXNlICA5OiBrMyBePSB0YWlsWyA4XSA8PCAwOwotCQkJazMgKj0gYzM7IGszID0g aGFzaF9yb3RsXzMyKGszLCAxNyk7IGszICo9IGM0OyBoMyBePSBrMzsKLQkJCUpFTUFMTE9DX0ZB TExUSFJPVUdIOwotCQljYXNlICA4OiBrMiBePSAodWludDMyX3QpIHRhaWxbIDddIDw8IDI0OyBK RU1BTExPQ19GQUxMVEhST1VHSDsKLQkJY2FzZSAgNzogazIgXj0gdGFpbFsgNl0gPDwgMTY7IEpF TUFMTE9DX0ZBTExUSFJPVUdIOwotCQljYXNlICA2OiBrMiBePSB0YWlsWyA1XSA8PCA4OyBKRU1B TExPQ19GQUxMVEhST1VHSDsKLQkJY2FzZSAgNTogazIgXj0gdGFpbFsgNF0gPDwgMDsKLQkJCWsy ICo9IGMyOyBrMiA9IGhhc2hfcm90bF8zMihrMiwgMTYpOyBrMiAqPSBjMzsgaDIgXj0gazI7Ci0J CQlKRU1BTExPQ19GQUxMVEhST1VHSDsKLQkJY2FzZSAgNDogazEgXj0gKHVpbnQzMl90KSB0YWls WyAzXSA8PCAyNDsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWNhc2UgIDM6IGsxIF49IHRhaWxb IDJdIDw8IDE2OyBKRU1BTExPQ19GQUxMVEhST1VHSDsKLQkJY2FzZSAgMjogazEgXj0gdGFpbFsg MV0gPDwgODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWNhc2UgIDE6IGsxIF49IHRhaWxbIDBd IDw8IDA7Ci0JCQlrMSAqPSBjMTsgazEgPSBoYXNoX3JvdGxfMzIoazEsIDE1KTsgazEgKj0gYzI7 IGgxIF49IGsxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKiBmaW5hbGl6YXRpb24gKi8KLQlo MSBePSBsZW47IGgyIF49IGxlbjsgaDMgXj0gbGVuOyBoNCBePSBsZW47Ci0KLQloMSArPSBoMjsg aDEgKz0gaDM7IGgxICs9IGg0OwotCWgyICs9IGgxOyBoMyArPSBoMTsgaDQgKz0gaDE7Ci0KLQlo MSA9IGhhc2hfZm1peF8zMihoMSk7Ci0JaDIgPSBoYXNoX2ZtaXhfMzIoaDIpOwotCWgzID0gaGFz aF9mbWl4XzMyKGgzKTsKLQloNCA9IGhhc2hfZm1peF8zMihoNCk7Ci0KLQloMSArPSBoMjsgaDEg Kz0gaDM7IGgxICs9IGg0OwotCWgyICs9IGgxOyBoMyArPSBoMTsgaDQgKz0gaDE7Ci0KLQlyX291 dFswXSA9ICgoKHVpbnQ2NF90KSBoMikgPDwgMzIpIHwgaDE7Ci0Jcl9vdXRbMV0gPSAoKCh1aW50 NjRfdCkgaDQpIDw8IDMyKSB8IGgzOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWhhc2hfeDY0 XzEyOChjb25zdCB2b2lkICprZXksIGNvbnN0IGludCBsZW4sIGNvbnN0IHVpbnQzMl90IHNlZWQs Ci0gICAgdWludDY0X3Qgcl9vdXRbMl0pIHsKLQljb25zdCB1aW50OF90ICpkYXRhID0gKGNvbnN0 IHVpbnQ4X3QgKikga2V5OwotCWNvbnN0IGludCBuYmxvY2tzID0gbGVuIC8gMTY7Ci0KLQl1aW50 NjRfdCBoMSA9IHNlZWQ7Ci0JdWludDY0X3QgaDIgPSBzZWVkOwotCi0JY29uc3QgdWludDY0X3Qg YzEgPSBLUVUoMHg4N2MzN2I5MTExNDI1M2Q1KTsKLQljb25zdCB1aW50NjRfdCBjMiA9IEtRVSgw eDRjZjVhZDQzMjc0NTkzN2YpOwotCi0JLyogYm9keSAqLwotCXsKLQkJY29uc3QgdWludDY0X3Qg KmJsb2NrcyA9IChjb25zdCB1aW50NjRfdCAqKSAoZGF0YSk7Ci0JCWludCBpOwotCi0JCWZvciAo aSA9IDA7IGkgPCBuYmxvY2tzOyBpKyspIHsKLQkJCXVpbnQ2NF90IGsxID0gaGFzaF9nZXRfYmxv Y2tfNjQoYmxvY2tzLCBpKjIgKyAwKTsKLQkJCXVpbnQ2NF90IGsyID0gaGFzaF9nZXRfYmxvY2tf NjQoYmxvY2tzLCBpKjIgKyAxKTsKLQotCQkJazEgKj0gYzE7IGsxID0gaGFzaF9yb3RsXzY0KGsx LCAzMSk7IGsxICo9IGMyOyBoMSBePSBrMTsKLQotCQkJaDEgPSBoYXNoX3JvdGxfNjQoaDEsIDI3 KTsgaDEgKz0gaDI7Ci0JCQloMSA9IGgxKjUgKyAweDUyZGNlNzI5OwotCi0JCQlrMiAqPSBjMjsg azIgPSBoYXNoX3JvdGxfNjQoazIsIDMzKTsgazIgKj0gYzE7IGgyIF49IGsyOwotCi0JCQloMiA9 IGhhc2hfcm90bF82NChoMiwgMzEpOyBoMiArPSBoMTsKLQkJCWgyID0gaDIqNSArIDB4Mzg0OTVh YjU7Ci0JCX0KLQl9Ci0KLQkvKiB0YWlsICovCi0JewotCQljb25zdCB1aW50OF90ICp0YWlsID0g KGNvbnN0IHVpbnQ4X3QqKShkYXRhICsgbmJsb2NrcyoxNik7Ci0JCXVpbnQ2NF90IGsxID0gMDsK LQkJdWludDY0X3QgazIgPSAwOwotCi0JCXN3aXRjaCAobGVuICYgMTUpIHsKLQkJY2FzZSAxNTog azIgXj0gKCh1aW50NjRfdCkodGFpbFsxNF0pKSA8PCA0ODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7 Ci0JCWNhc2UgMTQ6IGsyIF49ICgodWludDY0X3QpKHRhaWxbMTNdKSkgPDwgNDA7IEpFTUFMTE9D X0ZBTExUSFJPVUdIOwotCQljYXNlIDEzOiBrMiBePSAoKHVpbnQ2NF90KSh0YWlsWzEyXSkpIDw8 IDMyOyBKRU1BTExPQ19GQUxMVEhST1VHSDsKLQkJY2FzZSAxMjogazIgXj0gKCh1aW50NjRfdCko dGFpbFsxMV0pKSA8PCAyNDsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWNhc2UgMTE6IGsyIF49 ICgodWludDY0X3QpKHRhaWxbMTBdKSkgPDwgMTY7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOwotCQlj YXNlIDEwOiBrMiBePSAoKHVpbnQ2NF90KSh0YWlsWyA5XSkpIDw8IDg7ICBKRU1BTExPQ19GQUxM VEhST1VHSDsKLQkJY2FzZSAgOTogazIgXj0gKCh1aW50NjRfdCkodGFpbFsgOF0pKSA8PCAwOwot CQkJazIgKj0gYzI7IGsyID0gaGFzaF9yb3RsXzY0KGsyLCAzMyk7IGsyICo9IGMxOyBoMiBePSBr MjsKLQkJCUpFTUFMTE9DX0ZBTExUSFJPVUdIOwotCQljYXNlICA4OiBrMSBePSAoKHVpbnQ2NF90 KSh0YWlsWyA3XSkpIDw8IDU2OyBKRU1BTExPQ19GQUxMVEhST1VHSDsKLQkJY2FzZSAgNzogazEg Xj0gKCh1aW50NjRfdCkodGFpbFsgNl0pKSA8PCA0ODsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0J CWNhc2UgIDY6IGsxIF49ICgodWludDY0X3QpKHRhaWxbIDVdKSkgPDwgNDA7IEpFTUFMTE9DX0ZB TExUSFJPVUdIOwotCQljYXNlICA1OiBrMSBePSAoKHVpbnQ2NF90KSh0YWlsWyA0XSkpIDw8IDMy OyBKRU1BTExPQ19GQUxMVEhST1VHSDsKLQkJY2FzZSAgNDogazEgXj0gKCh1aW50NjRfdCkodGFp bFsgM10pKSA8PCAyNDsgSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWNhc2UgIDM6IGsxIF49ICgo dWludDY0X3QpKHRhaWxbIDJdKSkgPDwgMTY7IEpFTUFMTE9DX0ZBTExUSFJPVUdIOwotCQljYXNl ICAyOiBrMSBePSAoKHVpbnQ2NF90KSh0YWlsWyAxXSkpIDw8IDg7ICBKRU1BTExPQ19GQUxMVEhS T1VHSDsKLQkJY2FzZSAgMTogazEgXj0gKCh1aW50NjRfdCkodGFpbFsgMF0pKSA8PCAwOwotCQkJ azEgKj0gYzE7IGsxID0gaGFzaF9yb3RsXzY0KGsxLCAzMSk7IGsxICo9IGMyOyBoMSBePSBrMTsK LQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogZmluYWxpemF0aW9uICovCi0JaDEgXj0gbGVuOyBo MiBePSBsZW47Ci0KLQloMSArPSBoMjsKLQloMiArPSBoMTsKLQotCWgxID0gaGFzaF9mbWl4XzY0 KGgxKTsKLQloMiA9IGhhc2hfZm1peF82NChoMik7Ci0KLQloMSArPSBoMjsKLQloMiArPSBoMTsK LQotCXJfb3V0WzBdID0gaDE7Ci0Jcl9vdXRbMV0gPSBoMjsKLX0KLQotLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLS8qIEFQSS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotaGFzaChjb25zdCB2b2lk ICprZXksIHNpemVfdCBsZW4sIGNvbnN0IHVpbnQzMl90IHNlZWQsIHNpemVfdCByX2hhc2hbMl0p IHsKLQlhc3NlcnQobGVuIDw9IElOVF9NQVgpOyAvKiBVbmZvcnR1bmF0ZSBpbXBsZW1lbnRhdGlv biBsaW1pdGF0aW9uLiAqLwotCi0jaWYgKExHX1NJWkVPRl9QVFIgPT0gMyAmJiAhZGVmaW5lZChK RU1BTExPQ19CSUdfRU5ESUFOKSkKLQloYXNoX3g2NF8xMjgoa2V5LCAoaW50KWxlbiwgc2VlZCwg KHVpbnQ2NF90ICopcl9oYXNoKTsKLSNlbHNlCi0JewotCQl1aW50NjRfdCBoYXNoZXNbMl07Ci0J CWhhc2hfeDg2XzEyOChrZXksIChpbnQpbGVuLCBzZWVkLCBoYXNoZXMpOwotCQlyX2hhc2hbMF0g PSAoc2l6ZV90KWhhc2hlc1swXTsKLQkJcl9oYXNoWzFdID0gKHNpemVfdCloYXNoZXNbMV07Ci0J fQotI2VuZGlmCi19Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9IQVNIX0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL2hvb2suaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaG9vay5oCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBlZTI0NmIxLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaG9vay5oCisr KyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxf SE9PS19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0hPT0tfSAotCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvdHNkLmgiCi0KLS8qCi0gKiBUaGlzIEFQSSBpcyAqZXh0cmVtZWx5KiBl eHBlcmltZW50YWwsIGFuZCBtYXkgZ2V0IHJpcHBlZCBvdXQsIGNoYW5nZWQgaW4gQVBJLQotICog YW5kIEFCSS1pbmNvbXBhdGlibGUgd2F5cywgYmUgaW5zdWZmaWNpZW50bHkgb3IgaW5jb3JyZWN0 bHkgZG9jdW1lbnRlZCwgZXRjLgotICoKLSAqIEl0IGFsbG93cyBob29raW5nIHRoZSBzdGF0ZWZ1 bCBwYXJ0cyBvZiB0aGUgQVBJIHRvIHNlZSBjaGFuZ2VzIGFzIHRoZXkKLSAqIGhhcHBlbi4KLSAq Ci0gKiBBbGxvY2F0aW9uIGhvb2tzIGFyZSBjYWxsZWQgYWZ0ZXIgdGhlIGFsbG9jYXRpb24gaXMg ZG9uZSwgZnJlZSBob29rcyBhcmUKLSAqIGNhbGxlZCBiZWZvcmUgdGhlIGZyZWUgaXMgZG9uZSwg YW5kIGV4cGFuZCBob29rcyBhcmUgY2FsbGVkIGFmdGVyIHRoZQotICogYWxsb2NhdGlvbiBpcyBl eHBhbmRlZC4KLSAqCi0gKiBGb3IgcmVhbGxvYyBhbmQgcmFsbG9jeCwgaWYgdGhlIGV4cGFuc2lv biBoYXBwZW5zIGluIHBsYWNlLCB0aGUgZXhwYW5zaW9uCi0gKiBob29rIGlzIGNhbGxlZC4gIElm IGl0IGlzIG1vdmVkLCB0aGVuIHRoZSBhbGxvYyBob29rIGlzIGNhbGxlZCBvbiB0aGUgbmV3Ci0g KiBsb2NhdGlvbiwgYW5kIHRoZW4gdGhlIGZyZWUgaG9vayBpcyBjYWxsZWQgb24gdGhlIG9sZCBs b2NhdGlvbiAoaS5lLiBib3RoCi0gKiBob29rcyBhcmUgaW52b2tlZCBpbiBiZXR3ZWVuIHRoZSBh bGxvYyBhbmQgdGhlIGRhbGxvYykuCi0gKgotICogSWYgd2UgcmV0dXJuIE5VTEwgZnJvbSBPT00s IHRoZW4gdXNpemUgbWlnaHQgbm90IGJlIHRydXN0d29ydGh5LiAgQ2FsbGluZwotICogcmVhbGxv YyhOVUxMLCBzaXplKSBvbmx5IGNhbGxzIHRoZSBhbGxvYyBob29rLCBhbmQgY2FsbGluZyByZWFs bG9jKHB0ciwgMCkKLSAqIG9ubHkgY2FsbHMgdGhlIGZyZWUgaG9vay4gIChDYWxsaW5nIHJlYWxs b2MoTlVMTCwgMCkgaXMgdHJlYXRlZCBhcyBtYWxsb2MoMCksCi0gKiBhbmQgb25seSBjYWxscyB0 aGUgYWxsb2MgaG9vaykuCi0gKgotICogUmVlbnRyYW5jeToKLSAqICAgUmVlbnRyYW5jeSBpcyBn dWFyZGVkIGFnYWluc3QgZnJvbSB3aXRoaW4gdGhlIGhvb2sgaW1wbGVtZW50YXRpb24uICBJZiB5 b3UKLSAqICAgY2FsbCBhbGxvY2F0b3IgZnVuY3Rpb25zIGZyb20gd2l0aGluIGEgaG9vaywgdGhl IGhvb2tzIHdpbGwgbm90IGJlIGludm9rZWQKLSAqICAgYWdhaW4uCi0gKiBUaHJlYWRpbmc6Ci0g KiAgIFRoZSBpbnN0YWxsYXRpb24gb2YgYSBob29rIHN5bmNocm9uaXplcyB3aXRoIGFsbCBpdHMg dXNlcy4gIElmIHlvdSBjYW4KLSAqICAgcHJvdmUgdGhlIGluc3RhbGxhdGlvbiBvZiBhIGhvb2sg aGFwcGVucy1iZWZvcmUgYSBqZW1hbGxvYyBlbnRyeSBwb2ludCwKLSAqICAgdGhlbiB0aGUgaG9v ayB3aWxsIGdldCBpbnZva2VkICh1bmxlc3MgdGhlcmUncyBhIHJhY2luZyByZW1vdmFsKS4KLSAq Ci0gKiAgIEhvb2sgaW5zZXJ0aW9uIGFwcGVhcnMgdG8gYmUgYXRvbWljIGF0IGEgcGVyLXRocmVh ZCBsZXZlbCAoaS5lLiBpZiBhIHRocmVhZAotICogICBhbGxvY2F0ZXMgYW5kIGhhcyB0aGUgYWxs b2MgaG9vayBpbnZva2VkLCB0aGVuIGEgc3Vic2VxdWVudCBmcmVlIG9uIHRoZQotICogICBzYW1l IHRocmVhZCB3aWxsIGFsc28gaGF2ZSB0aGUgZnJlZSBob29rIGludm9rZWQpLgotICoKLSAqICAg VGhlICpyZW1vdmFsKiBvZiBhIGhvb2sgZG9lcyAqbm90KiBibG9jayB1bnRpbCBhbGwgdGhyZWFk cyBhcmUgZG9uZSB3aXRoCi0gKiAgIHRoZSBob29rLiAgSG9vayBhdXRob3JzIGhhdmUgdG8gYmUg cmVzaWxpZW50IHRvIHRoaXMsIGFuZCBuZWVkIHNvbWUKLSAqICAgb3V0LW9mLWJhbmQgbWVjaGFu aXNtIGZvciBjbGVhbmluZyB1cCBhbnkgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeQotICog ICBhc3NvY2lhdGVkIHdpdGggdGhlaXIgaG9vay4KLSAqIE9yZGVyaW5nOgotICogICBPcmRlciBv ZiBob29rIGV4ZWN1dGlvbiBpcyB1bnNwZWNpZmllZCwgYW5kIG1heSBiZSBkaWZmZXJlbnQgdGhh biBpbnNlcnRpb24KLSAqICAgb3JkZXIuCi0gKi8KLQotI2RlZmluZSBIT09LX01BWCA0Ci0KLWVu dW0gaG9va19hbGxvY19lIHsKLQlob29rX2FsbG9jX21hbGxvYywKLQlob29rX2FsbG9jX3Bvc2l4 X21lbWFsaWduLAotCWhvb2tfYWxsb2NfYWxpZ25lZF9hbGxvYywKLQlob29rX2FsbG9jX2NhbGxv YywKLQlob29rX2FsbG9jX21lbWFsaWduLAotCWhvb2tfYWxsb2NfdmFsbG9jLAotCWhvb2tfYWxs b2NfbWFsbG9jeCwKLQotCS8qIFRoZSByZWFsbG9jYXRpbmcgZnVuY3Rpb25zIGhhdmUgYm90aCBh bGxvYyBhbmQgZGFsbG9jIHZhcmlhbnRzICovCi0JaG9va19hbGxvY19yZWFsbG9jLAotCWhvb2tf YWxsb2NfcmFsbG9jeCwKLX07Ci0vKgotICogV2UgcHV0IHRoZSBlbnVtIHR5cGVkZWYgYWZ0ZXIg dGhlIGVudW0sIHNpbmNlIHRoaXMgZmlsZSBtYXkgZ2V0IGluY2x1ZGVkIGJ5Ci0gKiBqZW1hbGxv Y19jcHAuY3BwLCBhbmQgQysrIGRpc2FsbG93cyBlbnVtIGZvcndhcmQgZGVjbGFyYXRpb25zLgot ICovCi10eXBlZGVmIGVudW0gaG9va19hbGxvY19lIGhvb2tfYWxsb2NfdDsKLQotZW51bSBob29r X2RhbGxvY19lIHsKLQlob29rX2RhbGxvY19mcmVlLAotCWhvb2tfZGFsbG9jX2RhbGxvY3gsCi0J aG9va19kYWxsb2Nfc2RhbGxvY3gsCi0KLQkvKgotCSAqIFRoZSBkYWxsb2MgaGFsdmVzIG9mIHJl YWxsb2NhdGlvbiAobm90IGNhbGxlZCBpZiBpbi1wbGFjZSBleHBhbnNpb24KLQkgKiBoYXBwZW5z KS4KLQkgKi8KLQlob29rX2RhbGxvY19yZWFsbG9jLAotCWhvb2tfZGFsbG9jX3JhbGxvY3gsCi19 OwotdHlwZWRlZiBlbnVtIGhvb2tfZGFsbG9jX2UgaG9va19kYWxsb2NfdDsKLQotCi1lbnVtIGhv b2tfZXhwYW5kX2UgewotCWhvb2tfZXhwYW5kX3JlYWxsb2MsCi0JaG9va19leHBhbmRfcmFsbG9j eCwKLQlob29rX2V4cGFuZF94YWxsb2N4LAotfTsKLXR5cGVkZWYgZW51bSBob29rX2V4cGFuZF9l IGhvb2tfZXhwYW5kX3Q7Ci0KLXR5cGVkZWYgdm9pZCAoKmhvb2tfYWxsb2MpKAotICAgIHZvaWQg KmV4dHJhLCBob29rX2FsbG9jX3QgdHlwZSwgdm9pZCAqcmVzdWx0LCB1aW50cHRyX3QgcmVzdWx0 X3JhdywKLSAgICB1aW50cHRyX3QgYXJnc19yYXdbM10pOwotCi10eXBlZGVmIHZvaWQgKCpob29r X2RhbGxvYykoCi0gICAgdm9pZCAqZXh0cmEsIGhvb2tfZGFsbG9jX3QgdHlwZSwgdm9pZCAqYWRk cmVzcywgdWludHB0cl90IGFyZ3NfcmF3WzNdKTsKLQotdHlwZWRlZiB2b2lkICgqaG9va19leHBh bmQpKAotICAgIHZvaWQgKmV4dHJhLCBob29rX2V4cGFuZF90IHR5cGUsIHZvaWQgKmFkZHJlc3Ms IHNpemVfdCBvbGRfdXNpemUsCi0gICAgc2l6ZV90IG5ld191c2l6ZSwgdWludHB0cl90IHJlc3Vs dF9yYXcsIHVpbnRwdHJfdCBhcmdzX3Jhd1s0XSk7Ci0KLXR5cGVkZWYgc3RydWN0IGhvb2tzX3Mg aG9va3NfdDsKLXN0cnVjdCBob29rc19zIHsKLQlob29rX2FsbG9jIGFsbG9jX2hvb2s7Ci0JaG9v a19kYWxsb2MgZGFsbG9jX2hvb2s7Ci0JaG9va19leHBhbmQgZXhwYW5kX2hvb2s7Ci0Jdm9pZCAq ZXh0cmE7Ci19OwotCi0vKgotICogQmVnaW4gaW1wbGVtZW50YXRpb24gZGV0YWlsczsgZXZlcnl0 aGluZyBhYm92ZSB0aGlzIHBvaW50IG1pZ2h0IG9uZSBkYXkgbGl2ZQotICogaW4gYSBwdWJsaWMg QVBJLiAgRXZlcnl0aGluZyBiZWxvdyB0aGlzIHBvaW50IG5ldmVyIHdpbGwuCi0gKi8KLQotLyoK LSAqIFRoZSByZWFsbG9jIHBhdGh3YXlzIGhhdmVuJ3QgZ290dGVuIGFueSByZWZhY3RvcmluZyBs b3ZlIGluIGEgd2hpbGUsIGFuZCBpdCdzCi0gKiBmYWlybHkgZGlmZmljdWx0IHRvIHBhc3MgaW5m b3JtYXRpb24gZnJvbSB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIGhvb2tzLiAgV2UKLSAqIHB1dCB0 aGUgaW5mb3JtYWl0b24gdGhlIGhvb2tzIHdpbGwgbmVlZCBpbnRvIGEgc3RydWN0IHRvIGVuY2Fw c3VsYXRlCi0gKiBldmVyeXRoaW5nLgotICoKLSAqIE11Y2ggb2YgdGhlc2UgcGF0aHdheXMgYXJl IGZvcmNlLWlubGluZWQsIHNvIHRoYXQgdGhlIGNvbXBpbGVyIGNhbiBhdm9pZAotICogbWF0ZXJp YWxpemluZyB0aGlzIHN0cnVjdCB1bnRpbCB3ZSBoaXQgYW4gZXh0ZXJuIGFyZW5hIGZ1bmN0aW9u LiAgRm9yIGZhaXJseQotICogZ29vZnkgcmVhc29ucywgKm1hbnkqIG9mIHRoZSByZWFsbG9jIHBh dGhzIGhpdCBhbiBleHRlcm4gYXJlbmEgZnVuY3Rpb24uCi0gKiBUaGVzZSBwYXRocyBhcmUgY29s ZCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IG1hdHRlcjsgZXZlbnR1YWxseSwgd2Ugc2hvdWxkCi0g KiByZXdyaXRlIHRoZSByZWFsbG9jIGNvZGUgdG8gbWFrZSB0aGUgZXhwYW5kLWluLXBsYWNlIGFu ZCB0aGUKLSAqIGZyZWUtdGhlbi1yZWFsbG9jIHBhdGhzIG1vcmUgb3J0aG9nb25hbCwgYXQgd2hp Y2ggcG9pbnQgd2UgZG9uJ3QgbmVlZCB0bwotICogc3ByZWFkIHRoZSBob29rIGxvZ2ljIGFsbCBv dmVyIHRoZSBwbGFjZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgaG9va19yYWxsb2NfYXJnc19zIGhv b2tfcmFsbG9jX2FyZ3NfdDsKLXN0cnVjdCBob29rX3JhbGxvY19hcmdzX3MgewotCS8qIEkuZS4g YXMgb3Bwb3NlZCB0byByYWxsb2N4LiAqLwotCWJvb2wgaXNfcmVhbGxvYzsKLQkvKgotCSAqIFRo ZSBleHBhbmQgaG9vayB0YWtlcyA0IGFyZ3VtZW50cywgZXZlbiBpZiBvbmx5IDMgYXJlIGFjdHVh bGx5IHVzZWQ7Ci0JICogd2UgYWRkIGFuIGV4dHJhIG9uZSBpbiBjYXNlIHRoZSB1c2VyIGRlY2lk ZXMgdG8gbWVtY3B5IHdpdGhvdXQKLQkgKiBsb29raW5nIHRvbyBjbG9zZWx5IGF0IHRoZSBob29r ZWQgZnVuY3Rpb24uCi0JICovCi0JdWludHB0cl90IGFyZ3NbNF07Ci19OwotCi0vKgotICogUmV0 dXJucyBhbiBvcGFxdWUgaGFuZGxlIHRvIGJlIHVzZWQgd2hlbiByZW1vdmluZyB0aGUgaG9vay4g IE5VTEwgbWVhbnMgdGhhdAotICogd2UgY291bGRuJ3QgaW5zdGFsbCB0aGUgaG9vay4KLSAqLwot Ym9vbCBob29rX2Jvb3QoKTsKLQotdm9pZCAqaG9va19pbnN0YWxsKHRzZG5fdCAqdHNkbiwgaG9v a3NfdCAqaG9va3MpOwotLyogVW5pbnN0YWxscyB0aGUgaG9vayB3aXRoIHRoZSBoYW5kbGUgcHJl dmlvdXNseSByZXR1cm5lZCBmcm9tIGhvb2tfaW5zdGFsbC4gKi8KLXZvaWQgaG9va19yZW1vdmUo dHNkbl90ICp0c2RuLCB2b2lkICpvcGFxdWUpOwotCi0vKiBIb29rcyAqLwotCi12b2lkIGhvb2tf aW52b2tlX2FsbG9jKGhvb2tfYWxsb2NfdCB0eXBlLCB2b2lkICpyZXN1bHQsIHVpbnRwdHJfdCBy ZXN1bHRfcmF3LAotICAgIHVpbnRwdHJfdCBhcmdzX3Jhd1szXSk7Ci0KLXZvaWQgaG9va19pbnZv a2VfZGFsbG9jKGhvb2tfZGFsbG9jX3QgdHlwZSwgdm9pZCAqYWRkcmVzcywKLSAgICB1aW50cHRy X3QgYXJnc19yYXdbM10pOwotCi12b2lkIGhvb2tfaW52b2tlX2V4cGFuZChob29rX2V4cGFuZF90 IHR5cGUsIHZvaWQgKmFkZHJlc3MsIHNpemVfdCBvbGRfdXNpemUsCi0gICAgc2l6ZV90IG5ld191 c2l6ZSwgdWludHB0cl90IHJlc3VsdF9yYXcsIHVpbnRwdHJfdCBhcmdzX3Jhd1s0XSk7Ci0KLSNl bmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9IT09LX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2hwYS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9ocGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM1 NjI4NS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2hwYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgy ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfSFBBX0gKLSNkZWZpbmUgSkVNQUxM T0NfSU5URVJOQUxfSFBBX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4cF9ncm93 LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvaHBhX2hvb2tzLmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvaHBhX29wdHMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9wYWkuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wc3NldC5oIgotCi10eXBlZGVm IHN0cnVjdCBocGFfY2VudHJhbF9zIGhwYV9jZW50cmFsX3Q7Ci1zdHJ1Y3QgaHBhX2NlbnRyYWxf cyB7Ci0JLyoKLQkgKiBUaGUgbXV0ZXggZ3VhcmRpbmcgbW9zdCBvZiB0aGUgb3BlcmF0aW9ucyBv biB0aGUgY2VudHJhbCBkYXRhCi0JICogc3RydWN0dXJlLgotCSAqLwotCW1hbGxvY19tdXRleF90 IG10eDsKLQkvKgotCSAqIEd1YXJkcyBleHBhbnNpb24gb2YgZWRlbi4gIFdlIHNlcGFyYXRlIHRo aXMgZnJvbSB0aGUgcmVndWxhciBtdXRleCBzbwotCSAqIHRoYXQgY2hlYXBlciBvcGVyYXRpb25z IGNhbiBzdGlsbCBjb250aW51ZSB3aGlsZSB3ZSdyZSBkb2luZyB0aGUgT1MKLQkgKiBjYWxsLgot CSAqLwotCW1hbGxvY19tdXRleF90IGdyb3dfbXR4OwotCS8qCi0JICogRWl0aGVyIE5VTEwgKGlm IGVtcHR5KSwgb3Igc29tZSBpbnRlZ2VyIG11bHRpcGxlIG9mIGEKLQkgKiBodWdlcGFnZS1hbGln bmVkIG51bWJlciBvZiBodWdlcGFnZXMuICBXZSBjYXJ2ZSB0aGVtIG9mZiBvbmUgYXQgYQotCSAq IHRpbWUgdG8gc2F0aXNmeSBuZXcgcGFnZXNsYWIgcmVxdWVzdHMuCi0JICoKLQkgKiBHdWFyZGVk IGJ5IGdyb3dfbXR4LgotCSAqLwotCXZvaWQgKmVkZW47Ci0Jc2l6ZV90IGVkZW5fbGVuOwotCS8q IFNvdXJjZSBmb3IgbWV0YWRhdGEuICovCi0JYmFzZV90ICpiYXNlOwotCS8qIE51bWJlciBvZiBn cm93IG9wZXJhdGlvbnMgZG9uZSBvbiB0aGlzIGhwYV9jZW50cmFsX3QuICovCi0JdWludDY0X3Qg YWdlX2NvdW50ZXI7Ci0KLQkvKiBUaGUgSFBBIGhvb2tzLiAqLwotCWhwYV9ob29rc190IGhvb2tz OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgaHBhX3NoYXJkX25vbmRlcml2ZWRfc3RhdHNfcyBocGFf c2hhcmRfbm9uZGVyaXZlZF9zdGF0c190Owotc3RydWN0IGhwYV9zaGFyZF9ub25kZXJpdmVkX3N0 YXRzX3MgewotCS8qCi0JICogVGhlIG51bWJlciBvZiB0aW1lcyB3ZSd2ZSBwdXJnZWQgd2l0aGlu IGEgaHVnZXBhZ2UuCi0JICoKLQkgKiBHdWFyZGVkIGJ5IG10eC4KLQkgKi8KLQl1aW50NjRfdCBu cHVyZ2VfcGFzc2VzOwotCS8qCi0JICogVGhlIG51bWJlciBvZiBpbmRpdmlkdWFsIHB1cmdlIGNh bGxzIHdlIHBlcmZvcm0gKHdoaWNoIHNob3VsZCBhbHdheXMKLQkgKiBiZSBiaWdnZXIgdGhhbiBu cHVyZ2VfcGFzc2VzLCBzaW5jZSBlYWNoIHBhc3MgcHVyZ2VzIGF0IGxlYXN0IG9uZQotCSAqIGV4 dGVudCB3aXRoaW4gYSBodWdlcGFnZS4KLQkgKgotCSAqIEd1YXJkZWQgYnkgbXR4LgotCSAqLwot CXVpbnQ2NF90IG5wdXJnZXM7Ci0KLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgdGltZXMgd2UndmUg aHVnaWZpZWQgYSBwYWdlc2xhYi4KLQkgKgotCSAqIEd1YXJkZWQgYnkgbXR4LgotCSAqLwotCXVp bnQ2NF90IG5odWdpZmllczsKLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgdGltZXMgd2UndmUgZGVo dWdpZmllZCBhIHBhZ2VzbGFiLgotCSAqCi0JICogR3VhcmRlZCBieSBtdHguCi0JICovCi0JdWlu dDY0X3QgbmRlaHVnaWZpZXM7Ci19OwotCi0vKiBDb21wbGV0ZWx5IGRlcml2ZWQ7IG9ubHkgdXNl ZCBieSBDVEwuICovCi10eXBlZGVmIHN0cnVjdCBocGFfc2hhcmRfc3RhdHNfcyBocGFfc2hhcmRf c3RhdHNfdDsKLXN0cnVjdCBocGFfc2hhcmRfc3RhdHNfcyB7Ci0JcHNzZXRfc3RhdHNfdCBwc3Nl dF9zdGF0czsKLQlocGFfc2hhcmRfbm9uZGVyaXZlZF9zdGF0c190IG5vbmRlcml2ZWRfc3RhdHM7 Ci19OwotCi10eXBlZGVmIHN0cnVjdCBocGFfc2hhcmRfcyBocGFfc2hhcmRfdDsKLXN0cnVjdCBo cGFfc2hhcmRfcyB7Ci0JLyoKLQkgKiBwYWkgbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyOyB3ZSBj YXN0IGZyb20gYSBwb2ludGVyIHRvIGl0IHRvIGEKLQkgKiBwb2ludGVyIHRvIHRoZSBocGFfc2hh cmRfdC4KLQkgKi8KLQlwYWlfdCBwYWk7Ci0KLQkvKiBUaGUgY2VudHJhbCBhbGxvY2F0b3Igd2Ug Z2V0IG91ciBodWdlcGFnZXMgZnJvbS4gKi8KLQlocGFfY2VudHJhbF90ICpjZW50cmFsOwotCS8q IFByb3RlY3RzIG1vc3Qgb2YgdGhpcyBzaGFyZCdzIHN0YXRlLiAqLwotCW1hbGxvY19tdXRleF90 IG10eDsKLQkvKgotCSAqIEd1YXJkcyB0aGUgc2hhcmQncyBhY2Nlc3MgdG8gdGhlIGNlbnRyYWwg YWxsb2NhdG9yIChwcmV2ZW50aW5nCi0JICogbXVsdGlwbGUgdGhyZWFkcyBvcGVyYXRpbmcgb24g dGhpcyBzaGFyZCBmcm9tIGFjY2Vzc2luZyB0aGUgY2VudHJhbAotCSAqIGFsbG9jYXRvcikuCi0J ICovCi0JbWFsbG9jX211dGV4X3QgZ3Jvd19tdHg7Ci0JLyogVGhlIGJhc2UgbWV0YWRhdGEgYWxs b2NhdG9yLiAqLwotCWJhc2VfdCAqYmFzZTsKLQotCS8qCi0JICogVGhpcyBlZGF0YSBjYWNoZSBp cyB0aGUgb25lIHdlIHVzZSB3aGVuIGFsbG9jYXRpbmcgYSBzbWFsbCBleHRlbnQKLQkgKiBmcm9t IGEgcGFnZXNsYWIuICBUaGUgcGFnZXNsYWIgaXRzZWxmIGNvbWVzIGZyb20gdGhlIGNlbnRyYWxp emVkCi0JICogYWxsb2NhdG9yLCBhbmQgc28gd2lsbCB1c2UgaXRzIGVkYXRhX2NhY2hlLgotCSAq LwotCWVkYXRhX2NhY2hlX2Zhc3RfdCBlY2Y7Ci0KLQlwc3NldF90IHBzc2V0OwotCi0JLyoKLQkg KiBIb3cgbWFueSBncm93IG9wZXJhdGlvbnMgaGF2ZSBvY2N1cnJlZC4KLQkgKgotCSAqIEd1YXJk ZWQgYnkgZ3Jvd19tdHguCi0JICovCi0JdWludDY0X3QgYWdlX2NvdW50ZXI7Ci0KLQkvKiBUaGUg YXJlbmEgaW5kIHdlJ3JlIGFzc29jaWF0ZWQgd2l0aC4gKi8KLQl1bnNpZ25lZCBpbmQ7Ci0KLQkv KgotCSAqIE91ciBlbWFwLiAgVGhpcyBpcyBqdXN0IGEgY2FjaGUgb2YgdGhlIGVtYXAgcG9pbnRl ciBpbiB0aGUgYXNzb2NpYXRlZAotCSAqIGhwYV9jZW50cmFsLgotCSAqLwotCWVtYXBfdCAqZW1h cDsKLQotCS8qIFRoZSBjb25maWd1cmF0aW9uIGNob2ljZXMgZm9yIHRoaXMgaHBhIHNoYXJkLiAq LwotCWhwYV9zaGFyZF9vcHRzX3Qgb3B0czsKLQotCS8qCi0JICogSG93IG1hbnkgcGFnZXMgaGF2 ZSB3ZSBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlzaGVkIHB1cmdpbmcgaW4gdGhpcwotCSAqIGhw YSBzaGFyZC4KLQkgKi8KLQlzaXplX3QgbnBlbmRpbmdfcHVyZ2U7Ci0KLQkvKgotCSAqIFRob3Nl IHN0YXRzIHdoaWNoIGFyZSBjb3BpZWQgZGlyZWN0bHkgaW50byB0aGUgQ1RMLWNlbnRyaWMgaHBh IHNoYXJkCi0JICogc3RhdHMuCi0JICovCi0JaHBhX3NoYXJkX25vbmRlcml2ZWRfc3RhdHNfdCBz dGF0czsKLQotCS8qCi0JICogTGFzdCB0aW1lIHdlIHBlcmZvcm1lZCBwdXJnZSBvbiB0aGlzIHNo YXJkLgotCSAqLwotCW5zdGltZV90IGxhc3RfcHVyZ2U7Ci19OwotCi0vKgotICogV2hldGhlciBv ciBub3QgdGhlIEhQQSBjYW4gYmUgdXNlZCBnaXZlbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9u LiAgVGhpcyBpcwotICogaXMgbm90IG5lY2Vzc2FyaWx5IGEgZ3VhcmFudGVlIHRoYXQgaXQgYmFj a3MgaXRzIGFsbG9jYXRpb25zIGJ5IGh1Z2VwYWdlcywKLSAqIGp1c3QgdGhhdCBpdCBjYW4gZnVu Y3Rpb24gcHJvcGVybHkgZ2l2ZW4gdGhlIHN5c3RlbSBpdCdzIHJ1bm5pbmcgb24uCi0gKi8KLWJv b2wgaHBhX3N1cHBvcnRlZCgpOwotYm9vbCBocGFfY2VudHJhbF9pbml0KGhwYV9jZW50cmFsX3Qg KmNlbnRyYWwsIGJhc2VfdCAqYmFzZSwgY29uc3QgaHBhX2hvb2tzX3QgKmhvb2tzKTsKLWJvb2wg aHBhX3NoYXJkX2luaXQoaHBhX3NoYXJkX3QgKnNoYXJkLCBocGFfY2VudHJhbF90ICpjZW50cmFs LCBlbWFwX3QgKmVtYXAsCi0gICAgYmFzZV90ICpiYXNlLCBlZGF0YV9jYWNoZV90ICplZGF0YV9j YWNoZSwgdW5zaWduZWQgaW5kLAotICAgIGNvbnN0IGhwYV9zaGFyZF9vcHRzX3QgKm9wdHMpOwot Ci12b2lkIGhwYV9zaGFyZF9zdGF0c19hY2N1bShocGFfc2hhcmRfc3RhdHNfdCAqZHN0LCBocGFf c2hhcmRfc3RhdHNfdCAqc3JjKTsKLXZvaWQgaHBhX3NoYXJkX3N0YXRzX21lcmdlKHRzZG5fdCAq dHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkLAotICAgIGhwYV9zaGFyZF9zdGF0c190ICpkc3QpOwot Ci0vKgotICogTm90aWZ5IHRoZSBzaGFyZCB0aGF0IHdlIHdvbid0IHVzZSBpdCBmb3IgYWxsb2Nh dGlvbnMgbXVjaCBsb25nZXIuICBEdWUgdG8KLSAqIHRoZSBwb3NzaWJpbGl0eSBvZiByYWNlcywg d2UgZG9uJ3QgYWN0dWFsbHkgcHJldmVudCBhbGxvY2F0aW9uczsganVzdCBmbHVzaAotICogYW5k IGRpc2FibGUgdGhlIGVtYmVkZGVkIGVkYXRhX2NhY2hlX3NtYWxsLgotICovCi12b2lkIGhwYV9z aGFyZF9kaXNhYmxlKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKTsKLXZvaWQgaHBh X3NoYXJkX2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQpOwotCi12b2lk IGhwYV9zaGFyZF9zZXRfZGVmZXJyYWxfYWxsb3dlZCh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90 ICpzaGFyZCwKLSAgICBib29sIGRlZmVycmFsX2FsbG93ZWQpOwotdm9pZCBocGFfc2hhcmRfZG9f ZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCk7Ci0KLS8qCi0g KiBXZSBzaGFyZSB0aGUgZm9yayBvcmRlcmluZyB3aXRoIHRoZSBQQSBhbmQgYXJlbmEgcHJlZm9y ayBoYW5kbGluZzsgdGhhdCdzIHdoeQotICogdGhlc2UgYXJlIDMgYW5kIDQgcmF0aGVyIHRoYW4g MCBhbmQgMS4KLSAqLwotdm9pZCBocGFfc2hhcmRfcHJlZm9yazModHNkbl90ICp0c2RuLCBocGFf c2hhcmRfdCAqc2hhcmQpOwotdm9pZCBocGFfc2hhcmRfcHJlZm9yazQodHNkbl90ICp0c2RuLCBo cGFfc2hhcmRfdCAqc2hhcmQpOwotdm9pZCBocGFfc2hhcmRfcG9zdGZvcmtfcGFyZW50KHRzZG5f dCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKTsKLXZvaWQgaHBhX3NoYXJkX3Bvc3Rmb3JrX2No aWxkKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKTsKLQotI2VuZGlmIC8qIEpFTUFM TE9DX0lOVEVSTkFMX0hQQV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ocGFfaG9va3MuaCBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvaHBhX2hvb2tzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYTIy MWMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ocGFfaG9va3MuaAorKysgL2Rldi9udWxsCkBAIC0x LDE3ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfSFBBX0hPT0tTX0gKLSNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfSFBBX0hPT0tTX0gKLQotdHlwZWRlZiBzdHJ1Y3QgaHBhX2hv b2tzX3MgaHBhX2hvb2tzX3Q7Ci1zdHJ1Y3QgaHBhX2hvb2tzX3MgewotCXZvaWQgKigqbWFwKShz aXplX3Qgc2l6ZSk7Ci0Jdm9pZCAoKnVubWFwKSh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKLQl2 b2lkICgqcHVyZ2UpKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwotCXZvaWQgKCpodWdpZnkpKHZv aWQgKnB0ciwgc2l6ZV90IHNpemUpOwotCXZvaWQgKCpkZWh1Z2lmeSkodm9pZCAqcHRyLCBzaXpl X3Qgc2l6ZSk7Ci0Jdm9pZCAoKmN1cnRpbWUpKG5zdGltZV90ICpyX3RpbWUsIGJvb2wgZmlyc3Rf cmVhZGluZyk7Ci0JdWludDY0X3QgKCptc19zaW5jZSkobnN0aW1lX3QgKnJfdGltZSk7Ci19Owot Ci1leHRlcm4gaHBhX2hvb2tzX3QgaHBhX2hvb2tzX2RlZmF1bHQ7Ci0KLSNlbmRpZiAvKiBKRU1B TExPQ19JTlRFUk5BTF9IUEFfSE9PS1NfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvaHBhX29w dHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvaHBhX29wdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZWU4NGZlYS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2hwYV9vcHRzLmgKKysrIC9kZXYvbnVsbApA QCAtMSw3NCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0hQQV9PUFRTX0gKLSNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfSFBBX09QVFNfSAotCi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvZnhwLmgiCi0KLS8qCi0gKiBUaGlzIGZpbGUgaXMgbW9yYWxseSBwYXJ0IG9mIGhw YS5oLCBidXQgaXMgc3BsaXQgb3V0IGZvciBoZWFkZXItb3JkZXJpbmcKLSAqIHJlYXNvbnMuCi0g Ki8KLQotdHlwZWRlZiBzdHJ1Y3QgaHBhX3NoYXJkX29wdHNfcyBocGFfc2hhcmRfb3B0c190Owot c3RydWN0IGhwYV9zaGFyZF9vcHRzX3MgewotCS8qCi0JICogVGhlIGxhcmdlc3Qgc2l6ZSB3ZSds bCBhbGxvY2F0ZSBvdXQgb2YgdGhlIHNoYXJkLiAgRm9yIHRob3NlCi0JICogYWxsb2NhdGlvbnMg cmVmdXNlZCwgdGhlIGNhbGxlciAoaW4gcHJhY3RpY2UsIHRoZSBQQSBtb2R1bGUpIHdpbGwKLQkg KiBmYWxsIGJhY2sgdG8gdGhlIG1vcmUgZ2VuZXJhbCAoZm9yIG5vdykgUEFDLCB3aGljaCBjYW4g YWx3YXlzIGhhbmRsZQotCSAqIGFueSBhbGxvY2F0aW9uIHJlcXVlc3QuCi0JICovCi0Jc2l6ZV90 IHNsYWJfbWF4X2FsbG9jOwotCi0JLyoKLQkgKiBXaGVuIHRoZSBudW1iZXIgb2YgYWN0aXZlIGJ5 dGVzIGluIGEgaHVnZXBhZ2UgaXMgPj0KLQkgKiBodWdpZmljYXRpb25fdGhyZXNob2xkLCB3ZSBm b3JjZSBodWdpZnkgaXQuCi0JICovCi0Jc2l6ZV90IGh1Z2lmaWNhdGlvbl90aHJlc2hvbGQ7Ci0K LQkvKgotCSAqIFRoZSBIUEEgcHVyZ2VzIHdoZW5ldmVyIHRoZSBudW1iZXIgb2YgcGFnZXMgZXhj ZWVkcyBkaXJ0eV9tdWx0ICoKLQkgKiBhY3RpdmVfcGFnZXMuICBUaGlzIG1heSBiZSBzZXQgdG8g KGZ4cF90KS0xIHRvIGRpc2FibGUgcHVyZ2luZy4KLQkgKi8KLQlmeHBfdCBkaXJ0eV9tdWx0Owot Ci0JLyoKLQkgKiBXaGV0aGVyIG9yIG5vdCB0aGUgUEFJIG1ldGhvZHMgYXJlIGFsbG93ZWQgdG8g ZGVmZXIgd29yayB0byBhCi0JICogc3Vic2VxdWVudCBocGFfc2hhcmRfZG9fZGVmZXJyZWRfd29y aygpIGNhbGwuICBQcmFjdGljYWxseSwgdGhpcwotCSAqIGNvcnJlc3BvbmRzIHRvIGJhY2tncm91 bmQgdGhyZWFkcyBiZWluZyBlbmFibGVkLiAgV2UgdHJhY2sgdGhpcwotCSAqIG91cnNlbHZlcyBm b3IgZW5jYXBzdWxhdGlvbiBwdXJwb3Nlcy4KLQkgKi8KLQlib29sIGRlZmVycmFsX2FsbG93ZWQ7 Ci0KLQkvKgotCSAqIEhvdyBsb25nIGEgaHVnZXBhZ2UgaGFzIHRvIGJlIGEgaHVnaWZpY2F0aW9u IGNhbmRpZGF0ZSBiZWZvcmUgaXQgd2lsbAotCSAqIGFjdHVhbGx5IGdldCBodWdpZmllZC4KLQkg Ki8KLQl1aW50NjRfdCBodWdpZnlfZGVsYXlfbXM7Ci0KLQkvKgotCSAqIE1pbmltdW0gYW1vdW50 IG9mIHRpbWUgYmV0d2VlbiBwdXJnZXMuCi0JICovCi0JdWludDY0X3QgbWluX3B1cmdlX2ludGVy dmFsX21zOwotfTsKLQotI2RlZmluZSBIUEFfU0hBUkRfT1BUU19ERUZBVUxUIHsJCQkJCVwKLQkv KiBzbGFiX21heF9hbGxvYyAqLwkJCQkJCVwKLQk2NCAqIDEwMjQsCQkJCQkJCVwKLQkvKiBodWdp ZmljYXRpb25fdGhyZXNob2xkICovCQkJCQlcCi0JSFVHRVBBR0UgKiA5NSAvIDEwMCwJCQkJCQlc Ci0JLyogZGlydHlfbXVsdCAqLwkJCQkJCVwKLQlGWFBfSU5JVF9QRVJDRU5UKDI1KSwJCQkJCQlc Ci0JLyoJCQkJCQkJCVwKLQkgKiBkZWZlcnJhbF9hbGxvd2VkCQkJCQkJXAotCSAqIAkJCQkJCQkJ XAotCSAqIFJlYWxseSwgdGhpcyBpcyBhbHdheXMgc2V0IGJ5IHRoZSBhcmVuYSBkdXJpbmcgY3Jl YXRpb24JXAotCSAqIG9yIGJ5IGFuIGhwYV9zaGFyZF9zZXRfZGVmZXJyYWxfYWxsb3dlZCBjYWxs LCBzbyB0aGUgdmFsdWUJXAotCSAqIHdlIHB1dCBoZXJlIGRvZXNuJ3QgbWF0dGVyLgkJCQkJXAot CSAqLwkJCQkJCQkJXAotCWZhbHNlLAkJCQkJCQkJXAotCS8qIGh1Z2lmeV9kZWxheV9tcyAqLwkJ CQkJCVwKLQkxMCAqIDEwMDAsCQkJCQkJCVwKLQkvKiBtaW5fcHVyZ2VfaW50ZXJ2YWxfbXMgKi8J CQkJCVwKLQk1ICogMTAwMAkJCQkJCQlcCi19Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5B TF9IUEFfT1BUU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ocGRhdGEuaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv aHBkYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYjUzNGQuLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9ocGRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxMyArMCwwIEBACi0j aWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0hQREFUQV9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVS TkFMX0hQREFUQV9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9mYi5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3BoLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv cWwuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90eXBlZF9saXN0LmgiCi0KLS8qCi0g KiBUaGUgbWV0YWRhdGEgcmVwcmVzZW50YXRpb24gd2UgdXNlIGZvciBleHRlbnRzIGluIGh1Z2Vw YWdlcy4gIFdoaWxlIHRoZSBQQUMKLSAqIHVzZXMgdGhlIGVkYXRhX3QgdG8gcmVwcmVzZW50IGJv dGggYWN0aXZlIGFuZCBpbmFjdGl2ZSBleHRlbnRzLCB0aGUgSFAgb25seQotICogdXNlcyB0aGUg ZWRhdGFfdCBmb3IgYWN0aXZlIG9uZXM7IGluc3RlYWQsIGluYWN0aXZlIGV4dGVudCBzdGF0ZSBp cyB0cmFja2VkCi0gKiB3aXRoaW4gaHBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5jbG9zaW5n IGh1Z2VwYWdlLXNpemVkLCBodWdlcGFnZS1hbGlnbmVkCi0gKiByZWdpb24gb2YgdmlydHVhbCBh ZGRyZXNzIHNwYWNlLgotICoKLSAqIEFuIGhwZGF0YSBuZWVkIG5vdCBiZSAidHJ1bHkiIGJhY2tl ZCBieSBhIGh1Z2VwYWdlICh3aGljaCBpcyBub3QgbmVjZXNzYXJpbHkKLSAqIGFuIG9ic2VydmFi bGUgcHJvcGVydHkgb2YgYW55IGdpdmVuIHJlZ2lvbiBvZiBhZGRyZXNzIHNwYWNlKS4gIEl0J3Mg anVzdAotICogaHVnZXBhZ2Utc2l6ZWQgYW5kIGh1Z2VwYWdlLWFsaWduZWQ7IGl0J3MgKnBvdGVu dGlhbGx5KiBodWdlLgotICovCi10eXBlZGVmIHN0cnVjdCBocGRhdGFfcyBocGRhdGFfdDsKLXBo X3N0cnVjdHMoaHBkYXRhX2FnZV9oZWFwLCBocGRhdGFfdCk7Ci1zdHJ1Y3QgaHBkYXRhX3Mgewot CS8qCi0JICogV2UgbGlrZXdpc2UgZm9sbG93IHRoZSBlZGF0YSBjb252ZW50aW9uIG9mIG1hbmds aW5nIG5hbWVzIGFuZCBmb3JjaW5nCi0JICogdGhlIHVzZSBvZiBhY2Nlc3NvcnMgLS0gdGhpcyBs ZXRzIHVzIGFkZCBzb21lIGNvbnNpc3RlbmN5IGNoZWNrcyBvbgotCSAqIGFjY2Vzcy4KLQkgKi8K LQotCS8qCi0JICogVGhlIGFkZHJlc3Mgb2YgdGhlIGh1Z2VwYWdlIGluIHF1ZXN0aW9uLiAgVGhp cyBjYW4ndCBiZSBuYW1lZCBoX2FkZHIsCi0JICogc2luY2UgdGhhdCBjb25mbGljdHMgd2l0aCBh IG1hY3JvIGRlZmluZWQgaW4gV2luZG93cyBoZWFkZXJzLgotCSAqLwotCXZvaWQgKmhfYWRkcmVz czsKLQkvKiBJdHMgYWdlIChtZWFzdXJlZCBpbiBwc3NldCBvcGVyYXRpb25zKS4gKi8KLQl1aW50 NjRfdCBoX2FnZTsKLQkvKiBXaGV0aGVyIG9yIG5vdCB3ZSB0aGluayB0aGUgaHVnZXBhZ2UgaXMg bWFwcGVkIHRoYXQgd2F5IGJ5IHRoZSBPUy4gKi8KLQlib29sIGhfaHVnZTsKLQotCS8qCi0JICog Rm9yIHNvbWUgcHJvcGVydGllcywgd2Uga2VlcCBwYXJhbGxlbCBzZXRzIG9mIGJvb2xzOyBoX2Zv b19hbGxvd2VkCi0JICogYW5kIGhfaW5fcHNzZXRfZm9vX2NvbnRhaW5lci4gIFRoaXMgaXMgYSBk ZWNvdXBsaW5nIG1lY2hhbmlzbSB0bwotCSAqIGF2b2lkIGJvdGhlcmluZyB0aGUgaHBhICh3aGlj aCBtYW5hZ2VzIHBvbGljaWVzKSBmcm9tIHRoZSBwc3NldAotCSAqICh3aGljaCBpcyB0aGUgbWVj aGFuaXNtIHVzZWQgdG8gZW5mb3JjZSB0aG9zZSBwb2xpY2llcykuICBUaGlzIGFsbG93cwotCSAq IGFsbCB0aGUgY29udGFpbmVyIG1hbmFnZW1lbnQgbG9naWMgdG8gbGl2ZSBpbiBvbmUgcGxhY2Us IHdpdGhvdXQgdGhlCi0JICogSFBBIG5lZWRpbmcgdG8ga25vdyBvciBjYXJlIGhvdyB0aGF0IGhh cHBlbnMuCi0JICovCi0KLQkvKgotCSAqIFdoZXRoZXIgb3Igbm90IHRoZSBocGRhdGEgaXMgYWxs b3dlZCB0byBiZSB1c2VkIHRvIHNlcnZlIGFsbG9jYXRpb25zLAotCSAqIGFuZCB3aGV0aGVyIG9y IG5vdCB0aGUgcHNzZXQgaXMgY3VycmVudGx5IHRyYWNraW5nIGl0IGFzIHN1Y2guCi0JICovCi0J Ym9vbCBoX2FsbG9jX2FsbG93ZWQ7Ci0JYm9vbCBoX2luX3Bzc2V0X2FsbG9jX2NvbnRhaW5lcjsK LQotCS8qCi0JICogVGhlIHNhbWUsIGJ1dCB3aXRoIHB1cmdpbmcuICBUaGVyZSdzIG5vIGNvcnJl c3BvbmRpbmcKLQkgKiBoX2luX3Bzc2V0X3B1cmdlX2NvbnRhaW5lciwgYmVjYXVzZSB0aGUgcHNz ZXQgKGN1cnJlbnRseSkgYWx3YXlzCi0JICogcmVtb3ZlcyBocGRhdGFzIGZyb20gdGhlaXIgY29u dGFpbmVycyBkdXJpbmcgdXBkYXRlcyAodG8gaW1wbGVtZW50Ci0JICogTFJVIGZvciBwdXJnaW5n KS4KLQkgKi8KLQlib29sIGhfcHVyZ2VfYWxsb3dlZDsKLQotCS8qIEFuZCB3aXRoIGh1Z2lmeWlu Zy4gKi8KLQlib29sIGhfaHVnaWZ5X2FsbG93ZWQ7Ci0JLyogV2hlbiB3ZSBiZWNhbWUgYSBodWdp ZmljYXRpb24gY2FuZGlkYXRlLiAqLwotCW5zdGltZV90IGhfdGltZV9odWdpZnlfYWxsb3dlZDsK LQlib29sIGhfaW5fcHNzZXRfaHVnaWZ5X2NvbnRhaW5lcjsKLQotCS8qIFdoZXRoZXIgb3Igbm90 IGEgcHVyZ2Ugb3IgaHVnaWZ5IGlzIGN1cnJlbnRseSBoYXBwZW5pbmcuICovCi0JYm9vbCBoX21p ZF9wdXJnZTsKLQlib29sIGhfbWlkX2h1Z2lmeTsKLQotCS8qCi0JICogV2hldGhlciBvciBub3Qg dGhlIGhwZGF0YSBpcyBiZWluZyB1cGRhdGVkIGluIHRoZSBwc3NldCAoaS5lLiBpZgotCSAqIHRo ZXJlIGhhcyBiZWVuIGEgcHNzZXRfdXBkYXRlX2JlZ2luIGNhbGwgaXNzdWVkIHdpdGhvdXQgYSBt YXRjaGluZwotCSAqIHBzc2V0X3VwZGF0ZV9lbmQgY2FsbCkuICBFdmVudHVhbGx5IHRoaXMgd2ls bCBleHBhbmQgdG8gb3RoZXIgdHlwZXMKLQkgKiBvZiB1cGRhdGVzLgotCSAqLwotCWJvb2wgaF91 cGRhdGluZzsKLQotCS8qIFdoZXRoZXIgb3Igbm90IHRoZSBocGRhdGEgaXMgaW4gYSBwc3NldC4g Ki8KLQlib29sIGhfaW5fcHNzZXQ7Ci0KLQl1bmlvbiB7Ci0JCS8qIFdoZW4gbm9uZW1wdHkgKGFu ZCBhbHNvIG5vbmZ1bGwpLCB1c2VkIGJ5IHRoZSBwc3NldCBiaW5zLiAqLwotCQlocGRhdGFfYWdl X2hlYXBfbGlua190IGFnZV9saW5rOwotCQkvKgotCQkgKiBXaGVuIGVtcHR5IChvciBub3QgY29y cmVzcG9uZGluZyB0byBhbnkgaHVnZXBhZ2UpLCBsaXN0Ci0JCSAqIGxpbmthZ2UuCi0JCSAqLwot CQlxbF9lbG0oaHBkYXRhX3QpIHFsX2xpbmtfZW1wdHk7Ci0JfTsKLQotCS8qCi0JICogTGlua2Fn ZSBmb3IgdGhlIHBzc2V0IHRvIHRyYWNrIGNhbmRpZGF0ZXMgZm9yIHB1cmdpbmcgYW5kIGh1Z2lm eWluZy4KLQkgKi8KLQlxbF9lbG0oaHBkYXRhX3QpIHFsX2xpbmtfcHVyZ2U7Ci0JcWxfZWxtKGhw ZGF0YV90KSBxbF9saW5rX2h1Z2lmeTsKLQotCS8qIFRoZSBsZW5ndGggb2YgdGhlIGxhcmdlc3Qg Y29udGlndW91cyBzZXF1ZW5jZSBvZiBpbmFjdGl2ZSBwYWdlcy4gKi8KLQlzaXplX3QgaF9sb25n ZXN0X2ZyZWVfcmFuZ2U7Ci0KLQkvKiBOdW1iZXIgb2YgYWN0aXZlIHBhZ2VzLiAqLwotCXNpemVf dCBoX25hY3RpdmU7Ci0KLQkvKiBBIGJpdG1hcCB3aXRoIGJpdHMgc2V0IGluIHRoZSBhY3RpdmUg cGFnZXMuICovCi0JZmJfZ3JvdXBfdCBhY3RpdmVfcGFnZXNbRkJfTkdST1VQUyhIVUdFUEFHRV9Q QUdFUyldOwotCi0JLyoKLQkgKiBOdW1iZXIgb2YgZGlydHkgb3IgYWN0aXZlIHBhZ2VzLCBhbmQg YSBiaXRtYXAgdHJhY2tpbmcgdGhlbS4gIE9uZQotCSAqIHdheSB0byB0aGluayBvZiB0aGlzIGlz IGFzIHdoaWNoIHBhZ2VzIGFyZSBkaXJ0eSBmcm9tIHRoZSBPUydzCi0JICogcGVyc3BlY3RpdmUu Ci0JICovCi0Jc2l6ZV90IGhfbnRvdWNoZWQ7Ci0KLQkvKiBUaGUgdG91Y2hlZCBwYWdlcyAodXNp bmcgdGhlIHNhbWUgZGVmaW5pdGlvbiBhcyBhYm92ZSkuICovCi0JZmJfZ3JvdXBfdCB0b3VjaGVk X3BhZ2VzW0ZCX05HUk9VUFMoSFVHRVBBR0VfUEFHRVMpXTsKLX07Ci0KLVRZUEVEX0xJU1QoaHBk YXRhX2VtcHR5X2xpc3QsIGhwZGF0YV90LCBxbF9saW5rX2VtcHR5KQotVFlQRURfTElTVChocGRh dGFfcHVyZ2VfbGlzdCwgaHBkYXRhX3QsIHFsX2xpbmtfcHVyZ2UpCi1UWVBFRF9MSVNUKGhwZGF0 YV9odWdpZnlfbGlzdCwgaHBkYXRhX3QsIHFsX2xpbmtfaHVnaWZ5KQotCi1waF9wcm90bygsIGhw ZGF0YV9hZ2VfaGVhcCwgaHBkYXRhX3QpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotaHBkYXRh X2FkZHJfZ2V0KGNvbnN0IGhwZGF0YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRhLT5oX2Fk ZHJlc3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaHBkYXRhX2FkZHJfc2V0KGhwZGF0YV90 ICpocGRhdGEsIHZvaWQgKmFkZHIpIHsKLQlhc3NlcnQoSFVHRVBBR0VfQUREUjJCQVNFKGFkZHIp ID09IGFkZHIpOwotCWhwZGF0YS0+aF9hZGRyZXNzID0gYWRkcjsKLX0KLQotc3RhdGljIGlubGlu ZSB1aW50NjRfdAotaHBkYXRhX2FnZV9nZXQoY29uc3QgaHBkYXRhX3QgKmhwZGF0YSkgewotCXJl dHVybiBocGRhdGEtPmhfYWdlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWhwZGF0YV9hZ2Vf c2V0KGhwZGF0YV90ICpocGRhdGEsIHVpbnQ2NF90IGFnZSkgewotCWhwZGF0YS0+aF9hZ2UgPSBh Z2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaHBkYXRhX2h1Z2VfZ2V0KGNvbnN0IGhwZGF0 YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRhLT5oX2h1Z2U7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgYm9vbAotaHBkYXRhX2FsbG9jX2FsbG93ZWRfZ2V0KGNvbnN0IGhwZGF0YV90ICpocGRhdGEp IHsKLQlyZXR1cm4gaHBkYXRhLT5oX2FsbG9jX2FsbG93ZWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg dm9pZAotaHBkYXRhX2FsbG9jX2FsbG93ZWRfc2V0KGhwZGF0YV90ICpocGRhdGEsIGJvb2wgYWxs b2NfYWxsb3dlZCkgewotCWhwZGF0YS0+aF9hbGxvY19hbGxvd2VkID0gYWxsb2NfYWxsb3dlZDsK LX0KLQotc3RhdGljIGlubGluZSBib29sCi1ocGRhdGFfaW5fcHNzZXRfYWxsb2NfY29udGFpbmVy X2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7Ci0JcmV0dXJuIGhwZGF0YS0+aF9pbl9wc3Nl dF9hbGxvY19jb250YWluZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaHBkYXRhX2luX3Bz c2V0X2FsbG9jX2NvbnRhaW5lcl9zZXQoaHBkYXRhX3QgKmhwZGF0YSwgYm9vbCBpbl9jb250YWlu ZXIpIHsKLQlhc3NlcnQoaW5fY29udGFpbmVyICE9IGhwZGF0YS0+aF9pbl9wc3NldF9hbGxvY19j b250YWluZXIpOwotCWhwZGF0YS0+aF9pbl9wc3NldF9hbGxvY19jb250YWluZXIgPSBpbl9jb250 YWluZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaHBkYXRhX3B1cmdlX2FsbG93ZWRfZ2V0 KGNvbnN0IGhwZGF0YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRhLT5oX3B1cmdlX2FsbG93 ZWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaHBkYXRhX3B1cmdlX2FsbG93ZWRfc2V0KGhw ZGF0YV90ICpocGRhdGEsIGJvb2wgcHVyZ2VfYWxsb3dlZCkgewotICAgICAgIGFzc2VydChwdXJn ZV9hbGxvd2VkID09IGZhbHNlIHx8ICFocGRhdGEtPmhfbWlkX3B1cmdlKTsKLSAgICAgICBocGRh dGEtPmhfcHVyZ2VfYWxsb3dlZCA9IHB1cmdlX2FsbG93ZWQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg Ym9vbAotaHBkYXRhX2h1Z2lmeV9hbGxvd2VkX2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7 Ci0JcmV0dXJuIGhwZGF0YS0+aF9odWdpZnlfYWxsb3dlZDsKLX0KLQotc3RhdGljIGlubGluZSB2 b2lkCi1ocGRhdGFfYWxsb3dfaHVnaWZ5KGhwZGF0YV90ICpocGRhdGEsIG5zdGltZV90IG5vdykg ewotCWFzc2VydCghaHBkYXRhLT5oX21pZF9odWdpZnkpOwotCWhwZGF0YS0+aF9odWdpZnlfYWxs b3dlZCA9IHRydWU7Ci0JaHBkYXRhLT5oX3RpbWVfaHVnaWZ5X2FsbG93ZWQgPSBub3c7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgbnN0aW1lX3QKLWhwZGF0YV90aW1lX2h1Z2lmeV9hbGxvd2VkKGhwZGF0 YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRhLT5oX3RpbWVfaHVnaWZ5X2FsbG93ZWQ7Ci19 Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaHBkYXRhX2Rpc2FsbG93X2h1Z2lmeShocGRhdGFfdCAq aHBkYXRhKSB7Ci0JaHBkYXRhLT5oX2h1Z2lmeV9hbGxvd2VkID0gZmFsc2U7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgYm9vbAotaHBkYXRhX2luX3Bzc2V0X2h1Z2lmeV9jb250YWluZXJfZ2V0KGNvbnN0 IGhwZGF0YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRhLT5oX2luX3Bzc2V0X2h1Z2lmeV9j b250YWluZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaHBkYXRhX2luX3Bzc2V0X2h1Z2lm eV9jb250YWluZXJfc2V0KGhwZGF0YV90ICpocGRhdGEsIGJvb2wgaW5fY29udGFpbmVyKSB7Ci0J YXNzZXJ0KGluX2NvbnRhaW5lciAhPSBocGRhdGEtPmhfaW5fcHNzZXRfaHVnaWZ5X2NvbnRhaW5l cik7Ci0JaHBkYXRhLT5oX2luX3Bzc2V0X2h1Z2lmeV9jb250YWluZXIgPSBpbl9jb250YWluZXI7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaHBkYXRhX21pZF9wdXJnZV9nZXQoY29uc3QgaHBk YXRhX3QgKmhwZGF0YSkgewotCXJldHVybiBocGRhdGEtPmhfbWlkX3B1cmdlOwotfQotCi1zdGF0 aWMgaW5saW5lIHZvaWQKLWhwZGF0YV9taWRfcHVyZ2Vfc2V0KGhwZGF0YV90ICpocGRhdGEsIGJv b2wgbWlkX3B1cmdlKSB7Ci0JYXNzZXJ0KG1pZF9wdXJnZSAhPSBocGRhdGEtPmhfbWlkX3B1cmdl KTsKLQlocGRhdGEtPmhfbWlkX3B1cmdlID0gbWlkX3B1cmdlOwotfQotCi1zdGF0aWMgaW5saW5l IGJvb2wKLWhwZGF0YV9taWRfaHVnaWZ5X2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRhKSB7Ci0J cmV0dXJuIGhwZGF0YS0+aF9taWRfaHVnaWZ5OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWhw ZGF0YV9taWRfaHVnaWZ5X3NldChocGRhdGFfdCAqaHBkYXRhLCBib29sIG1pZF9odWdpZnkpIHsK LQlhc3NlcnQobWlkX2h1Z2lmeSAhPSBocGRhdGEtPmhfbWlkX2h1Z2lmeSk7Ci0JaHBkYXRhLT5o X21pZF9odWdpZnkgPSBtaWRfaHVnaWZ5OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWhwZGF0 YV9jaGFuZ2luZ19zdGF0ZV9nZXQoY29uc3QgaHBkYXRhX3QgKmhwZGF0YSkgewotCXJldHVybiBo cGRhdGEtPmhfbWlkX3B1cmdlIHx8IGhwZGF0YS0+aF9taWRfaHVnaWZ5OwotfQotCi0KLXN0YXRp YyBpbmxpbmUgYm9vbAotaHBkYXRhX3VwZGF0aW5nX2dldChjb25zdCBocGRhdGFfdCAqaHBkYXRh KSB7Ci0JcmV0dXJuIGhwZGF0YS0+aF91cGRhdGluZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk Ci1ocGRhdGFfdXBkYXRpbmdfc2V0KGhwZGF0YV90ICpocGRhdGEsIGJvb2wgdXBkYXRpbmcpIHsK LQlhc3NlcnQodXBkYXRpbmcgIT0gaHBkYXRhLT5oX3VwZGF0aW5nKTsKLQlocGRhdGEtPmhfdXBk YXRpbmcgPSB1cGRhdGluZzsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1ocGRhdGFfaW5fcHNz ZXRfZ2V0KGNvbnN0IGhwZGF0YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRhLT5oX2luX3Bz c2V0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWhwZGF0YV9pbl9wc3NldF9zZXQoaHBkYXRh X3QgKmhwZGF0YSwgYm9vbCBpbl9wc3NldCkgewotCWFzc2VydChpbl9wc3NldCAhPSBocGRhdGEt PmhfaW5fcHNzZXQpOwotCWhwZGF0YS0+aF9pbl9wc3NldCA9IGluX3Bzc2V0OwotfQotCi1zdGF0 aWMgaW5saW5lIHNpemVfdAotaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9nZXQoY29uc3QgaHBk YXRhX3QgKmhwZGF0YSkgewotCXJldHVybiBocGRhdGEtPmhfbG9uZ2VzdF9mcmVlX3JhbmdlOwot fQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2Vfc2V0KGhw ZGF0YV90ICpocGRhdGEsIHNpemVfdCBsb25nZXN0X2ZyZWVfcmFuZ2UpIHsKLQlhc3NlcnQobG9u Z2VzdF9mcmVlX3JhbmdlIDw9IEhVR0VQQUdFX1BBR0VTKTsKLQlocGRhdGEtPmhfbG9uZ2VzdF9m cmVlX3JhbmdlID0gbG9uZ2VzdF9mcmVlX3JhbmdlOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVf dAotaHBkYXRhX25hY3RpdmVfZ2V0KGhwZGF0YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRh LT5oX25hY3RpdmU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1ocGRhdGFfbnRvdWNoZWRf Z2V0KGhwZGF0YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBkYXRhLT5oX250b3VjaGVkOwotfQot Ci1zdGF0aWMgaW5saW5lIHNpemVfdAotaHBkYXRhX25kaXJ0eV9nZXQoaHBkYXRhX3QgKmhwZGF0 YSkgewotCXJldHVybiBocGRhdGEtPmhfbnRvdWNoZWQgLSBocGRhdGEtPmhfbmFjdGl2ZTsKLX0K LQotc3RhdGljIGlubGluZSBzaXplX3QKLWhwZGF0YV9ucmV0YWluZWRfZ2V0KGhwZGF0YV90ICpo cGRhdGEpIHsKLQlyZXR1cm4gSFVHRVBBR0VfUEFHRVMgLSBocGRhdGEtPmhfbnRvdWNoZWQ7Ci19 Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaHBkYXRhX2Fzc2VydF9lbXB0eShocGRhdGFfdCAqaHBk YXRhKSB7Ci0JYXNzZXJ0KGZiX2VtcHR5KGhwZGF0YS0+YWN0aXZlX3BhZ2VzLCBIVUdFUEFHRV9Q QUdFUykpOwotCWFzc2VydChocGRhdGEtPmhfbmFjdGl2ZSA9PSAwKTsKLX0KLQotLyoKLSAqIE9u bHkgdXNlZCBpbiB0ZXN0cywgYW5kIGluIGhwZGF0YV9hc3NlcnRfY29uc2lzdGVudCwgYmVsb3cu ICBWZXJpZmllcyBzb21lCi0gKiBjb25zaXN0ZW5jeSBwcm9wZXJ0aWVzIG9mIHRoZSBocGRhdGEg KGUuZy4gdGhhdCBjYWNoZWQgY291bnRzIG9mIHBhZ2Ugc3RhdHMKLSAqIG1hdGNoIGNvbXB1dGVk IG9uZXMpLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLWhwZGF0YV9jb25zaXN0ZW50KGhwZGF0 YV90ICpocGRhdGEpIHsKLQlpZihmYl91cmFuZ2VfbG9uZ2VzdChocGRhdGEtPmFjdGl2ZV9wYWdl cywgSFVHRVBBR0VfUEFHRVMpCi0JICAgICE9IGhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2VfZ2V0 KGhwZGF0YSkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoZmJfc2NvdW50KGhwZGF0YS0+ YWN0aXZlX3BhZ2VzLCBIVUdFUEFHRV9QQUdFUywgMCwgSFVHRVBBR0VfUEFHRVMpCi0JICAgICE9 IGhwZGF0YS0+aF9uYWN0aXZlKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKGZiX3Njb3Vu dChocGRhdGEtPnRvdWNoZWRfcGFnZXMsIEhVR0VQQUdFX1BBR0VTLCAwLCBIVUdFUEFHRV9QQUdF UykKLQkgICAgIT0gaHBkYXRhLT5oX250b3VjaGVkKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0J aWYgKGhwZGF0YS0+aF9udG91Y2hlZCA8IGhwZGF0YS0+aF9uYWN0aXZlKSB7Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0JaWYgKGhwZGF0YS0+aF9odWdlICYmIGhwZGF0YS0+aF9udG91Y2hlZCAhPSBI VUdFUEFHRV9QQUdFUykgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChocGRhdGFfY2hhbmdp bmdfc3RhdGVfZ2V0KGhwZGF0YSkKLQkgICAgJiYgKChocGRhdGEtPmhfcHVyZ2VfYWxsb3dlZCkg fHwgaHBkYXRhLT5oX2h1Z2lmeV9hbGxvd2VkKSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlm IChocGRhdGFfaHVnaWZ5X2FsbG93ZWRfZ2V0KGhwZGF0YSkKLQkgICAgIT0gaHBkYXRhX2luX3Bz c2V0X2h1Z2lmeV9jb250YWluZXJfZ2V0KGhwZGF0YSkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0K LQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1ocGRhdGFfYXNzZXJ0X2Nv bnNpc3RlbnQoaHBkYXRhX3QgKmhwZGF0YSkgewotCWFzc2VydChocGRhdGFfY29uc2lzdGVudCho cGRhdGEpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1ocGRhdGFfZW1wdHkoaHBkYXRhX3Qg KmhwZGF0YSkgewotCXJldHVybiBocGRhdGEtPmhfbmFjdGl2ZSA9PSAwOwotfQotCi1zdGF0aWMg aW5saW5lIGJvb2wKLWhwZGF0YV9mdWxsKGhwZGF0YV90ICpocGRhdGEpIHsKLQlyZXR1cm4gaHBk YXRhLT5oX25hY3RpdmUgPT0gSFVHRVBBR0VfUEFHRVM7Ci19Ci0KLXZvaWQgaHBkYXRhX2luaXQo aHBkYXRhX3QgKmhwZGF0YSwgdm9pZCAqYWRkciwgdWludDY0X3QgYWdlKTsKLQotLyoKLSAqIEdp dmVuIGFuIGhwZGF0YSB3aGljaCBjYW4gc2VydmUgYW4gYWxsb2NhdGlvbiByZXF1ZXN0LCBwaWNr IGFuZCByZXNlcnZlIGFuCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYWxsb2NhdGlvbi4KLSAqLwot dm9pZCAqaHBkYXRhX3Jlc2VydmVfYWxsb2MoaHBkYXRhX3QgKmhwZGF0YSwgc2l6ZV90IHN6KTsK LXZvaWQgaHBkYXRhX3VucmVzZXJ2ZShocGRhdGFfdCAqaHBkYXRhLCB2b2lkICpiZWdpbiwgc2l6 ZV90IHN6KTsKLQotLyoKLSAqIFRoZSBocGRhdGFfcHVyZ2VfcHJlcGFyZV90IGFsbG93cyBncmFi YmluZyB0aGUgbWV0YWRhdGEgcmVxdWlyZWQgdG8gcHVyZ2UKLSAqIHN1YnJhbmdlcyBvZiBhIGh1 Z2VwYWdlIHdoaWxlIGhvbGRpbmcgYSBsb2NrLCBkcm9wIHRoZSBsb2NrIGR1cmluZyB0aGUgYWN0 dWFsCi0gKiBwdXJnaW5nIG9mIHRoZW0sIGFuZCByZWFjcXVpcmUgaXQgdG8gdXBkYXRlIHRoZSBt ZXRhZGF0YSBhZ2Fpbi4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgaHBkYXRhX3B1cmdlX3N0YXRlX3Mg aHBkYXRhX3B1cmdlX3N0YXRlX3Q7Ci1zdHJ1Y3QgaHBkYXRhX3B1cmdlX3N0YXRlX3MgewotCXNp emVfdCBucHVyZ2VkOwotCXNpemVfdCBuZGlydHlfdG9fcHVyZ2U7Ci0JZmJfZ3JvdXBfdCB0b19w dXJnZVtGQl9OR1JPVVBTKEhVR0VQQUdFX1BBR0VTKV07Ci0Jc2l6ZV90IG5leHRfcHVyZ2Vfc2Vh cmNoX2JlZ2luOwotfTsKLQotLyoKLSAqIEluaXRpYWxpemVzIHB1cmdlIHN0YXRlLiAgVGhlIGFj Y2VzcyB0byBocGRhdGEgbXVzdCBiZSBleHRlcm5hbGx5Ci0gKiBzeW5jaHJvbml6ZWQgd2l0aCBv dGhlciBocGRhdGFfKiBjYWxscy4KLSAqCi0gKiBZb3UgY2FuIHRlbGwgd2hldGhlciBvciBub3Qg YSB0aHJlYWQgaXMgcHVyZ2luZyBvciBodWdpZnlpbmcgYSBnaXZlbiBocGRhdGEKLSAqIHZpYSBo cGRhdGFfY2hhbmdpbmdfc3RhdGVfZ2V0KGhwZGF0YSkuICBSYWNpbmcgaHVnaWZpY2F0aW9uIG9y IHB1cmdpbmcKLSAqIG9wZXJhdGlvbnMgYXJlbid0IGFsbG93ZWQuCi0gKgotICogT25jZSB5b3Ug YmVnaW4gcHVyZ2luZywgeW91IGhhdmUgdG8gZm9sbG93IHRocm91Z2ggYW5kIGNhbGwgaHBkYXRh X3B1cmdlX25leHQKLSAqIHVudGlsIHlvdSdyZSBkb25lLCBhbmQgdGhlbiBlbmQuICBBbGxvY2F0 aW5nIG91dCBvZiBhbiBocGRhdGEgdW5kZXJnb2luZwotICogcHVyZ2luZyBpcyBub3QgYWxsb3dl ZC4KLSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgdGhhdCB3aWxsIGJl IHB1cmdlZC4KLSAqLwotc2l6ZV90IGhwZGF0YV9wdXJnZV9iZWdpbihocGRhdGFfdCAqaHBkYXRh LCBocGRhdGFfcHVyZ2Vfc3RhdGVfdCAqcHVyZ2Vfc3RhdGUpOwotCi0vKgotICogSWYgdGhlcmUg YXJlIG1vcmUgZXh0ZW50cyB0byBwdXJnZSwgc2V0cyAqcl9wdXJnZV9hZGRyIGFuZCAqcl9wdXJn ZV9zaXplIHRvCi0gKiB0cnVlLCBhbmQgcmV0dXJucyB0cnVlLiAgT3RoZXJ3aXNlLCByZXR1cm5z IGZhbHNlIHRvIGluZGljYXRlIHRoYXQgd2UncmUKLSAqIGRvbmUuCi0gKgotICogVGhpcyByZXF1 aXJlcyBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBwdXJnZSBzdGF0ZSwgYnV0ICpub3QqIHRvIHRo ZSBocGRhdGEuCi0gKiBJbiBwYXJ0aWN1bGFyLCB1bnJlc2VydmUgY2FsbHMgYXJlIGFsbG93ZWQg d2hpbGUgcHVyZ2luZyAoaS5lLiB5b3UgY2FuIGRhbGxvYwotICogaW50byBvbmUgcGFydCBvZiB0 aGUgaHBkYXRhIHdoaWxlIHB1cmdpbmcgYSBkaWZmZXJlbnQgcGFydCkuCi0gKi8KLWJvb2wgaHBk YXRhX3B1cmdlX25leHQoaHBkYXRhX3QgKmhwZGF0YSwgaHBkYXRhX3B1cmdlX3N0YXRlX3QgKnB1 cmdlX3N0YXRlLAotICAgIHZvaWQgKipyX3B1cmdlX2FkZHIsIHNpemVfdCAqcl9wdXJnZV9zaXpl KTsKLS8qCi0gKiBVcGRhdGVzIHRoZSBocGRhdGEgbWV0YWRhdGEgYWZ0ZXIgYWxsIHB1cmdpbmcg aXMgZG9uZS4gIE5lZWRzIGV4dGVybmFsCi0gKiBzeW5jaHJvbml6YXRpb24uCi0gKi8KLXZvaWQg aHBkYXRhX3B1cmdlX2VuZChocGRhdGFfdCAqaHBkYXRhLCBocGRhdGFfcHVyZ2Vfc3RhdGVfdCAq cHVyZ2Vfc3RhdGUpOwotCi12b2lkIGhwZGF0YV9odWdpZnkoaHBkYXRhX3QgKmhwZGF0YSk7Ci12 b2lkIGhwZGF0YV9kZWh1Z2lmeShocGRhdGFfdCAqaHBkYXRhKTsKLQotI2VuZGlmIC8qIEpFTUFM TE9DX0lOVEVSTkFMX0hQREFUQV9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9pbnNwZWN0Lmgg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL2luc3BlY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVmZWY1 MS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2luc3BlY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDQw ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfSU5TUEVDVF9ICi0jZGVmaW5lIEpF TUFMTE9DX0lOVEVSTkFMX0lOU1BFQ1RfSAotCi0vKgotICogVGhpcyBtb2R1bGUgY29udGFpbnMg dGhlIGhlYXAgaW50cm9zcGVjdGlvbiBjYXBhYmlsaXRpZXMuICBGb3Igbm93IHRoZXkgYXJlCi0g KiBleHBvc2VkIHB1cmVseSB0aHJvdWdoIG1hbGxjdGwgQVBJcyBpbiB0aGUgZXhwZXJpbWVudGFs IG5hbWVzcGFjZSwgYnV0IHRoaXMKLSAqIG1heSBjaGFuZ2Ugb3ZlciB0aW1lLgotICovCi0KLS8q Ci0gKiBUaGUgZm9sbG93aW5nIHR3byBzdHJ1Y3RzIGFyZSBmb3IgZXhwZXJpbWVudGFsIHB1cnBv c2VzLiBTZWUKLSAqIGV4cGVyaW1lbnRhbF91dGlsaXphdGlvbl9xdWVyeV9jdGwgYW5kCi0gKiBl eHBlcmltZW50YWxfdXRpbGl6YXRpb25fYmF0Y2hfcXVlcnlfY3RsIGluIHNyYy9jdGwuYy4KLSAq LwotdHlwZWRlZiBzdHJ1Y3QgaW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0c19zIGluc3BlY3RfZXh0 ZW50X3V0aWxfc3RhdHNfdDsKLXN0cnVjdCBpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3Mgewot CXNpemVfdCBuZnJlZTsKLQlzaXplX3QgbnJlZ3M7Ci0Jc2l6ZV90IHNpemU7Ci19OwotCi10eXBl ZGVmIHN0cnVjdCBpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3ZlcmJvc2VfcwotICAgIGluc3Bl Y3RfZXh0ZW50X3V0aWxfc3RhdHNfdmVyYm9zZV90OwotCi1zdHJ1Y3QgaW5zcGVjdF9leHRlbnRf dXRpbF9zdGF0c192ZXJib3NlX3MgewotCXZvaWQgKnNsYWJjdXJfYWRkcjsKLQlzaXplX3QgbmZy ZWU7Ci0Jc2l6ZV90IG5yZWdzOwotCXNpemVfdCBzaXplOwotCXNpemVfdCBiaW5fbmZyZWU7Ci0J c2l6ZV90IGJpbl9ucmVnczsKLX07Ci0KLXZvaWQgaW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0c19n ZXQodHNkbl90ICp0c2RuLCBjb25zdCB2b2lkICpwdHIsCi0gICAgc2l6ZV90ICpuZnJlZSwgc2l6 ZV90ICpucmVncywgc2l6ZV90ICpzaXplKTsKLXZvaWQgaW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0 c192ZXJib3NlX2dldCh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0ciwKLSAgICBzaXplX3Qg Km5mcmVlLCBzaXplX3QgKm5yZWdzLCBzaXplX3QgKnNpemUsCi0gICAgc2l6ZV90ICpiaW5fbmZy ZWUsIHNpemVfdCAqYmluX25yZWdzLCB2b2lkICoqc2xhYmN1cl9hZGRyKTsKLQotI2VuZGlmIC8q IEpFTUFMTE9DX0lOVEVSTkFMX0lOU1BFQ1RfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVt YWxsb2NfaW50ZXJuYWxfZGVjbHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfZGVjbHMu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTgzMDI3Yy4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX2ludGVybmFsX2RlY2xzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDgg KzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9ERUNMU19ICi0jZGVmaW5lIEpFTUFM TE9DX0lOVEVSTkFMX0RFQ0xTX0gKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpZmRlZiBfV0lOMzIK LSMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSMgIGluY2x1ZGUgIm1zdmNfY29tcGF0L3dpbmRvd3Nf ZXh0cmEuaCIKLSMgIGluY2x1ZGUgIm1zdmNfY29tcGF0L3N0cmluZ3MuaCIKLSMgIGlmZGVmIF9X SU42NAotIyAgICBpZiBMR19WQUREUiA8PSAzMgotIyAgICAgIGVycm9yIEdlbmVyYXRlIHRoZSBo ZWFkZXJzIHVzaW5nIHg2NCB2Y2FyZ3MKLSMgICAgZW5kaWYKLSMgIGVsc2UKLSMgICAgaWYgTEdf VkFERFIgPiAzMgotIyAgICAgIHVuZGVmIExHX1ZBRERSCi0jICAgICAgZGVmaW5lIExHX1ZBRERS IDMyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2Vsc2UKLSMgIGluY2x1ZGUgPHN5cy9wYXJhbS5o PgotIyAgaW5jbHVkZSA8c3lzL21tYW4uaD4KLSMgIGlmICFkZWZpbmVkKF9fcG5hY2xfXykgJiYg IWRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCi0jICAgIGluY2x1ZGUgPHN5cy9zeXNjYWxsLmg+ Ci0jICAgIGlmICFkZWZpbmVkKFNZU193cml0ZSkgJiYgZGVmaW5lZChfX05SX3dyaXRlKQotIyAg ICAgIGRlZmluZSBTWVNfd3JpdGUgX19OUl93cml0ZQotIyAgICBlbmRpZgotIyAgICBpZiBkZWZp bmVkKFNZU19vcGVuKSAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKQotICAgICAgIC8qIEFuZHJvaWQg aGVhZGVycyBtYXkgZGVmaW5lIFNZU19vcGVuIHRvIF9fTlJfb3BlbiBldmVuIHRob3VnaAotICAg ICAgICAqIF9fTlJfb3BlbiBtYXkgbm90IGV4aXN0IG9uIEFBcmNoNjQgKHN1cGVyc2VkZWQgYnkg X19OUl9vcGVuYXQpLiAqLwotIyAgICAgIHVuZGVmIFNZU19vcGVuCi0jICAgIGVuZGlmCi0jICAg IGluY2x1ZGUgPHN5cy91aW8uaD4KLSMgIGVuZGlmCi0jICBpbmNsdWRlIDxwdGhyZWFkLmg+Ci0j ICBpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jICBp bmNsdWRlIDxwdGhyZWFkX25wLmg+Ci0jICBpbmNsdWRlIDxzY2hlZC5oPgotIyAgaWYgZGVmaW5l ZChfX0ZyZWVCU0RfXykKLSMgICAgZGVmaW5lIGNwdV9zZXRfdCBjcHVzZXRfdAotIyAgZW5kaWYK LSMgIGVuZGlmCi0jICBpbmNsdWRlIDxzaWduYWwuaD4KLSMgIGlmZGVmIEpFTUFMTE9DX09TX1VO RkFJUl9MT0NLCi0jICAgIGluY2x1ZGUgPG9zL2xvY2suaD4KLSMgIGVuZGlmCi0jICBpZmRlZiBK RU1BTExPQ19HTElCQ19NQUxMT0NfSE9PSwotIyAgICBpbmNsdWRlIDxzY2hlZC5oPgotIyAgZW5k aWYKLSMgIGluY2x1ZGUgPGVycm5vLmg+Ci0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyAgaW5j bHVkZSA8dGltZS5oPgotIyAgaWZkZWYgSkVNQUxMT0NfSEFWRV9NQUNIX0FCU09MVVRFX1RJTUUK LSMgICAgaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KLSMgIGVuZGlmCi0jZW5kaWYKLSNpbmNs dWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2lmbmRlZiBTSVpFX1Rf TUFYCi0jICBkZWZpbmUgU0laRV9UX01BWAlTSVpFX01BWAotI2VuZGlmCi0jaWZuZGVmIFNTSVpF X01BWAotIyAgZGVmaW5lIFNTSVpFX01BWAkoKHNzaXplX3QpKFNJWkVfVF9NQVggPj4gMSkpCi0j ZW5kaWYKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jaW5jbHVk ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNp bmNsdWRlIDxzdGRkZWYuaD4KLSNpZm5kZWYgb2Zmc2V0b2YKLSMgIGRlZmluZSBvZmZzZXRvZih0 eXBlLCBtZW1iZXIpCSgoc2l6ZV90KSYoKCh0eXBlICopTlVMTCktPm1lbWJlcikpCi0jZW5kaWYK LSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jaW5jbHVkZSA8Y3R5 cGUuaD4KLSNpZmRlZiBfTVNDX1ZFUgotIyAgaW5jbHVkZSA8aW8uaD4KLXR5cGVkZWYgaW50cHRy X3Qgc3NpemVfdDsKLSMgIGRlZmluZSBQQVRIX01BWCAxMDI0Ci0jICBkZWZpbmUgU1RERVJSX0ZJ TEVOTyAyCi0jICBkZWZpbmUgX19mdW5jX18gX19GVU5DVElPTl9fCi0jICBpZmRlZiBKRU1BTExP Q19IQVNfUkVTVFJJQ1QKLSMgICAgZGVmaW5lIHJlc3RyaWN0IF9fcmVzdHJpY3QKLSMgIGVuZGlm Ci0vKiBEaXNhYmxlIHdhcm5pbmdzIGFib3V0IGRlcHJlY2F0ZWQgc3lzdGVtIGZ1bmN0aW9ucy4g Ki8KLSMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ5OTYpCi0jaWYgX01TQ19WRVIgPCAxODAw Ci1zdGF0aWMgaW50Ci1pc2JsYW5rKGludCBjKSB7Ci0JcmV0dXJuIChjID09ICdcdCcgfHwgYyA9 PSAnICcpOwotfQotI2VuZGlmCi0jZWxzZQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYK LSNpbmNsdWRlIDxmY250bC5oPgotCi0vKgotICogVGhlIFdpbjMyIG1pZGwgY29tcGlsZXIgaGFz ICNkZWZpbmUgc21hbGwgY2hhcjsgd2UgZG9uJ3QgdXNlIG1pZGwsIGJ1dAotICogInNtYWxsIiBp cyBhIG5pY2UgaWRlbnRpZmllciB0byBoYXZlIGF2YWlsYWJsZSB3aGVuIHRhbGtpbmcgYWJvdXQg c2l6ZQotICogY2xhc3Nlcy4KLSAqLwotI2lmZGVmIHNtYWxsCi0jICB1bmRlZiBzbWFsbAotI2Vu ZGlmCi0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9qZW1hbGxvY19pbnRlcm5hbF9kZWZzLmguaW4gYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVy bmFsX2RlZnMuaC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU4ODA3Mi4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2RlZnMuaC5pbgorKysgL2Rldi9u dWxsCkBAIC0xLDQyNyArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0RFRlNfSF8K LSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfREVGU19IXwotLyoKLSAqIElmIEpFTUFMTE9DX1BS RUZJWCBpcyBkZWZpbmVkIHZpYSAtLXdpdGgtamVtYWxsb2MtcHJlZml4LCBpdCB3aWxsIGNhdXNl IGFsbAotICogcHVibGljIEFQSXMgdG8gYmUgcHJlZml4ZWQuICBUaGlzIG1ha2VzIGl0IHBvc3Np YmxlLCB3aXRoIHNvbWUgY2FyZSwgdG8gdXNlCi0gKiBtdWx0aXBsZSBhbGxvY2F0b3JzIHNpbXVs dGFuZW91c2x5LgotICovCi0jdW5kZWYgSkVNQUxMT0NfUFJFRklYCi0jdW5kZWYgSkVNQUxMT0Nf Q1BSRUZJWAotCi0vKgotICogRGVmaW5lIG92ZXJyaWRlcyBmb3Igbm9uLXN0YW5kYXJkIGFsbG9j YXRvci1yZWxhdGVkIGZ1bmN0aW9ucyBpZiB0aGV5IGFyZQotICogcHJlc2VudCBvbiB0aGUgc3lz dGVtLgotICovCi0jdW5kZWYgSkVNQUxMT0NfT1ZFUlJJREVfX19MSUJDX0NBTExPQwotI3VuZGVm IEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19GUkVFCi0jdW5kZWYgSkVNQUxMT0NfT1ZFUlJJREVf X19MSUJDX01BTExPQwotI3VuZGVmIEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19NRU1BTElHTgot I3VuZGVmIEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19SRUFMTE9DCi0jdW5kZWYgSkVNQUxMT0Nf T1ZFUlJJREVfX19MSUJDX1ZBTExPQwotI3VuZGVmIEpFTUFMTE9DX09WRVJSSURFX19fUE9TSVhf TUVNQUxJR04KLQotLyoKLSAqIEpFTUFMTE9DX1BSSVZBVEVfTkFNRVNQQUNFIGlzIHVzZWQgYXMg YSBwcmVmaXggZm9yIGFsbCBsaWJyYXJ5LXByaXZhdGUgQVBJcy4KLSAqIEZvciBzaGFyZWQgbGli cmFyaWVzLCBzeW1ib2wgdmlzaWJpbGl0eSBtZWNoYW5pc21zIHByZXZlbnQgdGhlc2Ugc3ltYm9s cwotICogZnJvbSBiZWluZyBleHBvcnRlZCwgYnV0IGZvciBzdGF0aWMgbGlicmFyaWVzLCBuYW1p bmcgY29sbGlzaW9ucyBhcmUgYSByZWFsCi0gKiBwb3NzaWJpbGl0eS4KLSAqLwotI3VuZGVmIEpF TUFMTE9DX1BSSVZBVEVfTkFNRVNQQUNFCi0KLS8qCi0gKiBIeXBlci10aHJlYWRlZCBDUFVzIG1h eSBuZWVkIGEgc3BlY2lhbCBpbnN0cnVjdGlvbiBpbnNpZGUgc3BpbiBsb29wcyBpbgotICogb3Jk ZXIgdG8geWllbGQgdG8gYW5vdGhlciB2aXJ0dWFsIENQVS4KLSAqLwotI3VuZGVmIENQVV9TUElO V0FJVAotLyogMSBpZiBDUFVfU1BJTldBSVQgaXMgZGVmaW5lZCwgMCBvdGhlcndpc2UuICovCi0j dW5kZWYgSEFWRV9DUFVfU1BJTldBSVQKLQotLyoKLSAqIE51bWJlciBvZiBzaWduaWZpY2FudCBi aXRzIGluIHZpcnR1YWwgYWRkcmVzc2VzLiAgVGhpcyBtYXkgYmUgbGVzcyB0aGFuIHRoZQotICog dG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gYSBwb2ludGVyLCBlLmcuIG9uIHg2NCwgZm9yIHdoaWNo IHRoZSB1cHBlcm1vc3QgMTYKLSAqIGJpdHMgYXJlIHRoZSBzYW1lIGFzIGJpdCA0Ny4KLSAqLwot I3VuZGVmIExHX1ZBRERSCi0KLS8qIERlZmluZWQgaWYgQzExIGF0b21pY3MgYXJlIGF2YWlsYWJs ZS4gKi8KLSN1bmRlZiBKRU1BTExPQ19DMTFfQVRPTUlDUwotCi0vKiBEZWZpbmVkIGlmIEdDQyBf X2F0b21pYyBhdG9taWNzIGFyZSBhdmFpbGFibGUuICovCi0jdW5kZWYgSkVNQUxMT0NfR0NDX0FU T01JQ19BVE9NSUNTCi0vKiBhbmQgdGhlIDgtYml0IHZhcmlhbnQgc3VwcG9ydC4gKi8KLSN1bmRl ZiBKRU1BTExPQ19HQ0NfVThfQVRPTUlDX0FUT01JQ1MKLQotLyogRGVmaW5lZCBpZiBHQ0MgX19z eW5jIGF0b21pY3MgYXJlIGF2YWlsYWJsZS4gKi8KLSN1bmRlZiBKRU1BTExPQ19HQ0NfU1lOQ19B VE9NSUNTCi0vKiBhbmQgdGhlIDgtYml0IHZhcmlhbnQgc3VwcG9ydC4gKi8KLSN1bmRlZiBKRU1B TExPQ19HQ0NfVThfU1lOQ19BVE9NSUNTCi0KLS8qCi0gKiBEZWZpbmVkIGlmIF9fYnVpbHRpbl9j bHooKSBhbmQgX19idWlsdGluX2NsemwoKSBhcmUgYXZhaWxhYmxlLgotICovCi0jdW5kZWYgSkVN QUxMT0NfSEFWRV9CVUlMVElOX0NMWgotCi0vKgotICogRGVmaW5lZCBpZiBvc191bmZhaXJfbG9j a18qKCkgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUsIGFzIHByb3ZpZGVkIGJ5IERhcndpbi4KLSAq LwotI3VuZGVmIEpFTUFMTE9DX09TX1VORkFJUl9MT0NLCi0KLS8qIERlZmluZWQgaWYgc3lzY2Fs bCgyKSBpcyB1c2FibGUuICovCi0jdW5kZWYgSkVNQUxMT0NfVVNFX1NZU0NBTEwKLQotLyoKLSAq IERlZmluZWQgaWYgc2VjdXJlX2dldGVudigzKSBpcyBhdmFpbGFibGUuCi0gKi8KLSN1bmRlZiBK RU1BTExPQ19IQVZFX1NFQ1VSRV9HRVRFTlYKLQotLyoKLSAqIERlZmluZWQgaWYgaXNzZXR1Z2lk KDIpIGlzIGF2YWlsYWJsZS4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX0hBVkVfSVNTRVRVR0lECi0K LS8qIERlZmluZWQgaWYgcHRocmVhZF9hdGZvcmsoMykgaXMgYXZhaWxhYmxlLiAqLwotI3VuZGVm IEpFTUFMTE9DX0hBVkVfUFRIUkVBRF9BVEZPUksKLQotLyogRGVmaW5lZCBpZiBwdGhyZWFkX3Nl dG5hbWVfbnAoMykgaXMgYXZhaWxhYmxlLiAqLwotI3VuZGVmIEpFTUFMTE9DX0hBVkVfUFRIUkVB RF9TRVROQU1FX05QCi0KLS8qIERlZmluZWQgaWYgcHRocmVhZF9nZXRuYW1lX25wKDMpIGlzIGF2 YWlsYWJsZS4gKi8KLSN1bmRlZiBKRU1BTExPQ19IQVZFX1BUSFJFQURfR0VUTkFNRV9OUAotCi0v KiBEZWZpbmVkIGlmIHB0aHJlYWRfZ2V0X25hbWVfbnAoMykgaXMgYXZhaWxhYmxlLiAqLwotI3Vu ZGVmIEpFTUFMTE9DX0hBVkVfUFRIUkVBRF9HRVRfTkFNRV9OUAotCi0vKgotICogRGVmaW5lZCBp ZiBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIC4uLikgaXMgYXZhaWxhYmxl LgotICovCi0jdW5kZWYgSkVNQUxMT0NfSEFWRV9DTE9DS19NT05PVE9OSUNfQ09BUlNFCi0KLS8q Ci0gKiBEZWZpbmVkIGlmIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAuLi4pIGlzIGF2 YWlsYWJsZS4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX0hBVkVfQ0xPQ0tfTU9OT1RPTklDCi0KLS8q Ci0gKiBEZWZpbmVkIGlmIG1hY2hfYWJzb2x1dGVfdGltZSgpIGlzIGF2YWlsYWJsZS4KLSAqLwot I3VuZGVmIEpFTUFMTE9DX0hBVkVfTUFDSF9BQlNPTFVURV9USU1FCi0KLS8qCi0gKiBEZWZpbmVk IGlmIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsIC4uLikgaXMgYXZhaWxhYmxlLgotICov Ci0jdW5kZWYgSkVNQUxMT0NfSEFWRV9DTE9DS19SRUFMVElNRQotCi0vKgotICogRGVmaW5lZCBp ZiBfbWFsbG9jX3RocmVhZF9jbGVhbnVwKCkgZXhpc3RzLiAgQXQgbGVhc3QgaW4gdGhlIGNhc2Ug b2YKLSAqIEZyZWVCU0QsIHB0aHJlYWRfa2V5X2NyZWF0ZSgpIGFsbG9jYXRlcywgd2hpY2ggaWYg dXNlZCBkdXJpbmcgbWFsbG9jCi0gKiBib290c3RyYXBwaW5nIHdpbGwgY2F1c2UgcmVjdXJzaW9u IGludG8gdGhlIHB0aHJlYWRzIGxpYnJhcnkuICBUaGVyZWZvcmUsIGlmCi0gKiBfbWFsbG9jX3Ro cmVhZF9jbGVhbnVwKCkgZXhpc3RzLCB1c2UgaXQgYXMgdGhlIGJhc2lzIGZvciB0aHJlYWQgY2xl YW51cCBpbgotICogbWFsbG9jX3RzZC4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX01BTExPQ19USFJF QURfQ0xFQU5VUAotCi0vKgotICogRGVmaW5lZCBpZiB0aHJlYWRlZCBpbml0aWFsaXphdGlvbiBp cyBrbm93biB0byBiZSBzYWZlIG9uIHRoaXMgcGxhdGZvcm0uCi0gKiBBbW9uZyBvdGhlciB0aGlu Z3MsIGl0IG11c3QgYmUgcG9zc2libGUgdG8gaW5pdGlhbGl6ZSBhIG11dGV4IHdpdGhvdXQKLSAq IHRyaWdnZXJpbmcgYWxsb2NhdGlvbiBpbiBvcmRlciBmb3IgdGhyZWFkZWQgYWxsb2NhdGlvbiB0 byBiZSBzYWZlLgotICovCi0jdW5kZWYgSkVNQUxMT0NfVEhSRUFERURfSU5JVAotCi0vKgotICog RGVmaW5lZCBpZiB0aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24gZGVmaW5lcwotICogX3B0aHJl YWRfbXV0ZXhfaW5pdF9jYWxsb2NfY2IoKSwgaW4gd2hpY2ggY2FzZSB0aGUgZnVuY3Rpb24gaXMg dXNlZCBpbiBvcmRlcgotICogdG8gYXZvaWQgcmVjdXJzaXZlIGFsbG9jYXRpb24gZHVyaW5nIG11 dGV4IGluaXRpYWxpemF0aW9uLgotICovCi0jdW5kZWYgSkVNQUxMT0NfTVVURVhfSU5JVF9DQgot Ci0vKiBOb24tZW1wdHkgaWYgdGhlIHRsc19tb2RlbCBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAq LwotI3VuZGVmIEpFTUFMTE9DX1RMU19NT0RFTAotCi0vKgotICogSkVNQUxMT0NfREVCVUcgZW5h YmxlcyBhc3NlcnRpb25zIGFuZCBvdGhlciBzYW5pdHkgY2hlY2tzLCBhbmQgZGlzYWJsZXMKLSAq IGlubGluZSBmdW5jdGlvbnMuCi0gKi8KLSN1bmRlZiBKRU1BTExPQ19ERUJVRwotCi0vKiBKRU1B TExPQ19TVEFUUyBlbmFibGVzIHN0YXRpc3RpY3MgY2FsY3VsYXRpb24uICovCi0jdW5kZWYgSkVN QUxMT0NfU1RBVFMKLQotLyogSkVNQUxMT0NfRVhQRVJJTUVOVEFMX1NNQUxMT0NYX0FQSSBlbmFi bGVzIGV4cGVyaW1lbnRhbCBzbWFsbG9jeCBBUEkuICovCi0jdW5kZWYgSkVNQUxMT0NfRVhQRVJJ TUVOVEFMX1NNQUxMT0NYX0FQSQotCi0vKiBKRU1BTExPQ19QUk9GIGVuYWJsZXMgYWxsb2NhdGlv biBwcm9maWxpbmcuICovCi0jdW5kZWYgSkVNQUxMT0NfUFJPRgotCi0vKiBVc2UgbGlidW53aW5k IGZvciBwcm9maWxlIGJhY2t0cmFjaW5nIGlmIGRlZmluZWQuICovCi0jdW5kZWYgSkVNQUxMT0Nf UFJPRl9MSUJVTldJTkQKLQotLyogVXNlIGxpYmdjYyBmb3IgcHJvZmlsZSBiYWNrdHJhY2luZyBp ZiBkZWZpbmVkLiAqLwotI3VuZGVmIEpFTUFMTE9DX1BST0ZfTElCR0NDCi0KLS8qIFVzZSBnY2Mg aW50cmluc2ljcyBmb3IgcHJvZmlsZSBiYWNrdHJhY2luZyBpZiBkZWZpbmVkLiAqLwotI3VuZGVm IEpFTUFMTE9DX1BST0ZfR0NDCi0KLS8qCi0gKiBKRU1BTExPQ19EU1MgZW5hYmxlcyB1c2Ugb2Yg c2JyaygyKSB0byBhbGxvY2F0ZSBleHRlbnRzIGZyb20gdGhlIGRhdGEgc3RvcmFnZQotICogc2Vn bWVudCAoRFNTKS4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX0RTUwotCi0vKiBTdXBwb3J0IG1lbW9y eSBmaWxsaW5nIChqdW5rL3plcm8pLiAqLwotI3VuZGVmIEpFTUFMTE9DX0ZJTEwKLQotLyogU3Vw cG9ydCB1dHJhY2UoMiktYmFzZWQgdHJhY2luZy4gKi8KLSN1bmRlZiBKRU1BTExPQ19VVFJBQ0UK LQotLyogU3VwcG9ydCB1dHJhY2UoMiktYmFzZWQgdHJhY2luZyAobGFiZWwgYmFzZWQgc2lnbmF0 dXJlKS4gKi8KLSN1bmRlZiBKRU1BTExPQ19VVFJBQ0VfTEFCRUwKLQotLyogU3VwcG9ydCBvcHRp b25hbCBhYm9ydCgpIG9uIE9PTS4gKi8KLSN1bmRlZiBKRU1BTExPQ19YTUFMTE9DCi0KLS8qIFN1 cHBvcnQgbGF6eSBsb2NraW5nIChhdm9pZCBsb2NraW5nIHVubGVzcyBhIHNlY29uZCB0aHJlYWQg aXMgbGF1bmNoZWQpLiAqLwotI3VuZGVmIEpFTUFMTE9DX0xBWllfTE9DSwotCi0vKgotICogTWlu aW11bSBhbGxvY2F0aW9uIGFsaWdubWVudCBpcyAyXkxHX1FVQU5UVU0gYnl0ZXMgKGlnbm9yaW5n IHRpbnkgc2l6ZQotICogY2xhc3NlcykuCi0gKi8KLSN1bmRlZiBMR19RVUFOVFVNCi0KLS8qIE9u ZSBwYWdlIGlzIDJeTEdfUEFHRSBieXRlcy4gKi8KLSN1bmRlZiBMR19QQUdFCi0KLS8qIE1heGlt dW0gbnVtYmVyIG9mIHJlZ2lvbnMgaW4gYSBzbGFiLiAqLwotI3VuZGVmIENPTkZJR19MR19TTEFC X01BWFJFR1MKLQotLyoKLSAqIE9uZSBodWdlIHBhZ2UgaXMgMl5MR19IVUdFUEFHRSBieXRlcy4g IE5vdGUgdGhhdCB0aGlzIGlzIGRlZmluZWQgZXZlbiBpZiB0aGUKLSAqIHN5c3RlbSBkb2VzIG5v dCBleHBsaWNpdGx5IHN1cHBvcnQgaHVnZSBwYWdlczsgc3lzdGVtIGNhbGxzIHRoYXQgcmVxdWly ZQotICogZXhwbGljaXQgaHVnZSBwYWdlIHN1cHBvcnQgYXJlIHNlcGFyYXRlbHkgY29uZmlndXJl ZC4KLSAqLwotI3VuZGVmIExHX0hVR0VQQUdFCi0KLS8qCi0gKiBJZiBkZWZpbmVkLCBhZGphY2Vu dCB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5ncyB3aXRoIGlkZW50aWNhbCBhdHRyaWJ1dGVzCi0gKiBh dXRvbWF0aWNhbGx5IGNvYWxlc2NlLCBhbmQgdGhleSBmcmFnbWVudCB3aGVuIGNoYW5nZXMgYXJl IG1hZGUgdG8gc3VicmFuZ2VzLgotICogVGhpcyBpcyB0aGUgbm9ybWFsIG9yZGVyIG9mIHRoaW5n cyBmb3IgbW1hcCgpL211bm1hcCgpLCBidXQgb24gV2luZG93cwotICogVmlydHVhbEFsbG9jKCkv VmlydHVhbEZyZWUoKSBvcGVyYXRpb25zIG11c3QgYmUgcHJlY2lzZWx5IG1hdGNoZWQsIGkuZS4K LSAqIG1hcHBpbmdzIGRvICpub3QqIGNvYWxlc2NlL2ZyYWdtZW50LgotICovCi0jdW5kZWYgSkVN QUxMT0NfTUFQU19DT0FMRVNDRQotCi0vKgotICogSWYgZGVmaW5lZCwgcmV0YWluIG1lbW9yeSBm b3IgbGF0ZXIgcmV1c2UgYnkgZGVmYXVsdCByYXRoZXIgdGhhbiB1c2luZyBlLmcuCi0gKiBtdW5t YXAoKSB0byB1bm1hcCBmcmVlZCBleHRlbnRzLiAgVGhpcyBpcyBlbmFibGVkIG9uIDY0LWJpdCBM aW51eCBiZWNhdXNlCi0gKiBjb21tb24gc2VxdWVuY2VzIG9mIG1tYXAoKS9tdW5tYXAoKSBjYWxs cyB3aWxsIGNhdXNlIHZpcnR1YWwgbWVtb3J5IG1hcAotICogaG9sZXMuCi0gKi8KLSN1bmRlZiBK RU1BTExPQ19SRVRBSU4KLQotLyogVExTIGlzIHVzZWQgdG8gbWFwIGFyZW5hcyBhbmQgbWFnYXpp bmUgY2FjaGVzIHRvIHRocmVhZHMuICovCi0jdW5kZWYgSkVNQUxMT0NfVExTCi0KLS8qCi0gKiBV c2VkIHRvIG1hcmsgdW5yZWFjaGFibGUgY29kZSB0byBxdWlldCAiZW5kIG9mIG5vbi12b2lkIiBj b21waWxlciB3YXJuaW5ncy4KLSAqIERvbid0IHVzZSB0aGlzIGRpcmVjdGx5OyBpbnN0ZWFkIHVz ZSB1bnJlYWNoYWJsZSgpIGZyb20gdXRpbC5oCi0gKi8KLSN1bmRlZiBKRU1BTExPQ19JTlRFUk5B TF9VTlJFQUNIQUJMRQotCi0vKgotICogZmZzKigpIGZ1bmN0aW9ucyB0byB1c2UgZm9yIGJpdG1h cHBpbmcuICBEb24ndCB1c2UgdGhlc2UgZGlyZWN0bHk7IGluc3RlYWQsCi0gKiB1c2UgZmZzXyoo KSBmcm9tIHV0aWwuaC4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0ZGU0xMCi0jdW5k ZWYgSkVNQUxMT0NfSU5URVJOQUxfRkZTTAotI3VuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX0ZGUwot Ci0vKgotICogcG9wY291bnQqKCkgZnVuY3Rpb25zIHRvIHVzZSBmb3IgYml0bWFwcGluZy4KLSAq LwotI3VuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BPUENPVU5UTAotI3VuZGVmIEpFTUFMTE9DX0lO VEVSTkFMX1BPUENPVU5UCi0KLS8qCi0gKiBJZiBkZWZpbmVkLCBleHBsaWNpdGx5IGF0dGVtcHQg dG8gbW9yZSB1bmlmb3JtbHkgZGlzdHJpYnV0ZSBsYXJnZSBhbGxvY2F0aW9uCi0gKiBwb2ludGVy IGFsaWdubWVudHMgYWNyb3NzIGFsbCBjYWNoZSBpbmRpY2VzLgotICovCi0jdW5kZWYgSkVNQUxM T0NfQ0FDSEVfT0JMSVZJT1VTCi0KLS8qCi0gKiBJZiBkZWZpbmVkLCBlbmFibGUgbG9nZ2luZyBm YWNpbGl0aWVzLiAgV2UgbWFrZSB0aGlzIGEgY29uZmlndXJlIG9wdGlvbiB0bwotICogYXZvaWQg dGFraW5nIGV4dHJhIGJyYW5jaGVzIGV2ZXJ5d2hlcmUuCi0gKi8KLSN1bmRlZiBKRU1BTExPQ19M T0cKLQotLyoKLSAqIElmIGRlZmluZWQsIHVzZSByZWFkbGlua2F0KCkgKGluc3RlYWQgb2YgcmVh ZGxpbmsoKSkgdG8gZm9sbG93Ci0gKiAvZXRjL21hbGxvY19jb25mLgotICovCi0jdW5kZWYgSkVN QUxMT0NfUkVBRExJTktBVAotCi0vKgotICogRGFyd2luIChPUyBYKSB1c2VzIHpvbmVzIHRvIHdv cmsgYXJvdW5kIE1hY2gtTyBzeW1ib2wgb3ZlcnJpZGUgc2hvcnRjb21pbmdzLgotICovCi0jdW5k ZWYgSkVNQUxMT0NfWk9ORQotCi0vKgotICogTWV0aG9kcyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhl ciB0aGUgT1Mgb3ZlcmNvbW1pdHMuCi0gKiBKRU1BTExPQ19QUk9DX1NZU19WTV9PVkVSQ09NTUlU X01FTU9SWTogTGludXgncwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC9wcm9jL3N5cy92bS5vdmVyY29tbWl0X21lbW9yeSBmaWxlLgotICogSkVNQUxMT0NfU1lT Q1RMX1ZNX09WRVJDT01NSVQ6IEZyZWVCU0QncyB2bS5vdmVyY29tbWl0IHN5c2N0bC4KLSAqLwot I3VuZGVmIEpFTUFMTE9DX1NZU0NUTF9WTV9PVkVSQ09NTUlUCi0jdW5kZWYgSkVNQUxMT0NfUFJP Q19TWVNfVk1fT1ZFUkNPTU1JVF9NRU1PUlkKLQotLyogRGVmaW5lZCBpZiBtYWR2aXNlKDIpIGlz IGF2YWlsYWJsZS4gKi8KLSN1bmRlZiBKRU1BTExPQ19IQVZFX01BRFZJU0UKLQotLyoKLSAqIERl ZmluZWQgaWYgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhcmUgc3VwcG9ydGVkIHZpYSB0aGUgTUFE Vl9bTk9dSFVHRVBBR0UKLSAqIGFyZ3VtZW50cyB0byBtYWR2aXNlKDIpLgotICovCi0jdW5kZWYg SkVNQUxMT0NfSEFWRV9NQURWSVNFX0hVR0UKLQotLyoKLSAqIE1ldGhvZHMgZm9yIHB1cmdpbmcg dW51c2VkIHBhZ2VzIGRpZmZlciBiZXR3ZWVuIG9wZXJhdGluZyBzeXN0ZW1zLgotICoKLSAqICAg bWFkdmlzZSguLi4sIE1BRFZfRlJFRSkgOiBUaGlzIG1hcmtzIHBhZ2VzIGFzIGJlaW5nIHVudXNl ZCwgc3VjaCB0aGF0IHRoZXkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJl IGRpc2NhcmRlZCByYXRoZXIgdGhhbiBzd2FwcGVkIG91dC4KLSAqICAgbWFkdmlzZSguLi4sIE1B RFZfRE9OVE5FRUQpIDogSWYgSkVNQUxMT0NfUFVSR0VfTUFEVklTRV9ET05UTkVFRF9aRVJPUyBp cwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkLCB0aGlzIGltbWVk aWF0ZWx5IGRpc2NhcmRzIHBhZ2VzLAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdWNoIHRoYXQgbmV3IHBhZ2VzIHdpbGwgYmUgZGVtYW5kLXplcm9lZCBpZgotICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWRkcmVzcyByZWdpb24gaXMgbGF0ZXIgdG91 Y2hlZDsKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoaXMg YmVoYXZlcyBzaW1pbGFybHkgdG8KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TUFEVl9GUkVFLCB0aG91Z2ggdHlwaWNhbGx5IHdpdGggaGlnaGVyCi0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN5c3RlbSBvdmVyaGVhZC4KLSAqLwotI3VuZGVmIEpFTUFMTE9D X1BVUkdFX01BRFZJU0VfRlJFRQotI3VuZGVmIEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9OVE5F RUQKLSN1bmRlZiBKRU1BTExPQ19QVVJHRV9NQURWSVNFX0RPTlRORUVEX1pFUk9TCi0KLS8qIERl ZmluZWQgaWYgbWFkdmlzZSgyKSBpcyBhdmFpbGFibGUgYnV0IE1BRFZfRlJFRSBpcyBub3QgKHg4 NiBMaW51eCBvbmx5KS4gKi8KLSN1bmRlZiBKRU1BTExPQ19ERUZJTkVfTUFEVklTRV9GUkVFCi0K LS8qCi0gKiBEZWZpbmVkIGlmIE1BRFZfRE9bTlRdRFVNUCBpcyBzdXBwb3J0ZWQgYXMgYW4gYXJn dW1lbnQgdG8gbWFkdmlzZS4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX01BRFZJU0VfRE9OVERVTVAK LQotLyoKLSAqIERlZmluZWQgaWYgTUFEVl9bTk9dQ09SRSBpcyBzdXBwb3J0ZWQgYXMgYW4gYXJn dW1lbnQgdG8gbWFkdmlzZS4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX01BRFZJU0VfTk9DT1JFCi0K LS8qIERlZmluZWQgaWYgbXByb3RlY3QoMikgaXMgYXZhaWxhYmxlLiAqLwotI3VuZGVmIEpFTUFM TE9DX0hBVkVfTVBST1RFQ1QKLQotLyoKLSAqIERlZmluZWQgaWYgdHJhbnNwYXJlbnQgaHVnZSBw YWdlcyAoVEhQcykgYXJlIHN1cHBvcnRlZCB2aWEgdGhlCi0gKiBNQURWX1tOT11IVUdFUEFHRSBh cmd1bWVudHMgdG8gbWFkdmlzZSgyKSwgYW5kIFRIUCBzdXBwb3J0IGlzIGVuYWJsZWQuCi0gKi8K LSN1bmRlZiBKRU1BTExPQ19USFAKLQotLyogRGVmaW5lZCBpZiBwb3NpeF9tYWR2aXNlIGlzIGF2 YWlsYWJsZS4gKi8KLSN1bmRlZiBKRU1BTExPQ19IQVZFX1BPU0lYX01BRFZJU0UKLQotLyoKLSAq IE1ldGhvZCBmb3IgcHVyZ2luZyB1bnVzZWQgcGFnZXMgdXNpbmcgcG9zaXhfbWFkdmlzZS4KLSAq Ci0gKiAgIHBvc2l4X21hZHZpc2UoLi4uLCBQT1NJWF9NQURWX0RPTlRORUVEKQotICovCi0jdW5k ZWYgSkVNQUxMT0NfUFVSR0VfUE9TSVhfTUFEVklTRV9ET05UTkVFRAotI3VuZGVmIEpFTUFMTE9D X1BVUkdFX1BPU0lYX01BRFZJU0VfRE9OVE5FRURfWkVST1MKLQotLyoKLSAqIERlZmluZWQgaWYg bWVtY250bCBwYWdlIGFkbWluIGNhbGwgaXMgc3VwcG9ydGVkCi0gKi8KLSN1bmRlZiBKRU1BTExP Q19IQVZFX01FTUNOVEwKLQotLyoKLSAqIERlZmluZWQgaWYgbWFsbG9jX3NpemUgaXMgc3VwcG9y dGVkCi0gKi8KLSN1bmRlZiBKRU1BTExPQ19IQVZFX01BTExPQ19TSVpFCi0KLS8qIERlZmluZSBp ZiBvcGVyYXRpbmcgc3lzdGVtIGhhcyBhbGxvY2EuaCBoZWFkZXIuICovCi0jdW5kZWYgSkVNQUxM T0NfSEFTX0FMTE9DQV9ICi0KLS8qIEM5OSByZXN0cmljdCBrZXl3b3JkIHN1cHBvcnRlZC4gKi8K LSN1bmRlZiBKRU1BTExPQ19IQVNfUkVTVFJJQ1QKLQotLyogRm9yIHVzZSBieSBoYXNoIGNvZGUu ICovCi0jdW5kZWYgSkVNQUxMT0NfQklHX0VORElBTgotCi0vKiBzaXplb2YoaW50KSA9PSAyXkxH X1NJWkVPRl9JTlQuICovCi0jdW5kZWYgTEdfU0laRU9GX0lOVAotCi0vKiBzaXplb2YobG9uZykg PT0gMl5MR19TSVpFT0ZfTE9ORy4gKi8KLSN1bmRlZiBMR19TSVpFT0ZfTE9ORwotCi0vKiBzaXpl b2YobG9uZyBsb25nKSA9PSAyXkxHX1NJWkVPRl9MT05HX0xPTkcuICovCi0jdW5kZWYgTEdfU0la RU9GX0xPTkdfTE9ORwotCi0vKiBzaXplb2YoaW50bWF4X3QpID09IDJeTEdfU0laRU9GX0lOVE1B WF9ULiAqLwotI3VuZGVmIExHX1NJWkVPRl9JTlRNQVhfVAotCi0vKiBnbGliYyBtYWxsb2MgaG9v a3MgKF9fbWFsbG9jX2hvb2ssIF9fcmVhbGxvY19ob29rLCBfX2ZyZWVfaG9vaykuICovCi0jdW5k ZWYgSkVNQUxMT0NfR0xJQkNfTUFMTE9DX0hPT0sKLQotLyogZ2xpYmMgbWVtYWxpZ24gaG9vay4g Ki8KLSN1bmRlZiBKRU1BTExPQ19HTElCQ19NRU1BTElHTl9IT09LCi0KLS8qIHB0aHJlYWQgc3Vw cG9ydCAqLwotI3VuZGVmIEpFTUFMTE9DX0hBVkVfUFRIUkVBRAotCi0vKiBkbHN5bSgpIHN1cHBv cnQgKi8KLSN1bmRlZiBKRU1BTExPQ19IQVZFX0RMU1lNCi0KLS8qIEFkYXB0aXZlIG11dGV4IHN1 cHBvcnQgaW4gcHRocmVhZHMuICovCi0jdW5kZWYgSkVNQUxMT0NfSEFWRV9QVEhSRUFEX01VVEVY X0FEQVBUSVZFX05QCi0KLS8qIEdOVSBzcGVjaWZpYyBzY2hlZF9nZXRjcHUgc3VwcG9ydCAqLwot I3VuZGVmIEpFTUFMTE9DX0hBVkVfU0NIRURfR0VUQ1BVCi0KLS8qIEdOVSBzcGVjaWZpYyBzY2hl ZF9zZXRhZmZpbml0eSBzdXBwb3J0ICovCi0jdW5kZWYgSkVNQUxMT0NfSEFWRV9TQ0hFRF9TRVRB RkZJTklUWQotCi0vKgotICogSWYgZGVmaW5lZCwgYWxsIHRoZSBmZWF0dXJlcyBuZWNlc3Nhcnkg Zm9yIGJhY2tncm91bmQgdGhyZWFkcyBhcmUgcHJlc2VudC4KLSAqLwotI3VuZGVmIEpFTUFMTE9D X0JBQ0tHUk9VTkRfVEhSRUFECi0KLS8qCi0gKiBJZiBkZWZpbmVkLCBqZW1hbGxvYyBzeW1ib2xz IGFyZSBub3QgZXhwb3J0ZWQgKGRvZXNuJ3Qgd29yayB3aGVuCi0gKiBKRU1BTExPQ19QUkVGSVgg aXMgbm90IGRlZmluZWQpLgotICovCi0jdW5kZWYgSkVNQUxMT0NfRVhQT1JUCi0KLS8qIGNvbmZp Zy5tYWxsb2NfY29uZiBvcHRpb25zIHN0cmluZy4gKi8KLSN1bmRlZiBKRU1BTExPQ19DT05GSUdf TUFMTE9DX0NPTkYKLQotLyogSWYgZGVmaW5lZCwgamVtYWxsb2MgdGFrZXMgdGhlIG1hbGxvYy9m cmVlL2V0Yy4gc3ltYm9sIG5hbWVzLiAqLwotI3VuZGVmIEpFTUFMTE9DX0lTX01BTExPQwotCi0v KgotICogRGVmaW5lZCBpZiBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqIGlmIF9HTlVfU09VUkNF IGlzIGRlZmluZWQuCi0gKi8KLSN1bmRlZiBKRU1BTExPQ19TVFJFUlJPUl9SX1JFVFVSTlNfQ0hB Ul9XSVRIX0dOVV9TT1VSQ0UKLQotLyogUGVyZm9ybXMgYWRkaXRpb25hbCBzYWZldHkgY2hlY2tz IHdoZW4gZGVmaW5lZC4gKi8KLSN1bmRlZiBKRU1BTExPQ19PUFRfU0FGRVRZX0NIRUNLUwotCi0v KiBJcyBDKysgc3VwcG9ydCBiZWluZyBidWlsdD8gKi8KLSN1bmRlZiBKRU1BTExPQ19FTkFCTEVf Q1hYCi0KLS8qIFBlcmZvcm1zIGFkZGl0aW9uYWwgc2l6ZSBjaGVja3Mgd2hlbiBkZWZpbmVkLiAq LwotI3VuZGVmIEpFTUFMTE9DX09QVF9TSVpFX0NIRUNLUwotCi0vKiBBbGxvd3Mgc2FtcGxlZCBq dW5rIGFuZCBzdGFzaCBmb3IgY2hlY2tpbmcgdXNlLWFmdGVyLWZyZWUgd2hlbiBkZWZpbmVkLiAq LwotI3VuZGVmIEpFTUFMTE9DX1VBRl9ERVRFQ1RJT04KLQotLyogRGFyd2luIFZNX01BS0VfVEFH IHN1cHBvcnQgKi8KLSN1bmRlZiBKRU1BTExPQ19IQVZFX1ZNX01BS0VfVEFHCi0KLS8qIElmIGRl ZmluZWQsIHJlYWxsb2MocHRyLCAwKSBkZWZhdWx0cyB0byAiZnJlZSIgaW5zdGVhZCBvZiAiYWxs b2MiLiAqLwotI3VuZGVmIEpFTUFMTE9DX1pFUk9fUkVBTExPQ19ERUZBVUxUX0ZSRUUKLQotI2Vu ZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0RFRlNfSF8gKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L2plbWFsbG9jX2ludGVybmFsX2V4dGVybnMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxf ZXh0ZXJucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzgzNGM2Li4wMDAwMDAw Ci0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfZXh0ZXJucy5oCisrKyAvZGV2L251bGwK QEAgLTEsNzUgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9FWFRFUk5TX0gKLSNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfRVhURVJOU19ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9hdG9taWMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ocGFfb3B0cy5o IgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NlY19vcHRzLmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvdHNkX3R5cGVzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv bnN0aW1lLmgiCi0KLS8qIFRTRCBjaGVja3MgdGhpcyB0byBzZXQgdGhyZWFkIGxvY2FsIHNsb3cg c3RhdGUgYWNjb3JkaW5nbHkuICovCi1leHRlcm4gYm9vbCBtYWxsb2Nfc2xvdzsKLQotLyogUnVu LXRpbWUgb3B0aW9ucy4gKi8KLWV4dGVybiBib29sIG9wdF9hYm9ydDsKLWV4dGVybiBib29sIG9w dF9hYm9ydF9jb25mOwotZXh0ZXJuIGJvb2wgb3B0X3RydXN0X21hZHZpc2U7Ci1leHRlcm4gYm9v bCBvcHRfY29uZmlybV9jb25mOwotZXh0ZXJuIGJvb2wgb3B0X2hwYTsKLWV4dGVybiBocGFfc2hh cmRfb3B0c190IG9wdF9ocGFfb3B0czsKLWV4dGVybiBzZWNfb3B0c190IG9wdF9ocGFfc2VjX29w dHM7Ci0KLWV4dGVybiBjb25zdCBjaGFyICpvcHRfanVuazsKLWV4dGVybiBib29sIG9wdF9qdW5r X2FsbG9jOwotZXh0ZXJuIGJvb2wgb3B0X2p1bmtfZnJlZTsKLWV4dGVybiB2b2lkICgqanVua19m cmVlX2NhbGxiYWNrKSh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKLWV4dGVybiB2b2lkICgqanVu a19hbGxvY19jYWxsYmFjaykodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gYm9vbCBv cHRfdXRyYWNlOwotZXh0ZXJuIGJvb2wgb3B0X3htYWxsb2M7Ci1leHRlcm4gYm9vbCBvcHRfZXhw ZXJpbWVudGFsX2luZmFsbGlibGVfbmV3OwotZXh0ZXJuIGJvb2wgb3B0X3plcm87Ci1leHRlcm4g dW5zaWduZWQgb3B0X25hcmVuYXM7Ci1leHRlcm4gemVyb19yZWFsbG9jX2FjdGlvbl90IG9wdF96 ZXJvX3JlYWxsb2NfYWN0aW9uOwotZXh0ZXJuIG1hbGxvY19pbml0X3QgbWFsbG9jX2luaXRfc3Rh dGU7Ci1leHRlcm4gY29uc3QgY2hhciAqemVyb19yZWFsbG9jX21vZGVfbmFtZXNbXTsKLWV4dGVy biBhdG9taWNfenVfdCB6ZXJvX3JlYWxsb2NfY291bnQ7Ci1leHRlcm4gYm9vbCBvcHRfY2FjaGVf b2JsaXZpb3VzOwotCi0vKiBFc2NhcGUgZnJlZS1mYXN0cGF0aCB3aGVuIHB0ciAmIG1hc2sgPT0g MCAoZm9yIHNhbml0aXphdGlvbiBwdXJwb3NlKS4gKi8KLWV4dGVybiB1aW50cHRyX3Qgc2FuX2Nh Y2hlX2Jpbl9ub25mYXN0X21hc2s7Ci0KLS8qIE51bWJlciBvZiBDUFVzLiAqLwotZXh0ZXJuIHVu c2lnbmVkIG5jcHVzOwotCi0vKiBOdW1iZXIgb2YgYXJlbmFzIHVzZWQgZm9yIGF1dG9tYXRpYyBt dWx0aXBsZXhpbmcgb2YgdGhyZWFkcyBhbmQgYXJlbmFzLiAqLwotZXh0ZXJuIHVuc2lnbmVkIG5h cmVuYXNfYXV0bzsKLQotLyogQmFzZSBpbmRleCBmb3IgbWFudWFsIGFyZW5hcy4gKi8KLWV4dGVy biB1bnNpZ25lZCBtYW51YWxfYXJlbmFfYmFzZTsKLQotLyoKLSAqIEFyZW5hcyB0aGF0IGFyZSB1 c2VkIHRvIHNlcnZpY2UgZXh0ZXJuYWwgcmVxdWVzdHMuICBOb3QgYWxsIGVsZW1lbnRzIG9mIHRo ZQotICogYXJlbmFzIGFycmF5IGFyZSBuZWNlc3NhcmlseSB1c2VkOyBhcmVuYXMgYXJlIGNyZWF0 ZWQgbGF6aWx5IGFzIG5lZWRlZC4KLSAqLwotZXh0ZXJuIGF0b21pY19wX3QgYXJlbmFzW107Ci0K LXZvaWQgKmEwbWFsbG9jKHNpemVfdCBzaXplKTsKLXZvaWQgYTBkYWxsb2Modm9pZCAqcHRyKTsK LXZvaWQgKmJvb3RzdHJhcF9tYWxsb2Moc2l6ZV90IHNpemUpOwotdm9pZCAqYm9vdHN0cmFwX2Nh bGxvYyhzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSk7Ci12b2lkIGJvb3RzdHJhcF9mcmVlKHZvaWQg KnB0cik7Ci12b2lkIGFyZW5hX3NldCh1bnNpZ25lZCBpbmQsIGFyZW5hX3QgKmFyZW5hKTsKLXVu c2lnbmVkIG5hcmVuYXNfdG90YWxfZ2V0KHZvaWQpOwotYXJlbmFfdCAqYXJlbmFfaW5pdCh0c2Ru X3QgKnRzZG4sIHVuc2lnbmVkIGluZCwgY29uc3QgYXJlbmFfY29uZmlnX3QgKmNvbmZpZyk7Ci1h cmVuYV90ICphcmVuYV9jaG9vc2VfaGFyZCh0c2RfdCAqdHNkLCBib29sIGludGVybmFsKTsKLXZv aWQgYXJlbmFfbWlncmF0ZSh0c2RfdCAqdHNkLCBhcmVuYV90ICpvbGRhcmVuYSwgYXJlbmFfdCAq bmV3YXJlbmEpOwotdm9pZCBpYXJlbmFfY2xlYW51cCh0c2RfdCAqdHNkKTsKLXZvaWQgYXJlbmFf Y2xlYW51cCh0c2RfdCAqdHNkKTsKLXNpemVfdCBiYXRjaF9hbGxvYyh2b2lkICoqcHRycywgc2l6 ZV90IG51bSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Ci12b2lkIGplbWFsbG9jX3ByZWZvcmso dm9pZCk7Ci12b2lkIGplbWFsbG9jX3Bvc3Rmb3JrX3BhcmVudCh2b2lkKTsKLXZvaWQgamVtYWxs b2NfcG9zdGZvcmtfY2hpbGQodm9pZCk7Ci12b2lkIGplX3NkYWxsb2N4X25vZmxhZ3Modm9pZCAq cHRyLCBzaXplX3Qgc2l6ZSk7Ci12b2lkICptYWxsb2NfZGVmYXVsdChzaXplX3Qgc2l6ZSk7Ci0K LSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9FWFRFUk5TX0ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2lu dGVybmFsX2luY2x1ZGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWMxMTIu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oCisrKyAv ZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9JTkNM VURFU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0lOQ0xVREVTX0gKLQotLyoKLSAqIGpl bWFsbG9jIGNhbiBjb25jZXB0dWFsbHkgYmUgYnJva2VuIGludG8gY29tcG9uZW50cyAoYXJlbmEs IHRjYWNoZSwgZXRjLiksCi0gKiBidXQgdGhlcmUgYXJlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyB0 aGF0IGNhbm5vdCBiZSBicm9rZW4gd2l0aG91dAotICogc3Vic3RhbnRpYWwgcGVyZm9ybWFuY2Ug ZGVncmFkYXRpb24uCi0gKgotICogSGlzdG9yaWNhbGx5LCB3ZSBkZWFsdCB3aXRoIHRoaXMgYnkg ZWFjaCBoZWFkZXIgaW50byBmb3VyIHNlY3Rpb25zICh0eXBlcywKLSAqIHN0cnVjdHMsIGV4dGVy bnMsIGFuZCBpbmxpbmVzKSwgYW5kIGluY2x1ZGVkIGVhY2ggaGVhZGVyIGZpbGUgbXVsdGlwbGUg dGltZXMKLSAqIGluIHRoaXMgZmlsZSwgcGlja2luZyBvdXQgdGhlIHBvcnRpb24gd2Ugd2FudCBv biBlYWNoIHBhc3MgdXNpbmcgdGhlCi0gKiBmb2xsb3dpbmcgI2RlZmluZXM6Ci0gKiAgIEpFTUFM TE9DX0hfVFlQRVMgICA6IFByZXByb2Nlc3Nvci1kZWZpbmVkIGNvbnN0YW50cyBhbmQgcHNldWRv LW9wYXF1ZSBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLgotICogICBKRU1B TExPQ19IX1NUUlVDVFMgOiBEYXRhIHN0cnVjdHVyZXMuCi0gKiAgIEpFTUFMTE9DX0hfRVhURVJO UyA6IEV4dGVybiBkYXRhIGRlY2xhcmF0aW9ucyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcy4KLSAq ICAgSkVNQUxMT0NfSF9JTkxJTkVTIDogSW5saW5lIGZ1bmN0aW9ucy4KLSAqCi0gKiBXZSdyZSBt b3ZpbmcgdG93YXJkIGEgd29ybGQgaW4gd2hpY2ggdGhlIGRlcGVuZGVuY2llcyBhcmUgZXhwbGlj aXQ7IGVhY2ggZmlsZQotICogd2lsbCAjaW5jbHVkZSB0aGUgaGVhZGVycyBpdCBkZXBlbmRzIG9u IChyYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZW0gYmVpbmcKLSAqIGltcGxpY2l0bHkgYXZhaWxh YmxlIHZpYSB0aGlzIGZpbGUgaW5jbHVkaW5nIGV2ZXJ5IGhlYWRlciBmaWxlIGluIHRoZQotICog cHJvamVjdCkuCi0gKgotICogV2UncmUgbm93IGluIGFuIGludGVybWVkaWF0ZSBzdGF0ZTogd2Un dmUgYnJva2VuIHVwIHRoZSBoZWFkZXIgZmlsZXMgdG8gYXZvaWQKLSAqIGhhdmluZyB0byBpbmNs dWRlIGVhY2ggb25lIG11bHRpcGxlIHRpbWVzLCBidXQgaGF2ZSBub3QgeWV0IG1vdmVkIHRoZQot ICogZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgKGkuZS4gd2Ug c3RpbGwgcmVseSBvbiB0aGUKLSAqIG9yZGVyaW5nIGluIHRoaXMgZmlsZSB0byBlbnN1cmUgYWxs IGEgaGVhZGVyJ3MgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUgaW4KLSAqIGl0cyB0cmFuc2xh dGlvbiB1bml0KS4gIEVhY2ggY29tcG9uZW50IGlzIG5vdyBicm9rZW4gdXAgaW50byBtdWx0aXBs ZSBoZWFkZXIKLSAqIGZpbGVzLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWN0aW9ucyBhYm92ZSAo ZS5nLiBpbnN0ZWFkIG9mICJmb28uaCIsIHdlIG5vdwotICogaGF2ZSAiZm9vX3R5cGVzLmgiLCAi Zm9vX3N0cnVjdHMuaCIsICJmb29fZXh0ZXJucy5oIiwgImZvb19pbmxpbmVzLmgiKS4KLSAqCi0g KiBUaG9zZSBmaWxlcyB3aGljaCBoYXZlIGJlZW4gY29udmVydGVkIHRvIGV4cGxpY2l0bHkgaW5j bHVkZSB0aGVpcgotICogaW50ZXItY29tcG9uZW50IGRlcGVuZGVuY2llcyBhcmUgbm93IGluIHRo ZSBpbml0aWFsIEhFUk1FVElDIEhFQURFUlMKLSAqIHNlY3Rpb24uICBBbGwgaGVhZGVycyBtYXkg c3RpbGwgcmVseSBvbiBqZW1hbGxvY19wcmVhbWJsZS5oICh3aGljaCwgYnkgZmlhdCwKLSAqIG11 c3QgYmUgaW5jbHVkZWQgZmlyc3QgaW4gZXZlcnkgdHJhbnNsYXRpb24gdW5pdCkgZm9yIHN5c3Rl bSBoZWFkZXJzIGFuZAotICogZ2xvYmFsIGplbWFsbG9jIGRlZmluaXRpb25zLCBob3dldmVyLgot ICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUWVBFUyAqLwotLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2FyZW5hX3R5cGVzLmgi Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX3R5cGVzLmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvcHJvZl90eXBlcy5oIgotCi0vKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotLyogU1RSVUNUUyAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3Byb2Zfc3RydWN0cy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2FyZW5hX3N0cnVjdHMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVf c3RydWN0cy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2JhY2tncm91bmRfdGhyZWFk X3N0cnVjdHMuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEVYVEVSTlMgKi8KLS8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9leHRlcm5zLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXJl bmFfZXh0ZXJucy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2xhcmdlX2V4dGVybnMu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfZXh0ZXJucy5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfZXh0ZXJucy5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2JhY2tncm91bmRfdGhyZWFkX2V4dGVybnMuaCIKLQotLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLS8qIElOTElORVMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmxpbmVzX2EuaCIKLS8q Ci0gKiBJbmNsdWRlIHBvcnRpb25zIG9mIGFyZW5hIGNvZGUgaW50ZXJsZWF2ZWQgd2l0aCB0Y2Fj aGUgY29kZSBpbiBvcmRlciB0bwotICogcmVzb2x2ZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCi0g Ki8KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hcmVuYV9pbmxpbmVzX2EuaCIKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmxpbmVzX2IuaCIKLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfaW5saW5lcy5oIgotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2FyZW5hX2lubGluZXNfYi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lubGluZXNfYy5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3Byb2ZfaW5saW5lcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Jh Y2tncm91bmRfdGhyZWFkX2lubGluZXMuaCIKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X0lOQ0xVREVTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lu bGluZXNfYS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmxpbmVzX2EuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUyN2NjMy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2pl bWFsbG9jX2ludGVybmFsX2lubGluZXNfYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAg QEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfSU5MSU5FU19BX0gKLSNkZWZpbmUgSkVNQUxM T0NfSU5URVJOQUxfSU5MSU5FU19BX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0 b21pYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2JpdF91dGlsLmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfdHlwZXMuaCIKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9zYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Rp Y2tlci5oIgotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIG1hbGxvY19jcHVpZF90Ci1tYWxsb2Nf Z2V0Y3B1KHZvaWQpIHsKLQlhc3NlcnQoaGF2ZV9wZXJjcHVfYXJlbmEpOwotI2lmIGRlZmluZWQo X1dJTjMyKQotCXJldHVybiBHZXRDdXJyZW50UHJvY2Vzc29yTnVtYmVyKCk7Ci0jZWxpZiBkZWZp bmVkKEpFTUFMTE9DX0hBVkVfU0NIRURfR0VUQ1BVKQotCXJldHVybiAobWFsbG9jX2NwdWlkX3Qp c2NoZWRfZ2V0Y3B1KCk7Ci0jZWxzZQotCW5vdF9yZWFjaGVkKCk7Ci0JcmV0dXJuIC0xOwotI2Vu ZGlmCi19Ci0KLS8qIFJldHVybiB0aGUgY2hvc2VuIGFyZW5hIGluZGV4IGJhc2VkIG9uIGN1cnJl bnQgY3B1LiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1bnNpZ25lZAotcGVyY3B1X2FyZW5h X2Nob29zZSh2b2lkKSB7Ci0JYXNzZXJ0KGhhdmVfcGVyY3B1X2FyZW5hICYmIFBFUkNQVV9BUkVO QV9FTkFCTEVEKG9wdF9wZXJjcHVfYXJlbmEpKTsKLQotCW1hbGxvY19jcHVpZF90IGNwdWlkID0g bWFsbG9jX2dldGNwdSgpOwotCWFzc2VydChjcHVpZCA+PSAwKTsKLQotCXVuc2lnbmVkIGFyZW5h X2luZDsKLQlpZiAoKG9wdF9wZXJjcHVfYXJlbmEgPT0gcGVyY3B1X2FyZW5hKSB8fCAoKHVuc2ln bmVkKWNwdWlkIDwgbmNwdXMgLwotCSAgICAyKSkgewotCQlhcmVuYV9pbmQgPSBjcHVpZDsKLQl9 IGVsc2UgewotCQlhc3NlcnQob3B0X3BlcmNwdV9hcmVuYSA9PSBwZXJfcGh5Y3B1X2FyZW5hKTsK LQkJLyogSHlwZXIgdGhyZWFkcyBvbiB0aGUgc2FtZSBwaHlzaWNhbCBDUFUgc2hhcmUgYXJlbmEu ICovCi0JCWFyZW5hX2luZCA9IGNwdWlkIC0gbmNwdXMgLyAyOwotCX0KLQotCXJldHVybiBhcmVu YV9pbmQ7Ci19Ci0KLS8qIFJldHVybiB0aGUgbGltaXQgb2YgcGVyY3B1IGF1dG8gYXJlbmEgcmFu Z2UsIGkuZS4gYXJlbmFzWzAuLi5pbmRfbGltaXQpLiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSB1bnNpZ25lZAotcGVyY3B1X2FyZW5hX2luZF9saW1pdChwZXJjcHVfYXJlbmFfbW9kZV90IG1v ZGUpIHsKLQlhc3NlcnQoaGF2ZV9wZXJjcHVfYXJlbmEgJiYgUEVSQ1BVX0FSRU5BX0VOQUJMRUQo bW9kZSkpOwotCWlmIChtb2RlID09IHBlcl9waHljcHVfYXJlbmEgJiYgbmNwdXMgPiAxKSB7Ci0J CWlmIChuY3B1cyAlIDIpIHsKLQkJCS8qIFRoaXMgbGlrZWx5IG1lYW5zIGEgbWlzY29uZmlnLiAq LwotCQkJcmV0dXJuIG5jcHVzIC8gMiArIDE7Ci0JCX0KLQkJcmV0dXJuIG5jcHVzIC8gMjsKLQl9 IGVsc2UgewotCQlyZXR1cm4gbmNwdXM7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGFyZW5hX3Qg KgotYXJlbmFfZ2V0KHRzZG5fdCAqdHNkbiwgdW5zaWduZWQgaW5kLCBib29sIGluaXRfaWZfbWlz c2luZykgewotCWFyZW5hX3QgKnJldDsKLQotCWFzc2VydChpbmQgPCBNQUxMT0NYX0FSRU5BX0xJ TUlUKTsKLQotCXJldCA9IChhcmVuYV90ICopYXRvbWljX2xvYWRfcCgmYXJlbmFzW2luZF0sIEFU T01JQ19BQ1FVSVJFKTsKLQlpZiAodW5saWtlbHkocmV0ID09IE5VTEwpKSB7Ci0JCWlmIChpbml0 X2lmX21pc3NpbmcpIHsKLQkJCXJldCA9IGFyZW5hX2luaXQodHNkbiwgaW5kLCAmYXJlbmFfY29u ZmlnX2RlZmF1bHQpOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgYm9vbAotdGNhY2hlX2F2YWlsYWJsZSh0c2RfdCAqdHNkKSB7Ci0JLyoKLQkgKiBU aHJlYWQgc3BlY2lmaWMgYXV0byB0Y2FjaGUgbWlnaHQgYmUgdW5hdmFpbGFibGUgaWY6IDEpIGR1 cmluZyB0Y2FjaGUKLQkgKiBpbml0aWFsaXphdGlvbiwgb3IgMikgZGlzYWJsZWQgdGhyb3VnaCB0 aHJlYWQudGNhY2hlLmVuYWJsZWQgbWFsbGN0bAotCSAqIG9yIGNvbmZpZyBvcHRpb25zLiAgVGhp cyBjaGVjayBjb3ZlcnMgYWxsIGNhc2VzLgotCSAqLwotCWlmIChsaWtlbHkodHNkX3RjYWNoZV9l bmFibGVkX2dldCh0c2QpKSkgewotCQkvKiBBc3NvY2lhdGVkIGFyZW5hID09IE5VTEwgaW1wbGll cyB0Y2FjaGUgaW5pdCBpbiBwcm9ncmVzcy4gKi8KLQkJaWYgKGNvbmZpZ19kZWJ1ZyAmJiB0c2Rf dGNhY2hlX3Nsb3dwX2dldCh0c2QpLT5hcmVuYSAhPSBOVUxMKSB7Ci0JCQl0Y2FjaGVfYXNzZXJ0 X2luaXRpYWxpemVkKHRzZF90Y2FjaGVwX2dldCh0c2QpKTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsK LQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdGNhY2hl X3QgKgotdGNhY2hlX2dldCh0c2RfdCAqdHNkKSB7Ci0JaWYgKCF0Y2FjaGVfYXZhaWxhYmxlKHRz ZCkpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIHRzZF90Y2FjaGVwX2dldCh0c2Qp OwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRjYWNoZV9zbG93X3QgKgotdGNhY2hlX3Ns b3dfZ2V0KHRzZF90ICp0c2QpIHsKLQlpZiAoIXRjYWNoZV9hdmFpbGFibGUodHNkKSkgewotCQly ZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gdHNkX3RjYWNoZV9zbG93cF9nZXQodHNkKTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkCi1wcmVfcmVlbnRyYW5jeSh0c2RfdCAqdHNkLCBhcmVuYV90 ICphcmVuYSkgewotCS8qIGFyZW5hIGlzIHRoZSBjdXJyZW50IGNvbnRleHQuICBSZWVudHJ5IGZy b20gYTAgaXMgbm90IGFsbG93ZWQuICovCi0JYXNzZXJ0KGFyZW5hICE9IGFyZW5hX2dldCh0c2Rf dHNkbih0c2QpLCAwLCBmYWxzZSkpOwotCXRzZF9wcmVfcmVlbnRyYW5jeV9yYXcodHNkKTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkCi1wb3N0X3JlZW50cmFuY3kodHNkX3QgKnRzZCkgewotCXRz ZF9wb3N0X3JlZW50cmFuY3lfcmF3KHRzZCk7Ci19Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRF Uk5BTF9JTkxJTkVTX0FfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfaW5saW5lc19iLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2lubGluZXNfYi5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTJmOGEwLi4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfaW50ZXJuYWxfaW5saW5lc19iLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMg KzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9JTkxJTkVTX0JfSAotI2RlZmluZSBK RU1BTExPQ19JTlRFUk5BTF9JTkxJTkVTX0JfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvZXh0ZW50LmgiCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGVyY3B1X2FyZW5hX3VwZGF0ZSh0 c2RfdCAqdHNkLCB1bnNpZ25lZCBjcHUpIHsKLQlhc3NlcnQoaGF2ZV9wZXJjcHVfYXJlbmEpOwot CWFyZW5hX3QgKm9sZGFyZW5hID0gdHNkX2FyZW5hX2dldCh0c2QpOwotCWFzc2VydChvbGRhcmVu YSAhPSBOVUxMKTsKLQl1bnNpZ25lZCBvbGRpbmQgPSBhcmVuYV9pbmRfZ2V0KG9sZGFyZW5hKTsK LQotCWlmIChvbGRpbmQgIT0gY3B1KSB7Ci0JCXVuc2lnbmVkIG5ld2luZCA9IGNwdTsKLQkJYXJl bmFfdCAqbmV3YXJlbmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgbmV3aW5kLCB0cnVlKTsK LQkJYXNzZXJ0KG5ld2FyZW5hICE9IE5VTEwpOwotCi0JCS8qIFNldCBuZXcgYXJlbmEvdGNhY2hl IGFzc29jaWF0aW9ucy4gKi8KLQkJYXJlbmFfbWlncmF0ZSh0c2QsIG9sZGFyZW5hLCBuZXdhcmVu YSk7Ci0JCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0KHRzZCk7Ci0JCWlmICh0Y2FjaGUg IT0gTlVMTCkgewotCQkJdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Nsb3cgPSB0c2RfdGNhY2hlX3Ns b3dwX2dldCh0c2QpOwotCQkJdGNhY2hlX2FyZW5hX3JlYXNzb2NpYXRlKHRzZF90c2RuKHRzZCks IHRjYWNoZV9zbG93LAotCQkJICAgIHRjYWNoZSwgbmV3YXJlbmEpOwotCQl9Ci0JfQotfQotCi0K LS8qIENob29zZSBhbiBhcmVuYSBiYXNlZCBvbiBhIHBlci10aHJlYWQgdmFsdWUuICovCi1zdGF0 aWMgaW5saW5lIGFyZW5hX3QgKgotYXJlbmFfY2hvb3NlX2ltcGwodHNkX3QgKnRzZCwgYXJlbmFf dCAqYXJlbmEsIGJvb2wgaW50ZXJuYWwpIHsKLQlhcmVuYV90ICpyZXQ7Ci0KLQlpZiAoYXJlbmEg IT0gTlVMTCkgewotCQlyZXR1cm4gYXJlbmE7Ci0JfQotCi0JLyogRHVyaW5nIHJlZW50cmFuY3ks IGFyZW5hIDAgaXMgdGhlIHNhZmVzdCBiZXQuICovCi0JaWYgKHVubGlrZWx5KHRzZF9yZWVudHJh bmN5X2xldmVsX2dldCh0c2QpID4gMCkpIHsKLQkJcmV0dXJuIGFyZW5hX2dldCh0c2RfdHNkbih0 c2QpLCAwLCB0cnVlKTsKLQl9Ci0KLQlyZXQgPSBpbnRlcm5hbCA/IHRzZF9pYXJlbmFfZ2V0KHRz ZCkgOiB0c2RfYXJlbmFfZ2V0KHRzZCk7Ci0JaWYgKHVubGlrZWx5KHJldCA9PSBOVUxMKSkgewot CQlyZXQgPSBhcmVuYV9jaG9vc2VfaGFyZCh0c2QsIGludGVybmFsKTsKLQkJYXNzZXJ0KHJldCk7 Ci0JCWlmICh0Y2FjaGVfYXZhaWxhYmxlKHRzZCkpIHsKLQkJCXRjYWNoZV9zbG93X3QgKnRjYWNo ZV9zbG93ID0gdHNkX3RjYWNoZV9zbG93cF9nZXQodHNkKTsKLQkJCXRjYWNoZV90ICp0Y2FjaGUg PSB0c2RfdGNhY2hlcF9nZXQodHNkKTsKLQkJCWlmICh0Y2FjaGVfc2xvdy0+YXJlbmEgIT0gTlVM TCkgewotCQkJCS8qIFNlZSBjb21tZW50cyBpbiB0c2RfdGNhY2hlX2RhdGFfaW5pdCgpLiovCi0J CQkJYXNzZXJ0KHRjYWNoZV9zbG93LT5hcmVuYSA9PQotCQkJCSAgICBhcmVuYV9nZXQodHNkX3Rz ZG4odHNkKSwgMCwgZmFsc2UpKTsKLQkJCQlpZiAodGNhY2hlX3Nsb3ctPmFyZW5hICE9IHJldCkg ewotCQkJCQl0Y2FjaGVfYXJlbmFfcmVhc3NvY2lhdGUodHNkX3RzZG4odHNkKSwKLQkJCQkJICAg IHRjYWNoZV9zbG93LCB0Y2FjaGUsIHJldCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl0Y2Fj aGVfYXJlbmFfYXNzb2NpYXRlKHRzZF90c2RuKHRzZCksCi0JCQkJICAgIHRjYWNoZV9zbG93LCB0 Y2FjaGUsIHJldCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCBmb3IgcGVy Y3B1IGFyZW5hLCBpZiB0aGUgY3VycmVudCBhcmVuYSBpcyBvdXRzaWRlIG9mIHRoZQotCSAqIGF1 dG8gcGVyY3B1IGFyZW5hIHJhbmdlLCAoaS5lLiB0aHJlYWQgaXMgYXNzaWduZWQgdG8gYSBtYW51 YWxseQotCSAqIG1hbmFnZWQgYXJlbmEpLCB0aGVuIHBlcmNwdSBhcmVuYSBpcyBza2lwcGVkLgot CSAqLwotCWlmIChoYXZlX3BlcmNwdV9hcmVuYSAmJiBQRVJDUFVfQVJFTkFfRU5BQkxFRChvcHRf cGVyY3B1X2FyZW5hKSAmJgotCSAgICAhaW50ZXJuYWwgJiYgKGFyZW5hX2luZF9nZXQocmV0KSA8 Ci0JICAgIHBlcmNwdV9hcmVuYV9pbmRfbGltaXQob3B0X3BlcmNwdV9hcmVuYSkpICYmIChyZXQt Pmxhc3RfdGhkICE9Ci0JICAgIHRzZF90c2RuKHRzZCkpKSB7Ci0JCXVuc2lnbmVkIGluZCA9IHBl cmNwdV9hcmVuYV9jaG9vc2UoKTsKLQkJaWYgKGFyZW5hX2luZF9nZXQocmV0KSAhPSBpbmQpIHsK LQkJCXBlcmNwdV9hcmVuYV91cGRhdGUodHNkLCBpbmQpOwotCQkJcmV0ID0gdHNkX2FyZW5hX2dl dCh0c2QpOwotCQl9Ci0JCXJldC0+bGFzdF90aGQgPSB0c2RfdHNkbih0c2QpOwotCX0KLQotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYXJlbmFfdCAqCi1hcmVuYV9jaG9vc2UodHNk X3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEpIHsKLQlyZXR1cm4gYXJlbmFfY2hvb3NlX2ltcGwodHNk LCBhcmVuYSwgZmFsc2UpOwotfQotCi1zdGF0aWMgaW5saW5lIGFyZW5hX3QgKgotYXJlbmFfaWNo b29zZSh0c2RfdCAqdHNkLCBhcmVuYV90ICphcmVuYSkgewotCXJldHVybiBhcmVuYV9jaG9vc2Vf aW1wbCh0c2QsIGFyZW5hLCB0cnVlKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1hcmVuYV9p c19hdXRvKGFyZW5hX3QgKmFyZW5hKSB7Ci0JYXNzZXJ0KG5hcmVuYXNfYXV0byA+IDApOwotCi0J cmV0dXJuIChhcmVuYV9pbmRfZ2V0KGFyZW5hKSA8IG1hbnVhbF9hcmVuYV9iYXNlKTsKLX0KLQot I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0lOTElORVNfQl9IICovCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmxpbmVzX2MuaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2Nf aW50ZXJuYWxfaW5saW5lc19jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwODY4 YjcuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmxpbmVzX2MuaAor KysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFM X0lOTElORVNfQ19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX0lOTElORVNfQ19ICi0KLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ob29rLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfdHlwZXMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9sb2cuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL3RocmVhZF9ldmVudC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3dpdG5lc3MuaCIKLQotLyoKLSAqIFRyYW5zbGF0aW5nIHRoZSBuYW1lcyBvZiB0aGUg J2knIGZ1bmN0aW9uczoKLSAqICAgQWJicmV2aWF0aW9ucyB1c2VkIGluIHRoZSBmaXJzdCBwYXJ0 IG9mIHRoZSBmdW5jdGlvbiBuYW1lIChiZWZvcmUKLSAqICAgYWxsb2MvZGFsbG9jKSBkZXNjcmli ZSB3aGF0IHRoYXQgZnVuY3Rpb24gYWNjb21wbGlzaGVzOgotICogICAgIGE6IGFyZW5hIChxdWVy eSkKLSAqICAgICBzOiBzaXplIChxdWVyeSwgb3Igc2l6ZWQgZGVhbGxvY2F0aW9uKQotICogICAg IGU6IGV4dGVudCAocXVlcnkpCi0gKiAgICAgcDogYWxpZ25lZCAoYWxsb2NhdGVzKQotICogICAg IHZzOiBzaXplIChxdWVyeSwgd2l0aG91dCBrbm93aW5nIHRoYXQgdGhlIHBvaW50ZXIgaXMgaW50 byB0aGUgaGVhcCkKLSAqICAgICByOiByYWxsb2N4IGltcGxlbWVudGF0aW9uCi0gKiAgICAgeDog eGFsbG9jeCBpbXBsZW1lbnRhdGlvbgotICogICBBYmJyZXZpYXRpb25zIHVzZWQgaW4gdGhlIHNl Y29uZCBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBuYW1lIChhZnRlcgotICogICBhbGxvYy9kYWxsb2Mp IGRlc2NyaWJlIHRoZSBhcmd1bWVudHMgaXQgdGFrZXMKLSAqICAgICB6OiB3aGV0aGVyIHRvIHJl dHVybiB6ZXJvZWQgbWVtb3J5Ci0gKiAgICAgdDogYWNjZXB0cyBhIHRjYWNoZV90ICogcGFyYW1l dGVyCi0gKiAgICAgbTogYWNjZXB0cyBhbiBhcmVuYV90ICogcGFyYW1ldGVyCi0gKi8KLQotSkVN QUxMT0NfQUxXQVlTX0lOTElORSBhcmVuYV90ICoKLWlhYWxsb2ModHNkbl90ICp0c2RuLCBjb25z dCB2b2lkICpwdHIpIHsKLQlhc3NlcnQocHRyICE9IE5VTEwpOwotCi0JcmV0dXJuIGFyZW5hX2Fh bGxvYyh0c2RuLCBwdHIpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAotaXNh bGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0cikgewotCWFzc2VydChwdHIgIT0gTlVM TCk7Ci0KLQlyZXR1cm4gYXJlbmFfc2FsbG9jKHRzZG4sIHB0cik7Ci19Ci0KLUpFTUFMTE9DX0FM V0FZU19JTkxJTkUgdm9pZCAqCi1pYWxsb2N6dG0odHNkbl90ICp0c2RuLCBzaXplX3Qgc2l6ZSwg c3ppbmRfdCBpbmQsIGJvb2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSwKLSAgICBib29sIGlzX2lu dGVybmFsLCBhcmVuYV90ICphcmVuYSwgYm9vbCBzbG93X3BhdGgpIHsKLQl2b2lkICpyZXQ7Ci0K LQlhc3NlcnQoIWlzX2ludGVybmFsIHx8IHRjYWNoZSA9PSBOVUxMKTsKLQlhc3NlcnQoIWlzX2lu dGVybmFsIHx8IGFyZW5hID09IE5VTEwgfHwgYXJlbmFfaXNfYXV0byhhcmVuYSkpOwotCWlmICgh dHNkbl9udWxsKHRzZG4pICYmIHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2RuX3RzZCh0c2Ru KSkgPT0gMCkgewotCQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190 c2RwX2dldCh0c2RuKSwKLQkJICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQl9Ci0KLQlyZXQg PSBhcmVuYV9tYWxsb2ModHNkbiwgYXJlbmEsIHNpemUsIGluZCwgemVybywgdGNhY2hlLCBzbG93 X3BhdGgpOwotCWlmIChjb25maWdfc3RhdHMgJiYgaXNfaW50ZXJuYWwgJiYgbGlrZWx5KHJldCAh PSBOVUxMKSkgewotCQlhcmVuYV9pbnRlcm5hbF9hZGQoaWFhbGxvYyh0c2RuLCByZXQpLCBpc2Fs bG9jKHRzZG4sIHJldCkpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHZvaWQgKgotaWFsbG9jKHRzZF90ICp0c2QsIHNpemVfdCBzaXplLCBzemluZF90IGlu ZCwgYm9vbCB6ZXJvLCBib29sIHNsb3dfcGF0aCkgewotCXJldHVybiBpYWxsb2N6dG0odHNkX3Rz ZG4odHNkKSwgc2l6ZSwgaW5kLCB6ZXJvLCB0Y2FjaGVfZ2V0KHRzZCksIGZhbHNlLAotCSAgICBO VUxMLCBzbG93X3BhdGgpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQgKgotaXBh bGxvY3p0bSh0c2RuX3QgKnRzZG4sIHNpemVfdCB1c2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9v bCB6ZXJvLAotICAgIHRjYWNoZV90ICp0Y2FjaGUsIGJvb2wgaXNfaW50ZXJuYWwsIGFyZW5hX3Qg KmFyZW5hKSB7Ci0Jdm9pZCAqcmV0OwotCi0JYXNzZXJ0KHVzaXplICE9IDApOwotCWFzc2VydCh1 c2l6ZSA9PSBzel9zYTJ1KHVzaXplLCBhbGlnbm1lbnQpKTsKLQlhc3NlcnQoIWlzX2ludGVybmFs IHx8IHRjYWNoZSA9PSBOVUxMKTsKLQlhc3NlcnQoIWlzX2ludGVybmFsIHx8IGFyZW5hID09IE5V TEwgfHwgYXJlbmFfaXNfYXV0byhhcmVuYSkpOwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3Jh bmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRORVNTX1JBTktfQ09SRSwg MCk7Ci0KLQlyZXQgPSBhcmVuYV9wYWxsb2ModHNkbiwgYXJlbmEsIHVzaXplLCBhbGlnbm1lbnQs IHplcm8sIHRjYWNoZSk7Ci0JYXNzZXJ0KEFMSUdOTUVOVF9BRERSMkJBU0UocmV0LCBhbGlnbm1l bnQpID09IHJldCk7Ci0JaWYgKGNvbmZpZ19zdGF0cyAmJiBpc19pbnRlcm5hbCAmJiBsaWtlbHko cmV0ICE9IE5VTEwpKSB7Ci0JCWFyZW5hX2ludGVybmFsX2FkZChpYWFsbG9jKHRzZG4sIHJldCks IGlzYWxsb2ModHNkbiwgcmV0KSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLUpFTUFMTE9DX0FM V0FZU19JTkxJTkUgdm9pZCAqCi1pcGFsbG9jdCh0c2RuX3QgKnRzZG4sIHNpemVfdCB1c2l6ZSwg c2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLAotICAgIHRjYWNoZV90ICp0Y2FjaGUsIGFyZW5h X3QgKmFyZW5hKSB7Ci0JcmV0dXJuIGlwYWxsb2N6dG0odHNkbiwgdXNpemUsIGFsaWdubWVudCwg emVybywgdGNhY2hlLCBmYWxzZSwgYXJlbmEpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5F IHZvaWQgKgotaXBhbGxvYyh0c2RfdCAqdHNkLCBzaXplX3QgdXNpemUsIHNpemVfdCBhbGlnbm1l bnQsIGJvb2wgemVybykgewotCXJldHVybiBpcGFsbG9jenRtKHRzZF90c2RuKHRzZCksIHVzaXpl LCBhbGlnbm1lbnQsIHplcm8sCi0JICAgIHRjYWNoZV9nZXQodHNkKSwgZmFsc2UsIE5VTEwpOwot fQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAotaXZzYWxsb2ModHNkbl90ICp0c2Ru LCBjb25zdCB2b2lkICpwdHIpIHsKLQlyZXR1cm4gYXJlbmFfdnNhbGxvYyh0c2RuLCBwdHIpOwot fQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLWlkYWxsb2N0bSh0c2RuX3QgKnRzZG4s IHZvaWQgKnB0ciwgdGNhY2hlX3QgKnRjYWNoZSwKLSAgICBlbWFwX2FsbG9jX2N0eF90ICphbGxv Y19jdHgsIGJvb2wgaXNfaW50ZXJuYWwsIGJvb2wgc2xvd19wYXRoKSB7Ci0JYXNzZXJ0KHB0ciAh PSBOVUxMKTsKLQlhc3NlcnQoIWlzX2ludGVybmFsIHx8IHRjYWNoZSA9PSBOVUxMKTsKLQlhc3Nl cnQoIWlzX2ludGVybmFsIHx8IGFyZW5hX2lzX2F1dG8oaWFhbGxvYyh0c2RuLCBwdHIpKSk7Ci0J d2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiks Ci0JICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQlpZiAoY29uZmlnX3N0YXRzICYmIGlzX2lu dGVybmFsKSB7Ci0JCWFyZW5hX2ludGVybmFsX3N1YihpYWFsbG9jKHRzZG4sIHB0ciksIGlzYWxs b2ModHNkbiwgcHRyKSk7Ci0JfQotCWlmICghaXNfaW50ZXJuYWwgJiYgIXRzZG5fbnVsbCh0c2Ru KSAmJgotCSAgICB0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkbl90c2QodHNkbikpICE9IDAp IHsKLQkJYXNzZXJ0KHRjYWNoZSA9PSBOVUxMKTsKLQl9Ci0JYXJlbmFfZGFsbG9jKHRzZG4sIHB0 ciwgdGNhY2hlLCBhbGxvY19jdHgsIHNsb3dfcGF0aCk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19J TkxJTkUgdm9pZAotaWRhbGxvYyh0c2RfdCAqdHNkLCB2b2lkICpwdHIpIHsKLQlpZGFsbG9jdG0o dHNkX3RzZG4odHNkKSwgcHRyLCB0Y2FjaGVfZ2V0KHRzZCksIE5VTEwsIGZhbHNlLCB0cnVlKTsK LX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1pc2RhbGxvY3QodHNkbl90ICp0c2Ru LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCB0Y2FjaGVfdCAqdGNhY2hlLAotICAgIGVtYXBfYWxs b2NfY3R4X3QgKmFsbG9jX2N0eCwgYm9vbCBzbG93X3BhdGgpIHsKLQl3aXRuZXNzX2Fzc2VydF9k ZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKLQkgICAgV0lUTkVTU19S QU5LX0NPUkUsIDApOwotCWFyZW5hX3NkYWxsb2ModHNkbiwgcHRyLCBzaXplLCB0Y2FjaGUsIGFs bG9jX2N0eCwgc2xvd19wYXRoKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoK LWlyYWxsb2N0X3JlYWxpZ24odHNkbl90ICp0c2RuLCB2b2lkICpwdHIsIHNpemVfdCBvbGRzaXpl LCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sIHRjYWNoZV90 ICp0Y2FjaGUsIGFyZW5hX3QgKmFyZW5hLAotICAgIGhvb2tfcmFsbG9jX2FyZ3NfdCAqaG9va19h cmdzKSB7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9n ZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQl2b2lkICpwOwotCXNpemVf dCB1c2l6ZSwgY29weXNpemU7Ci0KLQl1c2l6ZSA9IHN6X3NhMnUoc2l6ZSwgYWxpZ25tZW50KTsK LQlpZiAodW5saWtlbHkodXNpemUgPT0gMCB8fCB1c2l6ZSA+IFNDX0xBUkdFX01BWENMQVNTKSkg ewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcCA9IGlwYWxsb2N0KHRzZG4sIHVzaXplLCBhbGlnbm1l bnQsIHplcm8sIHRjYWNoZSwgYXJlbmEpOwotCWlmIChwID09IE5VTEwpIHsKLQkJcmV0dXJuIE5V TEw7Ci0JfQotCS8qCi0JICogQ29weSBhdCBtb3N0IHNpemUgYnl0ZXMgKG5vdCBzaXplK2V4dHJh KSwgc2luY2UgdGhlIGNhbGxlciBoYXMgbm8KLQkgKiBleHBlY3RhdGlvbiB0aGF0IHRoZSBleHRy YSBieXRlcyB3aWxsIGJlIHJlbGlhYmx5IHByZXNlcnZlZC4KLQkgKi8KLQljb3B5c2l6ZSA9IChz aXplIDwgb2xkc2l6ZSkgPyBzaXplIDogb2xkc2l6ZTsKLQltZW1jcHkocCwgcHRyLCBjb3B5c2l6 ZSk7Ci0JaG9va19pbnZva2VfYWxsb2MoaG9va19hcmdzLT5pc19yZWFsbG9jCi0JICAgID8gaG9v a19hbGxvY19yZWFsbG9jIDogaG9va19hbGxvY19yYWxsb2N4LCBwLCAodWludHB0cl90KXAsCi0J ICAgIGhvb2tfYXJncy0+YXJncyk7Ci0JaG9va19pbnZva2VfZGFsbG9jKGhvb2tfYXJncy0+aXNf cmVhbGxvYwotCSAgICA/IGhvb2tfZGFsbG9jX3JlYWxsb2MgOiBob29rX2RhbGxvY19yYWxsb2N4 LCBwdHIsIGhvb2tfYXJncy0+YXJncyk7Ci0JaXNkYWxsb2N0KHRzZG4sIHB0ciwgb2xkc2l6ZSwg dGNhY2hlLCBOVUxMLCB0cnVlKTsKLQlyZXR1cm4gcDsKLX0KLQotLyoKLSAqIGlzX3JlYWxsb2Mg dGhyZWFkcyB0aHJvdWdoIHRoZSBrbm93bGVkZ2Ugb2Ygd2hldGhlciBvciBub3QgdGhpcyBjYWxs IGNvbWVzCi0gKiBmcm9tIGplX3JlYWxsb2MgKGFzIG9wcG9zZWQgdG8gamVfcmFsbG9jeCk7IHRo aXMgZW5zdXJlcyB0aGF0IHdlIHBhc3MgdGhlCi0gKiBjb3JyZWN0IGVudHJ5IHBvaW50IGludG8g YW55IGhvb2tzLgotICogTm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWxsIGZvcmNlLWlu bGluZWQsIHNvIG5vIGFjdHVhbCBib29sIGdldHMKLSAqIHBhc3NlZC1hcm91bmQgYW55d2hlcmUu Ci0gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCi1pcmFsbG9jdCh0c2RuX3QgKnRz ZG4sIHZvaWQgKnB0ciwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25t ZW50LAotICAgIGJvb2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSwgYXJlbmFfdCAqYXJlbmEsIGhv b2tfcmFsbG9jX2FyZ3NfdCAqaG9va19hcmdzKQotewotCWFzc2VydChwdHIgIT0gTlVMTCk7Ci0J YXNzZXJ0KHNpemUgIT0gMCk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dp dG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQotCWlm IChhbGlnbm1lbnQgIT0gMCAmJiAoKHVpbnRwdHJfdClwdHIgJiAoKHVpbnRwdHJfdClhbGlnbm1l bnQtMSkpCi0JICAgICE9IDApIHsKLQkJLyoKLQkJICogRXhpc3Rpbmcgb2JqZWN0IGFsaWdubWVu dCBpcyBpbmFkZXF1YXRlOyBhbGxvY2F0ZSBuZXcgc3BhY2UKLQkJICogYW5kIGNvcHkuCi0JCSAq LwotCQlyZXR1cm4gaXJhbGxvY3RfcmVhbGlnbih0c2RuLCBwdHIsIG9sZHNpemUsIHNpemUsIGFs aWdubWVudCwKLQkJICAgIHplcm8sIHRjYWNoZSwgYXJlbmEsIGhvb2tfYXJncyk7Ci0JfQotCi0J cmV0dXJuIGFyZW5hX3JhbGxvYyh0c2RuLCBhcmVuYSwgcHRyLCBvbGRzaXplLCBzaXplLCBhbGln bm1lbnQsIHplcm8sCi0JICAgIHRjYWNoZSwgaG9va19hcmdzKTsKLX0KLQotSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkICoKLWlyYWxsb2ModHNkX3QgKnRzZCwgdm9pZCAqcHRyLCBzaXplX3Qg b2xkc2l6ZSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsCi0gICAgYm9vbCB6ZXJvLCBo b29rX3JhbGxvY19hcmdzX3QgKmhvb2tfYXJncykgewotCXJldHVybiBpcmFsbG9jdCh0c2RfdHNk bih0c2QpLCBwdHIsIG9sZHNpemUsIHNpemUsIGFsaWdubWVudCwgemVybywKLQkgICAgdGNhY2hl X2dldCh0c2QpLCBOVUxMLCBob29rX2FyZ3MpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5F IGJvb2wKLWl4YWxsb2ModHNkbl90ICp0c2RuLCB2b2lkICpwdHIsIHNpemVfdCBvbGRzaXplLCBz aXplX3Qgc2l6ZSwgc2l6ZV90IGV4dHJhLAotICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVy bywgc2l6ZV90ICpuZXdzaXplKSB7Ci0JYXNzZXJ0KHB0ciAhPSBOVUxMKTsKLQlhc3NlcnQoc2l6 ZSAhPSAwKTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2Rw X2dldCh0c2RuKSwKLQkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOwotCi0JaWYgKGFsaWdubWVu dCAhPSAwICYmICgodWludHB0cl90KXB0ciAmICgodWludHB0cl90KWFsaWdubWVudC0xKSkKLQkg ICAgIT0gMCkgewotCQkvKiBFeGlzdGluZyBvYmplY3QgYWxpZ25tZW50IGlzIGluYWRlcXVhdGUu ICovCi0JCSpuZXdzaXplID0gb2xkc2l6ZTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJu IGFyZW5hX3JhbGxvY19ub19tb3ZlKHRzZG4sIHB0ciwgb2xkc2l6ZSwgc2l6ZSwgZXh0cmEsIHpl cm8sCi0JICAgIG5ld3NpemUpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLWZh c3RwYXRoX3N1Y2Nlc3NfZmluaXNoKHRzZF90ICp0c2QsIHVpbnQ2NF90IGFsbG9jYXRlZF9hZnRl ciwKLSAgICBjYWNoZV9iaW5fdCAqYmluLCB2b2lkICpyZXQpIHsKLQl0aHJlYWRfYWxsb2NhdGVk X3NldCh0c2QsIGFsbG9jYXRlZF9hZnRlcik7Ci0JaWYgKGNvbmZpZ19zdGF0cykgewotCQliaW4t PnRzdGF0cy5ucmVxdWVzdHMrKzsKLQl9Ci0KLQlMT0coImNvcmUubWFsbG9jLmV4aXQiLCAicmVz dWx0OiAlcCIsIHJldCk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotbWFsbG9j X2luaXRpYWxpemVkKHZvaWQpIHsKLQlyZXR1cm4gKG1hbGxvY19pbml0X3N0YXRlID09IG1hbGxv Y19pbml0X2luaXRpYWxpemVkKTsKLX0KLQotLyoKLSAqIG1hbGxvYygpIGZhc3RwYXRoLiAgSW5j bHVkZWQgaGVyZSBzbyB0aGF0IHdlIGNhbiBpbmxpbmUgaXQgaW50byBvcGVyYXRvciBuZXc7Ci0g KiBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIHRoZXJlIGlzIG5vbi1uZWdsaWdpYmxlIGFzIGEgZnJh Y3Rpb24gb2YgdG90YWwgQ1BVIGluCi0gKiBhbGxvY2F0aW9uLWhlYXZ5IEMrKyBwcm9ncmFtcy4g IFdlIHRha2UgdGhlIGZhbGxiYWNrIGFsbG9jIHRvIGFsbG93IG1hbGxvYwotICogKHdoaWNoIGNh biByZXR1cm4gTlVMTCkgdG8gZGlmZmVyIGluIGl0cyBiZWhhdmlvciBmcm9tIG9wZXJhdG9yIG5l dyAod2hpY2gKLSAqIGNhbid0KS4gIEl0IG1hdGNoZXMgdGhlIHNpZ25hdHVyZSBvZiBtYWxsb2Mg LyBvcGVyYXRvciBuZXcgc28gdGhhdCB3ZSBjYW4KLSAqIHRhaWwtY2FsbCB0aGUgZmFsbGJhY2sg YWxsb2NhdG9yLCBhbGxvd2luZyB1cyB0byBhdm9pZCBzZXR0aW5nIHVwIHRoZSBjYWxsCi0gKiBm cmFtZSBpbiB0aGUgY29tbW9uIGNhc2UuCi0gKgotICogRmFzdHBhdGggYXNzdW1lcyBzaXplIDw9 IFNDX0xPT0tVUF9NQVhDTEFTUywgYW5kIHRoYXQgd2UgaGl0Ci0gKiB0Y2FjaGUuICBJZiBlaXRo ZXIgb2YgdGhlc2UgaXMgZmFsc2UsIHdlIHRhaWwtY2FsbCB0byB0aGUgc2xvd3BhdGgsCi0gKiBt YWxsb2NfZGVmYXVsdCgpLiAgVGFpbC1jYWxsaW5nIGlzIHVzZWQgdG8gYXZvaWQgYW55IGNhbGxl ci1zYXZlZAotICogcmVnaXN0ZXJzLgotICoKLSAqIGZhc3RwYXRoIHN1cHBvcnRzIHRpY2tlciBh bmQgcHJvZmlsaW5nLCBib3RoIG9mIHdoaWNoIHdpbGwgYWxzbwotICogdGFpbC1jYWxsIHRvIHRo ZSBzbG93cGF0aCBpZiB0aGV5IGZpcmUuCi0gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9p ZCAqCi1pbWFsbG9jX2Zhc3RwYXRoKHNpemVfdCBzaXplLCB2b2lkICooZmFsbGJhY2tfYWxsb2Mp KHNpemVfdCkpIHsKLQlMT0coImNvcmUubWFsbG9jLmVudHJ5IiwgInNpemU6ICV6dSIsIHNpemUp OwotCWlmICh0c2RfZ2V0X2FsbG9jYXRlcygpICYmIHVubGlrZWx5KCFtYWxsb2NfaW5pdGlhbGl6 ZWQoKSkpIHsKLQkJcmV0dXJuIGZhbGxiYWNrX2FsbG9jKHNpemUpOwotCX0KLQotCXRzZF90ICp0 c2QgPSB0c2RfZ2V0KGZhbHNlKTsKLQlpZiAodW5saWtlbHkoKHNpemUgPiBTQ19MT09LVVBfTUFY Q0xBU1MpIHx8IHRzZCA9PSBOVUxMKSkgewotCQlyZXR1cm4gZmFsbGJhY2tfYWxsb2Moc2l6ZSk7 Ci0JfQotCS8qCi0JICogVGhlIGNvZGUgYmVsb3cgdGlsbCB0aGUgYnJhbmNoIGNoZWNraW5nIHRo ZSBuZXh0X2V2ZW50IHRocmVzaG9sZCBtYXkKLQkgKiBleGVjdXRlIGJlZm9yZSBtYWxsb2NfaW5p dCgpLCBpbiB3aGljaCBjYXNlIHRoZSB0aHJlc2hvbGQgaXMgMCB0bwotCSAqIHRyaWdnZXIgc2xv dyBwYXRoIGFuZCBpbml0aWFsaXphdGlvbi4KLQkgKgotCSAqIE5vdGUgdGhhdCB3aGVuIHVuaW5p dGlhbGl6ZWQsIG9ubHkgdGhlIGZhc3QtcGF0aCB2YXJpYW50cyBvZiB0aGUgc3ogLwotCSAqIHRz ZCBmYWNpbGl0aWVzIG1heSBiZSBjYWxsZWQuCi0JICovCi0Jc3ppbmRfdCBpbmQ7Ci0JLyoKLQkg KiBUaGUgdGhyZWFkX2FsbG9jYXRlZCBjb3VudGVyIGluIHRzZCBzZXJ2ZXMgYXMgYSBnZW5lcmFs IHB1cnBvc2UKLQkgKiBhY2N1bXVsYXRvciBmb3IgYnl0ZXMgb2YgYWxsb2NhdGlvbiB0byB0cmln Z2VyIGRpZmZlcmVudCB0eXBlcyBvZgotCSAqIGV2ZW50cy4gIHVzaXplIGlzIGFsd2F5cyBuZWVk ZWQgdG8gYWR2YW5jZSB0aHJlYWRfYWxsb2NhdGVkLCB0aG91Z2gKLQkgKiBpdCdzIG5vdCBhbHdh eXMgbmVlZGVkIGluIHRoZSBjb3JlIGFsbG9jYXRpb24gbG9naWMuCi0JICovCi0Jc2l6ZV90IHVz aXplOwotCXN6X3NpemUyaW5kZXhfdXNpemVfZmFzdHBhdGgoc2l6ZSwgJmluZCwgJnVzaXplKTsK LQkvKiBGYXN0IHBhdGggcmVsaWVzIG9uIHNpemUgYmVpbmcgYSBiaW4uICovCi0JYXNzZXJ0KGlu ZCA8IFNDX05CSU5TKTsKLQlhc3NlcnQoKFNDX0xPT0tVUF9NQVhDTEFTUyA8IFNDX1NNQUxMX01B WENMQVNTKSAmJgotCSAgICAoc2l6ZSA8PSBTQ19TTUFMTF9NQVhDTEFTUykpOwotCi0JdWludDY0 X3QgYWxsb2NhdGVkLCB0aHJlc2hvbGQ7Ci0JdGVfbWFsbG9jX2Zhc3RwYXRoX2N0eCh0c2QsICZh bGxvY2F0ZWQsICZ0aHJlc2hvbGQpOwotCXVpbnQ2NF90IGFsbG9jYXRlZF9hZnRlciA9IGFsbG9j YXRlZCArIHVzaXplOwotCS8qCi0JICogVGhlIGluZCBhbmQgdXNpemUgbWlnaHQgYmUgdW5pbml0 aWFsaXplZCAob3IgcGFydGlhbGx5KSBiZWZvcmUKLQkgKiBtYWxsb2NfaW5pdCgpLiAgVGhlIGFz c2VydGlvbnMgY2hlY2sgZm9yOiAxKSBmdWxsIGNvcnJlY3RuZXNzICh1c2l6ZQotCSAqICYgaW5k KSB3aGVuIGluaXRpYWxpemVkOyBhbmQgMikgZ3VhcmFudGVlZCBzbG93LXBhdGggKHRocmVzaG9s ZCA9PSAwKQotCSAqIHdoZW4gIWluaXRpYWxpemVkLgotCSAqLwotCWlmICghbWFsbG9jX2luaXRp YWxpemVkKCkpIHsKLQkJYXNzZXJ0KHRocmVzaG9sZCA9PSAwKTsKLQl9IGVsc2UgewotCQlhc3Nl cnQoaW5kID09IHN6X3NpemUyaW5kZXgoc2l6ZSkpOwotCQlhc3NlcnQodXNpemUgPiAwICYmIHVz aXplID09IHN6X2luZGV4MnNpemUoaW5kKSk7Ci0JfQotCS8qCi0JICogQ2hlY2sgZm9yIGV2ZW50 cyBhbmQgdHNkIG5vbi1ub21pbmFsIChmYXN0X3RocmVzaG9sZCB3aWxsIGJlIHNldCB0bwotCSAq IDApIGluIGEgc2luZ2xlIGJyYW5jaC4KLQkgKi8KLQlpZiAodW5saWtlbHkoYWxsb2NhdGVkX2Fm dGVyID49IHRocmVzaG9sZCkpIHsKLQkJcmV0dXJuIGZhbGxiYWNrX2FsbG9jKHNpemUpOwotCX0K LQlhc3NlcnQodHNkX2Zhc3QodHNkKSk7Ci0KLQl0Y2FjaGVfdCAqdGNhY2hlID0gdHNkX3RjYWNo ZXBfZ2V0KHRzZCk7Ci0JYXNzZXJ0KHRjYWNoZSA9PSB0Y2FjaGVfZ2V0KHRzZCkpOwotCWNhY2hl X2Jpbl90ICpiaW4gPSAmdGNhY2hlLT5iaW5zW2luZF07Ci0JYm9vbCB0Y2FjaGVfc3VjY2VzczsK LQl2b2lkICpyZXQ7Ci0KLQkvKgotCSAqIFdlIHNwbGl0IHVwIHRoZSBjb2RlIHRoaXMgd2F5IHNv IHRoYXQgcmVkdW5kYW50IGxvdy13YXRlcgotCSAqIGNvbXB1dGF0aW9uIGRvZXNuJ3QgaGFwcGVu IG9uIHRoZSAobW9yZSBjb21tb24pIGNhc2UgaW4gd2hpY2ggd2UKLQkgKiBkb24ndCB0b3VjaCB0 aGUgbG93IHdhdGVyIG1hcmsuICBUaGUgY29tcGlsZXIgd29uJ3QgZG8gdGhpcwotCSAqIGR1cGxp Y2F0aW9uIG9uIGl0cyBvd24uCi0JICovCi0JcmV0ID0gY2FjaGVfYmluX2FsbG9jX2Vhc3koYmlu LCAmdGNhY2hlX3N1Y2Nlc3MpOwotCWlmICh0Y2FjaGVfc3VjY2VzcykgewotCQlmYXN0cGF0aF9z dWNjZXNzX2ZpbmlzaCh0c2QsIGFsbG9jYXRlZF9hZnRlciwgYmluLCByZXQpOwotCQlyZXR1cm4g cmV0OwotCX0KLQlyZXQgPSBjYWNoZV9iaW5fYWxsb2MoYmluLCAmdGNhY2hlX3N1Y2Nlc3MpOwot CWlmICh0Y2FjaGVfc3VjY2VzcykgewotCQlmYXN0cGF0aF9zdWNjZXNzX2ZpbmlzaCh0c2QsIGFs bG9jYXRlZF9hZnRlciwgYmluLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiBm YWxsYmFja19hbGxvYyhzaXplKTsKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX0lO TElORVNfQ19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9tYWNy b3MuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfbWFjcm9zLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGU5N2I1ZjkuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19p bnRlcm5hbF9tYWNyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jaWZuZGVm IEpFTUFMTE9DX0lOVEVSTkFMX01BQ1JPU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX01B Q1JPU19ICi0KLSNpZmRlZiBKRU1BTExPQ19ERUJVRwotIyAgZGVmaW5lIEpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgc3RhdGljIGlubGluZQotI2Vsc2UKLSMgIGlmZGVmIF9NU0NfVkVSCi0jICAgIGRl ZmluZSBKRU1BTExPQ19BTFdBWVNfSU5MSU5FIHN0YXRpYyBfX2ZvcmNlaW5saW5lCi0jICBlbHNl Ci0jICAgIGRlZmluZSBKRU1BTExPQ19BTFdBWVNfSU5MSU5FIEpFTUFMTE9DX0FUVFIoYWx3YXlz X2lubGluZSkgc3RhdGljIGlubGluZQotIyAgZW5kaWYKLSNlbmRpZgotI2lmZGVmIF9NU0NfVkVS Ci0jICBkZWZpbmUgaW5saW5lIF9pbmxpbmUKLSNlbmRpZgotCi0jZGVmaW5lIFVOVVNFRCBKRU1B TExPQ19BVFRSKHVudXNlZCkKLQotI2RlZmluZSBaVSh6KQkoKHNpemVfdCl6KQotI2RlZmluZSBa RCh6KQkoKHNzaXplX3QpeikKLSNkZWZpbmUgUVUocSkJKCh1aW50NjRfdClxKQotI2RlZmluZSBR RChxKQkoKGludDY0X3QpcSkKLQotI2RlZmluZSBLWlUoeikJWlUoeiMjVUxMKQotI2RlZmluZSBL WkQoeikJWkQoeiMjTEwpCi0jZGVmaW5lIEtRVShxKQlRVShxIyNVTEwpCi0jZGVmaW5lIEtRRChx KQlRSShxIyNMTCkKLQotI2lmbmRlZiBfX0RFQ09OU1QKLSMgIGRlZmluZQlfX0RFQ09OU1QodHlw ZSwgdmFyKQkoKHR5cGUpKHVpbnRwdHJfdCkoY29uc3Qgdm9pZCAqKSh2YXIpKQotI2VuZGlmCi0K LSNpZiAhZGVmaW5lZChKRU1BTExPQ19IQVNfUkVTVFJJQ1QpIHx8IGRlZmluZWQoX19jcGx1c3Bs dXMpCi0jICBkZWZpbmUgcmVzdHJpY3QKLSNlbmRpZgotCi0vKiBWYXJpb3VzIGZ1bmN0aW9uIHBv aW50ZXJzIGFyZSBzdGF0aWMgYW5kIGltbXV0YWJsZSBleGNlcHQgZHVyaW5nIHRlc3RpbmcuICov Ci0jaWZkZWYgSkVNQUxMT0NfSkVUCi0jICBkZWZpbmUgSkVUX01VVEFCTEUKLSNlbHNlCi0jICBk ZWZpbmUgSkVUX01VVEFCTEUgY29uc3QKLSNlbmRpZgotCi0jZGVmaW5lIEpFTUFMTE9DX1ZBX0FS R1NfSEVBRChoZWFkLCAuLi4pIGhlYWQKLSNkZWZpbmUgSkVNQUxMT0NfVkFfQVJHU19UQUlMKGhl YWQsIC4uLikgX19WQV9BUkdTX18KLQotLyogRGlhZ25vc3RpYyBzdXBwcmVzc2lvbiBtYWNyb3Mg Ki8KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pCi0jICBkZWZp bmUgSkVNQUxMT0NfRElBR05PU1RJQ19QVVNIIF9fcHJhZ21hKHdhcm5pbmcocHVzaCkpCi0jICBk ZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19QT1AgX19wcmFnbWEod2FybmluZyhwb3ApKQotIyAg ZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFKFcpIF9fcHJhZ21hKHdhcm5pbmcoZGlz YWJsZTpXKSkKLSMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRV9NSVNTSU5HX1NU UlVDVF9GSUVMRF9JTklUSUFMSVpFUlMKLSMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lH Tk9SRV9UWVBFX0xJTUlUUwotIyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX0FM TE9DX1NJWkVfTEFSR0VSX1RIQU4KLSMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0RJU0FC TEVfU1BVUklPVVMKLS8qICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgZmlyc3QgYXBwZWFyZWQgaW4g Z2NjIDQuNi4gKi8KLSNlbGlmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gNCkg fHwgKChfX0dOVUNfXyA9PSA0KSAmJiBcCi0gIChfX0dOVUNfTUlOT1JfXyA+IDUpKSkpIHx8IGRl ZmluZWQoX19jbGFuZ19fKQotLyoKLSAqIFRoZSBKRU1BTExPQ19QUkFHTUFfXyBtYWNybyBpcyBh biBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIEdDQyBhbmQgQ2xhbmcKLSAqIGRpYWdub3N0 aWMgc3VwcHJlc3Npb24gbWFjcm9zIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55d2hlcmUgZWxz ZS4KLSAqLwotIyAgZGVmaW5lIEpFTUFMTE9DX1BSQUdNQV9fKFgpIF9QcmFnbWEoI1gpCi0jICBk ZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19QVVNIIEpFTUFMTE9DX1BSQUdNQV9fKEdDQyBkaWFn bm9zdGljIHB1c2gpCi0jICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19QT1AgSkVNQUxMT0Nf UFJBR01BX18oR0NDIGRpYWdub3N0aWMgcG9wKQotIyAgZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NU SUNfSUdOT1JFKFcpIFwKLSAgICAgSkVNQUxMT0NfUFJBR01BX18oR0NDIGRpYWdub3N0aWMgaWdu b3JlZCBXKQotCi0vKgotICogVGhlIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgd2Fybmlu ZyBpcyBidWdneSBpbiBHQ0MgdmVyc2lvbnMgPCA1LjEgYW5kCi0gKiBhbGwgY2xhbmcgdmVyc2lv bnMgdXAgdG8gdmVyc2lvbiA3IChjdXJyZW50bHkgdHJ1bmssIHVucmVsZWFzZWQpLiAgVGhpcyBt YWNybwotICogc3VwcHJlc3NlcyB0aGUgd2FybmluZyBmb3IgdGhlIGFmZmVjdGVkIGNvbXBpbGVy IHZlcnNpb25zIG9ubHkuCi0gKi8KLSMgIGlmICgoZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmlu ZWQoX19jbGFuZ19fKSkgJiYgKF9fR05VQ19fIDwgNSkpIHx8IFwKLSAgICAgZGVmaW5lZChfX2Ns YW5nX18pCi0jICAgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRV9NSVNTSU5HX1NU UlVDVF9GSUVMRF9JTklUSUFMSVpFUlMgIFwKLSAgICAgICAgICBKRU1BTExPQ19ESUFHTk9TVElD X0lHTk9SRSgiLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIpCi0jICBlbHNlCi0jICAgIGRl ZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRV9NSVNTSU5HX1NUUlVDVF9GSUVMRF9JTklU SUFMSVpFUlMKLSMgIGVuZGlmCi0KLSMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9S RV9UWVBFX0xJTUlUUyAgXAotICAgICBKRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRSgiLVd0eXBl LWxpbWl0cyIpCi0jICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfVU5VU0VEX1BB UkFNRVRFUiBcCi0gICAgIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFKCItV3VudXNlZC1wYXJh bWV0ZXIiKQotIyAgaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKSAm JiAoX19HTlVDX18gPj0gNykKLSMgICAgZGVmaW5lIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JF X0FMTE9DX1NJWkVfTEFSR0VSX1RIQU4gXAotICAgICAgIEpFTUFMTE9DX0RJQUdOT1NUSUNfSUdO T1JFKCItV2FsbG9jLXNpemUtbGFyZ2VyLXRoYW49IikKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEpF TUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX0FMTE9DX1NJWkVfTEFSR0VSX1RIQU4KLSMgIGVuZGlm Ci0jICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19ESVNBQkxFX1NQVVJJT1VTIFwKLSAgSkVN QUxMT0NfRElBR05PU1RJQ19QVVNIIFwKLSAgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfVU5V U0VEX1BBUkFNRVRFUgotI2Vsc2UKLSMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX1BVU0gK LSMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElDX1BPUAotIyAgZGVmaW5lIEpFTUFMTE9DX0RJ QUdOT1NUSUNfSUdOT1JFKFcpCi0jICBkZWZpbmUgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVf TUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTElaRVJTCi0jICBkZWZpbmUgSkVNQUxMT0NfRElB R05PU1RJQ19JR05PUkVfVFlQRV9MSU1JVFMKLSMgIGRlZmluZSBKRU1BTExPQ19ESUFHTk9TVElD X0lHTk9SRV9BTExPQ19TSVpFX0xBUkdFUl9USEFOCi0jICBkZWZpbmUgSkVNQUxMT0NfRElBR05P U1RJQ19ESVNBQkxFX1NQVVJJT1VTCi0jZW5kaWYKLQotLyoKLSAqIERpc2FibGVzIHNwdXJpb3Vz IGRpYWdub3N0aWNzIGZvciBhbGwgaGVhZGVycy4gIFNpbmNlIHRoZXNlIGhlYWRlcnMgYXJlIG5v dAotICogaW5jbHVkZWQgYnkgdXNlcnMgZGlyZWN0bHksIGl0IGRvZXMgbm90IGFmZmVjdCB0aGVp ciBkaWFnbm9zdGljIHNldHRpbmdzLgotICovCi1KRU1BTExPQ19ESUFHTk9TVElDX0RJU0FCTEVf U1BVUklPVVMKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX01BQ1JPU19IICovCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF90eXBlcy5oIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmMy YjU5Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfdHlwZXMuaAorKysg L2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RZ UEVTX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfVFlQRVNfSAotCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvcXVhbnR1bS5oIgotCi0vKiBQcm9jZXNzb3IgLyBjb3JlIGlkIHR5cGUu ICovCi10eXBlZGVmIGludCBtYWxsb2NfY3B1aWRfdDsKLQotLyogV2hlbiByZWFsbG9jKG5vbi1u dWxsLXB0ciwgMCkgaXMgY2FsbGVkLCB3aGF0IGhhcHBlbnM/ICovCi1lbnVtIHplcm9fcmVhbGxv Y19hY3Rpb25fZSB7Ci0JLyogUmVhbGxvYyhwdHIsIDApIGlzIGZyZWUocHRyKTsgcmV0dXJuIG1h bGxvYygwKTsgKi8KLQl6ZXJvX3JlYWxsb2NfYWN0aW9uX2FsbG9jID0gMCwKLQkvKiBSZWFsbG9j KHB0ciwgMCkgaXMgZnJlZShwdHIpOyAqLwotCXplcm9fcmVhbGxvY19hY3Rpb25fZnJlZSA9IDEs Ci0JLyogUmVhbGxvYyhwdHIsIDApIGFib3J0cy4gKi8KLQl6ZXJvX3JlYWxsb2NfYWN0aW9uX2Fi b3J0ID0gMgotfTsKLXR5cGVkZWYgZW51bSB6ZXJvX3JlYWxsb2NfYWN0aW9uX2UgemVyb19yZWFs bG9jX2FjdGlvbl90OwotCi0vKiBTaWduYXR1cmUgb2Ygd3JpdGUgY2FsbGJhY2suICovCi10eXBl ZGVmIHZvaWQgKHdyaXRlX2NiX3QpKHZvaWQgKiwgY29uc3QgY2hhciAqKTsKLQotZW51bSBtYWxs b2NfaW5pdF9lIHsKLQltYWxsb2NfaW5pdF91bmluaXRpYWxpemVkCT0gMywKLQltYWxsb2NfaW5p dF9hMF9pbml0aWFsaXplZAk9IDIsCi0JbWFsbG9jX2luaXRfcmVjdXJzaWJsZQkJPSAxLAotCW1h bGxvY19pbml0X2luaXRpYWxpemVkCQk9IDAgLyogQ29tbW9uIGNhc2UgLS0+IGpuei4gKi8KLX07 Ci10eXBlZGVmIGVudW0gbWFsbG9jX2luaXRfZSBtYWxsb2NfaW5pdF90OwotCi0vKgotICogRmxh Z3MgYml0czoKLSAqCi0gKiBhOiBhcmVuYQotICogdDogdGNhY2hlCi0gKiAwOiB1bnVzZWQKLSAq IHo6IHplcm8KLSAqIG46IGFsaWdubWVudAotICoKLSAqIGFhYWFhYWFhIGFhYWF0dHR0IHR0dHR0 dHR0IDB6bm5ubm5uCi0gKi8KLSNkZWZpbmUgTUFMTE9DWF9BUkVOQV9CSVRTCTEyCi0jZGVmaW5l IE1BTExPQ1hfVENBQ0hFX0JJVFMJMTIKLSNkZWZpbmUgTUFMTE9DWF9MR19BTElHTl9CSVRTCTYK LSNkZWZpbmUgTUFMTE9DWF9BUkVOQV9TSElGVAkyMAotI2RlZmluZSBNQUxMT0NYX1RDQUNIRV9T SElGVAk4Ci0jZGVmaW5lIE1BTExPQ1hfQVJFTkFfTUFTSyBcCi0gICAgKCgoMSA8PCBNQUxMT0NY X0FSRU5BX0JJVFMpIC0gMSkgPDwgTUFMTE9DWF9BUkVOQV9TSElGVCkKLS8qIE5COiBBcmVuYSBp bmRleCBiaWFzIGRlY3JlYXNlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXJlbmFzIGJ5IDEuICov Ci0jZGVmaW5lIE1BTExPQ1hfQVJFTkFfTElNSVQJKCgxIDw8IE1BTExPQ1hfQVJFTkFfQklUUykg LSAxKQotI2RlZmluZSBNQUxMT0NYX1RDQUNIRV9NQVNLIFwKLSAgICAoKCgxIDw8IE1BTExPQ1hf VENBQ0hFX0JJVFMpIC0gMSkgPDwgTUFMTE9DWF9UQ0FDSEVfU0hJRlQpCi0jZGVmaW5lIE1BTExP Q1hfVENBQ0hFX01BWAkoKDEgPDwgTUFMTE9DWF9UQ0FDSEVfQklUUykgLSAzKQotI2RlZmluZSBN QUxMT0NYX0xHX0FMSUdOX01BU0sJKCgxIDw8IE1BTExPQ1hfTEdfQUxJR05fQklUUykgLSAxKQot LyogVXNlIE1BTExPQ1hfQUxJR05fR0VUKCkgaWYgYWxpZ25tZW50IG1heSBub3QgYmUgc3BlY2lm aWVkIGluIGZsYWdzLiAqLwotI2RlZmluZSBNQUxMT0NYX0FMSUdOX0dFVF9TUEVDSUZJRUQoZmxh Z3MpCQkJCVwKLSAgICAoWlUoMSkgPDwgKGZsYWdzICYgTUFMTE9DWF9MR19BTElHTl9NQVNLKSkK LSNkZWZpbmUgTUFMTE9DWF9BTElHTl9HRVQoZmxhZ3MpCQkJCQlcCi0gICAgKE1BTExPQ1hfQUxJ R05fR0VUX1NQRUNJRklFRChmbGFncykgJiAoU0laRV9UX01BWC0xKSkKLSNkZWZpbmUgTUFMTE9D WF9aRVJPX0dFVChmbGFncykJCQkJCQlcCi0gICAgKChib29sKShmbGFncyAmIE1BTExPQ1hfWkVS TykpCi0KLSNkZWZpbmUgTUFMTE9DWF9UQ0FDSEVfR0VUKGZsYWdzKQkJCQkJXAotICAgICgoKHVu c2lnbmVkKSgoZmxhZ3MgJiBNQUxMT0NYX1RDQUNIRV9NQVNLKSA+PiBNQUxMT0NYX1RDQUNIRV9T SElGVCkpIC0gMikKLSNkZWZpbmUgTUFMTE9DWF9BUkVOQV9HRVQoZmxhZ3MpCQkJCQlcCi0gICAg KCgodW5zaWduZWQpKCgodW5zaWduZWQpZmxhZ3MpID4+IE1BTExPQ1hfQVJFTkFfU0hJRlQpKSAt IDEpCi0KLS8qIFNtYWxsZXN0IHNpemUgY2xhc3MgdG8gc3VwcG9ydC4gKi8KLSNkZWZpbmUgVElO WV9NSU4JCSgxVSA8PCBMR19USU5ZX01JTikKLQotI2RlZmluZSBMT05HCQkJKChzaXplX3QpKDFV IDw8IExHX1NJWkVPRl9MT05HKSkKLSNkZWZpbmUgTE9OR19NQVNLCQkoTE9ORyAtIDEpCi0KLS8q IFJldHVybiB0aGUgc21hbGxlc3QgbG9uZyBtdWx0aXBsZSB0aGF0IGlzID49IGEuICovCi0jZGVm aW5lIExPTkdfQ0VJTElORyhhKQkJCQkJCQlcCi0JKCgoYSkgKyBMT05HX01BU0spICYgfkxPTkdf TUFTSykKLQotI2RlZmluZSBTSVpFT0ZfUFRSCQkoMVUgPDwgTEdfU0laRU9GX1BUUikKLSNkZWZp bmUgUFRSX01BU0sJCShTSVpFT0ZfUFRSIC0gMSkKLQotLyogUmV0dXJuIHRoZSBzbWFsbGVzdCAo dm9pZCAqKSBtdWx0aXBsZSB0aGF0IGlzID49IGEuICovCi0jZGVmaW5lIFBUUl9DRUlMSU5HKGEp CQkJCQkJCVwKLQkoKChhKSArIFBUUl9NQVNLKSAmIH5QVFJfTUFTSykKLQotLyoKLSAqIE1heGlt dW0gc2l6ZSBvZiBMMSBjYWNoZSBsaW5lLiAgVGhpcyBpcyB1c2VkIHRvIGF2b2lkIGNhY2hlIGxp bmUgYWxpYXNpbmcuCi0gKiBJbiBhZGRpdGlvbiwgdGhpcyBjb250cm9scyB0aGUgc3BhY2luZyBv ZiBjYWNoZWxpbmUtc3BhY2VkIHNpemUgY2xhc3Nlcy4KLSAqCi0gKiBDQUNIRUxJTkUgY2Fubm90 IGJlIGJhc2VkIG9uIExHX0NBQ0hFTElORSBiZWNhdXNlIF9fZGVjbHNwZWMoYWxpZ24oKSkgY2Fu Ci0gKiBvbmx5IGhhbmRsZSByYXcgY29uc3RhbnRzLgotICovCi0jZGVmaW5lIExHX0NBQ0hFTElO RQkJNgotI2RlZmluZSBDQUNIRUxJTkUJCTY0Ci0jZGVmaW5lIENBQ0hFTElORV9NQVNLCQkoQ0FD SEVMSU5FIC0gMSkKLQotLyogUmV0dXJuIHRoZSBzbWFsbGVzdCBjYWNoZWxpbmUgbXVsdGlwbGUg dGhhdCBpcyA+PSBzLiAqLwotI2RlZmluZSBDQUNIRUxJTkVfQ0VJTElORyhzKQkJCQkJCVwKLQko KChzKSArIENBQ0hFTElORV9NQVNLKSAmIH5DQUNIRUxJTkVfTUFTSykKLQotLyogUmV0dXJuIHRo ZSBuZWFyZXN0IGFsaWduZWQgYWRkcmVzcyBhdCBvciBiZWxvdyBhLiAqLwotI2RlZmluZSBBTElH Tk1FTlRfQUREUjJCQVNFKGEsIGFsaWdubWVudCkJCQkJXAotCSgodm9pZCAqKSgodWludHB0cl90 KShhKSAmICgofihhbGlnbm1lbnQpKSArIDEpKSkKLQotLyogUmV0dXJuIHRoZSBvZmZzZXQgYmV0 d2VlbiBhIGFuZCB0aGUgbmVhcmVzdCBhbGlnbmVkIGFkZHJlc3MgYXQgb3IgYmVsb3cgYS4gKi8K LSNkZWZpbmUgQUxJR05NRU5UX0FERFIyT0ZGU0VUKGEsIGFsaWdubWVudCkJCQkJXAotCSgoc2l6 ZV90KSgodWludHB0cl90KShhKSAmIChhbGlnbm1lbnQgLSAxKSkpCi0KLS8qIFJldHVybiB0aGUg c21hbGxlc3QgYWxpZ25tZW50IG11bHRpcGxlIHRoYXQgaXMgPj0gcy4gKi8KLSNkZWZpbmUgQUxJ R05NRU5UX0NFSUxJTkcocywgYWxpZ25tZW50KQkJCQkJXAotCSgoKHMpICsgKGFsaWdubWVudCAt IDEpKSAmICgofihhbGlnbm1lbnQpKSArIDEpKQotCi0vKiBEZWNsYXJlIGEgdmFyaWFibGUtbGVu Z3RoIGFycmF5LiAqLwotI2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMCi0jICBpZmRlZiBf TVNDX1ZFUgotIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KLSMgICAgZGVmaW5lIGFsbG9jYSBfYWxs b2NhCi0jICBlbHNlCi0jICAgIGlmZGVmIEpFTUFMTE9DX0hBU19BTExPQ0FfSAotIyAgICAgIGlu Y2x1ZGUgPGFsbG9jYS5oPgotIyAgICBlbHNlCi0jICAgICAgaW5jbHVkZSA8c3RkbGliLmg+Ci0j ICAgIGVuZGlmCi0jICBlbmRpZgotIyAgZGVmaW5lIFZBUklBQkxFX0FSUkFZKHR5cGUsIG5hbWUs IGNvdW50KSBcCi0JdHlwZSAqbmFtZSA9IGFsbG9jYShzaXplb2YodHlwZSkgKiAoY291bnQpKQot I2Vsc2UKLSMgIGRlZmluZSBWQVJJQUJMRV9BUlJBWSh0eXBlLCBuYW1lLCBjb3VudCkgdHlwZSBu YW1lWyhjb3VudCldCi0jZW5kaWYKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1RZUEVT X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmguaW4gYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX3ByZWFtYmxlLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDVjZTc3ZDkuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oLmluCisr KyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfUFJFQU1CTEVf SAotI2RlZmluZSBKRU1BTExPQ19QUkVBTUJMRV9ICi0KLSNpbmNsdWRlICJqZW1hbGxvY19pbnRl cm5hbF9kZWZzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfZGVjbHMuaCIKLQotI2lmIGRlZmluZWQoSkVNQUxMT0NfVVRSQUNFKSB8fCBkZWZpbmVkKEpF TUFMTE9DX1VUUkFDRV9MQUJFTCkKLSNpbmNsdWRlIDxzeXMva3RyYWNlLmg+Ci0jICBpZiBkZWZp bmVkKEpFTUFMTE9DX1VUUkFDRSkKLSMgICAgZGVmaW5lIFVUUkFDRV9DQUxMKHAsIGwpIHV0cmFj ZShwLCBsKQotIyAgZWxzZQotIyAgICBkZWZpbmUgVVRSQUNFX0NBTEwocCwgbCkgdXRyYWNlKCJq ZW1hbGxvY19wcm9jZXNzIiwgcCwgbCkKLSMgICAgZGVmaW5lIEpFTUFMTE9DX1VUUkFDRQotIyAg ZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIEpFTUFMTE9DX05PX0RFTUFOR0xFCi0jaWZkZWYgSkVN QUxMT0NfSkVUCi0jICB1bmRlZiBKRU1BTExPQ19JU19NQUxMT0MKLSMgIGRlZmluZSBKRU1BTExP Q19OKG4pIGpldF8jI24KLSMgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3B1YmxpY19uYW1l c3BhY2UuaCIKLSMgIGRlZmluZSBKRU1BTExPQ19OT19SRU5BTUUKLSMgIGluY2x1ZGUgIi4uL2pl bWFsbG9jQGluc3RhbGxfc3VmZml4QC5oIgotIyAgdW5kZWYgSkVNQUxMT0NfTk9fUkVOQU1FCi0j ZWxzZQotIyAgZGVmaW5lIEpFTUFMTE9DX04obikgQHByaXZhdGVfbmFtZXNwYWNlQCMjbgotIyAg aW5jbHVkZSAiLi4vamVtYWxsb2NAaW5zdGFsbF9zdWZmaXhALmgiCi0jZW5kaWYKLQotI2lmIGRl ZmluZWQoSkVNQUxMT0NfT1NBVE9NSUMpCi0jaW5jbHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgot I2VuZGlmCi0KLSNpZmRlZiBKRU1BTExPQ19aT05FCi0jaW5jbHVkZSA8bWFjaC9tYWNoX2Vycm9y Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tYWNoX2luaXQuaD4KLSNpbmNsdWRlIDxtYWNoL3ZtX21hcC5o PgotI2VuZGlmCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5h bF9tYWNyb3MuaCIKLQotLyoKLSAqIE5vdGUgdGhhdCB0aGUgb3JkZXJpbmcgbWF0dGVycyBoZXJl OyB0aGUgaG9vayBpdHNlbGYgaXMgbmFtZS1tYW5nbGVkLiAgV2UKLSAqIHdhbnQgdGhlIGluY2x1 c2lvbiBvZiBob29rcyB0byBoYXBwZW4gZWFybHksIHNvIHRoYXQgd2UgaG9vayBhcyBtdWNoIGFz Ci0gKiBwb3NzaWJsZS4KLSAqLwotI2lmbmRlZiBKRU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFD RQotIyAgaWZuZGVmIEpFTUFMTE9DX0pFVAotIyAgICBpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9wcml2YXRlX25hbWVzcGFjZS5oIgotIyAgZWxzZQotIyAgICBpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZV9qZXQuaCIKLSMgIGVuZGlmCi0jZW5kaWYKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC90ZXN0X2hvb2tzLmgiCi0KLSNpZmRlZiBKRU1BTExPQ19E RUZJTkVfTUFEVklTRV9GUkVFCi0jICBkZWZpbmUgSkVNQUxMT0NfTUFEVl9GUkVFIDgKLSNlbmRp ZgotCi1zdGF0aWMgY29uc3QgYm9vbCBjb25maWdfZGVidWcgPQotI2lmZGVmIEpFTUFMTE9DX0RF QlVHCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQotI2VuZGlmCi0gICAgOwotc3RhdGljIGNv bnN0IGJvb2wgaGF2ZV9kc3MgPQotI2lmZGVmIEpFTUFMTE9DX0RTUwotICAgIHRydWUKLSNlbHNl Ci0gICAgZmFsc2UKLSNlbmRpZgotICAgIDsKLXN0YXRpYyBjb25zdCBib29sIGhhdmVfbWFkdmlz ZV9odWdlID0KLSNpZmRlZiBKRU1BTExPQ19IQVZFX01BRFZJU0VfSFVHRQotICAgIHRydWUKLSNl bHNlCi0gICAgZmFsc2UKLSNlbmRpZgotICAgIDsKLXN0YXRpYyBjb25zdCBib29sIGNvbmZpZ19m aWxsID0KLSNpZmRlZiBKRU1BTExPQ19GSUxMCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQot I2VuZGlmCi0gICAgOwotc3RhdGljIGNvbnN0IGJvb2wgY29uZmlnX2xhenlfbG9jayA9Ci0jaWZk ZWYgSkVNQUxMT0NfTEFaWV9MT0NLCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQotI2VuZGlm Ci0gICAgOwotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbWFsbG9jX2NvbmYgPSBK RU1BTExPQ19DT05GSUdfTUFMTE9DX0NPTkY7Ci1zdGF0aWMgY29uc3QgYm9vbCBjb25maWdfcHJv ZiA9Ci0jaWZkZWYgSkVNQUxMT0NfUFJPRgotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNl bmRpZgotICAgIDsKLXN0YXRpYyBjb25zdCBib29sIGNvbmZpZ19wcm9mX2xpYmdjYyA9Ci0jaWZk ZWYgSkVNQUxMT0NfUFJPRl9MSUJHQ0MKLSAgICB0cnVlCi0jZWxzZQotICAgIGZhbHNlCi0jZW5k aWYKLSAgICA7Ci1zdGF0aWMgY29uc3QgYm9vbCBjb25maWdfcHJvZl9saWJ1bndpbmQgPQotI2lm ZGVmIEpFTUFMTE9DX1BST0ZfTElCVU5XSU5ECi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQot I2VuZGlmCi0gICAgOwotc3RhdGljIGNvbnN0IGJvb2wgbWFwc19jb2FsZXNjZSA9Ci0jaWZkZWYg SkVNQUxMT0NfTUFQU19DT0FMRVNDRQotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNlbmRp ZgotICAgIDsKLXN0YXRpYyBjb25zdCBib29sIGNvbmZpZ19zdGF0cyA9Ci0jaWZkZWYgSkVNQUxM T0NfU1RBVFMKLSAgICB0cnVlCi0jZWxzZQotICAgIGZhbHNlCi0jZW5kaWYKLSAgICA7Ci1zdGF0 aWMgY29uc3QgYm9vbCBjb25maWdfdGxzID0KLSNpZmRlZiBKRU1BTExPQ19UTFMKLSAgICB0cnVl Ci0jZWxzZQotICAgIGZhbHNlCi0jZW5kaWYKLSAgICA7Ci1zdGF0aWMgY29uc3QgYm9vbCBjb25m aWdfdXRyYWNlID0KLSNpZmRlZiBKRU1BTExPQ19VVFJBQ0UKLSAgICB0cnVlCi0jZWxzZQotICAg IGZhbHNlCi0jZW5kaWYKLSAgICA7Ci1zdGF0aWMgY29uc3QgYm9vbCBjb25maWdfeG1hbGxvYyA9 Ci0jaWZkZWYgSkVNQUxMT0NfWE1BTExPQwotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNl bmRpZgotICAgIDsKLXN0YXRpYyBjb25zdCBib29sIGNvbmZpZ19jYWNoZV9vYmxpdmlvdXMgPQot I2lmZGVmIEpFTUFMTE9DX0NBQ0hFX09CTElWSU9VUwotICAgIHRydWUKLSNlbHNlCi0gICAgZmFs c2UKLSNlbmRpZgotICAgIDsKLS8qCi0gKiBVbmRvY3VtZW50ZWQsIGZvciBqZW1hbGxvYyBkZXZl bG9wbWVudCB1c2Ugb25seSBhdCB0aGUgbW9tZW50LiAgU2VlIHRoZSBub3RlCi0gKiBpbiBqZW1h bGxvYy9pbnRlcm5hbC9sb2cuaC4KLSAqLwotc3RhdGljIGNvbnN0IGJvb2wgY29uZmlnX2xvZyA9 Ci0jaWZkZWYgSkVNQUxMT0NfTE9HCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQotI2VuZGlm Ci0gICAgOwotLyoKLSAqIEFyZSBleHRyYSBzYWZldHkgY2hlY2tzIGVuYWJsZWQ7IHRoaW5ncyBs aWtlIGNoZWNraW5nIHRoZSBzaXplIG9mIHNpemVkCi0gKiBkZWFsbG9jYXRpb25zLCBkb3VibGUt ZnJlZXMsIGV0Yy4KLSAqLwotc3RhdGljIGNvbnN0IGJvb2wgY29uZmlnX29wdF9zYWZldHlfY2hl Y2tzID0KLSNpZmRlZiBKRU1BTExPQ19PUFRfU0FGRVRZX0NIRUNLUwotICAgIHRydWUKLSNlbGlm IGRlZmluZWQoSkVNQUxMT0NfREVCVUcpCi0gICAgLyoKLSAgICAgKiBUaGlzIGxldHMgdXMgb25s eSBndWFyZCBzYWZldHkgY2hlY2tzIGJ5IG9uZSBmbGFnIGluc3RlYWQgb2YgdHdvOyBmYXN0Ci0g ICAgICogY2hlY2tzIGNhbiBndWFyZCBzb2xlbHkgYnkgY29uZmlnX29wdF9zYWZldHlfY2hlY2tz IGFuZCBydW4gaW4gZGVidWcgbW9kZQotICAgICAqIHRvby4KLSAgICAgKi8KLSAgICB0cnVlCi0j ZWxzZQotICAgIGZhbHNlCi0jZW5kaWYKLSAgICA7Ci0KLS8qCi0gKiBFeHRyYSBkZWJ1Z2dpbmcg b2Ygc2l6ZWQgZGVhbGxvY2F0aW9ucyB0b28gb25lcm91cyB0byBiZSBpbmNsdWRlZCBpbiB0aGUK LSAqIGdlbmVyYWwgc2FmZXR5IGNoZWNrcy4KLSAqLwotc3RhdGljIGNvbnN0IGJvb2wgY29uZmln X29wdF9zaXplX2NoZWNrcyA9Ci0jaWYgZGVmaW5lZChKRU1BTExPQ19PUFRfU0laRV9DSEVDS1Mp IHx8IGRlZmluZWQoSkVNQUxMT0NfREVCVUcpCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQot I2VuZGlmCi0gICAgOwotCi1zdGF0aWMgY29uc3QgYm9vbCBjb25maWdfdWFmX2RldGVjdGlvbiA9 Ci0jaWYgZGVmaW5lZChKRU1BTExPQ19VQUZfREVURUNUSU9OKSB8fCBkZWZpbmVkKEpFTUFMTE9D X0RFQlVHKQotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNlbmRpZgotICAgIDsKLQotLyog V2hldGhlciBvciBub3QgdGhlIEMrKyBleHRlbnNpb25zIGFyZSBlbmFibGVkLiAqLwotc3RhdGlj IGNvbnN0IGJvb2wgY29uZmlnX2VuYWJsZV9jeHggPQotI2lmZGVmIEpFTUFMTE9DX0VOQUJMRV9D WFgKLSAgICB0cnVlCi0jZWxzZQotICAgIGZhbHNlCi0jZW5kaWYKLTsKLQotI2lmIGRlZmluZWQo X1dJTjMyKSB8fCBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfU0NIRURfR0VUQ1BVKQotLyogQ3VycmVu dGx5IHBlcmNwdV9hcmVuYSBkZXBlbmRzIG9uIHNjaGVkX2dldGNwdS4gKi8KLSNkZWZpbmUgSkVN QUxMT0NfUEVSQ1BVX0FSRU5BCi0jZW5kaWYKLXN0YXRpYyBjb25zdCBib29sIGhhdmVfcGVyY3B1 X2FyZW5hID0KLSNpZmRlZiBKRU1BTExPQ19QRVJDUFVfQVJFTkEKLSAgICB0cnVlCi0jZWxzZQot ICAgIGZhbHNlCi0jZW5kaWYKLSAgICA7Ci0vKgotICogVW5kb2N1bWVudGVkLCBhbmQgbm90IHJl Y29tbWVuZGVkOyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHRha2UgZnVsbAotICogcmVzcG9uc2li aWxpdHkgZm9yIHRyYWNraW5nIHByb3ZlbmFuY2UuCi0gKi8KLXN0YXRpYyBjb25zdCBib29sIGZv cmNlX2l2c2FsbG9jID0KLSNpZmRlZiBKRU1BTExPQ19GT1JDRV9JVlNBTExPQwotICAgIHRydWUK LSNlbHNlCi0gICAgZmFsc2UKLSNlbmRpZgotICAgIDsKLXN0YXRpYyBjb25zdCBib29sIGhhdmVf YmFja2dyb3VuZF90aHJlYWQgPQotI2lmZGVmIEpFTUFMTE9DX0JBQ0tHUk9VTkRfVEhSRUFECi0g ICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQotI2VuZGlmCi0gICAgOwotc3RhdGljIGNvbnN0IGJv b2wgY29uZmlnX2hpZ2hfcmVzX3RpbWVyID0KLSNpZmRlZiBKRU1BTExPQ19IQVZFX0NMT0NLX1JF QUxUSU1FCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQotI2VuZGlmCi0gICAgOwotCi1zdGF0 aWMgY29uc3QgYm9vbCBoYXZlX21lbWNudGwgPQotI2lmZGVmIEpFTUFMTE9DX0hBVkVfTUVNQ05U TAotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNlbmRpZgotICAgIDsKLQotI2VuZGlmIC8q IEpFTUFMTE9DX1BSRUFNQkxFX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2xhcmdlX2V4dGVy bnMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvbGFyZ2VfZXh0ZXJucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA4ZTA5MTIyLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbGFyZ2VfZXh0ZXJucy5oCisrKyAv ZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9MQVJH RV9FWFRFUk5TX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfTEFSR0VfRVhURVJOU19ICi0K LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ob29rLmgiCi0KLXZvaWQgKmxhcmdlX21hbGxv Yyh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBzaXplX3QgdXNpemUsIGJvb2wgemVybyk7 Ci12b2lkICpsYXJnZV9wYWxsb2ModHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6ZV90 IHVzaXplLCBzaXplX3QgYWxpZ25tZW50LAotICAgIGJvb2wgemVybyk7Ci1ib29sIGxhcmdlX3Jh bGxvY19ub19tb3ZlKHRzZG5fdCAqdHNkbiwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCB1c2l6ZV9t aW4sCi0gICAgc2l6ZV90IHVzaXplX21heCwgYm9vbCB6ZXJvKTsKLXZvaWQgKmxhcmdlX3JhbGxv Yyh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCB2b2lkICpwdHIsIHNpemVfdCB1c2l6ZSwK LSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sIHRjYWNoZV90ICp0Y2FjaGUsCi0gICAg aG9va19yYWxsb2NfYXJnc190ICpob29rX2FyZ3MpOwotCi12b2lkIGxhcmdlX2RhbGxvY19wcmVw X2xvY2tlZCh0c2RuX3QgKnRzZG4sIGVkYXRhX3QgKmVkYXRhKTsKLXZvaWQgbGFyZ2VfZGFsbG9j X2ZpbmlzaCh0c2RuX3QgKnRzZG4sIGVkYXRhX3QgKmVkYXRhKTsKLXZvaWQgbGFyZ2VfZGFsbG9j KHRzZG5fdCAqdHNkbiwgZWRhdGFfdCAqZWRhdGEpOwotc2l6ZV90IGxhcmdlX3NhbGxvYyh0c2Ru X3QgKnRzZG4sIGNvbnN0IGVkYXRhX3QgKmVkYXRhKTsKLXZvaWQgbGFyZ2VfcHJvZl9pbmZvX2dl dCh0c2RfdCAqdHNkLCBlZGF0YV90ICplZGF0YSwgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbywKLSAg ICBib29sIHJlc2V0X3JlY2VudCk7Ci12b2lkIGxhcmdlX3Byb2ZfdGN0eF9yZXNldChlZGF0YV90 ICplZGF0YSk7Ci12b2lkIGxhcmdlX3Byb2ZfaW5mb19zZXQoZWRhdGFfdCAqZWRhdGEsIHByb2Zf dGN0eF90ICp0Y3R4LCBzaXplX3Qgc2l6ZSk7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5B TF9MQVJHRV9FWFRFUk5TX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2xvY2tlZGludC5oIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9sb2NrZWRpbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyMGVi ZS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2xvY2tlZGludC5oCisrKyAvZGV2L251bGwKQEAgLTEs MjA0ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfTE9DS0VESU5UX0gKLSNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfTE9DS0VESU5UX0gKLQotLyoKLSAqIEluIHRob3NlIGFyY2hp dGVjdHVyZXMgdGhhdCBzdXBwb3J0IDY0LWJpdCBhdG9taWNzLCB3ZSB1c2UgYXRvbWljIHVwZGF0 ZXMgZm9yCi0gKiBvdXIgNjQtYml0IHZhbHVlcy4gIE90aGVyd2lzZSwgd2UgdXNlIGEgcGxhaW4g dWludDY0X3QgYW5kIHN5bmNocm9uaXplCi0gKiBleHRlcm5hbGx5LgotICovCi0KLXR5cGVkZWYg c3RydWN0IGxvY2tlZF91NjRfcyBsb2NrZWRfdTY0X3Q7Ci0jaWZkZWYgSkVNQUxMT0NfQVRPTUlD X1U2NAotc3RydWN0IGxvY2tlZF91NjRfcyB7Ci0JYXRvbWljX3U2NF90IHZhbDsKLX07Ci0jZWxz ZQotLyogTXVzdCBob2xkIHRoZSBhc3NvY2lhdGVkIG11dGV4LiAqLwotc3RydWN0IGxvY2tlZF91 NjRfcyB7Ci0JdWludDY0X3QgdmFsOwotfTsKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBsb2Nr ZWRfenVfcyBsb2NrZWRfenVfdDsKLXN0cnVjdCBsb2NrZWRfenVfcyB7Ci0JYXRvbWljX3p1X3Qg dmFsOwotfTsKLQotI2lmbmRlZiBKRU1BTExPQ19BVE9NSUNfVTY0Ci0jICBkZWZpbmUgTE9DS0VE SU5UX01UWF9ERUNMQVJFKG5hbWUpIG1hbGxvY19tdXRleF90IG5hbWU7Ci0jICBkZWZpbmUgTE9D S0VESU5UX01UWF9JTklUKG11LCBuYW1lLCByYW5rLCByYW5rX21vZGUpCQkJXAotICAgIG1hbGxv Y19tdXRleF9pbml0KCYobXUpLCBuYW1lLCByYW5rLCByYW5rX21vZGUpCi0jICBkZWZpbmUgTE9D S0VESU5UX01UWChtdHgpICgmKG10eCkpCi0jICBkZWZpbmUgTE9DS0VESU5UX01UWF9MT0NLKHRz ZG4sIG11KSBtYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmKG11KSkKLSMgIGRlZmluZSBMT0NLRURJ TlRfTVRYX1VOTE9DSyh0c2RuLCBtdSkgbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmKG11KSkK LSMgIGRlZmluZSBMT0NLRURJTlRfTVRYX1BSRUZPUksodHNkbiwgbXUpIG1hbGxvY19tdXRleF9w cmVmb3JrKHRzZG4sICYobXUpKQotIyAgZGVmaW5lIExPQ0tFRElOVF9NVFhfUE9TVEZPUktfUEFS RU5UKHRzZG4sIG11KQkJCVwKLSAgICBtYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4s ICYobXUpKQotIyAgZGVmaW5lIExPQ0tFRElOVF9NVFhfUE9TVEZPUktfQ0hJTEQodHNkbiwgbXUp CQkJXAotICAgIG1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmKG11KSkKLSNlbHNl Ci0jICBkZWZpbmUgTE9DS0VESU5UX01UWF9ERUNMQVJFKG5hbWUpCi0jICBkZWZpbmUgTE9DS0VE SU5UX01UWChtdHgpIE5VTEwKLSMgIGRlZmluZSBMT0NLRURJTlRfTVRYX0lOSVQobXUsIG5hbWUs IHJhbmssIHJhbmtfbW9kZSkgZmFsc2UKLSMgIGRlZmluZSBMT0NLRURJTlRfTVRYX0xPQ0sodHNk biwgbXUpCi0jICBkZWZpbmUgTE9DS0VESU5UX01UWF9VTkxPQ0sodHNkbiwgbXUpCi0jICBkZWZp bmUgTE9DS0VESU5UX01UWF9QUkVGT1JLKHRzZG4sIG11KQotIyAgZGVmaW5lIExPQ0tFRElOVF9N VFhfUE9TVEZPUktfUEFSRU5UKHRzZG4sIG11KQotIyAgZGVmaW5lIExPQ0tFRElOVF9NVFhfUE9T VEZPUktfQ0hJTEQodHNkbiwgbXUpCi0jZW5kaWYKLQotI2lmZGVmIEpFTUFMTE9DX0FUT01JQ19V NjQKLSMgIGRlZmluZSBMT0NLRURJTlRfTVRYX0FTU0VSVF9JTlRFUk5BTCh0c2RuLCBtdHgpIGFz c2VydCgobXR4KSA9PSBOVUxMKQotI2Vsc2UKLSMgIGRlZmluZSBMT0NLRURJTlRfTVRYX0FTU0VS VF9JTlRFUk5BTCh0c2RuLCBtdHgpCQkJXAotICAgIG1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIo dHNkbiwgKG10eCkpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1aW50NjRfdAotbG9ja2VkX3Jl YWRfdTY0KHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4X3QgKm10eCwgbG9ja2VkX3U2NF90ICpw KSB7Ci0JTE9DS0VESU5UX01UWF9BU1NFUlRfSU5URVJOQUwodHNkbiwgbXR4KTsKLSNpZmRlZiBK RU1BTExPQ19BVE9NSUNfVTY0Ci0JcmV0dXJuIGF0b21pY19sb2FkX3U2NCgmcC0+dmFsLCBBVE9N SUNfUkVMQVhFRCk7Ci0jZWxzZQotCXJldHVybiBwLT52YWw7Ci0jZW5kaWYKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkCi1sb2NrZWRfaW5jX3U2NCh0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90 ICptdHgsIGxvY2tlZF91NjRfdCAqcCwKLSAgICB1aW50NjRfdCB4KSB7Ci0JTE9DS0VESU5UX01U WF9BU1NFUlRfSU5URVJOQUwodHNkbiwgbXR4KTsKLSNpZmRlZiBKRU1BTExPQ19BVE9NSUNfVTY0 Ci0JYXRvbWljX2ZldGNoX2FkZF91NjQoJnAtPnZhbCwgeCwgQVRPTUlDX1JFTEFYRUQpOwotI2Vs c2UKLQlwLT52YWwgKz0geDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWxvY2tl ZF9kZWNfdTY0KHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4X3QgKm10eCwgbG9ja2VkX3U2NF90 ICpwLAotICAgIHVpbnQ2NF90IHgpIHsKLQlMT0NLRURJTlRfTVRYX0FTU0VSVF9JTlRFUk5BTCh0 c2RuLCBtdHgpOwotI2lmZGVmIEpFTUFMTE9DX0FUT01JQ19VNjQKLQl1aW50NjRfdCByID0gYXRv bWljX2ZldGNoX3N1Yl91NjQoJnAtPnZhbCwgeCwgQVRPTUlDX1JFTEFYRUQpOwotCWFzc2VydChy IC0geCA8PSByKTsKLSNlbHNlCi0JcC0+dmFsIC09IHg7Ci0JYXNzZXJ0KHAtPnZhbCArIHggPj0g cC0+dmFsKTsKLSNlbmRpZgotfQotCi0vKiBJbmNyZW1lbnQgYW5kIHRha2UgbW9kdWx1cy4gIFJl dHVybnMgd2hldGhlciB0aGUgbW9kdWxvIG1hZGUgYW55IGNoYW5nZS4gICovCi1zdGF0aWMgaW5s aW5lIGJvb2wKLWxvY2tlZF9pbmNfbW9kX3U2NCh0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90 ICptdHgsIGxvY2tlZF91NjRfdCAqcCwKLSAgICBjb25zdCB1aW50NjRfdCB4LCBjb25zdCB1aW50 NjRfdCBtb2R1bHVzKSB7Ci0JTE9DS0VESU5UX01UWF9BU1NFUlRfSU5URVJOQUwodHNkbiwgbXR4 KTsKLQl1aW50NjRfdCBiZWZvcmUsIGFmdGVyOwotCWJvb2wgb3ZlcmZsb3c7Ci0jaWZkZWYgSkVN QUxMT0NfQVRPTUlDX1U2NAotCWJlZm9yZSA9IGF0b21pY19sb2FkX3U2NCgmcC0+dmFsLCBBVE9N SUNfUkVMQVhFRCk7Ci0JZG8gewotCQlhZnRlciA9IGJlZm9yZSArIHg7Ci0JCWFzc2VydChhZnRl ciA+PSBiZWZvcmUpOwotCQlvdmVyZmxvdyA9IChhZnRlciA+PSBtb2R1bHVzKTsKLQkJaWYgKG92 ZXJmbG93KSB7Ci0JCQlhZnRlciAlPSBtb2R1bHVzOwotCQl9Ci0JfSB3aGlsZSAoIWF0b21pY19j b21wYXJlX2V4Y2hhbmdlX3dlYWtfdTY0KCZwLT52YWwsICZiZWZvcmUsIGFmdGVyLAotCSAgICBB VE9NSUNfUkVMQVhFRCwgQVRPTUlDX1JFTEFYRUQpKTsKLSNlbHNlCi0JYmVmb3JlID0gcC0+dmFs OwotCWFmdGVyID0gYmVmb3JlICsgeDsKLQlvdmVyZmxvdyA9IChhZnRlciA+PSBtb2R1bHVzKTsK LQlpZiAob3ZlcmZsb3cpIHsKLQkJYWZ0ZXIgJT0gbW9kdWx1czsKLQl9Ci0JcC0+dmFsID0gYWZ0 ZXI7Ci0jZW5kaWYKLQlyZXR1cm4gb3ZlcmZsb3c7Ci19Ci0KLS8qCi0gKiBOb24tYXRvbWljYWxs eSBzZXRzICpkc3QgKz0gc3JjLiAgKmRzdCBuZWVkcyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24u Ci0gKiBUaGlzIGxldHMgdXMgYXZvaWQgdGhlIGNvc3Qgb2YgYSBmZXRjaF9hZGQgd2hlbiBpdHMg dW5uZWNlc3NhcnkgKG5vdGUgdGhhdAotICogdGhlIHR5cGVzIGhlcmUgYXJlIGF0b21pYykuCi0g Ki8KLXN0YXRpYyBpbmxpbmUgdm9pZAotbG9ja2VkX2luY191NjRfdW5zeW5jaHJvbml6ZWQobG9j a2VkX3U2NF90ICpkc3QsIHVpbnQ2NF90IHNyYykgewotI2lmZGVmIEpFTUFMTE9DX0FUT01JQ19V NjQKLQl1aW50NjRfdCBjdXJfZHN0ID0gYXRvbWljX2xvYWRfdTY0KCZkc3QtPnZhbCwgQVRPTUlD X1JFTEFYRUQpOwotCWF0b21pY19zdG9yZV91NjQoJmRzdC0+dmFsLCBzcmMgKyBjdXJfZHN0LCBB VE9NSUNfUkVMQVhFRCk7Ci0jZWxzZQotCWRzdC0+dmFsICs9IHNyYzsKLSNlbmRpZgotfQotCi1z dGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1sb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQobG9j a2VkX3U2NF90ICpwKSB7Ci0jaWZkZWYgSkVNQUxMT0NfQVRPTUlDX1U2NAotCXJldHVybiBhdG9t aWNfbG9hZF91NjQoJnAtPnZhbCwgQVRPTUlDX1JFTEFYRUQpOwotI2Vsc2UKLQlyZXR1cm4gcC0+ dmFsOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbG9ja2VkX2luaXRfdTY0X3Vu c3luY2hyb25pemVkKGxvY2tlZF91NjRfdCAqcCwgdWludDY0X3QgeCkgewotI2lmZGVmIEpFTUFM TE9DX0FUT01JQ19VNjQKLQlhdG9taWNfc3RvcmVfdTY0KCZwLT52YWwsIHgsIEFUT01JQ19SRUxB WEVEKTsKLSNlbHNlCi0JcC0+dmFsID0geDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHNp emVfdAotbG9ja2VkX3JlYWRfenUodHNkbl90ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAqbXR4LCBs b2NrZWRfenVfdCAqcCkgewotCUxPQ0tFRElOVF9NVFhfQVNTRVJUX0lOVEVSTkFMKHRzZG4sIG10 eCk7Ci0jaWZkZWYgSkVNQUxMT0NfQVRPTUlDX1U2NAotCXJldHVybiBhdG9taWNfbG9hZF96dSgm cC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7Ci0jZWxzZQotCXJldHVybiBhdG9taWNfbG9hZF96dSgm cC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lk Ci1sb2NrZWRfaW5jX3p1KHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4X3QgKm10eCwgbG9ja2Vk X3p1X3QgKnAsCi0gICAgc2l6ZV90IHgpIHsKLQlMT0NLRURJTlRfTVRYX0FTU0VSVF9JTlRFUk5B TCh0c2RuLCBtdHgpOwotI2lmZGVmIEpFTUFMTE9DX0FUT01JQ19VNjQKLQlhdG9taWNfZmV0Y2hf YWRkX3p1KCZwLT52YWwsIHgsIEFUT01JQ19SRUxBWEVEKTsKLSNlbHNlCi0Jc2l6ZV90IGN1ciA9 IGF0b21pY19sb2FkX3p1KCZwLT52YWwsIEFUT01JQ19SRUxBWEVEKTsKLQlhdG9taWNfc3RvcmVf enUoJnAtPnZhbCwgY3VyICsgeCwgQVRPTUlDX1JFTEFYRUQpOwotI2VuZGlmCi19Ci0KLXN0YXRp YyBpbmxpbmUgdm9pZAotbG9ja2VkX2RlY196dSh0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90 ICptdHgsIGxvY2tlZF96dV90ICpwLAotICAgIHNpemVfdCB4KSB7Ci0JTE9DS0VESU5UX01UWF9B U1NFUlRfSU5URVJOQUwodHNkbiwgbXR4KTsKLSNpZmRlZiBKRU1BTExPQ19BVE9NSUNfVTY0Ci0J c2l6ZV90IHIgPSBhdG9taWNfZmV0Y2hfc3ViX3p1KCZwLT52YWwsIHgsIEFUT01JQ19SRUxBWEVE KTsKLQlhc3NlcnQociAtIHggPD0gcik7Ci0jZWxzZQotCXNpemVfdCBjdXIgPSBhdG9taWNfbG9h ZF96dSgmcC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7Ci0JYXRvbWljX3N0b3JlX3p1KCZwLT52YWws IGN1ciAtIHgsIEFUT01JQ19SRUxBWEVEKTsKLSNlbmRpZgotfQotCi0vKiBMaWtlIHRoZSBfdTY0 IHZhcmlhbnQsIG5lZWRzIGFuIGV4dGVybmFsbHkgc3luY2hyb25pemVkICpkc3QuICovCi1zdGF0 aWMgaW5saW5lIHZvaWQKLWxvY2tlZF9pbmNfenVfdW5zeW5jaHJvbml6ZWQobG9ja2VkX3p1X3Qg KmRzdCwgc2l6ZV90IHNyYykgewotCXNpemVfdCBjdXJfZHN0ID0gYXRvbWljX2xvYWRfenUoJmRz dC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7Ci0JYXRvbWljX3N0b3JlX3p1KCZkc3QtPnZhbCwgc3Jj ICsgY3VyX2RzdCwgQVRPTUlDX1JFTEFYRUQpOwotfQotCi0vKgotICogVW5saWtlIHRoZSBfdTY0 IHZhcmlhbnQsIHRoaXMgaXMgc2FmZSB0byBjYWxsIHVuY29uZGl0aW9uYWxseS4KLSAqLwotc3Rh dGljIGlubGluZSBzaXplX3QKLWxvY2tlZF9yZWFkX2F0b21pY196dShsb2NrZWRfenVfdCAqcCkg ewotCXJldHVybiBhdG9taWNfbG9hZF96dSgmcC0+dmFsLCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0K LSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9MT0NLRURJTlRfSCAqLwoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvbG9nLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL2xvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA2NDIwODU4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbG9nLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxMTUgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9MT0dfSAotI2RlZmlu ZSBKRU1BTExPQ19JTlRFUk5BTF9MT0dfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv YXRvbWljLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbWFsbG9jX2lvLmgiCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKLQotI2lmZGVmIEpFTUFMTE9DX0xPRwot IyAgZGVmaW5lIEpFTUFMTE9DX0xPR19WQVJfQlVGU0laRSAxMDAwCi0jZWxzZQotIyAgZGVmaW5l IEpFTUFMTE9DX0xPR19WQVJfQlVGU0laRSAxCi0jZW5kaWYKLQotI2RlZmluZSBKRU1BTExPQ19M T0dfQlVGU0laRSA0MDk2Ci0KLS8qCi0gKiBUaGUgbG9nIG1hbGxvY19jb25mIG9wdGlvbiBpcyBh ICd8Jy1kZWxpbWl0ZWQgbGlzdCBvZiBsb2dfdmFyIG5hbWUgc2VnbWVudHMKLSAqIHdoaWNoIHNo b3VsZCBiZSBsb2dnZWQuICBUaGUgbmFtZXMgYXJlIHRoZW1zZWx2ZXMgaGllcmFyY2hpY2FsLCB3 aXRoICcuJyBhcwotICogdGhlIGRlbGltaXRlciAoYSAic2VnbWVudCIgaXMganVzdCBhIHByZWZp eCBpbiB0aGUgbG9nIG5hbWVzcGFjZSkuICBTbywgaWYKLSAqIHlvdSBoYXZlOgotICoKLSAqIGxv ZygiYXJlbmEiLCAibG9nIG1zZyBmb3IgYXJlbmEiKTsgLy8gMQotICogbG9nKCJhcmVuYS5hIiwg ImxvZyBtc2cgZm9yIGFyZW5hLmEiKTsgLy8gMgotICogbG9nKCJhcmVuYS5iIiwgImxvZyBtc2cg Zm9yIGFyZW5hLmIiKTsgLy8gMwotICogbG9nKCJhcmVuYS5hLmEiLCAibG9nIG1zZyBmb3IgYXJl bmEuYS5hIik7IC8vIDQKLSAqIGxvZygiZXh0ZW50LmEiLCAibG9nIG1zZyBmb3IgZXh0ZW50LmEi KTsgLy8gNQotICogbG9nKCJleHRlbnQuYiIsICJsb2cgbXNnIGZvciBleHRlbnQuYiIpOyAvLyA2 Ci0gKgotICogQW5kIHlvdXIgbWFsbG9jX2NvbmYgb3B0aW9uIGlzICJsb2c9YXJlbmEuYXxleHRl bnQiLCB0aGVuIGxpbmVzIDIsIDQsIDUsIGFuZAotICogNiB3aWxsIHByaW50IGF0IHJ1bnRpbWUu ICBZb3UgY2FuIGVuYWJsZSBsb2dnaW5nIGZyb20gYWxsIGxvZyB2YXJzIGJ5Ci0gKiB3cml0aW5n ICJsb2c9LiIuCi0gKgotICogTm9uZSBvZiB0aGlzIHNob3VsZCBiZSByZWdhcmRlZCBhcyBhIHN0 YWJsZSBBUEkgZm9yIHJpZ2h0IG5vdy4gIEl0J3MgaW50ZW5kZWQKLSAqIGFzIGEgZGVidWdnaW5n IGludGVyZmFjZSwgdG8gbGV0IHVzIGtlZXAgYXJvdW5kIHNvbWUgb2Ygb3VyIHByaW50Zi1kZWJ1 Z2dpbmcKLSAqIHN0YXRlbWVudHMuCi0gKi8KLQotZXh0ZXJuIGNoYXIgbG9nX3Zhcl9uYW1lc1tK RU1BTExPQ19MT0dfVkFSX0JVRlNJWkVdOwotZXh0ZXJuIGF0b21pY19iX3QgbG9nX2luaXRfZG9u ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgbG9nX3Zhcl9zIGxvZ192YXJfdDsKLXN0cnVjdCBsb2dfdmFy X3MgewotCS8qCi0JICogTG93ZXN0IGJpdCBpcyAiaW5pdGVkIiwgc2Vjb25kIGxvd2VzdCBpcyAi ZW5hYmxlZCIuICBQdXR0aW5nIHRoZW0gaW4KLQkgKiBhIHNpbmdsZSB3b3JkIGxldHMgdXMgYXZv aWQgYW55IGZlbmNlcyBvbiB3ZWFrIGFyY2hpdGVjdHVyZXMuCi0JICovCi0JYXRvbWljX3VfdCBz dGF0ZTsKLQljb25zdCBjaGFyICpuYW1lOwotfTsKLQotI2RlZmluZSBMT0dfTk9UX0lOSVRJQUxJ WkVEIDBVCi0jZGVmaW5lIExPR19JTklUSUFMSVpFRF9OT1RfRU5BQkxFRCAxVQotI2RlZmluZSBM T0dfRU5BQkxFRCAyVQotCi0jZGVmaW5lIExPR19WQVJfSU5JVChuYW1lX3N0cikge0FUT01JQ19J TklUKExPR19OT1RfSU5JVElBTElaRUQpLCBuYW1lX3N0cn0KLQotLyoKLSAqIFJldHVybnMgdGhl IHZhbHVlIHdlIHNob3VsZCBhc3N1bWUgZm9yIHN0YXRlICh3aGljaCBpcyBub3QgbmVjZXNzYXJp bHkKLSAqIGFjY3VyYXRlOyBpZiBsb2dnaW5nIGlzIGRvbmUgYmVmb3JlIGxvZ2dpbmcgaGFzIGZp bmlzaGVkIGluaXRpYWxpemluZywgdGhlbgotICogd2UgZGVmYXVsdCB0byBkb2luZyB0aGUgc2Fm ZSB0aGluZyBieSBsb2dnaW5nIGV2ZXJ5dGhpbmcpLgotICovCi11bnNpZ25lZCBsb2dfdmFyX3Vw ZGF0ZV9zdGF0ZShsb2dfdmFyX3QgKmxvZ192YXIpOwotCi0vKiBXZSBmYWN0b3Igb3V0IHRoZSBt ZXRhZGF0YSBtYW5hZ2VtZW50IHRvIGFsbG93IHVzIHRvIHRlc3QgbW9yZSBlYXNpbHkuICovCi0j ZGVmaW5lIGxvZ19kb19iZWdpbihsb2dfdmFyKQkJCQkJCVwKLWlmIChjb25maWdfbG9nKSB7CQkJ CQkJCVwKLQl1bnNpZ25lZCBsb2dfc3RhdGUgPSBhdG9taWNfbG9hZF91KCYobG9nX3Zhcikuc3Rh dGUsCQlcCi0JICAgIEFUT01JQ19SRUxBWEVEKTsJCQkJCQlcCi0JaWYgKHVubGlrZWx5KGxvZ19z dGF0ZSA9PSBMT0dfTk9UX0lOSVRJQUxJWkVEKSkgewkJXAotCQlsb2dfc3RhdGUgPSBsb2dfdmFy X3VwZGF0ZV9zdGF0ZSgmKGxvZ192YXIpKTsJCVwKLQkJYXNzZXJ0KGxvZ19zdGF0ZSAhPSBMT0df Tk9UX0lOSVRJQUxJWkVEKTsJCVwKLQl9CQkJCQkJCQlcCi0JaWYgKGxvZ19zdGF0ZSA9PSBMT0df RU5BQkxFRCkgewkJCQkJXAotCQl7Ci0JCQkvKiBVc2VyIGNvZGUgZXhlY3V0ZXMgaGVyZS4gKi8K LSNkZWZpbmUgbG9nX2RvX2VuZChsb2dfdmFyKQkJCQkJCVwKLQkJfQkJCQkJCQlcCi0JfQkJCQkJ CQkJXAotfQotCi0vKgotICogTVNWQyBoYXMgc29tZSBwcmVwcm9jZXNzb3IgYnVncyBpbiBpdHMg ZXhwYW5zaW9uIG9mIF9fVkFfQVJHU19fIGR1cmluZwotICogcHJlcHJvY2Vzc2luZy4gIFRvIHdv cmsgYXJvdW5kIHRoaXMsIHdlIHRha2UgYWxsIHBvdGVudGlhbCBleHRyYSBhcmd1bWVudHMgaW4K LSAqIGEgdmFyLWFyZ3MgZnVuY3Rpb25zLiAgU2luY2UgYSB2YXJhcmdzIG1hY3JvIG5lZWRzIGF0 IGxlYXN0IG9uZSBhcmd1bWVudCBpbgotICogdGhlICIuLi4iLCB3ZSBhY2NlcHQgdGhlIGZvcm1h dCBzdHJpbmcgdGhlcmUsIGFuZCByZXF1aXJlIHRoYXQgdGhlIGZpcnN0Ci0gKiBhcmd1bWVudCBp biB0aGlzICIuLi4iIGlzIGEgY29uc3QgY2hhciAqLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQK LWxvZ19pbXBsX3ZhcmFyZ3MoY29uc3QgY2hhciAqbmFtZSwgLi4uKSB7Ci0JY2hhciBidWZbSkVN QUxMT0NfTE9HX0JVRlNJWkVdOwotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgbmFtZSk7 Ci0JY29uc3QgY2hhciAqZm9ybWF0ID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopOwotCXNpemVf dCBkc3Rfb2Zmc2V0ID0gMDsKLQlkc3Rfb2Zmc2V0ICs9IG1hbGxvY19zbnByaW50ZihidWYsIEpF TUFMTE9DX0xPR19CVUZTSVpFLCAiJXM6ICIsIG5hbWUpOwotCWRzdF9vZmZzZXQgKz0gbWFsbG9j X3ZzbnByaW50ZihidWYgKyBkc3Rfb2Zmc2V0LAotCSAgICBKRU1BTExPQ19MT0dfQlVGU0laRSAt IGRzdF9vZmZzZXQsIGZvcm1hdCwgYXApOwotCWRzdF9vZmZzZXQgKz0gbWFsbG9jX3NucHJpbnRm KGJ1ZiArIGRzdF9vZmZzZXQsCi0JICAgIEpFTUFMTE9DX0xPR19CVUZTSVpFIC0gZHN0X29mZnNl dCwgIlxuIik7Ci0JdmFfZW5kKGFwKTsKLQotCW1hbGxvY193cml0ZShidWYpOwotfQotCi0vKiBD YWxsIGFzIGxvZygibG9nLnZhci5zdHIiLCAiZm9ybWF0X3N0cmluZyAlZCIsIGFyZ19mb3JfZm9y bWF0X3N0cmluZyk7ICovCi0jZGVmaW5lIExPRyhsb2dfdmFyX3N0ciwgLi4uKQkJCQkJCVwKLWRv IHsJCQkJCQkJCQlcCi0Jc3RhdGljIGxvZ192YXJfdCBsb2dfdmFyID0gTE9HX1ZBUl9JTklUKGxv Z192YXJfc3RyKTsJCVwKLQlsb2dfZG9fYmVnaW4obG9nX3ZhcikJCQkJCQlcCi0JCWxvZ19pbXBs X3ZhcmFyZ3MoKGxvZ192YXIpLm5hbWUsIF9fVkFfQVJHU19fKTsJCVwKLQlsb2dfZG9fZW5kKGxv Z192YXIpCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X0xPR19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbWFs bG9jX2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzViZGEuLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBA Ci0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX01BTExPQ19JT19ICi0jZGVmaW5lIEpFTUFMTE9D X0lOVEVSTkFMX01BTExPQ19JT19ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF90eXBlcy5oIgotCi0jaWZkZWYgX1dJTjMyCi0jICBpZmRlZiBfV0lONjQK LSMgICAgZGVmaW5lIEZNVDY0X1BSRUZJWCAibGwiCi0jICAgIGRlZmluZSBGTVRQVFJfUFJFRklY ICJsbCIKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEZNVDY0X1BSRUZJWCAibGwiCi0jICAgIGRlZmlu ZSBGTVRQVFJfUFJFRklYICIiCi0jICBlbmRpZgotIyAgZGVmaW5lIEZNVGQzMiAiZCIKLSMgIGRl ZmluZSBGTVR1MzIgInUiCi0jICBkZWZpbmUgRk1UeDMyICJ4IgotIyAgZGVmaW5lIEZNVGQ2NCBG TVQ2NF9QUkVGSVggImQiCi0jICBkZWZpbmUgRk1UdTY0IEZNVDY0X1BSRUZJWCAidSIKLSMgIGRl ZmluZSBGTVR4NjQgRk1UNjRfUFJFRklYICJ4IgotIyAgZGVmaW5lIEZNVGRQVFIgRk1UUFRSX1BS RUZJWCAiZCIKLSMgIGRlZmluZSBGTVR1UFRSIEZNVFBUUl9QUkVGSVggInUiCi0jICBkZWZpbmUg Rk1UeFBUUiBGTVRQVFJfUFJFRklYICJ4IgotI2Vsc2UKLSMgIGluY2x1ZGUgPGludHR5cGVzLmg+ Ci0jICBkZWZpbmUgRk1UZDMyIFBSSWQzMgotIyAgZGVmaW5lIEZNVHUzMiBQUkl1MzIKLSMgIGRl ZmluZSBGTVR4MzIgUFJJeDMyCi0jICBkZWZpbmUgRk1UZDY0IFBSSWQ2NAotIyAgZGVmaW5lIEZN VHU2NCBQUkl1NjQKLSMgIGRlZmluZSBGTVR4NjQgUFJJeDY0Ci0jICBkZWZpbmUgRk1UZFBUUiBQ UklkUFRSCi0jICBkZWZpbmUgRk1UdVBUUiBQUkl1UFRSCi0jICBkZWZpbmUgRk1UeFBUUiBQUkl4 UFRSCi0jZW5kaWYKLQotLyogU2l6ZSBvZiBzdGFjay1hbGxvY2F0ZWQgYnVmZmVyIHBhc3NlZCB0 byBidWZlcnJvcigpLiAqLwotI2RlZmluZSBCVUZFUlJPUl9CVUYJCTY0Ci0KLS8qCi0gKiBTaXpl IG9mIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIgdXNlZCBieSBtYWxsb2Nfeyx2LHZjfXByaW50Zigp LiAgVGhpcyBtdXN0IGJlCi0gKiBsYXJnZSBlbm91Z2ggZm9yIGFsbCBwb3NzaWJsZSB1c2VzIHdp dGhpbiBqZW1hbGxvYy4KLSAqLwotI2RlZmluZSBNQUxMT0NfUFJJTlRGX0JVRlNJWkUJNDA5Ngot Ci13cml0ZV9jYl90IHdydG1lc3NhZ2U7Ci1pbnQgYnVmZXJyb3IoaW50IGVyciwgY2hhciAqYnVm LCBzaXplX3QgYnVmbGVuKTsKLXVpbnRtYXhfdCBtYWxsb2Nfc3RydG91bWF4KGNvbnN0IGNoYXIg KnJlc3RyaWN0IG5wdHIsIGNoYXIgKipyZXN0cmljdCBlbmRwdHIsCi0gICAgaW50IGJhc2UpOwot dm9pZCBtYWxsb2Nfd3JpdGUoY29uc3QgY2hhciAqcyk7Ci0KLS8qCi0gKiBtYWxsb2NfdnNucHJp bnRmKCkgc3VwcG9ydHMgYSBzdWJzZXQgb2Ygc25wcmludGYoMykgdGhhdCBhdm9pZHMgZmxvYXRp bmcKLSAqIHBvaW50IG1hdGguCi0gKi8KLXNpemVfdCBtYWxsb2NfdnNucHJpbnRmKGNoYXIgKnN0 ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICB2YV9saXN0IGFwKTsKLXNp emVfdCBtYWxsb2Nfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAq Zm9ybWF0LCAuLi4pCi0gICAgSkVNQUxMT0NfRk9STUFUX1BSSU5URigzLCA0KTsKLS8qCi0gKiBU aGUgY2FsbGVyIGNhbiBzZXQgd3JpdGVfY2IgdG8gbnVsbCB0byBjaG9vc2UgdG8gcHJpbnQgd2l0 aCB0aGUKLSAqIGplX21hbGxvY19tZXNzYWdlIGhvb2suCi0gKi8KLXZvaWQgbWFsbG9jX3ZjcHJp bnRmKHdyaXRlX2NiX3QgKndyaXRlX2NiLCB2b2lkICpjYm9wYXF1ZSwgY29uc3QgY2hhciAqZm9y bWF0LAotICAgIHZhX2xpc3QgYXApOwotdm9pZCBtYWxsb2NfY3ByaW50Zih3cml0ZV9jYl90ICp3 cml0ZV9jYiwgdm9pZCAqY2JvcGFxdWUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAuLi4pIEpF TUFMTE9DX0ZPUk1BVF9QUklOVEYoMywgNCk7Ci12b2lkIG1hbGxvY19wcmludGYoY29uc3QgY2hh ciAqZm9ybWF0LCAuLi4pIEpFTUFMTE9DX0ZPUk1BVF9QUklOVEYoMSwgMik7Ci0KLXN0YXRpYyBp bmxpbmUgc3NpemVfdAotbWFsbG9jX3dyaXRlX2ZkKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBz aXplX3QgY291bnQpIHsKLSNpZiBkZWZpbmVkKEpFTUFMTE9DX1VTRV9TWVNDQUxMKSAmJiBkZWZp bmVkKFNZU193cml0ZSkKLQkvKgotCSAqIFVzZSBzeXNjYWxsKDIpIHJhdGhlciB0aGFuIHdyaXRl KDIpIHdoZW4gcG9zc2libGUgaW4gb3JkZXIgdG8gYXZvaWQKLQkgKiB0aGUgcG9zc2liaWxpdHkg b2YgbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIGxpYmMuICBUaGlzIGlzIG5lY2Vzc2FyeQotCSAq IG9uIEZyZWVCU0Q7IG1vc3Qgb3BlcmF0aW5nIHN5c3RlbXMgZG8gbm90IGhhdmUgdGhpcyBwcm9i bGVtIHRob3VnaC4KLQkgKgotCSAqIHN5c2NhbGwoKSByZXR1cm5zIGxvbmcgb3IgaW50LCBkZXBl bmRpbmcgb24gcGxhdGZvcm0sIHNvIGNhcHR1cmUgdGhlCi0JICogcmVzdWx0IGluIHRoZSB3aWRl c3QgcGxhdXNpYmxlIHR5cGUgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCi0JICovCi0JbG9u ZyByZXN1bHQgPSBzeXNjYWxsKFNZU193cml0ZSwgZmQsIGJ1ZiwgY291bnQpOwotI2Vsc2UKLQlz c2l6ZV90IHJlc3VsdCA9IChzc2l6ZV90KXdyaXRlKGZkLCBidWYsCi0jaWZkZWYgX1dJTjMyCi0J ICAgICh1bnNpZ25lZCBpbnQpCi0jZW5kaWYKLQkgICAgY291bnQpOwotI2VuZGlmCi0JcmV0dXJu IChzc2l6ZV90KXJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90Ci1tYWxsb2NfcmVh ZF9mZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KSB7Ci0jaWYgZGVmaW5lZChKRU1B TExPQ19VU0VfU1lTQ0FMTCkgJiYgZGVmaW5lZChTWVNfcmVhZCkKLQlsb25nIHJlc3VsdCA9IHN5 c2NhbGwoU1lTX3JlYWQsIGZkLCBidWYsIGNvdW50KTsKLSNlbHNlCi0Jc3NpemVfdCByZXN1bHQg PSByZWFkKGZkLCBidWYsCi0jaWZkZWYgX1dJTjMyCi0JICAgICh1bnNpZ25lZCBpbnQpCi0jZW5k aWYKLQkgICAgY291bnQpOwotI2VuZGlmCi0JcmV0dXJuIChzc2l6ZV90KXJlc3VsdDsKLX0KLQot I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX01BTExPQ19JT19IICovCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC9tcHNjX3F1ZXVlLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL21wc2NfcXVldWUuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMzE2ZWE5Yi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL21wc2NfcXVl dWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lO VEVSTkFMX01QU0NfUVVFVUVfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9NUFNDX1FVRVVF X0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgotCi0vKgotICogQSBj b25jdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGEgbXVsdGktcHJvZHVjZXIsIHNpbmdsZS1jb25z dW1lciBxdWV1ZS4gIEl0Ci0gKiBzdXBwb3J0cyB0aHJlZSBjb25jdXJyZW50IG9wZXJhdGlvbnM6 Ci0gKiAtIFB1c2gKLSAqIC0gUHVzaCBiYXRjaAotICogLSBQb3AgYmF0Y2gKLSAqCi0gKiBUaGVz ZSBvcGVyYXRpb25zIGFyZSBhbGwgbG9jay1mcmVlLgotICoKLSAqIFRoZSBpbXBsZW1lbnRhdGlv biBpcyB0aGUgc2ltcGxlIHR3by1zdGFjayBxdWV1ZSBidWlsdCBvbiBhIFRyZWliZXIgc3RhY2su Ci0gKiBJdCdzIG5vdCB0ZXJyaWJseSBlZmZpY2llbnQsIGJ1dCB0aGlzIGlzbid0IGV4cGVjdGVk IHRvIGdvIGludG8gYW55d2hlcmUgd2l0aAotICogaG90IGNvZGUuICBJbiBmYWN0LCB3ZSBkb24n dCByZWFsbHkgZXZlbiBuZWVkIHF1ZXVlIHNlbWFudGljcyBpbiBhbnkKLSAqIGFudGljaXBhdGVk IHVzZSBjYXNlczsgd2UgY291bGQgZ2V0IGF3YXkgd2l0aCBqdXN0IHRoZSBzdGFjay4gIEJ1dCB0 aGlzIHdheQotICogbGV0cyB1cyBmcmFtZSB0aGUgQVBJIGluIHRlcm1zIG9mIHRoZSBleGlzdGlu ZyBsaXN0IHR5cGVzLCB3aGljaCBpcyBhIG5pY2UKLSAqIGNvbnZlbmllbmNlLiAgV2UgY2FuIHNh dmUgb24gY2FjaGUgbWlzc2VzIGJ5IGludHJvZHVjaW5nIG91ciBvd24gKHBhcmFsbGVsKQotICog c2luZ2xlLWxpbmtlZCBsaXN0IHR5cGUgaGVyZSwgYW5kIGRyb3BwaW5nIEZJRk8gc2VtYW50aWNz LCBpZiB3ZSBuZWVkIHRoaXMgdG8KLSAqIGdldCBmYXN0ZXIuICBTaW5jZSB3ZSdyZSBjdXJyZW50 bHkgcHJvdmlkaW5nIHF1ZXVlIHNlbWFudGljcyB0aG91Z2gsIHdlIHVzZQotICogdGhlIHByZXYg ZmllbGQgaW4gdGhlIGxpbmsgcmF0aGVyIHRoYW4gdGhlIG5leHQgZmllbGQgZm9yIFRyZWliZXIt c3RhY2sKLSAqIGxpbmthZ2UsIHNvIHRoYXQgd2UgY2FuIHByZXNlcnZlIG9yZGVyIGZvciBiYXNo LXB1c2hlZCBsaXN0cyAocmVjYWxsIHRoYXQgdGhlCi0gKiB0d28tc3RhY2sgdHJpY2tzIHJldmVy c2VzIG9yZGVycyBpbiB0aGUgbG9jay1mcmVlIGZpcnN0IHN0YWNrKS4KLSAqLwotCi0jZGVmaW5l IG1wc2NfcXVldWUoYV90eXBlKQkJCQkJCVwKLXN0cnVjdCB7CQkJCQkJCQlcCi0JYXRvbWljX3Bf dCB0YWlsOwkJCQkJCVwKLX0KLQotI2RlZmluZSBtcHNjX3F1ZXVlX3Byb3RvKGFfYXR0ciwgYV9w cmVmaXgsIGFfcXVldWVfdHlwZSwgYV90eXBlLAlcCi0gICAgYV9saXN0X3R5cGUpCQkJCQkJCVwK LS8qIEluaXRpYWxpemUgYSBxdWV1ZS4gKi8JCQkJCQlcCi1hX2F0dHIgdm9pZAkJCQkJCQkJXAot YV9wcmVmaXgjI25ldyhhX3F1ZXVlX3R5cGUgKnF1ZXVlKTsJCQkJCVwKLS8qIEluc2VydCBhbGwg aXRlbXMgaW4gc3JjIGludG8gdGhlIHF1ZXVlLCBjbGVhcmluZyBzcmMuICovCQlcCi1hX2F0dHIg dm9pZAkJCQkJCQkJXAotYV9wcmVmaXgjI3B1c2hfYmF0Y2goYV9xdWV1ZV90eXBlICpxdWV1ZSwg YV9saXN0X3R5cGUgKnNyYyk7CQlcCi0vKiBJbnNlcnQgbm9kZSBpbnRvIHRoZSBxdWV1ZS4gKi8J CQkJCVwKLWFfYXR0ciB2b2lkCQkJCQkJCQlcCi1hX3ByZWZpeCMjcHVzaChhX3F1ZXVlX3R5cGUg KnF1ZXVlLCBhX3R5cGUgKm5vZGUpOwkJCVwKLS8qCQkJCQkJCQkJXAotICogUG9wIGFsbCBpdGVt cyBpbiB0aGUgcXVldWUgaW50byB0aGUgbGlzdCBhdCBkc3QuICBkc3Qgc2hvdWxkIGFscmVhZHkJ XAotICogYmUgaW5pdGlhbGl6ZWQgKGFuZCBtYXkgY29udGFpbiBleGlzdGluZyBpdGVtcywgd2hp Y2ggdGhlbiByZW1haW4JXAotICogaW4gZHN0KS4JCQkJCQkJCVwKLSAqLwkJCQkJCQkJCVwKLWFf YXR0ciB2b2lkCQkJCQkJCQlcCi1hX3ByZWZpeCMjcG9wX2JhdGNoKGFfcXVldWVfdHlwZSAqcXVl dWUsIGFfbGlzdF90eXBlICpkc3QpOwotCi0jZGVmaW5lIG1wc2NfcXVldWVfZ2VuKGFfYXR0ciwg YV9wcmVmaXgsIGFfcXVldWVfdHlwZSwgYV90eXBlLAkJXAotICAgIGFfbGlzdF90eXBlLCBhX2xp bmspCQkJCQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4IyNuZXcoYV9xdWV1ZV90 eXBlICpxdWV1ZSkgewkJCQkJXAotCWF0b21pY19zdG9yZV9wKCZxdWV1ZS0+dGFpbCwgTlVMTCwg QVRPTUlDX1JFTEFYRUQpOwkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciB2b2lkCQkJCQkJCQlcCi1h X3ByZWZpeCMjcHVzaF9iYXRjaChhX3F1ZXVlX3R5cGUgKnF1ZXVlLCBhX2xpc3RfdHlwZSAqc3Jj KSB7CQlcCi0JLyoJCQkJCQkJCVwKLQkgKiBSZXVzZSB0aGUgcWwgbGlzdCBuZXh0IGZpZWxkIGFz IHRoZSBUcmVpYmVyIHN0YWNrIG5leHQJXAotCSAqIGZpZWxkLgkJCQkJCQlcCi0JICovCQkJCQkJ CQlcCi0JYV90eXBlICpmaXJzdCA9IHFsX2ZpcnN0KHNyYyk7CQkJCQlcCi0JYV90eXBlICpsYXN0 ID0gcWxfbGFzdChzcmMsIGFfbGluayk7CQkJCVwKLQl2b2lkKiBjdXJfdGFpbCA9IGF0b21pY19s b2FkX3AoJnF1ZXVlLT50YWlsLCBBVE9NSUNfUkVMQVhFRCk7CVwKLQlkbyB7CQkJCQkJCQlcCi0J CS8qCQkJCQkJCVwKLQkJICogTm90ZSB0aGF0IHRoaXMgYnJlYWtzIHRoZSBxdWV1ZSByaW5nIHN0 cnVjdHVyZTsJXAotCQkgKiBpdCdzIG5vdCBhIHJpbmcgYW55IG1vcmUhCQkJCVwKLQkJICovCQkJ CQkJCVwKLQkJZmlyc3QtPmFfbGluay5xcmVfcHJldiA9IGN1cl90YWlsOwkJCVwKLQkJLyoJCQkJ CQkJXAotCQkgKiBOb3RlOiB0aGUgdXBjb21pbmcgQ0FTIGRvZXNuJ3QgbmVlZCBhbiBhdG9taWM7 IGV2ZXJ5CVwKLQkJICogcHVzaCBvbmx5IG5lZWRzIHRvIHN5bmNocm9uaXplIHdpdGggdGhlIG5l eHQgcG9wLAlcCi0JCSAqIHdoaWNoIHdlIGdldCBmcm9tIHRoZSByZWxlYXNlIHNlcXVlbmNlIHJ1 bGVzLglcCi0JCSAqLwkJCQkJCQlcCi0JfSB3aGlsZSAoIWF0b21pY19jb21wYXJlX2V4Y2hhbmdl X3dlYWtfcCgmcXVldWUtPnRhaWwsCQlcCi0JICAgICZjdXJfdGFpbCwgbGFzdCwgQVRPTUlDX1JF TEVBU0UsIEFUT01JQ19SRUxBWEVEKSk7CQlcCi0JcWxfbmV3KHNyYyk7CQkJCQkJCVwKLX0JCQkJ CQkJCQlcCi1hX2F0dHIgdm9pZAkJCQkJCQkJXAotYV9wcmVmaXgjI3B1c2goYV9xdWV1ZV90eXBl ICpxdWV1ZSwgYV90eXBlICpub2RlKSB7CQkJXAotCXFsX2VsbV9uZXcobm9kZSwgYV9saW5rKTsJ CQkJCVwKLQlhX2xpc3RfdHlwZSBsaXN0OwkJCQkJCVwKLQlxbF9uZXcoJmxpc3QpOwkJCQkJCQlc Ci0JcWxfaGVhZF9pbnNlcnQoJmxpc3QsIG5vZGUsIGFfbGluayk7CQkJCVwKLQlhX3ByZWZpeCMj cHVzaF9iYXRjaChxdWV1ZSwgJmxpc3QpOwkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIHZvaWQJ CQkJCQkJCVwKLWFfcHJlZml4IyNwb3BfYmF0Y2goYV9xdWV1ZV90eXBlICpxdWV1ZSwgYV9saXN0 X3R5cGUgKmRzdCkgewkJXAotCWFfdHlwZSAqdGFpbCA9IGF0b21pY19sb2FkX3AoJnF1ZXVlLT50 YWlsLCBBVE9NSUNfUkVMQVhFRCk7CVwKLQlpZiAodGFpbCA9PSBOVUxMKSB7CQkJCQkJXAotCQkv KgkJCQkJCQlcCi0JCSAqIEluIHRoZSBjb21tb24gc3BlY2lhbCBjYXNlIHdoZXJlIHRoZXJlIGFy ZSBubwlcCi0JCSAqIHBlbmRpbmcgZWxlbWVudHMsIGJhaWwgZWFybHkgd2l0aG91dCBhIGNvc3Rs eSBSTVcuCVwKLQkJICovCQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JfQkJCQkJCQkJXAot CXRhaWwgPSBhdG9taWNfZXhjaGFuZ2VfcCgmcXVldWUtPnRhaWwsIE5VTEwsIEFUT01JQ19BQ1FV SVJFKTsJXAotCS8qCQkJCQkJCQlcCi0JICogSXQncyBhIHNpbmdsZS1jb25zdW1lciBxdWV1ZSwg c28gaWYgY3VyIHN0YXJ0ZWQgbm9uLU5VTEwsCVwKLQkgKiBpdCdkIGJldHRlciBzdGF5IG5vbi1O VUxMLgkJCQkJXAotCSAqLwkJCQkJCQkJXAotCWFzc2VydCh0YWlsICE9IE5VTEwpOwkJCQkJCVwK LQkvKgkJCQkJCQkJXAotCSAqIFdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgc3RhY2sgYW5kIGJvdGgg Zml4IHVwIHRoZSBsaW5rCVwKLQkgKiBzdHJ1Y3R1cmUgKHN0YWNrIGluc2VydGlvbiBicm9rZSB0 aGUgbGlzdCByZXF1aXJlbWVudCB0aGF0CVwKLQkgKiB0aGUgbGlzdCBiZSBjaXJjdWxhcmx5IGxp bmtlZCkuICBJdCdzIGp1c3QgYXMgZWZmaWNpZW50IGF0CVwKLQkgKiB0aGlzIHBvaW50IHRvIG1h a2UgdGhlIHF1ZXVlIGEgInJlYWwiIHF1ZXVlLCBzbyBkbyB0aGF0IGFzCVwKLQkgKiB3ZWxsLgkJ CQkJCQlcCi0JICogSWYgdGhpcyBldmVyIGdldHMgdG8gYmUgYSBob3Qgc3BvdCwgd2UgY2FuIG9t aXQgdGhpcyBmaXh1cAlcCi0JICogYW5kIG1ha2UgdGhlIHF1ZXVlIGEgYmFnIChpLmUuIG5vdCBu ZWNlc3NhcmlseSBvcmRlcmVkKSwgYnV0CVwKLQkgKiB0aGF0IHdvdWxkIG1lYW4gamV0dGlzb25p bmcgdGhlIGV4aXN0aW5nIGxpc3QgQVBJIGFzIHRoZSAJXAotCSAqIGJhdGNoIHB1c2hpbmcvcG9w cGluZyBpbnRlcmZhY2UuCQkJCVwKLQkgKi8JCQkJCQkJCVwKLQlhX2xpc3RfdHlwZSByZXZlcnNl ZDsJCQkJCQlcCi0JcWxfbmV3KCZyZXZlcnNlZCk7CQkJCQkJXAotCXdoaWxlICh0YWlsICE9IE5V TEwpIHsJCQkJCQlcCi0JCS8qCQkJCQkJCVwKLQkJICogUG9wIGFuIGl0ZW0gb2ZmIHRoZSBzdGFj aywgcHJlcGVuZCBpdCBvbnRvIHRoZSBsaXN0CVwKLQkJICogKHJldmVyc2luZyB0aGUgb3JkZXIp LiAgUmVjYWxsIHRoYXQgd2UgdXNlIHRoZQlcCi0JCSAqIGxpc3QgcHJldiBmaWVsZCBhcyB0aGUg VHJlaWJlciBzdGFjayBuZXh0IGZpZWxkIHRvCVwKLQkJICogcHJlc2VydmUgb3JkZXIgb2YgYmF0 Y2gtcHVzaGVkIGl0ZW1zIHdoZW4gcmV2ZXJzZWQuCVwKLQkJICovCQkJCQkJCVwKLQkJYV90eXBl ICpuZXh0ID0gdGFpbC0+YV9saW5rLnFyZV9wcmV2OwkJCVwKLQkJcWxfZWxtX25ldyh0YWlsLCBh X2xpbmspOwkJCQlcCi0JCXFsX2hlYWRfaW5zZXJ0KCZyZXZlcnNlZCwgdGFpbCwgYV9saW5rKTsJ CVwKLQkJdGFpbCA9IG5leHQ7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQlxbF9jb25jYXQoZHN0LCAm cmV2ZXJzZWQsIGFfbGluayk7CQkJCVwKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFM X01QU0NfUVVFVUVfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv bXV0ZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhMGIxYi4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL211dGV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9NVVRFWF9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFM X01VVEVYX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4X3Byb2YuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC90c2QuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC93aXRuZXNzLmgiCi0K LWV4dGVybiBpbnQ2NF90IG9wdF9tdXRleF9tYXhfc3BpbjsKLQotdHlwZWRlZiBlbnVtIHsKLQkv KiBDYW4gb25seSBhY3F1aXJlIG9uZSBtdXRleCBvZiBhIGdpdmVuIHdpdG5lc3MgcmFuayBhdCBh IHRpbWUuICovCi0JbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlLAotCS8qCi0JICogQ2FuIGFj cXVpcmUgbXVsdGlwbGUgbXV0ZXhlcyBvZiB0aGUgc2FtZSB3aXRuZXNzIHJhbmssIGJ1dCBpbgot CSAqIGFkZHJlc3MtYXNjZW5kaW5nIG9yZGVyIG9ubHkuCi0JICovCi0JbWFsbG9jX211dGV4X2Fk ZHJlc3Nfb3JkZXJlZAotfSBtYWxsb2NfbXV0ZXhfbG9ja19vcmRlcl90OwotCi10eXBlZGVmIHN0 cnVjdCBtYWxsb2NfbXV0ZXhfcyBtYWxsb2NfbXV0ZXhfdDsKLXN0cnVjdCBtYWxsb2NfbXV0ZXhf cyB7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJLyoKLQkJCSAqIHByb2ZfZGF0YSBpcyBkZWZp bmVkIGZpcnN0IHRvIHJlZHVjZSBjYWNoZWxpbmUKLQkJCSAqIGJvdW5jaW5nOiB0aGUgZGF0YSBp cyBub3QgdG91Y2hlZCBieSB0aGUgbXV0ZXggaG9sZGVyCi0JCQkgKiBkdXJpbmcgdW5sb2NraW5n LCB3aGlsZSBtaWdodCBiZSBtb2RpZmllZCBieQotCQkJICogY29udGVuZGVycy4gIEhhdmluZyBp dCBiZWZvcmUgdGhlIG11dGV4IGl0c2VsZiBjb3VsZAotCQkJICogYXZvaWQgcHJlZmV0Y2hpbmcg YSBtb2RpZmllZCBjYWNoZWxpbmUgKGZvciB0aGUKLQkJCSAqIHVubG9ja2luZyB0aHJlYWQpLgot CQkJICovCi0JCQltdXRleF9wcm9mX2RhdGFfdAlwcm9mX2RhdGE7Ci0jaWZkZWYgX1dJTjMyCi0j ICBpZiBfV0lOMzJfV0lOTlQgPj0gMHgwNjAwCi0JCQlTUldMT0NLICAgICAgICAgCWxvY2s7Ci0j ICBlbHNlCi0JCQlDUklUSUNBTF9TRUNUSU9OCWxvY2s7Ci0jICBlbmRpZgotI2VsaWYgKGRlZmlu ZWQoSkVNQUxMT0NfT1NfVU5GQUlSX0xPQ0spKQotCQkJb3NfdW5mYWlyX2xvY2sJCWxvY2s7Ci0j ZWxpZiAoZGVmaW5lZChKRU1BTExPQ19NVVRFWF9JTklUX0NCKSkKLQkJCXB0aHJlYWRfbXV0ZXhf dAkJbG9jazsKLQkJCW1hbGxvY19tdXRleF90CQkqcG9zdHBvbmVkX25leHQ7Ci0jZWxzZQotCQkJ cHRocmVhZF9tdXRleF90CQlsb2NrOwotI2VuZGlmCi0JCQkvKgotCQkJICogSGludCBmbGFnIHRv IGF2b2lkIGV4Y2x1c2l2ZSBjYWNoZSBsaW5lIGNvbnRlbnRpb24KLQkJCSAqIGR1cmluZyBzcGlu IHdhaXRpbmcKLQkJCSAqLwotCQkJYXRvbWljX2JfdAkJbG9ja2VkOwotCQl9OwotCQkvKgotCQkg KiBXZSBvbmx5IHRvdWNoIHdpdG5lc3Mgd2hlbiBjb25maWd1cmVkIHcvIGRlYnVnLiAgSG93ZXZl ciB3ZQotCQkgKiBrZWVwIHRoZSBmaWVsZCBpbiBhIHVuaW9uIHdoZW4gIWRlYnVnIHNvIHRoYXQg d2UgZG9uJ3QgaGF2ZQotCQkgKiB0byBwb2xsdXRlIHRoZSBjb2RlIGJhc2Ugd2l0aCAjaWZkZWZz LCB3aGlsZSBhdm9pZCBwYXlpbmcgdGhlCi0JCSAqIG1lbW9yeSBjb3N0LgotCQkgKi8KLSNpZiAh ZGVmaW5lZChKRU1BTExPQ19ERUJVRykKLQkJd2l0bmVzc190CQkJd2l0bmVzczsKLQkJbWFsbG9j X211dGV4X2xvY2tfb3JkZXJfdAlsb2NrX29yZGVyOwotI2VuZGlmCi0JfTsKLQotI2lmIGRlZmlu ZWQoSkVNQUxMT0NfREVCVUcpCi0Jd2l0bmVzc190CQkJd2l0bmVzczsKLQltYWxsb2NfbXV0ZXhf bG9ja19vcmRlcl90CWxvY2tfb3JkZXI7Ci0jZW5kaWYKLX07Ci0KLSNpZmRlZiBfV0lOMzIKLSMg IGlmIF9XSU4zMl9XSU5OVCA+PSAweDA2MDAKLSMgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9MT0NL KG0pICAgIEFjcXVpcmVTUldMb2NrRXhjbHVzaXZlKCYobSktPmxvY2spCi0jICAgIGRlZmluZSBN QUxMT0NfTVVURVhfVU5MT0NLKG0pICBSZWxlYXNlU1JXTG9ja0V4Y2x1c2l2ZSgmKG0pLT5sb2Nr KQotIyAgICBkZWZpbmUgTUFMTE9DX01VVEVYX1RSWUxPQ0sobSkgKCFUcnlBY3F1aXJlU1JXTG9j a0V4Y2x1c2l2ZSgmKG0pLT5sb2NrKSkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIE1BTExPQ19NVVRF WF9MT0NLKG0pICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCYobSktPmxvY2spCi0jICAgIGRlZmlu ZSBNQUxMT0NfTVVURVhfVU5MT0NLKG0pICBMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKG0pLT5sb2Nr KQotIyAgICBkZWZpbmUgTUFMTE9DX01VVEVYX1RSWUxPQ0sobSkgKCFUcnlFbnRlckNyaXRpY2Fs U2VjdGlvbigmKG0pLT5sb2NrKSkKLSMgIGVuZGlmCi0jZWxpZiAoZGVmaW5lZChKRU1BTExPQ19P U19VTkZBSVJfTE9DSykpCi0jICAgIGRlZmluZSBNQUxMT0NfTVVURVhfTE9DSyhtKSAgICBvc191 bmZhaXJfbG9ja19sb2NrKCYobSktPmxvY2spCi0jICAgIGRlZmluZSBNQUxMT0NfTVVURVhfVU5M T0NLKG0pICBvc191bmZhaXJfbG9ja191bmxvY2soJihtKS0+bG9jaykKLSMgICAgZGVmaW5lIE1B TExPQ19NVVRFWF9UUllMT0NLKG0pICghb3NfdW5mYWlyX2xvY2tfdHJ5bG9jaygmKG0pLT5sb2Nr KSkKLSNlbHNlCi0jICAgIGRlZmluZSBNQUxMT0NfTVVURVhfTE9DSyhtKSAgICBwdGhyZWFkX211 dGV4X2xvY2soJihtKS0+bG9jaykKLSMgICAgZGVmaW5lIE1BTExPQ19NVVRFWF9VTkxPQ0sobSkg IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYobSktPmxvY2spCi0jICAgIGRlZmluZSBNQUxMT0NfTVVU RVhfVFJZTE9DSyhtKSAocHRocmVhZF9tdXRleF90cnlsb2NrKCYobSktPmxvY2spICE9IDApCi0j ZW5kaWYKLQotI2RlZmluZSBMT0NLX1BST0ZfREFUQV9JTklUSUFMSVpFUgkJCQkJXAotICAgIHtO U1RJTUVfWkVST19JTklUSUFMSVpFUiwgTlNUSU1FX1pFUk9fSU5JVElBTElaRVIsIDAsIDAsIDAs CQlcCi0JICAgIEFUT01JQ19JTklUKDApLCAwLCBOVUxMLCAwfQotCi0jaWZkZWYgX1dJTjMyCi0j ICBkZWZpbmUgTUFMTE9DX01VVEVYX0lOSVRJQUxJWkVSCi0jZWxpZiAoZGVmaW5lZChKRU1BTExP Q19PU19VTkZBSVJfTE9DSykpCi0jICBpZiBkZWZpbmVkKEpFTUFMTE9DX0RFQlVHKQotIyAgICBk ZWZpbmUgTUFMTE9DX01VVEVYX0lOSVRJQUxJWkVSCQkJCQlcCi0gIHt7e0xPQ0tfUFJPRl9EQVRB X0lOSVRJQUxJWkVSLCBPU19VTkZBSVJfTE9DS19JTklULCBBVE9NSUNfSU5JVChmYWxzZSl9fSwg XAotICAgICAgICAgV0lUTkVTU19JTklUSUFMSVpFUigibXV0ZXgiLCBXSVRORVNTX1JBTktfT01J VCksIDB9Ci0jICBlbHNlCi0jICAgIGRlZmluZSBNQUxMT0NfTVVURVhfSU5JVElBTElaRVIgICAg ICAgICAgICAgICAgICAgICAgXAotICB7e3tMT0NLX1BST0ZfREFUQV9JTklUSUFMSVpFUiwgT1Nf VU5GQUlSX0xPQ0tfSU5JVCwgQVRPTUlDX0lOSVQoZmFsc2UpfX0sICBcCi0gICAgICBXSVRORVNT X0lOSVRJQUxJWkVSKCJtdXRleCIsIFdJVE5FU1NfUkFOS19PTUlUKX0KLSMgIGVuZGlmCi0jZWxp ZiAoZGVmaW5lZChKRU1BTExPQ19NVVRFWF9JTklUX0NCKSkKLSMgIGlmIChkZWZpbmVkKEpFTUFM TE9DX0RFQlVHKSkKLSMgICAgIGRlZmluZSBNQUxMT0NfTVVURVhfSU5JVElBTElaRVIJCQkJCVwK LSAgICAgIHt7e0xPQ0tfUFJPRl9EQVRBX0lOSVRJQUxJWkVSLCBQVEhSRUFEX01VVEVYX0lOSVRJ QUxJWkVSLCBOVUxMLCBBVE9NSUNfSU5JVChmYWxzZSl9fSwJXAotICAgICAgICAgICBXSVRORVNT X0lOSVRJQUxJWkVSKCJtdXRleCIsIFdJVE5FU1NfUkFOS19PTUlUKSwgMH0KLSMgIGVsc2UKLSMg ICAgIGRlZmluZSBNQUxMT0NfTVVURVhfSU5JVElBTElaRVIJCQkJCVwKLSAgICAgIHt7e0xPQ0tf UFJPRl9EQVRBX0lOSVRJQUxJWkVSLCBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLCBOVUxMLCBB VE9NSUNfSU5JVChmYWxzZSl9fSwJXAotICAgICAgICAgICBXSVRORVNTX0lOSVRJQUxJWkVSKCJt dXRleCIsIFdJVE5FU1NfUkFOS19PTUlUKX0KLSMgIGVuZGlmCi0KLSNlbHNlCi0jICAgIGRlZmlu ZSBNQUxMT0NfTVVURVhfVFlQRSBQVEhSRUFEX01VVEVYX0RFRkFVTFQKLSMgIGlmIGRlZmluZWQo SkVNQUxMT0NfREVCVUcpCi0jICAgIGRlZmluZSBNQUxMT0NfTVVURVhfSU5JVElBTElaRVIJCQkJ CVwKLSAgICAge3t7TE9DS19QUk9GX0RBVEFfSU5JVElBTElaRVIsIFBUSFJFQURfTVVURVhfSU5J VElBTElaRVIsIEFUT01JQ19JTklUKGZhbHNlKX19LCBcCi0gICAgICAgICAgIFdJVE5FU1NfSU5J VElBTElaRVIoIm11dGV4IiwgV0lUTkVTU19SQU5LX09NSVQpLCAwfQotIyAgZWxzZQotIyAgICBk ZWZpbmUgTUFMTE9DX01VVEVYX0lOSVRJQUxJWkVSICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgIHt7e0xPQ0tfUFJPRl9EQVRBX0lOSVRJQUxJWkVSLCBQVEhSRUFEX01VVEVYX0lOSVRJ QUxJWkVSLCBBVE9NSUNfSU5JVChmYWxzZSl9fSwJXAotICAgICAgV0lUTkVTU19JTklUSUFMSVpF UigibXV0ZXgiLCBXSVRORVNTX1JBTktfT01JVCl9Ci0jICBlbmRpZgotI2VuZGlmCi0KLSNpZmRl ZiBKRU1BTExPQ19MQVpZX0xPQ0sKLWV4dGVybiBib29sIGlzdGhyZWFkZWQ7Ci0jZWxzZQotIyAg dW5kZWYgaXN0aHJlYWRlZCAvKiBVbmRvIHByaXZhdGVfbmFtZXNwYWNlLmggZGVmaW5pdGlvbi4g Ki8KLSMgIGRlZmluZSBpc3RocmVhZGVkIHRydWUKLSNlbmRpZgotCi1ib29sIG1hbGxvY19tdXRl eF9pbml0KG1hbGxvY19tdXRleF90ICptdXRleCwgY29uc3QgY2hhciAqbmFtZSwKLSAgICB3aXRu ZXNzX3JhbmtfdCByYW5rLCBtYWxsb2NfbXV0ZXhfbG9ja19vcmRlcl90IGxvY2tfb3JkZXIpOwot dm9pZCBtYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90ICpt dXRleCk7Ci12b2lkIG1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuLCBt YWxsb2NfbXV0ZXhfdCAqbXV0ZXgpOwotdm9pZCBtYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQo dHNkbl90ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAqbXV0ZXgpOwotYm9vbCBtYWxsb2NfbXV0ZXhf Ym9vdCh2b2lkKTsKLXZvaWQgbWFsbG9jX211dGV4X3Byb2ZfZGF0YV9yZXNldCh0c2RuX3QgKnRz ZG4sIG1hbGxvY19tdXRleF90ICptdXRleCk7Ci0KLXZvaWQgbWFsbG9jX211dGV4X2xvY2tfc2xv dyhtYWxsb2NfbXV0ZXhfdCAqbXV0ZXgpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1hbGxvY19t dXRleF9sb2NrX2ZpbmFsKG1hbGxvY19tdXRleF90ICptdXRleCkgewotCU1BTExPQ19NVVRFWF9M T0NLKG11dGV4KTsKLQlhdG9taWNfc3RvcmVfYigmbXV0ZXgtPmxvY2tlZCwgdHJ1ZSwgQVRPTUlD X1JFTEFYRUQpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLW1hbGxvY19tdXRleF90cnlsb2Nr X2ZpbmFsKG1hbGxvY19tdXRleF90ICptdXRleCkgewotCXJldHVybiBNQUxMT0NfTVVURVhfVFJZ TE9DSyhtdXRleCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbXV0ZXhfb3duZXJfc3RhdHNf dXBkYXRlKHRzZG5fdCAqdHNkbiwgbWFsbG9jX211dGV4X3QgKm11dGV4KSB7Ci0JaWYgKGNvbmZp Z19zdGF0cykgewotCQltdXRleF9wcm9mX2RhdGFfdCAqZGF0YSA9ICZtdXRleC0+cHJvZl9kYXRh OwotCQlkYXRhLT5uX2xvY2tfb3BzKys7Ci0JCWlmIChkYXRhLT5wcmV2X293bmVyICE9IHRzZG4p IHsKLQkJCWRhdGEtPnByZXZfb3duZXIgPSB0c2RuOwotCQkJZGF0YS0+bl9vd25lcl9zd2l0Y2hl cysrOwotCQl9Ci0JfQotfQotCi0vKiBUcnlsb2NrOiByZXR1cm4gZmFsc2UgaWYgdGhlIGxvY2sg aXMgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkLiAqLwotc3RhdGljIGlubGluZSBib29sCi1tYWxsb2Nf bXV0ZXhfdHJ5bG9jayh0c2RuX3QgKnRzZG4sIG1hbGxvY19tdXRleF90ICptdXRleCkgewotCXdp dG5lc3NfYXNzZXJ0X25vdF9vd25lcih0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksICZtdXRl eC0+d2l0bmVzcyk7Ci0JaWYgKGlzdGhyZWFkZWQpIHsKLQkJaWYgKG1hbGxvY19tdXRleF90cnls b2NrX2ZpbmFsKG11dGV4KSkgewotCQkJYXRvbWljX3N0b3JlX2IoJm11dGV4LT5sb2NrZWQsIHRy dWUsIEFUT01JQ19SRUxBWEVEKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCW11dGV4X293bmVy X3N0YXRzX3VwZGF0ZSh0c2RuLCBtdXRleCk7Ci0JfQotCXdpdG5lc3NfbG9jayh0c2RuX3dpdG5l c3NfdHNkcF9nZXQodHNkbiksICZtdXRleC0+d2l0bmVzcyk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19 Ci0KLS8qIEFnZ3JlZ2F0ZSBsb2NrIHByb2YgZGF0YS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAot bWFsbG9jX211dGV4X3Byb2ZfbWVyZ2UobXV0ZXhfcHJvZl9kYXRhX3QgKnN1bSwgbXV0ZXhfcHJv Zl9kYXRhX3QgKmRhdGEpIHsKLQluc3RpbWVfYWRkKCZzdW0tPnRvdF93YWl0X3RpbWUsICZkYXRh LT50b3Rfd2FpdF90aW1lKTsKLQlpZiAobnN0aW1lX2NvbXBhcmUoJnN1bS0+bWF4X3dhaXRfdGlt ZSwgJmRhdGEtPm1heF93YWl0X3RpbWUpIDwgMCkgewotCQluc3RpbWVfY29weSgmc3VtLT5tYXhf d2FpdF90aW1lLCAmZGF0YS0+bWF4X3dhaXRfdGltZSk7Ci0JfQotCi0Jc3VtLT5uX3dhaXRfdGlt ZXMgKz0gZGF0YS0+bl93YWl0X3RpbWVzOwotCXN1bS0+bl9zcGluX2FjcXVpcmVkICs9IGRhdGEt Pm5fc3Bpbl9hY3F1aXJlZDsKLQotCWlmIChzdW0tPm1heF9uX3RoZHMgPCBkYXRhLT5tYXhfbl90 aGRzKSB7Ci0JCXN1bS0+bWF4X25fdGhkcyA9IGRhdGEtPm1heF9uX3RoZHM7Ci0JfQotCXVpbnQz Ml90IGN1cl9uX3dhaXRpbmdfdGhkcyA9IGF0b21pY19sb2FkX3UzMigmc3VtLT5uX3dhaXRpbmdf dGhkcywKLQkgICAgQVRPTUlDX1JFTEFYRUQpOwotCXVpbnQzMl90IG5ld19uX3dhaXRpbmdfdGhk cyA9IGN1cl9uX3dhaXRpbmdfdGhkcyArIGF0b21pY19sb2FkX3UzMigKLQkgICAgJmRhdGEtPm5f d2FpdGluZ190aGRzLCBBVE9NSUNfUkVMQVhFRCk7Ci0JYXRvbWljX3N0b3JlX3UzMigmc3VtLT5u X3dhaXRpbmdfdGhkcywgbmV3X25fd2FpdGluZ190aGRzLAotCSAgICBBVE9NSUNfUkVMQVhFRCk7 Ci0Jc3VtLT5uX293bmVyX3N3aXRjaGVzICs9IGRhdGEtPm5fb3duZXJfc3dpdGNoZXM7Ci0Jc3Vt LT5uX2xvY2tfb3BzICs9IGRhdGEtPm5fbG9ja19vcHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9p ZAotbWFsbG9jX211dGV4X2xvY2sodHNkbl90ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAqbXV0ZXgp IHsKLQl3aXRuZXNzX2Fzc2VydF9ub3Rfb3duZXIodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4p LCAmbXV0ZXgtPndpdG5lc3MpOwotCWlmIChpc3RocmVhZGVkKSB7Ci0JCWlmIChtYWxsb2NfbXV0 ZXhfdHJ5bG9ja19maW5hbChtdXRleCkpIHsKLQkJCW1hbGxvY19tdXRleF9sb2NrX3Nsb3cobXV0 ZXgpOwotCQkJYXRvbWljX3N0b3JlX2IoJm11dGV4LT5sb2NrZWQsIHRydWUsIEFUT01JQ19SRUxB WEVEKTsKLQkJfQotCQltdXRleF9vd25lcl9zdGF0c191cGRhdGUodHNkbiwgbXV0ZXgpOwotCX0K LQl3aXRuZXNzX2xvY2sodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLCAmbXV0ZXgtPndpdG5l c3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1hbGxvY19tdXRleF91bmxvY2sodHNkbl90 ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAqbXV0ZXgpIHsKLQlhdG9taWNfc3RvcmVfYigmbXV0ZXgt PmxvY2tlZCwgZmFsc2UsIEFUT01JQ19SRUxBWEVEKTsKLQl3aXRuZXNzX3VubG9jayh0c2RuX3dp dG5lc3NfdHNkcF9nZXQodHNkbiksICZtdXRleC0+d2l0bmVzcyk7Ci0JaWYgKGlzdGhyZWFkZWQp IHsKLQkJTUFMTE9DX01VVEVYX1VOTE9DSyhtdXRleCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5l IHZvaWQKLW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbl90ICp0c2RuLCBtYWxsb2NfbXV0 ZXhfdCAqbXV0ZXgpIHsKLQl3aXRuZXNzX2Fzc2VydF9vd25lcih0c2RuX3dpdG5lc3NfdHNkcF9n ZXQodHNkbiksICZtdXRleC0+d2l0bmVzcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWFs bG9jX211dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNkbl90ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAq bXV0ZXgpIHsKLQl3aXRuZXNzX2Fzc2VydF9ub3Rfb3duZXIodHNkbl93aXRuZXNzX3RzZHBfZ2V0 KHRzZG4pLCAmbXV0ZXgtPndpdG5lc3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1hbGxv Y19tdXRleF9wcm9mX2NvcHkobXV0ZXhfcHJvZl9kYXRhX3QgKmRzdCwgbXV0ZXhfcHJvZl9kYXRh X3QgKnNvdXJjZSkgewotCS8qCi0JICogTm90ICpyZWFsbHkqIGFsbG93ZWQgKHdlIHNob3VsZG4n dCBiZSBkb2luZyBub24tYXRvbWljIGxvYWRzIG9mCi0JICogYXRvbWljIGRhdGEpLCBidXQgdGhl IG11dGV4IHByb3RlY3Rpb24gbWFrZXMgdGhpcyBzYWZlLCBhbmQgd3JpdGluZwotCSAqIGEgbWVt YmVyLWZvci1tZW1iZXIgY29weSBpcyB0ZWRpb3VzIGZvciB0aGlzIHNpdHVhdGlvbi4KLQkgKi8K LQkqZHN0ID0gKnNvdXJjZTsKLQkvKiBuX3dhaXRfdGhkcyBpcyBub3QgcmVwb3J0ZWQgKG1vZGlm aWVkIHcvbyBsb2NraW5nKS4gKi8KLQlhdG9taWNfc3RvcmVfdTMyKCZkc3QtPm5fd2FpdGluZ190 aGRzLCAwLCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLS8qIENvcHkgdGhlIHByb2YgZGF0YSBmcm9t IG11dGV4IGZvciBwcm9jZXNzaW5nLiAqLwotc3RhdGljIGlubGluZSB2b2lkCi1tYWxsb2NfbXV0 ZXhfcHJvZl9yZWFkKHRzZG5fdCAqdHNkbiwgbXV0ZXhfcHJvZl9kYXRhX3QgKmRhdGEsCi0gICAg bWFsbG9jX211dGV4X3QgKm11dGV4KSB7Ci0JLyogQ2FuIG9ubHkgcmVhZCBob2xkaW5nIHRoZSBt dXRleC4gKi8KLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sIG11dGV4KTsKLQltYWxs b2NfbXV0ZXhfcHJvZl9jb3B5KGRhdGEsICZtdXRleC0+cHJvZl9kYXRhKTsKLX0KLQotc3RhdGlj IGlubGluZSB2b2lkCi1tYWxsb2NfbXV0ZXhfcHJvZl9hY2N1bSh0c2RuX3QgKnRzZG4sIG11dGV4 X3Byb2ZfZGF0YV90ICpkYXRhLAotICAgIG1hbGxvY19tdXRleF90ICptdXRleCkgewotCW11dGV4 X3Byb2ZfZGF0YV90ICpzb3VyY2UgPSAmbXV0ZXgtPnByb2ZfZGF0YTsKLQkvKiBDYW4gb25seSBy ZWFkIGhvbGRpbmcgdGhlIG11dGV4LiAqLwotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNk biwgbXV0ZXgpOwotCi0JbnN0aW1lX2FkZCgmZGF0YS0+dG90X3dhaXRfdGltZSwgJnNvdXJjZS0+ dG90X3dhaXRfdGltZSk7Ci0JaWYgKG5zdGltZV9jb21wYXJlKCZzb3VyY2UtPm1heF93YWl0X3Rp bWUsICZkYXRhLT5tYXhfd2FpdF90aW1lKSA+IDApIHsKLQkJbnN0aW1lX2NvcHkoJmRhdGEtPm1h eF93YWl0X3RpbWUsICZzb3VyY2UtPm1heF93YWl0X3RpbWUpOwotCX0KLQlkYXRhLT5uX3dhaXRf dGltZXMgKz0gc291cmNlLT5uX3dhaXRfdGltZXM7Ci0JZGF0YS0+bl9zcGluX2FjcXVpcmVkICs9 IHNvdXJjZS0+bl9zcGluX2FjcXVpcmVkOwotCWlmIChkYXRhLT5tYXhfbl90aGRzIDwgc291cmNl LT5tYXhfbl90aGRzKSB7Ci0JCWRhdGEtPm1heF9uX3RoZHMgPSBzb3VyY2UtPm1heF9uX3RoZHM7 Ci0JfQotCS8qIG5fd2FpdF90aGRzIGlzIG5vdCByZXBvcnRlZC4gKi8KLQlhdG9taWNfc3RvcmVf dTMyKCZkYXRhLT5uX3dhaXRpbmdfdGhkcywgMCwgQVRPTUlDX1JFTEFYRUQpOwotCWRhdGEtPm5f b3duZXJfc3dpdGNoZXMgKz0gc291cmNlLT5uX293bmVyX3N3aXRjaGVzOwotCWRhdGEtPm5fbG9j a19vcHMgKz0gc291cmNlLT5uX2xvY2tfb3BzOwotfQotCi0vKiBDb21wYXJlIHRoZSBwcm9mIGRh dGEgYW5kIHVwZGF0ZSB0byB0aGUgbWF4aW11bS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotbWFs bG9jX211dGV4X3Byb2ZfbWF4X3VwZGF0ZSh0c2RuX3QgKnRzZG4sIG11dGV4X3Byb2ZfZGF0YV90 ICpkYXRhLAotICAgIG1hbGxvY19tdXRleF90ICptdXRleCkgewotCW11dGV4X3Byb2ZfZGF0YV90 ICpzb3VyY2UgPSAmbXV0ZXgtPnByb2ZfZGF0YTsKLQkvKiBDYW4gb25seSByZWFkIGhvbGRpbmcg dGhlIG11dGV4LiAqLwotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgbXV0ZXgpOwot Ci0JaWYgKG5zdGltZV9jb21wYXJlKCZzb3VyY2UtPnRvdF93YWl0X3RpbWUsICZkYXRhLT50b3Rf d2FpdF90aW1lKSA+IDApIHsKLQkJbnN0aW1lX2NvcHkoJmRhdGEtPnRvdF93YWl0X3RpbWUsICZz b3VyY2UtPnRvdF93YWl0X3RpbWUpOwotCX0KLQlpZiAobnN0aW1lX2NvbXBhcmUoJnNvdXJjZS0+ bWF4X3dhaXRfdGltZSwgJmRhdGEtPm1heF93YWl0X3RpbWUpID4gMCkgewotCQluc3RpbWVfY29w eSgmZGF0YS0+bWF4X3dhaXRfdGltZSwgJnNvdXJjZS0+bWF4X3dhaXRfdGltZSk7Ci0JfQotCWlm IChzb3VyY2UtPm5fd2FpdF90aW1lcyA+IGRhdGEtPm5fd2FpdF90aW1lcykgewotCQlkYXRhLT5u X3dhaXRfdGltZXMgPSBzb3VyY2UtPm5fd2FpdF90aW1lczsKLQl9Ci0JaWYgKHNvdXJjZS0+bl9z cGluX2FjcXVpcmVkID4gZGF0YS0+bl9zcGluX2FjcXVpcmVkKSB7Ci0JCWRhdGEtPm5fc3Bpbl9h Y3F1aXJlZCA9IHNvdXJjZS0+bl9zcGluX2FjcXVpcmVkOwotCX0KLQlpZiAoc291cmNlLT5tYXhf bl90aGRzID4gZGF0YS0+bWF4X25fdGhkcykgewotCQlkYXRhLT5tYXhfbl90aGRzID0gc291cmNl LT5tYXhfbl90aGRzOwotCX0KLQlpZiAoc291cmNlLT5uX293bmVyX3N3aXRjaGVzID4gZGF0YS0+ bl9vd25lcl9zd2l0Y2hlcykgewotCQlkYXRhLT5uX293bmVyX3N3aXRjaGVzID0gc291cmNlLT5u X293bmVyX3N3aXRjaGVzOwotCX0KLQlpZiAoc291cmNlLT5uX2xvY2tfb3BzID4gZGF0YS0+bl9s b2NrX29wcykgewotCQlkYXRhLT5uX2xvY2tfb3BzID0gc291cmNlLT5uX2xvY2tfb3BzOwotCX0K LQkvKiBuX3dhaXRfdGhkcyBpcyBub3QgcmVwb3J0ZWQuICovCi19Ci0KLSNlbmRpZiAvKiBKRU1B TExPQ19JTlRFUk5BTF9NVVRFWF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9tdXRleF9wcm9m LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL211dGV4X3Byb2YuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NGE1MjZhNS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL211dGV4X3Byb2YuaAorKysgL2Rldi9udWxs CkBAIC0xLDExNyArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX01VVEVYX1BST0Zf SAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9NVVRFWF9QUk9GX0gKLQotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL25z dGltZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3RzZF90eXBlcy5oIgotCi0jZGVm aW5lIE1VVEVYX1BST0ZfR0xPQkFMX01VVEVYRVMJCQkJCVwKLSAgICBPUChiYWNrZ3JvdW5kX3Ro cmVhZCkJCQkJCQlcCi0gICAgT1AobWF4X3Blcl9iZ190aGQpCQkJCQkJCVwKLSAgICBPUChjdGwp CQkJCQkJCQlcCi0gICAgT1AocHJvZikJCQkJCQkJCVwKLSAgICBPUChwcm9mX3RoZHNfZGF0YSkJ CQkJCQkJXAotICAgIE9QKHByb2ZfZHVtcCkJCQkJCQkJXAotICAgIE9QKHByb2ZfcmVjZW50X2Fs bG9jKQkJCQkJCVwKLSAgICBPUChwcm9mX3JlY2VudF9kdW1wKQkJCQkJCVwKLSAgICBPUChwcm9m X3N0YXRzKQotCi10eXBlZGVmIGVudW0gewotI2RlZmluZSBPUChtdHgpIGdsb2JhbF9wcm9mX211 dGV4XyMjbXR4LAotCU1VVEVYX1BST0ZfR0xPQkFMX01VVEVYRVMKLSN1bmRlZiBPUAotCW11dGV4 X3Byb2ZfbnVtX2dsb2JhbF9tdXRleGVzCi19IG11dGV4X3Byb2ZfZ2xvYmFsX2luZF90OwotCi0j ZGVmaW5lIE1VVEVYX1BST0ZfQVJFTkFfTVVURVhFUwkJCQkJXAotICAgIE9QKGxhcmdlKQkJCQkJ CQkJXAotICAgIE9QKGV4dGVudF9hdmFpbCkJCQkJCQkJXAotICAgIE9QKGV4dGVudHNfZGlydHkp CQkJCQkJCVwKLSAgICBPUChleHRlbnRzX211enp5KQkJCQkJCQlcCi0gICAgT1AoZXh0ZW50c19y ZXRhaW5lZCkJCQkJCQlcCi0gICAgT1AoZGVjYXlfZGlydHkpCQkJCQkJCVwKLSAgICBPUChkZWNh eV9tdXp6eSkJCQkJCQkJXAotICAgIE9QKGJhc2UpCQkJCQkJCQlcCi0gICAgT1AodGNhY2hlX2xp c3QpCQkJCQkJCVwKLSAgICBPUChocGFfc2hhcmQpCQkJCQkJCVwKLSAgICBPUChocGFfc2hhcmRf Z3JvdykJCQkJCQkJXAotICAgIE9QKGhwYV9zZWMpCi0KLXR5cGVkZWYgZW51bSB7Ci0jZGVmaW5l IE9QKG10eCkgYXJlbmFfcHJvZl9tdXRleF8jI210eCwKLQlNVVRFWF9QUk9GX0FSRU5BX01VVEVY RVMKLSN1bmRlZiBPUAotCW11dGV4X3Byb2ZfbnVtX2FyZW5hX211dGV4ZXMKLX0gbXV0ZXhfcHJv Zl9hcmVuYV9pbmRfdDsKLQotLyoKLSAqIFRoZSBmb3J0aCBwYXJhbWV0ZXIgaXMgYSBib29sZWFu IHZhbHVlIHRoYXQgaXMgdHJ1ZSBmb3IgZGVyaXZlZCByYXRlIGNvdW50ZXJzCi0gKiBhbmQgZmFs c2UgZm9yIHJlYWwgb25lcy4KLSAqLwotI2RlZmluZSBNVVRFWF9QUk9GX1VJTlQ2NF9DT1VOVEVS UwkJCQkJXAotICAgIE9QKG51bV9vcHMsIHVpbnQ2NF90LCAibl9sb2NrX29wcyIsIGZhbHNlLCBu dW1fb3BzKQkJCQkJXAotICAgIE9QKG51bV9vcHNfcHMsIHVpbnQ2NF90LCAiKCMvc2VjKSIsIHRy dWUsIG51bV9vcHMpCQkJCVwKLSAgICBPUChudW1fd2FpdCwgdWludDY0X3QsICJuX3dhaXRpbmci LCBmYWxzZSwgbnVtX3dhaXQpCQkJCVwKLSAgICBPUChudW1fd2FpdF9wcywgdWludDY0X3QsICIo Iy9zZWMpIiwgdHJ1ZSwgbnVtX3dhaXQpCQkJCVwKLSAgICBPUChudW1fc3Bpbl9hY3EsIHVpbnQ2 NF90LCAibl9zcGluX2FjcSIsIGZhbHNlLCBudW1fc3Bpbl9hY3EpCQkJXAotICAgIE9QKG51bV9z cGluX2FjcV9wcywgdWludDY0X3QsICIoIy9zZWMpIiwgdHJ1ZSwgbnVtX3NwaW5fYWNxKQkJCVwK LSAgICBPUChudW1fb3duZXJfc3dpdGNoLCB1aW50NjRfdCwgIm5fb3duZXJfc3dpdGNoIiwgZmFs c2UsIG51bV9vd25lcl9zd2l0Y2gpCQlcCi0gICAgT1AobnVtX293bmVyX3N3aXRjaF9wcywgdWlu dDY0X3QsICIoIy9zZWMpIiwgdHJ1ZSwgbnVtX293bmVyX3N3aXRjaCkJXAotICAgIE9QKHRvdGFs X3dhaXRfdGltZSwgdWludDY0X3QsICJ0b3RhbF93YWl0X25zIiwgZmFsc2UsIHRvdGFsX3dhaXRf dGltZSkJCVwKLSAgICBPUCh0b3RhbF93YWl0X3RpbWVfcHMsIHVpbnQ2NF90LCAiKCMvc2VjKSIs IHRydWUsIHRvdGFsX3dhaXRfdGltZSkJCVwKLSAgICBPUChtYXhfd2FpdF90aW1lLCB1aW50NjRf dCwgIm1heF93YWl0X25zIiwgZmFsc2UsIG1heF93YWl0X3RpbWUpCi0KLSNkZWZpbmUgTVVURVhf UFJPRl9VSU5UMzJfQ09VTlRFUlMJCQkJCVwKLSAgICBPUChtYXhfbnVtX3RoZHMsIHVpbnQzMl90 LCAibWF4X25fdGhkcyIsIGZhbHNlLCBtYXhfbnVtX3RoZHMpCi0KLSNkZWZpbmUgTVVURVhfUFJP Rl9DT1VOVEVSUwkJCQkJCVwKLQkJTVVURVhfUFJPRl9VSU5UNjRfQ09VTlRFUlMJCQkJXAotCQlN VVRFWF9QUk9GX1VJTlQzMl9DT1VOVEVSUwotCi0jZGVmaW5lIE9QKGNvdW50ZXIsIHR5cGUsIGh1 bWFuLCBkZXJpdmVkLCBiYXNlX2NvdW50ZXIpIG11dGV4X2NvdW50ZXJfIyNjb3VudGVyLAotCi0j ZGVmaW5lIENPVU5URVJfRU5VTShjb3VudGVyX2xpc3QsIHQpCQkJCQlcCi0JCXR5cGVkZWYgZW51 bSB7CQkJCQkJXAotCQkJY291bnRlcl9saXN0CQkJCQlcCi0JCQltdXRleF9wcm9mX251bV8jI3Qj I19jb3VudGVycwkJCVwKLQkJfSBtdXRleF9wcm9mXyMjdCMjX2NvdW50ZXJfaW5kX3Q7Ci0KLUNP VU5URVJfRU5VTShNVVRFWF9QUk9GX1VJTlQ2NF9DT1VOVEVSUywgdWludDY0X3QpCi1DT1VOVEVS X0VOVU0oTVVURVhfUFJPRl9VSU5UMzJfQ09VTlRFUlMsIHVpbnQzMl90KQotCi0jdW5kZWYgQ09V TlRFUl9FTlVNCi0jdW5kZWYgT1AKLQotdHlwZWRlZiBzdHJ1Y3QgewotCS8qCi0JICogQ291bnRl cnMgdG91Y2hlZCBvbiB0aGUgc2xvdyBwYXRoLCBpLmUuIHdoZW4gdGhlcmUgaXMgbG9jawotCSAq IGNvbnRlbnRpb24uICBXZSB1cGRhdGUgdGhlbSBvbmNlIHdlIGhhdmUgdGhlIGxvY2suCi0JICov Ci0JLyogVG90YWwgdGltZSAoaW4gbmFubyBzZWNvbmRzKSBzcGVudCB3YWl0aW5nIG9uIHRoaXMg bXV0ZXguICovCi0JbnN0aW1lX3QJCXRvdF93YWl0X3RpbWU7Ci0JLyogTWF4IHRpbWUgKGluIG5h bm8gc2Vjb25kcykgc3BlbnQgb24gYSBzaW5nbGUgbG9jayBvcGVyYXRpb24uICovCi0JbnN0aW1l X3QJCW1heF93YWl0X3RpbWU7Ci0JLyogIyBvZiB0aW1lcyBoYXZlIHRvIHdhaXQgZm9yIHRoaXMg bXV0ZXggKGFmdGVyIHNwaW5uaW5nKS4gKi8KLQl1aW50NjRfdAkJbl93YWl0X3RpbWVzOwotCS8q ICMgb2YgdGltZXMgYWNxdWlyZWQgdGhlIG11dGV4IHRocm91Z2ggbG9jYWwgc3Bpbm5pbmcuICov Ci0JdWludDY0X3QJCW5fc3Bpbl9hY3F1aXJlZDsKLQkvKiBNYXggIyBvZiB0aHJlYWRzIHdhaXRp bmcgZm9yIHRoZSBtdXRleCBhdCB0aGUgc2FtZSB0aW1lLiAqLwotCXVpbnQzMl90CQltYXhfbl90 aGRzOwotCS8qIEN1cnJlbnQgIyBvZiB0aHJlYWRzIHdhaXRpbmcgb24gdGhlIGxvY2suICBBdG9t aWMgc3luY2VkLiAqLwotCWF0b21pY191MzJfdAkJbl93YWl0aW5nX3RoZHM7Ci0KLQkvKgotCSAq IERhdGEgdG91Y2hlZCBvbiB0aGUgZmFzdCBwYXRoLiAgVGhlc2UgYXJlIG1vZGlmaWVkIHJpZ2h0 IGFmdGVyIHdlCi0JICogZ3JhYiB0aGUgbG9jaywgc28gaXQncyBwbGFjZWQgY2xvc2VzdCB0byB0 aGUgZW5kIChpLmUuIHJpZ2h0IGJlZm9yZQotCSAqIHRoZSBsb2NrKSBzbyB0aGF0IHdlIGhhdmUg YSBoaWdoZXIgY2hhbmNlIG9mIHRoZW0gYmVpbmcgb24gdGhlIHNhbWUKLQkgKiBjYWNoZWxpbmUu Ci0JICovCi0JLyogIyBvZiB0aW1lcyB0aGUgbXV0ZXggaG9sZGVyIGlzIGRpZmZlcmVudCB0aGFu IHRoZSBwcmV2aW91cyBvbmUuICovCi0JdWludDY0X3QJCW5fb3duZXJfc3dpdGNoZXM7Ci0JLyog UHJldmlvdXMgbXV0ZXggaG9sZGVyLCB0byBmYWNpbGl0YXRlIG5fb3duZXJfc3dpdGNoZXMuICov Ci0JdHNkbl90CQkJKnByZXZfb3duZXI7Ci0JLyogIyBvZiBsb2NrKCkgb3BlcmF0aW9ucyBpbiB0 b3RhbC4gKi8KLQl1aW50NjRfdAkJbl9sb2NrX29wczsKLX0gbXV0ZXhfcHJvZl9kYXRhX3Q7Ci0K LSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9NVVRFWF9QUk9GX0ggKi8KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL25zdGltZS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9uc3RpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNDg2ZTVjYy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL25zdGltZS5oCisrKyAv ZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9OU1RJ TUVfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9OU1RJTUVfSAotCi0vKiBNYXhpbXVtIHN1 cHBvcnRlZCBudW1iZXIgb2Ygc2Vjb25kcyAofjU4NCB5ZWFycykuICovCi0jZGVmaW5lIE5TVElN RV9TRUNfTUFYIEtRVSgxODQ0Njc0NDA3MikKLQotI2RlZmluZSBOU1RJTUVfTUFHSUMgKCh1aW50 MzJfdCkweGI4YTljZTM3KQotI2lmZGVmIEpFTUFMTE9DX0RFQlVHCi0jICBkZWZpbmUgTlNUSU1F X1pFUk9fSU5JVElBTElaRVIgezAsIE5TVElNRV9NQUdJQ30KLSNlbHNlCi0jICBkZWZpbmUgTlNU SU1FX1pFUk9fSU5JVElBTElaRVIgezB9Ci0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVp bnQ2NF90IG5zOwotI2lmZGVmIEpFTUFMTE9DX0RFQlVHCi0JdWludDMyX3QgbWFnaWM7IC8qIFRy YWNrcyBpZiBpbml0aWFsaXplZC4gKi8KLSNlbmRpZgotfSBuc3RpbWVfdDsKLQotc3RhdGljIGNv bnN0IG5zdGltZV90IG5zdGltZV96ZXJvID0gTlNUSU1FX1pFUk9fSU5JVElBTElaRVI7Ci0KLXZv aWQgbnN0aW1lX2luaXQobnN0aW1lX3QgKnRpbWUsIHVpbnQ2NF90IG5zKTsKLXZvaWQgbnN0aW1l X2luaXQyKG5zdGltZV90ICp0aW1lLCB1aW50NjRfdCBzZWMsIHVpbnQ2NF90IG5zZWMpOwotdWlu dDY0X3QgbnN0aW1lX25zKGNvbnN0IG5zdGltZV90ICp0aW1lKTsKLXVpbnQ2NF90IG5zdGltZV9z ZWMoY29uc3QgbnN0aW1lX3QgKnRpbWUpOwotdWludDY0X3QgbnN0aW1lX21zZWMoY29uc3QgbnN0 aW1lX3QgKnRpbWUpOwotdWludDY0X3QgbnN0aW1lX25zZWMoY29uc3QgbnN0aW1lX3QgKnRpbWUp Owotdm9pZCBuc3RpbWVfY29weShuc3RpbWVfdCAqdGltZSwgY29uc3QgbnN0aW1lX3QgKnNvdXJj ZSk7Ci1pbnQgbnN0aW1lX2NvbXBhcmUoY29uc3QgbnN0aW1lX3QgKmEsIGNvbnN0IG5zdGltZV90 ICpiKTsKLXZvaWQgbnN0aW1lX2FkZChuc3RpbWVfdCAqdGltZSwgY29uc3QgbnN0aW1lX3QgKmFk ZGVuZCk7Ci12b2lkIG5zdGltZV9pYWRkKG5zdGltZV90ICp0aW1lLCB1aW50NjRfdCBhZGRlbmQp Owotdm9pZCBuc3RpbWVfc3VidHJhY3QobnN0aW1lX3QgKnRpbWUsIGNvbnN0IG5zdGltZV90ICpz dWJ0cmFoZW5kKTsKLXZvaWQgbnN0aW1lX2lzdWJ0cmFjdChuc3RpbWVfdCAqdGltZSwgdWludDY0 X3Qgc3VidHJhaGVuZCk7Ci12b2lkIG5zdGltZV9pbXVsdGlwbHkobnN0aW1lX3QgKnRpbWUsIHVp bnQ2NF90IG11bHRpcGxpZXIpOwotdm9pZCBuc3RpbWVfaWRpdmlkZShuc3RpbWVfdCAqdGltZSwg dWludDY0X3QgZGl2aXNvcik7Ci11aW50NjRfdCBuc3RpbWVfZGl2aWRlKGNvbnN0IG5zdGltZV90 ICp0aW1lLCBjb25zdCBuc3RpbWVfdCAqZGl2aXNvcik7Ci11aW50NjRfdCBuc3RpbWVfbnNfc2lu Y2UoY29uc3QgbnN0aW1lX3QgKnBhc3QpOwotCi10eXBlZGVmIGJvb2wgKG5zdGltZV9tb25vdG9u aWNfdCkodm9pZCk7Ci1leHRlcm4gbnN0aW1lX21vbm90b25pY190ICpKRVRfTVVUQUJMRSBuc3Rp bWVfbW9ub3RvbmljOwotCi10eXBlZGVmIHZvaWQgKG5zdGltZV91cGRhdGVfdCkobnN0aW1lX3Qg Kik7Ci1leHRlcm4gbnN0aW1lX3VwZGF0ZV90ICpKRVRfTVVUQUJMRSBuc3RpbWVfdXBkYXRlOwot Ci10eXBlZGVmIHZvaWQgKG5zdGltZV9wcm9mX3VwZGF0ZV90KShuc3RpbWVfdCAqKTsKLWV4dGVy biBuc3RpbWVfcHJvZl91cGRhdGVfdCAqSkVUX01VVEFCTEUgbnN0aW1lX3Byb2ZfdXBkYXRlOwot Ci12b2lkIG5zdGltZV9pbml0X3VwZGF0ZShuc3RpbWVfdCAqdGltZSk7Ci12b2lkIG5zdGltZV9w cm9mX2luaXRfdXBkYXRlKG5zdGltZV90ICp0aW1lKTsKLQotZW51bSBwcm9mX3RpbWVfcmVzX2Ug ewotCXByb2ZfdGltZV9yZXNfZGVmYXVsdCA9IDAsCi0JcHJvZl90aW1lX3Jlc19oaWdoID0gMQot fTsKLXR5cGVkZWYgZW51bSBwcm9mX3RpbWVfcmVzX2UgcHJvZl90aW1lX3Jlc190OwotCi1leHRl cm4gcHJvZl90aW1lX3Jlc190IG9wdF9wcm9mX3RpbWVfcmVzOwotZXh0ZXJuIGNvbnN0IGNoYXIg KnByb2ZfdGltZV9yZXNfbW9kZV9uYW1lc1tdOwotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZv aWQKLW5zdGltZV9pbml0X3plcm8obnN0aW1lX3QgKnRpbWUpIHsKLQluc3RpbWVfY29weSh0aW1l LCAmbnN0aW1lX3plcm8pOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLW5zdGlt ZV9lcXVhbHNfemVybyhuc3RpbWVfdCAqdGltZSkgewotCWludCBkaWZmID0gbnN0aW1lX2NvbXBh cmUodGltZSwgJm5zdGltZV96ZXJvKTsKLQlhc3NlcnQoZGlmZiA+PSAwKTsKLQlyZXR1cm4gZGlm ZiA9PSAwOwotfQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfTlNUSU1FX0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL3BhLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BhLmgKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDQ3NDhhMDUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wYS5oCisrKyAvZGV2 L251bGwKQEAgLTEsMjQzICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUEFfSAot I2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QQV9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9iYXNlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZGVjYXkuaCIKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lY2FjaGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9lZGF0YV9jYWNoZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2VtYXAuaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ocGEuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9sb2NrZWRpbnQuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wYWMuaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wYWkuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9zZWMuaCIKLQotLyoKLSAqIFRoZSBwYWdlIGFsbG9jYXRvcjsgcmVzcG9uc2libGUg Zm9yIGFjcXVpcmluZyBwYWdlcyBvZiBtZW1vcnkgZm9yCi0gKiBhbGxvY2F0aW9ucy4gIEl0IHBp Y2tzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGFnZSBhbGxvY2F0b3IgaW50ZXJmYWNlCi0g KiAoaS5lLiBhIHBhaV90KSB0byBoYW5kbGUgYSBnaXZlbiBwYWdlLWxldmVsIGFsbG9jYXRpb24g cmVxdWVzdC4gIEZvciBub3csIHRoZQotICogb25seSBzdWNoIGltcGxlbWVudGF0aW9uIGlzIHRo ZSBQQUMgY29kZSAoInBhZ2UgYWxsb2NhdG9yIGNsYXNzaWMiKSwgYnV0Ci0gKiBvdGhlcnMgd2ls bCBiZSBjb21pbmcgc29vbi4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBwYV9jZW50cmFsX3MgcGFf Y2VudHJhbF90Owotc3RydWN0IHBhX2NlbnRyYWxfcyB7Ci0JaHBhX2NlbnRyYWxfdCBocGE7Ci19 OwotCi0vKgotICogVGhlIHN0YXRzIGZvciBhIHBhcnRpY3VsYXIgcGFfc2hhcmQuICBCZWNhdXNl IG9mIHRoZSB3YXkgdGhlIGN0bCBtb2R1bGUKLSAqIGhhbmRsZXMgc3RhdHMgZXBvY2ggZGF0YSBj b2xsZWN0aW9uIChpdCBoYXMgaXRzIG93biBhcmVuYV9zdGF0cywgYW5kIG1lcmdlcwotICogdGhl IHN0YXRzIGZyb20gZWFjaCBhcmVuYSBpbnRvIGl0KSwgdGhpcyBuZWVkcyB0byBsaXZlIGluIHRo ZSBhcmVuYV9zdGF0c190OwotICogaGVuY2Ugd2UgZGVmaW5lIGl0IGhlcmUgYW5kIGxldCB0aGUg cGFfc2hhcmQgaGF2ZSBhIHBvaW50ZXIgKHJhdGhlciB0aGFuIHRoZQotICogbW9yZSBuYXR1cmFs IGFwcHJvYWNoIG9mIGp1c3QgZW1iZWRkaW5nIGl0IGluIHRoZSBwYV9zaGFyZCBpdHNlbGYpLgot ICoKLSAqIFdlIGZvbGxvdyB0aGUgYXJlbmFfc3RhdHNfdCBhcHByb2FjaCBvZiBtYXJraW5nIHRo ZSBkZXJpdmVkIGZpZWxkcy4gIFRoZXNlCi0gKiBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgbm90IG1h aW50YWluZWQgb24gdGhlaXIgb3duOyBpbnN0ZWFkLCB0aGVpciB2YWx1ZXMgYXJlCi0gKiBkZXJp dmVkIGR1cmluZyB0aG9zZSBzdGF0cyBtZXJnZXMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHBhX3No YXJkX3N0YXRzX3MgcGFfc2hhcmRfc3RhdHNfdDsKLXN0cnVjdCBwYV9zaGFyZF9zdGF0c19zIHsK LQkvKiBOdW1iZXIgb2YgZWRhdGFfdCBzdHJ1Y3RzIGFsbG9jYXRlZCBieSBiYXNlLCBidXQgbm90 IGJlaW5nIHVzZWQuICovCi0Jc2l6ZV90IGVkYXRhX2F2YWlsOyAvKiBEZXJpdmVkLiAqLwotCS8q Ci0JICogU3RhdHMgc3BlY2lmaWMgdG8gdGhlIFBBQy4gIEZvciBub3csIHRoZXNlIGFyZSB0aGUg b25seSBzdGF0cyB0aGF0Ci0JICogZXhpc3QsIGJ1dCB0aGVyZSB3aWxsIGV2ZW50dWFsbHkgYmUg b3RoZXIgcGFnZSBhbGxvY2F0b3JzLiAgVGhpbmdzCi0JICogbGlrZSBlZGF0YV9hdmFpbCBtYWtl IHNlbnNlIGluIGEgY3Jvc3MtUEEgc2Vuc2UsIGJ1dCB0aGluZ3MgbGlrZQotCSAqIG5wdXJnZXMg ZG9uJ3QuCi0JICovCi0JcGFjX3N0YXRzX3QgcGFjX3N0YXRzOwotfTsKLQotLyoKLSAqIFRoZSBs b2NhbCBhbGxvY2F0b3IgaGFuZGxlLiAgS2VlcHMgdGhlIHN0YXRlIG5lY2Vzc2FyeSB0byBzYXRp c2Z5IHBhZ2Utc2l6ZWQKLSAqIGFsbG9jYXRpb25zLgotICoKLSAqIFRoZSBjb250ZW50cyBhcmUg bW9zdGx5IGludGVybmFsIHRvIHRoZSBQQSBtb2R1bGUuICBUaGUga2V5IGV4Y2VwdGlvbiBpcyB0 aGF0Ci0gKiBhcmVuYSBkZWNheSBjb2RlIGlzIGFsbG93ZWQgdG8gZ3JhYiBwb2ludGVycyB0byB0 aGUgZGlydHkgYW5kIG11enp5IGVjYWNoZXMKLSAqIGRlY2F5X3RzLCBmb3IgYSBjb3VwbGUgb2Yg cXVlcmllcywgcGFzc2luZyB0aGVtIGJhY2sgdG8gYSBQQSBmdW5jdGlvbiwgb3IKLSAqIGFjcXVp cmluZyBkZWNheS5tdHggYW5kIGxvb2tpbmcgYXQgZGVjYXkucHVyZ2luZy4gIFRoZSByZWFzb25p bmcgaXMgdGhhdCwKLSAqIHdoaWxlIFBBIGRlY2lkZXMgd2hhdCBhbmQgaG93IHRvIHB1cmdlLCB0 aGUgYXJlbmEgY29kZSBkZWNpZGVzIHdoZW4gYW5kIHdoZXJlCi0gKiAoZS5nLiBvbiB3aGF0IHRo cmVhZCkuICBJdCdzIGFsbG93ZWQgdG8gdXNlIHRoZSBwcmVzZW5jZSBvZiBhbm90aGVyIHB1cmdl ciB0bwotICogZGVjaWRlLgotICogKFRoZSBiYWNrZ3JvdW5kIHRocmVhZCBjb2RlIGFsc28gdG91 Y2hlcyBzb21lIG90aGVyIGRlY2F5IGludGVybmFscywgYnV0Ci0gKiB0aGF0J3Mgbm90IGZ1bmRh bWVudGFsOyBpdHMnIGp1c3QgYW4gYXJ0aWZhY3Qgb2YgYSBwYXJ0aWFsIHJlZmFjdG9yaW5nLCBh bmQKLSAqIGl0cyBhY2Nlc3NlcyBjb3VsZCBiZSBzdHJhaWdodGZvcndhcmRseSBtb3ZlZCBpbnNp ZGUgdGhlIGRlY2F5IG1vZHVsZSkuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHBhX3NoYXJkX3MgcGFf c2hhcmRfdDsKLXN0cnVjdCBwYV9zaGFyZF9zIHsKLQkvKiBUaGUgY2VudHJhbCBQQSB0aGlzIHNo YXJkIGlzIGFzc29jaWF0ZWQgd2l0aC4gKi8KLQlwYV9jZW50cmFsX3QgKmNlbnRyYWw7Ci0KLQkv KgotCSAqIE51bWJlciBvZiBwYWdlcyBpbiBhY3RpdmUgZXh0ZW50cy4KLQkgKgotCSAqIFN5bmNo cm9uaXphdGlvbjogYXRvbWljLgotCSAqLwotCWF0b21pY196dV90IG5hY3RpdmU7Ci0KLQkvKgot CSAqIFdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBwcmVmZXIgdGhlIGh1Z2VwYWdlIGFsbG9jYXRv ci4gIEF0b21pYyBzaW5jZQotCSAqIGl0IG1heSBiZSBjb25jdXJyZW50bHkgbW9kaWZpZWQgYnkg YSB0aHJlYWQgc2V0dGluZyBleHRlbnQgaG9va3MuCi0JICogTm90ZSB0aGF0IHdlIHN0aWxsIG1h eSBkbyBIUEEgb3BlcmF0aW9ucyBpbiB0aGlzIGFyZW5hOyBpZiB1c2VfaHBhIGlzCi0JICogY2hh bmdlZCBmcm9tIHRydWUgdG8gZmFsc2UsIHdlJ2xsIGZyZWUgYmFjayB0byB0aGUgaHVnZXBhZ2Ug YWxsb2NhdG9yCi0JICogZm9yIHRob3NlIGFsbG9jYXRpb25zLgotCSAqLwotCWF0b21pY19iX3Qg dXNlX2hwYTsKLQotCS8qCi0JICogSWYgd2UgbmV2ZXIgdXNlZCB0aGUgSFBBIHRvIGJlZ2luIHdp dGgsIGl0IHdhc24ndCBpbml0aWFsaXplZCwgYW5kIHNvCi0JICogd2Ugc2hvdWxkbid0IHRyeSB0 byBlLmcuIGFjcXVpcmUgaXRzIG11dGV4ZXMgZHVyaW5nIGZvcmsuICBUaGlzCi0JICogdHJhY2tz IHRoYXQga25vd2xlZGdlLgotCSAqLwotCWJvb2wgZXZlcl91c2VkX2hwYTsKLQotCS8qIEFsbG9j YXRlcyBmcm9tIGEgUEFDLiAqLwotCXBhY190IHBhYzsKLQotCS8qCi0JICogV2UgcGxhY2UgYSBz bWFsbCBleHRlbnQgY2FjaGUgaW4gZnJvbnQgb2YgdGhlIEhQQSwgc2luY2Ugd2UgaW50ZW5kCi0J ICogdGhlc2UgY29uZmlndXJhdGlvbnMgdG8gdXNlIG1hbnkgZmV3ZXIgYXJlbmFzLCBhbmQgdGhl cmVmb3JlIGhhdmUgYQotCSAqIGhpZ2hlciByaXNrIG9mIGhvdCBsb2Nrcy4KLQkgKi8KLQlzZWNf dCBocGFfc2VjOwotCWhwYV9zaGFyZF90IGhwYV9zaGFyZDsKLQotCS8qIFRoZSBzb3VyY2Ugb2Yg ZWRhdGFfdCBvYmplY3RzLiAqLwotCWVkYXRhX2NhY2hlX3QgZWRhdGFfY2FjaGU7Ci0KLQl1bnNp Z25lZCBpbmQ7Ci0KLQltYWxsb2NfbXV0ZXhfdCAqc3RhdHNfbXR4OwotCXBhX3NoYXJkX3N0YXRz X3QgKnN0YXRzOwotCi0JLyogVGhlIGVtYXAgdGhpcyBzaGFyZCBpcyB0aWVkIHRvLiAqLwotCWVt YXBfdCAqZW1hcDsKLQotCS8qIFRoZSBiYXNlIGZyb20gd2hpY2ggd2UgZ2V0IHRoZSBlaG9va3Mg YW5kIGFsbG9jYXRlIG1ldGFkYXQuICovCi0JYmFzZV90ICpiYXNlOwotfTsKLQotc3RhdGljIGlu bGluZSBib29sCi1wYV9zaGFyZF9kb250X2RlY2F5X211enp5KHBhX3NoYXJkX3QgKnNoYXJkKSB7 Ci0JcmV0dXJuIGVjYWNoZV9ucGFnZXNfZ2V0KCZzaGFyZC0+cGFjLmVjYWNoZV9tdXp6eSkgPT0g MCAmJgotCSAgICBwYWNfZGVjYXlfbXNfZ2V0KCZzaGFyZC0+cGFjLCBleHRlbnRfc3RhdGVfbXV6 enkpIDw9IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZWhvb2tzX3QgKgotcGFfc2hhcmRfZWhvb2tz X2dldChwYV9zaGFyZF90ICpzaGFyZCkgewotCXJldHVybiBiYXNlX2Vob29rc19nZXQoc2hhcmQt PmJhc2UpOwotfQotCi0vKiBSZXR1cm5zIHRydWUgb24gZXJyb3IuICovCi1ib29sIHBhX2NlbnRy YWxfaW5pdChwYV9jZW50cmFsX3QgKmNlbnRyYWwsIGJhc2VfdCAqYmFzZSwgYm9vbCBocGEsCi0g ICAgaHBhX2hvb2tzX3QgKmhwYV9ob29rcyk7Ci0KLS8qIFJldHVybnMgdHJ1ZSBvbiBlcnJvci4g Ki8KLWJvb2wgcGFfc2hhcmRfaW5pdCh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLCBw YV9jZW50cmFsX3QgKmNlbnRyYWwsCi0gICAgZW1hcF90ICplbWFwLCBiYXNlX3QgKmJhc2UsIHVu c2lnbmVkIGluZCwgcGFfc2hhcmRfc3RhdHNfdCAqc3RhdHMsCi0gICAgbWFsbG9jX211dGV4X3Qg KnN0YXRzX210eCwgbnN0aW1lX3QgKmN1cl90aW1lLCBzaXplX3Qgb3ZlcnNpemVfdGhyZXNob2xk LAotICAgIHNzaXplX3QgZGlydHlfZGVjYXlfbXMsIHNzaXplX3QgbXV6enlfZGVjYXlfbXMpOwot Ci0vKgotICogVGhpcyBpc24ndCBleHBvc2VkIHRvIHVzZXJzOyB3ZSBhbGxvdyBsYXRlIGVuYWJs ZW1lbnQgb2YgdGhlIEhQQSBzaGFyZCBzbwotICogdGhhdCB3ZSBjYW4gYm9vdCB3aXRob3V0IHdv cnJ5aW5nIGFib3V0IHRoZSBIUEEsIHRoZW4gdHVybiBpdCBvbiBpbiBhMC4KLSAqLwotYm9vbCBw YV9zaGFyZF9lbmFibGVfaHBhKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsCi0gICAg Y29uc3QgaHBhX3NoYXJkX29wdHNfdCAqaHBhX29wdHMsIGNvbnN0IHNlY19vcHRzX3QgKmhwYV9z ZWNfb3B0cyk7Ci0KLS8qCi0gKiBXZSBzdG9wIHVzaW5nIHRoZSBIUEEgd2hlbiBjdXN0b20gZXh0 ZW50IGhvb2tzIGFyZSBpbnN0YWxsZWQsIGJ1dCBzdGlsbAotICogcmVkaXJlY3QgZGVhbGxvY2F0 aW9ucyB0byBpdC4KLSAqLwotdm9pZCBwYV9zaGFyZF9kaXNhYmxlX2hwYSh0c2RuX3QgKnRzZG4s IHBhX3NoYXJkX3QgKnNoYXJkKTsKLQotLyoKLSAqIFRoaXMgZG9lcyB0aGUgUEEtc3BlY2lmaWMg cGFydHMgb2YgYXJlbmEgcmVzZXQgKGkuZS4gZnJlZWluZyBhbGwgYWN0aXZlCi0gKiBhbGxvY2F0 aW9ucykuCi0gKi8KLXZvaWQgcGFfc2hhcmRfcmVzZXQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90 ICpzaGFyZCk7Ci0KLS8qCi0gKiBEZXN0cm95IGFsbCB0aGUgcmVtYWluaW5nIHJldGFpbmVkIGV4 dGVudHMuICBTaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIKLSAqIGRlY2F5aW5nIGFsbCBhY3Rp dmUsIGRpcnR5LCBhbmQgbXV6enkgZXh0ZW50cyB0byB0aGUgcmV0YWluZWQgc3RhdGUsIGFzIHRo ZQotICogbGFzdCBzdGVwIGluIGRlc3Ryb3lpbmcgdGhlIHNoYXJkLgotICovCi12b2lkIHBhX3No YXJkX2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCk7Ci0KLS8qIEdldHMg YW4gZWRhdGEgZm9yIHRoZSBnaXZlbiBhbGxvY2F0aW9uLiAqLwotZWRhdGFfdCAqcGFfYWxsb2Mo dHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90 IGFsaWdubWVudCwgYm9vbCBzbGFiLCBzemluZF90IHN6aW5kLCBib29sIHplcm8sIGJvb2wgZ3Vh cmRlZCwKLSAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0vKiBSZXR1cm5zIHRy dWUgb24gZXJyb3IsIGluIHdoaWNoIGNhc2Ugbm90aGluZyBjaGFuZ2VkLiAqLwotYm9vbCBwYV9l eHBhbmQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZWRhdGFfdCAqZWRhdGEsIHNp emVfdCBvbGRfc2l6ZSwKLSAgICBzaXplX3QgbmV3X3NpemUsIHN6aW5kX3Qgc3ppbmQsIGJvb2wg emVybywgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotLyoKLSAqIFRoZSBzYW1lLiAg U2V0cyAqZ2VuZXJhdGVkX2RpcnR5IHRvIHRydWUgaWYgd2UgcHJvZHVjZWQgbmV3IGRpcnR5IHBh Z2VzLCBhbmQKLSAqIGZhbHNlIG90aGVyd2lzZS4KLSAqLwotYm9vbCBwYV9zaHJpbmsodHNkbl90 ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRfc2l6 ZSwKLSAgICBzaXplX3QgbmV3X3NpemUsIHN6aW5kX3Qgc3ppbmQsIGJvb2wgKmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKLS8qCi0gKiBGcmVlcyB0aGUgZ2l2ZW4gZWRhdGEgYmFjayB0byB0aGUg cGEuICBTZXRzICpnZW5lcmF0ZWRfZGlydHkgaWYgd2UgcHJvZHVjZWQKLSAqIG5ldyBkaXJ0eSBw YWdlcyAod2VsbCwgd2UgYWx3YXlzIHNldCBpdCBmb3Igbm93OyBidXQgdGhpcyBuZWVkIG5vdCBi ZSB0aGUKLSAqIGNhc2UpLgotICogKFdlIGNvdWxkIG1ha2UgZ2VuZXJhdGVkX2RpcnR5IHRoZSBy ZXR1cm4gdmFsdWUgb2YgY291cnNlLCBidXQgdGhpcyBpcyBtb3JlCi0gKiBjb25zaXN0ZW50IHdp dGggdGhlIHNocmluayBwYXRod2F5IGFuZCBvdXIgZXJyb3IgY29kZXMgaGVyZSkuCi0gKi8KLXZv aWQgcGFfZGFsbG9jKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsIGVkYXRhX3QgKmVk YXRhLAotICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLWJvb2wgcGFfZGVjYXlf bXNfc2V0KHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsIGV4dGVudF9zdGF0ZV90IHN0 YXRlLAotICAgIHNzaXplX3QgZGVjYXlfbXMsIHBhY19wdXJnZV9lYWdlcm5lc3NfdCBlYWdlcm5l c3MpOwotc3NpemVfdCBwYV9kZWNheV9tc19nZXQocGFfc2hhcmRfdCAqc2hhcmQsIGV4dGVudF9z dGF0ZV90IHN0YXRlKTsKLQotLyoKLSAqIERvIGRlZmVycmVkIHdvcmsgb24gdGhpcyBQQSBzaGFy ZC4KLSAqCi0gKiBNb3JhbGx5LCB0aGlzIHNob3VsZCBkbyBib3RoIFBBQyBkZWNheSBhbmQgdGhl IEhQQSBkZWZlcnJlZCB3b3JrLiAgRm9yIG5vdywKLSAqIHRob3VnaCwgdGhlIGFyZW5hLCBiYWNr Z3JvdW5kIHRocmVhZCwgYW5kIFBBQyBtb2R1bGVzIGFyZSB0aWdodGx5IGludGVyd292ZW4KLSAq IGluIGEgd2F5IHRoYXQncyB0cmlja3kgdG8gZXh0cmljYXRlLCBzbyB3ZSBvbmx5IGRvIHRoZSBI UEEtc3BlY2lmaWMgcGFydHMuCi0gKi8KLXZvaWQgcGFfc2hhcmRfc2V0X2RlZmVycmFsX2FsbG93 ZWQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwKLSAgICBib29sIGRlZmVycmFsX2Fs bG93ZWQpOwotdm9pZCBwYV9zaGFyZF9kb19kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwgcGFf c2hhcmRfdCAqc2hhcmQpOwotdm9pZCBwYV9zaGFyZF90cnlfZGVmZXJyZWRfd29yayh0c2RuX3Qg KnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkKTsKLXVpbnQ2NF90IHBhX3NoYXJkX3RpbWVfdW50aWxf ZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkKTsKLQotLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLS8qCi0gKiBWYXJpb3VzIGJpdHMgb2YgImJvcmluZyIgZnVuY3Rp b25hbGl0eSB0aGF0IGFyZSBzdGlsbCBwYXJ0IG9mIHRoaXMgbW9kdWxlLAotICogYnV0IHRoYXQg d2UgcmVsZWdhdGUgdG8gcGFfZXh0cmEuYywgdG8ga2VlcCB0aGUgY29yZSBsb2dpYyBpbiBwYS5j IGFzCi0gKiByZWFkYWJsZSBhcyBwb3NzaWJsZS4KLSAqLwotCi0vKgotICogVGhlc2UgZm9yayBw aGFzZXMgYXJlIHN5bmNocm9uaXplZCB3aXRoIHRoZSBhcmVuYSBmb3JrIHBoYXNlIG51bWJlcmlu ZyB0bwotICogbWFrZSBpdCBlYXN5IHRvIGtlZXAgc3RyYWlnaHQuIFRoYXQncyB3aHkgdGhlcmUn cyBubyBwcmVmb3JrMS4KLSAqLwotdm9pZCBwYV9zaGFyZF9wcmVmb3JrMCh0c2RuX3QgKnRzZG4s IHBhX3NoYXJkX3QgKnNoYXJkKTsKLXZvaWQgcGFfc2hhcmRfcHJlZm9yazIodHNkbl90ICp0c2Ru LCBwYV9zaGFyZF90ICpzaGFyZCk7Ci12b2lkIHBhX3NoYXJkX3ByZWZvcmszKHRzZG5fdCAqdHNk biwgcGFfc2hhcmRfdCAqc2hhcmQpOwotdm9pZCBwYV9zaGFyZF9wcmVmb3JrNCh0c2RuX3QgKnRz ZG4sIHBhX3NoYXJkX3QgKnNoYXJkKTsKLXZvaWQgcGFfc2hhcmRfcHJlZm9yazUodHNkbl90ICp0 c2RuLCBwYV9zaGFyZF90ICpzaGFyZCk7Ci12b2lkIHBhX3NoYXJkX3Bvc3Rmb3JrX3BhcmVudCh0 c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkKTsKLXZvaWQgcGFfc2hhcmRfcG9zdGZvcmtf Y2hpbGQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCk7Ci0KLXZvaWQgcGFfc2hhcmRf YmFzaWNfc3RhdHNfbWVyZ2UocGFfc2hhcmRfdCAqc2hhcmQsIHNpemVfdCAqbmFjdGl2ZSwKLSAg ICBzaXplX3QgKm5kaXJ0eSwgc2l6ZV90ICpubXV6enkpOwotCi12b2lkIHBhX3NoYXJkX3N0YXRz X21lcmdlKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsCi0gICAgcGFfc2hhcmRfc3Rh dHNfdCAqcGFfc2hhcmRfc3RhdHNfb3V0LCBwYWNfZXN0YXRzX3QgKmVzdGF0c19vdXQsCi0gICAg aHBhX3NoYXJkX3N0YXRzX3QgKmhwYV9zdGF0c19vdXQsIHNlY19zdGF0c190ICpzZWNfc3RhdHNf b3V0LAotICAgIHNpemVfdCAqcmVzaWRlbnQpOwotCi0vKgotICogUmVhZHMgdGhlIFBBLW93bmVk IG11dGV4IHN0YXRzIGludG8gdGhlIG91dHB1dCBzdGF0cyBhcnJheSwgYXQgdGhlCi0gKiBhcHBy b3ByaWF0ZSBwb3NpdGlvbnMuICBNb3JhbGx5LCB0aGVzZSBzdGF0cyBzaG91bGQgcmVhbGx5IGxp dmUgaW4KLSAqIHBhX3NoYXJkX3N0YXRzX3QsIGJ1dCB0aGUgaW5kaWNlcyBhcmUgc29ydCBvZiBi YWtlZCBpbnRvIHRoZSB2YXJpb3VzIG11dGV4Ci0gKiBwcm9mIG1hY3Jvcy4gIFRoaXMgd291bGQg YmUgYSBnb29kIHRoaW5nIHRvIGRvIGF0IHNvbWUgcG9pbnQuCi0gKi8KLXZvaWQgcGFfc2hhcmRf bXR4X3N0YXRzX3JlYWQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwKLSAgICBtdXRl eF9wcm9mX2RhdGFfdCBtdXRleF9wcm9mX2RhdGFbbXV0ZXhfcHJvZl9udW1fYXJlbmFfbXV0ZXhl c10pOwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUEFfSCAqLwoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvcGFjLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BhYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMWM0ZTZhLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGFjLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxNzkgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QQUNfSAotI2RlZmlu ZSBKRU1BTExPQ19JTlRFUk5BTF9QQUNfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv ZXhwX2dyb3cuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wYWkuaCIKLSNpbmNsdWRl ICJzYW5fYnVtcC5oIgotCi0KLS8qCi0gKiBQYWdlIGFsbG9jYXRvciBjbGFzc2ljOyBhbiBpbXBs ZW1lbnRhdGlvbiBvZiB0aGUgUEFJIGludGVyZmFjZSB0aGF0OgotICogLSBDYW4gYmUgdXNlZCBm b3IgYXJlbmFzIHdpdGggY3VzdG9tIGV4dGVudCBob29rcy4KLSAqIC0gQ2FuIGFsd2F5cyBzYXRp c2Z5IGFueSBhbGxvY2F0aW9uIHJlcXVlc3QgKGluY2x1ZGluZyBoaWdobHktZnJhZ21lbnRhcnkK LSAqICAgb25lcykuCi0gKiAtIENhbiB1c2UgZWZmaWNpZW50IE9TLWxldmVsIHplcm9pbmcgcHJp bWl0aXZlcyBmb3IgZGVtYW5kLWZpbGxlZCBwYWdlcy4KLSAqLwotCi0vKiBIb3cgImVhZ2VyIiBk ZWNheS9wdXJnaW5nIHNob3VsZCBiZS4gKi8KLWVudW0gcGFjX3B1cmdlX2VhZ2VybmVzc19lIHsK LQlQQUNfUFVSR0VfQUxXQVlTLAotCVBBQ19QVVJHRV9ORVZFUiwKLQlQQUNfUFVSR0VfT05fRVBP Q0hfQURWQU5DRQotfTsKLXR5cGVkZWYgZW51bSBwYWNfcHVyZ2VfZWFnZXJuZXNzX2UgcGFjX3B1 cmdlX2VhZ2VybmVzc190OwotCi10eXBlZGVmIHN0cnVjdCBwYWNfZGVjYXlfc3RhdHNfcyBwYWNf ZGVjYXlfc3RhdHNfdDsKLXN0cnVjdCBwYWNfZGVjYXlfc3RhdHNfcyB7Ci0JLyogVG90YWwgbnVt YmVyIG9mIHB1cmdlIHN3ZWVwcy4gKi8KLQlsb2NrZWRfdTY0X3QgbnB1cmdlOwotCS8qIFRvdGFs IG51bWJlciBvZiBtYWR2aXNlIGNhbGxzIG1hZGUuICovCi0JbG9ja2VkX3U2NF90IG5tYWR2aXNl OwotCS8qIFRvdGFsIG51bWJlciBvZiBwYWdlcyBwdXJnZWQuICovCi0JbG9ja2VkX3U2NF90IHB1 cmdlZDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHBhY19lc3RhdHNfcyBwYWNfZXN0YXRzX3Q7Ci1z dHJ1Y3QgcGFjX2VzdGF0c19zIHsKLQkvKgotCSAqIFN0YXRzIGZvciBhIGdpdmVuIGluZGV4IGlu IHRoZSByYW5nZSBbMCwgU0NfTlBTSVpFU10gaW4gdGhlIHZhcmlvdXMKLQkgKiBlY2FjaGVfdHMu Ci0JICogV2UgdHJhY2sgYm90aCBieXRlcyBhbmQgIyBvZiBleHRlbnRzOiB0d28gZXh0ZW50cyBp biB0aGUgc2FtZSBidWNrZXQKLQkgKiBtYXkgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgaWYgYWRqYWNl bnQgc2l6ZSBjbGFzc2VzIGRpZmZlciBieSBtb3JlIHRoYW4KLQkgKiBhIHBhZ2UsIHNvIGJ5dGVz IGNhbm5vdCBhbHdheXMgYmUgZGVyaXZlZCBmcm9tICMgb2YgZXh0ZW50cy4KLQkgKi8KLQlzaXpl X3QgbmRpcnR5OwotCXNpemVfdCBkaXJ0eV9ieXRlczsKLQlzaXplX3Qgbm11enp5OwotCXNpemVf dCBtdXp6eV9ieXRlczsKLQlzaXplX3QgbnJldGFpbmVkOwotCXNpemVfdCByZXRhaW5lZF9ieXRl czsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHBhY19zdGF0c19zIHBhY19zdGF0c190Owotc3RydWN0 IHBhY19zdGF0c19zIHsKLQlwYWNfZGVjYXlfc3RhdHNfdCBkZWNheV9kaXJ0eTsKLQlwYWNfZGVj YXlfc3RhdHNfdCBkZWNheV9tdXp6eTsKLQotCS8qCi0JICogTnVtYmVyIG9mIHVudXNlZCB2aXJ0 dWFsIG1lbW9yeSBieXRlcyBjdXJyZW50bHkgcmV0YWluZWQuICBSZXRhaW5lZAotCSAqIGJ5dGVz IGFyZSB0ZWNobmljYWxseSBtYXBwZWQgKHRob3VnaCBhbHdheXMgZGVjb21taXR0ZWQgb3IgcHVy Z2VkKSwKLQkgKiBidXQgdGhleSBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgbWFwcGVkIHN0YXRpc3Rp YyAoYWJvdmUpLgotCSAqLwotCXNpemVfdCByZXRhaW5lZDsgLyogRGVyaXZlZC4gKi8KLQotCS8q Ci0JICogTnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBtYXBwZWQsIGV4Y2x1ZGluZyByZXRhaW5l ZCBtZW1vcnkgKGFuZCBhbnkKLQkgKiBiYXNlLWFsbG9jYXRlZCBtZW1vcnksIHdoaWNoIGlzIHRy YWNrZWQgYnkgdGhlIGFyZW5hIHN0YXRzKS4KLQkgKgotCSAqIFdlIG5hbWUgdGhpcyAicGFjX21h cHBlZCIgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlIGFyZW5hX3N0YXRzCi0JICogIm1hcHBl ZCIuCi0JICovCi0JYXRvbWljX3p1X3QgcGFjX21hcHBlZDsKLQotCS8qIFZNIHNwYWNlIGhhZCB0 byBiZSBsZWFrZWQgKHVuZG9jdW1lbnRlZCkuICBOb3JtYWxseSAwLiAqLwotCWF0b21pY196dV90 IGFiYW5kb25lZF92bTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHBhY19zIHBhY190Owotc3RydWN0 IHBhY19zIHsKLQkvKgotCSAqIE11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciAod2UgY29udmVydCBp dCB0byBhIFBBQyBnaXZlbiBvbmx5IGEKLQkgKiBwb2ludGVyKS4gIFRoZSBoYW5kbGUgdG8gdGhl IGFsbG9jYXRpb24gaW50ZXJmYWNlLgotCSAqLwotCXBhaV90IHBhaTsKLQkvKgotCSAqIENvbGxl Y3Rpb25zIG9mIGV4dGVudHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgYWxsb2NhdGVkLiAgVGhlc2Ug YXJlCi0JICogdXNlZCB3aGVuIGFsbG9jYXRpbmcgZXh0ZW50cywgaW4gYW4gYXR0ZW1wdCB0byBy ZS11c2UgYWRkcmVzcyBzcGFjZS4KLQkgKgotCSAqIFN5bmNocm9uaXphdGlvbjogaW50ZXJuYWwu Ci0JICovCi0JZWNhY2hlX3QgZWNhY2hlX2RpcnR5OwotCWVjYWNoZV90IGVjYWNoZV9tdXp6eTsK LQllY2FjaGVfdCBlY2FjaGVfcmV0YWluZWQ7Ci0KLQliYXNlX3QgKmJhc2U7Ci0JZW1hcF90ICpl bWFwOwotCWVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlOwotCi0JLyogVGhlIGdyb3cgaW5mbyBm b3IgdGhlIHJldGFpbmVkIGVjYWNoZS4gKi8KLQlleHBfZ3Jvd190IGV4cF9ncm93OwotCW1hbGxv Y19tdXRleF90IGdyb3dfbXR4OwotCi0JLyogU3BlY2lhbCBhbGxvY2F0b3IgZm9yIGd1YXJkZWQg ZnJlcXVlbnRseSByZXVzZWQgZXh0ZW50cy4gKi8KLQlzYW5fYnVtcF9hbGxvY190IHNiYTsKLQot CS8qIEhvdyBsYXJnZSBleHRlbnRzIHNob3VsZCBiZSBiZWZvcmUgZ2V0dGluZyBhdXRvLXB1cmdl ZC4gKi8KLQlhdG9taWNfenVfdCBvdmVyc2l6ZV90aHJlc2hvbGQ7Ci0KLQkvKgotCSAqIERlY2F5 LWJhc2VkIHB1cmdpbmcgc3RhdGUsIHJlc3BvbnNpYmxlIGZvciBzY2hlZHVsaW5nIGV4dGVudCBz dGF0ZQotCSAqIHRyYW5zaXRpb25zLgotCSAqCi0JICogU3luY2hyb25pemF0aW9uOiB2aWEgdGhl IGludGVybmFsIG11dGV4LgotCSAqLwotCWRlY2F5X3QgZGVjYXlfZGlydHk7IC8qIGRpcnR5IC0t PiBtdXp6eSAqLwotCWRlY2F5X3QgZGVjYXlfbXV6enk7IC8qIG11enp5IC0tPiByZXRhaW5lZCAq LwotCi0JbWFsbG9jX211dGV4X3QgKnN0YXRzX210eDsKLQlwYWNfc3RhdHNfdCAqc3RhdHM7Ci0K LQkvKiBFeHRlbnQgc2VyaWFsIG51bWJlciBnZW5lcmF0b3Igc3RhdGUuICovCi0JYXRvbWljX3p1 X3QgZXh0ZW50X3NuX25leHQ7Ci19OwotCi1ib29sIHBhY19pbml0KHRzZG5fdCAqdHNkbiwgcGFj X3QgKnBhYywgYmFzZV90ICpiYXNlLCBlbWFwX3QgKmVtYXAsCi0gICAgZWRhdGFfY2FjaGVfdCAq ZWRhdGFfY2FjaGUsIG5zdGltZV90ICpjdXJfdGltZSwgc2l6ZV90IG92ZXJzaXplX3RocmVzaG9s ZCwKLSAgICBzc2l6ZV90IGRpcnR5X2RlY2F5X21zLCBzc2l6ZV90IG11enp5X2RlY2F5X21zLCBw YWNfc3RhdHNfdCAqcGFjX3N0YXRzLAotICAgIG1hbGxvY19tdXRleF90ICpzdGF0c19tdHgpOwot Ci1zdGF0aWMgaW5saW5lIHNpemVfdAotcGFjX21hcHBlZChwYWNfdCAqcGFjKSB7Ci0JcmV0dXJu IGF0b21pY19sb2FkX3p1KCZwYWMtPnN0YXRzLT5wYWNfbWFwcGVkLCBBVE9NSUNfUkVMQVhFRCk7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZWhvb2tzX3QgKgotcGFjX2Vob29rc19nZXQocGFjX3QgKnBh YykgewotCXJldHVybiBiYXNlX2Vob29rc19nZXQocGFjLT5iYXNlKTsKLX0KLQotLyoKLSAqIEFs bCBwdXJnaW5nIGZ1bmN0aW9ucyByZXF1aXJlIGhvbGRpbmcgZGVjYXktPm10eC4gIFRoaXMgaXMg b25lIG9mIHRoZSBmZXcKLSAqIHBsYWNlcyBleHRlcm5hbCBtb2R1bGVzIGFyZSBhbGxvd2VkIHRv IHBlZWsgaW5zaWRlIHBhX3NoYXJkX3QgaW50ZXJuYWxzLgotICovCi0KLS8qCi0gKiBEZWNheXMg dGhlIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgaW4gdGhlIGVjYWNoZS4gIFRoaXMgbWlnaHQg bm90IGxlYXZlIHRoZQotICogZWNhY2hlIGVtcHR5IGlmIG90aGVyIHRocmVhZHMgYXJlIGluc2Vy dGluZyBkaXJ0eSBvYmplY3RzIGludG8gaXQKLSAqIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBjYWxs LgotICovCi12b2lkIHBhY19kZWNheV9hbGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBkZWNh eV90ICpkZWNheSwKLSAgICBwYWNfZGVjYXlfc3RhdHNfdCAqZGVjYXlfc3RhdHMsIGVjYWNoZV90 ICplY2FjaGUsIGJvb2wgZnVsbHlfZGVjYXkpOwotLyoKLSAqIFVwZGF0ZXMgZGVjYXkgc2V0dGlu Z3MgZm9yIHRoZSBjdXJyZW50IHRpbWUsIGFuZCBjb25kaXRpb25hbGx5IHB1cmdlcyBpbgotICog cmVzcG9uc2UgKGRlcGVuZGluZyBvbiBkZWNheV9wdXJnZV9zZXR0aW5nKS4gIFJldHVybnMgd2hl dGhlciBvciBub3QgdGhlCi0gKiBlcG9jaCBhZHZhbmNlZC4KLSAqLwotYm9vbCBwYWNfbWF5YmVf ZGVjYXlfcHVyZ2UodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBkZWNheV90ICpkZWNheSwKLSAg ICBwYWNfZGVjYXlfc3RhdHNfdCAqZGVjYXlfc3RhdHMsIGVjYWNoZV90ICplY2FjaGUsCi0gICAg cGFjX3B1cmdlX2VhZ2VybmVzc190IGVhZ2VybmVzcyk7Ci0KLS8qCi0gKiBHZXRzIC8gc2V0cyB0 aGUgbWF4aW11bSBhbW91bnQgdGhhdCB3ZSdsbCBncm93IGFuIGFyZW5hIGRvd24gdGhlCi0gKiBn cm93LXJldGFpbmVkIHBhdGh3YXlzICh1bmxlc3MgZm9yY2VkIHRvIGJ5IGFuIGFsbG9jYWN0aW9u IHJlcXVlc3QpLgotICoKLSAqIFNldCBuZXdfbGltaXQgdG8gTlVMTCBpZiBpdCdzIGp1c3QgYSBx dWVyeSwgb3Igb2xkX2xpbWl0IHRvIE5VTEwgaWYgeW91IGRvbid0Ci0gKiBjYXJlIGFib3V0IHRo ZSBwcmV2aW91cyB2YWx1ZS4KLSAqCi0gKiBSZXR1cm5zIHRydWUgb24gZXJyb3IgKGlmIHRoZSBu ZXcgbGltaXQgaXMgbm90IHZhbGlkKS4KLSAqLwotYm9vbCBwYWNfcmV0YWluX2dyb3dfbGltaXRf Z2V0X3NldCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIHNpemVfdCAqb2xkX2xpbWl0LAotICAg IHNpemVfdCAqbmV3X2xpbWl0KTsKLQotYm9vbCBwYWNfZGVjYXlfbXNfc2V0KHRzZG5fdCAqdHNk biwgcGFjX3QgKnBhYywgZXh0ZW50X3N0YXRlX3Qgc3RhdGUsCi0gICAgc3NpemVfdCBkZWNheV9t cywgcGFjX3B1cmdlX2VhZ2VybmVzc190IGVhZ2VybmVzcyk7Ci1zc2l6ZV90IHBhY19kZWNheV9t c19nZXQocGFjX3QgKnBhYywgZXh0ZW50X3N0YXRlX3Qgc3RhdGUpOwotCi12b2lkIHBhY19yZXNl dCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMpOwotdm9pZCBwYWNfZGVzdHJveSh0c2RuX3QgKnRz ZG4sIHBhY190ICpwYWMpOwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUEFDX0ggKi8K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3BhZ2VzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BhZ2VzLmgKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMWY2MDYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wYWdl cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5U RVJOQUxfUEFHRVNfRVhURVJOU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BBR0VTX0VY VEVSTlNfSAotCi0vKiBQYWdlIHNpemUuICBMR19QQUdFIGlzIGRldGVybWluZWQgYnkgdGhlIGNv bmZpZ3VyZSBzY3JpcHQuICovCi0jaWZkZWYgUEFHRV9NQVNLCi0jICB1bmRlZiBQQUdFX01BU0sK LSNlbmRpZgotI2RlZmluZSBQQUdFCQkoKHNpemVfdCkoMVUgPDwgTEdfUEFHRSkpCi0jZGVmaW5l IFBBR0VfTUFTSwkoKHNpemVfdCkoUEFHRSAtIDEpKQotLyogUmV0dXJuIHRoZSBwYWdlIGJhc2Ug YWRkcmVzcyBmb3IgdGhlIHBhZ2UgY29udGFpbmluZyBhZGRyZXNzIGEuICovCi0jZGVmaW5lIFBB R0VfQUREUjJCQVNFKGEpCQkJCQkJXAotCSgodm9pZCAqKSgodWludHB0cl90KShhKSAmIH5QQUdF X01BU0spKQotLyogUmV0dXJuIHRoZSBzbWFsbGVzdCBwYWdlc2l6ZSBtdWx0aXBsZSB0aGF0IGlz ID49IHMuICovCi0jZGVmaW5lIFBBR0VfQ0VJTElORyhzKQkJCQkJCQlcCi0JKCgocykgKyBQQUdF X01BU0spICYgflBBR0VfTUFTSykKLS8qIFJldHVybiB0aGUgbGFyZ2VzdCBwYWdlc2l6ZSBtdWx0 aXBsZSB0aGF0IGlzIDw9cy4gKi8KLSNkZWZpbmUgUEFHRV9GTE9PUihzKSAJCQkJCQkJXAotCSgo cykgJiB+UEFHRV9NQVNLKQotCi0vKiBIdWdlIHBhZ2Ugc2l6ZS4gIExHX0hVR0VQQUdFIGlzIGRl dGVybWluZWQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuICovCi0jZGVmaW5lIEhVR0VQQUdFCSgo c2l6ZV90KSgxVSA8PCBMR19IVUdFUEFHRSkpCi0jZGVmaW5lIEhVR0VQQUdFX01BU0sJKChzaXpl X3QpKEhVR0VQQUdFIC0gMSkpCi0KLSNpZiBMR19IVUdFUEFHRSAhPSAwCi0jICBkZWZpbmUgSFVH RVBBR0VfUEFHRVMgKEhVR0VQQUdFIC8gUEFHRSkKLSNlbHNlCi0vKgotICogSXQncyBjb252ZW5p ZW50IHRvIGRlZmluZSBhcnJheXMgKG9yIGJpdG1hcHMpIG9mIEhVR0VQQUdFX1BBR0VTIGxlbmd0 aHMuICBJZgotICogd2UgY2FuJ3QgYXV0b2RldGVjdCB0aGUgaHVnZXBhZ2Ugc2l6ZSwgaXQgZ2V0 cyB0cmVhdGVkIGFzIDAsIGluIHdoaWNoIGNhc2UKLSAqIHdlJ2xsIHRyaWdnZXIgYSBjb21waWxl ciBlcnJvciBpbiB0aG9zZSBhcnJheXMuICBBdm9pZCB0aGlzIGNhc2UgYnkgZW5zdXJpbmcKLSAq IHRoYXQgdGhpcyB2YWx1ZSBpcyBhdCBsZWFzdCAxLiAgKFdlIHdvbid0IGV2ZXIgcnVuIGluIHRo aXMgZGVncmFkZWQgc3RhdGU7Ci0gKiBocGFfc3VwcG9ydGVkKCkgcmV0dXJucyBmYWxzZSBpbiB0 aGlzIGNhc2UuCi0gKi8KLSMgIGRlZmluZSBIVUdFUEFHRV9QQUdFUyAxCi0jZW5kaWYKLQotLyog UmV0dXJuIHRoZSBodWdlIHBhZ2UgYmFzZSBhZGRyZXNzIGZvciB0aGUgaHVnZSBwYWdlIGNvbnRh aW5pbmcgYWRkcmVzcyBhLiAqLwotI2RlZmluZSBIVUdFUEFHRV9BRERSMkJBU0UoYSkJCQkJCQlc Ci0JKCh2b2lkICopKCh1aW50cHRyX3QpKGEpICYgfkhVR0VQQUdFX01BU0spKQotLyogUmV0dXJu IHRoZSBzbWFsbGVzdCBwYWdlc2l6ZSBtdWx0aXBsZSB0aGF0IGlzID49IHMuICovCi0jZGVmaW5l IEhVR0VQQUdFX0NFSUxJTkcocykJCQkJCQlcCi0JKCgocykgKyBIVUdFUEFHRV9NQVNLKSAmIH5I VUdFUEFHRV9NQVNLKQotCi0vKiBQQUdFU19DQU5fUFVSR0VfTEFaWSBpcyBkZWZpbmVkIGlmIGxh enkgcHVyZ2luZyBpcyBzdXBwb3J0ZWQuICovCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmlu ZWQoSkVNQUxMT0NfUFVSR0VfTUFEVklTRV9GUkVFKQotIyAgZGVmaW5lIFBBR0VTX0NBTl9QVVJH RV9MQVpZCi0jZW5kaWYKLS8qCi0gKiBQQUdFU19DQU5fUFVSR0VfRk9SQ0VEIGlzIGRlZmluZWQg aWYgZm9yY2VkIHB1cmdpbmcgaXMgc3VwcG9ydGVkLgotICoKLSAqIFRoZSBvbmx5IHN1cHBvcnRl ZCB3YXkgdG8gaGFyZC1wdXJnZSBvbiBXaW5kb3dzIGlzIHRvIGRlY29tbWl0IGFuZCB0aGVuCi0g KiByZS1jb21taXQsIGJ1dCBkb2luZyBzbyBpcyByYWN5LCBhbmQgaWYgcmUtY29tbWl0IGZhaWxz IGl0J3MgYSBwYWluIHRvCi0gKiBwcm9wYWdhdGUgdGhlICJwb2lzb25lZCIgbWVtb3J5IHN0YXRl LiAgU2luY2Ugd2UgdHlwaWNhbGx5IGRlY29tbWl0IGFzIHRoZQotICogbmV4dCBzdGVwIGFmdGVy IHB1cmdpbmcgb24gV2luZG93cyBhbnl3YXksIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gYWRkaW5nIHN1 Y2gKLSAqIGNvbXBsZXhpdHkuCi0gKi8KLSNpZiAhZGVmaW5lZChfV0lOMzIpICYmICgoZGVmaW5l ZChKRU1BTExPQ19QVVJHRV9NQURWSVNFX0RPTlRORUVEKSAmJiBcCi0gICAgZGVmaW5lZChKRU1B TExPQ19QVVJHRV9NQURWSVNFX0RPTlRORUVEX1pFUk9TKSkgfHwgXAotICAgIGRlZmluZWQoSkVN QUxMT0NfTUFQU19DT0FMRVNDRSkpCi0jICBkZWZpbmUgUEFHRVNfQ0FOX1BVUkdFX0ZPUkNFRAot I2VuZGlmCi0KLXN0YXRpYyBjb25zdCBib29sIHBhZ2VzX2Nhbl9wdXJnZV9sYXp5ID0KLSNpZmRl ZiBQQUdFU19DQU5fUFVSR0VfTEFaWQotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNlbmRp ZgotICAgIDsKLXN0YXRpYyBjb25zdCBib29sIHBhZ2VzX2Nhbl9wdXJnZV9mb3JjZWQgPQotI2lm ZGVmIFBBR0VTX0NBTl9QVVJHRV9GT1JDRUQKLSAgICB0cnVlCi0jZWxzZQotICAgIGZhbHNlCi0j ZW5kaWYKLSAgICA7Ci0KLSNpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfTUFEVklTRV9IVUdFKSB8 fCBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfTUVNQ05UTCkKLSMgIGRlZmluZSBQQUdFU19DQU5fSFVH SUZZCi0jZW5kaWYKLQotc3RhdGljIGNvbnN0IGJvb2wgcGFnZXNfY2FuX2h1Z2lmeSA9Ci0jaWZk ZWYgUEFHRVNfQ0FOX0hVR0lGWQotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNlbmRpZgot ICAgIDsKLQotdHlwZWRlZiBlbnVtIHsKLQl0aHBfbW9kZV9kZWZhdWx0ICAgICAgID0gMCwgLyog RG8gbm90IGNoYW5nZSBodWdlcGFnZSBzZXR0aW5ncy4gKi8KLQl0aHBfbW9kZV9hbHdheXMgICAg ICAgID0gMSwgLyogQWx3YXlzIHNldCBNQURWX0hVR0VQQUdFLiAqLwotCXRocF9tb2RlX25ldmVy ICAgICAgICAgPSAyLCAvKiBBbHdheXMgc2V0IE1BRFZfTk9IVUdFUEFHRS4gKi8KLQotCXRocF9t b2RlX25hbWVzX2xpbWl0ICAgPSAzLCAvKiBVc2VkIGZvciBvcHRpb24gcHJvY2Vzc2luZy4gKi8K LQl0aHBfbW9kZV9ub3Rfc3VwcG9ydGVkID0gMyAgLyogTm8gVEhQIHN1cHBvcnQgZGV0ZWN0ZWQu ICovCi19IHRocF9tb2RlX3Q7Ci0KLSNkZWZpbmUgVEhQX01PREVfREVGQVVMVCB0aHBfbW9kZV9k ZWZhdWx0Ci1leHRlcm4gdGhwX21vZGVfdCBvcHRfdGhwOwotZXh0ZXJuIHRocF9tb2RlX3QgaW5p dF9zeXN0ZW1fdGhwX21vZGU7IC8qIEluaXRpYWwgc3lzdGVtIHdpZGUgc3RhdGUuICovCi1leHRl cm4gY29uc3QgY2hhciAqdGhwX21vZGVfbmFtZXNbXTsKLQotdm9pZCAqcGFnZXNfbWFwKHZvaWQg KmFkZHIsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICpjb21taXQpOwotdm9p ZCBwYWdlc191bm1hcCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Ci1ib29sIHBhZ2VzX2NvbW1p dCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Ci1ib29sIHBhZ2VzX2RlY29tbWl0KHZvaWQgKmFk ZHIsIHNpemVfdCBzaXplKTsKLWJvb2wgcGFnZXNfcHVyZ2VfbGF6eSh2b2lkICphZGRyLCBzaXpl X3Qgc2l6ZSk7Ci1ib29sIHBhZ2VzX3B1cmdlX2ZvcmNlZCh2b2lkICphZGRyLCBzaXplX3Qgc2l6 ZSk7Ci1ib29sIHBhZ2VzX2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOwotYm9vbCBwYWdl c19ub2h1Z2Uodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOwotYm9vbCBwYWdlc19kb250ZHVtcCh2 b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Ci1ib29sIHBhZ2VzX2RvZHVtcCh2b2lkICphZGRyLCBz aXplX3Qgc2l6ZSk7Ci1ib29sIHBhZ2VzX2Jvb3Qodm9pZCk7Ci12b2lkIHBhZ2VzX3NldF90aHBf c3RhdGUgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOwotdm9pZCBwYWdlc19tYXJrX2d1YXJkcyh2 b2lkICpoZWFkLCB2b2lkICp0YWlsKTsKLXZvaWQgcGFnZXNfdW5tYXJrX2d1YXJkcyh2b2lkICpo ZWFkLCB2b2lkICp0YWlsKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1BBR0VTX0VY VEVSTlNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGFpLmggYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3BhaS5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTc4Y2Q3Li4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvcGFpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9D X0lOVEVSTkFMX1BBSV9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BBSV9ICi0KLS8qIEFu IGludGVyZmFjZSBmb3IgcGFnZSBhbGxvY2F0aW9uLiAqLwotCi10eXBlZGVmIHN0cnVjdCBwYWlf cyBwYWlfdDsKLXN0cnVjdCBwYWlfcyB7Ci0JLyogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuICov Ci0JZWRhdGFfdCAqKCphbGxvYykodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNp emUsCi0JICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgYm9vbCBndWFyZGVkLCBib29s IGZyZXF1ZW50X3JldXNlLAotCSAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0J LyoKLQkgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZXh0ZW50cyBhZGRlZCB0byB0aGUgbGlzdCAo d2hpY2ggbWF5IGJlIGZld2VyCi0JICogdGhhbiByZXF1ZXN0ZWQsIGluIGNhc2Ugb2YgT09NKS4g IFRoZSBsaXN0IHNob3VsZCBhbHJlYWR5IGJlCi0JICogaW5pdGlhbGl6ZWQuICBUaGUgb25seSBh bGlnbm1lbnQgZ3VhcmFudGVlIGlzIHBhZ2UtYWxpZ25tZW50LCBhbmQKLQkgKiB0aGUgcmVzdWx0 cyBhcmUgbm90IG5lY2Vzc2FyaWx5IHplcm9lZC4KLQkgKi8KLQlzaXplX3QgKCphbGxvY19iYXRj aCkodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsCi0JICAgIHNpemVfdCBu YWxsb2NzLCBlZGF0YV9saXN0X2FjdGl2ZV90ICpyZXN1bHRzLAotCSAgICBib29sICpkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCk7Ci0JYm9vbCAoKmV4cGFuZCkodHNkbl90ICp0c2RuLCBwYWlfdCAq c2VsZiwgZWRhdGFfdCAqZWRhdGEsCi0JICAgIHNpemVfdCBvbGRfc2l6ZSwgc2l6ZV90IG5ld19z aXplLCBib29sIHplcm8sCi0JICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQli b29sICgqc2hyaW5rKSh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwK LQkgICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wgKmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKLQl2b2lkICgqZGFsbG9jKSh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxm LCBlZGF0YV90ICplZGF0YSwKLQkgICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwot CS8qIFRoaXMgZnVuY3Rpb24gZW1wdGllcyBvdXQgbGlzdCBhcyBhIHNpZGUtZWZmZWN0IG9mIGJl aW5nIGNhbGxlZC4gKi8KLQl2b2lkICgqZGFsbG9jX2JhdGNoKSh0c2RuX3QgKnRzZG4sIHBhaV90 ICpzZWxmLAotCSAgICBlZGF0YV9saXN0X2FjdGl2ZV90ICpsaXN0LCBib29sICpkZWZlcnJlZF93 b3JrX2dlbmVyYXRlZCk7Ci0JdWludDY0X3QgKCp0aW1lX3VudGlsX2RlZmVycmVkX3dvcmspKHRz ZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYpOwotfTsKLQotLyoKLSAqIFRoZXNlIGFyZSBqdXN0IHNp bXBsZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gYXZvaWQgaGF2aW5nIHRvIHJlZmVyZW5jZSB0 aGUKLSAqIHNhbWUgcGFpX3QgdHdpY2Ugb24gZXZlcnkgaW52b2NhdGlvbi4KLSAqLwotCi1zdGF0 aWMgaW5saW5lIGVkYXRhX3QgKgotcGFpX2FsbG9jKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYs IHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LAotICAgIGJvb2wgemVybywgYm9vbCBndWFy ZGVkLCBib29sIGZyZXF1ZW50X3JldXNlLAotICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJh dGVkKSB7Ci0JcmV0dXJuIHNlbGYtPmFsbG9jKHRzZG4sIHNlbGYsIHNpemUsIGFsaWdubWVudCwg emVybywgZ3VhcmRlZCwKLQkgICAgZnJlcXVlbnRfcmV1c2UsIGRlZmVycmVkX3dvcmtfZ2VuZXJh dGVkKTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLXBhaV9hbGxvY19iYXRjaCh0c2RuX3Qg KnRzZG4sIHBhaV90ICpzZWxmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5hbGxvY3MsCi0gICAgZWRh dGFfbGlzdF9hY3RpdmVfdCAqcmVzdWx0cywgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQp IHsKLQlyZXR1cm4gc2VsZi0+YWxsb2NfYmF0Y2godHNkbiwgc2VsZiwgc2l6ZSwgbmFsbG9jcywg cmVzdWx0cywKLQkgICAgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotfQotCi1zdGF0aWMgaW5s aW5lIGJvb2wKLXBhaV9leHBhbmQodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAq ZWRhdGEsIHNpemVfdCBvbGRfc2l6ZSwKLSAgICBzaXplX3QgbmV3X3NpemUsIGJvb2wgemVybywg Ym9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlyZXR1cm4gc2VsZi0+ZXhwYW5kKHRz ZG4sIHNlbGYsIGVkYXRhLCBvbGRfc2l6ZSwgbmV3X3NpemUsIHplcm8sCi0JICAgIGRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1wYWlfc2hyaW5rKHRz ZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qgb2xkX3NpemUs Ci0gICAgc2l6ZV90IG5ld19zaXplLCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgewot CXJldHVybiBzZWxmLT5zaHJpbmsodHNkbiwgc2VsZiwgZWRhdGEsIG9sZF9zaXplLCBuZXdfc2l6 ZSwKLQkgICAgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv aWQKLXBhaV9kYWxsb2ModHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEs Ci0gICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlzZWxmLT5kYWxsb2ModHNk biwgc2VsZiwgZWRhdGEsIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLX0KLQotc3RhdGljIGlu bGluZSB2b2lkCi1wYWlfZGFsbG9jX2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVk YXRhX2xpc3RfYWN0aXZlX3QgKmxpc3QsCi0gICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0 ZWQpIHsKLQlzZWxmLT5kYWxsb2NfYmF0Y2godHNkbiwgc2VsZiwgbGlzdCwgZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1wYWlfdGltZV91bnRp bF9kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYpIHsKLQlyZXR1cm4gc2Vs Zi0+dGltZV91bnRpbF9kZWZlcnJlZF93b3JrKHRzZG4sIHNlbGYpOwotfQotCi0vKgotICogQW4g aW1wbGVtZW50YXRpb24gb2YgYmF0Y2ggYWxsb2NhdGlvbiB0aGF0IHNpbXBseSBjYWxscyBhbGxv YyBvbmNlIGZvcgotICogZWFjaCBpdGVtIGluIHRoZSBsaXN0LgotICovCi1zaXplX3QgcGFpX2Fs bG9jX2JhdGNoX2RlZmF1bHQodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUs Ci0gICAgc2l6ZV90IG5hbGxvY3MsIGVkYXRhX2xpc3RfYWN0aXZlX3QgKnJlc3VsdHMsIGJvb2wg KmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLS8qIERpdHRvLCBmb3IgZGFsbG9jLiAqLwotdm9p ZCBwYWlfZGFsbG9jX2JhdGNoX2RlZmF1bHQodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwKLSAg ICBlZGF0YV9saXN0X2FjdGl2ZV90ICpsaXN0LCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRl ZCk7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9QQUlfSCAqLwoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvcGVhay5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wZWFrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDU5ZGEzZTQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wZWFrLmgKKysrIC9kZXYvbnVs bApAQCAtMSwzNyArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BFQUtfSAotI2Rl ZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QRUFLX0gKLQotdHlwZWRlZiBzdHJ1Y3QgcGVha19zIHBl YWtfdDsKLXN0cnVjdCBwZWFrX3MgewotCS8qIFRoZSBoaWdoZXN0IHJlY29yZGVkIHBlYWsgdmFs dWUsIGFmdGVyIGFkanVzdG1lbnQgKHNlZSBiZWxvdykuICovCi0JdWludDY0X3QgY3VyX21heDsK LQkvKgotCSAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWxsb2MgYW5kIGRhbGxvYyBhdCB0aGUg bGFzdCBzZXRfemVybyBjYWxsOwotCSAqIHRoaXMgbGV0cyB1cyBjYW5jZWwgb3V0IHRoZSBhcHBy b3ByaWF0ZSBhbW91bnQgb2YgZXhjZXNzLgotCSAqLwotCXVpbnQ2NF90IGFkanVzdG1lbnQ7Ci19 OwotCi0jZGVmaW5lIFBFQUtfSU5JVElBTElaRVIgezAsIDB9Ci0KLXN0YXRpYyBpbmxpbmUgdWlu dDY0X3QKLXBlYWtfbWF4KHBlYWtfdCAqcGVhaykgewotCXJldHVybiBwZWFrLT5jdXJfbWF4Owot fQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBlYWtfdXBkYXRlKHBlYWtfdCAqcGVhaywgdWludDY0 X3QgYWxsb2MsIHVpbnQ2NF90IGRhbGxvYykgewotCWludDY0X3QgY2FuZGlkYXRlX21heCA9IChp bnQ2NF90KShhbGxvYyAtIGRhbGxvYyAtIHBlYWstPmFkanVzdG1lbnQpOwotCWlmIChjYW5kaWRh dGVfbWF4ID4gKGludDY0X3QpcGVhay0+Y3VyX21heCkgewotCQlwZWFrLT5jdXJfbWF4ID0gY2Fu ZGlkYXRlX21heDsKLQl9Ci19Ci0KLS8qIFJlc2V0cyB0aGUgY291bnRlciB0byB6ZXJvOyBhbGwg cGVha3MgYXJlIG5vdyByZWxhdGl2ZSB0byB0aGlzIHBvaW50LiAqLwotc3RhdGljIGlubGluZSB2 b2lkCi1wZWFrX3NldF96ZXJvKHBlYWtfdCAqcGVhaywgdWludDY0X3QgYWxsb2MsIHVpbnQ2NF90 IGRhbGxvYykgewotCXBlYWstPmN1cl9tYXggPSAwOwotCXBlYWstPmFkanVzdG1lbnQgPSBhbGxv YyAtIGRhbGxvYzsKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1BFQUtfSCAqLwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGVha19ldmVudC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wZWFrX2V2ZW50LmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MDhjZTAuLjAwMDAwMDAKLS0tIGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9wZWFrX2V2ZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVm IEpFTUFMTE9DX0lOVEVSTkFMX1BFQUtfRVZFTlRfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5B TF9QRUFLX0VWRU5UX0gKLQotLyoKLSAqIFdoaWxlIHBlYWsuaCBjb250YWlucyB0aGUgc2ltcGxl IGhlbHBlciBzdHJ1Y3QgdGhhdCB0cmFja3Mgc3RhdGUsIHRoaXMKLSAqIGNvbnRhaW5zIHRoZSBh bGxvY2F0b3IgdGllLWlucyAoYW5kIGtub3dzIGFib3V0IHRzZCwgdGhlIGV2ZW50IG1vZHVsZSwg ZXRjLikuCi0gKi8KLQotLyogVXBkYXRlIHRoZSBwZWFrIHdpdGggY3VycmVudCB0c2Qgc3RhdGUu ICovCi12b2lkIHBlYWtfZXZlbnRfdXBkYXRlKHRzZF90ICp0c2QpOwotLyogU2V0IGN1cnJlbnQg c3RhdGUgdG8gemVyby4gKi8KLXZvaWQgcGVha19ldmVudF96ZXJvKHRzZF90ICp0c2QpOwotdWlu dDY0X3QgcGVha19ldmVudF9tYXgodHNkX3QgKnRzZCk7Ci0KLS8qIE1hbnVhbCBob29rcy4gKi8K LS8qIFRoZSBhY3Rpdml0eS10cmlnZ2VyZWQgaG9va3MuICovCi11aW50NjRfdCBwZWFrX2FsbG9j X25ld19ldmVudF93YWl0KHRzZF90ICp0c2QpOwotdWludDY0X3QgcGVha19hbGxvY19wb3N0cG9u ZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsKLXZvaWQgcGVha19hbGxvY19ldmVudF9oYW5kbGVy KHRzZF90ICp0c2QsIHVpbnQ2NF90IGVsYXBzZWQpOwotdWludDY0X3QgcGVha19kYWxsb2NfbmV3 X2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Ci11aW50NjRfdCBwZWFrX2RhbGxvY19wb3N0cG9uZWRf ZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsKLXZvaWQgcGVha19kYWxsb2NfZXZlbnRfaGFuZGxlcih0 c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVS TkFMX1BFQUtfRVZFTlRfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcGguaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv cGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwOTFjNS4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL3BoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MjAgKzAsMCBAQAotI2lmbmRlZiBK RU1BTExPQ19JTlRFUk5BTF9QSF9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BIX0gKLQot LyoKLSAqIEEgUGFpcmluZyBIZWFwIGltcGxlbWVudGF0aW9uLgotICoKLSAqICJUaGUgUGFpcmlu ZyBIZWFwOiBBIE5ldyBGb3JtIG9mIFNlbGYtQWRqdXN0aW5nIEhlYXAiCi0gKiBodHRwczovL3d3 dy5jcy5jbXUuZWR1L35zbGVhdG9yL3BhcGVycy9wYWlyaW5nLWhlYXBzLnBkZgotICoKLSAqIFdp dGggYXV4aWxpYXJ5IHR3b3Bhc3MgbGlzdCwgZGVzY3JpYmVkIGluIGEgZm9sbG93IG9uIHBhcGVy LgotICoKLSAqICJQYWlyaW5nIEhlYXBzOiBFeHBlcmltZW50cyBhbmQgQW5hbHlzaXMiCi0gKiBo dHRwOi8vY2l0ZXNlZXJ4LmlzdC5wc3UuZWR1L3ZpZXdkb2MvZG93bmxvYWQ/ZG9pPTEwLjEuMS4x MDYuMjk4OCZyZXA9cmVwMSZ0eXBlPXBkZgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0g KgotICogV2UgaW5jbHVkZSBhIG5vbi1vYnZpb3VzIG9wdGltaXphdGlvbjoKLSAqIC0gRmlyc3Qs IHdlIGludHJvZHVjZSBhIG5ldyBwb3AtYW5kLWxpbmsgb3BlcmF0aW9uOyBwb3AgdGhlIHR3byBt b3N0Ci0gKiAgIHJlY2VudGx5LWluc2VydGVkIGl0ZW1zIG9mZiB0aGUgYXV4LWxpc3QsIGxpbmsg dGhlbSwgYW5kIHB1c2ggdGhlIHJlc3VsdGluZwotICogICBoZWFwLgotICogLSBXZSBtYWludGFp biBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgaW5zZXJ0aW9ucyBzaW5jZSB0aGUgbGFzdCB0aW1l IHdlCi0gKiAgIG1lcmdlZCB0aGUgYXV4LWxpc3QgKGkuZS4gdmlhIGZpcnN0KCkgb3IgcmVtb3Zl X2ZpcnN0KCkpLiAgQWZ0ZXIgTiBpbnNlcnRzLAotICogICB3ZSBkbyBmZnMoTikgcG9wLWFuZC1s aW5rIG9wZXJhdGlvbnMuCi0gKgotICogT25lIHdheSB0byB0aGluayBvZiB0aGlzIGlzIHRoYXQg d2UncmUgcHJvZ3Jlc3NpdmVseSBidWlsZGluZyB1cCBhIHRyZWUgaW4KLSAqIHRoZSBhdXgtbGlz dCwgcmF0aGVyIHRoYW4gYSBsaW5rZWQtbGlzdCAodGhpbmsgb2YgdGhlIHNlcmllcyBvZiBtZXJn ZXMgdGhhdAotICogd2lsbCBiZSBwZXJmb3JtZWQgYXMgdGhlIGF1eC1jb3VudCBncm93cykuCi0g KgotICogVGhlcmUncyBhIGNvdXBsZSByZWFzb25zIHdlIGJlbmVmaXQgZnJvbSB0aGlzOgotICog LSBPcmRpbmFyaWx5LCBhZnRlciBOIGluc2VydGlvbnMsIHRoZSBhdXgtbGlzdCBpcyBvZiBzaXpl IE4uICBXaXRoIG91cgotICogICBzdHJhdGVneSwgaXQncyBvZiBzaXplIE8obG9nKE4pKS4gIFNv IHdlIGRlY3JlYXNlIHRoZSB3b3JzdC1jYXNlIHRpbWUgb2YKLSAqICAgZmlyc3QoKSBjYWxscywg YW5kIHJlZHVjZSB0aGUgYXZlcmFnZSBjb3N0IG9mIHJlbW92ZV9taW4gY2FsbHMuICBTaW5jZQot ICogICB0aGVzZSBhbG1vc3QgYWx3YXlzIG9jY3VyIHdoaWxlIGhvbGRpbmcgYSBsb2NrLCB3ZSBw cmFjdGljYWxseSByZWR1Y2UgdGhlCi0gKiAgIGZyZXF1ZW5jeSBvZiB1bnVzdWFsbHkgbG9uZyBo b2xkIHRpbWVzLgotICogLSBUaGlzIG1vdmVzIHRoZSBidWxrIG9mIHRoZSB3b3JrIG9mIG1lcmdp bmcgdGhlIGF1eC1saXN0IG9udG8gdGhlIHRocmVhZHMKLSAqICAgdGhhdCBhcmUgaW5zZXJ0aW5n IGludG8gdGhlIGhlYXAuICBJbiBzb21lIGNvbW1vbiBzY2VuYXJpb3MsIGluc2VydGlvbnMKLSAq ICAgaGFwcGVuIGluIGJ1bGssIGZyb20gYSBzaW5nbGUgdGhyZWFkICh0aGluayB0Y2FjaGUgZmx1 c2hpbmc7IHdlIHBvdGVudGlhbGx5Ci0gKiAgIG1vdmUgbWFueSBzbGFicyBmcm9tIHNsYWJzX2Z1 bGwgdG8gc2xhYnNfbm9uZnVsbCkuICBBbGwgdGhlIG5vZGVzIGluIHRoaXMKLSAqICAgY2FzZSBh cmUgaW4gdGhlIGluc2VydGluZyB0aHJlYWRzIGNhY2hlLCBhbmQgbGlua2luZyB0aGVtIGlzIHZl cnkgY2hlYXAKLSAqICAgKGNhY2hlIG1pc3NlcyBkb21pbmF0ZSBsaW5raW5nIGNvc3QpLiAgV2l0 aG91dCB0aGlzIG9wdGltaXphdGlvbiwgbGlua2luZwotICogICBoYXBwZW5zIG9uIHRoZSBuZXh0 IGNhbGwgdG8gcmVtb3ZlX2ZpcnN0LiAgU2luY2UgdGhhdCByZW1vdmVfZmlyc3QgY2FsbAotICog ICBsaWtlbHkgaGFwcGVucyBvbiBhIGRpZmZlcmVudCB0aHJlYWQgKG9yIGF0IGxlYXN0LCBhZnRl ciB0aGUgY2FjaGUgaGFzCi0gKiAgIGdvdHRlbiBjb2xkIGlmIGRvbmUgb24gdGhlIHNhbWUgdGhy ZWFkKSwgZGVmZXJyaW5nIGxpbmtpbmcgdHJhZGVzIGNoZWFwCi0gKiAgIGxpbmsgb3BlcmF0aW9u cyBub3cgZm9yIGV4cGVuc2l2ZSBvbmVzIGxhdGVyLgotICoKLSAqIFRoZSBmZnMgdHJpY2sga2Vl cHMgYW1vcnRpemVkIGluc2VydCBjb3N0IGF0IGNvbnN0YW50IHRpbWUuICBTaW1pbGFyCi0gKiBz dHJhdGVnaWVzIGJhc2VkIG9uIHBlcmlvZGljYWxseSBzb3J0aW5nIHRoZSBsaXN0IGFmdGVyIGEg YmF0Y2ggb2Ygb3BlcmF0aW9ucwotICogcGVyZm9ybSB3b3JzZSB0aGFuIHRoaXMgaW4gcHJhY3Rp Y2UsIGV2ZW4gd2l0aCB2YXJpb3VzIGZhbmN5IHRyaWNrczsgdGhleQotICogYWxsIHRvb2sgYW1v cnRpemVkIGNvbXBsZXhpdHkgb2YgYW4gaW5zZXJ0IGZyb20gTygxKSB0byBPKGxvZyhuKSkuCi0g Ki8KLQotdHlwZWRlZiBpbnQgKCpwaF9jbXBfdCkodm9pZCAqLCB2b2lkICopOwotCi0vKiBOb2Rl IHN0cnVjdHVyZS4gKi8KLXR5cGVkZWYgc3RydWN0IHBobl9saW5rX3MgcGhuX2xpbmtfdDsKLXN0 cnVjdCBwaG5fbGlua19zIHsKLQl2b2lkICpwcmV2OwotCXZvaWQgKm5leHQ7Ci0Jdm9pZCAqbGNo aWxkOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcGhfcyBwaF90Owotc3RydWN0IHBoX3MgewotCXZv aWQgKnJvb3Q7Ci0JLyoKLQkgKiBJbnNlcnRzIGRvbmUgc2luY2UgdGhlIGxhc3QgYXV4LWxpc3Qg bWVyZ2UuICBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseQotCSAqIHRoZSBzaXplIG9mIHRoZSBhdXgt bGlzdCwgc2luY2UgaXQncyBwb3NzaWJsZSB0aGF0IHJlbW92YWxzIGhhdmUKLQkgKiBoYXBwZW5l ZCBzaW5jZSwgYW5kIHdlIGRvbid0IHRyYWNrIHdoZXRoZXIgb3Igbm90IHRob3NlIHJlbW92YWxz IGFyZQotCSAqIGZyb20gdGhlIGF1eCBsaXN0LgotCSAqLwotCXNpemVfdCBhdXhjb3VudDsKLX07 Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgcGhuX2xpbmtfdCAqCi1waG5fbGlua19nZXQodm9p ZCAqcGhuLCBzaXplX3Qgb2Zmc2V0KSB7Ci0JcmV0dXJuIChwaG5fbGlua190ICopKCgodWludHB0 cl90KXBobikgKyBvZmZzZXQpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXBo bl9saW5rX2luaXQodm9pZCAqcGhuLCBzaXplX3Qgb2Zmc2V0KSB7Ci0JcGhuX2xpbmtfZ2V0KHBo biwgb2Zmc2V0KS0+cHJldiA9IE5VTEw7Ci0JcGhuX2xpbmtfZ2V0KHBobiwgb2Zmc2V0KS0+bmV4 dCA9IE5VTEw7Ci0JcGhuX2xpbmtfZ2V0KHBobiwgb2Zmc2V0KS0+bGNoaWxkID0gTlVMTDsKLX0K LQotLyogSW50ZXJuYWwgdXRpbGl0eSBoZWxwZXJzLiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSB2b2lkICoKLXBobl9sY2hpbGRfZ2V0KHZvaWQgKnBobiwgc2l6ZV90IG9mZnNldCkgewotCXJl dHVybiBwaG5fbGlua19nZXQocGhuLCBvZmZzZXQpLT5sY2hpbGQ7Ci19Ci0KLUpFTUFMTE9DX0FM V0FZU19JTkxJTkUgdm9pZAotcGhuX2xjaGlsZF9zZXQodm9pZCAqcGhuLCB2b2lkICpsY2hpbGQs IHNpemVfdCBvZmZzZXQpIHsKLQlwaG5fbGlua19nZXQocGhuLCBvZmZzZXQpLT5sY2hpbGQgPSBs Y2hpbGQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZCAqCi1waG5fbmV4dF9nZXQo dm9pZCAqcGhuLCBzaXplX3Qgb2Zmc2V0KSB7Ci0JcmV0dXJuIHBobl9saW5rX2dldChwaG4sIG9m ZnNldCktPm5leHQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotcGhuX25leHRf c2V0KHZvaWQgKnBobiwgdm9pZCAqbmV4dCwgc2l6ZV90IG9mZnNldCkgewotCXBobl9saW5rX2dl dChwaG4sIG9mZnNldCktPm5leHQgPSBuZXh0OwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5F IHZvaWQgKgotcGhuX3ByZXZfZ2V0KHZvaWQgKnBobiwgc2l6ZV90IG9mZnNldCkgewotCXJldHVy biBwaG5fbGlua19nZXQocGhuLCBvZmZzZXQpLT5wcmV2OwotfQotCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHZvaWQKLXBobl9wcmV2X3NldCh2b2lkICpwaG4sIHZvaWQgKnByZXYsIHNpemVfdCBv ZmZzZXQpIHsKLQlwaG5fbGlua19nZXQocGhuLCBvZmZzZXQpLT5wcmV2ID0gcHJldjsKLX0KLQot SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1waG5fbWVyZ2Vfb3JkZXJlZCh2b2lkICpwaG4w LCB2b2lkICpwaG4xLCBzaXplX3Qgb2Zmc2V0LAotICAgIHBoX2NtcF90IGNtcCkgewotCXZvaWQg KnBobjBjaGlsZDsKLQotCWFzc2VydChwaG4wICE9IE5VTEwpOwotCWFzc2VydChwaG4xICE9IE5V TEwpOwotCWFzc2VydChjbXAocGhuMCwgcGhuMSkgPD0gMCk7Ci0KLQlwaG5fcHJldl9zZXQocGhu MSwgcGhuMCwgb2Zmc2V0KTsKLQlwaG4wY2hpbGQgPSBwaG5fbGNoaWxkX2dldChwaG4wLCBvZmZz ZXQpOwotCXBobl9uZXh0X3NldChwaG4xLCBwaG4wY2hpbGQsIG9mZnNldCk7Ci0JaWYgKHBobjBj aGlsZCAhPSBOVUxMKSB7Ci0JCXBobl9wcmV2X3NldChwaG4wY2hpbGQsIHBobjEsIG9mZnNldCk7 Ci0JfQotCXBobl9sY2hpbGRfc2V0KHBobjAsIHBobjEsIG9mZnNldCk7Ci19Ci0KLUpFTUFMTE9D X0FMV0FZU19JTkxJTkUgdm9pZCAqCi1waG5fbWVyZ2Uodm9pZCAqcGhuMCwgdm9pZCAqcGhuMSwg c2l6ZV90IG9mZnNldCwgcGhfY21wX3QgY21wKSB7Ci0Jdm9pZCAqcmVzdWx0OwotCWlmIChwaG4w ID09IE5VTEwpIHsKLQkJcmVzdWx0ID0gcGhuMTsKLQl9IGVsc2UgaWYgKHBobjEgPT0gTlVMTCkg ewotCQlyZXN1bHQgPSBwaG4wOwotCX0gZWxzZSBpZiAoY21wKHBobjAsIHBobjEpIDwgMCkgewot CQlwaG5fbWVyZ2Vfb3JkZXJlZChwaG4wLCBwaG4xLCBvZmZzZXQsIGNtcCk7Ci0JCXJlc3VsdCA9 IHBobjA7Ci0JfSBlbHNlIHsKLQkJcGhuX21lcmdlX29yZGVyZWQocGhuMSwgcGhuMCwgb2Zmc2V0 LCBjbXApOwotCQlyZXN1bHQgPSBwaG4xOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1KRU1B TExPQ19BTFdBWVNfSU5MSU5FIHZvaWQgKgotcGhuX21lcmdlX3NpYmxpbmdzKHZvaWQgKnBobiwg c2l6ZV90IG9mZnNldCwgcGhfY21wX3QgY21wKSB7Ci0Jdm9pZCAqaGVhZCA9IE5VTEw7Ci0Jdm9p ZCAqdGFpbCA9IE5VTEw7Ci0Jdm9pZCAqcGhuMCA9IHBobjsKLQl2b2lkICpwaG4xID0gcGhuX25l eHRfZ2V0KHBobjAsIG9mZnNldCk7Ci0KLQkvKgotCSAqIE11bHRpcGFzcyBtZXJnZSwgd2hlcmVp biB0aGUgZmlyc3QgdHdvIGVsZW1lbnRzIG9mIGEgRklGTwotCSAqIGFyZSByZXBlYXRlZGx5IG1l cmdlZCwgYW5kIGVhY2ggcmVzdWx0IGlzIGFwcGVuZGVkIHRvIHRoZQotCSAqIHNpbmdseSBsaW5r ZWQgRklGTywgdW50aWwgdGhlIEZJRk8gY29udGFpbnMgb25seSBhIHNpbmdsZQotCSAqIGVsZW1l bnQuICBXZSBzdGFydCB3aXRoIGEgc2libGluZyBsaXN0IGJ1dCBubyByZWZlcmVuY2UgdG8KLQkg KiBpdHMgdGFpbCwgc28gd2UgZG8gYSBzaW5nbGUgcGFzcyBvdmVyIHRoZSBzaWJsaW5nIGxpc3Qg dG8KLQkgKiBwb3B1bGF0ZSB0aGUgRklGTy4KLQkgKi8KLQlpZiAocGhuMSAhPSBOVUxMKSB7Ci0J CXZvaWQgKnBobnJlc3QgPSBwaG5fbmV4dF9nZXQocGhuMSwgb2Zmc2V0KTsKLQkJaWYgKHBobnJl c3QgIT0gTlVMTCkgewotCQkJcGhuX3ByZXZfc2V0KHBobnJlc3QsIE5VTEwsIG9mZnNldCk7Ci0J CX0KLQkJcGhuX3ByZXZfc2V0KHBobjAsIE5VTEwsIG9mZnNldCk7Ci0JCXBobl9uZXh0X3NldChw aG4wLCBOVUxMLCBvZmZzZXQpOwotCQlwaG5fcHJldl9zZXQocGhuMSwgTlVMTCwgb2Zmc2V0KTsK LQkJcGhuX25leHRfc2V0KHBobjEsIE5VTEwsIG9mZnNldCk7Ci0JCXBobjAgPSBwaG5fbWVyZ2Uo cGhuMCwgcGhuMSwgb2Zmc2V0LCBjbXApOwotCQloZWFkID0gdGFpbCA9IHBobjA7Ci0JCXBobjAg PSBwaG5yZXN0OwotCQl3aGlsZSAocGhuMCAhPSBOVUxMKSB7Ci0JCQlwaG4xID0gcGhuX25leHRf Z2V0KHBobjAsIG9mZnNldCk7Ci0JCQlpZiAocGhuMSAhPSBOVUxMKSB7Ci0JCQkJcGhucmVzdCA9 IHBobl9uZXh0X2dldChwaG4xLCBvZmZzZXQpOwotCQkJCWlmIChwaG5yZXN0ICE9IE5VTEwpIHsK LQkJCQkJcGhuX3ByZXZfc2V0KHBobnJlc3QsIE5VTEwsIG9mZnNldCk7Ci0JCQkJfQotCQkJCXBo bl9wcmV2X3NldChwaG4wLCBOVUxMLCBvZmZzZXQpOwotCQkJCXBobl9uZXh0X3NldChwaG4wLCBO VUxMLCBvZmZzZXQpOwotCQkJCXBobl9wcmV2X3NldChwaG4xLCBOVUxMLCBvZmZzZXQpOwotCQkJ CXBobl9uZXh0X3NldChwaG4xLCBOVUxMLCBvZmZzZXQpOwotCQkJCXBobjAgPSBwaG5fbWVyZ2Uo cGhuMCwgcGhuMSwgb2Zmc2V0LCBjbXApOwotCQkJCXBobl9uZXh0X3NldCh0YWlsLCBwaG4wLCBv ZmZzZXQpOwotCQkJCXRhaWwgPSBwaG4wOwotCQkJCXBobjAgPSBwaG5yZXN0OwotCQkJfSBlbHNl IHsKLQkJCQlwaG5fbmV4dF9zZXQodGFpbCwgcGhuMCwgb2Zmc2V0KTsKLQkJCQl0YWlsID0gcGhu MDsKLQkJCQlwaG4wID0gTlVMTDsKLQkJCX0KLQkJfQotCQlwaG4wID0gaGVhZDsKLQkJcGhuMSA9 IHBobl9uZXh0X2dldChwaG4wLCBvZmZzZXQpOwotCQlpZiAocGhuMSAhPSBOVUxMKSB7Ci0JCQl3 aGlsZSAodHJ1ZSkgewotCQkJCWhlYWQgPSBwaG5fbmV4dF9nZXQocGhuMSwgb2Zmc2V0KTsKLQkJ CQlhc3NlcnQocGhuX3ByZXZfZ2V0KHBobjAsIG9mZnNldCkgPT0gTlVMTCk7Ci0JCQkJcGhuX25l eHRfc2V0KHBobjAsIE5VTEwsIG9mZnNldCk7Ci0JCQkJYXNzZXJ0KHBobl9wcmV2X2dldChwaG4x LCBvZmZzZXQpID09IE5VTEwpOwotCQkJCXBobl9uZXh0X3NldChwaG4xLCBOVUxMLCBvZmZzZXQp OwotCQkJCXBobjAgPSBwaG5fbWVyZ2UocGhuMCwgcGhuMSwgb2Zmc2V0LCBjbXApOwotCQkJCWlm IChoZWFkID09IE5VTEwpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCXBobl9uZXh0X3NldCh0 YWlsLCBwaG4wLCBvZmZzZXQpOwotCQkJCXRhaWwgPSBwaG4wOwotCQkJCXBobjAgPSBoZWFkOwot CQkJCXBobjEgPSBwaG5fbmV4dF9nZXQocGhuMCwgb2Zmc2V0KTsKLQkJCX0KLQkJfQotCX0KLQly ZXR1cm4gcGhuMDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1waF9tZXJnZV9h dXgocGhfdCAqcGgsIHNpemVfdCBvZmZzZXQsIHBoX2NtcF90IGNtcCkgewotCXBoLT5hdXhjb3Vu dCA9IDA7Ci0Jdm9pZCAqcGhuID0gcGhuX25leHRfZ2V0KHBoLT5yb290LCBvZmZzZXQpOwotCWlm IChwaG4gIT0gTlVMTCkgewotCQlwaG5fcHJldl9zZXQocGgtPnJvb3QsIE5VTEwsIG9mZnNldCk7 Ci0JCXBobl9uZXh0X3NldChwaC0+cm9vdCwgTlVMTCwgb2Zmc2V0KTsKLQkJcGhuX3ByZXZfc2V0 KHBobiwgTlVMTCwgb2Zmc2V0KTsKLQkJcGhuID0gcGhuX21lcmdlX3NpYmxpbmdzKHBobiwgb2Zm c2V0LCBjbXApOwotCQlhc3NlcnQocGhuX25leHRfZ2V0KHBobiwgb2Zmc2V0KSA9PSBOVUxMKTsK LQkJcGgtPnJvb3QgPSBwaG5fbWVyZ2UocGgtPnJvb3QsIHBobiwgb2Zmc2V0LCBjbXApOwotCX0K LX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLXBoX21lcmdlX2NoaWxkcmVuKHZv aWQgKnBobiwgc2l6ZV90IG9mZnNldCwgcGhfY21wX3QgY21wKSB7Ci0Jdm9pZCAqcmVzdWx0Owot CXZvaWQgKmxjaGlsZCA9IHBobl9sY2hpbGRfZ2V0KHBobiwgb2Zmc2V0KTsKLQlpZiAobGNoaWxk ID09IE5VTEwpIHsKLQkJcmVzdWx0ID0gTlVMTDsKLQl9IGVsc2UgewotCQlyZXN1bHQgPSBwaG5f bWVyZ2Vfc2libGluZ3MobGNoaWxkLCBvZmZzZXQsIGNtcCk7Ci0JfQotCXJldHVybiByZXN1bHQ7 Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotcGhfbmV3KHBoX3QgKnBoKSB7Ci0J cGgtPnJvb3QgPSBOVUxMOwotCXBoLT5hdXhjb3VudCA9IDA7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgYm9vbAotcGhfZW1wdHkocGhfdCAqcGgpIHsKLQlyZXR1cm4gcGgtPnJvb3QgPT0g TlVMTDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLXBoX2ZpcnN0KHBoX3Qg KnBoLCBzaXplX3Qgb2Zmc2V0LCBwaF9jbXBfdCBjbXApIHsKLQlpZiAocGgtPnJvb3QgPT0gTlVM TCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcGhfbWVyZ2VfYXV4KHBoLCBvZmZzZXQsIGNtcCk7 Ci0JcmV0dXJuIHBoLT5yb290OwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQgKgot cGhfYW55KHBoX3QgKnBoLCBzaXplX3Qgb2Zmc2V0KSB7Ci0JaWYgKHBoLT5yb290ID09IE5VTEwp IHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXZvaWQgKmF1eCA9IHBobl9uZXh0X2dldChwaC0+cm9v dCwgb2Zmc2V0KTsKLQlpZiAoYXV4ICE9IE5VTEwpIHsKLQkJcmV0dXJuIGF1eDsKLQl9Ci0JcmV0 dXJuIHBoLT5yb290OwotfQotCi0vKiBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHN0b3AgdHJ5 aW5nIHRvIG1lcmdlLiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi1waF90cnlfYXV4 X21lcmdlX3BhaXIocGhfdCAqcGgsIHNpemVfdCBvZmZzZXQsIHBoX2NtcF90IGNtcCkgewotCWFz c2VydChwaC0+cm9vdCAhPSBOVUxMKTsKLQl2b2lkICpwaG4wID0gcGhuX25leHRfZ2V0KHBoLT5y b290LCBvZmZzZXQpOwotCWlmIChwaG4wID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQot CXZvaWQgKnBobjEgPSBwaG5fbmV4dF9nZXQocGhuMCwgb2Zmc2V0KTsKLQlpZiAocGhuMSA9PSBO VUxMKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQl2b2lkICpuZXh0X3BobjEgPSBwaG5fbmV4dF9n ZXQocGhuMSwgb2Zmc2V0KTsKLQlwaG5fbmV4dF9zZXQocGhuMCwgTlVMTCwgb2Zmc2V0KTsKLQlw aG5fcHJldl9zZXQocGhuMCwgTlVMTCwgb2Zmc2V0KTsKLQlwaG5fbmV4dF9zZXQocGhuMSwgTlVM TCwgb2Zmc2V0KTsKLQlwaG5fcHJldl9zZXQocGhuMSwgTlVMTCwgb2Zmc2V0KTsKLQlwaG4wID0g cGhuX21lcmdlKHBobjAsIHBobjEsIG9mZnNldCwgY21wKTsKLQlwaG5fbmV4dF9zZXQocGhuMCwg bmV4dF9waG4xLCBvZmZzZXQpOwotCWlmIChuZXh0X3BobjEgIT0gTlVMTCkgewotCQlwaG5fcHJl dl9zZXQobmV4dF9waG4xLCBwaG4wLCBvZmZzZXQpOwotCX0KLQlwaG5fbmV4dF9zZXQocGgtPnJv b3QsIHBobjAsIG9mZnNldCk7Ci0JcGhuX3ByZXZfc2V0KHBobjAsIHBoLT5yb290LCBvZmZzZXQp OwotCXJldHVybiBuZXh0X3BobjEgPT0gTlVMTDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSB2b2lkCi1waF9pbnNlcnQocGhfdCAqcGgsIHZvaWQgKnBobiwgc2l6ZV90IG9mZnNldCwgcGhf Y21wX3QgY21wKSB7Ci0JcGhuX2xpbmtfaW5pdChwaG4sIG9mZnNldCk7Ci0KLQkvKgotCSAqIFRy ZWF0IHRoZSByb290IGFzIGFuIGF1eCBsaXN0IGR1cmluZyBpbnNlcnRpb24sIGFuZCBsYXppbHkg bWVyZ2UKLQkgKiBkdXJpbmcgYV9wcmVmaXgjI3JlbW92ZV9maXJzdCgpLiAgRm9yIGVsZW1lbnRz IHRoYXQgYXJlIGluc2VydGVkLAotCSAqIHRoZW4gcmVtb3ZlZCB2aWEgYV9wcmVmaXgjI3JlbW92 ZSgpIGJlZm9yZSB0aGUgYXV4IGxpc3QgaXMgZXZlcgotCSAqIHByb2Nlc3NlZCwgdGhpcyBtYWtl cyBpbnNlcnQvcmVtb3ZlIGNvbnN0YW50LXRpbWUsIHdoZXJlYXMgZWFnZXIKLQkgKiBtZXJnaW5n IHdvdWxkIG1ha2UgaW5zZXJ0IE8obG9nIG4pLgotCSAqLwotCWlmIChwaC0+cm9vdCA9PSBOVUxM KSB7Ci0JCXBoLT5yb290ID0gcGhuOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEFzIGEgc3BlY2lh bCBjYXNlLCBjaGVjayB0byBzZWUgaWYgd2UgY2FuIHJlcGxhY2UgdGhlIHJvb3QuCi0JCSAqIFRo aXMgaXMgcHJhY3RpY2FsbHkgY29tbW9uIGluIHNvbWUgaW1wb3J0YW50IGNhc2VzLCBhbmQgbGV0 cwotCQkgKiB1cyBkZWZlciBzb21lIGluc2VydGlvbnMgKGhvcGVmdWxseSwgdW50aWwgdGhlIHBv aW50IHdoZXJlCi0JCSAqIHNvbWUgb2YgdGhlIGl0ZW1zIGluIHRoZSBhdXggbGlzdCBoYXZlIGJl ZW4gcmVtb3ZlZCwgc2F2aW5ncwotCQkgKiB1cyBmcm9tIGxpbmtpbmcgdGhlbSBhdCBhbGwpLgot CQkgKi8KLQkJaWYgKGNtcChwaG4sIHBoLT5yb290KSA8IDApIHsKLQkJCXBobl9sY2hpbGRfc2V0 KHBobiwgcGgtPnJvb3QsIG9mZnNldCk7Ci0JCQlwaG5fcHJldl9zZXQocGgtPnJvb3QsIHBobiwg b2Zmc2V0KTsKLQkJCXBoLT5yb290ID0gcGhuOwotCQkJcGgtPmF1eGNvdW50ID0gMDsKLQkJCXJl dHVybjsKLQkJfQotCQlwaC0+YXV4Y291bnQrKzsKLQkJcGhuX25leHRfc2V0KHBobiwgcGhuX25l eHRfZ2V0KHBoLT5yb290LCBvZmZzZXQpLCBvZmZzZXQpOwotCQlpZiAocGhuX25leHRfZ2V0KHBo LT5yb290LCBvZmZzZXQpICE9IE5VTEwpIHsKLQkJCXBobl9wcmV2X3NldChwaG5fbmV4dF9nZXQo cGgtPnJvb3QsIG9mZnNldCksIHBobiwKLQkJCSAgICBvZmZzZXQpOwotCQl9Ci0JCXBobl9wcmV2 X3NldChwaG4sIHBoLT5yb290LCBvZmZzZXQpOwotCQlwaG5fbmV4dF9zZXQocGgtPnJvb3QsIHBo biwgb2Zmc2V0KTsKLQl9Ci0JaWYgKHBoLT5hdXhjb3VudCA+IDEpIHsKLQkJdW5zaWduZWQgbm1l cmdlcyA9IGZmc196dShwaC0+YXV4Y291bnQgLSAxKTsKLQkJYm9vbCBkb25lID0gZmFsc2U7Ci0J CWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBubWVyZ2VzICYmICFkb25lOyBpKyspIHsKLQkJCWRv bmUgPSBwaF90cnlfYXV4X21lcmdlX3BhaXIocGgsIG9mZnNldCwgY21wKTsKLQkJfQotCX0KLX0K LQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLXBoX3JlbW92ZV9maXJzdChwaF90ICpw aCwgc2l6ZV90IG9mZnNldCwgcGhfY21wX3QgY21wKSB7Ci0Jdm9pZCAqcmV0OwotCi0JaWYgKHBo LT5yb290ID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXBoX21lcmdlX2F1eChwaCwg b2Zmc2V0LCBjbXApOwotCXJldCA9IHBoLT5yb290OwotCXBoLT5yb290ID0gcGhfbWVyZ2VfY2hp bGRyZW4ocGgtPnJvb3QsIG9mZnNldCwgY21wKTsKLQotCXJldHVybiByZXQ7Ci0KLX0KLQotSkVN QUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1waF9yZW1vdmUocGhfdCAqcGgsIHZvaWQgKnBobiwg c2l6ZV90IG9mZnNldCwgcGhfY21wX3QgY21wKSB7Ci0Jdm9pZCAqcmVwbGFjZTsKLQl2b2lkICpw YXJlbnQ7Ci0KLQlpZiAocGgtPnJvb3QgPT0gcGhuKSB7Ci0JCS8qCi0JCSAqIFdlIGNhbiBkZWxl dGUgZnJvbSBhdXggbGlzdCB3aXRob3V0IG1lcmdpbmcgaXQsIGJ1dCB3ZSBuZWVkCi0JCSAqIHRv IG1lcmdlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIHJvb3Qgbm9kZSBhbmQgaXQgaGFzCi0J CSAqIGNoaWxkcmVuLgotCQkgKi8KLQkJaWYgKHBobl9sY2hpbGRfZ2V0KHBobiwgb2Zmc2V0KSA9 PSBOVUxMKSB7Ci0JCQlwaC0+cm9vdCA9IHBobl9uZXh0X2dldChwaG4sIG9mZnNldCk7Ci0JCQlp ZiAocGgtPnJvb3QgIT0gTlVMTCkgewotCQkJCXBobl9wcmV2X3NldChwaC0+cm9vdCwgTlVMTCwg b2Zmc2V0KTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCQlwaF9tZXJnZV9hdXgocGgsIG9mZnNl dCwgY21wKTsKLQkJaWYgKHBoLT5yb290ID09IHBobikgewotCQkJcGgtPnJvb3QgPSBwaF9tZXJn ZV9jaGlsZHJlbihwaC0+cm9vdCwgb2Zmc2V0LCBjbXApOwotCQkJcmV0dXJuOwotCQl9Ci0JfQot Ci0JLyogR2V0IHBhcmVudCAoaWYgcGhuIGlzIGxlZnRtb3N0IGNoaWxkKSBiZWZvcmUgbXV0YXRp bmcuICovCi0JaWYgKChwYXJlbnQgPSBwaG5fcHJldl9nZXQocGhuLCBvZmZzZXQpKSAhPSBOVUxM KSB7Ci0JCWlmIChwaG5fbGNoaWxkX2dldChwYXJlbnQsIG9mZnNldCkgIT0gcGhuKSB7Ci0JCQlw YXJlbnQgPSBOVUxMOwotCQl9Ci0JfQotCS8qIEZpbmQgYSBwb3NzaWJsZSByZXBsYWNlbWVudCBu b2RlLCBhbmQgbGluayB0byBwYXJlbnQuICovCi0JcmVwbGFjZSA9IHBoX21lcmdlX2NoaWxkcmVu KHBobiwgb2Zmc2V0LCBjbXApOwotCS8qIFNldCBuZXh0L3ByZXYgZm9yIHNpYmxpbmcgbGlua2Vk IGxpc3QuICovCi0JaWYgKHJlcGxhY2UgIT0gTlVMTCkgewotCQlpZiAocGFyZW50ICE9IE5VTEwp IHsKLQkJCXBobl9wcmV2X3NldChyZXBsYWNlLCBwYXJlbnQsIG9mZnNldCk7Ci0JCQlwaG5fbGNo aWxkX3NldChwYXJlbnQsIHJlcGxhY2UsIG9mZnNldCk7Ci0JCX0gZWxzZSB7Ci0JCQlwaG5fcHJl dl9zZXQocmVwbGFjZSwgcGhuX3ByZXZfZ2V0KHBobiwgb2Zmc2V0KSwKLQkJCSAgICBvZmZzZXQp OwotCQkJaWYgKHBobl9wcmV2X2dldChwaG4sIG9mZnNldCkgIT0gTlVMTCkgewotCQkJCXBobl9u ZXh0X3NldChwaG5fcHJldl9nZXQocGhuLCBvZmZzZXQpLCByZXBsYWNlLAotCQkJCSAgICBvZmZz ZXQpOwotCQkJfQotCQl9Ci0JCXBobl9uZXh0X3NldChyZXBsYWNlLCBwaG5fbmV4dF9nZXQocGhu LCBvZmZzZXQpLCBvZmZzZXQpOwotCQlpZiAocGhuX25leHRfZ2V0KHBobiwgb2Zmc2V0KSAhPSBO VUxMKSB7Ci0JCQlwaG5fcHJldl9zZXQocGhuX25leHRfZ2V0KHBobiwgb2Zmc2V0KSwgcmVwbGFj ZSwKLQkJCSAgICBvZmZzZXQpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHBhcmVudCAhPSBOVUxM KSB7Ci0JCQl2b2lkICpuZXh0ID0gcGhuX25leHRfZ2V0KHBobiwgb2Zmc2V0KTsKLQkJCXBobl9s Y2hpbGRfc2V0KHBhcmVudCwgbmV4dCwgb2Zmc2V0KTsKLQkJCWlmIChuZXh0ICE9IE5VTEwpIHsK LQkJCQlwaG5fcHJldl9zZXQobmV4dCwgcGFyZW50LCBvZmZzZXQpOwotCQkJfQotCQl9IGVsc2Ug ewotCQkJYXNzZXJ0KHBobl9wcmV2X2dldChwaG4sIG9mZnNldCkgIT0gTlVMTCk7Ci0JCQlwaG5f bmV4dF9zZXQoCi0JCQkgICAgcGhuX3ByZXZfZ2V0KHBobiwgb2Zmc2V0KSwKLQkJCSAgICBwaG5f bmV4dF9nZXQocGhuLCBvZmZzZXQpLCBvZmZzZXQpOwotCQl9Ci0JCWlmIChwaG5fbmV4dF9nZXQo cGhuLCBvZmZzZXQpICE9IE5VTEwpIHsKLQkJCXBobl9wcmV2X3NldCgKLQkJCSAgICBwaG5fbmV4 dF9nZXQocGhuLCBvZmZzZXQpLAotCQkJICAgIHBobl9wcmV2X2dldChwaG4sIG9mZnNldCksIG9m ZnNldCk7Ci0JCX0KLQl9Ci19Ci0KLSNkZWZpbmUgcGhfc3RydWN0cyhhX3ByZWZpeCwgYV90eXBl KQkJCQkJXAotdHlwZWRlZiBzdHJ1Y3QgewkJCQkJCQlcCi0JcGhuX2xpbmtfdCBsaW5rOwkJCQkJ CVwKLX0gYV9wcmVmaXgjI19saW5rX3Q7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLXR5cGVkZWYgc3Ry dWN0IHsJCQkJCQkJXAotCXBoX3QgcGg7CQkJCQkJCVwKLX0gYV9wcmVmaXgjI190OwotCi0vKgot ICogVGhlIHBoX3Byb3RvKCkgbWFjcm8gZ2VuZXJhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgdGhh dCBjb3JyZXNwb25kIHRvIHRoZQotICogZnVuY3Rpb25zIGdlbmVyYXRlZCBieSBhbiBlcXVpdmFs ZW50bHkgcGFyYW1ldGVyaXplZCBjYWxsIHRvIHBoX2dlbigpLgotICovCi0jZGVmaW5lIHBoX3By b3RvKGFfYXR0ciwgYV9wcmVmaXgsIGFfdHlwZSkJCQkJXAotCQkJCQkJCQkJXAotYV9hdHRyIHZv aWQgYV9wcmVmaXgjI19uZXcoYV9wcmVmaXgjI190ICpwaCk7CQkJCVwKLWFfYXR0ciBib29sIGFf cHJlZml4IyNfZW1wdHkoYV9wcmVmaXgjI190ICpwaCk7CQkJCVwKLWFfYXR0ciBhX3R5cGUgKmFf cHJlZml4IyNfZmlyc3QoYV9wcmVmaXgjI190ICpwaCk7CQkJXAotYV9hdHRyIGFfdHlwZSAqYV9w cmVmaXgjI19hbnkoYV9wcmVmaXgjI190ICpwaCk7CQkJXAotYV9hdHRyIHZvaWQgYV9wcmVmaXgj I19pbnNlcnQoYV9wcmVmaXgjI190ICpwaCwgYV90eXBlICpwaG4pOwkJXAotYV9hdHRyIGFfdHlw ZSAqYV9wcmVmaXgjI19yZW1vdmVfZmlyc3QoYV9wcmVmaXgjI190ICpwaCk7CQlcCi1hX2F0dHIg dm9pZCBhX3ByZWZpeCMjX3JlbW92ZShhX3ByZWZpeCMjX3QgKnBoLCBhX3R5cGUgKnBobik7CQlc Ci1hX2F0dHIgYV90eXBlICphX3ByZWZpeCMjX3JlbW92ZV9hbnkoYV9wcmVmaXgjI190ICpwaCk7 Ci0KLS8qIFRoZSBwaF9nZW4oKSBtYWNybyBnZW5lcmF0ZXMgYSB0eXBlLXNwZWNpZmljIHBhaXJp bmcgaGVhcCBpbXBsZW1lbnRhdGlvbi4gKi8KLSNkZWZpbmUgcGhfZ2VuKGFfYXR0ciwgYV9wcmVm aXgsIGFfdHlwZSwgYV9maWVsZCwgYV9jbXApCQlcCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGlu dAkJCQkJCVwKLWFfcHJlZml4IyNfcGhfY21wKHZvaWQgKmEsIHZvaWQgKmIpIHsJCQkJCVwKLQly ZXR1cm4gYV9jbXAoKGFfdHlwZSAqKWEsIChhX3R5cGUgKiliKTsJCQkJXAotfQkJCQkJCQkJCVwK LQkJCQkJCQkJCVwKLWFfYXR0ciB2b2lkCQkJCQkJCQlcCi1hX3ByZWZpeCMjX25ldyhhX3ByZWZp eCMjX3QgKnBoKSB7CQkJCQlcCi0JcGhfbmV3KCZwaC0+cGgpOwkJCQkJCVwKLX0JCQkJCQkJCQlc Ci0JCQkJCQkJCQlcCi1hX2F0dHIgYm9vbAkJCQkJCQkJXAotYV9wcmVmaXgjI19lbXB0eShhX3By ZWZpeCMjX3QgKnBoKSB7CQkJCQlcCi0JcmV0dXJuIHBoX2VtcHR5KCZwaC0+cGgpOwkJCQkJXAot fQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9wcmVm aXgjI19maXJzdChhX3ByZWZpeCMjX3QgKnBoKSB7CQkJCQlcCi0JcmV0dXJuIHBoX2ZpcnN0KCZw aC0+cGgsIG9mZnNldG9mKGFfdHlwZSwgYV9maWVsZCksCQlcCi0JICAgICZhX3ByZWZpeCMjX3Bo X2NtcCk7CQkJCQlcCi19CQkJCQkJCQkJXAotCQkJCQkJCQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJ CQkJCQlcCi1hX3ByZWZpeCMjX2FueShhX3ByZWZpeCMjX3QgKnBoKSB7CQkJCQlcCi0JcmV0dXJu IHBoX2FueSgmcGgtPnBoLCBvZmZzZXRvZihhX3R5cGUsIGFfZmllbGQpKTsJCVwKLX0JCQkJCQkJ CQlcCi0JCQkJCQkJCQlcCi1hX2F0dHIgdm9pZAkJCQkJCQkJXAotYV9wcmVmaXgjI19pbnNlcnQo YV9wcmVmaXgjI190ICpwaCwgYV90eXBlICpwaG4pIHsJCQlcCi0JcGhfaW5zZXJ0KCZwaC0+cGgs IHBobiwgb2Zmc2V0b2YoYV90eXBlLCBhX2ZpZWxkKSwJCVwKLQkgICAgYV9wcmVmaXgjI19waF9j bXApOwkJCQkJCVwKLX0JCQkJCQkJCQlcCi0JCQkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJCQkJ CQkJCVwKLWFfcHJlZml4IyNfcmVtb3ZlX2ZpcnN0KGFfcHJlZml4IyNfdCAqcGgpIHsJCQkJXAot CXJldHVybiBwaF9yZW1vdmVfZmlyc3QoJnBoLT5waCwgb2Zmc2V0b2YoYV90eXBlLCBhX2ZpZWxk KSwJXAotCSAgICBhX3ByZWZpeCMjX3BoX2NtcCk7CQkJCQkJXAotfQkJCQkJCQkJCVwKLQkJCQkJ CQkJCVwKLWFfYXR0ciB2b2lkCQkJCQkJCQlcCi1hX3ByZWZpeCMjX3JlbW92ZShhX3ByZWZpeCMj X3QgKnBoLCBhX3R5cGUgKnBobikgewkJCVwKLQlwaF9yZW1vdmUoJnBoLT5waCwgcGhuLCBvZmZz ZXRvZihhX3R5cGUsIGFfZmllbGQpLAkJXAotCSAgICBhX3ByZWZpeCMjX3BoX2NtcCk7CQkJCQkJ XAotfQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9w cmVmaXgjI19yZW1vdmVfYW55KGFfcHJlZml4IyNfdCAqcGgpIHsJCQkJXAotCWFfdHlwZSAqcmV0 ID0gYV9wcmVmaXgjI19hbnkocGgpOwkJCQlcCi0JaWYgKHJldCAhPSBOVUxMKSB7CQkJCQkJXAot CQlhX3ByZWZpeCMjX3JlbW92ZShwaCwgcmV0KTsJCQkJXAotCX0JCQkJCQkJCVwKLQlyZXR1cm4g cmV0OwkJCQkJCQlcCi19Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9QSF9IICovCgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5zaCBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0 ZV9uYW1lc3BhY2Uuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDZlZjEzNDYuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC9wcml2YXRlX25hbWVzcGFjZS5zaAorKysgL2Rldi9udWxsCkBA IC0xLDUgKzAsMCBAQAotIyEvYmluL3NoCi0KLWZvciBzeW1ib2wgaW4gYGNhdCAiJEAiYCA7IGRv Ci0gIGVjaG8gIiNkZWZpbmUgJHtzeW1ib2x9IEpFTUFMTE9DX04oJHtzeW1ib2x9KSIKLWRvbmUK CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfc3ltYm9scy5zaCBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0 ZV9zeW1ib2xzLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0NDJhMjU5Li4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvcHJpdmF0ZV9zeW1ib2xzLnNoCisrKyAvZGV2L251bGwKQEAgLTEs NTEgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIEdlbmVyYXRlIHByaXZhdGVfc3ltYm9sc1tfamV0 XS5hd2suCi0jCi0jIFVzYWdlOiBwcml2YXRlX3N5bWJvbHMuc2ggPHN5bV9wcmVmaXg+IDxzeW0+ KgotIwotIyA8c3ltX3ByZWZpeD4gaXMgdHlwaWNhbGx5ICIiIG9yICJfIi4KLQotc3ltX3ByZWZp eD0kMQotc2hpZnQKLQotY2F0IDw8RU9GCi0jIS91c3IvYmluL2VudiBhd2sgLWYKLQotQkVHSU4g ewotICBzeW1fcHJlZml4ID0gIiR7c3ltX3ByZWZpeH0iCi0gIHNwbGl0KCJcXAotRU9GCi0KLWZv ciBwdWJsaWNfc3ltIGluICIkQCIgOyBkbwotICBjYXQgPDxFT0YKLSAgICAgICAgJHtzeW1fcHJl Zml4fSR7cHVibGljX3N5bX0gXFwKLUVPRgotZG9uZQotCi1jYXQgPDwiRU9GIgotICAgICAgICAi LCBleHBvcnRlZF9zeW1ib2xfbmFtZXMpCi0gICMgU3RvcmUgZXhwb3J0ZWQgc3ltYm9sIG5hbWVz IGFzIGtleXMgaW4gZXhwb3J0ZWRfc3ltYm9scy4KLSAgZm9yIChpIGluIGV4cG9ydGVkX3N5bWJv bF9uYW1lcykgewotICAgIGV4cG9ydGVkX3N5bWJvbHNbZXhwb3J0ZWRfc3ltYm9sX25hbWVzW2ld XSA9IDEKLSAgfQotfQotCi0jIFByb2Nlc3MgJ25tIC1hIDxjX3NvdXJjZS5vPicgb3V0cHV0Lgot IwotIyBIYW5kbGUgbGluZXMgbGlrZToKLSMgICAwMDAwMDAwMDAwMDAwMDA4IEQgb3B0X2p1bmsK LSMgICAwMDAwMDAwMDAwMDA3NTc0IFQgbWFsbG9jX2luaXRpYWxpemVkCi0oTkYgPT0gMyAmJiAk MiB+IC9eW0FCQ0RHUlNUVlddJC8gJiYgISgkMyBpbiBleHBvcnRlZF9zeW1ib2xzKSAmJiAkMyB+ IC9eW0EtWmEtejAtOV9dKyQvKSB7Ci0gIHByaW50IHN1YnN0cigkMywgMStsZW5ndGgoc3ltX3By ZWZpeCksIGxlbmd0aCgkMyktbGVuZ3RoKHN5bV9wcmVmaXgpKQotfQotCi0jIFByb2Nlc3MgJ2R1 bXBiaW4gL1NZTUJPTFMgPGNfc291cmNlLm9iaj4nIG91dHB1dC4KLSMKLSMgSGFuZGxlIGxpbmVz IGxpa2U6Ci0jICAgMzUzIDAwMDA4MDk4IFNFQ1Q0ICBub3R5cGUgICAgICAgRXh0ZXJuYWwgICAg IHwgb3B0X2p1bmsKLSMgICAzRjEgMDAwMDAwMDAgU0VDVDcgIG5vdHlwZSAoKSAgICBFeHRlcm5h bCAgICAgfCBtYWxsb2NfaW5pdGlhbGl6ZWQKLSgkMyB+IC9eU0VDVFswLTldKy8gJiYgJChORi0y KSA9PSAiRXh0ZXJuYWwiICYmICEoJE5GIGluIGV4cG9ydGVkX3N5bWJvbHMpKSB7Ci0gIHByaW50 ICRORgotfQotRU9GCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm5nLmggYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Bybmcu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ1NDJhYS4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3BybmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0jaWZuZGVmIEpF TUFMTE9DX0lOVEVSTkFMX1BSTkdfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QUk5HX0gK LQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2JpdF91dGlsLmgiCi0KLS8qCi0gKiBTaW1w bGUgbGluZWFyIGNvbmdydWVudGlhbCBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3I6Ci0g KgotICogICBwcm5nKHkpID0gKGEqeCArIGMpICUgbQotICoKLSAqIHdoZXJlIHRoZSBmb2xsb3dp bmcgY29uc3RhbnRzIGVuc3VyZSBtYXhpbWFsIHBlcmlvZDoKLSAqCi0gKiAgIGEgPT0gT2RkIG51 bWJlciAocmVsYXRpdmVseSBwcmltZSB0byAyXm4pLCBhbmQgKGEtMSkgaXMgYSBtdWx0aXBsZSBv ZiA0LgotICogICBjID09IE9kZCBudW1iZXIgKHJlbGF0aXZlbHkgcHJpbWUgdG8gMl5uKS4KLSAq ICAgbSA9PSAyXjMyCi0gKgotICogU2VlIEtudXRoJ3MgVEFPQ1AgM3JkIEVkLiwgVm9sLiAyLCBw Zy4gMTcgZm9yIGRldGFpbHMgb24gdGhlc2UgY29uc3RyYWludHMuCi0gKgotICogVGhpcyBjaG9p Y2Ugb2YgbSBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHRoZSBxdWFsaXR5IG9mIHRoZSBiaXRz IGlzCi0gKiBwcm9wb3J0aW9uYWwgdG8gYml0IHBvc2l0aW9uLiAgRm9yIGV4YW1wbGUsIHRoZSBs b3dlc3QgYml0IGhhcyBhIGN5Y2xlIG9mIDIsCi0gKiB0aGUgbmV4dCBoYXMgYSBjeWNsZSBvZiA0 LCBldGMuICBGb3IgdGhpcyByZWFzb24sIHdlIHByZWZlciB0byB1c2UgdGhlIHVwcGVyCi0gKiBi aXRzLgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJTlRFUk5BTCBERUZJTklU SU9OUyAtLSBJR05PUkUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFBSTkdf QV8zMglVSU5UMzJfQygxMTAzNTE1MjQxKQotI2RlZmluZSBQUk5HX0NfMzIJVUlOVDMyX0MoMTIz NDcpCi0KLSNkZWZpbmUgUFJOR19BXzY0CVVJTlQ2NF9DKDYzNjQxMzYyMjM4NDY3OTMwMDUpCi0j ZGVmaW5lIFBSTkdfQ182NAlVSU5UNjRfQygxNDQyNjk1MDQwODg4OTYzNDA3KQotCi1KRU1BTExP Q19BTFdBWVNfSU5MSU5FIHVpbnQzMl90Ci1wcm5nX3N0YXRlX25leHRfdTMyKHVpbnQzMl90IHN0 YXRlKSB7Ci0JcmV0dXJuIChzdGF0ZSAqIFBSTkdfQV8zMikgKyBQUk5HX0NfMzI7Ci19Ci0KLUpF TUFMTE9DX0FMV0FZU19JTkxJTkUgdWludDY0X3QKLXBybmdfc3RhdGVfbmV4dF91NjQodWludDY0 X3Qgc3RhdGUpIHsKLQlyZXR1cm4gKHN0YXRlICogUFJOR19BXzY0KSArIFBSTkdfQ182NDsKLX0K LQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBzaXplX3QKLXBybmdfc3RhdGVfbmV4dF96dShzaXpl X3Qgc3RhdGUpIHsKLSNpZiBMR19TSVpFT0ZfUFRSID09IDIKLQlyZXR1cm4gKHN0YXRlICogUFJO R19BXzMyKSArIFBSTkdfQ18zMjsKLSNlbGlmIExHX1NJWkVPRl9QVFIgPT0gMwotCXJldHVybiAo c3RhdGUgKiBQUk5HX0FfNjQpICsgUFJOR19DXzY0OwotI2Vsc2UKLSNlcnJvciBVbnN1cHBvcnRl ZCBwb2ludGVyIHNpemUKLSNlbmRpZgotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyog QkVHSU4gUFVCTElDIEFQSSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFRo ZSBwcm5nX2xnX3JhbmdlIGZ1bmN0aW9ucyBnaXZlIGEgdW5pZm9ybSBpbnQgaW4gdGhlIGhhbGYt b3BlbiByYW5nZSBbMCwKLSAqIDIqKmxnX3JhbmdlKS4KLSAqLwotCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHVpbnQzMl90Ci1wcm5nX2xnX3JhbmdlX3UzMih1aW50MzJfdCAqc3RhdGUsIHVuc2ln bmVkIGxnX3JhbmdlKSB7Ci0JYXNzZXJ0KGxnX3JhbmdlID4gMCk7Ci0JYXNzZXJ0KGxnX3Jhbmdl IDw9IDMyKTsKLQotCSpzdGF0ZSA9IHBybmdfc3RhdGVfbmV4dF91MzIoKnN0YXRlKTsKLQl1aW50 MzJfdCByZXQgPSAqc3RhdGUgPj4gKDMyIC0gbGdfcmFuZ2UpOwotCi0JcmV0dXJuIHJldDsKLX0K LQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50NjRfdAotcHJuZ19sZ19yYW5nZV91NjQodWlu dDY0X3QgKnN0YXRlLCB1bnNpZ25lZCBsZ19yYW5nZSkgewotCWFzc2VydChsZ19yYW5nZSA+IDAp OwotCWFzc2VydChsZ19yYW5nZSA8PSA2NCk7Ci0KLQkqc3RhdGUgPSBwcm5nX3N0YXRlX25leHRf dTY0KCpzdGF0ZSk7Ci0JdWludDY0X3QgcmV0ID0gKnN0YXRlID4+ICg2NCAtIGxnX3JhbmdlKTsK LQotCXJldHVybiByZXQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Ci1wcm5n X2xnX3JhbmdlX3p1KHNpemVfdCAqc3RhdGUsIHVuc2lnbmVkIGxnX3JhbmdlKSB7Ci0JYXNzZXJ0 KGxnX3JhbmdlID4gMCk7Ci0JYXNzZXJ0KGxnX3JhbmdlIDw9IFpVKDEpIDw8ICgzICsgTEdfU0la RU9GX1BUUikpOwotCi0JKnN0YXRlID0gcHJuZ19zdGF0ZV9uZXh0X3p1KCpzdGF0ZSk7Ci0Jc2l6 ZV90IHJldCA9ICpzdGF0ZSA+PiAoKFpVKDEpIDw8ICgzICsgTEdfU0laRU9GX1BUUikpIC0gbGdf cmFuZ2UpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFRoZSBwcm5nX3JhbmdlIGZ1bmN0 aW9ucyBiZWhhdmUgbGlrZSB0aGUgcHJuZ19sZ19yYW5nZSwgYnV0IHJldHVybiBhIHJlc3VsdAot ICogaW4gWzAsIHJhbmdlKSBpbnN0ZWFkIG9mIFswLCAyKipsZ19yYW5nZSkuCi0gKi8KLQotSkVN QUxMT0NfQUxXQVlTX0lOTElORSB1aW50MzJfdAotcHJuZ19yYW5nZV91MzIodWludDMyX3QgKnN0 YXRlLCB1aW50MzJfdCByYW5nZSkgewotCWFzc2VydChyYW5nZSAhPSAwKTsKLQkvKgotCSAqIElm IHJhbmdlIHdlcmUgMSwgbGdfcmFuZ2Ugd291bGQgYmUgMCwgc28gdGhlIHNoaWZ0IGluCi0JICog cHJuZ19sZ19yYW5nZV91MzIgd291bGQgYmUgYSBzaGlmdCBvZiBhIDMyLWJpdCB2YXJpYWJsZSBi eSAzMiBiaXRzLAotCSAqIHdoaWNoIGlzIFVCLiAgSnVzdCBoYW5kbGUgdGhpcyBjYXNlIGFzIGEg b25lLW9mZi4KLQkgKi8KLQlpZiAocmFuZ2UgPT0gMSkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQkv KiBDb21wdXRlIHRoZSBjZWlsaW5nIG9mIGxnKHJhbmdlKS4gKi8KLQl1bnNpZ25lZCBsZ19yYW5n ZSA9IGZmc191MzIocG93Ml9jZWlsX3UzMihyYW5nZSkpOwotCi0JLyogR2VuZXJhdGUgYSByZXN1 bHQgaW4gWzAuLnJhbmdlKSB2aWEgcmVwZWF0ZWQgdHJpYWwuICovCi0JdWludDMyX3QgcmV0Owot CWRvIHsKLQkJcmV0ID0gcHJuZ19sZ19yYW5nZV91MzIoc3RhdGUsIGxnX3JhbmdlKTsKLQl9IHdo aWxlIChyZXQgPj0gcmFuZ2UpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotSkVNQUxMT0NfQUxXQVlT X0lOTElORSB1aW50NjRfdAotcHJuZ19yYW5nZV91NjQodWludDY0X3QgKnN0YXRlLCB1aW50NjRf dCByYW5nZSkgewotCWFzc2VydChyYW5nZSAhPSAwKTsKLQotCS8qIFNlZSB0aGUgbm90ZSBpbiBw cm5nX3JhbmdlX3UzMi4gKi8KLQlpZiAocmFuZ2UgPT0gMSkgewotCQlyZXR1cm4gMDsKLQl9Ci0K LQkvKiBDb21wdXRlIHRoZSBjZWlsaW5nIG9mIGxnKHJhbmdlKS4gKi8KLQl1bnNpZ25lZCBsZ19y YW5nZSA9IGZmc191NjQocG93Ml9jZWlsX3U2NChyYW5nZSkpOwotCi0JLyogR2VuZXJhdGUgYSBy ZXN1bHQgaW4gWzAuLnJhbmdlKSB2aWEgcmVwZWF0ZWQgdHJpYWwuICovCi0JdWludDY0X3QgcmV0 OwotCWRvIHsKLQkJcmV0ID0gcHJuZ19sZ19yYW5nZV91NjQoc3RhdGUsIGxnX3JhbmdlKTsKLQl9 IHdoaWxlIChyZXQgPj0gcmFuZ2UpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotSkVNQUxMT0NfQUxX QVlTX0lOTElORSBzaXplX3QKLXBybmdfcmFuZ2VfenUoc2l6ZV90ICpzdGF0ZSwgc2l6ZV90IHJh bmdlKSB7Ci0JYXNzZXJ0KHJhbmdlICE9IDApOwotCi0JLyogU2VlIHRoZSBub3RlIGluIHBybmdf cmFuZ2VfdTMyLiAqLwotCWlmIChyYW5nZSA9PSAxKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8q IENvbXB1dGUgdGhlIGNlaWxpbmcgb2YgbGcocmFuZ2UpLiAqLwotCXVuc2lnbmVkIGxnX3Jhbmdl ID0gZmZzX3U2NChwb3cyX2NlaWxfdTY0KHJhbmdlKSk7Ci0KLQkvKiBHZW5lcmF0ZSBhIHJlc3Vs dCBpbiBbMC4ucmFuZ2UpIHZpYSByZXBlYXRlZCB0cmlhbC4gKi8KLQlzaXplX3QgcmV0OwotCWRv IHsKLQkJcmV0ID0gcHJuZ19sZ19yYW5nZV96dShzdGF0ZSwgbGdfcmFuZ2UpOwotCX0gd2hpbGUg KHJldCA+PSByYW5nZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogSkVNQUxMT0Nf SU5URVJOQUxfUFJOR19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2RhdGEuaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvcHJvZl9kYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjOGUyMmMu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2RhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3 ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9EQVRBX0gKLSNkZWZpbmUg SkVNQUxMT0NfSU5URVJOQUxfUFJPRl9EQVRBX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL211dGV4LmgiCi0KLWV4dGVybiBtYWxsb2NfbXV0ZXhfdCBidDJnY3R4X210eDsKLWV4dGVy biBtYWxsb2NfbXV0ZXhfdCB0ZGF0YXNfbXR4OwotZXh0ZXJuIG1hbGxvY19tdXRleF90IHByb2Zf ZHVtcF9tdHg7Ci0KLWV4dGVybiBtYWxsb2NfbXV0ZXhfdCAqZ2N0eF9sb2NrczsKLWV4dGVybiBt YWxsb2NfbXV0ZXhfdCAqdGRhdGFfbG9ja3M7Ci0KLWV4dGVybiBzaXplX3QgcHJvZl91bmJpYXNl ZF9zeltQUk9GX1NDX05TSVpFU107Ci1leHRlcm4gc2l6ZV90IHByb2Zfc2hpZnRlZF91bmJpYXNl ZF9jbnRbUFJPRl9TQ19OU0laRVNdOwotCi12b2lkIHByb2ZfYnRfaGFzaChjb25zdCB2b2lkICpr ZXksIHNpemVfdCByX2hhc2hbMl0pOwotYm9vbCBwcm9mX2J0X2tleWNvbXAoY29uc3Qgdm9pZCAq azEsIGNvbnN0IHZvaWQgKmsyKTsKLQotYm9vbCBwcm9mX2RhdGFfaW5pdCh0c2RfdCAqdHNkKTsK LXByb2ZfdGN0eF90ICpwcm9mX2xvb2t1cCh0c2RfdCAqdHNkLCBwcm9mX2J0X3QgKmJ0KTsKLWNo YXIgKnByb2ZfdGhyZWFkX25hbWVfYWxsb2ModHNkX3QgKnRzZCwgY29uc3QgY2hhciAqdGhyZWFk X25hbWUpOwotaW50IHByb2ZfdGhyZWFkX25hbWVfc2V0X2ltcGwodHNkX3QgKnRzZCwgY29uc3Qg Y2hhciAqdGhyZWFkX25hbWUpOwotdm9pZCBwcm9mX3VuYmlhc19tYXBfaW5pdCgpOwotdm9pZCBw cm9mX2R1bXBfaW1wbCh0c2RfdCAqdHNkLCB3cml0ZV9jYl90ICpwcm9mX2R1bXBfd3JpdGUsIHZv aWQgKmNib3BhcXVlLAotICAgIHByb2ZfdGRhdGFfdCAqdGRhdGEsIGJvb2wgbGVha2NoZWNrKTsK LXByb2ZfdGRhdGFfdCAqIHByb2ZfdGRhdGFfaW5pdF9pbXBsKHRzZF90ICp0c2QsIHVpbnQ2NF90 IHRocl91aWQsCi0gICAgdWludDY0X3QgdGhyX2Rpc2NyaW0sIGNoYXIgKnRocmVhZF9uYW1lLCBi b29sIGFjdGl2ZSk7Ci12b2lkIHByb2ZfdGRhdGFfZGV0YWNoKHRzZF90ICp0c2QsIHByb2ZfdGRh dGFfdCAqdGRhdGEpOwotdm9pZCBwcm9mX3Jlc2V0KHRzZF90ICp0c2QsIHNpemVfdCBsZ19zYW1w bGUpOwotdm9pZCBwcm9mX3RjdHhfdHJ5X2Rlc3Ryb3kodHNkX3QgKnRzZCwgcHJvZl90Y3R4X3Qg KnRjdHgpOwotCi0vKiBVc2VkIGluIHVuaXQgdGVzdHMuICovCi1zaXplX3QgcHJvZl90ZGF0YV9j b3VudCh2b2lkKTsKLXNpemVfdCBwcm9mX2J0X2NvdW50KHZvaWQpOwotdm9pZCBwcm9mX2NudF9h bGwocHJvZl9jbnRfdCAqY250X2FsbCk7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9Q Uk9GX0RBVEFfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9leHRlcm5zLmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3Byb2ZfZXh0ZXJucy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGZmMTM0 Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9leHRlcm5zLmgKKysrIC9kZXYvbnVsbApAQCAt MSw5NSArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfRVhURVJOU19ICi0j ZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfRVhURVJOU19ICi0KLSNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9tdXRleC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2Zf aG9vay5oIgotCi1leHRlcm4gYm9vbCBvcHRfcHJvZjsKLWV4dGVybiBib29sIG9wdF9wcm9mX2Fj dGl2ZTsKLWV4dGVybiBib29sIG9wdF9wcm9mX3RocmVhZF9hY3RpdmVfaW5pdDsKLWV4dGVybiBz aXplX3Qgb3B0X2xnX3Byb2Zfc2FtcGxlOyAgICAvKiBNZWFuIGJ5dGVzIGJldHdlZW4gc2FtcGxl cy4gKi8KLWV4dGVybiBzc2l6ZV90IG9wdF9sZ19wcm9mX2ludGVydmFsOyAvKiBsZyhwcm9mX2lu dGVydmFsKS4gKi8KLWV4dGVybiBib29sIG9wdF9wcm9mX2dkdW1wOyAgICAgICAgICAvKiBIaWdo LXdhdGVyIG1lbW9yeSBkdW1waW5nLiAqLwotZXh0ZXJuIGJvb2wgb3B0X3Byb2ZfZmluYWw7ICAg ICAgICAgIC8qIEZpbmFsIHByb2ZpbGUgZHVtcGluZy4gKi8KLWV4dGVybiBib29sIG9wdF9wcm9m X2xlYWs7ICAgICAgICAgICAvKiBEdW1wIGxlYWsgc3VtbWFyeSBhdCBleGl0LiAqLwotZXh0ZXJu IGJvb2wgb3B0X3Byb2ZfbGVha19lcnJvcjsgICAgIC8qIEV4aXQgd2l0aCBlcnJvciBjb2RlIGlm IG1lbW9yeSBsZWFrZWQgKi8KLWV4dGVybiBib29sIG9wdF9wcm9mX2FjY3VtOyAgICAgICAgICAv KiBSZXBvcnQgY3VtdWxhdGl2ZSBieXRlcy4gKi8KLWV4dGVybiBib29sIG9wdF9wcm9mX2xvZzsg ICAgICAgICAgICAvKiBUdXJuIGxvZ2dpbmcgb24gYXQgYm9vdC4gKi8KLWV4dGVybiBjaGFyIG9w dF9wcm9mX3ByZWZpeFsKLSAgICAvKiBNaW5pbWl6ZSBtZW1vcnkgYmxvYXQgZm9yIG5vbi1wcm9m IGJ1aWxkcy4gKi8KLSNpZmRlZiBKRU1BTExPQ19QUk9GCi0gICAgUEFUSF9NQVggKwotI2VuZGlm Ci0gICAgMV07Ci1leHRlcm4gYm9vbCBvcHRfcHJvZl91bmJpYXM7Ci0KLS8qIEZvciByZWNvcmRp bmcgcmVjZW50IGFsbG9jYXRpb25zICovCi1leHRlcm4gc3NpemVfdCBvcHRfcHJvZl9yZWNlbnRf YWxsb2NfbWF4OwotCi0vKiBXaGV0aGVyIHRvIHVzZSB0aHJlYWQgbmFtZSBwcm92aWRlZCBieSB0 aGUgc3lzdGVtIG9yIGJ5IG1hbGxjdGwuICovCi1leHRlcm4gYm9vbCBvcHRfcHJvZl9zeXNfdGhy ZWFkX25hbWU7Ci0KLS8qIFdoZXRoZXIgdG8gcmVjb3JkIHBlciBzaXplIGNsYXNzIGNvdW50cyBh bmQgcmVxdWVzdCBzaXplIHRvdGFscy4gKi8KLWV4dGVybiBib29sIG9wdF9wcm9mX3N0YXRzOwot Ci0vKiBBY2Nlc3NlZCB2aWEgcHJvZl9hY3RpdmVfW2dzXWV0e191bmxvY2tlZCx9KCkuICovCi1l eHRlcm4gYm9vbCBwcm9mX2FjdGl2ZV9zdGF0ZTsKLQotLyogQWNjZXNzZWQgdmlhIHByb2ZfZ2R1 bXBfW2dzXWV0e191bmxvY2tlZCx9KCkuICovCi1leHRlcm4gYm9vbCBwcm9mX2dkdW1wX3ZhbDsK LQotLyogUHJvZmlsZSBkdW1wIGludGVydmFsLCBtZWFzdXJlZCBpbiBieXRlcyBhbGxvY2F0ZWQu ICovCi1leHRlcm4gdWludDY0X3QgcHJvZl9pbnRlcnZhbDsKLQotLyoKLSAqIEluaXRpYWxpemVk IGFzIG9wdF9sZ19wcm9mX3NhbXBsZSwgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWVkIGR1cmluZyBw cm9maWxpbmcKLSAqIHJlc2V0cy4KLSAqLwotZXh0ZXJuIHNpemVfdCBsZ19wcm9mX3NhbXBsZTsK LQotZXh0ZXJuIGJvb2wgcHJvZl9ib290ZWQ7Ci0KLXZvaWQgcHJvZl9iYWNrdHJhY2VfaG9va19z ZXQocHJvZl9iYWNrdHJhY2VfaG9va190IGhvb2spOwotcHJvZl9iYWNrdHJhY2VfaG9va190IHBy b2ZfYmFja3RyYWNlX2hvb2tfZ2V0KCk7Ci0KLXZvaWQgcHJvZl9kdW1wX2hvb2tfc2V0KHByb2Zf ZHVtcF9ob29rX3QgaG9vayk7Ci1wcm9mX2R1bXBfaG9va190IHByb2ZfZHVtcF9ob29rX2dldCgp OwotCi0vKiBGdW5jdGlvbnMgb25seSBhY2Nlc3NlZCBpbiBwcm9mX2lubGluZXMuaCAqLwotcHJv Zl90ZGF0YV90ICpwcm9mX3RkYXRhX2luaXQodHNkX3QgKnRzZCk7Ci1wcm9mX3RkYXRhX3QgKnBy b2ZfdGRhdGFfcmVpbml0KHRzZF90ICp0c2QsIHByb2ZfdGRhdGFfdCAqdGRhdGEpOwotCi12b2lk IHByb2ZfYWxsb2Nfcm9sbGJhY2sodHNkX3QgKnRzZCwgcHJvZl90Y3R4X3QgKnRjdHgpOwotdm9p ZCBwcm9mX21hbGxvY19zYW1wbGVfb2JqZWN0KHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IHVzaXplLCBwcm9mX3RjdHhfdCAqdGN0eCk7Ci12b2lk IHByb2ZfZnJlZV9zYW1wbGVkX29iamVjdCh0c2RfdCAqdHNkLCBzaXplX3QgdXNpemUsIHByb2Zf aW5mb190ICpwcm9mX2luZm8pOwotcHJvZl90Y3R4X3QgKnByb2ZfdGN0eF9jcmVhdGUodHNkX3Qg KnRzZCk7Ci12b2lkIHByb2ZfaWR1bXAodHNkbl90ICp0c2RuKTsKLWJvb2wgcHJvZl9tZHVtcCh0 c2RfdCAqdHNkLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci12b2lkIHByb2ZfZ2R1bXAodHNkbl90 ICp0c2RuKTsKLQotdm9pZCBwcm9mX3RkYXRhX2NsZWFudXAodHNkX3QgKnRzZCk7Ci1ib29sIHBy b2ZfYWN0aXZlX2dldCh0c2RuX3QgKnRzZG4pOwotYm9vbCBwcm9mX2FjdGl2ZV9zZXQodHNkbl90 ICp0c2RuLCBib29sIGFjdGl2ZSk7Ci1jb25zdCBjaGFyICpwcm9mX3RocmVhZF9uYW1lX2dldCh0 c2RfdCAqdHNkKTsKLWludCBwcm9mX3RocmVhZF9uYW1lX3NldCh0c2RfdCAqdHNkLCBjb25zdCBj aGFyICp0aHJlYWRfbmFtZSk7Ci1ib29sIHByb2ZfdGhyZWFkX2FjdGl2ZV9nZXQodHNkX3QgKnRz ZCk7Ci1ib29sIHByb2ZfdGhyZWFkX2FjdGl2ZV9zZXQodHNkX3QgKnRzZCwgYm9vbCBhY3RpdmUp OwotYm9vbCBwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9nZXQodHNkbl90ICp0c2RuKTsKLWJvb2wg cHJvZl90aHJlYWRfYWN0aXZlX2luaXRfc2V0KHRzZG5fdCAqdHNkbiwgYm9vbCBhY3RpdmVfaW5p dCk7Ci1ib29sIHByb2ZfZ2R1bXBfZ2V0KHRzZG5fdCAqdHNkbik7Ci1ib29sIHByb2ZfZ2R1bXBf c2V0KHRzZG5fdCAqdHNkbiwgYm9vbCBhY3RpdmUpOwotdm9pZCBwcm9mX2Jvb3QwKHZvaWQpOwot dm9pZCBwcm9mX2Jvb3QxKHZvaWQpOwotYm9vbCBwcm9mX2Jvb3QyKHRzZF90ICp0c2QsIGJhc2Vf dCAqYmFzZSk7Ci12b2lkIHByb2ZfcHJlZm9yazAodHNkbl90ICp0c2RuKTsKLXZvaWQgcHJvZl9w cmVmb3JrMSh0c2RuX3QgKnRzZG4pOwotdm9pZCBwcm9mX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3Qg KnRzZG4pOwotdm9pZCBwcm9mX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbik7Ci0KLS8qIE9u bHkgYWNjZXNzZWQgYnkgdGhyZWFkIGV2ZW50LiAqLwotdWludDY0X3QgcHJvZl9zYW1wbGVfbmV3 X2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Ci11aW50NjRfdCBwcm9mX3NhbXBsZV9wb3N0cG9uZWRf ZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsKLXZvaWQgcHJvZl9zYW1wbGVfZXZlbnRfaGFuZGxlcih0 c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVS TkFMX1BST0ZfRVhURVJOU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2hvb2suaCBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2Mv aW50ZXJuYWwvcHJvZl9ob29rLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MGQx OWQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2hvb2suaAorKysgL2Rldi9udWxsCkBAIC0x LDIxICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9IT09LX0gKLSNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9IT09LX0gKLQotLyoKLSAqIFRoZSBob29rcyB0eXBl cyBvZiB3aGljaCBhcmUgZGVjbGFyZWQgaW4gdGhpcyBmaWxlIGFyZSBleHBlcmltZW50YWwgYW5k Ci0gKiB1bmRvY3VtZW50ZWQsIHRodXMgdGhlIHR5cGVkZWZzIGFyZSBsb2NhdGVkIGluIGFuICdp bnRlcm5hbCcgaGVhZGVyLgotICovCi0KLS8qCi0gKiBBIGhvb2sgdG8gbW9jayBvdXQgYmFja3Ry YWNlIGZ1bmN0aW9uYWxpdHkuICBUaGlzIGNhbiBiZSBoYW5keSwgc2luY2UgaXQncwotICogb3Ro ZXJ3aXNlIGRpZmZpY3VsdCB0byBndWFyYW50ZWUgdGhhdCB0d28gYWxsb2NhdGlvbnMgYXJlIHJl cG9ydGVkIGFzIGNvbWluZwotICogZnJvbSB0aGUgZXhhY3Qgc2FtZSBzdGFjayB0cmFjZSBpbiB0 aGUgcHJlc2VuY2Ugb2YgYW4gb3B0aW1pemluZyBjb21waWxlci4KLSAqLwotdHlwZWRlZiB2b2lk ICgqcHJvZl9iYWNrdHJhY2VfaG9va190KSh2b2lkICoqLCB1bnNpZ25lZCAqLCB1bnNpZ25lZCk7 Ci0KLS8qCi0gKiBBIGNhbGxiYWNrIGhvb2sgdGhhdCBub3RpZmllcyBhYm91dCByZWNlbnRseSBk dW1wZWQgaGVhcCBwcm9maWxlLgotICovCi10eXBlZGVmIHZvaWQgKCpwcm9mX2R1bXBfaG9va190 KShjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9Q Uk9GX0hPT0tfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9pbmxpbmVzLmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3Byb2ZfaW5saW5lcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGU3ZTdm Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9pbmxpbmVzLmgKKysrIC9kZXYvbnVsbApAQCAt MSwyNjEgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX0lOTElORVNfSAot I2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX0lOTElORVNfSAotCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvc2FmZXR5X2NoZWNrLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvc3ouaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90aHJlYWRfZXZlbnQuaCIKLQot SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1wcm9mX2FjdGl2ZV9hc3NlcnQoKSB7Ci0JY2Fz c2VydChjb25maWdfcHJvZik7Ci0JLyoKLQkgKiBJZiBvcHRfcHJvZiBpcyBvZmYsIHRoZW4gcHJv Zl9hY3RpdmUgbXVzdCBhbHdheXMgYmUgb2ZmLCByZWdhcmRsZXNzCi0JICogb2Ygd2hldGhlciBw cm9mX2FjdGl2ZV9tdHggaXMgaW4gZWZmZWN0IG9yIG5vdC4KLQkgKi8KLQlhc3NlcnQob3B0X3By b2YgfHwgIXByb2ZfYWN0aXZlX3N0YXRlKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBi b29sCi1wcm9mX2FjdGl2ZV9nZXRfdW5sb2NrZWQodm9pZCkgewotCXByb2ZfYWN0aXZlX2Fzc2Vy dCgpOwotCS8qCi0JICogRXZlbiBpZiBvcHRfcHJvZiBpcyB0cnVlLCBzYW1wbGluZyBjYW4gYmUg dGVtcG9yYXJpbHkgZGlzYWJsZWQgYnkKLQkgKiBzZXR0aW5nIHByb2ZfYWN0aXZlIHRvIGZhbHNl LiAgTm8gbG9ja2luZyBpcyB1c2VkIHdoZW4gcmVhZGluZwotCSAqIHByb2ZfYWN0aXZlIGluIHRo ZSBmYXN0IHBhdGgsIHNvIHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHJlZ2FyZGluZwotCSAqIGhv dyBsb25nIGl0IHdpbGwgdGFrZSBmb3IgYWxsIHRocmVhZHMgdG8gbm90aWNlIHN0YXRlIGNoYW5n ZXMuCi0JICovCi0JcmV0dXJuIHByb2ZfYWN0aXZlX3N0YXRlOwotfQotCi1KRU1BTExPQ19BTFdB WVNfSU5MSU5FIGJvb2wKLXByb2ZfZ2R1bXBfZ2V0X3VubG9ja2VkKHZvaWQpIHsKLQkvKgotCSAq IE5vIGxvY2tpbmcgaXMgdXNlZCB3aGVuIHJlYWRpbmcgcHJvZl9nZHVtcF92YWwgaW4gdGhlIGZh c3QgcGF0aCwgc28KLQkgKiB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyByZWdhcmRpbmcgaG93IGxv bmcgaXQgd2lsbCB0YWtlIGZvciBhbGwKLQkgKiB0aHJlYWRzIHRvIG5vdGljZSBzdGF0ZSBjaGFu Z2VzLgotCSAqLwotCXJldHVybiBwcm9mX2dkdW1wX3ZhbDsKLX0KLQotSkVNQUxMT0NfQUxXQVlT X0lOTElORSBwcm9mX3RkYXRhX3QgKgotcHJvZl90ZGF0YV9nZXQodHNkX3QgKnRzZCwgYm9vbCBj cmVhdGUpIHsKLQlwcm9mX3RkYXRhX3QgKnRkYXRhOwotCi0JY2Fzc2VydChjb25maWdfcHJvZik7 Ci0KLQl0ZGF0YSA9IHRzZF9wcm9mX3RkYXRhX2dldCh0c2QpOwotCWlmIChjcmVhdGUpIHsKLQkJ YXNzZXJ0KHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID09IDApOwotCQlpZiAodW5saWtl bHkodGRhdGEgPT0gTlVMTCkpIHsKLQkJCWlmICh0c2Rfbm9taW5hbCh0c2QpKSB7Ci0JCQkJdGRh dGEgPSBwcm9mX3RkYXRhX2luaXQodHNkKTsKLQkJCQl0c2RfcHJvZl90ZGF0YV9zZXQodHNkLCB0 ZGF0YSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAodW5saWtlbHkodGRhdGEtPmV4cGlyZWQpKSB7Ci0J CQl0ZGF0YSA9IHByb2ZfdGRhdGFfcmVpbml0KHRzZCwgdGRhdGEpOwotCQkJdHNkX3Byb2ZfdGRh dGFfc2V0KHRzZCwgdGRhdGEpOwotCQl9Ci0JCWFzc2VydCh0ZGF0YSA9PSBOVUxMIHx8IHRkYXRh LT5hdHRhY2hlZCk7Ci0JfQotCi0JcmV0dXJuIHRkYXRhOwotfQotCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHZvaWQKLXByb2ZfaW5mb19nZXQodHNkX3QgKnRzZCwgY29uc3Qgdm9pZCAqcHRyLCBl bWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgsCi0gICAgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbykg ewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwotCWFzc2VydChwdHIgIT0gTlVMTCk7Ci0JYXNzZXJ0 KHByb2ZfaW5mbyAhPSBOVUxMKTsKLQotCWFyZW5hX3Byb2ZfaW5mb19nZXQodHNkLCBwdHIsIGFs bG9jX2N0eCwgcHJvZl9pbmZvLCBmYWxzZSk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUg dm9pZAotcHJvZl9pbmZvX2dldF9hbmRfcmVzZXRfcmVjZW50KHRzZF90ICp0c2QsIGNvbnN0IHZv aWQgKnB0ciwKLSAgICBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgsIHByb2ZfaW5mb190ICpw cm9mX2luZm8pIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQocHRyICE9IE5VTEwp OwotCWFzc2VydChwcm9mX2luZm8gIT0gTlVMTCk7Ci0KLQlhcmVuYV9wcm9mX2luZm9fZ2V0KHRz ZCwgcHRyLCBhbGxvY19jdHgsIHByb2ZfaW5mbywgdHJ1ZSk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdm9pZAotcHJvZl90Y3R4X3Jlc2V0KHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0 ciwgZW1hcF9hbGxvY19jdHhfdCAqYWxsb2NfY3R4KSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7 Ci0JYXNzZXJ0KHB0ciAhPSBOVUxMKTsKLQotCWFyZW5hX3Byb2ZfdGN0eF9yZXNldCh0c2QsIHB0 ciwgYWxsb2NfY3R4KTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1wcm9mX3Rj dHhfcmVzZXRfc2FtcGxlZCh0c2RfdCAqdHNkLCBjb25zdCB2b2lkICpwdHIpIHsKLQljYXNzZXJ0 KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQocHRyICE9IE5VTEwpOwotCi0JYXJlbmFfcHJvZl90Y3R4 X3Jlc2V0X3NhbXBsZWQodHNkLCBwdHIpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZv aWQKLXByb2ZfaW5mb19zZXQodHNkX3QgKnRzZCwgZWRhdGFfdCAqZWRhdGEsIHByb2ZfdGN0eF90 ICp0Y3R4LCBzaXplX3Qgc2l6ZSkgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwotCWFzc2VydChl ZGF0YSAhPSBOVUxMKTsKLQlhc3NlcnQoKHVpbnRwdHJfdCl0Y3R4ID4gKHVpbnRwdHJfdCkxVSk7 Ci0KLQlhcmVuYV9wcm9mX2luZm9fc2V0KHRzZCwgZWRhdGEsIHRjdHgsIHNpemUpOwotfQotCi1K RU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLXByb2Zfc2FtcGxlX3Nob3VsZF9za2lwKHRzZF90 ICp0c2QsIGJvb2wgc2FtcGxlX2V2ZW50KSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0KLQkv KiBGYXN0cGF0aDogbm8gbmVlZCB0byBsb2FkIHRkYXRhICovCi0JaWYgKGxpa2VseSghc2FtcGxl X2V2ZW50KSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIHNhbXBsZV9ldmVudCBp cyBhbHdheXMgb2J0YWluZWQgZnJvbSB0aGUgdGhyZWFkIGV2ZW50IG1vZHVsZSwgYW5kCi0JICog d2hlbmV2ZXIgaXQncyB0cnVlLCBpdCBtZWFucyB0aGF0IHRoZSB0aHJlYWQgZXZlbnQgbW9kdWxl IGhhcwotCSAqIGFscmVhZHkgY2hlY2tlZCB0aGUgcmVlbnRyYW5jeSBsZXZlbC4KLQkgKi8KLQlh c3NlcnQodHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7Ci0KLQlwcm9mX3RkYXRh X3QgKnRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNkLCB0cnVlKTsKLQlpZiAodW5saWtlbHkodGRh dGEgPT0gTlVMTCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuICF0ZGF0YS0+YWN0 aXZlOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHByb2ZfdGN0eF90ICoKLXByb2ZfYWxs b2NfcHJlcCh0c2RfdCAqdHNkLCBib29sIHByb2ZfYWN0aXZlLCBib29sIHNhbXBsZV9ldmVudCkg ewotCXByb2ZfdGN0eF90ICpyZXQ7Ci0KLQlpZiAoIXByb2ZfYWN0aXZlIHx8Ci0JICAgIGxpa2Vs eShwcm9mX3NhbXBsZV9zaG91bGRfc2tpcCh0c2QsIHNhbXBsZV9ldmVudCkpKSB7Ci0JCXJldCA9 IChwcm9mX3RjdHhfdCAqKSh1aW50cHRyX3QpMVU7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcHJvZl90 Y3R4X2NyZWF0ZSh0c2QpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdm9pZAotcHJvZl9tYWxsb2ModHNkX3QgKnRzZCwgY29uc3Qgdm9pZCAqcHRyLCBz aXplX3Qgc2l6ZSwgc2l6ZV90IHVzaXplLAotICAgIGVtYXBfYWxsb2NfY3R4X3QgKmFsbG9jX2N0 eCwgcHJvZl90Y3R4X3QgKnRjdHgpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQo cHRyICE9IE5VTEwpOwotCWFzc2VydCh1c2l6ZSA9PSBpc2FsbG9jKHRzZF90c2RuKHRzZCksIHB0 cikpOwotCi0JaWYgKHVubGlrZWx5KCh1aW50cHRyX3QpdGN0eCA+ICh1aW50cHRyX3QpMVUpKSB7 Ci0JCXByb2ZfbWFsbG9jX3NhbXBsZV9vYmplY3QodHNkLCBwdHIsIHNpemUsIHVzaXplLCB0Y3R4 KTsKLQl9IGVsc2UgewotCQlwcm9mX3RjdHhfcmVzZXQodHNkLCBwdHIsIGFsbG9jX2N0eCk7Ci0J fQotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXByb2ZfcmVhbGxvYyh0c2RfdCAq dHNkLCBjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXplX3QgdXNpemUsCi0gICAgcHJv Zl90Y3R4X3QgKnRjdHgsIGJvb2wgcHJvZl9hY3RpdmUsIGNvbnN0IHZvaWQgKm9sZF9wdHIsIHNp emVfdCBvbGRfdXNpemUsCi0gICAgcHJvZl9pbmZvX3QgKm9sZF9wcm9mX2luZm8sIGJvb2wgc2Ft cGxlX2V2ZW50KSB7Ci0JYm9vbCBzYW1wbGVkLCBvbGRfc2FtcGxlZCwgbW92ZWQ7Ci0KLQljYXNz ZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQocHRyICE9IE5VTEwgfHwgKHVpbnRwdHJfdCl0Y3R4 IDw9ICh1aW50cHRyX3QpMVUpOwotCi0JaWYgKHByb2ZfYWN0aXZlICYmIHB0ciAhPSBOVUxMKSB7 Ci0JCWFzc2VydCh1c2l6ZSA9PSBpc2FsbG9jKHRzZF90c2RuKHRzZCksIHB0cikpOwotCQlpZiAo cHJvZl9zYW1wbGVfc2hvdWxkX3NraXAodHNkLCBzYW1wbGVfZXZlbnQpKSB7Ci0JCQkvKgotCQkJ ICogRG9uJ3Qgc2FtcGxlLiAgVGhlIHVzaXplIHBhc3NlZCB0byBwcm9mX2FsbG9jX3ByZXAoKQot CQkJICogd2FzIGxhcmdlciB0aGFuIHdoYXQgYWN0dWFsbHkgZ290IGFsbG9jYXRlZCwgc28gYQot CQkJICogYmFja3RyYWNlIHdhcyBjYXB0dXJlZCBmb3IgdGhpcyBhbGxvY2F0aW9uLCBldmVuCi0J CQkgKiB0aG91Z2ggaXRzIGFjdHVhbCB1c2l6ZSB3YXMgaW5zdWZmaWNpZW50IHRvIGNyb3NzIHRo ZQotCQkJICogc2FtcGxlIHRocmVzaG9sZC4KLQkJCSAqLwotCQkJcHJvZl9hbGxvY19yb2xsYmFj ayh0c2QsIHRjdHgpOwotCQkJdGN0eCA9IChwcm9mX3RjdHhfdCAqKSh1aW50cHRyX3QpMVU7Ci0J CX0KLQl9Ci0KLQlzYW1wbGVkID0gKCh1aW50cHRyX3QpdGN0eCA+ICh1aW50cHRyX3QpMVUpOwot CW9sZF9zYW1wbGVkID0gKCh1aW50cHRyX3Qpb2xkX3Byb2ZfaW5mby0+YWxsb2NfdGN0eCA+ICh1 aW50cHRyX3QpMVUpOwotCW1vdmVkID0gKHB0ciAhPSBvbGRfcHRyKTsKLQotCWlmICh1bmxpa2Vs eShzYW1wbGVkKSkgewotCQlwcm9mX21hbGxvY19zYW1wbGVfb2JqZWN0KHRzZCwgcHRyLCBzaXpl LCB1c2l6ZSwgdGN0eCk7Ci0JfSBlbHNlIGlmIChtb3ZlZCkgewotCQlwcm9mX3RjdHhfcmVzZXQo dHNkLCBwdHIsIE5VTEwpOwotCX0gZWxzZSBpZiAodW5saWtlbHkob2xkX3NhbXBsZWQpKSB7Ci0J CS8qCi0JCSAqIHByb2ZfdGN0eF9yZXNldCgpIHdvdWxkIHdvcmsgZm9yIHRoZSAhbW92ZWQgY2Fz ZSBhcyB3ZWxsLAotCQkgKiBidXQgcHJvZl90Y3R4X3Jlc2V0X3NhbXBsZWQoKSBpcyBzbGlnaHRs eSBjaGVhcGVyLCBhbmQgdGhlCi0JCSAqIHByb3BlciB0aGluZyB0byBkbyBoZXJlIGluIHRoZSBw cmVzZW5jZSBvZiBleHBsaWNpdAotCQkgKiBrbm93bGVkZ2UgcmU6IG1vdmVkIHN0YXRlLgotCQkg Ki8KLQkJcHJvZl90Y3R4X3Jlc2V0X3NhbXBsZWQodHNkLCBwdHIpOwotCX0gZWxzZSB7Ci0JCXBy b2ZfaW5mb190IHByb2ZfaW5mbzsKLQkJcHJvZl9pbmZvX2dldCh0c2QsIHB0ciwgTlVMTCwgJnBy b2ZfaW5mbyk7Ci0JCWFzc2VydCgodWludHB0cl90KXByb2ZfaW5mby5hbGxvY190Y3R4ID09ICh1 aW50cHRyX3QpMVUpOwotCX0KLQotCS8qCi0JICogVGhlIHByb2ZfZnJlZV9zYW1wbGVkX29iamVj dCgpIGNhbGwgbXVzdCBjb21lIGFmdGVyIHRoZQotCSAqIHByb2ZfbWFsbG9jX3NhbXBsZV9vYmpl Y3QoKSBjYWxsLCBiZWNhdXNlIHRjdHggYW5kIG9sZF90Y3R4IG1heSBiZQotCSAqIHRoZSBzYW1l LCBpbiB3aGljaCBjYXNlIHJldmVyc2luZyB0aGUgY2FsbCBvcmRlciBjb3VsZCBjYXVzZSB0aGUg dGN0eAotCSAqIHRvIGJlIHByZW1hdHVyZWx5IGRlc3Ryb3llZCBhcyBhIHNpZGUgZWZmZWN0IG9m IG1vbWVudGFyaWx5IHplcm9lZAotCSAqIGNvdW50ZXJzLgotCSAqLwotCWlmICh1bmxpa2VseShv bGRfc2FtcGxlZCkpIHsKLQkJcHJvZl9mcmVlX3NhbXBsZWRfb2JqZWN0KHRzZCwgb2xkX3VzaXpl LCBvbGRfcHJvZl9pbmZvKTsKLQl9Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90 Ci1wcm9mX3NhbXBsZV9hbGlnbihzaXplX3Qgb3JpZ19hbGlnbikgewotCS8qCi0JICogRW5mb3Jj ZSBwYWdlIGFsaWdubWVudCwgc28gdGhhdCBzYW1wbGVkIGFsbG9jYXRpb25zIGNhbiBiZSBpZGVu dGlmaWVkCi0JICogdy9vIG1ldGFkYXRhIGxvb2t1cC4KLQkgKi8KLQlhc3NlcnQob3B0X3Byb2Yp OwotCXJldHVybiAob3B0X2NhY2hlX29ibGl2aW91cyAmJiBvcmlnX2FsaWduIDwgUEFHRSkgPyBQ QUdFIDoKLQkgICAgb3JpZ19hbGlnbjsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29s Ci1wcm9mX3NhbXBsZV9hbGlnbmVkKGNvbnN0IHZvaWQgKnB0cikgewotCXJldHVybiAoKHVpbnRw dHJfdClwdHIgJiBQQUdFX01BU0spID09IDA7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUg Ym9vbAotcHJvZl9zYW1wbGVkKHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0cikgewotCXByb2Zf aW5mb190IHByb2ZfaW5mbzsKLQlwcm9mX2luZm9fZ2V0KHRzZCwgcHRyLCBOVUxMLCAmcHJvZl9p bmZvKTsKLQlib29sIHNhbXBsZWQgPSAodWludHB0cl90KXByb2ZfaW5mby5hbGxvY190Y3R4ID4g KHVpbnRwdHJfdCkxVTsKLQlpZiAoc2FtcGxlZCkgewotCQlhc3NlcnQocHJvZl9zYW1wbGVfYWxp Z25lZChwdHIpKTsKLQl9Ci0JcmV0dXJuIHNhbXBsZWQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19J TkxJTkUgdm9pZAotcHJvZl9mcmVlKHRzZF90ICp0c2QsIGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IHVzaXplLAotICAgIGVtYXBfYWxsb2NfY3R4X3QgKmFsbG9jX2N0eCkgewotCXByb2ZfaW5mb190 IHByb2ZfaW5mbzsKLQlwcm9mX2luZm9fZ2V0X2FuZF9yZXNldF9yZWNlbnQodHNkLCBwdHIsIGFs bG9jX2N0eCwgJnByb2ZfaW5mbyk7Ci0KLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQo dXNpemUgPT0gaXNhbGxvYyh0c2RfdHNkbih0c2QpLCBwdHIpKTsKLQotCWlmICh1bmxpa2VseSgo dWludHB0cl90KXByb2ZfaW5mby5hbGxvY190Y3R4ID4gKHVpbnRwdHJfdCkxVSkpIHsKLQkJYXNz ZXJ0KHByb2Zfc2FtcGxlX2FsaWduZWQocHRyKSk7Ci0JCXByb2ZfZnJlZV9zYW1wbGVkX29iamVj dCh0c2QsIHVzaXplLCAmcHJvZl9pbmZvKTsKLQl9Ci19Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19J TlRFUk5BTF9QUk9GX0lOTElORVNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9sb2cu aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvcHJvZl9sb2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Ni NTU3ZC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2ZfbG9nLmgKKysrIC9kZXYvbnVsbApAQCAt MSwyMiArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfTE9HX0gKLSNkZWZp bmUgSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9MT0dfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvbXV0ZXguaCIKLQotZXh0ZXJuIG1hbGxvY19tdXRleF90IGxvZ19tdHg7Ci0KLXZvaWQg cHJvZl90cnlfbG9nKHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwgcHJvZl9pbmZvX3QgKnByb2Zf aW5mbyk7Ci1ib29sIHByb2ZfbG9nX2luaXQodHNkX3QgKnRzZG4pOwotCi0vKiBVc2VkIGluIHVu aXQgdGVzdHMuICovCi1zaXplX3QgcHJvZl9sb2dfYnRfY291bnQodm9pZCk7Ci1zaXplX3QgcHJv Zl9sb2dfYWxsb2NfY291bnQodm9pZCk7Ci1zaXplX3QgcHJvZl9sb2dfdGhyX2NvdW50KHZvaWQp OwotYm9vbCBwcm9mX2xvZ19pc19sb2dnaW5nKHZvaWQpOwotYm9vbCBwcm9mX2xvZ19yZXBfY2hl Y2sodm9pZCk7Ci12b2lkIHByb2ZfbG9nX2R1bW15X3NldChib29sIG5ld192YWx1ZSk7Ci0KLWJv b2wgcHJvZl9sb2dfc3RhcnQodHNkbl90ICp0c2RuLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci1i b29sIHByb2ZfbG9nX3N0b3AodHNkbl90ICp0c2RuKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lO VEVSTkFMX1BST0ZfTE9HX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2ZfcmVjZW50Lmgg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL3Byb2ZfcmVjZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRm NDEwMjMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3JlY2VudC5oCisrKyAvZGV2L251bGwK QEAgLTEsMjMgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX1JFQ0VOVF9I Ci0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfUkVDRU5UX0gKLQotZXh0ZXJuIG1hbGxv Y19tdXRleF90IHByb2ZfcmVjZW50X2FsbG9jX210eDsKLWV4dGVybiBtYWxsb2NfbXV0ZXhfdCBw cm9mX3JlY2VudF9kdW1wX210eDsKLQotYm9vbCBwcm9mX3JlY2VudF9hbGxvY19wcmVwYXJlKHRz ZF90ICp0c2QsIHByb2ZfdGN0eF90ICp0Y3R4KTsKLXZvaWQgcHJvZl9yZWNlbnRfYWxsb2ModHNk X3QgKnRzZCwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgdXNpemUpOwotdm9p ZCBwcm9mX3JlY2VudF9hbGxvY19yZXNldCh0c2RfdCAqdHNkLCBlZGF0YV90ICplZGF0YSk7Ci1i b29sIHByb2ZfcmVjZW50X2luaXQoKTsKLXZvaWQgZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2NfaW5p dChlZGF0YV90ICplZGF0YSk7Ci0KLS8qIFVzZWQgaW4gdW5pdCB0ZXN0cy4gKi8KLXR5cGVkZWYg cWxfaGVhZChwcm9mX3JlY2VudF90KSBwcm9mX3JlY2VudF9saXN0X3Q7Ci1leHRlcm4gcHJvZl9y ZWNlbnRfbGlzdF90IHByb2ZfcmVjZW50X2FsbG9jX2xpc3Q7Ci1lZGF0YV90ICpwcm9mX3JlY2Vu dF9hbGxvY19lZGF0YV9nZXRfbm9fbG9ja190ZXN0KGNvbnN0IHByb2ZfcmVjZW50X3QgKm5vZGUp OwotcHJvZl9yZWNlbnRfdCAqZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2NfZ2V0X25vX2xvY2tfdGVz dChjb25zdCBlZGF0YV90ICplZGF0YSk7Ci0KLXNzaXplX3QgcHJvZl9yZWNlbnRfYWxsb2NfbWF4 X2N0bF9yZWFkKCk7Ci1zc2l6ZV90IHByb2ZfcmVjZW50X2FsbG9jX21heF9jdGxfd3JpdGUodHNk X3QgKnRzZCwgc3NpemVfdCBtYXgpOwotdm9pZCBwcm9mX3JlY2VudF9hbGxvY19kdW1wKHRzZF90 ICp0c2QsIHdyaXRlX2NiX3QgKndyaXRlX2NiLCB2b2lkICpjYm9wYXF1ZSk7Ci0KLSNlbmRpZiAv KiBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX1JFQ0VOVF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9wcm9mX3N0YXRzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3RhdHMuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNzk1NGU4Mi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3RhdHMuaAor KysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxf UFJPRl9TVEFUU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfU1RBVFNfSAotCi10 eXBlZGVmIHN0cnVjdCBwcm9mX3N0YXRzX3MgcHJvZl9zdGF0c190Owotc3RydWN0IHByb2Zfc3Rh dHNfcyB7Ci0JdWludDY0X3QgcmVxX3N1bTsKLQl1aW50NjRfdCBjb3VudDsKLX07Ci0KLWV4dGVy biBtYWxsb2NfbXV0ZXhfdCBwcm9mX3N0YXRzX210eDsKLQotdm9pZCBwcm9mX3N0YXRzX2luYyh0 c2RfdCAqdHNkLCBzemluZF90IGluZCwgc2l6ZV90IHNpemUpOwotdm9pZCBwcm9mX3N0YXRzX2Rl Yyh0c2RfdCAqdHNkLCBzemluZF90IGluZCwgc2l6ZV90IHNpemUpOwotdm9pZCBwcm9mX3N0YXRz X2dldF9saXZlKHRzZF90ICp0c2QsIHN6aW5kX3QgaW5kLCBwcm9mX3N0YXRzX3QgKnN0YXRzKTsK LXZvaWQgcHJvZl9zdGF0c19nZXRfYWNjdW0odHNkX3QgKnRzZCwgc3ppbmRfdCBpbmQsIHByb2Zf c3RhdHNfdCAqc3RhdHMpOwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9TVEFU U19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N0cnVjdHMuaCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJv Zl9zdHJ1Y3RzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMjIxMTUuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N0cnVjdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSAr MCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfU1RSVUNUU19ICi0jZGVmaW5l IEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfU1RSVUNUU19ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9ja2guaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lZGF0YS5oIgotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcHJuZy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3JiLmgiCi0KLXN0cnVj dCBwcm9mX2J0X3MgewotCS8qIEJhY2t0cmFjZSwgc3RvcmVkIGFzIGxlbiBwcm9ncmFtIGNvdW50 ZXJzLiAqLwotCXZvaWQJCSoqdmVjOwotCXVuc2lnbmVkCWxlbjsKLX07Ci0KLSNpZmRlZiBKRU1B TExPQ19QUk9GX0xJQkdDQwotLyogRGF0YSBzdHJ1Y3R1cmUgcGFzc2VkIHRvIGxpYmdjYyBfVW53 aW5kX0JhY2t0cmFjZSgpIGNhbGxiYWNrIGZ1bmN0aW9ucy4gKi8KLXR5cGVkZWYgc3RydWN0IHsK LQl2b2lkIAkJKip2ZWM7Ci0JdW5zaWduZWQJKmxlbjsKLQl1bnNpZ25lZAltYXg7Ci19IHByb2Zf dW53aW5kX2RhdGFfdDsKLSNlbmRpZgotCi1zdHJ1Y3QgcHJvZl9jbnRfcyB7Ci0JLyogUHJvZmls aW5nIGNvdW50ZXJzLiAqLwotCXVpbnQ2NF90CWN1cm9ianM7Ci0JdWludDY0X3QJY3Vyb2Jqc19z aGlmdGVkX3VuYmlhc2VkOwotCXVpbnQ2NF90CWN1cmJ5dGVzOwotCXVpbnQ2NF90CWN1cmJ5dGVz X3VuYmlhc2VkOwotCXVpbnQ2NF90CWFjY3Vtb2JqczsKLQl1aW50NjRfdAlhY2N1bW9ianNfc2hp ZnRlZF91bmJpYXNlZDsKLQl1aW50NjRfdAlhY2N1bWJ5dGVzOwotCXVpbnQ2NF90CWFjY3VtYnl0 ZXNfdW5iaWFzZWQ7Ci19OwotCi10eXBlZGVmIGVudW0gewotCXByb2ZfdGN0eF9zdGF0ZV9pbml0 aWFsaXppbmcsCi0JcHJvZl90Y3R4X3N0YXRlX25vbWluYWwsCi0JcHJvZl90Y3R4X3N0YXRlX2R1 bXBpbmcsCi0JcHJvZl90Y3R4X3N0YXRlX3B1cmdhdG9yeSAvKiBEdW1wZXIgbXVzdCBmaW5pc2gg ZGVzdHJveWluZy4gKi8KLX0gcHJvZl90Y3R4X3N0YXRlX3Q7Ci0KLXN0cnVjdCBwcm9mX3RjdHhf cyB7Ci0JLyogVGhyZWFkIGRhdGEgZm9yIHRocmVhZCB0aGF0IHBlcmZvcm1lZCB0aGUgYWxsb2Nh dGlvbi4gKi8KLQlwcm9mX3RkYXRhX3QJCSp0ZGF0YTsKLQotCS8qCi0JICogQ29weSBvZiB0ZGF0 YS0+dGhyX3t1aWQsZGlzY3JpbX0sIG5lY2Vzc2FyeSBiZWNhdXNlIHRkYXRhIG1heSBiZQotCSAq IGRlZnVuY3QgZHVyaW5nIHRlYXJkb3duLgotCSAqLwotCXVpbnQ2NF90CQl0aHJfdWlkOwotCXVp bnQ2NF90CQl0aHJfZGlzY3JpbTsKLQotCS8qCi0JICogUmVmZXJlbmNlIGNvdW50IG9mIGhvdyBt YW55IHRpbWVzIHRoaXMgdGN0eCBvYmplY3QgaXMgcmVmZXJlbmNlZCBpbgotCSAqIHJlY2VudCBh bGxvY2F0aW9uIC8gZGVhbGxvY2F0aW9uIHJlY29yZHMsIHByb3RlY3RlZCBieSB0ZGF0YS0+bG9j ay4KLQkgKi8KLQl1aW50NjRfdAkJcmVjZW50X2NvdW50OwotCi0JLyogUHJvZmlsaW5nIGNvdW50 ZXJzLCBwcm90ZWN0ZWQgYnkgdGRhdGEtPmxvY2suICovCi0JcHJvZl9jbnRfdAkJY250czsKLQot CS8qIEFzc29jaWF0ZWQgZ2xvYmFsIGNvbnRleHQuICovCi0JcHJvZl9nY3R4X3QJCSpnY3R4Owot Ci0JLyoKLQkgKiBVSUQgdGhhdCBkaXN0aW5ndWlzaGVzIG11bHRpcGxlIHRjdHgncyBjcmVhdGVk IGJ5IHRoZSBzYW1lIHRocmVhZCwKLQkgKiBidXQgY29leGlzdGluZyBpbiBnY3R4LT50Y3R4cy4g IFRoZXJlIGFyZSB0d28gd2F5cyB0aGF0IHN1Y2gKLQkgKiBjb2V4aXN0ZW5jZSBjYW4gb2NjdXI6 Ci0JICogLSBBIGR1bXBlciB0aHJlYWQgY2FuIGNhdXNlIGEgdGN0eCB0byBiZSByZXRhaW5lZCBp biB0aGUgcHVyZ2F0b3J5Ci0JICogICBzdGF0ZS4KLQkgKiAtIEFsdGhvdWdoIGEgc2luZ2xlICJw cm9kdWNlciIgdGhyZWFkIG11c3QgY3JlYXRlIGFsbCB0Y3R4J3Mgd2hpY2gKLQkgKiAgIHNoYXJl IHRoZSBzYW1lIHRocl91aWQsIG11bHRpcGxlICJjb25zdW1lcnMiIGNhbiBlYWNoIGNvbmN1cnJl bnRseQotCSAqICAgZXhlY3V0ZSBwb3J0aW9ucyBvZiBwcm9mX3RjdHhfZGVzdHJveSgpLiAgcHJv Zl90Y3R4X2Rlc3Ryb3koKSBvbmx5Ci0JICogICBnZXRzIGNhbGxlZCBvbmNlIGVhY2ggdGltZSBj bnRzLmN1cntvYmpzLGJ5dGVzfSBkcm9wIHRvIDAsIGJ1dCB0aGlzCi0JICogICB0aHJlc2hvbGQg Y2FuIGJlIGhpdCBhZ2FpbiBiZWZvcmUgdGhlIGZpcnN0IGNvbnN1bWVyIGZpbmlzaGVzCi0JICog ICBleGVjdXRpbmcgcHJvZl90Y3R4X2Rlc3Ryb3koKS4KLQkgKi8KLQl1aW50NjRfdAkJdGN0eF91 aWQ7Ci0KLQkvKiBMaW5rYWdlIGludG8gZ2N0eCdzIHRjdHhzLiAqLwotCXJiX25vZGUocHJvZl90 Y3R4X3QpCXRjdHhfbGluazsKLQotCS8qCi0JICogVHJ1ZSBkdXJpbmcgcHJvZl9hbGxvY19wcmVw KCkuLnByb2ZfbWFsbG9jX3NhbXBsZV9vYmplY3QoKSwgcHJldmVudHMKLQkgKiBzYW1wbGUgdnMg ZGVzdHJveSByYWNlLgotCSAqLwotCWJvb2wJCQlwcmVwYXJlZDsKLQotCS8qIEN1cnJlbnQgZHVt cC1yZWxhdGVkIHN0YXRlLCBwcm90ZWN0ZWQgYnkgZ2N0eC0+bG9jay4gKi8KLQlwcm9mX3RjdHhf c3RhdGVfdAlzdGF0ZTsKLQotCS8qCi0JICogQ29weSBvZiBjbnRzIHNuYXBzaG90dGVkIGR1cmlu ZyBlYXJseSBkdW1wIHBoYXNlLCBwcm90ZWN0ZWQgYnkKLQkgKiBkdW1wX210eC4KLQkgKi8KLQlw cm9mX2NudF90CQlkdW1wX2NudHM7Ci19OwotdHlwZWRlZiByYl90cmVlKHByb2ZfdGN0eF90KSBw cm9mX3RjdHhfdHJlZV90OwotCi1zdHJ1Y3QgcHJvZl9pbmZvX3MgewotCS8qIFRpbWUgd2hlbiB0 aGUgYWxsb2NhdGlvbiB3YXMgbWFkZS4gKi8KLQluc3RpbWVfdAkJYWxsb2NfdGltZTsKLQkvKiBQ b2ludHMgdG8gdGhlIHByb2ZfdGN0eF90IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsbG9jYXRpb24u ICovCi0JcHJvZl90Y3R4X3QJCSphbGxvY190Y3R4OwotCS8qIEFsbG9jYXRpb24gcmVxdWVzdCBz aXplLiAqLwotCXNpemVfdAkJCWFsbG9jX3NpemU7Ci19OwotCi1zdHJ1Y3QgcHJvZl9nY3R4X3Mg ewotCS8qIFByb3RlY3RzIG5saW1ibywgY250X3N1bW1lZCwgYW5kIHRjdHhzLiAqLwotCW1hbGxv Y19tdXRleF90CQkqbG9jazsKLQotCS8qCi0JICogTnVtYmVyIG9mIHRocmVhZHMgdGhhdCBjdXJy ZW50bHkgY2F1c2UgdGhpcyBnY3R4IHRvIGJlIGluIGEgc3RhdGUgb2YKLQkgKiBsaW1ibyBkdWUg dG8gb25lIG9mOgotCSAqICAgLSBJbml0aWFsaXppbmcgdGhpcyBnY3R4LgotCSAqICAgLSBJbml0 aWFsaXppbmcgcGVyIHRocmVhZCBjb3VudGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBnY3R4Lgot CSAqICAgLSBQcmVwYXJpbmcgdG8gZGVzdHJveSB0aGlzIGdjdHguCi0JICogICAtIER1bXBpbmcg YSBoZWFwIHByb2ZpbGUgdGhhdCBpbmNsdWRlcyB0aGlzIGdjdHguCi0JICogbmxpbWJvIG11c3Qg YmUgMSAoc2luZ2xlIGRlc3Ryb3llcikgaW4gb3JkZXIgdG8gc2FmZWx5IGRlc3Ryb3kgdGhlCi0J ICogZ2N0eC4KLQkgKi8KLQl1bnNpZ25lZAkJbmxpbWJvOwotCi0JLyoKLQkgKiBUcmVlIG9mIHBy b2ZpbGUgY291bnRlcnMsIG9uZSBmb3IgZWFjaCB0aHJlYWQgdGhhdCBoYXMgYWxsb2NhdGVkIGlu Ci0JICogdGhpcyBjb250ZXh0LgotCSAqLwotCXByb2ZfdGN0eF90cmVlX3QJdGN0eHM7Ci0KLQkv KiBMaW5rYWdlIGZvciB0cmVlIG9mIGNvbnRleHRzIHRvIGJlIGR1bXBlZC4gKi8KLQlyYl9ub2Rl KHByb2ZfZ2N0eF90KQlkdW1wX2xpbms7Ci0KLQkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Igc3Vt bWF0aW9uIGR1cmluZyBkdW1wLiAqLwotCXByb2ZfY250X3QJCWNudF9zdW1tZWQ7Ci0KLQkvKiBB c3NvY2lhdGVkIGJhY2t0cmFjZS4gKi8KLQlwcm9mX2J0X3QJCWJ0OwotCi0JLyogQmFja3RyYWNl IHZlY3RvciwgdmFyaWFibGUgc2l6ZSwgcmVmZXJyZWQgdG8gYnkgYnQuICovCi0Jdm9pZAkJCSp2 ZWNbMV07Ci19OwotdHlwZWRlZiByYl90cmVlKHByb2ZfZ2N0eF90KSBwcm9mX2djdHhfdHJlZV90 OwotCi1zdHJ1Y3QgcHJvZl90ZGF0YV9zIHsKLQltYWxsb2NfbXV0ZXhfdAkJKmxvY2s7Ci0KLQkv KiBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgdW5pcXVlIHRocmVhZCBpZGVudGlmaWVyLiAqLwot CXVpbnQ2NF90CQl0aHJfdWlkOwotCi0JLyoKLQkgKiBNb25vdG9uaWNhbGx5IGluY3JlYXNpbmcg ZGlzY3JpbWluYXRvciBhbW9uZyB0ZGF0YSBzdHJ1Y3R1cmVzCi0JICogYXNzb2NpYXRlZCB3aXRo IHRoZSBzYW1lIHRocl91aWQuCi0JICovCi0JdWludDY0X3QJCXRocl9kaXNjcmltOwotCi0JLyog SW5jbHVkZWQgaW4gaGVhcCBwcm9maWxlIGR1bXBzIGlmIG5vbi1OVUxMLiAqLwotCWNoYXIJCQkq dGhyZWFkX25hbWU7Ci0KLQlib29sCQkJYXR0YWNoZWQ7Ci0JYm9vbAkJCWV4cGlyZWQ7Ci0KLQly Yl9ub2RlKHByb2ZfdGRhdGFfdCkJdGRhdGFfbGluazsKLQotCS8qCi0JICogQ291bnRlciB1c2Vk IHRvIGluaXRpYWxpemUgcHJvZl90Y3R4X3QncyB0Y3R4X3VpZC4gIE5vIGxvY2tpbmcgaXMKLQkg KiBuZWNlc3Nhcnkgd2hlbiBpbmNyZW1lbnRpbmcgdGhpcyBmaWVsZCwgYmVjYXVzZSBvbmx5IG9u ZSB0aHJlYWQgZXZlcgotCSAqIGRvZXMgc28uCi0JICovCi0JdWludDY0X3QJCXRjdHhfdWlkX25l eHQ7Ci0KLQkvKgotCSAqIEhhc2ggb2YgKHByb2ZfYnRfdCAqKS0tPihwcm9mX3RjdHhfdCAqKS4g IEVhY2ggdGhyZWFkIHRyYWNrcwotCSAqIGJhY2t0cmFjZXMgZm9yIHdoaWNoIGl0IGhhcyBub24t emVybyBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBjb3VudGVycwotCSAqIGFzc29jaWF0ZWQgd2l0 aCB0aHJlYWQtc3BlY2lmaWMgcHJvZl90Y3R4X3Qgb2JqZWN0cy4gIE90aGVyIHRocmVhZHMKLQkg KiBtYXkgd3JpdGUgdG8gcHJvZl90Y3R4X3QgY29udGVudHMgd2hlbiBmcmVlaW5nIGFzc29jaWF0 ZWQgb2JqZWN0cy4KLQkgKi8KLQlja2hfdAkJCWJ0MnRjdHg7Ci0KLQkvKiBTdGF0ZSB1c2VkIHRv IGF2b2lkIGR1bXBpbmcgd2hpbGUgb3BlcmF0aW5nIG9uIHByb2YgaW50ZXJuYWxzLiAqLwotCWJv b2wJCQllbnE7Ci0JYm9vbAkJCWVucV9pZHVtcDsKLQlib29sCQkJZW5xX2dkdW1wOwotCi0JLyoK LQkgKiBTZXQgdG8gdHJ1ZSBkdXJpbmcgYW4gZWFybHkgZHVtcCBwaGFzZSBmb3IgdGRhdGEncyB3 aGljaCBhcmUKLQkgKiBjdXJyZW50bHkgYmVpbmcgZHVtcGVkLiAgTmV3IHRocmVhZHMnIHRkYXRh J3MgaGF2ZSB0aGlzIGluaXRpYWxpemVkCi0JICogdG8gZmFsc2Ugc28gdGhhdCB0aGV5IGFyZW4n dCBhY2NpZGVudGFsbHkgaW5jbHVkZWQgaW4gbGF0ZXIgZHVtcAotCSAqIHBoYXNlcy4KLQkgKi8K LQlib29sCQkJZHVtcGluZzsKLQotCS8qCi0JICogVHJ1ZSBpZiBwcm9maWxpbmcgaXMgYWN0aXZl IGZvciB0aGlzIHRkYXRhJ3MgdGhyZWFkCi0JICogKHRocmVhZC5wcm9mLmFjdGl2ZSBtYWxsY3Rs KS4KLQkgKi8KLQlib29sCQkJYWN0aXZlOwotCi0JLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIHN1 bW1hdGlvbiBkdXJpbmcgZHVtcC4gKi8KLQlwcm9mX2NudF90CQljbnRfc3VtbWVkOwotCi0JLyog QmFja3RyYWNlIHZlY3RvciwgdXNlZCBmb3IgY2FsbHMgdG8gcHJvZl9iYWNrdHJhY2UoKS4gKi8K LQl2b2lkCQkJKnZlY1tQUk9GX0JUX01BWF07Ci19OwotdHlwZWRlZiByYl90cmVlKHByb2ZfdGRh dGFfdCkgcHJvZl90ZGF0YV90cmVlX3Q7Ci0KLXN0cnVjdCBwcm9mX3JlY2VudF9zIHsKLQluc3Rp bWVfdCBhbGxvY190aW1lOwotCW5zdGltZV90IGRhbGxvY190aW1lOwotCi0JcWxfZWxtKHByb2Zf cmVjZW50X3QpIGxpbms7Ci0Jc2l6ZV90IHNpemU7Ci0Jc2l6ZV90IHVzaXplOwotCWF0b21pY19w X3QgYWxsb2NfZWRhdGE7IC8qIE5VTEwgbWVhbnMgYWxsb2NhdGlvbiBoYXMgYmVlbiBmcmVlZC4g Ki8KLQlwcm9mX3RjdHhfdCAqYWxsb2NfdGN0eDsKLQlwcm9mX3RjdHhfdCAqZGFsbG9jX3RjdHg7 Ci19OwotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUFJPRl9TVFJVQ1RTX0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3lzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Byb2Zfc3lzLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMjVhNDIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9w cm9mX3N5cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExP Q19JTlRFUk5BTF9QUk9GX1NZU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfU1lT X0gKLQotZXh0ZXJuIG1hbGxvY19tdXRleF90IHByb2ZfZHVtcF9maWxlbmFtZV9tdHg7Ci1leHRl cm4gYmFzZV90ICpwcm9mX2Jhc2U7Ci0KLXZvaWQgYnRfaW5pdChwcm9mX2J0X3QgKmJ0LCB2b2lk ICoqdmVjKTsKLXZvaWQgcHJvZl9iYWNrdHJhY2UodHNkX3QgKnRzZCwgcHJvZl9idF90ICpidCk7 Ci12b2lkIHByb2ZfaG9va3NfaW5pdCgpOwotdm9pZCBwcm9mX3Vud2luZF9pbml0KCk7Ci12b2lk IHByb2Zfc3lzX3RocmVhZF9uYW1lX2ZldGNoKHRzZF90ICp0c2QpOwotaW50IHByb2ZfZ2V0cGlk KHZvaWQpOwotdm9pZCBwcm9mX2dldF9kZWZhdWx0X2ZpbGVuYW1lKHRzZG5fdCAqdHNkbiwgY2hh ciAqZmlsZW5hbWUsIHVpbnQ2NF90IGluZCk7Ci1ib29sIHByb2ZfcHJlZml4X3NldCh0c2RuX3Qg KnRzZG4sIGNvbnN0IGNoYXIgKnByZWZpeCk7Ci12b2lkIHByb2ZfZmR1bXBfaW1wbCh0c2RfdCAq dHNkKTsKLXZvaWQgcHJvZl9pZHVtcF9pbXBsKHRzZF90ICp0c2QpOwotYm9vbCBwcm9mX21kdW1w X2ltcGwodHNkX3QgKnRzZCwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwotdm9pZCBwcm9mX2dkdW1w X2ltcGwodHNkX3QgKnRzZCk7Ci0KLS8qIFVzZWQgaW4gdW5pdCB0ZXN0cy4gKi8KLXR5cGVkZWYg aW50IChwcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkX3QpKGNoYXIgKmJ1Ziwgc2l6ZV90IGxpbWl0 KTsKLWV4dGVybiBwcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkX3QgKkpFVF9NVVRBQkxFIHByb2Zf c3lzX3RocmVhZF9uYW1lX3JlYWQ7Ci10eXBlZGVmIGludCAocHJvZl9kdW1wX29wZW5fZmlsZV90 KShjb25zdCBjaGFyICosIGludCk7Ci1leHRlcm4gcHJvZl9kdW1wX29wZW5fZmlsZV90ICpKRVRf TVVUQUJMRSBwcm9mX2R1bXBfb3Blbl9maWxlOwotdHlwZWRlZiBzc2l6ZV90IChwcm9mX2R1bXBf d3JpdGVfZmlsZV90KShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKLWV4dGVybiBwcm9mX2R1 bXBfd3JpdGVfZmlsZV90ICpKRVRfTVVUQUJMRSBwcm9mX2R1bXBfd3JpdGVfZmlsZTsKLXR5cGVk ZWYgaW50IChwcm9mX2R1bXBfb3Blbl9tYXBzX3QpKCk7Ci1leHRlcm4gcHJvZl9kdW1wX29wZW5f bWFwc190ICpKRVRfTVVUQUJMRSBwcm9mX2R1bXBfb3Blbl9tYXBzOwotCi0jZW5kaWYgLyogSkVN QUxMT0NfSU5URVJOQUxfUFJPRl9TWVNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHJvZl90 eXBlcy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGJhNjI4NjUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3R5cGVzLmgKKysrIC9kZXYv bnVsbApAQCAtMSw3NSArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfVFlQ RVNfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9QUk9GX1RZUEVTX0gKLQotdHlwZWRlZiBz dHJ1Y3QgcHJvZl9idF9zIHByb2ZfYnRfdDsKLXR5cGVkZWYgc3RydWN0IHByb2ZfY250X3MgcHJv Zl9jbnRfdDsKLXR5cGVkZWYgc3RydWN0IHByb2ZfdGN0eF9zIHByb2ZfdGN0eF90OwotdHlwZWRl ZiBzdHJ1Y3QgcHJvZl9pbmZvX3MgcHJvZl9pbmZvX3Q7Ci10eXBlZGVmIHN0cnVjdCBwcm9mX2dj dHhfcyBwcm9mX2djdHhfdDsKLXR5cGVkZWYgc3RydWN0IHByb2ZfdGRhdGFfcyBwcm9mX3RkYXRh X3Q7Ci10eXBlZGVmIHN0cnVjdCBwcm9mX3JlY2VudF9zIHByb2ZfcmVjZW50X3Q7Ci0KLS8qIE9w dGlvbiBkZWZhdWx0cy4gKi8KLSNpZmRlZiBKRU1BTExPQ19QUk9GCi0jICBkZWZpbmUgUFJPRl9Q UkVGSVhfREVGQVVMVAkJImplcHJvZiIKLSNlbHNlCi0jICBkZWZpbmUgUFJPRl9QUkVGSVhfREVG QVVMVAkJIiIKLSNlbmRpZgotI2RlZmluZSBMR19QUk9GX1NBTVBMRV9ERUZBVUxUCQkxOQotI2Rl ZmluZSBMR19QUk9GX0lOVEVSVkFMX0RFRkFVTFQJLTEKLQotLyoKLSAqIEhhcmQgbGltaXQgb24g c3RhY2sgYmFja3RyYWNlIGRlcHRoLiAgVGhlIHZlcnNpb24gb2YgcHJvZl9iYWNrdHJhY2UoKSB0 aGF0Ci0gKiBpcyBiYXNlZCBvbiBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoKSBuZWNlc3Nhcmls eSBoYXMgYSBoYXJkLWNvZGVkIG51bWJlcgotICogb2YgYmFja3RyYWNlIGZyYW1lIGhhbmRsZXJz LCBhbmQgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoaXMgc2V0dGluZy4KLSAqLwotI2Rl ZmluZSBQUk9GX0JUX01BWAkJCTEyOAotCi0vKiBJbml0aWFsIGhhc2ggdGFibGUgc2l6ZS4gKi8K LSNkZWZpbmUgUFJPRl9DS0hfTUlOSVRFTVMJCTY0Ci0KLS8qIFNpemUgb2YgbWVtb3J5IGJ1ZmZl ciB0byB1c2Ugd2hlbiB3cml0aW5nIGR1bXAgZmlsZXMuICovCi0jaWZuZGVmIEpFTUFMTE9DX1BS T0YKLS8qIE1pbmltaXplIG1lbW9yeSBibG9hdCBmb3Igbm9uLXByb2YgYnVpbGRzLiAqLwotIyAg ZGVmaW5lIFBST0ZfRFVNUF9CVUZTSVpFCQkxCi0jZWxpZiBkZWZpbmVkKEpFTUFMTE9DX0RFQlVH KQotLyogVXNlIGEgc21hbGwgYnVmZmVyIHNpemUgaW4gZGVidWcgYnVpbGQsIG1haW5seSB0byBm YWNpbGl0YXRlIHRlc3RpbmcuICovCi0jICBkZWZpbmUgUFJPRl9EVU1QX0JVRlNJWkUJCTE2Ci0j ZWxzZQotIyAgZGVmaW5lIFBST0ZfRFVNUF9CVUZTSVpFCQk2NTUzNgotI2VuZGlmCi0KLS8qIFNp emUgb2Ygc2l6ZSBjbGFzcyByZWxhdGVkIHRhYmxlcyAqLwotI2lmZGVmIEpFTUFMTE9DX1BST0YK LSMgIGRlZmluZSBQUk9GX1NDX05TSVpFUwkJU0NfTlNJWkVTCi0jZWxzZQotLyogTWluaW1pemUg bWVtb3J5IGJsb2F0IGZvciBub24tcHJvZiBidWlsZHMuICovCi0jICBkZWZpbmUgUFJPRl9TQ19O U0laRVMJCTEKLSNlbmRpZgotCi0vKiBTaXplIG9mIHN0YWNrLWFsbG9jYXRlZCBidWZmZXIgdXNl ZCBieSBwcm9mX3ByaW50ZigpLiAqLwotI2RlZmluZSBQUk9GX1BSSU5URl9CVUZTSVpFCQkxMjgK LQotLyoKLSAqIE51bWJlciBvZiBtdXRleGVzIHNoYXJlZCBhbW9uZyBhbGwgZ2N0eCdzLiAgTm8g c3BhY2UgaXMgYWxsb2NhdGVkIGZvciB0aGVzZQotICogdW5sZXNzIHByb2ZpbGluZyBpcyBlbmFi bGVkLCBzbyBpdCdzIG9rYXkgdG8gb3Zlci1wcm92aXNpb24uCi0gKi8KLSNkZWZpbmUgUFJPRl9O Q1RYX0xPQ0tTCQkJMTAyNAotCi0vKgotICogTnVtYmVyIG9mIG11dGV4ZXMgc2hhcmVkIGFtb25n IGFsbCB0ZGF0YSdzLiAgTm8gc3BhY2UgaXMgYWxsb2NhdGVkIGZvciB0aGVzZQotICogdW5sZXNz IHByb2ZpbGluZyBpcyBlbmFibGVkLCBzbyBpdCdzIG9rYXkgdG8gb3Zlci1wcm92aXNpb24uCi0g Ki8KLSNkZWZpbmUgUFJPRl9OVERBVEFfTE9DS1MJCTI1NgotCi0vKiBNaW5pbWl6ZSBtZW1vcnkg YmxvYXQgZm9yIG5vbi1wcm9mIGJ1aWxkcy4gKi8KLSNpZmRlZiBKRU1BTExPQ19QUk9GCi0jZGVm aW5lIFBST0ZfRFVNUF9GSUxFTkFNRV9MRU4gKFBBVEhfTUFYICsgMSkKLSNlbHNlCi0jZGVmaW5l IFBST0ZfRFVNUF9GSUxFTkFNRV9MRU4gMQotI2VuZGlmCi0KLS8qIERlZmF1bHQgbnVtYmVyIG9m IHJlY2VudCBhbGxvY2F0aW9ucyB0byByZWNvcmQuICovCi0jZGVmaW5lIFBST0ZfUkVDRU5UX0FM TE9DX01BWF9ERUZBVUxUIDAKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1BST0ZfVFlQ RVNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHNzZXQuaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHNzZXQuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkNjQ5Ny4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3Bzc2V0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotI2lmbmRlZiBKRU1B TExPQ19JTlRFUk5BTF9QU1NFVF9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1BTU0VUX0gK LQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hwZGF0YS5oIgotCi0vKgotICogQSBwYWdl LXNsYWIgc2V0LiAgV2hhdCB0aGUgZXNldCBpcyB0byBQQUMsIHRoZSBwc3NldCBpcyB0byBIUEEu ICBJdCBtYWludGFpbnMKLSAqIGEgY29sbGVjdGlvbiBvZiBwYWdlLXNsYWJzICh0aGUgaW50ZW50 IGJlaW5nIHRoYXQgdGhleSBhcmUgYmFja2VkIGJ5Ci0gKiBodWdlcGFnZXMsIG9yIGF0IGxlYXN0 IGNvdWxkIGJlKSwgYW5kIGhhbmRsZXMgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uCi0gKiBy ZXF1ZXN0cy4KLSAqLwotCi0vKgotICogT25lIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBwc3ppbmRf dCB3ZSB3aWxsIHNlcnZlIG91dCBvZiB0aGUgSFBBLgotICogUHJhY3RpY2FsbHksIHdlIGV4cGVj dCBvbmx5IHRoZSBmaXJzdCBmZXcgdG8gYmUgYWN0dWFsbHkgdXNlZC4gIFRoaXMKLSAqIGNvcnJl c3BvbmRzIHRvIGEgbWF4aW11bSBzaXplIG9mIG9mIDUxMk1CIG9uIHN5c3RlbXMgd2l0aCA0ayBw YWdlcyBhbmQKLSAqIFNDX05HUk9VUCA9PSA0LCB3aGljaCBpcyBhbHJlYWR5IGFuIHVucmVhc29u YWJseSBsYXJnZSBtYXhpbXVtLiAgTW9yYWxseSwgeW91Ci0gKiBjYW4gdGhpbmsgb2YgdGhpcyBh cyBiZWluZyBTQ19OUFNJWkVTLCBidXQgdGhlcmUncyBubyBzZW5zZSBpbiB3YXN0aW5nIHRoYXQK LSAqIG11Y2ggc3BhY2UgaW4gdGhlIGFyZW5hLCBtYWtpbmcgYml0bWFwcyB0aGF0IG11Y2ggbGFy Z2VyLCBldGMuCi0gKi8KLSNkZWZpbmUgUFNTRVRfTlBTSVpFUyA2NAotCi0vKgotICogV2Uga2Vl cCB0d28gcHVyZ2UgbGlzdHMgcGVyIHBhZ2Ugc2l6ZSBjbGFzczsgb25lIGZvciBodWdpZmllZCBo cGRhdGFzIChhdAotICogaW5kZXggMipwc3ppbmQpLCBhbmQgb25lIGZvciB0aGUgbm9uLWh1Z2lm aWVkIGhwZGF0YXMgKGF0IGluZGV4IDIqcHN6aW5kICsKLSAqIDEpLiAgVGhpcyBsZXRzIHVzIGlt cGxlbWVudCBhIHByZWZlcmVuY2UgZm9yIHB1cmdpbmcgbm9uLWh1Z2lmaWVkIGhwZGF0YXMKLSAq IGFtb25nIHNpbWlsYXJseS1kaXJ0eSBvbmVzLgotICogV2UgcmVzZXJ2ZSB0aGUgbGFzdCB0d28g aW5kaWNlcyBmb3IgZW1wdHkgc2xhYnMsIGluIHRoYXQgY2FzZSBwdXJnaW5nCi0gKiBodWdpZmll ZCBvbmVzICh3aGljaCBhcmUgZGVmaW5pdGlvbmFsbHkgYWxsIHdhc3RlKSBiZWZvcmUgbm9uLWh1 Z2lmaWVkIG9uZXMKLSAqIChpLmUuIHJldmVyc2luZyB0aGUgb3JkZXIpLgotICovCi0jZGVmaW5l IFBTU0VUX05QVVJHRV9MSVNUUyAoMiAqIFBTU0VUX05QU0laRVMpCi0KLXR5cGVkZWYgc3RydWN0 IHBzc2V0X2Jpbl9zdGF0c19zIHBzc2V0X2Jpbl9zdGF0c190Owotc3RydWN0IHBzc2V0X2Jpbl9z dGF0c19zIHsKLQkvKiBIb3cgbWFueSBwYWdlc2xhYnMgYXJlIGluIHRoaXMgYmluPyAqLwotCXNp emVfdCBucGFnZXNsYWJzOwotCS8qIE9mIHRoZW0sIGhvdyBtYW55IHBhZ2VzIGFyZSBhY3RpdmU/ ICovCi0Jc2l6ZV90IG5hY3RpdmU7Ci0JLyogQW5kIGhvdyBtYW55IGFyZSBkaXJ0eT8gKi8KLQlz aXplX3QgbmRpcnR5OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcHNzZXRfc3RhdHNfcyBwc3NldF9z dGF0c190Owotc3RydWN0IHBzc2V0X3N0YXRzX3MgewotCS8qCi0JICogVGhlIHNlY29uZCBpbmRl eCBpcyBodWdlIHN0YXRzOyBub25mdWxsX3NsYWJzW3BzemluZF1bMF0gY29udGFpbnMKLQkgKiBz dGF0cyBmb3IgdGhlIG5vbi1odWdlIHNsYWJzIGluIGJ1Y2tldCBwc3ppbmQsIHdoaWxlCi0JICog bm9uZnVsbF9zbGFic1twc3ppbmRdWzFdIGNvbnRhaW5zIHN0YXRzIGZvciB0aGUgaHVnZSBzbGFi cy4KLQkgKi8KLQlwc3NldF9iaW5fc3RhdHNfdCBub25mdWxsX3NsYWJzW1BTU0VUX05QU0laRVNd WzJdOwotCi0JLyoKLQkgKiBGdWxsIHNsYWJzIGRvbid0IGxpdmUgaW4gYW55IGVkYXRhIGhlYXAs IGJ1dCB3ZSBzdGlsbCB0cmFjayB0aGVpcgotCSAqIHN0YXRzLgotCSAqLwotCXBzc2V0X2Jpbl9z dGF0c190IGZ1bGxfc2xhYnNbMl07Ci0KLQkvKiBFbXB0eSBzbGFicyBhcmUgc2ltaWxhci4gKi8K LQlwc3NldF9iaW5fc3RhdHNfdCBlbXB0eV9zbGFic1syXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0 IHBzc2V0X3MgcHNzZXRfdDsKLXN0cnVjdCBwc3NldF9zIHsKLQkvKgotCSAqIFRoZSBwYWdlc2xh YnMsIHF1YW50aXplZCBieSB0aGUgc2l6ZSBjbGFzcyBvZiB0aGUgbGFyZ2VzdCBjb250aWd1b3Vz Ci0JICogZnJlZSBydW4gb2YgcGFnZXMgaW4gYSBwYWdlc2xhYi4KLQkgKi8KLQlocGRhdGFfYWdl X2hlYXBfdCBwYWdlc2xhYnNbUFNTRVRfTlBTSVpFU107Ci0JLyogQml0bWFwIGZvciB3aGljaCBz ZXQgYml0cyBjb3JyZXNwb25kIHRvIG5vbi1lbXB0eSBoZWFwcy4gKi8KLQlmYl9ncm91cF90IHBh Z2VzbGFiX2JpdG1hcFtGQl9OR1JPVVBTKFBTU0VUX05QU0laRVMpXTsKLQkvKgotCSAqIFRoZSBz dW0gb2YgYWxsIGJpbiBzdGF0cyBpbiBzdGF0cy4gIFRoaXMgbGV0cyB1cyBxdWlja2x5IGFuc3dl cgotCSAqIHF1ZXJpZXMgZm9yIHRoZSBudW1iZXIgb2YgZGlydHksIGFjdGl2ZSwgYW5kIHJldGFp bmVkIHBhZ2VzIGluIHRoZQotCSAqIGVudGlyZSBzZXQuCi0JICovCi0JcHNzZXRfYmluX3N0YXRz X3QgbWVyZ2VkX3N0YXRzOwotCXBzc2V0X3N0YXRzX3Qgc3RhdHM7Ci0JLyoKLQkgKiBTbGFicyB3 aXRoIG5vIGFjdGl2ZSBhbGxvY2F0aW9ucywgYnV0IHdoaWNoIGFyZSBhbGxvd2VkIHRvIHNlcnZl IG5ldwotCSAqIGFsbG9jYXRpb25zLgotCSAqLwotCWhwZGF0YV9lbXB0eV9saXN0X3QgZW1wdHk7 Ci0JLyoKLQkgKiBTbGFicyB3aGljaCBhcmUgYXZhaWxhYmxlIHRvIGJlIHB1cmdlZCwgb3JkZXJl ZCBieSBob3cgbXVjaCB3ZSB3YW50Ci0JICogdG8gcHVyZ2UgdGhlbSAod2l0aCBsYXRlciBpbmRp Y2VzIGluZGljYXRpbmcgc2xhYnMgd2Ugd2FudCB0byBwdXJnZQotCSAqIG1vcmUpLgotCSAqLwot CWhwZGF0YV9wdXJnZV9saXN0X3QgdG9fcHVyZ2VbUFNTRVRfTlBVUkdFX0xJU1RTXTsKLQkvKiBC aXRtYXAgZm9yIHdoaWNoIHNldCBiaXRzIGNvcnJlc3BvbmQgdG8gbm9uLWVtcHR5IHB1cmdlIGxp c3RzLiAqLwotCWZiX2dyb3VwX3QgcHVyZ2VfYml0bWFwW0ZCX05HUk9VUFMoUFNTRVRfTlBVUkdF X0xJU1RTKV07Ci0JLyogU2xhYnMgd2hpY2ggYXJlIGF2YWlsYWJsZSB0byBiZSBodWdpZmllZC4g Ki8KLQlocGRhdGFfaHVnaWZ5X2xpc3RfdCB0b19odWdpZnk7Ci19OwotCi12b2lkIHBzc2V0X2lu aXQocHNzZXRfdCAqcHNzZXQpOwotdm9pZCBwc3NldF9zdGF0c19hY2N1bShwc3NldF9zdGF0c190 ICpkc3QsIHBzc2V0X3N0YXRzX3QgKnNyYyk7Ci0KLS8qCi0gKiBCZWdpbiBvciBlbmQgdXBkYXRp bmcgdGhlIGdpdmVuIHBhZ2VzbGFiJ3MgbWV0YWRhdGEuICBXaGlsZSB0aGUgcGFnZXNsYWIgaXMK LSAqIGJlaW5nIHVwZGF0ZWQsIGl0IHdvbid0IGJlIHJldHVybmVkIGZyb20gcHNzZXRfZml0IGNh bGxzLgotICovCi12b2lkIHBzc2V0X3VwZGF0ZV9iZWdpbihwc3NldF90ICpwc3NldCwgaHBkYXRh X3QgKnBzKTsKLXZvaWQgcHNzZXRfdXBkYXRlX2VuZChwc3NldF90ICpwc3NldCwgaHBkYXRhX3Qg KnBzKTsKLQotLyogQW5hbG9nb3VzIHRvIHRoZSBlc2V0X2ZpdDsgcGljayBhIGhwZGF0YSB0byBz ZXJ2ZSB0aGUgcmVxdWVzdC4gKi8KLWhwZGF0YV90ICpwc3NldF9waWNrX2FsbG9jKHBzc2V0X3Qg KnBzc2V0LCBzaXplX3Qgc2l6ZSk7Ci0vKiBQaWNrIG9uZSB0byBwdXJnZS4gKi8KLWhwZGF0YV90 ICpwc3NldF9waWNrX3B1cmdlKHBzc2V0X3QgKnBzc2V0KTsKLS8qIFBpY2sgb25lIHRvIGh1Z2lm eS4gKi8KLWhwZGF0YV90ICpwc3NldF9waWNrX2h1Z2lmeShwc3NldF90ICpwc3NldCk7Ci0KLXZv aWQgcHNzZXRfaW5zZXJ0KHBzc2V0X3QgKnBzc2V0LCBocGRhdGFfdCAqcHMpOwotdm9pZCBwc3Nl dF9yZW1vdmUocHNzZXRfdCAqcHNzZXQsIGhwZGF0YV90ICpwcyk7Ci0KLXN0YXRpYyBpbmxpbmUg c2l6ZV90Ci1wc3NldF9ucGFnZXNsYWJzKHBzc2V0X3QgKnBzc2V0KSB7Ci0JcmV0dXJuIHBzc2V0 LT5tZXJnZWRfc3RhdHMubnBhZ2VzbGFiczsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLXBz c2V0X25hY3RpdmUocHNzZXRfdCAqcHNzZXQpIHsKLQlyZXR1cm4gcHNzZXQtPm1lcmdlZF9zdGF0 cy5uYWN0aXZlOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVfdAotcHNzZXRfbmRpcnR5KHBzc2V0 X3QgKnBzc2V0KSB7Ci0JcmV0dXJuIHBzc2V0LT5tZXJnZWRfc3RhdHMubmRpcnR5OwotfQotCi0j ZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfUFNTRVRfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJu YWwvcHVibGljX25hbWVzcGFjZS5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX25hbWVzcGFjZS5zaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNGQ0MTViYS4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3B1YmxpY19uYW1lc3BhY2Uuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMhL2Jp bi9zaAotCi1mb3Igbm0gaW4gYGNhdCAkMWAgOyBkbwotICBuPWBlY2hvICR7bm19IHx0ciAnOicg JyAnIHxhd2sgJ3twcmludCAkMX0nYAotICBlY2hvICIjZGVmaW5lIGplXyR7bn0gSkVNQUxMT0Nf Tigke259KSIKLWRvbmUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3B1YmxpY191bm5hbWVzcGFjZS5z aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvcHVibGljX3VubmFtZXNwYWNlLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCA0MjM5ZDE3Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcHVibGljX3VubmFtZXNwYWNl LnNoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIS9iaW4vc2gKLQotZm9yIG5tIGlu IGBjYXQgJDFgIDsgZG8KLSAgbj1gZWNobyAke25tfSB8dHIgJzonICcgJyB8YXdrICd7cHJpbnQg JDF9J2AKLSAgZWNobyAiI3VuZGVmIGplXyR7bn0iCi1kb25lCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9xbC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9xbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2Y1 MmY4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyAr MCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1FMX0gKLSNkZWZpbmUgSkVNQUxMT0Nf SU5URVJOQUxfUUxfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcXIuaCIKLQotLyoK LSAqIEEgbGlua2VkLWxpc3QgaW1wbGVtZW50YXRpb24uCi0gKgotICogVGhpcyBpcyBidWlsdCBv biB0b3Agb2YgdGhlIHJpbmcgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGF0IGNhbiBiZSB2aWV3ZWQg YXMgYW4KLSAqIGltcGxlbWVudGF0aW9uIGRldGFpbCAoaS5lLiB0cnlpbmcgdG8gYWR2YW5jZSBw YXN0IHRoZSB0YWlsIG9mIHRoZSBsaXN0Ci0gKiBkb2Vzbid0IHdyYXAgYXJvdW5kKS4KLSAqCi0g KiBZb3UgZGVmaW5lIGEgc3RydWN0IGxpa2Ugc286Ci0gKiB0eXBlZGVmIHN0cnVjeSBteV9zIG15 X3Q7Ci0gKiBzdHJ1Y3QgbXlfcyB7Ci0gKiAgIGludCBkYXRhOwotICogICBxbF9lbG0obXlfdCkg bXlfbGluazsKLSAqIH07Ci0gKgotICogLy8gV2Ugd29iYmxlIGJldHdlZW4gImxpc3QiIGFuZCAi aGVhZCIgZm9yIHRoaXMgdHlwZTsgd2UncmUgbm93IG1vc3RseQotICogLy8gaGVhZGluZyB0b3dh cmRzICJsaXN0Ii4KLSAqIHR5cGVkZWYgcWxfaGVhZChteV90KSBteV9saXN0X3Q7Ci0gKgotICog WW91IHRoZW4gcGFzcyBhIG15X2xpc3RfdCAqIGZvciBhX2hlYWQgYXJndW1lbnRzLCBhIG15X3Qg KiBmb3IgYV9lbG0KLSAqIGFyZ3VtZW50cywgdGhlIHRva2VuICJteV9saW5rIiBmb3IgYV9maWVs ZCBhcmd1bWVudHMsIGFuZCB0aGUgdG9rZW4gIm15X3QiCi0gKiBmb3IgYV90eXBlIGFyZ3VtZW50 cy4KLSAqLwotCi0vKiBMaXN0IGRlZmluaXRpb25zLiAqLwotI2RlZmluZSBxbF9oZWFkKGFfdHlw ZSkJCQkJCQkJXAotc3RydWN0IHsJCQkJCQkJCVwKLQlhX3R5cGUgKnFsaF9maXJzdDsJCQkJCQlc Ci19Ci0KLS8qIFN0YXRpYyBpbml0aWFsaXplciBmb3IgYW4gZW1wdHkgbGlzdC4gKi8KLSNkZWZp bmUgcWxfaGVhZF9pbml0aWFsaXplcihhX2hlYWQpIHtOVUxMfQotCi0vKiBUaGUgZmllbGQgZGVm aW5pdGlvbi4gKi8KLSNkZWZpbmUgcWxfZWxtKGFfdHlwZSkJcXIoYV90eXBlKQotCi0vKiBBIHBv aW50ZXIgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QsIG9yIE5VTEwgaWYgdGhlIGxp c3QgaXMgZW1wdHkuICovCi0jZGVmaW5lIHFsX2ZpcnN0KGFfaGVhZCkgKChhX2hlYWQpLT5xbGhf Zmlyc3QpCi0KLS8qIER5bmFtaWNhbGx5IGluaXRpYWxpemVzIGEgbGlzdC4gKi8KLSNkZWZpbmUg cWxfbmV3KGFfaGVhZCkgZG8gewkJCQkJCVwKLQlxbF9maXJzdChhX2hlYWQpID0gTlVMTDsJCQkJ CVwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiBTZXRzIGRlc3QgdG8gYmUgdGhlIGNvbnRlbnRzIG9m IHNyYyAob3ZlcndyaXRpbmcgYW55IGVsZW1lbnRzIHRoZXJlKSwgbGVhdmluZwotICogc3JjIGVt cHR5LgotICovCi0jZGVmaW5lIHFsX21vdmUoYV9oZWFkX2Rlc3QsIGFfaGVhZF9zcmMpIGRvIHsJ CQkJXAotCXFsX2ZpcnN0KGFfaGVhZF9kZXN0KSA9IHFsX2ZpcnN0KGFfaGVhZF9zcmMpOwkJCVwK LQlxbF9uZXcoYV9oZWFkX3NyYyk7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogVHJ1ZSBpZiB0 aGUgbGlzdCBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLiAqLwotI2RlZmluZSBxbF9lbXB0eShh X2hlYWQpIChxbF9maXJzdChhX2hlYWQpID09IE5VTEwpCi0KLS8qCi0gKiBJbml0aWFsaXplcyBh IHFsX2VsbS4gIE11c3QgYmUgY2FsbGVkIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGFib3V0IHRvIGJl Ci0gKiBvdmVyd3JpdHRlbi4KLSAqLwotI2RlZmluZSBxbF9lbG1fbmV3KGFfZWxtLCBhX2ZpZWxk KSBxcl9uZXcoKGFfZWxtKSwgYV9maWVsZCkKLQotLyoKLSAqIE9idGFpbnMgdGhlIGxhc3QgaXRl bSBpbiB0aGUgbGlzdC4KLSAqLwotI2RlZmluZSBxbF9sYXN0KGFfaGVhZCwgYV9maWVsZCkJCQkJ CVwKLQkocWxfZW1wdHkoYV9oZWFkKSA/IE5VTEwgOiBxcl9wcmV2KHFsX2ZpcnN0KGFfaGVhZCks IGFfZmllbGQpKQotCi0vKgotICogR2V0cyBhIHBvaW50ZXIgdG8gdGhlIG5leHQvcHJldiBlbGVt ZW50IGluIHRoZSBsaXN0LiAgVHJ5aW5nIHRvIGFkdmFuY2UgcGFzdAotICogdGhlIGVuZCBvciBy ZXRyZWF0IGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IHJldHVybnMgTlVMTC4KLSAq LwotI2RlZmluZSBxbF9uZXh0KGFfaGVhZCwgYV9lbG0sIGFfZmllbGQpCQkJCQlcCi0JKChxbF9s YXN0KGFfaGVhZCwgYV9maWVsZCkgIT0gKGFfZWxtKSkJCQkJXAotCSAgICA/IHFyX25leHQoKGFf ZWxtKSwgYV9maWVsZCkJOiBOVUxMKQotI2RlZmluZSBxbF9wcmV2KGFfaGVhZCwgYV9lbG0sIGFf ZmllbGQpCQkJCQlcCi0JKChxbF9maXJzdChhX2hlYWQpICE9IChhX2VsbSkpID8gcXJfcHJldigo YV9lbG0pLCBhX2ZpZWxkKQlcCi0JCQkJICAgICAgIDogTlVMTCkKLQotLyogSW5zZXJ0cyBhX2Vs bSBiZWZvcmUgYV9xbGVsbSBpbiB0aGUgbGlzdC4gKi8KLSNkZWZpbmUgcWxfYmVmb3JlX2luc2Vy dChhX2hlYWQsIGFfcWxlbG0sIGFfZWxtLCBhX2ZpZWxkKSBkbyB7CQlcCi0JcXJfYmVmb3JlX2lu c2VydCgoYV9xbGVsbSksIChhX2VsbSksIGFfZmllbGQpOwkJCVwKLQlpZiAocWxfZmlyc3QoYV9o ZWFkKSA9PSAoYV9xbGVsbSkpIHsJCQkJXAotCQlxbF9maXJzdChhX2hlYWQpID0gKGFfZWxtKTsJ CQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qIEluc2VydHMgYV9lbG0gYWZ0ZXIg YV9xbGVsbSBpbiB0aGUgbGlzdC4gKi8KLSNkZWZpbmUgcWxfYWZ0ZXJfaW5zZXJ0KGFfcWxlbG0s IGFfZWxtLCBhX2ZpZWxkKQkJCVwKLQlxcl9hZnRlcl9pbnNlcnQoKGFfcWxlbG0pLCAoYV9lbG0p LCBhX2ZpZWxkKQotCi0vKiBJbnNlcnRzIGFfZWxtIGFzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBs aXN0LiAqLwotI2RlZmluZSBxbF9oZWFkX2luc2VydChhX2hlYWQsIGFfZWxtLCBhX2ZpZWxkKSBk byB7CQkJXAotCWlmICghcWxfZW1wdHkoYV9oZWFkKSkgewkJCQkJXAotCQlxcl9iZWZvcmVfaW5z ZXJ0KHFsX2ZpcnN0KGFfaGVhZCksIChhX2VsbSksIGFfZmllbGQpOwlcCi0JfQkJCQkJCQkJXAot CXFsX2ZpcnN0KGFfaGVhZCkgPSAoYV9lbG0pOwkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogSW5z ZXJ0cyBhX2VsbSBhcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LiAqLwotI2RlZmluZSBxbF90 YWlsX2luc2VydChhX2hlYWQsIGFfZWxtLCBhX2ZpZWxkKSBkbyB7CQkJXAotCWlmICghcWxfZW1w dHkoYV9oZWFkKSkgewkJCQkJXAotCQlxcl9iZWZvcmVfaW5zZXJ0KHFsX2ZpcnN0KGFfaGVhZCks IChhX2VsbSksIGFfZmllbGQpOwlcCi0JfQkJCQkJCQkJXAotCXFsX2ZpcnN0KGFfaGVhZCkgPSBx cl9uZXh0KChhX2VsbSksIGFfZmllbGQpOwkJCVwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiBHaXZl biBsaXN0cyBhID0gW2FfMSwgLi4uLCBhX25dIGFuZCBbYl8xLCAuLi4sIGJfbl0sIHJlc3VsdHMg aW46Ci0gKiBhID0gW2ExLCAuLi4sIGFfbiwgYl8xLCAuLi4sIGJfbl0gYW5kIGIgPSBbXS4KLSAq LwotI2RlZmluZSBxbF9jb25jYXQoYV9oZWFkX2EsIGFfaGVhZF9iLCBhX2ZpZWxkKSBkbyB7CQkJ XAotCWlmIChxbF9lbXB0eShhX2hlYWRfYSkpIHsJCQkJCVwKLQkJcWxfbW92ZShhX2hlYWRfYSwg YV9oZWFkX2IpOwkJCQlcCi0JfSBlbHNlIGlmICghcWxfZW1wdHkoYV9oZWFkX2IpKSB7CQkJCVwK LQkJcXJfbWVsZChxbF9maXJzdChhX2hlYWRfYSksIHFsX2ZpcnN0KGFfaGVhZF9iKSwJCVwKLQkJ ICAgIGFfZmllbGQpOwkJCQkJCVwKLQkJcWxfbmV3KGFfaGVhZF9iKTsJCQkJCVwKLQl9CQkJCQkJ CQlcCi19IHdoaWxlICgwKQotCi0vKiBSZW1vdmVzIGFfZWxtIGZyb20gdGhlIGxpc3QuICovCi0j ZGVmaW5lIHFsX3JlbW92ZShhX2hlYWQsIGFfZWxtLCBhX2ZpZWxkKSBkbyB7CQkJCVwKLQlpZiAo cWxfZmlyc3QoYV9oZWFkKSA9PSAoYV9lbG0pKSB7CQkJCVwKLQkJcWxfZmlyc3QoYV9oZWFkKSA9 IHFyX25leHQocWxfZmlyc3QoYV9oZWFkKSwgYV9maWVsZCk7CVwKLQl9CQkJCQkJCQlcCi0JaWYg KHFsX2ZpcnN0KGFfaGVhZCkgIT0gKGFfZWxtKSkgewkJCQlcCi0JCXFyX3JlbW92ZSgoYV9lbG0p LCBhX2ZpZWxkKTsJCQkJXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkJcWxfbmV3KGFfaGVhZCk7CQkJ CQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qIFJlbW92ZXMgdGhlIGZpcnN0IGl0 ZW0gaW4gdGhlIGxpc3QuICovCi0jZGVmaW5lIHFsX2hlYWRfcmVtb3ZlKGFfaGVhZCwgYV90eXBl LCBhX2ZpZWxkKSBkbyB7CQkJXAotCWFfdHlwZSAqdCA9IHFsX2ZpcnN0KGFfaGVhZCk7CQkJCQlc Ci0JcWxfcmVtb3ZlKChhX2hlYWQpLCB0LCBhX2ZpZWxkKTsJCQkJXAotfSB3aGlsZSAoMCkKLQot LyogUmVtb3ZlcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LiAqLwotI2RlZmluZSBxbF90YWls X3JlbW92ZShhX2hlYWQsIGFfdHlwZSwgYV9maWVsZCkgZG8gewkJCVwKLQlhX3R5cGUgKnQgPSBx bF9sYXN0KGFfaGVhZCwgYV9maWVsZCk7CQkJCVwKLQlxbF9yZW1vdmUoKGFfaGVhZCksIHQsIGFf ZmllbGQpOwkJCQlcCi19IHdoaWxlICgwKQotCi0vKgotICogR2l2ZW4gYSA9IFthXzEsIGFfMiwg Li4uLCBhX24tMSwgYV9uLCBhX24rMSwgLi4uXSwKLSAqIHFsX3NwbGl0KGEsIGFfbiwgYiwgc29t ZV9maWVsZCkgcmVzdWx0cyBpbgotICogICBhID0gW2FfMSwgYV8yLCAuLi4sIGFfbi0xXQotICog YW5kIHJlcGxhY2VzIGIncyBjb250ZW50cyB3aXRoOgotICogICBiID0gW2FfbiwgYV9uKzEsIC4u Ll0KLSAqLwotI2RlZmluZSBxbF9zcGxpdChhX2hlYWRfYSwgYV9lbG0sIGFfaGVhZF9iLCBhX2Zp ZWxkKSBkbyB7CQlcCi0JaWYgKHFsX2ZpcnN0KGFfaGVhZF9hKSA9PSAoYV9lbG0pKSB7CQkJCVwK LQkJcWxfbW92ZShhX2hlYWRfYiwgYV9oZWFkX2EpOwkJCQlcCi0JfSBlbHNlIHsJCQkJCQkJXAot CQlxcl9zcGxpdChxbF9maXJzdChhX2hlYWRfYSksIChhX2VsbSksIGFfZmllbGQpOwkJXAotCQlx bF9maXJzdChhX2hlYWRfYikgPSAoYV9lbG0pOwkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAo MCkKLQotLyoKLSAqIEFuIG9wdGltaXplZCB2ZXJzaW9uIG9mOgotICoJYV90eXBlICp0ID0gcWxf Zmlyc3QoYV9oZWFkKTsKLSAqCXFsX3JlbW92ZSgoYV9oZWFkKSwgdCwgYV9maWVsZCk7Ci0gKglx bF90YWlsX2luc2VydCgoYV9oZWFkKSwgdCwgYV9maWVsZCk7Ci0gKi8KLSNkZWZpbmUgcWxfcm90 YXRlKGFfaGVhZCwgYV9maWVsZCkgZG8gewkJCQkJXAotCXFsX2ZpcnN0KGFfaGVhZCkgPSBxcl9u ZXh0KHFsX2ZpcnN0KGFfaGVhZCksIGFfZmllbGQpOwkJXAotfSB3aGlsZSAoMCkKLQotLyoKLSAq IEhlbHBlciBtYWNybyB0byBpdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IGluIGEgbGlzdCBpbiBv cmRlciwgc3RhcnRpbmcgZnJvbQotICogdGhlIGhlYWQgKG9yIGluIHJldmVyc2Ugb3JkZXIsIHN0 YXJ0aW5nIGZyb20gdGhlIHRhaWwpLiAgVGhlIHVzYWdlIGlzCi0gKiAoYXNzdW1pbmcgbXlfdCBh bmQgbXlfbGlzdF90IGRlZmluZWQgYXMgYWJvdmUpLgotICoKLSAqIGludCBzdW0obXlfbGlzdF90 ICpsaXN0KSB7Ci0gKiAgIGludCBzdW0gPSAwOwotICogICBteV90ICppdGVyOwotICogICBxbF9m b3JlYWNoKGl0ZXIsIGxpc3QsIGxpbmspIHsKLSAqICAgICBzdW0gKz0gaXRlci0+ZGF0YTsKLSAq ICAgfQotICogICByZXR1cm4gc3VtOwotICogfQotICovCi0KLSNkZWZpbmUgcWxfZm9yZWFjaChh X3ZhciwgYV9oZWFkLCBhX2ZpZWxkKQkJCQlcCi0JcXJfZm9yZWFjaCgoYV92YXIpLCBxbF9maXJz dChhX2hlYWQpLCBhX2ZpZWxkKQotCi0jZGVmaW5lIHFsX3JldmVyc2VfZm9yZWFjaChhX3Zhciwg YV9oZWFkLCBhX2ZpZWxkKQkJCVwKLQlxcl9yZXZlcnNlX2ZvcmVhY2goKGFfdmFyKSwgcWxfZmly c3QoYV9oZWFkKSwgYV9maWVsZCkKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1FMX0gg Ki8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3FyLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3FyLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGVjZTRmNTUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9xci5oCisr KyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxf UVJfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9RUl9ICi0KLS8qCi0gKiBBIHJpbmcgaW1w bGVtZW50YXRpb24gYmFzZWQgb24gYW4gZW1iZWRkZWQgY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBs aXN0LgotICoKLSAqIFlvdSBkZWZpbmUgeW91ciBzdHJ1Y3QgbGlrZSBzbzoKLSAqCi0gKiB0eXBl ZGVmIHN0cnVjdCBteV9zIG15X3Q7Ci0gKiBzdHJ1Y3QgbXlfcyB7Ci0gKiAgIGludCBkYXRhOwot ICogICBxcihteV90KSBteV9saW5rOwotICogfTsKLSAqCi0gKiBBbmQgdGhlbiBwYXNzIGEgbXlf dCAqIGludG8gbWFjcm9zIGZvciBhX3FyIGFyZ3VtZW50cywgYW5kIHRoZSB0b2tlbgotICogIm15 X2xpbmsiIGludG8gYV9maWVsZCBmaWVsZHMuCi0gKi8KLQotLyogUmluZyBkZWZpbml0aW9ucy4g Ki8KLSNkZWZpbmUgcXIoYV90eXBlKQkJCQkJCQlcCi1zdHJ1Y3QgewkJCQkJCQkJXAotCWFfdHlw ZQkqcXJlX25leHQ7CQkJCQkJXAotCWFfdHlwZQkqcXJlX3ByZXY7CQkJCQkJXAotfQotCi0vKgot ICogSW5pdGlhbGl6ZSBhIHFyIGxpbmsuICBFdmVyeSBsaW5rIG11c3QgYmUgaW5pdGlhbGl6ZWQg YmVmb3JlIGJlaW5nIHVzZWQsIGV2ZW4KLSAqIGlmIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMgZ29p bmcgdG8gYmUgaW1tZWRpYXRlbHkgb3ZlcndyaXR0ZW4gKHNheSwgYnkgYmVpbmcKLSAqIHBhc3Nl ZCBpbnRvIGFuIGluc2VydGlvbiBtYWNybykuCi0gKi8KLSNkZWZpbmUgcXJfbmV3KGFfcXIsIGFf ZmllbGQpIGRvIHsJCQkJCVwKLQkoYV9xciktPmFfZmllbGQucXJlX25leHQgPSAoYV9xcik7CQkJ CVwKLQkoYV9xciktPmFfZmllbGQucXJlX3ByZXYgPSAoYV9xcik7CQkJCVwKLX0gd2hpbGUgKDAp Ci0KLS8qCi0gKiBHbyBmb3J3YXJkcyBvciBiYWNrd2FyZHMgaW4gdGhlIHJpbmcuICBOb3RlIHRo YXQgKHRoZSByaW5nIGJlaW5nIGNpcmN1bGFyKSwgdGhpcwotICogYWx3YXlzIHN1Y2NlZWRzIC0t IHlvdSBqdXN0IGtlZXAgbG9vcGluZyBhcm91bmQgYW5kIGFyb3VuZCB0aGUgcmluZyBpZiB5b3UK LSAqIGNoYXNlIHBvaW50ZXJzIHdpdGhvdXQgZW5kLgotICovCi0jZGVmaW5lIHFyX25leHQoYV9x ciwgYV9maWVsZCkgKChhX3FyKS0+YV9maWVsZC5xcmVfbmV4dCkKLSNkZWZpbmUgcXJfcHJldihh X3FyLCBhX2ZpZWxkKSAoKGFfcXIpLT5hX2ZpZWxkLnFyZV9wcmV2KQotCi0vKgotICogR2l2ZW4g dHdvIHJpbmdzOgotICogICAgYSAtPiBhXzEgLT4gLi4uIC0+IGFfbiAtLQotICogICAgXiAgICAg ICAgICAgICAgICAgICAgICAgfAotICogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoK LSAqICAgIGIgLT4gYl8xIC0+IC4uLiAtPiBiX24gLS0KLSAqICAgIF4gICAgICAgICAgICAgICAg ICAgICAgIHwKLSAqICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBSZXN1bHRz IGluIHRoZSByaW5nOgotICogICBhIC0+IGFfMSAtPiAuLi4gLT4gYV9uIC0+IGIgLT4gYl8xIC0+ IC4uLiAtPiBiX24gLS0KLSAqICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Ci0gKiAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tfAotICoKLSAqIGFfcXJfYSBjYW4gZGlyZWN0bHkgYmUgYSBxcl9uZXh0 KCkgbWFjcm8sIGJ1dCBhX3FyX2IgY2Fubm90LgotICovCi0jZGVmaW5lIHFyX21lbGQoYV9xcl9h LCBhX3FyX2IsIGFfZmllbGQpIGRvIHsJCQkJXAotCShhX3FyX2IpLT5hX2ZpZWxkLnFyZV9wcmV2 LT5hX2ZpZWxkLnFyZV9uZXh0ID0JCQlcCi0JICAgIChhX3FyX2EpLT5hX2ZpZWxkLnFyZV9wcmV2 OwkJCQkJXAotCShhX3FyX2EpLT5hX2ZpZWxkLnFyZV9wcmV2ID0gKGFfcXJfYiktPmFfZmllbGQu cXJlX3ByZXY7CVwKLQkoYV9xcl9iKS0+YV9maWVsZC5xcmVfcHJldiA9CQkJCQlcCi0JICAgIChh X3FyX2IpLT5hX2ZpZWxkLnFyZV9wcmV2LT5hX2ZpZWxkLnFyZV9uZXh0OwkJXAotCShhX3FyX2Ep LT5hX2ZpZWxkLnFyZV9wcmV2LT5hX2ZpZWxkLnFyZV9uZXh0ID0gKGFfcXJfYSk7CVwKLQkoYV9x cl9iKS0+YV9maWVsZC5xcmVfcHJldi0+YV9maWVsZC5xcmVfbmV4dCA9IChhX3FyX2IpOwlcCi19 IHdoaWxlICgwKQotCi0vKgotICogTG9naWNhbGx5LCB0aGlzIGlzIGp1c3QgYSBtZWxkLiAgVGhl IGludGVudCwgdGhvdWdoLCBpcyB0aGF0IGFfcXJlbG0gaXMgYQotICogc2luZ2xlLWVsZW1lbnQg cmluZywgc28gdGhhdCAiYmVmb3JlIiBoYXMgYSBtb3JlIG9idmlvdXMgaW50ZXJwcmV0YXRpb24g dGhhbgotICogbWVsZC4KLSAqLwotI2RlZmluZSBxcl9iZWZvcmVfaW5zZXJ0KGFfcXJlbG0sIGFf cXIsIGFfZmllbGQpCQkJXAotCXFyX21lbGQoKGFfcXJlbG0pLCAoYV9xciksIGFfZmllbGQpCi0K LS8qIERpdHRvLCBidXQgaW5zZXJ0aW5nIGFmdGVyIHJhdGhlciB0aGFuIGJlZm9yZS4gKi8KLSNk ZWZpbmUgcXJfYWZ0ZXJfaW5zZXJ0KGFfcXJlbG0sIGFfcXIsIGFfZmllbGQpCQkJCVwKLQlxcl9i ZWZvcmVfaW5zZXJ0KHFyX25leHQoYV9xcmVsbSwgYV9maWVsZCksIChhX3FyKSwgYV9maWVsZCkK LQotLyoKLSAqIEludmVydHMgbWVsZDsgZ2l2ZW4gdGhlIHJpbmc6Ci0gKiAgIGEgLT4gYV8xIC0+ IC4uLiAtPiBhX24gLT4gYiAtPiBiXzEgLT4gLi4uIC0+IGJfbiAtLQotICogICBeICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICAgfC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0gKgotICogUmVzdWx0 cyBpbiB0d28gcmluZ3M6Ci0gKiAgICBhIC0+IGFfMSAtPiAuLi4gLT4gYV9uIC0tCi0gKiAgICBe ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0gKgotICogICAgYiAtPiBiXzEgLT4gLi4uIC0+IGJfbiAtLQotICogICAgXiAgICAgICAgICAg ICAgICAgICAgICAgfAotICogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIHFy X21lbGQoKSBhbmQgcXJfc3BsaXQoKSBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQsIHNvIHRo ZXJlJ3Mgbm8gbmVlZCB0bwotICogaGF2ZSB0d28gY29waWVzIG9mIHRoZSBjb2RlLgotICovCi0j ZGVmaW5lIHFyX3NwbGl0KGFfcXJfYSwgYV9xcl9iLCBhX2ZpZWxkKQkJCQlcCi0JcXJfbWVsZCgo YV9xcl9hKSwgKGFfcXJfYiksIGFfZmllbGQpCi0KLS8qCi0gKiBTcGxpdHMgb2ZmIGFfcXIgZnJv bSB0aGUgcmVzdCBvZiBpdHMgcmluZywgc28gdGhhdCBpdCBiZWNvbWVzIGEKLSAqIHNpbmdsZS1l bGVtZW50IHJpbmcuCi0gKi8KLSNkZWZpbmUgcXJfcmVtb3ZlKGFfcXIsIGFfZmllbGQpCQkJCQlc Ci0JcXJfc3BsaXQocXJfbmV4dChhX3FyLCBhX2ZpZWxkKSwgKGFfcXIpLCBhX2ZpZWxkKQotCi0v KgotICogSGVscGVyIG1hY3JvIHRvIGl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgaW4gYSByaW5n IGV4YWN0bHkgb25jZSwgc3RhcnRpbmcKLSAqIHdpdGggYV9xci4gIFRoZSB1c2FnZSBpcyAoYXNz dW1pbmcgbXlfdCBkZWZpbmVkIGFzIGFib3ZlKToKLSAqCi0gKiBpbnQgc3VtKG15X3QgKml0ZW0p IHsKLSAqICAgaW50IHN1bSA9IDA7Ci0gKiAgIG15X3QgKml0ZXI7Ci0gKiAgIHFyX2ZvcmVhY2go aXRlciwgaXRlbSwgbGluaykgewotICogICAgIHN1bSArPSBpdGVyLT5kYXRhOwotICogICB9Ci0g KiAgIHJldHVybiBzdW07Ci0gKiB9Ci0gKi8KLSNkZWZpbmUgcXJfZm9yZWFjaCh2YXIsIGFfcXIs IGFfZmllbGQpCQkJCQlcCi0JZm9yICgodmFyKSA9IChhX3FyKTsJCQkJCQlcCi0JICAgICh2YXIp ICE9IE5VTEw7CQkJCQkJXAotCSAgICAodmFyKSA9ICgoKHZhciktPmFfZmllbGQucXJlX25leHQg IT0gKGFfcXIpKQkJXAotCSAgICA/ICh2YXIpLT5hX2ZpZWxkLnFyZV9uZXh0IDogTlVMTCkpCi0K LS8qCi0gKiBUaGUgc2FtZSAoYW5kIHdpdGggdGhlIHNhbWUgdXNhZ2UpIGFzIHFyX2ZvcmVhY2gs IGJ1dCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIsCi0gKiBlbmRpbmcgd2l0aCBhX3FyLgotICovCi0j ZGVmaW5lIHFyX3JldmVyc2VfZm9yZWFjaCh2YXIsIGFfcXIsIGFfZmllbGQpCQkJCVwKLQlmb3Ig KCh2YXIpID0gKChhX3FyKSAhPSBOVUxMKSA/IHFyX3ByZXYoYV9xciwgYV9maWVsZCkgOiBOVUxM OwlcCi0JICAgICh2YXIpICE9IE5VTEw7CQkJCQkJXAotCSAgICAodmFyKSA9ICgoKHZhcikgIT0g KGFfcXIpKQkJCQkJXAotCSAgICA/ICh2YXIpLT5hX2ZpZWxkLnFyZV9wcmV2IDogTlVMTCkpCi0K LSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9RUl9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9xdWFudHVtLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3F1YW50dW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYzIyZDc1My4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3F1YW50dW0uaAorKysgL2Rldi9u dWxsCkBAIC0xLDg3ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfUVVBTlRVTV9I Ci0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1FVQU5UVU1fSAotCi0vKgotICogTWluaW11bSBh bGxvY2F0aW9uIGFsaWdubWVudCBpcyAyXkxHX1FVQU5UVU0gYnl0ZXMgKGlnbm9yaW5nIHRpbnkg c2l6ZQotICogY2xhc3NlcykuCi0gKi8KLSNpZm5kZWYgTEdfUVVBTlRVTQotIyAgaWYgKGRlZmlu ZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikpCi0jICAgIGRlZmluZSBMR19RVUFOVFVN CQk0Ci0jICBlbmRpZgotIyAgaWZkZWYgX19pYTY0X18KLSMgICAgZGVmaW5lIExHX1FVQU5UVU0J CTQKLSMgIGVuZGlmCi0jICBpZmRlZiBfX2FscGhhX18KLSMgICAgZGVmaW5lIExHX1FVQU5UVU0J CTQKLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgZGVmaW5lZChfX3Nw YXJjdjkpIHx8IGRlZmluZWQoX19zcGFyY192OV9fKSkKLSMgICAgZGVmaW5lIExHX1FVQU5UVU0J CTQKLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX194ODZf NjRfXykgfHwgZGVmaW5lZChfTV9YNjQpKQotIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJNAotIyAg ZW5kaWYKLSMgIGlmZGVmIF9fYXJtX18KLSMgICAgZGVmaW5lIExHX1FVQU5UVU0JCTMKLSMgIGVu ZGlmCi0jICBpZmRlZiBfX2FhcmNoNjRfXwotIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJNAotIyAg ZW5kaWYKLSMgIGlmZGVmIF9faHBwYV9fCi0jICAgIGRlZmluZSBMR19RVUFOVFVNCQk0Ci0jICBl bmRpZgotIyAgaWZkZWYgX19sb29uZ2FyY2hfXwotIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJNAot IyAgZW5kaWYKLSMgIGlmZGVmIF9fbTY4a19fCi0jICAgIGRlZmluZSBMR19RVUFOVFVNCQkzCi0j ICBlbmRpZgotIyAgaWZkZWYgX19taXBzX18KLSMgICAgaWYgZGVmaW5lZChfX21pcHNfbjMyKSB8 fCBkZWZpbmVkKF9fbWlwc19uNjQpCi0jICAgICAgZGVmaW5lIExHX1FVQU5UVU0JCTQKLSMgICAg ZWxzZQotIyAgICAgIGRlZmluZSBMR19RVUFOVFVNCQkzCi0jICAgIGVuZGlmCi0jICBlbmRpZgot IyAgaWZkZWYgX19uaW9zMl9fCi0jICAgIGRlZmluZSBMR19RVUFOVFVNCQkzCi0jICBlbmRpZgot IyAgaWZkZWYgX19vcjFrX18KLSMgICAgZGVmaW5lIExHX1FVQU5UVU0JCTMKLSMgIGVuZGlmCi0j ICBpZmRlZiBfX3Bvd2VycGNfXwotIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJNAotIyAgZW5kaWYK LSMgIGlmIGRlZmluZWQoX19yaXNjdikgfHwgZGVmaW5lZChfX3Jpc2N2X18pCi0jICAgIGRlZmlu ZSBMR19RVUFOVFVNCQk0Ci0jICBlbmRpZgotIyAgaWZkZWYgX19zMzkwX18KLSMgICAgZGVmaW5l IExHX1FVQU5UVU0JCTQKLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZCAoX19TSDNFX18pIHx8IGRl ZmluZWQoX19TSDRfU0lOR0xFX18pIHx8IGRlZmluZWQoX19TSDRfXykgfHwgXAotCWRlZmluZWQo X19TSDRfU0lOR0xFX09OTFlfXykpCi0jICAgIGRlZmluZSBMR19RVUFOVFVNCQk0Ci0jICBlbmRp ZgotIyAgaWZkZWYgX190aWxlX18KLSMgICAgZGVmaW5lIExHX1FVQU5UVU0JCTQKLSMgIGVuZGlm Ci0jICBpZmRlZiBfX2xlMzJfXwotIyAgICBkZWZpbmUgTEdfUVVBTlRVTQkJNAotIyAgZW5kaWYK LSMgIGlmZGVmIF9fYXJjX18KLSMgICAgZGVmaW5lIExHX1FVQU5UVU0JCTMKLSMgIGVuZGlmCi0j ICBpZm5kZWYgTEdfUVVBTlRVTQotIyAgICBlcnJvciAiVW5rbm93biBtaW5pbXVtIGFsaWdubWVu dCBmb3IgYXJjaGl0ZWN0dXJlOyBzcGVjaWZ5IHZpYSAiCi0JICItLXdpdGgtbGctcXVhbnR1bSIK LSMgIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBRVUFOVFVNCQkJKChzaXplX3QpKDFVIDw8IExH X1FVQU5UVU0pKQotI2RlZmluZSBRVUFOVFVNX01BU0sJCShRVUFOVFVNIC0gMSkKLQotLyogUmV0 dXJuIHRoZSBzbWFsbGVzdCBxdWFudHVtIG11bHRpcGxlIHRoYXQgaXMgPj0gYS4gKi8KLSNkZWZp bmUgUVVBTlRVTV9DRUlMSU5HKGEpCQkJCQkJXAotCSgoKGEpICsgUVVBTlRVTV9NQVNLKSAmIH5R VUFOVFVNX01BU0spCi0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9RVUFOVFVNX0ggKi8K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3JiLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3JiLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGE5YTUxY2IuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9yYi5oCisrKyAv ZGV2L251bGwKQEAgLTEsMTg1NiArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1JC X0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUkJfSAotCi0vKi0KLSAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCi0gKgotICogY3BwIG1hY3JvIGltcGxlbWVudGF0aW9uIG9mIGxlZnQtbGVhbmlu ZyAyLTMgcmVkLWJsYWNrIHRyZWVzLiAgUGFyZW50Ci0gKiBwb2ludGVycyBhcmUgbm90IHVzZWQs IGFuZCBjb2xvciBiaXRzIGFyZSBzdG9yZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50Ci0gKiBi aXQgb2YgcmlnaHQtY2hpbGQgcG9pbnRlcnMgKGlmIFJCX0NPTVBBQ1QgaXMgZGVmaW5lZCksIHRo dXMgbWFraW5nIG5vZGUKLSAqIGxpbmthZ2UgYXMgY29tcGFjdCBhcyBpcyBwb3NzaWJsZSBmb3Ig cmVkLWJsYWNrIHRyZWVzLgotICoKLSAqIFVzYWdlOgotICoKLSAqICAgI2luY2x1ZGUgPHN0ZGlu dC5oPgotICogICAjaW5jbHVkZSA8c3RkYm9vbC5oPgotICogICAjZGVmaW5lIE5ERUJVRyAvLyAo T3B0aW9uYWwsIHNlZSBhc3NlcnQoMykuKQotICogICAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0gKiAg ICNkZWZpbmUgUkJfQ09NUEFDVCAvLyAoT3B0aW9uYWwsIGVtYmVkIGNvbG9yIGJpdHMgaW4gcmln aHQtY2hpbGQgcG9pbnRlcnMuKQotICogICAjaW5jbHVkZSA8cmIuaD4KLSAqICAgLi4uCi0gKgot ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0jaWZuZGVmIF9fUEdJCi0jZGVmaW5lIFJC X0NPTVBBQ1QKLSNlbmRpZgotCi0vKgotICogRWFjaCBub2RlIGluIHRoZSBSQiB0cmVlIGNvbnN1 bWVzIGF0IGxlYXN0IDEgYnl0ZSBvZiBzcGFjZSAoZm9yIHRoZSBsaW5rYWdlCi0gKiBpZiBub3Ro aW5nIGVsc2UsIHNvIHRoZXJlIGFyZSBhIG1heGltdW0gb2Ygc2l6ZW9mKHZvaWQgKikgPDwgMyBy YiB0cmVlIG5vZGVzCi0gKiBpbiBhbnkgcHJvY2VzcyAoYW5kIHRodXMsIGF0IG1vc3Qgc2l6ZW9m KHZvaWQgKikgPDwgMyBub2RlcyBpbiBhbnkgcmIgdHJlZSkuCi0gKiBUaGUgY2hvaWNlIG9mIGFs Z29yaXRobSBib3VuZHMgdGhlIGRlcHRoIG9mIGEgdHJlZSB0byB0d2ljZSB0aGUgYmluYXJ5IGxv ZyBvZgotICogdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdHJlZTsgdGhlIGZvbGxvd2lu ZyBib3VuZCBmb2xsb3dzLgotICovCi0jZGVmaW5lIFJCX01BWF9ERVBUSCAoc2l6ZW9mKHZvaWQg KikgPDwgNCkKLQotI2lmZGVmIFJCX0NPTVBBQ1QKLS8qIE5vZGUgc3RydWN0dXJlLiAqLwotI2Rl ZmluZSByYl9ub2RlKGFfdHlwZSkJCQkJCQkJXAotc3RydWN0IHsJCQkJCQkJCVwKLSAgICBhX3R5 cGUgKnJibl9sZWZ0OwkJCQkJCQlcCi0gICAgYV90eXBlICpyYm5fcmlnaHRfcmVkOwkJCQkJCVwK LX0KLSNlbHNlCi0jZGVmaW5lIHJiX25vZGUoYV90eXBlKQkJCQkJCQlcCi1zdHJ1Y3QgewkJCQkJ CQkJXAotICAgIGFfdHlwZSAqcmJuX2xlZnQ7CQkJCQkJCVwKLSAgICBhX3R5cGUgKnJibl9yaWdo dDsJCQkJCQkJXAotICAgIGJvb2wgcmJuX3JlZDsJCQkJCQkJXAotfQotI2VuZGlmCi0KLS8qIFJv b3Qgc3RydWN0dXJlLiAqLwotI2RlZmluZSByYl90cmVlKGFfdHlwZSkJCQkJCQkJXAotc3RydWN0 IHsJCQkJCQkJCVwKLSAgICBhX3R5cGUgKnJidF9yb290OwkJCQkJCQlcCi19Ci0KLS8qIExlZnQg YWNjZXNzb3JzLiAqLwotI2RlZmluZSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgYV9u b2RlKQkJCQlcCi0gICAgKChhX25vZGUpLT5hX2ZpZWxkLnJibl9sZWZ0KQotI2RlZmluZSByYnRu X2xlZnRfc2V0KGFfdHlwZSwgYV9maWVsZCwgYV9ub2RlLCBhX2xlZnQpIGRvIHsJCVwKLSAgICAo YV9ub2RlKS0+YV9maWVsZC5yYm5fbGVmdCA9IGFfbGVmdDsJCQkJXAotfSB3aGlsZSAoMCkKLQot I2lmZGVmIFJCX0NPTVBBQ1QKLS8qIFJpZ2h0IGFjY2Vzc29ycy4gKi8KLSNkZWZpbmUgcmJ0bl9y aWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBhX25vZGUpCQkJCVwKLSAgICAoKGFfdHlwZSAqKSAo KChpbnRwdHJfdCkgKGFfbm9kZSktPmFfZmllbGQucmJuX3JpZ2h0X3JlZCkJCVwKLSAgICAgICYg KChzc2l6ZV90KS0yKSkpCi0jZGVmaW5lIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVsZCwg YV9ub2RlLCBhX3JpZ2h0KSBkbyB7CQlcCi0gICAgKGFfbm9kZSktPmFfZmllbGQucmJuX3JpZ2h0 X3JlZCA9IChhX3R5cGUgKikgKCgodWludHB0cl90KSBhX3JpZ2h0KQlcCi0gICAgICB8ICgoKHVp bnRwdHJfdCkgKGFfbm9kZSktPmFfZmllbGQucmJuX3JpZ2h0X3JlZCkgJiAoKHNpemVfdCkxKSkp OwlcCi19IHdoaWxlICgwKQotCi0vKiBDb2xvciBhY2Nlc3NvcnMuICovCi0jZGVmaW5lIHJidG5f cmVkX2dldChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSkJCQkJXAotICAgICgoYm9vbCkgKCgodWlu dHB0cl90KSAoYV9ub2RlKS0+YV9maWVsZC5yYm5fcmlnaHRfcmVkKQkJXAotICAgICAgJiAoKHNp emVfdCkxKSkpCi0jZGVmaW5lIHJidG5fY29sb3Jfc2V0KGFfdHlwZSwgYV9maWVsZCwgYV9ub2Rl LCBhX3JlZCkgZG8gewkJXAotICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yaWdodF9yZWQgPSAo YV90eXBlICopICgoKChpbnRwdHJfdCkJCVwKLSAgICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9y aWdodF9yZWQpICYgKChzc2l6ZV90KS0yKSkJCQlcCi0gICAgICB8ICgoc3NpemVfdClhX3JlZCkp OwkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIHJidG5fcmVkX3NldChhX3R5cGUsIGFfZmll bGQsIGFfbm9kZSkgZG8gewkJCVwKLSAgICAoYV9ub2RlKS0+YV9maWVsZC5yYm5fcmlnaHRfcmVk ID0gKGFfdHlwZSAqKSAoKCh1aW50cHRyX3QpCQlcCi0gICAgICAoYV9ub2RlKS0+YV9maWVsZC5y Ym5fcmlnaHRfcmVkKSB8ICgoc2l6ZV90KTEpKTsJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBy YnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSkgZG8gewkJCVwKLSAgICAoYV9u b2RlKS0+YV9maWVsZC5yYm5fcmlnaHRfcmVkID0gKGFfdHlwZSAqKSAoKChpbnRwdHJfdCkJCVwK LSAgICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yaWdodF9yZWQpICYgKChzc2l6ZV90KS0yKSk7 CQlcCi19IHdoaWxlICgwKQotCi0vKiBOb2RlIGluaXRpYWxpemVyLiAqLwotI2RlZmluZSByYnRf bm9kZV9uZXcoYV90eXBlLCBhX2ZpZWxkLCBhX3JidCwgYV9ub2RlKSBkbyB7CQlcCi0gICAgLyog Qm9va2tlZXBpbmcgYml0IGNhbm5vdCBiZSB1c2VkIGJ5IG5vZGUgcG9pbnRlci4gKi8JCVwKLSAg ICBhc3NlcnQoKCh1aW50cHRyX3QpKGFfbm9kZSkgJiAweDEpID09IDApOwkJCQlcCi0gICAgcmJ0 bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIChhX25vZGUpLCBOVUxMKTsJXAotICAgIHJidG5f cmlnaHRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSksIE5VTEwpOwlcCi0gICAgcmJ0bl9y ZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSkpOwkJCQlcCi19IHdoaWxlICgwKQotI2Vs c2UKLS8qIFJpZ2h0IGFjY2Vzc29ycy4gKi8KLSNkZWZpbmUgcmJ0bl9yaWdodF9nZXQoYV90eXBl LCBhX2ZpZWxkLCBhX25vZGUpCQkJCVwKLSAgICAoKGFfbm9kZSktPmFfZmllbGQucmJuX3JpZ2h0 KQotI2RlZmluZSByYnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSwgYV9yaWdo dCkgZG8gewkJXAotICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yaWdodCA9IGFfcmlnaHQ7CQkJ CVwKLX0gd2hpbGUgKDApCi0KLS8qIENvbG9yIGFjY2Vzc29ycy4gKi8KLSNkZWZpbmUgcmJ0bl9y ZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgYV9ub2RlKQkJCQlcCi0gICAgKChhX25vZGUpLT5hX2Zp ZWxkLnJibl9yZWQpCi0jZGVmaW5lIHJidG5fY29sb3Jfc2V0KGFfdHlwZSwgYV9maWVsZCwgYV9u b2RlLCBhX3JlZCkgZG8gewkJXAotICAgIChhX25vZGUpLT5hX2ZpZWxkLnJibl9yZWQgPSAoYV9y ZWQpOwkJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSByYnRuX3JlZF9zZXQoYV90eXBlLCBhX2Zp ZWxkLCBhX25vZGUpIGRvIHsJCQlcCi0gICAgKGFfbm9kZSktPmFfZmllbGQucmJuX3JlZCA9IHRy dWU7CQkJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSByYnRuX2JsYWNrX3NldChhX3R5cGUsIGFf ZmllbGQsIGFfbm9kZSkgZG8gewkJCVwKLSAgICAoYV9ub2RlKS0+YV9maWVsZC5yYm5fcmVkID0g ZmFsc2U7CQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBOb2RlIGluaXRpYWxpemVyLiAqLwotI2Rl ZmluZSByYnRfbm9kZV9uZXcoYV90eXBlLCBhX2ZpZWxkLCBhX3JidCwgYV9ub2RlKSBkbyB7CQlc Ci0gICAgcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIChhX25vZGUpLCBOVUxMKTsJXAot ICAgIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSksIE5VTEwpOwlcCi0g ICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSkpOwkJCQlcCi19IHdoaWxl ICgwKQotI2VuZGlmCi0KLS8qIFRyZWUgaW5pdGlhbGl6ZXIuICovCi0jZGVmaW5lIHJiX25ldyhh X3R5cGUsIGFfZmllbGQsIGFfcmJ0KSBkbyB7CQkJCVwKLSAgICAoYV9yYnQpLT5yYnRfcm9vdCA9 IE5VTEw7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogSW50ZXJuYWwgdXRpbGl0eSBtYWNyb3Mu ICovCi0jZGVmaW5lIHJidG5fZmlyc3QoYV90eXBlLCBhX2ZpZWxkLCBhX3JidCwgYV9yb290LCBy X25vZGUpIGRvIHsJCVwKLSAgICAocl9ub2RlKSA9IChhX3Jvb3QpOwkJCQkJCVwKLSAgICBpZiAo KHJfbm9kZSkgIT0gTlVMTCkgewkJCQkJCVwKLQlmb3IgKDsJCQkJCQkJCVwKLQkgIHJidG5fbGVm dF9nZXQoYV90eXBlLCBhX2ZpZWxkLCAocl9ub2RlKSkgIT0gTlVMTDsJCVwKLQkgIChyX25vZGUp ID0gcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIChyX25vZGUpKSkgewlcCi0JfQkJCQkJ CQkJXAotICAgIH0JCQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHJidG5fbGFzdChh X3R5cGUsIGFfZmllbGQsIGFfcmJ0LCBhX3Jvb3QsIHJfbm9kZSkgZG8gewkJXAotICAgIChyX25v ZGUpID0gKGFfcm9vdCk7CQkJCQkJXAotICAgIGlmICgocl9ub2RlKSAhPSBOVUxMKSB7CQkJCQkJ XAotCWZvciAoOyByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIChyX25vZGUpKSAhPSBO VUxMOwlcCi0JICAocl9ub2RlKSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgKHJf bm9kZSkpKSB7CVwKLQl9CQkJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0K LSNkZWZpbmUgcmJ0bl9yb3RhdGVfbGVmdChhX3R5cGUsIGFfZmllbGQsIGFfbm9kZSwgcl9ub2Rl KSBkbyB7CQlcCi0gICAgKHJfbm9kZSkgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQs IChhX25vZGUpKTsJCVwKLSAgICByYnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIChhX25v ZGUpLAkJCQlcCi0gICAgICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgKHJfbm9kZSkp KTsJCQlcCi0gICAgcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIChyX25vZGUpLCAoYV9u b2RlKSk7CQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSByYnRuX3JvdGF0ZV9yaWdodChhX3R5 cGUsIGFfZmllbGQsIGFfbm9kZSwgcl9ub2RlKSBkbyB7CQlcCi0gICAgKHJfbm9kZSkgPSByYnRu X2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgKGFfbm9kZSkpOwkJXAotICAgIHJidG5fbGVmdF9z ZXQoYV90eXBlLCBhX2ZpZWxkLCAoYV9ub2RlKSwJCQkJXAotICAgICAgcmJ0bl9yaWdodF9nZXQo YV90eXBlLCBhX2ZpZWxkLCAocl9ub2RlKSkpOwkJCVwKLSAgICByYnRuX3JpZ2h0X3NldChhX3R5 cGUsIGFfZmllbGQsIChyX25vZGUpLCAoYV9ub2RlKSk7CQlcCi19IHdoaWxlICgwKQotCi0jZGVm aW5lIHJiX3N1bW1hcml6ZWRfb25seV9mYWxzZSguLi4pCi0jZGVmaW5lIHJiX3N1bW1hcml6ZWRf b25seV90cnVlKC4uLikgX19WQV9BUkdTX18KLSNkZWZpbmUgcmJfZW1wdHlfc3VtbWFyaXplKGFf bm9kZSwgYV9sY2hpbGQsIGFfcmNoaWxkKSBmYWxzZQotCi0vKgotICogVGhlIHJiX3Byb3RvKCkg YW5kIHJiX3N1bW1hcml6ZWRfcHJvdG8oKSBtYWNyb3MgZ2VuZXJhdGUgZnVuY3Rpb24gcHJvdG90 eXBlcwotICogdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBmdW5jdGlvbnMgZ2VuZXJhdGVkIGJ5IGFu IGVxdWl2YWxlbnRseSBwYXJhbWV0ZXJpemVkCi0gKiBjYWxsIHRvIHJiX2dlbigpIG9yIHJiX3N1 bW1hcml6ZWRfZ2VuKCksIHJlc3BlY3RpdmVseS4KLSAqLwotCi0jZGVmaW5lIHJiX3Byb3RvKGFf YXR0ciwgYV9wcmVmaXgsIGFfcmJ0X3R5cGUsIGFfdHlwZSkJCQlcCi0gICAgcmJfcHJvdG9faW1w bChhX2F0dHIsIGFfcHJlZml4LCBhX3JidF90eXBlLCBhX3R5cGUsIGZhbHNlKQotI2RlZmluZSBy Yl9zdW1tYXJpemVkX3Byb3RvKGFfYXR0ciwgYV9wcmVmaXgsIGFfcmJ0X3R5cGUsIGFfdHlwZSkJ XAotICAgIHJiX3Byb3RvX2ltcGwoYV9hdHRyLCBhX3ByZWZpeCwgYV9yYnRfdHlwZSwgYV90eXBl LCB0cnVlKQotI2RlZmluZSByYl9wcm90b19pbXBsKGFfYXR0ciwgYV9wcmVmaXgsIGFfcmJ0X3R5 cGUsIGFfdHlwZSwJCVwKLSAgICBhX2lzX3N1bW1hcml6ZWQpCQkJCQkJCVwKLWFfYXR0ciB2b2lk CQkJCQkJCQlcCi1hX3ByZWZpeCMjbmV3KGFfcmJ0X3R5cGUgKnJidHJlZSk7CQkJCQlcCi1hX2F0 dHIgYm9vbAkJCQkJCQkJXAotYV9wcmVmaXgjI2VtcHR5KGFfcmJ0X3R5cGUgKnJidHJlZSk7CQkJ CQlcCi1hX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKLWFfcHJlZml4IyNmaXJzdChhX3JidF90eXBl ICpyYnRyZWUpOwkJCQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjbGFz dChhX3JidF90eXBlICpyYnRyZWUpOwkJCQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1h X3ByZWZpeCMjbmV4dChhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqbm9kZSk7CQkJXAotYV9h dHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjcHJldihhX3JidF90eXBlICpyYnRyZWUs IGFfdHlwZSAqbm9kZSk7CQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMj c2VhcmNoKGFfcmJ0X3R5cGUgKnJidHJlZSwgY29uc3QgYV90eXBlICprZXkpOwkJXAotYV9hdHRy IGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjbnNlYXJjaChhX3JidF90eXBlICpyYnRyZWUs IGNvbnN0IGFfdHlwZSAqa2V5KTsJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9wcmVm aXgjI3BzZWFyY2goYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25zdCBhX3R5cGUgKmtleSk7CQlcCi1h X2F0dHIgdm9pZAkJCQkJCQkJXAotYV9wcmVmaXgjI2luc2VydChhX3JidF90eXBlICpyYnRyZWUs IGFfdHlwZSAqbm9kZSk7CQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4IyNyZW1v dmUoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUpOwkJCVwKLWFfYXR0ciBhX3R5cGUg KgkJCQkJCQkJXAotYV9wcmVmaXgjI2l0ZXIoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKnN0 YXJ0LCBhX3R5cGUgKigqY2IpKAlcCi0gIGFfcmJ0X3R5cGUgKiwgYV90eXBlICosIHZvaWQgKiks IHZvaWQgKmFyZyk7CQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9wcmVmaXgjI3Jl dmVyc2VfaXRlcihhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqc3RhcnQsCQlcCi0gIGFfdHlw ZSAqKCpjYikoYV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKTsJCVwK LWFfYXR0ciB2b2lkCQkJCQkJCQlcCi1hX3ByZWZpeCMjZGVzdHJveShhX3JidF90eXBlICpyYnRy ZWUsIHZvaWQgKCpjYikoYV90eXBlICosIHZvaWQgKiksCVwKLSAgdm9pZCAqYXJnKTsJCQkJCQkJ CVwKLS8qIEV4dGVuZGVkIEFQSSAqLwkJCQkJCQlcCi1yYl9zdW1tYXJpemVkX29ubHlfIyNhX2lz X3N1bW1hcml6ZWQoCQkJCQlcCi1hX2F0dHIgdm9pZAkJCQkJCQkJXAotYV9wcmVmaXgjI3VwZGF0 ZV9zdW1tYXJpZXMoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUpOwkJXAotYV9hdHRy IGJvb2wJCQkJCQkJCVwKLWFfcHJlZml4IyNlbXB0eV9maWx0ZXJlZChhX3JidF90eXBlICpyYnRy ZWUsCQkJCVwKLSAgICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlc Ci0gICAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICAg IHZvaWQgKmZpbHRlcl9jdHgpOwkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKLWFf cHJlZml4IyNmaXJzdF9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUsCQkJCVwKLSAgICBib29s ICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCi0gICAgYm9vbCAoKmZpbHRl cl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICAgIHZvaWQgKmZpbHRlcl9jdHgp OwkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKLWFfcHJlZml4IyNsYXN0X2ZpbHRl cmVkKGFfcmJ0X3R5cGUgKnJidHJlZSwJCQkJXAotICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9p ZCAqLCBhX3R5cGUgKiksCQkJCVwKLSAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwg YV90eXBlICopLAkJCQlcCi0gICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKLWFfYXR0ciBh X3R5cGUgKgkJCQkJCQkJXAotYV9wcmVmaXgjI25leHRfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0 cmVlLCBhX3R5cGUgKm5vZGUsCQlcCi0gICAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICosIGFf dHlwZSAqKSwJCQkJXAotICAgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBhX3R5cGUg KiksCQkJCVwKLSAgICB2b2lkICpmaWx0ZXJfY3R4KTsJCQkJCQkJXAotYV9hdHRyIGFfdHlwZSAq CQkJCQkJCQlcCi1hX3ByZWZpeCMjcHJldl9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUsIGFf dHlwZSAqbm9kZSwJCVwKLSAgICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICop LAkJCQlcCi0gICAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJ XAotICAgIHZvaWQgKmZpbHRlcl9jdHgpOwkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJCQkJCQkJ CVwKLWFfcHJlZml4IyNzZWFyY2hfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25zdCBh X3R5cGUgKmtleSwJXAotICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiks CQkJCVwKLSAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlc Ci0gICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJ XAotYV9wcmVmaXgjI25zZWFyY2hfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25zdCBh X3R5cGUgKmtleSwJXAotICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiks CQkJCVwKLSAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlc Ci0gICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJ XAotYV9wcmVmaXgjI3BzZWFyY2hfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBjb25zdCBh X3R5cGUgKmtleSwJXAotICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiks CQkJCVwKLSAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlc Ci0gICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJ XAotYV9wcmVmaXgjI2l0ZXJfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKnN0 YXJ0LAkJXAotICAgIGFfdHlwZSAqKCpjYikoYV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9pZCAq KSwgdm9pZCAqYXJnLAkJXAotICAgIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUg KiksCQkJCVwKLSAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJ CQlcCi0gICAgdm9pZCAqZmlsdGVyX2N0eCk7CQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJ CQkJXAotYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUs IGFfdHlwZSAqc3RhcnQsCVwKLSAgYV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFfdHlwZSAq LCB2b2lkICopLCB2b2lkICphcmcsCQlcCi0gICAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICos IGFfdHlwZSAqKSwJCQkJXAotICAgIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBhX3R5 cGUgKiksCQkJCVwKLSAgICB2b2lkICpmaWx0ZXJfY3R4KTsJCQkJCQkJXAotKQotCi0vKgotICog VGhlIHJiX2dlbigpIG1hY3JvIGdlbmVyYXRlcyBhIHR5cGUtc3BlY2lmaWMgcmVkLWJsYWNrIHRy ZWUgaW1wbGVtZW50YXRpb24sCi0gKiBiYXNlZCBvbiB0aGUgYWJvdmUgY3BwIG1hY3Jvcy4KLSAq IEFyZ3VtZW50czoKLSAqCi0gKiAgIGFfYXR0cjoKLSAqICAgICBGdW5jdGlvbiBhdHRyaWJ1dGUg Zm9yIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGV4OiBzdGF0aWMpLgotICogICBhX3ByZWZpeDoKLSAq ICAgICBQcmVmaXggZm9yIGdlbmVyYXRlZCBmdW5jdGlvbnMgKGV4OiBleF8pLgotICogICBhX3Ji X3R5cGU6Ci0gKiAgICAgVHlwZSBmb3IgcmVkLWJsYWNrIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgKGV4 OiBleF90KS4KLSAqICAgYV90eXBlOgotICogICAgIFR5cGUgZm9yIHJlZC1ibGFjayB0cmVlIG5v ZGUgZGF0YSBzdHJ1Y3R1cmUgKGV4OiBleF9ub2RlX3QpLgotICogICBhX2ZpZWxkOgotICogICAg IE5hbWUgb2YgcmVkLWJsYWNrIHRyZWUgbm9kZSBsaW5rYWdlIChleDogZXhfbGluaykuCi0gKiAg IGFfY21wOgotICogICAgIE5vZGUgY29tcGFyaXNvbiBmdW5jdGlvbiBuYW1lLCB3aXRoIHRoZSBm b2xsb3dpbmcgcHJvdG90eXBlOgotICoKLSAqICAgICBpbnQgYV9jbXAoYV90eXBlICphX25vZGUs IGFfdHlwZSAqYV9vdGhlcik7Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgotICog ICAgICAgICAgICAgICAgICAgICAgICBvciBhX2tleQotICogICAgIEludGVycHJldGF0aW9uIG9m IGNvbXBhcmlzb24gZnVuY3Rpb24gcmV0dXJuIHZhbHVlczoKLSAqICAgICAgIC0xIDogYV9ub2Rl IDwgIGFfb3RoZXIKLSAqICAgICAgICAwIDogYV9ub2RlID09IGFfb3RoZXIKLSAqICAgICAgICAx IDogYV9ub2RlID4gIGFfb3RoZXIKLSAqICAgICBJbiBhbGwgY2FzZXMsIHRoZSBhX25vZGUgb3Ig YV9rZXkgbWFjcm8gYXJndW1lbnQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvCi0gKiAgICAgdGhl IGNvbXBhcmlzb24gZnVuY3Rpb24sIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGNv bXBhcmlzb24KLSAqICAgICBmdW5jdGlvbnMgdGhhdCB0cmVhdCB0aGUgZmlyc3QgYXJndW1lbnQg c3BlY2lhbGx5LiAgYV9jbXAgbXVzdCBiZSBhIHRvdGFsCi0gKiAgICAgb3JkZXIgb24gdmFsdWVz IGluc2VydGVkIGludG8gdGhlIHRyZWUgLS0gZHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQuCi0g KgotICogQXNzdW1pbmcgdGhlIGZvbGxvd2luZyBzZXR1cDoKLSAqCi0gKiAgIHR5cGVkZWYgc3Ry dWN0IGV4X25vZGVfcyBleF9ub2RlX3Q7Ci0gKiAgIHN0cnVjdCBleF9ub2RlX3MgewotICogICAg ICAgcmJfbm9kZShleF9ub2RlX3QpIGV4X2xpbms7Ci0gKiAgIH07Ci0gKiAgIHR5cGVkZWYgcmJf dHJlZShleF9ub2RlX3QpIGV4X3Q7Ci0gKiAgIHJiX2dlbihzdGF0aWMsIGV4XywgZXhfdCwgZXhf bm9kZV90LCBleF9saW5rLCBleF9jbXApCi0gKgotICogVGhlIGZvbGxvd2luZyBBUEkgaXMgZ2Vu ZXJhdGVkOgotICoKLSAqICAgc3RhdGljIHZvaWQKLSAqICAgZXhfbmV3KGV4X3QgKnRyZWUpOwot ICogICAgICAgRGVzY3JpcHRpb246IEluaXRpYWxpemUgYSByZWQtYmxhY2sgdHJlZSBzdHJ1Y3R1 cmUuCi0gKiAgICAgICBBcmdzOgotICogICAgICAgICB0cmVlOiBQb2ludGVyIHRvIGFuIHVuaW5p dGlhbGl6ZWQgcmVkLWJsYWNrIHRyZWUgb2JqZWN0LgotICoKLSAqICAgc3RhdGljIGJvb2wKLSAq ICAgZXhfZW1wdHkoZXhfdCAqdHJlZSk7Ci0gKiAgICAgICBEZXNjcmlwdGlvbjogRGV0ZXJtaW5l IHdoZXRoZXIgdHJlZSBpcyBlbXB0eS4KLSAqICAgICAgIEFyZ3M6Ci0gKiAgICAgICAgIHRyZWU6 IFBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVkLWJsYWNrIHRyZWUgb2JqZWN0LgotICogICAg ICAgUmV0OiBUcnVlIGlmIHRyZWUgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4KLSAqCi0gKiAg IHN0YXRpYyBleF9ub2RlX3QgKgotICogICBleF9maXJzdChleF90ICp0cmVlKTsKLSAqICAgc3Rh dGljIGV4X25vZGVfdCAqCi0gKiAgIGV4X2xhc3QoZXhfdCAqdHJlZSk7Ci0gKiAgICAgICBEZXNj cmlwdGlvbjogR2V0IHRoZSBmaXJzdC9sYXN0IG5vZGUgaW4gdHJlZS4KLSAqICAgICAgIEFyZ3M6 Ci0gKiAgICAgICAgIHRyZWU6IFBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVkLWJsYWNrIHRy ZWUgb2JqZWN0LgotICogICAgICAgUmV0OiBGaXJzdC9sYXN0IG5vZGUgaW4gdHJlZSwgb3IgTlVM TCBpZiB0cmVlIGlzIGVtcHR5LgotICoKLSAqICAgc3RhdGljIGV4X25vZGVfdCAqCi0gKiAgIGV4 X25leHQoZXhfdCAqdHJlZSwgZXhfbm9kZV90ICpub2RlKTsKLSAqICAgc3RhdGljIGV4X25vZGVf dCAqCi0gKiAgIGV4X3ByZXYoZXhfdCAqdHJlZSwgZXhfbm9kZV90ICpub2RlKTsKLSAqICAgICAg IERlc2NyaXB0aW9uOiBHZXQgbm9kZSdzIHN1Y2Nlc3Nvci9wcmVkZWNlc3Nvci4KLSAqICAgICAg IEFyZ3M6Ci0gKiAgICAgICAgIHRyZWU6IFBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVkLWJs YWNrIHRyZWUgb2JqZWN0LgotICogICAgICAgICBub2RlOiBBIG5vZGUgaW4gdHJlZS4KLSAqICAg ICAgIFJldDogbm9kZSdzIHN1Y2Nlc3Nvci9wcmVkZWNlc3NvciBpbiB0cmVlLCBvciBOVUxMIGlm IG5vZGUgaXMKLSAqICAgICAgICAgICAgbGFzdC9maXJzdC4KLSAqCi0gKiAgIHN0YXRpYyBleF9u b2RlX3QgKgotICogICBleF9zZWFyY2goZXhfdCAqdHJlZSwgY29uc3QgZXhfbm9kZV90ICprZXkp OwotICogICAgICAgRGVzY3JpcHRpb246IFNlYXJjaCBmb3Igbm9kZSB0aGF0IG1hdGNoZXMga2V5 LgotICogICAgICAgQXJnczoKLSAqICAgICAgICAgdHJlZTogUG9pbnRlciB0byBhbiBpbml0aWFs aXplZCByZWQtYmxhY2sgdHJlZSBvYmplY3QuCi0gKiAgICAgICAgIGtleSA6IFNlYXJjaCBrZXku Ci0gKiAgICAgICBSZXQ6IE5vZGUgaW4gdHJlZSB0aGF0IG1hdGNoZXMga2V5LCBvciBOVUxMIGlm IG5vIG1hdGNoLgotICoKLSAqICAgc3RhdGljIGV4X25vZGVfdCAqCi0gKiAgIGV4X25zZWFyY2go ZXhfdCAqdHJlZSwgY29uc3QgZXhfbm9kZV90ICprZXkpOwotICogICBzdGF0aWMgZXhfbm9kZV90 ICoKLSAqICAgZXhfcHNlYXJjaChleF90ICp0cmVlLCBjb25zdCBleF9ub2RlX3QgKmtleSk7Ci0g KiAgICAgICBEZXNjcmlwdGlvbjogU2VhcmNoIGZvciBub2RlIHRoYXQgbWF0Y2hlcyBrZXkuICBJ ZiBubyBtYXRjaCBpcyBmb3VuZCwKLSAqICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2hhdCB3 b3VsZCBiZSBrZXkncyBzdWNjZXNzb3IvcHJlZGVjZXNzb3IsIHdlcmUKLSAqICAgICAgICAgICAg ICAgICAgICBrZXkgaW4gdHJlZS4KLSAqICAgICAgIEFyZ3M6Ci0gKiAgICAgICAgIHRyZWU6IFBv aW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgcmVkLWJsYWNrIHRyZWUgb2JqZWN0LgotICogICAgICAg ICBrZXkgOiBTZWFyY2gga2V5LgotICogICAgICAgUmV0OiBOb2RlIGluIHRyZWUgdGhhdCBtYXRj aGVzIGtleSwgb3IgaWYgbm8gbWF0Y2gsIGh5cG90aGV0aWNhbCBub2RlJ3MKLSAqICAgICAgICAg ICAgc3VjY2Vzc29yL3ByZWRlY2Vzc29yIChOVUxMIGlmIG5vIHN1Y2Nlc3Nvci9wcmVkZWNlc3Nv cikuCi0gKgotICogICBzdGF0aWMgdm9pZAotICogICBleF9pbnNlcnQoZXhfdCAqdHJlZSwgZXhf bm9kZV90ICpub2RlKTsKLSAqICAgICAgIERlc2NyaXB0aW9uOiBJbnNlcnQgbm9kZSBpbnRvIHRy ZWUuCi0gKiAgICAgICBBcmdzOgotICogICAgICAgICB0cmVlOiBQb2ludGVyIHRvIGFuIGluaXRp YWxpemVkIHJlZC1ibGFjayB0cmVlIG9iamVjdC4KLSAqICAgICAgICAgbm9kZTogTm9kZSB0byBi ZSBpbnNlcnRlZCBpbnRvIHRyZWUuCi0gKgotICogICBzdGF0aWMgdm9pZAotICogICBleF9yZW1v dmUoZXhfdCAqdHJlZSwgZXhfbm9kZV90ICpub2RlKTsKLSAqICAgICAgIERlc2NyaXB0aW9uOiBS ZW1vdmUgbm9kZSBmcm9tIHRyZWUuCi0gKiAgICAgICBBcmdzOgotICogICAgICAgICB0cmVlOiBQ b2ludGVyIHRvIGFuIGluaXRpYWxpemVkIHJlZC1ibGFjayB0cmVlIG9iamVjdC4KLSAqICAgICAg ICAgbm9kZTogTm9kZSBpbiB0cmVlIHRvIGJlIHJlbW92ZWQuCi0gKgotICogICBzdGF0aWMgZXhf bm9kZV90ICoKLSAqICAgZXhfaXRlcihleF90ICp0cmVlLCBleF9ub2RlX3QgKnN0YXJ0LCBleF9u b2RlX3QgKigqY2IpKGV4X3QgKiwKLSAqICAgICBleF9ub2RlX3QgKiwgdm9pZCAqKSwgdm9pZCAq YXJnKTsKLSAqICAgc3RhdGljIGV4X25vZGVfdCAqCi0gKiAgIGV4X3JldmVyc2VfaXRlcihleF90 ICp0cmVlLCBleF9ub2RlX3QgKnN0YXJ0LCBleF9ub2RlICooKmNiKShleF90ICosCi0gKiAgICAg ZXhfbm9kZV90ICosIHZvaWQgKiksIHZvaWQgKmFyZyk7Ci0gKiAgICAgICBEZXNjcmlwdGlvbjog SXRlcmF0ZSBmb3J3YXJkL2JhY2t3YXJkIG92ZXIgdHJlZSwgc3RhcnRpbmcgYXQgbm9kZS4gIElm Ci0gKiAgICAgICAgICAgICAgICAgICAgdHJlZSBpcyBtb2RpZmllZCwgaXRlcmF0aW9uIG11c3Qg YmUgaW1tZWRpYXRlbHkKLSAqICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkIGJ5IHRoZSBj YWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhdXNlcyB0aGUKLSAqICAgICAgICAgICAgICAgICAgICBt b2RpZmljYXRpb24uCi0gKiAgICAgICBBcmdzOgotICogICAgICAgICB0cmVlIDogUG9pbnRlciB0 byBhbiBpbml0aWFsaXplZCByZWQtYmxhY2sgdHJlZSBvYmplY3QuCi0gKiAgICAgICAgIHN0YXJ0 OiBOb2RlIGF0IHdoaWNoIHRvIHN0YXJ0IGl0ZXJhdGlvbiwgb3IgTlVMTCB0byBzdGFydCBhdAot ICogICAgICAgICAgICAgICAgZmlyc3QvbGFzdCBub2RlLgotICogICAgICAgICBjYiAgIDogQ2Fs bGJhY2sgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBmb3IgZWFjaCBub2RlIGR1cmluZwotICog ICAgICAgICAgICAgICAgaXRlcmF0aW9uLiAgVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgdGhl IGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiAgICAgICAgICAgICAgICBzaG91bGQgcmV0dXJuIE5VTEws IHdoaWNoIGNhdXNlcyBpdGVyYXRpb24gdG8gY29udGludWUuICBJZiBhCi0gKiAgICAgICAgICAg ICAgICBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIG5vbi1OVUxMLCBpdGVyYXRpb24gaXMgaW1t ZWRpYXRlbHkKLSAqICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgYW5kIHRoZSBub24tTlVMTCBy ZXR1cm4gdmFsdWUgaXMgcmV0dXJuZWQgYnkgdGhlCi0gKiAgICAgICAgICAgICAgICBpdGVyYXRv ci4gIFRoaXMgaXMgdXNlZnVsIGZvciByZS1zdGFydGluZyBpdGVyYXRpb24gYWZ0ZXIKLSAqICAg ICAgICAgICAgICAgIG1vZGlmeWluZyB0cmVlLgotICogICAgICAgICBhcmcgIDogT3BhcXVlIHBv aW50ZXIgcGFzc2VkIHRvIGNiKCkuCi0gKiAgICAgICBSZXQ6IE5VTEwgaWYgaXRlcmF0aW9uIGNv bXBsZXRlZCwgb3IgdGhlIG5vbi1OVUxMIGNhbGxiYWNrIHJldHVybiB2YWx1ZQotICogICAgICAg ICAgICB0aGF0IGNhdXNlZCB0ZXJtaW5hdGlvbiBvZiB0aGUgaXRlcmF0aW9uLgotICoKLSAqICAg c3RhdGljIHZvaWQKLSAqICAgZXhfZGVzdHJveShleF90ICp0cmVlLCB2b2lkICgqY2IpKGV4X25v ZGVfdCAqLCB2b2lkICopLCB2b2lkICphcmcpOwotICogICAgICAgRGVzY3JpcHRpb246IEl0ZXJh dGUgb3ZlciB0aGUgdHJlZSB3aXRoIHBvc3Qtb3JkZXIgdHJhdmVyc2FsLCByZW1vdmUKLSAqICAg ICAgICAgICAgICAgICAgICBlYWNoIG5vZGUsIGFuZCBydW4gdGhlIGNhbGxiYWNrIGlmIG5vbi1u dWxsLiAgVGhpcyBpcwotICogICAgICAgICAgICAgICAgICAgIHVzZWQgZm9yIGRlc3Ryb3lpbmcg YSB0cmVlIHdpdGhvdXQgcGF5aW5nIHRoZSBjb3N0IHRvCi0gKiAgICAgICAgICAgICAgICAgICAg cmViYWxhbmNlIGl0LiAgVGhlIHRyZWUgbXVzdCBub3QgYmUgb3RoZXJ3aXNlIGFsdGVyZWQKLSAq ICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdHJhdmVyc2FsLgotICogICAgICAgQXJnczoKLSAq ICAgICAgICAgdHJlZTogUG9pbnRlciB0byBhbiBpbml0aWFsaXplZCByZWQtYmxhY2sgdHJlZSBv YmplY3QuCi0gKiAgICAgICAgIGNiICA6IENhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCwgaWYgbm9u LW51bGwsIGlzIGNhbGxlZCBmb3IgZWFjaCBub2RlCi0gKiAgICAgICAgICAgICAgIGR1cmluZyBp dGVyYXRpb24uICBUaGVyZSBpcyBubyB3YXkgdG8gc3RvcCBpdGVyYXRpb24gb25jZSBpdAotICog ICAgICAgICAgICAgICBoYXMgYmVndW4uCi0gKiAgICAgICAgIGFyZyA6IE9wYXF1ZSBwb2ludGVy IHBhc3NlZCB0byBjYigpLgotICoKLSAqIFRoZSByYl9zdW1tYXJpemVkX2dlbigpIG1hY3JvIGdl bmVyYXRlcyBhbGwgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgYnV0IGhhcyBhbgotICogZXhwYW5kZWQg aW50ZXJmYWNlLiAgSW4gaW50cm9kdWNlcyB0aGUgbm90aW9uIG9mIHN1bW1hcml6aW5nIHN1YnRy ZWVzLCBhbmQgb2YKLSAqIGZpbHRlcmluZyBzZWFyY2hlcyBpbiB0aGUgdHJlZSBhY2NvcmRpbmcg dG8gdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbgotICogdGhvc2Ugc3VtbWFyaWVzLgotICog VGhlIGV4dHJhIG1hY3JvIGFyZ3VtZW50IGlzOgotICogICBhX3N1bW1hcml6ZToKLSAqICAgICBU cmVlIHN1bW1hcml6YXRpb24gZnVuY3Rpb24gbmFtZSwgd2l0aCB0aGUgZm9sbG93aW5nIHByb3Rv dHlwZToKLSAqCi0gKiAgICAgYm9vbCBhX3N1bW1hcml6ZShhX3R5cGUgKmFfbm9kZSwgY29uc3Qg YV90eXBlICphX2xlZnRfY2hpbGQsCi0gKiAgICAgICAgIGNvbnN0IGFfdHlwZSAqYV9yaWdodF9j aGlsZCk7Ci0gKgotICogICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHVwZGF0ZSBhX25vZGUgd2l0 aCB0aGUgc3VtbWFyeSBvZiB0aGUgc3VidHJlZSByb290ZWQKLSAqICAgICB0aGVyZSwgdXNpbmcg dGhlIGRhdGEgY29udGFpbmVkIGluIGl0IGFuZCB0aGUgc3VtbWFyaWVzIGluIGFfbGVmdF9jaGls ZAotICogICAgIGFuZCBhX3JpZ2h0X2NoaWxkLiAgT25lIG9yIGJvdGggb2YgdGhlbSBtYXkgYmUg TlVMTC4gIFdoZW4gdGhlIHRyZWUKLSAqICAgICBjaGFuZ2VzIGR1ZSB0byBhbiBpbnNlcnRpb24g b3IgcmVtb3ZhbCwgaXQgdXBkYXRlcyB0aGUgc3VtbWFyaWVzIG9mIGFsbAotICogICAgIG5vZGVz IHdob3NlIHN1YnRyZWVzIGhhdmUgY2hhbmdlZCAoYWx3YXlzIHVwZGF0aW5nIHRoZSBzdW1tYXJp ZXMgb2YKLSAqICAgICBjaGlsZHJlbiBiZWZvcmUgdGhlaXIgcGFyZW50cykuICBJZiB0aGUgdXNl ciBhbHRlcnMgYSBub2RlIGluIHRoZSB0cmVlIGluCi0gKiAgICAgYSB3YXkgdGhhdCBtYXkgY2hh bmdlIGl0cyBzdW1tYXJ5LCB0aGV5IGNhbiBjYWxsIHRoZSBnZW5lcmF0ZWQKLSAqICAgICB1cGRh dGVfc3VtbWFyaWVzIGZ1bmN0aW9uIHRvIGJ1YmJsZSB1cCB0aGUgc3VtbWFyeSBjaGFuZ2VzIHRv IHRoZSByb290LgotICogICAgIEl0IHNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgc3VtbWFyeSBj aGFuZ2VkIChvciBtYXkgaGF2ZSBjaGFuZ2VkKSwgYW5kCi0gKiAgICAgZmFsc2UgaWYgaXQgZGlk bid0ICh3aGljaCB3aWxsIGFsbG93IHRoZSBpbXBsZW1lbnRhdGlvbiB0byB0ZXJtaW5hdGUKLSAq ICAgICAiYnViYmxpbmcgdXAiIHRoZSBzdW1tYXJpZXMgZWFybHkpLgotICogICAgIEFzIHRoZSBw YXJhbWV0ZXIgbmFtZXMgaW5kaWNhdGUsIHRoZSBjaGlsZHJlbiBhcmUgb3JkZXJlZCBhcyB0aGV5 IGFyZSBpbgotICogICAgIHRoZSB0cmVlLCBhX2xlZnRfY2hpbGQsIGlmIGl0IGlzIG5vdCBOVUxM LCBjb21wYXJlcyBsZXNzIHRoYW4gYV9ub2RlLAotICogICAgIHdoaWNoIGluIHR1cm4gY29tcGFy ZXMgbGVzcyB0aGFuIGFfcmlnaHRfY2hpbGQgKGlmIGFfcmlnaHRfY2hpbGQgaXMgbm90Ci0gKiAg ICAgTlVMTCkuCi0gKgotICogVXNpbmcgdGhlIHNhbWUgc2V0dXAgYXMgYWJvdmUgYnV0IHJlcGxh Y2luZyB0aGUgbWFjcm8gd2l0aAotICogICByYl9zdW1tYXJpemVkX2dlbihzdGF0aWMsIGV4Xywg ZXhfdCwgZXhfbm9kZV90LCBleF9saW5rLCBleF9jbXAsCi0gKiAgICAgICBleF9zdW1tYXJpemUp Ci0gKgotICogR2VuZXJhdGVzIGFsbCB0aGUgcHJldmlvdXMgZnVuY3Rpb25zLCBidXQgYWRkcyBz b21lIG1vcmU6Ci0gKgotICogICBzdGF0aWMgdm9pZAotICogICBleF91cGRhdGVfc3VtbWFyaWVz KGV4X3QgKnRyZWUsIGV4X25vZGVfdCAqbm9kZSk7Ci0gKiAgICAgICBEZXNjcmlwdGlvbjogUmVj b21wdXRlIGFsbCBzdW1tYXJpZXMgb2YgYW5jZXN0b3JzIG9mIG5vZGUuCi0gKiAgICAgICBBcmdz OgotICogICAgICAgICB0cmVlOiBQb2ludGVyIHRvIGFuIGluaXRpYWxpemVkIHJlZC1ibGFjayB0 cmVlIG9iamVjdC4KLSAqICAgICAgICAgbm9kZTogVGhlIGVsZW1lbnQgb2YgdGhlIHRyZWUgd2hv c2Ugc3VtbWFyeSBtYXkgaGF2ZSBjaGFuZ2VkLgotICoKLSAqIEZvciBlYWNoIG9mIGV4X2VtcHR5 LCBleF9maXJzdCwgZXhfbGFzdCwgZXhfbmV4dCwgZXhfcHJldiwgZXhfc2VhcmNoLAotICogZXhf bnNlYXJjaCwgZXhfcHNlYXJjaCwgZXhfaXRlciwgYW5kIGV4X3JldmVyc2VfaXRlciwgYW4gYWRk aXRpb25hbCBmdW5jdGlvbgotICogaXMgZ2VuZXJhdGVkIGFzIHdlbGwsIHdpdGggdGhlIHN1ZmZp eCBfZmlsdGVyZWQgKGUuZy4gZXhfZW1wdHlfZmlsdGVyZWQsCi0gKiBleF9maXJzdF9maWx0ZXJl ZCwgZXRjLikuICBUaGVzZSB1c2UgdGhlIGNvbmNlcHQgb2YgYSAiZmlsdGVyIjsgYSBiaW5hcnkK LSAqIHByb3BlcnR5IHNvbWUgbm9kZSBlaXRoZXIgc2F0aXNmaWVzIG9yIGRvZXMgbm90IHNhdGlz ZnkuICBDbGV2ZXIgdXNlIG9mIHRoZQotICogYV9zdW1tYXJ5IGFyZ3VtZW50IHRvIHJiX3N1bW1h cml6ZWRfZ2VuIGNhbiBhbGxvdyBlZmZpY2llbnQgY29tcHV0YXRpb24gb2YKLSAqIHRoZXNlIHBy ZWRpY2F0ZXMgYWNyb3NzIHdob2xlIHN1YnRyZWVzIG9mIHRoZSB0cmVlLgotICogVGhlIGV4dGVu ZGVkIEFQSSBmdW5jdGlvbnMgYWNjZXB0IHRocmVlIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFmdGVy IHRoZQotICogYXJndW1lbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIG5vbi1leHRlbmRlZCBlcXVp dmFsZW50LgotICoKLSAqIGV4X2ZuKC4uLiwgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICosIGV4 X25vZGVfdCAqKSwKLSAqICAgICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgZXhfbm9k ZV90ICopLCB2b2lkICpmaWx0ZXJfY3R4KTsKLSAqICAgICAgICAgZmlsdGVyX25vZGUgICAgOiBS ZXR1cm5zIHRydWUgaWYgdGhlIG5vZGUgcGFzc2VzIHRoZSBmaWx0ZXIuCi0gKiAgICAgICAgIGZp bHRlcl9zdWJ0cmVlIDogUmV0dXJucyB0cnVlIGlmIHNvbWUgbm9kZSBpbiB0aGUgc3VidHJlZSBy b290ZWQgYXQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIHBhc3NlcyB0aGUgZmls dGVyLgotICogICAgICAgICBmaWx0ZXJfY3R4ICAgICA6IEEgY29udGV4dCBhcmd1bWVudCBwYXNz ZWQgdG8gdGhlIGZpbHRlcnMuCi0gKgotICogRm9yIGEgbW9yZSBjb25jcmV0ZSBleGFtcGxlIG9m IHN1bW1hcml6aW5nIGFuZCBmaWx0ZXJpbmcsIHN1cHBvc2Ugd2UncmUgdXNpbmcKLSAqIHRoZSBy ZWQtYmxhY2sgdHJlZSB0byB0cmFjayBhIHNldCBvZiBpbnRlZ2VyczoKLSAqCi0gKiBzdHJ1Y3Qg ZXhfbm9kZV9zIHsKLSAqICAgICByYl9ub2RlKGV4X25vZGVfdCkgZXhfbGluazsKLSAqICAgICB1 bnNpZ25lZCBkYXRhOwotICogfTsKLSAqCi0gKiBTdXBwb3NlLCBmb3Igc29tZSBhcHBsaWNhdGlv bi1zcGVjaWZpYyByZWFzb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBxdWlja2x5Ci0gKiBmaW5k IG51bWJlcnMgaW4gdGhlIHNldCB3aGljaCBhcmUgZGl2aXNpYmxlIGJ5IGxhcmdlIHBvd2VycyBv ZiAyIChzYXksIGZvcgotICogYWxpZ25lZCBhbGxvY2F0aW9uIHB1cnBvc2VzKS4gIFdlIGF1Z21l bnQgdGhlIG5vZGUgd2l0aCBhIHN1bW1hcnkgZmllbGQ6Ci0gKgotICogc3RydWN0IGV4X25vZGVf cyB7Ci0gKiAgICAgcmJfbm9kZShleF9ub2RlX3QpIGV4X2xpbms7Ci0gKiAgICAgdW5zaWduZWQg ZGF0YTsKLSAqICAgICB1bnNpZ25lZCBtYXhfc3VidHJlZV9mZnM7Ci0gKiB9Ci0gKgotICogYW5k IGRlZmluZSBvdXIgc3VtbWFyaXphdGlvbiBmdW5jdGlvbiBhcyBmb2xsb3dzOgotICoKLSAqIGJv b2wKLSAqIGV4X3N1bW1hcml6ZShleF9ub2RlX3QgKm5vZGUsIGNvbnN0IGV4X25vZGVfdCAqbGNo aWxkLAotICogICBjb25zdCBleF9ub2RlX3QgKnJjaGlsZCkgewotICogICAgIHVuc2lnbmVkIG5l d19tYXhfc3VidHJlZV9mZnMgPSBmZnMobm9kZS0+ZGF0YSk7Ci0gKiAgICAgaWYgKGxjaGlsZCAh PSBOVUxMICYmIGxjaGlsZC0+bWF4X3N1YnRyZWVfZmZzID4gbmV3X21heF9zdWJ0cmVlX2Zmcykg ewotICogICAgICAgICBuZXdfbWF4X3N1YnRyZWVfZmZzID0gbGNoaWxkLT5tYXhfc3VidHJlZV9m ZnM7Ci0gKiAgICAgfQotICogICAgIGlmIChyY2hpbGQgIT0gTlVMTCAmJiByY2hpbGQtPm1heF9z dWJ0cmVlX2ZmcyA+IG5ld19tYXhfc3VidHJlZV9mZnMpIHsKLSAqICAgICAgICAgbmV3X21heF9z dWJ0cmVlX2ZmcyA9IHJjaGlsZC0+bWF4X3N1YnRyZWVfZmZzOwotICogICAgIH0KLSAqICAgICBi b29sIGNoYW5nZWQgPSAobm9kZS0+bWF4X3N1YnRyZWVfZmZzICE9IG5ld19tYXhfc3VidHJlZV9m ZnMpCi0gKiAgICAgbm9kZS0+bWF4X3N1YnRyZWVfZmZzID0gbmV3X21heF9zdWJ0cmVlX2ZmczsK LSAqICAgICAvLyBUaGlzIGNvdWxkIGJlICJyZXR1cm4gdHJ1ZSIgd2l0aG91dCBhbnkgY29ycmVj dG5lc3Mgb3IgYmlnLU8KLSAqICAgICAvLyBwZXJmb3JtYW5jZSBjaGFuZ2VzOyBidXQgcHJhY3Rp Y2FsbHksIHByZWNpc2VseSByZXBvcnRpbmcgc3VtbWFyeQotICogICAgIC8vIGNoYW5nZXMgcmVk dWNlcyB0aGUgYW1vdW50IG9mIHdvcmsgdGhhdCBoYXMgdG8gYmUgZG9uZSB3aGVuICJidWJibGlu ZwotICogICAgIC8vIHVwIiBzdW1tYXJ5IGNoYW5nZXMuCi0gKiAgICAgcmV0dXJuIGNoYW5nZWQ7 Ci0gKiB9Ci0gKgotICogV2UgY2FuIG5vdyBpbXBsZW1lbnQgb3VyIGZpbHRlciBmdW5jdGlvbnMg YXMgZm9sbG93czoKLSAqIGJvb2wKLSAqIGV4X2ZpbHRlcl9ub2RlKHZvaWQgKmZpbHRlcl9jdHgs IGV4X25vZGVfdCAqbm9kZSkgewotICogICAgIHVuc2lnbmVkIHJlcXVpcmVkX2ZmcyA9ICoodW5z aWduZWQgKilmaWx0ZXJfY3R4OwotICogICAgIHJldHVybiBmZnMobm9kZS0+ZGF0YSkgPj0gcmVx dWlyZWRfZmZzOwotICogfQotICogYm9vbAotICogZXhfZmlsdGVyX3N1YnRyZWUodm9pZCAqZmls dGVyX2N0eCwgZXhfbm9kZV90ICpub2RlKSB7Ci0gKiAgICAgdW5zaWduZWQgcmVxdWlyZWRfZmZz ID0gKih1bnNpZ25lZCAqKWZpbHRlcl9jdHg7Ci0gKiAgICAgcmV0dXJuIG5vZGUtPm1heF9zdWJ0 cmVlX2ZmcyA+PSByZXF1aXJlZF9mZnM7Ci0gKiB9Ci0gKgotICogV2UgY2FuIG5vdyBlYXNpbHkg c2VhcmNoIGZvciwgZS5nLiwgdGhlIHNtYWxsZXN0IGludGVnZXIgaW4gdGhlIHNldCB0aGF0J3MK LSAqIGRpdmlzaWJsZSBieSAxMjg6Ci0gKiBleF9ub2RlX3QgKgotICogZmluZF9kaXZfMTI4KGV4 X3RyZWVfdCAqdHJlZSkgewotICogICAgIHVuc2lnbmVkIG1pbl9mZnMgPSA3OwotICogICAgIHJl dHVybiBleF9maXJzdF9maWx0ZXJlZCh0cmVlLCAmZXhfZmlsdGVyX25vZGUsICZleF9maWx0ZXJf c3VidHJlZSwKLSAqICAgICAgICAgJm1pbl9mZnMpOwotICogfQotICoKLSAqIFdlIGNvdWxkIHdp dGggc2ltaWxhciBlYXNlOgotICogLSBGbmQgdGhlIG5leHQgbXVsdGlwbGUgb2YgMTI4IGluIHRo ZSBzZXQgdGhhdCdzIGxhcmdlciB0aGFuIDEyMzQ1ICh3aXRoCi0gKiAgIGV4X25zZWFyY2hfZmls dGVyZWQpCi0gKiAtIEl0ZXJhdGUgb3ZlciBqdXN0IHRob3NlIG11bHRpcGxlcyBvZiA2NCB0aGF0 IGFyZSBpbiB0aGUgc2V0ICh3aXRoCi0gKiAgIGV4X2l0ZXJfZmlsdGVyZWQpCi0gKiAtIERldGVy bWluZSBpZiB0aGUgc2V0IGNvbnRhaW5zIGFueSBtdWx0aXBsZXMgb2YgMTAyNCAod2l0aAotICog ICBleF9lbXB0eV9maWx0ZXJlZCkuCi0gKgotICogU29tZSBwb3NzaWJseSBzdWJ0bGUgQVBJIG5v dGVzOgotICogLSBUaGUgbm9kZSBhcmd1bWVudCB0byBleF9uZXh0X2ZpbHRlcmVkIGFuZCBleF9w cmV2X2ZpbHRlcmVkIG5lZWQgbm90IHBhc3MKLSAqICAgdGhlIGZpbHRlcjsgaXQgd2lsbCBmaW5k IHRoZSBuZXh0L3ByZXYgbm9kZSB0aGF0IHBhc3NlcyB0aGUgZmlsdGVyLgotICogLSBleF9zZWFy Y2hfZmlsdGVyZWQgd2lsbCBmYWlsIGV2ZW4gZm9yIGEgbm9kZSBpbiB0aGUgdHJlZSwgaWYgdGhh dCBub2RlIGRvZXMKLSAqICAgbm90IHBhc3MgdGhlIGZpbHRlci4gIGV4X3BzZWFyY2hfZmlsdGVy ZWQgYW5kIGV4X25zZWFyY2hfZmlsdGVyZWQgYmVoYXZlCi0gKiAgIHNpbWlsYXJseTsgdGhleSBt YXkgcmV0dXJuIGEgbm9kZSBsYXJnZXIvc21hbGxlciB0aGFuIHRoZSBrZXksIGV2ZW4gaWYgYQot ICogICBub2RlIGVxdWl2YWxlbnQgdG8gdGhlIGtleSBpcyBpbiB0aGUgdHJlZSAoYnV0IGRvZXMg bm90IHBhc3MgdGhlIGZpbHRlcikuCi0gKiAtIFNpbWlsYXJseSwgaWYgdGhlIHN0YXJ0IGFyZ3Vt ZW50IHRvIGEgZmlsdGVyZWQgaXRlcmF0aW9uIGZ1bmN0aW9uIGRvZXMgbm90Ci0gKiAgIHBhc3Mg dGhlIGZpbHRlciwgdGhlIGNhbGxiYWNrIHdvbid0IGJlIGludm9rZWQgb24gaXQuCi0gKgotICog VGhlc2Ugc2hvdWxkIG1ha2Ugc2Vuc2UgYWZ0ZXIgYSBtb21lbnQncyByZWZsZWN0aW9uOyBlYWNo IHBvc3QtY29uZGl0aW9uIGlzCi0gKiB0aGUgc2FtZSBhcyB3aXRoIHRoZSB1bmZpbHRlcmVkIHZl cnNpb24sIHdpdGggdGhlIGFkZGVkIGNvbnN0cmFpbnQgdGhhdCB0aGUKLSAqIHJldHVybmVkIG5v ZGUgbXVzdCBwYXNzIHRoZSBmaWx0ZXIuCi0gKi8KLSNkZWZpbmUgcmJfZ2VuKGFfYXR0ciwgYV9w cmVmaXgsIGFfcmJ0X3R5cGUsIGFfdHlwZSwgYV9maWVsZCwgYV9jbXApCVwKLSAgICByYl9nZW5f aW1wbChhX2F0dHIsIGFfcHJlZml4LCBhX3JidF90eXBlLCBhX3R5cGUsIGFfZmllbGQsIGFfY21w LAlcCi0JcmJfZW1wdHlfc3VtbWFyaXplLCBmYWxzZSkKLSNkZWZpbmUgcmJfc3VtbWFyaXplZF9n ZW4oYV9hdHRyLCBhX3ByZWZpeCwgYV9yYnRfdHlwZSwgYV90eXBlLAkJXAotICAgIGFfZmllbGQs IGFfY21wLCBhX3N1bW1hcml6ZSkJCQkJCVwKLSAgICByYl9nZW5faW1wbChhX2F0dHIsIGFfcHJl Zml4LCBhX3JidF90eXBlLCBhX3R5cGUsIGFfZmllbGQsIGFfY21wLAlcCi0JYV9zdW1tYXJpemUs IHRydWUpCi0KLSNkZWZpbmUgcmJfZ2VuX2ltcGwoYV9hdHRyLCBhX3ByZWZpeCwgYV9yYnRfdHlw ZSwgYV90eXBlLAkJXAotICAgIGFfZmllbGQsIGFfY21wLCBhX3N1bW1hcml6ZSwgYV9pc19zdW1t YXJpemVkKQkJCVwKLXR5cGVkZWYgc3RydWN0IHsJCQkJCQkJXAotICAgIGFfdHlwZSAqbm9kZTsJ CQkJCQkJXAotICAgIGludCBjbXA7CQkJCQkJCQlcCi19IGFfcHJlZml4IyNwYXRoX2VudHJ5X3Q7 CQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkCQkJCQkJCVwKLWFfcHJlZml4IyNzdW1tYXJpemVf cmFuZ2UoYV9wcmVmaXgjI3BhdGhfZW50cnlfdCAqcmZpcnN0LAkJXAotICAgIGFfcHJlZml4IyNw YXRoX2VudHJ5X3QgKnJsYXN0KSB7CQkJCQlcCi0gICAgd2hpbGUgKCh1aW50cHRyX3Qpcmxhc3Qg Pj0gKHVpbnRwdHJfdClyZmlyc3QpIHsJCQlcCi0JYV90eXBlICpub2RlID0gcmxhc3QtPm5vZGU7 CQkJCQlcCi0JLyogQXZvaWQgYSB3YXJuaW5nIHdoZW4gYV9zdW1tYXJpemUgaXMgcmJfZW1wdHlf c3VtbWFyaXplLiAqLwlcCi0JKHZvaWQpbm9kZTsJCQkJCQkJXAotCWJvb2wgY2hhbmdlZCA9IGFf c3VtbWFyaXplKG5vZGUsIHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLAlcCi0JICAgIG5v ZGUpLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpKTsJCVwKLQlpZiAoIWNo YW5nZWQpIHsJCQkJCQkJXAotCQlicmVhazsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQlybGFzdC0t OwkJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLX0JCQkJCQkJCQlcCi0vKiBPbiB0aGUgcmVtb3Zl IHBhdGh3YXlzLCB3ZSBzb21ldGltZXMgc3dhcCB0aGUgbm9kZSBiZWluZyByZW1vdmVkICAgKi9c Ci0vKiBhbmQgaXRzIGZpcnN0IHN1Y2Nlc3NvcjsgaW4gc3VjaCBjYXNlcyB3ZSBuZWVkIHRvIGRv IHR3byByYW5nZSAgICAgKi9cCi0vKiB1cGRhdGVzOyBvbmUgZnJvbSB0aGUgbm9kZSB0byBpdHMg KGZvcm1lcikgc3dhcHBlZCBzdWNjZXNzb3IsIHRoZSAgKi9cCi0vKiBuZXh0IGZyb20gdGhhdCBz dWNjZXNzb3IgdG8gdGhlIHJvb3QgKHdpdGggZWl0aGVyIGFsbG93ZWQgdG8gICAgICAgKi9cCi0v KiBiYWlsIG91dCBlYXJseSBpZiBhcHByb3ByaWF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi9cCi1zdGF0aWMgaW5saW5lIHZvaWQJCQkJCQkJXAotYV9wcmVmaXgjI3N1 bW1hcml6ZV9zd2FwcGVkX3JhbmdlKGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgKnJmaXJzdCwJXAot ICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgKnJsYXN0LCBhX3ByZWZpeCMjcGF0aF9lbnRyeV90 ICpzd2FwX2xvYykgewlcCi0JaWYgKHN3YXBfbG9jID09IE5VTEwgfHwgcmxhc3QgPD0gc3dhcF9s b2MpIHsJCQlcCi0JCWFfcHJlZml4IyNzdW1tYXJpemVfcmFuZ2UocmZpcnN0LCBybGFzdCk7CQlc Ci0JfSBlbHNlIHsJCQkJCQkJXAotCQlhX3ByZWZpeCMjc3VtbWFyaXplX3JhbmdlKHN3YXBfbG9j ICsgMSwgcmxhc3QpOwkJXAotCQkodm9pZClhX3N1bW1hcml6ZShzd2FwX2xvYy0+bm9kZSwJCQlc Ci0JCSAgICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgc3dhcF9sb2MtPm5vZGUpLAlc Ci0JCSAgICByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHN3YXBfbG9jLT5ub2RlKSk7 CVwKLQkJYV9wcmVmaXgjI3N1bW1hcml6ZV9yYW5nZShyZmlyc3QsIHN3YXBfbG9jIC0gMSk7CVwK LQl9CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4 IyNuZXcoYV9yYnRfdHlwZSAqcmJ0cmVlKSB7CQkJCQlcCi0gICAgcmJfbmV3KGFfdHlwZSwgYV9m aWVsZCwgcmJ0cmVlKTsJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYm9vbAkJCQkJCQkJXAot YV9wcmVmaXgjI2VtcHR5KGFfcmJ0X3R5cGUgKnJidHJlZSkgewkJCQkJXAotICAgIHJldHVybiAo cmJ0cmVlLT5yYnRfcm9vdCA9PSBOVUxMKTsJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90 eXBlICoJCQkJCQkJCVwKLWFfcHJlZml4IyNmaXJzdChhX3JidF90eXBlICpyYnRyZWUpIHsJCQkJ CVwKLSAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAotICAgIHJidG5fZmlyc3QoYV90eXBlLCBhX2Zp ZWxkLCByYnRyZWUsIHJidHJlZS0+cmJ0X3Jvb3QsIHJldCk7CQlcCi0gICAgcmV0dXJuIHJldDsJ CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKLWFfcHJlZml4 IyNsYXN0KGFfcmJ0X3R5cGUgKnJidHJlZSkgewkJCQkJXAotICAgIGFfdHlwZSAqcmV0OwkJCQkJ CQlcCi0gICAgcmJ0bl9sYXN0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLCByYnRyZWUtPnJidF9y b290LCByZXQpOwkJXAotICAgIHJldHVybiByZXQ7CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9h dHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjbmV4dChhX3JidF90eXBlICpyYnRyZWUs IGFfdHlwZSAqbm9kZSkgewkJCVwKLSAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAotICAgIGlmIChy YnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpICE9IE5VTEwpIHsJCVwKLQlyYnRu X2ZpcnN0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsCVwK LQkgIGFfZmllbGQsIG5vZGUpLCByZXQpOwkJCQkJCVwKLSAgICB9IGVsc2UgewkJCQkJCQkJXAot CWFfdHlwZSAqdG5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQlcCi0JYXNzZXJ0KHRub2RlICE9 IE5VTEwpOwkJCQkJCVwKLQlyZXQgPSBOVUxMOwkJCQkJCQlcCi0Jd2hpbGUgKHRydWUpIHsJCQkJ CQkJXAotCSAgICBpbnQgY21wID0gKGFfY21wKShub2RlLCB0bm9kZSk7CQkJCVwKLQkgICAgaWYg KGNtcCA8IDApIHsJCQkJCQlcCi0JCXJldCA9IHRub2RlOwkJCQkJCVwKLQkJdG5vZGUgPSByYnRu X2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAotCSAgICB9IGVsc2UgaWYgKGNt cCA+IDApIHsJCQkJCVwKLQkJdG5vZGUgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQs IHRub2RlKTsJCVwKLQkgICAgfSBlbHNlIHsJCQkJCQkJXAotCQlicmVhazsJCQkJCQkJXAotCSAg ICB9CQkJCQkJCQlcCi0JICAgIGFzc2VydCh0bm9kZSAhPSBOVUxMKTsJCQkJCVwKLQl9CQkJCQkJ CQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgICByZXR1cm4gcmV0OwkJCQkJCQkJXAotfQkJCQkJCQkJ CVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9wcmVmaXgjI3ByZXYoYV9yYnRfdHlwZSAq cmJ0cmVlLCBhX3R5cGUgKm5vZGUpIHsJCQlcCi0gICAgYV90eXBlICpyZXQ7CQkJCQkJCVwKLSAg ICBpZiAocmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpICE9IE5VTEwpIHsJCQlc Ci0JcmJ0bl9sYXN0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLCByYnRuX2xlZnRfZ2V0KGFfdHlw ZSwJXAotCSAgYV9maWVsZCwgbm9kZSksIHJldCk7CQkJCQkJXAotICAgIH0gZWxzZSB7CQkJCQkJ CQlcCi0JYV90eXBlICp0bm9kZSA9IHJidHJlZS0+cmJ0X3Jvb3Q7CQkJCVwKLQlhc3NlcnQodG5v ZGUgIT0gTlVMTCk7CQkJCQkJXAotCXJldCA9IE5VTEw7CQkJCQkJCVwKLQl3aGlsZSAodHJ1ZSkg ewkJCQkJCQlcCi0JICAgIGludCBjbXAgPSAoYV9jbXApKG5vZGUsIHRub2RlKTsJCQkJXAotCSAg ICBpZiAoY21wIDwgMCkgewkJCQkJCVwKLQkJdG5vZGUgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwg YV9maWVsZCwgdG5vZGUpOwkJXAotCSAgICB9IGVsc2UgaWYgKGNtcCA+IDApIHsJCQkJCVwKLQkJ cmV0ID0gdG5vZGU7CQkJCQkJXAotCQl0bm9kZSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9m aWVsZCwgdG5vZGUpOwkJXAotCSAgICB9IGVsc2UgewkJCQkJCQlcCi0JCWJyZWFrOwkJCQkJCQlc Ci0JICAgIH0JCQkJCQkJCVwKLQkgICAgYXNzZXJ0KHRub2RlICE9IE5VTEwpOwkJCQkJXAotCX0J CQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiByZXQ7CQkJCQkJCQlcCi19CQkJ CQkJCQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjc2VhcmNoKGFfcmJ0 X3R5cGUgKnJidHJlZSwgY29uc3QgYV90eXBlICprZXkpIHsJCVwKLSAgICBhX3R5cGUgKnJldDsJ CQkJCQkJXAotICAgIGludCBjbXA7CQkJCQkJCQlcCi0gICAgcmV0ID0gcmJ0cmVlLT5yYnRfcm9v dDsJCQkJCQlcCi0gICAgd2hpbGUgKHJldCAhPSBOVUxMCQkJCQkJCVwKLSAgICAgICYmIChjbXAg PSAoYV9jbXApKGtleSwgcmV0KSkgIT0gMCkgewkJCQlcCi0JaWYgKGNtcCA8IDApIHsJCQkJCQkJ XAotCSAgICByZXQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcmV0KTsJCQlcCi0J fSBlbHNlIHsJCQkJCQkJXAotCSAgICByZXQgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmll bGQsIHJldCk7CQkJXAotCX0JCQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiBy ZXQ7CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3By ZWZpeCMjbnNlYXJjaChhX3JidF90eXBlICpyYnRyZWUsIGNvbnN0IGFfdHlwZSAqa2V5KSB7CQlc Ci0gICAgYV90eXBlICpyZXQ7CQkJCQkJCVwKLSAgICBhX3R5cGUgKnRub2RlID0gcmJ0cmVlLT5y YnRfcm9vdDsJCQkJCVwKLSAgICByZXQgPSBOVUxMOwkJCQkJCQkJXAotICAgIHdoaWxlICh0bm9k ZSAhPSBOVUxMKSB7CQkJCQkJXAotCWludCBjbXAgPSAoYV9jbXApKGtleSwgdG5vZGUpOwkJCQkJ XAotCWlmIChjbXAgPCAwKSB7CQkJCQkJCVwKLQkgICAgcmV0ID0gdG5vZGU7CQkJCQkJXAotCSAg ICB0bm9kZSA9IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCB0bm9kZSk7CQlcCi0JfSBl bHNlIGlmIChjbXAgPiAwKSB7CQkJCQkJXAotCSAgICB0bm9kZSA9IHJidG5fcmlnaHRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkgICAgcmV0ID0g dG5vZGU7CQkJCQkJXAotCSAgICBicmVhazsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLSAgICB9CQkJ CQkJCQkJXAotICAgIHJldHVybiByZXQ7CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIGFf dHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjcHNlYXJjaChhX3JidF90eXBlICpyYnRyZWUsIGNv bnN0IGFfdHlwZSAqa2V5KSB7CQlcCi0gICAgYV90eXBlICpyZXQ7CQkJCQkJCVwKLSAgICBhX3R5 cGUgKnRub2RlID0gcmJ0cmVlLT5yYnRfcm9vdDsJCQkJCVwKLSAgICByZXQgPSBOVUxMOwkJCQkJ CQkJXAotICAgIHdoaWxlICh0bm9kZSAhPSBOVUxMKSB7CQkJCQkJXAotCWludCBjbXAgPSAoYV9j bXApKGtleSwgdG5vZGUpOwkJCQkJXAotCWlmIChjbXAgPCAwKSB7CQkJCQkJCVwKLQkgICAgdG5v ZGUgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAotCX0gZWxzZSBp ZiAoY21wID4gMCkgewkJCQkJCVwKLQkgICAgcmV0ID0gdG5vZGU7CQkJCQkJXAotCSAgICB0bm9k ZSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUpOwkJXAotCX0gZWxzZSB7 CQkJCQkJCVwKLQkgICAgcmV0ID0gdG5vZGU7CQkJCQkJXAotCSAgICBicmVhazsJCQkJCQkJXAot CX0JCQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiByZXQ7CQkJCQkJCQlcCi19 CQkJCQkJCQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4IyNpbnNlcnQoYV9yYnRf dHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUpIHsJCQlcCi0gICAgYV9wcmVmaXgjI3BhdGhfZW50 cnlfdCBwYXRoW1JCX01BWF9ERVBUSF07CQkJXAotICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5X3Qg KnBhdGhwOwkJCQkJXAotICAgIHJidF9ub2RlX25ldyhhX3R5cGUsIGFfZmllbGQsIHJidHJlZSwg bm9kZSk7CQkJXAotICAgIC8qIFdpbmQuICovCQkJCQkJCQlcCi0gICAgcGF0aC0+bm9kZSA9IHJi dHJlZS0+cmJ0X3Jvb3Q7CQkJCQlcCi0gICAgZm9yIChwYXRocCA9IHBhdGg7IHBhdGhwLT5ub2Rl ICE9IE5VTEw7IHBhdGhwKyspIHsJCQlcCi0JaW50IGNtcCA9IHBhdGhwLT5jbXAgPSBhX2NtcChu b2RlLCBwYXRocC0+bm9kZSk7CQlcCi0JYXNzZXJ0KGNtcCAhPSAwKTsJCQkJCQlcCi0JaWYgKGNt cCA8IDApIHsJCQkJCQkJXAotCSAgICBwYXRocFsxXS5ub2RlID0gcmJ0bl9sZWZ0X2dldChhX3R5 cGUsIGFfZmllbGQsCQlcCi0JICAgICAgcGF0aHAtPm5vZGUpOwkJCQkJCVwKLQl9IGVsc2UgewkJ CQkJCQlcCi0JICAgIHBhdGhwWzFdLm5vZGUgPSByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmll bGQsCQlcCi0JICAgICAgcGF0aHAtPm5vZGUpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfQkJ CQkJCQkJCVwKLSAgICBwYXRocC0+bm9kZSA9IG5vZGU7CQkJCQkJCVwKLSAgICAvKiBBIGxvb3Ag aW52YXJpYW50IHdlIG1haW50YWluIGlzIHRoYXQgYWxsIG5vZGVzIHdpdGggICAgICAgICAgICAq L1wKLSAgICAvKiBvdXQtb2YtZGF0ZSBzdW1tYXJpZXMgbGl2ZSBpbiBwYXRoWzBdLCBwYXRoWzFd LCAuLi4sICpwYXRocC4gICAqL1wKLSAgICAvKiBUbyBtYWludGFpbiB0aGlzLCB3ZSBoYXZlIHRv IHN1bW1hcml6ZSBub2RlLCBzaW5jZSB3ZSAgICAgICAgICAqL1wKLSAgICAvKiBkZWNyZW1lbnQg cGF0aHAgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRpb24uICAgICAgICAgICAgICAgICAgICAqL1wK LSAgICBhc3NlcnQocmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpID09IE5VTEwp OwkJXAotICAgIGFzc2VydChyYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpID09 IE5VTEwpOwkJXAotICAgICh2b2lkKWFfc3VtbWFyaXplKG5vZGUsIE5VTEwsIE5VTEwpOwkJCQlc Ci0gICAgLyogVW53aW5kLiAqLwkJCQkJCQlcCi0gICAgZm9yIChwYXRocC0tOyAodWludHB0cl90 KXBhdGhwID49ICh1aW50cHRyX3QpcGF0aDsgcGF0aHAtLSkgewlcCi0JYV90eXBlICpjbm9kZSA9 IHBhdGhwLT5ub2RlOwkJCQkJXAotCWlmIChwYXRocC0+Y21wIDwgMCkgewkJCQkJCVwKLQkgICAg YV90eXBlICpsZWZ0ID0gcGF0aHBbMV0ubm9kZTsJCQkJXAotCSAgICByYnRuX2xlZnRfc2V0KGFf dHlwZSwgYV9maWVsZCwgY25vZGUsIGxlZnQpOwkJXAotCSAgICBpZiAocmJ0bl9yZWRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgbGVmdCkpIHsJCQlcCi0JCWFfdHlwZSAqbGVmdGxlZnQgPSByYnRuX2xl ZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCk7XAotCQlpZiAobGVmdGxlZnQgIT0gTlVMTCAm JiByYnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxkLAlcCi0JCSAgbGVmdGxlZnQpKSB7CQkJCQkJ XAotCQkgICAgLyogRml4IHVwIDQtbm9kZS4gKi8JCQkJXAotCQkgICAgYV90eXBlICp0bm9kZTsJ CQkJCVwKLQkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdGxlZnQpOwkJ XAotCQkgICAgcmJ0bl9yb3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSwgdG5vZGUp OwlcCi0JCSAgICAodm9pZClhX3N1bW1hcml6ZShjbm9kZSwJCQkJXAotCQkJcmJ0bl9sZWZ0X2dl dChhX3R5cGUsIGFfZmllbGQsIGNub2RlKSwJCVwKLQkJCXJidG5fcmlnaHRfZ2V0KGFfdHlwZSwg YV9maWVsZCwgY25vZGUpKTsJXAotCQkgICAgY25vZGUgPSB0bm9kZTsJCQkJCVwKLQkJfQkJCQkJ CQlcCi0JICAgIH0gZWxzZSB7CQkJCQkJCVwKLQkJYV9wcmVmaXgjI3N1bW1hcml6ZV9yYW5nZShw YXRoLCBwYXRocCk7CQkJXAotCQlyZXR1cm47CQkJCQkJCVwKLQkgICAgfQkJCQkJCQkJXAotCX0g ZWxzZSB7CQkJCQkJCVwKLQkgICAgYV90eXBlICpyaWdodCA9IHBhdGhwWzFdLm5vZGU7CQkJCVwK LQkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSwgcmlnaHQpOwkJXAot CSAgICBpZiAocmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHQpKSB7CQkJXAotCQlh X3R5cGUgKmxlZnQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgY25vZGUpOwlcCi0J CWlmIChsZWZ0ICE9IE5VTEwgJiYgcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJXAotCQkg IGxlZnQpKSB7CQkJCQkJXAotCQkgICAgLyogU3BsaXQgNC1ub2RlLiAqLwkJCQkJXAotCQkgICAg cmJ0bl9ibGFja19zZXQoYV90eXBlLCBhX2ZpZWxkLCBsZWZ0KTsJCVwKLQkJICAgIHJidG5fYmxh Y2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHQpOwkJXAotCQkgICAgcmJ0bl9yZWRfc2V0KGFf dHlwZSwgYV9maWVsZCwgY25vZGUpOwkJXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJICAgIC8qIExl YW4gbGVmdC4gKi8JCQkJCVwKLQkJICAgIGFfdHlwZSAqdG5vZGU7CQkJCQlcCi0JCSAgICBib29s IHRyZWQgPSByYnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSk7CVwKLQkJICAgIHJi dG5fcm90YXRlX2xlZnQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSwgdG5vZGUpOwlcCi0JCSAgICBy YnRuX2NvbG9yX3NldChhX3R5cGUsIGFfZmllbGQsIHRub2RlLCB0cmVkKTsJXAotCQkgICAgcmJ0 bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgY25vZGUpOwkJXAotCQkgICAgKHZvaWQpYV9zdW1t YXJpemUoY25vZGUsCQkJCVwKLQkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBjbm9k ZSksCQlcCi0JCQlyYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIGNub2RlKSk7CVwKLQkJ ICAgIGNub2RlID0gdG5vZGU7CQkJCQlcCi0JCX0JCQkJCQkJXAotCSAgICB9IGVsc2UgewkJCQkJ CQlcCi0JCWFfcHJlZml4IyNzdW1tYXJpemVfcmFuZ2UocGF0aCwgcGF0aHApOwkJCVwKLQkJcmV0 dXJuOwkJCQkJCQlcCi0JICAgIH0JCQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JcGF0aHAtPm5vZGUg PSBjbm9kZTsJCQkJCQlcCi0JKHZvaWQpYV9zdW1tYXJpemUoY25vZGUsCQkJCQlcCi0JICAgIHJi dG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBjbm9kZSksCQkJXAotCSAgICByYnRuX3JpZ2h0 X2dldChhX3R5cGUsIGFfZmllbGQsIGNub2RlKSk7CQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAg LyogU2V0IHJvb3QsIGFuZCBtYWtlIGl0IGJsYWNrLiAqLwkJCQkJXAotICAgIHJidHJlZS0+cmJ0 X3Jvb3QgPSBwYXRoLT5ub2RlOwkJCQkJXAotICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9m aWVsZCwgcmJ0cmVlLT5yYnRfcm9vdCk7CQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciB2b2lkCQkJ CQkJCQlcCi1hX3ByZWZpeCMjcmVtb3ZlKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpub2Rl KSB7CQkJXAotICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgcGF0aFtSQl9NQVhfREVQVEhdOwkJ CQlcCi0gICAgYV9wcmVmaXgjI3BhdGhfZW50cnlfdCAqcGF0aHA7CQkJCQlcCi0gICAgYV9wcmVm aXgjI3BhdGhfZW50cnlfdCAqbm9kZXA7CQkJCQlcCi0gICAgYV9wcmVmaXgjI3BhdGhfZW50cnlf dCAqc3dhcF9sb2M7CQkJCQlcCi0gICAgLyogVGhpcyBpcyBhICJyZWFsIiBzZW50aW5lbCAtLSBO VUxMIG1lYW5zIHdlIGRpZG4ndCBzd2FwIHRoZSAgICAgKi9cCi0gICAgLyogbm9kZSB0byBiZSBw cnVuZWQgd2l0aCBvbmUgb2YgaXRzIHN1Y2Nlc3NvcnMsIGFuZCBzbyAgICAgICAgICAgKi9cCi0g ICAgLyogc3VtbWFyaXphdGlvbiBjYW4gdGVybWluYXRlIGVhcmx5IHdoZW5ldmVyIHNvbWUgc3Vt bWFyeSAgICAgICAgKi9cCi0gICAgLyogZG9lc24ndCBjaGFuZ2UuICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0gICAgc3dhcF9sb2MgPSBOVUxMOwkJ CQkJCQlcCi0gICAgLyogVGhpcyBpcyBqdXN0IHRvIHNpbGVuY2UgYSBjb21waWxlciB3YXJuaW5n LiAqLwkJCVwKLSAgICBub2RlcCA9IE5VTEw7CQkJCQkJCVwKLSAgICAvKiBXaW5kLiAqLwkJCQkJ CQkJXAotICAgIHBhdGgtPm5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQkJXAotICAgIGZvciAo cGF0aHAgPSBwYXRoOyBwYXRocC0+bm9kZSAhPSBOVUxMOyBwYXRocCsrKSB7CQkJXAotCWludCBj bXAgPSBwYXRocC0+Y21wID0gYV9jbXAobm9kZSwgcGF0aHAtPm5vZGUpOwkJXAotCWlmIChjbXAg PCAwKSB7CQkJCQkJCVwKLQkgICAgcGF0aHBbMV0ubm9kZSA9IHJidG5fbGVmdF9nZXQoYV90eXBl LCBhX2ZpZWxkLAkJXAotCSAgICAgIHBhdGhwLT5ub2RlKTsJCQkJCQlcCi0JfSBlbHNlIHsJCQkJ CQkJXAotCSAgICBwYXRocFsxXS5ub2RlID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxk LAkJXAotCSAgICAgIHBhdGhwLT5ub2RlKTsJCQkJCQlcCi0JICAgIGlmIChjbXAgPT0gMCkgewkJ CQkJCVwKLQkgICAgICAgIC8qIEZpbmQgbm9kZSdzIHN1Y2Nlc3NvciwgaW4gcHJlcGFyYXRpb24g Zm9yIHN3YXAuICovCVwKLQkJcGF0aHAtPmNtcCA9IDE7CQkJCQkJXAotCQlub2RlcCA9IHBhdGhw OwkJCQkJCVwKLQkJZm9yIChwYXRocCsrOyBwYXRocC0+bm9kZSAhPSBOVUxMOyBwYXRocCsrKSB7 CQlcCi0JCSAgICBwYXRocC0+Y21wID0gLTE7CQkJCQlcCi0JCSAgICBwYXRocFsxXS5ub2RlID0g cmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsCVwKLQkJICAgICAgcGF0aHAtPm5vZGUpOwkJ CQkJXAotCQl9CQkJCQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQkgICAgfQkJCQkJCQkJXAotCX0J CQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIGFzc2VydChub2RlcC0+bm9kZSA9PSBub2Rl KTsJCQkJCVwKLSAgICBwYXRocC0tOwkJCQkJCQkJXAotICAgIGlmIChwYXRocC0+bm9kZSAhPSBu b2RlKSB7CQkJCQkJXAotCS8qIFN3YXAgbm9kZSB3aXRoIGl0cyBzdWNjZXNzb3IuICovCQkJCVwK LQlzd2FwX2xvYyA9IG5vZGVwOwkJCQkJCVwKLQlib29sIHRyZWQgPSByYnRuX3JlZF9nZXQoYV90 eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSk7CQlcCi0JcmJ0bl9jb2xvcl9zZXQoYV90eXBlLCBh X2ZpZWxkLCBwYXRocC0+bm9kZSwJCQlcCi0JICByYnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxk LCBub2RlKSk7CQkJCVwKLQlyYnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5v ZGUsCQkJXAotCSAgcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpKTsJCQlcCi0J LyogSWYgbm9kZSdzIHN1Y2Nlc3NvciBpcyBpdHMgcmlnaHQgY2hpbGQsIHRoZSBmb2xsb3dpbmcg Y29kZSAqL1wKLQkvKiB3aWxsIGRvIHRoZSB3cm9uZyB0aGluZyBmb3IgdGhlIHJpZ2h0IGNoaWxk IHBvaW50ZXIuICAgICAgICovXAotCS8qIEhvd2V2ZXIsIGl0IGRvZXNuJ3QgbWF0dGVyLCBiZWNh dXNlIHRoZSBwb2ludGVyIHdpbGwgYmUgICAgKi9cCi0JLyogcHJvcGVybHkgc2V0IHdoZW4gdGhl IHN1Y2Nlc3NvciBpcyBwcnVuZWQuICAgICAgICAgICAgICAgICAqL1wKLQlyYnRuX3JpZ2h0X3Nl dChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlLAkJCVwKLQkgIHJidG5fcmlnaHRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgbm9kZSkpOwkJCVwKLQlyYnRuX2NvbG9yX3NldChhX3R5cGUsIGFfZmll bGQsIG5vZGUsIHRyZWQpOwkJCVwKLQkvKiBUaGUgcHJ1bmVkIGxlYWYgbm9kZSdzIGNoaWxkIHBv aW50ZXJzIGFyZSBuZXZlciBhY2Nlc3NlZCAgICovXAotCS8qIGFnYWluLCBzbyBkb24ndCBib3Ro ZXIgc2V0dGluZyB0aGVtIHRvIG5pbC4gICAgICAgICAgICAgICAgKi9cCi0Jbm9kZXAtPm5vZGUg PSBwYXRocC0+bm9kZTsJCQkJCVwKLQlwYXRocC0+bm9kZSA9IG5vZGU7CQkJCQkJXAotCWlmIChu b2RlcCA9PSBwYXRoKSB7CQkJCQkJXAotCSAgICByYnRyZWUtPnJidF9yb290ID0gbm9kZXAtPm5v ZGU7CQkJCVwKLQl9IGVsc2UgewkJCQkJCQlcCi0JICAgIGlmIChub2RlcFstMV0uY21wIDwgMCkg ewkJCQkJXAotCQlyYnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9maWVsZCwgbm9kZXBbLTFdLm5vZGUs CQlcCi0JCSAgbm9kZXAtPm5vZGUpOwkJCQkJCVwKLQkgICAgfSBlbHNlIHsJCQkJCQkJXAotCQly YnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIG5vZGVwWy0xXS5ub2RlLAkJXAotCQkgIG5v ZGVwLT5ub2RlKTsJCQkJCQlcCi0JICAgIH0JCQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfSBl bHNlIHsJCQkJCQkJCVwKLQlhX3R5cGUgKmxlZnQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9m aWVsZCwgbm9kZSk7CQlcCi0JaWYgKGxlZnQgIT0gTlVMTCkgewkJCQkJCVwKLQkgICAgLyogbm9k ZSBoYXMgbm8gc3VjY2Vzc29yLCBidXQgaXQgaGFzIGEgbGVmdCBjaGlsZC4gICAgICAgICovXAot CSAgICAvKiBTcGxpY2Ugbm9kZSBvdXQsIHdpdGhvdXQgbG9zaW5nIHRoZSBsZWZ0IGNoaWxkLiAg ICAgICAgKi9cCi0JICAgIGFzc2VydCghcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbm9k ZSkpOwkJXAotCSAgICBhc3NlcnQocmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCkp OwkJXAotCSAgICByYnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIGxlZnQpOwkJCVwKLQkg ICAgaWYgKHBhdGhwID09IHBhdGgpIHsJCQkJCVwKLQkJcmJ0cmVlLT5yYnRfcm9vdCA9IGxlZnQ7 CQkJCVwKLQkJLyogTm90aGluZyB0byBzdW1tYXJpemUgLS0gdGhlIHN1YnRyZWUgcm9vdGVkIGF0 IHRoZSAgKi9cCi0JCS8qIG5vZGUncyBsZWZ0IGNoaWxkIGhhc24ndCBjaGFuZ2VkLCBhbmQgaXQn cyBub3cgdGhlICovXAotCQkvKiByb290LgkJCQkJICAgICAgKi9cCi0JICAgIH0gZWxzZSB7CQkJ CQkJCVwKLQkJaWYgKHBhdGhwWy0xXS5jbXAgPCAwKSB7CQkJCVwKLQkJICAgIHJidG5fbGVmdF9z ZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocFstMV0ubm9kZSwJXAotCQkgICAgICBsZWZ0KTsJCQkJ CQlcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2Zp ZWxkLCBwYXRocFstMV0ubm9kZSwJXAotCQkgICAgICBsZWZ0KTsJCQkJCQlcCi0JCX0JCQkJCQkJ XAotCQlhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBhdGhwWy0xXSwJ XAotCQkgICAgc3dhcF9sb2MpOwkJCQkJCVwKLQkgICAgfQkJCQkJCQkJXAotCSAgICByZXR1cm47 CQkJCQkJCVwKLQl9IGVsc2UgaWYgKHBhdGhwID09IHBhdGgpIHsJCQkJCVwKLQkgICAgLyogVGhl IHRyZWUgb25seSBjb250YWluZWQgb25lIG5vZGUuICovCQkJXAotCSAgICByYnRyZWUtPnJidF9y b290ID0gTlVMTDsJCQkJCVwKLQkgICAgcmV0dXJuOwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotICAg IH0JCQkJCQkJCQlcCi0gICAgLyogV2UndmUgbm93IGVzdGFibGlzaGVkIHRoZSBpbnZhcmlhbnQg dGhhdCB0aGUgbm9kZSBoYXMgbm8gcmlnaHQgKi9cCi0gICAgLyogY2hpbGQgKHdlbGwsIG1vcmFs bHk7IHdlIGRpZG4ndCBib3RoZXIgbnVsbGluZyBpdCBvdXQgaWYgd2UgICAgKi9cCi0gICAgLyog c3dhcHBlZCBpdCB3aXRoIGl0cyBzdWNjZXNzb3IpLCBhbmQgdGhhdCB0aGUgb25seSBub2RlcyB3 aXRoICAgKi9cCi0gICAgLyogb3V0LW9mLWRhdGUgc3VtbWFyaWVzIGxpdmUgaW4gcGF0aFswXSwg cGF0aFsxXSwgLi4uLCBwYXRocFstMV0uKi9cCi0gICAgaWYgKHJidG5fcmVkX2dldChhX3R5cGUs IGFfZmllbGQsIHBhdGhwLT5ub2RlKSkgewkJCVwKLQkvKiBQcnVuZSByZWQgbm9kZSwgd2hpY2gg cmVxdWlyZXMgbm8gZml4dXAuICovCQkJXAotCWFzc2VydChwYXRocFstMV0uY21wIDwgMCk7CQkJ CQlcCi0JcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwWy0xXS5ub2RlLCBOVUxM KTsJCVwKLQlhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBhdGhwWy0x XSwgc3dhcF9sb2MpOwlcCi0JcmV0dXJuOwkJCQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAg LyogVGhlIG5vZGUgdG8gYmUgcHJ1bmVkIGlzIGJsYWNrLCBzbyB1bndpbmQgdW50aWwgYmFsYW5j ZSBpcyAgICAgKi9cCi0gICAgLyogcmVzdG9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0gICAgcGF0aHAtPm5vZGUgPSBOVUxMOwkJ CQkJCQlcCi0gICAgZm9yIChwYXRocC0tOyAodWludHB0cl90KXBhdGhwID49ICh1aW50cHRyX3Qp cGF0aDsgcGF0aHAtLSkgewlcCi0JYXNzZXJ0KHBhdGhwLT5jbXAgIT0gMCk7CQkJCQlcCi0JaWYg KHBhdGhwLT5jbXAgPCAwKSB7CQkJCQkJXAotCSAgICByYnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9m aWVsZCwgcGF0aHAtPm5vZGUsCQkJXAotCSAgICAgIHBhdGhwWzFdLm5vZGUpOwkJCQkJCVwKLQkg ICAgaWYgKHJidG5fcmVkX2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSkgewkJXAot CQlhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLAkJXAotCQkg IHBhdGhwLT5ub2RlKTsJCQkJCQlcCi0JCWFfdHlwZSAqcmlnaHRsZWZ0ID0gcmJ0bl9sZWZ0X2dl dChhX3R5cGUsIGFfZmllbGQsCVwKLQkJICByaWdodCk7CQkJCQkJXAotCQlhX3R5cGUgKnRub2Rl OwkJCQkJCVwKLQkJaWYgKHJpZ2h0bGVmdCAhPSBOVUxMICYmIHJidG5fcmVkX2dldChhX3R5cGUs IGFfZmllbGQsCVwKLQkJICByaWdodGxlZnQpKSB7CQkJCQkJXAotCQkgICAgLyogSW4gdGhlIGZv bGxvd2luZyBkaWFncmFtcywgfHwsIC8vLCBhbmQgXFwgICAgICAqL1wKLQkJICAgIC8qIGluZGlj YXRlIHRoZSBwYXRoIHRvIHRoZSByZW1vdmVkIG5vZGUuICAgICAgICAgKi9cCi0JCSAgICAvKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkgICAg LyogICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJ ICAgIC8qICAgIHBhdGhwKHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9c Ci0JCSAgICAvKiAgLy8gICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovXAotCQkgICAgLyogKGIpICAgICAgICAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqL1wKLQkJICAgIC8qICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi9cCi0JCSAgICAvKiAgICAgICAgICAocikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovXAotCQkgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVs ZCwgcGF0aHAtPm5vZGUpOwlcCi0JCSAgICByYnRuX3JvdGF0ZV9yaWdodChhX3R5cGUsIGFfZmll bGQsIHJpZ2h0LCB0bm9kZSk7CVwKLQkJICAgIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVs ZCwgcGF0aHAtPm5vZGUsIHRub2RlKTtcCi0JCSAgICByYnRuX3JvdGF0ZV9sZWZ0KGFfdHlwZSwg YV9maWVsZCwgcGF0aHAtPm5vZGUsCVwKLQkJICAgICAgdG5vZGUpOwkJCQkJCVwKLQkJICAgICh2 b2lkKWFfc3VtbWFyaXplKHBhdGhwLT5ub2RlLAkJCVwKLQkJCXJidG5fbGVmdF9nZXQoYV90eXBl LCBhX2ZpZWxkLCBwYXRocC0+bm9kZSksCVwKLQkJCXJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9m aWVsZCwgcGF0aHAtPm5vZGUpKTsJXAotCQkgICAgKHZvaWQpYV9zdW1tYXJpemUocmlnaHQsCQkJ CVwKLQkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCByaWdodCksCQlcCi0JCQlyYnRu X3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHJpZ2h0KSk7CVwKLQkJfSBlbHNlIHsJCQkJCQlc Ci0JCSAgICAvKiAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovXAotCQkgICAgLyogICAgcGF0aHAocikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqL1wKLQkJICAgIC8qICAvLyAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi9cCi0JCSAgICAvKiAoYikgICAgICAgIChiKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovXAotCQkgICAgLyogICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgICAgICAgIChiKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgcmJ0bl9yb3RhdGVfbGVmdChhX3R5 cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlLAlcCi0JCSAgICAgIHRub2RlKTsJCQkJCQlcCi0JCSAg ICAodm9pZClhX3N1bW1hcml6ZShwYXRocC0+bm9kZSwJCQlcCi0JCQlyYnRuX2xlZnRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpLAlcCi0JCQlyYnRuX3JpZ2h0X2dldChhX3R5cGUs IGFfZmllbGQsIHBhdGhwLT5ub2RlKSk7CVwKLQkJfQkJCQkJCQlcCi0JCSh2b2lkKWFfc3VtbWFy aXplKHRub2RlLCByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJXAotCQkgICAgdG5vZGUp LCByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSk7CVwKLQkJLyogQmFsYW5j ZSByZXN0b3JlZCwgYnV0IHJvdGF0aW9uIG1vZGlmaWVkIHN1YnRyZWUgICAgKi9cCi0JCS8qIHJv b3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQlh c3NlcnQoKHVpbnRwdHJfdClwYXRocCA+ICh1aW50cHRyX3QpcGF0aCk7CQlcCi0JCWlmIChwYXRo cFstMV0uY21wIDwgMCkgewkJCQlcCi0JCSAgICByYnRuX2xlZnRfc2V0KGFfdHlwZSwgYV9maWVs ZCwgcGF0aHBbLTFdLm5vZGUsCVwKLQkJICAgICAgdG5vZGUpOwkJCQkJCVwKLQkJfSBlbHNlIHsJ CQkJCQlcCi0JCSAgICByYnRuX3JpZ2h0X3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwWy0xXS5u b2RlLAlcCi0JCSAgICAgIHRub2RlKTsJCQkJCQlcCi0JCX0JCQkJCQkJXAotCQlhX3ByZWZpeCMj c3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBhdGhwWy0xXSwJXAotCQkgICAgc3dhcF9s b2MpOwkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JICAgIH0gZWxzZSB7CQkJCQkJCVwKLQkJ YV90eXBlICpyaWdodCA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJCVwKLQkJICBw YXRocC0+bm9kZSk7CQkJCQkJXAotCQlhX3R5cGUgKnJpZ2h0bGVmdCA9IHJidG5fbGVmdF9nZXQo YV90eXBlLCBhX2ZpZWxkLAlcCi0JCSAgcmlnaHQpOwkJCQkJCVwKLQkJaWYgKHJpZ2h0bGVmdCAh PSBOVUxMICYmIHJidG5fcmVkX2dldChhX3R5cGUsIGFfZmllbGQsCVwKLQkJICByaWdodGxlZnQp KSB7CQkJCQkJXAotCQkgICAgLyogICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgIHBhdGhwKGIpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgLy8gICAgICAgIFwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgLyogKGIpICAgICAgICAoYikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgICAgICAgICAvICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgICAgICAgICAocikgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgYV90eXBlICp0bm9kZTsJ CQkJCVwKLQkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHRsZWZ0KTsJ CVwKLQkJICAgIHJidG5fcm90YXRlX3JpZ2h0KGFfdHlwZSwgYV9maWVsZCwgcmlnaHQsIHRub2Rl KTsJXAotCQkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSwg dG5vZGUpO1wKLQkJICAgIHJidG5fcm90YXRlX2xlZnQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+ bm9kZSwJXAotCQkgICAgICB0bm9kZSk7CQkJCQkJXAotCQkgICAgKHZvaWQpYV9zdW1tYXJpemUo cGF0aHAtPm5vZGUsCQkJXAotCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhw LT5ub2RlKSwJXAotCQkJcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9k ZSkpOwlcCi0JCSAgICAodm9pZClhX3N1bW1hcml6ZShyaWdodCwJCQkJXAotCQkJcmJ0bl9sZWZ0 X2dldChhX3R5cGUsIGFfZmllbGQsIHJpZ2h0KSwJCVwKLQkJCXJidG5fcmlnaHRfZ2V0KGFfdHlw ZSwgYV9maWVsZCwgcmlnaHQpKTsJXAotCQkgICAgKHZvaWQpYV9zdW1tYXJpemUodG5vZGUsCQkJ CVwKLQkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCB0bm9kZSksCQlcCi0JCQlyYnRu X3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSk7CVwKLQkJICAgIC8qIEJhbGFuY2Ug cmVzdG9yZWQsIGJ1dCByb3RhdGlvbiBtb2RpZmllZCAgICAgICAgKi9cCi0JCSAgICAvKiBzdWJ0 cmVlIHJvb3QsIHdoaWNoIG1heSBhY3R1YWxseSBiZSB0aGUgdHJlZSAgICovXAotCQkgICAgLyog cm9vdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJICAg IGlmIChwYXRocCA9PSBwYXRoKSB7CQkJCVwKLQkJCS8qIFNldCByb290LiAqLwkJCQkJXAotCQkJ cmJ0cmVlLT5yYnRfcm9vdCA9IHRub2RlOwkJCVwKLQkJICAgIH0gZWxzZSB7CQkJCQkJXAotCQkJ aWYgKHBhdGhwWy0xXS5jbXAgPCAwKSB7CQkJXAotCQkJICAgIHJidG5fbGVmdF9zZXQoYV90eXBl LCBhX2ZpZWxkLAkJXAotCQkJICAgICAgcGF0aHBbLTFdLm5vZGUsIHRub2RlKTsJCQlcCi0JCQl9 IGVsc2UgewkJCQkJXAotCQkJICAgIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9maWVsZCwJCVwK LQkJCSAgICAgIHBhdGhwWy0xXS5ub2RlLCB0bm9kZSk7CQkJXAotCQkJfQkJCQkJCVwKLQkJCWFf cHJlZml4IyNzdW1tYXJpemVfc3dhcHBlZF9yYW5nZShwYXRoLAkJXAotCQkJICAgICZwYXRocFst MV0sIHN3YXBfbG9jKTsJCQlcCi0JCSAgICB9CQkJCQkJCVwKLQkJICAgIHJldHVybjsJCQkJCQlc Ci0JCX0gZWxzZSB7CQkJCQkJXAotCQkgICAgLyogICAgICB8fCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgIHBhdGhwKGIpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgLy8gICAgICAgIFwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgLyogKGIpICAgICAgICAoYikg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgICAgICAgICAv ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgICAgICAg ICAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgYV90eXBl ICp0bm9kZTsJCQkJCVwKLQkJICAgIHJidG5fcmVkX3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhw LT5ub2RlKTsJCVwKLQkJICAgIHJidG5fcm90YXRlX2xlZnQoYV90eXBlLCBhX2ZpZWxkLCBwYXRo cC0+bm9kZSwJXAotCQkgICAgICB0bm9kZSk7CQkJCQkJXAotCQkgICAgKHZvaWQpYV9zdW1tYXJp emUocGF0aHAtPm5vZGUsCQkJXAotCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBh dGhwLT5ub2RlKSwJXAotCQkJcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+ bm9kZSkpOwlcCi0JCSAgICAodm9pZClhX3N1bW1hcml6ZSh0bm9kZSwJCQkJXAotCQkJcmJ0bl9s ZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSwJCVwKLQkJCXJidG5fcmlnaHRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgdG5vZGUpKTsJXAotCQkgICAgcGF0aHAtPm5vZGUgPSB0bm9kZTsJCQkJ XAotCQl9CQkJCQkJCVwKLQkgICAgfQkJCQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkgICAg YV90eXBlICpsZWZ0OwkJCQkJCVwKLQkgICAgcmJ0bl9yaWdodF9zZXQoYV90eXBlLCBhX2ZpZWxk LCBwYXRocC0+bm9kZSwJCVwKLQkgICAgICBwYXRocFsxXS5ub2RlKTsJCQkJCQlcCi0JICAgIGxl ZnQgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpOwkJXAotCSAg ICBpZiAocmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCkpIHsJCQlcCi0JCWFfdHlw ZSAqdG5vZGU7CQkJCQkJXAotCQlhX3R5cGUgKmxlZnRyaWdodCA9IHJidG5fcmlnaHRfZ2V0KGFf dHlwZSwgYV9maWVsZCwJXAotCQkgIGxlZnQpOwkJCQkJCVwKLQkJYV90eXBlICpsZWZ0cmlnaHRs ZWZ0ID0gcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsCVwKLQkJICBsZWZ0cmlnaHQpOwkJ CQkJCVwKLQkJaWYgKGxlZnRyaWdodGxlZnQgIT0gTlVMTCAmJiByYnRuX3JlZF9nZXQoYV90eXBl LAlcCi0JCSAgYV9maWVsZCwgbGVmdHJpZ2h0bGVmdCkpIHsJCQkJXAotCQkgICAgLyogICAgICB8 fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qICAg IHBhdGhwKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAv KiAgIC8gICAgICAgIFxcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkg ICAgLyogKHIpICAgICAgICAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wK LQkJICAgIC8qICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki9cCi0JCSAgICAvKiAgIChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovXAotCQkgICAgLyogICAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqL1wKLQkJICAgIC8qIChyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi9cCi0JCSAgICBhX3R5cGUgKnVub2RlOwkJCQkJXAotCQkgICAgcmJ0bl9i bGFja19zZXQoYV90eXBlLCBhX2ZpZWxkLCBsZWZ0cmlnaHRsZWZ0KTsJXAotCQkgICAgcmJ0bl9y b3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSwJXAotCQkgICAgICB1bm9k ZSk7CQkJCQkJXAotCQkgICAgcmJ0bl9yb3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBwYXRo cC0+bm9kZSwJXAotCQkgICAgICB0bm9kZSk7CQkJCQkJXAotCQkgICAgcmJ0bl9yaWdodF9zZXQo YV90eXBlLCBhX2ZpZWxkLCB1bm9kZSwgdG5vZGUpOwlcCi0JCSAgICByYnRuX3JvdGF0ZV9sZWZ0 KGFfdHlwZSwgYV9maWVsZCwgdW5vZGUsIHRub2RlKTsJXAotCQkgICAgKHZvaWQpYV9zdW1tYXJp emUocGF0aHAtPm5vZGUsCQkJXAotCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBh dGhwLT5ub2RlKSwJXAotCQkJcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+ bm9kZSkpOwlcCi0JCSAgICAodm9pZClhX3N1bW1hcml6ZSh1bm9kZSwJCQkJXAotCQkJcmJ0bl9s ZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHVub2RlKSwJCVwKLQkJCXJidG5fcmlnaHRfZ2V0KGFf dHlwZSwgYV9maWVsZCwgdW5vZGUpKTsJXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJICAgIC8qICAg ICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAv KiAgICBwYXRocChiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkg ICAgLyogICAvICAgICAgICBcXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wK LQkJICAgIC8qIChyKSAgICAgICAgKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki9cCi0JCSAgICAvKiAgIFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovXAotCQkgICAgLyogICAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqL1wKLQkJICAgIC8qICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovXAotCQkgICAgYXNzZXJ0KGxlZnRyaWdodCAhPSBOVUxMKTsJCQkJ XAotCQkgICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdHJpZ2h0KTsJCVwKLQkJ ICAgIHJidG5fcm90YXRlX3JpZ2h0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUsCVwKLQkJ ICAgICAgdG5vZGUpOwkJCQkJCVwKLQkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVs ZCwgdG5vZGUpOwkJXAotCQkgICAgKHZvaWQpYV9zdW1tYXJpemUocGF0aHAtPm5vZGUsCQkJXAot CQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSwJXAotCQkJcmJ0 bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSkpOwlcCi0JCX0JCQkJCQkJ XAotCQkodm9pZClhX3N1bW1hcml6ZSh0bm9kZSwJCQkJXAotCQkgICAgcmJ0bl9sZWZ0X2dldChh X3R5cGUsIGFfZmllbGQsIHRub2RlKSwJCVwKLQkJICAgIHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwg YV9maWVsZCwgdG5vZGUpKTsJCVwKLQkJLyogQmFsYW5jZSByZXN0b3JlZCwgYnV0IHJvdGF0aW9u IG1vZGlmaWVkIHN1YnRyZWUgICAgKi9cCi0JCS8qIHJvb3QsIHdoaWNoIG1heSBhY3R1YWxseSBi ZSB0aGUgdHJlZSByb290LiAgICAgICAgICovXAotCQlpZiAocGF0aHAgPT0gcGF0aCkgewkJCQkJ XAotCQkgICAgLyogU2V0IHJvb3QuICovCQkJCQlcCi0JCSAgICByYnRyZWUtPnJidF9yb290ID0g dG5vZGU7CQkJCVwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCSAgICBpZiAocGF0aHBbLTFdLmNtcCA8 IDApIHsJCQkJXAotCQkJcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwWy0xXS5u b2RlLAlcCi0JCQkgIHRub2RlKTsJCQkJCVwKLQkJICAgIH0gZWxzZSB7CQkJCQkJXAotCQkJcmJ0 bl9yaWdodF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocFstMV0ubm9kZSwJXAotCQkJICB0bm9k ZSk7CQkJCQlcCi0JCSAgICB9CQkJCQkJCVwKLQkJICAgIGFfcHJlZml4IyNzdW1tYXJpemVfc3dh cHBlZF9yYW5nZShwYXRoLCAmcGF0aHBbLTFdLAlcCi0JCQlzd2FwX2xvYyk7CQkJCQlcCi0JCX0J CQkJCQkJXAotCQlyZXR1cm47CQkJCQkJCVwKLQkgICAgfSBlbHNlIGlmIChyYnRuX3JlZF9nZXQo YV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSkpIHsJXAotCQlhX3R5cGUgKmxlZnRsZWZ0ID0g cmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIGxlZnQpO1wKLQkJaWYgKGxlZnRsZWZ0ICE9 IE5VTEwgJiYgcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJXAotCQkgIGxlZnRsZWZ0KSkg ewkJCQkJCVwKLQkJICAgIC8qICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi9cCi0JCSAgICAvKiAgICAgIHBhdGhwKHIpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovXAotCQkgICAgLyogICAgIC8gICAgICAgIFxcICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgKGIpICAgICAgICAoYikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgIC8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgLyogKHIpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIGFfdHlwZSAqdG5vZGU7CQkJ CQlcCi0JCSAgICByYnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKTsJ XAotCQkgICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCk7CQlcCi0JCSAgICBy YnRuX2JsYWNrX3NldChhX3R5cGUsIGFfZmllbGQsIGxlZnRsZWZ0KTsJCVwKLQkJICAgIHJidG5f cm90YXRlX3JpZ2h0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUsCVwKLQkJICAgICAgdG5v ZGUpOwkJCQkJCVwKLQkJICAgICh2b2lkKWFfc3VtbWFyaXplKHBhdGhwLT5ub2RlLAkJCVwKLQkJ CXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSksCVwKLQkJCXJidG5f cmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpKTsJXAotCQkgICAgKHZvaWQp YV9zdW1tYXJpemUodG5vZGUsCQkJCVwKLQkJCXJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxk LCB0bm9kZSksCQlcCi0JCQlyYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIHRub2RlKSk7 CVwKLQkJICAgIC8qIEJhbGFuY2UgcmVzdG9yZWQsIGJ1dCByb3RhdGlvbiBtb2RpZmllZCAgICAg ICAgKi9cCi0JCSAgICAvKiBzdWJ0cmVlIHJvb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovXAotCQkgICAgYXNzZXJ0KCh1aW50cHRyX3QpcGF0aHAgPiAodWludHB0cl90KXBh dGgpOwkJXAotCQkgICAgaWYgKHBhdGhwWy0xXS5jbXAgPCAwKSB7CQkJCVwKLQkJCXJidG5fbGVm dF9zZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocFstMV0ubm9kZSwJXAotCQkJICB0bm9kZSk7CQkJ CQlcCi0JCSAgICB9IGVsc2UgewkJCQkJCVwKLQkJCXJidG5fcmlnaHRfc2V0KGFfdHlwZSwgYV9m aWVsZCwgcGF0aHBbLTFdLm5vZGUsCVwKLQkJCSAgdG5vZGUpOwkJCQkJXAotCQkgICAgfQkJCQkJ CQlcCi0JCSAgICBhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgJnBhdGhw Wy0xXSwJXAotCQkJc3dhcF9sb2MpOwkJCQkJXAotCQkgICAgcmV0dXJuOwkJCQkJCVwKLQkJfSBl bHNlIHsJCQkJCQlcCi0JCSAgICAvKiAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovXAotCQkgICAgLyogICAgICBwYXRocChyKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgICAvICAgICAgICBcXCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgIChiKSAgICAgICAgKGIpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgLyogICAvICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJICAgIC8qIChiKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0JCSAgICByYnRuX3JlZF9zZXQo YV90eXBlLCBhX2ZpZWxkLCBsZWZ0KTsJCVwKLQkJICAgIHJidG5fYmxhY2tfc2V0KGFfdHlwZSwg YV9maWVsZCwgcGF0aHAtPm5vZGUpOwlcCi0JCSAgICAvKiBCYWxhbmNlIHJlc3RvcmVkLiAqLwkJ CQlcCi0JCSAgICBhX3ByZWZpeCMjc3VtbWFyaXplX3N3YXBwZWRfcmFuZ2UocGF0aCwgcGF0aHAs CVwKLQkJCXN3YXBfbG9jKTsJCQkJCVwKLQkJICAgIHJldHVybjsJCQkJCQlcCi0JCX0JCQkJCQkJ XAotCSAgICB9IGVsc2UgewkJCQkJCQlcCi0JCWFfdHlwZSAqbGVmdGxlZnQgPSByYnRuX2xlZnRf Z2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdCk7XAotCQlpZiAobGVmdGxlZnQgIT0gTlVMTCAmJiBy YnRuX3JlZF9nZXQoYV90eXBlLCBhX2ZpZWxkLAlcCi0JCSAgbGVmdGxlZnQpKSB7CQkJCQkJXAot CQkgICAgLyogICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq L1wKLQkJICAgIC8qICAgICAgICAgICAgIHBhdGhwKGIpICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi9cCi0JCSAgICAvKiAgICAgICAgICAgIC8gICAgICAgIFxcICAgICAgICAgICAgICAgICAg ICAgICAgICovXAotCQkgICAgLyogICAgICAgICAgKGIpICAgICAgICAoYikgICAgICAgICAgICAg ICAgICAgICAgICAqL1wKLQkJICAgIC8qICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi9cCi0JCSAgICAvKiAgICAgICAgKHIpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovXAotCQkgICAgYV90eXBlICp0bm9kZTsJCQkJCVwKLQkJICAg IHJidG5fYmxhY2tfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVmdGxlZnQpOwkJXAotCQkgICAgcmJ0 bl9yb3RhdGVfcmlnaHQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSwJXAotCQkgICAgICB0 bm9kZSk7CQkJCQkJXAotCQkgICAgKHZvaWQpYV9zdW1tYXJpemUocGF0aHAtPm5vZGUsCQkJXAot CQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSwJXAotCQkJcmJ0 bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBwYXRocC0+bm9kZSkpOwlcCi0JCSAgICAodm9p ZClhX3N1bW1hcml6ZSh0bm9kZSwJCQkJXAotCQkJcmJ0bl9sZWZ0X2dldChhX3R5cGUsIGFfZmll bGQsIHRub2RlKSwJCVwKLQkJCXJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgdG5vZGUp KTsJXAotCQkgICAgLyogQmFsYW5jZSByZXN0b3JlZCwgYnV0IHJvdGF0aW9uIG1vZGlmaWVkICAg ICAgICAqL1wKLQkJICAgIC8qIHN1YnRyZWUgcm9vdCwgd2hpY2ggbWF5IGFjdHVhbGx5IGJlIHRo ZSB0cmVlICAgKi9cCi0JCSAgICAvKiByb290LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovXAotCQkgICAgaWYgKHBhdGhwID09IHBhdGgpIHsJCQkJXAotCQkJLyog U2V0IHJvb3QuICovCQkJCQlcCi0JCQlyYnRyZWUtPnJidF9yb290ID0gdG5vZGU7CQkJXAotCQkg ICAgfSBlbHNlIHsJCQkJCQlcCi0JCQlpZiAocGF0aHBbLTFdLmNtcCA8IDApIHsJCQlcCi0JCQkg ICAgcmJ0bl9sZWZ0X3NldChhX3R5cGUsIGFfZmllbGQsCQlcCi0JCQkgICAgICBwYXRocFstMV0u bm9kZSwgdG5vZGUpOwkJCVwKLQkJCX0gZWxzZSB7CQkJCQlcCi0JCQkgICAgcmJ0bl9yaWdodF9z ZXQoYV90eXBlLCBhX2ZpZWxkLAkJXAotCQkJICAgICAgcGF0aHBbLTFdLm5vZGUsIHRub2RlKTsJ CQlcCi0JCQl9CQkJCQkJXAotCQkgICAgICAgIGFfcHJlZml4IyNzdW1tYXJpemVfc3dhcHBlZF9y YW5nZShwYXRoLAkJXAotCQkJICAgICZwYXRocFstMV0sIHN3YXBfbG9jKTsJCQlcCi0JCSAgICB9 CQkJCQkJCVwKLQkJICAgIHJldHVybjsJCQkJCQlcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkgICAg LyogICAgICAgICAgICAgICB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1wKLQkJ ICAgIC8qICAgICAgICAgICAgIHBhdGhwKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9c Ci0JCSAgICAvKiAgICAgICAgICAgIC8gICAgICAgIFxcICAgICAgICAgICAgICAgICAgICAgICAg ICovXAotCQkgICAgLyogICAgICAgICAgKGIpICAgICAgICAoYikgICAgICAgICAgICAgICAgICAg ICAgICAqL1wKLQkJICAgIC8qICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi9cCi0JCSAgICAvKiAgICAgICAgKGIpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovXAotCQkgICAgcmJ0bl9yZWRfc2V0KGFfdHlwZSwgYV9maWVsZCwgbGVm dCk7CQlcCi0JCSAgICAodm9pZClhX3N1bW1hcml6ZShwYXRocC0+bm9kZSwJCQlcCi0JCQlyYnRu X2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcGF0aHAtPm5vZGUpLAlcCi0JCQlyYnRuX3JpZ2h0 X2dldChhX3R5cGUsIGFfZmllbGQsIHBhdGhwLT5ub2RlKSk7CVwKLQkJfQkJCQkJCQlcCi0JICAg IH0JCQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgICAvKiBTZXQgcm9v dC4gKi8JCQkJCQkJXAotICAgIHJidHJlZS0+cmJ0X3Jvb3QgPSBwYXRoLT5ub2RlOwkJCQkJXAot ICAgIGFzc2VydCghcmJ0bl9yZWRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgcmJ0cmVlLT5yYnRfcm9v dCkpOwkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9wcmVmaXgj I2l0ZXJfcmVjdXJzZShhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqbm9kZSwJCVwKLSAgYV90 eXBlICooKmNiKShhX3JidF90eXBlICosIGFfdHlwZSAqLCB2b2lkICopLCB2b2lkICphcmcpIHsJ CVwKLSAgICBpZiAobm9kZSA9PSBOVUxMKSB7CQkJCQkJCVwKLQlyZXR1cm4gTlVMTDsJCQkJCQkJ XAotICAgIH0gZWxzZSB7CQkJCQkJCQlcCi0JYV90eXBlICpyZXQ7CQkJCQkJCVwKLQlpZiAoKHJl dCA9IGFfcHJlZml4IyNpdGVyX3JlY3Vyc2UocmJ0cmVlLCByYnRuX2xlZnRfZ2V0KGFfdHlwZSwJ XAotCSAgYV9maWVsZCwgbm9kZSksIGNiLCBhcmcpKSAhPSBOVUxMIHx8IChyZXQgPSBjYihyYnRy ZWUsIG5vZGUsCVwKLQkgIGFyZykpICE9IE5VTEwpIHsJCQkJCQlcCi0JICAgIHJldHVybiByZXQ7 CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JcmV0dXJuIGFfcHJlZml4IyNpdGVyX3JlY3Vyc2UocmJ0 cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsCVwKLQkgIGFfZmllbGQsIG5vZGUpLCBjYiwgYXJn KTsJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJ CQkJCQkJXAotYV9wcmVmaXgjI2l0ZXJfc3RhcnQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUg KnN0YXJ0LCBhX3R5cGUgKm5vZGUsCVwKLSAgYV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFf dHlwZSAqLCB2b2lkICopLCB2b2lkICphcmcpIHsJCVwKLSAgICBpbnQgY21wID0gYV9jbXAoc3Rh cnQsIG5vZGUpOwkJCQkJXAotICAgIGlmIChjbXAgPCAwKSB7CQkJCQkJCVwKLQlhX3R5cGUgKnJl dDsJCQkJCQkJXAotCWlmICgocmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3RhcnQocmJ0cmVlLCBzdGFy dCwJCQlcCi0JICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbm9kZSksIGNiLCBhcmcp KSAhPSBOVUxMIHx8CVwKLQkgIChyZXQgPSBjYihyYnRyZWUsIG5vZGUsIGFyZykpICE9IE5VTEwp IHsJCQlcCi0JICAgIHJldHVybiByZXQ7CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JcmV0dXJuIGFf cHJlZml4IyNpdGVyX3JlY3Vyc2UocmJ0cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsCVwKLQkg IGFfZmllbGQsIG5vZGUpLCBjYiwgYXJnKTsJCQkJCVwKLSAgICB9IGVsc2UgaWYgKGNtcCA+IDAp IHsJCQkJCQlcCi0JcmV0dXJuIGFfcHJlZml4IyNpdGVyX3N0YXJ0KHJidHJlZSwgc3RhcnQsCQkJ XAotCSAgcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKSwgY2IsIGFyZyk7CQlc Ci0gICAgfSBlbHNlIHsJCQkJCQkJCVwKLQlhX3R5cGUgKnJldDsJCQkJCQkJXAotCWlmICgocmV0 ID0gY2IocmJ0cmVlLCBub2RlLCBhcmcpKSAhPSBOVUxMKSB7CQkJXAotCSAgICByZXR1cm4gcmV0 OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCXJldHVybiBhX3ByZWZpeCMjaXRlcl9yZWN1cnNlKHJi dHJlZSwgcmJ0bl9yaWdodF9nZXQoYV90eXBlLAlcCi0JICBhX2ZpZWxkLCBub2RlKSwgY2IsIGFy Zyk7CQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJ CQkJCQkJCVwKLWFfcHJlZml4IyNpdGVyKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpzdGFy dCwgYV90eXBlICooKmNiKSgJXAotICBhX3JidF90eXBlICosIGFfdHlwZSAqLCB2b2lkICopLCB2 b2lkICphcmcpIHsJCQkJXAotICAgIGFfdHlwZSAqcmV0OwkJCQkJCQlcCi0gICAgaWYgKHN0YXJ0 ICE9IE5VTEwpIHsJCQkJCQlcCi0JcmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3RhcnQocmJ0cmVlLCBz dGFydCwgcmJ0cmVlLT5yYnRfcm9vdCwJXAotCSAgY2IsIGFyZyk7CQkJCQkJCVwKLSAgICB9IGVs c2UgewkJCQkJCQkJXAotCXJldCA9IGFfcHJlZml4IyNpdGVyX3JlY3Vyc2UocmJ0cmVlLCByYnRy ZWUtPnJidF9yb290LCBjYiwgYXJnKTtcCi0gICAgfQkJCQkJCQkJCVwKLSAgICByZXR1cm4gcmV0 OwkJCQkJCQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9wcmVm aXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpub2Rl LAlcCi0gIGFfdHlwZSAqKCpjYikoYV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9pZCAqKSwgdm9p ZCAqYXJnKSB7CQlcCi0gICAgaWYgKG5vZGUgPT0gTlVMTCkgewkJCQkJCQlcCi0JcmV0dXJuIE5V TEw7CQkJCQkJCVwKLSAgICB9IGVsc2UgewkJCQkJCQkJXAotCWFfdHlwZSAqcmV0OwkJCQkJCQlc Ci0JaWYgKChyZXQgPSBhX3ByZWZpeCMjcmV2ZXJzZV9pdGVyX3JlY3Vyc2UocmJ0cmVlLAkJXAot CSAgcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKSwgY2IsIGFyZykpICE9IE5V TEwgfHwJXAotCSAgKHJldCA9IGNiKHJidHJlZSwgbm9kZSwgYXJnKSkgIT0gTlVMTCkgewkJCVwK LQkgICAgcmV0dXJuIHJldDsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQlyZXR1cm4gYV9wcmVmaXgj I3JldmVyc2VfaXRlcl9yZWN1cnNlKHJidHJlZSwJCQlcCi0JICByYnRuX2xlZnRfZ2V0KGFfdHlw ZSwgYV9maWVsZCwgbm9kZSksIGNiLCBhcmcpOwkJXAotICAgIH0JCQkJCQkJCQlcCi19CQkJCQkJ CQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjcmV2ZXJzZV9pdGVyX3N0 YXJ0KGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpzdGFydCwJCVwKLSAgYV90eXBlICpub2Rl LCBhX3R5cGUgKigqY2IpKGFfcmJ0X3R5cGUgKiwgYV90eXBlICosIHZvaWQgKiksCQlcCi0gIHZv aWQgKmFyZykgewkJCQkJCQkJXAotICAgIGludCBjbXAgPSBhX2NtcChzdGFydCwgbm9kZSk7CQkJ CQlcCi0gICAgaWYgKGNtcCA+IDApIHsJCQkJCQkJXAotCWFfdHlwZSAqcmV0OwkJCQkJCQlcCi0J aWYgKChyZXQgPSBhX3ByZWZpeCMjcmV2ZXJzZV9pdGVyX3N0YXJ0KHJidHJlZSwgc3RhcnQsCQlc Ci0JICByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsIG5vZGUpLCBjYiwgYXJnKSkgIT0g TlVMTCB8fAlcCi0JICAocmV0ID0gY2IocmJ0cmVlLCBub2RlLCBhcmcpKSAhPSBOVUxMKSB7CQkJ XAotCSAgICByZXR1cm4gcmV0OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCXJldHVybiBhX3ByZWZp eCMjcmV2ZXJzZV9pdGVyX3JlY3Vyc2UocmJ0cmVlLAkJCVwKLQkgIHJidG5fbGVmdF9nZXQoYV90 eXBlLCBhX2ZpZWxkLCBub2RlKSwgY2IsIGFyZyk7CQlcCi0gICAgfSBlbHNlIGlmIChjbXAgPCAw KSB7CQkJCQkJXAotCXJldHVybiBhX3ByZWZpeCMjcmV2ZXJzZV9pdGVyX3N0YXJ0KHJidHJlZSwg c3RhcnQsCQlcCi0JICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwgbm9kZSksIGNiLCBh cmcpOwkJXAotICAgIH0gZWxzZSB7CQkJCQkJCQlcCi0JYV90eXBlICpyZXQ7CQkJCQkJCVwKLQlp ZiAoKHJldCA9IGNiKHJidHJlZSwgbm9kZSwgYXJnKSkgIT0gTlVMTCkgewkJCVwKLQkgICAgcmV0 dXJuIHJldDsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQlyZXR1cm4gYV9wcmVmaXgjI3JldmVyc2Vf aXRlcl9yZWN1cnNlKHJidHJlZSwJCQlcCi0JICByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVs ZCwgbm9kZSksIGNiLCBhcmcpOwkJXAotICAgIH0JCQkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9h dHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjcmV2ZXJzZV9pdGVyKGFfcmJ0X3R5cGUg KnJidHJlZSwgYV90eXBlICpzdGFydCwJCVwKLSAgYV90eXBlICooKmNiKShhX3JidF90eXBlICos IGFfdHlwZSAqLCB2b2lkICopLCB2b2lkICphcmcpIHsJCVwKLSAgICBhX3R5cGUgKnJldDsJCQkJ CQkJXAotICAgIGlmIChzdGFydCAhPSBOVUxMKSB7CQkJCQkJXAotCXJldCA9IGFfcHJlZml4IyNy ZXZlcnNlX2l0ZXJfc3RhcnQocmJ0cmVlLCBzdGFydCwJCVwKLQkgIHJidHJlZS0+cmJ0X3Jvb3Qs IGNiLCBhcmcpOwkJCQkJXAotICAgIH0gZWxzZSB7CQkJCQkJCQlcCi0JcmV0ID0gYV9wcmVmaXgj I3JldmVyc2VfaXRlcl9yZWN1cnNlKHJidHJlZSwgcmJ0cmVlLT5yYnRfcm9vdCwJXAotCSAgY2Is IGFyZyk7CQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiByZXQ7CQkJCQkJCQlc Ci19CQkJCQkJCQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4IyNkZXN0cm95X3Jl Y3Vyc2UoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKm5vZGUsIHZvaWQgKCpjYikoCVwKLSAg YV90eXBlICosIHZvaWQgKiksIHZvaWQgKmFyZykgewkJCQkJXAotICAgIGlmIChub2RlID09IE5V TEwpIHsJCQkJCQkJXAotCXJldHVybjsJCQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIGFf cHJlZml4IyNkZXN0cm95X3JlY3Vyc2UocmJ0cmVlLCByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9m aWVsZCwJXAotICAgICAgbm9kZSksIGNiLCBhcmcpOwkJCQkJCQlcCi0gICAgcmJ0bl9sZWZ0X3Nl dChhX3R5cGUsIGFfZmllbGQsIChub2RlKSwgTlVMTCk7CQkJXAotICAgIGFfcHJlZml4IyNkZXN0 cm95X3JlY3Vyc2UocmJ0cmVlLCByYnRuX3JpZ2h0X2dldChhX3R5cGUsIGFfZmllbGQsCVwKLSAg ICAgIG5vZGUpLCBjYiwgYXJnKTsJCQkJCQkJXAotICAgIHJidG5fcmlnaHRfc2V0KGFfdHlwZSwg YV9maWVsZCwgKG5vZGUpLCBOVUxMKTsJCQlcCi0gICAgaWYgKGNiKSB7CQkJCQkJCQlcCi0JY2Io bm9kZSwgYXJnKTsJCQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRy IHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4IyNkZXN0cm95KGFfcmJ0X3R5cGUgKnJidHJlZSwgdm9p ZCAoKmNiKShhX3R5cGUgKiwgdm9pZCAqKSwJXAotICB2b2lkICphcmcpIHsJCQkJCQkJCVwKLSAg ICBhX3ByZWZpeCMjZGVzdHJveV9yZWN1cnNlKHJidHJlZSwgcmJ0cmVlLT5yYnRfcm9vdCwgY2Is IGFyZyk7CVwKLSAgICByYnRyZWUtPnJidF9yb290ID0gTlVMTDsJCQkJCQlcCi19CQkJCQkJCQkJ XAotLyogQkVHSU4gU1VNTUFSSVpFRC1PTkxZIElNUExFTUVOVEFUSU9OICovCQkJCVwKLXJiX3N1 bW1hcml6ZWRfb25seV8jI2FfaXNfc3VtbWFyaXplZCgJCQkJCVwKLXN0YXRpYyBpbmxpbmUgYV9w cmVmaXgjI3BhdGhfZW50cnlfdCAqCQkJCQlcCi1hX3ByZWZpeCMjd2luZChhX3JidF90eXBlICpy YnRyZWUsCQkJCQlcCi0gICAgYV9wcmVmaXgjI3BhdGhfZW50cnlfdCBwYXRoW1JCX01BWF9ERVBU SF0sIGFfdHlwZSAqbm9kZSkgewkJXAotICAgIGFfcHJlZml4IyNwYXRoX2VudHJ5X3QgKnBhdGhw OwkJCQkJXAotICAgIHBhdGgtPm5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQkJXAotICAgIGZv ciAocGF0aHAgPSBwYXRoOyA7IHBhdGhwKyspIHsJCQkJCVwKLQlhc3NlcnQoKHNpemVfdCkocGF0 aHAgLSBwYXRoKSA8IFJCX01BWF9ERVBUSCk7CQkJXAotCXBhdGhwLT5jbXAgPSBhX2NtcChub2Rl LCBwYXRocC0+bm9kZSk7CQkJCVwKLQlpZiAocGF0aHAtPmNtcCA8IDApIHsJCQkJCQlcCi0JICAg IHBhdGhwWzFdLm5vZGUgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJCVwKLQkJcGF0 aHAtPm5vZGUpOwkJCQkJCVwKLQl9IGVsc2UgaWYgKHBhdGhwLT5jbXAgPT0gMCkgewkJCQkJXAot CSAgICByZXR1cm4gcGF0aHA7CQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkgICAgcGF0aHBb MV0ubm9kZSA9IHJidG5fcmlnaHRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJCVwKLQkJcGF0aHAtPm5v ZGUpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgICB1bnJlYWNoYWJs ZSgpOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4 IyN1cGRhdGVfc3VtbWFyaWVzKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90eXBlICpub2RlKSB7CQlc Ci0gICAgYV9wcmVmaXgjI3BhdGhfZW50cnlfdCBwYXRoW1JCX01BWF9ERVBUSF07CQkJCVwKLSAg ICBhX3ByZWZpeCMjcGF0aF9lbnRyeV90ICpwYXRocCA9IGFfcHJlZml4IyN3aW5kKHJidHJlZSwg cGF0aCwgbm9kZSk7CVwKLSAgICBhX3ByZWZpeCMjc3VtbWFyaXplX3JhbmdlKHBhdGgsIHBhdGhw KTsJCQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBib29sCQkJCQkJCQlcCi1hX3ByZWZpeCMjZW1w dHlfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLAkJCQlcCi0gIGJvb2wgKCpmaWx0ZXJfbm9k ZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKLSAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lk ICosIGFfdHlwZSAqKSwJCQkJXAotICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKLSAgICBh X3R5cGUgKm5vZGUgPSByYnRyZWUtPnJidF9yb290OwkJCQkJXAotICAgIHJldHVybiBub2RlID09 IE5VTEwgfHwgIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIG5vZGUpOwkJXAotfQkJCQkJCQkJ CVwKLXN0YXRpYyBpbmxpbmUgYV90eXBlICoJCQkJCQkJXAotYV9wcmVmaXgjI2ZpcnN0X2ZpbHRl cmVkX2Zyb21fbm9kZShhX3R5cGUgKm5vZGUsCQkJXAotICBib29sICgqZmlsdGVyX25vZGUpKHZv aWQgKiwgYV90eXBlICopLAkJCQlcCi0gIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBh X3R5cGUgKiksCQkJCVwKLSAgdm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCi0gICAgYXNzZXJ0 KG5vZGUgIT0gTlVMTCAmJiBmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBub2RlKSk7CQlcCi0g ICAgd2hpbGUgKHRydWUpIHsJCQkJCQkJXAotCWFfdHlwZSAqbGVmdCA9IHJidG5fbGVmdF9nZXQo YV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLQlhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9n ZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLQlpZiAobGVmdCAhPSBOVUxMICYmIGZpbHRl cl9zdWJ0cmVlKGZpbHRlcl9jdHgsIGxlZnQpKSB7CQlcCi0JICAgIG5vZGUgPSBsZWZ0OwkJCQkJ CVwKLQl9IGVsc2UgaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJXAotCSAg ICByZXR1cm4gbm9kZTsJCQkJCQlcCi0JfSBlbHNlIHsJCQkJCQkJXAotCQlhc3NlcnQocmlnaHQg IT0gTlVMTAkJCQkJXAotCQkgICAgJiYgZmlsdGVyX3N1YnRyZWUoZmlsdGVyX2N0eCwgcmlnaHQp KTsJCVwKLQkJbm9kZSA9IHJpZ2h0OwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0gICAgfQkJCQkJCQkJ CVwKLSAgICB1bnJlYWNoYWJsZSgpOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIGFfdHlw ZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVl LAkJCQlcCi0gIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKLSAg Ym9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICB2b2lkICpm aWx0ZXJfY3R4KSB7CQkJCQkJCVwKLSAgICBhX3R5cGUgKm5vZGUgPSByYnRyZWUtPnJidF9yb290 OwkJCQkJXAotICAgIGlmIChub2RlID09IE5VTEwgfHwgIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9j dHgsIG5vZGUpKSB7CQlcCi0JcmV0dXJuIE5VTEw7CQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAot ICAgIHJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWRfZnJvbV9ub2RlKG5vZGUsIGZpbHRl cl9ub2RlLAlcCi0JZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwkJCQkJXAotfQkJCQkJCQkJ CVwKLXN0YXRpYyBpbmxpbmUgYV90eXBlICoJCQkJCQkJXAotYV9wcmVmaXgjI2xhc3RfZmlsdGVy ZWRfZnJvbV9ub2RlKGFfdHlwZSAqbm9kZSwJCQkJXAotICBib29sICgqZmlsdGVyX25vZGUpKHZv aWQgKiwgYV90eXBlICopLAkJCQlcCi0gIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBh X3R5cGUgKiksCQkJCVwKLSAgdm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCi0gICAgYXNzZXJ0 KG5vZGUgIT0gTlVMTCAmJiBmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBub2RlKSk7CQlcCi0g ICAgd2hpbGUgKHRydWUpIHsJCQkJCQkJXAotCWFfdHlwZSAqbGVmdCA9IHJidG5fbGVmdF9nZXQo YV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLQlhX3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9n ZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLQlpZiAocmlnaHQgIT0gTlVMTCAmJiBmaWx0 ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCByaWdodCkpIHsJXAotCSAgICBub2RlID0gcmlnaHQ7CQkJ CQkJXAotCX0gZWxzZSBpZiAoZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQlcCi0J ICAgIHJldHVybiBub2RlOwkJCQkJCVwKLQl9IGVsc2UgewkJCQkJCQlcCi0JCWFzc2VydChsZWZ0 ICE9IE5VTEwJCQkJCVwKLQkJICAgICYmIGZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIGxlZnQp KTsJCVwKLQkJbm9kZSA9IGxlZnQ7CQkJCQkJXAotCX0JCQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJ XAotICAgIHVucmVhY2hhYmxlKCk7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90eXBl ICoJCQkJCQkJCVwKLWFfcHJlZml4IyNsYXN0X2ZpbHRlcmVkKGFfcmJ0X3R5cGUgKnJidHJlZSwJ CQkJXAotICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCi0gIGJv b2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKLSAgdm9pZCAqZmls dGVyX2N0eCkgewkJCQkJCQlcCi0gICAgYV90eXBlICpub2RlID0gcmJ0cmVlLT5yYnRfcm9vdDsJ CQkJCVwKLSAgICBpZiAobm9kZSA9PSBOVUxMIHx8ICFmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4 LCBub2RlKSkgewkJXAotCXJldHVybiBOVUxMOwkJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAg ICByZXR1cm4gYV9wcmVmaXgjI2xhc3RfZmlsdGVyZWRfZnJvbV9ub2RlKG5vZGUsIGZpbHRlcl9u b2RlLAkJXAotCWZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJCQkJCVwKLX0JCQkJCQkJCQlc Ci0vKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbi4gIFNlYXJjaCBmb3IgYSBub2Rl IGNvbXBhcmluZyAgICAgKi9cCi0vKiBlcXVhbCB0byBrZXkgbWF0Y2hpbmcgdGhlIGZpbHRlci4g IElmIHN1Y2ggYSBub2RlIGlzIGluIHRoZSB0cmVlLCAgKi9cCi0vKiByZXR1cm4gaXQuICBBZGRp dGlvbmFsbHksIHRoZSBjYWxsZXIgaGFzIHRoZSBvcHRpb24gdG8gYXNrIGZvciAgICAgKi9cCi0v KiBib3VuZHMgb24gdGhlIG5leHQgLyBwcmV2IG5vZGUgaW4gdGhlIHRyZWUgcGFzc2luZyB0aGUg ZmlsdGVyLiAgICAgKi9cCi0vKiBJZiBuZXh0Ym91bmQgaXMgdHJ1ZSwgdGhlbiB0aGlzIGZ1bmN0 aW9uIHdpbGwgZG8gb25lIG9mIHRoZSAgICAgICAgKi9cCi0vKiBmb2xsb3dpbmc6ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0vKiAt IEZpbGwgaW4gKm5leHRib3VuZF9ub2RlIHdpdGggdGhlIHNtYWxsZXN0IG5vZGUgaW4gdGhlIHRy ZWUgICAgICAgKi9cCi0vKiAgIGdyZWF0ZXIgdGhhbiBrZXkgcGFzc2luZyB0aGUgZmlsdGVyLCBh bmQgTlVMTC1vdXQgICAgICAgICAgICAgICAgKi9cCi0vKiAgICpuZXh0Ym91bmRfc3VidHJlZS4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0vKiAtIEZp bGwgaW4gKm5leHRib3VuZF9zdWJ0cmVlIHdpdGggYSBwYXJlbnQgb2YgdGhhdCBub2RlIHdoaWNo IGlzICAgKi9cCi0vKiAgIG5vdCBhIHBhcmVudCBvZiB0aGUgc2VhcmNoZWQtZm9yIG5vZGUsIGFu ZCBOVUxMLW91dCAgICAgICAgICAgICAgKi9cCi0vKiAgICpuZXh0Ym91bmRfbm9kZS4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0vKiAtIE5VTEwt b3V0IGJvdGggKm5leHRib3VuZF9ub2RlIGFuZCAqbmV4dGJvdW5kX3N1YnRyZWUsIGluIHdoaWNo ICAgKi9cCi0vKiAgIGNhc2Ugbm8gbm9kZSBncmVhdGVyIHRoYW4ga2V5IGJ1dCBwYXNzaW5nIHRo ZSBmaWx0ZXIgaXMgaW4gdGhlICAgKi9cCi0vKiAgIHRyZWUuICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0vKiBUaGUgcHJldmJv dW5kIGNhc2UgaXMgc2ltaWxhci4gIElmIHRoZSBjYWxsZXIga25vd3MgdGhhdCBrZXkgaXMgaW4g Ki9cCi0vKiB0aGUgdHJlZSBhbmQgdGhhdCB0aGUgc3VidHJlZSByb290ZWQgYXQga2V5IGRvZXMg bm90IGNvbnRhaW4gYSAgICAgKi9cCi0vKiBub2RlIHNhdGlzZnlpbmcgdGhlIGJvdW5kIGJlaW5n IHNlYXJjaGVkIGZvciwgdGhlbiB0aGV5IGNhbiBwYXNzICAgKi9cCi0vKiBmYWxzZSBmb3IgaW5j bHVkZV9zdWJ0cmVlLCBpbiB3aGljaCBjYXNlIHdlIHdvbid0IGJvdGhlciBzZWFyY2hpbmcgKi9c Ci0vKiB0aGVyZSAocmlza2luZyBhIGNhY2hlIG1pc3MpLiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi9cCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi0vKiBUaGlzIEFQSSBpcyB1bmZv cnR1bmF0ZWx5IGNvbXBsZXg7IGJ1dCB0aGUgbG9naWMgZm9yIGZpbHRlcmVkICAgICAgKi9cCi0v KiBzZWFyY2hlcyBpcyB2ZXJ5IHN1YnRsZSwgYW5kIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRv IHJlcGVhdCBpdCAgKi9cCi0vKiBtdWx0aXBsZSB0aW1lcyBmb3IgZmlsdGVyZWQgc2VhcmNoLCBu c2VhcmNoLCBwc2VhcmNoLCBuZXh0LCBhbmQgICAgKi9cCi0vKiBwcmV2LiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cCi1zdGF0 aWMgaW5saW5lIGFfdHlwZSAqCQkJCQkJCVwKLWFfcHJlZml4IyNzZWFyY2hfd2l0aF9maWx0ZXJf Ym91bmRzKGFfcmJ0X3R5cGUgKnJidHJlZSwJCQlcCi0gIGNvbnN0IGFfdHlwZSAqa2V5LAkJCQkJ CQlcCi0gIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKLSAgYm9v bCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICB2b2lkICpmaWx0 ZXJfY3R4LAkJCQkJCQlcCi0gIGJvb2wgaW5jbHVkZV9zdWJ0cmVlLAkJCQkJCQlcCi0gIGJvb2wg bmV4dGJvdW5kLCBhX3R5cGUgKipuZXh0Ym91bmRfbm9kZSwgYV90eXBlICoqbmV4dGJvdW5kX3N1 YnRyZWUsCVwKLSAgYm9vbCBwcmV2Ym91bmQsIGFfdHlwZSAqKnByZXZib3VuZF9ub2RlLCBhX3R5 cGUgKipwcmV2Ym91bmRfc3VidHJlZSkge1wKLSAgICBpZiAobmV4dGJvdW5kKSB7CQkJCQkJCVwK LQkgICAgKm5leHRib3VuZF9ub2RlID0gTlVMTDsJCQkJCVwKLQkgICAgKm5leHRib3VuZF9zdWJ0 cmVlID0gTlVMTDsJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIGlmIChwcmV2Ym91bmQpIHsJ CQkJCQkJXAotCSAgICAqcHJldmJvdW5kX25vZGUgPSBOVUxMOwkJCQkJXAotCSAgICAqcHJldmJv dW5kX3N1YnRyZWUgPSBOVUxMOwkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAgYV90eXBlICp0 bm9kZSA9IHJidHJlZS0+cmJ0X3Jvb3Q7CQkJCQlcCi0gICAgd2hpbGUgKHRub2RlICE9IE5VTEwg JiYgZmlsdGVyX3N1YnRyZWUoZmlsdGVyX2N0eCwgdG5vZGUpKSB7CVwKLQlpbnQgY21wID0gYV9j bXAoa2V5LCB0bm9kZSk7CQkJCQlcCi0JYV90eXBlICp0bGVmdCA9IHJidG5fbGVmdF9nZXQoYV90 eXBlLCBhX2ZpZWxkLCB0bm9kZSk7CQlcCi0JYV90eXBlICp0cmlnaHQgPSByYnRuX3JpZ2h0X2dl dChhX3R5cGUsIGFfZmllbGQsIHRub2RlKTsJXAotCWlmIChjbXAgPCAwKSB7CQkJCQkJCVwKLQkg ICAgaWYgKG5leHRib3VuZCkgewkJCQkJCVwKLQkJaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9jdHgs IHRub2RlKSkgewkJCVwKLQkJICAgICpuZXh0Ym91bmRfbm9kZSA9IHRub2RlOwkJCQlcCi0JCSAg ICAqbmV4dGJvdW5kX3N1YnRyZWUgPSBOVUxMOwkJCQlcCi0JCX0gZWxzZSBpZiAodHJpZ2h0ICE9 IE5VTEwgJiYgZmlsdGVyX3N1YnRyZWUoCQlcCi0JCSAgICBmaWx0ZXJfY3R4LCB0cmlnaHQpKSB7 CQkJCVwKLQkJICAgICpuZXh0Ym91bmRfbm9kZSA9IE5VTEw7CQkJCVwKLQkJICAgICpuZXh0Ym91 bmRfc3VidHJlZSA9IHRyaWdodDsJCQlcCi0JCX0JCQkJCQkJXAotCSAgICB9CQkJCQkJCQlcCi0J ICAgIHRub2RlID0gdGxlZnQ7CQkJCQkJXAotCX0gZWxzZSBpZiAoY21wID4gMCkgewkJCQkJCVwK LQkgICAgaWYgKHByZXZib3VuZCkgewkJCQkJCVwKLQkJaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9j dHgsIHRub2RlKSkgewkJCVwKLQkJICAgICpwcmV2Ym91bmRfbm9kZSA9IHRub2RlOwkJCQlcCi0J CSAgICAqcHJldmJvdW5kX3N1YnRyZWUgPSBOVUxMOwkJCQlcCi0JCX0gZWxzZSBpZiAodGxlZnQg IT0gTlVMTCAmJiBmaWx0ZXJfc3VidHJlZSgJCVwKLQkJICAgIGZpbHRlcl9jdHgsIHRsZWZ0KSkg ewkJCQlcCi0JCSAgICAqcHJldmJvdW5kX25vZGUgPSBOVUxMOwkJCQlcCi0JCSAgICAqcHJldmJv dW5kX3N1YnRyZWUgPSB0bGVmdDsJCQkJXAotCQl9CQkJCQkJCVwKLQkgICAgfQkJCQkJCQkJXAot CSAgICB0bm9kZSA9IHRyaWdodDsJCQkJCQlcCi0JfSBlbHNlIHsJCQkJCQkJXAotCSAgICBpZiAo ZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgdG5vZGUpKSB7CQkJXAotCQlyZXR1cm4gdG5vZGU7CQkJ CQkJXAotCSAgICB9CQkJCQkJCQlcCi0JICAgIGlmIChpbmNsdWRlX3N1YnRyZWUpIHsJCQkJCVwK LQkJaWYgKHByZXZib3VuZCAmJiB0bGVmdCAhPSBOVUxMICYmIGZpbHRlcl9zdWJ0cmVlKAlcCi0J CSAgICBmaWx0ZXJfY3R4LCB0bGVmdCkpIHsJCQkJXAotCQkgICAgKnByZXZib3VuZF9ub2RlID0g TlVMTDsJCQkJXAotCQkgICAgKnByZXZib3VuZF9zdWJ0cmVlID0gdGxlZnQ7CQkJCVwKLQkJfQkJ CQkJCQlcCi0JCWlmIChuZXh0Ym91bmQgJiYgdHJpZ2h0ICE9IE5VTEwgJiYgZmlsdGVyX3N1YnRy ZWUoCVwKLQkJICAgIGZpbHRlcl9jdHgsIHRyaWdodCkpIHsJCQkJXAotCQkgICAgKm5leHRib3Vu ZF9ub2RlID0gTlVMTDsJCQkJXAotCQkgICAgKm5leHRib3VuZF9zdWJ0cmVlID0gdHJpZ2h0OwkJ CVwKLQkJfQkJCQkJCQlcCi0JICAgIH0JCQkJCQkJCVwKLQkgICAgcmV0dXJuIE5VTEw7CQkJCQkJ XAotCX0JCQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiBOVUxMOwkJCQkJCQlc Ci19CQkJCQkJCQkJXAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjbmV4dF9m aWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUsIGFfdHlwZSAqbm9kZSwJCVwKLSAgYm9vbCAoKmZp bHRlcl9ub2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICBib29sICgqZmlsdGVyX3N1YnRy ZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCi0gIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJCQkJ XAotICAgIGFfdHlwZSAqbnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBu b2RlKTsJCVwKLSAgICBpZiAobnJpZ2h0ICE9IE5VTEwgJiYgZmlsdGVyX3N1YnRyZWUoZmlsdGVy X2N0eCwgbnJpZ2h0KSkgewkJXAotCXJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWRfZnJv bV9ub2RlKG5yaWdodCwgZmlsdGVyX25vZGUsCVwKLQkgICAgZmlsdGVyX3N1YnRyZWUsIGZpbHRl cl9jdHgpOwkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgICBhX3R5cGUgKm5vZGVfY2FuZGlkYXRl OwkJCQkJCVwKLSAgICBhX3R5cGUgKnN1YnRyZWVfY2FuZGlkYXRlOwkJCQkJCVwKLSAgICBhX3R5 cGUgKnNlYXJjaF9yZXN1bHQgPSBhX3ByZWZpeCMjc2VhcmNoX3dpdGhfZmlsdGVyX2JvdW5kcygJ XAotCXJidHJlZSwgbm9kZSwgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4 LAkJXAotCS8qIGluY2x1ZGVfc3VidHJlZSAqLyBmYWxzZSwJCQkJCVwKLQkvKiBuZXh0Ym91bmQg Ki8gdHJ1ZSwgJm5vZGVfY2FuZGlkYXRlLCAmc3VidHJlZV9jYW5kaWRhdGUsCVwKLQkvKiBwcmV2 Ym91bmQgKi8gZmFsc2UsIE5VTEwsIE5VTEwpOwkJCQlcCi0gICAgYXNzZXJ0KG5vZGUgPT0gc2Vh cmNoX3Jlc3VsdAkJCQkJXAotCXx8ICFmaWx0ZXJfbm9kZShmaWx0ZXJfY3R4LCBub2RlKSk7CQkJ CVwKLSAgICBpZiAobm9kZV9jYW5kaWRhdGUgIT0gTlVMTCkgewkJCQkJXAotCXJldHVybiBub2Rl X2NhbmRpZGF0ZTsJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgICBpZiAoc3VidHJlZV9jYW5k aWRhdGUgIT0gTlVMTCkgewkJCQkJXAotCXJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWRf ZnJvbV9ub2RlKAkJCVwKLQkgICAgc3VidHJlZV9jYW5kaWRhdGUsIGZpbHRlcl9ub2RlLCBmaWx0 ZXJfc3VidHJlZSwJCVwKLQkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAotICAgIH0JCQkJCQkJCQlc Ci0gICAgcmV0dXJuIE5VTEw7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJ CQkJCQkJCVwKLWFfcHJlZml4IyNwcmV2X2ZpbHRlcmVkKGFfcmJ0X3R5cGUgKnJidHJlZSwgYV90 eXBlICpub2RlLAkJXAotICBib29sICgqZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJ CQlcCi0gIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBhX3R5cGUgKiksCQkJCVwKLSAg dm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCi0gICAgYV90eXBlICpubGVmdCA9IHJidG5fbGVm dF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLSAgICBpZiAobmxlZnQgIT0gTlVMTCAm JiBmaWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBubGVmdCkpIHsJCVwKLQlyZXR1cm4gYV9wcmVm aXgjI2xhc3RfZmlsdGVyZWRfZnJvbV9ub2RlKG5sZWZ0LCBmaWx0ZXJfbm9kZSwJXAotCSAgICBm aWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIGFf dHlwZSAqbm9kZV9jYW5kaWRhdGU7CQkJCQkJXAotICAgIGFfdHlwZSAqc3VidHJlZV9jYW5kaWRh dGU7CQkJCQkJXAotICAgIGFfdHlwZSAqc2VhcmNoX3Jlc3VsdCA9IGFfcHJlZml4IyNzZWFyY2hf d2l0aF9maWx0ZXJfYm91bmRzKAlcCi0JcmJ0cmVlLCBub2RlLCBmaWx0ZXJfbm9kZSwgZmlsdGVy X3N1YnRyZWUsIGZpbHRlcl9jdHgsCQlcCi0JLyogaW5jbHVkZV9zdWJ0cmVlICovIGZhbHNlLAkJ CQkJXAotCS8qIG5leHRib3VuZCAqLyBmYWxzZSwgTlVMTCwgTlVMTCwJCQkJXAotCS8qIHByZXZi b3VuZCAqLyB0cnVlLCAmbm9kZV9jYW5kaWRhdGUsICZzdWJ0cmVlX2NhbmRpZGF0ZSk7CVwKLSAg ICBhc3NlcnQobm9kZSA9PSBzZWFyY2hfcmVzdWx0CQkJCQlcCi0JfHwgIWZpbHRlcl9ub2RlKGZp bHRlcl9jdHgsIG5vZGUpKTsJCQkJXAotICAgIGlmIChub2RlX2NhbmRpZGF0ZSAhPSBOVUxMKSB7 CQkJCQlcCi0JcmV0dXJuIG5vZGVfY2FuZGlkYXRlOwkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAot ICAgIGlmIChzdWJ0cmVlX2NhbmRpZGF0ZSAhPSBOVUxMKSB7CQkJCQlcCi0JcmV0dXJuIGFfcHJl Zml4IyNsYXN0X2ZpbHRlcmVkX2Zyb21fbm9kZSgJCQlcCi0JICAgIHN1YnRyZWVfY2FuZGlkYXRl LCBmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsCQlcCi0JICAgIGZpbHRlcl9jdHgpOwkJCQkJ CVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiBOVUxMOwkJCQkJCQlcCi19CQkJCQkJCQkJ XAotYV9hdHRyIGFfdHlwZSAqCQkJCQkJCQlcCi1hX3ByZWZpeCMjc2VhcmNoX2ZpbHRlcmVkKGFf cmJ0X3R5cGUgKnJidHJlZSwgY29uc3QgYV90eXBlICprZXksCVwKLSAgYm9vbCAoKmZpbHRlcl9u b2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZv aWQgKiwgYV90eXBlICopLAkJCQlcCi0gIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJCQkJXAotICAg IGFfdHlwZSAqcmVzdWx0ID0gYV9wcmVmaXgjI3NlYXJjaF93aXRoX2ZpbHRlcl9ib3VuZHMocmJ0 cmVlLCBrZXksCVwKLQlmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgsCQkJ XAotCS8qIGluY2x1ZGVfc3VidHJlZSAqLyBmYWxzZSwJCQkJCVwKLQkvKiBuZXh0Ym91bmQgKi8g ZmFsc2UsIE5VTEwsIE5VTEwsCQkJCVwKLQkvKiBwcmV2Ym91bmQgKi8gZmFsc2UsIE5VTEwsIE5V TEwpOwkJCQlcCi0gICAgcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0 ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9wcmVmaXgjI25zZWFyY2hfZmlsdGVyZWQoYV9yYnRfdHlw ZSAqcmJ0cmVlLCBjb25zdCBhX3R5cGUgKmtleSwJXAotICBib29sICgqZmlsdGVyX25vZGUpKHZv aWQgKiwgYV90eXBlICopLAkJCQlcCi0gIGJvb2wgKCpmaWx0ZXJfc3VidHJlZSkodm9pZCAqLCBh X3R5cGUgKiksCQkJCVwKLSAgdm9pZCAqZmlsdGVyX2N0eCkgewkJCQkJCQlcCi0gICAgYV90eXBl ICpub2RlX2NhbmRpZGF0ZTsJCQkJCQlcCi0gICAgYV90eXBlICpzdWJ0cmVlX2NhbmRpZGF0ZTsJ CQkJCQlcCi0gICAgYV90eXBlICpyZXN1bHQgPSBhX3ByZWZpeCMjc2VhcmNoX3dpdGhfZmlsdGVy X2JvdW5kcyhyYnRyZWUsIGtleSwJXAotCWZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwgZmls dGVyX2N0eCwJCQlcCi0JLyogaW5jbHVkZV9zdWJ0cmVlICovIHRydWUsCQkJCQlcCi0JLyogbmV4 dGJvdW5kICovIHRydWUsICZub2RlX2NhbmRpZGF0ZSwgJnN1YnRyZWVfY2FuZGlkYXRlLAlcCi0J LyogcHJldmJvdW5kICovIGZhbHNlLCBOVUxMLCBOVUxMKTsJCQkJXAotICAgIGlmIChyZXN1bHQg IT0gTlVMTCkgewkJCQkJCVwKLQlyZXR1cm4gcmVzdWx0OwkJCQkJCQlcCi0gICAgfQkJCQkJCQkJ CVwKLSAgICBpZiAobm9kZV9jYW5kaWRhdGUgIT0gTlVMTCkgewkJCQkJXAotCXJldHVybiBub2Rl X2NhbmRpZGF0ZTsJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgICBpZiAoc3VidHJlZV9jYW5k aWRhdGUgIT0gTlVMTCkgewkJCQkJXAotCXJldHVybiBhX3ByZWZpeCMjZmlyc3RfZmlsdGVyZWRf ZnJvbV9ub2RlKAkJCVwKLQkgICAgc3VidHJlZV9jYW5kaWRhdGUsIGZpbHRlcl9ub2RlLCBmaWx0 ZXJfc3VidHJlZSwJCVwKLQkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAotICAgIH0JCQkJCQkJCQlc Ci0gICAgcmV0dXJuIE5VTEw7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJ CQkJCQkJCVwKLWFfcHJlZml4IyNwc2VhcmNoX2ZpbHRlcmVkKGFfcmJ0X3R5cGUgKnJidHJlZSwg Y29uc3QgYV90eXBlICprZXksCVwKLSAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICosIGFfdHlw ZSAqKSwJCQkJXAotICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJ CQlcCi0gIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJCQkJXAotICAgIGFfdHlwZSAqbm9kZV9jYW5k aWRhdGU7CQkJCQkJXAotICAgIGFfdHlwZSAqc3VidHJlZV9jYW5kaWRhdGU7CQkJCQkJXAotICAg IGFfdHlwZSAqcmVzdWx0ID0gYV9wcmVmaXgjI3NlYXJjaF93aXRoX2ZpbHRlcl9ib3VuZHMocmJ0 cmVlLCBrZXksCVwKLQlmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgsCQkJ XAotCS8qIGluY2x1ZGVfc3VidHJlZSAqLyB0cnVlLAkJCQkJXAotCS8qIG5leHRib3VuZCAqLyBm YWxzZSwgTlVMTCwgTlVMTCwJCQkJXAotCS8qIHByZXZib3VuZCAqLyB0cnVlLCAmbm9kZV9jYW5k aWRhdGUsICZzdWJ0cmVlX2NhbmRpZGF0ZSk7CVwKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsJ CQkJCQlcCi0JcmV0dXJuIHJlc3VsdDsJCQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAgaWYg KG5vZGVfY2FuZGlkYXRlICE9IE5VTEwpIHsJCQkJCVwKLQlyZXR1cm4gbm9kZV9jYW5kaWRhdGU7 CQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAgaWYgKHN1YnRyZWVfY2FuZGlkYXRlICE9IE5V TEwpIHsJCQkJCVwKLQlyZXR1cm4gYV9wcmVmaXgjI2xhc3RfZmlsdGVyZWRfZnJvbV9ub2RlKAkJ CVwKLQkgICAgc3VidHJlZV9jYW5kaWRhdGUsIGZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwJ CVwKLQkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAgcmV0dXJu IE5VTEw7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90eXBlICoJCQkJCQkJCVwKLWFf cHJlZml4IyNpdGVyX3JlY3Vyc2VfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUg Km5vZGUsCVwKLSAgYV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFfdHlwZSAqLCB2b2lkICop LCB2b2lkICphcmcsCQlcCi0gIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAqLCBhX3R5cGUgKiks CQkJCVwKLSAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAot ICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKLSAgICBpZiAobm9kZSA9PSBOVUxMIHx8ICFm aWx0ZXJfc3VidHJlZShmaWx0ZXJfY3R4LCBub2RlKSkgewkJXAotCXJldHVybiBOVUxMOwkJCQkJ CQlcCi0gICAgfQkJCQkJCQkJCVwKLSAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAotICAgIGFfdHlw ZSAqbGVmdCA9IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLSAgICBh X3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwK LSAgICByZXQgPSBhX3ByZWZpeCMjaXRlcl9yZWN1cnNlX2ZpbHRlcmVkKHJidHJlZSwgbGVmdCwg Y2IsIGFyZywJXAotICAgICAgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4 KTsJCQkJXAotICAgIGlmIChyZXQgIT0gTlVMTCkgewkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJ CQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAgaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9jdHgsIG5v ZGUpKSB7CQkJCVwKLQlyZXQgPSBjYihyYnRyZWUsIG5vZGUsIGFyZyk7CQkJCQlcCi0gICAgfQkJ CQkJCQkJCVwKLSAgICBpZiAocmV0ICE9IE5VTEwpIHsJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJ CQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiBhX3ByZWZpeCMjaXRlcl9yZWN1cnNl X2ZpbHRlcmVkKHJidHJlZSwgcmlnaHQsIGNiLCBhcmcsCVwKLSAgICAgIGZpbHRlcl9ub2RlLCBm aWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQkJCVwKLX0JCQkJCQkJCQlcCi1hX2F0dHIgYV90 eXBlICoJCQkJCQkJCVwKLWFfcHJlZml4IyNpdGVyX3N0YXJ0X2ZpbHRlcmVkKGFfcmJ0X3R5cGUg KnJidHJlZSwgYV90eXBlICpzdGFydCwJXAotICBhX3R5cGUgKm5vZGUsIGFfdHlwZSAqKCpjYiko YV9yYnRfdHlwZSAqLCBhX3R5cGUgKiwgdm9pZCAqKSwJCVwKLSAgdm9pZCAqYXJnLCBib29sICgq ZmlsdGVyX25vZGUpKHZvaWQgKiwgYV90eXBlICopLAkJCVwKLSAgYm9vbCAoKmZpbHRlcl9zdWJ0 cmVlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJ CVwKLSAgICBpZiAoIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJCVwKLQly ZXR1cm4gTlVMTDsJCQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAgaW50IGNtcCA9IGFfY21w KHN0YXJ0LCBub2RlKTsJCQkJCVwKLSAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAotICAgIGFfdHlw ZSAqbGVmdCA9IHJidG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLSAgICBh X3R5cGUgKnJpZ2h0ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwK LSAgICBpZiAoY21wIDwgMCkgewkJCQkJCQlcCi0JcmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3RhcnRf ZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwgbGVmdCwgY2IsCVwKLQkgICAgYXJnLCBmaWx0ZXJfbm9k ZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwkJXAotCWlmIChyZXQgIT0gTlVMTCkgewkJ CQkJCVwKLQkgICAgcmV0dXJuIHJldDsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQlpZiAoZmlsdGVy X25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQkJXAotCSAgICByZXQgPSBjYihyYnRyZWUsIG5v ZGUsIGFyZyk7CQkJCVwKLQkgICAgaWYgKHJldCAhPSBOVUxMKSB7CQkJCQkJXAotCQlyZXR1cm4g cmV0OwkJCQkJCVwKLQkgICAgfQkJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQlyZXR1cm4gYV9wcmVm aXgjI2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUsIHJpZ2h0LCBjYiwgYXJnLAlcCi0JICAg IGZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQkJXAotICAgIH0gZWxz ZSBpZiAoY21wID4gMCkgewkJCQkJCVwKLQlyZXR1cm4gYV9wcmVmaXgjI2l0ZXJfc3RhcnRfZmls dGVyZWQocmJ0cmVlLCBzdGFydCwgcmlnaHQsCVwKLQkgIGNiLCBhcmcsIGZpbHRlcl9ub2RlLCBm aWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQlcCi0gICAgfSBlbHNlIHsJCQkJCQkJCVwKLQlp ZiAoZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQkJXAotCSAgICByZXQgPSBjYihy YnRyZWUsIG5vZGUsIGFyZyk7CQkJCVwKLQkgICAgaWYgKHJldCAhPSBOVUxMKSB7CQkJCQkJXAot CQlyZXR1cm4gcmV0OwkJCQkJCVwKLQkgICAgfQkJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQlyZXR1 cm4gYV9wcmVmaXgjI2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUsIHJpZ2h0LCBjYiwgYXJn LAlcCi0JICBmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwkJCVwKLSAg ICB9CQkJCQkJCQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9w cmVmaXgjI2l0ZXJfZmlsdGVyZWQoYV9yYnRfdHlwZSAqcmJ0cmVlLCBhX3R5cGUgKnN0YXJ0LAkJ XAotICBhX3R5cGUgKigqY2IpKGFfcmJ0X3R5cGUgKiwgYV90eXBlICosIHZvaWQgKiksIHZvaWQg KmFyZywJCVwKLSAgYm9vbCAoKmZpbHRlcl9ub2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAot ICBib29sICgqZmlsdGVyX3N1YnRyZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCi0gIHZvaWQg KmZpbHRlcl9jdHgpIHsJCQkJCQkJXAotICAgIGFfdHlwZSAqcmV0OwkJCQkJCQlcCi0gICAgaWYg KHN0YXJ0ICE9IE5VTEwpIHsJCQkJCQlcCi0JcmV0ID0gYV9wcmVmaXgjI2l0ZXJfc3RhcnRfZmls dGVyZWQocmJ0cmVlLCBzdGFydCwJCVwKLQkgICAgcmJ0cmVlLT5yYnRfcm9vdCwgY2IsIGFyZywg ZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLAlcCi0JICAgIGZpbHRlcl9jdHgpOwkJCQkJCVwK LSAgICB9IGVsc2UgewkJCQkJCQkJXAotCXJldCA9IGFfcHJlZml4IyNpdGVyX3JlY3Vyc2VfZmls dGVyZWQocmJ0cmVlLCByYnRyZWUtPnJidF9yb290LAlcCi0JICAgIGNiLCBhcmcsIGZpbHRlcl9u b2RlLCBmaWx0ZXJfc3VidHJlZSwgZmlsdGVyX2N0eCk7CQlcCi0gICAgfQkJCQkJCQkJCVwKLSAg ICByZXR1cm4gcmV0OwkJCQkJCQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJ CQkJXAotYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlX2ZpbHRlcmVkKGFfcmJ0X3R5cGUg KnJidHJlZSwJCVwKLSAgYV90eXBlICpub2RlLCBhX3R5cGUgKigqY2IpKGFfcmJ0X3R5cGUgKiwg YV90eXBlICosIHZvaWQgKiksCQlcCi0gIHZvaWQgKmFyZywJCQkJCQkJCVwKLSAgYm9vbCAoKmZp bHRlcl9ub2RlKSh2b2lkICosIGFfdHlwZSAqKSwJCQkJXAotICBib29sICgqZmlsdGVyX3N1YnRy ZWUpKHZvaWQgKiwgYV90eXBlICopLAkJCQlcCi0gIHZvaWQgKmZpbHRlcl9jdHgpIHsJCQkJCQkJ XAotICAgIGlmIChub2RlID09IE5VTEwgfHwgIWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIG5v ZGUpKSB7CQlcCi0JcmV0dXJuIE5VTEw7CQkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIGFf dHlwZSAqcmV0OwkJCQkJCQlcCi0gICAgYV90eXBlICpsZWZ0ID0gcmJ0bl9sZWZ0X2dldChhX3R5 cGUsIGFfZmllbGQsIG5vZGUpOwkJXAotICAgIGFfdHlwZSAqcmlnaHQgPSByYnRuX3JpZ2h0X2dl dChhX3R5cGUsIGFfZmllbGQsIG5vZGUpOwkJXAotICAgIHJldCA9IGFfcHJlZml4IyNyZXZlcnNl X2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUsIHJpZ2h0LCBjYiwJXAotCWFyZywgZmlsdGVy X25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJCQlcCi0gICAgaWYgKHJldCAhPSBO VUxMKSB7CQkJCQkJCVwKLQlyZXR1cm4gcmV0OwkJCQkJCQlcCi0gICAgfQkJCQkJCQkJCVwKLSAg ICBpZiAoZmlsdGVyX25vZGUoZmlsdGVyX2N0eCwgbm9kZSkpIHsJCQkJXAotCXJldCA9IGNiKHJi dHJlZSwgbm9kZSwgYXJnKTsJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIGlmIChyZXQgIT0g TlVMTCkgewkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0g ICAgcmV0dXJuIGFfcHJlZml4IyNyZXZlcnNlX2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUs IGxlZnQsIGNiLAlcCi0gICAgICBhcmcsIGZpbHRlcl9ub2RlLCBmaWx0ZXJfc3VidHJlZSwgZmls dGVyX2N0eCk7CQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJCQkJCQkJXAotYV9w cmVmaXgjI3JldmVyc2VfaXRlcl9zdGFydF9maWx0ZXJlZChhX3JidF90eXBlICpyYnRyZWUsIGFf dHlwZSAqc3RhcnQsXAotICBhX3R5cGUgKm5vZGUsIGFfdHlwZSAqKCpjYikoYV9yYnRfdHlwZSAq LCBhX3R5cGUgKiwgdm9pZCAqKSwJCVwKLSAgdm9pZCAqYXJnLCBib29sICgqZmlsdGVyX25vZGUp KHZvaWQgKiwgYV90eXBlICopLAkJCVwKLSAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICos IGFfdHlwZSAqKSwJCQkJXAotICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKLSAgICBpZiAo IWZpbHRlcl9zdWJ0cmVlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJCVwKLQlyZXR1cm4gTlVMTDsJ CQkJCQkJXAotICAgIH0JCQkJCQkJCQlcCi0gICAgaW50IGNtcCA9IGFfY21wKHN0YXJ0LCBub2Rl KTsJCQkJCVwKLSAgICBhX3R5cGUgKnJldDsJCQkJCQkJXAotICAgIGFfdHlwZSAqbGVmdCA9IHJi dG5fbGVmdF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLSAgICBhX3R5cGUgKnJpZ2h0 ID0gcmJ0bl9yaWdodF9nZXQoYV90eXBlLCBhX2ZpZWxkLCBub2RlKTsJCVwKLSAgICBpZiAoY21w ID4gMCkgewkJCQkJCQlcCi0JcmV0ID0gYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9zdGFydF9maWx0 ZXJlZChyYnRyZWUsIHN0YXJ0LAlcCi0JICAgIHJpZ2h0LCBjYiwgYXJnLCBmaWx0ZXJfbm9kZSwg ZmlsdGVyX3N1YnRyZWUsIGZpbHRlcl9jdHgpOwlcCi0JaWYgKHJldCAhPSBOVUxMKSB7CQkJCQkJ XAotCSAgICByZXR1cm4gcmV0OwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCWlmIChmaWx0ZXJfbm9k ZShmaWx0ZXJfY3R4LCBub2RlKSkgewkJCQlcCi0JICAgIHJldCA9IGNiKHJidHJlZSwgbm9kZSwg YXJnKTsJCQkJXAotCSAgICBpZiAocmV0ICE9IE5VTEwpIHsJCQkJCQlcCi0JCXJldHVybiByZXQ7 CQkJCQkJXAotCSAgICB9CQkJCQkJCQlcCi0JfQkJCQkJCQkJXAotCXJldHVybiBhX3ByZWZpeCMj cmV2ZXJzZV9pdGVyX3JlY3Vyc2VfZmlsdGVyZWQocmJ0cmVlLCBsZWZ0LCBjYixcCi0JICAgIGFy ZywgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJCVwKLSAgICB9IGVs c2UgaWYgKGNtcCA8IDApIHsJCQkJCQlcCi0JcmV0dXJuIGFfcHJlZml4IyNyZXZlcnNlX2l0ZXJf c3RhcnRfZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwJXAotCSAgbGVmdCwgY2IsIGFyZywgZmlsdGVy X25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJfY3R4KTsJXAotICAgIH0gZWxzZSB7CQkJCQkJ CQlcCi0JaWYgKGZpbHRlcl9ub2RlKGZpbHRlcl9jdHgsIG5vZGUpKSB7CQkJCVwKLQkgICAgcmV0 ID0gY2IocmJ0cmVlLCBub2RlLCBhcmcpOwkJCQlcCi0JICAgIGlmIChyZXQgIT0gTlVMTCkgewkJ CQkJCVwKLQkJcmV0dXJuIHJldDsJCQkJCQlcCi0JICAgIH0JCQkJCQkJCVwKLQl9CQkJCQkJCQlc Ci0JcmV0dXJuIGFfcHJlZml4IyNyZXZlcnNlX2l0ZXJfcmVjdXJzZV9maWx0ZXJlZChyYnRyZWUs IGxlZnQsIGNiLFwKLQkgIGFyZywgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLCBmaWx0ZXJf Y3R4KTsJCVwKLSAgICB9CQkJCQkJCQkJXAotfQkJCQkJCQkJCVwKLWFfYXR0ciBhX3R5cGUgKgkJ CQkJCQkJXAotYV9wcmVmaXgjI3JldmVyc2VfaXRlcl9maWx0ZXJlZChhX3JidF90eXBlICpyYnRy ZWUsIGFfdHlwZSAqc3RhcnQsCVwKLSAgYV90eXBlICooKmNiKShhX3JidF90eXBlICosIGFfdHlw ZSAqLCB2b2lkICopLCB2b2lkICphcmcsCQlcCi0gIGJvb2wgKCpmaWx0ZXJfbm9kZSkodm9pZCAq LCBhX3R5cGUgKiksCQkJCVwKLSAgYm9vbCAoKmZpbHRlcl9zdWJ0cmVlKSh2b2lkICosIGFfdHlw ZSAqKSwJCQkJXAotICB2b2lkICpmaWx0ZXJfY3R4KSB7CQkJCQkJCVwKLSAgICBhX3R5cGUgKnJl dDsJCQkJCQkJXAotICAgIGlmIChzdGFydCAhPSBOVUxMKSB7CQkJCQkJXAotCXJldCA9IGFfcHJl Zml4IyNyZXZlcnNlX2l0ZXJfc3RhcnRfZmlsdGVyZWQocmJ0cmVlLCBzdGFydCwJXAotCSAgICBy YnRyZWUtPnJidF9yb290LCBjYiwgYXJnLCBmaWx0ZXJfbm9kZSwgZmlsdGVyX3N1YnRyZWUsCVwK LQkgICAgZmlsdGVyX2N0eCk7CQkJCQkJXAotICAgIH0gZWxzZSB7CQkJCQkJCQlcCi0JcmV0ID0g YV9wcmVmaXgjI3JldmVyc2VfaXRlcl9yZWN1cnNlX2ZpbHRlcmVkKHJidHJlZSwJCVwKLQkgICAg cmJ0cmVlLT5yYnRfcm9vdCwgY2IsIGFyZywgZmlsdGVyX25vZGUsIGZpbHRlcl9zdWJ0cmVlLAlc Ci0JICAgIGZpbHRlcl9jdHgpOwkJCQkJCVwKLSAgICB9CQkJCQkJCQkJXAotICAgIHJldHVybiBy ZXQ7CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotKSAvKiBlbmQgcmJfc3VtbWFyaXplZF9vbmx5ICov Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9SQl9IICovCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC9ydHJlZS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ydHJlZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBhMDBhZGIyLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvcnRyZWUuaAorKysgL2Rldi9udWxs CkBAIC0xLDU1NCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1JUUkVFX0gKLSNk ZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfUlRSRUVfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvYXRvbWljLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ydHJlZV90c2QuaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9zYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3RzZC5oIgotCi0v KgotICogVGhpcyByYWRpeCB0cmVlIGltcGxlbWVudGF0aW9uIGlzIHRhaWxvcmVkIHRvIHRoZSBz aW5ndWxhciBwdXJwb3NlIG9mCi0gKiBhc3NvY2lhdGluZyBtZXRhZGF0YSB3aXRoIGV4dGVudHMg dGhhdCBhcmUgY3VycmVudGx5IG93bmVkIGJ5IGplbWFsbG9jLgotICoKLSAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCi0gKi8KLQotLyogTnVtYmVyIG9mIGhpZ2ggaW5zaWduaWZpY2FudCBiaXRzLiAq LwotI2RlZmluZSBSVFJFRV9OSElCICgoMVUgPDwgKExHX1NJWkVPRl9QVFIrMykpIC0gTEdfVkFE RFIpCi0vKiBOdW1iZXIgb2YgbG93IGluc2lnaWZpY2FudCBiaXRzLiAqLwotI2RlZmluZSBSVFJF RV9OTElCIExHX1BBR0UKLS8qIE51bWJlciBvZiBzaWduaWZpY2FudCBiaXRzLiAqLwotI2RlZmlu ZSBSVFJFRV9OU0IgKExHX1ZBRERSIC0gUlRSRUVfTkxJQikKLS8qIE51bWJlciBvZiBsZXZlbHMg aW4gcmFkaXggdHJlZS4gKi8KLSNpZiBSVFJFRV9OU0IgPD0gMTAKLSMgIGRlZmluZSBSVFJFRV9I RUlHSFQgMQotI2VsaWYgUlRSRUVfTlNCIDw9IDM2Ci0jICBkZWZpbmUgUlRSRUVfSEVJR0hUIDIK LSNlbGlmIFJUUkVFX05TQiA8PSA1MgotIyAgZGVmaW5lIFJUUkVFX0hFSUdIVCAzCi0jZWxzZQot IyAgZXJyb3IgVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHNpZ25pZmljYW50IHZpcnR1YWwgYWRkcmVz cyBiaXRzCi0jZW5kaWYKLS8qIFVzZSBjb21wYWN0IGxlYWYgcmVwcmVzZW50YXRpb24gaWYgdmly dHVhbCBhZGRyZXNzIGVuY29kaW5nIGFsbG93cy4gKi8KLSNpZiBSVFJFRV9OSElCID49IExHX0NF SUwoU0NfTlNJWkVTKQotIyAgZGVmaW5lIFJUUkVFX0xFQUZfQ09NUEFDVAotI2VuZGlmCi0KLXR5 cGVkZWYgc3RydWN0IHJ0cmVlX25vZGVfZWxtX3MgcnRyZWVfbm9kZV9lbG1fdDsKLXN0cnVjdCBy dHJlZV9ub2RlX2VsbV9zIHsKLQlhdG9taWNfcF90CWNoaWxkOyAvKiAocnRyZWVfe25vZGUsbGVh Zn1fZWxtX3QgKikgKi8KLX07Ci0KLXR5cGVkZWYgc3RydWN0IHJ0cmVlX21ldGFkYXRhX3MgcnRy ZWVfbWV0YWRhdGFfdDsKLXN0cnVjdCBydHJlZV9tZXRhZGF0YV9zIHsKLQlzemluZF90IHN6aW5k OwotCWV4dGVudF9zdGF0ZV90IHN0YXRlOyAvKiBNaXJyb3JzIGVkYXRhLT5zdGF0ZS4gKi8KLQli b29sIGlzX2hlYWQ7IC8qIE1pcnJvcnMgZWRhdGEtPmlzX2hlYWQuICovCi0JYm9vbCBzbGFiOwot fTsKLQotdHlwZWRlZiBzdHJ1Y3QgcnRyZWVfY29udGVudHNfcyBydHJlZV9jb250ZW50c190Owot c3RydWN0IHJ0cmVlX2NvbnRlbnRzX3MgewotCWVkYXRhX3QgKmVkYXRhOwotCXJ0cmVlX21ldGFk YXRhX3QgbWV0YWRhdGE7Ci19OwotCi0jZGVmaW5lIFJUUkVFX0xFQUZfU1RBVEVfV0lEVEggRURB VEFfQklUU19TVEFURV9XSURUSAotI2RlZmluZSBSVFJFRV9MRUFGX1NUQVRFX1NISUZUIDIKLSNk ZWZpbmUgUlRSRUVfTEVBRl9TVEFURV9NQVNLIE1BU0soUlRSRUVfTEVBRl9TVEFURV9XSURUSCwg UlRSRUVfTEVBRl9TVEFURV9TSElGVCkKLQotc3RydWN0IHJ0cmVlX2xlYWZfZWxtX3MgewotI2lm ZGVmIFJUUkVFX0xFQUZfQ09NUEFDVAotCS8qCi0JICogU2luZ2xlIHBvaW50ZXItd2lkdGggZmll bGQgY29udGFpbmluZyBhbGwgdGhyZWUgbGVhZiBlbGVtZW50IGZpZWxkcy4KLQkgKiBGb3IgZXhh bXBsZSwgb24gYSA2NC1iaXQgeDY0IHN5c3RlbSB3aXRoIDQ4IHNpZ25pZmljYW50IHZpcnR1YWwK LQkgKiBtZW1vcnkgYWRkcmVzcyBiaXRzLCB0aGUgaW5kZXgsIGVkYXRhLCBhbmQgc2xhYiBmaWVs ZHMgYXJlIHBhY2tlZCBhcwotCSAqIHN1Y2g6Ci0JICoKLQkgKiB4OiBpbmRleAotCSAqIGU6IGVk YXRhCi0JICogczogc3RhdGUKLQkgKiBoOiBpc19oZWFkCi0JICogYjogc2xhYgotCSAqCi0JICog ICAwMDAwMDAwMCB4eHh4eHh4eCBlZWVlZWVlZSBbLi4uXSBlZWVlZWVlZSBlMDBzc3NoYgotCSAq LwotCWF0b21pY19wX3QJbGVfYml0czsKLSNlbHNlCi0JYXRvbWljX3BfdAlsZV9lZGF0YTsgLyog KGVkYXRhX3QgKikgKi8KLQkvKgotCSAqIEZyb20gaGlnaCB0byBsb3cgYml0czogc3ppbmQgKDgg Yml0cyksIHN0YXRlICg0IGJpdHMpLCBpc19oZWFkLCBzbGFiCi0JICovCi0JYXRvbWljX3VfdAls ZV9tZXRhZGF0YTsKLSNlbmRpZgotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcnRyZWVfbGV2ZWxfcyBy dHJlZV9sZXZlbF90Owotc3RydWN0IHJ0cmVlX2xldmVsX3MgewotCS8qIE51bWJlciBvZiBrZXkg Yml0cyBkaXN0aW5ndWlzaGVkIGJ5IHRoaXMgbGV2ZWwuICovCi0JdW5zaWduZWQJCWJpdHM7Ci0J LyoKLQkgKiBDdW11bGF0aXZlIG51bWJlciBvZiBrZXkgYml0cyBkaXN0aW5ndWlzaGVkIGJ5IHRy YXZlcnNpbmcgdG8KLQkgKiBjb3JyZXNwb25kaW5nIHRyZWUgbGV2ZWwuCi0JICovCi0JdW5zaWdu ZWQJCWN1bWJpdHM7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBydHJlZV9zIHJ0cmVlX3Q7Ci1zdHJ1 Y3QgcnRyZWVfcyB7Ci0JYmFzZV90CQkJKmJhc2U7Ci0JbWFsbG9jX211dGV4X3QJCWluaXRfbG9j azsKLQkvKiBOdW1iZXIgb2YgZWxlbWVudHMgYmFzZWQgb24gcnRyZWVfbGV2ZWxzWzBdLmJpdHMu ICovCi0jaWYgUlRSRUVfSEVJR0hUID4gMQotCXJ0cmVlX25vZGVfZWxtX3QJcm9vdFsxVSA8PCAo UlRSRUVfTlNCL1JUUkVFX0hFSUdIVCldOwotI2Vsc2UKLQlydHJlZV9sZWFmX2VsbV90CXJvb3Rb MVUgPDwgKFJUUkVFX05TQi9SVFJFRV9IRUlHSFQpXTsKLSNlbmRpZgotfTsKLQotLyoKLSAqIFNw bGl0IHRoZSBiaXRzIGludG8gb25lIHRvIHRocmVlIHBhcnRpdGlvbnMgZGVwZW5kaW5nIG9uIG51 bWJlciBvZgotICogc2lnbmlmaWNhbnQgYml0cy4gIEl0IHRoZSBudW1iZXIgb2YgYml0cyBkb2Vz IG5vdCBkaXZpZGUgZXZlbmx5IGludG8gdGhlCi0gKiBudW1iZXIgb2YgbGV2ZWxzLCBwbGFjZSBv bmUgcmVtYWluZGVyIGJpdCBwZXIgbGV2ZWwgc3RhcnRpbmcgYXQgdGhlIGxlYWYKLSAqIGxldmVs LgotICovCi1zdGF0aWMgY29uc3QgcnRyZWVfbGV2ZWxfdCBydHJlZV9sZXZlbHNbXSA9IHsKLSNp ZiBSVFJFRV9IRUlHSFQgPT0gMQotCXtSVFJFRV9OU0IsIFJUUkVFX05ISUIgKyBSVFJFRV9OU0J9 Ci0jZWxpZiBSVFJFRV9IRUlHSFQgPT0gMgotCXtSVFJFRV9OU0IvMiwgUlRSRUVfTkhJQiArIFJU UkVFX05TQi8yfSwKLQl7UlRSRUVfTlNCLzIgKyBSVFJFRV9OU0IlMiwgUlRSRUVfTkhJQiArIFJU UkVFX05TQn0KLSNlbGlmIFJUUkVFX0hFSUdIVCA9PSAzCi0Je1JUUkVFX05TQi8zLCBSVFJFRV9O SElCICsgUlRSRUVfTlNCLzN9LAotCXtSVFJFRV9OU0IvMyArIFJUUkVFX05TQiUzLzIsCi0JICAg IFJUUkVFX05ISUIgKyBSVFJFRV9OU0IvMyoyICsgUlRSRUVfTlNCJTMvMn0sCi0Je1JUUkVFX05T Qi8zICsgUlRSRUVfTlNCJTMgLSBSVFJFRV9OU0IlMy8yLCBSVFJFRV9OSElCICsgUlRSRUVfTlNC fQotI2Vsc2UKLSMgIGVycm9yIFVuc3VwcG9ydGVkIHJ0cmVlIGhlaWdodAotI2VuZGlmCi19Owot Ci1ib29sIHJ0cmVlX25ldyhydHJlZV90ICpydHJlZSwgYmFzZV90ICpiYXNlLCBib29sIHplcm9l ZCk7Ci0KLXJ0cmVlX2xlYWZfZWxtX3QgKnJ0cmVlX2xlYWZfZWxtX2xvb2t1cF9oYXJkKHRzZG5f dCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsCi0gICAgcnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCwgdWlu dHB0cl90IGtleSwgYm9vbCBkZXBlbmRlbnQsIGJvb2wgaW5pdF9taXNzaW5nKTsKLQotSkVNQUxM T0NfQUxXQVlTX0lOTElORSB1bnNpZ25lZAotcnRyZWVfbGVhZl9tYXNrYml0cyh2b2lkKSB7Ci0J dW5zaWduZWQgcHRyYml0cyA9IFpVKDEpIDw8IChMR19TSVpFT0ZfUFRSKzMpOwotCXVuc2lnbmVk IGN1bWJpdHMgPSAocnRyZWVfbGV2ZWxzW1JUUkVFX0hFSUdIVC0xXS5jdW1iaXRzIC0KLQkgICAg cnRyZWVfbGV2ZWxzW1JUUkVFX0hFSUdIVC0xXS5iaXRzKTsKLQlyZXR1cm4gcHRyYml0cyAtIGN1 bWJpdHM7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdWludHB0cl90Ci1ydHJlZV9sZWFm a2V5KHVpbnRwdHJfdCBrZXkpIHsKLQl1aW50cHRyX3QgbWFzayA9IH4oKFpVKDEpIDw8IHJ0cmVl X2xlYWZfbWFza2JpdHMoKSkgLSAxKTsKLQlyZXR1cm4gKGtleSAmIG1hc2spOwotfQotCi1KRU1B TExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAotcnRyZWVfY2FjaGVfZGlyZWN0X21hcCh1aW50cHRy X3Qga2V5KSB7Ci0JcmV0dXJuIChzaXplX3QpKChrZXkgPj4gcnRyZWVfbGVhZl9tYXNrYml0cygp KSAmCi0JICAgIChSVFJFRV9DVFhfTkNBQ0hFIC0gMSkpOwotfQotCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHVpbnRwdHJfdAotcnRyZWVfc3Via2V5KHVpbnRwdHJfdCBrZXksIHVuc2lnbmVkIGxl dmVsKSB7Ci0JdW5zaWduZWQgcHRyYml0cyA9IFpVKDEpIDw8IChMR19TSVpFT0ZfUFRSKzMpOwot CXVuc2lnbmVkIGN1bWJpdHMgPSBydHJlZV9sZXZlbHNbbGV2ZWxdLmN1bWJpdHM7Ci0JdW5zaWdu ZWQgc2hpZnRiaXRzID0gcHRyYml0cyAtIGN1bWJpdHM7Ci0JdW5zaWduZWQgbWFza2JpdHMgPSBy dHJlZV9sZXZlbHNbbGV2ZWxdLmJpdHM7Ci0JdWludHB0cl90IG1hc2sgPSAoWlUoMSkgPDwgbWFz a2JpdHMpIC0gMTsKLQlyZXR1cm4gKChrZXkgPj4gc2hpZnRiaXRzKSAmIG1hc2spOwotfQotCi0v KgotICogQXRvbWljIGdldHRlcnMuCi0gKgotICogZGVwZW5kZW50OiBSZWFkaW5nIGEgdmFsdWUg b24gYmVoYWxmIG9mIGEgcG9pbnRlciB0byBhIHZhbGlkIGFsbG9jYXRpb24KLSAqICAgICAgICAg ICAgaXMgZ3VhcmFudGVlZCB0byBiZSBhIGNsZWFuIHJlYWQgZXZlbiB3aXRob3V0IHN5bmNocm9u aXphdGlvbiwKLSAqICAgICAgICAgICAgYmVjYXVzZSB0aGUgcnRyZWUgdXBkYXRlIGJlY2FtZSB2 aXNpYmxlIGluIG1lbW9yeSBiZWZvcmUgdGhlCi0gKiAgICAgICAgICAgIHBvaW50ZXIgY2FtZSBp bnRvIGV4aXN0ZW5jZS4KLSAqICFkZXBlbmRlbnQ6IEFuIGFyYml0cmFyeSByZWFkLCBlLmcuIG9u IGJlaGFsZiBvZiBpdnNhbGxvYygpLCBtYXkgbm90IGJlCi0gKiAgICAgICAgICAgICBkZXBlbmRl bnQgb24gYSBwcmV2aW91cyBydHJlZSB3cml0ZSwgd2hpY2ggbWVhbnMgYSBzdGFsZSByZWFkCi0g KiAgICAgICAgICAgICBjb3VsZCByZXN1bHQgaWYgc3luY2hyb25pemF0aW9uIHdlcmUgb21pdHRl ZCBoZXJlLgotICovCi0jICBpZmRlZiBSVFJFRV9MRUFGX0NPTVBBQ1QKLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdWludHB0cl90Ci1ydHJlZV9sZWFmX2VsbV9iaXRzX3JlYWQodHNkbl90ICp0c2Ru LCBydHJlZV90ICpydHJlZSwKLSAgICBydHJlZV9sZWFmX2VsbV90ICplbG0sIGJvb2wgZGVwZW5k ZW50KSB7Ci0JcmV0dXJuICh1aW50cHRyX3QpYXRvbWljX2xvYWRfcCgmZWxtLT5sZV9iaXRzLCBk ZXBlbmRlbnQKLQkgICAgPyBBVE9NSUNfUkVMQVhFRCA6IEFUT01JQ19BQ1FVSVJFKTsKLX0KLQot SkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50cHRyX3QKLXJ0cmVlX2xlYWZfZWxtX2JpdHNfZW5j b2RlKHJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHMpIHsKLQlhc3NlcnQoKHVpbnRwdHJfdCljb250 ZW50cy5lZGF0YSAlICh1aW50cHRyX3QpRURBVEFfQUxJR05NRU5UID09IDApOwotCXVpbnRwdHJf dCBlZGF0YV9iaXRzID0gKHVpbnRwdHJfdCljb250ZW50cy5lZGF0YQotCSAgICAmICgoKHVpbnRw dHJfdCkxIDw8IExHX1ZBRERSKSAtIDEpOwotCi0JdWludHB0cl90IHN6aW5kX2JpdHMgPSAodWlu dHB0cl90KWNvbnRlbnRzLm1ldGFkYXRhLnN6aW5kIDw8IExHX1ZBRERSOwotCXVpbnRwdHJfdCBz bGFiX2JpdHMgPSAodWludHB0cl90KWNvbnRlbnRzLm1ldGFkYXRhLnNsYWI7Ci0JdWludHB0cl90 IGlzX2hlYWRfYml0cyA9ICh1aW50cHRyX3QpY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA8PCAx OwotCXVpbnRwdHJfdCBzdGF0ZV9iaXRzID0gKHVpbnRwdHJfdCljb250ZW50cy5tZXRhZGF0YS5z dGF0ZSA8PAotCSAgICBSVFJFRV9MRUFGX1NUQVRFX1NISUZUOwotCXVpbnRwdHJfdCBtZXRhZGF0 YV9iaXRzID0gc3ppbmRfYml0cyB8IHN0YXRlX2JpdHMgfCBpc19oZWFkX2JpdHMgfAotCSAgICBz bGFiX2JpdHM7Ci0JYXNzZXJ0KChlZGF0YV9iaXRzICYgbWV0YWRhdGFfYml0cykgPT0gMCk7Ci0K LQlyZXR1cm4gZWRhdGFfYml0cyB8IG1ldGFkYXRhX2JpdHM7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgcnRyZWVfY29udGVudHNfdAotcnRyZWVfbGVhZl9lbG1fYml0c19kZWNvZGUodWlu dHB0cl90IGJpdHMpIHsKLQlydHJlZV9jb250ZW50c190IGNvbnRlbnRzOwotCS8qIERvIHRoZSBl YXN5IHRoaW5ncyBmaXJzdC4gKi8KLQljb250ZW50cy5tZXRhZGF0YS5zemluZCA9IGJpdHMgPj4g TEdfVkFERFI7Ci0JY29udGVudHMubWV0YWRhdGEuc2xhYiA9IChib29sKShiaXRzICYgMSk7Ci0J Y29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IChib29sKShiaXRzICYgKDEgPDwgMSkpOwotCi0J dWludHB0cl90IHN0YXRlX2JpdHMgPSAoYml0cyAmIFJUUkVFX0xFQUZfU1RBVEVfTUFTSykgPj4K LQkgICAgUlRSRUVfTEVBRl9TVEFURV9TSElGVDsKLQlhc3NlcnQoc3RhdGVfYml0cyA8PSBleHRl bnRfc3RhdGVfbWF4KTsKLQljb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IChleHRlbnRfc3RhdGVf dClzdGF0ZV9iaXRzOwotCi0JdWludHB0cl90IGxvd19iaXRfbWFzayA9IH4oKHVpbnRwdHJfdClF REFUQV9BTElHTk1FTlQgLSAxKTsKLSMgICAgaWZkZWYgX19hYXJjaDY0X18KLQkvKgotCSAqIGFh cmNoNjQgZG9lc24ndCBzaWduIGV4dGVuZCB0aGUgaGlnaGVzdCB2aXJ0dWFsIGFkZHJlc3MgYml0 IHRvIHNldAotCSAqIHRoZSBoaWdoZXIgb25lcy4gIEluc3RlYWQsIHRoZSBoaWdoIGJpdHMgZ2V0 IHplcm9lZC4KLQkgKi8KLQl1aW50cHRyX3QgaGlnaF9iaXRfbWFzayA9ICgodWludHB0cl90KTEg PDwgTEdfVkFERFIpIC0gMTsKLQkvKiBNYXNrIG9mZiBtZXRhZGF0YS4gKi8KLQl1aW50cHRyX3Qg bWFzayA9IGhpZ2hfYml0X21hc2sgJiBsb3dfYml0X21hc2s7Ci0JY29udGVudHMuZWRhdGEgPSAo ZWRhdGFfdCAqKShiaXRzICYgbWFzayk7Ci0jICAgIGVsc2UKLQkvKiBSZXN0b3JlIHNpZ24tZXh0 ZW5kZWQgaGlnaCBiaXRzLCBtYXNrIG1ldGFkYXRhIGJpdHMuICovCi0JY29udGVudHMuZWRhdGEg PSAoZWRhdGFfdCAqKSgodWludHB0cl90KSgoaW50cHRyX3QpKGJpdHMgPDwgUlRSRUVfTkhJQikK LQkgICAgPj4gUlRSRUVfTkhJQikgJiBsb3dfYml0X21hc2spOwotIyAgICBlbmRpZgotCWFzc2Vy dCgodWludHB0cl90KWNvbnRlbnRzLmVkYXRhICUgKHVpbnRwdHJfdClFREFUQV9BTElHTk1FTlQg PT0gMCk7Ci0JcmV0dXJuIGNvbnRlbnRzOwotfQotCi0jICBlbmRpZiAvKiBSVFJFRV9MRUFGX0NP TVBBQ1QgKi8KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBydHJlZV9jb250ZW50c190Ci1ydHJl ZV9sZWFmX2VsbV9yZWFkKHRzZG5fdCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsIHJ0cmVlX2xlYWZf ZWxtX3QgKmVsbSwKLSAgICBib29sIGRlcGVuZGVudCkgewotI2lmZGVmIFJUUkVFX0xFQUZfQ09N UEFDVAotCXVpbnRwdHJfdCBiaXRzID0gcnRyZWVfbGVhZl9lbG1fYml0c19yZWFkKHRzZG4sIHJ0 cmVlLCBlbG0sIGRlcGVuZGVudCk7Ci0JcnRyZWVfY29udGVudHNfdCBjb250ZW50cyA9IHJ0cmVl X2xlYWZfZWxtX2JpdHNfZGVjb2RlKGJpdHMpOwotCXJldHVybiBjb250ZW50czsKLSNlbHNlCi0J cnRyZWVfY29udGVudHNfdCBjb250ZW50czsKLQl1bnNpZ25lZCBtZXRhZGF0YV9iaXRzID0gYXRv bWljX2xvYWRfdSgmZWxtLT5sZV9tZXRhZGF0YSwgZGVwZW5kZW50Ci0JICAgID8gQVRPTUlDX1JF TEFYRUQgOiBBVE9NSUNfQUNRVUlSRSk7Ci0JY29udGVudHMubWV0YWRhdGEuc2xhYiA9IChib29s KShtZXRhZGF0YV9iaXRzICYgMSk7Ci0JY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IChib29s KShtZXRhZGF0YV9iaXRzICYgKDEgPDwgMSkpOwotCi0JdWludHB0cl90IHN0YXRlX2JpdHMgPSAo bWV0YWRhdGFfYml0cyAmIFJUUkVFX0xFQUZfU1RBVEVfTUFTSykgPj4KLQkgICAgUlRSRUVfTEVB Rl9TVEFURV9TSElGVDsKLQlhc3NlcnQoc3RhdGVfYml0cyA8PSBleHRlbnRfc3RhdGVfbWF4KTsK LQljb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IChleHRlbnRfc3RhdGVfdClzdGF0ZV9iaXRzOwot CWNvbnRlbnRzLm1ldGFkYXRhLnN6aW5kID0gbWV0YWRhdGFfYml0cyA+PiAoUlRSRUVfTEVBRl9T VEFURV9TSElGVCArCi0JICAgIFJUUkVFX0xFQUZfU1RBVEVfV0lEVEgpOwotCi0JY29udGVudHMu ZWRhdGEgPSAoZWRhdGFfdCAqKWF0b21pY19sb2FkX3AoJmVsbS0+bGVfZWRhdGEsIGRlcGVuZGVu dAotCSAgICA/IEFUT01JQ19SRUxBWEVEIDogQVRPTUlDX0FDUVVJUkUpOwotCi0JcmV0dXJuIGNv bnRlbnRzOwotI2VuZGlmCi19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotcnRyZWVf Y29udGVudHNfZW5jb2RlKHJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHMsIHZvaWQgKipiaXRzLAot ICAgIHVuc2lnbmVkICphZGRpdGlvbmFsKSB7Ci0jaWZkZWYgUlRSRUVfTEVBRl9DT01QQUNUCi0J KmJpdHMgPSAodm9pZCAqKXJ0cmVlX2xlYWZfZWxtX2JpdHNfZW5jb2RlKGNvbnRlbnRzKTsKLSNl bHNlCi0JKmFkZGl0aW9uYWwgPSAodW5zaWduZWQpY29udGVudHMubWV0YWRhdGEuc2xhYgotCSAg ICB8ICgodW5zaWduZWQpY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA8PCAxKQotCSAgICB8ICgo dW5zaWduZWQpY29udGVudHMubWV0YWRhdGEuc3RhdGUgPDwgUlRSRUVfTEVBRl9TVEFURV9TSElG VCkKLQkgICAgfCAoKHVuc2lnbmVkKWNvbnRlbnRzLm1ldGFkYXRhLnN6aW5kIDw8IChSVFJFRV9M RUFGX1NUQVRFX1NISUZUICsKLQkgICAgUlRSRUVfTEVBRl9TVEFURV9XSURUSCkpOwotCSpiaXRz ID0gY29udGVudHMuZWRhdGE7Ci0jZW5kaWYKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2 b2lkCi1ydHJlZV9sZWFmX2VsbV93cml0ZV9jb21taXQodHNkbl90ICp0c2RuLCBydHJlZV90ICpy dHJlZSwKLSAgICBydHJlZV9sZWFmX2VsbV90ICplbG0sIHZvaWQgKmJpdHMsIHVuc2lnbmVkIGFk ZGl0aW9uYWwpIHsKLSNpZmRlZiBSVFJFRV9MRUFGX0NPTVBBQ1QKLQlhdG9taWNfc3RvcmVfcCgm ZWxtLT5sZV9iaXRzLCBiaXRzLCBBVE9NSUNfUkVMRUFTRSk7Ci0jZWxzZQotCWF0b21pY19zdG9y ZV91KCZlbG0tPmxlX21ldGFkYXRhLCBhZGRpdGlvbmFsLCBBVE9NSUNfUkVMRUFTRSk7Ci0JLyoK LQkgKiBXcml0ZSBlZGF0YSBsYXN0LCBzaW5jZSB0aGUgZWxlbWVudCBpcyBhdG9taWNhbGx5IGNv bnNpZGVyZWQgdmFsaWQKLQkgKiBhcyBzb29uIGFzIHRoZSBlZGF0YSBmaWVsZCBpcyBub24tTlVM TC4KLQkgKi8KLQlhdG9taWNfc3RvcmVfcCgmZWxtLT5sZV9lZGF0YSwgYml0cywgQVRPTUlDX1JF TEVBU0UpOwotI2VuZGlmCi19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotcnRyZWVf bGVhZl9lbG1fd3JpdGUodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwKLSAgICBydHJlZV9s ZWFmX2VsbV90ICplbG0sIHJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHMpIHsKLQlhc3NlcnQoKHVp bnRwdHJfdCljb250ZW50cy5lZGF0YSAlIEVEQVRBX0FMSUdOTUVOVCA9PSAwKTsKLQl2b2lkICpi aXRzOwotCXVuc2lnbmVkIGFkZGl0aW9uYWw7Ci0KLQlydHJlZV9jb250ZW50c19lbmNvZGUoY29u dGVudHMsICZiaXRzLCAmYWRkaXRpb25hbCk7Ci0JcnRyZWVfbGVhZl9lbG1fd3JpdGVfY29tbWl0 KHRzZG4sIHJ0cmVlLCBlbG0sIGJpdHMsIGFkZGl0aW9uYWwpOwotfQotCi0vKiBUaGUgc3RhdGUg ZmllbGQgY2FuIGJlIHVwZGF0ZWQgaW5kZXBlbmRlbnRseSAoYW5kIG1vcmUgZnJlcXVlbnRseSku ICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXJ0cmVlX2xlYWZfZWxtX3N0YXRlX3Vw ZGF0ZSh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLAotICAgIHJ0cmVlX2xlYWZfZWxtX3Qg KmVsbTEsIHJ0cmVlX2xlYWZfZWxtX3QgKmVsbTIsIGV4dGVudF9zdGF0ZV90IHN0YXRlKSB7Ci0J YXNzZXJ0KGVsbTEgIT0gTlVMTCk7Ci0jaWZkZWYgUlRSRUVfTEVBRl9DT01QQUNUCi0JdWludHB0 cl90IGJpdHMgPSBydHJlZV9sZWFmX2VsbV9iaXRzX3JlYWQodHNkbiwgcnRyZWUsIGVsbTEsCi0J ICAgIC8qIGRlcGVuZGVudCAqLyB0cnVlKTsKLQliaXRzICY9IH5SVFJFRV9MRUFGX1NUQVRFX01B U0s7Ci0JYml0cyB8PSBzdGF0ZSA8PCBSVFJFRV9MRUFGX1NUQVRFX1NISUZUOwotCWF0b21pY19z dG9yZV9wKCZlbG0xLT5sZV9iaXRzLCAodm9pZCAqKWJpdHMsIEFUT01JQ19SRUxFQVNFKTsKLQlp ZiAoZWxtMiAhPSBOVUxMKSB7Ci0JCWF0b21pY19zdG9yZV9wKCZlbG0yLT5sZV9iaXRzLCAodm9p ZCAqKWJpdHMsIEFUT01JQ19SRUxFQVNFKTsKLQl9Ci0jZWxzZQotCXVuc2lnbmVkIGJpdHMgPSBh dG9taWNfbG9hZF91KCZlbG0xLT5sZV9tZXRhZGF0YSwgQVRPTUlDX1JFTEFYRUQpOwotCWJpdHMg Jj0gflJUUkVFX0xFQUZfU1RBVEVfTUFTSzsKLQliaXRzIHw9IHN0YXRlIDw8IFJUUkVFX0xFQUZf U1RBVEVfU0hJRlQ7Ci0JYXRvbWljX3N0b3JlX3UoJmVsbTEtPmxlX21ldGFkYXRhLCBiaXRzLCBB VE9NSUNfUkVMRUFTRSk7Ci0JaWYgKGVsbTIgIT0gTlVMTCkgewotCQlhdG9taWNfc3RvcmVfdSgm ZWxtMi0+bGVfbWV0YWRhdGEsIGJpdHMsIEFUT01JQ19SRUxFQVNFKTsKLQl9Ci0jZW5kaWYKLX0K LQotLyoKLSAqIFRyaWVzIHRvIGxvb2sgdXAgdGhlIGtleSBpbiB0aGUgTDEgY2FjaGUsIHJldHVy bmluZyBmYWxzZSBpZiB0aGVyZSdzIGEgaGl0LCBvcgotICogdHJ1ZSBpZiB0aGVyZSdzIGEgbWlz cy4KLSAqIEtleSBpcyBhbGxvd2VkIHRvIGJlIE5VTEw7IHJldHVybnMgdHJ1ZSBpbiB0aGlzIGNh c2UuCi0gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotcnRyZWVfbGVhZl9lbG1fbG9v a3VwX2Zhc3QodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0cmVl X2N0eCwKLSAgICB1aW50cHRyX3Qga2V5LCBydHJlZV9sZWFmX2VsbV90ICoqZWxtKSB7Ci0Jc2l6 ZV90IHNsb3QgPSBydHJlZV9jYWNoZV9kaXJlY3RfbWFwKGtleSk7Ci0JdWludHB0cl90IGxlYWZr ZXkgPSBydHJlZV9sZWFma2V5KGtleSk7Ci0JYXNzZXJ0KGxlYWZrZXkgIT0gUlRSRUVfTEVBRktF WV9JTlZBTElEKTsKLQotCWlmICh1bmxpa2VseShydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWZr ZXkgIT0gbGVhZmtleSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcnRyZWVfbGVhZl9lbG1f dCAqbGVhZiA9IHJ0cmVlX2N0eC0+Y2FjaGVbc2xvdF0ubGVhZjsKLQlhc3NlcnQobGVhZiAhPSBO VUxMKTsKLQl1aW50cHRyX3Qgc3Via2V5ID0gcnRyZWVfc3Via2V5KGtleSwgUlRSRUVfSEVJR0hU LTEpOwotCSplbG0gPSAmbGVhZltzdWJrZXldOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1KRU1B TExPQ19BTFdBWVNfSU5MSU5FIHJ0cmVlX2xlYWZfZWxtX3QgKgotcnRyZWVfbGVhZl9lbG1fbG9v a3VwKHRzZG5fdCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsIHJ0cmVlX2N0eF90ICpydHJlZV9jdHgs Ci0gICAgdWludHB0cl90IGtleSwgYm9vbCBkZXBlbmRlbnQsIGJvb2wgaW5pdF9taXNzaW5nKSB7 Ci0JYXNzZXJ0KGtleSAhPSAwKTsKLQlhc3NlcnQoIWRlcGVuZGVudCB8fCAhaW5pdF9taXNzaW5n KTsKLQotCXNpemVfdCBzbG90ID0gcnRyZWVfY2FjaGVfZGlyZWN0X21hcChrZXkpOwotCXVpbnRw dHJfdCBsZWFma2V5ID0gcnRyZWVfbGVhZmtleShrZXkpOwotCWFzc2VydChsZWFma2V5ICE9IFJU UkVFX0xFQUZLRVlfSU5WQUxJRCk7Ci0KLQkvKiBGYXN0IHBhdGg6IEwxIGRpcmVjdCBtYXBwZWQg Y2FjaGUuICovCi0JaWYgKGxpa2VseShydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWZrZXkgPT0g bGVhZmtleSkpIHsKLQkJcnRyZWVfbGVhZl9lbG1fdCAqbGVhZiA9IHJ0cmVlX2N0eC0+Y2FjaGVb c2xvdF0ubGVhZjsKLQkJYXNzZXJ0KGxlYWYgIT0gTlVMTCk7Ci0JCXVpbnRwdHJfdCBzdWJrZXkg PSBydHJlZV9zdWJrZXkoa2V5LCBSVFJFRV9IRUlHSFQtMSk7Ci0JCXJldHVybiAmbGVhZltzdWJr ZXldOwotCX0KLQkvKgotCSAqIFNlYXJjaCB0aGUgTDIgTFJVIGNhY2hlLiAgT24gaGl0LCBzd2Fw IHRoZSBtYXRjaGluZyBlbGVtZW50IGludG8gdGhlCi0JICogc2xvdCBpbiBMMSBjYWNoZSwgYW5k IG1vdmUgdGhlIHBvc2l0aW9uIGluIEwyIHVwIGJ5IDEuCi0JICovCi0jZGVmaW5lIFJUUkVFX0NB Q0hFX0NIRUNLX0wyKGkpIGRvIHsJCQkJCVwKLQlpZiAobGlrZWx5KHJ0cmVlX2N0eC0+bDJfY2Fj aGVbaV0ubGVhZmtleSA9PSBsZWFma2V5KSkgewlcCi0JCXJ0cmVlX2xlYWZfZWxtX3QgKmxlYWYg PSBydHJlZV9jdHgtPmwyX2NhY2hlW2ldLmxlYWY7CVwKLQkJYXNzZXJ0KGxlYWYgIT0gTlVMTCk7 CQkJCQlcCi0JCWlmIChpID4gMCkgewkJCQkJCVwKLQkJCS8qIEJ1YmJsZSB1cCBieSBvbmUuICov CQkJCVwKLQkJCXJ0cmVlX2N0eC0+bDJfY2FjaGVbaV0ubGVhZmtleSA9CQlcCi0JCQkJcnRyZWVf Y3R4LT5sMl9jYWNoZVtpIC0gMV0ubGVhZmtleTsJXAotCQkJcnRyZWVfY3R4LT5sMl9jYWNoZVtp XS5sZWFmID0JCQlcCi0JCQkJcnRyZWVfY3R4LT5sMl9jYWNoZVtpIC0gMV0ubGVhZjsJXAotCQkJ cnRyZWVfY3R4LT5sMl9jYWNoZVtpIC0gMV0ubGVhZmtleSA9CQlcCi0JCQkgICAgcnRyZWVfY3R4 LT5jYWNoZVtzbG90XS5sZWFma2V5OwkJXAotCQkJcnRyZWVfY3R4LT5sMl9jYWNoZVtpIC0gMV0u bGVhZiA9CQlcCi0JCQkgICAgcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFmOwkJXAotCQl9IGVs c2UgewkJCQkJCVwKLQkJCXJ0cmVlX2N0eC0+bDJfY2FjaGVbMF0ubGVhZmtleSA9CQlcCi0JCQkg ICAgcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFma2V5OwkJXAotCQkJcnRyZWVfY3R4LT5sMl9j YWNoZVswXS5sZWFmID0JCQlcCi0JCQkgICAgcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFmOwkJ XAotCQl9CQkJCQkJCVwKLQkJcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFma2V5ID0gbGVhZmtl eTsJCVwKLQkJcnRyZWVfY3R4LT5jYWNoZVtzbG90XS5sZWFmID0gbGVhZjsJCQlcCi0JCXVpbnRw dHJfdCBzdWJrZXkgPSBydHJlZV9zdWJrZXkoa2V5LCBSVFJFRV9IRUlHSFQtMSk7CVwKLQkJcmV0 dXJuICZsZWFmW3N1YmtleV07CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQkvKiBD aGVjayB0aGUgZmlyc3QgY2FjaGUgZW50cnkuICovCi0JUlRSRUVfQ0FDSEVfQ0hFQ0tfTDIoMCk7 Ci0JLyogU2VhcmNoIHRoZSByZW1haW5pbmcgY2FjaGUgZWxlbWVudHMuICovCi0JZm9yICh1bnNp Z25lZCBpID0gMTsgaSA8IFJUUkVFX0NUWF9OQ0FDSEVfTDI7IGkrKykgewotCQlSVFJFRV9DQUNI RV9DSEVDS19MMihpKTsKLQl9Ci0jdW5kZWYgUlRSRUVfQ0FDSEVfQ0hFQ0tfTDIKLQotCXJldHVy biBydHJlZV9sZWFmX2VsbV9sb29rdXBfaGFyZCh0c2RuLCBydHJlZSwgcnRyZWVfY3R4LCBrZXks Ci0JICAgIGRlcGVuZGVudCwgaW5pdF9taXNzaW5nKTsKLX0KLQotLyoKLSAqIFJldHVybnMgdHJ1 ZSBvbiBsb29rdXAgZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sCi1ydHJlZV9yZWFk X2luZGVwZW5kZW50KHRzZG5fdCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsIHJ0cmVlX2N0eF90ICpy dHJlZV9jdHgsCi0gICAgdWludHB0cl90IGtleSwgcnRyZWVfY29udGVudHNfdCAqcl9jb250ZW50 cykgewotCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2Ru LCBydHJlZSwgcnRyZWVfY3R4LAotCSAgICBrZXksIC8qIGRlcGVuZGVudCAqLyBmYWxzZSwgLyog aW5pdF9taXNzaW5nICovIGZhbHNlKTsKLQlpZiAoZWxtID09IE5VTEwpIHsKLQkJcmV0dXJuIHRy dWU7Ci0JfQotCSpyX2NvbnRlbnRzID0gcnRyZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCBydHJlZSwg ZWxtLAotCSAgICAvKiBkZXBlbmRlbnQgKi8gZmFsc2UpOwotCXJldHVybiBmYWxzZTsKLX0KLQot c3RhdGljIGlubGluZSBydHJlZV9jb250ZW50c190Ci1ydHJlZV9yZWFkKHRzZG5fdCAqdHNkbiwg cnRyZWVfdCAqcnRyZWUsIHJ0cmVlX2N0eF90ICpydHJlZV9jdHgsCi0gICAgdWludHB0cl90IGtl eSkgewotCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2Ru LCBydHJlZSwgcnRyZWVfY3R4LAotCSAgICBrZXksIC8qIGRlcGVuZGVudCAqLyB0cnVlLCAvKiBp bml0X21pc3NpbmcgKi8gZmFsc2UpOwotCWFzc2VydChlbG0gIT0gTlVMTCk7Ci0JcmV0dXJuIHJ0 cmVlX2xlYWZfZWxtX3JlYWQodHNkbiwgcnRyZWUsIGVsbSwgLyogZGVwZW5kZW50ICovIHRydWUp OwotfQotCi1zdGF0aWMgaW5saW5lIHJ0cmVlX21ldGFkYXRhX3QKLXJ0cmVlX21ldGFkYXRhX3Jl YWQodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCwK LSAgICB1aW50cHRyX3Qga2V5KSB7Ci0JcnRyZWVfbGVhZl9lbG1fdCAqZWxtID0gcnRyZWVfbGVh Zl9lbG1fbG9va3VwKHRzZG4sIHJ0cmVlLCBydHJlZV9jdHgsCi0JICAgIGtleSwgLyogZGVwZW5k ZW50ICovIHRydWUsIC8qIGluaXRfbWlzc2luZyAqLyBmYWxzZSk7Ci0JYXNzZXJ0KGVsbSAhPSBO VUxMKTsKLQlyZXR1cm4gcnRyZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCBydHJlZSwgZWxtLAotCSAg ICAvKiBkZXBlbmRlbnQgKi8gdHJ1ZSkubWV0YWRhdGE7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIHRy dWUgd2hlbiB0aGUgcmVxdWVzdCBjYW5ub3QgYmUgZnVsZmlsbGVkIGJ5IGZhc3RwYXRoLgotICov Ci1zdGF0aWMgaW5saW5lIGJvb2wKLXJ0cmVlX21ldGFkYXRhX3RyeV9yZWFkX2Zhc3QodHNkbl90 ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3QgKnJ0cmVlX2N0eCwKLSAgICB1aW50 cHRyX3Qga2V5LCBydHJlZV9tZXRhZGF0YV90ICpyX3J0cmVlX21ldGFkYXRhKSB7Ci0JcnRyZWVf bGVhZl9lbG1fdCAqZWxtOwotCS8qCi0JICogU2hvdWxkIGNoZWNrIHRoZSBib29sIHJldHVybiB2 YWx1ZSAobG9va3VwIHN1Y2Nlc3Mgb3Igbm90KSBpbnN0ZWFkIG9mCi0JICogZWxtID09IE5VTEwg KHdoaWNoIHdpbGwgcmVzdWx0IGluIGFuIGV4dHJhIGJyYW5jaCkuICBUaGlzIGlzIGJlY2F1c2UK LQkgKiB3aGVuIHRoZSBjYWNoZSBsb29rdXAgc3VjY2VlZHMsIHRoZXJlIHdpbGwgbmV2ZXIgYmUg YSBOVUxMIHBvaW50ZXIKLQkgKiByZXR1cm5lZCAod2hpY2ggaXMgdW5rbm93biB0byB0aGUgY29t cGlsZXIpLgotCSAqLwotCWlmIChydHJlZV9sZWFmX2VsbV9sb29rdXBfZmFzdCh0c2RuLCBydHJl ZSwgcnRyZWVfY3R4LCBrZXksICZlbG0pKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlhc3NlcnQo ZWxtICE9IE5VTEwpOwotCSpyX3J0cmVlX21ldGFkYXRhID0gcnRyZWVfbGVhZl9lbG1fcmVhZCh0 c2RuLCBydHJlZSwgZWxtLAotCSAgICAvKiBkZXBlbmRlbnQgKi8gdHJ1ZSkubWV0YWRhdGE7Ci0J cmV0dXJuIGZhbHNlOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXJ0cmVlX3dy aXRlX3JhbmdlX2ltcGwodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVfY3R4X3Qg KnJ0cmVlX2N0eCwKLSAgICB1aW50cHRyX3QgYmFzZSwgdWludHB0cl90IGVuZCwgcnRyZWVfY29u dGVudHNfdCBjb250ZW50cywgYm9vbCBjbGVhcmluZykgewotCWFzc2VydCgoYmFzZSAmIFBBR0Vf TUFTSykgPT0gMCAmJiAoZW5kICYgUEFHRV9NQVNLKSA9PSAwKTsKLQkvKgotCSAqIE9ubHkgdXNl ZCBmb3IgZW1hcF8oZGUpcmVnaXN0ZXJfaW50ZXJpb3IsIHdoaWNoIGltcGxpZXMgdGhlCi0JICog Ym91bmRhcmllcyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbHJlYWR5LiAgVGhlcmVmb3JlIGFsbCB0 aGUgbG9va3VwcwotCSAqIGFyZSBkZXBlbmRlbnQgdy9vIGluaXRfbWlzc2luZywgYXNzdW1pbmcg dGhlIHJhbmdlIHNwYW5zIGFjcm9zcyBhdAotCSAqIG1vc3QgMiBydHJlZSBsZWFmIG5vZGVzIChl YWNoIGNvdmVycyAxIEdpQiBvZiB2YWRkcikuCi0JICovCi0Jdm9pZCAqYml0czsKLQl1bnNpZ25l ZCBhZGRpdGlvbmFsOwotCXJ0cmVlX2NvbnRlbnRzX2VuY29kZShjb250ZW50cywgJmJpdHMsICZh ZGRpdGlvbmFsKTsKLQotCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IE5VTEw7IC8qIERlYWQgc3Rv cmUuICovCi0JZm9yICh1aW50cHRyX3QgYWRkciA9IGJhc2U7IGFkZHIgPD0gZW5kOyBhZGRyICs9 IFBBR0UpIHsKLQkJaWYgKGFkZHIgPT0gYmFzZSB8fAotCQkgICAgKGFkZHIgJiAoKFpVKDEpIDw8 IHJ0cmVlX2xlYWZfbWFza2JpdHMoKSkgLSAxKSkgPT0gMCkgewotCQkJZWxtID0gcnRyZWVfbGVh Zl9lbG1fbG9va3VwKHRzZG4sIHJ0cmVlLCBydHJlZV9jdHgsIGFkZHIsCi0JCQkgICAgLyogZGVw ZW5kZW50ICovIHRydWUsIC8qIGluaXRfbWlzc2luZyAqLyBmYWxzZSk7Ci0JCQlhc3NlcnQoZWxt ICE9IE5VTEwpOwotCQl9Ci0JCWFzc2VydChlbG0gPT0gcnRyZWVfbGVhZl9lbG1fbG9va3VwKHRz ZG4sIHJ0cmVlLCBydHJlZV9jdHgsIGFkZHIsCi0JCSAgICAvKiBkZXBlbmRlbnQgKi8gdHJ1ZSwg LyogaW5pdF9taXNzaW5nICovIGZhbHNlKSk7Ci0JCWFzc2VydCghY2xlYXJpbmcgfHwgcnRyZWVf bGVhZl9lbG1fcmVhZCh0c2RuLCBydHJlZSwgZWxtLAotCQkgICAgLyogZGVwZW5kZW50ICovIHRy dWUpLmVkYXRhICE9IE5VTEwpOwotCQlydHJlZV9sZWFmX2VsbV93cml0ZV9jb21taXQodHNkbiwg cnRyZWUsIGVsbSwgYml0cywgYWRkaXRpb25hbCk7Ci0JCWVsbSsrOwotCX0KLX0KLQotSkVNQUxM T0NfQUxXQVlTX0lOTElORSB2b2lkCi1ydHJlZV93cml0ZV9yYW5nZSh0c2RuX3QgKnRzZG4sIHJ0 cmVlX3QgKnJ0cmVlLCBydHJlZV9jdHhfdCAqcnRyZWVfY3R4LAotICAgIHVpbnRwdHJfdCBiYXNl LCB1aW50cHRyX3QgZW5kLCBydHJlZV9jb250ZW50c190IGNvbnRlbnRzKSB7Ci0JcnRyZWVfd3Jp dGVfcmFuZ2VfaW1wbCh0c2RuLCBydHJlZSwgcnRyZWVfY3R4LCBiYXNlLCBlbmQsIGNvbnRlbnRz LAotCSAgICAvKiBjbGVhcmluZyAqLyBmYWxzZSk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJ TkUgYm9vbAotcnRyZWVfd3JpdGUodHNkbl90ICp0c2RuLCBydHJlZV90ICpydHJlZSwgcnRyZWVf Y3R4X3QgKnJ0cmVlX2N0eCwgdWludHB0cl90IGtleSwKLSAgICBydHJlZV9jb250ZW50c190IGNv bnRlbnRzKSB7Ci0JcnRyZWVfbGVhZl9lbG1fdCAqZWxtID0gcnRyZWVfbGVhZl9lbG1fbG9va3Vw KHRzZG4sIHJ0cmVlLCBydHJlZV9jdHgsCi0JICAgIGtleSwgLyogZGVwZW5kZW50ICovIGZhbHNl LCAvKiBpbml0X21pc3NpbmcgKi8gdHJ1ZSk7Ci0JaWYgKGVsbSA9PSBOVUxMKSB7Ci0JCXJldHVy biB0cnVlOwotCX0KLQotCXJ0cmVlX2xlYWZfZWxtX3dyaXRlKHRzZG4sIHJ0cmVlLCBlbG0sIGNv bnRlbnRzKTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1ydHJl ZV9jbGVhcih0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9jdHhfdCAqcnRyZWVf Y3R4LAotICAgIHVpbnRwdHJfdCBrZXkpIHsKLQlydHJlZV9sZWFmX2VsbV90ICplbG0gPSBydHJl ZV9sZWFmX2VsbV9sb29rdXAodHNkbiwgcnRyZWUsIHJ0cmVlX2N0eCwKLQkgICAga2V5LCAvKiBk ZXBlbmRlbnQgKi8gdHJ1ZSwgLyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsKLQlhc3NlcnQoZWxt ICE9IE5VTEwpOwotCWFzc2VydChydHJlZV9sZWFmX2VsbV9yZWFkKHRzZG4sIHJ0cmVlLCBlbG0s Ci0JICAgIC8qIGRlcGVuZGVudCAqLyB0cnVlKS5lZGF0YSAhPSBOVUxMKTsKLQlydHJlZV9jb250 ZW50c190IGNvbnRlbnRzOwotCWNvbnRlbnRzLmVkYXRhID0gTlVMTDsKLQljb250ZW50cy5tZXRh ZGF0YS5zemluZCA9IFNDX05TSVpFUzsKLQljb250ZW50cy5tZXRhZGF0YS5zbGFiID0gZmFsc2U7 Ci0JY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IGZhbHNlOwotCWNvbnRlbnRzLm1ldGFkYXRh LnN0YXRlID0gKGV4dGVudF9zdGF0ZV90KTA7Ci0JcnRyZWVfbGVhZl9lbG1fd3JpdGUodHNkbiwg cnRyZWUsIGVsbSwgY29udGVudHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJ0cmVlX2Ns ZWFyX3JhbmdlKHRzZG5fdCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsIHJ0cmVlX2N0eF90ICpydHJl ZV9jdHgsCi0gICAgdWludHB0cl90IGJhc2UsIHVpbnRwdHJfdCBlbmQpIHsKLQlydHJlZV9jb250 ZW50c190IGNvbnRlbnRzOwotCWNvbnRlbnRzLmVkYXRhID0gTlVMTDsKLQljb250ZW50cy5tZXRh ZGF0YS5zemluZCA9IFNDX05TSVpFUzsKLQljb250ZW50cy5tZXRhZGF0YS5zbGFiID0gZmFsc2U7 Ci0JY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IGZhbHNlOwotCWNvbnRlbnRzLm1ldGFkYXRh LnN0YXRlID0gKGV4dGVudF9zdGF0ZV90KTA7Ci0JcnRyZWVfd3JpdGVfcmFuZ2VfaW1wbCh0c2Ru LCBydHJlZSwgcnRyZWVfY3R4LCBiYXNlLCBlbmQsIGNvbnRlbnRzLAotCSAgICAvKiBjbGVhcmlu ZyAqLyB0cnVlKTsKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1JUUkVFX0ggKi8K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3J0cmVlX3RzZC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9ydHJlZV90c2QuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ1NTI1Yy4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3J0cmVlX3RzZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotI2lmbmRlZiBK RU1BTExPQ19JTlRFUk5BTF9SVFJFRV9DVFhfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9S VFJFRV9DVFhfSAotCi0vKgotICogTnVtYmVyIG9mIGxlYWZrZXkvbGVhZiBwYWlycyB0byBjYWNo ZSBpbiBMMSBhbmQgTDIgbGV2ZWwgcmVzcGVjdGl2ZWx5LiAgRWFjaAotICogZW50cnkgc3VwcG9y dHMgYW4gZW50aXJlIGxlYWYsIHNvIHRoZSBjYWNoZSBoaXQgcmF0ZSBpcyB0eXBpY2FsbHkgaGln aCBldmVuCi0gKiB3aXRoIGEgc21hbGwgbnVtYmVyIG9mIGVudHJpZXMuICBJbiByYXJlIGNhc2Vz IGV4dGVudCBhY3Rpdml0eSB3aWxsIHN0cmFkZGxlCi0gKiB0aGUgYm91bmRhcnkgYmV0d2VlbiB0 d28gbGVhZiBub2Rlcy4gIEZ1cnRoZXJtb3JlLCBhbiBhcmVuYSBtYXkgdXNlIGEKLSAqIGNvbWJp bmF0aW9uIG9mIGRzcyBhbmQgbW1hcC4gIE5vdGUgdGhhdCBhcyBtZW1vcnkgdXNhZ2UgZ3Jvd3Mg cGFzdCB0aGUgYW1vdW50Ci0gKiB0aGF0IHRoaXMgY2FjaGUgY2FuIGRpcmVjdGx5IGNvdmVyLCB0 aGUgY2FjaGUgd2lsbCBiZWNvbWUgbGVzcyBlZmZlY3RpdmUgaWYKLSAqIGxvY2FsaXR5IG9mIHJl ZmVyZW5jZSBpcyBsb3csIGJ1dCB0aGUgY29uc2VxdWVuY2UgaXMgbWVyZWx5IGNhY2hlIG1pc3Nl cwotICogd2hpbGUgdHJhdmVyc2luZyB0aGUgdHJlZSBub2Rlcy4KLSAqCi0gKiBUaGUgTDEgZGly ZWN0IG1hcHBlZCBjYWNoZSBvZmZlcnMgY29uc2lzdGVudCBhbmQgbG93IGNvc3Qgb24gY2FjaGUg aGl0LgotICogSG93ZXZlciBjb2xsaXNpb24gY291bGQgYWZmZWN0IGhpdCByYXRlIG5lZ2F0aXZl bHkuICBUaGlzIGlzIHJlc29sdmVkIGJ5Ci0gKiBjb21iaW5pbmcgd2l0aCBhIEwyIExSVSBjYWNo ZSwgd2hpY2ggcmVxdWlyZXMgbGluZWFyIHNlYXJjaCBhbmQgcmUtb3JkZXJpbmcKLSAqIG9uIGFj Y2VzcyBidXQgc3VmZmVycyBubyBjb2xsaXNpb24uICBOb3RlIHRoYXQsIHRoZSBjYWNoZSB3aWxs IGl0c2VsZiBzdWZmZXIKLSAqIGNhY2hlIG1pc3NlcyBpZiBtYWRlIG92ZXJseSBsYXJnZSwgcGx1 cyB0aGUgY29zdCBvZiBsaW5lYXIgc2VhcmNoIGluIHRoZSBMUlUKLSAqIGNhY2hlLgotICovCi0j ZGVmaW5lIFJUUkVFX0NUWF9OQ0FDSEUgMTYKLSNkZWZpbmUgUlRSRUVfQ1RYX05DQUNIRV9MMiA4 Ci0KLS8qIE5lZWRlZCBmb3IgaW5pdGlhbGl6YXRpb24gb25seS4gKi8KLSNkZWZpbmUgUlRSRUVf TEVBRktFWV9JTlZBTElEICgodWludHB0cl90KTEpCi0jZGVmaW5lIFJUUkVFX0NUWF9DQUNIRV9F TE1fSU5WQUxJRCB7UlRSRUVfTEVBRktFWV9JTlZBTElELCBOVUxMfQotCi0jZGVmaW5lIFJUUkVF X0NUWF9JTklUX0VMTV8xIFJUUkVFX0NUWF9DQUNIRV9FTE1fSU5WQUxJRAotI2RlZmluZSBSVFJF RV9DVFhfSU5JVF9FTE1fMiBSVFJFRV9DVFhfSU5JVF9FTE1fMSwgUlRSRUVfQ1RYX0lOSVRfRUxN XzEKLSNkZWZpbmUgUlRSRUVfQ1RYX0lOSVRfRUxNXzQgUlRSRUVfQ1RYX0lOSVRfRUxNXzIsIFJU UkVFX0NUWF9JTklUX0VMTV8yCi0jZGVmaW5lIFJUUkVFX0NUWF9JTklUX0VMTV84IFJUUkVFX0NU WF9JTklUX0VMTV80LCBSVFJFRV9DVFhfSU5JVF9FTE1fNAotI2RlZmluZSBSVFJFRV9DVFhfSU5J VF9FTE1fMTYgUlRSRUVfQ1RYX0lOSVRfRUxNXzgsIFJUUkVFX0NUWF9JTklUX0VMTV84Ci0KLSNk ZWZpbmUgX1JUUkVFX0NUWF9JTklUX0VMTV9EQVRBKG4pIFJUUkVFX0NUWF9JTklUX0VMTV8jI24K LSNkZWZpbmUgUlRSRUVfQ1RYX0lOSVRfRUxNX0RBVEEobikgX1JUUkVFX0NUWF9JTklUX0VMTV9E QVRBKG4pCi0KLS8qCi0gKiBTdGF0aWMgaW5pdGlhbGl6ZXIgKHRvIGludmFsaWRhdGUgdGhlIGNh Y2hlIGVudHJpZXMpIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlCi0gKiBmcmVlIGZhc3RwYXRoIG1h eSBhY2Nlc3MgdGhlIHJ0cmVlIGNhY2hlIGJlZm9yZSBhIGZ1bGwgdHNkIGluaXRpYWxpemF0aW9u LgotICovCi0jZGVmaW5lIFJUUkVFX0NUWF9JTklUSUFMSVpFUiB7e1JUUkVFX0NUWF9JTklUX0VM TV9EQVRBKFJUUkVFX0NUWF9OQ0FDSEUpfSwgXAotCQkJICAgICAgIHtSVFJFRV9DVFhfSU5JVF9F TE1fREFUQShSVFJFRV9DVFhfTkNBQ0hFX0wyKX19Ci0KLXR5cGVkZWYgc3RydWN0IHJ0cmVlX2xl YWZfZWxtX3MgcnRyZWVfbGVhZl9lbG1fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcnRyZWVfY3R4X2Nh Y2hlX2VsbV9zIHJ0cmVlX2N0eF9jYWNoZV9lbG1fdDsKLXN0cnVjdCBydHJlZV9jdHhfY2FjaGVf ZWxtX3MgewotCXVpbnRwdHJfdAkJbGVhZmtleTsKLQlydHJlZV9sZWFmX2VsbV90CSpsZWFmOwot fTsKLQotdHlwZWRlZiBzdHJ1Y3QgcnRyZWVfY3R4X3MgcnRyZWVfY3R4X3Q7Ci1zdHJ1Y3QgcnRy ZWVfY3R4X3MgewotCS8qIERpcmVjdCBtYXBwZWQgY2FjaGUuICovCi0JcnRyZWVfY3R4X2NhY2hl X2VsbV90CWNhY2hlW1JUUkVFX0NUWF9OQ0FDSEVdOwotCS8qIEwyIExSVSBjYWNoZS4gKi8KLQly dHJlZV9jdHhfY2FjaGVfZWxtX3QJbDJfY2FjaGVbUlRSRUVfQ1RYX05DQUNIRV9MMl07Ci19Owot Ci12b2lkIHJ0cmVlX2N0eF9kYXRhX2luaXQocnRyZWVfY3R4X3QgKmN0eCk7Ci0KLSNlbmRpZiAv KiBKRU1BTExPQ19JTlRFUk5BTF9SVFJFRV9DVFhfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv c2FmZXR5X2NoZWNrLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NhZmV0eV9jaGVjay5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBmMWE3NGYxLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc2FmZXR5X2NoZWNr LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVS TkFMX1NBRkVUWV9DSEVDS19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NBRkVUWV9DSEVD S19ICi0KLXZvaWQgc2FmZXR5X2NoZWNrX2ZhaWxfc2l6ZWRfZGVhbGxvYyhib29sIGN1cnJlbnRf ZGVhbGxvYywgY29uc3Qgdm9pZCAqcHRyLAotICAgIHNpemVfdCB0cnVlX3NpemUsIHNpemVfdCBp bnB1dF9zaXplKTsKLXZvaWQgc2FmZXR5X2NoZWNrX2ZhaWwoY29uc3QgY2hhciAqZm9ybWF0LCAu Li4pOwotCi10eXBlZGVmIHZvaWQgKCpzYWZldHlfY2hlY2tfYWJvcnRfaG9va190KShjb25zdCBj aGFyICptZXNzYWdlKTsKLQotLyogQ2FuIHNldCB0byBOVUxMIGZvciBhIGRlZmF1bHQuICovCi12 b2lkIHNhZmV0eV9jaGVja19zZXRfYWJvcnQoc2FmZXR5X2NoZWNrX2Fib3J0X2hvb2tfdCBhYm9y dF9mbik7Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotc2FmZXR5X2NoZWNrX3NldF9y ZWR6b25lKHZvaWQgKnB0ciwgc2l6ZV90IHVzaXplLCBzaXplX3QgYnVtcGVkX3VzaXplKSB7Ci0J YXNzZXJ0KHVzaXplIDwgYnVtcGVkX3VzaXplKTsKLQlmb3IgKHNpemVfdCBpID0gdXNpemU7IGkg PCBidW1wZWRfdXNpemUgJiYgaSA8IHVzaXplICsgMzI7ICsraSkgewotCQkqKCh1bnNpZ25lZCBj aGFyICopcHRyICsgaSkgPSAweEJDOwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2 b2lkCi1zYWZldHlfY2hlY2tfdmVyaWZ5X3JlZHpvbmUoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qg dXNpemUsIHNpemVfdCBidW1wZWRfdXNpemUpCi17Ci0JZm9yIChzaXplX3QgaSA9IHVzaXplOyBp IDwgYnVtcGVkX3VzaXplICYmIGkgPCB1c2l6ZSArIDMyOyArK2kpIHsKLQkJaWYgKHVubGlrZWx5 KCooKHVuc2lnbmVkIGNoYXIgKilwdHIgKyBpKSAhPSAweEJDKSkgewotCQkJc2FmZXR5X2NoZWNr X2ZhaWwoIlVzZSBhZnRlciBmcmVlIGVycm9yXG4iKTsKLQkJfQotCX0KLX0KLQotI2VuZGlmIC8q SkVNQUxMT0NfSU5URVJOQUxfU0FGRVRZX0NIRUNLX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFs L3Nhbi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC9zYW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgx M2Q2Yi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Nhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkx ICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfR1VBUkRfSAotI2RlZmluZSBKRU1B TExPQ19JTlRFUk5BTF9HVUFSRF9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9laG9v a3MuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lbWFwLmgiCi0KLSNkZWZpbmUgU0FO X1BBR0VfR1VBUkQgUEFHRQotI2RlZmluZSBTQU5fUEFHRV9HVUFSRFNfU0laRSAoU0FOX1BBR0Vf R1VBUkQgKiAyKQotCi0jZGVmaW5lIFNBTl9HVUFSRF9MQVJHRV9FVkVSWV9OX0VYVEVOVFNfREVG QVVMVCAwCi0jZGVmaW5lIFNBTl9HVUFSRF9TTUFMTF9FVkVSWV9OX0VYVEVOVFNfREVGQVVMVCAw Ci0KLSNkZWZpbmUgU0FOX0xHX1VBRl9BTElHTl9ERUZBVUxUICgtMSkKLSNkZWZpbmUgU0FOX0NB Q0hFX0JJTl9OT05GQVNUX01BU0tfREVGQVVMVCAodWludHB0cl90KSgtMSkKLQotc3RhdGljIGNv bnN0IHVpbnRwdHJfdCB1YWZfZGV0ZWN0X2p1bmsgPSAodWludHB0cl90KTB4NWI1YjViNWI1YjVi NWI1YlVMTDsKLQotLyogMCBtZWFucyBkaXNhYmxlZCwgaS5lLiBuZXZlciBndWFyZGVkLiAqLwot ZXh0ZXJuIHNpemVfdCBvcHRfc2FuX2d1YXJkX2xhcmdlOwotZXh0ZXJuIHNpemVfdCBvcHRfc2Fu X2d1YXJkX3NtYWxsOwotLyogLTEgbWVhbnMgZGlzYWJsZWQsIGkuZS4gbmV2ZXIgY2hlY2sgZm9y IHVzZS1hZnRlci1mcmVlLiAqLwotZXh0ZXJuIHNzaXplX3Qgb3B0X2xnX3Nhbl91YWZfYWxpZ247 Ci0KLXZvaWQgc2FuX2d1YXJkX3BhZ2VzKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywg ZWRhdGFfdCAqZWRhdGEsCi0gICAgZW1hcF90ICplbWFwLCBib29sIGxlZnQsIGJvb2wgcmlnaHQs IGJvb2wgcmVtYXApOwotdm9pZCBzYW5fdW5ndWFyZF9wYWdlcyh0c2RuX3QgKnRzZG4sIGVob29r c190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAotICAgIGVtYXBfdCAqZW1hcCwgYm9vbCBsZWZ0 LCBib29sIHJpZ2h0KTsKLS8qCi0gKiBVbmd1YXJkIHRoZSBleHRlbnQsIGJ1dCBkb24ndCBtb2Rp ZnkgZW1hcCBib3VuZGFyaWVzLiBNdXN0IGJlIGNhbGxlZCBvbiBhbgotICogZXh0ZW50IHRoYXQg aGFzIGJlZW4gZXJhc2VkIGZyb20gZW1hcCBhbmQgc2hvdWxkbid0IGJlIHBsYWNlZCBiYWNrLgot ICovCi12b2lkIHNhbl91bmd1YXJkX3BhZ2VzX3ByZV9kZXN0cm95KHRzZG5fdCAqdHNkbiwgZWhv b2tzX3QgKmVob29rcywKLSAgICBlZGF0YV90ICplZGF0YSwgZW1hcF90ICplbWFwKTsKLXZvaWQg c2FuX2NoZWNrX3N0YXNoZWRfcHRycyh2b2lkICoqcHRycywgc2l6ZV90IG5zdGFzaGVkLCBzaXpl X3QgdXNpemUpOwotCi12b2lkIHRzZF9zYW5faW5pdCh0c2RfdCAqdHNkKTsKLXZvaWQgc2FuX2lu aXQoc3NpemVfdCBsZ19zYW5fdWFmX2FsaWduKTsKLQotc3RhdGljIGlubGluZSB2b2lkCi1zYW5f Z3VhcmRfcGFnZXNfdHdvX3NpZGVkKHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywgZWRh dGFfdCAqZWRhdGEsCi0gICAgZW1hcF90ICplbWFwLCBib29sIHJlbWFwKSB7Ci0Jc2FuX2d1YXJk X3BhZ2VzKHRzZG4sIGVob29rcywgZWRhdGEsIGVtYXAsIHRydWUsIHRydWUsIHJlbWFwKTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkCi1zYW5fdW5ndWFyZF9wYWdlc190d29fc2lkZWQodHNkbl90 ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICplZGF0YSwKLSAgICBlbWFwX3QgKmVt YXApIHsKLQlzYW5fdW5ndWFyZF9wYWdlcyh0c2RuLCBlaG9va3MsIGVkYXRhLCBlbWFwLCB0cnVl LCB0cnVlKTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLXNhbl90d29fc2lkZV91bmd1YXJk ZWRfc3ooc2l6ZV90IHNpemUpIHsKLQlhc3NlcnQoc2l6ZSAlIFBBR0UgPT0gMCk7Ci0JYXNzZXJ0 KHNpemUgPj0gU0FOX1BBR0VfR1VBUkRTX1NJWkUpOwotCXJldHVybiBzaXplIC0gU0FOX1BBR0Vf R1VBUkRTX1NJWkU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1zYW5fdHdvX3NpZGVfZ3Vh cmRlZF9zeihzaXplX3Qgc2l6ZSkgewotCWFzc2VydChzaXplICUgUEFHRSA9PSAwKTsKLQlyZXR1 cm4gc2l6ZSArIFNBTl9QQUdFX0dVQVJEU19TSVpFOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVf dAotc2FuX29uZV9zaWRlX3VuZ3VhcmRlZF9zeihzaXplX3Qgc2l6ZSkgewotCWFzc2VydChzaXpl ICUgUEFHRSA9PSAwKTsKLQlhc3NlcnQoc2l6ZSA+PSBTQU5fUEFHRV9HVUFSRCk7Ci0JcmV0dXJu IHNpemUgLSBTQU5fUEFHRV9HVUFSRDsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLXNhbl9v bmVfc2lkZV9ndWFyZGVkX3N6KHNpemVfdCBzaXplKSB7Ci0JYXNzZXJ0KHNpemUgJSBQQUdFID09 IDApOwotCXJldHVybiBzaXplICsgU0FOX1BBR0VfR1VBUkQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg Ym9vbAotc2FuX2d1YXJkX2VuYWJsZWQodm9pZCkgewotCXJldHVybiAob3B0X3Nhbl9ndWFyZF9s YXJnZSAhPSAwIHx8IG9wdF9zYW5fZ3VhcmRfc21hbGwgIT0gMCk7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgYm9vbAotc2FuX2xhcmdlX2V4dGVudF9kZWNpZGVfZ3VhcmQodHNkbl90ICp0c2RuLCBlaG9v a3NfdCAqZWhvb2tzLCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50KSB7Ci0JaWYg KG9wdF9zYW5fZ3VhcmRfbGFyZ2UgPT0gMCB8fCBlaG9va3NfZ3VhcmRfd2lsbF9mYWlsKGVob29r cykgfHwKLQkgICAgdHNkbl9udWxsKHRzZG4pKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQl0 c2RfdCAqdHNkID0gdHNkbl90c2QodHNkbik7Ci0JdWludDY0X3QgbiA9IHRzZF9zYW5fZXh0ZW50 c191bnRpbF9ndWFyZF9sYXJnZV9nZXQodHNkKTsKLQlhc3NlcnQobiA+PSAxKTsKLQlpZiAobiA+ IDEpIHsKLQkJLyoKLQkJICogU3VidHJhY3QgY29uZGl0aW9uYWxseSBiZWNhdXNlIHRoZSBndWFy ZCBtYXkgbm90IGhhcHBlbiBkdWUKLQkJICogdG8gYWxpZ25tZW50IG9yIHNpemUgcmVzdHJpY3Rp b24gYmVsb3cuCi0JCSAqLwotCQkqdHNkX3Nhbl9leHRlbnRzX3VudGlsX2d1YXJkX2xhcmdlcF9n ZXQodHNkKSA9IG4gLSAxOwotCX0KLQotCWlmIChuID09IDEgJiYgKGFsaWdubWVudCA8PSBQQUdF KSAmJgotCSAgICAoc2FuX3R3b19zaWRlX2d1YXJkZWRfc3ooc2l6ZSkgPD0gU0NfTEFSR0VfTUFY Q0xBU1MpKSB7Ci0JCSp0c2Rfc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfbGFyZ2VwX2dldCh0c2Qp ID0KLQkJICAgIG9wdF9zYW5fZ3VhcmRfbGFyZ2U7Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSB7 Ci0JCWFzc2VydCh0c2Rfc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfbGFyZ2VfZ2V0KHRzZCkgPj0g MSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotc2FuX3Ns YWJfZXh0ZW50X2RlY2lkZV9ndWFyZCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MpIHsK LQlpZiAob3B0X3Nhbl9ndWFyZF9zbWFsbCA9PSAwIHx8IGVob29rc19ndWFyZF93aWxsX2ZhaWwo ZWhvb2tzKSB8fAotCSAgICB0c2RuX251bGwodHNkbikpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0K LQotCXRzZF90ICp0c2QgPSB0c2RuX3RzZCh0c2RuKTsKLQl1aW50NjRfdCBuID0gdHNkX3Nhbl9l eHRlbnRzX3VudGlsX2d1YXJkX3NtYWxsX2dldCh0c2QpOwotCWFzc2VydChuID49IDEpOwotCWlm IChuID09IDEpIHsKLQkJKnRzZF9zYW5fZXh0ZW50c191bnRpbF9ndWFyZF9zbWFsbHBfZ2V0KHRz ZCkgPQotCQkgICAgb3B0X3Nhbl9ndWFyZF9zbWFsbDsKLQkJcmV0dXJuIHRydWU7Ci0JfSBlbHNl IHsKLQkJKnRzZF9zYW5fZXh0ZW50c191bnRpbF9ndWFyZF9zbWFsbHBfZ2V0KHRzZCkgPSBuIC0g MTsKLQkJYXNzZXJ0KHRzZF9zYW5fZXh0ZW50c191bnRpbF9ndWFyZF9zbWFsbF9nZXQodHNkKSA+ PSAxKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1zYW5f anVua19wdHJfbG9jYXRpb25zKHZvaWQgKnB0ciwgc2l6ZV90IHVzaXplLCB2b2lkICoqZmlyc3Qs IHZvaWQgKiptaWQsCi0gICAgdm9pZCAqKmxhc3QpIHsKLQlzaXplX3QgcHRyX3N6ID0gc2l6ZW9m KHZvaWQgKik7Ci0KLQkqZmlyc3QgPSBwdHI7Ci0KLQkqbWlkID0gKHZvaWQgKikoKHVpbnRwdHJf dClwdHIgKyAoKHVzaXplID4+IDEpICYgfihwdHJfc3ogLSAxKSkpOwotCWFzc2VydCgqZmlyc3Qg IT0gKm1pZCB8fCB1c2l6ZSA9PSBwdHJfc3opOwotCWFzc2VydCgodWludHB0cl90KSpmaXJzdCA8 PSAodWludHB0cl90KSptaWQpOwotCi0JLyoKLQkgKiBXaGVuIHVzaXplID4gMzJLLCB0aGUgZ2Fw IGJldHdlZW4gcmVxdWVzdGVkX3NpemUgYW5kIHVzaXplIG1pZ2h0IGJlCi0JICogZ3JlYXRlciB0 aGFuIDRLIC0tIHRoaXMgbWVhbnMgdGhlIGxhc3Qgd3JpdGUgbWF5IGFjY2VzcyBhbgotCSAqIGxp a2VseS11bnRvdWNoZWQgcGFnZSAoZGVmYXVsdCBzZXR0aW5ncyB3LyA0SyBwYWdlcykuICBIb3dl dmVyIGJ5Ci0JICogZGVmYXVsdCB0aGUgdGNhY2hlIG9ubHkgZ29lcyB1cCB0byB0aGUgMzJLIHNp emUgY2xhc3MsIGFuZCBpcyB1c3VhbGx5Ci0JICogdHVuZWQgbG93ZXIgaW5zdGVhZCBvZiBoaWdo ZXIsIHdoaWNoIG1ha2VzIGl0IGxlc3Mgb2YgYSBjb25jZXJuLgotCSAqLwotCSpsYXN0ID0gKHZv aWQgKikoKHVpbnRwdHJfdClwdHIgKyB1c2l6ZSAtIHNpemVvZih1YWZfZGV0ZWN0X2p1bmspKTsK LQlhc3NlcnQoKmZpcnN0ICE9ICpsYXN0IHx8IHVzaXplID09IHB0cl9zeik7Ci0JYXNzZXJ0KCpt aWQgIT0gKmxhc3QgfHwgdXNpemUgPD0gcHRyX3N6ICogMik7Ci0JYXNzZXJ0KCh1aW50cHRyX3Qp Km1pZCA8PSAodWludHB0cl90KSpsYXN0KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1zYW5f anVua19wdHJfc2hvdWxkX3Nsb3codm9pZCkgewotCS8qCi0JICogVGhlIGxhdHRlciBjb25kaXRp b24gKHBvaW50ZXIgc2l6ZSBncmVhdGVyIHRoYW4gdGhlIG1pbiBzaXplIGNsYXNzKQotCSAqIGlz IG5vdCBleHBlY3RlZCAtLSBmYWxsIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3Igc2ltcGxpY2l0 eS4KLQkgKi8KLQlyZXR1cm4gY29uZmlnX2RlYnVnIHx8IChMR19TSVpFT0ZfUFRSID4gU0NfTEdf VElOWV9NSU4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXNhbl9qdW5rX3B0cih2b2lkICpw dHIsIHNpemVfdCB1c2l6ZSkgewotCWlmIChzYW5fanVua19wdHJfc2hvdWxkX3Nsb3coKSkgewot CQltZW1zZXQocHRyLCAoY2hhcil1YWZfZGV0ZWN0X2p1bmssIHVzaXplKTsKLQkJcmV0dXJuOwot CX0KLQotCXZvaWQgKmZpcnN0LCAqbWlkLCAqbGFzdDsKLQlzYW5fanVua19wdHJfbG9jYXRpb25z KHB0ciwgdXNpemUsICZmaXJzdCwgJm1pZCwgJmxhc3QpOwotCSoodWludHB0cl90ICopZmlyc3Qg PSB1YWZfZGV0ZWN0X2p1bms7Ci0JKih1aW50cHRyX3QgKiltaWQgPSB1YWZfZGV0ZWN0X2p1bms7 Ci0JKih1aW50cHRyX3QgKilsYXN0ID0gdWFmX2RldGVjdF9qdW5rOwotfQotCi1zdGF0aWMgaW5s aW5lIGJvb2wKLXNhbl91YWZfZGV0ZWN0aW9uX2VuYWJsZWQodm9pZCkgewotCWJvb2wgcmV0ID0g Y29uZmlnX3VhZl9kZXRlY3Rpb24gJiYgKG9wdF9sZ19zYW5fdWFmX2FsaWduICE9IC0xKTsKLQlp ZiAoY29uZmlnX3VhZl9kZXRlY3Rpb24gJiYgcmV0KSB7Ci0JCWFzc2VydChzYW5fY2FjaGVfYmlu X25vbmZhc3RfbWFzayA9PSAoKHVpbnRwdHJfdCkxIDw8Ci0JCSAgICBvcHRfbGdfc2FuX3VhZl9h bGlnbikgLSAxKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogSkVNQUxMT0Nf SU5URVJOQUxfR1VBUkRfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc2FuX2J1bXAuaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvc2FuX2J1bXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVjNGE3MS4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNs dWRlL2plbWFsbG9jL2ludGVybmFsL3Nhbl9idW1wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiAr MCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1NBTl9CVU1QX0gKLSNkZWZpbmUgSkVN QUxMT0NfSU5URVJOQUxfU0FOX0JVTVBfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv ZWRhdGEuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9leHBfZ3Jvdy5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0KLSNkZWZpbmUgU0JBX1JFVEFJTkVEX0FM TE9DX1NJWkUgKChzaXplX3QpNCA8PCAyMCkKLQotZXh0ZXJuIGJvb2wgb3B0X3JldGFpbjsKLQot dHlwZWRlZiBzdHJ1Y3QgZWhvb2tzX3MgZWhvb2tzX3Q7Ci10eXBlZGVmIHN0cnVjdCBwYWNfcyBw YWNfdDsKLQotdHlwZWRlZiBzdHJ1Y3Qgc2FuX2J1bXBfYWxsb2NfcyBzYW5fYnVtcF9hbGxvY190 Owotc3RydWN0IHNhbl9idW1wX2FsbG9jX3MgewotCW1hbGxvY19tdXRleF90IG10eDsKLQotCWVk YXRhX3QgKmN1cnJfcmVnOwotfTsKLQotc3RhdGljIGlubGluZSBib29sCi1zYW5fYnVtcF9lbmFi bGVkKCkgewotCS8qCi0JICogV2UgZW5hYmxlIHNhbl9idW1wIGFsbG9jYXRvciBvbmx5IHdoZW4g aXQncyBwb3NzaWJsZSB0byBicmVhayB1cCBhCi0JICogbWFwcGluZyBhbmQgdW5tYXAgYSBwYXJ0 IG9mIGl0IChtYXBzX2NvYWxlc2NlKS4gVGhpcyBpcyBuZWVkZWQgdG8KLQkgKiBlbnN1cmUgdGhl IGFyZW5hIGRlc3RydWN0aW9uIHByb2Nlc3MgY2FuIGRlc3Ryb3kgYWxsIHJldGFpbmVkIGd1YXJk ZWQKLQkgKiBleHRlbnRzIG9uZSBieSBvbmUgYW5kIHRvIHVubWFwIGEgdHJhaWxpbmcgcGFydCBv ZiBhIHJldGFpbmVkIGd1YXJkZWQKLQkgKiByZWdpb24gd2hlbiBpdCdzIHRvbyBzbWFsbCB0byBm aXQgYSBwZW5kaW5nIGFsbG9jYXRpb24uCi0JICogb3B0X3JldGFpbiBpcyByZXF1aXJlZCwgYmVj YXVzZSB0aGlzIGFsbG9jYXRvciByZXRhaW5zIGEgbGFyZ2UKLQkgKiB2aXJ0dWFsIG1lbW9yeSBt YXBwaW5nIGFuZCByZXR1cm5zIHNtYWxsZXIgcGFydHMgb2YgaXQuCi0JICovCi0JcmV0dXJuIG1h cHNfY29hbGVzY2UgJiYgb3B0X3JldGFpbjsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1zYW5f YnVtcF9hbGxvY19pbml0KHNhbl9idW1wX2FsbG9jX3QqIHNiYSkgewotCWJvb2wgZXJyID0gbWFs bG9jX211dGV4X2luaXQoJnNiYS0+bXR4LCAic2FuaXRpemVyX2J1bXBfYWxsb2NhdG9yIiwKLQkg ICAgV0lUTkVTU19SQU5LX1NBTl9CVU1QX0FMTE9DLCBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNp dmUpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXNiYS0+Y3Vycl9yZWcgPSBO VUxMOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1lZGF0YV90ICoKLXNhbl9idW1wX2FsbG9jKHRz ZG5fdCAqdHNkbiwgc2FuX2J1bXBfYWxsb2NfdCogc2JhLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAq ZWhvb2tzLAotICAgIHNpemVfdCBzaXplLCBib29sIHplcm8pOwotCi0jZW5kaWYgLyogSkVNQUxM T0NfSU5URVJOQUxfU0FOX0JVTVBfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc2MuaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvc2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhYjM0Ny4uMDAwMDAw MAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2pl bWFsbG9jL2ludGVybmFsL3NjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNTcgKzAsMCBAQAotI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9TQ19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1ND X0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX3R5cGVz LmgiCi0KLS8qCi0gKiBTaXplIGNsYXNzIGNvbXB1dGF0aW9uczoKLSAqCi0gKiBUaGVzZSBhcmUg YSBsaXR0bGUgdHJpY2t5OyB3ZSdsbCBmaXJzdCBzdGFydCBieSBkZXNjcmliaW5nIGhvdyB0aGlu Z3MKLSAqIGdlbmVyYWxseSB3b3JrLCBhbmQgdGhlbiBkZXNjcmliZSBzb21lIG9mIHRoZSBkZXRh aWxzLgotICoKLSAqIElnbm9yZSB0aGUgZmlyc3QgZmV3IHNpemUgY2xhc3NlcyBmb3IgYSBtb21l bnQuIFdlIGNhbiB0aGVuIHNwbGl0IGFsbCB0aGUKLSAqIHJlbWFpbmluZyBzaXplIGNsYXNzZXMg aW50byBncm91cHMuIFRoZSBzaXplIGNsYXNzZXMgaW4gYSBncm91cCBhcmUgc3BhY2VkCi0gKiBz dWNoIHRoYXQgdGhleSBjb3ZlciBhbGxvY2F0aW9uIHJlcXVlc3Qgc2l6ZXMgaW4gYSBwb3dlci1v Zi0yIHJhbmdlLiBUaGUKLSAqIHBvd2VyIG9mIHR3byBpcyBjYWxsZWQgdGhlIGJhc2Ugb2YgdGhl IGdyb3VwLCBhbmQgdGhlIHNpemUgY2xhc3NlcyBpbiBpdAotICogc2F0aXNmeSBhbGxvY2F0aW9u cyBpbiB0aGUgaGFsZi1vcGVuIHJhbmdlIChiYXNlLCBiYXNlICogMl0uIFRoZXJlIGFyZQotICog U0NfTkdST1VQIHNpemUgY2xhc3NlcyBpbiBlYWNoIGdyb3VwLCBlcXVhbGx5IHNwYWNlZCBpbiB0 aGUgcmFuZ2UsIHNvIHRoYXQKLSAqIGVhY2ggb25lIGNvdmVycyBhbGxvY2F0aW9ucyBmb3IgYmFz ZSAvIFNDX05HUk9VUCBwb3NzaWJsZSBhbGxvY2F0aW9uIHNpemVzLgotICogV2UgY2FsbCB0aGF0 IHZhbHVlIChiYXNlIC8gU0NfTkdST1VQKSB0aGUgZGVsdGEgb2YgdGhlIGdyb3VwLiBFYWNoIHNp emUgY2xhc3MKLSAqIGlzIGRlbHRhIGxhcmdlciB0aGFuIHRoZSBvbmUgYmVmb3JlIGl0IChpbmNs dWRpbmcgdGhlIGluaXRpYWwgc2l6ZSBjbGFzcyBpbiBhCi0gKiBncm91cCwgd2hpY2ggaXMgZGVs dGEgbGFyZ2VyIHRoYW4gYmFzZSwgdGhlIGxhcmdlc3Qgc2l6ZSBjbGFzcyBpbiB0aGUKLSAqIHBy ZXZpb3VzIGdyb3VwKS4KLSAqIFRvIG1ha2UgdGhlIG1hdGggYWxsIHdvcmsgb3V0IG5pY2VseSwg d2UgcmVxdWlyZSB0aGF0IFNDX05HUk9VUCBpcyBhIHBvd2VyIG9mCi0gKiB0d28sIGFuZCBkZWZp bmUgaXQgaW4gdGVybXMgb2YgU0NfTEdfTkdST1VQLiBXZSdsbCBvZnRlbiB0YWxrIGluIHRlcm1z IG9mCi0gKiBsZ19iYXNlIGFuZCBsZ19kZWx0YS4gRm9yIGVhY2ggb2YgdGhlc2UgZ3JvdXBzIHRo ZW4sIHdlIGhhdmUgdGhhdAotICogbGdfZGVsdGEgPT0gbGdfYmFzZSAtIFNDX0xHX05HUk9VUC4K LSAqIFRoZSBzaXplIGNsYXNzZXMgaW4gYSBncm91cCB3aXRoIGEgZ2l2ZW4gbGdfYmFzZSBhbmQg bGdfZGVsdGEgKHdoaWNoLCByZWNhbGwsCi0gKiBjYW4gYmUgY29tcHV0ZWQgZnJvbSBsZ19iYXNl IGZvciB0aGVzZSBncm91cHMpIGFyZSB0aGVyZWZvcmU6Ci0gKiAgIGJhc2UgKyAxICogZGVsdGEK LSAqICAgICB3aGljaCBjb3ZlcnMgYWxsb2NhdGlvbnMgaW4gKGJhc2UsIGJhc2UgKyAxICogZGVs dGFdCi0gKiAgIGJhc2UgKyAyICogZGVsdGEKLSAqICAgICB3aGljaCBjb3ZlcnMgYWxsb2NhdGlv bnMgaW4gKGJhc2UgKyAxICogZGVsdGEsIGJhc2UgKyAyICogZGVsdGFdLgotICogICBiYXNlICsg MyAqIGRlbHRhCi0gKiAgICAgd2hpY2ggY292ZXJzIGFsbG9jYXRpb25zIGluIChiYXNlICsgMiAq IGRlbHRhLCBiYXNlICsgMyAqIGRlbHRhXS4KLSAqICAgLi4uCi0gKiAgIGJhc2UgKyBTQ19OR1JP VVAgKiBkZWx0YSAoID09IDIgKiBiYXNlKQotICogICAgIHdoaWNoIGNvdmVycyBhbGxvY2F0aW9u cyBpbiAoYmFzZSArIChTQ19OR1JPVVAgLSAxKSAqIGRlbHRhLCAyICogYmFzZV0uCi0gKiAoTm90 ZSB0aGF0IGN1cnJlbnRseSBTQ19OR1JPVVAgaXMgYWx3YXlzIDQsIHNvIHRoZSAiLi4uIiBpcyBl bXB0eSBpbgotICogcHJhY3RpY2UuKQotICogTm90ZSB0aGF0IHRoZSBsYXN0IHNpemUgY2xhc3Mg aW4gdGhlIGdyb3VwIGlzIHRoZSBuZXh0IHBvd2VyIG9mIHR3byAoYWZ0ZXIKLSAqIGJhc2UpLCBz byB0aGF0IHdlJ3ZlIHNldCB1cCB0aGUgaW5kdWN0aW9uIGNvcnJlY3RseSBmb3IgdGhlIG5leHQg Z3JvdXAncwotICogc2VsZWN0aW9uIG9mIGRlbHRhLgotICoKLSAqIE5vdywgbGV0J3Mgc3RhcnQg Y29uc2lkZXJpbmcgdGhlIGZpcnN0IGZldyBzaXplIGNsYXNzZXMuIFR3byBleHRyYSBjb25zdGFu dHMKLSAqIGNvbWUgaW50byBwbGF5IGhlcmU6IExHX1FVQU5UVU0gYW5kIFNDX0xHX1RJTllfTUlO LiBMR19RVUFOVFVNIGVuc3VyZXMKLSAqIGNvcnJlY3QgcGxhdGZvcm0gYWxpZ25tZW50OyBhbGwg b2JqZWN0cyBvZiBzaXplICgxIDw8IExHX1FVQU5UVU0pIG9yIGxhcmdlcgotICogYXJlIGF0IGxl YXN0ICgxIDw8IExHX1FVQU5UVU0pIGFsaWduZWQ7IHRoaXMgY2FuIGJlIHVzZWQgdG8gZW5zdXJl IHRoYXQgd2UKLSAqIG5ldmVyIHJldHVybiBpbXByb3Blcmx5IGFsaWduZWQgbWVtb3J5LCBieSBt YWtpbmcgKDEgPDwgTEdfUVVBTlRVTSkgZXF1YWwgdGhlCi0gKiBoaWdoZXN0IHJlcXVpcmVkIGFs aWdubWVudCBvZiBhIHBsYXRmb3JtLiBGb3IgYWxsb2NhdGlvbiBzaXplcyBzbWFsbGVyIHRoYW4K LSAqICgxIDw8IExHX1FVQU5UVU0pIHRob3VnaCwgd2UgY2FuIGJlIG1vcmUgcmVsYXhlZCAoc2lu Y2Ugd2UgZG9uJ3Qgc3VwcG9ydAotICogcGxhdGZvcm1zIHdpdGggdHlwZXMgd2l0aCBhbGlnbm1l bnQgbGFyZ2VyIHRoYW4gdGhlaXIgc2l6ZSkuIFRvIGFsbG93IHN1Y2gKLSAqIGFsbG9jYXRpb25z ICh3aXRob3V0IHdhc3Rpbmcgc3BhY2UgdW5uZWNlc3NhcmlseSksIHdlIGludHJvZHVjZSB0aW55 IHNpemUKLSAqIGNsYXNzZXM7IG9uZSBwZXIgcG93ZXIgb2YgdHdvLCB1cCB1bnRpbCB3ZSBoaXQg dGhlIHF1YW50dW0gc2l6ZS4gVGhlcmUgYXJlCi0gKiB0aGVyZWZvcmUgTEdfUVVBTlRVTSAtIFND X0xHX1RJTllfTUlOIHN1Y2ggc2l6ZSBjbGFzc2VzLgotICoKLSAqIE5leHQsIHdlIGhhdmUgYSBz aXplIGNsYXNzIG9mIHNpemUgKDEgPDwgTEdfUVVBTlRVTSkuICBUaGlzIGNhbid0IGJlIHRoZQot ICogc3RhcnQgb2YgYSBncm91cCBpbiB0aGUgc2Vuc2Ugd2UgZGVzY3JpYmVkIGFib3ZlIChjb3Zl cmluZyBhIHBvd2VyIG9mIHR3bwotICogcmFuZ2UpIHNpbmNlLCBpZiB3ZSBkaXZpZGVkIGludG8g aXQgdG8gcGljayBhIHZhbHVlIG9mIGRlbHRhLCB3ZSdkIGdldCBhCi0gKiBkZWx0YSBzbWFsbGVy IHRoYW4gKDEgPDwgTEdfUVVBTlRVTSkgZm9yIHNpemVzID49ICgxIDw8IExHX1FVQU5UVU0pLCB3 aGljaAotICogaXMgYWdhaW5zdCB0aGUgcnVsZXMuCi0gKgotICogVGhlIGZpcnN0IGJhc2Ugd2Ug Y2FuIGRpdmlkZSBieSBTQ19OR1JPVVAgd2hpbGUgc3RpbGwgYmVpbmcgYXQgbGVhc3QKLSAqICgx IDw8IExHX1FVQU5UVU0pIGlzIFNDX05HUk9VUCAqICgxIDw8IExHX1FVQU5UVU0pLiBXZSBjYW4g Z2V0IHRoZXJlIGJ5Ci0gKiBoYXZpbmcgU0NfTkdST1VQIHNpemUgY2xhc3Nlcywgc3BhY2VkICgx IDw8IExHX1FVQU5UVU0pIGFwYXJ0LiBUaGVzZSBzaXplCi0gKiBjbGFzc2VzIGFyZToKLSAqICAg MSAqICgxIDw8IExHX1FVQU5UVU0pCi0gKiAgIDIgKiAoMSA8PCBMR19RVUFOVFVNKQotICogICAz ICogKDEgPDwgTEdfUVVBTlRVTSkKLSAqICAgLi4uIChhbHRob3VnaCwgYXMgYWJvdmUsIHRoaXMg Ii4uLiIgaXMgZW1wdHkgaW4gcHJhY3RpY2UpCi0gKiAgIFNDX05HUk9VUCAqICgxIDw8IExHX1FV QU5UVU0pLgotICoKLSAqIFRoZXJlIGFyZSBTQ19OR1JPVVAgb2YgdGhlc2Ugc2l6ZSBjbGFzc2Vz LCBzbyB3ZSBjYW4gcmVnYXJkIGl0IGFzIGEgc29ydCBvZgotICogcHNldWRvLWdyb3VwLCBldmVu IHRob3VnaCBpdCBzcGFucyBtdWx0aXBsZSBwb3dlcnMgb2YgMiwgaXMgZGl2aWRlZAotICogZGlm ZmVyZW50bHksIGFuZCBib3RoIHN0YXJ0cyBhbmQgZW5kcyBvbiBhIHBvd2VyIG9mIDIgKGFzIG9w cG9zZWQgdG8ganVzdAotICogZW5kaW5nKS4gU0NfTkdST1VQIGlzIGl0c2VsZiBhIHBvd2VyIG9m IHR3bywgc28gdGhlIGZpcnN0IGdyb3VwIGFmdGVyIHRoZQotICogcHNldWRvLWdyb3VwIGhhcyB0 aGUgcG93ZXItb2YtdHdvIGJhc2UgU0NfTkdST1VQICogKDEgPDwgTEdfUVVBTlRVTSksIGZvciBh Ci0gKiBsZ19iYXNlIG9mIExHX1FVQU5UVU0gKyBTQ19MR19OR1JPVVAuIFdlIGNhbiBkaXZpZGUg dGhpcyBiYXNlIGludG8gU0NfTkdST1VQCi0gKiBzaXplcyB3aXRob3V0IHZpb2xhdGluZyBvdXIg TEdfUVVBTlRVTSByZXF1aXJlbWVudHMsIHNvIHdlIGNhbiBzYWZlbHkgc2V0Ci0gKiBsZ19kZWx0 YSA9IGxnX2Jhc2UgLSBTQ19MR19HUk9VUCAoPT0gTEdfUVVBTlRVTSkuCi0gKgotICogU28sIGlu IG9yZGVyLCB0aGUgc2l6ZSBjbGFzc2VzIGFyZToKLSAqCi0gKiBUaW55IHNpemUgY2xhc3NlczoK LSAqIC0gQ291bnQ6IExHX1FVQU5UVU0gLSBTQ19MR19USU5ZX01JTi4KLSAqIC0gU2l6ZXM6Ci0g KiAgICAgMSA8PCBTQ19MR19USU5ZX01JTgotICogICAgIDEgPDwgKFNDX0xHX1RJTllfTUlOICsg MSkKLSAqICAgICAxIDw8IChTQ19MR19USU5ZX01JTiArIDIpCi0gKiAgICAgLi4uCi0gKiAgICAg MSA8PCAoTEdfUVVBTlRVTSAtIDEpCi0gKgotICogSW5pdGlhbCBwc2V1ZG8tZ3JvdXA6Ci0gKiAt IENvdW50OiBTQ19OR1JPVVAKLSAqIC0gU2l6ZXM6Ci0gKiAgICAgMSAqICgxIDw8IExHX1FVQU5U VU0pCi0gKiAgICAgMiAqICgxIDw8IExHX1FVQU5UVU0pCi0gKiAgICAgMyAqICgxIDw8IExHX1FV QU5UVU0pCi0gKiAgICAgLi4uCi0gKiAgICAgU0NfTkdST1VQICogKDEgPDwgTEdfUVVBTlRVTSkK LSAqCi0gKiBSZWd1bGFyIGdyb3VwIDA6Ci0gKiAtIENvdW50OiBTQ19OR1JPVVAKLSAqIC0gU2l6 ZXM6Ci0gKiAgIChyZWxhdGl2ZSB0byBsZ19iYXNlIG9mIExHX1FVQU5UVU0gKyBTQ19MR19OR1JP VVAgYW5kIGxnX2RlbHRhIG9mCi0gKiAgIGxnX2Jhc2UgLSBTQ19MR19OR1JPVVApCi0gKiAgICAg KDEgPDwgbGdfYmFzZSkgKyAxICogKDEgPDwgbGdfZGVsdGEpCi0gKiAgICAgKDEgPDwgbGdfYmFz ZSkgKyAyICogKDEgPDwgbGdfZGVsdGEpCi0gKiAgICAgKDEgPDwgbGdfYmFzZSkgKyAzICogKDEg PDwgbGdfZGVsdGEpCi0gKiAgICAgLi4uCi0gKiAgICAgKDEgPDwgbGdfYmFzZSkgKyBTQ19OR1JP VVAgKiAoMSA8PCBsZ19kZWx0YSkgWyA9PSAoMSA8PCAobGdfYmFzZSArIDEpKSBdCi0gKgotICog UmVndWxhciBncm91cCAxOgotICogLSBDb3VudDogU0NfTkdST1VQCi0gKiAtIFNpemVzOgotICog ICAocmVsYXRpdmUgdG8gbGdfYmFzZSBvZiBMR19RVUFOVFVNICsgU0NfTEdfTkdST1VQICsgMSBh bmQgbGdfZGVsdGEgb2YKLSAqICAgbGdfYmFzZSAtIFNDX0xHX05HUk9VUCkKLSAqICAgICAoMSA8 PCBsZ19iYXNlKSArIDEgKiAoMSA8PCBsZ19kZWx0YSkKLSAqICAgICAoMSA8PCBsZ19iYXNlKSAr IDIgKiAoMSA8PCBsZ19kZWx0YSkKLSAqICAgICAoMSA8PCBsZ19iYXNlKSArIDMgKiAoMSA8PCBs Z19kZWx0YSkKLSAqICAgICAuLi4KLSAqICAgICAoMSA8PCBsZ19iYXNlKSArIFNDX05HUk9VUCAq ICgxIDw8IGxnX2RlbHRhKSBbID09ICgxIDw8IChsZ19iYXNlICsgMSkpIF0KLSAqCi0gKiAuLi4K LSAqCi0gKiBSZWd1bGFyIGdyb3VwIE46Ci0gKiAtIENvdW50OiBTQ19OR1JPVVAKLSAqIC0gU2l6 ZXM6Ci0gKiAgIChyZWxhdGl2ZSB0byBsZ19iYXNlIG9mIExHX1FVQU5UVU0gKyBTQ19MR19OR1JP VVAgKyBOIGFuZCBsZ19kZWx0YSBvZgotICogICBsZ19iYXNlIC0gU0NfTEdfTkdST1VQKQotICog ICAgICgxIDw8IGxnX2Jhc2UpICsgMSAqICgxIDw8IGxnX2RlbHRhKQotICogICAgICgxIDw8IGxn X2Jhc2UpICsgMiAqICgxIDw8IGxnX2RlbHRhKQotICogICAgICgxIDw8IGxnX2Jhc2UpICsgMyAq ICgxIDw8IGxnX2RlbHRhKQotICogICAgIC4uLgotICogICAgICgxIDw8IGxnX2Jhc2UpICsgU0Nf TkdST1VQICogKDEgPDwgbGdfZGVsdGEpIFsgPT0gKDEgPDwgKGxnX2Jhc2UgKyAxKSkgXQotICoK LSAqCi0gKiBSZXByZXNlbnRhdGlvbiBvZiBtZXRhZGF0YToKLSAqIFRvIG1ha2UgdGhlIG1hdGgg ZWFzeSwgd2UnbGwgbW9zdGx5IHdvcmsgaW4gbGcgcXVhbnRpdGllcy4gV2UgcmVjb3JkIGxnX2Jh c2UsCi0gKiBsZ19kZWx0YSwgYW5kIG5kZWx0YSAoaS5lLiBudW1iZXIgb2YgZGVsdGFzIGFib3Zl IHRoZSBiYXNlKSBvbiBhCi0gKiBwZXItc2l6ZS1jbGFzcyBiYXNpcywgYW5kIG1haW50YWluIHRo ZSBpbnZhcmlhbnQgdGhhdCwgYWNyb3NzIGFsbCBzaXplCi0gKiBjbGFzc2VzLCBzaXplID09ICgx IDw8IGxnX2Jhc2UpICsgbmRlbHRhICogKDEgPDwgbGdfZGVsdGEpLgotICoKLSAqIEZvciByZWd1 bGFyIGdyb3VwcyAoaS5lLiB0aG9zZSB3aXRoIGxnX2Jhc2UgPj0gTEdfUVVBTlRVTSArIFNDX0xH X05HUk9VUCksCi0gKiBsZ19kZWx0YSBpcyBsZ19iYXNlIC0gU0NfTEdfTkdST1VQLCBhbmQgbmRl bHRhIGdvZXMgZnJvbSAxIHRvIFNDX05HUk9VUC4KLSAqCi0gKiBGb3IgdGhlIGluaXRpYWwgdGlu eSBzaXplIGNsYXNzZXMgKGlmIGFueSksIGxnX2Jhc2UgaXMgbGcoc2l6ZSBjbGFzcyBzaXplKS4K LSAqIGxnX2RlbHRhIGlzIGxnX2Jhc2UgZm9yIHRoZSBmaXJzdCBzaXplIGNsYXNzLCBhbmQgbGdf YmFzZSAtIDEgZm9yIGFsbAotICogc3Vic2VxdWVudCBvbmVzLiBuZGVsdGEgaXMgYWx3YXlzIDAu Ci0gKgotICogRm9yIHRoZSBwc2V1ZG8tZ3JvdXAsIGlmIHRoZXJlIGFyZSBubyB0aW55IHNpemUg Y2xhc3NlcywgdGhlbiB3ZSBzZXQKLSAqIGxnX2Jhc2UgPT0gTEdfUVVBTlRVTSwgbGdfZGVsdGEg PT0gTEdfUVVBTlRVTSwgYW5kIGhhdmUgbmRlbHRhIHJhbmdlIGZyb20gMAotICogdG8gU0NfTkdS T1VQIC0gMS4gKE5vdGUgdGhhdCBkZWx0YSA9PSBiYXNlLCBzbyBiYXNlICsgKFNDX05HUk9VUCAt IDEpICogZGVsdGEKLSAqIGlzIGp1c3QgU0NfTkdST1VQICogYmFzZSwgb3IgKDEgPDwgKFNDX0xH X05HUk9VUCArIExHX1FVQU5UVU0pKSwgc28gd2UgZG8KLSAqIGluZGVlZCBnZXQgYSBwb3dlciBv ZiB0d28gdGhhdCB3YXkpLiBJZiB0aGVyZSAqYXJlKiB0aW55IHNpemUgY2xhc3NlcywgdGhlbgot ICogdGhlIGZpcnN0IHNpemUgY2xhc3MgbmVlZHMgdG8gaGF2ZSBsZ19kZWx0YSByZWxhdGl2ZSB0 byB0aGUgbGFyZ2VzdCB0aW55IHNpemUKLSAqIGNsYXNzLiBXZSB0aGVyZWZvcmUgc2V0IGxnX2Jh c2UgPT0gTEdfUVVBTlRVTSAtIDEsCi0gKiBsZ19kZWx0YSA9PSBMR19RVUFOVFVNIC0gMSwgYW5k IG5kZWx0YSA9PSAxLCBrZWVwaW5nIHRoZSByZXN0IG9mIHRoZQotICogcHNldWRvLWdyb3VwIHRo ZSBzYW1lLgotICoKLSAqCi0gKiBPdGhlciB0ZXJtaW5vbG9neToKLSAqICJTbWFsbCIgc2l6ZSBj bGFzc2VzIG1lYW4gdGhvc2UgdGhhdCBhcmUgYWxsb2NhdGVkIG91dCBvZiBiaW5zLCB3aGljaCBp cyB0aGUKLSAqIHNhbWUgYXMgdGhvc2UgdGhhdCBhcmUgc2xhYiBhbGxvY2F0ZWQuCi0gKiAiTGFy Z2UiIHNpemUgY2xhc3NlcyBhcmUgdGhvc2UgdGhhdCBhcmUgbm90IHNtYWxsLiBUaGUgY3V0b2Zm IGZvciBjb3VudGluZyBhcwotICogbGFyZ2UgaXMgcGFnZSBzaXplICogZ3JvdXAgc2l6ZS4KLSAq LwotCi0vKgotICogU2l6ZSBjbGFzcyBOICsgKDEgPDwgU0NfTEdfTkdST1VQKSB0d2ljZSB0aGUg c2l6ZSBvZiBzaXplIGNsYXNzIE4uCi0gKi8KLSNkZWZpbmUgU0NfTEdfTkdST1VQIDIKLSNkZWZp bmUgU0NfTEdfVElOWV9NSU4gMwotCi0jaWYgU0NfTEdfVElOWV9NSU4gPT0gMAotLyogVGhlIGRp diBtb2R1bGUgZG9lc24ndCBzdXBwb3J0IGRpdmlzaW9uIGJ5IDEsIHdoaWNoIHRoaXMgd291bGQg cmVxdWlyZS4gKi8KLSNlcnJvciAiVW5zdXBwb3J0ZWQgTEdfVElOWV9NSU4iCi0jZW5kaWYKLQot LyoKLSAqIFRoZSBkZWZpbml0aW9ucyBiZWxvdyBhcmUgYWxsIGRldGVybWluZWQgYnkgdGhlIGFi b3ZlIHNldHRpbmdzIGFuZCBzeXN0ZW0KLSAqIGNoYXJhY3RlcmlzdGljcy4KLSAqLwotI2RlZmlu ZSBTQ19OR1JPVVAgKDFVTEwgPDwgU0NfTEdfTkdST1VQKQotI2RlZmluZSBTQ19QVFJfQklUUyAo KDFVTEwgPDwgTEdfU0laRU9GX1BUUikgKiA4KQotI2RlZmluZSBTQ19OVElOWSAoTEdfUVVBTlRV TSAtIFNDX0xHX1RJTllfTUlOKQotI2RlZmluZSBTQ19MR19USU5ZX01BWENMQVNTIChMR19RVUFO VFVNID4gU0NfTEdfVElOWV9NSU4gPyBMR19RVUFOVFVNIC0gMSA6IC0xKQotI2RlZmluZSBTQ19O UFNFVURPIFNDX05HUk9VUAotI2RlZmluZSBTQ19MR19GSVJTVF9SRUdVTEFSX0JBU0UgKExHX1FV QU5UVU0gKyBTQ19MR19OR1JPVVApCi0vKgotICogV2UgY2FwIGFsbG9jYXRpb25zIHRvIGJlIGxl c3MgdGhhbiAyICoqIChwdHJfYml0cyAtIDEpLCBzbyB0aGUgaGlnaGVzdCBiYXNlCi0gKiB3ZSBu ZWVkIGlzIDIgKiogKHB0cl9iaXRzIC0gMikuIChUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgbGFz dCBncm91cCBpcyAxCi0gKiBzaXplIGNsYXNzIHNob3J0ZXIgdGhhbiB0aGUgb3RoZXJzKS4KLSAq IFdlIGNvdWxkIHByb2JhYmx5IHNhdmUgc29tZSBzcGFjZSBpbiBhcmVuYXMgYnkgY2FwcGluZyB0 aGlzIGF0IExHX1ZBRERSIHNpemUuCi0gKi8KLSNkZWZpbmUgU0NfTEdfQkFTRV9NQVggKFNDX1BU Ul9CSVRTIC0gMikKLSNkZWZpbmUgU0NfTlJFR1VMQVIgKFNDX05HUk9VUCAqIAkJCQkJXAotICAg IChTQ19MR19CQVNFX01BWCAtIFNDX0xHX0ZJUlNUX1JFR1VMQVJfQkFTRSArIDEpIC0gMSkKLSNk ZWZpbmUgU0NfTlNJWkVTIChTQ19OVElOWSArIFNDX05QU0VVRE8gKyBTQ19OUkVHVUxBUikKLQot LyoKLSAqIFRoZSBudW1iZXIgb2Ygc2l6ZSBjbGFzc2VzIHRoYXQgYXJlIGEgbXVsdGlwbGUgb2Yg dGhlIHBhZ2Ugc2l6ZS4KLSAqCi0gKiBIZXJlIGFyZSB0aGUgZmlyc3QgZmV3IGJhc2VzIHRoYXQg aGF2ZSBhIHBhZ2Utc2l6ZWQgU0MuCi0gKgotICogICAgICBsZyhiYXNlKSB8ICAgICBiYXNlIHwg aGlnaGVzdCBTQyB8IHBhZ2UtbXVsdGlwbGUgU0NzCi0gKiAtLS0tLS0tLS0tLS0tLXwtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqICAgTEdfUEFHRSAtIDEgfCBQ QUdFIC8gMiB8ICAgICAgIFBBR0UgfCAxCi0gKiAgICAgICBMR19QQUdFIHwgICAgIFBBR0UgfCAg IDIgKiBQQUdFIHwgMQotICogICBMR19QQUdFICsgMSB8IDIgKiBQQUdFIHwgICA0ICogUEFHRSB8 IDIKLSAqICAgTEdfUEFHRSArIDIgfCA0ICogUEFHRSB8ICAgOCAqIFBBR0UgfCA0Ci0gKgotICog VGhlIG51bWJlciBvZiBwYWdlLW11bHRpcGxlIFNDcyBjb250aW51ZXMgdG8gZ3JvdyBpbiBwb3dl cnMgb2YgdHdvLCB1cCB1bnRpbAotICogbGdfZGVsdGEgPT0gbGdfcGFnZSwgd2hpY2ggY29ycmVz cG9uZHMgdG8gc2V0dGluZyBsZ19iYXNlIHRvIGxnX3BhZ2UgKwotICogU0NfTEdfTkdST1VQLiAg U28sIHRoZW4sIHRoZSBudW1iZXIgb2Ygc2l6ZSBjbGFzc2VzIHRoYXQgYXJlIG11bHRpcGxlcyBv ZiB0aGUKLSAqIHBhZ2Ugc2l6ZSB3aG9zZSBsZ19kZWx0YSBpcyBsZXNzIHRoYW4gdGhlIHBhZ2Ug c2l6ZSBhcmUKLSAqIGlzIDEgKyAoMioqMCArIDIqKjEgKyAuLi4gKyAyKioobGdfbmdyb3VwIC0g MSkgPT0gMioqbGdfbmdyb3VwLgotICoKLSAqIEZvciBlYWNoIGJhc2Ugd2l0aCBsZ19iYXNlIGlu IFtsZ19wYWdlICsgbGdfbmdyb3VwLCBsZ19iYXNlX21heCksIHRoZXJlIGFyZQotICogTkdST1VQ IHBhZ2Utc2l6ZWQgc2l6ZSBjbGFzc2VzLCBhbmQgd2hlbiBsZ19iYXNlID09IGxnX2Jhc2VfbWF4 LCB0aGVyZSBhcmUKLSAqIE5HUk9VUCAtIDEuCi0gKgotICogVGhpcyBnaXZlcyB1cyB0aGUgcXVh bnRpdHkgd2Ugc2Vlay4KLSAqLwotI2RlZmluZSBTQ19OUFNJWkVTICgJCQkJCQkJXAotICAgIFND X05HUk9VUAkJCQkJCQkJXAotICAgICsgKFNDX0xHX0JBU0VfTUFYIC0gKExHX1BBR0UgKyBTQ19M R19OR1JPVVApKSAqIFNDX05HUk9VUAkJXAotICAgICsgU0NfTkdST1VQIC0gMSkKLQotLyoKLSAq IFdlIGRlY2xhcmUgYSBzaXplIGNsYXNzIGlzIGJpbm5hYmxlIGlmIHNpemUgPCBwYWdlIHNpemUg KiBncm91cC4gT3IsIGluIG90aGVyCi0gKiB3b3JkcywgbGcoc2l6ZSkgPCBsZyhwYWdlIHNpemUp ICsgbGcoZ3JvdXAgc2l6ZSkuCi0gKi8KLSNkZWZpbmUgU0NfTkJJTlMgKAkJCQkJCQlcCi0gICAg LyogU3ViLXJlZ3VsYXIgc2l6ZSBjbGFzc2VzLiAqLwkJCQkJXAotICAgIFNDX05USU5ZICsgU0Nf TlBTRVVETwkJCQkJCVwKLSAgICAvKiBHcm91cHMgd2l0aCBsZ19yZWd1bGFyX21pbl9iYXNlIDw9 IGxnX2Jhc2UgPD0gbGdfYmFzZV9tYXggKi8JXAotICAgICsgU0NfTkdST1VQICogKExHX1BBR0Ug KyBTQ19MR19OR1JPVVAgLSBTQ19MR19GSVJTVF9SRUdVTEFSX0JBU0UpCVwKLSAgICAvKiBMYXN0 IFNDIG9mIHRoZSBsYXN0IGdyb3VwIGhpdHMgdGhlIGJvdW5kIGV4YWN0bHk7IGV4Y2x1ZGUgaXQu ICovCVwKLSAgICAtIDEpCi0KLS8qCi0gKiBUaGUgc2l6ZTJpbmRleF90YWIgbG9va3VwIHRhYmxl IHVzZXMgdWludDhfdCB0byBlbmNvZGUgZWFjaCBiaW4gaW5kZXgsIHNvIHdlCi0gKiBjYW5ub3Qg c3VwcG9ydCBtb3JlIHRoYW4gMjU2IHNtYWxsIHNpemUgY2xhc3Nlcy4KLSAqLwotI2lmIChTQ19O QklOUyA+IDI1NikKLSMgIGVycm9yICJUb28gbWFueSBzbWFsbCBzaXplIGNsYXNzZXMiCi0jZW5k aWYKLQotLyogVGhlIGxhcmdlc3Qgc2l6ZSBjbGFzcyBpbiB0aGUgbG9va3VwIHRhYmxlLCBhbmQg aXRzIGJpbmFyeSBsb2cuICovCi0jZGVmaW5lIFNDX0xHX01BWF9MT09LVVAgMTIKLSNkZWZpbmUg U0NfTE9PS1VQX01BWENMQVNTICgxIDw8IFNDX0xHX01BWF9MT09LVVApCi0KLS8qIEludGVybmFs LCBvbmx5IHVzZWQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIFNDX1NNQUxMX01BWENMQVNTLiAqLwot I2RlZmluZSBTQ19TTUFMTF9NQVhfQkFTRSAoMSA8PCAoTEdfUEFHRSArIFNDX0xHX05HUk9VUCAt IDEpKQotI2RlZmluZSBTQ19TTUFMTF9NQVhfREVMVEEgKDEgPDwgKExHX1BBR0UgLSAxKSkKLQot LyogVGhlIGxhcmdlc3Qgc2l6ZSBjbGFzcyBhbGxvY2F0ZWQgb3V0IG9mIGEgc2xhYi4gKi8KLSNk ZWZpbmUgU0NfU01BTExfTUFYQ0xBU1MgKFNDX1NNQUxMX01BWF9CQVNFCQkJCVwKLSAgICArIChT Q19OR1JPVVAgLSAxKSAqIFNDX1NNQUxMX01BWF9ERUxUQSkKLQotLyogVGhlIGZhc3RwYXRoIGFz c3VtZXMgYWxsIGxvb2t1cC1hYmxlIHNpemVzIGFyZSBzbWFsbC4gKi8KLSNpZiAoU0NfU01BTExf TUFYQ0xBU1MgPCBTQ19MT09LVVBfTUFYQ0xBU1MpCi0jICBlcnJvciAiTG9va3VwIHRhYmxlIHNp emVzIG11c3QgYmUgc21hbGwiCi0jZW5kaWYKLQotLyogVGhlIHNtYWxsZXN0IHNpemUgY2xhc3Mg bm90IGFsbG9jYXRlZCBvdXQgb2YgYSBzbGFiLiAqLwotI2RlZmluZSBTQ19MQVJHRV9NSU5DTEFT UyAoKHNpemVfdCkxVUxMIDw8IChMR19QQUdFICsgU0NfTEdfTkdST1VQKSkKLSNkZWZpbmUgU0Nf TEdfTEFSR0VfTUlOQ0xBU1MgKExHX1BBR0UgKyBTQ19MR19OR1JPVVApCi0KLS8qIEludGVybmFs OyBvbmx5IHVzZWQgZm9yIHRoZSBkZWZpbml0aW9uIG9mIFNDX0xBUkdFX01BWENMQVNTLiAqLwot I2RlZmluZSBTQ19NQVhfQkFTRSAoKHNpemVfdCkxIDw8IChTQ19QVFJfQklUUyAtIDIpKQotI2Rl ZmluZSBTQ19NQVhfREVMVEEgKChzaXplX3QpMSA8PCAoU0NfUFRSX0JJVFMgLSAyIC0gU0NfTEdf TkdST1VQKSkKLQotLyogVGhlIGxhcmdlc3Qgc2l6ZSBjbGFzcyBzdXBwb3J0ZWQuICovCi0jZGVm aW5lIFNDX0xBUkdFX01BWENMQVNTIChTQ19NQVhfQkFTRSArIChTQ19OR1JPVVAgLSAxKSAqIFND X01BWF9ERUxUQSkKLQotLyogTWF4aW11bSBudW1iZXIgb2YgcmVnaW9ucyBpbiBvbmUgc2xhYi4g Ki8KLSNpZm5kZWYgQ09ORklHX0xHX1NMQUJfTUFYUkVHUwotIyAgZGVmaW5lIFNDX0xHX1NMQUJf TUFYUkVHUyAoTEdfUEFHRSAtIFNDX0xHX1RJTllfTUlOKQotI2Vsc2UKLSMgIGlmIENPTkZJR19M R19TTEFCX01BWFJFR1MgPCAoTEdfUEFHRSAtIFNDX0xHX1RJTllfTUlOKQotIyAgICBlcnJvciAi VW5zdXBwb3J0ZWQgU0NfTEdfU0xBQl9NQVhSRUdTIgotIyAgZWxzZQotIyAgICBkZWZpbmUgU0Nf TEdfU0xBQl9NQVhSRUdTIENPTkZJR19MR19TTEFCX01BWFJFR1MKLSMgIGVuZGlmCi0jZW5kaWYK LQotI2RlZmluZSBTQ19TTEFCX01BWFJFR1MgKDFVIDw8IFNDX0xHX1NMQUJfTUFYUkVHUykKLQot dHlwZWRlZiBzdHJ1Y3Qgc2NfcyBzY190Owotc3RydWN0IHNjX3MgewotCS8qIFNpemUgY2xhc3Mg aW5kZXgsIG9yIC0xIGlmIG5vdCBhIHZhbGlkIHNpemUgY2xhc3MuICovCi0JaW50IGluZGV4Owot CS8qIExnIGdyb3VwIGJhc2Ugc2l6ZSAobm8gZGVsdGFzIGFkZGVkKS4gKi8KLQlpbnQgbGdfYmFz ZTsKLQkvKiBMZyBkZWx0YSB0byBwcmV2aW91cyBzaXplIGNsYXNzLiAqLwotCWludCBsZ19kZWx0 YTsKLQkvKiBEZWx0YSBtdWx0aXBsaWVyLiAgc2l6ZSA9PSAxPDxsZ19iYXNlICsgbmRlbHRhPDxs Z19kZWx0YSAqLwotCWludCBuZGVsdGE7Ci0JLyoKLQkgKiBUcnVlIGlmIHRoZSBzaXplIGNsYXNz IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZSwgZmFsc2UKLQkgKiBvdGhlcndpc2UuCi0J ICovCi0JYm9vbCBwc3o7Ci0JLyoKLQkgKiBUcnVlIGlmIHRoZSBzaXplIGNsYXNzIGlzIGEgc21h bGwsIGJpbiwgc2l6ZSBjbGFzcy4gRmFsc2Ugb3RoZXJ3aXNlLgotCSAqLwotCWJvb2wgYmluOwot CS8qIFRoZSBzbGFiIHBhZ2UgY291bnQgaWYgYSBzbWFsbCBiaW4gc2l6ZSBjbGFzcywgMCBvdGhl cndpc2UuICovCi0JaW50IHBnczsKLQkvKiBTYW1lIGFzIGxnX2RlbHRhIGlmIGEgbG9va3VwIHRh YmxlIHNpemUgY2xhc3MsIDAgb3RoZXJ3aXNlLiAqLwotCWludCBsZ19kZWx0YV9sb29rdXA7Ci19 OwotCi10eXBlZGVmIHN0cnVjdCBzY19kYXRhX3Mgc2NfZGF0YV90Owotc3RydWN0IHNjX2RhdGFf cyB7Ci0JLyogTnVtYmVyIG9mIHRpbnkgc2l6ZSBjbGFzc2VzLiAqLwotCXVuc2lnbmVkIG50aW55 OwotCS8qIE51bWJlciBvZiBiaW5zIHN1cHBvcnRlZCBieSB0aGUgbG9va3VwIHRhYmxlLiAqLwot CWludCBubGJpbnM7Ci0JLyogTnVtYmVyIG9mIHNtYWxsIHNpemUgY2xhc3MgYmlucy4gKi8KLQlp bnQgbmJpbnM7Ci0JLyogTnVtYmVyIG9mIHNpemUgY2xhc3Nlcy4gKi8KLQlpbnQgbnNpemVzOwot CS8qIE51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIE5TSVpFUy4gKi8KLQlpbnQgbGdf Y2VpbF9uc2l6ZXM7Ci0JLyogTnVtYmVyIG9mIHNpemUgY2xhc3NlcyB0aGF0IGFyZSBhIG11bHRp cGxlIG9mICgxVSA8PCBMR19QQUdFKS4gKi8KLQl1bnNpZ25lZCBucHNpemVzOwotCS8qIExnIG9m IG1heGltdW0gdGlueSBzaXplIGNsYXNzIChvciAtMSwgaWYgbm9uZSkuICovCi0JaW50IGxnX3Rp bnlfbWF4Y2xhc3M7Ci0JLyogTWF4aW11bSBzaXplIGNsYXNzIGluY2x1ZGVkIGluIGxvb2t1cCB0 YWJsZS4gKi8KLQlzaXplX3QgbG9va3VwX21heGNsYXNzOwotCS8qIE1heGltdW0gc21hbGwgc2l6 ZSBjbGFzcy4gKi8KLQlzaXplX3Qgc21hbGxfbWF4Y2xhc3M7Ci0JLyogTGcgb2YgbWluaW11bSBs YXJnZSBzaXplIGNsYXNzLiAqLwotCWludCBsZ19sYXJnZV9taW5jbGFzczsKLQkvKiBUaGUgbWlu aW11bSBsYXJnZSBzaXplIGNsYXNzLiAqLwotCXNpemVfdCBsYXJnZV9taW5jbGFzczsKLQkvKiBN YXhpbXVtIChsYXJnZSkgc2l6ZSBjbGFzcy4gKi8KLQlzaXplX3QgbGFyZ2VfbWF4Y2xhc3M7Ci0J LyogVHJ1ZSBpZiB0aGUgc2NfZGF0YV90IGhhcyBiZWVuIGluaXRpYWxpemVkIChmb3IgZGVidWdn aW5nIG9ubHkpLiAqLwotCWJvb2wgaW5pdGlhbGl6ZWQ7Ci0KLQlzY190IHNjW1NDX05TSVpFU107 Ci19OwotCi1zaXplX3QgcmVnX3NpemVfY29tcHV0ZShpbnQgbGdfYmFzZSwgaW50IGxnX2RlbHRh LCBpbnQgbmRlbHRhKTsKLXZvaWQgc2NfZGF0YV9pbml0KHNjX2RhdGFfdCAqZGF0YSk7Ci0vKgot ICogVXBkYXRlcyBzbGFiIHNpemVzIGluIFtiZWdpbiwgZW5kXSB0byBiZSBwZ3MgcGFnZXMgaW4g bGVuZ3RoLCBpZiBwb3NzaWJsZS4KLSAqIE90aGVyd2lzZSwgZG9lcyBpdHMgYmVzdCB0byBhY2Nv bW1vZGF0ZSB0aGUgcmVxdWVzdC4KLSAqLwotdm9pZCBzY19kYXRhX3VwZGF0ZV9zbGFiX3NpemUo c2NfZGF0YV90ICpkYXRhLCBzaXplX3QgYmVnaW4sIHNpemVfdCBlbmQsCi0gICAgaW50IHBncyk7 Ci12b2lkIHNjX2Jvb3Qoc2NfZGF0YV90ICpkYXRhKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lO VEVSTkFMX1NDX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NlYy5oIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zZWMu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE4NjMzOC4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3NlYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLSNpZm5kZWYgSkVN QUxMT0NfSU5URVJOQUxfU0VDX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfU0VDX0gKLQot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2F0b21pYy5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3BhaS5oIgotCi0vKgotICogU21hbGwgZXh0ZW50IGNhY2hlLgotICoKLSAqIFRo aXMgaW5jbHVkZXMgc29tZSB1dGlsaXRpZXMgdG8gY2FjaGUgc21hbGwgZXh0ZW50cy4gIFdlIGhh dmUgYSBwZXItcHN6aW5kCi0gKiBiaW4gd2l0aCBpdHMgb3duIGxpc3Qgb2YgZXh0ZW50cyBvZiB0 aGF0IHNpemUuICBXZSBkb24ndCB0cnkgdG8gZG8gYW55Ci0gKiBjb2FsZXNjaW5nIG9mIGV4dGVu dHMgKHNpbmNlIGl0IHdvdWxkIGluIGdlbmVyYWwgcmVxdWlyZSBjcm9zcy1zaGFyZCBsb2NrcyBv cgotICoga25vd2xlZGdlIG9mIHRoZSB1bmRlcmx5aW5nIFBBSSBpbXBsZW1lbnRhdGlvbikuCi0g Ki8KLQotLyoKLSAqIEZvciBub3csIHRoaXMgaXMganVzdCBvbmUgZmllbGQ7IGV2ZW50dWFsbHks IHdlJ2xsIHByb2JhYmx5IHdhbnQgdG8gZ2V0IG1vcmUKLSAqIGZpbmUtZ3JhaW5lZCBkYXRhIG91 dCAobGlrZSBwZXItc2l6ZSBjbGFzcyBzdGF0aXN0aWNzKS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3Qg c2VjX3N0YXRzX3Mgc2VjX3N0YXRzX3Q7Ci1zdHJ1Y3Qgc2VjX3N0YXRzX3MgewotCS8qIFN1bSBv ZiBieXRlc19jdXIgYWNyb3NzIGFsbCBzaGFyZHMuICovCi0Jc2l6ZV90IGJ5dGVzOwotfTsKLQot c3RhdGljIGlubGluZSB2b2lkCi1zZWNfc3RhdHNfYWNjdW0oc2VjX3N0YXRzX3QgKmRzdCwgc2Vj X3N0YXRzX3QgKnNyYykgewotCWRzdC0+Ynl0ZXMgKz0gc3JjLT5ieXRlczsKLX0KLQotLyogQSBj b2xsZWN0aW9ucyBvZiBmcmVlIGV4dGVudHMsIGFsbCBvZiB0aGUgc2FtZSBzaXplLiAqLwotdHlw ZWRlZiBzdHJ1Y3Qgc2VjX2Jpbl9zIHNlY19iaW5fdDsKLXN0cnVjdCBzZWNfYmluX3MgewotCS8q Ci0JICogV2hlbiB3ZSBmYWlsIHRvIGZ1bGZpbGwgYW4gYWxsb2NhdGlvbiwgd2UgZG8gYSBiYXRj aC1hbGxvYyBvbiB0aGUKLQkgKiB1bmRlcmx5aW5nIGFsbG9jYXRvciB0byBmaWxsIGV4dHJhIGl0 ZW1zLCBhcyB3ZWxsLiAgV2UgZHJvcCB0aGUgU0VDCi0JICogbG9jayB3aGlsZSBkb2luZyBzbywg dG8gYWxsb3cgb3BlcmF0aW9ucyBvbiBvdGhlciBiaW5zIHRvIHN1Y2NlZWQuCi0JICogVGhhdCBp bnRyb2R1Y2VzIHRoZSBwb3NzaWJpbGl0eSBvZiBvdGhlciB0aHJlYWRzIGFsc28gdHJ5aW5nIHRv Ci0JICogYWxsb2NhdGUgb3V0IG9mIHRoaXMgYmluLCBmYWlsaW5nLCBhbmQgYWxzbyBnb2luZyB0 byB0aGUgYmFja2luZwotCSAqIGFsbG9jYXRvci4gIFRvIGF2b2lkIGEgdGh1bmRlcmluZyBoZXJk IHByb2JsZW0gaW4gd2hpY2ggbG90cyBvZgotCSAqIHRocmVhZHMgZG8gYmF0Y2ggYWxsb2NzIGFu ZCBvdmVyZmlsbCB0aGlzIGJpbiBhcyBhIHJlc3VsdCwgd2Ugb25seQotCSAqIGFsbG93IG9uZSBi YXRjaCBhbGxvY2F0aW9uIGF0IGEgdGltZSBmb3IgYSBiaW4uICBUaGlzIGJvb2wgdHJhY2tzCi0J ICogd2hldGhlciBvciBub3Qgc29tZSB0aHJlYWQgaXMgYWxyZWFkeSBiYXRjaCBhbGxvY2F0aW5n LgotCSAqCi0JICogRXZlbnR1YWxseSwgdGhlIHJpZ2h0IGFuc3dlciBtYXkgYmUgYSBzbWFydGVy IHNoYXJkaW5nIHBvbGljeSBmb3IgdGhlCi0JICogYmlucyAoZS5nLiBhIG11dGV4IHBlciBiaW4s IHdoaWNoIHdvdWxkIGFsc28gYmUgbW9yZSBzY2FsYWJsZQotCSAqIGdlbmVyYWxseTsgdGhlIGJh dGNoLWFsbG9jYXRpbmcgdGhyZWFkIGNvdWxkIGhvbGQgaXQgd2hpbGUKLQkgKiBiYXRjaC1hbGxv Y2F0aW5nKS4KLQkgKi8KLQlib29sIGJlaW5nX2JhdGNoX2ZpbGxlZDsKLQotCS8qCi0JICogTnVt YmVyIG9mIGJ5dGVzIGluIHRoaXMgcGFydGljdWxhciBiaW4gKGFzIG9wcG9zZWQgdG8gdGhlCi0J ICogc2VjX3NoYXJkX3QncyBieXRlc19jdXIuICBUaGlzIGlzbid0IHVzZXIgdmlzaWJsZSBvciBy ZXBvcnRlZCBpbgotCSAqIHN0YXRzOyByYXRoZXIsIGl0IGFsbG93cyB1cyB0byBxdWlja2x5IGRl dGVybWluZSB0aGUgY2hhbmdlIGluIHRoZQotCSAqIGNlbnRyYWxpemVkIGNvdW50ZXIgd2hlbiBm bHVzaGluZy4KLQkgKi8KLQlzaXplX3QgYnl0ZXNfY3VyOwotCWVkYXRhX2xpc3RfYWN0aXZlX3Qg ZnJlZWxpc3Q7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBzZWNfc2hhcmRfcyBzZWNfc2hhcmRfdDsK LXN0cnVjdCBzZWNfc2hhcmRfcyB7Ci0JLyoKLQkgKiBXZSBkb24ndCBrZWVwIHBlci1iaW4gbXV0 ZXhlcywgZXZlbiB0aG91Z2ggdGhhdCB3b3VsZCBhbGxvdyBtb3JlCi0JICogc2hhcmRpbmc7IHRo aXMgYWxsb3dzIGdsb2JhbCBjYWNoZS1ldmljdGlvbiwgd2hpY2ggaW4gdHVybiBhbGxvd3MgZm9y Ci0JICogYmV0dGVyIGJhbGFuY2luZyBhY3Jvc3MgZnJlZSBsaXN0cy4KLQkgKi8KLQltYWxsb2Nf bXV0ZXhfdCBtdHg7Ci0JLyoKLQkgKiBBIFNFQyBtYXkgbmVlZCB0byBiZSBzaHV0IGRvd24gKGku ZS4gZmx1c2hlZCBvZiBpdHMgY29udGVudHMgYW5kCi0JICogcHJldmVudGVkIGZyb20gZnVydGhl ciBjYWNoaW5nKS4gIFRvIGF2b2lkIHRyaWNreSBzeW5jaHJvbml6YXRpb24KLQkgKiBpc3N1ZXMs IHdlIGp1c3QgdHJhY2sgZW5hYmxlZC1zdGF0dXMgaW4gZWFjaCBzaGFyZCwgZ3VhcmRlZCBieSBh Ci0JICogbXV0ZXguICBJbiBwcmFjdGljZSwgdGhpcyBpcyBvbmx5IGV2ZXIgY2hlY2tlZCBkdXJp bmcgYnJpZWYgcmFjZXMsCi0JICogc2luY2UgdGhlIGFyZW5hLWxldmVsIGF0b21pYyBib29sZWFu IHRyYWNraW5nIEhQQSBlbmFibGVkLW5lc3MgbWVhbnMKLQkgKiB0aGF0IHdlIHdvbid0IGdvIGRv d24gdGhlc2UgcGF0aHdheXMgdmVyeSBvZnRlbiBhZnRlciBjdXN0b20gZXh0ZW50Ci0JICogaG9v a3MgYXJlIGluc3RhbGxlZC4KLQkgKi8KLQlib29sIGVuYWJsZWQ7Ci0Jc2VjX2Jpbl90ICpiaW5z OwotCS8qIE51bWJlciBvZiBieXRlcyBpbiBhbGwgYmlucyBpbiB0aGUgc2hhcmQuICovCi0Jc2l6 ZV90IGJ5dGVzX2N1cjsKLQkvKiBUaGUgbmV4dCBwc3ppbmQgdG8gZmx1c2ggaW4gdGhlIGZsdXNo LXNvbWUgcGF0aHdheXMuICovCi0JcHN6aW5kX3QgdG9fZmx1c2hfbmV4dDsKLX07Ci0KLXR5cGVk ZWYgc3RydWN0IHNlY19zIHNlY190Owotc3RydWN0IHNlY19zIHsKLQlwYWlfdCBwYWk7Ci0JcGFp X3QgKmZhbGxiYWNrOwotCi0Jc2VjX29wdHNfdCBvcHRzOwotCXNlY19zaGFyZF90ICpzaGFyZHM7 Ci0JcHN6aW5kX3QgbnBzaXplczsKLX07Ci0KLWJvb2wgc2VjX2luaXQodHNkbl90ICp0c2RuLCBz ZWNfdCAqc2VjLCBiYXNlX3QgKmJhc2UsIHBhaV90ICpmYWxsYmFjaywKLSAgICBjb25zdCBzZWNf b3B0c190ICpvcHRzKTsKLXZvaWQgc2VjX2ZsdXNoKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYyk7 Ci12b2lkIHNlY19kaXNhYmxlKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYyk7Ci0KLS8qCi0gKiBN b3JhbGx5LCB0aGVzZSB0d28gc3RhdHMgbWV0aG9kcyBwcm9iYWJseSBvdWdodCB0byBiZSBhIHNp bmdsZSBvbmUgKGFuZCB0aGUKLSAqIG11dGV4X3Byb2ZfZGF0YSBvdWdodCB0byBsaXZlIGluIHRo ZSBzZWNfc3RhdHNfdC4gIEJ1dCBzcGxpdHRpbmcgdGhlbSBhcGFydAotICogbGV0cyB0aGVtIGZp dCBlYXNpbHkgaW50byB0aGUgcGFfc2hhcmQgc3RhdHMgZnJhbWV3b3JrICh3aGljaCBhbHNvIGhh cyB0aGlzCi0gKiBzcGxpdCksIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHN0YXRzIG1hbmFnZW1lbnQu Ci0gKi8KLXZvaWQgc2VjX3N0YXRzX21lcmdlKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYywgc2Vj X3N0YXRzX3QgKnN0YXRzKTsKLXZvaWQgc2VjX211dGV4X3N0YXRzX3JlYWQodHNkbl90ICp0c2Ru LCBzZWNfdCAqc2VjLAotICAgIG11dGV4X3Byb2ZfZGF0YV90ICptdXRleF9wcm9mX2RhdGEpOwot Ci0vKgotICogV2UgdXNlIHRoZSBhcmVuYSBsb2NrIG9yZGVyaW5nOyB0aGVzZSBhcmUgYWNxdWly ZWQgaW4gcGhhc2UgMiBvZiBmb3JraW5nLCBidXQKLSAqIHNob3VsZCBiZSBhY3F1aXJlZCBiZWZv cmUgdGhlIHVuZGVybHlpbmcgYWxsb2NhdG9yIG11dGV4ZXMuCi0gKi8KLXZvaWQgc2VjX3ByZWZv cmsyKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYyk7Ci12b2lkIHNlY19wb3N0Zm9ya19wYXJlbnQo dHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjKTsKLXZvaWQgc2VjX3Bvc3Rmb3JrX2NoaWxkKHRzZG5f dCAqdHNkbiwgc2VjX3QgKnNlYyk7Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9TRUNf SCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc2VjX29wdHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc2VjX29wdHMu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNhZDcyZi4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3NlY19vcHRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jaWZuZGVm IEpFTUFMTE9DX0lOVEVSTkFMX1NFQ19PUFRTX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxf U0VDX09QVFNfSAotCi0vKgotICogVGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdXNlZCBieSBh biBzZWNfdC4gIE1vcmFsbHksIHRoaXMgaXMgcGFydCBvZiB0aGUKLSAqIFNFQyBpbnRlcmZhY2Us IGJ1dCB3ZSBwdXQgaXQgaGVyZSBmb3IgaGVhZGVyLW9yZGVyaW5nIHJlYXNvbnMuCi0gKi8KLQot dHlwZWRlZiBzdHJ1Y3Qgc2VjX29wdHNfcyBzZWNfb3B0c190Owotc3RydWN0IHNlY19vcHRzX3Mg ewotCS8qCi0JICogV2UgZG9uJ3QgbmVjZXNzYXJpbHkgYWx3YXlzIHVzZSBhbGwgdGhlIHNoYXJk czsgcmVxdWVzdHMgYXJlCi0JICogZGlzdHJpYnV0ZWQgYWNyb3NzIHNoYXJkcyBbMCwgbnNoYXJk cyAtIDEpLgotCSAqLwotCXNpemVfdCBuc2hhcmRzOwotCS8qCi0JICogV2UnbGwgYXV0b21hdGlj YWxseSByZWZ1c2UgdG8gY2FjaGUgYW55IG9iamVjdHMgaW4gdGhpcyBzZWMgaWYKLQkgKiB0aGV5 J3JlIGxhcmdlciB0aGFuIG1heF9hbGxvYyBieXRlcywgaW5zdGVhZCBmb3J3YXJkaW5nIHN1Y2gg b2JqZWN0cwotCSAqIGRpcmVjdGx5IHRvIHRoZSBmYWxsYmFjay4KLQkgKi8KLQlzaXplX3QgbWF4 X2FsbG9jOwotCS8qCi0JICogRXhjZWVkaW5nIHRoaXMgYW1vdW50IG9mIGNhY2hlZCBleHRlbnRz IGluIGEgc2hhcmQgY2F1c2VzIHVzIHRvIHN0YXJ0Ci0JICogZmx1c2hpbmcgYmlucyBpbiB0aGF0 IHNoYXJkIHVudGlsIHdlIGZhbGwgYmVsb3cgYnl0ZXNfYWZ0ZXJfZmx1c2guCi0JICovCi0Jc2l6 ZV90IG1heF9ieXRlczsKLQkvKgotCSAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgKGluIGFsbCBiaW5z KSB3ZSBmbHVzaCBkb3duIHRvIHdoZW4gd2UgZXhjZWVkCi0JICogYnl0ZXNfY3VyLiAgV2Ugd2Fu dCB0aGlzIHRvIGJlIGxlc3MgdGhhbiBieXRlc19jdXIsIGJlY2F1c2UKLQkgKiBvdGhlcndpc2Ug d2UgY291bGQgZ2V0IGludG8gc2l0dWF0aW9ucyB3aGVyZSBhIHNoYXJkIHVuZGVyZ29pbmcKLQkg KiBuZXQtZGVhbGxvY2F0aW9uIGtlZXBzIGJ5dGVzX2N1ciB2ZXJ5IG5lYXIgdG8gbWF4X2J5dGVz LCBzbyB0aGF0Ci0JICogbW9zdCBkZWFsbG9jYXRpb25zIGdldCBpbW1lZGlhdGVseSBmb3J3YXJk ZWQgdG8gdGhlIHVuZGVybHlpbmcgUEFJCi0JICogaW1wbGVtZW50YXRpb24sIGRlZmVhdGluZyB0 aGUgcG9pbnQgb2YgdGhlIFNFQy4KLQkgKi8KLQlzaXplX3QgYnl0ZXNfYWZ0ZXJfZmx1c2g7Ci0J LyoKLQkgKiBXaGVuIHdlIGNhbid0IHNhdGlzZnkgYW4gYWxsb2NhdGlvbiBvdXQgb2YgdGhlIFNF QyBiZWNhdXNlIHRoZXJlIGFyZQotCSAqIG5vIGF2YWlsYWJsZSBvbmVzIGNhY2hlZCwgd2UgYWxs b2NhdGUgbXVsdGlwbGUgb2YgdGhhdCBzaXplIG91dCBvZgotCSAqIHRoZSBmYWxsYmFjayBhbGxv Y2F0b3IuICBFdmVudHVhbGx5IHdlIG1pZ2h0IHdhbnQgdG8gZG8gc29tZXRoaW5nCi0JICogY2xl dmVyZXIsIGJ1dCBmb3Igbm93IHdlIGp1c3QgZ3JhYiBhIGZpeGVkIG51bWJlci4KLQkgKi8KLQlz aXplX3QgYmF0Y2hfZmlsbF9leHRyYTsKLX07Ci0KLSNkZWZpbmUgU0VDX09QVFNfREVGQVVMVCB7 CQkJCQkJXAotCS8qIG5zaGFyZHMgKi8JCQkJCQkJXAotCTQsCQkJCQkJCQlcCi0JLyogbWF4X2Fs bG9jICovCQkJCQkJCVwKLQkoMzIgKiAxMDI0KSA8IFBBR0UgPyBQQUdFIDogKDMyICogMTAyNCks CQkJXAotCS8qIG1heF9ieXRlcyAqLwkJCQkJCQlcCi0JMjU2ICogMTAyNCwJCQkJCQkJXAotCS8q IGJ5dGVzX2FmdGVyX2ZsdXNoICovCQkJCQkJXAotCTEyOCAqIDEwMjQsCQkJCQkJCVwKLQkvKiBi YXRjaF9maWxsX2V4dHJhICovCQkJCQkJXAotCTAJCQkJCQkJCVwKLX0KLQotCi0jZW5kaWYgLyog SkVNQUxMT0NfSU5URVJOQUxfU0VDX09QVFNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc2Vx LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3NlcS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJkZjRj Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc2VxLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCww IEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1NFUV9ICi0jZGVmaW5lIEpFTUFMTE9DX0lO VEVSTkFMX1NFUV9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hdG9taWMuaCIKLQot LyoKLSAqIEEgc2ltcGxlIHNlcWxvY2sgaW1wbGVtZW50YXRpb24uCi0gKi8KLQotI2RlZmluZSBz ZXFfZGVmaW5lKHR5cGUsIHNob3J0X3R5cGUpCQkJCQlcCi10eXBlZGVmIHN0cnVjdCB7CQkJCQkJ CVwKLQlhdG9taWNfenVfdCBzZXE7CQkJCQkJXAotCWF0b21pY196dV90IGRhdGFbCQkJCQkJXAot CSAgICAoc2l6ZW9mKHR5cGUpICsgc2l6ZW9mKHNpemVfdCkgLSAxKSAvIHNpemVvZihzaXplX3Qp XTsJXAotfSBzZXFfIyNzaG9ydF90eXBlIyNfdDsJCQkJCQkJXAotCQkJCQkJCQkJXAotLyoJCQkJ CQkJCQlcCi0gKiBObyBpbnRlcm5hbCBzeW5jaHJvbml6YXRpb24gLS0gdGhlIGNhbGxlciBtdXN0 IGVuc3VyZSB0aGF0IHRoZXJlJ3MJXAotICogb25seSBhIHNpbmdsZSB3cml0ZXIgYXQgYSB0aW1l LgkJCQkJXAotICovCQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkCQkJCQkJCVwKLXNlcV9z dG9yZV8jI3Nob3J0X3R5cGUoc2VxXyMjc2hvcnRfdHlwZSMjX3QgKmRzdCwgdHlwZSAqc3JjKSB7 CQlcCi0Jc2l6ZV90IGJ1ZltzaXplb2YoZHN0LT5kYXRhKSAvIHNpemVvZihzaXplX3QpXTsJCQlc Ci0JYnVmW3NpemVvZihidWYpIC8gc2l6ZW9mKHNpemVfdCkgLSAxXSA9IDA7CQkJXAotCW1lbWNw eShidWYsIHNyYywgc2l6ZW9mKHR5cGUpKTsJCQkJCVwKLQlzaXplX3Qgb2xkX3NlcSA9IGF0b21p Y19sb2FkX3p1KCZkc3QtPnNlcSwgQVRPTUlDX1JFTEFYRUQpOwlcCi0JYXRvbWljX3N0b3JlX3p1 KCZkc3QtPnNlcSwgb2xkX3NlcSArIDEsIEFUT01JQ19SRUxBWEVEKTsJXAotCWF0b21pY19mZW5j ZShBVE9NSUNfUkVMRUFTRSk7CQkJCQlcCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2Yo YnVmKSAvIHNpemVvZihzaXplX3QpOyBpKyspIHsJXAotCQlhdG9taWNfc3RvcmVfenUoJmRzdC0+ ZGF0YVtpXSwgYnVmW2ldLCBBVE9NSUNfUkVMQVhFRCk7CVwKLQl9CQkJCQkJCQlcCi0JYXRvbWlj X3N0b3JlX3p1KCZkc3QtPnNlcSwgb2xkX3NlcSArIDIsIEFUT01JQ19SRUxFQVNFKTsJXAotfQkJ CQkJCQkJCVwKLQkJCQkJCQkJCVwKLS8qIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHJlYWQg d2FzIGNvbnNpc3RlbnQuICovCQkJXAotc3RhdGljIGlubGluZSBib29sCQkJCQkJCVwKLXNlcV90 cnlfbG9hZF8jI3Nob3J0X3R5cGUodHlwZSAqZHN0LCBzZXFfIyNzaG9ydF90eXBlIyNfdCAqc3Jj KSB7CVwKLQlzaXplX3QgYnVmW3NpemVvZihzcmMtPmRhdGEpIC8gc2l6ZW9mKHNpemVfdCldOwkJ CVwKLQlzaXplX3Qgc2VxMSA9IGF0b21pY19sb2FkX3p1KCZzcmMtPnNlcSwgQVRPTUlDX0FDUVVJ UkUpOwlcCi0JaWYgKHNlcTEgJSAyICE9IDApIHsJCQkJCQlcCi0JCXJldHVybiBmYWxzZTsJCQkJ CQlcCi0JfQkJCQkJCQkJXAotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGJ1ZikgLyBz aXplb2Yoc2l6ZV90KTsgaSsrKSB7CVwKLQkJYnVmW2ldID0gYXRvbWljX2xvYWRfenUoJnNyYy0+ ZGF0YVtpXSwgQVRPTUlDX1JFTEFYRUQpOwlcCi0JfQkJCQkJCQkJXAotCWF0b21pY19mZW5jZShB VE9NSUNfQUNRVUlSRSk7CQkJCQlcCi0Jc2l6ZV90IHNlcTIgPSBhdG9taWNfbG9hZF96dSgmc3Jj LT5zZXEsIEFUT01JQ19SRUxBWEVEKTsJXAotCWlmIChzZXExICE9IHNlcTIpIHsJCQkJCQlcCi0J CXJldHVybiBmYWxzZTsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCW1lbWNweShkc3QsIGJ1Ziwgc2l6 ZW9mKHR5cGUpKTsJCQkJCVwKLQlyZXR1cm4gdHJ1ZTsJCQkJCQkJXAotfQotCi0jZW5kaWYgLyog SkVNQUxMT0NfSU5URVJOQUxfU0VRX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NsYWJfZGF0 YS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9zbGFiX2RhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZTgyMTg2My4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NsYWJfZGF0YS5oCisrKyAvZGV2L251bGwK QEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9TTEFCX0RBVEFfSAot I2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9TTEFCX0RBVEFfSAotCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvYml0bWFwLmgiCi0KLXR5cGVkZWYgc3RydWN0IHNsYWJfZGF0YV9zIHNsYWJf ZGF0YV90Owotc3RydWN0IHNsYWJfZGF0YV9zIHsKLQkvKiBQZXIgcmVnaW9uIGFsbG9jYXRlZC9k ZWFsbG9jYXRlZCBiaXRtYXAuICovCi0JYml0bWFwX3QgYml0bWFwW0JJVE1BUF9HUk9VUFNfTUFY XTsKLX07Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9TTEFCX0RBVEFfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvc21vb3Roc3RlcC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zbW9vdGhzdGVwLmgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMTQ0MzAuLjAwMDAwMDAKLS0tIGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5h bC9zbW9vdGhzdGVwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotI2lmbmRlZiBK RU1BTExPQ19JTlRFUk5BTF9TTU9PVEhTVEVQX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxf U01PT1RIU1RFUF9ICi0KLS8qCi0gKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgZm9s bG93aW5nIGNvbW1hbmQ6Ci0gKiAgIHNoIHNtb290aHN0ZXAuc2ggc21vb3RoZXIgMjAwIDI0IDMg MTUKLSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFRoaXMgaGVhZGVyIGRl ZmluZXMgYSBwcmVjb21wdXRlZCB0YWJsZSBiYXNlZCBvbiB0aGUgc21vb3Roc3RlcCBmYW1pbHkg b2YKLSAqIHNpZ21vaWRhbCBjdXJ2ZXMgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Nt b290aHN0ZXApIHRoYXQgZ3JvdyBmcm9tIDAKLSAqIHRvIDEgaW4gMCA8PSB4IDw9IDEuICBUaGUg dGFibGUgaXMgc3RvcmVkIGFzIGludGVnZXIgZml4ZWQgcG9pbnQgdmFsdWVzIHNvCi0gKiB0aGF0 IGZsb2F0aW5nIHBvaW50IG1hdGggY2FuIGJlIGF2b2lkZWQuCi0gKgotICogICAgICAgICAgICAg ICAgICAgICAgMyAgICAgMgotICogICBzbW9vdGhzdGVwKHgpID0gLTJ4ICArIDN4Ci0gKgotICog ICAgICAgICAgICAgICAgICAgICAgIDUgICAgICA0ICAgICAgMwotICogICBzbW9vdGhlcnN0ZXAo eCkgPSA2eCAgLSAxNXggICsgMTB4Ci0gKgotICogICAgICAgICAgICAgICAgICAgICAgICAgIDcg ICAgICA2ICAgICAgNSAgICAgIDQKLSAqICAgc21vb3RoZXN0c3RlcCh4KSA9IC0yMHggICsgNzB4 ICAtIDg0eCAgKyAzNXgKLSAqLwotCi0jZGVmaW5lIFNNT09USFNURVBfVkFSSUFOVAkic21vb3Ro ZXIiCi0jZGVmaW5lIFNNT09USFNURVBfTlNURVBTCTIwMAotI2RlZmluZSBTTU9PVEhTVEVQX0JG UAkJMjQKLSNkZWZpbmUgU01PT1RIU1RFUCBcCi0gLyogU1RFUChzdGVwLCBoLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICB4LCAgICAgeSkgKi8gXAotICAgIFNURVAoICAgMSwgVUlOVDY0X0Mo MHgwMDAwMDAwMDAwMDAwMDE0KSwgMC4wMDUsIDAuMDAwMDAxMjQwNjQzNzUwKSBcCi0gICAgU1RF UCggICAyLCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMDAwYTUpLCAwLjAxMCwgMC4wMDAwMDk4NTA2 MDAwMDApIFwKLSAgICBTVEVQKCAgIDMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwMDIyOSksIDAu MDE1LCAwLjAwMDAzMjk5NTE4MTI1MCkgXAotICAgIFNURVAoICAgNCwgVUlOVDY0X0MoMHgwMDAw MDAwMDAwMDAwNTE2KSwgMC4wMjAsIDAuMDAwMDc3NjE5MjAwMDAwKSBcCi0gICAgU1RFUCggICA1 LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMDA5ZGMpLCAwLjAyNSwgMC4wMDAxNTA0NDkyMTg3NTAp IFwKLSAgICBTVEVQKCAgIDYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwMTBlOCksIDAuMDMwLCAw LjAwMDI1Nzk5NTgwMDAwMCkgXAotICAgIFNURVAoICAgNywgVUlOVDY0X0MoMHgwMDAwMDAwMDAw MDAxYWE0KSwgMC4wMzUsIDAuMDAwNDA2NTU1NzU2MjUwKSBcCi0gICAgU1RFUCggICA4LCBVSU5U NjRfQygweDAwMDAwMDAwMDAwMDI3NzcpLCAwLjA0MCwgMC4wMDA2MDIyMTQ0MDAwMDApIFwKLSAg ICBTVEVQKCAgIDksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwMzdjMiksIDAuMDQ1LCAwLjAwMDg1 MDg0Nzc5Mzc1MCkgXAotICAgIFNURVAoICAxMCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDA0YmU2 KSwgMC4wNTAsIDAuMDAxMTU4MTI1MDAwMDAwKSBcCi0gICAgU1RFUCggIDExLCBVSU5UNjRfQygw eDAwMDAwMDAwMDAwMDY0M2MpLCAwLjA1NSwgMC4wMDE1Mjk1MTAzMzEyNTApIFwKLSAgICBTVEVQ KCAgMTIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwODExZiksIDAuMDYwLCAwLjAwMTk3MDI2NTYw MDAwMCkgXAotICAgIFNURVAoICAxMywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDBhMmUyKSwgMC4w NjUsIDAuMDAyNDg1NDUyMzY4NzUwKSBcCi0gICAgU1RFUCggIDE0LCBVSU5UNjRfQygweDAwMDAw MDAwMDAwMGM5ZDgpLCAwLjA3MCwgMC4wMDMwNzk5MzQyMDAwMDApIFwKLSAgICBTVEVQKCAgMTUs IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDAwZjY0ZiksIDAuMDc1LCAwLjAwMzc1ODM3ODkwNjI1MCkg XAotICAgIFNURVAoICAxNiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDEyODkxKSwgMC4wODAsIDAu MDA0NTI1MjYwODAwMDAwKSBcCi0gICAgU1RFUCggIDE3LCBVSU5UNjRfQygweDAwMDAwMDAwMDAw MTYwZTcpLCAwLjA4NSwgMC4wMDUzODQ4NjI5NDM3NTApIFwKLSAgICBTVEVQKCAgMTgsIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMDAxOWY5NSksIDAuMDkwLCAwLjAwNjM0MTI3OTQwMDAwMCkgXAotICAg IFNURVAoICAxOSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDFlNGRjKSwgMC4wOTUsIDAuMDA3Mzk4 NDE3NDgxMjUwKSBcCi0gICAgU1RFUCggIDIwLCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMjMwZmMp LCAwLjEwMCwgMC4wMDg1NjAwMDAwMDAwMDApIFwKLSAgICBTVEVQKCAgMjEsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMDAyODQzMCksIDAuMTA1LCAwLjAwOTgyOTU2NzUxODc1MCkgXAotICAgIFNURVAo ICAyMiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMDJkZWIwKSwgMC4xMTAsIDAuMDExMjEwNDgwNjAw MDAwKSBcCi0gICAgU1RFUCggIDIzLCBVSU5UNjRfQygweDAwMDAwMDAwMDAwMzQwYjEpLCAwLjEx NSwgMC4wMTI3MDU5MjIwNTYyNTApIFwKLSAgICBTVEVQKCAgMjQsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMDAzYWE2NyksIDAuMTIwLCAwLjAxNDMxODg5OTIwMDAwMCkgXAotICAgIFNURVAoICAyNSwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwMDQxYzAwKSwgMC4xMjUsIDAuMDE2MDUyMjQ2MDkzNzUwKSBc Ci0gICAgU1RFUCggIDI2LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwNDk1YTgpLCAwLjEzMCwgMC4w MTc5MDg2MjU4MDAwMDApIFwKLSAgICBTVEVQKCAgMjcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDA1 MTc4YiksIDAuMTM1LCAwLjAxOTg5MDUzMjYzMTI1MCkgXAotICAgIFNURVAoICAyOCwgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwMDVhMWNmKSwgMC4xNDAsIDAuMDIyMDAwMjk0NDAwMDAwKSBcCi0gICAg U1RFUCggIDI5LCBVSU5UNjRfQygweDAwMDAwMDAwMDAwNjM0OTgpLCAwLjE0NSwgMC4wMjQyNDAw NzQ2Njg3NTApIFwKLSAgICBTVEVQKCAgMzAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDA2ZDAwOSks IDAuMTUwLCAwLjAyNjYxMTg3NTAwMDAwMCkgXAotICAgIFNURVAoICAzMSwgVUlOVDY0X0MoMHgw MDAwMDAwMDAwMDc3NDNmKSwgMC4xNTUsIDAuMDI5MTE3NTM3MjA2MjUwKSBcCi0gICAgU1RFUCgg IDMyLCBVSU5UNjRfQygweDAwMDAwMDAwMDAwODIxNTcpLCAwLjE2MCwgMC4wMzE3NTg3NDU2MDAw MDApIFwKLSAgICBTVEVQKCAgMzMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDA4ZDc2YiksIDAuMTY1 LCAwLjAzNDUzNzAyOTI0Mzc1MCkgXAotICAgIFNURVAoICAzNCwgVUlOVDY0X0MoMHgwMDAwMDAw MDAwMDk5NjkxKSwgMC4xNzAsIDAuMDM3NDUzNzY0MjAwMDAwKSBcCi0gICAgU1RFUCggIDM1LCBV SU5UNjRfQygweDAwMDAwMDAwMDAwYTVlZGYpLCAwLjE3NSwgMC4wNDA1MTAxNzU3ODEyNTApIFwK LSAgICBTVEVQKCAgMzYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDBiMzA2NyksIDAuMTgwLCAwLjA0 MzcwNzM0MDgwMDAwMCkgXAotICAgIFNURVAoICAzNywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMGMw YjM4KSwgMC4xODUsIDAuMDQ3MDQ2MTg5ODE4NzUwKSBcCi0gICAgU1RFUCggIDM4LCBVSU5UNjRf QygweDAwMDAwMDAwMDAwY2VmNWUpLCAwLjE5MCwgMC4wNTA1Mjc1MDk0MDAwMDApIFwKLSAgICBT VEVQKCAgMzksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDBkZGNlNiksIDAuMTk1LCAwLjA1NDE1MTk0 NDM1NjI1MCkgXAotICAgIFNURVAoICA0MCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMGVkM2Q4KSwg MC4yMDAsIDAuMDU3OTIwMDAwMDAwMDAwKSBcCi0gICAgU1RFUCggIDQxLCBVSU5UNjRfQygweDAw MDAwMDAwMDAwZmQ0MzkpLCAwLjIwNSwgMC4wNjE4MzIwNDQzOTM3NTApIFwKLSAgICBTVEVQKCAg NDIsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDEwZGUwZSksIDAuMjEwLCAwLjA2NTg4ODMxMDYwMDAw MCkgXAotICAgIFNURVAoICA0MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMTFmMTU4KSwgMC4yMTUs IDAuMDcwMDg4ODk4OTMxMjUwKSBcCi0gICAgU1RFUCggIDQ0LCBVSU5UNjRfQygweDAwMDAwMDAw MDAxMzBlMTcpLCAwLjIyMCwgMC4wNzQ0MzM3NzkyMDAwMDApIFwKLSAgICBTVEVQKCAgNDUsIFVJ TlQ2NF9DKDB4MDAwMDAwMDAwMDE0MzQ0OCksIDAuMjI1LCAwLjA3ODkyMjc5Mjk2ODc1MCkgXAot ICAgIFNURVAoICA0NiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMTU2M2U3KSwgMC4yMzAsIDAuMDgz NTU1NjU1ODAwMDAwKSBcCi0gICAgU1RFUCggIDQ3LCBVSU5UNjRfQygweDAwMDAwMDAwMDAxNjlj ZWMpLCAwLjIzNSwgMC4wODgzMzE5NTk1MDYyNTApIFwKLSAgICBTVEVQKCAgNDgsIFVJTlQ2NF9D KDB4MDAwMDAwMDAwMDE3ZGY0ZiksIDAuMjQwLCAwLjA5MzI1MTE3NDQwMDAwMCkgXAotICAgIFNU RVAoICA0OSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMTkyYjA0KSwgMC4yNDUsIDAuMDk4MzEyNjUx NTQzNzUwKSBcCi0gICAgU1RFUCggIDUwLCBVSU5UNjRfQygweDAwMDAwMDAwMDAxYTgwMDApLCAw LjI1MCwgMC4xMDM1MTU2MjUwMDAwMDApIFwKLSAgICBTVEVQKCAgNTEsIFVJTlQ2NF9DKDB4MDAw MDAwMDAwMDFiZGUzMiksIDAuMjU1LCAwLjEwODg1OTIxNDA4MTI1MCkgXAotICAgIFNURVAoICA1 MiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMWQ0NThiKSwgMC4yNjAsIDAuMTE0MzQyNDI1NjAwMDAw KSBcCi0gICAgU1RFUCggIDUzLCBVSU5UNjRfQygweDAwMDAwMDAwMDAxZWI1ZjgpLCAwLjI2NSwg MC4xMTk5NjQxNTYxMTg3NTApIFwKLSAgICBTVEVQKCAgNTQsIFVJTlQ2NF9DKDB4MDAwMDAwMDAw MDIwMmY2NSksIDAuMjcwLCAwLjEyNTcyMzE5NDIwMDAwMCkgXAotICAgIFNURVAoICA1NSwgVUlO VDY0X0MoMHgwMDAwMDAwMDAwMjFiMWJiKSwgMC4yNzUsIDAuMTMxNjE4MjIyNjU2MjUwKSBcCi0g ICAgU1RFUCggIDU2LCBVSU5UNjRfQygweDAwMDAwMDAwMDAyMzNjZTMpLCAwLjI4MCwgMC4xMzc2 NDc4MjA4MDAwMDApIFwKLSAgICBTVEVQKCAgNTcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDI0ZDBj MyksIDAuMjg1LCAwLjE0MzgxMDQ2NjY5Mzc1MCkgXAotICAgIFNURVAoICA1OCwgVUlOVDY0X0Mo MHgwMDAwMDAwMDAwMjY2ZDQwKSwgMC4yOTAsIDAuMTUwMTA0NTM5NDAwMDAwKSBcCi0gICAgU1RF UCggIDU5LCBVSU5UNjRfQygweDAwMDAwMDAwMDAyODEyM2QpLCAwLjI5NSwgMC4xNTY1MjgzMjEy MzEyNTApIFwKLSAgICBTVEVQKCAgNjAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDI5YmY5YyksIDAu MzAwLCAwLjE2MzA4MDAwMDAwMDAwMCkgXAotICAgIFNURVAoICA2MSwgVUlOVDY0X0MoMHgwMDAw MDAwMDAwMmI3NTNkKSwgMC4zMDUsIDAuMTY5NzU3NjcxMjY4NzUwKSBcCi0gICAgU1RFUCggIDYy LCBVSU5UNjRfQygweDAwMDAwMDAwMDAyZDMyZmUpLCAwLjMxMCwgMC4xNzY1NTkzNDA2MDAwMDAp IFwKLSAgICBTVEVQKCAgNjMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDJlZjhiYyksIDAuMzE1LCAw LjE4MzQ4MjkyNTgwNjI1MCkgXAotICAgIFNURVAoICA2NCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAw MzBjNjU0KSwgMC4zMjAsIDAuMTkwNTI2MjU5MjAwMDAwKSBcCi0gICAgU1RFUCggIDY1LCBVSU5U NjRfQygweDAwMDAwMDAwMDAzMjliOWYpLCAwLjMyNSwgMC4xOTc2ODcwODk4NDM3NTApIFwKLSAg ICBTVEVQKCAgNjYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDM0Nzg3NSksIDAuMzMwLCAwLjIwNDk2 MzA4NTgwMDAwMCkgXAotICAgIFNURVAoICA2NywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwMzY1Y2Iw KSwgMC4zMzUsIDAuMjEyMzUxODM2MzgxMjUwKSBcCi0gICAgU1RFUCggIDY4LCBVSU5UNjRfQygw eDAwMDAwMDAwMDAzODQ4MjUpLCAwLjM0MCwgMC4yMTk4NTA4NTQ0MDAwMDApIFwKLSAgICBTVEVQ KCAgNjksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDNhM2FhOCksIDAuMzQ1LCAwLjIyNzQ1NzU3ODQx ODc1MCkgXAotICAgIFNURVAoICA3MCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwM2MzNDBmKSwgMC4z NTAsIDAuMjM1MTY5Mzc1MDAwMDAwKSBcCi0gICAgU1RFUCggIDcxLCBVSU5UNjRfQygweDAwMDAw MDAwMDAzZTM0MmIpLCAwLjM1NSwgMC4yNDI5ODM1NDA5NTYyNTApIFwKLSAgICBTVEVQKCAgNzIs IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDQwM2FjZSksIDAuMzYwLCAwLjI1MDg5NzMwNTYwMDAwMCkg XAotICAgIFNURVAoICA3MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNDI0N2M4KSwgMC4zNjUsIDAu MjU4OTA3ODMyOTkzNzUwKSBcCi0gICAgU1RFUCggIDc0LCBVSU5UNjRfQygweDAwMDAwMDAwMDA0 NDVhZTkpLCAwLjM3MCwgMC4yNjcwMTIyMjQyMDAwMDApIFwKLSAgICBTVEVQKCAgNzUsIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMDQ2NzQwMCksIDAuMzc1LCAwLjI3NTIwNzUxOTUzMTI1MCkgXAotICAg IFNURVAoICA3NiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNDg5MmQ4KSwgMC4zODAsIDAuMjgzNDkw NzAwODAwMDAwKSBcCi0gICAgU1RFUCggIDc3LCBVSU5UNjRfQygweDAwMDAwMDAwMDA0YWI3NDAp LCAwLjM4NSwgMC4yOTE4NTg2OTM1Njg3NTApIFwKLSAgICBTVEVQKCAgNzgsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMDRjZTEwMiksIDAuMzkwLCAwLjMwMDMwODM2OTQwMDAwMCkgXAotICAgIFNURVAo ICA3OSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNGYwZmU5KSwgMC4zOTUsIDAuMzA4ODM2NTQ4MTA2 MjUwKSBcCi0gICAgU1RFUCggIDgwLCBVSU5UNjRfQygweDAwMDAwMDAwMDA1MTQzYmYpLCAwLjQw MCwgMC4zMTc0NDAwMDAwMDAwMDApIFwKLSAgICBTVEVQKCAgODEsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMDUzN2M0ZCksIDAuNDA1LCAwLjMyNjExNTQ0ODE0Mzc1MCkgXAotICAgIFNURVAoICA4Miwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwNTViOTViKSwgMC40MTAsIDAuMzM0ODU5NTcwNjAwMDAwKSBc Ci0gICAgU1RFUCggIDgzLCBVSU5UNjRfQygweDAwMDAwMDAwMDA1N2ZhYjEpLCAwLjQxNSwgMC4z NDM2NjkwMDI2ODEyNTApIFwKLSAgICBTVEVQKCAgODQsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDVh NDAxNSksIDAuNDIwLCAwLjM1MjU0MDMzOTIwMDAwMCkgXAotICAgIFNURVAoICA4NSwgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwNWM4OTRlKSwgMC40MjUsIDAuMzYxNDcwMTM2NzE4NzUwKSBcCi0gICAg U1RFUCggIDg2LCBVSU5UNjRfQygweDAwMDAwMDAwMDA1ZWQ2MjIpLCAwLjQzMCwgMC4zNzA0NTQ5 MTU4MDAwMDApIFwKLSAgICBTVEVQKCAgODcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDYxMjY1NSks IDAuNDM1LCAwLjM3OTQ5MTE2MzI1NjI1MCkgXAotICAgIFNURVAoICA4OCwgVUlOVDY0X0MoMHgw MDAwMDAwMDAwNjM3OWFjKSwgMC40NDAsIDAuMzg4NTc1MzM0NDAwMDAwKSBcCi0gICAgU1RFUCgg IDg5LCBVSU5UNjRfQygweDAwMDAwMDAwMDA2NWNmZWIpLCAwLjQ0NSwgMC4zOTc3MDM4NTUyOTM3 NTApIFwKLSAgICBTVEVQKCAgOTAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDY4MjhkNiksIDAuNDUw LCAwLjQwNjg3MzEyNTAwMDAwMCkgXAotICAgIFNURVAoICA5MSwgVUlOVDY0X0MoMHgwMDAwMDAw MDAwNmE4NDJmKSwgMC40NTUsIDAuNDE2MDc5NTE3ODMxMjUwKSBcCi0gICAgU1RFUCggIDkyLCBV SU5UNjRfQygweDAwMDAwMDAwMDA2Y2UxYmIpLCAwLjQ2MCwgMC40MjUzMTkzODU2MDAwMDApIFwK LSAgICBTVEVQKCAgOTMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDZmNDEzYSksIDAuNDY1LCAwLjQz NDU4OTA1OTg2ODc1MCkgXAotICAgIFNURVAoICA5NCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNzFh MjcwKSwgMC40NzAsIDAuNDQzODg0ODU0MjAwMDAwKSBcCi0gICAgU1RFUCggIDk1LCBVSU5UNjRf QygweDAwMDAwMDAwMDA3NDA1MWQpLCAwLjQ3NSwgMC40NTMyMDMwNjY0MDYyNTApIFwKLSAgICBT VEVQKCAgOTYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDc2NjkwNSksIDAuNDgwLCAwLjQ2MjUzOTk4 MDgwMDAwMCkgXAotICAgIFNURVAoICA5NywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwNzhjZGU3KSwg MC40ODUsIDAuNDcxODkxODcwNDQzNzUwKSBcCi0gICAgU1RFUCggIDk4LCBVSU5UNjRfQygweDAw MDAwMDAwMDA3YjMzODcpLCAwLjQ5MCwgMC40ODEyNTQ5OTk0MDAwMDApIFwKLSAgICBTVEVQKCAg OTksIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMDdkOTlhNCksIDAuNDk1LCAwLjQ5MDYyNTYyNDk4MTI1 MCkgXAotICAgIFNURVAoIDEwMCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwODAwMDAwKSwgMC41MDAs IDAuNTAwMDAwMDAwMDAwMDAwKSBcCi0gICAgU1RFUCggMTAxLCBVSU5UNjRfQygweDAwMDAwMDAw MDA4MjY2NWIpLCAwLjUwNSwgMC41MDkzNzQzNzUwMTg3NTApIFwKLSAgICBTVEVQKCAxMDIsIFVJ TlQ2NF9DKDB4MDAwMDAwMDAwMDg0Y2M3OCksIDAuNTEwLCAwLjUxODc0NTAwMDYwMDAwMCkgXAot ICAgIFNURVAoIDEwMywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwODczMjE4KSwgMC41MTUsIDAuNTI4 MTA4MTI5NTU2MjUwKSBcCi0gICAgU1RFUCggMTA0LCBVSU5UNjRfQygweDAwMDAwMDAwMDA4OTk2 ZmEpLCAwLjUyMCwgMC41Mzc0NjAwMTkyMDAwMDApIFwKLSAgICBTVEVQKCAxMDUsIFVJTlQ2NF9D KDB4MDAwMDAwMDAwMDhiZmFlMiksIDAuNTI1LCAwLjU0Njc5NjkzMzU5Mzc1MCkgXAotICAgIFNU RVAoIDEwNiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwOGU1ZDhmKSwgMC41MzAsIDAuNTU2MTE1MTQ1 ODAwMDAwKSBcCi0gICAgU1RFUCggMTA3LCBVSU5UNjRfQygweDAwMDAwMDAwMDA5MGJlYzUpLCAw LjUzNSwgMC41NjU0MTA5NDAxMzEyNTApIFwKLSAgICBTVEVQKCAxMDgsIFVJTlQ2NF9DKDB4MDAw MDAwMDAwMDkzMWU0NCksIDAuNTQwLCAwLjU3NDY4MDYxNDQwMDAwMCkgXAotICAgIFNURVAoIDEw OSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwOTU3YmQwKSwgMC41NDUsIDAuNTgzOTIwNDgyMTY4NzUw KSBcCi0gICAgU1RFUCggMTEwLCBVSU5UNjRfQygweDAwMDAwMDAwMDA5N2Q3MjkpLCAwLjU1MCwg MC41OTMxMjY4NzUwMDAwMDApIFwKLSAgICBTVEVQKCAxMTEsIFVJTlQ2NF9DKDB4MDAwMDAwMDAw MDlhMzAxNCksIDAuNTU1LCAwLjYwMjI5NjE0NDcwNjI1MCkgXAotICAgIFNURVAoIDExMiwgVUlO VDY0X0MoMHgwMDAwMDAwMDAwOWM4NjUzKSwgMC41NjAsIDAuNjExNDI0NjY1NjAwMDAwKSBcCi0g ICAgU1RFUCggMTEzLCBVSU5UNjRfQygweDAwMDAwMDAwMDA5ZWQ5YWEpLCAwLjU2NSwgMC42MjA1 MDg4MzY3NDM3NTApIFwKLSAgICBTVEVQKCAxMTQsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGExMjlk ZCksIDAuNTcwLCAwLjYyOTU0NTA4NDIwMDAwMCkgXAotICAgIFNURVAoIDExNSwgVUlOVDY0X0Mo MHgwMDAwMDAwMDAwYTM3NmIxKSwgMC41NzUsIDAuNjM4NTI5ODYzMjgxMjUwKSBcCi0gICAgU1RF UCggMTE2LCBVSU5UNjRfQygweDAwMDAwMDAwMDBhNWJmZWEpLCAwLjU4MCwgMC42NDc0NTk2NjA4 MDAwMDApIFwKLSAgICBTVEVQKCAxMTcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGE4MDU0ZSksIDAu NTg1LCAwLjY1NjMzMDk5NzMxODc1MCkgXAotICAgIFNURVAoIDExOCwgVUlOVDY0X0MoMHgwMDAw MDAwMDAwYWE0NmE0KSwgMC41OTAsIDAuNjY1MTQwNDI5NDAwMDAwKSBcCi0gICAgU1RFUCggMTE5 LCBVSU5UNjRfQygweDAwMDAwMDAwMDBhYzgzYjIpLCAwLjU5NSwgMC42NzM4ODQ1NTE4NTYyNTAp IFwKLSAgICBTVEVQKCAxMjAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGFlYmM0MCksIDAuNjAwLCAw LjY4MjU2MDAwMDAwMDAwMCkgXAotICAgIFNURVAoIDEyMSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAw YjBmMDE2KSwgMC42MDUsIDAuNjkxMTYzNDUxODkzNzUwKSBcCi0gICAgU1RFUCggMTIyLCBVSU5U NjRfQygweDAwMDAwMDAwMDBiMzFlZmQpLCAwLjYxMCwgMC42OTk2OTE2MzA2MDAwMDApIFwKLSAg ICBTVEVQKCAxMjMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGI1NDhiZiksIDAuNjE1LCAwLjcwODE0 MTMwNjQzMTI1MCkgXAotICAgIFNURVAoIDEyNCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYjc2ZDI3 KSwgMC42MjAsIDAuNzE2NTA5Mjk5MjAwMDAwKSBcCi0gICAgU1RFUCggMTI1LCBVSU5UNjRfQygw eDAwMDAwMDAwMDBiOThjMDApLCAwLjYyNSwgMC43MjQ3OTI0ODA0Njg3NTApIFwKLSAgICBTVEVQ KCAxMjYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGJiYTUxNiksIDAuNjMwLCAwLjczMjk4Nzc3NTgw MDAwMCkgXAotICAgIFNURVAoIDEyNywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYmRiODM3KSwgMC42 MzUsIDAuNzQxMDkyMTY3MDA2MjUwKSBcCi0gICAgU1RFUCggMTI4LCBVSU5UNjRfQygweDAwMDAw MDAwMDBiZmM1MzEpLCAwLjY0MCwgMC43NDkxMDI2OTQ0MDAwMDApIFwKLSAgICBTVEVQKCAxMjks IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGMxY2JkNCksIDAuNjQ1LCAwLjc1NzAxNjQ1OTA0Mzc1MCkg XAotICAgIFNURVAoIDEzMCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYzNjYmYwKSwgMC42NTAsIDAu NzY0ODMwNjI1MDAwMDAwKSBcCi0gICAgU1RFUCggMTMxLCBVSU5UNjRfQygweDAwMDAwMDAwMDBj NWM1NTcpLCAwLjY1NSwgMC43NzI1NDI0MjE1ODEyNTApIFwKLSAgICBTVEVQKCAxMzIsIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMGM3YjdkYSksIDAuNjYwLCAwLjc4MDE0OTE0NTYwMDAwMCkgXAotICAg IFNURVAoIDEzMywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwYzlhMzRmKSwgMC42NjUsIDAuNzg3NjQ4 MTYzNjE4NzUwKSBcCi0gICAgU1RFUCggMTM0LCBVSU5UNjRfQygweDAwMDAwMDAwMDBjYjg3OGEp LCAwLjY3MCwgMC43OTUwMzY5MTQyMDAwMDApIFwKLSAgICBTVEVQKCAxMzUsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMGNkNjQ2MCksIDAuNjc1LCAwLjgwMjMxMjkxMDE1NjI1MCkgXAotICAgIFNURVAo IDEzNiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwY2YzOWFiKSwgMC42ODAsIDAuODA5NDczNzQwODAw MDAwKSBcCi0gICAgU1RFUCggMTM3LCBVSU5UNjRfQygweDAwMDAwMDAwMDBkMTA3NDMpLCAwLjY4 NSwgMC44MTY1MTcwNzQxOTM3NTApIFwKLSAgICBTVEVQKCAxMzgsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMGQyY2QwMSksIDAuNjkwLCAwLjgyMzQ0MDY1OTQwMDAwMCkgXAotICAgIFNURVAoIDEzOSwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwZDQ4YWMyKSwgMC42OTUsIDAuODMwMjQyMzI4NzMxMjUwKSBc Ci0gICAgU1RFUCggMTQwLCBVSU5UNjRfQygweDAwMDAwMDAwMDBkNjQwNjMpLCAwLjcwMCwgMC44 MzY5MjAwMDAwMDAwMDApIFwKLSAgICBTVEVQKCAxNDEsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGQ3 ZWRjMiksIDAuNzA1LCAwLjg0MzQ3MTY3ODc2ODc1MCkgXAotICAgIFNURVAoIDE0MiwgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwZDk5MmJmKSwgMC43MTAsIDAuODQ5ODk1NDYwNjAwMDAwKSBcCi0gICAg U1RFUCggMTQzLCBVSU5UNjRfQygweDAwMDAwMDAwMDBkYjJmM2MpLCAwLjcxNSwgMC44NTYxODk1 MzMzMDYyNTApIFwKLSAgICBTVEVQKCAxNDQsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGRjYzMxYyks IDAuNzIwLCAwLjg2MjM1MjE3OTIwMDAwMCkgXAotICAgIFNURVAoIDE0NSwgVUlOVDY0X0MoMHgw MDAwMDAwMDAwZGU0ZTQ0KSwgMC43MjUsIDAuODY4MzgxNzc3MzQzNzUwKSBcCi0gICAgU1RFUCgg MTQ2LCBVSU5UNjRfQygweDAwMDAwMDAwMDBkZmQwOWEpLCAwLjczMCwgMC44NzQyNzY4MDU4MDAw MDApIFwKLSAgICBTVEVQKCAxNDcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGUxNGEwNyksIDAuNzM1 LCAwLjg4MDAzNTg0Mzg4MTI1MCkgXAotICAgIFNURVAoIDE0OCwgVUlOVDY0X0MoMHgwMDAwMDAw MDAwZTJiYTc0KSwgMC43NDAsIDAuODg1NjU3NTc0NDAwMDAwKSBcCi0gICAgU1RFUCggMTQ5LCBV SU5UNjRfQygweDAwMDAwMDAwMDBlNDIxY2QpLCAwLjc0NSwgMC44OTExNDA3ODU5MTg3NTApIFwK LSAgICBTVEVQKCAxNTAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGU1ODAwMCksIDAuNzUwLCAwLjg5 NjQ4NDM3NTAwMDAwMCkgXAotICAgIFNURVAoIDE1MSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZTZk NGZiKSwgMC43NTUsIDAuOTAxNjg3MzQ4NDU2MjUwKSBcCi0gICAgU1RFUCggMTUyLCBVSU5UNjRf QygweDAwMDAwMDAwMDBlODIwYjApLCAwLjc2MCwgMC45MDY3NDg4MjU2MDAwMDApIFwKLSAgICBT VEVQKCAxNTMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGU5NjMxMyksIDAuNzY1LCAwLjkxMTY2ODA0 MDQ5Mzc1MCkgXAotICAgIFNURVAoIDE1NCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZWE5YzE4KSwg MC43NzAsIDAuOTE2NDQ0MzQ0MjAwMDAwKSBcCi0gICAgU1RFUCggMTU1LCBVSU5UNjRfQygweDAw MDAwMDAwMDBlYmNiYjcpLCAwLjc3NSwgMC45MjEwNzcyMDcwMzEyNTApIFwKLSAgICBTVEVQKCAx NTYsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGVjZjFlOCksIDAuNzgwLCAwLjkyNTU2NjIyMDgwMDAw MCkgXAotICAgIFNURVAoIDE1NywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZWUwZWE3KSwgMC43ODUs IDAuOTI5OTExMTAxMDY4NzUwKSBcCi0gICAgU1RFUCggMTU4LCBVSU5UNjRfQygweDAwMDAwMDAw MDBlZjIxZjEpLCAwLjc5MCwgMC45MzQxMTE2ODk0MDAwMDApIFwKLSAgICBTVEVQKCAxNTksIFVJ TlQ2NF9DKDB4MDAwMDAwMDAwMGYwMmJjNiksIDAuNzk1LCAwLjkzODE2Nzk1NTYwNjI1MCkgXAot ICAgIFNURVAoIDE2MCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZjEyYzI3KSwgMC44MDAsIDAuOTQy MDgwMDAwMDAwMDAwKSBcCi0gICAgU1RFUCggMTYxLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmMjIz MTkpLCAwLjgwNSwgMC45NDU4NDgwNTU2NDM3NTApIFwKLSAgICBTVEVQKCAxNjIsIFVJTlQ2NF9D KDB4MDAwMDAwMDAwMGYzMTBhMSksIDAuODEwLCAwLjk0OTQ3MjQ5MDYwMDAwMCkgXAotICAgIFNU RVAoIDE2MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZjNmNGM3KSwgMC44MTUsIDAuOTUyOTUzODEw MTgxMjUwKSBcCi0gICAgU1RFUCggMTY0LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmNGNmOTgpLCAw LjgyMCwgMC45NTYyOTI2NTkyMDAwMDApIFwKLSAgICBTVEVQKCAxNjUsIFVJTlQ2NF9DKDB4MDAw MDAwMDAwMGY1YTEyMCksIDAuODI1LCAwLjk1OTQ4OTgyNDIxODc1MCkgXAotICAgIFNURVAoIDE2 NiwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZjY2OTZlKSwgMC44MzAsIDAuOTYyNTQ2MjM1ODAwMDAw KSBcCi0gICAgU1RFUCggMTY3LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmNzI4OTQpLCAwLjgzNSwg MC45NjU0NjI5NzA3NTYyNTApIFwKLSAgICBTVEVQKCAxNjgsIFVJTlQ2NF9DKDB4MDAwMDAwMDAw MGY3ZGVhOCksIDAuODQwLCAwLjk2ODI0MTI1NDQwMDAwMCkgXAotICAgIFNURVAoIDE2OSwgVUlO VDY0X0MoMHgwMDAwMDAwMDAwZjg4YmMwKSwgMC44NDUsIDAuOTcwODgyNDYyNzkzNzUwKSBcCi0g ICAgU1RFUCggMTcwLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmOTJmZjYpLCAwLjg1MCwgMC45NzMz ODgxMjUwMDAwMDApIFwKLSAgICBTVEVQKCAxNzEsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGY5Y2I2 NyksIDAuODU1LCAwLjk3NTc1OTkyNTMzMTI1MCkgXAotICAgIFNURVAoIDE3MiwgVUlOVDY0X0Mo MHgwMDAwMDAwMDAwZmE1ZTMwKSwgMC44NjAsIDAuOTc3OTk5NzA1NjAwMDAwKSBcCi0gICAgU1RF UCggMTczLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmYWU4NzQpLCAwLjg2NSwgMC45ODAxMDk0Njcz Njg3NTApIFwKLSAgICBTVEVQKCAxNzQsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZiNmE1NyksIDAu ODcwLCAwLjk4MjA5MTM3NDIwMDAwMCkgXAotICAgIFNURVAoIDE3NSwgVUlOVDY0X0MoMHgwMDAw MDAwMDAwZmJlNDAwKSwgMC44NzUsIDAuOTgzOTQ3NzUzOTA2MjUwKSBcCi0gICAgU1RFUCggMTc2 LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmYzU1OTgpLCAwLjg4MCwgMC45ODU2ODExMDA4MDAwMDAp IFwKLSAgICBTVEVQKCAxNzcsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZjYmY0ZSksIDAuODg1LCAw Ljk4NzI5NDA3Nzk0Mzc1MCkgXAotICAgIFNURVAoIDE3OCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAw ZmQyMTRmKSwgMC44OTAsIDAuOTg4Nzg5NTE5NDAwMDAwKSBcCi0gICAgU1RFUCggMTc5LCBVSU5U NjRfQygweDAwMDAwMDAwMDBmZDdiY2YpLCAwLjg5NSwgMC45OTAxNzA0MzI0ODEyNTApIFwKLSAg ICBTVEVQKCAxODAsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZkY2YwMyksIDAuOTAwLCAwLjk5MTQ0 MDAwMDAwMDAwMCkgXAotICAgIFNURVAoIDE4MSwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmUxYjIz KSwgMC45MDUsIDAuOTkyNjAxNTgyNTE4NzUwKSBcCi0gICAgU1RFUCggMTgyLCBVSU5UNjRfQygw eDAwMDAwMDAwMDBmZTYwNmEpLCAwLjkxMCwgMC45OTM2NTg3MjA2MDAwMDApIFwKLSAgICBTVEVQ KCAxODMsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZlOWYxOCksIDAuOTE1LCAwLjk5NDYxNTEzNzA1 NjI1MCkgXAotICAgIFNURVAoIDE4NCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmVkNzZlKSwgMC45 MjAsIDAuOTk1NDc0NzM5MjAwMDAwKSBcCi0gICAgU1RFUCggMTg1LCBVSU5UNjRfQygweDAwMDAw MDAwMDBmZjA5YjApLCAwLjkyNSwgMC45OTYyNDE2MjEwOTM3NTApIFwKLSAgICBTVEVQKCAxODYs IFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZmMzYyNyksIDAuOTMwLCAwLjk5NjkyMDA2NTgwMDAwMCkg XAotICAgIFNURVAoIDE4NywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmY1ZDFkKSwgMC45MzUsIDAu OTk3NTE0NTQ3NjMxMjUwKSBcCi0gICAgU1RFUCggMTg4LCBVSU5UNjRfQygweDAwMDAwMDAwMDBm ZjdlZTApLCAwLjk0MCwgMC45OTgwMjk3MzQ0MDAwMDApIFwKLSAgICBTVEVQKCAxODksIFVJTlQ2 NF9DKDB4MDAwMDAwMDAwMGZmOWJjMyksIDAuOTQ1LCAwLjk5ODQ3MDQ4OTY2ODc1MCkgXAotICAg IFNURVAoIDE5MCwgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmZiNDE5KSwgMC45NTAsIDAuOTk4ODQx ODc1MDAwMDAwKSBcCi0gICAgU1RFUCggMTkxLCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZmM4M2Qp LCAwLjk1NSwgMC45OTkxNDkxNTIyMDYyNTApIFwKLSAgICBTVEVQKCAxOTIsIFVJTlQ2NF9DKDB4 MDAwMDAwMDAwMGZmZDg4OCksIDAuOTYwLCAwLjk5OTM5Nzc4NTYwMDAwMCkgXAotICAgIFNURVAo IDE5MywgVUlOVDY0X0MoMHgwMDAwMDAwMDAwZmZlNTViKSwgMC45NjUsIDAuOTk5NTkzNDQ0MjQz NzUwKSBcCi0gICAgU1RFUCggMTk0LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZmVmMTcpLCAwLjk3 MCwgMC45OTk3NDIwMDQyMDAwMDApIFwKLSAgICBTVEVQKCAxOTUsIFVJTlQ2NF9DKDB4MDAwMDAw MDAwMGZmZjYyMyksIDAuOTc1LCAwLjk5OTg0OTU1MDc4MTI1MCkgXAotICAgIFNURVAoIDE5Niwg VUlOVDY0X0MoMHgwMDAwMDAwMDAwZmZmYWU5KSwgMC45ODAsIDAuOTk5OTIyMzgwODAwMDAwKSBc Ci0gICAgU1RFUCggMTk3LCBVSU5UNjRfQygweDAwMDAwMDAwMDBmZmZkZDYpLCAwLjk4NSwgMC45 OTk5NjcwMDQ4MTg3NTApIFwKLSAgICBTVEVQKCAxOTgsIFVJTlQ2NF9DKDB4MDAwMDAwMDAwMGZm ZmY1YSksIDAuOTkwLCAwLjk5OTk5MDE0OTQwMDAwMCkgXAotICAgIFNURVAoIDE5OSwgVUlOVDY0 X0MoMHgwMDAwMDAwMDAwZmZmZmViKSwgMC45OTUsIDAuOTk5OTk4NzU5MzU2MjUwKSBcCi0gICAg U1RFUCggMjAwLCBVSU5UNjRfQygweDAwMDAwMDAwMDEwMDAwMDApLCAxLjAwMCwgMS4wMDAwMDAw MDAwMDAwMDApIFwKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NNT09USFNURVBfSCAq LwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc21vb3Roc3RlcC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc21vb3Roc3Rl cC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjVkZTk3Yi4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9j L2ludGVybmFsL3Ntb290aHN0ZXAuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAot IyEvYmluL3NoCi0jCi0jIEdlbmVyYXRlIGEgZGlzY3JldGUgbG9va3VwIHRhYmxlIGZvciBhIHNp Z21vaWQgZnVuY3Rpb24gaW4gdGhlIHNtb290aHN0ZXAKLSMgZmFtaWx5IChodHRwczovL2VuLndp a2lwZWRpYS5vcmcvd2lraS9TbW9vdGhzdGVwKSwgd2hlcmUgdGhlIGxvb2t1cCB0YWJsZQotIyBl bnRyaWVzIGNvcnJlc3BvbmQgdG8geCBpbiBbMS9uc3RlcHMsIDIvbnN0ZXBzLCAuLi4sIG5zdGVw cy9uc3RlcHNdLiAgRW5jb2RlCi0jIHRoZSBlbnRyaWVzIHVzaW5nIGEgYmluYXJ5IGZpeGVkIHBv aW50IHJlcHJlc2VudGF0aW9uLgotIwotIyBVc2FnZTogc21vb3Roc3RlcC5zaCA8dmFyaWFudD4g PG5zdGVwcz4gPGJmcD4gPHhwcmVjPiA8eXByZWM+Ci0jCi0jICAgICAgICA8dmFyaWFudD4gaXMg aW4ge3Ntb290aCwgc21vb3RoZXIsIHNtb290aGVzdH0uCi0jICAgICAgICA8bnN0ZXBzPiBtdXN0 IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLgotIyAgICAgICAgPGJmcD4gbXVzdCBiZSBpbiBbMC4uNjJd OyByZWFzb25hYmxlIHZhbHVlcyBhcmUgcm91Z2hseSBbMTAuLjMwXS4KLSMgICAgICAgIDx4cHJl Yz4gaXMgeCBkZWNpbWFsIHByZWNpc2lvbi4KLSMgICAgICAgIDx5cHJlYz4gaXMgeSBkZWNpbWFs IHByZWNpc2lvbi4KLQotI3NldCAteAotCi1jbWQ9InNoIHNtb290aHN0ZXAuc2ggJCoiCi12YXJp YW50PSQxCi1uc3RlcHM9JDIKLWJmcD0kMwoteHByZWM9JDQKLXlwcmVjPSQ1Ci0KLWNhc2UgIiR7 dmFyaWFudH0iIGluCi0gIHNtb290aCkKLSAgICA7OwotICBzbW9vdGhlcikKLSAgICA7OwotICBz bW9vdGhlc3QpCi0gICAgOzsKLSAgKikKLSAgICBlY2hvICJVbnN1cHBvcnRlZCB2YXJpYW50Igot ICAgIGV4aXQgMQotICAgIDs7Ci1lc2FjCi0KLXNtb290aCgpIHsKLSAgc3RlcD0kMQotICB5PWBl Y2hvICR7eXByZWN9IGsgJHtzdGVwfSAke25zdGVwc30gLyBzeCBfMiBseCAzIF4gJyonIDMgbHgg MiBeICcqJyArIHAgfCBkYyB8IHRyIC1kICdcXFxcXG4nIHwgc2VkIC1lICdzI15cLiMwLiNnJ2AK LSAgaD1gZWNobyAke3lwcmVjfSBrIDIgJHtiZnB9IF4gJHt5fSAnKicgcCB8IGRjIHwgdHIgLWQg J1xcXFxcbicgfCBzZWQgLWUgJ3MjXlwuIzAuI2cnIHwgdHIgJy4nICcgJyB8IGF3ayAne3ByaW50 ICQxfScgYAotfQotCi1zbW9vdGhlcigpIHsKLSAgc3RlcD0kMQotICB5PWBlY2hvICR7eXByZWN9 IGsgJHtzdGVwfSAke25zdGVwc30gLyBzeCA2IGx4IDUgXiAnKicgXzE1IGx4IDQgXiAnKicgKyAx MCBseCAzIF4gJyonICsgcCB8IGRjIHwgdHIgLWQgJ1xcXFxcbicgfCBzZWQgLWUgJ3MjXlwuIzAu I2cnYAotICBoPWBlY2hvICR7eXByZWN9IGsgMiAke2JmcH0gXiAke3l9ICcqJyBwIHwgZGMgfCB0 ciAtZCAnXFxcXFxuJyB8IHNlZCAtZSAncyNeXC4jMC4jZycgfCB0ciAnLicgJyAnIHwgYXdrICd7 cHJpbnQgJDF9JyBgCi19Ci0KLXNtb290aGVzdCgpIHsKLSAgc3RlcD0kMQotICB5PWBlY2hvICR7 eXByZWN9IGsgJHtzdGVwfSAke25zdGVwc30gLyBzeCBfMjAgbHggNyBeICcqJyA3MCBseCA2IF4g JyonICsgXzg0IGx4IDUgXiAnKicgKyAzNSBseCA0IF4gJyonICsgcCB8IGRjIHwgdHIgLWQgJ1xc XFxcbicgfCBzZWQgLWUgJ3MjXlwuIzAuI2cnYAotICBoPWBlY2hvICR7eXByZWN9IGsgMiAke2Jm cH0gXiAke3l9ICcqJyBwIHwgZGMgfCB0ciAtZCAnXFxcXFxuJyB8IHNlZCAtZSAncyNeXC4jMC4j ZycgfCB0ciAnLicgJyAnIHwgYXdrICd7cHJpbnQgJDF9JyBgCi19Ci0KLWNhdCA8PEVPRgotI2lm bmRlZiBKRU1BTExPQ19JTlRFUk5BTF9TTU9PVEhTVEVQX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5U RVJOQUxfU01PT1RIU1RFUF9ICi0KLS8qCi0gKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0 aGUgZm9sbG93aW5nIGNvbW1hbmQ6Ci0gKiAgICRjbWQKLSAqLwotLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLQotLyoKLSAqIFRoaXMgaGVhZGVyIGRlZmluZXMgYSBwcmVjb21wdXRlZCB0YWJsZSBi YXNlZCBvbiB0aGUgc21vb3Roc3RlcCBmYW1pbHkgb2YKLSAqIHNpZ21vaWRhbCBjdXJ2ZXMgKGh0 dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Ntb290aHN0ZXApIHRoYXQgZ3JvdyBmcm9tIDAK LSAqIHRvIDEgaW4gMCA8PSB4IDw9IDEuICBUaGUgdGFibGUgaXMgc3RvcmVkIGFzIGludGVnZXIg Zml4ZWQgcG9pbnQgdmFsdWVzIHNvCi0gKiB0aGF0IGZsb2F0aW5nIHBvaW50IG1hdGggY2FuIGJl IGF2b2lkZWQuCi0gKgotICogICAgICAgICAgICAgICAgICAgICAgMyAgICAgMgotICogICBzbW9v dGhzdGVwKHgpID0gLTJ4ICArIDN4Ci0gKgotICogICAgICAgICAgICAgICAgICAgICAgIDUgICAg ICA0ICAgICAgMwotICogICBzbW9vdGhlcnN0ZXAoeCkgPSA2eCAgLSAxNXggICsgMTB4Ci0gKgot ICogICAgICAgICAgICAgICAgICAgICAgICAgIDcgICAgICA2ICAgICAgNSAgICAgIDQKLSAqICAg c21vb3RoZXN0c3RlcCh4KSA9IC0yMHggICsgNzB4ICAtIDg0eCAgKyAzNXgKLSAqLwotCi0jZGVm aW5lIFNNT09USFNURVBfVkFSSUFOVAkiJHt2YXJpYW50fSIKLSNkZWZpbmUgU01PT1RIU1RFUF9O U1RFUFMJJHtuc3RlcHN9Ci0jZGVmaW5lIFNNT09USFNURVBfQkZQCQkke2JmcH0KLSNkZWZpbmUg U01PT1RIU1RFUCBcXAotIC8qIFNURVAoc3RlcCwgaCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeCwgICAgIHkpICovIFxcCi1FT0YKLQotcz0xCi13aGlsZSBbICRzIC1sZSAkbnN0ZXBzIF0g OyBkbwotICAkdmFyaWFudCAke3N9Ci0gIHg9YGVjaG8gJHt4cHJlY30gayAke3N9ICR7bnN0ZXBz fSAvIHAgfCBkYyB8IHRyIC1kICdcXFxcXG4nIHwgc2VkIC1lICdzI15cLiMwLiNnJ2AKLSAgcHJp bnRmICcgICAgU1RFUCglNGQsIFVJTlQ2NF9DKDB4JTAxNngpLCAlcywgJXMpIFxcXG4nICR7c30g JHtofSAke3h9ICR7eX0KLQotICBzPSQoKHMrMSkpCi1kb25lCi1lY2hvCi0KLWNhdCA8PEVPRgot I2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NNT09USFNURVBfSCAqLwotRU9GCgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC9zcGluLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NwaW4uaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMjI4MDRjNi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3NwaW4uaAorKysgL2Rl di9udWxsCkBAIC0xLDQwICswLDAgQEAKLSNpZm5kZWYgSkVNQUxMT0NfSU5URVJOQUxfU1BJTl9I Ci0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1NQSU5fSAotCi0jZGVmaW5lIFNQSU5fSU5JVElB TElaRVIgezBVfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaXRlcmF0aW9uOwotfSBz cGluX3Q7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotc3Bpbl9jcHVfc3BpbndhaXQoKSB7Ci0jICBp ZiBIQVZFX0NQVV9TUElOV0FJVAotCUNQVV9TUElOV0FJVDsKLSMgIGVsc2UKLQl2b2xhdGlsZSBp bnQgeCA9IDA7Ci0JeCA9IHg7Ci0jICBlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXNw aW5fYWRhcHRpdmUoc3Bpbl90ICpzcGluKSB7Ci0Jdm9sYXRpbGUgdWludDMyX3QgaTsKLQotCWlm IChzcGluLT5pdGVyYXRpb24gPCA1KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoMVUgPDwgc3Bpbi0+ aXRlcmF0aW9uKTsgaSsrKSB7Ci0JCQlzcGluX2NwdV9zcGlud2FpdCgpOwotCQl9Ci0JCXNwaW4t Pml0ZXJhdGlvbisrOwotCX0gZWxzZSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVN3aXRjaFRvVGhyZWFk KCk7Ci0jZWxzZQotCQlzY2hlZF95aWVsZCgpOwotI2VuZGlmCi0JfQotfQotCi0jdW5kZWYgU1BJ Tl9JTkxJTkUKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NQSU5fSCAqLwoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVt YWxsb2MvaW50ZXJuYWwvc3RhdHMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvc3RhdHMuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNzI3ZjdkYy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3N0YXRzLmgKKysr IC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1NU QVRTX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfU1RBVFNfSAotCi0vKiAgT1BUSU9OKG9w dCwJCXZhcl9uYW1lLAlkZWZhdWx0LAlzZXRfdmFsdWVfdG8pICovCi0jZGVmaW5lIFNUQVRTX1BS SU5UX09QVElPTlMJCQkJCQlcCi0gICAgT1BUSU9OKCdKJywJCWpzb24sCQlmYWxzZSwJCXRydWUp CQlcCi0gICAgT1BUSU9OKCdnJywJCWdlbmVyYWwsCXRydWUsCQlmYWxzZSkJCVwKLSAgICBPUFRJ T04oJ20nLAkJbWVyZ2VkLAkJY29uZmlnX3N0YXRzLAlmYWxzZSkJCVwKLSAgICBPUFRJT04oJ2Qn LAkJZGVzdHJveWVkLAljb25maWdfc3RhdHMsCWZhbHNlKQkJXAotICAgIE9QVElPTignYScsCQl1 bm1lcmdlZCwJY29uZmlnX3N0YXRzLAlmYWxzZSkJCVwKLSAgICBPUFRJT04oJ2InLAkJYmlucywJ CXRydWUsCQlmYWxzZSkJCVwKLSAgICBPUFRJT04oJ2wnLAkJbGFyZ2UsCQl0cnVlLAkJZmFsc2Up CQlcCi0gICAgT1BUSU9OKCd4JywJCW11dGV4LAkJdHJ1ZSwJCWZhbHNlKQkJXAotICAgIE9QVElP TignZScsCQlleHRlbnRzLAl0cnVlLAkJZmFsc2UpCQlcCi0gICAgT1BUSU9OKCdoJywJCWhwYSwJ CWNvbmZpZ19zdGF0cywJZmFsc2UpCi0KLWVudW0gewotI2RlZmluZSBPUFRJT04obywgdiwgZCwg cykgc3RhdHNfcHJpbnRfb3B0aW9uX251bV8jI3YsCi0gICAgU1RBVFNfUFJJTlRfT1BUSU9OUwot I3VuZGVmIE9QVElPTgotICAgIHN0YXRzX3ByaW50X3RvdF9udW1fb3B0aW9ucwotfTsKLQotLyog T3B0aW9ucyBmb3Igc3RhdHNfcHJpbnQuICovCi1leHRlcm4gYm9vbCBvcHRfc3RhdHNfcHJpbnQ7 Ci1leHRlcm4gY2hhciBvcHRfc3RhdHNfcHJpbnRfb3B0c1tzdGF0c19wcmludF90b3RfbnVtX29w dGlvbnMrMV07Ci0KLS8qIFV0aWxpdGllcyBmb3Igc3RhdHNfaW50ZXJ2YWwuICovCi1leHRlcm4g aW50NjRfdCBvcHRfc3RhdHNfaW50ZXJ2YWw7Ci1leHRlcm4gY2hhciBvcHRfc3RhdHNfaW50ZXJ2 YWxfb3B0c1tzdGF0c19wcmludF90b3RfbnVtX29wdGlvbnMrMV07Ci0KLSNkZWZpbmUgU1RBVFNf SU5URVJWQUxfREVGQVVMVCAtMQotLyoKLSAqIEJhdGNoLWluY3JlbWVudCB0aGUgY291bnRlciB0 byByZWR1Y2Ugc3luY2hyb25pemF0aW9uIG92ZXJoZWFkLiAgRWFjaCB0aHJlYWQKLSAqIG1lcmdl cyBhZnRlciAoaW50ZXJ2YWwgPj4gTEdfQkFUQ0hfU0laRSkgYnl0ZXMgb2YgYWxsb2NhdGlvbnM7 IGFsc28gbGltaXQgdGhlCi0gKiBCQVRDSF9NQVggZm9yIGFjY3VyYWN5IHdoZW4gdGhlIGludGVy dmFsIGlzIGh1Z2UgKHdoaWNoIGlzIGV4cGVjdGVkKS4KLSAqLwotI2RlZmluZSBTVEFUU19JTlRF UlZBTF9BQ0NVTV9MR19CQVRDSF9TSVpFIDYKLSNkZWZpbmUgU1RBVFNfSU5URVJWQUxfQUNDVU1f QkFUQ0hfTUFYICg0IDw8IDIwKQotCi0vKiBPbmx5IGFjY2Vzc2VkIGJ5IHRocmVhZCBldmVudC4g Ki8KLXVpbnQ2NF90IHN0YXRzX2ludGVydmFsX25ld19ldmVudF93YWl0KHRzZF90ICp0c2QpOwot dWludDY0X3Qgc3RhdHNfaW50ZXJ2YWxfcG9zdHBvbmVkX2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7 Ci12b2lkIHN0YXRzX2ludGVydmFsX2V2ZW50X2hhbmRsZXIodHNkX3QgKnRzZCwgdWludDY0X3Qg ZWxhcHNlZCk7Ci0KLS8qIEltcGxlbWVudHMgamVfbWFsbG9jX3N0YXRzX3ByaW50LiAqLwotdm9p ZCBzdGF0c19wcmludCh3cml0ZV9jYl90ICp3cml0ZV9jYiwgdm9pZCAqY2JvcGFxdWUsIGNvbnN0 IGNoYXIgKm9wdHMpOwotCi1ib29sIHN0YXRzX2Jvb3Qodm9pZCk7Ci12b2lkIHN0YXRzX3ByZWZv cmsodHNkbl90ICp0c2RuKTsKLXZvaWQgc3RhdHNfcG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNk bik7Ci12b2lkIHN0YXRzX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbik7Ci0KLSNlbmRpZiAv KiBKRU1BTExPQ19JTlRFUk5BTF9TVEFUU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC9zei5o IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC9zei5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzBmYzFkLi4w MDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvc3ouaAorKysgL2Rldi9udWxsCkBAIC0xLDM3MSArMCwwIEBA Ci0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1NJWkVfSAotI2RlZmluZSBKRU1BTExPQ19JTlRF Uk5BTF9TSVpFX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2JpdF91dGlsLmgiCi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFnZXMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9zYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKLQotLyoK LSAqIHN6IG1vZHVsZTogU2l6ZSBjb21wdXRhdGlvbnMuCi0gKgotICogU29tZSBhYmJyZXZpYXRp b25zIHVzZWQgaGVyZToKLSAqICAgcDogUGFnZQotICogICBpbmQ6IEluZGV4Ci0gKiAgIHMsIHN6 OiBTaXplCi0gKiAgIHU6IFVzYWJsZSBzaXplCi0gKiAgIGE6IEFsaWduZWQKLSAqCi0gKiBUaGVz ZSBhcmUgbm90IGFsd2F5cyB1c2VkIGNvbXBsZXRlbHkgY29uc2lzdGVudGx5LCBidXQgc2hvdWxk IGJlIGVub3VnaCB0bwotICogaW50ZXJwcmV0IGZ1bmN0aW9uIG5hbWVzLiAgRS5nLiBzel9wc3oy aW5kIGNvbnZlcnRzIHBhZ2Ugc2l6ZSB0byBwYWdlIHNpemUKLSAqIGluZGV4OyBzel9zYTJ1IGNv bnZlcnRzIGEgKHNpemUsIGFsaWdubWVudCkgYWxsb2NhdGlvbiByZXF1ZXN0IHRvIHRoZSB1c2Fi bGUKLSAqIHNpemUgdGhhdCB3b3VsZCByZXN1bHQgZnJvbSBzdWNoIGFuIGFsbG9jYXRpb24uCi0g Ki8KLQotLyogUGFnZSBzaXplIGluZGV4IHR5cGUuICovCi10eXBlZGVmIHVuc2lnbmVkIHBzemlu ZF90OwotCi0vKiBTaXplIGNsYXNzIGluZGV4IHR5cGUuICovCi10eXBlZGVmIHVuc2lnbmVkIHN6 aW5kX3Q7Ci0KLS8qCi0gKiBzel9waW5kMnN6X3RhYiBlbmNvZGVzIHRoZSBzYW1lIGluZm9ybWF0 aW9uIGFzIGNvdWxkIGJlIGNvbXB1dGVkIGJ5Ci0gKiBzel9waW5kMnN6X2NvbXB1dGUoKS4KLSAq LwotZXh0ZXJuIHNpemVfdCBzel9waW5kMnN6X3RhYltTQ19OUFNJWkVTICsgMV07Ci0vKgotICog c3pfaW5kZXgyc2l6ZV90YWIgZW5jb2RlcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBjb3VsZCBi ZSBjb21wdXRlZCAoYXQKLSAqIHVuYWNjZXB0YWJsZSBjb3N0IGluIHNvbWUgY29kZSBwYXRocykg Ynkgc3pfaW5kZXgyc2l6ZV9jb21wdXRlKCkuCi0gKi8KLWV4dGVybiBzaXplX3Qgc3pfaW5kZXgy c2l6ZV90YWJbU0NfTlNJWkVTXTsKLS8qCi0gKiBzel9zaXplMmluZGV4X3RhYiBpcyBhIGNvbXBh Y3QgbG9va3VwIHRhYmxlIHRoYXQgcm91bmRzIHJlcXVlc3Qgc2l6ZXMgdXAgdG8KLSAqIHNpemUg Y2xhc3Nlcy4gIEluIG9yZGVyIHRvIHJlZHVjZSBjYWNoZSBmb290cHJpbnQsIHRoZSB0YWJsZSBp cyBjb21wcmVzc2VkLAotICogYW5kIGFsbCBhY2Nlc3NlcyBhcmUgdmlhIHN6X3NpemUyaW5kZXgo KS4KLSAqLwotZXh0ZXJuIHVpbnQ4X3Qgc3pfc2l6ZTJpbmRleF90YWJbXTsKLQotLyoKLSAqIFBh ZGRpbmcgZm9yIGxhcmdlIGFsbG9jYXRpb25zOiBQQUdFIHdoZW4gb3B0X2NhY2hlX29ibGl2aW91 cyA9PSB0cnVlICh0bwotICogZW5hYmxlIGNhY2hlIGluZGV4IHJhbmRvbWl6YXRpb24pOyAwIG90 aGVyd2lzZS4KLSAqLwotZXh0ZXJuIHNpemVfdCBzel9sYXJnZV9wYWQ7Ci0KLWV4dGVybiB2b2lk IHN6X2Jvb3QoY29uc3Qgc2NfZGF0YV90ICpzY19kYXRhLCBib29sIGNhY2hlX29ibGl2aW91cyk7 Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgcHN6aW5kX3QKLXN6X3BzejJpbmQoc2l6ZV90IHBz eikgewotCWFzc2VydChwc3ogPiAwKTsKLQlpZiAodW5saWtlbHkocHN6ID4gU0NfTEFSR0VfTUFY Q0xBU1MpKSB7Ci0JCXJldHVybiBTQ19OUFNJWkVTOwotCX0KLQkvKiB4IGlzIHRoZSBsZyBvZiB0 aGUgZmlyc3QgYmFzZSA+PSBwc3ouICovCi0JcHN6aW5kX3QgeCA9IGxnX2NlaWwocHN6KTsKLQkv KgotCSAqIHNjLmggaW50cm9kdWNlcyBhIGxvdCBvZiBzaXplIGNsYXNzZXMuIFRoZXNlIHNpemUg Y2xhc3NlcyBhcmUgZGl2aWRlZAotCSAqIGludG8gZGlmZmVyZW50IHNpemUgY2xhc3MgZ3JvdXBz LiBUaGVyZSBpcyBhIHZlcnkgc3BlY2lhbCBzaXplIGNsYXNzCi0JICogZ3JvdXAsIGVhY2ggc2l6 ZSBjbGFzcyBpbiBvciBhZnRlciBpdCBpcyBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIFBBR0UuCi0J ICogV2UgY2FsbCBpdCBmaXJzdF9wc19yZy4gSXQgbWVhbnMgZmlyc3QgcGFnZSBzaXplIHJlZ3Vs YXIgZ3JvdXAuIFRoZQotCSAqIHJhbmdlIG9mIGZpcnN0X3BzX3JnIGlzIChiYXNlLCBiYXNlICog Ml0sIGFuZCBiYXNlID09IFBBR0UgKgotCSAqIFNDX05HUk9VUC4gb2ZmX3RvX2ZpcnN0X3BzX3Jn IGJlZ2lucyBmcm9tIDEsIGluc3RlYWQgb2YgMC4gZS5nLgotCSAqIG9mZl90b19maXJzdF9wc19y ZyBpcyAxIHdoZW4gcHN6IGlzIChQQUdFICogU0NfTkdST1VQICsgMSkuCi0JICovCi0JcHN6aW5k X3Qgb2ZmX3RvX2ZpcnN0X3BzX3JnID0gKHggPCBTQ19MR19OR1JPVVAgKyBMR19QQUdFKSA/Ci0J ICAgIDAgOiB4IC0gKFNDX0xHX05HUk9VUCArIExHX1BBR0UpOwotCi0JLyoKLQkgKiBTYW1lIGFz IHNjX3M6OmxnX2RlbHRhLgotCSAqIERlbHRhIGZvciBvZmZfdG9fZmlyc3RfcHNfcmcgPT0gMSBp cyBQQUdFLAotCSAqIGZvciBlYWNoIGluY3JlYXNlIGluIG9mZnNldCwgaXQncyBtdWx0aXBsaWVk IGJ5IHR3by4KLQkgKiBUaGVyZWZvcmUsIGxnX2RlbHRhID0gTEdfUEFHRSArIChvZmZfdG9fZmly c3RfcHNfcmcgLSAxKS4KLQkgKi8KLQlwc3ppbmRfdCBsZ19kZWx0YSA9IChvZmZfdG9fZmlyc3Rf cHNfcmcgPT0gMCkgPwotCSAgICBMR19QQUdFIDogTEdfUEFHRSArIChvZmZfdG9fZmlyc3RfcHNf cmcgLSAxKTsKLQotCS8qCi0JICogTGV0J3Mgd3JpdGUgcHN6IGluIGJpbmFyeSwgZS5nLiAwMDEx IGZvciAweDMsIDAxMTEgZm9yIDB4Ny4KLQkgKiBUaGUgbGVmdG1vc3QgYml0cyB3aG9zZSBsZW4g aXMgbGdfYmFzZSBkZWNpZGUgdGhlIGJhc2Ugb2YgcHN6LgotCSAqIFRoZSByaWdodG1vc3QgYml0 cyB3aG9zZSBsZW4gaXMgbGdfZGVsdGEgZGVjaWRlIChwZ3ogJSBQQUdFKS4KLQkgKiBUaGUgbWlk ZGxlIGJpdHMgd2hvc2UgbGVuIGlzIFNDX0xHX05HUk9VUCBkZWNpZGUgbmRlbHRhLgotCSAqIG5k ZWx0YSBpcyBvZmZzZXQgdG8gdGhlIGZpcnN0IHNpemUgY2xhc3MgaW4gdGhlIHNpemUgY2xhc3Mg Z3JvdXAsCi0JICogc3RhcnRzIGZyb20gMS4KLQkgKiBJZiB5b3UgZG9uJ3Qga25vdyBsZ19iYXNl LCBuZGVsdGEgb3IgbGdfZGVsdGEsIHNlZSBzYy5oLgotCSAqIHx4eHh4eHh4eHh4eHh4eHh4eHh4 eHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18eXl5eXl5eXl5eXl5eXl5eXl5eXl5fAotCSAqIHw8 LS0gbGVuOiBsZ19iYXNlIC0tPnw8LS0gbGVuOiBTQ19MR19OR1JPVVAtLT58PC0tIGxlbjogbGdf ZGVsdGEgLS0+fAotCSAqICAgICAgICAgICAgICAgICAgICAgIHw8LS0gICAgICBuZGVsdGEgICAg ICAtLT58Ci0JICogcmdfaW5uZXJfb2ZmID0gbmRlbHRhIC0gMQotCSAqIFdoeSB1c2UgKHBzeiAt IDEpPwotCSAqIFRvIGhhbmRsZSBjYXNlOiBwc3ogJSAoMSA8PCBsZ19kZWx0YSkgPT0gMC4KLQkg Ki8KLQlwc3ppbmRfdCByZ19pbm5lcl9vZmYgPSAoKChwc3ogLSAxKSkgPj4gbGdfZGVsdGEpICYg KFNDX05HUk9VUCAtIDEpOwotCi0JcHN6aW5kX3QgYmFzZV9pbmQgPSBvZmZfdG9fZmlyc3RfcHNf cmcgPDwgU0NfTEdfTkdST1VQOwotCXBzemluZF90IGluZCA9IGJhc2VfaW5kICsgcmdfaW5uZXJf b2ZmOwotCXJldHVybiBpbmQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1zel9waW5kMnN6 X2NvbXB1dGUocHN6aW5kX3QgcGluZCkgewotCWlmICh1bmxpa2VseShwaW5kID09IFNDX05QU0la RVMpKSB7Ci0JCXJldHVybiBTQ19MQVJHRV9NQVhDTEFTUyArIFBBR0U7Ci0JfQotCXNpemVfdCBn cnAgPSBwaW5kID4+IFNDX0xHX05HUk9VUDsKLQlzaXplX3QgbW9kID0gcGluZCAmICgoWlUoMSkg PDwgU0NfTEdfTkdST1VQKSAtIDEpOwotCi0Jc2l6ZV90IGdycF9zaXplX21hc2sgPSB+KCghIWdy cCktMSk7Ci0Jc2l6ZV90IGdycF9zaXplID0gKChaVSgxKSA8PCAoTEdfUEFHRSArIChTQ19MR19O R1JPVVAtMSkpKSA8PCBncnApCi0JICAgICYgZ3JwX3NpemVfbWFzazsKLQotCXNpemVfdCBzaGlm dCA9IChncnAgPT0gMCkgPyAxIDogZ3JwOwotCXNpemVfdCBsZ19kZWx0YSA9IHNoaWZ0ICsgKExH X1BBR0UtMSk7Ci0Jc2l6ZV90IG1vZF9zaXplID0gKG1vZCsxKSA8PCBsZ19kZWx0YTsKLQotCXNp emVfdCBzeiA9IGdycF9zaXplICsgbW9kX3NpemU7Ci0JcmV0dXJuIHN6OwotfQotCi1zdGF0aWMg aW5saW5lIHNpemVfdAotc3pfcGluZDJzel9sb29rdXAocHN6aW5kX3QgcGluZCkgewotCXNpemVf dCByZXQgPSAoc2l6ZV90KXN6X3BpbmQyc3pfdGFiW3BpbmRdOwotCWFzc2VydChyZXQgPT0gc3pf cGluZDJzel9jb21wdXRlKHBpbmQpKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5l IHNpemVfdAotc3pfcGluZDJzeihwc3ppbmRfdCBwaW5kKSB7Ci0JYXNzZXJ0KHBpbmQgPCBTQ19O UFNJWkVTICsgMSk7Ci0JcmV0dXJuIHN6X3BpbmQyc3pfbG9va3VwKHBpbmQpOwotfQotCi1zdGF0 aWMgaW5saW5lIHNpemVfdAotc3pfcHN6MnUoc2l6ZV90IHBzeikgewotCWlmICh1bmxpa2VseShw c3ogPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKLQkJcmV0dXJuIFNDX0xBUkdFX01BWENMQVNTICsg UEFHRTsKLQl9Ci0Jc2l6ZV90IHggPSBsZ19mbG9vcigocHN6PDwxKS0xKTsKLQlzaXplX3QgbGdf ZGVsdGEgPSAoeCA8IFNDX0xHX05HUk9VUCArIExHX1BBR0UgKyAxKSA/Ci0JICAgIExHX1BBR0Ug OiB4IC0gU0NfTEdfTkdST1VQIC0gMTsKLQlzaXplX3QgZGVsdGEgPSBaVSgxKSA8PCBsZ19kZWx0 YTsKLQlzaXplX3QgZGVsdGFfbWFzayA9IGRlbHRhIC0gMTsKLQlzaXplX3QgdXNpemUgPSAocHN6 ICsgZGVsdGFfbWFzaykgJiB+ZGVsdGFfbWFzazsKLQlyZXR1cm4gdXNpemU7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgc3ppbmRfdAotc3pfc2l6ZTJpbmRleF9jb21wdXRlKHNpemVfdCBzaXplKSB7Ci0J aWYgKHVubGlrZWx5KHNpemUgPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKLQkJcmV0dXJuIFNDX05T SVpFUzsKLQl9Ci0KLQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCXJldHVybiAwOwotCX0KLSNpZiAoU0Nf TlRJTlkgIT0gMCkKLQlpZiAoc2l6ZSA8PSAoWlUoMSkgPDwgU0NfTEdfVElOWV9NQVhDTEFTUykp IHsKLQkJc3ppbmRfdCBsZ190bWluID0gU0NfTEdfVElOWV9NQVhDTEFTUyAtIFNDX05USU5ZICsg MTsKLQkJc3ppbmRfdCBsZ19jZWlsID0gbGdfZmxvb3IocG93Ml9jZWlsX3p1KHNpemUpKTsKLQkJ cmV0dXJuIChsZ19jZWlsIDwgbGdfdG1pbiA/IDAgOiBsZ19jZWlsIC0gbGdfdG1pbik7Ci0JfQot I2VuZGlmCi0JewotCQlzemluZF90IHggPSBsZ19mbG9vcigoc2l6ZTw8MSktMSk7Ci0JCXN6aW5k X3Qgc2hpZnQgPSAoeCA8IFNDX0xHX05HUk9VUCArIExHX1FVQU5UVU0pID8gMCA6Ci0JCSAgICB4 IC0gKFNDX0xHX05HUk9VUCArIExHX1FVQU5UVU0pOwotCQlzemluZF90IGdycCA9IHNoaWZ0IDw8 IFNDX0xHX05HUk9VUDsKLQotCQlzemluZF90IGxnX2RlbHRhID0gKHggPCBTQ19MR19OR1JPVVAg KyBMR19RVUFOVFVNICsgMSkKLQkJICAgID8gTEdfUVVBTlRVTSA6IHggLSBTQ19MR19OR1JPVVAg LSAxOwotCi0JCXNpemVfdCBkZWx0YV9pbnZlcnNlX21hc2sgPSBaVSgtMSkgPDwgbGdfZGVsdGE7 Ci0JCXN6aW5kX3QgbW9kID0gKCgoKHNpemUtMSkgJiBkZWx0YV9pbnZlcnNlX21hc2spID4+IGxn X2RlbHRhKSkgJgotCQkgICAgKChaVSgxKSA8PCBTQ19MR19OR1JPVVApIC0gMSk7Ci0KLQkJc3pp bmRfdCBpbmRleCA9IFNDX05USU5ZICsgZ3JwICsgbW9kOwotCQlyZXR1cm4gaW5kZXg7Ci0JfQot fQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHN6aW5kX3QKLXN6X3NpemUyaW5kZXhfbG9va3Vw X2ltcGwoc2l6ZV90IHNpemUpIHsKLQlhc3NlcnQoc2l6ZSA8PSBTQ19MT09LVVBfTUFYQ0xBU1Mp OwotCXJldHVybiBzel9zaXplMmluZGV4X3RhYlsoc2l6ZSArIChaVSgxKSA8PCBTQ19MR19USU5Z X01JTikgLSAxKQotCSAgICA+PiBTQ19MR19USU5ZX01JTl07Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgc3ppbmRfdAotc3pfc2l6ZTJpbmRleF9sb29rdXAoc2l6ZV90IHNpemUpIHsKLQlz emluZF90IHJldCA9IHN6X3NpemUyaW5kZXhfbG9va3VwX2ltcGwoc2l6ZSk7Ci0JYXNzZXJ0KHJl dCA9PSBzel9zaXplMmluZGV4X2NvbXB1dGUoc2l6ZSkpOwotCXJldHVybiByZXQ7Ci19Ci0KLUpF TUFMTE9DX0FMV0FZU19JTkxJTkUgc3ppbmRfdAotc3pfc2l6ZTJpbmRleChzaXplX3Qgc2l6ZSkg ewotCWlmIChsaWtlbHkoc2l6ZSA8PSBTQ19MT09LVVBfTUFYQ0xBU1MpKSB7Ci0JCXJldHVybiBz el9zaXplMmluZGV4X2xvb2t1cChzaXplKTsKLQl9Ci0JcmV0dXJuIHN6X3NpemUyaW5kZXhfY29t cHV0ZShzaXplKTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLXN6X2luZGV4MnNpemVfY29t cHV0ZShzemluZF90IGluZGV4KSB7Ci0jaWYgKFNDX05USU5ZID4gMCkKLQlpZiAoaW5kZXggPCBT Q19OVElOWSkgewotCQlyZXR1cm4gKFpVKDEpIDw8IChTQ19MR19USU5ZX01BWENMQVNTIC0gU0Nf TlRJTlkgKyAxICsgaW5kZXgpKTsKLQl9Ci0jZW5kaWYKLQl7Ci0JCXNpemVfdCByZWR1Y2VkX2lu ZGV4ID0gaW5kZXggLSBTQ19OVElOWTsKLQkJc2l6ZV90IGdycCA9IHJlZHVjZWRfaW5kZXggPj4g U0NfTEdfTkdST1VQOwotCQlzaXplX3QgbW9kID0gcmVkdWNlZF9pbmRleCAmICgoWlUoMSkgPDwg U0NfTEdfTkdST1VQKSAtCi0JCSAgICAxKTsKLQotCQlzaXplX3QgZ3JwX3NpemVfbWFzayA9IH4o KCEhZ3JwKS0xKTsKLQkJc2l6ZV90IGdycF9zaXplID0gKChaVSgxKSA8PCAoTEdfUVVBTlRVTSAr Ci0JCSAgICAoU0NfTEdfTkdST1VQLTEpKSkgPDwgZ3JwKSAmIGdycF9zaXplX21hc2s7Ci0KLQkJ c2l6ZV90IHNoaWZ0ID0gKGdycCA9PSAwKSA/IDEgOiBncnA7Ci0JCXNpemVfdCBsZ19kZWx0YSA9 IHNoaWZ0ICsgKExHX1FVQU5UVU0tMSk7Ci0JCXNpemVfdCBtb2Rfc2l6ZSA9IChtb2QrMSkgPDwg bGdfZGVsdGE7Ci0KLQkJc2l6ZV90IHVzaXplID0gZ3JwX3NpemUgKyBtb2Rfc2l6ZTsKLQkJcmV0 dXJuIHVzaXplOwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBzaXplX3QKLXN6X2lu ZGV4MnNpemVfbG9va3VwX2ltcGwoc3ppbmRfdCBpbmRleCkgewotCXJldHVybiBzel9pbmRleDJz aXplX3RhYltpbmRleF07Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Ci1zel9p bmRleDJzaXplX2xvb2t1cChzemluZF90IGluZGV4KSB7Ci0Jc2l6ZV90IHJldCA9IHN6X2luZGV4 MnNpemVfbG9va3VwX2ltcGwoaW5kZXgpOwotCWFzc2VydChyZXQgPT0gc3pfaW5kZXgyc2l6ZV9j b21wdXRlKGluZGV4KSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSBzaXplX3QKLXN6X2luZGV4MnNpemUoc3ppbmRfdCBpbmRleCkgewotCWFzc2VydChpbmRleCA8 IFNDX05TSVpFUyk7Ci0JcmV0dXJuIHN6X2luZGV4MnNpemVfbG9va3VwKGluZGV4KTsKLX0KLQot SkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1zel9zaXplMmluZGV4X3VzaXplX2Zhc3RwYXRo KHNpemVfdCBzaXplLCBzemluZF90ICppbmQsIHNpemVfdCAqdXNpemUpIHsKLQkqaW5kID0gc3pf c2l6ZTJpbmRleF9sb29rdXBfaW1wbChzaXplKTsKLQkqdXNpemUgPSBzel9pbmRleDJzaXplX2xv b2t1cF9pbXBsKCppbmQpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAotc3pf czJ1X2NvbXB1dGUoc2l6ZV90IHNpemUpIHsKLQlpZiAodW5saWtlbHkoc2l6ZSA+IFNDX0xBUkdF X01BWENMQVNTKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCXNp emUrKzsKLQl9Ci0jaWYgKFNDX05USU5ZID4gMCkKLQlpZiAoc2l6ZSA8PSAoWlUoMSkgPDwgU0Nf TEdfVElOWV9NQVhDTEFTUykpIHsKLQkJc2l6ZV90IGxnX3RtaW4gPSBTQ19MR19USU5ZX01BWENM QVNTIC0gU0NfTlRJTlkgKyAxOwotCQlzaXplX3QgbGdfY2VpbCA9IGxnX2Zsb29yKHBvdzJfY2Vp bF96dShzaXplKSk7Ci0JCXJldHVybiAobGdfY2VpbCA8IGxnX3RtaW4gPyAoWlUoMSkgPDwgbGdf dG1pbikgOgotCQkgICAgKFpVKDEpIDw8IGxnX2NlaWwpKTsKLQl9Ci0jZW5kaWYKLQl7Ci0JCXNp emVfdCB4ID0gbGdfZmxvb3IoKHNpemU8PDEpLTEpOwotCQlzaXplX3QgbGdfZGVsdGEgPSAoeCA8 IFNDX0xHX05HUk9VUCArIExHX1FVQU5UVU0gKyAxKQotCQkgICAgPyAgTEdfUVVBTlRVTSA6IHgg LSBTQ19MR19OR1JPVVAgLSAxOwotCQlzaXplX3QgZGVsdGEgPSBaVSgxKSA8PCBsZ19kZWx0YTsK LQkJc2l6ZV90IGRlbHRhX21hc2sgPSBkZWx0YSAtIDE7Ci0JCXNpemVfdCB1c2l6ZSA9IChzaXpl ICsgZGVsdGFfbWFzaykgJiB+ZGVsdGFfbWFzazsKLQkJcmV0dXJuIHVzaXplOwotCX0KLX0KLQot SkVNQUxMT0NfQUxXQVlTX0lOTElORSBzaXplX3QKLXN6X3MydV9sb29rdXAoc2l6ZV90IHNpemUp IHsKLQlzaXplX3QgcmV0ID0gc3pfaW5kZXgyc2l6ZV9sb29rdXAoc3pfc2l6ZTJpbmRleF9sb29r dXAoc2l6ZSkpOwotCi0JYXNzZXJ0KHJldCA9PSBzel9zMnVfY29tcHV0ZShzaXplKSk7Ci0JcmV0 dXJuIHJldDsKLX0KLQotLyoKLSAqIENvbXB1dGUgdXNhYmxlIHNpemUgdGhhdCB3b3VsZCByZXN1 bHQgZnJvbSBhbGxvY2F0aW5nIGFuIG9iamVjdCB3aXRoIHRoZQotICogc3BlY2lmaWVkIHNpemUu Ci0gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Ci1zel9zMnUoc2l6ZV90IHNpemUp IHsKLQlpZiAobGlrZWx5KHNpemUgPD0gU0NfTE9PS1VQX01BWENMQVNTKSkgewotCQlyZXR1cm4g c3pfczJ1X2xvb2t1cChzaXplKTsKLQl9Ci0JcmV0dXJuIHN6X3MydV9jb21wdXRlKHNpemUpOwot fQotCi0vKgotICogQ29tcHV0ZSB1c2FibGUgc2l6ZSB0aGF0IHdvdWxkIHJlc3VsdCBmcm9tIGFs bG9jYXRpbmcgYW4gb2JqZWN0IHdpdGggdGhlCi0gKiBzcGVjaWZpZWQgc2l6ZSBhbmQgYWxpZ25t ZW50LgotICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNpemVfdAotc3pfc2EydShzaXplX3Qg c2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgewotCXNpemVfdCB1c2l6ZTsKLQotCWFzc2VydChhbGln bm1lbnQgIT0gMCAmJiAoKGFsaWdubWVudCAtIDEpICYgYWxpZ25tZW50KSA9PSAwKTsKLQotCS8q IFRyeSBmb3IgYSBzbWFsbCBzaXplIGNsYXNzLiAqLwotCWlmIChzaXplIDw9IFNDX1NNQUxMX01B WENMQVNTICYmIGFsaWdubWVudCA8PSBQQUdFKSB7Ci0JCS8qCi0JCSAqIFJvdW5kIHNpemUgdXAg dG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgYWxpZ25tZW50LgotCQkgKgotCQkgKiBUaGlzIGRv bmUsIHdlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IGZvciBlYWNoCi0JCSAq IHNtYWxsIHNpemUgY2xhc3MsIGV2ZXJ5IG9iamVjdCBpcyBhbGlnbmVkIGF0IHRoZSBzbWFsbGVz dAotCQkgKiBwb3dlciBvZiB0d28gdGhhdCBpcyBub24temVybyBpbiB0aGUgYmFzZSB0d28gcmVw cmVzZW50YXRpb24KLQkJICogb2YgdGhlIHNpemUuICBGb3IgZXhhbXBsZToKLQkJICoKLQkJICog ICBTaXplIHwgICBCYXNlIDIgfCBNaW5pbXVtIGFsaWdubWVudAotCQkgKiAgIC0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCi0JCSAqICAgICA5NiB8ICAxMTAwMDAwIHwgIDMyCi0J CSAqICAgIDE0NCB8IDEwMTAwMDAwIHwgIDMyCi0JCSAqICAgIDE5MiB8IDExMDAwMDAwIHwgIDY0 Ci0JCSAqLwotCQl1c2l6ZSA9IHN6X3MydShBTElHTk1FTlRfQ0VJTElORyhzaXplLCBhbGlnbm1l bnQpKTsKLQkJaWYgKHVzaXplIDwgU0NfTEFSR0VfTUlOQ0xBU1MpIHsKLQkJCXJldHVybiB1c2l6 ZTsKLQkJfQotCX0KLQotCS8qIExhcmdlIHNpemUgY2xhc3MuICBCZXdhcmUgb2Ygb3ZlcmZsb3cu ICovCi0KLQlpZiAodW5saWtlbHkoYWxpZ25tZW50ID4gU0NfTEFSR0VfTUFYQ0xBU1MpKSB7Ci0J CXJldHVybiAwOwotCX0KLQotCS8qIE1ha2Ugc3VyZSByZXN1bHQgaXMgYSBsYXJnZSBzaXplIGNs YXNzLiAqLwotCWlmIChzaXplIDw9IFNDX0xBUkdFX01JTkNMQVNTKSB7Ci0JCXVzaXplID0gU0Nf TEFSR0VfTUlOQ0xBU1M7Ci0JfSBlbHNlIHsKLQkJdXNpemUgPSBzel9zMnUoc2l6ZSk7Ci0JCWlm ICh1c2l6ZSA8IHNpemUpIHsKLQkJCS8qIHNpemVfdCBvdmVyZmxvdy4gKi8KLQkJCXJldHVybiAw OwotCQl9Ci0JfQotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIG11bHRpLXBhZ2UgbWFwcGluZyB0 aGF0IGxhcmdlX3BhbGxvYygpIHdvdWxkIG5lZWQgaW4KLQkgKiBvcmRlciB0byBndWFyYW50ZWUg dGhlIGFsaWdubWVudC4KLQkgKi8KLQlpZiAodXNpemUgKyBzel9sYXJnZV9wYWQgKyBQQUdFX0NF SUxJTkcoYWxpZ25tZW50KSAtIFBBR0UgPCB1c2l6ZSkgewotCQkvKiBzaXplX3Qgb3ZlcmZsb3cu ICovCi0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gdXNpemU7Ci19Ci0KLXNpemVfdCBzel9wc3pf cXVhbnRpemVfZmxvb3Ioc2l6ZV90IHNpemUpOwotc2l6ZV90IHN6X3Bzel9xdWFudGl6ZV9jZWls KHNpemVfdCBzaXplKTsKLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1NJWkVfSCAqLwoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX2V4dGVybnMuaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX2V4 dGVybnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJhYjcxMC4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFs bG9jL2ludGVybmFsL3RjYWNoZV9leHRlcm5zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCww IEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RDQUNIRV9FWFRFUk5TX0gKLSNkZWZpbmUg SkVNQUxMT0NfSU5URVJOQUxfVENBQ0hFX0VYVEVSTlNfSAotCi1leHRlcm4gYm9vbCBvcHRfdGNh Y2hlOwotZXh0ZXJuIHNpemVfdCBvcHRfdGNhY2hlX21heDsKLWV4dGVybiBzc2l6ZV90CW9wdF9s Z190Y2FjaGVfbnNsb3RzX211bDsKLWV4dGVybiB1bnNpZ25lZCBvcHRfdGNhY2hlX25zbG90c19z bWFsbF9taW47Ci1leHRlcm4gdW5zaWduZWQgb3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWF4Owot ZXh0ZXJuIHVuc2lnbmVkIG9wdF90Y2FjaGVfbnNsb3RzX2xhcmdlOwotZXh0ZXJuIHNzaXplX3Qg b3B0X2xnX3RjYWNoZV9zaGlmdDsKLWV4dGVybiBzaXplX3Qgb3B0X3RjYWNoZV9nY19pbmNyX2J5 dGVzOwotZXh0ZXJuIHNpemVfdCBvcHRfdGNhY2hlX2djX2RlbGF5X2J5dGVzOwotZXh0ZXJuIHVu c2lnbmVkIG9wdF9sZ190Y2FjaGVfZmx1c2hfc21hbGxfZGl2OwotZXh0ZXJuIHVuc2lnbmVkIG9w dF9sZ190Y2FjaGVfZmx1c2hfbGFyZ2VfZGl2OwotCi0vKgotICogTnVtYmVyIG9mIHRjYWNoZSBi aW5zLiAgVGhlcmUgYXJlIFNDX05CSU5TIHNtYWxsLW9iamVjdCBiaW5zLCBwbHVzIDAgb3IgbW9y ZQotICogbGFyZ2Utb2JqZWN0IGJpbnMuCi0gKi8KLWV4dGVybiB1bnNpZ25lZAluaGJpbnM7Ci0K LS8qIE1heGltdW0gY2FjaGVkIHNpemUgY2xhc3MuICovCi1leHRlcm4gc2l6ZV90CXRjYWNoZV9t YXhjbGFzczsKLQotZXh0ZXJuIGNhY2hlX2Jpbl9pbmZvX3QgKnRjYWNoZV9iaW5faW5mbzsKLQot LyoKLSAqIEV4cGxpY2l0IHRjYWNoZXMsIG1hbmFnZWQgdmlhIHRoZSB0Y2FjaGUue2NyZWF0ZSxm bHVzaCxkZXN0cm95fSBtYWxsY3RscyBhbmQKLSAqIHVzYWJsZSB2aWEgdGhlIE1BTExPQ1hfVENB Q0hFKCkgZmxhZy4gIFRoZSBhdXRvbWF0aWMgcGVyIHRocmVhZCB0Y2FjaGVzIGFyZQotICogY29t cGxldGVseSBkaXNqb2ludCBmcm9tIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuICB0Y2FjaGVzIHN0YXJ0 cyBvZmYgYXMgYSBzcGFyc2UKLSAqIGFycmF5LCBzbyBpdCBoYXMgbm8gcGh5c2ljYWwgbWVtb3J5 IGZvb3RwcmludCB1bnRpbCBpbmRpdmlkdWFsIHBhZ2VzIGFyZQotICogdG91Y2hlZC4gIFRoaXMg YWxsb3dzIHRoZSBlbnRpcmUgYXJyYXkgdG8gYmUgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIGFu Ci0gKiBleHBsaWNpdCB0Y2FjaGUgaXMgY3JlYXRlZCB3aXRob3V0IGEgZGlzcHJvcG9ydGlvbmF0 ZSBpbXBhY3Qgb24gbWVtb3J5IHVzYWdlLgotICovCi1leHRlcm4gdGNhY2hlc190CSp0Y2FjaGVz OwotCi1zaXplX3QgdGNhY2hlX3NhbGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0cik7 Ci12b2lkICp0Y2FjaGVfYWxsb2Nfc21hbGxfaGFyZCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFy ZW5hLCB0Y2FjaGVfdCAqdGNhY2hlLAotICAgIGNhY2hlX2Jpbl90ICp0YmluLCBzemluZF90IGJp bmluZCwgYm9vbCAqdGNhY2hlX3N1Y2Nlc3MpOwotCi12b2lkIHRjYWNoZV9iaW5fZmx1c2hfc21h bGwodHNkX3QgKnRzZCwgdGNhY2hlX3QgKnRjYWNoZSwgY2FjaGVfYmluX3QgKnRiaW4sCi0gICAg c3ppbmRfdCBiaW5pbmQsIHVuc2lnbmVkIHJlbSk7Ci12b2lkIHRjYWNoZV9iaW5fZmx1c2hfbGFy Z2UodHNkX3QgKnRzZCwgdGNhY2hlX3QgKnRjYWNoZSwgY2FjaGVfYmluX3QgKnRiaW4sCi0gICAg c3ppbmRfdCBiaW5pbmQsIHVuc2lnbmVkIHJlbSk7Ci12b2lkIHRjYWNoZV9iaW5fZmx1c2hfc3Rh c2hlZCh0c2RfdCAqdHNkLCB0Y2FjaGVfdCAqdGNhY2hlLCBjYWNoZV9iaW5fdCAqYmluLAotICAg IHN6aW5kX3QgYmluaW5kLCBib29sIGlzX3NtYWxsKTsKLXZvaWQgdGNhY2hlX2FyZW5hX3JlYXNz b2NpYXRlKHRzZG5fdCAqdHNkbiwgdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Nsb3csCi0gICAgdGNh Y2hlX3QgKnRjYWNoZSwgYXJlbmFfdCAqYXJlbmEpOwotdGNhY2hlX3QgKnRjYWNoZV9jcmVhdGVf ZXhwbGljaXQodHNkX3QgKnRzZCk7Ci12b2lkIHRjYWNoZV9jbGVhbnVwKHRzZF90ICp0c2QpOwot dm9pZCB0Y2FjaGVfc3RhdHNfbWVyZ2UodHNkbl90ICp0c2RuLCB0Y2FjaGVfdCAqdGNhY2hlLCBh cmVuYV90ICphcmVuYSk7Ci1ib29sIHRjYWNoZXNfY3JlYXRlKHRzZF90ICp0c2QsIGJhc2VfdCAq YmFzZSwgdW5zaWduZWQgKnJfaW5kKTsKLXZvaWQgdGNhY2hlc19mbHVzaCh0c2RfdCAqdHNkLCB1 bnNpZ25lZCBpbmQpOwotdm9pZCB0Y2FjaGVzX2Rlc3Ryb3kodHNkX3QgKnRzZCwgdW5zaWduZWQg aW5kKTsKLWJvb2wgdGNhY2hlX2Jvb3QodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UpOwotdm9p ZCB0Y2FjaGVfYXJlbmFfYXNzb2NpYXRlKHRzZG5fdCAqdHNkbiwgdGNhY2hlX3Nsb3dfdCAqdGNh Y2hlX3Nsb3csCi0gICAgdGNhY2hlX3QgKnRjYWNoZSwgYXJlbmFfdCAqYXJlbmEpOwotdm9pZCB0 Y2FjaGVfcHJlZm9yayh0c2RuX3QgKnRzZG4pOwotdm9pZCB0Y2FjaGVfcG9zdGZvcmtfcGFyZW50 KHRzZG5fdCAqdHNkbik7Ci12b2lkIHRjYWNoZV9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4p Owotdm9pZCB0Y2FjaGVfZmx1c2godHNkX3QgKnRzZCk7Ci1ib29sIHRzZF90Y2FjaGVfZGF0YV9p bml0KHRzZF90ICp0c2QpOwotYm9vbCB0c2RfdGNhY2hlX2VuYWJsZWRfZGF0YV9pbml0KHRzZF90 ICp0c2QpOwotCi12b2lkIHRjYWNoZV9hc3NlcnRfaW5pdGlhbGl6ZWQodGNhY2hlX3QgKnRjYWNo ZSk7Ci0KLS8qIE9ubHkgYWNjZXNzZWQgYnkgdGhyZWFkIGV2ZW50LiAqLwotdWludDY0X3QgdGNh Y2hlX2djX25ld19ldmVudF93YWl0KHRzZF90ICp0c2QpOwotdWludDY0X3QgdGNhY2hlX2djX3Bv c3Rwb25lZF9ldmVudF93YWl0KHRzZF90ICp0c2QpOwotdm9pZCB0Y2FjaGVfZ2NfZXZlbnRfaGFu ZGxlcih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKTsKLXVpbnQ2NF90IHRjYWNoZV9nY19k YWxsb2NfbmV3X2V2ZW50X3dhaXQodHNkX3QgKnRzZCk7Ci11aW50NjRfdCB0Y2FjaGVfZ2NfZGFs bG9jX3Bvc3Rwb25lZF9ldmVudF93YWl0KHRzZF90ICp0c2QpOwotdm9pZCB0Y2FjaGVfZ2NfZGFs bG9jX2V2ZW50X2hhbmRsZXIodHNkX3QgKnRzZCwgdWludDY0X3QgZWxhcHNlZCk7Ci0KLSNlbmRp ZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9UQ0FDSEVfRVhURVJOU19IICovCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC90Y2FjaGVfaW5saW5lcy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfaW5saW5lcy5oCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjM0ZjE0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv dGNhY2hlX2lubGluZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0jaWZuZGVm IEpFTUFMTE9DX0lOVEVSTkFMX1RDQUNIRV9JTkxJTkVTX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5U RVJOQUxfVENBQ0hFX0lOTElORVNfSAotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmlu LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfdHlwZXMu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW4uaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9zYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3N6LmgiCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdXRpbC5oIgotCi1zdGF0aWMgaW5saW5lIGJvb2wKLXRj YWNoZV9lbmFibGVkX2dldCh0c2RfdCAqdHNkKSB7Ci0JcmV0dXJuIHRzZF90Y2FjaGVfZW5hYmxl ZF9nZXQodHNkKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi10Y2FjaGVfZW5hYmxlZF9zZXQo dHNkX3QgKnRzZCwgYm9vbCBlbmFibGVkKSB7Ci0JYm9vbCB3YXNfZW5hYmxlZCA9IHRzZF90Y2Fj aGVfZW5hYmxlZF9nZXQodHNkKTsKLQotCWlmICghd2FzX2VuYWJsZWQgJiYgZW5hYmxlZCkgewot CQl0c2RfdGNhY2hlX2RhdGFfaW5pdCh0c2QpOwotCX0gZWxzZSBpZiAod2FzX2VuYWJsZWQgJiYg IWVuYWJsZWQpIHsKLQkJdGNhY2hlX2NsZWFudXAodHNkKTsKLQl9Ci0JLyogQ29tbWl0IHRoZSBz dGF0ZSBsYXN0LiAgQWJvdmUgY2FsbHMgY2hlY2sgY3VycmVudCBzdGF0ZS4gKi8KLQl0c2RfdGNh Y2hlX2VuYWJsZWRfc2V0KHRzZCwgZW5hYmxlZCk7Ci0JdHNkX3Nsb3dfdXBkYXRlKHRzZCk7Ci19 Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotdGNhY2hlX3NtYWxsX2Jpbl9kaXNhYmxl ZChzemluZF90IGluZCwgY2FjaGVfYmluX3QgKmJpbikgewotCWFzc2VydChpbmQgPCBTQ19OQklO Uyk7Ci0JYm9vbCByZXQgPSAoY2FjaGVfYmluX2luZm9fbmNhY2hlZF9tYXgoJnRjYWNoZV9iaW5f aW5mb1tpbmRdKSA9PSAwKTsKLQlpZiAocmV0ICYmIGJpbiAhPSBOVUxMKSB7Ci0JCS8qIHNtYWxs IHNpemUgY2xhc3MgYnV0IGNhY2hlIGJpbiBkaXNhYmxlZC4gKi8KLQkJYXNzZXJ0KGluZCA+PSBu aGJpbnMpOwotCQlhc3NlcnQoKHVpbnRwdHJfdCkoKmJpbi0+c3RhY2tfaGVhZCkgPT0KLQkJICAg IGNhY2hlX2Jpbl9wcmVjZWRpbmdfanVuayk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotSkVN QUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLXRjYWNoZV9hbGxvY19zbWFsbCh0c2RfdCAqdHNk LCBhcmVuYV90ICphcmVuYSwgdGNhY2hlX3QgKnRjYWNoZSwKLSAgICBzaXplX3Qgc2l6ZSwgc3pp bmRfdCBiaW5pbmQsIGJvb2wgemVybywgYm9vbCBzbG93X3BhdGgpIHsKLQl2b2lkICpyZXQ7Ci0J Ym9vbCB0Y2FjaGVfc3VjY2VzczsKLQotCWFzc2VydChiaW5pbmQgPCBTQ19OQklOUyk7Ci0JY2Fj aGVfYmluX3QgKmJpbiA9ICZ0Y2FjaGUtPmJpbnNbYmluaW5kXTsKLQlyZXQgPSBjYWNoZV9iaW5f YWxsb2MoYmluLCAmdGNhY2hlX3N1Y2Nlc3MpOwotCWFzc2VydCh0Y2FjaGVfc3VjY2VzcyA9PSAo cmV0ICE9IE5VTEwpKTsKLQlpZiAodW5saWtlbHkoIXRjYWNoZV9zdWNjZXNzKSkgewotCQlib29s IHRjYWNoZV9oYXJkX3N1Y2Nlc3M7Ci0JCWFyZW5hID0gYXJlbmFfY2hvb3NlKHRzZCwgYXJlbmEp OwotCQlpZiAodW5saWtlbHkoYXJlbmEgPT0gTlVMTCkpIHsKLQkJCXJldHVybiBOVUxMOwotCQl9 Ci0JCWlmICh1bmxpa2VseSh0Y2FjaGVfc21hbGxfYmluX2Rpc2FibGVkKGJpbmluZCwgYmluKSkp IHsKLQkJCS8qIHN0YXRzIGFuZCB6ZXJvIGFyZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IHRoZSBhcmVu YS4gKi8KLQkJCXJldHVybiBhcmVuYV9tYWxsb2NfaGFyZCh0c2RfdHNkbih0c2QpLCBhcmVuYSwg c2l6ZSwKLQkJCSAgICBiaW5pbmQsIHplcm8pOwotCQl9Ci0JCXRjYWNoZV9iaW5fZmx1c2hfc3Rh c2hlZCh0c2QsIHRjYWNoZSwgYmluLCBiaW5pbmQsCi0JCSAgICAvKiBpc19zbWFsbCAqLyB0cnVl KTsKLQotCQlyZXQgPSB0Y2FjaGVfYWxsb2Nfc21hbGxfaGFyZCh0c2RfdHNkbih0c2QpLCBhcmVu YSwgdGNhY2hlLAotCQkgICAgYmluLCBiaW5pbmQsICZ0Y2FjaGVfaGFyZF9zdWNjZXNzKTsKLQkJ aWYgKHRjYWNoZV9oYXJkX3N1Y2Nlc3MgPT0gZmFsc2UpIHsKLQkJCXJldHVybiBOVUxMOwotCQl9 Ci0JfQotCi0JYXNzZXJ0KHJldCk7Ci0JaWYgKHVubGlrZWx5KHplcm8pKSB7Ci0JCXNpemVfdCB1 c2l6ZSA9IHN6X2luZGV4MnNpemUoYmluaW5kKTsKLQkJYXNzZXJ0KHRjYWNoZV9zYWxsb2ModHNk X3RzZG4odHNkKSwgcmV0KSA9PSB1c2l6ZSk7Ci0JCW1lbXNldChyZXQsIDAsIHVzaXplKTsKLQl9 Ci0JaWYgKGNvbmZpZ19zdGF0cykgewotCQliaW4tPnRzdGF0cy5ucmVxdWVzdHMrKzsKLQl9Ci0J cmV0dXJuIHJldDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkICoKLXRjYWNoZV9h bGxvY19sYXJnZSh0c2RfdCAqdHNkLCBhcmVuYV90ICphcmVuYSwgdGNhY2hlX3QgKnRjYWNoZSwg c2l6ZV90IHNpemUsCi0gICAgc3ppbmRfdCBiaW5pbmQsIGJvb2wgemVybywgYm9vbCBzbG93X3Bh dGgpIHsKLQl2b2lkICpyZXQ7Ci0JYm9vbCB0Y2FjaGVfc3VjY2VzczsKLQotCWFzc2VydChiaW5p bmQgPj0gU0NfTkJJTlMgJiYgYmluaW5kIDwgbmhiaW5zKTsKLQljYWNoZV9iaW5fdCAqYmluID0g JnRjYWNoZS0+Ymluc1tiaW5pbmRdOwotCXJldCA9IGNhY2hlX2Jpbl9hbGxvYyhiaW4sICZ0Y2Fj aGVfc3VjY2Vzcyk7Ci0JYXNzZXJ0KHRjYWNoZV9zdWNjZXNzID09IChyZXQgIT0gTlVMTCkpOwot CWlmICh1bmxpa2VseSghdGNhY2hlX3N1Y2Nlc3MpKSB7Ci0JCS8qCi0JCSAqIE9ubHkgYWxsb2Nh dGUgb25lIGxhcmdlIG9iamVjdCBhdCBhIHRpbWUsIGJlY2F1c2UgaXQncyBxdWl0ZQotCQkgKiBl eHBlbnNpdmUgdG8gY3JlYXRlIG9uZSBhbmQgbm90IHVzZSBpdC4KLQkJICovCi0JCWFyZW5hID0g YXJlbmFfY2hvb3NlKHRzZCwgYXJlbmEpOwotCQlpZiAodW5saWtlbHkoYXJlbmEgPT0gTlVMTCkp IHsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXRjYWNoZV9iaW5fZmx1c2hfc3Rhc2hlZCh0c2Qs IHRjYWNoZSwgYmluLCBiaW5pbmQsCi0JCSAgICAvKiBpc19zbWFsbCAqLyBmYWxzZSk7Ci0KLQkJ cmV0ID0gbGFyZ2VfbWFsbG9jKHRzZF90c2RuKHRzZCksIGFyZW5hLCBzel9zMnUoc2l6ZSksIHpl cm8pOwotCQlpZiAocmV0ID09IE5VTEwpIHsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JfSBlbHNl IHsKLQkJaWYgKHVubGlrZWx5KHplcm8pKSB7Ci0JCQlzaXplX3QgdXNpemUgPSBzel9pbmRleDJz aXplKGJpbmluZCk7Ci0JCQlhc3NlcnQodXNpemUgPD0gdGNhY2hlX21heGNsYXNzKTsKLQkJCW1l bXNldChyZXQsIDAsIHVzaXplKTsKLQkJfQotCi0JCWlmIChjb25maWdfc3RhdHMpIHsKLQkJCWJp bi0+dHN0YXRzLm5yZXF1ZXN0cysrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotSkVN QUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi10Y2FjaGVfZGFsbG9jX3NtYWxsKHRzZF90ICp0c2Qs IHRjYWNoZV90ICp0Y2FjaGUsIHZvaWQgKnB0ciwgc3ppbmRfdCBiaW5pbmQsCi0gICAgYm9vbCBz bG93X3BhdGgpIHsKLQlhc3NlcnQodGNhY2hlX3NhbGxvYyh0c2RfdHNkbih0c2QpLCBwdHIpIDw9 IFNDX1NNQUxMX01BWENMQVNTKTsKLQotCWNhY2hlX2Jpbl90ICpiaW4gPSAmdGNhY2hlLT5iaW5z W2JpbmluZF07Ci0JLyoKLQkgKiBOb3QgbWFya2luZyB0aGUgYnJhbmNoIHVubGlrZWx5IGJlY2F1 c2UgdGhpcyBpcyBwYXN0IGZyZWVfZmFzdHBhdGgoKQotCSAqICh3aGljaCBoYW5kbGVzIHRoZSBt b3N0IGNvbW1vbiBjYXNlcyksIGkuZS4gYXQgdGhpcyBwb2ludCBpdCdzIG9mdGVuCi0JICogdW5j b21tb24gY2FzZXMuCi0JICovCi0JaWYgKGNhY2hlX2Jpbl9ub25mYXN0X2FsaWduZWQocHRyKSkg ewotCQkvKiBKdW5rIHVuY29uZGl0aW9uYWxseSwgZXZlbiBpZiBiaW4gaXMgZnVsbC4gKi8KLQkJ c2FuX2p1bmtfcHRyKHB0ciwgc3pfaW5kZXgyc2l6ZShiaW5pbmQpKTsKLQkJaWYgKGNhY2hlX2Jp bl9zdGFzaChiaW4sIHB0cikpIHsKLQkJCXJldHVybjsKLQkJfQotCQlhc3NlcnQoY2FjaGVfYmlu X2Z1bGwoYmluKSk7Ci0JCS8qIEJpbiBmdWxsOyBmYWxsIHRocm91Z2ggaW50byB0aGUgZmx1c2gg YnJhbmNoLiAqLwotCX0KLQotCWlmICh1bmxpa2VseSghY2FjaGVfYmluX2RhbGxvY19lYXN5KGJp biwgcHRyKSkpIHsKLQkJaWYgKHVubGlrZWx5KHRjYWNoZV9zbWFsbF9iaW5fZGlzYWJsZWQoYmlu aW5kLCBiaW4pKSkgewotCQkJYXJlbmFfZGFsbG9jX3NtYWxsKHRzZF90c2RuKHRzZCksIHB0cik7 Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY2FjaGVfYmluX3N6X3QgbWF4ID0gY2FjaGVfYmluX2luZm9f bmNhY2hlZF9tYXgoCi0JCSAgICAmdGNhY2hlX2Jpbl9pbmZvW2JpbmluZF0pOwotCQl1bnNpZ25l ZCByZW1haW4gPSBtYXggPj4gb3B0X2xnX3RjYWNoZV9mbHVzaF9zbWFsbF9kaXY7Ci0JCXRjYWNo ZV9iaW5fZmx1c2hfc21hbGwodHNkLCB0Y2FjaGUsIGJpbiwgYmluaW5kLCByZW1haW4pOwotCQli b29sIHJldCA9IGNhY2hlX2Jpbl9kYWxsb2NfZWFzeShiaW4sIHB0cik7Ci0JCWFzc2VydChyZXQp OwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi10Y2FjaGVfZGFsbG9jX2xh cmdlKHRzZF90ICp0c2QsIHRjYWNoZV90ICp0Y2FjaGUsIHZvaWQgKnB0ciwgc3ppbmRfdCBiaW5p bmQsCi0gICAgYm9vbCBzbG93X3BhdGgpIHsKLQotCWFzc2VydCh0Y2FjaGVfc2FsbG9jKHRzZF90 c2RuKHRzZCksIHB0cikKLQkgICAgPiBTQ19TTUFMTF9NQVhDTEFTUyk7Ci0JYXNzZXJ0KHRjYWNo ZV9zYWxsb2ModHNkX3RzZG4odHNkKSwgcHRyKSA8PSB0Y2FjaGVfbWF4Y2xhc3MpOwotCi0JY2Fj aGVfYmluX3QgKmJpbiA9ICZ0Y2FjaGUtPmJpbnNbYmluaW5kXTsKLQlpZiAodW5saWtlbHkoIWNh Y2hlX2Jpbl9kYWxsb2NfZWFzeShiaW4sIHB0cikpKSB7Ci0JCXVuc2lnbmVkIHJlbWFpbiA9IGNh Y2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KAotCQkgICAgJnRjYWNoZV9iaW5faW5mb1tiaW5pbmRd KSA+PiBvcHRfbGdfdGNhY2hlX2ZsdXNoX2xhcmdlX2RpdjsKLQkJdGNhY2hlX2Jpbl9mbHVzaF9s YXJnZSh0c2QsIHRjYWNoZSwgYmluLCBiaW5pbmQsIHJlbWFpbik7Ci0JCWJvb2wgcmV0ID0gY2Fj aGVfYmluX2RhbGxvY19lYXN5KGJpbiwgcHRyKTsKLQkJYXNzZXJ0KHJldCk7Ci0JfQotfQotCi1K RU1BTExPQ19BTFdBWVNfSU5MSU5FIHRjYWNoZV90ICoKLXRjYWNoZXNfZ2V0KHRzZF90ICp0c2Qs IHVuc2lnbmVkIGluZCkgewotCXRjYWNoZXNfdCAqZWxtID0gJnRjYWNoZXNbaW5kXTsKLQlpZiAo dW5saWtlbHkoZWxtLT50Y2FjaGUgPT0gTlVMTCkpIHsKLQkJbWFsbG9jX3ByaW50ZigiPGplbWFs bG9jPjogaW52YWxpZCB0Y2FjaGUgaWQgKCV1KS5cbiIsIGluZCk7Ci0JCWFib3J0KCk7Ci0JfSBl bHNlIGlmICh1bmxpa2VseShlbG0tPnRjYWNoZSA9PSBUQ0FDSEVTX0VMTV9ORUVEX1JFSU5JVCkp IHsKLQkJZWxtLT50Y2FjaGUgPSB0Y2FjaGVfY3JlYXRlX2V4cGxpY2l0KHRzZCk7Ci0JfQotCXJl dHVybiBlbG0tPnRjYWNoZTsKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lOVEVSTkFMX1RDQUNI RV9JTkxJTkVTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RjYWNoZV9zdHJ1Y3RzLmggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3RjYWNoZV9zdHJ1Y3RzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3 NmQ3M2QuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfc3RydWN0cy5oCisrKyAvZGV2L251 bGwKQEAgLTEsNjggKzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9UQ0FDSEVfU1RS VUNUU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RDQUNIRV9TVFJVQ1RTX0gKLQotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2NhY2hlX2Jpbi5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL3FsLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC90aWNrZXIuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC90c2RfdHlwZXMuaCIKLQotLyoKLSAqIFRoZSB0Y2FjaGUgc3RhdGUgaXMgc3BsaXQgaW50 byB0aGUgc2xvdyBhbmQgaG90IHBhdGggZGF0YS4gIEVhY2ggaGFzIGEKLSAqIHBvaW50ZXIgdG8g dGhlIG90aGVyLCBhbmQgdGhlIGRhdGEgYWx3YXlzIGNvbWVzIGluIHBhaXJzLiAgVGhlIGxheW91 dCBvZiBlYWNoCi0gKiBvZiB0aGVtIHZhcmllcyBpbiBwcmFjdGljZTsgdGNhY2hlX3Nsb3cgbGl2 ZXMgaW4gdGhlIFRTRCBmb3IgdGhlIGF1dG9tYXRpYwotICogdGNhY2hlLCBhbmQgYXMgcGFydCBv ZiBhIGR5bmFtaWMgYWxsb2NhdGlvbiBmb3IgbWFudWFsIGFsbG9jYXRpb25zLiAgS2VlcGluZwot ICogYSBwb2ludGVyIHRvIHRjYWNoZV9zbG93IGxldHMgdXMgdHJlYXQgdGhlc2UgY2FzZXMgdW5p Zm9ybWx5LCByYXRoZXIgdGhhbgotICogc3BsaXR0aW5nIHVwIHRoZSB0Y2FjaGUgW2RlXWFsbG9j YXRpb24gY29kZSBpbnRvIHRob3NlIHBhdGhzIGNhbGxlZCB3aXRoIHRoZQotICogVFNEIHRjYWNo ZSBhbmQgdGhvc2UgY2FsbGVkIHdpdGggYSBtYW51YWwgdGNhY2hlLgotICovCi0KLXN0cnVjdCB0 Y2FjaGVfc2xvd19zIHsKLQkvKiBMZXRzIHVzIHRyYWNrIGFsbCB0aGUgdGNhY2hlcyBpbiBhbiBh cmVuYS4gKi8KLQlxbF9lbG0odGNhY2hlX3Nsb3dfdCkgbGluazsKLQotCS8qCi0JICogVGhlIGRl c2NyaXB0b3IgbGV0cyB0aGUgYXJlbmEgZmluZCBvdXIgY2FjaGUgYmlucyB3aXRob3V0IHNlZWlu ZyB0aGUKLQkgKiB0Y2FjaGUgZGVmaW5pdGlvbi4gIFRoaXMgZW5hYmxlcyBhcmVuYXMgdG8gYWdn cmVnYXRlIHN0YXRzIGFjcm9zcwotCSAqIHRjYWNoZXMgd2l0aG91dCBoYXZpbmcgYSB0Y2FjaGUg ZGVwZW5kZW5jeS4KLQkgKi8KLQljYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl90IGNhY2hlX2Jp bl9hcnJheV9kZXNjcmlwdG9yOwotCi0JLyogVGhlIGFyZW5hIHRoaXMgdGNhY2hlIGlzIGFzc29j aWF0ZWQgd2l0aC4gKi8KLQlhcmVuYV90CQkqYXJlbmE7Ci0JLyogTmV4dCBiaW4gdG8gR0MuICov Ci0Jc3ppbmRfdAkJbmV4dF9nY19iaW47Ci0JLyogRm9yIHNtYWxsIGJpbnMsIGZpbGwgKG5jYWNo ZWRfbWF4ID4+IGxnX2ZpbGxfZGl2KS4gKi8KLQl1aW50OF90CQlsZ19maWxsX2RpdltTQ19OQklO U107Ci0JLyogRm9yIHNtYWxsIGJpbnMsIHdoZXRoZXIgaGFzIGJlZW4gcmVmaWxsZWQgc2luY2Ug bGFzdCBHQy4gKi8KLQlib29sCQliaW5fcmVmaWxsZWRbU0NfTkJJTlNdOwotCS8qCi0JICogRm9y IHNtYWxsIGJpbnMsIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgY2FuIHByZXRlbmQgdG8gZmx1c2gg YmVmb3JlCi0JICogYWN0dWFsbHkgZmx1c2hpbmcuCi0JICovCi0JdWludDhfdAkJYmluX2ZsdXNo X2RlbGF5X2l0ZW1zW1NDX05CSU5TXTsKLQkvKgotCSAqIFRoZSBzdGFydCBvZiB0aGUgYWxsb2Nh dGlvbiBjb250YWluaW5nIHRoZSBkeW5hbWljIGFsbG9jYXRpb24gZm9yCi0JICogZWl0aGVyIHRo ZSBjYWNoZSBiaW5zIGFsb25lLCBvciB0aGUgY2FjaGUgYmluIG1lbW9yeSBhcyB3ZWxsIGFzIHRo aXMKLQkgKiB0Y2FjaGVfc2xvd190IGFuZCBpdHMgYXNzb2NpYXRlZCB0Y2FjaGVfdC4KLQkgKi8K LQl2b2lkCQkqZHluX2FsbG9jOwotCi0JLyogVGhlIGFzc29jaWF0ZWQgYmlucy4gKi8KLQl0Y2Fj aGVfdAkqdGNhY2hlOwotfTsKLQotc3RydWN0IHRjYWNoZV9zIHsKLQl0Y2FjaGVfc2xvd190CSp0 Y2FjaGVfc2xvdzsKLQljYWNoZV9iaW5fdAliaW5zW1RDQUNIRV9OQklOU19NQVhdOwotfTsKLQot LyogTGlua2FnZSBmb3IgbGlzdCBvZiBhdmFpbGFibGUgKHByZXZpb3VzbHkgdXNlZCkgZXhwbGlj aXQgdGNhY2hlIElEcy4gKi8KLXN0cnVjdCB0Y2FjaGVzX3MgewotCXVuaW9uIHsKLQkJdGNhY2hl X3QJKnRjYWNoZTsKLQkJdGNhY2hlc190CSpuZXh0OwotCX07Ci19OwotCi0jZW5kaWYgLyogSkVN QUxMT0NfSU5URVJOQUxfVENBQ0hFX1NUUlVDVFNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv dGNhY2hlX3R5cGVzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9p bmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RjYWNoZV90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA1ODM2NzdlLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdGNhY2hlX3R5cGVz LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVS TkFMX1RDQUNIRV9UWVBFU19ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RDQUNIRV9UWVBF U19ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYy5oIgotCi10eXBlZGVmIHN0cnVj dCB0Y2FjaGVfc2xvd19zIHRjYWNoZV9zbG93X3Q7Ci10eXBlZGVmIHN0cnVjdCB0Y2FjaGVfcyB0 Y2FjaGVfdDsKLXR5cGVkZWYgc3RydWN0IHRjYWNoZXNfcyB0Y2FjaGVzX3Q7Ci0KLS8qCi0gKiB0 Y2FjaGUgcG9pbnRlcnMgY2xvc2UgdG8gTlVMTCBhcmUgdXNlZCB0byBlbmNvZGUgc3RhdGUgaW5m b3JtYXRpb24gdGhhdCBpcwotICogdXNlZCBmb3IgdHdvIHB1cnBvc2VzOiBwcmV2ZW50aW5nIHRo cmVhZCBjYWNoaW5nIG9uIGEgcGVyIHRocmVhZCBiYXNpcyBhbmQKLSAqIGNsZWFuaW5nIHVwIGR1 cmluZyB0aHJlYWQgc2h1dGRvd24uCi0gKi8KLSNkZWZpbmUgVENBQ0hFX1NUQVRFX0RJU0FCTEVE CQkoKHRjYWNoZV90ICopKHVpbnRwdHJfdCkxKQotI2RlZmluZSBUQ0FDSEVfU1RBVEVfUkVJTkNB Uk5BVEVECSgodGNhY2hlX3QgKikodWludHB0cl90KTIpCi0jZGVmaW5lIFRDQUNIRV9TVEFURV9Q VVJHQVRPUlkJCSgodGNhY2hlX3QgKikodWludHB0cl90KTMpCi0jZGVmaW5lIFRDQUNIRV9TVEFU RV9NQVgJCVRDQUNIRV9TVEFURV9QVVJHQVRPUlkKLQotLyogVXNlZCBpbiBUU0Qgc3RhdGljIGlu aXRpYWxpemVyIG9ubHkuIFJlYWwgaW5pdCBpbiB0c2RfdGNhY2hlX2RhdGFfaW5pdCgpLiAqLwot I2RlZmluZSBUQ0FDSEVfWkVST19JTklUSUFMSVpFUiB7MH0KLSNkZWZpbmUgVENBQ0hFX1NMT1df WkVST19JTklUSUFMSVpFUiB7MH0KLQotLyogVXNlZCBpbiBUU0Qgc3RhdGljIGluaXRpYWxpemVy IG9ubHkuIFdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gb3B0X3RjYWNoZS4gKi8KLSNkZWZpbmUgVENB Q0hFX0VOQUJMRURfWkVST19JTklUSUFMSVpFUiBmYWxzZQotCi0vKiBVc2VkIGZvciBleHBsaWNp dCB0Y2FjaGUgb25seS4gTWVhbnMgZmx1c2hlZCBidXQgbm90IGRlc3Ryb3llZC4gKi8KLSNkZWZp bmUgVENBQ0hFU19FTE1fTkVFRF9SRUlOSVQgKCh0Y2FjaGVfdCAqKSh1aW50cHRyX3QpMSkKLQot I2RlZmluZSBUQ0FDSEVfTEdfTUFYQ0xBU1NfTElNSVQgMjMgLyogdGNhY2hlX21heGNsYXNzID0g OE0gKi8KLSNkZWZpbmUgVENBQ0hFX01BWENMQVNTX0xJTUlUICgoc2l6ZV90KTEgPDwgVENBQ0hF X0xHX01BWENMQVNTX0xJTUlUKQotI2RlZmluZSBUQ0FDSEVfTkJJTlNfTUFYIChTQ19OQklOUyAr IFNDX05HUk9VUCAqCQkJXAotICAgIChUQ0FDSEVfTEdfTUFYQ0xBU1NfTElNSVQgLSBTQ19MR19M QVJHRV9NSU5DTEFTUykgKyAxKQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfVENBQ0hF X1RZUEVTX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3Rlc3RfaG9va3MuaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwv dGVzdF9ob29rcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDUzMGI1Li4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvdGVzdF9ob29rcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAs MCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9URVNUX0hPT0tTX0gKLSNkZWZpbmUgSkVN QUxMT0NfSU5URVJOQUxfVEVTVF9IT09LU19ICi0KLWV4dGVybiBKRU1BTExPQ19FWFBPUlQgdm9p ZCAoKnRlc3RfaG9va3NfYXJlbmFfbmV3X2hvb2spKCk7Ci1leHRlcm4gSkVNQUxMT0NfRVhQT1JU IHZvaWQgKCp0ZXN0X2hvb2tzX2xpYmNfaG9vaykoKTsKLQotI2lmIGRlZmluZWQoSkVNQUxMT0Nf SkVUKSB8fCBkZWZpbmVkKEpFTUFMTE9DX1VOSVRfVEVTVCkKLSMgIGRlZmluZSBKRU1BTExPQ19U RVNUX0hPT0soZm4sIGhvb2spICgodm9pZCkoaG9vayAhPSBOVUxMICYmIChob29rKCksIDApKSwg Zm4pCi0KLSMgIGRlZmluZSBvcGVuIEpFTUFMTE9DX1RFU1RfSE9PSyhvcGVuLCB0ZXN0X2hvb2tz X2xpYmNfaG9vaykKLSMgIGRlZmluZSByZWFkIEpFTUFMTE9DX1RFU1RfSE9PSyhyZWFkLCB0ZXN0 X2hvb2tzX2xpYmNfaG9vaykKLSMgIGRlZmluZSB3cml0ZSBKRU1BTExPQ19URVNUX0hPT0sod3Jp dGUsIHRlc3RfaG9va3NfbGliY19ob29rKQotIyAgZGVmaW5lIHJlYWRsaW5rIEpFTUFMTE9DX1RF U1RfSE9PSyhyZWFkbGluaywgdGVzdF9ob29rc19saWJjX2hvb2spCi0jICBkZWZpbmUgY2xvc2Ug SkVNQUxMT0NfVEVTVF9IT09LKGNsb3NlLCB0ZXN0X2hvb2tzX2xpYmNfaG9vaykKLSMgIGRlZmlu ZSBjcmVhdCBKRU1BTExPQ19URVNUX0hPT0soY3JlYXQsIHRlc3RfaG9va3NfbGliY19ob29rKQot IyAgZGVmaW5lIHNlY3VyZV9nZXRlbnYgSkVNQUxMT0NfVEVTVF9IT09LKHNlY3VyZV9nZXRlbnYs IHRlc3RfaG9va3NfbGliY19ob29rKQotLyogTm90ZSB0aGF0IHRoaXMgaXMgdW5kZWYnZCBhbmQg cmUtZGVmaW5lJ2QgaW4gc3JjL3Byb2YuYy4gKi8KLSMgIGRlZmluZSBfVW53aW5kX0JhY2t0cmFj ZSBKRU1BTExPQ19URVNUX0hPT0soX1Vud2luZF9CYWNrdHJhY2UsIHRlc3RfaG9va3NfbGliY19o b29rKQotI2Vsc2UKLSMgIGRlZmluZSBKRU1BTExPQ19URVNUX0hPT0soZm4sIGhvb2spIGZuCi0j ZW5kaWYKLQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfVEVTVF9IT09LU19IICovCgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC90aHJlYWRfZXZlbnQuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdGhyZWFkX2V2ZW50 LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNGUxYjMuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC90aHJlYWRfZXZlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0j aWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RIUkVBRF9FVkVOVF9ICi0jZGVmaW5lIEpFTUFMTE9D X0lOVEVSTkFMX1RIUkVBRF9FVkVOVF9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90 c2QuaCIKLQotLyogInRlIiBpcyBzaG9ydCBmb3IgInRocmVhZF9ldmVudCIgKi8KLQotLyoKLSAq IFRFX01JTl9TVEFSVF9XQUlUIHNob3VsZCBub3QgZXhjZWVkIHRoZSBtaW5pbWFsIGFsbG9jYXRp b24gdXNpemUuCi0gKi8KLSNkZWZpbmUgVEVfTUlOX1NUQVJUX1dBSVQgKCh1aW50NjRfdCkxVSkK LSNkZWZpbmUgVEVfTUFYX1NUQVJUX1dBSVQgVUlOVDY0X01BWAotCi0vKgotICogTWF4aW11bSB0 aHJlc2hvbGQgb24gdGhyZWFkXyhkZSlhbGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0LCBzbyB0aGF0 IHRoZXJlIGlzCi0gKiBubyBuZWVkIHRvIGNoZWNrIG92ZXJmbG93IGluIG1hbGxvYyBmYXN0IHBh dGguIChUaGUgYWxsb2NhdGlvbiBzaXplIGluIG1hbGxvYwotICogZmFzdCBwYXRoIG5ldmVyIGV4 Y2VlZHMgU0NfTE9PS1VQX01BWENMQVNTLikKLSAqLwotI2RlZmluZSBURV9ORVhUX0VWRU5UX0ZB U1RfTUFYIChVSU5UNjRfTUFYIC0gU0NfTE9PS1VQX01BWENMQVNTICsgMVUpCi0KLS8qCi0gKiBU aGUgbWF4IGludGVydmFsIGhlbHBzIG1ha2Ugc3VyZSB0aGF0IG1hbGxvYyBzdGF5cyBvbiB0aGUg ZmFzdCBwYXRoIGluIHRoZQotICogY29tbW9uIGNhc2UsIGkuZS4gdGhyZWFkX2FsbG9jYXRlZCA8 IHRocmVhZF9hbGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0LiAgV2hlbgotICogdGhyZWFkX2FsbG9j YXRlZCBpcyB3aXRoaW4gYW4gZXZlbnQncyBkaXN0YW5jZSB0byBURV9ORVhUX0VWRU5UX0ZBU1Rf TUFYCi0gKiBhYm92ZSwgdGhyZWFkX2FsbG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3QgaXMgd3JhcHBl ZCBhcm91bmQgYW5kIHdlIGZhbGwgYmFjayB0bwotICogdGhlIG1lZGl1bS1mYXN0IHBhdGguIFRo ZSBtYXggaW50ZXJ2YWwgbWFrZXMgc3VyZSB0aGF0IHdlJ3JlIG5vdCBzdGF5aW5nIG9uCi0gKiB0 aGUgZmFsbGJhY2sgY2FzZSBmb3IgdG9vIGxvbmcsIGV2ZW4gaWYgdGhlcmUncyBubyBhY3RpdmUg ZXZlbnQgb3IgaWYgYWxsCi0gKiBhY3RpdmUgZXZlbnRzIGhhdmUgbG9uZyB3YWl0IHRpbWVzLgot ICovCi0jZGVmaW5lIFRFX01BWF9JTlRFUlZBTCAoKHVpbnQ2NF90KSg0VSA8PCAyMCkpCi0KLS8q Ci0gKiBJbnZhbGlkIGVsYXBzZWQgdGltZSwgZm9yIHNpdHVhdGlvbnMgd2hlcmUgZWxhcHNlZCB0 aW1lIGlzIG5vdCBuZWVkZWQuICBTZWUKLSAqIGNvbW1lbnRzIGluIHRocmVhZF9ldmVudC5jIGZv ciBtb3JlIGluZm8uCi0gKi8KLSNkZWZpbmUgVEVfSU5WQUxJRF9FTEFQU0VEIFVJTlQ2NF9NQVgK LQotdHlwZWRlZiBzdHJ1Y3QgdGVfY3R4X3MgewotCWJvb2wgaXNfYWxsb2M7Ci0JdWludDY0X3Qg KmN1cnJlbnQ7Ci0JdWludDY0X3QgKmxhc3RfZXZlbnQ7Ci0JdWludDY0X3QgKm5leHRfZXZlbnQ7 Ci0JdWludDY0X3QgKm5leHRfZXZlbnRfZmFzdDsKLX0gdGVfY3R4X3Q7Ci0KLXZvaWQgdGVfYXNz ZXJ0X2ludmFyaWFudHNfZGVidWcodHNkX3QgKnRzZCk7Ci12b2lkIHRlX2V2ZW50X3RyaWdnZXIo dHNkX3QgKnRzZCwgdGVfY3R4X3QgKmN0eCk7Ci12b2lkIHRlX3JlY29tcHV0ZV9mYXN0X3RocmVz aG9sZCh0c2RfdCAqdHNkKTsKLXZvaWQgdHNkX3RlX2luaXQodHNkX3QgKnRzZCk7Ci0KLS8qCi0g KiBMaXN0IG9mIGFsbCBldmVudHMsIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotICogIEUoZXZl bnQsCQkoY29uZGl0aW9uKSwgaXNfYWxsb2NfZXZlbnQpCi0gKi8KLSNkZWZpbmUgSVRFUkFURV9P VkVSX0FMTF9FVkVOVFMJCQkJCQlcCi0gICAgRSh0Y2FjaGVfZ2MsCQkob3B0X3RjYWNoZV9nY19p bmNyX2J5dGVzID4gMCksIHRydWUpCVwKLSAgICBFKHByb2Zfc2FtcGxlLAkJKGNvbmZpZ19wcm9m ICYmIG9wdF9wcm9mKSwgdHJ1ZSkgIAlcCi0gICAgRShzdGF0c19pbnRlcnZhbCwJCShvcHRfc3Rh dHNfaW50ZXJ2YWwgPj0gMCksIHRydWUpICAgCVwKLSAgICBFKHRjYWNoZV9nY19kYWxsb2MsCQko b3B0X3RjYWNoZV9nY19pbmNyX2J5dGVzID4gMCksIGZhbHNlKQlcCi0gICAgRShwZWFrX2FsbG9j LAkJY29uZmlnX3N0YXRzLCB0cnVlKQkJCVwKLSAgICBFKHBlYWtfZGFsbG9jLAkJY29uZmlnX3N0 YXRzLCBmYWxzZSkKLQotI2RlZmluZSBFKGV2ZW50LCBjb25kaXRpb25fdW51c2VkLCBpc19hbGxv Y19ldmVudF91bnVzZWQpCQlcCi0gICAgQyhldmVudCMjX2V2ZW50X3dhaXQpCi0KLS8qIExpc3Qg b2YgYWxsIHRocmVhZCBldmVudCBjb3VudGVycy4gKi8KLSNkZWZpbmUgSVRFUkFURV9PVkVSX0FM TF9DT1VOVEVSUwkJCQkJXAotICAgIEModGhyZWFkX2FsbG9jYXRlZCkJCQkJCQkJXAotICAgIEMo dGhyZWFkX2FsbG9jYXRlZF9sYXN0X2V2ZW50KQkJCQkJXAotICAgIElURVJBVEVfT1ZFUl9BTExf RVZFTlRTCQkJCQkJXAotICAgIEMocHJvZl9zYW1wbGVfbGFzdF9ldmVudCkJCQkJCQlcCi0gICAg QyhzdGF0c19pbnRlcnZhbF9sYXN0X2V2ZW50KQotCi0vKiBHZXR0ZXJzIGRpcmVjdGx5IHdyYXAg VFNEIGdldHRlcnMuICovCi0jZGVmaW5lIEMoY291bnRlcikJCQkJCQkJXAotSkVNQUxMT0NfQUxX QVlTX0lOTElORSB1aW50NjRfdAkJCQkJCVwKLWNvdW50ZXIjI19nZXQodHNkX3QgKnRzZCkgewkJ CQkJCVwKLQlyZXR1cm4gdHNkXyMjY291bnRlciMjX2dldCh0c2QpOwkJCQlcCi19Ci0KLUlURVJB VEVfT1ZFUl9BTExfQ09VTlRFUlMKLSN1bmRlZiBDCi0KLS8qCi0gKiBTZXR0ZXJzIGNhbGwgdGhl IFRTRCBwb2ludGVyIGdldHRlcnMgcmF0aGVyIHRoYW4gdGhlIFRTRCBzZXR0ZXJzLCBzbyB0aGF0 Ci0gKiB0aGUgY291bnRlcnMgY2FuIGJlIG1vZGlmaWVkIGV2ZW4gd2hlbiBUU0Qgc3RhdGUgaXMg cmVpbmNhcm5hdGVkIG9yCi0gKiBtaW5pbWFsX2luaXRpYWxpemVkOiBpZiBhbiBldmVudCBpcyB0 cmlnZ2VyZWQgaW4gc3VjaCBjYXNlcywgd2Ugd2lsbAotICogdGVtcG9yYXJpbHkgZGVsYXkgdGhl IGV2ZW50IGFuZCBsZXQgaXQgYmUgaW1tZWRpYXRlbHkgdHJpZ2dlcmVkIGF0IHRoZSBuZXh0Ci0g KiBhbGxvY2F0aW9uIGNhbGwuCi0gKi8KLSNkZWZpbmUgQyhjb3VudGVyKQkJCQkJCQlcCi1KRU1B TExPQ19BTFdBWVNfSU5MSU5FIHZvaWQJCQkJCQlcCi1jb3VudGVyIyNfc2V0KHRzZF90ICp0c2Qs IHVpbnQ2NF90IHYpIHsJCQkJCVwKLQkqdHNkXyMjY291bnRlciMjcF9nZXQodHNkKSA9IHY7CQkJ CQlcCi19Ci0KLUlURVJBVEVfT1ZFUl9BTExfQ09VTlRFUlMKLSN1bmRlZiBDCi0KLS8qCi0gKiBG b3IgZ2VuZXJhdGluZyBfZXZlbnRfd2FpdCBnZXR0ZXIgLyBzZXR0ZXIgZnVuY3Rpb25zIGZvciBl YWNoIGluZGl2aWR1YWwKLSAqIGV2ZW50LgotICovCi0jdW5kZWYgRQotCi0vKgotICogVGhlIG1h bGxvYyBhbmQgZnJlZSBmYXN0cGF0aCBnZXR0ZXJzIC0tIHVzZSB0aGUgdW5zYWZlIGdldHRlcnMg c2luY2UgdHNkIG1heQotICogYmUgbm9uLW5vbWluYWwsIGluIHdoaWNoIGNhc2UgdGhlIGZhc3Rf dGhyZXNob2xkIHdpbGwgYmUgc2V0IHRvIDAuICBUaGlzCi0gKiBhbGxvd3MgY2hlY2tpbmcgZm9y IGV2ZW50cyBhbmQgdHNkIG5vbi1ub21pbmFsIGluIGEgc2luZ2xlIGJyYW5jaC4KLSAqCi0gKiBO b3RlIHRoYXQgdGhlc2UgY2FuIG9ubHkgYmUgdXNlZCBvbiB0aGUgZmFzdHBhdGguCi0gKi8KLUpF TUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdGVfbWFsbG9jX2Zhc3RwYXRoX2N0eCh0c2RfdCAq dHNkLCB1aW50NjRfdCAqYWxsb2NhdGVkLCB1aW50NjRfdCAqdGhyZXNob2xkKSB7Ci0JKmFsbG9j YXRlZCA9ICp0c2RfdGhyZWFkX2FsbG9jYXRlZHBfZ2V0X3Vuc2FmZSh0c2QpOwotCSp0aHJlc2hv bGQgPSAqdHNkX3RocmVhZF9hbGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0cF9nZXRfdW5zYWZlKHRz ZCk7Ci0JYXNzZXJ0KCp0aHJlc2hvbGQgPD0gVEVfTkVYVF9FVkVOVF9GQVNUX01BWCk7Ci19Ci0K LUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdGVfZnJlZV9mYXN0cGF0aF9jdHgodHNkX3Qg KnRzZCwgdWludDY0X3QgKmRlYWxsb2NhdGVkLCB1aW50NjRfdCAqdGhyZXNob2xkKSB7Ci0JLyog VW5zYWZlIGdldHRlcnMgc2luY2UgdGhpcyBtYXkgaGFwcGVuIGJlZm9yZSB0c2RfaW5pdC4gKi8K LQkqZGVhbGxvY2F0ZWQgPSAqdHNkX3RocmVhZF9kZWFsbG9jYXRlZHBfZ2V0X3Vuc2FmZSh0c2Qp OwotCSp0aHJlc2hvbGQgPSAqdHNkX3RocmVhZF9kZWFsbG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3Rw X2dldF91bnNhZmUodHNkKTsKLQlhc3NlcnQoKnRocmVzaG9sZCA8PSBURV9ORVhUX0VWRU5UX0ZB U1RfTUFYKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi10ZV9jdHhfaXNfYWxs b2ModGVfY3R4X3QgKmN0eCkgewotCXJldHVybiBjdHgtPmlzX2FsbG9jOwotfQotCi1KRU1BTExP Q19BTFdBWVNfSU5MSU5FIHVpbnQ2NF90Ci10ZV9jdHhfY3VycmVudF9ieXRlc19nZXQodGVfY3R4 X3QgKmN0eCkgewotCXJldHVybiAqY3R4LT5jdXJyZW50OwotfQotCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHZvaWQKLXRlX2N0eF9jdXJyZW50X2J5dGVzX3NldCh0ZV9jdHhfdCAqY3R4LCB1aW50 NjRfdCB2KSB7Ci0JKmN0eC0+Y3VycmVudCA9IHY7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJ TkUgdWludDY0X3QKLXRlX2N0eF9sYXN0X2V2ZW50X2dldCh0ZV9jdHhfdCAqY3R4KSB7Ci0JcmV0 dXJuICpjdHgtPmxhc3RfZXZlbnQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAot dGVfY3R4X2xhc3RfZXZlbnRfc2V0KHRlX2N0eF90ICpjdHgsIHVpbnQ2NF90IHYpIHsKLQkqY3R4 LT5sYXN0X2V2ZW50ID0gdjsKLX0KLQotLyogQmVsb3cgMyBmb3IgbmV4dF9ldmVudF9mYXN0LiAq LwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50NjRfdAotdGVfY3R4X25leHRfZXZlbnRfZmFz dF9nZXQodGVfY3R4X3QgKmN0eCkgewotCXVpbnQ2NF90IHYgPSAqY3R4LT5uZXh0X2V2ZW50X2Zh c3Q7Ci0JYXNzZXJ0KHYgPD0gVEVfTkVYVF9FVkVOVF9GQVNUX01BWCk7Ci0JcmV0dXJuIHY7Ci19 Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdGVfY3R4X25leHRfZXZlbnRfZmFzdF9z ZXQodGVfY3R4X3QgKmN0eCwgdWludDY0X3QgdikgewotCWFzc2VydCh2IDw9IFRFX05FWFRfRVZF TlRfRkFTVF9NQVgpOwotCSpjdHgtPm5leHRfZXZlbnRfZmFzdCA9IHY7Ci19Ci0KLUpFTUFMTE9D X0FMV0FZU19JTkxJTkUgdm9pZAotdGVfbmV4dF9ldmVudF9mYXN0X3NldF9ub25fbm9taW5hbCh0 c2RfdCAqdHNkKSB7Ci0JLyoKLQkgKiBTZXQgdGhlIGZhc3QgdGhyZXNob2xkcyB0byB6ZXJvIHdo ZW4gdHNkIGlzIG5vbi1ub21pbmFsLiAgVXNlIHRoZQotCSAqIHVuc2FmZSBnZXR0ZXIgYXMgdGhp cyBtYXkgZ2V0IGNhbGxlZCBkdXJpbmcgdHNkIGluaXQgYW5kIGNsZWFuIHVwLgotCSAqLwotCSp0 c2RfdGhyZWFkX2FsbG9jYXRlZF9uZXh0X2V2ZW50X2Zhc3RwX2dldF91bnNhZmUodHNkKSA9IDA7 Ci0JKnRzZF90aHJlYWRfZGVhbGxvY2F0ZWRfbmV4dF9ldmVudF9mYXN0cF9nZXRfdW5zYWZlKHRz ZCkgPSAwOwotfQotCi0vKiBGb3IgbmV4dF9ldmVudC4gIFNldHRlciBhbHNvIHVwZGF0ZXMgdGhl IGZhc3QgdGhyZXNob2xkLiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB1aW50NjRfdAotdGVf Y3R4X25leHRfZXZlbnRfZ2V0KHRlX2N0eF90ICpjdHgpIHsKLQlyZXR1cm4gKmN0eC0+bmV4dF9l dmVudDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi10ZV9jdHhfbmV4dF9ldmVu dF9zZXQodHNkX3QgKnRzZCwgdGVfY3R4X3QgKmN0eCwgdWludDY0X3QgdikgewotCSpjdHgtPm5l eHRfZXZlbnQgPSB2OwotCXRlX3JlY29tcHV0ZV9mYXN0X3RocmVzaG9sZCh0c2QpOwotfQotCi0v KgotICogVGhlIGZ1bmN0aW9uIGNoZWNrcyBpbiBkZWJ1ZyBtb2RlIHdoZXRoZXIgdGhlIHRocmVh ZCBldmVudCBjb3VudGVycyBhcmUgaW4KLSAqIGEgY29uc2lzdGVudCBzdGF0ZSwgd2hpY2ggZm9y bXMgdGhlIGludmFyaWFudHMgYmVmb3JlIGFuZCBhZnRlciBlYWNoIHJvdW5kCi0gKiBvZiB0aHJl YWQgZXZlbnQgaGFuZGxpbmcgdGhhdCB3ZSBjYW4gcmVseSBvbiBhbmQgbmVlZCB0byBwcm9taXNl LgotICogVGhlIGludmFyaWFudHMgYXJlIG9ubHkgdGVtcG9yYXJpbHkgdmlvbGF0ZWQgaW4gdGhl IG1pZGRsZSBvZgotICogdGVfZXZlbnRfYWR2YW5jZSgpIGlmIGFuIGV2ZW50IGlzIHRyaWdnZXJl ZCAodGhlIHRlX2V2ZW50X3RyaWdnZXIoKSBjYWxsIGF0Ci0gKiB0aGUgZW5kIHdpbGwgcmVzdG9y ZSB0aGUgaW52YXJpYW50cykuCi0gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdGVf YXNzZXJ0X2ludmFyaWFudHModHNkX3QgKnRzZCkgewotCWlmIChjb25maWdfZGVidWcpIHsKLQkJ dGVfYXNzZXJ0X2ludmFyaWFudHNfZGVidWcodHNkKTsKLQl9Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdm9pZAotdGVfY3R4X2dldCh0c2RfdCAqdHNkLCB0ZV9jdHhfdCAqY3R4LCBib29s IGlzX2FsbG9jKSB7Ci0JY3R4LT5pc19hbGxvYyA9IGlzX2FsbG9jOwotCWlmIChpc19hbGxvYykg ewotCQljdHgtPmN1cnJlbnQgPSB0c2RfdGhyZWFkX2FsbG9jYXRlZHBfZ2V0KHRzZCk7Ci0JCWN0 eC0+bGFzdF9ldmVudCA9IHRzZF90aHJlYWRfYWxsb2NhdGVkX2xhc3RfZXZlbnRwX2dldCh0c2Qp OwotCQljdHgtPm5leHRfZXZlbnQgPSB0c2RfdGhyZWFkX2FsbG9jYXRlZF9uZXh0X2V2ZW50cF9n ZXQodHNkKTsKLQkJY3R4LT5uZXh0X2V2ZW50X2Zhc3QgPQotCQkgICAgdHNkX3RocmVhZF9hbGxv Y2F0ZWRfbmV4dF9ldmVudF9mYXN0cF9nZXQodHNkKTsKLQl9IGVsc2UgewotCQljdHgtPmN1cnJl bnQgPSB0c2RfdGhyZWFkX2RlYWxsb2NhdGVkcF9nZXQodHNkKTsKLQkJY3R4LT5sYXN0X2V2ZW50 ID0gdHNkX3RocmVhZF9kZWFsbG9jYXRlZF9sYXN0X2V2ZW50cF9nZXQodHNkKTsKLQkJY3R4LT5u ZXh0X2V2ZW50ID0gdHNkX3RocmVhZF9kZWFsbG9jYXRlZF9uZXh0X2V2ZW50cF9nZXQodHNkKTsK LQkJY3R4LT5uZXh0X2V2ZW50X2Zhc3QgPQotCQkgICAgdHNkX3RocmVhZF9kZWFsbG9jYXRlZF9u ZXh0X2V2ZW50X2Zhc3RwX2dldCh0c2QpOwotCX0KLX0KLQotLyoKLSAqIFRoZSBsb29rYWhlYWQg ZnVuY3Rpb25hbGl0eSBmYWNpbGl0YXRlcyBldmVudHMgdG8gYmUgYWJsZSB0byBsb29rYWhlYWQs IGkuZS4KLSAqIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGV2ZW50IGNvdW50ZXJzLCB0byBkZXRlcm1p bmUgd2hldGhlciBhbiBldmVudCB3b3VsZCBiZQotICogdHJpZ2dlcmVkLiAgVGhlIGV2ZW50IGNv dW50ZXJzIGFyZSBub3QgYWR2YW5jZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKLSAqIGFsbG9jYXRp b24gLyBkZWFsbG9jYXRpb24gY2FsbHMsIHNvIHRoZSBsb29rYWhlYWQgY2FuIGJlIHVzZWZ1bCBp ZiBzb21lCi0gKiBwcmVwYXJhdGlvbiB3b3JrIGZvciBzb21lIGV2ZW50IG11c3QgYmUgZG9uZSBl YXJseSBpbiB0aGUgYWxsb2NhdGlvbiAvCi0gKiBkZWFsbG9jYXRpb24gY2FsbHMuCi0gKgotICog Q3VycmVudGx5IG9ubHkgdGhlIHByb2ZpbGluZyBzYW1wbGluZyBldmVudCBuZWVkcyB0aGUgbG9v a2FoZWFkCi0gKiBmdW5jdGlvbmFsaXR5LCBzbyB3ZSBkb24ndCB5ZXQgZGVmaW5lIGdlbmVyYWwg cHVycG9zZSBsb29rYWhlYWQgZnVuY3Rpb25zLgotICoKLSAqIFN1cnBsdXMgaXMgYSB0ZXJtaW5v bG9neSByZWZlcnJpbmcgdG8gdGhlIGFtb3VudCBvZiBieXRlcyBiZXlvbmQgd2hhdCdzCi0gKiBu ZWVkZWQgZm9yIHRyaWdnZXJpbmcgYW4gZXZlbnQsIHdoaWNoIGNhbiBiZSBhIHVzZWZ1bCBxdWFu dGl0eSB0byBoYXZlIGluCi0gKiBnZW5lcmFsIHdoZW4gbG9va2FoZWFkIGlzIGJlaW5nIGNhbGxl ZC4KLSAqLwotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLXRlX3Byb2Zfc2FtcGxlX2V2 ZW50X2xvb2thaGVhZF9zdXJwbHVzKHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwKLSAgICBzaXpl X3QgKnN1cnBsdXMpIHsKLQlpZiAoc3VycGx1cyAhPSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFRoaXMg aXMgYSBkZWFkIHN0b3JlOiB0aGUgc3VycGx1cyB3aWxsIGJlIG92ZXJ3cml0dGVuIGJlZm9yZQot CQkgKiBhbnkgcmVhZC4gIFRoZSBpbml0aWFsaXphdGlvbiBzdXBwcmVzc2VzIGNvbXBpbGVyIHdh cm5pbmdzLgotCQkgKiBNZWFud2hpbGUsIHVzaW5nIFNJWkVfTUFYIHRvIGluaXRpYWxpemUgaXMg Z29vZCBmb3IKLQkJICogZGVidWdnaW5nIHB1cnBvc2UsIGJlY2F1c2UgYSB2YWxpZCBzdXJwbHVz IHZhbHVlIGlzIHN0cmljdGx5Ci0JCSAqIGxlc3MgdGhhbiB1c2l6ZSwgd2hpY2ggaXMgYXQgbW9z dCBTSVpFX01BWC4KLQkJICovCi0JCSpzdXJwbHVzID0gU0laRV9NQVg7Ci0JfQotCWlmICh1bmxp a2VseSghdHNkX25vbWluYWwodHNkKSB8fCB0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA+ IDApKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JLyogVGhlIHN1YnRyYWN0aW9uIGlzIGludGVu dGlvbmFsbHkgc3VzY2VwdGlibGUgdG8gdW5kZXJmbG93LiAqLwotCXVpbnQ2NF90IGFjY3VtYnl0 ZXMgPSB0c2RfdGhyZWFkX2FsbG9jYXRlZF9nZXQodHNkKSArIHVzaXplIC0KLQkgICAgdHNkX3Ro cmVhZF9hbGxvY2F0ZWRfbGFzdF9ldmVudF9nZXQodHNkKTsKLQl1aW50NjRfdCBzYW1wbGVfd2Fp dCA9IHRzZF9wcm9mX3NhbXBsZV9ldmVudF93YWl0X2dldCh0c2QpOwotCWlmIChhY2N1bWJ5dGVz IDwgc2FtcGxlX3dhaXQpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlhc3NlcnQoYWNjdW1ieXRl cyAtIHNhbXBsZV93YWl0IDwgKHVpbnQ2NF90KXVzaXplKTsKLQlpZiAoc3VycGx1cyAhPSBOVUxM KSB7Ci0JCSpzdXJwbHVzID0gKHNpemVfdCkoYWNjdW1ieXRlcyAtIHNhbXBsZV93YWl0KTsKLQl9 Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotdGVfcHJv Zl9zYW1wbGVfZXZlbnRfbG9va2FoZWFkKHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSkgewotCXJl dHVybiB0ZV9wcm9mX3NhbXBsZV9ldmVudF9sb29rYWhlYWRfc3VycGx1cyh0c2QsIHVzaXplLCBO VUxMKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi10ZV9ldmVudF9hZHZhbmNl KHRzZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwgYm9vbCBpc19hbGxvYykgewotCXRlX2Fzc2VydF9p bnZhcmlhbnRzKHRzZCk7Ci0KLQl0ZV9jdHhfdCBjdHg7Ci0JdGVfY3R4X2dldCh0c2QsICZjdHgs IGlzX2FsbG9jKTsKLQotCXVpbnQ2NF90IGJ5dGVzX2JlZm9yZSA9IHRlX2N0eF9jdXJyZW50X2J5 dGVzX2dldCgmY3R4KTsKLQl0ZV9jdHhfY3VycmVudF9ieXRlc19zZXQoJmN0eCwgYnl0ZXNfYmVm b3JlICsgdXNpemUpOwotCi0JLyogVGhlIHN1YnRyYWN0aW9uIGlzIGludGVudGlvbmFsbHkgc3Vz Y2VwdGlibGUgdG8gdW5kZXJmbG93LiAqLwotCWlmIChsaWtlbHkodXNpemUgPCB0ZV9jdHhfbmV4 dF9ldmVudF9nZXQoJmN0eCkgLSBieXRlc19iZWZvcmUpKSB7Ci0JCXRlX2Fzc2VydF9pbnZhcmlh bnRzKHRzZCk7Ci0JfSBlbHNlIHsKLQkJdGVfZXZlbnRfdHJpZ2dlcih0c2QsICZjdHgpOwotCX0K LX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi10aHJlYWRfZGFsbG9jX2V2ZW50KHRz ZF90ICp0c2QsIHNpemVfdCB1c2l6ZSkgewotCXRlX2V2ZW50X2FkdmFuY2UodHNkLCB1c2l6ZSwg ZmFsc2UpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXRocmVhZF9hbGxvY19l dmVudCh0c2RfdCAqdHNkLCBzaXplX3QgdXNpemUpIHsKLQl0ZV9ldmVudF9hZHZhbmNlKHRzZCwg dXNpemUsIHRydWUpOwotfQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfVEhSRUFEX0VW RU5UX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RpY2tlci5oIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90aWNrZXIu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI1MWRkZS4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2lu dGVybmFsL3RpY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLSNpZm5kZWYg SkVNQUxMT0NfSU5URVJOQUxfVElDS0VSX0gKLSNkZWZpbmUgSkVNQUxMT0NfSU5URVJOQUxfVElD S0VSX0gKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BybmcuaCIKLSNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC91dGlsLmgiCi0KLS8qKgotICogQSB0aWNrZXIgbWFrZXMgaXQgZWFz eSB0byBjb3VudC1kb3duIGV2ZW50cyB1bnRpbCBzb21lIGxpbWl0LiAgWW91Ci0gKiB0aWNrZXJf aW5pdCB0aGUgdGlja2VyIHRvIHRyaWdnZXIgZXZlcnkgbnRpY2tzIGV2ZW50cy4gIFlvdSB0aGVu IG5vdGlmeSBpdAotICogdGhhdCBhbiBldmVudCBoYXMgb2NjdXJyZWQgd2l0aCBjYWxscyB0byB0 aWNrZXJfdGljayAob3IgdGhhdCBudGlja3MgZXZlbnRzCi0gKiBoYXZlIG9jY3VycmVkIHdpdGgg YSBjYWxsIHRvIHRpY2tlcl90aWNrcyksIHdoaWNoIHdpbGwgcmV0dXJuIHRydWUgKGFuZCByZXNl dAotICogdGhlIGNvdW50ZXIpIGlmIHRoZSBjb3VudGRvd24gaGl0IHplcm8uCi0gKi8KLXR5cGVk ZWYgc3RydWN0IHRpY2tlcl9zIHRpY2tlcl90Owotc3RydWN0IHRpY2tlcl9zIHsKLQlpbnQzMl90 IHRpY2s7Ci0JaW50MzJfdCBudGlja3M7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXRpY2tl cl9pbml0KHRpY2tlcl90ICp0aWNrZXIsIGludDMyX3QgbnRpY2tzKSB7Ci0JdGlja2VyLT50aWNr ID0gbnRpY2tzOwotCXRpY2tlci0+bnRpY2tzID0gbnRpY2tzOwotfQotCi1zdGF0aWMgaW5saW5l IHZvaWQKLXRpY2tlcl9jb3B5KHRpY2tlcl90ICp0aWNrZXIsIGNvbnN0IHRpY2tlcl90ICpvdGhl cikgewotCSp0aWNrZXIgPSAqb3RoZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50MzJfdAotdGlj a2VyX3JlYWQoY29uc3QgdGlja2VyX3QgKnRpY2tlcikgewotCXJldHVybiB0aWNrZXItPnRpY2s7 Ci19Ci0KLS8qCi0gKiBOb3QgaW50ZW5kZWQgdG8gYmUgYSBwdWJsaWMgQVBJLiAgVW5mb3J0dW5h dGVseSwgb24geDg2LCBuZWl0aGVyIGdjYyBub3IKLSAqIGNsYW5nIHNlZW1zIHNtYXJ0IGVub3Vn aCB0byB0dXJuCi0gKiAgIHRpY2tlci0+dGljayAtPSBudGlja3M7Ci0gKiAgIGlmICh1bmxpa2Vs eSh0aWNrZXItPnRpY2sgPCAwKSkgewotICogICAgIGZpeHVwIHRpY2tlcgotICogICAgIHJldHVy biB0cnVlOwotICogICB9Ci0gKiAgIHJldHVybiBmYWxzZTsKLSAqIGludG8KLSAqICAgc3VicSAl bnRpY2tzX3JlZywgKCV0aWNrZXJfcmVnKQotICogICBqcyBmaXh1cCB0aWNrZXIKLSAqCi0gKiB1 bmxlc3Mgd2UgZm9yY2UgImZpeHVwIHRpY2tlciIgb3V0IG9mIGxpbmUuICBJbiB0aGF0IGNhc2Us IGdjYyBnZXRzIGl0IHJpZ2h0LAotICogYnV0IGNsYW5nIG5vdyBkb2VzIHdvcnNlIHRoYW4gYmVm b3JlLiAgU28sIG9uIHg4NiB3aXRoIGdjYywgd2UgZm9yY2UgaXQgb3V0Ci0gKiBvZiBsaW5lLCBi dXQgb3RoZXJ3aXNlIGxldCB0aGUgaW5saW5pbmcgb2NjdXIuICBPcmRpbmFyaWx5IHRoaXMgd291 bGRuJ3QgYmUKLSAqIHdvcnRoIHRoZSBoYXNzbGUsIGJ1dCB0aGlzIGlzIG9uIHRoZSBmYXN0IHBh dGggb2YgYm90aCBtYWxsb2MgYW5kIGZyZWUgKHZpYQotICogdGNhY2hlX2V2ZW50KS4KLSAqLwot I2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykJCQkJXAotICAgICYm IChkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pKQotSkVNQUxMT0NfTk9J TkxJTkUKLSNlbmRpZgotc3RhdGljIGJvb2wKLXRpY2tlcl9maXh1cCh0aWNrZXJfdCAqdGlja2Vy KSB7Ci0JdGlja2VyLT50aWNrID0gdGlja2VyLT5udGlja3M7Ci0JcmV0dXJuIHRydWU7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgYm9vbAotdGlja2VyX3RpY2tzKHRpY2tlcl90ICp0aWNrZXIsIGludDMy X3QgbnRpY2tzKSB7Ci0JdGlja2VyLT50aWNrIC09IG50aWNrczsKLQlpZiAodW5saWtlbHkodGlj a2VyLT50aWNrIDwgMCkpIHsKLQkJcmV0dXJuIHRpY2tlcl9maXh1cCh0aWNrZXIpOwotCX0KLQly ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotdGlja2VyX3RpY2sodGlja2Vy X3QgKnRpY2tlcikgewotCXJldHVybiB0aWNrZXJfdGlja3ModGlja2VyLCAxKTsKLX0KLQotLyoK LSAqIFRyeSB0byB0aWNrLiAgSWYgdGlja2VyIHdvdWxkIGZpcmUsIHJldHVybiB0cnVlLCBidXQg cmVseSBvbgotICogc2xvd3BhdGggdG8gcmVzZXQgdGlja2VyLgotICovCi1zdGF0aWMgaW5saW5l IGJvb2wKLXRpY2tlcl90cnl0aWNrKHRpY2tlcl90ICp0aWNrZXIpIHsKLQktLXRpY2tlci0+dGlj azsKLQlpZiAodW5saWtlbHkodGlja2VyLT50aWNrIDwgMCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0J fQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoKLSAqIFRoZSB0aWNrZXJfZ2VvbV90IGlzIG11Y2gg bGlrZSB0aGUgdGlja2VyX3QsIGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YgdGlja2VyCi0gKiBoYXZp bmcgYSBjb25zdGFudCBjb3VudGRvd24sIGl0IGhhcyBhbiBhcHByb3hpbWF0ZSBvbmU7IGVhY2gg dGljayBoYXMKLSAqIGFwcHJveGltYXRlbHkgYSAxL250aWNrcyBjaGFuY2Ugb2YgdHJpZ2dlcmlu ZyB0aGUgY291bnQuCi0gKgotICogVGhlIG1vdGl2YXRpb24gaXMgaW4gdHJpZ2dlcmluZyBhcmVu YSBkZWNheS4gIFdpdGggYSBuYWl2ZSBzdHJhdGVneSwgZWFjaAotICogdGhyZWFkIHdvdWxkIG1h aW50YWluIGEgdGlja2VyIHBlciBhcmVuYSwgYW5kIGNoZWNrIGlmIGRlY2F5IGlzIG5lY2Vzc2Fy eQotICogZWFjaCB0aW1lIHRoYXQgdGhlIGFyZW5hJ3MgdGlja2VyIGZpcmVzLiAgVGhpcyBoYXMg dHdvIGNvc3RzOgotICogLSBTaW5jZSB1bmRlciByZWFzb25hYmxlIGFzc3VtcHRpb25zIGJvdGgg dGhyZWFkcyBhbmQgYXJlbmFzIGNhbiBzY2FsZQotICogICBsaW5lYXJseSB3aXRoIHRoZSBudW1i ZXIgb2YgQ1BVcywgbWFpbnRhaW5pbmcgcGVyLWFyZW5hIGRhdGEgaW4gZWFjaCB0aHJlYWQKLSAq ICAgc2NhbGVzIHF1YWRyYXRpY2FsbHkgd2l0aCB0aGUgbnVtYmVyIG9mIENQVXMuCi0gKiAtIFRo ZXNlIHRpY2tlcnMgYXJlIG9mdGVuIGEgY2FjaGUgbWlzcyBkb3duIHRjYWNoZSBmbHVzaCBwYXRo d2F5cy4KLSAqCi0gKiBCeSBnaXZpbmcgZWFjaCB0aWNrIGEgMS9udGlja3MgY2hhbmNlIG9mIGZp cmluZywgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlIHNhbWUKLSAqIGF2ZXJhZ2UgbnVtYmVyIG9mIHRp Y2tzLXVudGlsLWZpcmluZyBwZXIgYXJlbmEsIHdpdGggb25seSBhIHNpbmdsZSB0aWNrZXIncwot ICogd29ydGggb2YgbWV0YWRhdGEuCi0gKi8KLQotLyogU2VlIHRpY2tlci5jIGZvciBhbiBleHBs YW5hdGlvbiBvZiB0aGVzZSBjb25zdGFudHMuICovCi0jZGVmaW5lIFRJQ0tFUl9HRU9NX05CSVRT IDYKLSNkZWZpbmUgVElDS0VSX0dFT01fTVVMIDYxCi1leHRlcm4gY29uc3QgdWludDhfdCB0aWNr ZXJfZ2VvbV90YWJsZVsxIDw8IFRJQ0tFUl9HRU9NX05CSVRTXTsKLQotLyogTm90IGFjdHVhbGx5 IGFueSBkaWZmZXJlbnQgZnJvbSB0aWNrZXJfdDsganVzdCBmb3IgdHlwZSBzYWZldHkuICovCi10 eXBlZGVmIHN0cnVjdCB0aWNrZXJfZ2VvbV9zIHRpY2tlcl9nZW9tX3Q7Ci1zdHJ1Y3QgdGlja2Vy X2dlb21fcyB7Ci0JaW50MzJfdCB0aWNrOwotCWludDMyX3QgbnRpY2tzOwotfTsKLQotLyoKLSAq IEp1c3QgcGljayB0aGUgYXZlcmFnZSBkZWxheSBmb3IgdGhlIGZpcnN0IGNvdW50ZXIuICBXZSdy ZSBtb3JlIGNvbmNlcm5lZCB3aXRoCi0gKiB0aGUgYmVoYXZpb3Igb3ZlciBsb25nIHBlcmlvZHMg b2YgdGltZSByYXRoZXIgdGhhbiB0aGUgZXhhY3QgdGltaW5nIG9mIHRoZQotICogaW5pdGlhbCB0 aWNrcy4KLSAqLwotI2RlZmluZSBUSUNLRVJfR0VPTV9JTklUKG50aWNrcykge250aWNrcywgbnRp Y2tzfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXRpY2tlcl9nZW9tX2luaXQodGlja2VyX2dlb21f dCAqdGlja2VyLCBpbnQzMl90IG50aWNrcykgewotCS8qCi0JICogTWFrZSBzdXJlIHRoZXJlJ3Mg bm8gb3ZlcmZsb3cgcG9zc2libGUuICBUaGlzIHNob3VsZG4ndCByZWFsbHkgYmUgYQotCSAqIHBy b2JsZW0gZm9yIHJlYXNvbmFibGUgbnRpY2tzIGNob2ljZXMsIHdoaWNoIGFyZSBhbGwgc3RhdGlj IGFuZAotCSAqIHJlbGF0aXZlbHkgc21hbGwuCi0JICovCi0JYXNzZXJ0KCh1aW50NjRfdCludGlj a3MgKiAodWludDY0X3QpMjU1IC8gKHVpbnQ2NF90KVRJQ0tFUl9HRU9NX01VTAotCSAgICA8PSAo dWludDY0X3QpSU5UMzJfTUFYKTsKLQl0aWNrZXItPnRpY2sgPSBudGlja3M7Ci0JdGlja2VyLT5u dGlja3MgPSBudGlja3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50MzJfdAotdGlja2VyX2dlb21f cmVhZChjb25zdCB0aWNrZXJfZ2VvbV90ICp0aWNrZXIpIHsKLQlyZXR1cm4gdGlja2VyLT50aWNr OwotfQotCi0vKiBTYW1lIGRlYWwgYXMgYWJvdmUuICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykg JiYgIWRlZmluZWQoX19jbGFuZ19fKQkJCQlcCi0gICAgJiYgKGRlZmluZWQoX194ODZfNjRfXykg fHwgZGVmaW5lZChfX2kzODZfXykpCi1KRU1BTExPQ19OT0lOTElORQotI2VuZGlmCi1zdGF0aWMg Ym9vbAotdGlja2VyX2dlb21fZml4dXAodGlja2VyX2dlb21fdCAqdGlja2VyLCB1aW50NjRfdCAq cHJuZ19zdGF0ZSkgewotCXVpbnQ2NF90IGlkeCA9IHBybmdfbGdfcmFuZ2VfdTY0KHBybmdfc3Rh dGUsIFRJQ0tFUl9HRU9NX05CSVRTKTsKLQl0aWNrZXItPnRpY2sgPSAodWludDMyX3QpKAotCSAg ICAodWludDY0X3QpdGlja2VyLT5udGlja3MgKiAodWludDY0X3QpdGlja2VyX2dlb21fdGFibGVb aWR4XQotCSAgICAvICh1aW50NjRfdClUSUNLRVJfR0VPTV9NVUwpOwotCXJldHVybiB0cnVlOwot fQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLXRpY2tlcl9nZW9tX3RpY2tzKHRpY2tlcl9nZW9tX3Qg KnRpY2tlciwgdWludDY0X3QgKnBybmdfc3RhdGUsIGludDMyX3QgbnRpY2tzKSB7Ci0JdGlja2Vy LT50aWNrIC09IG50aWNrczsKLQlpZiAodW5saWtlbHkodGlja2VyLT50aWNrIDwgMCkpIHsKLQkJ cmV0dXJuIHRpY2tlcl9nZW9tX2ZpeHVwKHRpY2tlciwgcHJuZ19zdGF0ZSk7Ci0JfQotCXJldHVy biBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi10aWNrZXJfZ2VvbV90aWNrKHRpY2tl cl9nZW9tX3QgKnRpY2tlciwgdWludDY0X3QgKnBybmdfc3RhdGUpIHsKLQlyZXR1cm4gdGlja2Vy X2dlb21fdGlja3ModGlja2VyLCBwcm5nX3N0YXRlLCAxKTsKLX0KLQotI2VuZGlmIC8qIEpFTUFM TE9DX0lOVEVSTkFMX1RJQ0tFUl9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2QuaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50 ZXJuYWwvdHNkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZDY4ODIuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9q ZW1hbGxvYy9pbnRlcm5hbC90c2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxOCArMCwwIEBACi0j aWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFM X1RTRF9ICi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hY3Rpdml0eV9jYWxsYmFjay5o IgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2FyZW5hX3R5cGVzLmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv YmluX3R5cGVzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfZXh0ZXJucy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BlYWsuaCIKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3R5cGVzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvcWwuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ydHJlZV90c2QuaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfdHlwZXMuaCIKLSNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC90Y2FjaGVfc3RydWN0cy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3V0aWwuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC93aXRuZXNzLmgiCi0K LS8qCi0gKiBUaHJlYWQtU3BlY2lmaWMtRGF0YSBsYXlvdXQKLSAqCi0gKiBBdCBsZWFzdCBzb21l IHRocmVhZC1sb2NhbCBkYXRhIGdldHMgdG91Y2hlZCBvbiB0aGUgZmFzdC1wYXRoIG9mIGFsbW9z dCBhbGwKLSAqIG1hbGxvYyBvcGVyYXRpb25zLiAgQnV0IG11Y2ggb2YgaXQgaXMgb25seSBuZWNl c3NhcnkgZG93biBzbG93LXBhdGhzLCBvcgotICogdGVzdGluZy4gIFdlIHdhbnQgdG8gY29sb2Nh dGUgdGhlIGZhc3QtcGF0aCBkYXRhIHNvIHRoYXQgaXQgY2FuIGxpdmUgb24gdGhlCi0gKiBzYW1l IGNhY2hlbGluZSBpZiBwb3NzaWJsZS4gIFNvIHdlIGRlZmluZSB0aHJlZSB0aWVycyBvZiBob3Ru ZXNzOgotICogVFNEX0RBVEFfRkFTVDogVG91Y2hlZCBvbiB0aGUgYWxsb2MvZGFsbG9jIGZhc3Qg cGF0aHMuCi0gKiBUU0RfREFUQV9TTE9XOiBUb3VjaGVkIGRvd24gc2xvdyBwYXRocy4gICJTbG93 IiBoZXJlIGlzIHNvcnQgb2YgZ2VuZXJhbDsKLSAqICAgICB0aGVyZSBhcmUgInNlbWktc2xvdyIg cGF0aHMgbGlrZSAibm90IGEgc2l6ZWQgZGVhbGxvY2F0aW9uLCBidXQgY2FuIHN0aWxsCi0gKiAg ICAgbGl2ZSBpbiB0aGUgdGNhY2hlIi4gIFdlJ2xsIHdhbnQgdG8ga2VlcCB0aGVzZSBjbG9zZXIg dG8gdGhlIGZhc3QtcGF0aAotICogICAgIGRhdGEuCi0gKiBUU0RfREFUQV9TTE9XRVI6IE9ubHkg dG91Y2hlZCBpbiB0ZXN0IG9yIGRlYnVnIG1vZGVzLCBvciBub3QgdG91Y2hlZCBhdCBhbGwuCi0g KgotICogQW4gYWRkaXRpb25hbCBjb25jZXJuIGlzIHRoYXQgdGhlIGxhcmdlciB0Y2FjaGUgYmlu cyB3b24ndCBiZSB1c2VkICh3ZSBoYXZlIGEKLSAqIGJpbiBwZXIgc2l6ZSBjbGFzcywgYnV0IGJ5 IGRlZmF1bHQgb25seSBjYWNoZSByZWxhdGl2ZWx5IHNtYWxsIG9iamVjdHMpLiAgU28KLSAqIHRo ZSBlYXJsaWVyIGJpbnMgYXJlIGluIHRoZSBUU0RfREFUQV9GQVNUIHRpZXIsIGJ1dCB0aGUgbGF0 ZXIgb25lcyBhcmUgaW4gdGhlCi0gKiBUU0RfREFUQV9TTE9XRVIgdGllci4KLSAqCi0gKiBBcyBh IHJlc3VsdCBvZiBhbGwgdGhpcywgd2UgcHV0IHRoZSBzbG93IGRhdGEgZmlyc3QsIHRoZW4gdGhl IGZhc3QgZGF0YSwgdGhlbgotICogdGhlIHNsb3dlciBkYXRhLCB3aGlsZSBrZWVwaW5nIHRoZSB0 Y2FjaGUgYXMgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgZmFzdAotICogZGF0YSAoc28gdGhhdCB0 aGUgZmFzdCAtPiBzbG93ZXIgdHJhbnNpdGlvbiBoYXBwZW5zIG1pZHdheSB0aHJvdWdoIHRoZQot ICogdGNhY2hlKS4gIFdoaWxlIHdlIGRvbid0IHlldCBwbGF5IGFsaWdubWVudCB0cmlja3MgdG8g Z3VhcmFudGVlIGl0LCB0aGlzCi0gKiBpbmNyZWFzZXMgb3VyIG9kZHMgb2YgZ2V0dGluZyBzb21l IGNhY2hlL3BhZ2UgbG9jYWxpdHkgb24gZmFzdCBwYXRocy4KLSAqLwotCi0jaWZkZWYgSkVNQUxM T0NfSkVUCi10eXBlZGVmIHZvaWQgKCp0ZXN0X2NhbGxiYWNrX3QpKGludCAqKTsKLSMgIGRlZmlu ZSBNQUxMT0NfVFNEX1RFU1RfREFUQV9JTklUIDB4NzJiNjVjMTAKLSMgIGRlZmluZSBNQUxMT0Nf VEVTVF9UU0QgXAotICAgIE8odGVzdF9kYXRhLAkJaW50LAkJCWludCkJCVwKLSAgICBPKHRlc3Rf Y2FsbGJhY2ssCQl0ZXN0X2NhbGxiYWNrX3QsCWludCkKLSMgIGRlZmluZSBNQUxMT0NfVEVTVF9U U0RfSU5JVElBTElaRVIgLCBNQUxMT0NfVFNEX1RFU1RfREFUQV9JTklULCBOVUxMCi0jZWxzZQot IyAgZGVmaW5lIE1BTExPQ19URVNUX1RTRAotIyAgZGVmaW5lIE1BTExPQ19URVNUX1RTRF9JTklU SUFMSVpFUgotI2VuZGlmCi0KLXR5cGVkZWYgcWxfZWxtKHRzZF90KSB0c2RfbGlua190OwotCi0v KiAgTyhuYW1lLAkJCXR5cGUsCQkJbnVsbGFibGUgdHlwZSkgKi8KLSNkZWZpbmUgVFNEX0RBVEFf U0xPVwkJCQkJCQlcCi0gICAgTyh0Y2FjaGVfZW5hYmxlZCwJCWJvb2wsCQkJYm9vbCkJCVwKLSAg ICBPKHJlZW50cmFuY3lfbGV2ZWwsCQlpbnQ4X3QsCQkJaW50OF90KQkJXAotICAgIE8odGhyZWFk X2FsbG9jYXRlZF9sYXN0X2V2ZW50LAl1aW50NjRfdCwJdWludDY0X3QpCVwKLSAgICBPKHRocmVh ZF9hbGxvY2F0ZWRfbmV4dF9ldmVudCwJdWludDY0X3QsCXVpbnQ2NF90KQlcCi0gICAgTyh0aHJl YWRfZGVhbGxvY2F0ZWRfbGFzdF9ldmVudCwJdWludDY0X3QsCXVpbnQ2NF90KQlcCi0gICAgTyh0 aHJlYWRfZGVhbGxvY2F0ZWRfbmV4dF9ldmVudCwJdWludDY0X3QsCXVpbnQ2NF90KQlcCi0gICAg Tyh0Y2FjaGVfZ2NfZXZlbnRfd2FpdCwJdWludDY0X3QsCQl1aW50NjRfdCkJXAotICAgIE8odGNh Y2hlX2djX2RhbGxvY19ldmVudF93YWl0LAl1aW50NjRfdCwJdWludDY0X3QpCVwKLSAgICBPKHBy b2Zfc2FtcGxlX2V2ZW50X3dhaXQsCXVpbnQ2NF90LAkJdWludDY0X3QpCVwKLSAgICBPKHByb2Zf c2FtcGxlX2xhc3RfZXZlbnQsCXVpbnQ2NF90LAkJdWludDY0X3QpCVwKLSAgICBPKHN0YXRzX2lu dGVydmFsX2V2ZW50X3dhaXQsCXVpbnQ2NF90LAl1aW50NjRfdCkJXAotICAgIE8oc3RhdHNfaW50 ZXJ2YWxfbGFzdF9ldmVudCwJdWludDY0X3QsCXVpbnQ2NF90KQlcCi0gICAgTyhwZWFrX2FsbG9j X2V2ZW50X3dhaXQsCXVpbnQ2NF90LAkJdWludDY0X3QpCVwKLSAgICBPKHBlYWtfZGFsbG9jX2V2 ZW50X3dhaXQsCXVpbnQ2NF90LAl1aW50NjRfdCkJCVwKLSAgICBPKHByb2ZfdGRhdGEsCQlwcm9m X3RkYXRhX3QgKiwJCXByb2ZfdGRhdGFfdCAqKQlcCi0gICAgTyhwcm5nX3N0YXRlLAkJdWludDY0 X3QsCQl1aW50NjRfdCkJXAotICAgIE8oc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfc21hbGwsCXVp bnQ2NF90LAl1aW50NjRfdCkJXAotICAgIE8oc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfbGFyZ2Us CXVpbnQ2NF90LAl1aW50NjRfdCkJXAotICAgIE8oaWFyZW5hLAkJCWFyZW5hX3QgKiwJCWFyZW5h X3QgKikJXAotICAgIE8oYXJlbmEsCQkJYXJlbmFfdCAqLAkJYXJlbmFfdCAqKQlcCi0gICAgTyhh cmVuYV9kZWNheV90aWNrZXIsCXRpY2tlcl9nZW9tX3QsCQl0aWNrZXJfZ2VvbV90KQlcCi0gICAg TyhzZWNfc2hhcmQsCQl1aW50OF90LAkJdWludDhfdCkJXAotICAgIE8oYmluc2hhcmRzLAkJdHNk X2JpbnNoYXJkc190LAl0c2RfYmluc2hhcmRzX3QpXAotICAgIE8odHNkX2xpbmssCQkJdHNkX2xp bmtfdCwJCXRzZF9saW5rX3QpCVwKLSAgICBPKGluX2hvb2ssCQkJYm9vbCwJCQlib29sKQkJXAot ICAgIE8ocGVhaywJCQlwZWFrX3QsCQkJcGVha190KQkJXAotICAgIE8oYWN0aXZpdHlfY2FsbGJh Y2tfdGh1bmssCWFjdGl2aXR5X2NhbGxiYWNrX3RodW5rX3QsCQlcCi0JYWN0aXZpdHlfY2FsbGJh Y2tfdGh1bmtfdCkJCQkJCVwKLSAgICBPKHRjYWNoZV9zbG93LAkJdGNhY2hlX3Nsb3dfdCwJCXRj YWNoZV9zbG93X3QpCVwKLSAgICBPKHJ0cmVlX2N0eCwJCXJ0cmVlX2N0eF90LAkJcnRyZWVfY3R4 X3QpCi0KLSNkZWZpbmUgVFNEX0RBVEFfU0xPV19JTklUSUFMSVpFUgkJCQkJXAotICAgIC8qIHRj YWNoZV9lbmFibGVkICovCVRDQUNIRV9FTkFCTEVEX1pFUk9fSU5JVElBTElaRVIsCVwKLSAgICAv KiByZWVudHJhbmN5X2xldmVsICovCTAsCQkJCQlcCi0gICAgLyogdGhyZWFkX2FsbG9jYXRlZF9s YXN0X2V2ZW50ICovCTAsCQkJCVwKLSAgICAvKiB0aHJlYWRfYWxsb2NhdGVkX25leHRfZXZlbnQg Ki8JMCwJCQkJXAotICAgIC8qIHRocmVhZF9kZWFsbG9jYXRlZF9sYXN0X2V2ZW50ICovCTAsCQkJ CVwKLSAgICAvKiB0aHJlYWRfZGVhbGxvY2F0ZWRfbmV4dF9ldmVudCAqLwkwLAkJCQlcCi0gICAg LyogdGNhY2hlX2djX2V2ZW50X3dhaXQgKi8JCTAsCQkJCVwKLSAgICAvKiB0Y2FjaGVfZ2NfZGFs bG9jX2V2ZW50X3dhaXQgKi8JMCwJCQkJXAotICAgIC8qIHByb2Zfc2FtcGxlX2V2ZW50X3dhaXQg Ki8JMCwJCQkJXAotICAgIC8qIHByb2Zfc2FtcGxlX2xhc3RfZXZlbnQgKi8JMCwJCQkJXAotICAg IC8qIHN0YXRzX2ludGVydmFsX2V2ZW50X3dhaXQgKi8JMCwJCQkJXAotICAgIC8qIHN0YXRzX2lu dGVydmFsX2xhc3RfZXZlbnQgKi8JMCwJCQkJXAotICAgIC8qIHBlYWtfYWxsb2NfZXZlbnRfd2Fp dCAqLwkJMCwJCQkJXAotICAgIC8qIHBlYWtfZGFsbG9jX2V2ZW50X3dhaXQgKi8JMCwJCQkJXAot ICAgIC8qIHByb2ZfdGRhdGEgKi8JCU5VTEwsCQkJCQlcCi0gICAgLyogcHJuZ19zdGF0ZSAqLwkJ MCwJCQkJCVwKLSAgICAvKiBzYW5fZXh0ZW50c191bnRpbF9ndWFyZF9zbWFsbCAqLwkwLAkJCQlc Ci0gICAgLyogc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfbGFyZ2UgKi8JMCwJCQkJXAotICAgIC8q IGlhcmVuYSAqLwkJTlVMTCwJCQkJCVwKLSAgICAvKiBhcmVuYSAqLwkJCU5VTEwsCQkJCQlcCi0g ICAgLyogYXJlbmFfZGVjYXlfdGlja2VyICovCQkJCQkJXAotCVRJQ0tFUl9HRU9NX0lOSVQoQVJF TkFfREVDQVlfTlRJQ0tTX1BFUl9VUERBVEUpLAkJXAotICAgIC8qIHNlY19zaGFyZCAqLwkJKHVp bnQ4X3QpLTEsCQkJCVwKLSAgICAvKiBiaW5zaGFyZHMgKi8JCVRTRF9CSU5TSEFSRFNfWkVST19J TklUSUFMSVpFUiwJCVwKLSAgICAvKiB0c2RfbGluayAqLwkJe05VTEx9LAkJCQkJXAotICAgIC8q IGluX2hvb2sgKi8JCWZhbHNlLAkJCQkJXAotICAgIC8qIHBlYWsgKi8JCQlQRUFLX0lOSVRJQUxJ WkVSLAkJCVwKLSAgICAvKiBhY3Rpdml0eV9jYWxsYmFja190aHVuayAqLwkJCQkJXAotCUFDVElW SVRZX0NBTExCQUNLX1RIVU5LX0lOSVRJQUxJWkVSLAkJCQlcCi0gICAgLyogdGNhY2hlX3Nsb3cg Ki8JCVRDQUNIRV9TTE9XX1pFUk9fSU5JVElBTElaRVIsCQlcCi0gICAgLyogcnRyZWVfY3R4ICov CQlSVFJFRV9DVFhfSU5JVElBTElaRVIsCi0KLS8qICBPKG5hbWUsCQkJdHlwZSwJCQludWxsYWJs ZSB0eXBlKSAqLwotI2RlZmluZSBUU0RfREFUQV9GQVNUCQkJCQkJCVwKLSAgICBPKHRocmVhZF9h bGxvY2F0ZWQsCQl1aW50NjRfdCwJCXVpbnQ2NF90KQlcCi0gICAgTyh0aHJlYWRfYWxsb2NhdGVk X25leHRfZXZlbnRfZmFzdCwJdWludDY0X3QsCXVpbnQ2NF90KQlcCi0gICAgTyh0aHJlYWRfZGVh bGxvY2F0ZWQsCXVpbnQ2NF90LAkJdWludDY0X3QpCVwKLSAgICBPKHRocmVhZF9kZWFsbG9jYXRl ZF9uZXh0X2V2ZW50X2Zhc3QsIHVpbnQ2NF90LAl1aW50NjRfdCkJXAotICAgIE8odGNhY2hlLAkJ CXRjYWNoZV90LAkJdGNhY2hlX3QpCi0KLSNkZWZpbmUgVFNEX0RBVEFfRkFTVF9JTklUSUFMSVpF UgkJCQkJXAotICAgIC8qIHRocmVhZF9hbGxvY2F0ZWQgKi8JMCwJCQkJCVwKLSAgICAvKiB0aHJl YWRfYWxsb2NhdGVkX25leHRfZXZlbnRfZmFzdCAqLyAwLCAJCQkJXAotICAgIC8qIHRocmVhZF9k ZWFsbG9jYXRlZCAqLwkwLAkJCQkJXAotICAgIC8qIHRocmVhZF9kZWFsbG9jYXRlZF9uZXh0X2V2 ZW50X2Zhc3QgKi8JMCwJCQlcCi0gICAgLyogdGNhY2hlICovCQlUQ0FDSEVfWkVST19JTklUSUFM SVpFUiwKLQotLyogIE8obmFtZSwJCQl0eXBlLAkJCW51bGxhYmxlIHR5cGUpICovCi0jZGVmaW5l IFRTRF9EQVRBX1NMT1dFUgkJCQkJCQlcCi0gICAgTyh3aXRuZXNzX3RzZCwgICAgICAgICAgICAg IHdpdG5lc3NfdHNkX3QsCQl3aXRuZXNzX3RzZG5fdCkJXAotICAgIE1BTExPQ19URVNUX1RTRAot Ci0jZGVmaW5lIFRTRF9EQVRBX1NMT1dFUl9JTklUSUFMSVpFUgkJCQkJXAotICAgIC8qIHdpdG5l c3MgKi8JCVdJVE5FU1NfVFNEX0lOSVRJQUxJWkVSCQkJXAotICAgIC8qIHRlc3QgZGF0YSAqLwkJ TUFMTE9DX1RFU1RfVFNEX0lOSVRJQUxJWkVSCi0KLQotI2RlZmluZSBUU0RfSU5JVElBTElaRVIg ewkJCQkJCVwKLSAgICAJCQkJVFNEX0RBVEFfU0xPV19JTklUSUFMSVpFUgkJXAotICAgIC8qIHN0 YXRlICovCQkJQVRPTUlDX0lOSVQodHNkX3N0YXRlX3VuaW5pdGlhbGl6ZWQpLAlcCi0gICAgCQkJ CVRTRF9EQVRBX0ZBU1RfSU5JVElBTElaRVIJCVwKLSAgICAJCQkJVFNEX0RBVEFfU0xPV0VSX0lO SVRJQUxJWkVSCQlcCi19Ci0KLSNpZiBkZWZpbmVkKEpFTUFMTE9DX01BTExPQ19USFJFQURfQ0xF QU5VUCkgfHwgZGVmaW5lZChfV0lOMzIpCi12b2lkIF9tYWxsb2NfdHNkX2NsZWFudXBfcmVnaXN0 ZXIoYm9vbCAoKmYpKHZvaWQpKTsKLSNlbmRpZgotCi12b2lkICptYWxsb2NfdHNkX21hbGxvYyhz aXplX3Qgc2l6ZSk7Ci12b2lkIG1hbGxvY190c2RfZGFsbG9jKHZvaWQgKndyYXBwZXIpOwotdHNk X3QgKm1hbGxvY190c2RfYm9vdDAodm9pZCk7Ci12b2lkIG1hbGxvY190c2RfYm9vdDEodm9pZCk7 Ci12b2lkIHRzZF9jbGVhbnVwKHZvaWQgKmFyZyk7Ci10c2RfdCAqdHNkX2ZldGNoX3Nsb3codHNk X3QgKnRzZCwgYm9vbCBpbnRlcm5hbCk7Ci12b2lkIHRzZF9zdGF0ZV9zZXQodHNkX3QgKnRzZCwg dWludDhfdCBuZXdfc3RhdGUpOwotdm9pZCB0c2Rfc2xvd191cGRhdGUodHNkX3QgKnRzZCk7Ci12 b2lkIHRzZF9wcmVmb3JrKHRzZF90ICp0c2QpOwotdm9pZCB0c2RfcG9zdGZvcmtfcGFyZW50KHRz ZF90ICp0c2QpOwotdm9pZCB0c2RfcG9zdGZvcmtfY2hpbGQodHNkX3QgKnRzZCk7Ci0KLS8qCi0g KiBDYWxsIC4uLl9pbmMgd2hlbiB5b3VyIG1vZHVsZSB3YW50cyB0byB0YWtlIGFsbCB0aHJlYWRz IGRvd24gdGhlIHNsb3cgcGF0aHMsCi0gKiBhbmQgLi4uX2RlYyB3aGVuIGl0IG5vIGxvbmdlciBu ZWVkcyB0by4KLSAqLwotdm9pZCB0c2RfZ2xvYmFsX3Nsb3dfaW5jKHRzZG5fdCAqdHNkbik7Ci12 b2lkIHRzZF9nbG9iYWxfc2xvd19kZWModHNkbl90ICp0c2RuKTsKLWJvb2wgdHNkX2dsb2JhbF9z bG93KCk7Ci0KLWVudW0gewotCS8qIENvbW1vbiBjYXNlIC0tPiBqbnouICovCi0JdHNkX3N0YXRl X25vbWluYWwgPSAwLAotCS8qIEluaXRpYWxpemVkIGJ1dCBvbiBzbG93IHBhdGguICovCi0JdHNk X3N0YXRlX25vbWluYWxfc2xvdyA9IDEsCi0JLyoKLQkgKiBTb21lIHRocmVhZCBoYXMgY2hhbmdl ZCBnbG9iYWwgc3RhdGUgaW4gc3VjaCBhIHdheSB0aGF0IGFsbCBub21pbmFsCi0JICogdGhyZWFk cyBuZWVkIHRvIHJlY29tcHV0ZSB0aGVpciBmYXN0IC8gc2xvdyBzdGF0dXMgdGhlIG5leHQgdGlt ZSB0aGV5Ci0JICogZ2V0IGEgY2hhbmNlLgotCSAqCi0JICogQW55IHRocmVhZCBjYW4gY2hhbmdl IGFub3RoZXIgdGhyZWFkJ3Mgc3RhdHVzICp0byogcmVjb21wdXRlLCBidXQKLQkgKiB0aHJlYWRz IGFyZSB0aGUgb25seSBvbmVzIHdobyBjYW4gY2hhbmdlIHRoZWlyIHN0YXR1cyAqZnJvbSoKLQkg KiByZWNvbXB1dGUuCi0JICovCi0JdHNkX3N0YXRlX25vbWluYWxfcmVjb21wdXRlID0gMiwKLQkv KgotCSAqIFRoZSBhYm92ZSBub21pbmFsIHN0YXRlcyBzaG91bGQgYmUgbG93ZXIgdmFsdWVzLiAg V2UgdXNlCi0JICogdHNkX25vbWluYWxfbWF4IHRvIHNlcGFyYXRlIG5vbWluYWwgc3RhdGVzIGZy b20gdGhyZWFkcyBpbiB0aGUKLQkgKiBwcm9jZXNzIG9mIGJlaW5nIGJvcm4gLyBkeWluZy4KLQkg Ki8KLQl0c2Rfc3RhdGVfbm9taW5hbF9tYXggPSAyLAotCi0JLyoKLQkgKiBBIHRocmVhZCBtaWdo dCBmcmVlKCkgZHVyaW5nIGl0cyBkZWF0aCBhcyBpdHMgb25seSBhbGxvY2F0b3IgYWN0aW9uOwot CSAqIGluIHN1Y2ggc2NlbmFyaW9zLCB3ZSBuZWVkIHRzZCwgYnV0IHNldCB1cCBpbiBzdWNoIGEg d2F5IHRoYXQgbm8KLQkgKiBjbGVhbnVwIGlzIG5lY2Vzc2FyeS4KLQkgKi8KLQl0c2Rfc3RhdGVf bWluaW1hbF9pbml0aWFsaXplZCA9IDMsCi0JLyogU3RhdGVzIGR1cmluZyB3aGljaCB3ZSBrbm93 IHdlJ3JlIGluIHRocmVhZCBkZWF0aC4gKi8KLQl0c2Rfc3RhdGVfcHVyZ2F0b3J5ID0gNCwKLQl0 c2Rfc3RhdGVfcmVpbmNhcm5hdGVkID0gNSwKLQkvKgotCSAqIFdoYXQgaXQgc2F5cyBvbiB0aGUg dGluOyB0c2QgdGhhdCBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZC4gIE5vdGUKLQkgKiB0aGF0IGV2 ZW4gd2hlbiB0aGUgdHNkIHN0cnVjdCBsaXZlcyBpbiBUTFMsIHdoZW4gbmVlZCB0byBrZWVwIHRy YWNrCi0JICogb2Ygc3R1ZmYgbGlrZSB3aGV0aGVyIG9yIG5vdCBvdXIgcHRocmVhZCBkZXN0cnVj dG9ycyBoYXZlIGJlZW4KLQkgKiBzY2hlZHVsZWQsIHNvIHRoaXMgcmVhbGx5IHRydWx5IGlzIGRp ZmZlcmVudCB0aGFuIHRoZSBub21pbmFsIHN0YXRlLgotCSAqLwotCXRzZF9zdGF0ZV91bmluaXRp YWxpemVkID0gNgotfTsKLQotLyoKLSAqIFNvbWUgVFNEIGFjY2Vzc2VzIGNhbiBvbmx5IGJlIGRv bmUgaW4gYSBub21pbmFsIHN0YXRlLiAgVG8gZW5mb3JjZSB0aGlzLCB3ZQotICogd3JhcCBUU0Qg bWVtYmVyIGFjY2VzcyBpbiBhIGZ1bmN0aW9uIHRoYXQgYXNzZXJ0cyBvbiBUU0Qgc3RhdGUsIGFu ZCBtYW5nbGUKLSAqIGZpZWxkIG5hbWVzIHRvIHByZXZlbnQgdG91Y2hpbmcgdGhlbSBhY2NpZGVu dGFsbHkuCi0gKi8KLSNkZWZpbmUgVFNEX01BTkdMRShuKSBjYW50X2FjY2Vzc190c2RfaXRlbXNf ZGlyZWN0bHlfdXNlX2FfZ2V0dGVyX29yX3NldHRlcl8jI24KLQotI2lmZGVmIEpFTUFMTE9DX1U4 X0FUT01JQ1MKLSMgIGRlZmluZSB0c2Rfc3RhdGVfdCBhdG9taWNfdThfdAotIyAgZGVmaW5lIHRz ZF9hdG9taWNfbG9hZCBhdG9taWNfbG9hZF91OAotIyAgZGVmaW5lIHRzZF9hdG9taWNfc3RvcmUg YXRvbWljX3N0b3JlX3U4Ci0jICBkZWZpbmUgdHNkX2F0b21pY19leGNoYW5nZSBhdG9taWNfZXhj aGFuZ2VfdTgKLSNlbHNlCi0jICBkZWZpbmUgdHNkX3N0YXRlX3QgYXRvbWljX3UzMl90Ci0jICBk ZWZpbmUgdHNkX2F0b21pY19sb2FkIGF0b21pY19sb2FkX3UzMgotIyAgZGVmaW5lIHRzZF9hdG9t aWNfc3RvcmUgYXRvbWljX3N0b3JlX3UzMgotIyAgZGVmaW5lIHRzZF9hdG9taWNfZXhjaGFuZ2Ug YXRvbWljX2V4Y2hhbmdlX3UzMgotI2VuZGlmCi0KLS8qIFRoZSBhY3R1YWwgdHNkLiAqLwotc3Ry dWN0IHRzZF9zIHsKLQkvKgotCSAqIFRoZSBjb250ZW50cyBzaG91bGQgYmUgdHJlYXRlZCBhcyB0 b3RhbGx5IG9wYXF1ZSBvdXRzaWRlIHRoZSB0c2QKLQkgKiBtb2R1bGUuICBBY2Nlc3MgYW55IHRo cmVhZC1sb2NhbCBzdGF0ZSB0aHJvdWdoIHRoZSBnZXR0ZXJzIGFuZAotCSAqIHNldHRlcnMgYmVs b3cuCi0JICovCi0KLSNkZWZpbmUgTyhuLCB0LCBudCkJCQkJCQkJXAotCXQgVFNEX01BTkdMRShu KTsKLQotCVRTRF9EQVRBX1NMT1cKLQkvKgotCSAqIFdlIG1hbnVhbGx5IGxpbWl0IHRoZSBzdGF0 ZSB0byBqdXN0IGEgc2luZ2xlIGJ5dGUuICBVbmxlc3MgdGhlIDgtYml0Ci0JICogYXRvbWljcyBh cmUgdW5hdmFpbGFibGUgKHdoaWNoIGlzIHJhcmUpLgotCSAqLwotCXRzZF9zdGF0ZV90IHN0YXRl OwotCVRTRF9EQVRBX0ZBU1QKLQlUU0RfREFUQV9TTE9XRVIKLSN1bmRlZiBPCi19OwotCi1KRU1B TExPQ19BTFdBWVNfSU5MSU5FIHVpbnQ4X3QKLXRzZF9zdGF0ZV9nZXQodHNkX3QgKnRzZCkgewot CS8qCi0JICogVGhpcyBzaG91bGQgYmUgYXRvbWljLiAgVW5mb3J0dW5hdGVseSwgY29tcGlsZXJz IHJpZ2h0IG5vdyBjYW4ndCB0ZWxsCi0JICogdGhhdCB0aGlzIGNhbiBiZSBkb25lIGFzIGEgbWVt b3J5IGNvbXBhcmlzb24sIGFuZCBmb3JjZXMgYSBsb2FkIGludG8KLQkgKiBhIHJlZ2lzdGVyIHRo YXQgaHVydHMgZmFzdC1wYXRoIHBlcmZvcm1hbmNlLgotCSAqLwotCS8qIHJldHVybiBhdG9taWNf bG9hZF91OCgmdHNkLT5zdGF0ZSwgQVRPTUlDX1JFTEFYRUQpOyAqLwotCXJldHVybiAqKHVpbnQ4 X3QgKikmdHNkLT5zdGF0ZTsKLX0KLQotLyoKLSAqIFdyYXBwZXIgYXJvdW5kIHRzZF90IHRoYXQg bWFrZXMgaXQgcG9zc2libGUgdG8gYXZvaWQgaW1wbGljaXQgY29udmVyc2lvbgotICogYmV0d2Vl biB0c2RfdCBhbmQgdHNkbl90LCB3aGVyZSB0c2RuX3QgaXMgIm51bGxhYmxlIiBhbmQgaGFzIHRv IGJlCi0gKiBleHBsaWNpdGx5IGNvbnZlcnRlZCB0byB0c2RfdCwgd2hpY2ggaXMgbm9uLW51bGxh YmxlLgotICovCi1zdHJ1Y3QgdHNkbl9zIHsKLQl0c2RfdCB0c2Q7Ci19OwotI2RlZmluZSBUU0RO X05VTEwgKCh0c2RuX3QgKikwKQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB0c2RuX3QgKgotdHNk X3RzZG4odHNkX3QgKnRzZCkgewotCXJldHVybiAodHNkbl90ICopdHNkOwotfQotCi1KRU1BTExP Q19BTFdBWVNfSU5MSU5FIGJvb2wKLXRzZG5fbnVsbChjb25zdCB0c2RuX3QgKnRzZG4pIHsKLQly ZXR1cm4gdHNkbiA9PSBOVUxMOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF90ICoK LXRzZG5fdHNkKHRzZG5fdCAqdHNkbikgewotCWFzc2VydCghdHNkbl9udWxsKHRzZG4pKTsKLQot CXJldHVybiAmdHNkbi0+dHNkOwotfQotCi0vKgotICogV2UgcHV0IHRoZSBwbGF0Zm9ybS1zcGVj aWZpYyBkYXRhIGRlY2xhcmF0aW9ucyBhbmQgaW5saW5lcyBpbnRvIHRoZWlyIG93bgotICogaGVh ZGVyIGZpbGVzIHRvIGF2b2lkIGNsdXR0ZXJpbmcgdGhpcyBmaWxlLiAgVGhleSBkZWZpbmUgdHNk X2Jvb3QwLAotICogdHNkX2Jvb3QxLCB0c2RfYm9vdCwgdHNkX2Jvb3RlZF9nZXQsIHRzZF9nZXRf YWxsb2NhdGVzLCB0c2RfZ2V0LCBhbmQgdHNkX3NldC4KLSAqLwotI2lmZGVmIEpFTUFMTE9DX01B TExPQ19USFJFQURfQ0xFQU5VUAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3RzZF9tYWxs b2NfdGhyZWFkX2NsZWFudXAuaCIKLSNlbGlmIChkZWZpbmVkKEpFTUFMTE9DX1RMUykpCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdHNkX3Rscy5oIgotI2VsaWYgKGRlZmluZWQoX1dJTjMy KSkKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90c2Rfd2luLmgiCi0jZWxzZQotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3RzZF9nZW5lcmljLmgiCi0jZW5kaWYKLQotLyoKLSAqIHRz ZF9mb29wX2dldF91bnNhZmUodHNkKSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdGhyZWFkLWxv Y2FsIGluc3RhbmNlIG9mCi0gKiBmb28uICBUaGlzIG9taXRzIHNvbWUgc2FmZXR5IGNoZWNrcywg YW5kIHNvIGNhbiBiZSB1c2VkIGR1cmluZyB0c2QKLSAqIGluaXRpYWxpemF0aW9uIGFuZCBjbGVh bnVwLgotICovCi0jZGVmaW5lIE8obiwgdCwgbnQpCQkJCQkJCVwKLUpFTUFMTE9DX0FMV0FZU19J TkxJTkUgdCAqCQkJCQkJXAotdHNkXyMjbiMjcF9nZXRfdW5zYWZlKHRzZF90ICp0c2QpIHsJCQkJ CVwKLQlyZXR1cm4gJnRzZC0+VFNEX01BTkdMRShuKTsJCQkJCVwKLX0KLVRTRF9EQVRBX1NMT1cK LVRTRF9EQVRBX0ZBU1QKLVRTRF9EQVRBX1NMT1dFUgotI3VuZGVmIE8KLQotLyogdHNkX2Zvb3Bf Z2V0KHRzZCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHRocmVhZC1sb2NhbCBpbnN0YW5jZSBv ZiBmb28uICovCi0jZGVmaW5lIE8obiwgdCwgbnQpCQkJCQkJCVwKLUpFTUFMTE9DX0FMV0FZU19J TkxJTkUgdCAqCQkJCQkJXAotdHNkXyMjbiMjcF9nZXQodHNkX3QgKnRzZCkgewkJCQkJCVwKLQkv KgkJCQkJCQkJXAotCSAqIEJlY2F1c2UgdGhlIHN0YXRlIG1pZ2h0IGNoYW5nZSBhc3luY2hyb25v dXNseSBpZiBpdCdzCVwKLQkgKiBub21pbmFsLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdl IG9ubHkgcmVhZCBpdCBvbmNlLglcCi0JICovCQkJCQkJCQlcCi0JdWludDhfdCBzdGF0ZSA9IHRz ZF9zdGF0ZV9nZXQodHNkKTsJCQkJXAotCWFzc2VydChzdGF0ZSA9PSB0c2Rfc3RhdGVfbm9taW5h bCB8fAkJCQlcCi0JICAgIHN0YXRlID09IHRzZF9zdGF0ZV9ub21pbmFsX3Nsb3cgfHwJCQkJXAot CSAgICBzdGF0ZSA9PSB0c2Rfc3RhdGVfbm9taW5hbF9yZWNvbXB1dGUgfHwJCQlcCi0JICAgIHN0 YXRlID09IHRzZF9zdGF0ZV9yZWluY2FybmF0ZWQgfHwJCQkJXAotCSAgICBzdGF0ZSA9PSB0c2Rf c3RhdGVfbWluaW1hbF9pbml0aWFsaXplZCk7CQkJXAotCXJldHVybiB0c2RfIyNuIyNwX2dldF91 bnNhZmUodHNkKTsJCQkJXAotfQotVFNEX0RBVEFfU0xPVwotVFNEX0RBVEFfRkFTVAotVFNEX0RB VEFfU0xPV0VSCi0jdW5kZWYgTwotCi0vKgotICogdHNkbl9mb29wX2dldCh0c2RuKSByZXR1cm5z IGVpdGhlciB0aGUgdGhyZWFkLWxvY2FsIGluc3RhbmNlIG9mIGZvbyAoaWYgdHNkbgotICogaXNu J3QgTlVMTCksIG9yIE5VTEwgKGlmIHRzZG4gaXMgTlVMTCksIGNhc3QgdG8gdGhlIG51bGxhYmxl IHBvaW50ZXIgdHlwZS4KLSAqLwotI2RlZmluZSBPKG4sIHQsIG50KQkJCQkJCQlcCi1KRU1BTExP Q19BTFdBWVNfSU5MSU5FIG50ICoJCQkJCQlcCi10c2RuXyMjbiMjcF9nZXQodHNkbl90ICp0c2Ru KSB7CQkJCQkJXAotCWlmICh0c2RuX251bGwodHNkbikpIHsJCQkJCQlcCi0JCXJldHVybiBOVUxM OwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JdHNkX3QgKnRzZCA9IHRzZG5fdHNkKHRzZG4pOwkJCQkJ XAotCXJldHVybiAobnQgKil0c2RfIyNuIyNwX2dldCh0c2QpOwkJCQlcCi19Ci1UU0RfREFUQV9T TE9XCi1UU0RfREFUQV9GQVNUCi1UU0RfREFUQV9TTE9XRVIKLSN1bmRlZiBPCi0KLS8qIHRzZF9m b29fZ2V0KHRzZCkgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHRocmVhZC1sb2NhbCBpbnN0YW5j ZSBvZiBmb28uICovCi0jZGVmaW5lIE8obiwgdCwgbnQpCQkJCQkJCVwKLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdAkJCQkJCVwKLXRzZF8jI24jI19nZXQodHNkX3QgKnRzZCkgewkJCQkJCVwKLQly ZXR1cm4gKnRzZF8jI24jI3BfZ2V0KHRzZCk7CQkJCQlcCi19Ci1UU0RfREFUQV9TTE9XCi1UU0Rf REFUQV9GQVNUCi1UU0RfREFUQV9TTE9XRVIKLSN1bmRlZiBPCi0KLS8qIHRzZF9mb29fc2V0KHRz ZCwgdmFsKSB1cGRhdGVzIHRoZSB0aHJlYWQtbG9jYWwgaW5zdGFuY2Ugb2YgZm9vIHRvIGJlIHZh bC4gKi8KLSNkZWZpbmUgTyhuLCB0LCBudCkJCQkJCQkJXAotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSB2b2lkCQkJCQkJXAotdHNkXyMjbiMjX3NldCh0c2RfdCAqdHNkLCB0IHZhbCkgewkJCQkJXAot CWFzc2VydCh0c2Rfc3RhdGVfZ2V0KHRzZCkgIT0gdHNkX3N0YXRlX3JlaW5jYXJuYXRlZCAmJgkJ XAotCSAgICB0c2Rfc3RhdGVfZ2V0KHRzZCkgIT0gdHNkX3N0YXRlX21pbmltYWxfaW5pdGlhbGl6 ZWQpOwlcCi0JKnRzZF8jI24jI3BfZ2V0KHRzZCkgPSB2YWw7CQkJCQlcCi19Ci1UU0RfREFUQV9T TE9XCi1UU0RfREFUQV9GQVNUCi1UU0RfREFUQV9TTE9XRVIKLSN1bmRlZiBPCi0KLUpFTUFMTE9D X0FMV0FZU19JTkxJTkUgdm9pZAotdHNkX2Fzc2VydF9mYXN0KHRzZF90ICp0c2QpIHsKLQkvKgot CSAqIE5vdGUgdGhhdCBvdXIgZmFzdG5lc3MgYXNzZXJ0aW9uIGRvZXMgKm5vdCogaW5jbHVkZSBn bG9iYWwgc2xvd25lc3MKLQkgKiBjb3VudGVyczsgaXQncyBub3QgaW4gZ2VuZXJhbCBwb3NzaWJs ZSB0byBlbnN1cmUgdGhhdCB0aGV5IHdvbid0Ci0JICogY2hhbmdlIGFzeW5jaHJvbm91c2x5IGZy b20gdW5kZXJuZWF0aCB1cy4KLQkgKi8KLQlhc3NlcnQoIW1hbGxvY19zbG93ICYmIHRzZF90Y2Fj aGVfZW5hYmxlZF9nZXQodHNkKSAmJgotCSAgICB0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNk KSA9PSAwKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi10c2RfZmFzdCh0c2Rf dCAqdHNkKSB7Ci0JYm9vbCBmYXN0ID0gKHRzZF9zdGF0ZV9nZXQodHNkKSA9PSB0c2Rfc3RhdGVf bm9taW5hbCk7Ci0JaWYgKGZhc3QpIHsKLQkJdHNkX2Fzc2VydF9mYXN0KHRzZCk7Ci0JfQotCi0J cmV0dXJuIGZhc3Q7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdHNkX3QgKgotdHNkX2Zl dGNoX2ltcGwoYm9vbCBpbml0LCBib29sIG1pbmltYWwpIHsKLQl0c2RfdCAqdHNkID0gdHNkX2dl dChpbml0KTsKLQotCWlmICghaW5pdCAmJiB0c2RfZ2V0X2FsbG9jYXRlcygpICYmIHRzZCA9PSBO VUxMKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlhc3NlcnQodHNkICE9IE5VTEwpOwotCi0JaWYg KHVubGlrZWx5KHRzZF9zdGF0ZV9nZXQodHNkKSAhPSB0c2Rfc3RhdGVfbm9taW5hbCkpIHsKLQkJ cmV0dXJuIHRzZF9mZXRjaF9zbG93KHRzZCwgbWluaW1hbCk7Ci0JfQotCWFzc2VydCh0c2RfZmFz dCh0c2QpKTsKLQl0c2RfYXNzZXJ0X2Zhc3QodHNkKTsKLQotCXJldHVybiB0c2Q7Ci19Ci0KLS8q IEdldCBhIG1pbmltYWwgVFNEIHRoYXQgcmVxdWlyZXMgbm8gY2xlYW51cC4gIFNlZSBjb21tZW50 cyBpbiBmcmVlKCkuICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF90ICoKLXRzZF9mZXRj aF9taW4odm9pZCkgewotCXJldHVybiB0c2RfZmV0Y2hfaW1wbCh0cnVlLCB0cnVlKTsKLX0KLQot LyogRm9yIGludGVybmFsIGJhY2tncm91bmQgdGhyZWFkcyB1c2Ugb25seS4gKi8KLUpFTUFMTE9D X0FMV0FZU19JTkxJTkUgdHNkX3QgKgotdHNkX2ludGVybmFsX2ZldGNoKHZvaWQpIHsKLQl0c2Rf dCAqdHNkID0gdHNkX2ZldGNoX21pbigpOwotCS8qIFVzZSByZWluY2FybmF0ZWQgc3RhdGUgdG8g cHJldmVudCBmdWxsIGluaXRpYWxpemF0aW9uLiAqLwotCXRzZF9zdGF0ZV9zZXQodHNkLCB0c2Rf c3RhdGVfcmVpbmNhcm5hdGVkKTsKLQotCXJldHVybiB0c2Q7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdHNkX3QgKgotdHNkX2ZldGNoKHZvaWQpIHsKLQlyZXR1cm4gdHNkX2ZldGNoX2lt cGwodHJ1ZSwgZmFsc2UpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLXRzZF9ub21pbmFsKHRz ZF90ICp0c2QpIHsKLQlib29sIG5vbWluYWwgPSB0c2Rfc3RhdGVfZ2V0KHRzZCkgPD0gdHNkX3N0 YXRlX25vbWluYWxfbWF4OwotCWFzc2VydChub21pbmFsIHx8IHRzZF9yZWVudHJhbmN5X2xldmVs X2dldCh0c2QpID4gMCk7Ci0KLQlyZXR1cm4gbm9taW5hbDsKLX0KLQotSkVNQUxMT0NfQUxXQVlT X0lOTElORSB0c2RuX3QgKgotdHNkbl9mZXRjaCh2b2lkKSB7Ci0JaWYgKCF0c2RfYm9vdGVkX2dl dCgpKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiB0c2RfdHNkbih0c2RfZmV0Y2hf aW1wbChmYWxzZSwgZmFsc2UpKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBydHJlZV9j dHhfdCAqCi10c2RfcnRyZWVfY3R4KHRzZF90ICp0c2QpIHsKLQlyZXR1cm4gdHNkX3J0cmVlX2N0 eHBfZ2V0KHRzZCk7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgcnRyZWVfY3R4X3QgKgot dHNkbl9ydHJlZV9jdHgodHNkbl90ICp0c2RuLCBydHJlZV9jdHhfdCAqZmFsbGJhY2spIHsKLQkv KgotCSAqIElmIHRzZCBjYW5ub3QgYmUgYWNjZXNzZWQsIGluaXRpYWxpemUgdGhlIGZhbGxiYWNr IHJ0cmVlX2N0eCBhbmQKLQkgKiByZXR1cm4gYSBwb2ludGVyIHRvIGl0LgotCSAqLwotCWlmICh1 bmxpa2VseSh0c2RuX251bGwodHNkbikpKSB7Ci0JCXJ0cmVlX2N0eF9kYXRhX2luaXQoZmFsbGJh Y2spOwotCQlyZXR1cm4gZmFsbGJhY2s7Ci0JfQotCXJldHVybiB0c2RfcnRyZWVfY3R4KHRzZG5f dHNkKHRzZG4pKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi10c2Rfc3RhdGVfbm9jbGVhbnVw KHRzZF90ICp0c2QpIHsKLQlyZXR1cm4gdHNkX3N0YXRlX2dldCh0c2QpID09IHRzZF9zdGF0ZV9y ZWluY2FybmF0ZWQgfHwKLQkgICAgdHNkX3N0YXRlX2dldCh0c2QpID09IHRzZF9zdGF0ZV9taW5p bWFsX2luaXRpYWxpemVkOwotfQotCi0vKgotICogVGhlc2UgInJhdyIgdHNkIHJlZW50cmFuY3kg ZnVuY3Rpb25zIGRvbid0IGhhdmUgYW55IGRlYnVnIGNoZWNraW5nIHRvIG1ha2UKLSAqIHN1cmUg dGhhdCB3ZSdyZSBub3QgdG91Y2hpbmcgYXJlbmEgMC4gIEJldHRlciBpcyB0byBjYWxsIHByZV9y ZWVudHJhbmN5IGFuZAotICogcG9zdF9yZWVudHJhbmN5IGlmIHRoaXMgaXMgcG9zc2libGUuCi0g Ki8KLXN0YXRpYyBpbmxpbmUgdm9pZAotdHNkX3ByZV9yZWVudHJhbmN5X3Jhdyh0c2RfdCAqdHNk KSB7Ci0JYm9vbCBmYXN0ID0gdHNkX2Zhc3QodHNkKTsKLQlhc3NlcnQodHNkX3JlZW50cmFuY3lf bGV2ZWxfZ2V0KHRzZCkgPCBJTlQ4X01BWCk7Ci0JKysqdHNkX3JlZW50cmFuY3lfbGV2ZWxwX2dl dCh0c2QpOwotCWlmIChmYXN0KSB7Ci0JCS8qIFByZXBhcmUgc2xvdyBwYXRoIGZvciByZWVudHJh bmN5LiAqLwotCQl0c2Rfc2xvd191cGRhdGUodHNkKTsKLQkJYXNzZXJ0KHRzZF9zdGF0ZV9nZXQo dHNkKSA9PSB0c2Rfc3RhdGVfbm9taW5hbF9zbG93KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUg dm9pZAotdHNkX3Bvc3RfcmVlbnRyYW5jeV9yYXcodHNkX3QgKnRzZCkgewotCWludDhfdCAqcmVl bnRyYW5jeV9sZXZlbCA9IHRzZF9yZWVudHJhbmN5X2xldmVscF9nZXQodHNkKTsKLQlhc3NlcnQo KnJlZW50cmFuY3lfbGV2ZWwgPiAwKTsKLQlpZiAoLS0qcmVlbnRyYW5jeV9sZXZlbCA9PSAwKSB7 Ci0JCXRzZF9zbG93X3VwZGF0ZSh0c2QpOwotCX0KLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX0lO VEVSTkFMX1RTRF9IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2RfZ2VuZXJpYy5oIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRl cm5hbC90c2RfZ2VuZXJpYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzE4NDcy Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX2dlbmVyaWMuaAorKysgL2Rldi9udWxsCkBAIC0x LDE4MiArMCwwIEBACi0jaWZkZWYgSkVNQUxMT0NfSU5URVJOQUxfVFNEX0dFTkVSSUNfSAotI2Vy cm9yIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgb25seSBvbmNlLCBieSB0c2QuaC4KLSNl bmRpZgotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9UU0RfR0VORVJJQ19ICi0KLXR5cGVkZWYg c3RydWN0IHRzZF9pbml0X2Jsb2NrX3MgdHNkX2luaXRfYmxvY2tfdDsKLXN0cnVjdCB0c2RfaW5p dF9ibG9ja19zIHsKLQlxbF9lbG0odHNkX2luaXRfYmxvY2tfdCkgbGluazsKLQlwdGhyZWFkX3Qg dGhyZWFkOwotCXZvaWQgKmRhdGE7Ci19OwotCi0vKiBEZWZpbmVkIGluIHRzZC5jLCB0byBhbGxv dyB0aGUgbXV0ZXggaGVhZGVycyB0byBoYXZlIHRzZCBkZXBlbmRlbmNpZXMuICovCi10eXBlZGVm IHN0cnVjdCB0c2RfaW5pdF9oZWFkX3MgdHNkX2luaXRfaGVhZF90OwotCi10eXBlZGVmIHN0cnVj dCB7Ci0JYm9vbCBpbml0aWFsaXplZDsKLQl0c2RfdCB2YWw7Ci19IHRzZF93cmFwcGVyX3Q7Ci0K LXZvaWQgKnRzZF9pbml0X2NoZWNrX3JlY3Vyc2lvbih0c2RfaW5pdF9oZWFkX3QgKmhlYWQsCi0g ICAgdHNkX2luaXRfYmxvY2tfdCAqYmxvY2spOwotdm9pZCB0c2RfaW5pdF9maW5pc2godHNkX2lu aXRfaGVhZF90ICpoZWFkLCB0c2RfaW5pdF9ibG9ja190ICpibG9jayk7Ci0KLWV4dGVybiBwdGhy ZWFkX2tleV90IHRzZF90c2Q7Ci1leHRlcm4gdHNkX2luaXRfaGVhZF90IHRzZF9pbml0X2hlYWQ7 Ci1leHRlcm4gdHNkX3dyYXBwZXJfdCB0c2RfYm9vdF93cmFwcGVyOwotZXh0ZXJuIGJvb2wgdHNk X2Jvb3RlZDsKLQotLyogSW5pdGlhbGl6YXRpb24vY2xlYW51cC4gKi8KLUpFTUFMTE9DX0FMV0FZ U19JTkxJTkUgdm9pZAotdHNkX2NsZWFudXBfd3JhcHBlcih2b2lkICphcmcpIHsKLQl0c2Rfd3Jh cHBlcl90ICp3cmFwcGVyID0gKHRzZF93cmFwcGVyX3QgKilhcmc7Ci0KLQlpZiAod3JhcHBlci0+ aW5pdGlhbGl6ZWQpIHsKLQkJd3JhcHBlci0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQkJdHNkX2Ns ZWFudXAoJndyYXBwZXItPnZhbCk7Ci0JCWlmICh3cmFwcGVyLT5pbml0aWFsaXplZCkgewotCQkJ LyogVHJpZ2dlciBhbm90aGVyIGNsZWFudXAgcm91bmQuICovCi0JCQlpZiAocHRocmVhZF9zZXRz cGVjaWZpYyh0c2RfdHNkLCAodm9pZCAqKXdyYXBwZXIpICE9IDApCi0JCQl7Ci0JCQkJbWFsbG9j X3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBzZXR0aW5nIFRTRFxuIik7Ci0JCQkJaWYgKG9wdF9h Ym9ydCkgewotCQkJCQlhYm9ydCgpOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCX0K LQltYWxsb2NfdHNkX2RhbGxvYyh3cmFwcGVyKTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSB2b2lkCi10c2Rfd3JhcHBlcl9zZXQodHNkX3dyYXBwZXJfdCAqd3JhcHBlcikgewotCWlmICh1 bmxpa2VseSghdHNkX2Jvb3RlZCkpIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAocHRocmVhZF9zZXRz cGVjaWZpYyh0c2RfdHNkLCAodm9pZCAqKXdyYXBwZXIpICE9IDApIHsKLQkJbWFsbG9jX3dyaXRl KCI8amVtYWxsb2M+OiBFcnJvciBzZXR0aW5nIFRTRFxuIik7Ci0JCWFib3J0KCk7Ci0JfQotfQot Ci1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF93cmFwcGVyX3QgKgotdHNkX3dyYXBwZXJfZ2V0 KGJvb2wgaW5pdCkgewotCXRzZF93cmFwcGVyX3QgKndyYXBwZXI7Ci0KLQlpZiAodW5saWtlbHko IXRzZF9ib290ZWQpKSB7Ci0JCXJldHVybiAmdHNkX2Jvb3Rfd3JhcHBlcjsKLQl9Ci0KLQl3cmFw cGVyID0gKHRzZF93cmFwcGVyX3QgKilwdGhyZWFkX2dldHNwZWNpZmljKHRzZF90c2QpOwotCi0J aWYgKGluaXQgJiYgdW5saWtlbHkod3JhcHBlciA9PSBOVUxMKSkgewotCQl0c2RfaW5pdF9ibG9j a190IGJsb2NrOwotCQl3cmFwcGVyID0gKHRzZF93cmFwcGVyX3QgKikKLQkJICAgIHRzZF9pbml0 X2NoZWNrX3JlY3Vyc2lvbigmdHNkX2luaXRfaGVhZCwgJmJsb2NrKTsKLQkJaWYgKHdyYXBwZXIp IHsKLQkJCXJldHVybiB3cmFwcGVyOwotCQl9Ci0JCXdyYXBwZXIgPSAodHNkX3dyYXBwZXJfdCAq KQotCQkgICAgbWFsbG9jX3RzZF9tYWxsb2Moc2l6ZW9mKHRzZF93cmFwcGVyX3QpKTsKLQkJYmxv Y2suZGF0YSA9ICh2b2lkICopd3JhcHBlcjsKLQkJaWYgKHdyYXBwZXIgPT0gTlVMTCkgewotCQkJ bWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBhbGxvY2F0aW5nIFRTRFxuIik7Ci0JCQlh Ym9ydCgpOwotCQl9IGVsc2UgewotCQkJd3JhcHBlci0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAg ICAgIEpFTUFMTE9DX0RJQUdOT1NUSUNfUFVTSAotICAgICAgSkVNQUxMT0NfRElBR05PU1RJQ19J R05PUkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTElaRVJTCi0JCQl0c2RfdCBpbml0aWFs aXplciA9IFRTRF9JTklUSUFMSVpFUjsKLSAgICAgIEpFTUFMTE9DX0RJQUdOT1NUSUNfUE9QCi0J CQl3cmFwcGVyLT52YWwgPSBpbml0aWFsaXplcjsKLQkJfQotCQl0c2Rfd3JhcHBlcl9zZXQod3Jh cHBlcik7Ci0JCXRzZF9pbml0X2ZpbmlzaCgmdHNkX2luaXRfaGVhZCwgJmJsb2NrKTsKLQl9Ci0J cmV0dXJuIHdyYXBwZXI7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotdHNkX2Jv b3QwKHZvaWQpIHsKLQl0c2Rfd3JhcHBlcl90ICp3cmFwcGVyOwotCXRzZF9pbml0X2Jsb2NrX3Qg YmxvY2s7Ci0KLQl3cmFwcGVyID0gKHRzZF93cmFwcGVyX3QgKikKLQkgICAgdHNkX2luaXRfY2hl Y2tfcmVjdXJzaW9uKCZ0c2RfaW5pdF9oZWFkLCAmYmxvY2spOwotCWlmICh3cmFwcGVyKSB7Ci0J CXJldHVybiBmYWxzZTsKLQl9Ci0JYmxvY2suZGF0YSA9ICZ0c2RfYm9vdF93cmFwcGVyOwotCWlm IChwdGhyZWFkX2tleV9jcmVhdGUoJnRzZF90c2QsIHRzZF9jbGVhbnVwX3dyYXBwZXIpICE9IDAp IHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXRzZF9ib290ZWQgPSB0cnVlOwotCXRzZF93cmFwcGVy X3NldCgmdHNkX2Jvb3Rfd3JhcHBlcik7Ci0JdHNkX2luaXRfZmluaXNoKCZ0c2RfaW5pdF9oZWFk LCAmYmxvY2spOwotCXJldHVybiBmYWxzZTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2 b2lkCi10c2RfYm9vdDEodm9pZCkgewotCXRzZF93cmFwcGVyX3QgKndyYXBwZXI7Ci0Jd3JhcHBl ciA9ICh0c2Rfd3JhcHBlcl90ICopbWFsbG9jX3RzZF9tYWxsb2Moc2l6ZW9mKHRzZF93cmFwcGVy X3QpKTsKLQlpZiAod3JhcHBlciA9PSBOVUxMKSB7Ci0JCW1hbGxvY193cml0ZSgiPGplbWFsbG9j PjogRXJyb3IgYWxsb2NhdGluZyBUU0RcbiIpOwotCQlhYm9ydCgpOwotCX0KLQl0c2RfYm9vdF93 cmFwcGVyLmluaXRpYWxpemVkID0gZmFsc2U7Ci0JdHNkX2NsZWFudXAoJnRzZF9ib290X3dyYXBw ZXIudmFsKTsKLQl3cmFwcGVyLT5pbml0aWFsaXplZCA9IGZhbHNlOwotICBKRU1BTExPQ19ESUFH Tk9TVElDX1BVU0gKLSAgSkVNQUxMT0NfRElBR05PU1RJQ19JR05PUkVfTUlTU0lOR19TVFJVQ1Rf RklFTERfSU5JVElBTElaRVJTCi0JdHNkX3QgaW5pdGlhbGl6ZXIgPSBUU0RfSU5JVElBTElaRVI7 Ci0gIEpFTUFMTE9DX0RJQUdOT1NUSUNfUE9QCi0Jd3JhcHBlci0+dmFsID0gaW5pdGlhbGl6ZXI7 Ci0JdHNkX3dyYXBwZXJfc2V0KHdyYXBwZXIpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5F IGJvb2wKLXRzZF9ib290KHZvaWQpIHsKLQlpZiAodHNkX2Jvb3QwKCkpIHsKLQkJcmV0dXJuIHRy dWU7Ci0JfQotCXRzZF9ib290MSgpOwotCXJldHVybiBmYWxzZTsKLX0KLQotSkVNQUxMT0NfQUxX QVlTX0lOTElORSBib29sCi10c2RfYm9vdGVkX2dldCh2b2lkKSB7Ci0JcmV0dXJuIHRzZF9ib290 ZWQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotdHNkX2dldF9hbGxvY2F0ZXMo dm9pZCkgewotCXJldHVybiB0cnVlOwotfQotCi0vKiBHZXQvc2V0LiAqLwotSkVNQUxMT0NfQUxX QVlTX0lOTElORSB0c2RfdCAqCi10c2RfZ2V0KGJvb2wgaW5pdCkgewotCXRzZF93cmFwcGVyX3Qg KndyYXBwZXI7Ci0KLQlhc3NlcnQodHNkX2Jvb3RlZCk7Ci0Jd3JhcHBlciA9IHRzZF93cmFwcGVy X2dldChpbml0KTsKLQlpZiAodHNkX2dldF9hbGxvY2F0ZXMoKSAmJiAhaW5pdCAmJiB3cmFwcGVy ID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAmd3JhcHBlci0+dmFsOwot fQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXRzZF9zZXQodHNkX3QgKnZhbCkgewot CXRzZF93cmFwcGVyX3QgKndyYXBwZXI7Ci0KLQlhc3NlcnQodHNkX2Jvb3RlZCk7Ci0Jd3JhcHBl ciA9IHRzZF93cmFwcGVyX2dldCh0cnVlKTsKLQlpZiAobGlrZWx5KCZ3cmFwcGVyLT52YWwgIT0g dmFsKSkgewotCQl3cmFwcGVyLT52YWwgPSAqKHZhbCk7Ci0JfQotCXdyYXBwZXItPmluaXRpYWxp emVkID0gdHJ1ZTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3RzZF9tYWxsb2NfdGhyZWFkX2Ns ZWFudXAuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv amVtYWxsb2MvaW50ZXJuYWwvdHNkX21hbGxvY190aHJlYWRfY2xlYW51cC5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBkOGYzZWYxLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX21h bGxvY190aHJlYWRfY2xlYW51cC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotI2lm ZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9NQUxMT0NfVEhSRUFEX0NMRUFOVVBfSAotI2Vycm9y IFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgb25seSBvbmNlLCBieSB0c2QuaC4KLSNlbmRp ZgotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9UU0RfTUFMTE9DX1RIUkVBRF9DTEVBTlVQX0gK LQotI2RlZmluZSBKRU1BTExPQ19UU0RfVFlQRV9BVFRSKHR5cGUpIF9fdGhyZWFkIHR5cGUgSkVN QUxMT0NfVExTX01PREVMCi0KLWV4dGVybiBKRU1BTExPQ19UU0RfVFlQRV9BVFRSKHRzZF90KSB0 c2RfdGxzOwotZXh0ZXJuIEpFTUFMTE9DX1RTRF9UWVBFX0FUVFIoYm9vbCkgdHNkX2luaXRpYWxp emVkOwotZXh0ZXJuIGJvb2wgdHNkX2Jvb3RlZDsKLQotLyogSW5pdGlhbGl6YXRpb24vY2xlYW51 cC4gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotdHNkX2NsZWFudXBfd3JhcHBlcih2 b2lkKSB7Ci0JaWYgKHRzZF9pbml0aWFsaXplZCkgewotCQl0c2RfaW5pdGlhbGl6ZWQgPSBmYWxz ZTsKLQkJdHNkX2NsZWFudXAoJnRzZF90bHMpOwotCX0KLQlyZXR1cm4gdHNkX2luaXRpYWxpemVk OwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLXRzZF9ib290MCh2b2lkKSB7Ci0J X21hbGxvY190c2RfY2xlYW51cF9yZWdpc3RlcigmdHNkX2NsZWFudXBfd3JhcHBlcik7Ci0JdHNk X2Jvb3RlZCA9IHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5M SU5FIHZvaWQKLXRzZF9ib290MSh2b2lkKSB7Ci0JLyogRG8gbm90aGluZy4gKi8KLX0KLQotSkVN QUxMT0NfQUxXQVlTX0lOTElORSBib29sCi10c2RfYm9vdCh2b2lkKSB7Ci0JcmV0dXJuIHRzZF9i b290MCgpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLXRzZF9ib290ZWRfZ2V0 KHZvaWQpIHsKLQlyZXR1cm4gdHNkX2Jvb3RlZDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSBib29sCi10c2RfZ2V0X2FsbG9jYXRlcyh2b2lkKSB7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0v KiBHZXQvc2V0LiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB0c2RfdCAqCi10c2RfZ2V0KGJv b2wgaW5pdCkgewotCXJldHVybiAmdHNkX3RsczsKLX0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUg dm9pZAotdHNkX3NldCh0c2RfdCAqdmFsKSB7Ci0JYXNzZXJ0KHRzZF9ib290ZWQpOwotCWlmIChs aWtlbHkoJnRzZF90bHMgIT0gdmFsKSkgewotCQl0c2RfdGxzID0gKCp2YWwpOwotCX0KLQl0c2Rf aW5pdGlhbGl6ZWQgPSB0cnVlOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX3Rscy5oIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9p bnRlcm5hbC90c2RfdGxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNmM4MDUu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5j bHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2RfdGxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCAr MCwwIEBACi0jaWZkZWYgSkVNQUxMT0NfSU5URVJOQUxfVFNEX1RMU19ICi0jZXJyb3IgVGhpcyBm aWxlIHNob3VsZCBiZSBpbmNsdWRlZCBvbmx5IG9uY2UsIGJ5IHRzZC5oLgotI2VuZGlmCi0jZGVm aW5lIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9UTFNfSAotCi0jZGVmaW5lIEpFTUFMTE9DX1RTRF9U WVBFX0FUVFIodHlwZSkgX190aHJlYWQgdHlwZSBKRU1BTExPQ19UTFNfTU9ERUwKLQotZXh0ZXJu IEpFTUFMTE9DX1RTRF9UWVBFX0FUVFIodHNkX3QpIHRzZF90bHM7Ci1leHRlcm4gcHRocmVhZF9r ZXlfdCB0c2RfdHNkOwotZXh0ZXJuIGJvb2wgdHNkX2Jvb3RlZDsKLQotLyogSW5pdGlhbGl6YXRp b24vY2xlYW51cC4gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotdHNkX2Jvb3QwKHZv aWQpIHsKLQlpZiAocHRocmVhZF9rZXlfY3JlYXRlKCZ0c2RfdHNkLCAmdHNkX2NsZWFudXApICE9 IDApIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXRzZF9ib290ZWQgPSB0cnVlOwotCXJldHVybiBm YWxzZTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi10c2RfYm9vdDEodm9pZCkg ewotCS8qIERvIG5vdGhpbmcuICovCi19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAot dHNkX2Jvb3Qodm9pZCkgewotCXJldHVybiB0c2RfYm9vdDAoKTsKLX0KLQotSkVNQUxMT0NfQUxX QVlTX0lOTElORSBib29sCi10c2RfYm9vdGVkX2dldCh2b2lkKSB7Ci0JcmV0dXJuIHRzZF9ib290 ZWQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotdHNkX2dldF9hbGxvY2F0ZXMo dm9pZCkgewotCXJldHVybiBmYWxzZTsKLX0KLQotLyogR2V0L3NldC4gKi8KLUpFTUFMTE9DX0FM V0FZU19JTkxJTkUgdHNkX3QgKgotdHNkX2dldChib29sIGluaXQpIHsKLQlyZXR1cm4gJnRzZF90 bHM7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdHNkX3NldCh0c2RfdCAqdmFs KSB7Ci0JYXNzZXJ0KHRzZF9ib290ZWQpOwotCWlmIChsaWtlbHkoJnRzZF90bHMgIT0gdmFsKSkg ewotCQl0c2RfdGxzID0gKCp2YWwpOwotCX0KLQlpZiAocHRocmVhZF9zZXRzcGVjaWZpYyh0c2Rf dHNkLCAodm9pZCAqKSgmdHNkX3RscykpICE9IDApIHsKLQkJbWFsbG9jX3dyaXRlKCI8amVtYWxs b2M+OiBFcnJvciBzZXR0aW5nIHRzZC5cbiIpOwotCQlpZiAob3B0X2Fib3J0KSB7Ci0JCQlhYm9y dCgpOwotCQl9Ci0JfQotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX3R5cGVzLmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3RzZF90eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmFlMzdkLi4w MDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvaW50ZXJuYWwvdHNkX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCAr MCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFMX1RTRF9UWVBFU19ICi0jZGVmaW5lIEpF TUFMTE9DX0lOVEVSTkFMX1RTRF9UWVBFU19ICi0KLSNkZWZpbmUgTUFMTE9DX1RTRF9DTEVBTlVQ U19NQVgJNAotCi10eXBlZGVmIHN0cnVjdCB0c2RfcyB0c2RfdDsKLXR5cGVkZWYgc3RydWN0IHRz ZG5fcyB0c2RuX3Q7Ci10eXBlZGVmIGJvb2wgKCptYWxsb2NfdHNkX2NsZWFudXBfdCkodm9pZCk7 Ci0KLSNlbmRpZiAvKiBKRU1BTExPQ19JTlRFUk5BTF9UU0RfVFlQRVNfSCAqLwoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvaW50ZXJuYWwvdHNkX3dpbi5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2Rfd2luLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGE5MWRhYzguLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC90c2Rfd2luLmgK KysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotI2lmZGVmIEpFTUFMTE9DX0lOVEVSTkFM X1RTRF9XSU5fSAotI2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgb25seSBvbmNl LCBieSB0c2QuaC4KLSNlbmRpZgotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9UU0RfV0lOX0gK LQotdHlwZWRlZiBzdHJ1Y3QgewotCWJvb2wgaW5pdGlhbGl6ZWQ7Ci0JdHNkX3QgdmFsOwotfSB0 c2Rfd3JhcHBlcl90OwotCi1leHRlcm4gRFdPUkQgdHNkX3RzZDsKLWV4dGVybiB0c2Rfd3JhcHBl cl90IHRzZF9ib290X3dyYXBwZXI7Ci1leHRlcm4gYm9vbCB0c2RfYm9vdGVkOwotCi0vKiBJbml0 aWFsaXphdGlvbi9jbGVhbnVwLiAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi10c2Rf Y2xlYW51cF93cmFwcGVyKHZvaWQpIHsKLQlEV09SRCBlcnJvciA9IEdldExhc3RFcnJvcigpOwot CXRzZF93cmFwcGVyX3QgKndyYXBwZXIgPSAodHNkX3dyYXBwZXJfdCAqKVRsc0dldFZhbHVlKHRz ZF90c2QpOwotCVNldExhc3RFcnJvcihlcnJvcik7Ci0KLQlpZiAod3JhcHBlciA9PSBOVUxMKSB7 Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAod3JhcHBlci0+aW5pdGlhbGl6ZWQpIHsKLQkJ d3JhcHBlci0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQkJdHNkX2NsZWFudXAoJndyYXBwZXItPnZh bCk7Ci0JCWlmICh3cmFwcGVyLT5pbml0aWFsaXplZCkgewotCQkJLyogVHJpZ2dlciBhbm90aGVy IGNsZWFudXAgcm91bmQuICovCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQltYWxsb2NfdHNk X2RhbGxvYyh3cmFwcGVyKTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19J TkxJTkUgdm9pZAotdHNkX3dyYXBwZXJfc2V0KHRzZF93cmFwcGVyX3QgKndyYXBwZXIpIHsKLQlp ZiAoIVRsc1NldFZhbHVlKHRzZF90c2QsICh2b2lkICopd3JhcHBlcikpIHsKLQkJbWFsbG9jX3dy aXRlKCI8amVtYWxsb2M+OiBFcnJvciBzZXR0aW5nIFRTRFxuIik7Ci0JCWFib3J0KCk7Ci0JfQot fQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRzZF93cmFwcGVyX3QgKgotdHNkX3dyYXBwZXJf Z2V0KGJvb2wgaW5pdCkgewotCURXT1JEIGVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0JdHNkX3dy YXBwZXJfdCAqd3JhcHBlciA9ICh0c2Rfd3JhcHBlcl90ICopIFRsc0dldFZhbHVlKHRzZF90c2Qp OwotCVNldExhc3RFcnJvcihlcnJvcik7Ci0KLQlpZiAoaW5pdCAmJiB1bmxpa2VseSh3cmFwcGVy ID09IE5VTEwpKSB7Ci0JCXdyYXBwZXIgPSAodHNkX3dyYXBwZXJfdCAqKQotCQkgICAgbWFsbG9j X3RzZF9tYWxsb2Moc2l6ZW9mKHRzZF93cmFwcGVyX3QpKTsKLQkJaWYgKHdyYXBwZXIgPT0gTlVM TCkgewotCQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBhbGxvY2F0aW5nIFRTRFxu Iik7Ci0JCQlhYm9ydCgpOwotCQl9IGVsc2UgewotCQkJd3JhcHBlci0+aW5pdGlhbGl6ZWQgPSBm YWxzZTsKLQkJCS8qIE1TVkMgaXMgZmluaWNreSBhYm91dCBhZ2dyZWdhdGUgaW5pdGlhbGl6YXRp b24uICovCi0JCQl0c2RfdCB0c2RfaW5pdGlhbGl6ZXIgPSBUU0RfSU5JVElBTElaRVI7Ci0JCQl3 cmFwcGVyLT52YWwgPSB0c2RfaW5pdGlhbGl6ZXI7Ci0JCX0KLQkJdHNkX3dyYXBwZXJfc2V0KHdy YXBwZXIpOwotCX0KLQlyZXR1cm4gd3JhcHBlcjsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElO RSBib29sCi10c2RfYm9vdDAodm9pZCkgewotCXRzZF90c2QgPSBUbHNBbGxvYygpOwotCWlmICh0 c2RfdHNkID09IFRMU19PVVRfT0ZfSU5ERVhFUykgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JX21h bGxvY190c2RfY2xlYW51cF9yZWdpc3RlcigmdHNkX2NsZWFudXBfd3JhcHBlcik7Ci0JdHNkX3dy YXBwZXJfc2V0KCZ0c2RfYm9vdF93cmFwcGVyKTsKLQl0c2RfYm9vdGVkID0gdHJ1ZTsKLQlyZXR1 cm4gZmFsc2U7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdHNkX2Jvb3QxKHZv aWQpIHsKLQl0c2Rfd3JhcHBlcl90ICp3cmFwcGVyOwotCXdyYXBwZXIgPSAodHNkX3dyYXBwZXJf dCAqKQotCSAgICBtYWxsb2NfdHNkX21hbGxvYyhzaXplb2YodHNkX3dyYXBwZXJfdCkpOwotCWlm ICh3cmFwcGVyID09IE5VTEwpIHsKLQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBh bGxvY2F0aW5nIFRTRFxuIik7Ci0JCWFib3J0KCk7Ci0JfQotCXRzZF9ib290X3dyYXBwZXIuaW5p dGlhbGl6ZWQgPSBmYWxzZTsKLQl0c2RfY2xlYW51cCgmdHNkX2Jvb3Rfd3JhcHBlci52YWwpOwot CXdyYXBwZXItPmluaXRpYWxpemVkID0gZmFsc2U7Ci0JdHNkX3QgaW5pdGlhbGl6ZXIgPSBUU0Rf SU5JVElBTElaRVI7Ci0Jd3JhcHBlci0+dmFsID0gaW5pdGlhbGl6ZXI7Ci0JdHNkX3dyYXBwZXJf c2V0KHdyYXBwZXIpOwotfQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi10c2RfYm9vdCh2 b2lkKSB7Ci0JaWYgKHRzZF9ib290MCgpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQl0c2RfYm9v dDEoKTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAot dHNkX2Jvb3RlZF9nZXQodm9pZCkgewotCXJldHVybiB0c2RfYm9vdGVkOwotfQotCi1KRU1BTExP Q19BTFdBWVNfSU5MSU5FIGJvb2wKLXRzZF9nZXRfYWxsb2NhdGVzKHZvaWQpIHsKLQlyZXR1cm4g dHJ1ZTsKLX0KLQotLyogR2V0L3NldC4gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdHNkX3Qg KgotdHNkX2dldChib29sIGluaXQpIHsKLQl0c2Rfd3JhcHBlcl90ICp3cmFwcGVyOwotCi0JYXNz ZXJ0KHRzZF9ib290ZWQpOwotCXdyYXBwZXIgPSB0c2Rfd3JhcHBlcl9nZXQoaW5pdCk7Ci0JaWYg KHRzZF9nZXRfYWxsb2NhdGVzKCkgJiYgIWluaXQgJiYgd3JhcHBlciA9PSBOVUxMKSB7Ci0JCXJl dHVybiBOVUxMOwotCX0KLQlyZXR1cm4gJndyYXBwZXItPnZhbDsKLX0KLQotSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkCi10c2Rfc2V0KHRzZF90ICp2YWwpIHsKLQl0c2Rfd3JhcHBlcl90ICp3 cmFwcGVyOwotCi0JYXNzZXJ0KHRzZF9ib290ZWQpOwotCXdyYXBwZXIgPSB0c2Rfd3JhcHBlcl9n ZXQodHJ1ZSk7Ci0JaWYgKGxpa2VseSgmd3JhcHBlci0+dmFsICE9IHZhbCkpIHsKLQkJd3JhcHBl ci0+dmFsID0gKih2YWwpOwotCX0KLQl3cmFwcGVyLT5pbml0aWFsaXplZCA9IHRydWU7Ci19Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9pbnRlcm5hbC90eXBlZF9saXN0LmggYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3R5cGVkX2xpc3QuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUzNTA1NS4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVy bmFsL3R5cGVkX2xpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSNpZm5kZWYg SkVNQUxMT0NfSU5URVJOQUxfVFlQRURfTElTVF9ICi0jZGVmaW5lIEpFTUFMTE9DX0lOVEVSTkFM X1RZUEVEX0xJU1RfSAotCi0vKgotICogVGhpcyB3cmFwcyB0aGUgcWwgbW9kdWxlIHRvIGltcGxl bWVudCBhIGxpc3QgY2xhc3MgaW4gYSB3YXkgdGhhdCdzIGEgbGl0dGxlCi0gKiBiaXQgZWFzaWVy IHRvIHVzZTsgaXQgaGFuZGxlcyBxbF9lbG1fbmV3IGNhbGxzIGFuZCBwcm92aWRlcyB0eXBlIHNh ZmV0eS4KLSAqLwotCi0jZGVmaW5lIFRZUEVEX0xJU1QobGlzdF90eXBlLCBlbF90eXBlLCBsaW5r YWdlKQkJCQlcCi10eXBlZGVmIHN0cnVjdCB7CQkJCQkJCVwKLQlxbF9oZWFkKGVsX3R5cGUpIGhl YWQ7CQkJCQkJXAotfSBsaXN0X3R5cGUjI190OwkJCQkJCQlcCi1zdGF0aWMgaW5saW5lIHZvaWQJ CQkJCQkJXAotbGlzdF90eXBlIyNfaW5pdChsaXN0X3R5cGUjI190ICpsaXN0KSB7CQkJCQlcCi0J cWxfbmV3KCZsaXN0LT5oZWFkKTsJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIGlubGluZSBl bF90eXBlICoJCQkJCQkJXAotbGlzdF90eXBlIyNfZmlyc3QoY29uc3QgbGlzdF90eXBlIyNfdCAq bGlzdCkgewkJCQlcCi0JcmV0dXJuIHFsX2ZpcnN0KCZsaXN0LT5oZWFkKTsJCQkJCVwKLX0JCQkJ CQkJCQlcCi1zdGF0aWMgaW5saW5lIGVsX3R5cGUgKgkJCQkJCQlcCi1saXN0X3R5cGUjI19sYXN0 KGNvbnN0IGxpc3RfdHlwZSMjX3QgKmxpc3QpIHsJCQkJXAotCXJldHVybiBxbF9sYXN0KCZsaXN0 LT5oZWFkLCBsaW5rYWdlKTsJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZAkJ CQkJCQlcCi1saXN0X3R5cGUjI19hcHBlbmQobGlzdF90eXBlIyNfdCAqbGlzdCwgZWxfdHlwZSAq aXRlbSkgewkJXAotCXFsX2VsbV9uZXcoaXRlbSwgbGlua2FnZSk7CQkJCQlcCi0JcWxfdGFpbF9p bnNlcnQoJmxpc3QtPmhlYWQsIGl0ZW0sIGxpbmthZ2UpOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0 aWMgaW5saW5lIHZvaWQJCQkJCQkJXAotbGlzdF90eXBlIyNfcHJlcGVuZChsaXN0X3R5cGUjI190 ICpsaXN0LCBlbF90eXBlICppdGVtKSB7CQlcCi0JcWxfZWxtX25ldyhpdGVtLCBsaW5rYWdlKTsJ CQkJCVwKLQlxbF9oZWFkX2luc2VydCgmbGlzdC0+aGVhZCwgaXRlbSwgbGlua2FnZSk7CQkJXAot fQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZAkJCQkJCQlcCi1saXN0X3R5cGUjI19yZXBs YWNlKGxpc3RfdHlwZSMjX3QgKmxpc3QsIGVsX3R5cGUgKnRvX3JlbW92ZSwJCVwKLSAgICBlbF90 eXBlICp0b19pbnNlcnQpIHsJCQkJCQlcCi0JcWxfZWxtX25ldyh0b19pbnNlcnQsIGxpbmthZ2Up OwkJCQkJXAotCXFsX2FmdGVyX2luc2VydCh0b19yZW1vdmUsIHRvX2luc2VydCwgbGlua2FnZSk7 CQkJXAotCXFsX3JlbW92ZSgmbGlzdC0+aGVhZCwgdG9fcmVtb3ZlLCBsaW5rYWdlKTsJCQlcCi19 CQkJCQkJCQkJXAotc3RhdGljIGlubGluZSB2b2lkCQkJCQkJCVwKLWxpc3RfdHlwZSMjX3JlbW92 ZShsaXN0X3R5cGUjI190ICpsaXN0LCBlbF90eXBlICppdGVtKSB7CQlcCi0JcWxfcmVtb3ZlKCZs aXN0LT5oZWFkLCBpdGVtLCBsaW5rYWdlKTsJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxp bmUgYm9vbAkJCQkJCQlcCi1saXN0X3R5cGUjI19lbXB0eShsaXN0X3R5cGUjI190ICpsaXN0KSB7 CQkJCVwKLQlyZXR1cm4gcWxfZW1wdHkoJmxpc3QtPmhlYWQpOwkJCQkJXAotfQkJCQkJCQkJCVwK LXN0YXRpYyBpbmxpbmUgdm9pZAkJCQkJCQlcCi1saXN0X3R5cGUjI19jb25jYXQobGlzdF90eXBl IyNfdCAqbGlzdF9hLCBsaXN0X3R5cGUjI190ICpsaXN0X2IpIHsJXAotCXFsX2NvbmNhdCgmbGlz dF9hLT5oZWFkLCAmbGlzdF9iLT5oZWFkLCBsaW5rYWdlKTsJCVwKLX0KLQotI2VuZGlmIC8qIEpF TUFMTE9DX0lOVEVSTkFMX1RZUEVEX0xJU1RfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvaW50ZXJuYWwvdXRp bC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1h bGxvYy9pbnRlcm5hbC91dGlsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYjFj MGEuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9pbnRlcm5hbC91dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMg KzAsMCBAQAotI2lmbmRlZiBKRU1BTExPQ19JTlRFUk5BTF9VVElMX0gKLSNkZWZpbmUgSkVNQUxM T0NfSU5URVJOQUxfVVRJTF9ICi0KLSNkZWZpbmUgVVRJTF9JTkxJTkUgc3RhdGljIGlubGluZQot Ci0vKiBKdW5rIGZpbGwgcGF0dGVybnMuICovCi0jaWZuZGVmIEpFTUFMTE9DX0FMTE9DX0pVTksK LSMgIGRlZmluZSBKRU1BTExPQ19BTExPQ19KVU5LCSgodWludDhfdCkweGE1KQotI2VuZGlmCi0j aWZuZGVmIEpFTUFMTE9DX0ZSRUVfSlVOSwotIyAgZGVmaW5lIEpFTUFMTE9DX0ZSRUVfSlVOSwko KHVpbnQ4X3QpMHg1YSkKLSNlbmRpZgotCi0vKgotICogV3JhcCBhIGNwcCBhcmd1bWVudCB0aGF0 IGNvbnRhaW5zIGNvbW1hcyBzdWNoIHRoYXQgaXQgaXNuJ3QgYnJva2VuIHVwIGludG8KLSAqIG11 bHRpcGxlIGFyZ3VtZW50cy4KLSAqLwotI2RlZmluZSBKRU1BTExPQ19BUkdfQ09OQ0FUKC4uLikg X19WQV9BUkdTX18KLQotLyogY3BwIG1hY3JvIGRlZmluaXRpb24gc3RyaW5naWZpY2F0aW9uLiAq LwotI2RlZmluZSBTVFJJTkdJRllfSEVMUEVSKHgpICN4Ci0jZGVmaW5lIFNUUklOR0lGWSh4KSBT VFJJTkdJRllfSEVMUEVSKHgpCi0KLS8qCi0gKiBTaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzIGR1 ZSB0byB1bmluaXRpYWxpemVkIHZhbHVlcy4gIFRoaXMgaXMgdXNlZAotICogd2hlcmV2ZXIgdGhl IGNvbXBpbGVyIGZhaWxzIHRvIHJlY29nbml6ZSB0aGF0IHRoZSB2YXJpYWJsZSBpcyBuZXZlciB1 c2VkCi0gKiB1bmluaXRpYWxpemVkLgotICovCi0jZGVmaW5lIEpFTUFMTE9DX0NDX1NJTEVOQ0Vf SU5JVCh2KSA9IHYKLQotI2lmZGVmIF9fR05VQ19fCi0jICBkZWZpbmUgbGlrZWx5KHgpICAgX19i dWlsdGluX2V4cGVjdCghISh4KSwgMSkKLSMgIGRlZmluZSB1bmxpa2VseSh4KSBfX2J1aWx0aW5f ZXhwZWN0KCEhKHgpLCAwKQotI2Vsc2UKLSMgIGRlZmluZSBsaWtlbHkoeCkgICAhISh4KQotIyAg ZGVmaW5lIHVubGlrZWx5KHgpICEhKHgpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEpFTUFMTE9D X0lOVEVSTkFMX1VOUkVBQ0hBQkxFKQotIyAgZXJyb3IgSkVNQUxMT0NfSU5URVJOQUxfVU5SRUFD SEFCTEUgc2hvdWxkIGhhdmUgYmVlbiBkZWZpbmVkIGJ5IGNvbmZpZ3VyZQotI2VuZGlmCi0KLSNk ZWZpbmUgdW5yZWFjaGFibGUoKSBKRU1BTExPQ19JTlRFUk5BTF9VTlJFQUNIQUJMRSgpCi0KLS8q IFNldCBlcnJvciBjb2RlLiAqLwotVVRJTF9JTkxJTkUgdm9pZAotc2V0X2Vycm5vKGludCBlcnJu dW0pIHsKLSNpZmRlZiBfV0lOMzIKLQlTZXRMYXN0RXJyb3IoZXJybnVtKTsKLSNlbHNlCi0JZXJy bm8gPSBlcnJudW07Ci0jZW5kaWYKLX0KLQotLyogR2V0IGxhc3QgZXJyb3IgY29kZS4gKi8KLVVU SUxfSU5MSU5FIGludAotZ2V0X2Vycm5vKHZvaWQpIHsKLSNpZmRlZiBfV0lOMzIKLQlyZXR1cm4g R2V0TGFzdEVycm9yKCk7Ci0jZWxzZQotCXJldHVybiBlcnJubzsKLSNlbmRpZgotfQotCi1KRU1B TExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXV0aWxfYXNzdW1lKGJvb2wgYikgewotCWlmICghYikg ewotCQl1bnJlYWNoYWJsZSgpOwotCX0KLX0KLQotLyogcHRyIHNob3VsZCBiZSB2YWxpZC4gKi8K LUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdXRpbF9wcmVmZXRjaF9yZWFkKHZvaWQgKnB0 cikgewotCS8qCi0JICogVGhpcyBzaG91bGQgYXJndWFibHkgYmUgYSBjb25maWcgY2hlY2s7IGJ1 dCBhbnkgdmVyc2lvbiBvZiBHQ0Mgc28gb2xkCi0JICogdGhhdCBpdCBkb2Vzbid0IHN1cHBvcnQg X19idWlsdGluX3ByZWZldGNoIGlzIGFsc28gdG9vIG9sZCB0byBidWlsZAotCSAqIGplbWFsbG9j LgotCSAqLwotI2lmZGVmIF9fR05VQ19fCi0JaWYgKGNvbmZpZ19kZWJ1ZykgewotCQkvKiBFbmZv cmNlIHRoZSAidmFsaWQgcHRyIiByZXF1aXJlbWVudC4gKi8KLQkJKih2b2xhdGlsZSBjaGFyICop cHRyOwotCX0KLQlfX2J1aWx0aW5fcHJlZmV0Y2gocHRyLCAvKiByZWFkIG9yIHdyaXRlICovIDAs IC8qIGxvY2FsaXR5IGhpbnQgKi8gMyk7Ci0jZWxzZQotCSoodm9sYXRpbGUgY2hhciAqKXB0cjsK LSNlbmRpZgotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXV0aWxfcHJlZmV0Y2hf d3JpdGUodm9pZCAqcHRyKSB7Ci0jaWZkZWYgX19HTlVDX18KLQlpZiAoY29uZmlnX2RlYnVnKSB7 Ci0JCSoodm9sYXRpbGUgY2hhciAqKXB0cjsKLQl9Ci0JLyoKLQkgKiBUaGUgb25seSBkaWZmZXJl bmNlIGZyb20gdGhlIHJlYWQgdmFyaWFudCBpcyB0aGF0IHRoaXMgaGFzIGEgMSBhcyB0aGUKLQkg KiBzZWNvbmQgYXJndW1lbnQgKHRoZSB3cml0ZSBoaW50KS4KLQkgKi8KLQlfX2J1aWx0aW5fcHJl ZmV0Y2gocHRyLCAxLCAzKTsKLSNlbHNlCi0JKih2b2xhdGlsZSBjaGFyICopcHRyOwotI2VuZGlm Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotdXRpbF9wcmVmZXRjaF9yZWFkX3Jh bmdlKHZvaWQgKnB0ciwgc2l6ZV90IHN6KSB7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzejsg aSArPSBDQUNIRUxJTkUpIHsKLQkJdXRpbF9wcmVmZXRjaF9yZWFkKCh2b2lkICopKCh1aW50cHRy X3QpcHRyICsgaSkpOwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi11dGls X3ByZWZldGNoX3dyaXRlX3JhbmdlKHZvaWQgKnB0ciwgc2l6ZV90IHN6KSB7Ci0JZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBzejsgaSArPSBDQUNIRUxJTkUpIHsKLQkJdXRpbF9wcmVmZXRjaF93cml0 ZSgodm9pZCAqKSgodWludHB0cl90KXB0ciArIGkpKTsKLQl9Ci19Ci0KLSN1bmRlZiBVVElMX0lO TElORQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxfVVRJTF9IICovCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxv Yy9pbnRlcm5hbC93aXRuZXNzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3dpdG5lc3MuaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggZTgxYjlhMC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2ludGVybmFsL3dpdG5lc3MuaAor KysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0jaWZuZGVmIEpFTUFMTE9DX0lOVEVSTkFM X1dJVE5FU1NfSAotI2RlZmluZSBKRU1BTExPQ19JTlRFUk5BTF9XSVRORVNTX0gKLQotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3FsLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0v KiBMT0NLIFJBTktTICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1lbnVtIHdpdG5lc3Nf cmFua19lIHsKLQkvKgotCSAqIE9yZGVyIG1hdHRlcnMgd2l0aGluIHRoaXMgZW51bSBsaXN0aW5n IC0tIGhpZ2hlciB2YWx1ZWQgbG9ja3MgY2FuCi0JICogb25seSBiZSBhY3F1aXJlZCBhZnRlciBs b3dlci12YWx1ZWQgb25lcy4gIFdlIHVzZSB0aGUKLQkgKiBhdXRvLWluY3JlbWVudGluZy1uZXNz IG9mIGVudW0gdmFsdWVzIHRvIGVuZm9yY2UgdGhpcy4KLQkgKi8KLQotCS8qCi0JICogV2l0bmVz c2VzIHdpdGggcmFuayBXSVRORVNTX1JBTktfT01JVCBhcmUgY29tcGxldGVseSBpZ25vcmVkIGJ5 IHRoZQotCSAqIHdpdG5lc3MgbWFjaGluZXJ5LgotCSAqLwotCVdJVE5FU1NfUkFOS19PTUlULAot CVdJVE5FU1NfUkFOS19NSU4sCi0JV0lUTkVTU19SQU5LX0lOSVQgPSBXSVRORVNTX1JBTktfTUlO LAotCVdJVE5FU1NfUkFOS19DVEwsCi0JV0lUTkVTU19SQU5LX1RDQUNIRVMsCi0JV0lUTkVTU19S QU5LX0FSRU5BUywKLQlXSVRORVNTX1JBTktfQkFDS0dST1VORF9USFJFQURfR0xPQkFMLAotCVdJ VE5FU1NfUkFOS19QUk9GX0RVTVAsCi0JV0lUTkVTU19SQU5LX1BST0ZfQlQyR0NUWCwKLQlXSVRO RVNTX1JBTktfUFJPRl9UREFUQVMsCi0JV0lUTkVTU19SQU5LX1BST0ZfVERBVEEsCi0JV0lUTkVT U19SQU5LX1BST0ZfTE9HLAotCVdJVE5FU1NfUkFOS19QUk9GX0dDVFgsCi0JV0lUTkVTU19SQU5L X1BST0ZfUkVDRU5UX0RVTVAsCi0JV0lUTkVTU19SQU5LX0JBQ0tHUk9VTkRfVEhSRUFELAotCS8q Ci0JICogVXNlZCBhcyBhbiBhcmd1bWVudCB0byB3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5r KCkgaW4gb3JkZXIgdG8KLQkgKiB2YWxpZGF0ZSBkZXB0aCBleGNsdWRpbmcgbm9uLWNvcmUgbG9j a3Mgd2l0aCBsb3dlciByYW5rcy4gIFNpbmNlIHRoZQotCSAqIHJhbmsgYXJndW1lbnQgdG8gd2l0 bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygpIGlzIGluY2x1c2l2ZSByYXRoZXIKLQkgKiB0aGFu IGV4Y2x1c2l2ZSwgdGhpcyBkZWZpbml0aW9uIGNhbiBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRo ZQotCSAqIG1pbmltYWxseSByYW5rZWQgY29yZSBsb2NrLgotCSAqLwotCVdJVE5FU1NfUkFOS19D T1JFLAotCVdJVE5FU1NfUkFOS19ERUNBWSA9IFdJVE5FU1NfUkFOS19DT1JFLAotCVdJVE5FU1Nf UkFOS19UQ0FDSEVfUUwsCi0KLQlXSVRORVNTX1JBTktfU0VDX1NIQVJELAotCi0JV0lUTkVTU19S QU5LX0VYVEVOVF9HUk9XLAotCVdJVE5FU1NfUkFOS19IUEFfU0hBUkRfR1JPVyA9IFdJVE5FU1Nf UkFOS19FWFRFTlRfR1JPVywKLQlXSVRORVNTX1JBTktfU0FOX0JVTVBfQUxMT0MgPSBXSVRORVNT X1JBTktfRVhURU5UX0dST1csCi0KLQlXSVRORVNTX1JBTktfRVhURU5UUywKLQlXSVRORVNTX1JB TktfSFBBX1NIQVJEID0gV0lUTkVTU19SQU5LX0VYVEVOVFMsCi0KLQlXSVRORVNTX1JBTktfSFBB X0NFTlRSQUxfR1JPVywKLQlXSVRORVNTX1JBTktfSFBBX0NFTlRSQUwsCi0KLQlXSVRORVNTX1JB TktfRURBVEFfQ0FDSEUsCi0KLQlXSVRORVNTX1JBTktfUlRSRUUsCi0JV0lUTkVTU19SQU5LX0JB U0UsCi0JV0lUTkVTU19SQU5LX0FSRU5BX0xBUkdFLAotCVdJVE5FU1NfUkFOS19IT09LLAotCi0J V0lUTkVTU19SQU5LX0xFQUY9MHgxMDAwLAotCVdJVE5FU1NfUkFOS19CSU4gPSBXSVRORVNTX1JB TktfTEVBRiwKLQlXSVRORVNTX1JBTktfQVJFTkFfU1RBVFMgPSBXSVRORVNTX1JBTktfTEVBRiwK LQlXSVRORVNTX1JBTktfQ09VTlRFUl9BQ0NVTSA9IFdJVE5FU1NfUkFOS19MRUFGLAotCVdJVE5F U1NfUkFOS19EU1MgPSBXSVRORVNTX1JBTktfTEVBRiwKLQlXSVRORVNTX1JBTktfUFJPRl9BQ1RJ VkUgPSBXSVRORVNTX1JBTktfTEVBRiwKLQlXSVRORVNTX1JBTktfUFJPRl9EVU1QX0ZJTEVOQU1F ID0gV0lUTkVTU19SQU5LX0xFQUYsCi0JV0lUTkVTU19SQU5LX1BST0ZfR0RVTVAgPSBXSVRORVNT X1JBTktfTEVBRiwKLQlXSVRORVNTX1JBTktfUFJPRl9ORVhUX1RIUl9VSUQgPSBXSVRORVNTX1JB TktfTEVBRiwKLQlXSVRORVNTX1JBTktfUFJPRl9SRUNFTlRfQUxMT0MgPSBXSVRORVNTX1JBTktf TEVBRiwKLQlXSVRORVNTX1JBTktfUFJPRl9TVEFUUyA9IFdJVE5FU1NfUkFOS19MRUFGLAotCVdJ VE5FU1NfUkFOS19QUk9GX1RIUkVBRF9BQ1RJVkVfSU5JVCA9IFdJVE5FU1NfUkFOS19MRUFGLAot fTsKLXR5cGVkZWYgZW51bSB3aXRuZXNzX3JhbmtfZSB3aXRuZXNzX3JhbmtfdDsKLQotLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KLS8qIFBFUi1XSVRORVNTIERBVEEgKi8KLS8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCi0jaWYgZGVmaW5lZChKRU1BTExPQ19ERUJVRykKLSMgIGRlZmluZSBXSVRORVNT X0lOSVRJQUxJWkVSKG5hbWUsIHJhbmspIHtuYW1lLCByYW5rLCBOVUxMLCBOVUxMLCB7TlVMTCwg TlVMTH19Ci0jZWxzZQotIyAgZGVmaW5lIFdJVE5FU1NfSU5JVElBTElaRVIobmFtZSwgcmFuaykK LSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB3aXRuZXNzX3Mgd2l0bmVzc190OwotdHlwZWRlZiBx bF9oZWFkKHdpdG5lc3NfdCkgd2l0bmVzc19saXN0X3Q7Ci10eXBlZGVmIGludCB3aXRuZXNzX2Nv bXBfdCAoY29uc3Qgd2l0bmVzc190ICosIHZvaWQgKiwgY29uc3Qgd2l0bmVzc190ICosCi0gICAg dm9pZCAqKTsKLQotc3RydWN0IHdpdG5lc3NfcyB7Ci0JLyogTmFtZSwgdXNlZCBmb3IgcHJpbnRp bmcgbG9jayBvcmRlciByZXZlcnNhbCBtZXNzYWdlcy4gKi8KLQljb25zdCBjaGFyCQkqbmFtZTsK LQotCS8qCi0JICogV2l0bmVzcyByYW5rLCB3aGVyZSAwIGlzIGxvd2VzdCBhbmQgV0lUTkVTU19S QU5LX0xFQUYgaXMgaGlnaGVzdC4KLQkgKiBXaXRuZXNzZXMgbXVzdCBiZSBhY3F1aXJlZCBpbiBv cmRlciBvZiBpbmNyZWFzaW5nIHJhbmsuCi0JICovCi0Jd2l0bmVzc19yYW5rX3QJCXJhbms7Ci0K LQkvKgotCSAqIElmIHR3byB3aXRuZXNzZXMgYXJlIG9mIGVxdWFsIHJhbmsgYW5kIHRoZXkgaGF2 ZSB0aGUgc2FtcCBjb21wCi0JICogZnVuY3Rpb24gcG9pbnRlciwgaXQgaXMgY2FsbGVkIGFzIGEg bGFzdCBhdHRlbXB0IHRvIGRpZmZlcmVudGlhdGUKLQkgKiBiZXR3ZWVuIHdpdG5lc3NlcyBvZiBl cXVhbCByYW5rLgotCSAqLwotCXdpdG5lc3NfY29tcF90CQkqY29tcDsKLQotCS8qIE9wYXF1ZSBk YXRhLCBwYXNzZWQgdG8gY29tcCgpLiAqLwotCXZvaWQJCQkqb3BhcXVlOwotCi0JLyogTGlua2Fn ZSBmb3IgdGhyZWFkJ3MgY3VycmVudGx5IG93bmVkIGxvY2tzLiAqLwotCXFsX2VsbSh3aXRuZXNz X3QpCWxpbms7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUEVSLVRIUkVBRCBE QVRBICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3Qgd2l0bmVzc190 c2RfcyB3aXRuZXNzX3RzZF90Owotc3RydWN0IHdpdG5lc3NfdHNkX3MgewotCXdpdG5lc3NfbGlz dF90IHdpdG5lc3NlczsKLQlib29sIGZvcmtpbmc7Ci19OwotCi0jZGVmaW5lIFdJVE5FU1NfVFNE X0lOSVRJQUxJWkVSIHsgcWxfaGVhZF9pbml0aWFsaXplcih3aXRuZXNzZXMpLCBmYWxzZSB9Ci0j ZGVmaW5lIFdJVE5FU1NfVFNETl9OVUxMICgod2l0bmVzc190c2RuX3QgKikwKQotCi0vKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwotLyogKFBFUi1USFJFQUQpIE5VTExBQklMSVRZIEhFTFBFUlMgKi8K LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCB3aXRuZXNzX3RzZG5fcyB3 aXRuZXNzX3RzZG5fdDsKLXN0cnVjdCB3aXRuZXNzX3RzZG5fcyB7Ci0Jd2l0bmVzc190c2RfdCB3 aXRuZXNzX3RzZDsKLX07Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgd2l0bmVzc190c2RuX3Qg Kgotd2l0bmVzc190c2RfdHNkbih3aXRuZXNzX3RzZF90ICp3aXRuZXNzX3RzZCkgewotCXJldHVy biAod2l0bmVzc190c2RuX3QgKil3aXRuZXNzX3RzZDsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lO TElORSBib29sCi13aXRuZXNzX3RzZG5fbnVsbCh3aXRuZXNzX3RzZG5fdCAqd2l0bmVzc190c2Ru KSB7Ci0JcmV0dXJuIHdpdG5lc3NfdHNkbiA9PSBOVUxMOwotfQotCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHdpdG5lc3NfdHNkX3QgKgotd2l0bmVzc190c2RuX3RzZCh3aXRuZXNzX3RzZG5fdCAq d2l0bmVzc190c2RuKSB7Ci0JYXNzZXJ0KCF3aXRuZXNzX3RzZG5fbnVsbCh3aXRuZXNzX3RzZG4p KTsKLQlyZXR1cm4gJndpdG5lc3NfdHNkbi0+d2l0bmVzc190c2Q7Ci19Ci0KLS8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0vKiBBUEkgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHdp dG5lc3NfaW5pdCh3aXRuZXNzX3QgKndpdG5lc3MsIGNvbnN0IGNoYXIgKm5hbWUsIHdpdG5lc3Nf cmFua190IHJhbmssCi0gICAgd2l0bmVzc19jb21wX3QgKmNvbXAsIHZvaWQgKm9wYXF1ZSk7Ci0K LXR5cGVkZWYgdm9pZCAod2l0bmVzc19sb2NrX2Vycm9yX3QpKGNvbnN0IHdpdG5lc3NfbGlzdF90 ICosIGNvbnN0IHdpdG5lc3NfdCAqKTsKLWV4dGVybiB3aXRuZXNzX2xvY2tfZXJyb3JfdCAqSkVU X01VVEFCTEUgd2l0bmVzc19sb2NrX2Vycm9yOwotCi10eXBlZGVmIHZvaWQgKHdpdG5lc3Nfb3du ZXJfZXJyb3JfdCkoY29uc3Qgd2l0bmVzc190ICopOwotZXh0ZXJuIHdpdG5lc3Nfb3duZXJfZXJy b3JfdCAqSkVUX01VVEFCTEUgd2l0bmVzc19vd25lcl9lcnJvcjsKLQotdHlwZWRlZiB2b2lkICh3 aXRuZXNzX25vdF9vd25lcl9lcnJvcl90KShjb25zdCB3aXRuZXNzX3QgKik7Ci1leHRlcm4gd2l0 bmVzc19ub3Rfb3duZXJfZXJyb3JfdCAqSkVUX01VVEFCTEUgd2l0bmVzc19ub3Rfb3duZXJfZXJy b3I7Ci0KLXR5cGVkZWYgdm9pZCAod2l0bmVzc19kZXB0aF9lcnJvcl90KShjb25zdCB3aXRuZXNz X2xpc3RfdCAqLAotICAgIHdpdG5lc3NfcmFua190IHJhbmtfaW5jbHVzaXZlLCB1bnNpZ25lZCBk ZXB0aCk7Ci1leHRlcm4gd2l0bmVzc19kZXB0aF9lcnJvcl90ICpKRVRfTVVUQUJMRSB3aXRuZXNz X2RlcHRoX2Vycm9yOwotCi12b2lkIHdpdG5lc3Nlc19jbGVhbnVwKHdpdG5lc3NfdHNkX3QgKndp dG5lc3NfdHNkKTsKLXZvaWQgd2l0bmVzc19wcmVmb3JrKHdpdG5lc3NfdHNkX3QgKndpdG5lc3Nf dHNkKTsKLXZvaWQgd2l0bmVzc19wb3N0Zm9ya19wYXJlbnQod2l0bmVzc190c2RfdCAqd2l0bmVz c190c2QpOwotdm9pZCB3aXRuZXNzX3Bvc3Rmb3JrX2NoaWxkKHdpdG5lc3NfdHNkX3QgKndpdG5l c3NfdHNkKTsKLQotLyogSGVscGVyLCBub3QgaW50ZW5kZWQgZm9yIGRpcmVjdCB1c2UuICovCi1z dGF0aWMgaW5saW5lIGJvb2wKLXdpdG5lc3Nfb3duZXIod2l0bmVzc190c2RfdCAqd2l0bmVzc190 c2QsIGNvbnN0IHdpdG5lc3NfdCAqd2l0bmVzcykgewotCXdpdG5lc3NfbGlzdF90ICp3aXRuZXNz ZXM7Ci0Jd2l0bmVzc190ICp3OwotCi0JY2Fzc2VydChjb25maWdfZGVidWcpOwotCi0Jd2l0bmVz c2VzID0gJndpdG5lc3NfdHNkLT53aXRuZXNzZXM7Ci0JcWxfZm9yZWFjaCh3LCB3aXRuZXNzZXMs IGxpbmspIHsKLQkJaWYgKHcgPT0gd2l0bmVzcykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9 Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotd2l0bmVzc19hc3Nl cnRfb3duZXIod2l0bmVzc190c2RuX3QgKndpdG5lc3NfdHNkbiwgY29uc3Qgd2l0bmVzc190ICp3 aXRuZXNzKSB7Ci0Jd2l0bmVzc190c2RfdCAqd2l0bmVzc190c2Q7Ci0KLQlpZiAoIWNvbmZpZ19k ZWJ1ZykgewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHdpdG5lc3NfdHNkbl9udWxsKHdpdG5lc3Nf dHNkbikpIHsKLQkJcmV0dXJuOwotCX0KLQl3aXRuZXNzX3RzZCA9IHdpdG5lc3NfdHNkbl90c2Qo d2l0bmVzc190c2RuKTsKLQlpZiAod2l0bmVzcy0+cmFuayA9PSBXSVRORVNTX1JBTktfT01JVCkg ewotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHdpdG5lc3Nfb3duZXIod2l0bmVzc190c2QsIHdpdG5l c3MpKSB7Ci0JCXJldHVybjsKLQl9Ci0Jd2l0bmVzc19vd25lcl9lcnJvcih3aXRuZXNzKTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkCi13aXRuZXNzX2Fzc2VydF9ub3Rfb3duZXIod2l0bmVzc190 c2RuX3QgKndpdG5lc3NfdHNkbiwKLSAgICBjb25zdCB3aXRuZXNzX3QgKndpdG5lc3MpIHsKLQl3 aXRuZXNzX3RzZF90ICp3aXRuZXNzX3RzZDsKLQl3aXRuZXNzX2xpc3RfdCAqd2l0bmVzc2VzOwot CXdpdG5lc3NfdCAqdzsKLQotCWlmICghY29uZmlnX2RlYnVnKSB7Ci0JCXJldHVybjsKLQl9Ci0K LQlpZiAod2l0bmVzc190c2RuX251bGwod2l0bmVzc190c2RuKSkgewotCQlyZXR1cm47Ci0JfQot CXdpdG5lc3NfdHNkID0gd2l0bmVzc190c2RuX3RzZCh3aXRuZXNzX3RzZG4pOwotCWlmICh3aXRu ZXNzLT5yYW5rID09IFdJVE5FU1NfUkFOS19PTUlUKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQl3aXRu ZXNzZXMgPSAmd2l0bmVzc190c2QtPndpdG5lc3NlczsKLQlxbF9mb3JlYWNoKHcsIHdpdG5lc3Nl cywgbGluaykgewotCQlpZiAodyA9PSB3aXRuZXNzKSB7Ci0JCQl3aXRuZXNzX25vdF9vd25lcl9l cnJvcih3aXRuZXNzKTsKLQkJfQotCX0KLX0KLQotLyogUmV0dXJucyBkZXB0aC4gIE5vdCBpbnRl bmRlZCBmb3IgZGlyZWN0IHVzZS4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLXdpdG5lc3Nf ZGVwdGhfdG9fcmFuayh3aXRuZXNzX2xpc3RfdCAqd2l0bmVzc2VzLCB3aXRuZXNzX3JhbmtfdCBy YW5rX2luY2x1c2l2ZSkKLXsKLQl1bnNpZ25lZCBkID0gMDsKLQl3aXRuZXNzX3QgKncgPSBxbF9s YXN0KHdpdG5lc3NlcywgbGluayk7Ci0KLQlpZiAodyAhPSBOVUxMKSB7Ci0JCXFsX3JldmVyc2Vf Zm9yZWFjaCh3LCB3aXRuZXNzZXMsIGxpbmspIHsKLQkJCWlmICh3LT5yYW5rIDwgcmFua19pbmNs dXNpdmUpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWQrKzsKLQkJfQotCX0KLQotCXJldHVybiBk OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3Jhbmso d2l0bmVzc190c2RuX3QgKndpdG5lc3NfdHNkbiwKLSAgICB3aXRuZXNzX3JhbmtfdCByYW5rX2lu Y2x1c2l2ZSwgdW5zaWduZWQgZGVwdGgpIHsKLQlpZiAoIWNvbmZpZ19kZWJ1ZyB8fCB3aXRuZXNz X3RzZG5fbnVsbCh3aXRuZXNzX3RzZG4pKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQl3aXRuZXNzX2xp c3RfdCAqd2l0bmVzc2VzID0gJndpdG5lc3NfdHNkbl90c2Qod2l0bmVzc190c2RuKS0+d2l0bmVz c2VzOwotCXVuc2lnbmVkIGQgPSB3aXRuZXNzX2RlcHRoX3RvX3Jhbmsod2l0bmVzc2VzLCByYW5r X2luY2x1c2l2ZSk7Ci0KLQlpZiAoZCAhPSBkZXB0aCkgewotCQl3aXRuZXNzX2RlcHRoX2Vycm9y KHdpdG5lc3NlcywgcmFua19pbmNsdXNpdmUsIGRlcHRoKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxp bmUgdm9pZAotd2l0bmVzc19hc3NlcnRfZGVwdGgod2l0bmVzc190c2RuX3QgKndpdG5lc3NfdHNk biwgdW5zaWduZWQgZGVwdGgpIHsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHdpdG5l c3NfdHNkbiwgV0lUTkVTU19SQU5LX01JTiwgZGVwdGgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZv aWQKLXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKHdpdG5lc3NfdHNkbl90ICp3aXRuZXNzX3RzZG4p IHsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aCh3aXRuZXNzX3RzZG4sIDApOwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQKLXdpdG5lc3NfYXNzZXJ0X3Bvc2l0aXZlX2RlcHRoX3RvX3Jhbmsod2l0bmVz c190c2RuX3QgKndpdG5lc3NfdHNkbiwKLSAgICB3aXRuZXNzX3JhbmtfdCByYW5rX2luY2x1c2l2 ZSkgewotCWlmICghY29uZmlnX2RlYnVnIHx8IHdpdG5lc3NfdHNkbl9udWxsKHdpdG5lc3NfdHNk bikpIHsKLQkJcmV0dXJuOwotCX0KLQotCXdpdG5lc3NfbGlzdF90ICp3aXRuZXNzZXMgPSAmd2l0 bmVzc190c2RuX3RzZCh3aXRuZXNzX3RzZG4pLT53aXRuZXNzZXM7Ci0JdW5zaWduZWQgZCA9IHdp dG5lc3NfZGVwdGhfdG9fcmFuayh3aXRuZXNzZXMsIHJhbmtfaW5jbHVzaXZlKTsKLQotCWlmIChk ID09IDApIHsKLQkJd2l0bmVzc19kZXB0aF9lcnJvcih3aXRuZXNzZXMsIHJhbmtfaW5jbHVzaXZl LCAxKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotd2l0bmVzc19sb2NrKHdpdG5lc3Nf dHNkbl90ICp3aXRuZXNzX3RzZG4sIHdpdG5lc3NfdCAqd2l0bmVzcykgewotCXdpdG5lc3NfdHNk X3QgKndpdG5lc3NfdHNkOwotCXdpdG5lc3NfbGlzdF90ICp3aXRuZXNzZXM7Ci0Jd2l0bmVzc190 ICp3OwotCi0JaWYgKCFjb25maWdfZGVidWcpIHsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh3aXRu ZXNzX3RzZG5fbnVsbCh3aXRuZXNzX3RzZG4pKSB7Ci0JCXJldHVybjsKLQl9Ci0Jd2l0bmVzc190 c2QgPSB3aXRuZXNzX3RzZG5fdHNkKHdpdG5lc3NfdHNkbik7Ci0JaWYgKHdpdG5lc3MtPnJhbmsg PT0gV0lUTkVTU19SQU5LX09NSVQpIHsKLQkJcmV0dXJuOwotCX0KLQotCXdpdG5lc3NfYXNzZXJ0 X25vdF9vd25lcih3aXRuZXNzX3RzZG4sIHdpdG5lc3MpOwotCi0Jd2l0bmVzc2VzID0gJndpdG5l c3NfdHNkLT53aXRuZXNzZXM7Ci0JdyA9IHFsX2xhc3Qod2l0bmVzc2VzLCBsaW5rKTsKLQlpZiAo dyA9PSBOVUxMKSB7Ci0JCS8qIE5vIG90aGVyIGxvY2tzOyBkbyBub3RoaW5nLiAqLwotCX0gZWxz ZSBpZiAod2l0bmVzc190c2QtPmZvcmtpbmcgJiYgdy0+cmFuayA8PSB3aXRuZXNzLT5yYW5rKSB7 Ci0JCS8qIEZvcmtpbmcsIGFuZCByZWxheGVkIHJhbmtpbmcgc2F0aXNmaWVkLiAqLwotCX0gZWxz ZSBpZiAody0+cmFuayA+IHdpdG5lc3MtPnJhbmspIHsKLQkJLyogTm90IGZvcmtpbmcsIHJhbmsg b3JkZXIgcmV2ZXJzYWwuICovCi0JCXdpdG5lc3NfbG9ja19lcnJvcih3aXRuZXNzZXMsIHdpdG5l c3MpOwotCX0gZWxzZSBpZiAody0+cmFuayA9PSB3aXRuZXNzLT5yYW5rICYmICh3LT5jb21wID09 IE5VTEwgfHwgdy0+Y29tcCAhPQotCSAgICB3aXRuZXNzLT5jb21wIHx8IHctPmNvbXAodywgdy0+ b3BhcXVlLCB3aXRuZXNzLCB3aXRuZXNzLT5vcGFxdWUpID4KLQkgICAgMCkpIHsKLQkJLyoKLQkJ ICogTWlzc2luZy9pbmNvbXBhdGlibGUgY29tcGFyaXNvbiBmdW5jdGlvbiwgb3IgY29tcGFyaXNv bgotCQkgKiBmdW5jdGlvbiBpbmRpY2F0ZXMgcmFuayBvcmRlciByZXZlcnNhbC4KLQkJICovCi0J CXdpdG5lc3NfbG9ja19lcnJvcih3aXRuZXNzZXMsIHdpdG5lc3MpOwotCX0KLQotCXFsX2VsbV9u ZXcod2l0bmVzcywgbGluayk7Ci0JcWxfdGFpbF9pbnNlcnQod2l0bmVzc2VzLCB3aXRuZXNzLCBs aW5rKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi13aXRuZXNzX3VubG9jayh3aXRuZXNzX3Rz ZG5fdCAqd2l0bmVzc190c2RuLCB3aXRuZXNzX3QgKndpdG5lc3MpIHsKLQl3aXRuZXNzX3RzZF90 ICp3aXRuZXNzX3RzZDsKLQl3aXRuZXNzX2xpc3RfdCAqd2l0bmVzc2VzOwotCi0JaWYgKCFjb25m aWdfZGVidWcpIHsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh3aXRuZXNzX3RzZG5fbnVsbCh3aXRu ZXNzX3RzZG4pKSB7Ci0JCXJldHVybjsKLQl9Ci0Jd2l0bmVzc190c2QgPSB3aXRuZXNzX3RzZG5f dHNkKHdpdG5lc3NfdHNkbik7Ci0JaWYgKHdpdG5lc3MtPnJhbmsgPT0gV0lUTkVTU19SQU5LX09N SVQpIHsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQ2hlY2sgd2hldGhlciBvd25lciBiZWZv cmUgcmVtb3ZhbCwgcmF0aGVyIHRoYW4gcmVseWluZyBvbgotCSAqIHdpdG5lc3NfYXNzZXJ0X293 bmVyKCkgdG8gYWJvcnQsIHNvIHRoYXQgdW5pdCB0ZXN0cyBjYW4gdGVzdCB0aGlzCi0JICogZnVu Y3Rpb24ncyBmYWlsdXJlIG1vZGUgd2l0aG91dCBjYXVzaW5nIHVuZGVmaW5lZCBiZWhhdmlvci4K LQkgKi8KLQlpZiAod2l0bmVzc19vd25lcih3aXRuZXNzX3RzZCwgd2l0bmVzcykpIHsKLQkJd2l0 bmVzc2VzID0gJndpdG5lc3NfdHNkLT53aXRuZXNzZXM7Ci0JCXFsX3JlbW92ZSh3aXRuZXNzZXMs IHdpdG5lc3MsIGxpbmspOwotCX0gZWxzZSB7Ci0JCXdpdG5lc3NfYXNzZXJ0X293bmVyKHdpdG5l c3NfdHNkbiwgd2l0bmVzcyk7Ci0JfQotfQotCi0jZW5kaWYgLyogSkVNQUxMT0NfSU5URVJOQUxf V0lUTkVTU19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvYy5zaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2Muc2gKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGIxOWIxNTQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvYy5z aAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1vYmpyb290PSQx Ci0KLWNhdCA8PEVPRgotI2lmbmRlZiBKRU1BTExPQ19IXwotI2RlZmluZSBKRU1BTExPQ19IXwot I2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1FT0YKLQotZm9yIGhk ciBpbiBqZW1hbGxvY19kZWZzLmggamVtYWxsb2NfcmVuYW1lLmggamVtYWxsb2NfbWFjcm9zLmgg XAotICAgICAgICAgICBqZW1hbGxvY19wcm90b3MuaCBqZW1hbGxvY190eXBlZGVmcy5oIGplbWFs bG9jX21hbmdsZS5oIDsgZG8KLSAgY2F0ICIke29ianJvb3R9aW5jbHVkZS9qZW1hbGxvYy8ke2hk cn0iIFwKLSAgICAgIHwgZ3JlcCAtdiAnR2VuZXJhdGVkIGZyb20gLiogYnkgY29uZmlndXJlXC4n IFwKLSAgICAgIHwgc2VkIC1lICdzLyAkLy9nJwotICBlY2hvCi1kb25lCi0KLWNhdCA8PEVPRgot I2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLSNlbmRpZiAvKiBKRU1BTExPQ19IXyAqLwot RU9GCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv aW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19kZWZzLmguaW4gYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX2RlZnMuaC5pbgpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JlMmZjYS4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2plbWFs bG9jX2RlZnMuaC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIERlZmluZWQg aWYgX19hdHRyaWJ1dGVfXygoLi4uKSkgc3ludGF4IGlzIHN1cHBvcnRlZC4gKi8KLSN1bmRlZiBK RU1BTExPQ19IQVZFX0FUVFIKLQotLyogRGVmaW5lZCBpZiBhbGxvY19zaXplIGF0dHJpYnV0ZSBp cyBzdXBwb3J0ZWQuICovCi0jdW5kZWYgSkVNQUxMT0NfSEFWRV9BVFRSX0FMTE9DX1NJWkUKLQot LyogRGVmaW5lZCBpZiBmb3JtYXRfYXJnKC4uLikgYXR0cmlidXRlIGlzIHN1cHBvcnRlZC4gKi8K LSN1bmRlZiBKRU1BTExPQ19IQVZFX0FUVFJfRk9STUFUX0FSRwotCi0vKiBEZWZpbmVkIGlmIGZv cm1hdChnbnVfcHJpbnRmLCAuLi4pIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICovCi0jdW5kZWYg SkVNQUxMT0NfSEFWRV9BVFRSX0ZPUk1BVF9HTlVfUFJJTlRGCi0KLS8qIERlZmluZWQgaWYgZm9y bWF0KHByaW50ZiwgLi4uKSBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkLiAqLwotI3VuZGVmIEpFTUFM TE9DX0hBVkVfQVRUUl9GT1JNQVRfUFJJTlRGCi0KLS8qIERlZmluZWQgaWYgZmFsbHRocm91Z2gg YXR0cmlidXRlIGlzIHN1cHBvcnRlZC4gKi8KLSN1bmRlZiBKRU1BTExPQ19IQVZFX0FUVFJfRkFM TFRIUk9VR0gKLQotLyogRGVmaW5lZCBpZiBjb2xkIGF0dHJpYnV0ZSBpcyBzdXBwb3J0ZWQuICov Ci0jdW5kZWYgSkVNQUxMT0NfSEFWRV9BVFRSX0NPTEQKLQotLyoKLSAqIERlZmluZSBvdmVycmlk ZXMgZm9yIG5vbi1zdGFuZGFyZCBhbGxvY2F0b3ItcmVsYXRlZCBmdW5jdGlvbnMgaWYgdGhleSBh cmUKLSAqIHByZXNlbnQgb24gdGhlIHN5c3RlbS4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX09WRVJS SURFX01FTUFMSUdOCi0jdW5kZWYgSkVNQUxMT0NfT1ZFUlJJREVfVkFMTE9DCi0KLS8qCi0gKiBB dCBsZWFzdCBMaW51eCBvbWl0cyB0aGUgImNvbnN0IiBpbjoKLSAqCi0gKiAgIHNpemVfdCBtYWxs b2NfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCAqcHRyKTsKLSAqCi0gKiBNYXRjaCB0aGUgb3BlcmF0 aW5nIHN5c3RlbSdzIHByb3RvdHlwZS4KLSAqLwotI3VuZGVmIEpFTUFMTE9DX1VTQUJMRV9TSVpF X0NPTlNUCi0KLS8qCi0gKiBJZiBkZWZpbmVkLCBzcGVjaWZ5IHRocm93KCkgZm9yIHRoZSBwdWJs aWMgZnVuY3Rpb24gcHJvdG90eXBlcyB3aGVuIGNvbXBpbGluZwotICogd2l0aCBDKysuICBUaGUg b25seSBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIGlzIHRvIG1hdGNoIHRoZSBwcm90b3R5cGVzIHRo YXQKLSAqIGdsaWJjIGRlZmluZXMuCi0gKi8KLSN1bmRlZiBKRU1BTExPQ19VU0VfQ1hYX1RIUk9X Ci0KLSNpZmRlZiBfTVNDX1ZFUgotIyAgaWZkZWYgX1dJTjY0Ci0jICAgIGRlZmluZSBMR19TSVpF T0ZfUFRSX1dJTiAzCi0jICBlbHNlCi0jICAgIGRlZmluZSBMR19TSVpFT0ZfUFRSX1dJTiAyCi0j ICBlbmRpZgotI2VuZGlmCi0KLS8qIHNpemVvZih2b2lkICopID09IDJeTEdfU0laRU9GX1BUUi4g Ki8KLSN1bmRlZiBMR19TSVpFT0ZfUFRSCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19tYWNyb3MuaC5p biBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxs b2MvamVtYWxsb2NfbWFjcm9zLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVi YjMxMzcuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19tYWNyb3MuaC5pbgorKysgL2Rldi9udWxsCkBA IC0xLDE0OSArMCwwIEBACi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5o PgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0 cmluZ3MuaD4KLQotI2RlZmluZSBKRU1BTExPQ19WRVJTSU9OICJAamVtYWxsb2NfdmVyc2lvbkAi Ci0jZGVmaW5lIEpFTUFMTE9DX1ZFUlNJT05fTUFKT1IgQGplbWFsbG9jX3ZlcnNpb25fbWFqb3JA Ci0jZGVmaW5lIEpFTUFMTE9DX1ZFUlNJT05fTUlOT1IgQGplbWFsbG9jX3ZlcnNpb25fbWlub3JA Ci0jZGVmaW5lIEpFTUFMTE9DX1ZFUlNJT05fQlVHRklYIEBqZW1hbGxvY192ZXJzaW9uX2J1Z2Zp eEAKLSNkZWZpbmUgSkVNQUxMT0NfVkVSU0lPTl9OUkVWIEBqZW1hbGxvY192ZXJzaW9uX25yZXZA Ci0jZGVmaW5lIEpFTUFMTE9DX1ZFUlNJT05fR0lEICJAamVtYWxsb2NfdmVyc2lvbl9naWRAIgot I2RlZmluZSBKRU1BTExPQ19WRVJTSU9OX0dJRF9JREVOVCBAamVtYWxsb2NfdmVyc2lvbl9naWRA Ci0KLSNkZWZpbmUgTUFMTE9DWF9MR19BTElHTihsYSkJKChpbnQpKGxhKSkKLSNpZiBMR19TSVpF T0ZfUFRSID09IDIKLSMgIGRlZmluZSBNQUxMT0NYX0FMSUdOKGEpCSgoaW50KShmZnMoKGludCko YSkpLTEpKQotI2Vsc2UKLSMgIGRlZmluZSBNQUxMT0NYX0FMSUdOKGEpCQkJCQkJXAotICAgICAo KGludCkoKChzaXplX3QpKGEpIDwgKHNpemVfdClJTlRfTUFYKSA/IGZmcygoaW50KShhKSktMSA6 CVwKLSAgICAgZmZzKChpbnQpKCgoc2l6ZV90KShhKSk+PjMyKSkrMzEpKQotI2VuZGlmCi0jZGVm aW5lIE1BTExPQ1hfWkVSTwkoKGludCkweDQwKQotLyoKLSAqIEJpYXMgdGNhY2hlIGluZGV4IGJp dHMgc28gdGhhdCAwIGVuY29kZXMgImF1dG9tYXRpYyB0Y2FjaGUgbWFuYWdlbWVudCIsIGFuZCAx Ci0gKiBlbmNvZGVzIE1BTExPQ1hfVENBQ0hFX05PTkUuCi0gKi8KLSNkZWZpbmUgTUFMTE9DWF9U Q0FDSEUodGMpCSgoaW50KSgoKHRjKSsyKSA8PCA4KSkKLSNkZWZpbmUgTUFMTE9DWF9UQ0FDSEVf Tk9ORQlNQUxMT0NYX1RDQUNIRSgtMSkKLS8qCi0gKiBCaWFzIGFyZW5hIGluZGV4IGJpdHMgc28g dGhhdCAwIGVuY29kZXMgInVzZSBhbiBhdXRvbWF0aWNhbGx5IGNob3NlbiBhcmVuYSIuCi0gKi8K LSNkZWZpbmUgTUFMTE9DWF9BUkVOQShhKQkoKCgoaW50KShhKSkrMSkgPDwgMjApCi0KLS8qCi0g KiBVc2UgYXMgYXJlbmEgaW5kZXggaW4gImFyZW5hLjxpPi57cHVyZ2UsZGVjYXksZHNzfSIgYW5k Ci0gKiAic3RhdHMuYXJlbmFzLjxpPi4qIiBtYWxsY3RsIGludGVyZmFjZXMgdG8gc2VsZWN0IGFs bCBhcmVuYXMuICBUaGlzCi0gKiBkZWZpbml0aW9uIGlzIGludGVudGlvbmFsbHkgc3BlY2lmaWVk IGluIHJhdyBkZWNpbWFsIGZvcm1hdCB0byBzdXBwb3J0Ci0gKiBjcHAtYmFzZWQgc3RyaW5nIGNv bmNhdGVuYXRpb24sIGUuZy4KLSAqCi0gKiAgICNkZWZpbmUgU1RSSU5HSUZZX0hFTFBFUih4KSAj eAotICogICAjZGVmaW5lIFNUUklOR0lGWSh4KSBTVFJJTkdJRllfSEVMUEVSKHgpCi0gKgotICog ICBtYWxsY3RsKCJhcmVuYS4iIFNUUklOR0lGWShNQUxMQ1RMX0FSRU5BU19BTEwpICIucHVyZ2Ui LCBOVUxMLCBOVUxMLCBOVUxMLAotICogICAgICAgMCk7Ci0gKi8KLSNkZWZpbmUgTUFMTENUTF9B UkVOQVNfQUxMCTQwOTYKLS8qCi0gKiBVc2UgYXMgYXJlbmEgaW5kZXggaW4gInN0YXRzLmFyZW5h cy48aT4uKiIgbWFsbGN0bCBpbnRlcmZhY2VzIHRvIHNlbGVjdAotICogZGVzdHJveWVkIGFyZW5h cy4KLSAqLwotI2RlZmluZSBNQUxMQ1RMX0FSRU5BU19ERVNUUk9ZRUQJNDA5NwotCi0jaWYgZGVm aW5lZChfX2NwbHVzcGx1cykgJiYgZGVmaW5lZChKRU1BTExPQ19VU0VfQ1hYX1RIUk9XKQotIyAg ZGVmaW5lIEpFTUFMTE9DX0NYWF9USFJPVyB0aHJvdygpCi0jZWxzZQotIyAgZGVmaW5lIEpFTUFM TE9DX0NYWF9USFJPVwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyAgZGVmaW5l IEpFTUFMTE9DX0FUVFIocykKLSMgIGRlZmluZSBKRU1BTExPQ19BTElHTkVEKHMpIF9fZGVjbHNw ZWMoYWxpZ24ocykpCi0jICBkZWZpbmUgSkVNQUxMT0NfQUxMT0NfU0laRShzKQotIyAgZGVmaW5l IEpFTUFMTE9DX0FMTE9DX1NJWkUyKHMxLCBzMikKLSMgIGlmbmRlZiBKRU1BTExPQ19FWFBPUlQK LSMgICAgaWZkZWYgRExMRVhQT1JUCi0jICAgICAgZGVmaW5lIEpFTUFMTE9DX0VYUE9SVCBfX2Rl Y2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBKRU1BTExPQ19FWFBP UlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgIGVuZGlmCi0jICBlbmRpZgotIyAgZGVmaW5l IEpFTUFMTE9DX0ZPUk1BVF9BUkcoaSkKLSMgIGRlZmluZSBKRU1BTExPQ19GT1JNQVRfUFJJTlRG KHMsIGkpCi0jICBkZWZpbmUgSkVNQUxMT0NfRkFMTFRIUk9VR0gKLSMgIGRlZmluZSBKRU1BTExP Q19OT0lOTElORSBfX2RlY2xzcGVjKG5vaW5saW5lKQotIyAgaWZkZWYgX19jcGx1c3BsdXMKLSMg ICAgZGVmaW5lIEpFTUFMTE9DX05PVEhST1cgX19kZWNsc3BlYyhub3Rocm93KQotIyAgZWxzZQot IyAgICBkZWZpbmUgSkVNQUxMT0NfTk9USFJPVwotIyAgZW5kaWYKLSMgIGRlZmluZSBKRU1BTExP Q19TRUNUSU9OKHMpIF9fZGVjbHNwZWMoYWxsb2NhdGUocykpCi0jICBkZWZpbmUgSkVNQUxMT0Nf UkVTVFJJQ1RfUkVUVVJOIF9fZGVjbHNwZWMocmVzdHJpY3QpCi0jICBpZiBfTVNDX1ZFUiA+PSAx OTAwICYmICFkZWZpbmVkKF9fRURHX18pCi0jICAgIGRlZmluZSBKRU1BTExPQ19BTExPQ0FUT1Ig X19kZWNsc3BlYyhhbGxvY2F0b3IpCi0jICBlbHNlCi0jICAgIGRlZmluZSBKRU1BTExPQ19BTExP Q0FUT1IKLSMgIGVuZGlmCi0jICBkZWZpbmUgSkVNQUxMT0NfQ09MRAotI2VsaWYgZGVmaW5lZChK RU1BTExPQ19IQVZFX0FUVFIpCi0jICBkZWZpbmUgSkVNQUxMT0NfQVRUUihzKSBfX2F0dHJpYnV0 ZV9fKChzKSkKLSMgIGRlZmluZSBKRU1BTExPQ19BTElHTkVEKHMpIEpFTUFMTE9DX0FUVFIoYWxp Z25lZChzKSkKLSMgIGlmZGVmIEpFTUFMTE9DX0hBVkVfQVRUUl9BTExPQ19TSVpFCi0jICAgIGRl ZmluZSBKRU1BTExPQ19BTExPQ19TSVpFKHMpIEpFTUFMTE9DX0FUVFIoYWxsb2Nfc2l6ZShzKSkK LSMgICAgZGVmaW5lIEpFTUFMTE9DX0FMTE9DX1NJWkUyKHMxLCBzMikgSkVNQUxMT0NfQVRUUihh bGxvY19zaXplKHMxLCBzMikpCi0jICBlbHNlCi0jICAgIGRlZmluZSBKRU1BTExPQ19BTExPQ19T SVpFKHMpCi0jICAgIGRlZmluZSBKRU1BTExPQ19BTExPQ19TSVpFMihzMSwgczIpCi0jICBlbmRp ZgotIyAgaWZuZGVmIEpFTUFMTE9DX0VYUE9SVAotIyAgICBkZWZpbmUgSkVNQUxMT0NfRVhQT1JU IEpFTUFMTE9DX0FUVFIodmlzaWJpbGl0eSgiZGVmYXVsdCIpKQotIyAgZW5kaWYKLSMgIGlmZGVm IEpFTUFMTE9DX0hBVkVfQVRUUl9GT1JNQVRfQVJHCi0jICAgIGRlZmluZSBKRU1BTExPQ19GT1JN QVRfQVJHKGkpIEpFTUFMTE9DX0FUVFIoX19mb3JtYXRfYXJnX18oMykpCi0jICBlbHNlCi0jICAg IGRlZmluZSBKRU1BTExPQ19GT1JNQVRfQVJHKGkpCi0jICBlbmRpZgotIyAgaWZkZWYgSkVNQUxM T0NfSEFWRV9BVFRSX0ZPUk1BVF9HTlVfUFJJTlRGCi0jICAgIGRlZmluZSBKRU1BTExPQ19GT1JN QVRfUFJJTlRGKHMsIGkpIEpFTUFMTE9DX0FUVFIoZm9ybWF0KGdudV9wcmludGYsIHMsIGkpKQot IyAgZWxpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfQVRUUl9GT1JNQVRfUFJJTlRGKQotIyAgICBk ZWZpbmUgSkVNQUxMT0NfRk9STUFUX1BSSU5URihzLCBpKSBKRU1BTExPQ19BVFRSKGZvcm1hdChw cmludGYsIHMsIGkpKQotIyAgZWxzZQotIyAgICBkZWZpbmUgSkVNQUxMT0NfRk9STUFUX1BSSU5U RihzLCBpKQotIyAgZW5kaWYKLSMgIGlmZGVmIEpFTUFMTE9DX0hBVkVfQVRUUl9GQUxMVEhST1VH SAotIyAgICBkZWZpbmUgSkVNQUxMT0NfRkFMTFRIUk9VR0ggSkVNQUxMT0NfQVRUUihmYWxsdGhy b3VnaCkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEpFTUFMTE9DX0ZBTExUSFJPVUdICi0jICBlbmRp ZgotIyAgZGVmaW5lIEpFTUFMTE9DX05PSU5MSU5FIEpFTUFMTE9DX0FUVFIobm9pbmxpbmUpCi0j ICBkZWZpbmUgSkVNQUxMT0NfTk9USFJPVyBKRU1BTExPQ19BVFRSKG5vdGhyb3cpCi0jICBkZWZp bmUgSkVNQUxMT0NfU0VDVElPTihzKSBKRU1BTExPQ19BVFRSKHNlY3Rpb24ocykpCi0jICBkZWZp bmUgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCi0jICBkZWZpbmUgSkVNQUxMT0NfQUxMT0NBVE9S Ci0jICBpZmRlZiBKRU1BTExPQ19IQVZFX0FUVFJfQ09MRAotIyAgICBkZWZpbmUgSkVNQUxMT0Nf Q09MRCBKRU1BTExPQ19BVFRSKF9fY29sZF9fKQotIyAgZWxzZQotIyAgICBkZWZpbmUgSkVNQUxM T0NfQ09MRAotIyAgZW5kaWYKLSNlbHNlCi0jICBkZWZpbmUgSkVNQUxMT0NfQVRUUihzKQotIyAg ZGVmaW5lIEpFTUFMTE9DX0FMSUdORUQocykKLSMgIGRlZmluZSBKRU1BTExPQ19BTExPQ19TSVpF KHMpCi0jICBkZWZpbmUgSkVNQUxMT0NfQUxMT0NfU0laRTIoczEsIHMyKQotIyAgZGVmaW5lIEpF TUFMTE9DX0VYUE9SVAotIyAgZGVmaW5lIEpFTUFMTE9DX0ZPUk1BVF9QUklOVEYocywgaSkKLSMg IGRlZmluZSBKRU1BTExPQ19GQUxMVEhST1VHSAotIyAgZGVmaW5lIEpFTUFMTE9DX05PSU5MSU5F Ci0jICBkZWZpbmUgSkVNQUxMT0NfTk9USFJPVwotIyAgZGVmaW5lIEpFTUFMTE9DX1NFQ1RJT04o cykKLSMgIGRlZmluZSBKRU1BTExPQ19SRVNUUklDVF9SRVRVUk4KLSMgIGRlZmluZSBKRU1BTExP Q19BTExPQ0FUT1IKLSMgIGRlZmluZSBKRU1BTExPQ19DT0xECi0jZW5kaWYKLQotI2lmIChkZWZp bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykpICYmICFkZWZpbmVkKEpFTUFM TE9DX05PX1JFTkFNRSkKLSMgIGRlZmluZSBKRU1BTExPQ19TWVNfTk9USFJPVwotI2Vsc2UKLSMg IGRlZmluZSBKRU1BTExPQ19TWVNfTk9USFJPVyBKRU1BTExPQ19OT1RIUk9XCi0jZW5kaWYKCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRl L2plbWFsbG9jL2plbWFsbG9jX21hbmdsZS5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlLnNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjNjc1YmI0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfbWFu Z2xlLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyEvYmluL3NoIC1ldQotCi1w dWJsaWNfc3ltYm9sc190eHQ9JDEKLXN5bWJvbF9wcmVmaXg9JDIKLQotY2F0IDw8RU9GCi0vKgot ICogQnkgZGVmYXVsdCBhcHBsaWNhdGlvbiBjb2RlIG11c3QgZXhwbGljaXRseSByZWZlciB0byBt YW5nbGVkIHN5bWJvbCBuYW1lcywKLSAqIHNvIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gdXNlIGpl bWFsbG9jIGluIGNvbmp1bmN0aW9uIHdpdGggYW5vdGhlciBhbGxvY2F0b3IKLSAqIGluIHRoZSBz YW1lIGFwcGxpY2F0aW9uLiAgRGVmaW5lIEpFTUFMTE9DX01BTkdMRSBpbiBvcmRlciB0byBjYXVz ZSBhdXRvbWF0aWMKLSAqIG5hbWUgbWFuZ2xpbmcgdGhhdCBtYXRjaGVzIHRoZSBBUEkgcHJlZml4 aW5nIHRoYXQgaGFwcGVuZWQgYXMgYSByZXN1bHQgb2YKLSAqIC0td2l0aC1tYW5nbGluZyBhbmQv b3IgLS13aXRoLWplbWFsbG9jLXByZWZpeCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgotICovCi0j aWZkZWYgSkVNQUxMT0NfTUFOR0xFCi0jICBpZm5kZWYgSkVNQUxMT0NfTk9fREVNQU5HTEUKLSMg ICAgZGVmaW5lIEpFTUFMTE9DX05PX0RFTUFOR0xFCi0jICBlbmRpZgotRU9GCi0KLWZvciBubSBp biBgY2F0ICR7cHVibGljX3N5bWJvbHNfdHh0fWAgOyBkbwotICBuPWBlY2hvICR7bm19IHx0ciAn OicgJyAnIHxhd2sgJ3twcmludCAkMX0nYAotICBlY2hvICIjICBkZWZpbmUgJHtufSAke3N5bWJv bF9wcmVmaXh9JHtufSIKLWRvbmUKLQotY2F0IDw8RU9GCi0jZW5kaWYKLQotLyoKLSAqIFRoZSAk e3N5bWJvbF9wcmVmaXh9KiBtYWNyb3MgY2FuIGJlIHVzZWQgYXMgc3RhYmxlIGFsdGVybmF0aXZl IG5hbWVzIGZvciB0aGUKLSAqIHB1YmxpYyBqZW1hbGxvYyBBUEkgaWYgSkVNQUxMT0NfTk9fREVN QU5HTEUgaXMgZGVmaW5lZC4gIFRoaXMgaXMgcHJpbWFyaWx5Ci0gKiBtZWFudCBmb3IgdXNlIGlu IGplbWFsbG9jIGl0c2VsZiwgYnV0IGl0IGNhbiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9uIGNvZGUg dG8KLSAqIHByb3ZpZGUgaXNvbGF0aW9uIGZyb20gdGhlIG5hbWUgbWFuZ2xpbmcgc3BlY2lmaWVk IHZpYSAtLXdpdGgtbWFuZ2xpbmcKLSAqIGFuZC9vciAtLXdpdGgtamVtYWxsb2MtcHJlZml4Lgot ICovCi0jaWZuZGVmIEpFTUFMTE9DX05PX0RFTUFOR0xFCi1FT0YKLQotZm9yIG5tIGluIGBjYXQg JHtwdWJsaWNfc3ltYm9sc190eHR9YCA7IGRvCi0gIG49YGVjaG8gJHtubX0gfHRyICc6JyAnICcg fGF3ayAne3ByaW50ICQxfSdgCi0gIGVjaG8gIiMgIHVuZGVmICR7c3ltYm9sX3ByZWZpeH0ke259 IgotZG9uZQotCi1jYXQgPDxFT0YKLSNlbmRpZgotRU9GCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19w cm90b3MuaC5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1 ZGUvamVtYWxsb2MvamVtYWxsb2NfcHJvdG9zLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDM1NjIyMWMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19wcm90b3MuaC5pbgorKysgL2Rl di9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBUaGUgQGplX0AgcHJlZml4IG9uIHRoZSBm b2xsb3dpbmcgcHVibGljIHN5bWJvbCBkZWNsYXJhdGlvbnMgaXMgYW4gYXJ0aWZhY3QKLSAqIG9m IG5hbWVzcGFjZSBtYW5hZ2VtZW50LCBhbmQgc2hvdWxkIGJlIG9taXR0ZWQgaW4gYXBwbGljYXRp b24gY29kZSB1bmxlc3MKLSAqIEpFTUFMTE9DX05PX0RFTUFOR0xFIGlzIGRlZmluZWQgKHNlZSBq ZW1hbGxvY19tYW5nbGVAaW5zdGFsbF9zdWZmaXhALmgpLgotICovCi1leHRlcm4gSkVNQUxMT0Nf RVhQT1JUIGNvbnN0IGNoYXIJKkBqZV9AbWFsbG9jX2NvbmY7Ci1leHRlcm4gSkVNQUxMT0NfRVhQ T1JUIHZvaWQJCSgqQGplX0BtYWxsb2NfbWVzc2FnZSkodm9pZCAqY2JvcGFxdWUsCi0gICAgY29u c3QgY2hhciAqcyk7Ci0KLUpFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxM T0NfUkVTVFJJQ1RfUkVUVVJOCi0gICAgdm9pZCBKRU1BTExPQ19TWVNfTk9USFJPVwkqQGplX0Bt YWxsb2Moc2l6ZV90IHNpemUpCi0gICAgSkVNQUxMT0NfQ1hYX1RIUk9XIEpFTUFMTE9DX0FUVFIo bWFsbG9jKSBKRU1BTExPQ19BTExPQ19TSVpFKDEpOwotSkVNQUxMT0NfRVhQT1JUIEpFTUFMTE9D X0FMTE9DQVRPUiBKRU1BTExPQ19SRVNUUklDVF9SRVRVUk4KLSAgICB2b2lkIEpFTUFMTE9DX1NZ U19OT1RIUk9XCSpAamVfQGNhbGxvYyhzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSkKLSAgICBKRU1B TExPQ19DWFhfVEhST1cgSkVNQUxMT0NfQVRUUihtYWxsb2MpIEpFTUFMTE9DX0FMTE9DX1NJWkUy KDEsIDIpOwotSkVNQUxMT0NfRVhQT1JUIGludCBKRU1BTExPQ19TWVNfTk9USFJPVyBAamVfQHBv c2l4X21lbWFsaWduKAotICAgIHZvaWQgKiptZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVf dCBzaXplKSBKRU1BTExPQ19DWFhfVEhST1cKLSAgICBKRU1BTExPQ19BVFRSKG5vbm51bGwoMSkp OwotSkVNQUxMT0NfRVhQT1JUIEpFTUFMTE9DX0FMTE9DQVRPUiBKRU1BTExPQ19SRVNUUklDVF9S RVRVUk4KLSAgICB2b2lkIEpFTUFMTE9DX1NZU19OT1RIUk9XCSpAamVfQGFsaWduZWRfYWxsb2Mo c2l6ZV90IGFsaWdubWVudCwKLSAgICBzaXplX3Qgc2l6ZSkgSkVNQUxMT0NfQ1hYX1RIUk9XIEpF TUFMTE9DX0FUVFIobWFsbG9jKQotICAgIEpFTUFMTE9DX0FMTE9DX1NJWkUoMik7Ci1KRU1BTExP Q19FWFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9SIEpFTUFMTE9DX1JFU1RSSUNUX1JFVFVSTgotICAg IHZvaWQgSkVNQUxMT0NfU1lTX05PVEhST1cJKkBqZV9AcmVhbGxvYyh2b2lkICpwdHIsIHNpemVf dCBzaXplKQotICAgIEpFTUFMTE9DX0NYWF9USFJPVyBKRU1BTExPQ19BTExPQ19TSVpFKDIpOwot SkVNQUxMT0NfRVhQT1JUIHZvaWQgSkVNQUxMT0NfU1lTX05PVEhST1cJQGplX0BmcmVlKHZvaWQg KnB0cikKLSAgICBKRU1BTExPQ19DWFhfVEhST1c7Ci0KLUpFTUFMTE9DX0VYUE9SVCBKRU1BTExP Q19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCi0gICAgdm9pZCBKRU1BTExPQ19O T1RIUk9XCSpAamVfQG1hbGxvY3goc2l6ZV90IHNpemUsIGludCBmbGFncykKLSAgICBKRU1BTExP Q19BVFRSKG1hbGxvYykgSkVNQUxMT0NfQUxMT0NfU0laRSgxKTsKLUpFTUFMTE9DX0VYUE9SVCBK RU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCi0gICAgdm9pZCBKRU1B TExPQ19OT1RIUk9XCSpAamVfQHJhbGxvY3godm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKLSAgICBp bnQgZmxhZ3MpIEpFTUFMTE9DX0FMTE9DX1NJWkUoMik7Ci1KRU1BTExPQ19FWFBPUlQgc2l6ZV90 IEpFTUFMTE9DX05PVEhST1cJQGplX0B4YWxsb2N4KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0g ICAgc2l6ZV90IGV4dHJhLCBpbnQgZmxhZ3MpOwotSkVNQUxMT0NfRVhQT1JUIHNpemVfdCBKRU1B TExPQ19OT1RIUk9XCUBqZV9Ac2FsbG9jeChjb25zdCB2b2lkICpwdHIsCi0gICAgaW50IGZsYWdz KSBKRU1BTExPQ19BVFRSKHB1cmUpOwotSkVNQUxMT0NfRVhQT1JUIHZvaWQgSkVNQUxMT0NfTk9U SFJPVwlAamVfQGRhbGxvY3godm9pZCAqcHRyLCBpbnQgZmxhZ3MpOwotSkVNQUxMT0NfRVhQT1JU IHZvaWQgSkVNQUxMT0NfTk9USFJPVwlAamVfQHNkYWxsb2N4KHZvaWQgKnB0ciwgc2l6ZV90IHNp emUsCi0gICAgaW50IGZsYWdzKTsKLUpFTUFMTE9DX0VYUE9SVCBzaXplX3QgSkVNQUxMT0NfTk9U SFJPVwlAamVfQG5hbGxvY3goc2l6ZV90IHNpemUsIGludCBmbGFncykKLSAgICBKRU1BTExPQ19B VFRSKHB1cmUpOwotCi1KRU1BTExPQ19FWFBPUlQgaW50IEpFTUFMTE9DX05PVEhST1cJQGplX0Bt YWxsY3RsKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5w LCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKTsKLUpFTUFMTE9DX0VYUE9SVCBpbnQgSkVNQUxM T0NfTk9USFJPVwlAamVfQG1hbGxjdGxuYW1ldG9taWIoY29uc3QgY2hhciAqbmFtZSwKLSAgICBz aXplX3QgKm1pYnAsIHNpemVfdCAqbWlibGVucCk7Ci1KRU1BTExPQ19FWFBPUlQgaW50IEpFTUFM TE9DX05PVEhST1cJQGplX0BtYWxsY3RsYnltaWIoY29uc3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6 ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXpl X3QgbmV3bGVuKTsKLUpFTUFMTE9DX0VYUE9SVCB2b2lkIEpFTUFMTE9DX05PVEhST1cJQGplX0Bt YWxsb2Nfc3RhdHNfcHJpbnQoCi0gICAgdm9pZCAoKndyaXRlX2NiKSh2b2lkICosIGNvbnN0IGNo YXIgKiksIHZvaWQgKkBqZV9AY2JvcGFxdWUsCi0gICAgY29uc3QgY2hhciAqb3B0cyk7Ci1KRU1B TExPQ19FWFBPUlQgc2l6ZV90IEpFTUFMTE9DX05PVEhST1cJQGplX0BtYWxsb2NfdXNhYmxlX3Np emUoCi0gICAgSkVNQUxMT0NfVVNBQkxFX1NJWkVfQ09OU1Qgdm9pZCAqcHRyKSBKRU1BTExPQ19D WFhfVEhST1c7Ci0jaWZkZWYgSkVNQUxMT0NfSEFWRV9NQUxMT0NfU0laRQotSkVNQUxMT0NfRVhQ T1JUIHNpemVfdCBKRU1BTExPQ19OT1RIUk9XCUBqZV9AbWFsbG9jX3NpemUoCi0gICAgY29uc3Qg dm9pZCAqcHRyKTsKLSNlbmRpZgotCi0jaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfTUVNQUxJR04K LUpFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVU VVJOCi0gICAgdm9pZCBKRU1BTExPQ19TWVNfTk9USFJPVwkqQGplX0BtZW1hbGlnbihzaXplX3Qg YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKLSAgICBKRU1BTExPQ19DWFhfVEhST1cgSkVNQUxMT0Nf QVRUUihtYWxsb2MpOwotI2VuZGlmCi0KLSNpZmRlZiBKRU1BTExPQ19PVkVSUklERV9WQUxMT0MK LUpFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVU VVJOCi0gICAgdm9pZCBKRU1BTExPQ19TWVNfTk9USFJPVwkqQGplX0B2YWxsb2Moc2l6ZV90IHNp emUpIEpFTUFMTE9DX0NYWF9USFJPVwotICAgIEpFTUFMTE9DX0FUVFIobWFsbG9jKTsKLSNlbmRp ZgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2lu Y2x1ZGUvamVtYWxsb2MvamVtYWxsb2NfcmVuYW1lLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuc2gKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY5NDM4OTEuLjAwMDAwMDAKLS0tIGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9qZW1hbGxvYy9qZW1hbGxv Y19yZW5hbWUuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIS9iaW4vc2gKLQot cHVibGljX3N5bWJvbHNfdHh0PSQxCi0KLWNhdCA8PEVPRgotLyoKLSAqIE5hbWUgbWFuZ2xpbmcg Zm9yIHB1YmxpYyBzeW1ib2xzIGlzIGNvbnRyb2xsZWQgYnkgLS13aXRoLW1hbmdsaW5nIGFuZAot ICogLS13aXRoLWplbWFsbG9jLXByZWZpeC4gIFdpdGggZGVmYXVsdCBzZXR0aW5ncyB0aGUgamVf IHByZWZpeCBpcyBzdHJpcHBlZCBieQotICogdGhlc2UgbWFjcm8gZGVmaW5pdGlvbnMuCi0gKi8K LSNpZm5kZWYgSkVNQUxMT0NfTk9fUkVOQU1FCi1FT0YKLQotZm9yIG5tIGluIGBjYXQgJHtwdWJs aWNfc3ltYm9sc190eHR9YCA7IGRvCi0gIG49YGVjaG8gJHtubX0gfHRyICc6JyAnICcgfGF3ayAn e3ByaW50ICQxfSdgCi0gIG09YGVjaG8gJHtubX0gfHRyICc6JyAnICcgfGF3ayAne3ByaW50ICQy fSdgCi0gIGVjaG8gIiMgIGRlZmluZSBqZV8ke259ICR7bX0iCi1kb25lCi0KLWNhdCA8PEVPRgot I2VuZGlmCi1FT0YKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9jX3R5cGVkZWZzLmguaW4gYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL2plbWFsbG9jL2plbWFsbG9j X3R5cGVkZWZzLmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNTg4NzQuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVk ZS9qZW1hbGxvYy9qZW1hbGxvY190eXBlZGVmcy5oLmluCisrKyAvZGV2L251bGwKQEAgLTEsNzcg KzAsMCBAQAotdHlwZWRlZiBzdHJ1Y3QgZXh0ZW50X2hvb2tzX3MgZXh0ZW50X2hvb2tzX3Q7Ci0K LS8qCi0gKiB2b2lkICoKLSAqIGV4dGVudF9hbGxvYyhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hv b2tzLCB2b2lkICpuZXdfYWRkciwgc2l6ZV90IHNpemUsCi0gKiAgICAgc2l6ZV90IGFsaWdubWVu dCwgYm9vbCAqemVybywgYm9vbCAqY29tbWl0LCB1bnNpZ25lZCBhcmVuYV9pbmQpOwotICovCi10 eXBlZGVmIHZvaWQgKihleHRlbnRfYWxsb2NfdCkoZXh0ZW50X2hvb2tzX3QgKiwgdm9pZCAqLCBz aXplX3QsIHNpemVfdCwgYm9vbCAqLAotICAgIGJvb2wgKiwgdW5zaWduZWQpOwotCi0vKgotICog Ym9vbAotICogZXh0ZW50X2RhbGxvYyhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lk ICphZGRyLCBzaXplX3Qgc2l6ZSwKLSAqICAgICBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJl bmFfaW5kKTsKLSAqLwotdHlwZWRlZiBib29sIChleHRlbnRfZGFsbG9jX3QpKGV4dGVudF9ob29r c190ICosIHZvaWQgKiwgc2l6ZV90LCBib29sLAotICAgIHVuc2lnbmVkKTsKLQotLyoKLSAqIHZv aWQKLSAqIGV4dGVudF9kZXN0cm95KGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQg KmFkZHIsIHNpemVfdCBzaXplLAotICogICAgIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25lZCBhcmVu YV9pbmQpOwotICovCi10eXBlZGVmIHZvaWQgKGV4dGVudF9kZXN0cm95X3QpKGV4dGVudF9ob29r c190ICosIHZvaWQgKiwgc2l6ZV90LCBib29sLAotICAgIHVuc2lnbmVkKTsKLQotLyoKLSAqIGJv b2wKLSAqIGV4dGVudF9jb21taXQoZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAq YWRkciwgc2l6ZV90IHNpemUsCi0gKiAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwg dW5zaWduZWQgYXJlbmFfaW5kKTsKLSAqLwotdHlwZWRlZiBib29sIChleHRlbnRfY29tbWl0X3Qp KGV4dGVudF9ob29rc190ICosIHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCwKLSAgICB1 bnNpZ25lZCk7Ci0KLS8qCi0gKiBib29sCi0gKiBleHRlbnRfZGVjb21taXQoZXh0ZW50X2hvb2tz X3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gKiAgICAgc2l6ZV90 IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKLSAqLwotdHlwZWRl ZiBib29sIChleHRlbnRfZGVjb21taXRfdCkoZXh0ZW50X2hvb2tzX3QgKiwgdm9pZCAqLCBzaXpl X3QsIHNpemVfdCwKLSAgICBzaXplX3QsIHVuc2lnbmVkKTsKLQotLyoKLSAqIGJvb2wKLSAqIGV4 dGVudF9wdXJnZShleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyLCBzaXpl X3Qgc2l6ZSwKLSAqICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoLCB1bnNpZ25lZCBh cmVuYV9pbmQpOwotICovCi10eXBlZGVmIGJvb2wgKGV4dGVudF9wdXJnZV90KShleHRlbnRfaG9v a3NfdCAqLCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBzaXplX3QsCi0gICAgdW5zaWduZWQpOwot Ci0vKgotICogYm9vbAotICogZXh0ZW50X3NwbGl0KGV4dGVudF9ob29rc190ICpleHRlbnRfaG9v a3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotICogICAgIHNpemVfdCBzaXplX2EsIHNpemVf dCBzaXplX2IsIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25lZCBhcmVuYV9pbmQpOwotICovCi10eXBl ZGVmIGJvb2wgKGV4dGVudF9zcGxpdF90KShleHRlbnRfaG9va3NfdCAqLCB2b2lkICosIHNpemVf dCwgc2l6ZV90LCBzaXplX3QsCi0gICAgYm9vbCwgdW5zaWduZWQpOwotCi0vKgotICogYm9vbAot ICogZXh0ZW50X21lcmdlKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHJf YSwgc2l6ZV90IHNpemVfYSwKLSAqICAgICB2b2lkICphZGRyX2IsIHNpemVfdCBzaXplX2IsIGJv b2wgY29tbWl0dGVkLCB1bnNpZ25lZCBhcmVuYV9pbmQpOwotICovCi10eXBlZGVmIGJvb2wgKGV4 dGVudF9tZXJnZV90KShleHRlbnRfaG9va3NfdCAqLCB2b2lkICosIHNpemVfdCwgdm9pZCAqLCBz aXplX3QsCi0gICAgYm9vbCwgdW5zaWduZWQpOwotCi1zdHJ1Y3QgZXh0ZW50X2hvb2tzX3Mgewot CWV4dGVudF9hbGxvY190CQkqYWxsb2M7Ci0JZXh0ZW50X2RhbGxvY190CQkqZGFsbG9jOwotCWV4 dGVudF9kZXN0cm95X3QJKmRlc3Ryb3k7Ci0JZXh0ZW50X2NvbW1pdF90CQkqY29tbWl0OwotCWV4 dGVudF9kZWNvbW1pdF90CSpkZWNvbW1pdDsKLQlleHRlbnRfcHVyZ2VfdAkJKnB1cmdlX2xhenk7 Ci0JZXh0ZW50X3B1cmdlX3QJCSpwdXJnZV9mb3JjZWQ7Ci0JZXh0ZW50X3NwbGl0X3QJCSpzcGxp dDsKLQlleHRlbnRfbWVyZ2VfdAkJKm1lcmdlOwotfTsKCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L0M5OS9zdGRi b29sLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21z dmNfY29tcGF0L0M5OS9zdGRib29sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5 MjE2MGUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvaW5jbHVkZS9tc3ZjX2NvbXBhdC9DOTkvc3RkYm9vbC5oCisrKyAvZGV2L251bGwKQEAgLTEs MjAgKzAsMCBAQAotI2lmbmRlZiBzdGRib29sX2gKLSNkZWZpbmUgc3RkYm9vbF9oCi0KLSNpbmNs dWRlIDx3dHlwZXMuaD4KLQotLyogTVNWQyBkb2Vzbid0IGRlZmluZSBfQm9vbCBvciBib29sIGlu IEMsIGJ1dCBkb2VzIGhhdmUgQk9PTCAqLwotLyogTm90ZSB0aGlzIGRvZXNuJ3QgcGFzcyBhdXRv Y29uZidzIHRlc3QgYmVjYXVzZSAoYm9vbCkgMC41ICE9IHRydWUgKi8KLS8qIENsYW5nLWNsIHVz ZXMgTVNWQyBoZWFkZXJzLCBzbyBuZWVkcyBtc3ZjX2NvbXBhdCwgYnV0IGhhcyBfQm9vbCBhcwot ICogYSBidWlsdC1pbiB0eXBlLiAqLwotI2lmbmRlZiBfX2NsYW5nX18KLXR5cGVkZWYgQk9PTCBf Qm9vbDsKLSNlbmRpZgotCi0jZGVmaW5lIGJvb2wgX0Jvb2wKLSNkZWZpbmUgdHJ1ZSAxCi0jZGVm aW5lIGZhbHNlIDAKLQotI2RlZmluZSBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCAxCi0K LSNlbmRpZiAvKiBzdGRib29sX2ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L0M5OS9zdGRpbnQuaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvbXN2Y19jb21wYXQv Qzk5L3N0ZGludC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDI2MDhhLi4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2luY2x1ZGUv bXN2Y19jb21wYXQvQzk5L3N0ZGludC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAK LS8vIElTTyBDOXggIGNvbXBsaWFudCBzdGRpbnQuaCBmb3IgTWljcm9zb2Z0IFZpc3VhbCBTdHVk aW8KLS8vIEJhc2VkIG9uIElTTy9JRUMgOTg5OTpUQzIgQ29tbWl0dGVlIGRyYWZ0IChNYXkgNiwg MjAwNSkgV0cxNC9OMTEyNCAKLS8vIAotLy8gIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEFsZXhh bmRlciBDaGVtZXJpcwotLy8gCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Ogot Ly8gCi0vLyAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLS8vICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIAotLy8gICAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot Ly8gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLyAKLS8vICAgMy4gVGhl IG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMKLS8vICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLyAKLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQK LS8vIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF RCBXQVJSQU5USUVTIE9GCi0vLyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTwotLy8gRVZFTlQgU0hBTEwgVEhF IEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0vLyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgCi0vLyBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgotLy8gT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgotLy8gQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0vLyAKLS8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8KLQotI2lmbmRlZiBfTVNDX1ZFUiAvLyBbCi0jZXJyb3IgIlVzZSB0aGlzIGhlYWRl ciBvbmx5IHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXJzISIKLSNlbmRpZiAvLyBf TVNDX1ZFUiBdCi0KLSNpZm5kZWYgX01TQ19TVERJTlRfSF8gLy8gWwotI2RlZmluZSBfTVNDX1NU RElOVF9IXwotCi0jaWYgX01TQ19WRVIgPiAxMDAwCi0jcHJhZ21hIG9uY2UKLSNlbmRpZgotCi0j aW5jbHVkZSA8bGltaXRzLmg+Ci0KLS8vIEZvciBWaXN1YWwgU3R1ZGlvIDYgaW4gQysrIG1vZGUg YW5kIGZvciBtYW55IFZpc3VhbCBTdHVkaW8gdmVyc2lvbnMgd2hlbgotLy8gY29tcGlsaW5nIGZv ciBBUk0gd2Ugc2hvdWxkIHdyYXAgPHdjaGFyLmg+IGluY2x1ZGUgd2l0aCAnZXh0ZXJuICJDKysi IHt9JwotLy8gb3IgY29tcGlsZXIgZ2l2ZSBtYW55IGVycm9ycyBsaWtlIHRoaXM6Ci0vLyAgIGVy cm9yIEMyNzMzOiBzZWNvbmQgQyBsaW5rYWdlIG9mIG92ZXJsb2FkZWQgZnVuY3Rpb24gJ3dtZW1j aHInIG5vdCBhbGxvd2VkCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlm Ci0jICBpbmNsdWRlIDx3Y2hhci5oPgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQot Ly8gRGVmaW5lIF9XNjQgbWFjcm9zIHRvIG1hcmsgdHlwZXMgY2hhbmdpbmcgdGhlaXIgc2l6ZSwg bGlrZSBpbnRwdHJfdC4KLSNpZm5kZWYgX1c2NAotIyAgaWYgIWRlZmluZWQoX19taWRsKSAmJiAo ZGVmaW5lZChfWDg2XykgfHwgZGVmaW5lZChfTV9JWDg2KSkgJiYgX01TQ19WRVIgPj0gMTMwMAot IyAgICAgZGVmaW5lIF9XNjQgX193NjQKLSMgIGVsc2UKLSMgICAgIGRlZmluZSBfVzY0Ci0jICBl bmRpZgotI2VuZGlmCi0KLQotLy8gNy4xOC4xIEludGVnZXIgdHlwZXMKLQotLy8gNy4xOC4xLjEg RXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcwotCi0vLyBWaXN1YWwgU3R1ZGlvIDYgYW5kIEVtYmVk ZGVkIFZpc3VhbCBDKysgNCBkb2Vzbid0Ci0vLyByZWFsaXplIHRoYXQsIGUuZy4gY2hhciBoYXMg dGhlIHNhbWUgc2l6ZSBhcyBfX2ludDgKLS8vIHNvIHdlIGdpdmUgdXAgb24gX19pbnRYIGZvciB0 aGVtLgotI2lmIChfTVNDX1ZFUiA8IDEzMDApCi0gICB0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAg IGludDhfdDsKLSAgIHR5cGVkZWYgc2lnbmVkIHNob3J0ICAgICAgaW50MTZfdDsKLSAgIHR5cGVk ZWYgc2lnbmVkIGludCAgICAgICAgaW50MzJfdDsKLSAgIHR5cGVkZWYgdW5zaWduZWQgY2hhciAg ICAgdWludDhfdDsKLSAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgdWludDE2X3Q7Ci0gICB0 eXBlZGVmIHVuc2lnbmVkIGludCAgICAgIHVpbnQzMl90OwotI2Vsc2UKLSAgIHR5cGVkZWYgc2ln bmVkIF9faW50OCAgICAgaW50OF90OwotICAgdHlwZWRlZiBzaWduZWQgX19pbnQxNiAgICBpbnQx Nl90OwotICAgdHlwZWRlZiBzaWduZWQgX19pbnQzMiAgICBpbnQzMl90OwotICAgdHlwZWRlZiB1 bnNpZ25lZCBfX2ludDggICB1aW50OF90OwotICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2ICB1 aW50MTZfdDsKLSAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiAgdWludDMyX3Q7Ci0jZW5kaWYK LXR5cGVkZWYgc2lnbmVkIF9faW50NjQgICAgICAgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQg X19pbnQ2NCAgICAgdWludDY0X3Q7Ci0KLQotLy8gNy4xOC4xLjIgTWluaW11bS13aWR0aCBpbnRl Z2VyIHR5cGVzCi10eXBlZGVmIGludDhfdCAgICBpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmIGludDE2 X3QgICBpbnRfbGVhc3QxNl90OwotdHlwZWRlZiBpbnQzMl90ICAgaW50X2xlYXN0MzJfdDsKLXR5 cGVkZWYgaW50NjRfdCAgIGludF9sZWFzdDY0X3Q7Ci10eXBlZGVmIHVpbnQ4X3QgICB1aW50X2xl YXN0OF90OwotdHlwZWRlZiB1aW50MTZfdCAgdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmIHVpbnQz Ml90ICB1aW50X2xlYXN0MzJfdDsKLXR5cGVkZWYgdWludDY0X3QgIHVpbnRfbGVhc3Q2NF90Owot Ci0vLyA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcwotdHlwZWRl ZiBpbnQ4X3QgICAgaW50X2Zhc3Q4X3Q7Ci10eXBlZGVmIGludDE2X3QgICBpbnRfZmFzdDE2X3Q7 Ci10eXBlZGVmIGludDMyX3QgICBpbnRfZmFzdDMyX3Q7Ci10eXBlZGVmIGludDY0X3QgICBpbnRf ZmFzdDY0X3Q7Ci10eXBlZGVmIHVpbnQ4X3QgICB1aW50X2Zhc3Q4X3Q7Ci10eXBlZGVmIHVpbnQx Nl90ICB1aW50X2Zhc3QxNl90OwotdHlwZWRlZiB1aW50MzJfdCAgdWludF9mYXN0MzJfdDsKLXR5 cGVkZWYgdWludDY0X3QgIHVpbnRfZmFzdDY0X3Q7Ci0KLS8vIDcuMTguMS40IEludGVnZXIgdHlw ZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycwotI2lmZGVmIF9XSU42NCAvLyBb Ci0gICB0eXBlZGVmIHNpZ25lZCBfX2ludDY0ICAgIGludHB0cl90OwotICAgdHlwZWRlZiB1bnNp Z25lZCBfX2ludDY0ICB1aW50cHRyX3Q7Ci0jZWxzZSAvLyBfV0lONjQgXVsKLSAgIHR5cGVkZWYg X1c2NCBzaWduZWQgaW50ICAgaW50cHRyX3Q7Ci0gICB0eXBlZGVmIF9XNjQgdW5zaWduZWQgaW50 IHVpbnRwdHJfdDsKLSNlbmRpZiAvLyBfV0lONjQgXQotCi0vLyA3LjE4LjEuNSBHcmVhdGVzdC13 aWR0aCBpbnRlZ2VyIHR5cGVzCi10eXBlZGVmIGludDY0X3QgICBpbnRtYXhfdDsKLXR5cGVkZWYg dWludDY0X3QgIHVpbnRtYXhfdDsKLQotCi0vLyA3LjE4LjIgTGltaXRzIG9mIHNwZWNpZmllZC13 aWR0aCBpbnRlZ2VyIHR5cGVzCi0KLSNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5l ZChfX1NURENfTElNSVRfTUFDUk9TKSAvLyBbICAgU2VlIGZvb3Rub3RlIDIyMCBhdCBwYWdlIDI1 NyBhbmQgZm9vdG5vdGUgMjIxIGF0IHBhZ2UgMjU5Ci0KLS8vIDcuMTguMi4xIExpbWl0cyBvZiBl eGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzCi0jZGVmaW5lIElOVDhfTUlOICAgICAoKGludDhfdClf SThfTUlOKQotI2RlZmluZSBJTlQ4X01BWCAgICAgX0k4X01BWAotI2RlZmluZSBJTlQxNl9NSU4g ICAgKChpbnQxNl90KV9JMTZfTUlOKQotI2RlZmluZSBJTlQxNl9NQVggICAgX0kxNl9NQVgKLSNk ZWZpbmUgSU5UMzJfTUlOICAgICgoaW50MzJfdClfSTMyX01JTikKLSNkZWZpbmUgSU5UMzJfTUFY ICAgIF9JMzJfTUFYCi0jZGVmaW5lIElOVDY0X01JTiAgICAoKGludDY0X3QpX0k2NF9NSU4pCi0j ZGVmaW5lIElOVDY0X01BWCAgICBfSTY0X01BWAotI2RlZmluZSBVSU5UOF9NQVggICAgX1VJOF9N QVgKLSNkZWZpbmUgVUlOVDE2X01BWCAgIF9VSTE2X01BWAotI2RlZmluZSBVSU5UMzJfTUFYICAg X1VJMzJfTUFYCi0jZGVmaW5lIFVJTlQ2NF9NQVggICBfVUk2NF9NQVgKLQotLy8gNy4xOC4yLjIg TGltaXRzIG9mIG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcwotI2RlZmluZSBJTlRfTEVBU1Q4 X01JTiAgICBJTlQ4X01JTgotI2RlZmluZSBJTlRfTEVBU1Q4X01BWCAgICBJTlQ4X01BWAotI2Rl ZmluZSBJTlRfTEVBU1QxNl9NSU4gICBJTlQxNl9NSU4KLSNkZWZpbmUgSU5UX0xFQVNUMTZfTUFY ICAgSU5UMTZfTUFYCi0jZGVmaW5lIElOVF9MRUFTVDMyX01JTiAgIElOVDMyX01JTgotI2RlZmlu ZSBJTlRfTEVBU1QzMl9NQVggICBJTlQzMl9NQVgKLSNkZWZpbmUgSU5UX0xFQVNUNjRfTUlOICAg SU5UNjRfTUlOCi0jZGVmaW5lIElOVF9MRUFTVDY0X01BWCAgIElOVDY0X01BWAotI2RlZmluZSBV SU5UX0xFQVNUOF9NQVggICBVSU5UOF9NQVgKLSNkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCAgVUlO VDE2X01BWAotI2RlZmluZSBVSU5UX0xFQVNUMzJfTUFYICBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJ TlRfTEVBU1Q2NF9NQVggIFVJTlQ2NF9NQVgKLQotLy8gNy4xOC4yLjMgTGltaXRzIG9mIGZhc3Rl c3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzCi0jZGVmaW5lIElOVF9GQVNUOF9NSU4gICAg SU5UOF9NSU4KLSNkZWZpbmUgSU5UX0ZBU1Q4X01BWCAgICBJTlQ4X01BWAotI2RlZmluZSBJTlRf RkFTVDE2X01JTiAgIElOVDE2X01JTgotI2RlZmluZSBJTlRfRkFTVDE2X01BWCAgIElOVDE2X01B WAotI2RlZmluZSBJTlRfRkFTVDMyX01JTiAgIElOVDMyX01JTgotI2RlZmluZSBJTlRfRkFTVDMy X01BWCAgIElOVDMyX01BWAotI2RlZmluZSBJTlRfRkFTVDY0X01JTiAgIElOVDY0X01JTgotI2Rl ZmluZSBJTlRfRkFTVDY0X01BWCAgIElOVDY0X01BWAotI2RlZmluZSBVSU5UX0ZBU1Q4X01BWCAg IFVJTlQ4X01BWAotI2RlZmluZSBVSU5UX0ZBU1QxNl9NQVggIFVJTlQxNl9NQVgKLSNkZWZpbmUg VUlOVF9GQVNUMzJfTUFYICBVSU5UMzJfTUFYCi0jZGVmaW5lIFVJTlRfRkFTVDY0X01BWCAgVUlO VDY0X01BWAotCi0vLyA3LjE4LjIuNCBMaW1pdHMgb2YgaW50ZWdlciB0eXBlcyBjYXBhYmxlIG9m IGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzCi0jaWZkZWYgX1dJTjY0IC8vIFsKLSMgIGRlZmluZSBJ TlRQVFJfTUlOICAgSU5UNjRfTUlOCi0jICBkZWZpbmUgSU5UUFRSX01BWCAgIElOVDY0X01BWAot IyAgZGVmaW5lIFVJTlRQVFJfTUFYICBVSU5UNjRfTUFYCi0jZWxzZSAvLyBfV0lONjQgXVsKLSMg IGRlZmluZSBJTlRQVFJfTUlOICAgSU5UMzJfTUlOCi0jICBkZWZpbmUgSU5UUFRSX01BWCAgIElO VDMyX01BWAotIyAgZGVmaW5lIFVJTlRQVFJfTUFYICBVSU5UMzJfTUFYCi0jZW5kaWYgLy8gX1dJ TjY0IF0KLQotLy8gNy4xOC4yLjUgTGltaXRzIG9mIGdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlw ZXMKLSNkZWZpbmUgSU5UTUFYX01JTiAgIElOVDY0X01JTgotI2RlZmluZSBJTlRNQVhfTUFYICAg SU5UNjRfTUFYCi0jZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UNjRfTUFYCi0KLS8vIDcuMTguMyBM aW1pdHMgb2Ygb3RoZXIgaW50ZWdlciB0eXBlcwotCi0jaWZkZWYgX1dJTjY0IC8vIFsKLSMgIGRl ZmluZSBQVFJESUZGX01JTiAgX0k2NF9NSU4KLSMgIGRlZmluZSBQVFJESUZGX01BWCAgX0k2NF9N QVgKLSNlbHNlICAvLyBfV0lONjQgXVsKLSMgIGRlZmluZSBQVFJESUZGX01JTiAgX0kzMl9NSU4K LSMgIGRlZmluZSBQVFJESUZGX01BWCAgX0kzMl9NQVgKLSNlbmRpZiAgLy8gX1dJTjY0IF0KLQot I2RlZmluZSBTSUdfQVRPTUlDX01JTiAgSU5UX01JTgotI2RlZmluZSBTSUdfQVRPTUlDX01BWCAg SU5UX01BWAotCi0jaWZuZGVmIFNJWkVfTUFYIC8vIFsKLSMgIGlmZGVmIF9XSU42NCAvLyBbCi0j ICAgICBkZWZpbmUgU0laRV9NQVggIF9VSTY0X01BWAotIyAgZWxzZSAvLyBfV0lONjQgXVsKLSMg ICAgIGRlZmluZSBTSVpFX01BWCAgX1VJMzJfTUFYCi0jICBlbmRpZiAvLyBfV0lONjQgXQotI2Vu ZGlmIC8vIFNJWkVfTUFYIF0KLQotLy8gV0NIQVJfTUlOIGFuZCBXQ0hBUl9NQVggYXJlIGFsc28g ZGVmaW5lZCBpbiA8d2NoYXIuaD4KLSNpZm5kZWYgV0NIQVJfTUlOIC8vIFsKLSMgIGRlZmluZSBX Q0hBUl9NSU4gIDAKLSNlbmRpZiAgLy8gV0NIQVJfTUlOIF0KLSNpZm5kZWYgV0NIQVJfTUFYIC8v IFsKLSMgIGRlZmluZSBXQ0hBUl9NQVggIF9VSTE2X01BWAotI2VuZGlmICAvLyBXQ0hBUl9NQVgg XQotCi0jZGVmaW5lIFdJTlRfTUlOICAwCi0jZGVmaW5lIFdJTlRfTUFYICBfVUkxNl9NQVgKLQot I2VuZGlmIC8vIF9fU1REQ19MSU1JVF9NQUNST1MgXQotCi0KLS8vIDcuMTguNCBMaW1pdHMgb2Yg b3RoZXIgaW50ZWdlciB0eXBlcwotCi0jaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmlu ZWQoX19TVERDX0NPTlNUQU5UX01BQ1JPUykgLy8gWyAgIFNlZSBmb290bm90ZSAyMjQgYXQgcGFn ZSAyNjAKLQotLy8gNy4xOC40LjEgTWFjcm9zIGZvciBtaW5pbXVtLXdpZHRoIGludGVnZXIgY29u c3RhbnRzCi0KLSNkZWZpbmUgSU5UOF9DKHZhbCkgIHZhbCMjaTgKLSNkZWZpbmUgSU5UMTZfQyh2 YWwpIHZhbCMjaTE2Ci0jZGVmaW5lIElOVDMyX0ModmFsKSB2YWwjI2kzMgotI2RlZmluZSBJTlQ2 NF9DKHZhbCkgdmFsIyNpNjQKLQotI2RlZmluZSBVSU5UOF9DKHZhbCkgIHZhbCMjdWk4Ci0jZGVm aW5lIFVJTlQxNl9DKHZhbCkgdmFsIyN1aTE2Ci0jZGVmaW5lIFVJTlQzMl9DKHZhbCkgdmFsIyN1 aTMyCi0jZGVmaW5lIFVJTlQ2NF9DKHZhbCkgdmFsIyN1aTY0Ci0KLS8vIDcuMTguNC4yIE1hY3Jv cyBmb3IgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciBjb25zdGFudHMKLSNkZWZpbmUgSU5UTUFYX0Mg ICBJTlQ2NF9DCi0jZGVmaW5lIFVJTlRNQVhfQyAgVUlOVDY0X0MKLQotI2VuZGlmIC8vIF9fU1RE Q19DT05TVEFOVF9NQUNST1MgXQotCi0KLSNlbmRpZiAvLyBfTVNDX1NURElOVF9IXyBdCgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvaW5jbHVkZS9t c3ZjX2NvbXBhdC9zdHJpbmdzLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L3N0cmluZ3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggOTk2ZjI1Ni4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0L3N0cmluZ3MuaAorKysgL2Rldi9udWxs CkBAIC0xLDU4ICswLDAgQEAKLSNpZm5kZWYgc3RyaW5nc19oCi0jZGVmaW5lIHN0cmluZ3NfaAot Ci0vKiBNU1ZDIGRvZXNuJ3QgZGVmaW5lIGZmcy9mZnNsLiBUaGlzIGR1bW15IHN0cmluZ3MuaCBo ZWFkZXIgaXMgcHJvdmlkZWQKLSAqIGZvciBib3RoICovCi0jaWZkZWYgX01TQ19WRVIKLSMgIGlu Y2x1ZGUgPGludHJpbi5oPgotIyAgcHJhZ21hIGludHJpbnNpYyhfQml0U2NhbkZvcndhcmQpCi1z dGF0aWMgX19mb3JjZWlubGluZSBpbnQgZmZzbChsb25nIHgpIHsKLQl1bnNpZ25lZCBsb25nIGk7 Ci0KLQlpZiAoX0JpdFNjYW5Gb3J3YXJkKCZpLCB4KSkgewotCQlyZXR1cm4gaSArIDE7Ci0JfQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgX19mb3JjZWlubGluZSBpbnQgZmZzKGludCB4KSB7Ci0J cmV0dXJuIGZmc2woeCk7Ci19Ci0KLSMgIGlmZGVmICBfTV9YNjQKLSMgICAgcHJhZ21hIGludHJp bnNpYyhfQml0U2NhbkZvcndhcmQ2NCkKLSMgIGVuZGlmCi0KLXN0YXRpYyBfX2ZvcmNlaW5saW5l IGludCBmZnNsbCh1bnNpZ25lZCBfX2ludDY0IHgpIHsKLQl1bnNpZ25lZCBsb25nIGk7Ci0jaWZk ZWYgIF9NX1g2NAotCWlmIChfQml0U2NhbkZvcndhcmQ2NCgmaSwgeCkpIHsKLQkJcmV0dXJuIGkg KyAxOwotCX0KLQlyZXR1cm4gMDsKLSNlbHNlCi0vLyBGYWxsYmFjayBmb3IgMzItYml0IGJ1aWxk IHdoZXJlIDY0LWJpdCB2ZXJzaW9uIG5vdCBhdmFpbGFibGUKLS8vIGFzc3VtaW5nIGxpdHRsZSBl bmRpYW4KLQl1bmlvbiB7Ci0JCXVuc2lnbmVkIF9faW50NjQgbGw7Ci0JCXVuc2lnbmVkICAgbG9u ZyBsWzJdOwotCX0gczsKLQotCXMubGwgPSB4OwotCi0JaWYgKF9CaXRTY2FuRm9yd2FyZCgmaSwg cy5sWzBdKSkgewotCQlyZXR1cm4gaSArIDE7Ci0JfSBlbHNlIGlmKF9CaXRTY2FuRm9yd2FyZCgm aSwgcy5sWzFdKSkgewotCQlyZXR1cm4gaSArIDMzOwotCX0KLQlyZXR1cm4gMDsKLSNlbmRpZgot fQotCi0jZWxzZQotIyAgZGVmaW5lIGZmc2xsKHgpIF9fYnVpbHRpbl9mZnNsbCh4KQotIyAgZGVm aW5lIGZmc2woeCkgX19idWlsdGluX2Zmc2woeCkKLSMgIGRlZmluZSBmZnMoeCkgX19idWlsdGlu X2Zmcyh4KQotI2VuZGlmCi0KLSNlbmRpZiAvKiBzdHJpbmdzX2ggKi8KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9pbmNsdWRlL21zdmNfY29tcGF0 L3dpbmRvd3NfZXh0cmEuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L2luY2x1ZGUvbXN2Y19jb21wYXQvd2luZG93c19leHRyYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBhNmViYjkzLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL2luY2x1ZGUvbXN2Y19jb21wYXQvd2luZG93c19leHRyYS5oCisrKyAv ZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIE1TVkNfQ09NUEFUX1dJTkRPV1NfRVhU UkFfSAotI2RlZmluZSBNU1ZDX0NPTVBBVF9XSU5ET1dTX0VYVFJBX0gKLQotI2luY2x1ZGUgPGVy cm5vLmg+Ci0KLSNlbmRpZiAvKiBNU1ZDX0NPTVBBVF9XSU5ET1dTX0VYVFJBX0ggKi8KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9qZW1hbGxvYy5w Yy5pbiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2plbWFsbG9jLnBj LmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDI4YTg2Li4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL2plbWFsbG9jLnBjLmluCisr KyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZp eD1AZXhlY19wcmVmaXhACi1saWJkaXI9QGxpYmRpckAKLWluY2x1ZGVkaXI9QGluY2x1ZGVkaXJA Ci1pbnN0YWxsX3N1ZmZpeD1AaW5zdGFsbF9zdWZmaXhACi0KLU5hbWU6IGplbWFsbG9jCi1EZXNj cmlwdGlvbjogQSBnZW5lcmFsIHB1cnBvc2UgbWFsbG9jKDMpIGltcGxlbWVudGF0aW9uIHRoYXQg ZW1waGFzaXplcyBmcmFnbWVudGF0aW9uIGF2b2lkYW5jZSBhbmQgc2NhbGFibGUgY29uY3VycmVu Y3kgc3VwcG9ydC4KLVVSTDogaHR0cDovL2plbWFsbG9jLm5ldC8KLVZlcnNpb246IEBqZW1hbGxv Y192ZXJzaW9uX21ham9yQC5AamVtYWxsb2NfdmVyc2lvbl9taW5vckAuQGplbWFsbG9jX3ZlcnNp b25fYnVnZml4QF9AamVtYWxsb2NfdmVyc2lvbl9ucmV2QAotQ2ZsYWdzOiAtSSR7aW5jbHVkZWRp cn0KLUxpYnM6IC1MJHtsaWJkaXJ9IC1samVtYWxsb2Mke2luc3RhbGxfc3VmZml4fQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL200L2F4X2N4eF9j b21waWxlX3N0ZGN4eC5tNCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L200L2F4X2N4eF9jb21waWxlX3N0ZGN4eC5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggNDMwODdiMi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9tNC9heF9jeHhfY29tcGlsZV9zdGRjeHgubTQKKysrIC9kZXYvbnVsbApAQCAtMSw5 NTEgKzAsMCBAQAotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgIGh0dHBzOi8vd3d3LmdudS5vcmcv c29mdHdhcmUvYXV0b2NvbmYtYXJjaGl2ZS9heF9jeHhfY29tcGlsZV9zdGRjeHguaHRtbAotIyA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSMKLSMgU1lOT1BTSVMKLSMKLSMgICBBWF9DWFhfQ09NUElMRV9T VERDWFgoVkVSU0lPTiwgW2V4dHxub2V4dF0sIFttYW5kYXRvcnl8b3B0aW9uYWxdKQotIwotIyBE RVNDUklQVElPTgotIwotIyAgIENoZWNrIGZvciBiYXNlbGluZSBsYW5ndWFnZSBjb3ZlcmFnZSBp biB0aGUgY29tcGlsZXIgZm9yIHRoZSBzcGVjaWZpZWQKLSMgICB2ZXJzaW9uIG9mIHRoZSBDKysg c3RhbmRhcmQuICBJZiBuZWNlc3NhcnksIGFkZCBzd2l0Y2hlcyB0byBDWFggYW5kCi0jICAgQ1hY Q1BQIHRvIGVuYWJsZSBzdXBwb3J0LiAgVkVSU0lPTiBtYXkgYmUgJzExJyAoZm9yIHRoZSBDKysx MSBzdGFuZGFyZCkKLSMgICBvciAnMTQnIChmb3IgdGhlIEMrKzE0IHN0YW5kYXJkKS4KLSMKLSMg ICBUaGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQsIGluZGljYXRlcyB3aGV0aGVyIHlv dSBpbnNpc3Qgb24gYW4KLSMgICBleHRlbmRlZCBtb2RlIChlLmcuIC1zdGQ9Z251KysxMSkgb3Ig YSBzdHJpY3QgY29uZm9ybWFuY2UgbW9kZSAoZS5nLgotIyAgIC1zdGQ9YysrMTEpLiAgSWYgbmVp dGhlciBpcyBzcGVjaWZpZWQsIHlvdSBnZXQgd2hhdGV2ZXIgd29ya3MsIHdpdGgKLSMgICBwcmVm ZXJlbmNlIGZvciBhbiBleHRlbmRlZCBtb2RlLgotIwotIyAgIFRoZSB0aGlyZCBhcmd1bWVudCwg aWYgc3BlY2lmaWVkICdtYW5kYXRvcnknIG9yIGlmIGxlZnQgdW5zcGVjaWZpZWQsCi0jICAgaW5k aWNhdGVzIHRoYXQgYmFzZWxpbmUgc3VwcG9ydCBmb3IgdGhlIHNwZWNpZmllZCBDKysgc3RhbmRh cmQgaXMKLSMgICByZXF1aXJlZCBhbmQgdGhhdCB0aGUgbWFjcm8gc2hvdWxkIGVycm9yIG91dCBp ZiBubyBtb2RlIHdpdGggdGhhdAotIyAgIHN1cHBvcnQgaXMgZm91bmQuICBJZiBzcGVjaWZpZWQg J29wdGlvbmFsJywgdGhlbiBjb25maWd1cmF0aW9uIHByb2NlZWRzCi0jICAgcmVnYXJkbGVzcywg YWZ0ZXIgZGVmaW5pbmcgSEFWRV9DWFgke1ZFUlNJT059IGlmIGFuZCBvbmx5IGlmIGEKLSMgICBz dXBwb3J0aW5nIG1vZGUgaXMgZm91bmQuCi0jCi0jIExJQ0VOU0UKLSMKLSMgICBDb3B5cmlnaHQg KGMpIDIwMDggQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+Ci0jICAgQ29weXJpZ2h0 IChjKSAyMDEyIFphY2sgV2VpbmJlcmcgPHphY2t3QHBhbml4LmNvbT4KLSMgICBDb3B5cmlnaHQg KGMpIDIwMTMgUm95IFN0b2duZXIgPHJveXN0Z25yQGljZXMudXRleGFzLmVkdT4KLSMgICBDb3B5 cmlnaHQgKGMpIDIwMTQsIDIwMTUgR29vZ2xlIEluYy47IGNvbnRyaWJ1dGVkIGJ5IEFsZXhleSBT b2tvbG92IDxzb2tvbG92QGdvb2dsZS5jb20+Ci0jICAgQ29weXJpZ2h0IChjKSAyMDE1IFBhdWwg Tm9ybWFuIDxwZW5vcm1hbkBtYWMuY29tPgotIyAgIENvcHlyaWdodCAoYykgMjAxNSBNb3JpdHog S2xhbW1sZXIgPG1vcml0ekBrbGFtbWxlci5ldT4KLSMgICBDb3B5cmlnaHQgKGMpIDIwMTYsIDIw MTggS3J6ZXNpbWlyIE5vd2FrIDxxZGxhY3pAZ21haWwuY29tPgotIyAgIENvcHlyaWdodCAoYykg MjAxOSBFbmppIENvb3BlciA8eWFuZXVyYWJleWFAZ21haWwuY29tPgotIwotIyAgIENvcHlpbmcg YW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRp b24sIGFyZQotIyAgIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92 aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZQotIyAgIGFuZCB0aGlzIG5vdGljZSBhcmUgcHJlc2Vy dmVkLiAgVGhpcyBmaWxlIGlzIG9mZmVyZWQgYXMtaXMsIHdpdGhvdXQgYW55Ci0jICAgd2FycmFu dHkuCi0KLSNzZXJpYWwgMTEKLQotZG5sICBUaGlzIG1hY3JvIGlzIGJhc2VkIG9uIHRoZSBjb2Rl IGZyb20gdGhlIEFYX0NYWF9DT01QSUxFX1NURENYWF8xMSBtYWNybwotZG5sICAoc2VyaWFsIHZl cnNpb24gbnVtYmVyIDEzKS4KLQotQUNfREVGVU4oW0FYX0NYWF9DT01QSUxFX1NURENYWF0sIFtk bmwKLSAgbTRfaWYoWyQxXSwgWzExXSwgW2F4X2N4eF9jb21waWxlX2FsdGVybmF0aXZlcz0iMTEg MHgiXSwKLSAgICAgICAgWyQxXSwgWzE0XSwgW2F4X2N4eF9jb21waWxlX2FsdGVybmF0aXZlcz0i MTQgMXkiXSwKLSAgICAgICAgWyQxXSwgWzE3XSwgW2F4X2N4eF9jb21waWxlX2FsdGVybmF0aXZl cz0iMTcgMXoiXSwKLSAgICAgICAgW200X2ZhdGFsKFtpbnZhbGlkIGZpcnN0IGFyZ3VtZW50IGAk MScgdG8gQVhfQ1hYX0NPTVBJTEVfU1REQ1hYXSldKWRubAotICBtNF9pZihbJDJdLCBbXSwgW10s Ci0gICAgICAgIFskMl0sIFtleHRdLCBbXSwKLSAgICAgICAgWyQyXSwgW25vZXh0XSwgW10sCi0g ICAgICAgIFttNF9mYXRhbChbaW52YWxpZCBzZWNvbmQgYXJndW1lbnQgYCQyJyB0byBBWF9DWFhf Q09NUElMRV9TVERDWFhdKV0pZG5sCi0gIG00X2lmKFskM10sIFtdLCBbYXhfY3h4X2NvbXBpbGVf Y3h4JDFfcmVxdWlyZWQ9dHJ1ZV0sCi0gICAgICAgIFskM10sIFttYW5kYXRvcnldLCBbYXhfY3h4 X2NvbXBpbGVfY3h4JDFfcmVxdWlyZWQ9dHJ1ZV0sCi0gICAgICAgIFskM10sIFtvcHRpb25hbF0s IFtheF9jeHhfY29tcGlsZV9jeHgkMV9yZXF1aXJlZD1mYWxzZV0sCi0gICAgICAgIFttNF9mYXRh bChbaW52YWxpZCB0aGlyZCBhcmd1bWVudCBgJDMnIHRvIEFYX0NYWF9DT01QSUxFX1NURENYWF0p XSkKLSAgQUNfTEFOR19QVVNIKFtDKytdKWRubAotICBhY19zdWNjZXNzPW5vCi0KLSAgbTRfaWYo WyQyXSwgW25vZXh0XSwgW10sIFtkbmwKLSAgaWYgdGVzdCB4JGFjX3N1Y2Nlc3MgPSB4bm87IHRo ZW4KLSAgICBmb3IgYWx0ZXJuYXRpdmUgaW4gJHtheF9jeHhfY29tcGlsZV9hbHRlcm5hdGl2ZXN9 OyBkbwotICAgICAgc3dpdGNoPSItc3RkPWdudSsrJHthbHRlcm5hdGl2ZX0iCi0gICAgICBjYWNo ZXZhcj1BU19UUl9TSChbYXhfY3ZfY3h4X2NvbXBpbGVfY3h4JDFfJHN3aXRjaF0pCi0gICAgICBB Q19DQUNIRV9DSEVDSyh3aGV0aGVyICRDWFggc3VwcG9ydHMgQysrJDEgZmVhdHVyZXMgd2l0aCAk c3dpdGNoLAotICAgICAgICAgICAgICAgICAgICAgJGNhY2hldmFyLAotICAgICAgICBbYWNfc2F2 ZV9DWFg9IiRDWFgiCi0gICAgICAgICBDWFg9IiRDWFggJHN3aXRjaCIKLSAgICAgICAgIEFDX0NP TVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0 Ym9keV8kMV0pXSwKLSAgICAgICAgICBbZXZhbCAkY2FjaGV2YXI9eWVzXSwKLSAgICAgICAgICBb ZXZhbCAkY2FjaGV2YXI9bm9dKQotICAgICAgICAgQ1hYPSIkYWNfc2F2ZV9DWFgiXSkKLSAgICAg IGlmIGV2YWwgdGVzdCB4XCQkY2FjaGV2YXIgPSB4eWVzOyB0aGVuCi0gICAgICAgIENYWD0iJENY WCAkc3dpdGNoIgotICAgICAgICBpZiB0ZXN0IC1uICIkQ1hYQ1BQIiA7IHRoZW4KLSAgICAgICAg ICBDWFhDUFA9IiRDWFhDUFAgJHN3aXRjaCIKLSAgICAgICAgZmkKLSAgICAgICAgYWNfc3VjY2Vz cz15ZXMKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZG9uZQotICBmaV0pCi0KLSAgbTRf aWYoWyQyXSwgW2V4dF0sIFtdLCBbZG5sCi0gIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0 aGVuCi0gICAgZG5sIEhQJ3MgYUNDIG5lZWRzICtzdGQ9YysrMTEgYWNjb3JkaW5nIHRvOgotICAg IGRubCBodHRwOi8vaDIxMDA3Lnd3dzIuaHAuY29tL3BvcnRhbC9kb3dubG9hZC9maWxlcy91bnBy b3QvYUN4eC9QREZfUmVsZWFzZV9Ob3Rlcy83NjkxNDktMDAxLnBkZgotICAgIGRubCBDcmF5J3Mg Y3JheUNDIG5lZWRzICItaCBzdGQ9YysrMTEiCi0gICAgZm9yIGFsdGVybmF0aXZlIGluICR7YXhf Y3h4X2NvbXBpbGVfYWx0ZXJuYXRpdmVzfTsgZG8KLSAgICAgIGZvciBzd2l0Y2ggaW4gLXN0ZD1j Kyske2FsdGVybmF0aXZlfSArc3RkPWMrKyR7YWx0ZXJuYXRpdmV9ICItaCBzdGQ9YysrJHthbHRl cm5hdGl2ZX0iOyBkbwotICAgICAgICBjYWNoZXZhcj1BU19UUl9TSChbYXhfY3ZfY3h4X2NvbXBp bGVfY3h4JDFfJHN3aXRjaF0pCi0gICAgICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgJENYWCBz dXBwb3J0cyBDKyskMSBmZWF0dXJlcyB3aXRoICRzd2l0Y2gsCi0gICAgICAgICAgICAgICAgICAg ICAgICRjYWNoZXZhciwKLSAgICAgICAgICBbYWNfc2F2ZV9DWFg9IiRDWFgiCi0gICAgICAgICAg IENYWD0iJENYWCAkc3dpdGNoIgotICAgICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFO R19TT1VSQ0UoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfJDFdKV0sCi0gICAgICAg ICAgICBbZXZhbCAkY2FjaGV2YXI9eWVzXSwKLSAgICAgICAgICAgIFtldmFsICRjYWNoZXZhcj1u b10pCi0gICAgICAgICAgIENYWD0iJGFjX3NhdmVfQ1hYIl0pCi0gICAgICAgIGlmIGV2YWwgdGVz dCB4XCQkY2FjaGV2YXIgPSB4eWVzOyB0aGVuCi0gICAgICAgICAgQ1hYPSIkQ1hYICRzd2l0Y2gi Ci0gICAgICAgICAgaWYgdGVzdCAtbiAiJENYWENQUCIgOyB0aGVuCi0gICAgICAgICAgICBDWFhD UFA9IiRDWFhDUFAgJHN3aXRjaCIKLSAgICAgICAgICBmaQotICAgICAgICAgIGFjX3N1Y2Nlc3M9 eWVzCi0gICAgICAgICAgYnJlYWsKLSAgICAgICAgZmkKLSAgICAgIGRvbmUKLSAgICAgIGlmIHRl c3QgeCRhY19zdWNjZXNzID0geHllczsgdGhlbgotICAgICAgICBicmVhawotICAgICAgZmkKLSAg ICBkb25lCi0gIGZpXSkKLSAgQUNfTEFOR19QT1AoW0MrK10pCi0gIGlmIHRlc3QgeCRheF9jeHhf Y29tcGlsZV9jeHgkMV9yZXF1aXJlZCA9IHh0cnVlOyB0aGVuCi0gICAgaWYgdGVzdCB4JGFjX3N1 Y2Nlc3MgPSB4bm87IHRoZW4KLSAgICAgIEFDX01TR19FUlJPUihbKioqIEEgY29tcGlsZXIgd2l0 aCBzdXBwb3J0IGZvciBDKyskMSBsYW5ndWFnZSBmZWF0dXJlcyBpcyByZXF1aXJlZC5dKQotICAg IGZpCi0gIGZpCi0gIGlmIHRlc3QgeCRhY19zdWNjZXNzID0geG5vOyB0aGVuCi0gICAgSEFWRV9D WFgkMT0wCi0gICAgQUNfTVNHX05PVElDRShbTm8gY29tcGlsZXIgd2l0aCBDKyskMSBzdXBwb3J0 IHdhcyBmb3VuZF0pCi0gIGVsc2UKLSAgICBIQVZFX0NYWCQxPTEKLSAgICBBQ19ERUZJTkUoSEFW RV9DWFgkMSwxLAotICAgICAgICAgICAgICBbZGVmaW5lIGlmIHRoZSBjb21waWxlciBzdXBwb3J0 cyBiYXNpYyBDKyskMSBzeW50YXhdKQotICBmaQotICBBQ19TVUJTVChIQVZFX0NYWCQxKQotXSkK LQotCi1kbmwgIFRlc3QgYm9keSBmb3IgY2hlY2tpbmcgQysrMTEgc3VwcG9ydAotCi1tNF9kZWZp bmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfMTFdLAotICBfQVhfQ1hYX0NPTVBJ TEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xMQotKQotCi0KLWRubCAgVGVzdCBib2R5IGZvciBj aGVja2luZyBDKysxNCBzdXBwb3J0Ci0KLW00X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENY WF90ZXN0Ym9keV8xNF0sCi0gIF9BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2lu XzExCi0gIF9BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzE0Ci0pCi0KLW00 X2RlZmluZShbX0FYX0NYWF9DT01QSUxFX1NURENYWF90ZXN0Ym9keV8xN10sCi0gIF9BWF9DWFhf Q09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzExCi0gIF9BWF9DWFhfQ09NUElMRV9TVERD WFhfdGVzdGJvZHlfbmV3X2luXzE0Ci0gIF9BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlf bmV3X2luXzE3Ci0pCi0KLWRubCAgVGVzdHMgZm9yIG5ldyBmZWF0dXJlcyBpbiBDKysxMQotCi1t NF9kZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlfbmV3X2luXzExXSwgW1sK LQotLy8gSWYgdGhlIGNvbXBpbGVyIGFkbWl0cyB0aGF0IGl0IGlzIG5vdCByZWFkeSBmb3IgQysr MTEsIHdoeSB0b3J0dXJlIGl0PwotLy8gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgc3BlZWQgdXAgdGhl IHRlc3QuCi0KLSNpZm5kZWYgX19jcGx1c3BsdXMKLQotI2Vycm9yICJUaGlzIGlzIG5vdCBhIEMr KyBjb21waWxlciIKLQotI2VsaWYgX19jcGx1c3BsdXMgPCAyMDExMDNMCi0KLSNlcnJvciAiVGhp cyBpcyBub3QgYSBDKysxMSBjb21waWxlciIKLQotI2Vsc2UKLQotbmFtZXNwYWNlIGN4eDExCi17 Ci0KLSAgbmFtZXNwYWNlIHRlc3Rfc3RhdGljX2Fzc2VydAotICB7Ci0KLSAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgY2hlY2sKLSAgICB7Ci0gICAgICBzdGF0aWNfYXNzZXJ0 KHNpemVvZihpbnQpIDw9IHNpemVvZihUKSwgIm5vdCBiaWcgZW5vdWdoIik7Ci0gICAgfTsKLQot ICB9Ci0KLSAgbmFtZXNwYWNlIHRlc3RfZmluYWxfb3ZlcnJpZGUKLSAgewotCi0gICAgc3RydWN0 IEJhc2UKLSAgICB7Ci0gICAgICB2aXJ0dWFsIH5CYXNlKCkge30KLSAgICAgIHZpcnR1YWwgdm9p ZCBmKCkge30KLSAgICB9OwotCi0gICAgc3RydWN0IERlcml2ZWQgOiBwdWJsaWMgQmFzZQotICAg IHsKLSAgICAgIHZpcnR1YWwgfkRlcml2ZWQoKSBvdmVycmlkZSB7fQotICAgICAgdmlydHVhbCB2 b2lkIGYoKSBvdmVycmlkZSB7fQotICAgIH07Ci0KLSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X2Rv dWJsZV9yaWdodF9hbmdsZV9icmFja2V0cwotICB7Ci0KLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1l IFQgPgotICAgIHN0cnVjdCBjaGVjayB7fTsKLQotICAgIHR5cGVkZWYgY2hlY2s8dm9pZD4gc2lu Z2xlX3R5cGU7Ci0gICAgdHlwZWRlZiBjaGVjazxjaGVjazx2b2lkPj4gZG91YmxlX3R5cGU7Ci0g ICAgdHlwZWRlZiBjaGVjazxjaGVjazxjaGVjazx2b2lkPj4+IHRyaXBsZV90eXBlOwotICAgIHR5 cGVkZWYgY2hlY2s8Y2hlY2s8Y2hlY2s8Y2hlY2s8dm9pZD4+Pj4gcXVhZHJ1cGxlX3R5cGU7Ci0K LSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X2RlY2x0eXBlCi0gIHsKLQotICAgIGludAotICAgIGYo KQotICAgIHsKLSAgICAgIGludCBhID0gMTsKLSAgICAgIGRlY2x0eXBlKGEpIGIgPSAyOwotICAg ICAgcmV0dXJuIGEgKyBiOwotICAgIH0KLQotICB9Ci0KLSAgbmFtZXNwYWNlIHRlc3RfdHlwZV9k ZWR1Y3Rpb24KLSAgewotCi0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIg PgotICAgIHN0cnVjdCBpc19zYW1lCi0gICAgewotICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFs dWUgPSBmYWxzZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUID4KLSAgICBz dHJ1Y3QgaXNfc2FtZTxULCBUPgotICAgIHsKLSAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gdHJ1ZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUg VDIgPgotICAgIGF1dG8KLSAgICBhZGQoVDEgYTEsIFQyIGEyKSAtPiBkZWNsdHlwZShhMSArIGEy KQotICAgIHsKLSAgICAgIHJldHVybiBhMSArIGEyOwotICAgIH0KLQotICAgIGludAotICAgIHRl c3QoY29uc3QgaW50IGMsIHZvbGF0aWxlIGludCB2KQotICAgIHsKLSAgICAgIHN0YXRpY19hc3Nl cnQoaXNfc2FtZTxpbnQsIGRlY2x0eXBlKDApPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOwotICAgICAg c3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoYyk+Ojp2YWx1ZSA9PSBmYWxzZSwg IiIpOwotICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUodik+Ojp2YWx1 ZSA9PSBmYWxzZSwgIiIpOwotICAgICAgYXV0byBhYyA9IGM7Ci0gICAgICBhdXRvIGF2ID0gdjsK LSAgICAgIGF1dG8gc3VtaSA9IGFjICsgYXYgKyAneCc7Ci0gICAgICBhdXRvIHN1bWYgPSBhYyAr IGF2ICsgMS4wOwotICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwgZGVjbHR5cGUoYWMp Pjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOwotICAgICAgc3RhdGljX2Fzc2VydChpc19zYW1lPGludCwg ZGVjbHR5cGUoYXYpPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOwotICAgICAgc3RhdGljX2Fzc2VydChp c19zYW1lPGludCwgZGVjbHR5cGUoc3VtaSk+Ojp2YWx1ZSA9PSB0cnVlLCAiIik7Ci0gICAgICBz dGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50LCBkZWNsdHlwZShzdW1mKT46OnZhbHVlID09IGZhbHNl LCAiIik7Ci0gICAgICBzdGF0aWNfYXNzZXJ0KGlzX3NhbWU8aW50LCBkZWNsdHlwZShhZGQoYywg dikpPjo6dmFsdWUgPT0gdHJ1ZSwgIiIpOwotICAgICAgcmV0dXJuIChzdW1mID4gMC4wKSA/IHN1 bWkgOiBhZGQoYywgdik7Ci0gICAgfQotCi0gIH0KLQotICBuYW1lc3BhY2UgdGVzdF9ub2V4Y2Vw dAotICB7Ci0KLSAgICBpbnQgZigpIHsgcmV0dXJuIDA7IH0KLSAgICBpbnQgZygpIG5vZXhjZXB0 IHsgcmV0dXJuIDA7IH0KLQotICAgIHN0YXRpY19hc3NlcnQobm9leGNlcHQoZigpKSA9PSBmYWxz ZSwgIiIpOwotICAgIHN0YXRpY19hc3NlcnQobm9leGNlcHQoZygpKSA9PSB0cnVlLCAiIik7Ci0K LSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X2NvbnN0ZXhwcgotICB7Ci0KLSAgICB0ZW1wbGF0ZSA8 IHR5cGVuYW1lIENoYXJUID4KLSAgICB1bnNpZ25lZCBsb25nIGNvbnN0ZXhwcgotICAgIHN0cmxl bl9jX3IoY29uc3QgQ2hhclQgKmNvbnN0IHMsIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWNjKSBub2V4 Y2VwdAotICAgIHsKLSAgICAgIHJldHVybiAqcyA/IHN0cmxlbl9jX3IocyArIDEsIGFjYyArIDEp IDogYWNjOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgQ2hhclQgPgotICAgIHVu c2lnbmVkIGxvbmcgY29uc3RleHByCi0gICAgc3RybGVuX2MoY29uc3QgQ2hhclQgKmNvbnN0IHMp IG5vZXhjZXB0Ci0gICAgewotICAgICAgcmV0dXJuIHN0cmxlbl9jX3IocywgMFVMKTsKLSAgICB9 Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCIiKSA9PSAwVUwsICIiKTsKLSAgICBzdGF0 aWNfYXNzZXJ0KHN0cmxlbl9jKCIxIikgPT0gMVVMLCAiIik7Ci0gICAgc3RhdGljX2Fzc2VydChz dHJsZW5fYygiZXhhbXBsZSIpID09IDdVTCwgIiIpOwotICAgIHN0YXRpY19hc3NlcnQoc3RybGVu X2MoImFub3RoZXJcMGV4YW1wbGUiKSA9PSA3VUwsICIiKTsKLQotICB9Ci0KLSAgbmFtZXNwYWNl IHRlc3RfcnZhbHVlX3JlZmVyZW5jZXMKLSAgewotCi0gICAgdGVtcGxhdGUgPCBpbnQgTiA+Ci0g ICAgc3RydWN0IGFuc3dlcgotICAgIHsKLSAgICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IHZhbHVl ID0gTjsKLSAgICB9OwotCi0gICAgYW5zd2VyPDE+IGYoaW50JikgICAgICAgeyByZXR1cm4gYW5z d2VyPDE+KCk7IH0KLSAgICBhbnN3ZXI8Mj4gZihjb25zdCBpbnQmKSB7IHJldHVybiBhbnN3ZXI8 Mj4oKTsgfQotICAgIGFuc3dlcjwzPiBmKGludCYmKSAgICAgIHsgcmV0dXJuIGFuc3dlcjwzPigp OyB9Ci0KLSAgICB2b2lkCi0gICAgdGVzdCgpCi0gICAgewotICAgICAgaW50IGkgPSAwOwotICAg ICAgY29uc3QgaW50IGMgPSAwOwotICAgICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShmKGkpKTo6 dmFsdWUgPT0gMSwgIiIpOwotICAgICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShmKGMpKTo6dmFs dWUgPT0gMiwgIiIpOwotICAgICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShmKDApKTo6dmFsdWUg PT0gMywgIiIpOwotICAgIH0KLQotICB9Ci0KLSAgbmFtZXNwYWNlIHRlc3RfdW5pZm9ybV9pbml0 aWFsaXphdGlvbgotICB7Ci0KLSAgICBzdHJ1Y3QgdGVzdAotICAgIHsKLSAgICAgIHN0YXRpYyBj b25zdCBpbnQgemVybyB7fTsKLSAgICAgIHN0YXRpYyBjb25zdCBpbnQgb25lIHsxfTsKLSAgICB9 OwotCi0gICAgc3RhdGljX2Fzc2VydCh0ZXN0Ojp6ZXJvID09IDAsICIiKTsKLSAgICBzdGF0aWNf YXNzZXJ0KHRlc3Q6Om9uZSA9PSAxLCAiIik7Ci0KLSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X2xh bWJkYXMKLSAgewotCi0gICAgdm9pZAotICAgIHRlc3QxKCkKLSAgICB7Ci0gICAgICBhdXRvIGxh bWJkYTEgPSBbXSgpe307Ci0gICAgICBhdXRvIGxhbWJkYTIgPSBsYW1iZGExOwotICAgICAgbGFt YmRhMSgpOwotICAgICAgbGFtYmRhMigpOwotICAgIH0KLQotICAgIGludAotICAgIHRlc3QyKCkK LSAgICB7Ci0gICAgICBhdXRvIGEgPSBbXShpbnQgaSwgaW50IGopeyByZXR1cm4gaSArIGo7IH0o MSwgMik7Ci0gICAgICBhdXRvIGIgPSBbXSgpIC0+IGludCB7IHJldHVybiAnMCc7IH0oKTsKLSAg ICAgIGF1dG8gYyA9IFs9XSgpeyByZXR1cm4gYSArIGI7IH0oKTsKLSAgICAgIGF1dG8gZCA9IFsm XSgpeyByZXR1cm4gYzsgfSgpOwotICAgICAgYXV0byBlID0gW2EsICZiXShpbnQgeCkgbXV0YWJs ZSB7Ci0gICAgICAgIGNvbnN0IGF1dG8gaWRlbnRpdHkgPSBbXShpbnQgeSl7IHJldHVybiB5OyB9 OwotICAgICAgICBmb3IgKGF1dG8gaSA9IDA7IGkgPCBhOyArK2kpCi0gICAgICAgICAgYSArPSBi LS07Ci0gICAgICAgIHJldHVybiB4ICsgaWRlbnRpdHkoYSArIGIpOwotICAgICAgfSgwKTsKLSAg ICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZTsKLSAgICB9Ci0KLSAgICBpbnQKLSAgICB0ZXN0 MygpCi0gICAgewotICAgICAgY29uc3QgYXV0byBudWxsYXJ5ID0gW10oKXsgcmV0dXJuIDA7IH07 Ci0gICAgICBjb25zdCBhdXRvIHVuYXJ5ID0gW10oaW50IHgpeyByZXR1cm4geDsgfTsKLSAgICAg IHVzaW5nIG51bGxhcnlfdCA9IGRlY2x0eXBlKG51bGxhcnkpOwotICAgICAgdXNpbmcgdW5hcnlf dCA9IGRlY2x0eXBlKHVuYXJ5KTsKLSAgICAgIGNvbnN0IGF1dG8gaGlnaGVyMXN0ID0gW10obnVs bGFyeV90IGYpeyByZXR1cm4gZigpOyB9OwotICAgICAgY29uc3QgYXV0byBoaWdoZXIybmQgPSBb dW5hcnldKG51bGxhcnlfdCBmMSl7Ci0gICAgICAgIHJldHVybiBbdW5hcnksIGYxXSh1bmFyeV90 IGYyKXsgcmV0dXJuIGYyKHVuYXJ5KGYxKCkpKTsgfTsKLSAgICAgIH07Ci0gICAgICByZXR1cm4g aGlnaGVyMXN0KG51bGxhcnkpICsgaGlnaGVyMm5kKG51bGxhcnkpKHVuYXJ5KTsKLSAgICB9Ci0K LSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X3ZhcmlhZGljX3RlbXBsYXRlcwotICB7Ci0KLSAgICB0 ZW1wbGF0ZSA8aW50Li4uPgotICAgIHN0cnVjdCBzdW07Ci0KLSAgICB0ZW1wbGF0ZSA8aW50IE4w LCBpbnQuLi4gTjF0b04+Ci0gICAgc3RydWN0IHN1bTxOMCwgTjF0b04uLi4+Ci0gICAgewotICAg ICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0gTjAgKyBzdW08TjF0b04uLi4+Ojp2YWx1 ZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPD4KLSAgICBzdHJ1Y3Qgc3VtPD4KLSAgICB7Ci0g ICAgICBzdGF0aWMgY29uc3RleHByIGF1dG8gdmFsdWUgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0 aWNfYXNzZXJ0KHN1bTw+Ojp2YWx1ZSA9PSAwLCAiIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdW08 MT46OnZhbHVlID09IDEsICIiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN1bTwyMz46OnZhbHVlID09 IDIzLCAiIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdW08MSwgMj46OnZhbHVlID09IDMsICIiKTsK LSAgICBzdGF0aWNfYXNzZXJ0KHN1bTw1LCA1LCAxMT46OnZhbHVlID09IDIxLCAiIik7Ci0gICAg c3RhdGljX2Fzc2VydChzdW08MiwgMywgNSwgNywgMTEsIDEzPjo6dmFsdWUgPT0gNDEsICIiKTsK LQotICB9Ci0KLSAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzcyODE4 NC90ZW1wbGF0ZS1hbGlhc2VzLWFuZC1zZmluYWUKLSAgLy8gQ2xhbmcgMy4xIGZhaWxzIHdpdGgg aGVhZGVycyBvZiBsaWJzdGQrKyA0LjguMyB3aGVuIHVzaW5nIHN0ZDo6ZnVuY3Rpb24KLSAgLy8g YmVjYXVzZSBvZiB0aGlzLgotICBuYW1lc3BhY2UgdGVzdF90ZW1wbGF0ZV9hbGlhc19zZmluYWUK LSAgewotCi0gICAgc3RydWN0IGZvbyB7fTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g ICAgdXNpbmcgbWVtYmVyID0gdHlwZW5hbWUgVDo6bWVtYmVyX3R5cGU7Ci0KLSAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgZnVuYyguLi4pIHt9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBUPgotICAgIHZvaWQgZnVuYyhtZW1iZXI8VD4qKSB7fQotCi0gICAgdm9pZCB0ZXN0KCk7 Ci0KLSAgICB2b2lkIHRlc3QoKSB7IGZ1bmM8Zm9vPigwKTsgfQotCi0gIH0KLQotfSAgLy8gbmFt ZXNwYWNlIGN4eDExCi0KLSNlbmRpZiAgLy8gX19jcGx1c3BsdXMgPj0gMjAxMTAzTAotCi1dXSkK LQotCi1kbmwgIFRlc3RzIGZvciBuZXcgZmVhdHVyZXMgaW4gQysrMTQKLQotbTRfZGVmaW5lKFtf QVhfQ1hYX0NPTVBJTEVfU1REQ1hYX3Rlc3Rib2R5X25ld19pbl8xNF0sIFtbCi0KLS8vIElmIHRo ZSBjb21waWxlciBhZG1pdHMgdGhhdCBpdCBpcyBub3QgcmVhZHkgZm9yIEMrKzE0LCB3aHkgdG9y dHVyZSBpdD8KLS8vIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNwZWVkIHVwIHRoZSB0ZXN0LgotCi0j aWZuZGVmIF9fY3BsdXNwbHVzCi0KLSNlcnJvciAiVGhpcyBpcyBub3QgYSBDKysgY29tcGlsZXIi Ci0KLSNlbGlmIF9fY3BsdXNwbHVzIDwgMjAxNDAyTAotCi0jZXJyb3IgIlRoaXMgaXMgbm90IGEg QysrMTQgY29tcGlsZXIiCi0KLSNlbHNlCi0KLW5hbWVzcGFjZSBjeHgxNAotewotCi0gIG5hbWVz cGFjZSB0ZXN0X3BvbHltb3JwaGljX2xhbWJkYXMKLSAgewotCi0gICAgaW50Ci0gICAgdGVzdCgp Ci0gICAgewotICAgICAgY29uc3QgYXV0byBsYW1iZGEgPSBbXShhdXRvJiYuLi4gYXJncyl7Ci0g ICAgICAgIGNvbnN0IGF1dG8gaXN0aW55ID0gW10oYXV0byB4KXsKLSAgICAgICAgICByZXR1cm4g KHNpemVvZih4KSA9PSAxVUwpID8gMSA6IDA7Ci0gICAgICAgIH07Ci0gICAgICAgIGNvbnN0IGlu dCBhcmV0aW55W10gPSB7IGlzdGlueShhcmdzKS4uLiB9OwotICAgICAgICByZXR1cm4gYXJldGlu eVswXTsKLSAgICAgIH07Ci0gICAgICByZXR1cm4gbGFtYmRhKDEsIDFMLCAxLjBmLCAnMScpOwot ICAgIH0KLQotICB9Ci0KLSAgbmFtZXNwYWNlIHRlc3RfYmluYXJ5X2xpdGVyYWxzCi0gIHsKLQot ICAgIGNvbnN0ZXhwciBhdXRvIGl2aWkgPSAwYjAwMDAwMDAwMDAxMDEwMTA7Ci0gICAgc3RhdGlj X2Fzc2VydChpdmlpID09IDQyLCAid3JvbmcgdmFsdWUiKTsKLQotICB9Ci0KLSAgbmFtZXNwYWNl IHRlc3RfZ2VuZXJhbGl6ZWRfY29uc3RleHByCi0gIHsKLQotICAgIHRlbXBsYXRlIDwgdHlwZW5h bWUgQ2hhclQgPgotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBsb25nCi0gICAgc3RybGVuX2MoY29u c3QgQ2hhclQgKmNvbnN0IHMpIG5vZXhjZXB0Ci0gICAgewotICAgICAgYXV0byBsZW5ndGggPSAw VUw7Ci0gICAgICBmb3IgKGF1dG8gcCA9IHM7ICpwOyArK3ApCi0gICAgICAgICsrbGVuZ3RoOwot ICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICB9Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9j KCIiKSA9PSAwVUwsICIiKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0cmxlbl9jKCJ4IikgPT0gMVVM LCAiIik7Ci0gICAgc3RhdGljX2Fzc2VydChzdHJsZW5fYygidGVzdCIpID09IDRVTCwgIiIpOwot ICAgIHN0YXRpY19hc3NlcnQoc3RybGVuX2MoImFub3RoZXJcMHRlc3QiKSA9PSA3VUwsICIiKTsK LQotICB9Ci0KLSAgbmFtZXNwYWNlIHRlc3RfbGFtYmRhX2luaXRfY2FwdHVyZQotICB7Ci0KLSAg ICBpbnQKLSAgICB0ZXN0KCkKLSAgICB7Ci0gICAgICBhdXRvIHggPSAwOwotICAgICAgY29uc3Qg YXV0byBsYW1iZGExID0gW2EgPSB4XShpbnQgYil7IHJldHVybiBhICsgYjsgfTsKLSAgICAgIGNv bnN0IGF1dG8gbGFtYmRhMiA9IFthID0gbGFtYmRhMSh4KV0oKXsgcmV0dXJuIGE7IH07Ci0gICAg ICByZXR1cm4gbGFtYmRhMigpOwotICAgIH0KLQotICB9Ci0KLSAgbmFtZXNwYWNlIHRlc3RfZGln aXRfc2VwYXJhdG9ycwotICB7Ci0KLSAgICBjb25zdGV4cHIgYXV0byB0ZW5fbWlsbGlvbiA9IDEw MCcwMDAnMDAwOwotICAgIHN0YXRpY19hc3NlcnQodGVuX21pbGxpb24gPT0gMTAwMDAwMDAwLCAi Iik7Ci0KLSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X3JldHVybl90eXBlX2RlZHVjdGlvbgotICB7 Ci0KLSAgICBhdXRvIGYoaW50JiB4KSB7IHJldHVybiB4OyB9Ci0gICAgZGVjbHR5cGUoYXV0bykg ZyhpbnQmIHgpIHsgcmV0dXJuIHg7IH0KLQotICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVDEsIHR5 cGVuYW1lIFQyID4KLSAgICBzdHJ1Y3QgaXNfc2FtZQotICAgIHsKLSAgICAgIHN0YXRpYyBjb25z dGV4cHIgYXV0byB2YWx1ZSA9IGZhbHNlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZSA8IHR5cGVu YW1lIFQgPgotICAgIHN0cnVjdCBpc19zYW1lPFQsIFQ+Ci0gICAgewotICAgICAgc3RhdGljIGNv bnN0ZXhwciBhdXRvIHZhbHVlID0gdHJ1ZTsKLSAgICB9OwotCi0gICAgaW50Ci0gICAgdGVzdCgp Ci0gICAgewotICAgICAgYXV0byB4ID0gMDsKLSAgICAgIHN0YXRpY19hc3NlcnQoaXNfc2FtZTxp bnQsIGRlY2x0eXBlKGYoeCkpPjo6dmFsdWUsICIiKTsKLSAgICAgIHN0YXRpY19hc3NlcnQoaXNf c2FtZTxpbnQmLCBkZWNsdHlwZShnKHgpKT46OnZhbHVlLCAiIik7Ci0gICAgICByZXR1cm4geDsK LSAgICB9Ci0KLSAgfQotCi19ICAvLyBuYW1lc3BhY2UgY3h4MTQKLQotI2VuZGlmICAvLyBfX2Nw bHVzcGx1cyA+PSAyMDE0MDJMCi0KLV1dKQotCi0KLWRubCAgVGVzdHMgZm9yIG5ldyBmZWF0dXJl cyBpbiBDKysxNwotCi1tNF9kZWZpbmUoW19BWF9DWFhfQ09NUElMRV9TVERDWFhfdGVzdGJvZHlf bmV3X2luXzE3XSwgW1sKLQotLy8gSWYgdGhlIGNvbXBpbGVyIGFkbWl0cyB0aGF0IGl0IGlzIG5v dCByZWFkeSBmb3IgQysrMTcsIHdoeSB0b3J0dXJlIGl0PwotLy8gSG9wZWZ1bGx5LCB0aGlzIHdp bGwgc3BlZWQgdXAgdGhlIHRlc3QuCi0KLSNpZm5kZWYgX19jcGx1c3BsdXMKLQotI2Vycm9yICJU aGlzIGlzIG5vdCBhIEMrKyBjb21waWxlciIKLQotI2VsaWYgX19jcGx1c3BsdXMgPCAyMDE3MDNM Ci0KLSNlcnJvciAiVGhpcyBpcyBub3QgYSBDKysxNyBjb21waWxlciIKLQotI2Vsc2UKLQotI2lu Y2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+Ci0jaW5jbHVkZSA8dXRpbGl0eT4KLSNpbmNsdWRlIDx0 eXBlX3RyYWl0cz4KLQotbmFtZXNwYWNlIGN4eDE3Ci17Ci0KLSAgbmFtZXNwYWNlIHRlc3RfY29u c3RleHByX2xhbWJkYXMKLSAgewotCi0gICAgY29uc3RleHByIGludCBmb28gPSBbXSgpe3JldHVy biA0Mjt9KCk7Ci0KLSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0OjpuZXN0ZWRfbmFtZXNwYWNlOjpk ZWZpbml0aW9ucwotICB7Ci0KLSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X2ZvbGRfZXhwcmVzc2lv bgotICB7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotICAgIGludCBtdWx0aXBs eShBcmdzLi4uIGFyZ3MpCi0gICAgewotICAgICAgcmV0dXJuIChhcmdzICogLi4uICogMSk7Ci0g ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLSAgICBib29sIGFsbChBcmdz Li4uIGFyZ3MpCi0gICAgewotICAgICAgcmV0dXJuIChhcmdzICYmIC4uLik7Ci0gICAgfQotCi0g IH0KLQotICBuYW1lc3BhY2UgdGVzdF9leHRlbmRlZF9zdGF0aWNfYXNzZXJ0Ci0gIHsKLQotICAg IHN0YXRpY19hc3NlcnQgKHRydWUpOwotCi0gIH0KLQotICBuYW1lc3BhY2UgdGVzdF9hdXRvX2Jy YWNlX2luaXRfbGlzdAotICB7Ci0KLSAgICBhdXRvIGZvbyA9IHs1fTsKLSAgICBhdXRvIGJhciB7 NX07Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxzdGQ6OmluaXRpYWxpemVyX2xp c3Q8aW50PiwgZGVjbHR5cGUoZm9vKT46OnZhbHVlKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6 aXNfc2FtZTxpbnQsIGRlY2x0eXBlKGJhcik+Ojp2YWx1ZSk7Ci0gIH0KLQotICBuYW1lc3BhY2Ug dGVzdF90eXBlbmFtZV9pbl90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJhbWV0ZXIKLSAgewotCi0gICAg dGVtcGxhdGU8dGVtcGxhdGU8dHlwZW5hbWU+IHR5cGVuYW1lIFg+IHN0cnVjdCBEOwotCi0gIH0K LQotICBuYW1lc3BhY2UgdGVzdF9mYWxsdGhyb3VnaF9ub2Rpc2NhcmRfbWF5YmVfdW51c2VkX2F0 dHJpYnV0ZXMKLSAgewotCi0gICAgaW50IGYxKCkKLSAgICB7Ci0gICAgICByZXR1cm4gNDI7Ci0g ICAgfQotCi0gICAgW1tub2Rpc2NhcmRdXSBpbnQgZjIoKQotICAgIHsKLSAgICAgIFtbbWF5YmVf dW51c2VkXV0gYXV0byB1bnVzZWQgPSBmMSgpOwotCi0gICAgICBzd2l0Y2ggKGYxKCkpCi0gICAg ICB7Ci0gICAgICBjYXNlIDE3OgotICAgICAgICBmMSgpOwotICAgICAgICBbW2ZhbGx0aHJvdWdo XV07Ci0gICAgICBjYXNlIDQyOgotICAgICAgICBmMSgpOwotICAgICAgfQotICAgICAgcmV0dXJu IGYxKCk7Ci0gICAgfQotCi0gIH0KLQotICBuYW1lc3BhY2UgdGVzdF9leHRlbmRlZF9hZ2dyZWdh dGVfaW5pdGlhbGl6YXRpb24KLSAgewotCi0gICAgc3RydWN0IGJhc2UxCi0gICAgewotICAgICAg aW50IGIxLCBiMiA9IDQyOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgYmFzZTIKLSAgICB7Ci0gICAg ICBiYXNlMigpIHsKLSAgICAgICAgYjMgPSA0MjsKLSAgICAgIH0KLSAgICAgIGludCBiMzsKLSAg ICB9OwotCi0gICAgc3RydWN0IGRlcml2ZWQgOiBiYXNlMSwgYmFzZTIKLSAgICB7Ci0gICAgICAg IGludCBkOwotICAgIH07Ci0KLSAgICBkZXJpdmVkIGQxIHt7MSwgMn0sIHt9LCA0fTsgIC8vIGZ1 bGwgaW5pdGlhbGl6YXRpb24KLSAgICBkZXJpdmVkIGQyIHt7fSwge30sIDR9OyAgICAgIC8vIHZh bHVlLWluaXRpYWxpemVkIGJhc2VzCi0KLSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0X2dlbmVyYWxf cmFuZ2VfYmFzZWRfZm9yX2xvb3AKLSAgewotCi0gICAgc3RydWN0IGl0ZXIKLSAgICB7Ci0gICAg ICBpbnQgaTsKLQotICAgICAgaW50JiBvcGVyYXRvciogKCkKLSAgICAgIHsKLSAgICAgICAgcmV0 dXJuIGk7Ci0gICAgICB9Ci0KLSAgICAgIGNvbnN0IGludCYgb3BlcmF0b3IqICgpIGNvbnN0Ci0g ICAgICB7Ci0gICAgICAgIHJldHVybiBpOwotICAgICAgfQotCi0gICAgICBpdGVyJiBvcGVyYXRv cisrKCkKLSAgICAgIHsKLSAgICAgICAgKytpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg ICB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBzZW50aW5lbAotICAgIHsKLSAgICAgIGludCBpOwot ICAgIH07Ci0KLSAgICBib29sIG9wZXJhdG9yPT0gKGNvbnN0IGl0ZXImIGksIGNvbnN0IHNlbnRp bmVsJiBzKQotICAgIHsKLSAgICAgIHJldHVybiBpLmkgPT0gcy5pOwotICAgIH0KLQotICAgIGJv b2wgb3BlcmF0b3IhPSAoY29uc3QgaXRlciYgaSwgY29uc3Qgc2VudGluZWwmIHMpCi0gICAgewot ICAgICAgcmV0dXJuICEoaSA9PSBzKTsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgcmFuZ2UKLSAgICB7 Ci0gICAgICBpdGVyIGJlZ2luKCkgY29uc3QKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuIHswfTsK LSAgICAgIH0KLQotICAgICAgc2VudGluZWwgZW5kKCkgY29uc3QKLSAgICAgIHsKLSAgICAgICAg cmV0dXJuIHs1fTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgdm9pZCBmKCkKLSAgICB7Ci0gICAg ICByYW5nZSByIHt9OwotCi0gICAgICBmb3IgKGF1dG8gaSA6IHIpCi0gICAgICB7Ci0gICAgICAg IFtbbWF5YmVfdW51c2VkXV0gYXV0byB2ID0gaTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0g IG5hbWVzcGFjZSB0ZXN0X2xhbWJkYV9jYXB0dXJlX2FzdGVyaXNrX3RoaXNfYnlfdmFsdWUKLSAg ewotCi0gICAgc3RydWN0IHQKLSAgICB7Ci0gICAgICBpbnQgaTsKLSAgICAgIGludCBmb28oKQot ICAgICAgewotICAgICAgICByZXR1cm4gWyp0aGlzXSgpCi0gICAgICAgIHsKLSAgICAgICAgICBy ZXR1cm4gaTsKLSAgICAgICAgfSgpOwotICAgICAgfQotICAgIH07Ci0KLSAgfQotCi0gIG5hbWVz cGFjZSB0ZXN0X2VudW1fY2xhc3NfY29uc3RydWN0aW9uCi0gIHsKLQotICAgIGVudW0gY2xhc3Mg Ynl0ZSA6IHVuc2lnbmVkIGNoYXIKLSAgICB7fTsKLQotICAgIGJ5dGUgZm9vIHs0Mn07Ci0KLSAg fQotCi0gIG5hbWVzcGFjZSB0ZXN0X2NvbnN0ZXhwcl9pZgotICB7Ci0KLSAgICB0ZW1wbGF0ZSA8 Ym9vbCBjb25kPgotICAgIGludCBmICgpCi0gICAgewotICAgICAgaWYgY29uc3RleHByKGNvbmQp Ci0gICAgICB7Ci0gICAgICAgIHJldHVybiAxMzsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAg IHsKLSAgICAgICAgcmV0dXJuIDQyOwotICAgICAgfQotICAgIH0KLQotICB9Ci0KLSAgbmFtZXNw YWNlIHRlc3Rfc2VsZWN0aW9uX3N0YXRlbWVudF93aXRoX2luaXRpYWxpemVyCi0gIHsKLQotICAg IGludCBmKCkKLSAgICB7Ci0gICAgICByZXR1cm4gMTM7Ci0gICAgfQotCi0gICAgaW50IGYyKCkK LSAgICB7Ci0gICAgICBpZiAoYXV0byBpID0gZigpOyBpID4gMCkKLSAgICAgIHsKLSAgICAgICAg cmV0dXJuIDM7Ci0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAoYXV0byBpID0gZigpOyBpICsgNCkK LSAgICAgIHsKLSAgICAgIGNhc2UgMTc6Ci0gICAgICAgIHJldHVybiAyOwotCi0gICAgICBkZWZh dWx0OgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgfQotCi0gIG5hbWVz cGFjZSB0ZXN0X3RlbXBsYXRlX2FyZ3VtZW50X2RlZHVjdGlvbl9mb3JfY2xhc3NfdGVtcGxhdGVz Ci0gIHsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Ci0gICAgc3Ry dWN0IHBhaXIKLSAgICB7Ci0gICAgICBwYWlyIChUMSBwMSwgVDIgcDIpCi0gICAgICAgIDogbTEg e3AxfSwKLSAgICAgICAgICBtMiB7cDJ9Ci0gICAgICB7fQotCi0gICAgICBUMSBtMTsKLSAgICAg IFQyIG0yOwotICAgIH07Ci0KLSAgICB2b2lkIGYoKQotICAgIHsKLSAgICAgIFtbbWF5YmVfdW51 c2VkXV0gYXV0byBwID0gcGFpcnsxMywgNDJ1fTsKLSAgICB9Ci0KLSAgfQotCi0gIG5hbWVzcGFj ZSB0ZXN0X25vbl90eXBlX2F1dG9fdGVtcGxhdGVfcGFyYW1ldGVycwotICB7Ci0KLSAgICB0ZW1w bGF0ZSA8YXV0byBuPgotICAgIHN0cnVjdCBCCi0gICAge307Ci0KLSAgICBCPDU+IGIxOwotICAg IEI8J2EnPiBiMjsKLQotICB9Ci0KLSAgbmFtZXNwYWNlIHRlc3Rfc3RydWN0dXJlZF9iaW5kaW5n cwotICB7Ci0KLSAgICBpbnQgYXJyWzJdID0geyAxLCAyIH07Ci0gICAgc3RkOjpwYWlyPGludCwg aW50PiBwciA9IHsgMSwgMiB9OwotCi0gICAgYXV0byBmMSgpIC0+IGludCgmKVsyXQotICAgIHsK LSAgICAgIHJldHVybiBhcnI7Ci0gICAgfQotCi0gICAgYXV0byBmMigpIC0+IHN0ZDo6cGFpcjxp bnQsIGludD4mCi0gICAgewotICAgICAgcmV0dXJuIHByOwotICAgIH0KLQotICAgIHN0cnVjdCBT Ci0gICAgewotICAgICAgaW50IHgxIDogMjsKLSAgICAgIHZvbGF0aWxlIGRvdWJsZSB5MTsKLSAg ICB9OwotCi0gICAgUyBmMygpCi0gICAgewotICAgICAgcmV0dXJuIHt9OwotICAgIH0KLQotICAg IGF1dG8gWyB4MSwgeTEgXSA9IGYxKCk7Ci0gICAgYXV0byYgWyB4cjEsIHlyMSBdID0gZjEoKTsK LSAgICBhdXRvIFsgeDIsIHkyIF0gPSBmMigpOwotICAgIGF1dG8mIFsgeHIyLCB5cjIgXSA9IGYy KCk7Ci0gICAgY29uc3QgYXV0byBbIHgzLCB5MyBdID0gZjMoKTsKLQotICB9Ci0KLSAgbmFtZXNw YWNlIHRlc3RfZXhjZXB0aW9uX3NwZWNfdHlwZV9zeXN0ZW0KLSAgewotCi0gICAgc3RydWN0IEdv b2Qge307Ci0gICAgc3RydWN0IEJhZCB7fTsKLQotICAgIHZvaWQgZzEoKSBub2V4Y2VwdDsKLSAg ICB2b2lkIGcyKCk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEJhZAotICAgIGYo VCosIFQqKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KLSAgICBH b29kCi0gICAgZihUMSosIFQyKik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0IChzdGQ6OmlzX3NhbWVf djxHb29kLCBkZWNsdHlwZShmKGcxLCBnMikpPik7Ci0KLSAgfQotCi0gIG5hbWVzcGFjZSB0ZXN0 X2lubGluZV92YXJpYWJsZXMKLSAgewotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBmKFQp Ci0gICAge30KLQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIGcoVCkKLSAgICB7Ci0g ICAgICByZXR1cm4gVHt9OwotICAgIH0KLQotICAgIHRlbXBsYXRlPD4gaW5saW5lIHZvaWQgZjw+ KGludCkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8PiBpbnQgZzw+KGludCkKLSAgICB7Ci0gICAg ICByZXR1cm4gNTsKLSAgICB9Ci0KLSAgfQotCi19ICAvLyBuYW1lc3BhY2UgY3h4MTcKLQotI2Vu ZGlmICAvLyBfX2NwbHVzcGx1cyA8IDIwMTcwM0wKLQotXV0pCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9SZWFkTWUudHh0IGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9SZWFkTWUudHh0CmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzNhN2Q0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvUmVhZE1lLnR4dAorKysgL2Rldi9udWxs CkBAIC0xLDIzICswLDAgQEAKLQotSG93IHRvIGJ1aWxkIGplbWFsbG9jIGZvciBXaW5kb3dzCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotMS4gSW5zdGFsbCBDeWd3aW4gd2l0 aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOgotICAgKiBhdXRvY29uZgotICAgKiBh dXRvZ2VuCi0gICAqIGdhd2sKLSAgICogZ3JlcAotICAgKiBzZWQKLQotMi4gSW5zdGFsbCBWaXN1 YWwgU3R1ZGlvIDIwMTUgb3IgMjAxNyB3aXRoIFZpc3VhbCBDKysKLQotMy4gQWRkIEN5Z3dpblxi aW4gdG8gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKLQotNC4gT3BlbiAieDY0IE5hdGl2 ZSBUb29scyBDb21tYW5kIFByb21wdCBmb3IgVlMgMjAxNyIKLSAgIChub3RlOiB4ODYveDY0IGRv ZXNuJ3QgbWF0dGVyIGF0IHRoaXMgcG9pbnQpCi0KLTUuIEdlbmVyYXRlIGhlYWRlciBmaWxlczoK LSAgIHNoIC1jICJDQz1jbCAuL2F1dG9nZW4uc2giCi0KLTYuIE5vdyB0aGUgcHJvamVjdCBjYW4g YmUgb3BlbmVkIGFuZCBidWlsdCBpbiBWaXN1YWwgU3R1ZGlvOgotICAgbXN2Y1xqZW1hbGxvY192 YzIwMTcuc2xuCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvbXN2Yy9qZW1hbGxvY192YzIwMTUuc2xuIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvbXN2Yy9qZW1hbGxvY192YzIwMTUuc2xuCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBhZWRkNWU1Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvamVtYWxsb2NfdmMyMDE1LnNsbgorKysgL2Rldi9udWxs CkBAIC0xLDYzICswLDAgQEAKLe+7vwotTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24g RmlsZSwgRm9ybWF0IFZlcnNpb24gMTIuMDAKLSMgVmlzdWFsIFN0dWRpbyAxNAotVmlzdWFsU3R1 ZGlvVmVyc2lvbiA9IDE0LjAuMjQ3MjAuMAotTWluaW11bVZpc3VhbFN0dWRpb1ZlcnNpb24gPSAx MC4wLjQwMjE5LjEKLVByb2plY3QoInsyMTUwRTMzMy04RkRDLTQyQTMtOTQ3NC0xQTM5NTZENDZE RTh9IikgPSAiU29sdXRpb24gSXRlbXMiLCAiU29sdXRpb24gSXRlbXMiLCAiezcwQTk5MDA2LTZE RTktNDcyQi04RjgzLTRDRUU2QzYxNkRGM30iCi0JUHJvamVjdFNlY3Rpb24oU29sdXRpb25JdGVt cykgPSBwcmVQcm9qZWN0Ci0JCVJlYWRNZS50eHQgPSBSZWFkTWUudHh0Ci0JRW5kUHJvamVjdFNl Y3Rpb24KLUVuZFByb2plY3QKLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEw QzkxQkM5NDJ9IikgPSAiamVtYWxsb2MiLCAicHJvamVjdHNcdmMyMDE1XGplbWFsbG9jXGplbWFs bG9jLnZjeHByb2oiLCAiezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0iCi1F bmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQy fSIpID0gInRlc3RfdGhyZWFkcyIsICJwcm9qZWN0c1x2YzIwMTVcdGVzdF90aHJlYWRzXHRlc3Rf dGhyZWFkcy52Y3hwcm9qIiwgInswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9 IgotRW5kUHJvamVjdAotR2xvYmFsCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRp b25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KLQkJRGVidWd8eDY0ID0gRGVidWd8eDY0Ci0JCURl YnVnfHg4NiA9IERlYnVnfHg4NgotCQlEZWJ1Zy1zdGF0aWN8eDY0ID0gRGVidWctc3RhdGljfHg2 NAotCQlEZWJ1Zy1zdGF0aWN8eDg2ID0gRGVidWctc3RhdGljfHg4NgotCQlSZWxlYXNlfHg2NCA9 IFJlbGVhc2V8eDY0Ci0JCVJlbGVhc2V8eDg2ID0gUmVsZWFzZXx4ODYKLQkJUmVsZWFzZS1zdGF0 aWN8eDY0ID0gUmVsZWFzZS1zdGF0aWN8eDY0Ci0JCVJlbGVhc2Utc3RhdGljfHg4NiA9IFJlbGVh c2Utc3RhdGljfHg4NgotCUVuZEdsb2JhbFNlY3Rpb24KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RD b25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgotCQl7OEQ2QkIyOTItOUUxQy00 MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0Ci0J CXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRlYnVnfHg2NC5CdWlsZC4w ID0gRGVidWd8eDY0Ci0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRl YnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlG OTgtNDg2NEJEQzE1MTRBfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERlYnVnfFdpbjMyCi0JCXs4RDZC QjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRlYnVnLXN0YXRpY3x4NjQuQWN0aXZl Q2ZnID0gRGVidWctc3RhdGljfHg2NAotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJE QzE1MTRBfS5EZWJ1Zy1zdGF0aWN8eDY0LkJ1aWxkLjAgPSBEZWJ1Zy1zdGF0aWN8eDY0Ci0JCXs4 RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRlYnVnLXN0YXRpY3x4ODYuQWN0 aXZlQ2ZnID0gRGVidWctc3RhdGljfFdpbjMyCi0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00 ODY0QkRDMTUxNEF9LkRlYnVnLXN0YXRpY3x4ODYuQnVpbGQuMCA9IERlYnVnLXN0YXRpY3xXaW4z MgotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5SZWxlYXNlfHg2NC5B Y3RpdmVDZmcgPSBSZWxlYXNlfHg2NAotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJE QzE1MTRBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQKLQkJezhENkJCMjkyLTlF MUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uUmVsZWFzZXx4ODYuQWN0aXZlQ2ZnID0gUmVsZWFz ZXxXaW4zMgotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5SZWxlYXNl fHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgt NDg2NEJEQzE1MTRBfS5SZWxlYXNlLXN0YXRpY3x4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZS1zdGF0 aWN8eDY0Ci0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJlbGVhc2Ut c3RhdGljfHg2NC5CdWlsZC4wID0gUmVsZWFzZS1zdGF0aWN8eDY0Ci0JCXs4RDZCQjI5Mi05RTFD LTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJlbGVhc2Utc3RhdGljfHg4Ni5BY3RpdmVDZmcgPSBS ZWxlYXNlLXN0YXRpY3xXaW4zMgotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1 MTRBfS5SZWxlYXNlLXN0YXRpY3x4ODYuQnVpbGQuMCA9IFJlbGVhc2Utc3RhdGljfFdpbjMyCi0J CXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LkRlYnVnfHg2NC5BY3RpdmVD ZmcgPSBEZWJ1Z3x4NjQKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0u RGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlD LTA3MDhEQjk3RUQ0NH0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyCi0JCXswOTAy OENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LkRlYnVnfHg4Ni5CdWlsZC4wID0gRGVi dWd8V2luMzIKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uRGVidWct c3RhdGljfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Zy1zdGF0aWN8eDY0Ci0JCXswOTAyOENGRC00RUI3 LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LkRlYnVnLXN0YXRpY3x4NjQuQnVpbGQuMCA9IERlYnVn LXN0YXRpY3x4NjQKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uRGVi dWctc3RhdGljfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Zy1zdGF0aWN8V2luMzIKLQkJezA5MDI4Q0ZE LTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uRGVidWctc3RhdGljfHg4Ni5CdWlsZC4wID0g RGVidWctc3RhdGljfFdpbjMyCi0JCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VE NDR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0Ci0JCXswOTAyOENGRC00RUI3 LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2 NAotCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fS5SZWxlYXNlfHg4Ni5B Y3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4 REI5N0VENDR9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JCXswOTAyOENG RC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2Utc3RhdGljfHg2NC5BY3RpdmVD ZmcgPSBSZWxlYXNlLXN0YXRpY3x4NjQKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhE Qjk3RUQ0NH0uUmVsZWFzZS1zdGF0aWN8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlLXN0YXRpY3x4NjQK LQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uUmVsZWFzZS1zdGF0aWN8 eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2Utc3RhdGljfFdpbjMyCi0JCXswOTAyOENGRC00RUI3LTQ5 MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2Utc3RhdGljfHg4Ni5CdWlsZC4wID0gUmVsZWFz ZS1zdGF0aWN8V2luMzIKLQlFbmRHbG9iYWxTZWN0aW9uCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlv blByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KLQkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCi0J RW5kR2xvYmFsU2VjdGlvbgotRW5kR2xvYmFsCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9qZW1hbGxvY192YzIwMTcuc2xuIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9qZW1hbGxvY192YzIwMTcuc2xu CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjJmY2I0Li4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvamVtYWxsb2NfdmMyMDE3 LnNsbgorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLe+7vwotTWljcm9zb2Z0IFZpc3Vh bCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gMTIuMDAKLSMgVmlzdWFsIFN0 dWRpbyAxNAotVmlzdWFsU3R1ZGlvVmVyc2lvbiA9IDE0LjAuMjQ3MjAuMAotTWluaW11bVZpc3Vh bFN0dWRpb1ZlcnNpb24gPSAxMC4wLjQwMjE5LjEKLVByb2plY3QoInsyMTUwRTMzMy04RkRDLTQy QTMtOTQ3NC0xQTM5NTZENDZERTh9IikgPSAiU29sdXRpb24gSXRlbXMiLCAiU29sdXRpb24gSXRl bXMiLCAiezcwQTk5MDA2LTZERTktNDcyQi04RjgzLTRDRUU2QzYxNkRGM30iCi0JUHJvamVjdFNl Y3Rpb24oU29sdXRpb25JdGVtcykgPSBwcmVQcm9qZWN0Ci0JCVJlYWRNZS50eHQgPSBSZWFkTWUu dHh0Ci0JRW5kUHJvamVjdFNlY3Rpb24KLUVuZFByb2plY3QKLVByb2plY3QoIns4QkM5Q0VCOC04 QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiamVtYWxsb2MiLCAicHJvamVjdHNcdmMy MDE3XGplbWFsbG9jXGplbWFsbG9jLnZjeHByb2oiLCAiezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4 LTQ4NjRCREMxNTE0QX0iCi1FbmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQw LThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInRlc3RfdGhyZWFkcyIsICJwcm9qZWN0c1x2YzIwMTdc dGVzdF90aHJlYWRzXHRlc3RfdGhyZWFkcy52Y3hwcm9qIiwgInswOTAyOENGRC00RUI3LTQ5MUQt ODY5Qy0wNzA4REI5N0VENDR9IgotRW5kUHJvamVjdAotR2xvYmFsCi0JR2xvYmFsU2VjdGlvbihT b2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KLQkJRGVidWd8eDY0 ID0gRGVidWd8eDY0Ci0JCURlYnVnfHg4NiA9IERlYnVnfHg4NgotCQlEZWJ1Zy1zdGF0aWN8eDY0 ID0gRGVidWctc3RhdGljfHg2NAotCQlEZWJ1Zy1zdGF0aWN8eDg2ID0gRGVidWctc3RhdGljfHg4 NgotCQlSZWxlYXNlfHg2NCA9IFJlbGVhc2V8eDY0Ci0JCVJlbGVhc2V8eDg2ID0gUmVsZWFzZXx4 ODYKLQkJUmVsZWFzZS1zdGF0aWN8eDY0ID0gUmVsZWFzZS1zdGF0aWN8eDY0Ci0JCVJlbGVhc2Ut c3RhdGljfHg4NiA9IFJlbGVhc2Utc3RhdGljfHg4NgotCUVuZEdsb2JhbFNlY3Rpb24KLQlHbG9i YWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgot CQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5EZWJ1Z3x4NjQuQWN0aXZl Q2ZnID0gRGVidWd8eDY0Ci0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9 LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0Ci0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5 OC00ODY0QkRDMTUxNEF9LkRlYnVnfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgotCQl7OEQ2 QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5EZWJ1Z3x4ODYuQnVpbGQuMCA9IERl YnVnfFdpbjMyCi0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRlYnVn LXN0YXRpY3x4NjQuQWN0aXZlQ2ZnID0gRGVidWctc3RhdGljfHg2NAotCQl7OEQ2QkIyOTItOUUx Qy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5EZWJ1Zy1zdGF0aWN8eDY0LkJ1aWxkLjAgPSBEZWJ1 Zy1zdGF0aWN8eDY0Ci0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRl YnVnLXN0YXRpY3x4ODYuQWN0aXZlQ2ZnID0gRGVidWctc3RhdGljfFdpbjMyCi0JCXs4RDZCQjI5 Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LkRlYnVnLXN0YXRpY3x4ODYuQnVpbGQuMCA9 IERlYnVnLXN0YXRpY3xXaW4zMgotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1 MTRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NAotCQl7OEQ2QkIyOTItOUUx Qy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4 NjQKLQkJezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4NjRCREMxNTE0QX0uUmVsZWFzZXx4ODYu QWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgotCQl7OEQ2QkIyOTItOUUxQy00MTNELTlGOTgtNDg2 NEJEQzE1MTRBfS5SZWxlYXNlfHg4Ni5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7OEQ2QkIy OTItOUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5SZWxlYXNlLXN0YXRpY3x4NjQuQWN0aXZl Q2ZnID0gUmVsZWFzZS1zdGF0aWN8eDY0Ci0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0 QkRDMTUxNEF9LlJlbGVhc2Utc3RhdGljfHg2NC5CdWlsZC4wID0gUmVsZWFzZS1zdGF0aWN8eDY0 Ci0JCXs4RDZCQjI5Mi05RTFDLTQxM0QtOUY5OC00ODY0QkRDMTUxNEF9LlJlbGVhc2Utc3RhdGlj fHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlLXN0YXRpY3xXaW4zMgotCQl7OEQ2QkIyOTItOUUxQy00 MTNELTlGOTgtNDg2NEJEQzE1MTRBfS5SZWxlYXNlLXN0YXRpY3x4ODYuQnVpbGQuMCA9IFJlbGVh c2Utc3RhdGljfFdpbjMyCi0JCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9 LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04 NjlDLTA3MDhEQjk3RUQ0NH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQKLQkJezA5MDI4 Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uRGVidWd8eDg2LkFjdGl2ZUNmZyA9IERl YnVnfFdpbjMyCi0JCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LkRlYnVn fHg4Ni5CdWlsZC4wID0gRGVidWd8V2luMzIKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3 MDhEQjk3RUQ0NH0uRGVidWctc3RhdGljfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Zy1zdGF0aWN8eDY0 Ci0JCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LkRlYnVnLXN0YXRpY3x4 NjQuQnVpbGQuMCA9IERlYnVnLXN0YXRpY3x4NjQKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlD LTA3MDhEQjk3RUQ0NH0uRGVidWctc3RhdGljfHg4Ni5BY3RpdmVDZmcgPSBEZWJ1Zy1zdGF0aWN8 V2luMzIKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uRGVidWctc3Rh dGljfHg4Ni5CdWlsZC4wID0gRGVidWctc3RhdGljfFdpbjMyCi0JCXswOTAyOENGRC00RUI3LTQ5 MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0 Ci0JCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2V8eDY0LkJ1 aWxkLjAgPSBSZWxlYXNlfHg2NAotCQl7MDkwMjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdF RDQ0fS5SZWxlYXNlfHg4Ni5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCi0JCXswOTAyOENGRC00 RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2V8eDg2LkJ1aWxkLjAgPSBSZWxlYXNl fFdpbjMyCi0JCXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2Ut c3RhdGljfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlLXN0YXRpY3x4NjQKLQkJezA5MDI4Q0ZELTRF QjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0NH0uUmVsZWFzZS1zdGF0aWN8eDY0LkJ1aWxkLjAgPSBS ZWxlYXNlLXN0YXRpY3x4NjQKLQkJezA5MDI4Q0ZELTRFQjctNDkxRC04NjlDLTA3MDhEQjk3RUQ0 NH0uUmVsZWFzZS1zdGF0aWN8eDg2LkFjdGl2ZUNmZyA9IFJlbGVhc2Utc3RhdGljfFdpbjMyCi0J CXswOTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9LlJlbGVhc2Utc3RhdGljfHg4 Ni5CdWlsZC4wID0gUmVsZWFzZS1zdGF0aWN8V2luMzIKLQlFbmRHbG9iYWxTZWN0aW9uCi0JR2xv YmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KLQkJSGlkZVNvbHV0 aW9uTm9kZSA9IEZBTFNFCi0JRW5kR2xvYmFsU2VjdGlvbgotRW5kR2xvYmFsCgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92 YzIwMTUvamVtYWxsb2MvamVtYWxsb2MudmN4cHJvaiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE1L2plbWFsbG9jL2plbWFsbG9jLnZj eHByb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMDI4YTEuLjAwMDAwMDAKLS0t IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92 YzIwMTUvamVtYWxsb2MvamVtYWxsb2MudmN4cHJvagorKysgL2Rldi9udWxsCkBAIC0xLDM4MCAr MCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2pl Y3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjE0LjAiIHhtbG5zPSJodHRw Oi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRl bUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0Q29uZmln dXJhdGlvbiBJbmNsdWRlPSJEZWJ1Zy1zdGF0aWN8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRp b24+RGVidWctc3RhdGljPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9Q bGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmln dXJhdGlvbiBJbmNsdWRlPSJEZWJ1Zy1zdGF0aWN8eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9u PkRlYnVnLXN0YXRpYzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRm b3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0 aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9D b25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KLSAgICA8L1By b2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJS ZWxlYXNlLXN0YXRpY3xXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlLXN0YXRp YzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAg PC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVk ZT0iUmVsZWFzZS1zdGF0aWN8eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2Utc3Rh dGljPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+Ci0gICAg PC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVk ZT0iUmVsZWFzZXxXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1 cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RD b25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3x4 NjQiPgotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8 UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAg IDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfHg2NCI+Ci0gICAgICA8Q29u ZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwv UGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgPC9JdGVtR3JvdXA+Ci0g IDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYXJl bmEuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiYWNrZ3Jv dW5kX3RocmVhZC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XGJhc2UuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiaW4u YyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiaW5faW5mby5j IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGJpdG1hcC5jIiAv PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGJ1Zl93cml0ZXIuYyIg Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjYWNoZV9iaW4uYyIg Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xja2guYyIgLz4KLSAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjb3VudGVyLmMiIC8+Ci0gICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcY3RsLmMiIC8+Ci0gICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZGVjYXkuYyIgLz4KLSAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xkaXYuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlY2FjaGUuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9 Ii4uXC4uXC4uXC4uXHNyY1xlZGF0YS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGVkYXRhX2NhY2hlLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu LlwuLlwuLlwuLlxzcmNcZWhvb2tzLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcZW1hcC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXGVzZXQuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xleHBfZ3Jvdy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XGV4dGVudC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGV4 dGVudF9kc3MuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xl eHRlbnRfbW1hcC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XGZ4cC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGhvb2su YyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xocGEuYyIgLz4K LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xocGFfaG9va3MuYyIgLz4K LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xocGRhdGEuYyIgLz4KLSAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xpbnNwZWN0LmMiIC8+Ci0gICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcamVtYWxsb2MuYyIgLz4KLSAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xsYXJnZS5jIiAvPgotICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGxvZy5jIiAvPgotICAgIDxDbENvbXBpbGUg SW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXG1hbGxvY19pby5jIiAvPgotICAgIDxDbENvbXBpbGUg SW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXG11dGV4LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcbnN0aW1lLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNccGEuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xwYV9leHRyYS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXHBhaS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXHBhYy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBh Z2VzLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccGVha19l dmVudC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2Yu YyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX2RhdGEu YyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX2xvZy5j IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2ZfcmVjZW50 LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJvZl9zdGF0 cy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2Zfc3lz LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHNzZXQuYyIg Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xydHJlZS5jIiAvPgot ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNhZmV0eV9jaGVjay5jIiAv PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNhbi5jIiAvPgotICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNhbl9idW1wLmMiIC8+Ci0gICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2MuYyIgLz4KLSAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzZWMuYyIgLz4KLSAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzdGF0cy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXHN6LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcdGNhY2hlLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu LlwuLlxzcmNcdGVzdF9ob29rcy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXHRocmVhZF9ldmVudC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXHRpY2tlci5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXHRzZC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXHdpdG5lc3MuYyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVs PSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+ezhENkJCMjkyLTlFMUMtNDEzRC05Rjk4LTQ4 NjRCREMxNTE0QX08L1Byb2plY3RHdWlkPgotICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29y ZD4KLSAgICA8Um9vdE5hbWVzcGFjZT5qZW1hbGxvYzwvUm9vdE5hbWVzcGFjZT4KLSAgICA8V2lu ZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj44LjE8L1dpbmRvd3NUYXJnZXRQbGF0Zm9ybVZlcnNp b24+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh dGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29u ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIExh YmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJh cnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VE ZWJ1Z0xpYnJhcmllcz4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNl dD4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3Bl cnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8 JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24i PgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlw ZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAg PFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+Ci0gICAgPENoYXJhY3RlclNl dD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVy dHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh c2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBl PkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJp ZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwv UGxhdGZvcm1Ub29sc2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hv bGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFy YWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9u PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3xXaW4zMici IExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGli cmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9V c2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9v bHNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9w dGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pgot ICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmln dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24i PgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5 cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAg IDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxDaGFyYWN0ZXJT ZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3Bl cnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1 Zy1zdGF0aWN8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9u VHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJy YXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTQw PC9QbGF0Zm9ybVRvb2xzZXQ+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3Rl clNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249Iick KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZp Z3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmln dXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJh cmllcz4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KLSAgICA8 V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4K LSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5 R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgot ICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4K LSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQ bGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxXaG9sZVByb2dyYW1P cHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0 ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPElt cG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+Ci0g IDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgotICA8L0ltcG9ydEdyb3Vw PgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJ bXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9 IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29u ZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku dXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0 R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh dGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0g ICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZv cm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3Nv ZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRm b3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5 U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh c2V8V2luMzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29m dC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJv b3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9j YWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBD b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGlj fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQo VXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0 aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNl ci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3Jv dXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQo Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPEltcG9ydCBQ cm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv cHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxh dGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8 L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRz Ij4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQ bGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1p Y3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRh UGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJv cGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n UmVsZWFzZXx4NjQnIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jv c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNl clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0i TG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91 cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3Rh dGljfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIk KFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRp dGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz ZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdy b3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KLSAgPFByb3BlcnR5 R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xX aW4zMiciPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3Vy YXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9u KVw8L0ludERpcj4KLSAgICA8VGFyZ2V0TmFtZT4kKFByb2plY3ROYW1lKWQ8L1RhcmdldE5hbWU+ Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25m aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8V2luMzInIj4KLSAgICA8T3V0 RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4K LSAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+Ci0gICAg PFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSktJChQbGF0Zm9ybVRvb2xzZXQpLSQoQ29uZmlndXJh dGlvbik8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAg Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMy JyI+Ci0gICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlv bilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwv SW50RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0i JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4K LSAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8 L091dERpcj4KLSAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnRE aXI+Ci0gICAgPFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSktJChQbGF0Zm9ybVRvb2xzZXQpLSQo Q29uZmlndXJhdGlvbik8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3Bl cnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1 Z3x4NjQnIj4KLSAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1 cmF0aW9uKVw8L091dERpcj4KLSAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlv bilcPC9JbnREaXI+Ci0gICAgPFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSlkPC9UYXJnZXROYW1l PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29u ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciPgotICAgIDxPdXRE aXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgot ICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KLSAgICA8 VGFyZ2V0TmFtZT4kKFByb2plY3ROYW1lKS12YyQoUGxhdGZvcm1Ub29sc2V0VmVyc2lvbiktJChD b25maWd1cmF0aW9uKTwvVGFyZ2V0TmFtZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVy dHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh c2V8eDY0JyI+Ci0gICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmln dXJhdGlvbilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRp b24pXDwvSW50RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRp dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0 JyI+Ci0gICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlv bilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwv SW50RGlyPgotICAgIDxUYXJnZXROYW1lPiQoUHJvamVjdE5hbWUpLXZjJChQbGF0Zm9ybVRvb2xz ZXRWZXJzaW9uKS0kKENvbmZpZ3VyYXRpb24pPC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3Jv dXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8 JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFBy ZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxXYXJu aW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2Fi bGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxM T0NfTk9fUFJJVkFURV9OQU1FU1BBQ0U7X1JFRU5UUkFOVDtfV0lORExMO0RMTEVYUE9SVDtKRU1B TExPQ19ERUJVRztfREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3Nv ckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5c Li5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25h bEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAg ICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNw ZWNpZmljV2FybmluZ3M+Ci0gICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQ YXRoKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KLSAgICA8L0Ns Q29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVt PgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5m b3JtYXRpb24+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVt RGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn PT0nRGVidWctc3RhdGljfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVjb21w aWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8V2FybmluZ0xl dmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwv T3B0aW1pemF0aW9uPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX05P X1BSSVZBVEVfTkFNRVNQQUNFO0pFTUFMTE9DX0RFQlVHO19SRUVOVFJBTlQ7SkVNQUxMT0NfRVhQ T1JUPTtfREVCVUc7X0xJQjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29y RGVmaW5pdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwu LlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFs SW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAg IDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAg ICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwOTA7NDE0Njs0MjY3OzQzMzQ8L0Rpc2FibGVT cGVjaWZpY1dhcm5pbmdzPgotICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0cHV0 UGF0aCkkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+Ci0gICAgPC9D bENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3Rl bT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0lu Zm9ybWF0aW9uPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRl bURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J0RlYnVnfHg2NCciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFk ZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZl bDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXph dGlvbj4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19OT19QUklWQVRF X05BTUVTUEFDRTtfUkVFTlRSQU5UO19XSU5ETEw7RExMRVhQT1JUO0pFTUFMTE9DX0RFQlVHO19E RUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+ Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlxpbmNsdWRl Oy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVj dG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxEaXNhYmxlU3Bl Y2lmaWNXYXJuaW5ncz40MDkwOzQxNDY7NDI2Nzs0MzM0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5n cz4KLSAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dHB1dFBhdGgpJChUYXJnZXRO YW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgotICAgIDwvQ2xDb21waWxlPgotICAg IDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2Vu ZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAg ICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3Jv dXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0 aWN8eDY0JyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAg ICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2Fy bmluZ0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgot ICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX05PX1BSSVZBVEVfTkFNRVNQ QUNFO0pFTUFMTE9DX0RFQlVHO19SRUVOVFJBTlQ7SkVNQUxMT0NfRVhQT1JUPTtfREVCVUc7X0xJ QjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0g ICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlxpbmNsdWRlOy4u XC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y aWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxSdW50aW1lTGlicmFy eT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPERpc2FibGVTcGVj aWZpY1dhcm5pbmdzPjQwOTA7NDE0Njs0MjY3OzQzMzQ8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdz PgotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0RlYnVnSW5mb3JtYXRp b25Gb3JtYXQ+Ci0gICAgICA8TWluaW1hbFJlYnVpbGQ+ZmFsc2U8L01pbmltYWxSZWJ1aWxkPgot ICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9T dWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRl RGVidWdJbmZvcm1hdGlvbj4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4K LSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs YXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJu aW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+ Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVl ZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0 aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5z aWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxMT0NfTk9f UFJJVkFURV9OQU1FU1BBQ0U7X1JFRU5UUkFOVDtfV0lORExMO0RMTEVYUE9SVDtOREVCVUc7JShQ cmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAg PEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwu LlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8 L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8RGlzYWJsZVNwZWNpZmljV2Fy bmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+Ci0gICAg ICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFyZ2V0TmFtZSkucGRi PC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4K LSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVi dWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5h YmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGlt aXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgPC9MaW5rPgotICA8 L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0i JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4K LSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZl bD4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+ Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVu Y3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50 cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVwcm9j ZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFDRTtfUkVFTlRSQU5U O0pFTUFMTE9DX0VYUE9SVD07TkRFQlVHO19MSUI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8 L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0 b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0 OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0 b3JpZXM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJh cnk+Ci0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwv RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+Ci0gICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+ JChPdXRwdXRQYXRoKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4K LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwv U3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0 ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFi bGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6 ZVJlZmVyZW5jZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJ dGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y bSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZl bD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAg IDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRp bWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZl bExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0 aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXGlu Y2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRl RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFByZXBy b2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX05PX1BSSVZBVEVfTkFNRVNQQUNFO19SRUVOVFJB TlQ7X1dJTkRMTDtETExFWFBPUlQ7TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9Q cmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40 MDkwOzQxNDY7NDI2Nzs0MzM0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4KLSAgICAgIDxQcm9n cmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dHB1dFBhdGgpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dy YW1EYXRhQmFzZUZpbGVOYW1lPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAg PFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9y bWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01E QVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZl cmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURl ZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25m aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIj4KLSAgICA8Q2xD b21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAg IDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8 T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZl bExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVu Y3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZp bml0aW9ucz5KRU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFDRTtfUkVFTlRSQU5UO0pFTUFMTE9D X0VYUE9SVD07TkRFQlVHO19MSUI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nl c3NvckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5c Li5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRp b25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0g ICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAg ICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNw ZWNpZmljV2FybmluZ3M+Ci0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5PbGRTdHlsZTwv RGVidWdJbmZvcm1hdGlvbkZvcm1hdD4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAg ICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJ bmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxl Q09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXpl UmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0 ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxN aWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9u VGFyZ2V0cyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE1L2plbWFsbG9jL2plbWFsbG9jLnZjeHByb2ouZmls dGVycyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVj dHMvdmMyMDE1L2plbWFsbG9jL2plbWFsbG9jLnZjeHByb2ouZmlsdGVycwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMWI0M2U5Zi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNS9qZW1hbGxvYy9qZW1h bGxvYy52Y3hwcm9qLmZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAot77u/ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVy c2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIv bXNidWlsZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJj ZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEw NjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmNw cDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgotICAg IDwvRmlsdGVyPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xhcmVuYS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNl IEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcYmFja2dyb3VuZF90aHJlYWQuYyI+Ci0gICAgICA8RmlsdGVyPlNv dXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j bHVkZT0iLi5cLi5cLi5cLi5cc3JjXGJhc2UuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGJpbi5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+ Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNcYml0bWFwLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8 L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xidWZf d3JpdGVyLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0Ns Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjYWNoZV9i aW4uYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21w aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGNraC5jIj4KLSAg ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcY291bnRlci5jIj4KLSAgICAgIDxG aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcY3RsLmMiPgotICAgICAgPEZpbHRlcj5Tb3Vy Y2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xkZWNheS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcZGl2LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xlbWFwLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0Ns Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHBfZ3Jv dy5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXh0ZW50LmMiPgot ICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHRlbnRfZHNzLmMiPgotICAg ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xleHRlbnRfbW1hcC5jIj4KLSAgICAg IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZnhwLmMiPgotICAgICAgPEZpbHRlcj5T b3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xob29rLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls ZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u XC4uXC4uXC4uXHNyY1xocGEuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVy PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXGhwYV9ob29rcy5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0g ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc aHBkYXRhLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0Ns Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xpbnNwZWN0 LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xqZW1hbGxvYy5jIj4K LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcbGFyZ2UuYyI+Ci0gICAgICA8 RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGxvZy5jIj4KLSAgICAgIDxGaWx0ZXI+U291 cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcbWFsbG9jX2lvLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2Ug RmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9 Ii4uXC4uXC4uXC4uXHNyY1xtdXRleC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu LlwuLlxzcmNcbnN0aW1lLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xwYS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENv bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccGFfZXh0cmEu YyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhaS5jIj4KLSAgICAg IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccGFjLmMiPgotICAgICAgPEZpbHRlcj5T b3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYWdlcy5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp bGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu LlwuLlwuLlwuLlxzcmNccGVha19ldmVudC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNccHJvZi5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+ Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNccHJvZl9kYXRhLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAg ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xw cm9mX2xvZy5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9D bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJvZl9y ZWNlbnQuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xD b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2Zfc3Rh dHMuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21w aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2Zfc3lzLmMi PgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwc3NldC5jIj4KLSAgICAg IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccnRyZWUuYyI+Ci0gICAgICA8RmlsdGVy PlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg SW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNhZmV0eV9jaGVjay5jIj4KLSAgICAgIDxGaWx0ZXI+ U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2MuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXHNlYy5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+ Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNcc3RhdHMuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwv Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHN6LmMi PgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0Y2FjaGUuYyI+Ci0gICAg ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRlc3RfaG9va3MuYyI+Ci0gICAgICA8 RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRocmVhZF9ldmVudC5jIj4KLSAgICAgIDxG aWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGlja2VyLmMiPgotICAgICAgPEZpbHRlcj5T b3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0c2QuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXHdpdG5lc3MuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXGJpbl9pbmZvLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xlY2FjaGUuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwv Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVkYXRh LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlZGF0YV9jYWNoZS5j Ij4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+ Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZWhvb2tzLmMiPgotICAg ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlc2V0LmMiPgotICAgICAgPEZpbHRl cj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzYW4uYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBG aWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i Li5cLi5cLi5cLi5cc3JjXHNhbl9idW1wLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+Clwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE1L3Rlc3RfdGhyZWFkcy90 ZXN0X3RocmVhZHMudmN4cHJvaiBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL21zdmMvcHJvamVjdHMvdmMyMDE1L3Rlc3RfdGhyZWFkcy90ZXN0X3RocmVhZHMudmN4cHJv agpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI1ODc2ZC4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAx NS90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLnZjeHByb2oKKysrIC9kZXYvbnVsbApAQCAtMSwz MjcgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQ cm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSIxNC4wIiB4bWxucz0i aHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAg PEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KLSAgICA8UHJvamVjdENv bmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWctc3RhdGljfFdpbjMyIj4KLSAgICAgIDxDb25maWd1 cmF0aW9uPkRlYnVnLXN0YXRpYzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4z MjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENv bmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWctc3RhdGljfHg2NCI+Ci0gICAgICA8Q29uZmlndXJh dGlvbj5EZWJ1Zy1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9Q bGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmln dXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1 ZzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAg PC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVk ZT0iUmVsZWFzZS1zdGF0aWN8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZS1z dGF0aWM8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgot ICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIElu Y2x1ZGU9IlJlbGVhc2Utc3RhdGljfHg2NCI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNl LXN0YXRpYzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgot ICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIElu Y2x1ZGU9IlJlbGVhc2V8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29u ZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9q ZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVi dWd8eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPgotICAg ICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4K LSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgotICAgICAg PENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT54 NjQ8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gIDwvSXRlbUdyb3Vw PgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPnsw OTAyOENGRC00RUI3LTQ5MUQtODY5Qy0wNzA4REI5N0VENDR9PC9Qcm9qZWN0R3VpZD4KLSAgICA8 S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+dGVzdF90aHJl YWRzPC9Sb290TmFtZXNwYWNlPgotICAgIDxXaW5kb3dzVGFyZ2V0UGxhdGZvcm1WZXJzaW9uPjgu MTwvV2luZG93c1RhcmdldFBsYXRmb3JtVmVyc2lvbj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8 SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnBy b3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo UGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxD b25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVz ZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQbGF0Zm9ybVRv b2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRl PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29u ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8V2lu MzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxp Y2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwv VXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTQwPC9QbGF0Zm9ybVRv b2xzZXQ+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Q cm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+ Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4K LSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQ bGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxXaG9sZVByb2dyYW1P cHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0 ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFBy b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlLXN0YXRpY3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmln dXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1 Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNl dD52MTQwPC9QbGF0Zm9ybVRvb2xzZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50 cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5 dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBD b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExh YmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248 L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1 Z0xpYnJhcmllcz4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4K LSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5 R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAg ICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAg IDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8UGxhdGZv cm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRp Qnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3Vw IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQn IiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0 aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1Vz ZURlYnVnTGlicmFyaWVzPgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29s c2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0 aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0g IDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1 cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIiBMYWJlbD0iQ29uZmln dXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0 aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVz PgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MDwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxXaG9s ZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAg IDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91 cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJv cHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgotICA8L0lt cG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCI+Ci0gIDwvSW1wb3J0R3Jv dXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQo Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8SW1wb3J0 IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5w cm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQ bGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0g IDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNo ZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGly KVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBw RGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9 IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIp XE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMo JyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBM YWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBv cnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh c2Utc3RhdGljfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFBy b2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w cyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0 Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwv SW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRp dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAg PEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p LnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQu Q3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3Jt IiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25m aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyIgTGFiZWw9IlByb3Bl cnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29m dC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJv b3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9j YWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBM YWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0 Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3RE aXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlz dHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycp IiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJ bXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl bGVhc2Utc3RhdGljfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQ cm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv cHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxh dGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8 L0ltcG9ydEdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KLSAg PFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9 PSdEZWJ1Z3xXaW4zMiciPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwk KENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25m aWd1cmF0aW9uKVw8L0ludERpcj4KLSAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNy ZW1lbnRhbD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciPgot ICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwv T3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERp cj4KLSAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KLSAgPC9Qcm9w ZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwv TGlua0luY3JlbWVudGFsPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwk KENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0 eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWct c3RhdGljfHg2NCciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFs PgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24p XDwvT3V0RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlv bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAg IDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0 RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4K LSAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+Ci0gIDwvUHJvcGVy dHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk KFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3xXaW4zMiciPgotICAgIDxPdXREaXI+JChTb2x1 dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnRE aXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KLSAgICA8TGlua0luY3Jl bWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFBy b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlfHg2NCciPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENv bmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1 cmF0aW9uKVw8L0ludERpcj4KLSAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVt ZW50YWw+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIn JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIj4KLSAg ICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091 dERpcj4KLSAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+ Ci0gICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICA8L1Byb3Bl cnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAg ICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAg IDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9u PkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+ V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9j ZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4u XC4uXC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGlu Y2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRp b25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAg ICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJ bmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8QWRkaXRp b25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmln dXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgICA8QWRkaXRpb25h bERlcGVuZGVuY2llcz5qZW1hbGxvY2QubGliO2tlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMy LmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtv bGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUo QWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9M aW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENv bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdp bjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAg IDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2Fybmlu Z0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAg ICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPkpFTUFMTE9DX0VYUE9SVD07SkVNQUxMT0NfU1RB VElDO19ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vz c29yRGVmaW5pdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwu LlwuLlwuLlx0ZXN0XGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNs dWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9u YWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRl ZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAg ICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJ bmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8QWRkaXRp b25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmln dXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgICA8QWRkaXRpb25h bERlcGVuZGVuY2llcz5qZW1hbGxvYy0kKFBsYXRmb3JtVG9vbHNldCktJChDb25maWd1cmF0aW9u KS5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21k bGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7 dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVz KTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRp b25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0 aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAg PFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxX YXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRp c2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RF QlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4K LSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXHRlc3RcaW5j bHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7 JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv cmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29u c29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9H ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5q ZW1hbGxvY2QubGliO2tlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5s aWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0 MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVu ZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QWRkaXRpb25hbExpYnJh cnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8 L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZp bml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmln dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciPgotICAgIDxDbENvbXBp bGU+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVy PgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRp bWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZp bml0aW9ucz5KRU1BTExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztfREVCVUc7JShQcmVwcm9j ZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0 aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4uXC4u XC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJ bmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAg PFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAg PC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5 c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1 Z0luZm9ybWF0aW9uPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MtdmMk KFBsYXRmb3JtVG9vbHNldFZlcnNpb24pLSQoQ29uZmlndXJhdGlvbikubGliO2tlcm5lbDMyLmxp Yjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMy LmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5s aWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBl bmRlbmNpZXM+Ci0gICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9u RGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0 b3JpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVm aW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n UmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxl dmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9Q cmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXph dGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlu a2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25z PgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTsl KFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAg ICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlx0ZXN0XGluY2x1ZGU7 Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRk aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+ Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8 L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJh dGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5h YmxlQ09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1p emVSZWZlcmVuY2VzPgotICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChTb2x1 dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pPC9BZGRpdGlvbmFsTGlicmFyeURp cmVjdG9yaWVzPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MubGliO2tl cm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGli O2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGli O29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0 aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+ Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAg ICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxQcmVjb21waWxl ZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8T3B0aW1pemF0aW9u Pk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1 ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8 L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1B TExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNz b3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0aW9u YWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4uXC4uXC4u XGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNs dWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFJ1 bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21w aWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0g ICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1h dGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRp bmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4K LSAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoU29sdXRpb25EaXIpJChQbGF0 Zm9ybSlcJChDb25maWd1cmF0aW9uKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KLSAg ICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmplbWFsbG9jLSQoUGxhdGZvcm1Ub29sc2V0KS0k KENvbmZpZ3VyYXRpb24pLmxpYjtrZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2lu c3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGli O29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9u YWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAg PC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPENs Q29tcGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAg ICA8UHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAg PE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2 ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1 bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVm aW5pdGlvbnM+TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVw cm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz Pi4uXC4uXC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4u XGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRk aXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4K LSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVi dWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5h YmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGlt aXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgICA8QWRkaXRpb25h bExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJh dGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgICA8QWRkaXRpb25hbERl cGVuZGVuY2llcz5qZW1hbGxvYy5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGli O3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMy LmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRp dGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+ Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0 aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQn Ij4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdM ZXZlbD4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFk ZXI+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8 RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8 SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVw cm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztOREVC VUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmlu aXRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5c dGVzdFxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3Zj X2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVk ZURpcmVjdG9yaWVzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRp bWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3Rl bT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRy dWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5n PnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRy dWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9y aWVzPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKTwvQWRkaXRpb25h bExpYnJhcnlEaXJlY3Rvcmllcz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmplbWFs bG9jLXZjJChQbGF0Zm9ybVRvb2xzZXRWZXJzaW9uKS0kKENvbmZpZ3VyYXRpb24pLmxpYjtrZXJu ZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjth ZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtv ZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlv bmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgot ICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJl YWRzXHRlc3RfdGhyZWFkcy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu Llx0ZXN0X3RocmVhZHNcdGVzdF90aHJlYWRzX21haW4uY3BwIiAvPgotICA8L0l0ZW1Hcm91cD4K LSAgPEl0ZW1Hcm91cD4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIuLlxqZW1hbGxv Y1xqZW1hbGxvYy52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0Pns4ZDZiYjI5Mi05ZTFjLTQxM2Qt OWY5OC00ODY0YmRjMTUxNGF9PC9Qcm9qZWN0PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAg PC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwu LlwuLlx0ZXN0X3RocmVhZHNcdGVzdF90aHJlYWRzLmgiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8 SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAv PgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgotICA8L0ltcG9ydEdy b3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3Zj MjAxNS90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLnZjeHByb2ouZmlsdGVycyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE1L3Rlc3Rf dGhyZWFkcy90ZXN0X3RocmVhZHMudmN4cHJvai5maWx0ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBmYTQ1ODhmLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE1L3Rlc3RfdGhyZWFkcy90ZXN0X3Ro cmVhZHMudmN4cHJvai5maWx0ZXJzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAot77u/ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVy c2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIv bXNidWlsZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJj ZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEw NjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmNw cDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgotICAg IDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KLSAgICAgIDxV bmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9V bmlxdWVJZGVudGlmaWVyPgotICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtp bmM7eHNkPC9FeHRlbnNpb25zPgotICAgIDwvRmlsdGVyPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0 ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRlc3RfdGhyZWFkc1x0 ZXN0X3RocmVhZHMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0g ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx0ZXN0X3Ro cmVhZHNcdGVzdF90aHJlYWRzX21haW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3Vw PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJlYWRzXHRlc3RfdGhy ZWFkcy5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbElu Y2x1ZGU+Ci0gIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy9qZW1hbGxvYy9qZW1hbGxvYy52Y3hwcm9qIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIwMTcvamVt YWxsb2MvamVtYWxsb2MudmN4cHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgw MDRkYi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy9qZW1hbGxvYy9qZW1hbGxvYy52Y3hwcm9qCisrKyAvZGV2 L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9 InV0Zi04Ij8+Ci08UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0i MTUuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVp bGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+Ci0g ICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnLXN0YXRpY3xXaW4zMiI+Ci0g ICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1Zy1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8 UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0g ICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnLXN0YXRpY3x4NjQiPgotICAg ICAgPENvbmZpZ3VyYXRpb24+RGVidWctc3RhdGljPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBs YXRmb3JtPng2NDwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8 UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgotICAgICAgPENvbmZp Z3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1Bs YXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1 cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2Utc3RhdGljfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0 aW9uPlJlbGVhc2Utc3RhdGljPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMy PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29u ZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlLXN0YXRpY3x4NjQiPgotICAgICAgPENvbmZpZ3Vy YXRpb24+UmVsZWFzZS1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0 PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29u ZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9u PlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3Jt PgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9u IEluY2x1ZGU9IkRlYnVnfHg2NCI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmln dXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENv bmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8 eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAg ICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgot ICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u XC4uXC4uXC4uXHNyY1xhcmVuYS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXGJhY2tncm91bmRfdGhyZWFkLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcYmFzZS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXGJpbi5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXGJpbl9pbmZvLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwu LlxzcmNcYml0bWFwLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNcYnVmX3dyaXRlci5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXGNhY2hlX2Jpbi5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXGNraC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGNv dW50ZXIuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xjdGwu YyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xkZWNheS5jIiAv PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGRpdi5jIiAvPgotICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVjYWNoZS5jIiAvPgotICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVkYXRhLmMiIC8+Ci0gICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZWRhdGFfY2FjaGUuYyIgLz4KLSAgICA8Q2xD b21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlaG9va3MuYyIgLz4KLSAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlbWFwLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXNldC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXGV4cF9ncm93LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcZXh0ZW50LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu LlwuLlwuLlwuLlxzcmNcZXh0ZW50X2Rzcy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i Li5cLi5cLi5cLi5cc3JjXGV4dGVudF9tbWFwLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcZnhwLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcaG9vay5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXGhwYS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XGhwYV9ob29rcy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XGhwZGF0YS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGlu c3BlY3QuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xqZW1h bGxvYy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGxhcmdl LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcbG9nLmMiIC8+ Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcbWFsbG9jX2lvLmMiIC8+ Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcbXV0ZXguYyIgLz4KLSAg ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xuc3RpbWUuYyIgLz4KLSAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYS5jIiAvPgotICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhX2V4dHJhLmMiIC8+Ci0gICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccGFpLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNccGFjLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu LlwuLlwuLlwuLlxzcmNccGFnZXMuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xwZWFrX2V2ZW50LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNccHJvZi5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXHByb2ZfZGF0YS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXHByb2ZfbG9nLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwu LlxzcmNccHJvZl9yZWNlbnQuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1xwcm9mX3N0YXRzLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwu LlwuLlxzcmNccHJvZl9zeXMuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4u XC4uXHNyY1xwc3NldC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c c3JjXHJ0cmVlLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc c2FmZXR5X2NoZWNrLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxz cmNcc2FuLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2Fu X2J1bXAuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzYy5j IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNlYy5jIiAvPgot ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHN0YXRzLmMiIC8+Ci0gICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc3ouYyIgLz4KLSAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0Y2FjaGUuYyIgLz4KLSAgICA8Q2xDb21waWxl IEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0ZXN0X2hvb2tzLmMiIC8+Ci0gICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGhyZWFkX2V2ZW50LmMiIC8+Ci0gICAgPENsQ29t cGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGlja2VyLmMiIC8+Ci0gICAgPENsQ29tcGls ZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdHNkLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcd2l0bmVzcy5jIiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPFBy b3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57OEQ2QkIyOTIt OUUxQy00MTNELTlGOTgtNDg2NEJEQzE1MTRBfTwvUHJvamVjdEd1aWQ+Ci0gICAgPEtleXdvcmQ+ V2luMzJQcm9qPC9LZXl3b3JkPgotICAgIDxSb290TmFtZXNwYWNlPmplbWFsbG9jPC9Sb290TmFt ZXNwYWNlPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1Rhcmdl dHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdyb3Vw IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzIn IiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNM aWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwv VXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9ybVRv b2xzZXQ+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Q cm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0 aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlv blR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgot ICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxDaGFyYWN0 ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFBy b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9u VHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGli cmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYx NDE8L1BsYXRmb3JtVG9vbHNldD4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8 L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwv Q2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRp dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8V2lu MzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRp Y0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxz ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9y bVRvb2xzZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dy YW1PcHRpbWl6YXRpb24+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNl dD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENv bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0 aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRp b25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4K LSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDE8L1BsYXRmb3JtVG9vbHNldD4KLSAgICA8Q2hhcmFj dGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQ cm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n RGVidWctc3RhdGljfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJh dGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVn TGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+ djE0MTwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFy YWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9u PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJD b25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0Nv bmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdM aWJyYXJpZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9ybVRvb2xzZXQ+Ci0g ICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRp b24+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9w ZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p fCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9u Ij4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5 cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAg ICA8UGxhdGZvcm1Ub29sc2V0PnYxNDE8L1BsYXRmb3JtVG9vbHNldD4KLSAgICA8V2hvbGVQcm9n cmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hh cmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0g IDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAv PgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KLSAgPC9JbXBvcnRH cm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJTaGFyZWQiPgotICA8L0ltcG9ydEdyb3VwPgot ICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZp Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9q ZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMi IENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZv cm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0lt cG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk KFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMi PgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBs YXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWlj cm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQ bGF0Zm9ybSIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9w ZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNy b3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVz ZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9 IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3Jv dXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0 YXRpY3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0 PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENv bmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p LnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9y dEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPgotICAgIDxJbXBv cnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2Vy LnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4k KFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4K LSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNo ZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGly KVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBw RGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9 IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxN aWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCck KFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFi ZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0 R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl LXN0YXRpY3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVj dD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBD b25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3Jt KS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgPC9JbXBv cnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9w ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi dWd8V2luMzInIj4KLSAgICA8T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25m aWd1cmF0aW9uKVw8L091dERpcj4KLSAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJh dGlvbilcPC9JbnREaXI+Ci0gICAgPFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSlkPC9UYXJnZXRO YW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQo Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdpbjMyJyI+Ci0gICAg PE91dERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9PdXRE aXI+Ci0gICAgPEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgot ICAgIDxUYXJnZXROYW1lPiQoUHJvamVjdE5hbWUpLSQoUGxhdGZvcm1Ub29sc2V0KS0kKENvbmZp Z3VyYXRpb24pPC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdy b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxX aW4zMiciPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3Vy YXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9u KVw8L0ludERpcj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRp b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfFdpbjMy JyI+Ci0gICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlv bilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwv SW50RGlyPgotICAgIDxUYXJnZXROYW1lPiQoUHJvamVjdE5hbWUpLSQoUGxhdGZvcm1Ub29sc2V0 KS0kKENvbmZpZ3VyYXRpb24pPC9UYXJnZXROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQ cm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n RGVidWd8eDY0JyI+Ci0gICAgPE91dERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29u ZmlndXJhdGlvbilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFBsYXRmb3JtKVwkKENvbmZpZ3Vy YXRpb24pXDwvSW50RGlyPgotICAgIDxUYXJnZXROYW1lPiQoUHJvamVjdE5hbWUpZDwvVGFyZ2V0 TmFtZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249Iick KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3x4NjQnIj4KLSAgICA8 T3V0RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERp cj4KLSAgICA8SW50RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+Ci0g ICAgPFRhcmdldE5hbWU+JChQcm9qZWN0TmFtZSktdmMkKFBsYXRmb3JtVG9vbHNldFZlcnNpb24p LSQoQ29uZmlndXJhdGlvbik8L1RhcmdldE5hbWU+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFBy b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlfHg2NCciPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENv bmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1 cmF0aW9uKVw8L0ludERpcj4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBD b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGlj fHg2NCciPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3Vy YXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9u KVw8L0ludERpcj4KLSAgICA8VGFyZ2V0TmFtZT4kKFByb2plY3ROYW1lKS12YyQoUGxhdGZvcm1U b29sc2V0VmVyc2lvbiktJChDb25maWd1cmF0aW9uKTwvVGFyZ2V0TmFtZT4KLSAgPC9Qcm9wZXJ0 eUdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAg IDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8 V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPE9wdGltaXphdGlvbj5E aXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9S RUVOVFJBTlQ7X1dJTkRMTDtETExFWFBPUlQ7SkVNQUxMT0NfREVCVUc7X0RFQlVHOyUoUHJlcHJv Y2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxBZGRp dGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5c aW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRp dGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdz PjQwOTA7NDE0Njs0MjY3OzQzMzQ8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgotICAgICAgPFBy b2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0cHV0UGF0aCkkKFRhcmdldE5hbWUpLnBkYjwvUHJv Z3JhbURhdGFCYXNlRmlsZU5hbWU+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAg ICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5m b3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgIDwvTGluaz4KLSAg PC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249 IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciPgot ICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNv bXBpbGVkSGVhZGVyPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4K LSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxQcmVw cm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19ERUJVRztfUkVFTlRSQU5UO0pFTUFMTE9DX0VY UE9SVD07X0RFQlVHO19MSUI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3Nv ckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5c Li5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25h bEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAg ICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAg ICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDkwOzQxNDY7NDI2Nzs0MzM0PC9EaXNhYmxl U3BlY2lmaWNXYXJuaW5ncz4KLSAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dHB1 dFBhdGgpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhQmFzZUZpbGVOYW1lPgotICAgIDwv Q2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5XaW5kb3dzPC9TdWJTeXN0 ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJ bmZvcm1hdGlvbj4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0 ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt KSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVkSGVh ZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2 ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6 YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+SkVNQUxMT0NfTk9fUFJJVkFU RV9OQU1FU1BBQ0U7X1JFRU5UUkFOVDtfV0lORExMO0RMTEVYUE9SVDtKRU1BTExPQ19ERUJVRztf REVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25z PgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVk ZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJl Y3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8RGlzYWJsZVNw ZWNpZmljV2FybmluZ3M+NDA5MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2Fybmlu Z3M+Ci0gICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFyZ2V0 TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4KLSAgICA8L0NsQ29tcGlsZT4KLSAg ICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPEdl bmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0g ICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdy b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3Rh dGljfHg2NCciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Ci0g ICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dh cm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4K LSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19OT19QUklWQVRFX05BTUVT UEFDRTtKRU1BTExPQ19ERUJVRztfUkVFTlRSQU5UO0pFTUFMTE9DX0VYUE9SVD07X0RFQlVHO19M SUI7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgot ICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5caW5jbHVkZTsu LlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rv cmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgICA8UnVudGltZUxpYnJh cnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxEaXNhYmxlU3Bl Y2lmaWNXYXJuaW5ncz40MDkwOzQxNDY7NDI2Nzs0MzM0PC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5n cz4KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pk9sZFN0eWxlPC9EZWJ1Z0luZm9ybWF0 aW9uRm9ybWF0PgotICAgICAgPE1pbmltYWxSZWJ1aWxkPmZhbHNlPC9NaW5pbWFsUmVidWlsZD4K LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwv U3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0 ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+ Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ bGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2Fy bmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVy PgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3Bl ZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5j dGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmlu c2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9SRUVOVFJBTlQ7 X1dJTkRMTDtETExFWFBPUlQ7TkRFQlVHOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVw cm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz Pi4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFk ZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVz PgotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwOTA7NDE0Njs0MjY3OzQzMzQ8L0Rp c2FibGVTcGVjaWZpY1dhcm5pbmdzPgotICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQo T3V0cHV0UGF0aCkkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+Ci0g ICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1 YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVE ZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxl Q09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVS ZWZlcmVuY2VzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRl bURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J1JlbGVhc2Utc3RhdGljfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJu aW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+ Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVl ZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0 aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5z aWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X1JFRU5UUkFOVDtK RU1BTExPQ19FWFBPUlQ9O05ERUJVRztfTElCOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9Q cmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y aWVzPi4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDsl KEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9y aWVzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5 PgotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwOTA7NDE0Njs0MjY3OzQzMzQ8L0Rp c2FibGVTcGVjaWZpY1dhcm5pbmdzPgotICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQo T3V0cHV0UGF0aCkkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+Ci0g ICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1 YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVE ZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxl Q09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVS ZWZlcmVuY2VzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRl bURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+ TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8 L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1p emF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxM aW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlv bnM+Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlxpbmNs dWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURp cmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICAgIDxQcmVwcm9j ZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19OT19QUklWQVRFX05BTUVTUEFDRTtfUkVFTlRSQU5U O19XSU5ETEw7RExMRVhQT1JUO05ERUJVRzslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJl cHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDA5 MDs0MTQ2OzQyNjc7NDMzNDwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+Ci0gICAgICA8UHJvZ3Jh bURhdGFCYXNlRmlsZU5hbWU+JChPdXRwdXRQYXRoKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFt RGF0YUJhc2VGaWxlTmFtZT4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxT dWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1h dGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxlQ09NREFU Rm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJl bmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZp bml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmln dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZS1zdGF0aWN8eDY0JyI+Ci0gICAgPENsQ29t cGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8 UHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9w dGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxM aW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0 aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5p dGlvbnM+SkVNQUxMT0NfTk9fUFJJVkFURV9OQU1FU1BBQ0U7X1JFRU5UUkFOVDtKRU1BTExPQ19F WFBPUlQ9O05ERUJVRztfTElCOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNz b3JEZWZpbml0aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4u XC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9u YWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAg ICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAg PERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwOTA7NDE0Njs0MjY3OzQzMzQ8L0Rpc2FibGVTcGVj aWZpY1dhcm5pbmdzPgotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+T2xkU3R5bGU8L0Rl YnVnSW5mb3JtYXRpb25Gb3JtYXQ+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAg ICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5m b3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNP TURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJl ZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgotICAgIDwvTGluaz4KLSAgPC9JdGVt RGVmaW5pdGlvbkdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWlj cm9zb2Z0LkNwcC50YXJnZXRzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRh cmdldHMiPgotICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy9qZW1hbGxvYy9qZW1hbGxvYy52Y3hwcm9qLmZpbHRl cnMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3Rz L3ZjMjAxNy9qZW1hbGxvYy9qZW1hbGxvYy52Y3hwcm9qLmZpbHRlcnMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDFiNDNlOWYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIwMTcvamVtYWxsb2MvamVtYWxs b2MudmN4cHJvai5maWx0ZXJzCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLe+7vzw/ eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNp b249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21z YnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2Ug RmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2 LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgICA8RXh0ZW5zaW9ucz5jcHA7 YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KLSAgICA8 L0ZpbHRlcj4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYXJlbmEuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBG aWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i Li5cLi5cLi5cLi5cc3JjXGJhY2tncm91bmRfdGhyZWFkLmMiPgotICAgICAgPEZpbHRlcj5Tb3Vy Y2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1 ZGU9Ii4uXC4uXC4uXC4uXHNyY1xiYXNlLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xiaW4uYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgot ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XGJpdG1hcC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9D bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcYnVmX3dy aXRlci5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENv bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcY2FjaGVfYmlu LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xja2guYyI+Ci0gICAg ICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD bENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGNvdW50ZXIuYyI+Ci0gICAgICA8Rmls dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGN0bC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNl IEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl PSIuLlwuLlwuLlwuLlxzcmNcZGVjYXkuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXGRpdi5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0g ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc ZW1hcC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENv bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXhwX2dyb3cu YyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGV4dGVudC5jIj4KLSAg ICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg PENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXh0ZW50X2Rzcy5jIj4KLSAgICAg IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXh0ZW50X21tYXAuYyI+Ci0gICAgICA8 RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGZ4cC5jIj4KLSAgICAgIDxGaWx0ZXI+U291 cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcaG9vay5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVz PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwu LlwuLlwuLlxzcmNcaHBhLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNy Y1xocGFfaG9va3MuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAg IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGhw ZGF0YS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENv bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcaW5zcGVjdC5j Ij4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+ Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcamVtYWxsb2MuYyI+Ci0g ICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGxhcmdlLmMiPgotICAgICAgPEZp bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xsb2cuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJj ZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk ZT0iLi5cLi5cLi5cLi5cc3JjXG1hbGxvY19pby5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZp bGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu LlwuLlwuLlwuLlxzcmNcbXV0ZXguYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmls dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5c Li5cc3JjXG5zdGltZS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0g ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc cGEuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21w aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhX2V4dHJhLmMi PgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwYWkuYyI+Ci0gICAgICA8 RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHBhYy5jIj4KLSAgICAgIDxGaWx0ZXI+U291 cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNccGFnZXMuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxl czwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c Li5cLi5cLi5cc3JjXHBlYWtfZXZlbnQuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwv RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5c Li5cLi5cc3JjXHByb2YuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgot ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHByb2ZfZGF0YS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAg PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHJv Zl9sb2cuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xD b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHByb2ZfcmVj ZW50LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29t cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX3N0YXRz LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xwcm9mX3N5cy5jIj4K LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNccHNzZXQuYyI+Ci0gICAgICA8 RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv bXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHJ0cmVlLmMiPgotICAgICAgPEZpbHRlcj5T b3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu Y2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzYWZldHlfY2hlY2suYyI+Ci0gICAgICA8RmlsdGVyPlNv dXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j bHVkZT0iLi5cLi5cLi5cLi5cc3JjXHNjLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1xzZWMuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgot ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3Jj XHN0YXRzLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0Ns Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xzei5jIj4K LSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcdGNhY2hlLmMiPgotICAgICAg PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD b21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0ZXN0X2hvb2tzLmMiPgotICAgICAgPEZp bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w aWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1x0aHJlYWRfZXZlbnQuYyI+Ci0gICAgICA8Rmls dGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp bGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXHRpY2tlci5jIj4KLSAgICAgIDxGaWx0ZXI+U291 cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs dWRlPSIuLlwuLlwuLlwuLlxzcmNcdHNkLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8 L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u XC4uXC4uXHNyY1x3aXRuZXNzLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRl cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4u XHNyY1xiaW5faW5mby5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0g ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNc ZWNhY2hlLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0Ns Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXC4uXHNyY1xlZGF0YS5j Ij4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+ Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZWRhdGFfY2FjaGUuYyI+ Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5cc3JjXGVob29rcy5jIj4KLSAgICAg IDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs Q29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcZXNldC5jIj4KLSAgICAgIDxGaWx0ZXI+ U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ bmNsdWRlPSIuLlwuLlwuLlwuLlxzcmNcc2FuLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls ZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u XC4uXC4uXC4uXHNyY1xzYW5fYnVtcC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9G aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy90ZXN0X3RocmVhZHMvdGVz dF90aHJlYWRzLnZjeHByb2ogYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLnZjeHByb2oK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNWIwZjUuLjAwMDAwMDAKLS0tIGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvbXN2Yy9wcm9qZWN0cy92YzIwMTcv dGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkcy52Y3hwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzI2 ICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJv amVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTUuMCIgeG1sbnM9Imh0 dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJ dGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+Ci0gICAgPFByb2plY3RDb25m aWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnLXN0YXRpY3xXaW4zMiI+Ci0gICAgICA8Q29uZmlndXJh dGlvbj5EZWJ1Zy1zdGF0aWM8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8 L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25m aWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnLXN0YXRpY3x4NjQiPgotICAgICAgPENvbmZpZ3VyYXRp b24+RGVidWctc3RhdGljPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwvUGxh dGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3Vy YXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8 L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwv UHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9 IlJlbGVhc2Utc3RhdGljfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2Utc3Rh dGljPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KLSAg ICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs dWRlPSJSZWxlYXNlLXN0YXRpY3x4NjQiPgotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZS1z dGF0aWM8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAg ICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs dWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZp Z3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVj dENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVn fHg2NCI+Ci0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KLSAgICAg IDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0g ICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KLSAgICAgIDxD b25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0 PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICA8L0l0ZW1Hcm91cD4K LSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57MDkw MjhDRkQtNEVCNy00OTFELTg2OUMtMDcwOERCOTdFRDQ0fTwvUHJvamVjdEd1aWQ+Ci0gICAgPEtl eXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgotICAgIDxSb290TmFtZXNwYWNlPnRlc3RfdGhyZWFk czwvUm9vdE5hbWVzcGFjZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9 IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJv cGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl YnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlw ZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVz PnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxh dGZvcm1Ub29sc2V0PgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+ Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25m aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8V2luMzInIiBMYWJlbD0iQ29u ZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1 cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJp ZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9ybVRvb2xzZXQ+Ci0gICAgPENo YXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgot ICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3Vy YXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdM aWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+ djE0MTwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1 ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRl PC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29u ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3xX aW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBw bGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxz ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTQxPC9QbGF0Zm9y bVRvb2xzZXQ+Ci0gICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dy YW1PcHRpbWl6YXRpb24+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNl dD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENv bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0 aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25U eXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAg ICA8UGxhdGZvcm1Ub29sc2V0PnYxNDE8L1BsYXRmb3JtVG9vbHNldD4KLSAgICA8Q2hhcmFjdGVy U2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9w ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi dWctc3RhdGljfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlv blR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJh cmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDE8 L1BsYXRmb3JtVG9vbHNldD4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVy U2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQo Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iQ29uZmln dXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0 aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVz PgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxXaG9s ZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAg IDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91 cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm b3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAg PENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8 VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxQbGF0Zm9y bVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0PgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6 YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+ TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQ cm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+Ci0gIDxJbXBv cnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgotICA8L0ltcG9ydEdyb3VwPgotICA8 SW1wb3J0R3JvdXAgTGFiZWw9IlNoYXJlZCI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRH cm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8 JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNl clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9u PSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5w cm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+ Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p Jz09J0RlYnVnLXN0YXRpY3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPElt cG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz ZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAv PgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRz IiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2lu MzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAu JChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIp XE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBE YXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRp b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfFdpbjMy JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJv b3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJl eGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9w cycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0g IDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmln dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0 PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENv bmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p LnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9y dEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs YXRmb3JtKSc9PSdEZWJ1Zy1zdGF0aWN8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAg ICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y bSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29m dC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZv cm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlT aGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz ZXx4NjQnIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5D cHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3RE aXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxB cHBEYXRhUGxhdGZvcm0iIC8+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25k aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Utc3RhdGljfHg2 NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJS b290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0i ZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv cHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgot ICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAg Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMici PgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24p XDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0lu dERpcj4KLSAgICA8TGlua0luY3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KLSAgPC9Q cm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnLXN0YXRpY3xXaW4zMiciPgotICAgIDxPdXREaXI+JChT b2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICAgIDxJ bnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KLSAgICA8TGlua0lu Y3JlbWVudGFsPnRydWU8L0xpbmtJbmNyZW1lbnRhbD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8 UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09 J0RlYnVnfHg2NCciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFs PgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24p XDwvT3V0RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlv bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciPgot ICAgIDxMaW5rSW5jcmVtZW50YWw+dHJ1ZTwvTGlua0luY3JlbWVudGFsPgotICAgIDxPdXREaXI+ JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICA8 L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxPdXREaXI+JChTb2x1 dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnRE aXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KLSAgICA8TGlua0luY3Jl bWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFBy b3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS ZWxlYXNlLXN0YXRpY3xXaW4zMiciPgotICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRm b3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlc JChDb25maWd1cmF0aW9uKVw8L0ludERpcj4KLSAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9M aW5rSW5jcmVtZW50YWw+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29u ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPgot ICAgIDxPdXREaXI+JChTb2x1dGlvbkRpcikkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwv T3V0RGlyPgotICAgIDxJbnREaXI+JChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERp cj4KLSAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+Ci0gIDwvUHJv cGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u KXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIj4KLSAgICA8T3V0RGlyPiQoU29s dXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KLSAgICA8SW50 RGlyPiQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+Ci0gICAgPExpbmtJbmNy ZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJ dGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y bSknPT0nRGVidWd8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVk SGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+ TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRp bWl6YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19D T05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9u cz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXHRlc3Rc aW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21w YXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJl Y3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+ Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVl PC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJl Y3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8L0FkZGl0 aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5q ZW1hbGxvY2QubGliO2tlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5s aWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0 MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVu ZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1E ZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29u ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWctc3RhdGljfFdpbjMyJyI+Ci0gICAgPENs Q29tcGlsZT4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRI ZWFkZXI+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAg PE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPFByZXByb2Nlc3Nv ckRlZmluaXRpb25zPkpFTUFMTE9DX0VYUE9SVD07SkVNQUxMT0NfU1RBVElDO19ERUJVRztfQ09O U09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+ Ci0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlx0ZXN0XGlu Y2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0 OyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0 b3JpZXM+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1l TGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+ Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVl PC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJl Y3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8L0FkZGl0 aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5q ZW1hbGxvYy0kKFBsYXRmb3JtVG9vbHNldCktJChDb25maWd1cmF0aW9uKS5saWI7a2VybmVsMzIu bGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBp MzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMy LmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERl cGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0 ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt KSc9PSdEZWJ1Z3x4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVkSGVh ZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2 ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6 YXRpb24+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyUoUHJlcHJvY2Vz c29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxBZGRpdGlv bmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXHRlc3RcaW5jbHVkZTsuLlwuLlwuLlwu LlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19jb21wYXQ7JShBZGRpdGlvbmFsSW5j bHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4KLSAgICA8L0Ns Q29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVt PgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5m b3JtYXRpb24+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5qZW1hbGxvY2QubGliO2tl cm5lbDMyLmxpYjt1c2VyMzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGli O2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGli O29kYmMzMi5saWI7b2RiY2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0 aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4k KFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8L0FkZGl0aW9uYWxMaWJy YXJ5RGlyZWN0b3JpZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0g IDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0 Zm9ybSknPT0nRGVidWctc3RhdGljfHg2NCciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJl Y29tcGlsZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPFdhcm5p bmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJs ZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExP Q19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztfREVCVUc7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9u cyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGly ZWN0b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGU7Li5c Li5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp ZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5 Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+Ci0g ICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxH ZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgot ICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MtdmMkKFBsYXRmb3JtVG9vbHNl dFZlcnNpb24pLSQoQ29uZmlndXJhdGlvbikubGliO2tlcm5lbDMyLmxpYjt1c2VyMzIubGliO2dk aTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtzaGVsbDMyLmxp YjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2RiY2NwMzIubGli OyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+Ci0gICAg ICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0p XCQoQ29uZmlndXJhdGlvbik8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgPC9M aW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENv bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici PgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xl dmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRl cj4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxG dW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICAgIDxJ bnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXBy b2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRl ZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8QWRkaXRpb25hbElu Y2x1ZGVEaXJlY3Rvcmllcz4uLlwuLlwuLlwuLlx0ZXN0XGluY2x1ZGU7Li5cLi5cLi5cLi5caW5j bHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlXG1zdmNfY29tcGF0OyUoQWRkaXRpb25hbEluY2x1ZGVE aXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Ci0gICAgPC9DbENvbXBp bGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAg ICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0 aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGlu Zz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgot ICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChTb2x1dGlvbkRpcikkKFBsYXRm b3JtKVwkKENvbmZpZ3VyYXRpb24pPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPgotICAg ICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+amVtYWxsb2MubGliO2tlcm5lbDMyLmxpYjt1c2Vy MzIubGliO2dkaTMyLmxpYjt3aW5zcG9vbC5saWI7Y29tZGxnMzIubGliO2FkdmFwaTMyLmxpYjtz aGVsbDMyLmxpYjtvbGUzMi5saWI7b2xlYXV0MzIubGliO3V1aWQubGliO29kYmMzMi5saWI7b2Ri Y2NwMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNp ZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5p dGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs ZWFzZS1zdGF0aWN8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFdhcm5pbmdMZXZl bD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAg IDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRp bWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZl bExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0 aW9ucz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5KRU1BTExPQ19FWFBPUlQ9O0pF TUFMTE9DX1NUQVRJQztOREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8 L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0 b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5c Li5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMp PC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11 bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5r PgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVE ZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxF bmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0 aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICAgIDxBZGRpdGlv bmFsTGlicmFyeURpcmVjdG9yaWVzPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybSlcJChDb25maWd1 cmF0aW9uKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4KLSAgICAgIDxBZGRpdGlvbmFs RGVwZW5kZW5jaWVzPmplbWFsbG9jLSQoUGxhdGZvcm1Ub29sc2V0KS0kKENvbmZpZ3VyYXRpb24p LmxpYjtrZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRs ZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1 dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMp PC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlv bkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAg IDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8UHJlY29tcGlsZWRI ZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9wdGltaXphdGlvbj5N YXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8 L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9J bnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVH O19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0 aW9ucz4KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPi4uXC4uXC4uXC4uXHRl c3RcaW5jbHVkZTsuLlwuLlwuLlwuLlxpbmNsdWRlOy4uXC4uXC4uXC4uXGluY2x1ZGVcbXN2Y19j b21wYXQ7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVE aXJlY3Rvcmllcz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0 ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50 cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxlQ09NREFURm9sZGlu Zz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50 cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rv cmllcz4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbik8L0FkZGl0aW9u YWxMaWJyYXJ5RGlyZWN0b3JpZXM+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz5qZW1h bGxvYy5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtj b21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5s aWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5j aWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmlu aXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1 cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlLXN0YXRpY3x4NjQnIj4KLSAgICA8Q2xDb21w aWxlPgotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KLSAgICAgIDxQ cmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgICA8T3B0 aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExp bmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rp b25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0 aW9ucz5KRU1BTExPQ19FWFBPUlQ9O0pFTUFMTE9DX1NUQVRJQztOREVCVUc7X0NPTlNPTEU7JShQ cmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAg PEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+Li5cLi5cLi5cLi5cdGVzdFxpbmNsdWRlOy4u XC4uXC4uXC4uXGluY2x1ZGU7Li5cLi5cLi5cLi5caW5jbHVkZVxtc3ZjX2NvbXBhdDslKEFkZGl0 aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPgot ICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAg IDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJT eXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVi dWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNP TURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVm ZXJlbmNlcz4KLSAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoU29sdXRpb25E aXIpJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rv cmllcz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPmplbWFsbG9jLXZjJChQbGF0Zm9y bVRvb2xzZXRWZXJzaW9uKS0kKENvbmZpZ3VyYXRpb24pLmxpYjtrZXJuZWwzMi5saWI7dXNlcjMy LmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hl bGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNj cDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVz PgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwPgot ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJlYWRzXHRlc3RfdGhyZWFk cy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx0ZXN0X3RocmVhZHNc dGVzdF90aHJlYWRzX21haW4uY3BwIiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4K LSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSIuLlxqZW1hbGxvY1xqZW1hbGxvYy52Y3hw cm9qIj4KLSAgICAgIDxQcm9qZWN0Pns4ZDZiYjI5Mi05ZTFjLTQxM2QtOWY5OC00ODY0YmRjMTUx NGF9PC9Qcm9qZWN0PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgPC9JdGVtR3JvdXA+Ci0g IDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlx0ZXN0X3RocmVh ZHNcdGVzdF90aHJlYWRzLmgiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9 IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgotICA8SW1wb3J0R3Jv dXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgotICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0 PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Byb2plY3RzL3ZjMjAxNy90ZXN0X3RocmVh ZHMvdGVzdF90aHJlYWRzLnZjeHByb2ouZmlsdGVycyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL21zdmMvcHJvamVjdHMvdmMyMDE3L3Rlc3RfdGhyZWFkcy90ZXN0X3Ro cmVhZHMudmN4cHJvai5maWx0ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTQ1 ODhmLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L21zdmMvcHJvamVjdHMvdmMyMDE3L3Rlc3RfdGhyZWFkcy90ZXN0X3RocmVhZHMudmN4cHJvai5m aWx0ZXJzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAot77u/PD94bWwgdmVyc2lvbj0i MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxu cz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4K LSAgPEl0ZW1Hcm91cD4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAg ICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZG fTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7 b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgotICAgIDwvRmlsdGVyPgotICAg IDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVy Pns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVy PgotICAgICAgPEV4dGVuc2lvbnM+aDtoaDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNp b25zPgotICAgIDwvRmlsdGVyPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8 Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHRlc3RfdGhyZWFkc1x0ZXN0X3RocmVhZHMuY3Bw Ij4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+ Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlx0ZXN0X3RocmVhZHNcdGVzdF90aHJl YWRzX21haW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAg PC9DbENvbXBpbGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1 ZGUgSW5jbHVkZT0iLi5cLi5cLi5cdGVzdF90aHJlYWRzXHRlc3RfdGhyZWFkcy5oIj4KLSAgICAg IDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gIDwvSXRl bUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Rlc3RfdGhy ZWFkcy90ZXN0X3RocmVhZHMuY3BwIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvbXN2Yy90ZXN0X3RocmVhZHMvdGVzdF90aHJlYWRzLmNwcApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNmVlZDAyOC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9tc3ZjL3Rlc3RfdGhyZWFkcy90ZXN0X3RocmVhZHMuY3BwCisr KyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLy8gamVtYWxsb2MgQysrIHRocmVhZGVkIHRl c3QKLS8vIEF1dGhvcjogUnVzdGFtIEFiZHVsbGFldgotLy8gUHVibGljIERvbWFpbgotCi0jaW5j bHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8ZnV0dXJlPgot I2luY2x1ZGUgPHJhbmRvbT4KLSNpbmNsdWRlIDx0aHJlYWQ+Ci0jaW5jbHVkZSA8dmVjdG9yPgot I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIEpFTUFMTE9DX05PX0RFTUFOR0xFCi0jaW5jbHVk ZSA8amVtYWxsb2MvamVtYWxsb2MuaD4KLQotdXNpbmcgc3RkOjp2ZWN0b3I7Ci11c2luZyBzdGQ6 OnRocmVhZDsKLXVzaW5nIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uOwotdXNpbmcgc3Rk OjptaW5zdGRfcmFuZDsKLQotaW50IHRlc3RfdGhyZWFkcygpIHsKLSAgamVfbWFsbG9jX2NvbmYg PSAibmFyZW5hczozIjsKLSAgaW50IG5hcmVuYXMgPSAwOwotICBzaXplX3Qgc3ogPSBzaXplb2Yo bmFyZW5hcyk7Ci0gIGplX21hbGxjdGwoIm9wdC5uYXJlbmFzIiwgKHZvaWQgKikmbmFyZW5hcywg JnN6LCBOVUxMLCAwKTsKLSAgaWYgKG5hcmVuYXMgIT0gMykgewotICAgIHByaW50ZigiRXJyb3I6 IHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZW5hczogJWRcbiIsIG5hcmVuYXMpOwotICAgIHJldHVy biAxOwotICB9Ci0gIHN0YXRpYyBjb25zdCBpbnQgc2l6ZXNbXSA9IHsgNywgMTYsIDMyLCA2MCwg OTEsIDEwMCwgMTIwLCAxNDQsIDE2OSwgMTk5LCAyNTUsIDQwMCwgNjcwLCA5MDAsIDkxNywgMTAy NSwgMzMzMywgNTE5MCwgMTMxMzEsIDQ5MTkyLCA5OTk5OSwgMTIzMTIzLCAyNTUyNjUsIDIzMzMx MTEgfTsKLSAgc3RhdGljIGNvbnN0IGludCBudW1TaXplcyA9IChpbnQpKHNpemVvZihzaXplcykg LyBzaXplb2Yoc2l6ZXNbMF0pKTsKLSAgdmVjdG9yPHRocmVhZD4gd29ya2VyczsKLSAgc3RhdGlj IGNvbnN0IGludCBudW1UaHJlYWRzID0gbmFyZW5hcyArIDEsIG51bUFsbG9jc01heCA9IDI1LCBu dW1JdGVyMSA9IDUwLCBudW1JdGVyMiA9IDUwOwotICBqZV9tYWxsb2Nfc3RhdHNfcHJpbnQoTlVM TCwgTlVMTCwgTlVMTCk7Ci0gIHNpemVfdCBhbGxvY2F0ZWQxOwotICBzaXplX3Qgc3oxID0gc2l6 ZW9mKGFsbG9jYXRlZDEpOwotICBqZV9tYWxsY3RsKCJzdGF0cy5hY3RpdmUiLCAodm9pZCAqKSZh bGxvY2F0ZWQxLCAmc3oxLCBOVUxMLCAwKTsKLSAgcHJpbnRmKCJcblByZXNzIEVudGVyIHRvIHN0 YXJ0IHRocmVhZHMuLi5cbiIpOwotICBnZXRjaGFyKCk7Ci0gIHByaW50ZigiU3RhcnRpbmcgJWQg dGhyZWFkcyB4ICVkIHggJWQgaXRlcmF0aW9ucy4uLlxuIiwgbnVtVGhyZWFkcywgbnVtSXRlcjEs IG51bUl0ZXIyKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1UaHJlYWRzOyBpKyspIHsKLSAg ICB3b3JrZXJzLmVtcGxhY2VfYmFjayhbdGlkPWldKCkgewotICAgICAgdW5pZm9ybV9pbnRfZGlz dHJpYnV0aW9uPGludD4gc2l6ZURpc3QoMCwgbnVtU2l6ZXMgLSAxKTsKLSAgICAgIG1pbnN0ZF9y YW5kIHJuZCh0aWQgKiAxNyk7Ci0gICAgICB1aW50OF90KiBwdHJzW251bUFsbG9jc01heF07Ci0g ICAgICBpbnQgcHRyc3pbbnVtQWxsb2NzTWF4XTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bnVtSXRlcjE7ICsraSkgewotICAgICAgICB0aHJlYWQgdChbJl0oKSB7Ci0gICAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBudW1JdGVyMjsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBpbnQg bnVtQWxsb2NzID0gbnVtQWxsb2NzTWF4IC0gc2l6ZURpc3Qocm5kKTsKLSAgICAgICAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgbnVtQWxsb2NzOyBqICs9IDY0KSB7Ci0gICAgICAgICAgICAgIGNv bnN0IGludCB4ID0gc2l6ZURpc3Qocm5kKTsKLSAgICAgICAgICAgICAgY29uc3QgaW50IHN6ID0g c2l6ZXNbeF07Ci0gICAgICAgICAgICAgIHB0cnN6W2pdID0gc3o7Ci0gICAgICAgICAgICAgIHB0 cnNbal0gPSAodWludDhfdCopamVfbWFsbG9jKHN6KTsKLSAgICAgICAgICAgICAgaWYgKCFwdHJz W2pdKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0 ZXMgaW4gdGhyZWFkICVkLCBpdGVyICVkLCBhbGxvYyAlZC4gJWRcbiIsIHN6LCB0aWQsIGksIGos IHgpOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzejsgaysrKQotICAgICAgICAgICAgICAgIHB0cnNb al1ba10gPSB0aWQgKyBrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBudW1BbGxvY3M7IGogKz0gNjQpIHsKLSAgICAgICAgICAgICAgZm9yIChpbnQgayA9 IDAsIHN6ID0gcHRyc3pbal07IGsgPCBzejsgaysrKQotICAgICAgICAgICAgICAgIGlmIChwdHJz W2pdW2tdICE9ICh1aW50OF90KSh0aWQgKyBrKSkgewotICAgICAgICAgICAgICAgICAgcHJpbnRm KCJNZW1vcnkgZXJyb3IgaW4gdGhyZWFkICVkLCBpdGVyICVkLCBhbGxvYyAlZCBAICVkIDogJTAy WCE9JTAyWFxuIiwgdGlkLCBpLCBqLCBrLCBwdHJzW2pdW2tdLCAodWludDhfdCkodGlkICsgaykp OwotICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgIGplX2ZyZWUocHRyc1tqXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAg ICAgICB9KTsKLSAgICAgICAgdC5qb2luKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLSAgZm9y ICh0aHJlYWQmIHQgOiB3b3JrZXJzKSB7Ci0gICAgdC5qb2luKCk7Ci0gIH0KLSAgamVfbWFsbG9j X3N0YXRzX3ByaW50KE5VTEwsIE5VTEwsIE5VTEwpOwotICBzaXplX3QgYWxsb2NhdGVkMjsKLSAg amVfbWFsbGN0bCgic3RhdHMuYWN0aXZlIiwgKHZvaWQgKikmYWxsb2NhdGVkMiwgJnN6MSwgTlVM TCwgMCk7Ci0gIHNpemVfdCBsZWFrZWQgPSBhbGxvY2F0ZWQyIC0gYWxsb2NhdGVkMTsKLSAgcHJp bnRmKCJcbkRvbmUuIExlYWtlZDogJXpkIGJ5dGVzXG4iLCBsZWFrZWQpOwotICBib29sIGZhaWxl ZCA9IGxlYWtlZCA+IDY1NTM2OyAvLyBpbiBjYXNlIEMrKyBydW50aW1lIGFsbG9jYXRlZCBzb21l dGhpbmcgKGUuZy4gaW9zdHJlYW0gbG9jYWxlIG9yIGZhY2V0KQotICBwcmludGYoIlxuVGVzdCAl cyFcbiIsIChmYWlsZWQgPyAiRkFJTEVEIiA6ICJzdWNjZXNzZnVsIikpOwotICBwcmludGYoIlxu UHJlc3MgRW50ZXIgdG8gY29udGludWUuLi5cbiIpOwotICBnZXRjaGFyKCk7Ci0gIHJldHVybiBm YWlsZWQgPyAxIDogMDsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9tc3ZjL3Rlc3RfdGhyZWFkcy90ZXN0X3RocmVhZHMuaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvdGVzdF90aHJlYWRzL3Rlc3RfdGhy ZWFkcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGQwY2RiLi4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvdGVzdF90aHJl YWRzL3Rlc3RfdGhyZWFkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jcHJhZ21h IG9uY2UKLQotaW50IHRlc3RfdGhyZWFkcygpOwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvdGVzdF90aHJlYWRzL3Rlc3RfdGhyZWFkc19t YWluLmNwcCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL21zdmMvdGVz dF90aHJlYWRzL3Rlc3RfdGhyZWFkc19tYWluLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMGEwMjJmYi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9tc3ZjL3Rlc3RfdGhyZWFkcy90ZXN0X3RocmVhZHNfbWFpbi5jcHAKKysrIC9k ZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jaW5jbHVkZSAidGVzdF90aHJlYWRzLmgiCi0jaW5j bHVkZSA8ZnV0dXJlPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8Y2hyb25vPgot Ci11c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm9fbGl0ZXJhbHM7Ci0KLWludCBtYWluKGludCBh cmdjLCBjaGFyKiogYXJndikgewotICBpbnQgcmMgPSB0ZXN0X3RocmVhZHMoKTsKLSAgcmV0dXJu IHJjOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3J1bl90ZXN0cy5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3J1bl90ZXN0cy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjQzNGYxNS4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9ydW5fdGVz dHMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0kKGRpcm5hbWUgIiQpIikvc2NyaXB0 cy9nZW5fcnVuX3Rlc3RzLnB5IHwgYmFzaAoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvY2hlY2stZm9ybWF0dGluZy5zaCBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvY2hlY2stZm9ybWF0dGlu Zy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjhjYWZkOC4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2NoZWNrLWZv cm1hdHRpbmcuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vYmFzaAot Ci0jIFRoZSBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgcHJvcGVybHkgZm9ybWF0dGVkLiAgV2UnbGwg Z3JvdyB0aGlzIGluY3JlbWVudGFsbHkKLSMgdW50aWwgaXQgaW5jbHVkZXMgYWxsIHRoZSBqZW1h bGxvYyBzb3VyY2UgZmlsZXMgKGFzIHdlIGNvbnZlcnQgdGhpbmdzIG92ZXIpLAotIyBhbmQgdGhl biBqdXN0IHJlcGxhY2UgaXQgd2l0aAotIyAgICBmaW5kIC1uYW1lICcqLmMnIC1vIC1uYW1lICcq LmgnIC1vIC1uYW1lICcqLmNwcAotRklMRVM9KAotKQotCi1pZiBjb21tYW5kIC12IGNsYW5nLWZv cm1hdCAmPiAvZGV2L251bGw7IHRoZW4KLSAgQ0xBTkdfRk9STUFUPSJjbGFuZy1mb3JtYXQiCi1l bGlmIGNvbW1hbmQgLXYgY2xhbmctZm9ybWF0LTggJj4gL2Rldi9udWxsOyB0aGVuCi0gIENMQU5H X0ZPUk1BVD0iY2xhbmctZm9ybWF0LTgiCi1lbHNlCi0gIGVjaG8gIkNvdWxkbid0IGZpbmQgY2xh bmctZm9ybWF0LiIKLWZpCi0KLWlmICEgJENMQU5HX0ZPUk1BVCAtdmVyc2lvbiB8IGdyZXAgInZl cnNpb24gOFwuIiAmPiAvZGV2L251bGw7IHRoZW4KLSAgZWNobyAiY2xhbmctZm9ybWF0IGlzIHRo ZSB3cm9uZyB2ZXJzaW9uLiIKLSAgZXhpdCAxCi1maQotCi1mb3IgZmlsZSBpbiAke0ZJTEVTW0Bd fTsgZG8KLSAgaWYgISBjbXAgLS1zaWxlbnQgJGZpbGUgPCgkQ0xBTkdfRk9STUFUICRmaWxlKSAm PiAvZGV2L251bGw7IHRoZW4KLSAgICBlY2hvICJFcnJvcjogJGZpbGUgaXMgbm90IGNsYW5nLWZv cm1hdHRlZCIKLSAgICBleGl0IDEKLSAgZmkKLWRvbmUKCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2QvYmVmb3JlX2luc3Rh bGwuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2Zy ZWVic2QvYmVmb3JlX2luc3RhbGwuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYy YmVlMzIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc2NyaXB0cy9mcmVlYnNkL2JlZm9yZV9pbnN0YWxsLnNoCisrKyAvZGV2L251bGwKQEAgLTEs MyArMCwwIEBACi0jIS9iaW4vdGNzaAotCi1zdSAtbSByb290IC1jICdwa2cgaW5zdGFsbCAteSBn aXQnCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c2NyaXB0cy9mcmVlYnNkL2JlZm9yZV9zY3JpcHQuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2QvYmVmb3JlX3NjcmlwdC5zaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk0MDZmNi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2ZyZWVic2QvYmVmb3JlX3Njcmlw dC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMhL2Jpbi90Y3NoCi0KLWF1dG9j b25mCi0jIFdlIGRvbid0IHBlcmZlY3RseSB0cmFjayBmcmVlYnNkIHN0ZGxpYi5oIGRlZmluaXRp b25zLiAgVGhpcyBpcyBmaW5lIHdoZW4KLSMgd2UgY291bnQgYXMgYSBzeXN0ZW0gaGVhZGVyLCBi dXQgYnJlYWtzIG90aGVyd2lzZSwgbGlrZSBkdXJpbmcgdGhlc2UKLSMgdGVzdHMuCi0uL2NvbmZp Z3VyZSAtLXdpdGgtamVtYWxsb2MtcHJlZml4PWNpXyAke0NPTVBJTEVSX0ZMQUdTOisgQ0M9IiRD QyAkQ09NUElMRVJfRkxBR1MiIENYWD0iJENYWCAkQ09NUElMRVJfRkxBR1MifSAkQ09ORklHVVJF X0ZMQUdTCi1KRV9OQ1BVUz1gc3lzY3RsIC1uIGtlcm4uc21wLmNwdXNgCi1nbWFrZSAtaiR7SkVf TkNQVVN9Ci1nbWFrZSAtaiR7SkVfTkNQVVN9IHRlc3RzCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy9mcmVlYnNkL3NjcmlwdC5zaCBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvZnJlZWJzZC9z Y3JpcHQuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YzUzYTIuLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy9mcmVl YnNkL3NjcmlwdC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyEvYmluL3Rjc2gK LQotZ21ha2UgY2hlY2sKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9zY3JpcHRzL2dlbl9ydW5fdGVzdHMucHkgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2dlbl9ydW5fdGVzdHMucHkKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNzU1CmluZGV4IDdjMzA3NWYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy9nZW5fcnVuX3Rlc3RzLnB5CisrKyAvZGV2 L251bGwKQEAgLTEsMTMwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbjMKLQotaW1wb3J0 IHN5cwotZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNvbWJpbmF0aW9ucwotZnJvbSBvcyBpbXBvcnQg dW5hbWUKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBjcHVfY291bnQKLWZyb20gc3VicHJv Y2VzcyBpbXBvcnQgY2FsbAotCi0jIExhdGVyLCB3ZSB3YW50IHRvIHRlc3QgZXh0ZW5kZWQgdmFk ZHIgc3VwcG9ydC4gIEFwcGFyZW50bHksIHRoZSAicmVhbCIgd2F5IG9mCi0jIGNoZWNraW5nIHRo aXMgaXMgZmxha3kgb24gT1MgWC4KLWJpdHNfNjQgPSBzeXMubWF4c2l6ZSA+IDIqKjMyCi0KLW5w YXJhbGxlbCA9IGNwdV9jb3VudCgpICogMgotCi11bmFtZSA9IHVuYW1lKClbMF0KLQotaWYgY2Fs bCgiY29tbWFuZCAtdiBnbWFrZSIsIHNoZWxsPVRydWUpID09IDA6Ci0gICAgbWFrZV9jbWQgPSAn Z21ha2UnCi1lbHNlOgotICAgIG1ha2VfY21kID0gJ21ha2UnCi0KLWRlZiBwb3dlcnNldChpdGVt cyk6Ci0gICAgcmVzdWx0ID0gW10KLSAgICBmb3IgaSBpbiByYW5nZShsZW4oaXRlbXMpICsgMSk6 Ci0gICAgICAgIHJlc3VsdCArPSBjb21iaW5hdGlvbnMoaXRlbXMsIGkpCi0gICAgcmV0dXJuIHJl c3VsdAotCi1wb3NzaWJsZV9jb21waWxlcnMgPSBbXQotZm9yIGNjLCBjeHggaW4gKFsnZ2NjJywg J2crKyddLCBbJ2NsYW5nJywgJ2NsYW5nKysnXSk6Ci0gICAgdHJ5OgotICAgICAgICBjbWRfcmV0 ID0gY2FsbChbY2MsICItdiJdKQotICAgICAgICBpZiBjbWRfcmV0ID09IDA6Ci0gICAgICAgICAg ICBwb3NzaWJsZV9jb21waWxlcnMuYXBwZW5kKChjYywgY3h4KSkKLSAgICBleGNlcHQ6Ci0gICAg ICAgIHBhc3MKLXBvc3NpYmxlX2NvbXBpbGVyX29wdHMgPSBbCi0gICAgJy1tMzInLAotXQotcG9z c2libGVfY29uZmlnX29wdHMgPSBbCi0gICAgJy0tZW5hYmxlLWRlYnVnJywKLSAgICAnLS1lbmFi bGUtcHJvZicsCi0gICAgJy0tZGlzYWJsZS1zdGF0cycsCi0gICAgJy0tZW5hYmxlLW9wdC1zYWZl dHktY2hlY2tzJywKLSAgICAnLS13aXRoLWxnLXBhZ2U9MTYnLAotXQotaWYgYml0c182NDoKLSAg ICBwb3NzaWJsZV9jb25maWdfb3B0cy5hcHBlbmQoJy0td2l0aC1sZy12YWRkcj01NicpCi0KLXBv c3NpYmxlX21hbGxvY19jb25mX29wdHMgPSBbCi0gICAgJ3RjYWNoZTpmYWxzZScsCi0gICAgJ2Rz czpwcmltYXJ5JywKLSAgICAncGVyY3B1X2FyZW5hOnBlcmNwdScsCi0gICAgJ2JhY2tncm91bmRf dGhyZWFkOnRydWUnLAotXQotCi1wcmludCgnc2V0IC1lJykKLXByaW50KCdpZiBbIC1mIE1ha2Vm aWxlIF0gOyB0aGVuICUobWFrZV9jbWQpcyByZWxjbGVhbiA7IGZpJyAlIHsnbWFrZV9jbWQnOgot ICAgIG1ha2VfY21kfSkKLXByaW50KCdhdXRvY29uZicpCi1wcmludCgncm0gLXJmIHJ1bl90ZXN0 cy5vdXQnKQotcHJpbnQoJ21rZGlyIHJ1bl90ZXN0cy5vdXQnKQotcHJpbnQoJ2NkIHJ1bl90ZXN0 cy5vdXQnKQotCi1pbmQgPSAwCi1mb3IgY2MsIGN4eCBpbiBwb3NzaWJsZV9jb21waWxlcnM6Ci0g ICAgZm9yIGNvbXBpbGVyX29wdHMgaW4gcG93ZXJzZXQocG9zc2libGVfY29tcGlsZXJfb3B0cyk6 Ci0gICAgICAgIGZvciBjb25maWdfb3B0cyBpbiBwb3dlcnNldChwb3NzaWJsZV9jb25maWdfb3B0 cyk6Ci0gICAgICAgICAgICBmb3IgbWFsbG9jX2NvbmZfb3B0cyBpbiBwb3dlcnNldChwb3NzaWJs ZV9tYWxsb2NfY29uZl9vcHRzKToKLSAgICAgICAgICAgICAgICBpZiBjYyA9PSAnY2xhbmcnIFwK LSAgICAgICAgICAgICAgICAgIGFuZCAnLW0zMicgaW4gcG9zc2libGVfY29tcGlsZXJfb3B0cyBc Ci0gICAgICAgICAgICAgICAgICBhbmQgJy0tZW5hYmxlLXByb2YnIGluIGNvbmZpZ19vcHRzOgot ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGNvbmZpZ19saW5l ID0gKAotICAgICAgICAgICAgICAgICAgICAnRVhUUkFfQ0ZMQUdTPS1XZXJyb3IgRVhUUkFfQ1hY RkxBR1M9LVdlcnJvciAnCi0gICAgICAgICAgICAgICAgICAgICsgJ0NDPSJ7fSB7fSIgJy5mb3Jt YXQoY2MsICIgIi5qb2luKGNvbXBpbGVyX29wdHMpKQotICAgICAgICAgICAgICAgICAgICArICdD WFg9Int9IHt9IiAnLmZvcm1hdChjeHgsICIgIi5qb2luKGNvbXBpbGVyX29wdHMpKQotICAgICAg ICAgICAgICAgICAgICArICcuLi8uLi9jb25maWd1cmUgJwotICAgICAgICAgICAgICAgICAgICAr ICIgIi5qb2luKGNvbmZpZ19vcHRzKSArICgnIC0td2l0aC1tYWxsb2MtY29uZj0nICsKLSAgICAg ICAgICAgICAgICAgICAgIiwiLmpvaW4obWFsbG9jX2NvbmZfb3B0cykgaWYgbGVuKG1hbGxvY19j b25mX29wdHMpID4gMAotICAgICAgICAgICAgICAgICAgICBlbHNlICcnKQotICAgICAgICAgICAg ICAgICkKLQotICAgICAgICAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byB0ZXN0IGxhcmdlIHZh ZGRyIHNwYWNlcyBpbiAzMi1iaXQgbW9kZS4KLSAgICAgICAgICAgICAgICBpZiAoJy1tMzInIGlu IGNvbXBpbGVyX29wdHMgYW5kICctLXdpdGgtbGctdmFkZHI9NTYnIGluCi0gICAgICAgICAgICAg ICAgICAgIGNvbmZpZ19vcHRzKToKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAg ICAgICAgICAgICAgICMgUGVyIENQVSBhcmVuYXMgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIExpbnV4 LgotICAgICAgICAgICAgICAgIGxpbnV4X3N1cHBvcnRlZCA9ICgncGVyY3B1X2FyZW5hOnBlcmNw dScgaW4gbWFsbG9jX2NvbmZfb3B0cyBcCi0gICAgICAgICAgICAgICAgICBvciAnYmFja2dyb3Vu ZF90aHJlYWQ6dHJ1ZScgaW4gbWFsbG9jX2NvbmZfb3B0cykKLSAgICAgICAgICAgICAgICAjIEhl YXAgcHJvZmlsaW5nIGFuZCBkc3MgYXJlIG5vdCBzdXBwb3J0ZWQgb24gT1MgWC4KLSAgICAgICAg ICAgICAgICBkYXJ3aW5fdW5zdXBwb3J0ZWQgPSAoJy0tZW5hYmxlLXByb2YnIGluIGNvbmZpZ19v cHRzIG9yIFwKLSAgICAgICAgICAgICAgICAgICdkc3M6cHJpbWFyeScgaW4gbWFsbG9jX2NvbmZf b3B0cykKLSAgICAgICAgICAgICAgICBpZiAodW5hbWUgPT0gJ0xpbnV4JyBhbmQgbGludXhfc3Vw cG9ydGVkKSBcCi0gICAgICAgICAgICAgICAgICBvciAobm90IGxpbnV4X3N1cHBvcnRlZCBhbmQg KHVuYW1lICE9ICdEYXJ3aW4nIG9yIFwKLSAgICAgICAgICAgICAgICAgIG5vdCBkYXJ3aW5fdW5z dXBwb3J0ZWQpKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiIiY2F0IDw8RU9GID4gcnVu X3Rlc3RfJShpbmQpZC5zaAotIyEvYmluL3NoCi0KLXNldCAtZQotCi1hYm9ydCgpIHsKLSAgICBl Y2hvICI9PT4gRXJyb3IiID4+IHJ1bl90ZXN0LmxvZwotICAgIGVjaG8gIkVycm9yOyBzZWUgcnVu X3Rlc3RzLm91dC9ydW5fdGVzdF8lKGluZClkLm91dC9ydW5fdGVzdC5sb2ciCi0gICAgZXhpdCAy NTUgIyBTcGVjaWFsIGV4aXQgY29kZSB0ZWxscyB4YXJncyB0byB0ZXJtaW5hdGUuCi19Ci0KLSMg RW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkLgotcnVuX2NtZCgpIHsKLSAg ICBlY2hvICI9PT4gXCRAIiA+PiBydW5fdGVzdC5sb2cKLSAgICBcJEAgPj4gcnVuX3Rlc3QubG9n IDI+JjEgfHwgYWJvcnQKLX0KLQotZWNobyAiPT4gcnVuX3Rlc3RfJShpbmQpZDogJShjb25maWdf bGluZSlzIgotbWtkaXIgcnVuX3Rlc3RfJShpbmQpZC5vdXQKLWNkIHJ1bl90ZXN0XyUoaW5kKWQu b3V0Ci0KLWVjaG8gIj09PiAlKGNvbmZpZ19saW5lKXMiID4+IHJ1bl90ZXN0LmxvZwotJShjb25m aWdfbGluZSlzID4+IHJ1bl90ZXN0LmxvZyAyPiYxIHx8IGFib3J0Ci0KLXJ1bl9jbWQgJShtYWtl X2NtZClzIGFsbCB0ZXN0cwotcnVuX2NtZCAlKG1ha2VfY21kKXMgY2hlY2sKLXJ1bl9jbWQgJSht YWtlX2NtZClzIGRpc3RjbGVhbgotRU9GCi1jaG1vZCA3NTUgcnVuX3Rlc3RfJShpbmQpZC5zaCIi IiAlIHsnaW5kJzogaW5kLCAnY29uZmlnX2xpbmUnOiBjb25maWdfbGluZSwKLSAgICAgICdtYWtl X2NtZCc6IG1ha2VfY21kfSkKLSAgICAgICAgICAgICAgICAgICAgaW5kICs9IDEKLQotcHJpbnQo J2ZvciBpIGluIGBzZXEgMCAlKGxhc3RfaW5kKWRgIDsgZG8gZWNobyBydW5fdGVzdF8ke2l9LnNo IDsgZG9uZSB8IHhhcmdzJwotICAgICcgLVAgJShucGFyYWxsZWwpZCAtbiAxIHNoJyAlIHsnbGFz dF9pbmQnOiBpbmQtMSwgJ25wYXJhbGxlbCc6IG5wYXJhbGxlbH0pCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy9nZW5fdHJhdmlzLnB5 IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy9nZW5fdHJh dmlzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0MzY2YTA2Li4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvZ2VuX3Ry YXZpcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0jIS91c3IvYmluL2VudiBw eXRob24zCi0KLWZyb20gaXRlcnRvb2xzIGltcG9ydCBjb21iaW5hdGlvbnMsIGNoYWluCi1mcm9t IGVudW0gaW1wb3J0IEVudW0sIGF1dG8KLQotCi1MSU5VWCA9ICdsaW51eCcKLU9TWCA9ICdvc3gn Ci1XSU5ET1dTID0gJ3dpbmRvd3MnCi1GUkVFQlNEID0gJ2ZyZWVic2QnCi0KLQotQU1ENjQgPSAn YW1kNjQnCi1BUk02NCA9ICdhcm02NCcKLVBQQzY0TEUgPSAncHBjNjRsZScKLQotCi1UUkFWSVNf VEVNUExBVEUgPSAiIiJcCi0jIFRoaXMgY29uZmlnIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IC4vc2Ny aXB0cy9nZW5fdHJhdmlzLnB5LgotIyBEbyBub3QgZWRpdCBieSBoYW5kLgotCi0jIFdlIHVzZSAn bWluaW1hbCcsIGJlY2F1c2UgJ2dlbmVyaWMnIG1ha2VzIFdpbmRvd3MgVk1zIGhhbmcgYXQgc3Rh cnR1cC4gQWxzbwotIyB0aGUgc29mdHdhcmUgcHJvdmlkZWQgYnkgJ2dlbmVyaWMnIGlzIHNpbXBs eSBub3QgbmVlZGVkIGZvciBvdXIgdGVzdHMuCi0jIERpZmZlcmVuY2VzIGFyZSBleHBsYWluZWQg aGVyZToKLSMgaHR0cHM6Ly9kb2NzLnRyYXZpcy1jaS5jb20vdXNlci9sYW5ndWFnZXMvbWluaW1h bC1hbmQtZ2VuZXJpYy8KLWxhbmd1YWdlOiBtaW5pbWFsCi1kaXN0OiBmb2NhbAotCi1qb2JzOgot ICBpbmNsdWRlOgote2pvYnN9Ci0KLWJlZm9yZV9pbnN0YWxsOgotICAtIHwtCi0gICAgaWYgdGVz dCAtZiAiLi9zY3JpcHRzLyRUUkFWSVNfT1NfTkFNRS9iZWZvcmVfaW5zdGFsbC5zaCI7IHRoZW4K LSAgICAgIHNvdXJjZSAuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1FL2JlZm9yZV9pbnN0YWxsLnNo Ci0gICAgZmkKLQotYmVmb3JlX3NjcmlwdDoKLSAgLSB8LQotICAgIGlmIHRlc3QgLWYgIi4vc2Ny aXB0cy8kVFJBVklTX09TX05BTUUvYmVmb3JlX3NjcmlwdC5zaCI7IHRoZW4KLSAgICAgIHNvdXJj ZSAuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1FL2JlZm9yZV9zY3JpcHQuc2gKLSAgICBlbHNlCi0g ICAgICBzY3JpcHRzL2dlbl90cmF2aXMucHkgPiB0cmF2aXNfc2NyaXB0ICYmIGRpZmYgLnRyYXZp cy55bWwgdHJhdmlzX3NjcmlwdAotICAgICAgYXV0b2NvbmYKLSAgICAgICMgSWYgQ09NUElMRVJf RkxBR1MgYXJlIG5vdCBlbXB0eSwgYWRkIHRoZW0gdG8gQ0MgYW5kIENYWAotICAgICAgLi9jb25m aWd1cmUgJHt7Q09NUElMRVJfRkxBR1M6KyBDQz0iJENDICRDT01QSUxFUl9GTEFHUyIgXAotQ1hY PSIkQ1hYICRDT01QSUxFUl9GTEFHUyJ9fSAkQ09ORklHVVJFX0ZMQUdTCi0gICAgICBtYWtlIC1q MwotICAgICAgbWFrZSAtajMgdGVzdHMKLSAgICBmaQotCi1zY3JpcHQ6Ci0gIC0gfC0KLSAgICBp ZiB0ZXN0IC1mICIuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1FL3NjcmlwdC5zaCI7IHRoZW4KLSAg ICAgIHNvdXJjZSAuL3NjcmlwdHMvJFRSQVZJU19PU19OQU1FL3NjcmlwdC5zaAotICAgIGVsc2UK LSAgICAgIG1ha2UgY2hlY2sKLSAgICBmaQotIiIiCi0KLQotY2xhc3MgT3B0aW9uKG9iamVjdCk6 Ci0gICAgY2xhc3MgVHlwZToKLSAgICAgICAgQ09NUElMRVIgPSBhdXRvKCkKLSAgICAgICAgQ09N UElMRVJfRkxBRyA9IGF1dG8oKQotICAgICAgICBDT05GSUdVUkVfRkxBRyA9IGF1dG8oKQotICAg ICAgICBNQUxMT0NfQ09ORiA9IGF1dG8oKQotICAgICAgICBGRUFUVVJFID0gYXV0bygpCi0KLSAg ICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgdmFsdWUpOgotICAgICAgICBzZWxmLnR5cGUgPSB0 eXBlCi0gICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAg IGRlZiBhc19jb21waWxlcih2YWx1ZSk6Ci0gICAgICAgIHJldHVybiBPcHRpb24oT3B0aW9uLlR5 cGUuQ09NUElMRVIsIHZhbHVlKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBhc19jb21w aWxlcl9mbGFnKHZhbHVlKToKLSAgICAgICAgcmV0dXJuIE9wdGlvbihPcHRpb24uVHlwZS5DT01Q SUxFUl9GTEFHLCB2YWx1ZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgYXNfY29uZmln dXJlX2ZsYWcodmFsdWUpOgotICAgICAgICByZXR1cm4gT3B0aW9uKE9wdGlvbi5UeXBlLkNPTkZJ R1VSRV9GTEFHLCB2YWx1ZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgYXNfbWFsbG9j X2NvbmYodmFsdWUpOgotICAgICAgICByZXR1cm4gT3B0aW9uKE9wdGlvbi5UeXBlLk1BTExPQ19D T05GLCB2YWx1ZSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgYXNfZmVhdHVyZSh2YWx1 ZSk6Ci0gICAgICAgIHJldHVybiBPcHRpb24oT3B0aW9uLlR5cGUuRkVBVFVSRSwgdmFsdWUpCi0K LSAgICBkZWYgX19lcV9fKHNlbGYsIG9iaik6Ci0gICAgICAgIHJldHVybiAoaXNpbnN0YW5jZShv YmosIE9wdGlvbikgYW5kIG9iai50eXBlID09IHNlbGYudHlwZQotICAgICAgICAgICAgICAgIGFu ZCBvYmoudmFsdWUgPT0gc2VsZi52YWx1ZSkKLQotCi0jIFRoZSAnZGVmYXVsdCcgY29uZmlndXJh dGlvbiBpcyBnY2MsIG9uIGxpbnV4LCB3aXRoIG5vIGNvbXBpbGVyIG9yIGNvbmZpZ3VyZQotIyBm bGFncy4gIFdlIGFsc28gdGVzdCB3aXRoIGNsYW5nLCAtbTMyLCAtLWVuYWJsZS1kZWJ1ZywgLS1l bmFibGUtcHJvZiwKLSMgLS1kaXNhYmxlLXN0YXRzLCBhbmQgLS13aXRoLW1hbGxvYy1jb25mPXRj YWNoZTpmYWxzZS4gIFRvIGF2b2lkIGFidXNpbmcKLSMgdHJhdmlzIHRob3VnaCwgd2UgZG9uJ3Qg dGVzdCBhbGwgMioqNyA9IDEyOCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlc2U7Ci0jIGlu c3RlYWQsIHdlIG9ubHkgdGVzdCBjb21iaW5hdGlvbnMgb2YgdXAgdG8gMiAndW51c3VhbCcgc2V0 dGluZ3MsIHVuZGVyIHRoZQotIyBob3BlIHRoYXQgYnVncyBpbnZvbHZpbmcgaW50ZXJhY3Rpb25z IG9mIHN1Y2ggc2V0dGluZ3MgYXJlIHJhcmUuCi1NQVhfVU5VU1VBTF9PUFRJT05TID0gMgotCi0K LUdDQyA9IE9wdGlvbi5hc19jb21waWxlcignQ0M9Z2NjIENYWD1nKysnKQotQ0xBTkcgPSBPcHRp b24uYXNfY29tcGlsZXIoJ0NDPWNsYW5nIENYWD1jbGFuZysrJykKLUNMID0gT3B0aW9uLmFzX2Nv bXBpbGVyKCdDQz1jbC5leGUgQ1hYPWNsLmV4ZScpCi0KLQotY29tcGlsZXJzX3VudXN1YWwgPSBb Q0xBTkcsXQotCi0KLUNST1NTX0NPTVBJTEVfMzJCSVQgPSBPcHRpb24uYXNfZmVhdHVyZSgnQ1JP U1NfQ09NUElMRV8zMkJJVCcpCi1mZWF0dXJlX3VudXN1YWxzID0gW0NST1NTX0NPTVBJTEVfMzJC SVRdCi0KLQotY29uZmlndXJlX2ZsYWdfdW51c3VhbHMgPSBbT3B0aW9uLmFzX2NvbmZpZ3VyZV9m bGFnKG9wdCkgZm9yIG9wdCBpbiAoCi0gICAgJy0tZW5hYmxlLWRlYnVnJywKLSAgICAnLS1lbmFi bGUtcHJvZicsCi0gICAgJy0tZGlzYWJsZS1zdGF0cycsCi0gICAgJy0tZGlzYWJsZS1saWJkbCcs Ci0gICAgJy0tZW5hYmxlLW9wdC1zYWZldHktY2hlY2tzJywKLSAgICAnLS13aXRoLWxnLXBhZ2U9 MTYnLAotKV0KLQotCi1tYWxsb2NfY29uZl91bnVzdWFscyA9IFtPcHRpb24uYXNfbWFsbG9jX2Nv bmYob3B0KSBmb3Igb3B0IGluICgKLSAgICAndGNhY2hlOmZhbHNlJywKLSAgICAnZHNzOnByaW1h cnknLAotICAgICdwZXJjcHVfYXJlbmE6cGVyY3B1JywKLSAgICAnYmFja2dyb3VuZF90aHJlYWQ6 dHJ1ZScsCi0pXQotCi0KLWFsbF91bnVzdWFscyA9IChjb21waWxlcnNfdW51c3VhbCArIGZlYXR1 cmVfdW51c3VhbHMKLSAgICArIGNvbmZpZ3VyZV9mbGFnX3VudXN1YWxzICsgbWFsbG9jX2NvbmZf dW51c3VhbHMpCi0KLQotZGVmIGdldF9leHRyYV9jZmxhZ3Mob3MsIGNvbXBpbGVyKToKLSAgICBp ZiBvcyA9PSBGUkVFQlNEOgotICAgICAgICByZXR1cm4gW10KLQotICAgIGlmIG9zID09IFdJTkRP V1M6Ci0gICAgICAgICMgRm9yIG5vbi1DTCBjb21waWxlcnMgdW5kZXIgV2luZG93cyAoZm9yIG5v dyBpdCdzIG9ubHkgTWluR1ctR0NDKSwKLSAgICAgICAgIyAtZmNvbW1vbiBuZWVkcyB0byBiZSBz cGVjaWZpZWQgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aXBsZQotICAgICAgICAjICdtYWxsb2Nf Y29uZicgc3ltYm9scyBhbmQgc3VjaCwgd2hpY2ggYXJlIGRlY2xhcmVkIHdlYWsgdW5kZXIgTGlu dXguCi0gICAgICAgICMgV2VhayBzeW1ib2xzIGRvbid0IHdvcmsgd2l0aCBNaW5HVy1HQ0MuCi0g ICAgICAgIGlmIGNvbXBpbGVyICE9IENMLnZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIFsnLWZj b21tb24nXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIFtdCi0KLSAgICAjIFdl IGdldCBzb21lIHNwdXJpb3VzIGVycm9ycyB3aGVuIC1XYXJyYXktYm91bmRzIGlzIGVuYWJsZWQu Ci0gICAgZXh0cmFfY2ZsYWdzID0gWyctV2Vycm9yJywgJy1Xbm8tYXJyYXktYm91bmRzJ10KLSAg ICBpZiBjb21waWxlciA9PSBDTEFORy52YWx1ZSBvciBvcyA9PSBPU1g6Ci0gICAgICAgIGV4dHJh X2NmbGFncyArPSBbCi0gICAgICAgICAgICAnLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uJywK LSAgICAgICAgICAgICctV25vLWlnbm9yZWQtYXR0cmlidXRlcycKLSAgICAgICAgXQotICAgIGlm IG9zID09IE9TWDoKLSAgICAgICAgZXh0cmFfY2ZsYWdzICs9IFsKLSAgICAgICAgICAgICctV25v LWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zJywKLSAgICAgICAgXQotICAgIHJldHVybiBleHRyYV9j ZmxhZ3MKLQotCi0jIEZvcm1hdHMgYSBqb2IgZnJvbSBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzCi1k ZWYgZm9ybWF0X2pvYihvcywgYXJjaCwgY29tYmluYXRpb24pOgotICAgIGNvbXBpbGVycyA9IFt4 LnZhbHVlIGZvciB4IGluIGNvbWJpbmF0aW9uIGlmIHgudHlwZSA9PSBPcHRpb24uVHlwZS5DT01Q SUxFUl0KLSAgICBhc3NlcnQobGVuKGNvbXBpbGVycykgPD0gMSkKLSAgICBjb21waWxlcl9mbGFn cyA9IFt4LnZhbHVlIGZvciB4IGluIGNvbWJpbmF0aW9uIGlmIHgudHlwZSA9PSBPcHRpb24uVHlw ZS5DT01QSUxFUl9GTEFHXQotICAgIGNvbmZpZ3VyZV9mbGFncyA9IFt4LnZhbHVlIGZvciB4IGlu IGNvbWJpbmF0aW9uIGlmIHgudHlwZSA9PSBPcHRpb24uVHlwZS5DT05GSUdVUkVfRkxBR10KLSAg ICBtYWxsb2NfY29uZiA9IFt4LnZhbHVlIGZvciB4IGluIGNvbWJpbmF0aW9uIGlmIHgudHlwZSA9 PSBPcHRpb24uVHlwZS5NQUxMT0NfQ09ORl0KLSAgICBmZWF0dXJlcyA9IFt4LnZhbHVlIGZvciB4 IGluIGNvbWJpbmF0aW9uIGlmIHgudHlwZSA9PSBPcHRpb24uVHlwZS5GRUFUVVJFXQotCi0gICAg aWYgbGVuKG1hbGxvY19jb25mKSA+IDA6Ci0gICAgICAgIGNvbmZpZ3VyZV9mbGFncy5hcHBlbmQo Jy0td2l0aC1tYWxsb2MtY29uZj0nICsgJywnLmpvaW4obWFsbG9jX2NvbmYpKQotCi0gICAgaWYg bm90IGNvbXBpbGVyczoKLSAgICAgICAgY29tcGlsZXIgPSBHQ0MudmFsdWUKLSAgICBlbHNlOgot ICAgICAgICBjb21waWxlciA9IGNvbXBpbGVyc1swXQotCi0gICAgZXh0cmFfZW52aXJvbm1lbnRf dmFycyA9ICcnCi0gICAgY3Jvc3NfY29tcGlsZSA9IENST1NTX0NPTVBJTEVfMzJCSVQudmFsdWUg aW4gZmVhdHVyZXMKLSAgICBpZiBvcyA9PSBMSU5VWCBhbmQgY3Jvc3NfY29tcGlsZToKLSAgICAg ICAgY29tcGlsZXJfZmxhZ3MuYXBwZW5kKCctbTMyJykKLQotICAgIGZlYXR1cmVzX3N0ciA9ICcg Jy5qb2luKFsnIHt9PXllcycuZm9ybWF0KGZlYXR1cmUpIGZvciBmZWF0dXJlIGluIGZlYXR1cmVz XSkKLQotICAgIHN0cmluZ2lmeSA9IGxhbWJkYSBhcnIsIG5hbWU6ICcge309Int9IicuZm9ybWF0 KG5hbWUsICcgJy5qb2luKGFycikpIGlmIGFyciBlbHNlICcnCi0gICAgZW52X3N0cmluZyA9ICd7 fXt9e317fXt9e30nLmZvcm1hdCgKLSAgICAgICAgICAgIGNvbXBpbGVyLAotICAgICAgICAgICAg ZmVhdHVyZXNfc3RyLAotICAgICAgICAgICAgc3RyaW5naWZ5KGNvbXBpbGVyX2ZsYWdzLCAnQ09N UElMRVJfRkxBR1MnKSwKLSAgICAgICAgICAgIHN0cmluZ2lmeShjb25maWd1cmVfZmxhZ3MsICdD T05GSUdVUkVfRkxBR1MnKSwKLSAgICAgICAgICAgIHN0cmluZ2lmeShnZXRfZXh0cmFfY2ZsYWdz KG9zLCBjb21waWxlciksICdFWFRSQV9DRkxBR1MnKSwKLSAgICAgICAgICAgIGV4dHJhX2Vudmly b25tZW50X3ZhcnMpCi0KLSAgICBqb2IgPSAnICAgIC0gb3M6IHt9XG4nLmZvcm1hdChvcykKLSAg ICBqb2IgKz0gJyAgICAgIGFyY2g6IHt9XG4nLmZvcm1hdChhcmNoKQotICAgIGpvYiArPSAnICAg ICAgZW52OiB7fScuZm9ybWF0KGVudl9zdHJpbmcpCi0gICAgcmV0dXJuIGpvYgotCi0KLWRlZiBn ZW5lcmF0ZV91bnVzdWFsX2NvbWJpbmF0aW9ucyh1bnVzdWFscywgbWF4X3VudXN1YWxfb3B0cyk6 Ci0gICAgIiIiCi0gICAgR2VuZXJhdGVzIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2Ygbm9uLXN0 YW5kYXJkIGNvbXBpbGVycywgY29tcGlsZXIgZmxhZ3MsCi0gICAgY29uZmlndXJlIGZsYWdzIGFu ZCBtYWxsb2NfY29uZiBzZXR0aW5ncy4KLQotICAgIEBwYXJhbSBtYXhfdW51c3VhbF9vcHRzOiBM aW1pdCBvZiB1bnVzdWFsIG9wdGlvbnMgcGVyIGNvbWJpbmF0aW9uLgotICAgICIiIgotICAgIHJl dHVybiBjaGFpbi5mcm9tX2l0ZXJhYmxlKAotICAgICAgICAgICAgW2NvbWJpbmF0aW9ucyh1bnVz dWFscywgaSkgZm9yIGkgaW4gcmFuZ2UobWF4X3VudXN1YWxfb3B0cyArIDEpXSkKLQotCi1kZWYg aW5jbHVkZWQoY29tYmluYXRpb24sIGV4Y2x1ZGUpOgotICAgICIiIgotICAgIENoZWNrcyBpZiB0 aGUgY29tYmluYXRpb24gb2Ygb3B0aW9ucyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIFRyYXZp cwotICAgIHRlc3RpbmcgbWF0cml4LgotCi0gICAgQHBhcmFtIGV4Y2x1ZGU6IEEgbGlzdCBvZiBv cHRpb25zIHRvIGJlIGF2b2lkZWQuCi0gICAgIiIiCi0gICAgcmV0dXJuIG5vdCBhbnkoZXhjbHVk ZWQgaW4gY29tYmluYXRpb24gZm9yIGV4Y2x1ZGVkIGluIGV4Y2x1ZGUpCi0KLQotZGVmIGdlbmVy YXRlX2pvYnMob3MsIGFyY2gsIGV4Y2x1ZGUsIG1heF91bnVzdWFsX29wdHMsIHVudXN1YWxzPWFs bF91bnVzdWFscyk6Ci0gICAgam9icyA9IFtdCi0gICAgZm9yIGNvbWJpbmF0aW9uIGluIGdlbmVy YXRlX3VudXN1YWxfY29tYmluYXRpb25zKHVudXN1YWxzLCBtYXhfdW51c3VhbF9vcHRzKToKLSAg ICAgICAgaWYgaW5jbHVkZWQoY29tYmluYXRpb24sIGV4Y2x1ZGUpOgotICAgICAgICAgICAgam9i cy5hcHBlbmQoZm9ybWF0X2pvYihvcywgYXJjaCwgY29tYmluYXRpb24pKQotICAgIHJldHVybiAn XG4nLmpvaW4oam9icykKLQotCi1kZWYgZ2VuZXJhdGVfbGludXgoYXJjaCk6Ci0gICAgb3MgPSBM SU5VWAotCi0gICAgIyBPbmx5IGdlbmVyYXRlIDIgdW51c3VhbCBvcHRpb25zIGZvciBBTUQ2NCB0 byByZWR1Y2UgbWF0cml4IHNpemUKLSAgICBtYXhfdW51c3VhbF9vcHRzID0gTUFYX1VOVVNVQUxf T1BUSU9OUyBpZiBhcmNoID09IEFNRDY0IGVsc2UgMQotCi0gICAgZXhjbHVkZSA9IFtdCi0gICAg aWYgYXJjaCA9PSBQUEM2NExFOgotICAgICAgICAjIEF2b2lkIDMyIGJpdCBidWlsZHMgYW5kIGNs YW5nIG9uIFBvd2VyUEMKLSAgICAgICAgZXhjbHVkZSA9IChDUk9TU19DT01QSUxFXzMyQklULCBD TEFORywpCi0KLSAgICByZXR1cm4gZ2VuZXJhdGVfam9icyhvcywgYXJjaCwgZXhjbHVkZSwgbWF4 X3VudXN1YWxfb3B0cykKLQotCi1kZWYgZ2VuZXJhdGVfbWFjb3MoYXJjaCk6Ci0gICAgb3MgPSBP U1gKLQotICAgIG1heF91bnVzdWFsX29wdHMgPSAxCi0KLSAgICBleGNsdWRlID0gKFtPcHRpb24u YXNfbWFsbG9jX2NvbmYob3B0KSBmb3Igb3B0IGluICgKLSAgICAgICAgICAgICdkc3M6cHJpbWFy eScsCi0gICAgICAgICAgICAncGVyY3B1X2FyZW5hOnBlcmNwdScsCi0gICAgICAgICAgICAnYmFj a2dyb3VuZF90aHJlYWQ6dHJ1ZScpXSArCi0gICAgICAgIFtPcHRpb24uYXNfY29uZmlndXJlX2Zs YWcoJy0tZW5hYmxlLXByb2YnKV0gKwotICAgICAgICBbQ0xBTkcsXSkKLQotICAgIHJldHVybiBn ZW5lcmF0ZV9qb2JzKG9zLCBhcmNoLCBleGNsdWRlLCBtYXhfdW51c3VhbF9vcHRzKQotCi0KLWRl ZiBnZW5lcmF0ZV93aW5kb3dzKGFyY2gpOgotICAgIG9zID0gV0lORE9XUwotCi0gICAgbWF4X3Vu dXN1YWxfb3B0cyA9IDMKLSAgICB1bnVzdWFscyA9ICgKLSAgICAgICAgT3B0aW9uLmFzX2NvbmZp Z3VyZV9mbGFnKCctLWVuYWJsZS1kZWJ1ZycpLAotICAgICAgICBDTCwKLSAgICAgICAgQ1JPU1Nf Q09NUElMRV8zMkJJVCwKLSAgICApCi0gICAgcmV0dXJuIGdlbmVyYXRlX2pvYnMob3MsIGFyY2gs ICgpLCBtYXhfdW51c3VhbF9vcHRzLCB1bnVzdWFscykKLQotCi1kZWYgZ2VuZXJhdGVfZnJlZWJz ZChhcmNoKToKLSAgICBvcyA9IEZSRUVCU0QKLQotICAgIG1heF91bnVzdWFsX29wdHMgPSA0Ci0g ICAgdW51c3VhbHMgPSAoCi0gICAgICAgIE9wdGlvbi5hc19jb25maWd1cmVfZmxhZygnLS1lbmFi bGUtZGVidWcnKSwKLSAgICAgICAgT3B0aW9uLmFzX2NvbmZpZ3VyZV9mbGFnKCctLWVuYWJsZS1w cm9mIC0tZW5hYmxlLXByb2YtbGlidW53aW5kJyksCi0gICAgICAgIE9wdGlvbi5hc19jb25maWd1 cmVfZmxhZygnLS13aXRoLWxnLXBhZ2U9MTYgLS13aXRoLW1hbGxvYy1jb25mPXRjYWNoZTpmYWxz ZScpLAotICAgICAgICBDUk9TU19DT01QSUxFXzMyQklULAotICAgICkKLSAgICByZXR1cm4gZ2Vu ZXJhdGVfam9icyhvcywgYXJjaCwgKCksIG1heF91bnVzdWFsX29wdHMsIHVudXN1YWxzKQotCi0K LQotZGVmIGdldF9tYW51YWxfam9icygpOgotICAgIHJldHVybiAiIiJcCi0gICAgIyBEZXZlbG9w bWVudCBidWlsZAotICAgIC0gb3M6IGxpbnV4Ci0gICAgICBlbnY6IENDPWdjYyBDWFg9ZysrIENP TkZJR1VSRV9GTEFHUz0iLS1lbmFibGUtZGVidWcgXAotLS1kaXNhYmxlLWNhY2hlLW9ibGl2aW91 cyAtLWVuYWJsZS1zdGF0cyAtLWVuYWJsZS1sb2cgLS1lbmFibGUtcHJvZiIgXAotRVhUUkFfQ0ZM QUdTPSItV2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotICAgICMgLS1lbmFibGUtZXhwZXJtZW50 YWwtc21hbGxvY3g6Ci0gICAgLSBvczogbGludXgKLSAgICAgIGVudjogQ0M9Z2NjIENYWD1nKysg Q09ORklHVVJFX0ZMQUdTPSItLWVuYWJsZS1kZWJ1ZyBcCi0tLWVuYWJsZS1leHBlcmltZW50YWwt c21hbGxvY3ggLS1lbmFibGUtc3RhdHMgLS1lbmFibGUtcHJvZiIgXAotRVhUUkFfQ0ZMQUdTPSIt V2Vycm9yIC1Xbm8tYXJyYXktYm91bmRzIgotIiIiCi0KLQotZGVmIG1haW4oKToKLSAgICBqb2Jz ID0gJ1xuJy5qb2luKCgKLSAgICAgICAgZ2VuZXJhdGVfd2luZG93cyhBTUQ2NCksCi0KLSAgICAg ICAgZ2VuZXJhdGVfZnJlZWJzZChBTUQ2NCksCi0KLSAgICAgICAgZ2VuZXJhdGVfbGludXgoQU1E NjQpLAotICAgICAgICBnZW5lcmF0ZV9saW51eChQUEM2NExFKSwKLQotICAgICAgICBnZW5lcmF0 ZV9tYWNvcyhBTUQ2NCksCi0KLSAgICAgICAgZ2V0X21hbnVhbF9qb2JzKCksCi0gICAgKSkKLQot ICAgIHByaW50KFRSQVZJU19URU1QTEFURS5mb3JtYXQoam9icz1qb2JzKSkKLQotCi1pZiBfX25h bWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvbGludXgvYmVmb3JlX2luc3RhbGwu c2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL2xpbnV4 L2JlZm9yZV9pbnN0YWxsLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzQxNzQ2 Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Nj cmlwdHMvbGludXgvYmVmb3JlX2luc3RhbGwuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCww IEBACi0jIS9iaW4vYmFzaAotCi1zZXQgLWV2Ci0KLWlmIFtbICIkVFJBVklTX09TX05BTUUiICE9 ICJsaW51eCIgXV07IHRoZW4KLSAgICBlY2hvICJJbmNvcnJlY3QgXCRUUkFWSVNfT1NfTkFNRTog ZXhwZWN0ZWQgbGludXgsIGdvdCAkVFJBVklTX09TX05BTUUiCi0gICAgZXhpdCAxCi1maQotCi1p ZiBbWyAiJENST1NTX0NPTVBJTEVfMzJCSVQiID09ICJ5ZXMiIF1dOyB0aGVuCi0gICAgc3VkbyBh cHQtZ2V0IHVwZGF0ZQotICAgIHN1ZG8gYXB0LWdldCAteSBpbnN0YWxsIGdjYy1tdWx0aWxpYiBn KystbXVsdGlsaWIKLWZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvc2NyaXB0cy93aW5kb3dzL2JlZm9yZV9pbnN0YWxsLnNoIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy93aW5kb3dzL2JlZm9yZV9pbnN0 YWxsLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzQwYzQ1Li4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvd2luZG93 cy9iZWZvcmVfaW5zdGFsbC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLSMhL2Jp bi9iYXNoCi0KLXNldCAtZQotCi0jIFRoZSBwdXJwb3NlIG9mIHRoaXMgc2NyaXB0IGlzIHRvIGlu c3RhbGwgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBzZXQKLSMgJGJ1aWxkX2VudiB0byBhIGZ1bmN0 aW9uIHRoYXQgc2V0cyBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsCi0jIHRvIGVu YWJsZSAobWluZ3czMnxtaW5ndzY0KSBlbnZpcm9ubWVudCBpZiB3ZSB3YW50IHRvIGNvbXBpbGUg d2l0aCBnY2MsIG9yCi0jIChtaW5ndzMyfG1pbmd3NjQpICsgdmN2YXJzYWxsLmJhdCBpZiB3ZSB3 YW50IHRvIGNvbXBpbGUgd2l0aCBjbC5leGUKLQotaWYgW1sgIiRUUkFWSVNfT1NfTkFNRSIgIT0g IndpbmRvd3MiIF1dOyB0aGVuCi0gICAgZWNobyAiSW5jb3JyZWN0IFwkVFJBVklTX09TX05BTUU6 IGV4cGVjdGVkIHdpbmRvd3MsIGdvdCAkVFJBVklTX09TX05BTUUiCi0gICAgZXhpdCAxCi1maQot Ci1bWyAhIC1mIEM6L3Rvb2xzL21zeXM2NC9tc3lzMl9zaGVsbC5jbWQgXV0gJiYgcm0gLXJmIEM6 L3Rvb2xzL21zeXM2NAotY2hvY28gdW5pbnN0YWxsIC15IG1pbmd3Ci1jaG9jbyB1cGdyYWRlIC0t bm8tcHJvZ3Jlc3MgLXkgbXN5czIKLQotbXN5c19zaGVsbF9jbWQ9ImNtZCAvL0MgUmVmcmVzaEVu di5jbWQgJiYgc2V0IE1TWVM9d2luc3ltbGlua3M6bmF0aXZlc3RyaWN0ICYmIEM6XFx0b29sc1xc bXN5czY0XFxtc3lzMl9zaGVsbC5jbWQiCi0KLW1zeXMyKCkgeyAkbXN5c19zaGVsbF9jbWQgLWRl ZnRlcm0gLW5vLXN0YXJ0IC1tc3lzMiAtYyAiJCoiOyB9Ci1taW5ndzMyKCkgeyAkbXN5c19zaGVs bF9jbWQgLWRlZnRlcm0gLW5vLXN0YXJ0IC1taW5ndzMyIC1jICIkKiI7IH0KLW1pbmd3NjQoKSB7 ICRtc3lzX3NoZWxsX2NtZCAtZGVmdGVybSAtbm8tc3RhcnQgLW1pbmd3NjQgLWMgIiQqIjsgfQot Ci1pZiBbWyAiJENST1NTX0NPTVBJTEVfMzJCSVQiID09ICJ5ZXMiIF1dOyB0aGVuCi0gICAgbWlu Z3c9bWluZ3czMgotICAgIG1pbmd3X2djY19wYWNrYWdlX2FyY2g9aTY4NgotZWxzZQotICAgIG1p bmd3PW1pbmd3NjQKLSAgICBtaW5nd19nY2NfcGFja2FnZV9hcmNoPXg4Nl82NAotZmkKLQotaWYg W1sgIiRDQyIgPT0gKiJnY2MiKiBdXTsgdGhlbgotICAgICRtaW5ndyBwYWNtYW4gLVMgLS1ub2Nv bmZpcm0gLS1uZWVkZWQgXAotICAgICAgICBhdXRvdG9vbHMgXAotICAgICAgICBnaXQgXAotICAg ICAgICBtaW5ndy13NjQtJHttaW5nd19nY2NfcGFja2FnZV9hcmNofS1tYWtlIFwKLQkgICAgbWlu Z3ctdzY0LSR7bWluZ3dfZ2NjX3BhY2thZ2VfYXJjaH0tZ2NjIFwKLQkgICAgbWluZ3ctdzY0LSR7 bWluZ3dfZ2NjX3BhY2thZ2VfYXJjaH0tYmludXRpbHMKLSAgICBidWlsZF9lbnY9JG1pbmd3Ci1l bGlmIFtbICIkQ0MiID09ICoiY2wiKiBdXTsgdGhlbgotICAgICRtaW5ndyBwYWNtYW4gLVMgLS1u b2NvbmZpcm0gLS1uZWVkZWQgXAotICAgICAgICBhdXRvdG9vbHMgXAotCSAgICBnaXQgXAotCSAg ICBtaW5ndy13NjQtJHttaW5nd19nY2NfcGFja2FnZV9hcmNofS1tYWtlIFwKLQkgICAgbWluZ3ct dzY0LSR7bWluZ3dfZ2NjX3BhY2thZ2VfYXJjaH0tYmludXRpbHMKLQotICAgICMgSW4gb3JkZXIg dG8gdXNlIE1TVkMgY29tcGlsZXIgKGNsLmV4ZSksIHdlIG5lZWQgdG8gY29ycmVjdGx5IHNldCBz b21lIGVudmlyb25tZW50Ci0gICAgIyB2YXJpYWJsZXMsIG5hbWVseSBQQVRILCBJTkNMVURFLCBM SUIgYW5kIExJQlBBVEguIFRoZSBjb3JyZWN0IHZhbHVlcyBvZiB0aGVzZQotICAgICMgdmFyaWFi bGVzIGFyZSBzZXQgYnkgYSBiYXRjaCBzY3JpcHQgInZjdmFyc2FsbC5iYXQiLiBUaGUgY29kZSBi ZWxvdyBnZW5lcmF0ZXMKLSAgICAjIGEgYmF0Y2ggc2NyaXB0IHRoYXQgY2FsbHMgInZjdmFyc2Fs bC5iYXQiIGFuZCBwcmludHMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAgICAjCi0gICAg IyBUaGVuLCB0aG9zZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHRyYW5zZm9ybWVkIGZyb20g Y21kIHRvIGJhc2ggZm9ybWF0IGFuZCBwdXQKLSAgICAjIGludG8gYSBzY3JpcHQgJGFwcGx5X3Zz ZW52LiBJZiBjbC5leGUgbmVlZHMgdG8gYmUgdXNlZCBmcm9tIGJhc2gsIG9uZSBjYW4KLSAgICAj ICdzb3VyY2UgJGFwcGx5X3ZzZW52JyBhbmQgaXQgd2lsbCBhcHBseSB0aGUgZW52aXJvbm1lbnQg dmFyaWFibGVzIG5lZWRlZCBmb3IgY2wuZXhlCi0gICAgIyB0byBiZSBsb2NhdGVkIGFuZCBmdW5j dGlvbiBjb3JyZWN0bHkuCi0gICAgIwotICAgICMgQXQgbGFzdCwgYSBmdW5jdGlvbiAibWluZ3df d2l0aF9tc3ZjX3ZhcnMiIGlzIGdlbmVyYXRlZCB3aGljaCBmb3J3YXJkcyB1c2VyIGlucHV0Ci0g ICAgIyBpbnRvIGEgY29ycmVjdCBtaW5ndyAoMzIgb3IgNjQpIHN1YnNoZWxsIHRoYXQgYXV0b21h dGljYWxseSBwZXJmb3JtcyAnc291cmNlICRhcHBseV92c2VudicsCi0gICAgIyBtYWtpbmcgaXQg cG9zc2libGUgZm9yIGF1dG90b29scyB0byBkaXNjb3ZlciBhbmQgdXNlIGNsLmV4ZS4KLSAgICB2 Y3ZhcnNhbGw9InZjdmFyc2FsbC50bXAuYmF0IgotICAgIGVjaG8gIkBlY2hvIG9mZiIgPiAkdmN2 YXJzYWxsCi0gICAgZWNobyAiY2FsbCBcImM6XFByb2dyYW0gRmlsZXMgKHg4NilcTWljcm9zb2Z0 IFZpc3VhbCBTdHVkaW8gMTQuMFxWQ1xcXHZjdmFyc2FsbC5iYXRcIiAkVVNFX01TVkMiID4+ICR2 Y3ZhcnNhbGwKLSAgICBlY2hvICJzZXQiID4+ICR2Y3ZhcnNhbGwKLQotICAgIGFwcGx5X3ZzZW52 PSIuL2FwcGx5X3ZzZW52LnNoIgotICAgIGNtZCAvL0MgJHZjdmFyc2FsbCB8IGdyZXAgLUUgIl5Q QVRIPSIgfCBzZWQgLW4gLWUgJ3MvXCguKlwpPVwoLipcKS9leHBvcnQgXDE9JFBBVEg6IlwyIi9n JyBcCi0gICAgICAgIC1lICdzL1woW2EtekEtWl1cKTpbXFxcL10vXC9cMVwvL2cnIFwKLSAgICAg ICAgLWUgJ3MvXFwvXC8vZycgXAotICAgICAgICAtZSAncy87XC8vOlwvL2dwJyA+ICRhcHBseV92 c2VudgotICAgIGNtZCAvL0MgJHZjdmFyc2FsbCB8IGdyZXAgLUUgIl4oSU5DTFVERXxMSUJ8TElC UEFUSCk9IiB8IHNlZCAtbiAtZSAncy9cKC4qXCk9XCguKlwpL2V4cG9ydCBcMT0iXDIiL2dwJyA+ PiAkYXBwbHlfdnNlbnYKLQotICAgIGNhdCAkYXBwbHlfdnNlbnYKLSAgICBtaW5nd193aXRoX21z dmNfdmFycygpIHsgJG1zeXNfc2hlbGxfY21kIC1kZWZ0ZXJtIC1uby1zdGFydCAtJG1pbmd3IC1j ICJzb3VyY2UgJGFwcGx5X3ZzZW52ICYmICIiJCoiOyB9Ci0gICAgYnVpbGRfZW52PW1pbmd3X3dp dGhfbXN2Y192YXJzCi0KLSAgICBybSAtZiAkdmN2YXJzYWxsCi1lbHNlCi0gICAgZWNobyAiVW5r bm93biBDIGNvbXBpbGVyOiAkQ0MiCi0gICAgZXhpdCAxCi1maQotCi1lY2hvICJCdWlsZCBlbnZp cm9ubWVudCBmdW5jdGlvbjogJGJ1aWxkX2VudiIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zY3JpcHRzL3dpbmRvd3MvYmVmb3JlX3NjcmlwdC5z aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvd2luZG93 cy9iZWZvcmVfc2NyaXB0LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDMwYWJh Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Nj cmlwdHMvd2luZG93cy9iZWZvcmVfc2NyaXB0LnNoCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAs MCBAQAotIyEvYmluL2Jhc2gKLQotc2V0IC1lCi0KLWlmIFtbICIkVFJBVklTX09TX05BTUUiICE9 ICJ3aW5kb3dzIiBdXTsgdGhlbgotICAgIGVjaG8gIkluY29ycmVjdCBcJFRSQVZJU19PU19OQU1F OiBleHBlY3RlZCB3aW5kb3dzLCBnb3QgJFRSQVZJU19PU19OQU1FIgotICAgIGV4aXQgMQotZmkK LQotJGJ1aWxkX2VudiBhdXRvY29uZgotJGJ1aWxkX2VudiAuL2NvbmZpZ3VyZSAkQ09ORklHVVJF X0ZMQUdTCi0jIG1pbmd3MzItbWFrZSBzaW1wbHkgbWVhbnMgIm1ha2UiLCB1bnJlbGF0ZWQgdG8g bWluZ3czMiB2cyBtaW5ndzY0LgotIyBTaW1wbHkgZGlzcmVnYXJkIHRoZSBwcmVmaXggYW5kIHRy ZWF0IGlzIGFzICJtYWtlIi4KLSRidWlsZF9lbnYgbWluZ3czMi1tYWtlIC1qMwotIyBBdCB0aGUg bW9tZW50LCBpdCdzIGltcG9zc2libGUgdG8gbWFrZSB0ZXN0cyBpbiBwYXJhbGxlbCwKLSMgc2Vl bWluZ2x5IGR1ZSB0byBjb25jdXJyZW50IHdyaXRlcyB0byAnLnBkYicgZmlsZS4gSSBkb24ndCBr bm93IHdoeQotIyB0aGF0IGhhcHBlbnMsIGJlY2F1c2Ugd2UgZXhwbGljaXRseSBzdXBwbHkgJy9G cycgdG8gdGhlIGNvbXBpbGVyLgotIyBVbnRpbCB3ZSBmaWd1cmUgb3V0IGhvdyB0byBmaXggaXQs IHdlIHNob3VsZCBidWlsZCB0ZXN0cyBzZXF1ZW50aWFsbHkKLSMgb24gV2luZG93cy4KLSRidWls ZF9lbnYgbWluZ3czMi1tYWtlIHRlc3RzCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy93aW5kb3dzL3NjcmlwdC5zaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NjcmlwdHMvd2luZG93cy9zY3JpcHQuc2gK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMjdmNzAuLjAwMDAwMDAKLS0tIGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc2NyaXB0cy93aW5kb3dzL3Njcmlw dC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0KLXNldCAt ZQotCi1pZiBbWyAiJFRSQVZJU19PU19OQU1FIiAhPSAid2luZG93cyIgXV07IHRoZW4KLSAgICBl Y2hvICJJbmNvcnJlY3QgXCRUUkFWSVNfT1NfTkFNRTogZXhwZWN0ZWQgd2luZG93cywgZ290ICRU UkFWSVNfT1NfTkFNRSIKLSAgICBleGl0IDEKLWZpCi0KLSRidWlsZF9lbnYgbWluZ3czMi1tYWtl IC1rIGNoZWNrCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvc3JjL2FyZW5hLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9zcmMvYXJlbmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU3YjI3Yy4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvYXJl bmEuYworKysgL2Rldi9udWxsCkBAIC0xLDE4OTEgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2Fzc2VydC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2RlY2F5LmgiCi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZWhvb2tzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvZXh0ZW50X2Rzcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4dGVu dF9tbWFwLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuLmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9y dHJlZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NhZmV0eV9jaGVjay5oIgotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKLQotSkVNQUxMT0NfRElBR05PU1RJQ19E SVNBQkxFX1NQVVJJT1VTCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEYXRhLiAqLwot Ci0vKgotICogRGVmaW5lIG5hbWVzIGZvciBib3RoIHVuaW5pbml0aWFsaXplZCBhbmQgaW5pdGlh bGl6ZWQgcGhhc2VzLCBzbyB0aGF0Ci0gKiBvcHRpb25zIGFuZCBtYWxsY3RsIHByb2Nlc3Npbmcg YXJlIHN0cmFpZ2h0Zm9yd2FyZC4KLSAqLwotY29uc3QgY2hhciAqcGVyY3B1X2FyZW5hX21vZGVf bmFtZXNbXSA9IHsKLQkicGVyY3B1IiwKLQkicGh5Y3B1IiwKLQkiZGlzYWJsZWQiLAotCSJwZXJj cHUiLAotCSJwaHljcHUiCi19OwotcGVyY3B1X2FyZW5hX21vZGVfdCBvcHRfcGVyY3B1X2FyZW5h ID0gUEVSQ1BVX0FSRU5BX0RFRkFVTFQ7Ci0KLXNzaXplX3Qgb3B0X2RpcnR5X2RlY2F5X21zID0g RElSVFlfREVDQVlfTVNfREVGQVVMVDsKLXNzaXplX3Qgb3B0X211enp5X2RlY2F5X21zID0gTVVa WllfREVDQVlfTVNfREVGQVVMVDsKLQotc3RhdGljIGF0b21pY196ZF90IGRpcnR5X2RlY2F5X21z X2RlZmF1bHQ7Ci1zdGF0aWMgYXRvbWljX3pkX3QgbXV6enlfZGVjYXlfbXNfZGVmYXVsdDsKLQot ZW1hcF90IGFyZW5hX2VtYXBfZ2xvYmFsOwotcGFfY2VudHJhbF90IGFyZW5hX3BhX2NlbnRyYWxf Z2xvYmFsOwotCi1kaXZfaW5mb190IGFyZW5hX2JpbmluZF9kaXZfaW5mb1tTQ19OQklOU107Ci0K LXNpemVfdCBvcHRfb3ZlcnNpemVfdGhyZXNob2xkID0gT1ZFUlNJWkVfVEhSRVNIT0xEX0RFRkFV TFQ7Ci1zaXplX3Qgb3ZlcnNpemVfdGhyZXNob2xkID0gT1ZFUlNJWkVfVEhSRVNIT0xEX0RFRkFV TFQ7Ci0KLXVpbnQzMl90IGFyZW5hX2Jpbl9vZmZzZXRzW1NDX05CSU5TXTsKLXN0YXRpYyB1bnNp Z25lZCBuYmluc190b3RhbDsKLQotc3RhdGljIHVuc2lnbmVkIGh1Z2VfYXJlbmFfaW5kOwotCi1j b25zdCBhcmVuYV9jb25maWdfdCBhcmVuYV9jb25maWdfZGVmYXVsdCA9IHsKLQkvKiAuZXh0ZW50 X2hvb2tzID0gKi8gKGV4dGVudF9ob29rc190ICopJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29r cywKLQkvKiAubWV0YWRhdGFfdXNlX2hvb2tzID0gKi8gdHJ1ZSwKLX07Ci0KLS8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0vKgotICogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RhdGljIGZ1bmN0 aW9ucyB0aGF0IGFyZSByZWZlcmVuY2VkIHByaW9yIHRvCi0gKiBkZWZpbml0aW9uLgotICovCi0K LXN0YXRpYyBib29sIGFyZW5hX2RlY2F5X2RpcnR5KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJl bmEsCi0gICAgYm9vbCBpc19iYWNrZ3JvdW5kX3RocmVhZCwgYm9vbCBhbGwpOwotc3RhdGljIHZv aWQgYXJlbmFfYmluX2xvd2VyX3NsYWIodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRh dGFfdCAqc2xhYiwKLSAgICBiaW5fdCAqYmluKTsKLXN0YXRpYyB2b2lkCi1hcmVuYV9tYXliZV9k b19kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGRlY2F5X3QgKmRl Y2F5LAotICAgIHNpemVfdCBucGFnZXNfbmV3KTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LQotdm9pZAotYXJlbmFfYmFzaWNfc3RhdHNfbWVyZ2UodHNkbl90ICp0c2RuLCBhcmVuYV90ICph cmVuYSwgdW5zaWduZWQgKm50aHJlYWRzLAotICAgIGNvbnN0IGNoYXIgKipkc3MsIHNzaXplX3Qg KmRpcnR5X2RlY2F5X21zLCBzc2l6ZV90ICptdXp6eV9kZWNheV9tcywKLSAgICBzaXplX3QgKm5h Y3RpdmUsIHNpemVfdCAqbmRpcnR5LCBzaXplX3QgKm5tdXp6eSkgewotCSpudGhyZWFkcyArPSBh cmVuYV9udGhyZWFkc19nZXQoYXJlbmEsIGZhbHNlKTsKLQkqZHNzID0gZHNzX3ByZWNfbmFtZXNb YXJlbmFfZHNzX3ByZWNfZ2V0KGFyZW5hKV07Ci0JKmRpcnR5X2RlY2F5X21zID0gYXJlbmFfZGVj YXlfbXNfZ2V0KGFyZW5hLCBleHRlbnRfc3RhdGVfZGlydHkpOwotCSptdXp6eV9kZWNheV9tcyA9 IGFyZW5hX2RlY2F5X21zX2dldChhcmVuYSwgZXh0ZW50X3N0YXRlX211enp5KTsKLQlwYV9zaGFy ZF9iYXNpY19zdGF0c19tZXJnZSgmYXJlbmEtPnBhX3NoYXJkLCBuYWN0aXZlLCBuZGlydHksIG5t dXp6eSk7Ci19Ci0KLXZvaWQKLWFyZW5hX3N0YXRzX21lcmdlKHRzZG5fdCAqdHNkbiwgYXJlbmFf dCAqYXJlbmEsIHVuc2lnbmVkICpudGhyZWFkcywKLSAgICBjb25zdCBjaGFyICoqZHNzLCBzc2l6 ZV90ICpkaXJ0eV9kZWNheV9tcywgc3NpemVfdCAqbXV6enlfZGVjYXlfbXMsCi0gICAgc2l6ZV90 ICpuYWN0aXZlLCBzaXplX3QgKm5kaXJ0eSwgc2l6ZV90ICpubXV6enksIGFyZW5hX3N0YXRzX3Qg KmFzdGF0cywKLSAgICBiaW5fc3RhdHNfZGF0YV90ICpic3RhdHMsIGFyZW5hX3N0YXRzX2xhcmdl X3QgKmxzdGF0cywKLSAgICBwYWNfZXN0YXRzX3QgKmVzdGF0cywgaHBhX3NoYXJkX3N0YXRzX3Qg KmhwYXN0YXRzLCBzZWNfc3RhdHNfdCAqc2Vjc3RhdHMpIHsKLQljYXNzZXJ0KGNvbmZpZ19zdGF0 cyk7Ci0KLQlhcmVuYV9iYXNpY19zdGF0c19tZXJnZSh0c2RuLCBhcmVuYSwgbnRocmVhZHMsIGRz cywgZGlydHlfZGVjYXlfbXMsCi0JICAgIG11enp5X2RlY2F5X21zLCBuYWN0aXZlLCBuZGlydHks IG5tdXp6eSk7Ci0KLQlzaXplX3QgYmFzZV9hbGxvY2F0ZWQsIGJhc2VfcmVzaWRlbnQsIGJhc2Vf bWFwcGVkLCBtZXRhZGF0YV90aHA7Ci0JYmFzZV9zdGF0c19nZXQodHNkbiwgYXJlbmEtPmJhc2Us ICZiYXNlX2FsbG9jYXRlZCwgJmJhc2VfcmVzaWRlbnQsCi0JICAgICZiYXNlX21hcHBlZCwgJm1l dGFkYXRhX3RocCk7Ci0Jc2l6ZV90IHBhY19tYXBwZWRfc3ogPSBwYWNfbWFwcGVkKCZhcmVuYS0+ cGFfc2hhcmQucGFjKTsKLQlhc3RhdHMtPm1hcHBlZCArPSBiYXNlX21hcHBlZCArIHBhY19tYXBw ZWRfc3o7Ci0JYXN0YXRzLT5yZXNpZGVudCArPSBiYXNlX3Jlc2lkZW50OwotCi0JTE9DS0VESU5U X01UWF9MT0NLKHRzZG4sIGFyZW5hLT5zdGF0cy5tdHgpOwotCi0JYXN0YXRzLT5iYXNlICs9IGJh c2VfYWxsb2NhdGVkOwotCWF0b21pY19sb2FkX2FkZF9zdG9yZV96dSgmYXN0YXRzLT5pbnRlcm5h bCwgYXJlbmFfaW50ZXJuYWxfZ2V0KGFyZW5hKSk7Ci0JYXN0YXRzLT5tZXRhZGF0YV90aHAgKz0g bWV0YWRhdGFfdGhwOwotCi0JZm9yIChzemluZF90IGkgPSAwOyBpIDwgU0NfTlNJWkVTIC0gU0Nf TkJJTlM7IGkrKykgewotCQl1aW50NjRfdCBubWFsbG9jID0gbG9ja2VkX3JlYWRfdTY0KHRzZG4s Ci0JCSAgICBMT0NLRURJTlRfTVRYKGFyZW5hLT5zdGF0cy5tdHgpLAotCQkgICAgJmFyZW5hLT5z dGF0cy5sc3RhdHNbaV0ubm1hbGxvYyk7Ci0JCWxvY2tlZF9pbmNfdTY0X3Vuc3luY2hyb25pemVk KCZsc3RhdHNbaV0ubm1hbGxvYywgbm1hbGxvYyk7Ci0JCWFzdGF0cy0+bm1hbGxvY19sYXJnZSAr PSBubWFsbG9jOwotCi0JCXVpbnQ2NF90IG5kYWxsb2MgPSBsb2NrZWRfcmVhZF91NjQodHNkbiwK LQkJICAgIExPQ0tFRElOVF9NVFgoYXJlbmEtPnN0YXRzLm10eCksCi0JCSAgICAmYXJlbmEtPnN0 YXRzLmxzdGF0c1tpXS5uZGFsbG9jKTsKLQkJbG9ja2VkX2luY191NjRfdW5zeW5jaHJvbml6ZWQo JmxzdGF0c1tpXS5uZGFsbG9jLCBuZGFsbG9jKTsKLQkJYXN0YXRzLT5uZGFsbG9jX2xhcmdlICs9 IG5kYWxsb2M7Ci0KLQkJdWludDY0X3QgbnJlcXVlc3RzID0gbG9ja2VkX3JlYWRfdTY0KHRzZG4s Ci0JCSAgICBMT0NLRURJTlRfTVRYKGFyZW5hLT5zdGF0cy5tdHgpLAotCQkgICAgJmFyZW5hLT5z dGF0cy5sc3RhdHNbaV0ubnJlcXVlc3RzKTsKLQkJbG9ja2VkX2luY191NjRfdW5zeW5jaHJvbml6 ZWQoJmxzdGF0c1tpXS5ucmVxdWVzdHMsCi0JCSAgICBubWFsbG9jICsgbnJlcXVlc3RzKTsKLQkJ YXN0YXRzLT5ucmVxdWVzdHNfbGFyZ2UgKz0gbm1hbGxvYyArIG5yZXF1ZXN0czsKLQotCQkvKiBu ZmlsbCA9PSBubWFsbG9jIGZvciBsYXJnZSBjdXJyZW50bHkuICovCi0JCWxvY2tlZF9pbmNfdTY0 X3Vuc3luY2hyb25pemVkKCZsc3RhdHNbaV0ubmZpbGxzLCBubWFsbG9jKTsKLQkJYXN0YXRzLT5u ZmlsbHNfbGFyZ2UgKz0gbm1hbGxvYzsKLQotCQl1aW50NjRfdCBuZmx1c2ggPSBsb2NrZWRfcmVh ZF91NjQodHNkbiwKLQkJICAgIExPQ0tFRElOVF9NVFgoYXJlbmEtPnN0YXRzLm10eCksCi0JCSAg ICAmYXJlbmEtPnN0YXRzLmxzdGF0c1tpXS5uZmx1c2hlcyk7Ci0JCWxvY2tlZF9pbmNfdTY0X3Vu c3luY2hyb25pemVkKCZsc3RhdHNbaV0ubmZsdXNoZXMsIG5mbHVzaCk7Ci0JCWFzdGF0cy0+bmZs dXNoZXNfbGFyZ2UgKz0gbmZsdXNoOwotCi0JCWFzc2VydChubWFsbG9jID49IG5kYWxsb2MpOwot CQlhc3NlcnQobm1hbGxvYyAtIG5kYWxsb2MgPD0gU0laRV9UX01BWCk7Ci0JCXNpemVfdCBjdXJs ZXh0ZW50cyA9IChzaXplX3QpKG5tYWxsb2MgLSBuZGFsbG9jKTsKLQkJbHN0YXRzW2ldLmN1cmxl eHRlbnRzICs9IGN1cmxleHRlbnRzOwotCQlhc3RhdHMtPmFsbG9jYXRlZF9sYXJnZSArPQotCQkg ICAgY3VybGV4dGVudHMgKiBzel9pbmRleDJzaXplKFNDX05CSU5TICsgaSk7Ci0JfQotCi0JcGFf c2hhcmRfc3RhdHNfbWVyZ2UodHNkbiwgJmFyZW5hLT5wYV9zaGFyZCwgJmFzdGF0cy0+cGFfc2hh cmRfc3RhdHMsCi0JICAgIGVzdGF0cywgaHBhc3RhdHMsIHNlY3N0YXRzLCAmYXN0YXRzLT5yZXNp ZGVudCk7Ci0KLQlMT0NLRURJTlRfTVRYX1VOTE9DSyh0c2RuLCBhcmVuYS0+c3RhdHMubXR4KTsK LQotCS8qIEN1cnJlbnRseSBjYWNoZWQgYnl0ZXMgYW5kIHNhbml0aXplci1zdGFzaGVkIGJ5dGVz IGluIHRjYWNoZS4gKi8KLQlhc3RhdHMtPnRjYWNoZV9ieXRlcyA9IDA7Ci0JYXN0YXRzLT50Y2Fj aGVfc3Rhc2hlZF9ieXRlcyA9IDA7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmFyZW5hLT50 Y2FjaGVfcWxfbXR4KTsKLQljYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl90ICpkZXNjcmlwdG9y OwotCXFsX2ZvcmVhY2goZGVzY3JpcHRvciwgJmFyZW5hLT5jYWNoZV9iaW5fYXJyYXlfZGVzY3Jp cHRvcl9xbCwgbGluaykgewotCQlmb3IgKHN6aW5kX3QgaSA9IDA7IGkgPCBuaGJpbnM7IGkrKykg ewotCQkJY2FjaGVfYmluX3QgKmNhY2hlX2JpbiA9ICZkZXNjcmlwdG9yLT5iaW5zW2ldOwotCQkJ Y2FjaGVfYmluX3N6X3QgbmNhY2hlZCwgbnN0YXNoZWQ7Ci0JCQljYWNoZV9iaW5fbml0ZW1zX2dl dF9yZW1vdGUoY2FjaGVfYmluLAotCQkJICAgICZ0Y2FjaGVfYmluX2luZm9baV0sICZuY2FjaGVk LCAmbnN0YXNoZWQpOwotCi0JCQlhc3RhdHMtPnRjYWNoZV9ieXRlcyArPSBuY2FjaGVkICogc3pf aW5kZXgyc2l6ZShpKTsKLQkJCWFzdGF0cy0+dGNhY2hlX3N0YXNoZWRfYnl0ZXMgKz0gbnN0YXNo ZWQgKgotCQkJICAgIHN6X2luZGV4MnNpemUoaSk7Ci0JCX0KLQl9Ci0JbWFsbG9jX211dGV4X3By b2ZfcmVhZCh0c2RuLAotCSAgICAmYXN0YXRzLT5tdXRleF9wcm9mX2RhdGFbYXJlbmFfcHJvZl9t dXRleF90Y2FjaGVfbGlzdF0sCi0JICAgICZhcmVuYS0+dGNhY2hlX3FsX210eCk7Ci0JbWFsbG9j X211dGV4X3VubG9jayh0c2RuLCAmYXJlbmEtPnRjYWNoZV9xbF9tdHgpOwotCi0jZGVmaW5lIFJF QURfQVJFTkFfTVVURVhfUFJPRl9EQVRBKG10eCwgaW5kKQkJCQlcCi0gICAgbWFsbG9jX211dGV4 X2xvY2sodHNkbiwgJmFyZW5hLT5tdHgpOwkJCQlcCi0gICAgbWFsbG9jX211dGV4X3Byb2ZfcmVh ZCh0c2RuLCAmYXN0YXRzLT5tdXRleF9wcm9mX2RhdGFbaW5kXSwJCVwKLSAgICAgICAgJmFyZW5h LT5tdHgpOwkJCQkJCQlcCi0gICAgbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYXJlbmEtPm10 eCk7Ci0KLQkvKiBHYXRoZXIgcGVyIGFyZW5hIG11dGV4IHByb2ZpbGluZyBkYXRhLiAqLwotCVJF QURfQVJFTkFfTVVURVhfUFJPRl9EQVRBKGxhcmdlX210eCwgYXJlbmFfcHJvZl9tdXRleF9sYXJn ZSk7Ci0JUkVBRF9BUkVOQV9NVVRFWF9QUk9GX0RBVEEoYmFzZS0+bXR4LAotCSAgICBhcmVuYV9w cm9mX211dGV4X2Jhc2UpOwotI3VuZGVmIFJFQURfQVJFTkFfTVVURVhfUFJPRl9EQVRBCi0JcGFf c2hhcmRfbXR4X3N0YXRzX3JlYWQodHNkbiwgJmFyZW5hLT5wYV9zaGFyZCwKLQkgICAgYXN0YXRz LT5tdXRleF9wcm9mX2RhdGEpOwotCi0JbnN0aW1lX2NvcHkoJmFzdGF0cy0+dXB0aW1lLCAmYXJl bmEtPmNyZWF0ZV90aW1lKTsKLQluc3RpbWVfdXBkYXRlKCZhc3RhdHMtPnVwdGltZSk7Ci0JbnN0 aW1lX3N1YnRyYWN0KCZhc3RhdHMtPnVwdGltZSwgJmFyZW5hLT5jcmVhdGVfdGltZSk7Ci0KLQlm b3IgKHN6aW5kX3QgaSA9IDA7IGkgPCBTQ19OQklOUzsgaSsrKSB7Ci0JCWZvciAodW5zaWduZWQg aiA9IDA7IGogPCBiaW5faW5mb3NbaV0ubl9zaGFyZHM7IGorKykgewotCQkJYmluX3N0YXRzX21l cmdlKHRzZG4sICZic3RhdHNbaV0sCi0JCQkgICAgYXJlbmFfZ2V0X2JpbihhcmVuYSwgaSwgaikp OwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFfYmFja2dyb3VuZF90aHJlYWRfaW5h Y3Rpdml0eV9jaGVjayh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLAotICAgIGJvb2wgaXNf YmFja2dyb3VuZF90aHJlYWQpIHsKLQlpZiAoIWJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSB8 fCBpc19iYWNrZ3JvdW5kX3RocmVhZCkgewotCQlyZXR1cm47Ci0JfQotCWJhY2tncm91bmRfdGhy ZWFkX2luZm9fdCAqaW5mbyA9Ci0JICAgIGFyZW5hX2JhY2tncm91bmRfdGhyZWFkX2luZm9fZ2V0 KGFyZW5hKTsKLQlpZiAoYmFja2dyb3VuZF90aHJlYWRfaW5kZWZpbml0ZV9zbGVlcChpbmZvKSkg ewotCQlhcmVuYV9tYXliZV9kb19kZWZlcnJlZF93b3JrKHRzZG4sIGFyZW5hLAotCQkgICAgJmFy ZW5hLT5wYV9zaGFyZC5wYWMuZGVjYXlfZGlydHksIDApOwotCX0KLX0KLQotLyoKLSAqIFJlYWN0 IHRvIGRlZmVycmVkIHdvcmsgZ2VuZXJhdGVkIGJ5IGEgUEFJIGZ1bmN0aW9uLgotICovCi12b2lk IGFyZW5hX2hhbmRsZV9kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEp IHsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0 c2RuKSwKLQkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOwotCi0JaWYgKGRlY2F5X2ltbWVkaWF0 ZWx5KCZhcmVuYS0+cGFfc2hhcmQucGFjLmRlY2F5X2RpcnR5KSkgewotCQlhcmVuYV9kZWNheV9k aXJ0eSh0c2RuLCBhcmVuYSwgZmFsc2UsIHRydWUpOwotCX0KLQlhcmVuYV9iYWNrZ3JvdW5kX3Ro cmVhZF9pbmFjdGl2aXR5X2NoZWNrKHRzZG4sIGFyZW5hLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2 b2lkICoKLWFyZW5hX3NsYWJfcmVnX2FsbG9jKGVkYXRhX3QgKnNsYWIsIGNvbnN0IGJpbl9pbmZv X3QgKmJpbl9pbmZvKSB7Ci0Jdm9pZCAqcmV0OwotCXNsYWJfZGF0YV90ICpzbGFiX2RhdGEgPSBl ZGF0YV9zbGFiX2RhdGFfZ2V0KHNsYWIpOwotCXNpemVfdCByZWdpbmQ7Ci0KLQlhc3NlcnQoZWRh dGFfbmZyZWVfZ2V0KHNsYWIpID4gMCk7Ci0JYXNzZXJ0KCFiaXRtYXBfZnVsbChzbGFiX2RhdGEt PmJpdG1hcCwgJmJpbl9pbmZvLT5iaXRtYXBfaW5mbykpOwotCi0JcmVnaW5kID0gYml0bWFwX3Nm dShzbGFiX2RhdGEtPmJpdG1hcCwgJmJpbl9pbmZvLT5iaXRtYXBfaW5mbyk7Ci0JcmV0ID0gKHZv aWQgKikoKHVpbnRwdHJfdCllZGF0YV9hZGRyX2dldChzbGFiKSArCi0JICAgICh1aW50cHRyX3Qp KGJpbl9pbmZvLT5yZWdfc2l6ZSAqIHJlZ2luZCkpOwotCWVkYXRhX25mcmVlX2RlYyhzbGFiKTsK LQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFfc2xhYl9yZWdfYWxsb2NfYmF0 Y2goZWRhdGFfdCAqc2xhYiwgY29uc3QgYmluX2luZm9fdCAqYmluX2luZm8sCi0JCQkgICB1bnNp Z25lZCBjbnQsIHZvaWQqKiBwdHJzKSB7Ci0Jc2xhYl9kYXRhX3QgKnNsYWJfZGF0YSA9IGVkYXRh X3NsYWJfZGF0YV9nZXQoc2xhYik7Ci0KLQlhc3NlcnQoZWRhdGFfbmZyZWVfZ2V0KHNsYWIpID49 IGNudCk7Ci0JYXNzZXJ0KCFiaXRtYXBfZnVsbChzbGFiX2RhdGEtPmJpdG1hcCwgJmJpbl9pbmZv LT5iaXRtYXBfaW5mbykpOwotCi0jaWYgKCEgZGVmaW5lZCBKRU1BTExPQ19JTlRFUk5BTF9QT1BD T1VOVEwpIHx8IChkZWZpbmVkIEJJVE1BUF9VU0VfVFJFRSkKLQlmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgY250OyBpKyspIHsKLQkJc2l6ZV90IHJlZ2luZCA9IGJpdG1hcF9zZnUoc2xhYl9kYXRh LT5iaXRtYXAsCi0JCQkJCSAgICZiaW5faW5mby0+Yml0bWFwX2luZm8pOwotCQkqKHB0cnMgKyBp KSA9ICh2b2lkICopKCh1aW50cHRyX3QpZWRhdGFfYWRkcl9nZXQoc2xhYikgKwotCQkgICAgKHVp bnRwdHJfdCkoYmluX2luZm8tPnJlZ19zaXplICogcmVnaW5kKSk7Ci0JfQotI2Vsc2UKLQl1bnNp Z25lZCBncm91cCA9IDA7Ci0JYml0bWFwX3QgZyA9IHNsYWJfZGF0YS0+Yml0bWFwW2dyb3VwXTsK LQl1bnNpZ25lZCBpID0gMDsKLQl3aGlsZSAoaSA8IGNudCkgewotCQl3aGlsZSAoZyA9PSAwKSB7 Ci0JCQlnID0gc2xhYl9kYXRhLT5iaXRtYXBbKytncm91cF07Ci0JCX0KLQkJc2l6ZV90IHNoaWZ0 ID0gZ3JvdXAgPDwgTEdfQklUTUFQX0dST1VQX05CSVRTOwotCQlzaXplX3QgcG9wID0gcG9wY291 bnRfbHUoZyk7Ci0JCWlmIChwb3AgPiAoY250IC0gaSkpIHsKLQkJCXBvcCA9IGNudCAtIGk7Ci0J CX0KLQotCQkvKgotCQkgKiBMb2FkIGZyb20gbWVtb3J5IGxvY2F0aW9ucyBvbmx5IG9uY2UsIG91 dHNpZGUgdGhlCi0JCSAqIGhvdCBsb29wIGJlbG93LgotCQkgKi8KLQkJdWludHB0cl90IGJhc2Ug PSAodWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KHNsYWIpOwotCQl1aW50cHRyX3QgcmVnc2l6ZSA9 ICh1aW50cHRyX3QpYmluX2luZm8tPnJlZ19zaXplOwotCQl3aGlsZSAocG9wLS0pIHsKLQkJCXNp emVfdCBiaXQgPSBjZnNfbHUoJmcpOwotCQkJc2l6ZV90IHJlZ2luZCA9IHNoaWZ0ICsgYml0Owot CQkJKihwdHJzICsgaSkgPSAodm9pZCAqKShiYXNlICsgcmVnc2l6ZSAqIHJlZ2luZCk7Ci0KLQkJ CWkrKzsKLQkJfQotCQlzbGFiX2RhdGEtPmJpdG1hcFtncm91cF0gPSBnOwotCX0KLSNlbmRpZgot CWVkYXRhX25mcmVlX3N1YihzbGFiLCBjbnQpOwotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFfbGFy Z2VfbWFsbG9jX3N0YXRzX3VwZGF0ZSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBzaXpl X3QgdXNpemUpIHsKLQlzemluZF90IGluZGV4LCBoaW5kZXg7Ci0KLQljYXNzZXJ0KGNvbmZpZ19z dGF0cyk7Ci0KLQlpZiAodXNpemUgPCBTQ19MQVJHRV9NSU5DTEFTUykgewotCQl1c2l6ZSA9IFND X0xBUkdFX01JTkNMQVNTOwotCX0KLQlpbmRleCA9IHN6X3NpemUyaW5kZXgodXNpemUpOwotCWhp bmRleCA9IChpbmRleCA+PSBTQ19OQklOUykgPyBpbmRleCAtIFNDX05CSU5TIDogMDsKLQotCWxv Y2tlZF9pbmNfdTY0KHRzZG4sIExPQ0tFRElOVF9NVFgoYXJlbmEtPnN0YXRzLm10eCksCi0JICAg ICZhcmVuYS0+c3RhdHMubHN0YXRzW2hpbmRleF0ubm1hbGxvYywgMSk7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1hcmVuYV9sYXJnZV9kYWxsb2Nfc3RhdHNfdXBkYXRlKHRzZG5fdCAqdHNkbiwgYXJlbmFf dCAqYXJlbmEsIHNpemVfdCB1c2l6ZSkgewotCXN6aW5kX3QgaW5kZXgsIGhpbmRleDsKLQotCWNh c3NlcnQoY29uZmlnX3N0YXRzKTsKLQotCWlmICh1c2l6ZSA8IFNDX0xBUkdFX01JTkNMQVNTKSB7 Ci0JCXVzaXplID0gU0NfTEFSR0VfTUlOQ0xBU1M7Ci0JfQotCWluZGV4ID0gc3pfc2l6ZTJpbmRl eCh1c2l6ZSk7Ci0JaGluZGV4ID0gKGluZGV4ID49IFNDX05CSU5TKSA/IGluZGV4IC0gU0NfTkJJ TlMgOiAwOwotCi0JbG9ja2VkX2luY191NjQodHNkbiwgTE9DS0VESU5UX01UWChhcmVuYS0+c3Rh dHMubXR4KSwKLQkgICAgJmFyZW5hLT5zdGF0cy5sc3RhdHNbaGluZGV4XS5uZGFsbG9jLCAxKTsK LX0KLQotc3RhdGljIHZvaWQKLWFyZW5hX2xhcmdlX3JhbGxvY19zdGF0c191cGRhdGUodHNkbl90 ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IG9sZHVzaXplLAotICAgIHNpemVfdCB1c2l6 ZSkgewotCWFyZW5hX2xhcmdlX21hbGxvY19zdGF0c191cGRhdGUodHNkbiwgYXJlbmEsIHVzaXpl KTsKLQlhcmVuYV9sYXJnZV9kYWxsb2Nfc3RhdHNfdXBkYXRlKHRzZG4sIGFyZW5hLCBvbGR1c2l6 ZSk7Ci19Ci0KLWVkYXRhX3QgKgotYXJlbmFfZXh0ZW50X2FsbG9jX2xhcmdlKHRzZG5fdCAqdHNk biwgYXJlbmFfdCAqYXJlbmEsIHNpemVfdCB1c2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBi b29sIHplcm8pIHsKLQlib29sIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7Ci0Jc3pp bmRfdCBzemluZCA9IHN6X3NpemUyaW5kZXgodXNpemUpOwotCXNpemVfdCBlc2l6ZSA9IHVzaXpl ICsgc3pfbGFyZ2VfcGFkOwotCi0JYm9vbCBndWFyZGVkID0gc2FuX2xhcmdlX2V4dGVudF9kZWNp ZGVfZ3VhcmQodHNkbiwKLQkgICAgYXJlbmFfZ2V0X2Vob29rcyhhcmVuYSksIGVzaXplLCBhbGln bm1lbnQpOwotCWVkYXRhX3QgKmVkYXRhID0gcGFfYWxsb2ModHNkbiwgJmFyZW5hLT5wYV9zaGFy ZCwgZXNpemUsIGFsaWdubWVudCwKLQkgICAgLyogc2xhYiAqLyBmYWxzZSwgc3ppbmQsIHplcm8s IGd1YXJkZWQsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JYXNzZXJ0KGRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkID09IGZhbHNlKTsKLQotCWlmIChlZGF0YSAhPSBOVUxMKSB7Ci0JCWlmIChj b25maWdfc3RhdHMpIHsKLQkJCUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCBhcmVuYS0+c3RhdHMu bXR4KTsKLQkJCWFyZW5hX2xhcmdlX21hbGxvY19zdGF0c191cGRhdGUodHNkbiwgYXJlbmEsIHVz aXplKTsKLQkJCUxPQ0tFRElOVF9NVFhfVU5MT0NLKHRzZG4sIGFyZW5hLT5zdGF0cy5tdHgpOwot CQl9Ci0JfQotCi0JaWYgKGVkYXRhICE9IE5VTEwgJiYgc3pfbGFyZ2VfcGFkICE9IDApIHsKLQkJ YXJlbmFfY2FjaGVfb2JsaXZpb3VzX3JhbmRvbWl6ZSh0c2RuLCBhcmVuYSwgZWRhdGEsIGFsaWdu bWVudCk7Ci0JfQotCi0JcmV0dXJuIGVkYXRhOwotfQotCi12b2lkCi1hcmVuYV9leHRlbnRfZGFs bG9jX2xhcmdlX3ByZXAodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRhdGFfdCAqZWRh dGEpIHsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCBh cmVuYS0+c3RhdHMubXR4KTsKLQkJYXJlbmFfbGFyZ2VfZGFsbG9jX3N0YXRzX3VwZGF0ZSh0c2Ru LCBhcmVuYSwKLQkJICAgIGVkYXRhX3VzaXplX2dldChlZGF0YSkpOwotCQlMT0NLRURJTlRfTVRY X1VOTE9DSyh0c2RuLCBhcmVuYS0+c3RhdHMubXR4KTsKLQl9Ci19Ci0KLXZvaWQKLWFyZW5hX2V4 dGVudF9yYWxsb2NfbGFyZ2Vfc2hyaW5rKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGVk YXRhX3QgKmVkYXRhLAotICAgIHNpemVfdCBvbGR1c2l6ZSkgewotCXNpemVfdCB1c2l6ZSA9IGVk YXRhX3VzaXplX2dldChlZGF0YSk7Ci0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCUxPQ0tFRElO VF9NVFhfTE9DSyh0c2RuLCBhcmVuYS0+c3RhdHMubXR4KTsKLQkJYXJlbmFfbGFyZ2VfcmFsbG9j X3N0YXRzX3VwZGF0ZSh0c2RuLCBhcmVuYSwgb2xkdXNpemUsIHVzaXplKTsKLQkJTE9DS0VESU5U X01UWF9VTkxPQ0sodHNkbiwgYXJlbmEtPnN0YXRzLm10eCk7Ci0JfQotfQotCi12b2lkCi1hcmVu YV9leHRlbnRfcmFsbG9jX2xhcmdlX2V4cGFuZCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5h LCBlZGF0YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2xkdXNpemUpIHsKLQlzaXplX3QgdXNpemUg PSBlZGF0YV91c2l6ZV9nZXQoZWRhdGEpOwotCi0JaWYgKGNvbmZpZ19zdGF0cykgewotCQlMT0NL RURJTlRfTVRYX0xPQ0sodHNkbiwgYXJlbmEtPnN0YXRzLm10eCk7Ci0JCWFyZW5hX2xhcmdlX3Jh bGxvY19zdGF0c191cGRhdGUodHNkbiwgYXJlbmEsIG9sZHVzaXplLCB1c2l6ZSk7Ci0JCUxPQ0tF RElOVF9NVFhfVU5MT0NLKHRzZG4sIGFyZW5hLT5zdGF0cy5tdHgpOwotCX0KLX0KLQotLyoKLSAq IEluIHNpdHVhdGlvbnMgd2hlcmUgd2UncmUgbm90IGZvcmNpbmcgYSBkZWNheSAoaS5lLiBiZWNh dXNlIHRoZSB1c2VyCi0gKiBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkIGl0KSwgc2hvdWxkIHdlIHB1 cmdlIG91cnNlbHZlcywgb3Igd2FpdCBmb3IgdGhlCi0gKiBiYWNrZ3JvdW5kIHRocmVhZCB0byBn ZXQgdG8gaXQuCi0gKi8KLXN0YXRpYyBwYWNfcHVyZ2VfZWFnZXJuZXNzX3QKLWFyZW5hX2RlY2lk ZV91bmZvcmNlZF9wdXJnZV9lYWdlcm5lc3MoYm9vbCBpc19iYWNrZ3JvdW5kX3RocmVhZCkgewot CWlmIChpc19iYWNrZ3JvdW5kX3RocmVhZCkgewotCQlyZXR1cm4gUEFDX1BVUkdFX0FMV0FZUzsK LQl9IGVsc2UgaWYgKCFpc19iYWNrZ3JvdW5kX3RocmVhZCAmJiBiYWNrZ3JvdW5kX3RocmVhZF9l bmFibGVkKCkpIHsKLQkJcmV0dXJuIFBBQ19QVVJHRV9ORVZFUjsKLQl9IGVsc2UgewotCQlyZXR1 cm4gUEFDX1BVUkdFX09OX0VQT0NIX0FEVkFOQ0U7Ci0JfQotfQotCi1ib29sCi1hcmVuYV9kZWNh eV9tc19zZXQodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZXh0ZW50X3N0YXRlX3Qgc3Rh dGUsCi0gICAgc3NpemVfdCBkZWNheV9tcykgewotCXBhY19wdXJnZV9lYWdlcm5lc3NfdCBlYWdl cm5lc3MgPSBhcmVuYV9kZWNpZGVfdW5mb3JjZWRfcHVyZ2VfZWFnZXJuZXNzKAotCSAgICAvKiBp c19iYWNrZ3JvdW5kX3RocmVhZCAqLyBmYWxzZSk7Ci0JcmV0dXJuIHBhX2RlY2F5X21zX3NldCh0 c2RuLCAmYXJlbmEtPnBhX3NoYXJkLCBzdGF0ZSwgZGVjYXlfbXMsCi0JICAgIGVhZ2VybmVzcyk7 Ci19Ci0KLXNzaXplX3QKLWFyZW5hX2RlY2F5X21zX2dldChhcmVuYV90ICphcmVuYSwgZXh0ZW50 X3N0YXRlX3Qgc3RhdGUpIHsKLQlyZXR1cm4gcGFfZGVjYXlfbXNfZ2V0KCZhcmVuYS0+cGFfc2hh cmQsIHN0YXRlKTsKLX0KLQotc3RhdGljIGJvb2wKLWFyZW5hX2RlY2F5X2ltcGwodHNkbl90ICp0 c2RuLCBhcmVuYV90ICphcmVuYSwgZGVjYXlfdCAqZGVjYXksCi0gICAgcGFjX2RlY2F5X3N0YXRz X3QgKmRlY2F5X3N0YXRzLCBlY2FjaGVfdCAqZWNhY2hlLAotICAgIGJvb2wgaXNfYmFja2dyb3Vu ZF90aHJlYWQsIGJvb2wgYWxsKSB7Ci0JaWYgKGFsbCkgewotCQltYWxsb2NfbXV0ZXhfbG9jayh0 c2RuLCAmZGVjYXktPm10eCk7Ci0JCXBhY19kZWNheV9hbGwodHNkbiwgJmFyZW5hLT5wYV9zaGFy ZC5wYWMsIGRlY2F5LCBkZWNheV9zdGF0cywKLQkJICAgIGVjYWNoZSwgLyogZnVsbHlfZGVjYXkg Ki8gYWxsKTsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZGVjYXktPm10eCk7Ci0JCXJl dHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAobWFsbG9jX211dGV4X3RyeWxvY2sodHNkbiwgJmRlY2F5 LT5tdHgpKSB7Ci0JCS8qIE5vIG5lZWQgdG8gd2FpdCBpZiBhbm90aGVyIHRocmVhZCBpcyBpbiBw cm9ncmVzcy4gKi8KLQkJcmV0dXJuIHRydWU7Ci0JfQotCXBhY19wdXJnZV9lYWdlcm5lc3NfdCBl YWdlcm5lc3MgPQotCSAgICBhcmVuYV9kZWNpZGVfdW5mb3JjZWRfcHVyZ2VfZWFnZXJuZXNzKGlz X2JhY2tncm91bmRfdGhyZWFkKTsKLQlib29sIGVwb2NoX2FkdmFuY2VkID0gcGFjX21heWJlX2Rl Y2F5X3B1cmdlKHRzZG4sICZhcmVuYS0+cGFfc2hhcmQucGFjLAotCSAgICBkZWNheSwgZGVjYXlf c3RhdHMsIGVjYWNoZSwgZWFnZXJuZXNzKTsKLQlzaXplX3QgbnBhZ2VzX25ldzsKLQlpZiAoZXBv Y2hfYWR2YW5jZWQpIHsKLQkJLyogQmFja2xvZyBpcyB1cGRhdGVkIG9uIGVwb2NoIGFkdmFuY2Uu ICovCi0JCW5wYWdlc19uZXcgPSBkZWNheV9lcG9jaF9ucGFnZXNfZGVsdGEoZGVjYXkpOwotCX0K LQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZkZWNheS0+bXR4KTsKLQotCWlmIChoYXZlX2Jh Y2tncm91bmRfdGhyZWFkICYmIGJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSAmJgotCSAgICBl cG9jaF9hZHZhbmNlZCAmJiAhaXNfYmFja2dyb3VuZF90aHJlYWQpIHsKLQkJYXJlbmFfbWF5YmVf ZG9fZGVmZXJyZWRfd29yayh0c2RuLCBhcmVuYSwgZGVjYXksIG5wYWdlc19uZXcpOwotCX0KLQot CXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wKLWFyZW5hX2RlY2F5X2RpcnR5KHRzZG5f dCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGJvb2wgaXNfYmFja2dyb3VuZF90aHJlYWQsCi0gICAg Ym9vbCBhbGwpIHsKLQlyZXR1cm4gYXJlbmFfZGVjYXlfaW1wbCh0c2RuLCBhcmVuYSwgJmFyZW5h LT5wYV9zaGFyZC5wYWMuZGVjYXlfZGlydHksCi0JICAgICZhcmVuYS0+cGFfc2hhcmQucGFjLnN0 YXRzLT5kZWNheV9kaXJ0eSwKLQkgICAgJmFyZW5hLT5wYV9zaGFyZC5wYWMuZWNhY2hlX2RpcnR5 LCBpc19iYWNrZ3JvdW5kX3RocmVhZCwgYWxsKTsKLX0KLQotc3RhdGljIGJvb2wKLWFyZW5hX2Rl Y2F5X211enp5KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGJvb2wgaXNfYmFja2dyb3Vu ZF90aHJlYWQsCi0gICAgYm9vbCBhbGwpIHsKLQlpZiAocGFfc2hhcmRfZG9udF9kZWNheV9tdXp6 eSgmYXJlbmEtPnBhX3NoYXJkKSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiBhcmVu YV9kZWNheV9pbXBsKHRzZG4sIGFyZW5hLCAmYXJlbmEtPnBhX3NoYXJkLnBhYy5kZWNheV9tdXp6 eSwKLQkgICAgJmFyZW5hLT5wYV9zaGFyZC5wYWMuc3RhdHMtPmRlY2F5X211enp5LAotCSAgICAm YXJlbmEtPnBhX3NoYXJkLnBhYy5lY2FjaGVfbXV6enksIGlzX2JhY2tncm91bmRfdGhyZWFkLCBh bGwpOwotfQotCi12b2lkCi1hcmVuYV9kZWNheSh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5h LCBib29sIGlzX2JhY2tncm91bmRfdGhyZWFkLCBib29sIGFsbCkgewotCWlmIChhbGwpIHsKLQkJ LyoKLQkJICogV2Ugc2hvdWxkIHRha2UgYSBwdXJnZSBvZiAiYWxsIiB0byBtZWFuICJzYXZlIGFz IG11Y2ggbWVtb3J5Ci0JCSAqIGFzIHBvc3NpYmxlIiwgaW5jbHVkaW5nIGZsdXNoaW5nIGFueSBj YWNoZXMgKGZvciBzaXR1YXRpb25zCi0JCSAqIGxpa2UgdGhyZWFkIGRlYXRoLCBvciBtYW51YWwg cHVyZ2UgY2FsbHMpLgotCQkgKi8KLQkJc2VjX2ZsdXNoKHRzZG4sICZhcmVuYS0+cGFfc2hhcmQu aHBhX3NlYyk7Ci0JfQotCWlmIChhcmVuYV9kZWNheV9kaXJ0eSh0c2RuLCBhcmVuYSwgaXNfYmFj a2dyb3VuZF90aHJlYWQsIGFsbCkpIHsKLQkJcmV0dXJuOwotCX0KLQlhcmVuYV9kZWNheV9tdXp6 eSh0c2RuLCBhcmVuYSwgaXNfYmFja2dyb3VuZF90aHJlYWQsIGFsbCk7Ci19Ci0KLXN0YXRpYyBi b29sCi1hcmVuYV9zaG91bGRfZGVjYXlfZWFybHkodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVu YSwgZGVjYXlfdCAqZGVjYXksCi0gICAgYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvLCBu c3RpbWVfdCAqcmVtYWluaW5nX3NsZWVwLAotICAgIHNpemVfdCBucGFnZXNfbmV3KSB7Ci0JbWFs bG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmaW5mby0+bXR4KTsKLQotCWlmIChtYWxsb2Nf bXV0ZXhfdHJ5bG9jayh0c2RuLCAmZGVjYXktPm10eCkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0K LQotCWlmICghZGVjYXlfZ3JhZHVhbGx5KGRlY2F5KSkgewotCQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZkZWNheS0+bXR4KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCW5zdGltZV9pbml0 KHJlbWFpbmluZ19zbGVlcCwgYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX3RpbWVfZ2V0KGluZm8p KTsKLQlpZiAobnN0aW1lX2NvbXBhcmUocmVtYWluaW5nX3NsZWVwLCAmZGVjYXktPmVwb2NoKSA8 PSAwKSB7Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmRlY2F5LT5tdHgpOwotCQlyZXR1 cm4gZmFsc2U7Ci0JfQotCW5zdGltZV9zdWJ0cmFjdChyZW1haW5pbmdfc2xlZXAsICZkZWNheS0+ ZXBvY2gpOwotCWlmIChucGFnZXNfbmV3ID4gMCkgewotCQl1aW50NjRfdCBucHVyZ2VfbmV3ID0g ZGVjYXlfbnBhZ2VzX3B1cmdlX2luKGRlY2F5LAotCQkgICAgcmVtYWluaW5nX3NsZWVwLCBucGFn ZXNfbmV3KTsKLQkJaW5mby0+bnBhZ2VzX3RvX3B1cmdlX25ldyArPSBucHVyZ2VfbmV3OwotCX0K LQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZkZWNheS0+bXR4KTsKLQlyZXR1cm4gaW5mby0+ bnBhZ2VzX3RvX3B1cmdlX25ldyA+Ci0JICAgIEFSRU5BX0RFRkVSUkVEX1BVUkdFX05QQUdFU19U SFJFU0hPTEQ7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiBkZWZlcnJlZCB3b3JrIG5lZWRzIHRvIGJl IGRvbmUgc29vbmVyIHRoYW4gcGxhbm5lZC4KLSAqIEZvciBkZWNheSB3ZSBtaWdodCB3YW50IHRv IHdha2UgdXAgZWFybGllciBiZWNhdXNlIG9mIGFuIGluZmx1eCBvZiBkaXJ0eQotICogcGFnZXMu IFJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIHByZXZpb3VzbHkgZXN0aW1hdGVkIHRpbWUsIHdlIHBy b2FjdGl2ZWx5Ci0gKiBwdXJnZSB0aG9zZSBwYWdlcy4KLSAqIElmIGJhY2tncm91bmQgdGhyZWFk IHNsZWVwcyBpbmRlZmluaXRlbHksIGFsd2F5cyB3YWtlIHVwIGJlY2F1c2Ugc29tZQotICogZGVm ZXJyZWQgd29yayBoYXMgYmVlbiBnZW5lcmF0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1hcmVuYV9t YXliZV9kb19kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGRlY2F5 X3QgKmRlY2F5LAotICAgIHNpemVfdCBucGFnZXNfbmV3KSB7Ci0JYmFja2dyb3VuZF90aHJlYWRf aW5mb190ICppbmZvID0gYXJlbmFfYmFja2dyb3VuZF90aHJlYWRfaW5mb19nZXQoCi0JICAgIGFy ZW5hKTsKLQlpZiAobWFsbG9jX211dGV4X3RyeWxvY2sodHNkbiwgJmluZm8tPm10eCkpIHsKLQkJ LyoKLQkJICogQmFja2dyb3VuZCB0aHJlYWQgbWF5IGhvbGQgdGhlIG11dGV4IGZvciBhIGxvbmcg cGVyaW9kIG9mCi0JCSAqIHRpbWUuICBXZSdkIGxpa2UgdG8gYXZvaWQgdGhlIHZhcmlhbmNlIG9u IGFwcGxpY2F0aW9uCi0JCSAqIHRocmVhZHMuICBTbyBrZWVwIHRoaXMgbm9uLWJsb2NraW5nLCBh bmQgbGVhdmUgdGhlIHdvcmsgdG8gYQotCQkgKiBmdXR1cmUgZXBvY2guCi0JCSAqLwotCQlyZXR1 cm47Ci0JfQotCWlmICghYmFja2dyb3VuZF90aHJlYWRfaXNfc3RhcnRlZChpbmZvKSkgewotCQln b3RvIGxhYmVsX2RvbmU7Ci0JfQotCi0JbnN0aW1lX3QgcmVtYWluaW5nX3NsZWVwOwotCWlmIChi YWNrZ3JvdW5kX3RocmVhZF9pbmRlZmluaXRlX3NsZWVwKGluZm8pKSB7Ci0JCWJhY2tncm91bmRf dGhyZWFkX3dha2V1cF9lYXJseShpbmZvLCBOVUxMKTsKLQl9IGVsc2UgaWYgKGFyZW5hX3Nob3Vs ZF9kZWNheV9lYXJseSh0c2RuLCBhcmVuYSwgZGVjYXksIGluZm8sCi0JICAgICZyZW1haW5pbmdf c2xlZXAsIG5wYWdlc19uZXcpKSB7Ci0JCWluZm8tPm5wYWdlc190b19wdXJnZV9uZXcgPSAwOwot CQliYWNrZ3JvdW5kX3RocmVhZF93YWtldXBfZWFybHkoaW5mbywgJnJlbWFpbmluZ19zbGVlcCk7 Ci0JfQotbGFiZWxfZG9uZToKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZpbmZvLT5tdHgp OwotfQotCi0vKiBDYWxsZWQgZnJvbSBiYWNrZ3JvdW5kIHRocmVhZHMuICovCi12b2lkCi1hcmVu YV9kb19kZWZlcnJlZF93b3JrKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKLQlhcmVu YV9kZWNheSh0c2RuLCBhcmVuYSwgdHJ1ZSwgZmFsc2UpOwotCXBhX3NoYXJkX2RvX2RlZmVycmVk X3dvcmsodHNkbiwgJmFyZW5hLT5wYV9zaGFyZCk7Ci19Ci0KLXZvaWQKLWFyZW5hX3NsYWJfZGFs bG9jKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGVkYXRhX3QgKnNsYWIpIHsKLQlib29s IGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7Ci0JcGFfZGFsbG9jKHRzZG4sICZhcmVu YS0+cGFfc2hhcmQsIHNsYWIsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JaWYgKGRlZmVy cmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JCWFyZW5hX2hhbmRsZV9kZWZlcnJlZF93b3JrKHRzZG4s IGFyZW5hKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcmVuYV9iaW5fc2xhYnNfbm9uZnVsbF9p bnNlcnQoYmluX3QgKmJpbiwgZWRhdGFfdCAqc2xhYikgewotCWFzc2VydChlZGF0YV9uZnJlZV9n ZXQoc2xhYikgPiAwKTsKLQllZGF0YV9oZWFwX2luc2VydCgmYmluLT5zbGFic19ub25mdWxsLCBz bGFiKTsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWJpbi0+c3RhdHMubm9uZnVsbF9zbGFicysr OwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWFyZW5hX2Jpbl9zbGFic19ub25mdWxsX3JlbW92ZShi aW5fdCAqYmluLCBlZGF0YV90ICpzbGFiKSB7Ci0JZWRhdGFfaGVhcF9yZW1vdmUoJmJpbi0+c2xh YnNfbm9uZnVsbCwgc2xhYik7Ci0JaWYgKGNvbmZpZ19zdGF0cykgewotCQliaW4tPnN0YXRzLm5v bmZ1bGxfc2xhYnMtLTsKLQl9Ci19Ci0KLXN0YXRpYyBlZGF0YV90ICoKLWFyZW5hX2Jpbl9zbGFi c19ub25mdWxsX3RyeWdldChiaW5fdCAqYmluKSB7Ci0JZWRhdGFfdCAqc2xhYiA9IGVkYXRhX2hl YXBfcmVtb3ZlX2ZpcnN0KCZiaW4tPnNsYWJzX25vbmZ1bGwpOwotCWlmIChzbGFiID09IE5VTEwp IHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmIChjb25maWdfc3RhdHMpIHsKLQkJYmluLT5zdGF0 cy5yZXNsYWJzKys7Ci0JCWJpbi0+c3RhdHMubm9uZnVsbF9zbGFicy0tOwotCX0KLQlyZXR1cm4g c2xhYjsKLX0KLQotc3RhdGljIHZvaWQKLWFyZW5hX2Jpbl9zbGFic19mdWxsX2luc2VydChhcmVu YV90ICphcmVuYSwgYmluX3QgKmJpbiwgZWRhdGFfdCAqc2xhYikgewotCWFzc2VydChlZGF0YV9u ZnJlZV9nZXQoc2xhYikgPT0gMCk7Ci0JLyoKLQkgKiAgVHJhY2tpbmcgZXh0ZW50cyBpcyByZXF1 aXJlZCBieSBhcmVuYV9yZXNldCwgd2hpY2ggaXMgbm90IGFsbG93ZWQKLQkgKiAgZm9yIGF1dG8g YXJlbmFzLiAgQnlwYXNzIHRoaXMgc3RlcCB0byBhdm9pZCB0b3VjaGluZyB0aGUgZWRhdGEKLQkg KiAgbGlua2FnZSAob2Z0ZW4gcmVzdWx0cyBpbiBjYWNoZSBtaXNzZXMpIGZvciBhdXRvIGFyZW5h cy4KLQkgKi8KLQlpZiAoYXJlbmFfaXNfYXV0byhhcmVuYSkpIHsKLQkJcmV0dXJuOwotCX0KLQll ZGF0YV9saXN0X2FjdGl2ZV9hcHBlbmQoJmJpbi0+c2xhYnNfZnVsbCwgc2xhYik7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1hcmVuYV9iaW5fc2xhYnNfZnVsbF9yZW1vdmUoYXJlbmFfdCAqYXJlbmEsIGJp bl90ICpiaW4sIGVkYXRhX3QgKnNsYWIpIHsKLQlpZiAoYXJlbmFfaXNfYXV0byhhcmVuYSkpIHsK LQkJcmV0dXJuOwotCX0KLQllZGF0YV9saXN0X2FjdGl2ZV9yZW1vdmUoJmJpbi0+c2xhYnNfZnVs bCwgc2xhYik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcmVuYV9iaW5fcmVzZXQodHNkX3QgKnRzZCwg YXJlbmFfdCAqYXJlbmEsIGJpbl90ICpiaW4pIHsKLQllZGF0YV90ICpzbGFiOwotCi0JbWFsbG9j X211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9jayk7Ci0JaWYgKGJpbi0+c2xhYmN1 ciAhPSBOVUxMKSB7Ci0JCXNsYWIgPSBiaW4tPnNsYWJjdXI7Ci0JCWJpbi0+c2xhYmN1ciA9IE5V TEw7Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9jayk7Ci0J CWFyZW5hX3NsYWJfZGFsbG9jKHRzZF90c2RuKHRzZCksIGFyZW5hLCBzbGFiKTsKLQkJbWFsbG9j X211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9jayk7Ci0JfQotCXdoaWxlICgoc2xh YiA9IGVkYXRhX2hlYXBfcmVtb3ZlX2ZpcnN0KCZiaW4tPnNsYWJzX25vbmZ1bGwpKSAhPSBOVUxM KSB7Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9jayk7Ci0J CWFyZW5hX3NsYWJfZGFsbG9jKHRzZF90c2RuKHRzZCksIGFyZW5hLCBzbGFiKTsKLQkJbWFsbG9j X211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmJpbi0+bG9jayk7Ci0JfQotCWZvciAoc2xhYiA9 IGVkYXRhX2xpc3RfYWN0aXZlX2ZpcnN0KCZiaW4tPnNsYWJzX2Z1bGwpOyBzbGFiICE9IE5VTEw7 Ci0JICAgICBzbGFiID0gZWRhdGFfbGlzdF9hY3RpdmVfZmlyc3QoJmJpbi0+c2xhYnNfZnVsbCkp IHsKLQkJYXJlbmFfYmluX3NsYWJzX2Z1bGxfcmVtb3ZlKGFyZW5hLCBiaW4sIHNsYWIpOwotCQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZiaW4tPmxvY2spOwotCQlhcmVuYV9z bGFiX2RhbGxvYyh0c2RfdHNkbih0c2QpLCBhcmVuYSwgc2xhYik7Ci0JCW1hbGxvY19tdXRleF9s b2NrKHRzZF90c2RuKHRzZCksICZiaW4tPmxvY2spOwotCX0KLQlpZiAoY29uZmlnX3N0YXRzKSB7 Ci0JCWJpbi0+c3RhdHMuY3VycmVncyA9IDA7Ci0JCWJpbi0+c3RhdHMuY3Vyc2xhYnMgPSAwOwot CX0KLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZiaW4tPmxvY2spOwotfQot Ci12b2lkCi1hcmVuYV9yZXNldCh0c2RfdCAqdHNkLCBhcmVuYV90ICphcmVuYSkgewotCS8qCi0J ICogTG9ja2luZyBpbiB0aGlzIGZ1bmN0aW9uIGlzIHVuaW50dWl0aXZlLiAgVGhlIGNhbGxlciBn dWFyYW50ZWVzIHRoYXQKLQkgKiBubyBjb25jdXJyZW50IG9wZXJhdGlvbnMgYXJlIGhhcHBlbmlu ZyBpbiB0aGlzIGFyZW5hLCBidXQgdGhlcmUgYXJlCi0JICogc3RpbGwgcmVhc29ucyB0aGF0IHNv bWUgbG9ja2luZyBpcyBuZWNlc3Nhcnk6Ci0JICoKLQkgKiAtIFNvbWUgb2YgdGhlIGZ1bmN0aW9u cyBpbiB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlIG9mIGNhbGxzIGFzc3VtZQotCSAqICAgYXBwcm9w cmlhdGUgbG9ja3MgYXJlIGhlbGQsIGFuZCBpbiBzb21lIGNhc2VzIHRoZXNlIGxvY2tzIGFyZQot CSAqICAgdGVtcG9yYXJpbHkgZHJvcHBlZCB0byBhdm9pZCBsb2NrIG9yZGVyIHJldmVyc2FsIG9y IGRlYWRsb2NrIGR1ZSB0bwotCSAqICAgcmVlbnRyeS4KLQkgKiAtIG1hbGxjdGwoImVwb2NoIiwg Li4uKSBtYXkgY29uY3VycmVudGx5IHJlZnJlc2ggc3RhdHMuICBXaGlsZQotCSAqICAgc3RyaWN0 bHkgc3BlYWtpbmcgdGhpcyBpcyBhICJjb25jdXJyZW50IG9wZXJhdGlvbiIsIGRpc2FsbG93aW5n Ci0JICogICBzdGF0cyByZWZyZXNoZXMgd291bGQgaW1wb3NlIGFuIGluY29udmVuaWVudCBidXJk ZW4uCi0JICovCi0KLQkvKiBMYXJnZSBhbGxvY2F0aW9ucy4gKi8KLQltYWxsb2NfbXV0ZXhfbG9j ayh0c2RfdHNkbih0c2QpLCAmYXJlbmEtPmxhcmdlX210eCk7Ci0KLQlmb3IgKGVkYXRhX3QgKmVk YXRhID0gZWRhdGFfbGlzdF9hY3RpdmVfZmlyc3QoJmFyZW5hLT5sYXJnZSk7Ci0JICAgIGVkYXRh ICE9IE5VTEw7IGVkYXRhID0gZWRhdGFfbGlzdF9hY3RpdmVfZmlyc3QoJmFyZW5hLT5sYXJnZSkp IHsKLQkJdm9pZCAqcHRyID0gZWRhdGFfYmFzZV9nZXQoZWRhdGEpOwotCQlzaXplX3QgdXNpemU7 Ci0KLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmYXJlbmEtPmxhcmdlX210 eCk7Ci0JCWVtYXBfYWxsb2NfY3R4X3QgYWxsb2NfY3R4OwotCQllbWFwX2FsbG9jX2N0eF9sb29r dXAodHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIsCi0JCSAgICAmYWxsb2Nf Y3R4KTsKLQkJYXNzZXJ0KGFsbG9jX2N0eC5zemluZCAhPSBTQ19OU0laRVMpOwotCi0JCWlmIChj b25maWdfc3RhdHMgfHwgKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mKSkgewotCQkJdXNpemUgPSBz el9pbmRleDJzaXplKGFsbG9jX2N0eC5zemluZCk7Ci0JCQlhc3NlcnQodXNpemUgPT0gaXNhbGxv Yyh0c2RfdHNkbih0c2QpLCBwdHIpKTsKLQkJfQotCQkvKiBSZW1vdmUgbGFyZ2UgYWxsb2NhdGlv biBmcm9tIHByb2Ygc2FtcGxlIHNldC4gKi8KLQkJaWYgKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9m KSB7Ci0JCQlwcm9mX2ZyZWUodHNkLCBwdHIsIHVzaXplLCAmYWxsb2NfY3R4KTsKLQkJfQotCQls YXJnZV9kYWxsb2ModHNkX3RzZG4odHNkKSwgZWRhdGEpOwotCQltYWxsb2NfbXV0ZXhfbG9jayh0 c2RfdHNkbih0c2QpLCAmYXJlbmEtPmxhcmdlX210eCk7Ci0JfQotCW1hbGxvY19tdXRleF91bmxv Y2sodHNkX3RzZG4odHNkKSwgJmFyZW5hLT5sYXJnZV9tdHgpOwotCi0JLyogQmlucy4gKi8KLQlm b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU0NfTkJJTlM7IGkrKykgewotCQlmb3IgKHVuc2lnbmVk IGogPSAwOyBqIDwgYmluX2luZm9zW2ldLm5fc2hhcmRzOyBqKyspIHsKLQkJCWFyZW5hX2Jpbl9y ZXNldCh0c2QsIGFyZW5hLCBhcmVuYV9nZXRfYmluKGFyZW5hLCBpLCBqKSk7Ci0JCX0KLQl9Ci0J cGFfc2hhcmRfcmVzZXQodHNkX3RzZG4odHNkKSwgJmFyZW5hLT5wYV9zaGFyZCk7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1hcmVuYV9wcmVwYXJlX2Jhc2VfZGVsZXRpb25fc3luY19maW5pc2godHNkX3Qg KnRzZCwgbWFsbG9jX211dGV4X3QgKiptdXRleGVzLAotICAgIHVuc2lnbmVkIG5fbXR4KSB7Ci0J Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fbXR4OyBpKyspIHsKLQkJbWFsbG9jX211dGV4X2xv Y2sodHNkX3RzZG4odHNkKSwgbXV0ZXhlc1tpXSk7Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNk X3RzZG4odHNkKSwgbXV0ZXhlc1tpXSk7Ci0JfQotfQotCi0jZGVmaW5lIEFSRU5BX0RFU1RST1lf TUFYX0RFTEFZRURfTVRYIDMyCi1zdGF0aWMgdm9pZAotYXJlbmFfcHJlcGFyZV9iYXNlX2RlbGV0 aW9uX3N5bmModHNkX3QgKnRzZCwgbWFsbG9jX211dGV4X3QgKm10eCwKLSAgICBtYWxsb2NfbXV0 ZXhfdCAqKmRlbGF5ZWRfbXR4LCB1bnNpZ25lZCAqbl9kZWxheWVkKSB7Ci0JaWYgKCFtYWxsb2Nf bXV0ZXhfdHJ5bG9jayh0c2RfdHNkbih0c2QpLCBtdHgpKSB7Ci0JCS8qIE5vIGNvbnRlbnRpb24u ICovCi0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgbXR4KTsKLQkJcmV0dXJu OwotCX0KLQl1bnNpZ25lZCBuID0gKm5fZGVsYXllZDsKLQlhc3NlcnQobiA8IEFSRU5BX0RFU1RS T1lfTUFYX0RFTEFZRURfTVRYKTsKLQkvKiBBZGQgYW5vdGhlciB0byB0aGUgYmF0Y2guICovCi0J ZGVsYXllZF9tdHhbbisrXSA9IG10eDsKLQotCWlmIChuID09IEFSRU5BX0RFU1RST1lfTUFYX0RF TEFZRURfTVRYKSB7Ci0JCWFyZW5hX3ByZXBhcmVfYmFzZV9kZWxldGlvbl9zeW5jX2ZpbmlzaCh0 c2QsIGRlbGF5ZWRfbXR4LCBuKTsKLQkJbiA9IDA7Ci0JfQotCSpuX2RlbGF5ZWQgPSBuOwotfQot Ci1zdGF0aWMgdm9pZAotYXJlbmFfcHJlcGFyZV9iYXNlX2RlbGV0aW9uKHRzZF90ICp0c2QsIGJh c2VfdCAqYmFzZV90b19kZXN0cm95KSB7Ci0JLyoKLQkgKiBJbiBvcmRlciB0byBjb2FsZXNjZSwg ZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWlnaGJvciB3aWxsIGF0dGVtcHQgdG8KLQkgKiBjaGVj ayBuZWlnaGJvciBlZGF0YSdzIHN0YXRlIHRvIGRldGVybWluZSBlbGlnaWJpbGl0eS4gIFRoaXMg bWVhbnMKLQkgKiB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHRoZSBtZXRhZGF0YSBmcm9tIGFu IGFyZW5hIGNhbiBiZSBhY2Nlc3NlZAotCSAqIHcvbyBob2xkaW5nIGFueSBsb2NrcyBmcm9tIHRo YXQgYXJlbmEuICBJbiBvcmRlciB0byBndWFyYW50ZWUgc2FmZQotCSAqIG1lbW9yeSBhY2Nlc3Ms IHRoZSBtZXRhZGF0YSBhbmQgdGhlIHVuZGVybHlpbmcgYmFzZSBhbGxvY2F0b3IgbmVlZHMKLQkg KiB0byBiZSBrZXB0IGFsaXZlLCB1bnRpbCBhbGwgcGVuZGluZyBhY2Nlc3NlcyBhcmUgZG9uZS4K LQkgKgotCSAqIDEpIHdpdGggb3B0X3JldGFpbiwgdGhlIGFyZW5hIGJvdW5kYXJ5IGltcGxpZXMg dGhlIGlzX2hlYWQgc3RhdGUKLQkgKiAodHJhY2tlZCBpbiB0aGUgcnRyZWUgbGVhZiksIGFuZCB0 aGUgY29hbGVzY2UgZmxvdyB3aWxsIHN0b3AgYXQgdGhlCi0JICogaGVhZCBzdGF0ZSBicmFuY2gu ICBUaGVyZWZvcmUgbm8gY3Jvc3MgYXJlbmEgbWV0YWRhdGEgYWNjZXNzCi0JICogcG9zc2libGUu Ci0JICoKLQkgKiAyKSB3L28gb3B0X3JldGFpbiwgdGhlIGFyZW5hIGlkIG5lZWRzIHRvIGJlIHJl YWQgZnJvbSB0aGUgZWRhdGFfdCwKLQkgKiBtZWFuaW5nIHJlYWQgb25seSBjcm9zcy1hcmVuYSBt ZXRhZGF0YSBhY2Nlc3MgaXMgcG9zc2libGUuICBUaGUKLQkgKiBjb2FsZXNjZSBhdHRlbXB0IHdp bGwgc3RvcCBhdCB0aGUgYXJlbmFfaWQgbWlzbWF0Y2gsIGFuZCBpcyBhbHdheXMKLQkgKiB1bmRl ciBvbmUgb2YgdGhlIGVjYWNoZSBsb2Nrcy4gIFRvIGFsbG93IHNhZmUgcGFzc3Rocm91Z2ggb2Yg c3VjaAotCSAqIG1ldGFkYXRhIGFjY2Vzc2VzLCB0aGUgbG9vcCBiZWxvdyB3aWxsIGl0ZXJhdGUg dGhyb3VnaCBhbGwgbWFudWFsCi0JICogYXJlbmFzJyBlY2FjaGUgbG9ja3MuICBBcyBhbGwgdGhl IG1ldGFkYXRhIGZyb20gdGhpcyBiYXNlIGFsbG9jYXRvcgotCSAqIGhhdmUgYmVlbiB1bmxpbmtl ZCBmcm9tIHRoZSBydHJlZSwgYWZ0ZXIgZ29pbmcgdGhyb3VnaCBhbGwgdGhlCi0JICogcmVsZXZh bnQgZWNhY2hlIGxvY2tzLCBpdCdzIHNhZmUgdG8gc2F5IHRoYXQgYSkgcGVuZGluZyBhY2Nlc3Nl cyBhcmUKLQkgKiBhbGwgZmluaXNoZWQsIGFuZCBiKSBubyBuZXcgYWNjZXNzIHdpbGwgYmUgZ2Vu ZXJhdGVkLgotCSAqLwotCWlmIChvcHRfcmV0YWluKSB7Ci0JCXJldHVybjsKLQl9Ci0JdW5zaWdu ZWQgZGVzdHJveV9pbmQgPSBiYXNlX2luZF9nZXQoYmFzZV90b19kZXN0cm95KTsKLQlhc3NlcnQo ZGVzdHJveV9pbmQgPj0gbWFudWFsX2FyZW5hX2Jhc2UpOwotCi0JdHNkbl90ICp0c2RuID0gdHNk X3RzZG4odHNkKTsKLQltYWxsb2NfbXV0ZXhfdCAqZGVsYXllZF9tdHhbQVJFTkFfREVTVFJPWV9N QVhfREVMQVlFRF9NVFhdOwotCXVuc2lnbmVkIG5fZGVsYXllZCA9IDAsIHRvdGFsID0gbmFyZW5h c190b3RhbF9nZXQoKTsKLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWw7IGkrKykgewot CQlpZiAoaSA9PSBkZXN0cm95X2luZCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJYXJlbmFfdCAq YXJlbmEgPSBhcmVuYV9nZXQodHNkbiwgaSwgZmFsc2UpOwotCQlpZiAoYXJlbmEgPT0gTlVMTCkg ewotCQkJY29udGludWU7Ci0JCX0KLQkJcGFjX3QgKnBhYyA9ICZhcmVuYS0+cGFfc2hhcmQucGFj OwotCQlhcmVuYV9wcmVwYXJlX2Jhc2VfZGVsZXRpb25fc3luYyh0c2QsICZwYWMtPmVjYWNoZV9k aXJ0eS5tdHgsCi0JCSAgICBkZWxheWVkX210eCwgJm5fZGVsYXllZCk7Ci0JCWFyZW5hX3ByZXBh cmVfYmFzZV9kZWxldGlvbl9zeW5jKHRzZCwgJnBhYy0+ZWNhY2hlX211enp5Lm10eCwKLQkJICAg IGRlbGF5ZWRfbXR4LCAmbl9kZWxheWVkKTsKLQkJYXJlbmFfcHJlcGFyZV9iYXNlX2RlbGV0aW9u X3N5bmModHNkLCAmcGFjLT5lY2FjaGVfcmV0YWluZWQubXR4LAotCQkgICAgZGVsYXllZF9tdHgs ICZuX2RlbGF5ZWQpOwotCX0KLQlhcmVuYV9wcmVwYXJlX2Jhc2VfZGVsZXRpb25fc3luY19maW5p c2godHNkLCBkZWxheWVkX210eCwgbl9kZWxheWVkKTsKLX0KLSN1bmRlZiBBUkVOQV9ERVNUUk9Z X01BWF9ERUxBWUVEX01UWAotCi12b2lkCi1hcmVuYV9kZXN0cm95KHRzZF90ICp0c2QsIGFyZW5h X3QgKmFyZW5hKSB7Ci0JYXNzZXJ0KGJhc2VfaW5kX2dldChhcmVuYS0+YmFzZSkgPj0gbmFyZW5h c19hdXRvKTsKLQlhc3NlcnQoYXJlbmFfbnRocmVhZHNfZ2V0KGFyZW5hLCBmYWxzZSkgPT0gMCk7 Ci0JYXNzZXJ0KGFyZW5hX250aHJlYWRzX2dldChhcmVuYSwgdHJ1ZSkgPT0gMCk7Ci0KLQkvKgot CSAqIE5vIGFsbG9jYXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2UgYXJlbmFfcmVzZXQoKSB3YXMg Y2FsbGVkLgotCSAqIEZ1cnRoZXJtb3JlLCB0aGUgY2FsbGVyIChhcmVuYV9pX2Rlc3Ryb3lfY3Rs KCkpIHB1cmdlZCBhbGwgY2FjaGVkCi0JICogZXh0ZW50cywgc28gb25seSByZXRhaW5lZCBleHRl bnRzIG1heSByZW1haW4gYW5kIGl0J3Mgc2FmZSB0byBjYWxsCi0JICogcGFfc2hhcmRfZGVzdHJv eV9yZXRhaW5lZC4KLQkgKi8KLQlwYV9zaGFyZF9kZXN0cm95KHRzZF90c2RuKHRzZCksICZhcmVu YS0+cGFfc2hhcmQpOwotCi0JLyoKLQkgKiBSZW1vdmUgdGhlIGFyZW5hIHBvaW50ZXIgZnJvbSB0 aGUgYXJlbmFzIGFycmF5LiAgV2UgcmVseSBvbiB0aGUgZmFjdAotCSAqIHRoYXQgdGhlcmUgaXMg bm8gd2F5IGZvciB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IGEgZGlydHkgcmVhZCBmcm9tIHRoZQot CSAqIGFyZW5hcyBhcnJheSB1bmxlc3MgdGhlcmUgaXMgYW4gaW5oZXJlbnQgcmFjZSBpbiB0aGUg YXBwbGljYXRpb24KLQkgKiBpbnZvbHZpbmcgYWNjZXNzIG9mIGFuIGFyZW5hIGJlaW5nIGNvbmN1 cnJlbnRseSBkZXN0cm95ZWQuICBUaGUKLQkgKiBhcHBsaWNhdGlvbiBtdXN0IHN5bmNocm9uaXpl IGtub3dsZWRnZSBvZiB0aGUgYXJlbmEncyB2YWxpZGl0eSwgc28gYXMKLQkgKiBsb25nIGFzIHdl IHVzZSBhbiBhdG9taWMgd3JpdGUgdG8gdXBkYXRlIHRoZSBhcmVuYXMgYXJyYXksIHRoZQotCSAq IGFwcGxpY2F0aW9uIHdpbGwgZ2V0IGEgY2xlYW4gcmVhZCBhbnkgdGltZSBhZnRlciBpdCBzeW5j aHJvbml6ZXMKLQkgKiBrbm93bGVkZ2UgdGhhdCB0aGUgYXJlbmEgaXMgbm8gbG9uZ2VyIHZhbGlk LgotCSAqLwotCWFyZW5hX3NldChiYXNlX2luZF9nZXQoYXJlbmEtPmJhc2UpLCBOVUxMKTsKLQot CS8qCi0JICogRGVzdHJveSB0aGUgYmFzZSBhbGxvY2F0b3IsIHdoaWNoIG1hbmFnZXMgYWxsIG1l dGFkYXRhIGV2ZXIgbWFwcGVkIGJ5Ci0JICogdGhpcyBhcmVuYS4gIFRoZSBwcmVwYXJlIGZ1bmN0 aW9uIHdpbGwgbWFrZSBzdXJlIG5vIHBlbmRpbmcgYWNjZXNzIHRvCi0JICogdGhlIG1ldGFkYXRh IGluIHRoaXMgYmFzZSBhbnltb3JlLgotCSAqLwotCWFyZW5hX3ByZXBhcmVfYmFzZV9kZWxldGlv bih0c2QsIGFyZW5hLT5iYXNlKTsKLQliYXNlX2RlbGV0ZSh0c2RfdHNkbih0c2QpLCBhcmVuYS0+ YmFzZSk7Ci19Ci0KLXN0YXRpYyBlZGF0YV90ICoKLWFyZW5hX3NsYWJfYWxsb2ModHNkbl90ICp0 c2RuLCBhcmVuYV90ICphcmVuYSwgc3ppbmRfdCBiaW5pbmQsIHVuc2lnbmVkIGJpbnNoYXJkLAot ICAgIGNvbnN0IGJpbl9pbmZvX3QgKmJpbl9pbmZvKSB7Ci0JYm9vbCBkZWZlcnJlZF93b3JrX2dl bmVyYXRlZCA9IGZhbHNlOwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRu ZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7Ci0KLQlib29s IGd1YXJkZWQgPSBzYW5fc2xhYl9leHRlbnRfZGVjaWRlX2d1YXJkKHRzZG4sCi0JICAgIGFyZW5h X2dldF9laG9va3MoYXJlbmEpKTsKLQllZGF0YV90ICpzbGFiID0gcGFfYWxsb2ModHNkbiwgJmFy ZW5hLT5wYV9zaGFyZCwgYmluX2luZm8tPnNsYWJfc2l6ZSwKLQkgICAgLyogYWxpZ25tZW50ICov IFBBR0UsIC8qIHNsYWIgKi8gdHJ1ZSwgLyogc3ppbmQgKi8gYmluaW5kLAotCSAgICAgLyogemVy byAqLyBmYWxzZSwgZ3VhcmRlZCwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQotCWlmIChk ZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgewotCQlhcmVuYV9oYW5kbGVfZGVmZXJyZWRfd29yayh0 c2RuLCBhcmVuYSk7Ci0JfQotCi0JaWYgKHNsYWIgPT0gTlVMTCkgewotCQlyZXR1cm4gTlVMTDsK LQl9Ci0JYXNzZXJ0KGVkYXRhX3NsYWJfZ2V0KHNsYWIpKTsKLQotCS8qIEluaXRpYWxpemUgc2xh YiBpbnRlcm5hbHMuICovCi0Jc2xhYl9kYXRhX3QgKnNsYWJfZGF0YSA9IGVkYXRhX3NsYWJfZGF0 YV9nZXQoc2xhYik7Ci0JZWRhdGFfbmZyZWVfYmluc2hhcmRfc2V0KHNsYWIsIGJpbl9pbmZvLT5u cmVncywgYmluc2hhcmQpOwotCWJpdG1hcF9pbml0KHNsYWJfZGF0YS0+Yml0bWFwLCAmYmluX2lu Zm8tPmJpdG1hcF9pbmZvLCBmYWxzZSk7Ci0KLQlyZXR1cm4gc2xhYjsKLX0KLQotLyoKLSAqIEJl Zm9yZSBhdHRlbXB0aW5nIHRoZSBfd2l0aF9mcmVzaF9zbGFiIGFwcHJvYWNoZXMgYmVsb3csIHRo ZSBfbm9fZnJlc2hfc2xhYgotICogdmFyaWFudHMgKGkuZS4gdGhyb3VnaCBzbGFiY3VyIGFuZCBu b25mdWxsKSBtdXN0IGJlIHRyaWVkIGZpcnN0LgotICovCi1zdGF0aWMgdm9pZAotYXJlbmFfYmlu X3JlZmlsbF9zbGFiY3VyX3dpdGhfZnJlc2hfc2xhYih0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFy ZW5hLAotICAgIGJpbl90ICpiaW4sIHN6aW5kX3QgYmluaW5kLCBlZGF0YV90ICpmcmVzaF9zbGFi KSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmYmluLT5sb2NrKTsKLQkvKiBP bmx5IGNhbGxlZCBhZnRlciBzbGFiY3VyIGFuZCBub25mdWxsIGJvdGggZmFpbGVkLiAqLwotCWFz c2VydChiaW4tPnNsYWJjdXIgPT0gTlVMTCk7Ci0JYXNzZXJ0KGVkYXRhX2hlYXBfZmlyc3QoJmJp bi0+c2xhYnNfbm9uZnVsbCkgPT0gTlVMTCk7Ci0JYXNzZXJ0KGZyZXNoX3NsYWIgIT0gTlVMTCk7 Ci0KLQkvKiBBIG5ldyBzbGFiIGZyb20gYXJlbmFfc2xhYl9hbGxvYygpICovCi0JYXNzZXJ0KGVk YXRhX25mcmVlX2dldChmcmVzaF9zbGFiKSA9PSBiaW5faW5mb3NbYmluaW5kXS5ucmVncyk7Ci0J aWYgKGNvbmZpZ19zdGF0cykgewotCQliaW4tPnN0YXRzLm5zbGFicysrOwotCQliaW4tPnN0YXRz LmN1cnNsYWJzKys7Ci0JfQotCWJpbi0+c2xhYmN1ciA9IGZyZXNoX3NsYWI7Ci19Ci0KLS8qIFJl ZmlsbCBzbGFiY3VyIGFuZCB0aGVuIGFsbG9jIHVzaW5nIHRoZSBmcmVzaCBzbGFiICovCi1zdGF0 aWMgdm9pZCAqCi1hcmVuYV9iaW5fbWFsbG9jX3dpdGhfZnJlc2hfc2xhYih0c2RuX3QgKnRzZG4s IGFyZW5hX3QgKmFyZW5hLCBiaW5fdCAqYmluLAotICAgIHN6aW5kX3QgYmluaW5kLCBlZGF0YV90 ICpmcmVzaF9zbGFiKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmYmluLT5s b2NrKTsKLQlhcmVuYV9iaW5fcmVmaWxsX3NsYWJjdXJfd2l0aF9mcmVzaF9zbGFiKHRzZG4sIGFy ZW5hLCBiaW4sIGJpbmluZCwKLQkgICAgZnJlc2hfc2xhYik7Ci0KLQlyZXR1cm4gYXJlbmFfc2xh Yl9yZWdfYWxsb2MoYmluLT5zbGFiY3VyLCAmYmluX2luZm9zW2JpbmluZF0pOwotfQotCi1zdGF0 aWMgYm9vbAotYXJlbmFfYmluX3JlZmlsbF9zbGFiY3VyX25vX2ZyZXNoX3NsYWIodHNkbl90ICp0 c2RuLCBhcmVuYV90ICphcmVuYSwKLSAgICBiaW5fdCAqYmluKSB7Ci0JbWFsbG9jX211dGV4X2Fz c2VydF9vd25lcih0c2RuLCAmYmluLT5sb2NrKTsKLQkvKiBPbmx5IGNhbGxlZCBhZnRlciBhcmVu YV9zbGFiX3JlZ19hbGxvY1tfYmF0Y2hdIGZhaWxlZC4gKi8KLQlhc3NlcnQoYmluLT5zbGFiY3Vy ID09IE5VTEwgfHwgZWRhdGFfbmZyZWVfZ2V0KGJpbi0+c2xhYmN1cikgPT0gMCk7Ci0KLQlpZiAo YmluLT5zbGFiY3VyICE9IE5VTEwpIHsKLQkJYXJlbmFfYmluX3NsYWJzX2Z1bGxfaW5zZXJ0KGFy ZW5hLCBiaW4sIGJpbi0+c2xhYmN1cik7Ci0JfQotCi0JLyogTG9vayBmb3IgYSB1c2FibGUgc2xh Yi4gKi8KLQliaW4tPnNsYWJjdXIgPSBhcmVuYV9iaW5fc2xhYnNfbm9uZnVsbF90cnlnZXQoYmlu KTsKLQlhc3NlcnQoYmluLT5zbGFiY3VyID09IE5VTEwgfHwgZWRhdGFfbmZyZWVfZ2V0KGJpbi0+ c2xhYmN1cikgPiAwKTsKLQotCXJldHVybiAoYmluLT5zbGFiY3VyID09IE5VTEwpOwotfQotCi1i aW5fdCAqCi1hcmVuYV9iaW5fY2hvb3NlKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHN6 aW5kX3QgYmluaW5kLAotICAgIHVuc2lnbmVkICpiaW5zaGFyZF9wKSB7Ci0JdW5zaWduZWQgYmlu c2hhcmQ7Ci0JaWYgKHRzZG5fbnVsbCh0c2RuKSB8fCB0c2RfYXJlbmFfZ2V0KHRzZG5fdHNkKHRz ZG4pKSA9PSBOVUxMKSB7Ci0JCWJpbnNoYXJkID0gMDsKLQl9IGVsc2UgewotCQliaW5zaGFyZCA9 IHRzZF9iaW5zaGFyZHNwX2dldCh0c2RuX3RzZCh0c2RuKSktPmJpbnNoYXJkW2JpbmluZF07Ci0J fQotCWFzc2VydChiaW5zaGFyZCA8IGJpbl9pbmZvc1tiaW5pbmRdLm5fc2hhcmRzKTsKLQlpZiAo Ymluc2hhcmRfcCAhPSBOVUxMKSB7Ci0JCSpiaW5zaGFyZF9wID0gYmluc2hhcmQ7Ci0JfQotCXJl dHVybiBhcmVuYV9nZXRfYmluKGFyZW5hLCBiaW5pbmQsIGJpbnNoYXJkKTsKLX0KLQotdm9pZAot YXJlbmFfY2FjaGVfYmluX2ZpbGxfc21hbGwodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwK LSAgICBjYWNoZV9iaW5fdCAqY2FjaGVfYmluLCBjYWNoZV9iaW5faW5mb190ICpjYWNoZV9iaW5f aW5mbywgc3ppbmRfdCBiaW5pbmQsCi0gICAgY29uc3QgdW5zaWduZWQgbmZpbGwpIHsKLQlhc3Nl cnQoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGNhY2hlX2JpbiwgY2FjaGVfYmluX2luZm8p ID09IDApOwotCi0JY29uc3QgYmluX2luZm9fdCAqYmluX2luZm8gPSAmYmluX2luZm9zW2Jpbmlu ZF07Ci0KLQlDQUNIRV9CSU5fUFRSX0FSUkFZX0RFQ0xBUkUocHRycywgbmZpbGwpOwotCWNhY2hl X2Jpbl9pbml0X3B0cl9hcnJheV9mb3JfZmlsbChjYWNoZV9iaW4sIGNhY2hlX2Jpbl9pbmZvLCAm cHRycywKLQkgICAgbmZpbGwpOwotCS8qCi0JICogQmluLWxvY2FsIHJlc291cmNlcyBhcmUgdXNl ZCBmaXJzdDogMSkgYmluLT5zbGFiY3VyLCBhbmQgMikgbm9uZnVsbAotCSAqIHNsYWJzLiAgQWZ0 ZXIgYm90aCBhcmUgZXhoYXVzdGVkLCBuZXcgc2xhYnMgd2lsbCBiZSBhbGxvY2F0ZWQgdGhyb3Vn aAotCSAqIGFyZW5hX3NsYWJfYWxsb2MoKS4KLQkgKgotCSAqIEJpbiBsb2NrIGlzIG9ubHkgdGFr ZW4gLyByZWxlYXNlZCByaWdodCBiZWZvcmUgLyBhZnRlciB0aGUgd2hpbGUoLi4uKQotCSAqIHJl ZmlsbCBsb29wLCB3aXRoIG5ldyBzbGFiIGFsbG9jYXRpb24gKHdoaWNoIGhhcyBpdHMgb3duIGxv Y2tpbmcpCi0JICoga2VwdCBvdXRzaWRlIG9mIHRoZSBsb29wLiAgVGhpcyBzZXR1cCBmYWNpbGl0 YXRlcyBmbGF0IGNvbWJpbmluZywgYXQKLQkgKiB0aGUgY29zdCBvZiB0aGUgbmVzdGVkIGxvb3Ag KHRocm91Z2ggZ290byBsYWJlbF9yZWZpbGwpLgotCSAqCi0JICogVG8gb3B0aW1pemUgZm9yIGNh c2VzIHdpdGggY29udGVudGlvbiBhbmQgbGltaXRlZCByZXNvdXJjZXMKLQkgKiAoZS5nLiBodWdl cGFnZS1iYWNrZWQgb3Igbm9uLW92ZXJjb21taXQgYXJlbmFzKSwgZWFjaCBmaWxsLWl0ZXJhdGlv bgotCSAqIGdldHMgb25lIGNoYW5jZSBvZiBzbGFiX2FsbG9jLCBhbmQgYSByZXRyeSBvZiBiaW4g bG9jYWwgcmVzb3VyY2VzCi0JICogYWZ0ZXIgdGhlIHNsYWIgYWxsb2NhdGlvbiAocmVnYXJkbGVz cyBpZiBzbGFiX2FsbG9jIGZhaWxlZCwgYmVjYXVzZQotCSAqIHRoZSBiaW4gbG9jayBpcyBkcm9w cGVkIGR1cmluZyB0aGUgc2xhYiBhbGxvY2F0aW9uKS4KLQkgKgotCSAqIEluIG90aGVyIHdvcmRz LCBuZXcgc2xhYiBhbGxvY2F0aW9uIGlzIGFsbG93ZWQsIGFzIGxvbmcgYXMgdGhlcmUgd2FzCi0J ICogcHJvZ3Jlc3Mgc2luY2UgdGhlIHByZXZpb3VzIHNsYWJfYWxsb2MuICBUaGlzIGlzIHRyYWNr ZWQgd2l0aAotCSAqIG1hZGVfcHJvZ3Jlc3MgYmVsb3csIGluaXRpYWxpemVkIHRvIHRydWUgdG8g anVtcCBzdGFydCB0aGUgZmlyc3QKLQkgKiBpdGVyYXRpb24uCi0JICoKLQkgKiBJbiBvdGhlciB3 b3JkcyAoYWdhaW4pLCB0aGUgbG9vcCB3aWxsIG9ubHkgdGVybWluYXRlIGVhcmx5IChpLmUuIHN0 b3AKLQkgKiB3aXRoIGZpbGxlZCA8IG5maWxsKSBhZnRlciBnb2luZyB0aHJvdWdoIHRoZSB0aHJl ZSBzdGVwczogYSkgYmluCi0JICogbG9jYWwgZXhoYXVzdGVkLCBiKSB1bmxvY2sgYW5kIHNsYWJf YWxsb2MgcmV0dXJucyBudWxsLCBjKSByZS1sb2NrCi0JICogYW5kIGJpbiBsb2NhbCBmYWlscyBh Z2Fpbi4KLQkgKi8KLQlib29sIG1hZGVfcHJvZ3Jlc3MgPSB0cnVlOwotCWVkYXRhX3QgKmZyZXNo X3NsYWIgPSBOVUxMOwotCWJvb2wgYWxsb2NfYW5kX3JldHJ5ID0gZmFsc2U7Ci0JdW5zaWduZWQg ZmlsbGVkID0gMDsKLQl1bnNpZ25lZCBiaW5zaGFyZDsKLQliaW5fdCAqYmluID0gYXJlbmFfYmlu X2Nob29zZSh0c2RuLCBhcmVuYSwgYmluaW5kLCAmYmluc2hhcmQpOwotCi1sYWJlbF9yZWZpbGw6 Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJpbi0+bG9jayk7Ci0KLQl3aGlsZSAoZmlsbGVk IDwgbmZpbGwpIHsKLQkJLyogVHJ5IGJhdGNoLWZpbGwgZnJvbSBzbGFiY3VyIGZpcnN0LiAqLwot CQllZGF0YV90ICpzbGFiY3VyID0gYmluLT5zbGFiY3VyOwotCQlpZiAoc2xhYmN1ciAhPSBOVUxM ICYmIGVkYXRhX25mcmVlX2dldChzbGFiY3VyKSA+IDApIHsKLQkJCXVuc2lnbmVkIHRvZmlsbCA9 IG5maWxsIC0gZmlsbGVkOwotCQkJdW5zaWduZWQgbmZyZWUgPSBlZGF0YV9uZnJlZV9nZXQoc2xh YmN1cik7Ci0JCQl1bnNpZ25lZCBjbnQgPSB0b2ZpbGwgPCBuZnJlZSA/IHRvZmlsbCA6IG5mcmVl OwotCi0JCQlhcmVuYV9zbGFiX3JlZ19hbGxvY19iYXRjaChzbGFiY3VyLCBiaW5faW5mbywgY250 LAotCQkJICAgICZwdHJzLnB0cltmaWxsZWRdKTsKLQkJCW1hZGVfcHJvZ3Jlc3MgPSB0cnVlOwot CQkJZmlsbGVkICs9IGNudDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIE5leHQgdHJ5IHJlZmls bGluZyBzbGFiY3VyIGZyb20gbm9uZnVsbCBzbGFicy4gKi8KLQkJaWYgKCFhcmVuYV9iaW5fcmVm aWxsX3NsYWJjdXJfbm9fZnJlc2hfc2xhYih0c2RuLCBhcmVuYSwgYmluKSkgewotCQkJYXNzZXJ0 KGJpbi0+c2xhYmN1ciAhPSBOVUxMKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogVGhlbiBz ZWUgaWYgYSBuZXcgc2xhYiB3YXMgcmVzZXJ2ZWQgYWxyZWFkeS4gKi8KLQkJaWYgKGZyZXNoX3Ns YWIgIT0gTlVMTCkgewotCQkJYXJlbmFfYmluX3JlZmlsbF9zbGFiY3VyX3dpdGhfZnJlc2hfc2xh Yih0c2RuLCBhcmVuYSwKLQkJCSAgICBiaW4sIGJpbmluZCwgZnJlc2hfc2xhYik7Ci0JCQlhc3Nl cnQoYmluLT5zbGFiY3VyICE9IE5VTEwpOwotCQkJZnJlc2hfc2xhYiA9IE5VTEw7Ci0JCQljb250 aW51ZTsKLQkJfQotCi0JCS8qIFRyeSBzbGFiX2FsbG9jIGlmIG1hZGUgcHJvZ3Jlc3MgKG9yIG5l dmVyIGRpZCBzbGFiX2FsbG9jKS4gKi8KLQkJaWYgKG1hZGVfcHJvZ3Jlc3MpIHsKLQkJCWFzc2Vy dChiaW4tPnNsYWJjdXIgPT0gTlVMTCk7Ci0JCQlhc3NlcnQoZnJlc2hfc2xhYiA9PSBOVUxMKTsK LQkJCWFsbG9jX2FuZF9yZXRyeSA9IHRydWU7Ci0JCQkvKiBBbGxvYyBhIG5ldyBzbGFiIHRoZW4g Y29tZSBiYWNrLiAqLwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBPT00uICovCi0KLQkJYXNzZXJ0 KGZyZXNoX3NsYWIgPT0gTlVMTCk7Ci0JCWFzc2VydCghYWxsb2NfYW5kX3JldHJ5KTsKLQkJYnJl YWs7Ci0JfSAvKiB3aGlsZSAoZmlsbGVkIDwgbmZpbGwpIGxvb3AuICovCi0KLQlpZiAoY29uZmln X3N0YXRzICYmICFhbGxvY19hbmRfcmV0cnkpIHsKLQkJYmluLT5zdGF0cy5ubWFsbG9jICs9IGZp bGxlZDsKLQkJYmluLT5zdGF0cy5ucmVxdWVzdHMgKz0gY2FjaGVfYmluLT50c3RhdHMubnJlcXVl c3RzOwotCQliaW4tPnN0YXRzLmN1cnJlZ3MgKz0gZmlsbGVkOwotCQliaW4tPnN0YXRzLm5maWxs cysrOwotCQljYWNoZV9iaW4tPnRzdGF0cy5ucmVxdWVzdHMgPSAwOwotCX0KLQotCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgJmJpbi0+bG9jayk7Ci0KLQlpZiAoYWxsb2NfYW5kX3JldHJ5KSB7 Ci0JCWFzc2VydChmcmVzaF9zbGFiID09IE5VTEwpOwotCQlhc3NlcnQoZmlsbGVkIDwgbmZpbGwp OwotCQlhc3NlcnQobWFkZV9wcm9ncmVzcyk7Ci0KLQkJZnJlc2hfc2xhYiA9IGFyZW5hX3NsYWJf YWxsb2ModHNkbiwgYXJlbmEsIGJpbmluZCwgYmluc2hhcmQsCi0JCSAgICBiaW5faW5mbyk7Ci0J CS8qIGZyZXNoX3NsYWIgTlVMTCBjYXNlIGhhbmRsZWQgaW4gdGhlIGZvciBsb29wLiAqLwotCi0J CWFsbG9jX2FuZF9yZXRyeSA9IGZhbHNlOwotCQltYWRlX3Byb2dyZXNzID0gZmFsc2U7Ci0JCWdv dG8gbGFiZWxfcmVmaWxsOwotCX0KLQlhc3NlcnQoZmlsbGVkID09IG5maWxsIHx8IChmcmVzaF9z bGFiID09IE5VTEwgJiYgIW1hZGVfcHJvZ3Jlc3MpKTsKLQotCS8qIFJlbGVhc2UgaWYgYWxsb2Nh dGVkIGJ1dCBub3QgdXNlZC4gKi8KLQlpZiAoZnJlc2hfc2xhYiAhPSBOVUxMKSB7Ci0JCWFzc2Vy dChlZGF0YV9uZnJlZV9nZXQoZnJlc2hfc2xhYikgPT0gYmluX2luZm8tPm5yZWdzKTsKLQkJYXJl bmFfc2xhYl9kYWxsb2ModHNkbiwgYXJlbmEsIGZyZXNoX3NsYWIpOwotCQlmcmVzaF9zbGFiID0g TlVMTDsKLQl9Ci0KLQljYWNoZV9iaW5fZmluaXNoX2ZpbGwoY2FjaGVfYmluLCBjYWNoZV9iaW5f aW5mbywgJnB0cnMsIGZpbGxlZCk7Ci0JYXJlbmFfZGVjYXlfdGljayh0c2RuLCBhcmVuYSk7Ci19 Ci0KLXNpemVfdAotYXJlbmFfZmlsbF9zbWFsbF9mcmVzaCh0c2RuX3QgKnRzZG4sIGFyZW5hX3Qg KmFyZW5hLCBzemluZF90IGJpbmluZCwKLSAgICB2b2lkICoqcHRycywgc2l6ZV90IG5maWxsLCBi b29sIHplcm8pIHsKLQlhc3NlcnQoYmluaW5kIDwgU0NfTkJJTlMpOwotCWNvbnN0IGJpbl9pbmZv X3QgKmJpbl9pbmZvID0gJmJpbl9pbmZvc1tiaW5pbmRdOwotCWNvbnN0IHNpemVfdCBucmVncyA9 IGJpbl9pbmZvLT5ucmVnczsKLQlhc3NlcnQobnJlZ3MgPiAwKTsKLQljb25zdCBzaXplX3QgdXNp emUgPSBiaW5faW5mby0+cmVnX3NpemU7Ci0KLQljb25zdCBib29sIG1hbnVhbF9hcmVuYSA9ICFh cmVuYV9pc19hdXRvKGFyZW5hKTsKLQl1bnNpZ25lZCBiaW5zaGFyZDsKLQliaW5fdCAqYmluID0g YXJlbmFfYmluX2Nob29zZSh0c2RuLCBhcmVuYSwgYmluaW5kLCAmYmluc2hhcmQpOwotCi0Jc2l6 ZV90IG5zbGFiID0gMDsKLQlzaXplX3QgZmlsbGVkID0gMDsKLQllZGF0YV90ICpzbGFiID0gTlVM TDsKLQllZGF0YV9saXN0X2FjdGl2ZV90IGZ1bGxzOwotCWVkYXRhX2xpc3RfYWN0aXZlX2luaXQo JmZ1bGxzKTsKLQotCXdoaWxlIChmaWxsZWQgPCBuZmlsbCAmJiAoc2xhYiA9IGFyZW5hX3NsYWJf YWxsb2ModHNkbiwgYXJlbmEsIGJpbmluZCwKLQkgICAgYmluc2hhcmQsIGJpbl9pbmZvKSkgIT0g TlVMTCkgewotCQlhc3NlcnQoKHNpemVfdCllZGF0YV9uZnJlZV9nZXQoc2xhYikgPT0gbnJlZ3Mp OwotCQkrK25zbGFiOwotCQlzaXplX3QgYmF0Y2ggPSBuZmlsbCAtIGZpbGxlZDsKLQkJaWYgKGJh dGNoID4gbnJlZ3MpIHsKLQkJCWJhdGNoID0gbnJlZ3M7Ci0JCX0KLQkJYXNzZXJ0KGJhdGNoID4g MCk7Ci0JCWFyZW5hX3NsYWJfcmVnX2FsbG9jX2JhdGNoKHNsYWIsIGJpbl9pbmZvLCAodW5zaWdu ZWQpYmF0Y2gsCi0JCSAgICAmcHRyc1tmaWxsZWRdKTsKLQkJYXNzZXJ0KGVkYXRhX2FkZHJfZ2V0 KHNsYWIpID09IHB0cnNbZmlsbGVkXSk7Ci0JCWlmICh6ZXJvKSB7Ci0JCQltZW1zZXQocHRyc1tm aWxsZWRdLCAwLCBiYXRjaCAqIHVzaXplKTsKLQkJfQotCQlmaWxsZWQgKz0gYmF0Y2g7Ci0JCWlm IChiYXRjaCA9PSBucmVncykgewotCQkJaWYgKG1hbnVhbF9hcmVuYSkgewotCQkJCWVkYXRhX2xp c3RfYWN0aXZlX2FwcGVuZCgmZnVsbHMsIHNsYWIpOwotCQkJfQotCQkJc2xhYiA9IE5VTEw7Ci0J CX0KLQl9Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYmluLT5sb2NrKTsKLQkvKgotCSAq IE9ubHkgdGhlIGxhc3Qgc2xhYiBjYW4gYmUgbm9uLWVtcHR5LCBhbmQgdGhlIGxhc3Qgc2xhYiBp cyBub24tZW1wdHkKLQkgKiBpZmYgc2xhYiAhPSBOVUxMLgotCSAqLwotCWlmIChzbGFiICE9IE5V TEwpIHsKLQkJYXJlbmFfYmluX2xvd2VyX3NsYWIodHNkbiwgYXJlbmEsIHNsYWIsIGJpbik7Ci0J fQotCWlmIChtYW51YWxfYXJlbmEpIHsKLQkJZWRhdGFfbGlzdF9hY3RpdmVfY29uY2F0KCZiaW4t PnNsYWJzX2Z1bGwsICZmdWxscyk7Ci0JfQotCWFzc2VydChlZGF0YV9saXN0X2FjdGl2ZV9lbXB0 eSgmZnVsbHMpKTsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWJpbi0+c3RhdHMubnNsYWJzICs9 IG5zbGFiOwotCQliaW4tPnN0YXRzLmN1cnNsYWJzICs9IG5zbGFiOwotCQliaW4tPnN0YXRzLm5t YWxsb2MgKz0gZmlsbGVkOwotCQliaW4tPnN0YXRzLm5yZXF1ZXN0cyArPSBmaWxsZWQ7Ci0JCWJp bi0+c3RhdHMuY3VycmVncyArPSBmaWxsZWQ7Ci0JfQotCW1hbGxvY19tdXRleF91bmxvY2sodHNk biwgJmJpbi0+bG9jayk7Ci0KLQlhcmVuYV9kZWNheV90aWNrKHRzZG4sIGFyZW5hKTsKLQlyZXR1 cm4gZmlsbGVkOwotfQotCi0vKgotICogV2l0aG91dCBhbGxvY2F0aW5nIGEgbmV3IHNsYWIsIHRy eSBhcmVuYV9zbGFiX3JlZ19hbGxvYygpIGFuZCByZS1maWxsCi0gKiBiaW4tPnNsYWJjdXIgaWYg bmVjZXNzYXJ5LgotICovCi1zdGF0aWMgdm9pZCAqCi1hcmVuYV9iaW5fbWFsbG9jX25vX2ZyZXNo X3NsYWIodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgYmluX3QgKmJpbiwKLSAgICBzemlu ZF90IGJpbmluZCkgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJmJpbi0+bG9j ayk7Ci0JaWYgKGJpbi0+c2xhYmN1ciA9PSBOVUxMIHx8IGVkYXRhX25mcmVlX2dldChiaW4tPnNs YWJjdXIpID09IDApIHsKLQkJaWYgKGFyZW5hX2Jpbl9yZWZpbGxfc2xhYmN1cl9ub19mcmVzaF9z bGFiKHRzZG4sIGFyZW5hLCBiaW4pKSB7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQotCWFz c2VydChiaW4tPnNsYWJjdXIgIT0gTlVMTCAmJiBlZGF0YV9uZnJlZV9nZXQoYmluLT5zbGFiY3Vy KSA+IDApOwotCXJldHVybiBhcmVuYV9zbGFiX3JlZ19hbGxvYyhiaW4tPnNsYWJjdXIsICZiaW5f aW5mb3NbYmluaW5kXSk7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLWFyZW5hX21hbGxvY19zbWFsbCh0 c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBzemluZF90IGJpbmluZCwgYm9vbCB6ZXJvKSB7 Ci0JYXNzZXJ0KGJpbmluZCA8IFNDX05CSU5TKTsKLQljb25zdCBiaW5faW5mb190ICpiaW5faW5m byA9ICZiaW5faW5mb3NbYmluaW5kXTsKLQlzaXplX3QgdXNpemUgPSBzel9pbmRleDJzaXplKGJp bmluZCk7Ci0JdW5zaWduZWQgYmluc2hhcmQ7Ci0JYmluX3QgKmJpbiA9IGFyZW5hX2Jpbl9jaG9v c2UodHNkbiwgYXJlbmEsIGJpbmluZCwgJmJpbnNoYXJkKTsKLQotCW1hbGxvY19tdXRleF9sb2Nr KHRzZG4sICZiaW4tPmxvY2spOwotCWVkYXRhX3QgKmZyZXNoX3NsYWIgPSBOVUxMOwotCXZvaWQg KnJldCA9IGFyZW5hX2Jpbl9tYWxsb2Nfbm9fZnJlc2hfc2xhYih0c2RuLCBhcmVuYSwgYmluLCBi aW5pbmQpOwotCWlmIChyZXQgPT0gTlVMTCkgewotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4s ICZiaW4tPmxvY2spOwotCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQlmcmVz aF9zbGFiID0gYXJlbmFfc2xhYl9hbGxvYyh0c2RuLCBhcmVuYSwgYmluaW5kLCBiaW5zaGFyZCwK LQkJICAgIGJpbl9pbmZvKTsKLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot CQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYmluLT5sb2NrKTsKLQkJLyogUmV0cnkgc2luY2Ug dGhlIGxvY2sgd2FzIGRyb3BwZWQuICovCi0JCXJldCA9IGFyZW5hX2Jpbl9tYWxsb2Nfbm9fZnJl c2hfc2xhYih0c2RuLCBhcmVuYSwgYmluLCBiaW5pbmQpOwotCQlpZiAocmV0ID09IE5VTEwpIHsK LQkJCWlmIChmcmVzaF9zbGFiID09IE5VTEwpIHsKLQkJCQkvKiBPT00gKi8KLQkJCQltYWxsb2Nf bXV0ZXhfdW5sb2NrKHRzZG4sICZiaW4tPmxvY2spOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQot CQkJcmV0ID0gYXJlbmFfYmluX21hbGxvY193aXRoX2ZyZXNoX3NsYWIodHNkbiwgYXJlbmEsIGJp biwKLQkJCSAgICBiaW5pbmQsIGZyZXNoX3NsYWIpOwotCQkJZnJlc2hfc2xhYiA9IE5VTEw7Ci0J CX0KLQl9Ci0JaWYgKGNvbmZpZ19zdGF0cykgewotCQliaW4tPnN0YXRzLm5tYWxsb2MrKzsKLQkJ YmluLT5zdGF0cy5ucmVxdWVzdHMrKzsKLQkJYmluLT5zdGF0cy5jdXJyZWdzKys7Ci0JfQotCW1h bGxvY19tdXRleF91bmxvY2sodHNkbiwgJmJpbi0+bG9jayk7Ci0KLQlpZiAoZnJlc2hfc2xhYiAh PSBOVUxMKSB7Ci0JCWFyZW5hX3NsYWJfZGFsbG9jKHRzZG4sIGFyZW5hLCBmcmVzaF9zbGFiKTsK LQl9Ci0JaWYgKHplcm8pIHsKLQkJbWVtc2V0KHJldCwgMCwgdXNpemUpOwotCX0KLQlhcmVuYV9k ZWNheV90aWNrKHRzZG4sIGFyZW5hKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgKgotYXJl bmFfbWFsbG9jX2hhcmQodHNkbl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgc2l6ZV90IHNpemUs IHN6aW5kX3QgaW5kLAotICAgIGJvb2wgemVybykgewotCWFzc2VydCghdHNkbl9udWxsKHRzZG4p IHx8IGFyZW5hICE9IE5VTEwpOwotCi0JaWYgKGxpa2VseSghdHNkbl9udWxsKHRzZG4pKSkgewot CQlhcmVuYSA9IGFyZW5hX2Nob29zZV9tYXliZV9odWdlKHRzZG5fdHNkKHRzZG4pLCBhcmVuYSwg c2l6ZSk7Ci0JfQotCWlmICh1bmxpa2VseShhcmVuYSA9PSBOVUxMKSkgewotCQlyZXR1cm4gTlVM TDsKLQl9Ci0KLQlpZiAobGlrZWx5KHNpemUgPD0gU0NfU01BTExfTUFYQ0xBU1MpKSB7Ci0JCXJl dHVybiBhcmVuYV9tYWxsb2Nfc21hbGwodHNkbiwgYXJlbmEsIGluZCwgemVybyk7Ci0JfQotCXJl dHVybiBsYXJnZV9tYWxsb2ModHNkbiwgYXJlbmEsIHN6X2luZGV4MnNpemUoaW5kKSwgemVybyk7 Ci19Ci0KLXZvaWQgKgotYXJlbmFfcGFsbG9jKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEs IHNpemVfdCB1c2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKLSAgICBib29sIHplcm8sIHRjYWNoZV90 ICp0Y2FjaGUpIHsKLQl2b2lkICpyZXQ7Ci0KLQlpZiAodXNpemUgPD0gU0NfU01BTExfTUFYQ0xB U1MpIHsKLQkJLyogU21hbGw7IGFsaWdubWVudCBkb2Vzbid0IHJlcXVpcmUgc3BlY2lhbCBzbGFi IHBsYWNlbWVudC4gKi8KLQotCQkvKiB1c2l6ZSBzaG91bGQgYmUgYSByZXN1bHQgb2Ygc3pfc2Ey dSgpICovCi0JCWFzc2VydCgodXNpemUgJiAoYWxpZ25tZW50IC0gMSkpID09IDApOwotCi0JCS8q Ci0JCSAqIFNtYWxsIHVzaXplIGNhbid0IGNvbWUgZnJvbSBhbiBhbGlnbm1lbnQgbGFyZ2VyIHRo YW4gYSBwYWdlLgotCQkgKi8KLQkJYXNzZXJ0KGFsaWdubWVudCA8PSBQQUdFKTsKLQotCQlyZXQg PSBhcmVuYV9tYWxsb2ModHNkbiwgYXJlbmEsIHVzaXplLCBzel9zaXplMmluZGV4KHVzaXplKSwK LQkJICAgIHplcm8sIHRjYWNoZSwgdHJ1ZSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGxpa2VseShhbGln bm1lbnQgPD0gQ0FDSEVMSU5FKSkgewotCQkJcmV0ID0gbGFyZ2VfbWFsbG9jKHRzZG4sIGFyZW5h LCB1c2l6ZSwgemVybyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBsYXJnZV9wYWxsb2ModHNkbiwg YXJlbmEsIHVzaXplLCBhbGlnbm1lbnQsIHplcm8pOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19 Ci0KLXZvaWQKLWFyZW5hX3Byb2ZfcHJvbW90ZSh0c2RuX3QgKnRzZG4sIHZvaWQgKnB0ciwgc2l6 ZV90IHVzaXplKSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0JYXNzZXJ0KHB0ciAhPSBOVUxM KTsKLQlhc3NlcnQoaXNhbGxvYyh0c2RuLCBwdHIpID09IFNDX0xBUkdFX01JTkNMQVNTKTsKLQlh c3NlcnQodXNpemUgPD0gU0NfU01BTExfTUFYQ0xBU1MpOwotCi0JaWYgKGNvbmZpZ19vcHRfc2Fm ZXR5X2NoZWNrcykgewotCQlzYWZldHlfY2hlY2tfc2V0X3JlZHpvbmUocHRyLCB1c2l6ZSwgU0Nf TEFSR0VfTUlOQ0xBU1MpOwotCX0KLQotCWVkYXRhX3QgKmVkYXRhID0gZW1hcF9lZGF0YV9sb29r dXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpOwotCi0Jc3ppbmRfdCBzemluZCA9IHN6 X3NpemUyaW5kZXgodXNpemUpOwotCWVkYXRhX3N6aW5kX3NldChlZGF0YSwgc3ppbmQpOwotCWVt YXBfcmVtYXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBlZGF0YSwgc3ppbmQsIC8qIHNsYWIg Ki8gZmFsc2UpOwotCi0JYXNzZXJ0KGlzYWxsb2ModHNkbiwgcHRyKSA9PSB1c2l6ZSk7Ci19Ci0K LXN0YXRpYyBzaXplX3QKLWFyZW5hX3Byb2ZfZGVtb3RlKHRzZG5fdCAqdHNkbiwgZWRhdGFfdCAq ZWRhdGEsIGNvbnN0IHZvaWQgKnB0cikgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwotCWFzc2Vy dChwdHIgIT0gTlVMTCk7Ci0KLQllZGF0YV9zemluZF9zZXQoZWRhdGEsIFNDX05CSU5TKTsKLQll bWFwX3JlbWFwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgZWRhdGEsIFNDX05CSU5TLCAvKiBz bGFiICovIGZhbHNlKTsKLQotCWFzc2VydChpc2FsbG9jKHRzZG4sIHB0cikgPT0gU0NfTEFSR0Vf TUlOQ0xBU1MpOwotCi0JcmV0dXJuIFNDX0xBUkdFX01JTkNMQVNTOwotfQotCi12b2lkCi1hcmVu YV9kYWxsb2NfcHJvbW90ZWQodHNkbl90ICp0c2RuLCB2b2lkICpwdHIsIHRjYWNoZV90ICp0Y2Fj aGUsCi0gICAgYm9vbCBzbG93X3BhdGgpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3Nl cnQob3B0X3Byb2YpOwotCi0JZWRhdGFfdCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1cCh0c2Ru LCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cik7Ci0Jc2l6ZV90IHVzaXplID0gZWRhdGFfdXNpemVf Z2V0KGVkYXRhKTsKLQlzaXplX3QgYnVtcGVkX3VzaXplID0gYXJlbmFfcHJvZl9kZW1vdGUodHNk biwgZWRhdGEsIHB0cik7Ci0JaWYgKGNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcyAmJiB1c2l6ZSA8 IFNDX0xBUkdFX01JTkNMQVNTKSB7Ci0JCS8qCi0JCSAqIEN1cnJlbnRseSwgd2Ugb25seSBkbyBy ZWR6b25pbmcgZm9yIHNtYWxsIHNhbXBsZWQKLQkJICogYWxsb2NhdGlvbnMuCi0JCSAqLwotCQlh c3NlcnQoYnVtcGVkX3VzaXplID09IFNDX0xBUkdFX01JTkNMQVNTKTsKLQkJc2FmZXR5X2NoZWNr X3ZlcmlmeV9yZWR6b25lKHB0ciwgdXNpemUsIGJ1bXBlZF91c2l6ZSk7Ci0JfQotCWlmIChidW1w ZWRfdXNpemUgPD0gdGNhY2hlX21heGNsYXNzICYmIHRjYWNoZSAhPSBOVUxMKSB7Ci0JCXRjYWNo ZV9kYWxsb2NfbGFyZ2UodHNkbl90c2QodHNkbiksIHRjYWNoZSwgcHRyLAotCQkgICAgc3pfc2l6 ZTJpbmRleChidW1wZWRfdXNpemUpLCBzbG93X3BhdGgpOwotCX0gZWxzZSB7Ci0JCWxhcmdlX2Rh bGxvYyh0c2RuLCBlZGF0YSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFfZGlzc29jaWF0 ZV9iaW5fc2xhYihhcmVuYV90ICphcmVuYSwgZWRhdGFfdCAqc2xhYiwgYmluX3QgKmJpbikgewot CS8qIERpc3NvY2lhdGUgc2xhYiBmcm9tIGJpbi4gKi8KLQlpZiAoc2xhYiA9PSBiaW4tPnNsYWJj dXIpIHsKLQkJYmluLT5zbGFiY3VyID0gTlVMTDsKLQl9IGVsc2UgewotCQlzemluZF90IGJpbmlu ZCA9IGVkYXRhX3N6aW5kX2dldChzbGFiKTsKLQkJY29uc3QgYmluX2luZm9fdCAqYmluX2luZm8g PSAmYmluX2luZm9zW2JpbmluZF07Ci0KLQkJLyoKLQkJICogVGhlIGZvbGxvd2luZyBibG9jaydz IGNvbmRpdGlvbmFsIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGlmIHRoZQotCQkgKiBzbGFiIG9ubHkg Y29udGFpbnMgb25lIHJlZ2lvbiwgdGhlbiBpdCBuZXZlciBnZXRzIGluc2VydGVkCi0JCSAqIGlu dG8gdGhlIG5vbi1mdWxsIHNsYWJzIGhlYXAuCi0JCSAqLwotCQlpZiAoYmluX2luZm8tPm5yZWdz ID09IDEpIHsKLQkJCWFyZW5hX2Jpbl9zbGFic19mdWxsX3JlbW92ZShhcmVuYSwgYmluLCBzbGFi KTsKLQkJfSBlbHNlIHsKLQkJCWFyZW5hX2Jpbl9zbGFic19ub25mdWxsX3JlbW92ZShiaW4sIHNs YWIpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFfYmluX2xvd2VyX3NsYWIodHNk bl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSwgZWRhdGFfdCAqc2xhYiwKLSAgICBiaW5fdCAqYmlu KSB7Ci0JYXNzZXJ0KGVkYXRhX25mcmVlX2dldChzbGFiKSA+IDApOwotCi0JLyoKLQkgKiBNYWtl IHN1cmUgdGhhdCBpZiBiaW4tPnNsYWJjdXIgaXMgbm9uLU5VTEwsIGl0IHJlZmVycyB0byB0aGUK LQkgKiBvbGRlc3QvbG93ZXN0IG5vbi1mdWxsIHNsYWIuICBJdCBpcyBva2F5IHRvIE5VTEwgc2xh YmN1ciBvdXQgcmF0aGVyCi0JICogdGhhbiBwcm9hY3RpdmVseSBrZWVwaW5nIGl0IHBvaW50aW5n IGF0IHRoZSBvbGRlc3QvbG93ZXN0IG5vbi1mdWxsCi0JICogc2xhYi4KLQkgKi8KLQlpZiAoYmlu LT5zbGFiY3VyICE9IE5VTEwgJiYgZWRhdGFfc25hZF9jb21wKGJpbi0+c2xhYmN1ciwgc2xhYikg PiAwKSB7Ci0JCS8qIFN3aXRjaCBzbGFiY3VyLiAqLwotCQlpZiAoZWRhdGFfbmZyZWVfZ2V0KGJp bi0+c2xhYmN1cikgPiAwKSB7Ci0JCQlhcmVuYV9iaW5fc2xhYnNfbm9uZnVsbF9pbnNlcnQoYmlu LCBiaW4tPnNsYWJjdXIpOwotCQl9IGVsc2UgewotCQkJYXJlbmFfYmluX3NsYWJzX2Z1bGxfaW5z ZXJ0KGFyZW5hLCBiaW4sIGJpbi0+c2xhYmN1cik7Ci0JCX0KLQkJYmluLT5zbGFiY3VyID0gc2xh YjsKLQkJaWYgKGNvbmZpZ19zdGF0cykgewotCQkJYmluLT5zdGF0cy5yZXNsYWJzKys7Ci0JCX0K LQl9IGVsc2UgewotCQlhcmVuYV9iaW5fc2xhYnNfbm9uZnVsbF9pbnNlcnQoYmluLCBzbGFiKTsK LQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcmVuYV9kYWxsb2NfYmluX3NsYWJfcHJlcGFyZSh0c2Ru X3QgKnRzZG4sIGVkYXRhX3QgKnNsYWIsIGJpbl90ICpiaW4pIHsKLQltYWxsb2NfbXV0ZXhfYXNz ZXJ0X293bmVyKHRzZG4sICZiaW4tPmxvY2spOwotCi0JYXNzZXJ0KHNsYWIgIT0gYmluLT5zbGFi Y3VyKTsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWJpbi0+c3RhdHMuY3Vyc2xhYnMtLTsKLQl9 Ci19Ci0KLXZvaWQKLWFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2hhbmRsZV9uZXdseV9lbXB0eSh0 c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLAotICAgIGVkYXRhX3QgKnNsYWIsIGJpbl90ICpi aW4pIHsKLQlhcmVuYV9kaXNzb2NpYXRlX2Jpbl9zbGFiKGFyZW5hLCBzbGFiLCBiaW4pOwotCWFy ZW5hX2RhbGxvY19iaW5fc2xhYl9wcmVwYXJlKHRzZG4sIHNsYWIsIGJpbik7Ci19Ci0KLXZvaWQK LWFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2hhbmRsZV9uZXdseV9ub25lbXB0eSh0c2RuX3QgKnRz ZG4sIGFyZW5hX3QgKmFyZW5hLAotICAgIGVkYXRhX3QgKnNsYWIsIGJpbl90ICpiaW4pIHsKLQlh cmVuYV9iaW5fc2xhYnNfZnVsbF9yZW1vdmUoYXJlbmEsIGJpbiwgc2xhYik7Ci0JYXJlbmFfYmlu X2xvd2VyX3NsYWIodHNkbiwgYXJlbmEsIHNsYWIsIGJpbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1h cmVuYV9kYWxsb2NfYmluKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGVkYXRhX3QgKmVk YXRhLCB2b2lkICpwdHIpIHsKLQlzemluZF90IGJpbmluZCA9IGVkYXRhX3N6aW5kX2dldChlZGF0 YSk7Ci0JdW5zaWduZWQgYmluc2hhcmQgPSBlZGF0YV9iaW5zaGFyZF9nZXQoZWRhdGEpOwotCWJp bl90ICpiaW4gPSBhcmVuYV9nZXRfYmluKGFyZW5hLCBiaW5pbmQsIGJpbnNoYXJkKTsKLQotCW1h bGxvY19tdXRleF9sb2NrKHRzZG4sICZiaW4tPmxvY2spOwotCWFyZW5hX2RhbGxvY19iaW5fbG9j a2VkX2luZm9fdCBpbmZvOwotCWFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2JlZ2luKCZpbmZvLCBi aW5pbmQpOwotCWJvb2wgcmV0ID0gYXJlbmFfZGFsbG9jX2Jpbl9sb2NrZWRfc3RlcCh0c2RuLCBh cmVuYSwgYmluLAotCSAgICAmaW5mbywgYmluaW5kLCBlZGF0YSwgcHRyKTsKLQlhcmVuYV9kYWxs b2NfYmluX2xvY2tlZF9maW5pc2godHNkbiwgYXJlbmEsIGJpbiwgJmluZm8pOwotCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgJmJpbi0+bG9jayk7Ci0KLQlpZiAocmV0KSB7Ci0JCWFyZW5hX3Ns YWJfZGFsbG9jKHRzZG4sIGFyZW5hLCBlZGF0YSk7Ci0JfQotfQotCi12b2lkCi1hcmVuYV9kYWxs b2Nfc21hbGwodHNkbl90ICp0c2RuLCB2b2lkICpwdHIpIHsKLQllZGF0YV90ICplZGF0YSA9IGVt YXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKLQlhcmVuYV90 ICphcmVuYSA9IGFyZW5hX2dldF9mcm9tX2VkYXRhKGVkYXRhKTsKLQotCWFyZW5hX2RhbGxvY19i aW4odHNkbiwgYXJlbmEsIGVkYXRhLCBwdHIpOwotCWFyZW5hX2RlY2F5X3RpY2sodHNkbiwgYXJl bmEpOwotfQotCi1ib29sCi1hcmVuYV9yYWxsb2Nfbm9fbW92ZSh0c2RuX3QgKnRzZG4sIHZvaWQg KnB0ciwgc2l6ZV90IG9sZHNpemUsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBleHRyYSwgYm9v bCB6ZXJvLCBzaXplX3QgKm5ld3NpemUpIHsKLQlib29sIHJldDsKLQkvKiBDYWxscyB3aXRoIG5v bi16ZXJvIGV4dHJhIGhhZCB0byBjbGFtcCBleHRyYS4gKi8KLQlhc3NlcnQoZXh0cmEgPT0gMCB8 fCBzaXplICsgZXh0cmEgPD0gU0NfTEFSR0VfTUFYQ0xBU1MpOwotCi0JZWRhdGFfdCAqZWRhdGEg PSBlbWFwX2VkYXRhX2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cik7Ci0JaWYg KHVubGlrZWx5KHNpemUgPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKLQkJcmV0ID0gdHJ1ZTsKLQkJ Z290byBkb25lOwotCX0KLQotCXNpemVfdCB1c2l6ZV9taW4gPSBzel9zMnUoc2l6ZSk7Ci0Jc2l6 ZV90IHVzaXplX21heCA9IHN6X3MydShzaXplICsgZXh0cmEpOwotCWlmIChsaWtlbHkob2xkc2l6 ZSA8PSBTQ19TTUFMTF9NQVhDTEFTUyAmJiB1c2l6ZV9taW4KLQkgICAgPD0gU0NfU01BTExfTUFY Q0xBU1MpKSB7Ci0JCS8qCi0JCSAqIEF2b2lkIG1vdmluZyB0aGUgYWxsb2NhdGlvbiBpZiB0aGUg c2l6ZSBjbGFzcyBjYW4gYmUgbGVmdCB0aGUKLQkJICogc2FtZS4KLQkJICovCi0JCWFzc2VydChi aW5faW5mb3Nbc3pfc2l6ZTJpbmRleChvbGRzaXplKV0ucmVnX3NpemUgPT0KLQkJICAgIG9sZHNp emUpOwotCQlpZiAoKHVzaXplX21heCA+IFNDX1NNQUxMX01BWENMQVNTCi0JCSAgICB8fCBzel9z aXplMmluZGV4KHVzaXplX21heCkgIT0gc3pfc2l6ZTJpbmRleChvbGRzaXplKSkKLQkJICAgICYm IChzaXplID4gb2xkc2l6ZSB8fCB1c2l6ZV9tYXggPCBvbGRzaXplKSkgewotCQkJcmV0ID0gdHJ1 ZTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0X2Zy b21fZWRhdGEoZWRhdGEpOwotCQlhcmVuYV9kZWNheV90aWNrKHRzZG4sIGFyZW5hKTsKLQkJcmV0 ID0gZmFsc2U7Ci0JfSBlbHNlIGlmIChvbGRzaXplID49IFNDX0xBUkdFX01JTkNMQVNTCi0JICAg ICYmIHVzaXplX21heCA+PSBTQ19MQVJHRV9NSU5DTEFTUykgewotCQlyZXQgPSBsYXJnZV9yYWxs b2Nfbm9fbW92ZSh0c2RuLCBlZGF0YSwgdXNpemVfbWluLCB1c2l6ZV9tYXgsCi0JCSAgICB6ZXJv KTsKLQl9IGVsc2UgewotCQlyZXQgPSB0cnVlOwotCX0KLWRvbmU6Ci0JYXNzZXJ0KGVkYXRhID09 IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKSk7Ci0JKm5l d3NpemUgPSBlZGF0YV91c2l6ZV9nZXQoZWRhdGEpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3Rh dGljIHZvaWQgKgotYXJlbmFfcmFsbG9jX21vdmVfaGVscGVyKHRzZG5fdCAqdHNkbiwgYXJlbmFf dCAqYXJlbmEsIHNpemVfdCB1c2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8s IHRjYWNoZV90ICp0Y2FjaGUpIHsKLQlpZiAoYWxpZ25tZW50ID09IDApIHsKLQkJcmV0dXJuIGFy ZW5hX21hbGxvYyh0c2RuLCBhcmVuYSwgdXNpemUsIHN6X3NpemUyaW5kZXgodXNpemUpLAotCQkg ICAgemVybywgdGNhY2hlLCB0cnVlKTsKLQl9Ci0JdXNpemUgPSBzel9zYTJ1KHVzaXplLCBhbGln bm1lbnQpOwotCWlmICh1bmxpa2VseSh1c2l6ZSA9PSAwIHx8IHVzaXplID4gU0NfTEFSR0VfTUFY Q0xBU1MpKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gaXBhbGxvY3QodHNkbiwgdXNp emUsIGFsaWdubWVudCwgemVybywgdGNhY2hlLCBhcmVuYSk7Ci19Ci0KLXZvaWQgKgotYXJlbmFf cmFsbG9jKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHZvaWQgKnB0ciwgc2l6ZV90IG9s ZHNpemUsCi0gICAgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgdGNh Y2hlX3QgKnRjYWNoZSwKLSAgICBob29rX3JhbGxvY19hcmdzX3QgKmhvb2tfYXJncykgewotCXNp emVfdCB1c2l6ZSA9IGFsaWdubWVudCA9PSAwID8gc3pfczJ1KHNpemUpIDogc3pfc2EydShzaXpl LCBhbGlnbm1lbnQpOwotCWlmICh1bmxpa2VseSh1c2l6ZSA9PSAwIHx8IHNpemUgPiBTQ19MQVJH RV9NQVhDTEFTUykpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGxpa2VseSh1c2l6ZSA8 PSBTQ19TTUFMTF9NQVhDTEFTUykpIHsKLQkJLyogVHJ5IHRvIGF2b2lkIG1vdmluZyB0aGUgYWxs b2NhdGlvbi4gKi8KLQkJVU5VU0VEIHNpemVfdCBuZXdzaXplOwotCQlpZiAoIWFyZW5hX3JhbGxv Y19ub19tb3ZlKHRzZG4sIHB0ciwgb2xkc2l6ZSwgdXNpemUsIDAsIHplcm8sCi0JCSAgICAmbmV3 c2l6ZSkpIHsKLQkJCWhvb2tfaW52b2tlX2V4cGFuZChob29rX2FyZ3MtPmlzX3JlYWxsb2MKLQkJ CSAgICA/IGhvb2tfZXhwYW5kX3JlYWxsb2MgOiBob29rX2V4cGFuZF9yYWxsb2N4LAotCQkJICAg IHB0ciwgb2xkc2l6ZSwgdXNpemUsICh1aW50cHRyX3QpcHRyLAotCQkJICAgIGhvb2tfYXJncy0+ YXJncyk7Ci0JCQlyZXR1cm4gcHRyOwotCQl9Ci0JfQotCi0JaWYgKG9sZHNpemUgPj0gU0NfTEFS R0VfTUlOQ0xBU1MKLQkgICAgJiYgdXNpemUgPj0gU0NfTEFSR0VfTUlOQ0xBU1MpIHsKLQkJcmV0 dXJuIGxhcmdlX3JhbGxvYyh0c2RuLCBhcmVuYSwgcHRyLCB1c2l6ZSwKLQkJICAgIGFsaWdubWVu dCwgemVybywgdGNhY2hlLCBob29rX2FyZ3MpOwotCX0KLQotCS8qCi0JICogc2l6ZSBhbmQgb2xk c2l6ZSBhcmUgZGlmZmVyZW50IGVub3VnaCB0aGF0IHdlIG5lZWQgdG8gbW92ZSB0aGUKLQkgKiBv YmplY3QuICBJbiB0aGF0IGNhc2UsIGZhbGwgYmFjayB0byBhbGxvY2F0aW5nIG5ldyBzcGFjZSBh bmQgY29weWluZy4KLQkgKi8KLQl2b2lkICpyZXQgPSBhcmVuYV9yYWxsb2NfbW92ZV9oZWxwZXIo dHNkbiwgYXJlbmEsIHVzaXplLCBhbGlnbm1lbnQsCi0JICAgIHplcm8sIHRjYWNoZSk7Ci0JaWYg KHJldCA9PSBOVUxMKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWhvb2tfaW52b2tlX2FsbG9j KGhvb2tfYXJncy0+aXNfcmVhbGxvYwotCSAgICA/IGhvb2tfYWxsb2NfcmVhbGxvYyA6IGhvb2tf YWxsb2NfcmFsbG9jeCwgcmV0LCAodWludHB0cl90KXJldCwKLQkgICAgaG9va19hcmdzLT5hcmdz KTsKLQlob29rX2ludm9rZV9kYWxsb2MoaG9va19hcmdzLT5pc19yZWFsbG9jCi0JICAgID8gaG9v a19kYWxsb2NfcmVhbGxvYyA6IGhvb2tfZGFsbG9jX3JhbGxvY3gsIHB0ciwgaG9va19hcmdzLT5h cmdzKTsKLQotCS8qCi0JICogSnVuay96ZXJvLWZpbGxpbmcgd2VyZSBhbHJlYWR5IGRvbmUgYnkK LQkgKiBpcGFsbG9jKCkvYXJlbmFfbWFsbG9jKCkuCi0JICovCi0Jc2l6ZV90IGNvcHlzaXplID0g KHVzaXplIDwgb2xkc2l6ZSkgPyB1c2l6ZSA6IG9sZHNpemU7Ci0JbWVtY3B5KHJldCwgcHRyLCBj b3B5c2l6ZSk7Ci0JaXNkYWxsb2N0KHRzZG4sIHB0ciwgb2xkc2l6ZSwgdGNhY2hlLCBOVUxMLCB0 cnVlKTsKLQlyZXR1cm4gcmV0OwotfQotCi1laG9va3NfdCAqCi1hcmVuYV9nZXRfZWhvb2tzKGFy ZW5hX3QgKmFyZW5hKSB7Ci0JcmV0dXJuIGJhc2VfZWhvb2tzX2dldChhcmVuYS0+YmFzZSk7Ci19 Ci0KLWV4dGVudF9ob29rc190ICoKLWFyZW5hX3NldF9leHRlbnRfaG9va3ModHNkX3QgKnRzZCwg YXJlbmFfdCAqYXJlbmEsCi0gICAgZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcykgewotCWJh Y2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbzsKLQlpZiAoaGF2ZV9iYWNrZ3JvdW5kX3RocmVh ZCkgewotCQlpbmZvID0gYXJlbmFfYmFja2dyb3VuZF90aHJlYWRfaW5mb19nZXQoYXJlbmEpOwot CQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKLQl9Ci0JLyog Tm8gdXNpbmcgdGhlIEhQQSBub3cgdGhhdCB3ZSBoYXZlIHRoZSBjdXN0b20gaG9va3MuICovCi0J cGFfc2hhcmRfZGlzYWJsZV9ocGEodHNkX3RzZG4odHNkKSwgJmFyZW5hLT5wYV9zaGFyZCk7Ci0J ZXh0ZW50X2hvb2tzX3QgKnJldCA9IGJhc2VfZXh0ZW50X2hvb2tzX3NldChhcmVuYS0+YmFzZSwg ZXh0ZW50X2hvb2tzKTsKLQlpZiAoaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCkgewotCQltYWxsb2Nf bXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCX0KLQotCXJldHVybiBy ZXQ7Ci19Ci0KLWRzc19wcmVjX3QKLWFyZW5hX2Rzc19wcmVjX2dldChhcmVuYV90ICphcmVuYSkg ewotCXJldHVybiAoZHNzX3ByZWNfdClhdG9taWNfbG9hZF91KCZhcmVuYS0+ZHNzX3ByZWMsIEFU T01JQ19BQ1FVSVJFKTsKLX0KLQotYm9vbAotYXJlbmFfZHNzX3ByZWNfc2V0KGFyZW5hX3QgKmFy ZW5hLCBkc3NfcHJlY190IGRzc19wcmVjKSB7Ci0JaWYgKCFoYXZlX2RzcykgewotCQlyZXR1cm4g KGRzc19wcmVjICE9IGRzc19wcmVjX2Rpc2FibGVkKTsKLQl9Ci0JYXRvbWljX3N0b3JlX3UoJmFy ZW5hLT5kc3NfcHJlYywgKHVuc2lnbmVkKWRzc19wcmVjLCBBVE9NSUNfUkVMRUFTRSk7Ci0JcmV0 dXJuIGZhbHNlOwotfQotCi1zc2l6ZV90Ci1hcmVuYV9kaXJ0eV9kZWNheV9tc19kZWZhdWx0X2dl dCh2b2lkKSB7Ci0JcmV0dXJuIGF0b21pY19sb2FkX3pkKCZkaXJ0eV9kZWNheV9tc19kZWZhdWx0 LCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLWJvb2wKLWFyZW5hX2RpcnR5X2RlY2F5X21zX2RlZmF1 bHRfc2V0KHNzaXplX3QgZGVjYXlfbXMpIHsKLQlpZiAoIWRlY2F5X21zX3ZhbGlkKGRlY2F5X21z KSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JYXRvbWljX3N0b3JlX3pkKCZkaXJ0eV9kZWNheV9t c19kZWZhdWx0LCBkZWNheV9tcywgQVRPTUlDX1JFTEFYRUQpOwotCXJldHVybiBmYWxzZTsKLX0K LQotc3NpemVfdAotYXJlbmFfbXV6enlfZGVjYXlfbXNfZGVmYXVsdF9nZXQodm9pZCkgewotCXJl dHVybiBhdG9taWNfbG9hZF96ZCgmbXV6enlfZGVjYXlfbXNfZGVmYXVsdCwgQVRPTUlDX1JFTEFY RUQpOwotfQotCi1ib29sCi1hcmVuYV9tdXp6eV9kZWNheV9tc19kZWZhdWx0X3NldChzc2l6ZV90 IGRlY2F5X21zKSB7Ci0JaWYgKCFkZWNheV9tc192YWxpZChkZWNheV9tcykpIHsKLQkJcmV0dXJu IHRydWU7Ci0JfQotCWF0b21pY19zdG9yZV96ZCgmbXV6enlfZGVjYXlfbXNfZGVmYXVsdCwgZGVj YXlfbXMsIEFUT01JQ19SRUxBWEVEKTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wKLWFyZW5h X3JldGFpbl9ncm93X2xpbWl0X2dldF9zZXQodHNkX3QgKnRzZCwgYXJlbmFfdCAqYXJlbmEsIHNp emVfdCAqb2xkX2xpbWl0LAotICAgIHNpemVfdCAqbmV3X2xpbWl0KSB7Ci0JYXNzZXJ0KG9wdF9y ZXRhaW4pOwotCXJldHVybiBwYWNfcmV0YWluX2dyb3dfbGltaXRfZ2V0X3NldCh0c2RfdHNkbih0 c2QpLAotCSAgICAmYXJlbmEtPnBhX3NoYXJkLnBhYywgb2xkX2xpbWl0LCBuZXdfbGltaXQpOwot fQotCi11bnNpZ25lZAotYXJlbmFfbnRocmVhZHNfZ2V0KGFyZW5hX3QgKmFyZW5hLCBib29sIGlu dGVybmFsKSB7Ci0JcmV0dXJuIGF0b21pY19sb2FkX3UoJmFyZW5hLT5udGhyZWFkc1tpbnRlcm5h bF0sIEFUT01JQ19SRUxBWEVEKTsKLX0KLQotdm9pZAotYXJlbmFfbnRocmVhZHNfaW5jKGFyZW5h X3QgKmFyZW5hLCBib29sIGludGVybmFsKSB7Ci0JYXRvbWljX2ZldGNoX2FkZF91KCZhcmVuYS0+ bnRocmVhZHNbaW50ZXJuYWxdLCAxLCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLXZvaWQKLWFyZW5h X250aHJlYWRzX2RlYyhhcmVuYV90ICphcmVuYSwgYm9vbCBpbnRlcm5hbCkgewotCWF0b21pY19m ZXRjaF9zdWJfdSgmYXJlbmEtPm50aHJlYWRzW2ludGVybmFsXSwgMSwgQVRPTUlDX1JFTEFYRUQp OwotfQotCi1hcmVuYV90ICoKLWFyZW5hX25ldyh0c2RuX3QgKnRzZG4sIHVuc2lnbmVkIGluZCwg Y29uc3QgYXJlbmFfY29uZmlnX3QgKmNvbmZpZykgewotCWFyZW5hX3QgKmFyZW5hOwotCWJhc2Vf dCAqYmFzZTsKLQl1bnNpZ25lZCBpOwotCi0JaWYgKGluZCA9PSAwKSB7Ci0JCWJhc2UgPSBiMGdl dCgpOwotCX0gZWxzZSB7Ci0JCWJhc2UgPSBiYXNlX25ldyh0c2RuLCBpbmQsIGNvbmZpZy0+ZXh0 ZW50X2hvb2tzLAotCQkgICAgY29uZmlnLT5tZXRhZGF0YV91c2VfaG9va3MpOwotCQlpZiAoYmFz ZSA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQotCXNpemVfdCBhcmVuYV9z aXplID0gc2l6ZW9mKGFyZW5hX3QpICsgc2l6ZW9mKGJpbl90KSAqIG5iaW5zX3RvdGFsOwotCWFy ZW5hID0gKGFyZW5hX3QgKiliYXNlX2FsbG9jKHRzZG4sIGJhc2UsIGFyZW5hX3NpemUsIENBQ0hF TElORSk7Ci0JaWYgKGFyZW5hID09IE5VTEwpIHsKLQkJZ290byBsYWJlbF9lcnJvcjsKLQl9Ci0K LQlhdG9taWNfc3RvcmVfdSgmYXJlbmEtPm50aHJlYWRzWzBdLCAwLCBBVE9NSUNfUkVMQVhFRCk7 Ci0JYXRvbWljX3N0b3JlX3UoJmFyZW5hLT5udGhyZWFkc1sxXSwgMCwgQVRPTUlDX1JFTEFYRUQp OwotCWFyZW5hLT5sYXN0X3RoZCA9IE5VTEw7Ci0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWlm IChhcmVuYV9zdGF0c19pbml0KHRzZG4sICZhcmVuYS0+c3RhdHMpKSB7Ci0JCQlnb3RvIGxhYmVs X2Vycm9yOwotCQl9Ci0KLQkJcWxfbmV3KCZhcmVuYS0+dGNhY2hlX3FsKTsKLQkJcWxfbmV3KCZh cmVuYS0+Y2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3JfcWwpOwotCQlpZiAobWFsbG9jX211dGV4 X2luaXQoJmFyZW5hLT50Y2FjaGVfcWxfbXR4LCAidGNhY2hlX3FsIiwKLQkJICAgIFdJVE5FU1Nf UkFOS19UQ0FDSEVfUUwsIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJCWdvdG8g bGFiZWxfZXJyb3I7Ci0JCX0KLQl9Ci0KLQlhdG9taWNfc3RvcmVfdSgmYXJlbmEtPmRzc19wcmVj LCAodW5zaWduZWQpZXh0ZW50X2Rzc19wcmVjX2dldCgpLAotCSAgICBBVE9NSUNfUkVMQVhFRCk7 Ci0KLQllZGF0YV9saXN0X2FjdGl2ZV9pbml0KCZhcmVuYS0+bGFyZ2UpOwotCWlmIChtYWxsb2Nf bXV0ZXhfaW5pdCgmYXJlbmEtPmxhcmdlX210eCwgImFyZW5hX2xhcmdlIiwKLQkgICAgV0lUTkVT U19SQU5LX0FSRU5BX0xBUkdFLCBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7Ci0JCWdv dG8gbGFiZWxfZXJyb3I7Ci0JfQotCi0JbnN0aW1lX3QgY3VyX3RpbWU7Ci0JbnN0aW1lX2luaXRf dXBkYXRlKCZjdXJfdGltZSk7Ci0JaWYgKHBhX3NoYXJkX2luaXQodHNkbiwgJmFyZW5hLT5wYV9z aGFyZCwgJmFyZW5hX3BhX2NlbnRyYWxfZ2xvYmFsLAotCSAgICAmYXJlbmFfZW1hcF9nbG9iYWws IGJhc2UsIGluZCwgJmFyZW5hLT5zdGF0cy5wYV9zaGFyZF9zdGF0cywKLQkgICAgTE9DS0VESU5U X01UWChhcmVuYS0+c3RhdHMubXR4KSwgJmN1cl90aW1lLCBvdmVyc2l6ZV90aHJlc2hvbGQsCi0J ICAgIGFyZW5hX2RpcnR5X2RlY2F5X21zX2RlZmF1bHRfZ2V0KCksCi0JICAgIGFyZW5hX211enp5 X2RlY2F5X21zX2RlZmF1bHRfZ2V0KCkpKSB7Ci0JCWdvdG8gbGFiZWxfZXJyb3I7Ci0JfQotCi0J LyogSW5pdGlhbGl6ZSBiaW5zLiAqLwotCWF0b21pY19zdG9yZV91KCZhcmVuYS0+Ymluc2hhcmRf bmV4dCwgMCwgQVRPTUlDX1JFTEVBU0UpOwotCWZvciAoaSA9IDA7IGkgPCBuYmluc190b3RhbDsg aSsrKSB7Ci0JCWJvb2wgZXJyID0gYmluX2luaXQoJmFyZW5hLT5iaW5zW2ldKTsKLQkJaWYgKGVy cikgewotCQkJZ290byBsYWJlbF9lcnJvcjsKLQkJfQotCX0KLQotCWFyZW5hLT5iYXNlID0gYmFz ZTsKLQkvKiBTZXQgYXJlbmEgYmVmb3JlIGNyZWF0aW5nIGJhY2tncm91bmQgdGhyZWFkcy4gKi8K LQlhcmVuYV9zZXQoaW5kLCBhcmVuYSk7Ci0JYXJlbmEtPmluZCA9IGluZDsKLQotCW5zdGltZV9p bml0X3VwZGF0ZSgmYXJlbmEtPmNyZWF0ZV90aW1lKTsKLQotCS8qCi0JICogV2UgdHVybiBvbiB0 aGUgSFBBIGlmIHNldCB0by4gIFRoZXJlIGFyZSB0d28gZXhjZXB0aW9uczoKLQkgKiAtIEN1c3Rv bSBleHRlbnQgaG9va3MgKHdlIHNob3VsZCBvbmx5IHJldHVybiBtZW1vcnkgYWxsb2NhdGVkIGZy b20KLQkgKiAgIHRoZW0gaW4gdGhhdCBjYXNlKS4KLQkgKiAtIEFyZW5hIDAgaW5pdGlhbGl6YXRp b24uICBJbiB0aGlzIGNhc2UsIHdlJ3JlIG1pZC1ib290c3RyYXBwaW5nLCBhbmQKLQkgKiAgIHNv IGFyZW5hX2hwYV9nbG9iYWwgaXMgbm90IHlldCBpbml0aWFsaXplZC4KLQkgKi8KLQlpZiAob3B0 X2hwYSAmJiBlaG9va3NfYXJlX2RlZmF1bHQoYmFzZV9laG9va3NfZ2V0KGJhc2UpKSAmJiBpbmQg IT0gMCkgewotCQlocGFfc2hhcmRfb3B0c190IGhwYV9zaGFyZF9vcHRzID0gb3B0X2hwYV9vcHRz OwotCQlocGFfc2hhcmRfb3B0cy5kZWZlcnJhbF9hbGxvd2VkID0gYmFja2dyb3VuZF90aHJlYWRf ZW5hYmxlZCgpOwotCQlpZiAocGFfc2hhcmRfZW5hYmxlX2hwYSh0c2RuLCAmYXJlbmEtPnBhX3No YXJkLAotCQkgICAgJmhwYV9zaGFyZF9vcHRzLCAmb3B0X2hwYV9zZWNfb3B0cykpIHsKLQkJCWdv dG8gbGFiZWxfZXJyb3I7Ci0JCX0KLQl9Ci0KLQkvKiBXZSBkb24ndCBzdXBwb3J0IHJlZW50cmFu Y3kgZm9yIGFyZW5hIDAgYm9vdHN0cmFwcGluZy4gKi8KLQlpZiAoaW5kICE9IDApIHsKLQkJLyoK LQkJICogSWYgd2UncmUgaGVyZSwgdGhlbiBhcmVuYSAwIGFscmVhZHkgZXhpc3RzLCBzbyBib290 c3RyYXBwaW5nCi0JCSAqIGlzIGRvbmUgZW5vdWdoIHRoYXQgd2Ugc2hvdWxkIGhhdmUgdHNkLgot CQkgKi8KLQkJYXNzZXJ0KCF0c2RuX251bGwodHNkbikpOwotCQlwcmVfcmVlbnRyYW5jeSh0c2Ru X3RzZCh0c2RuKSwgYXJlbmEpOwotCQlpZiAodGVzdF9ob29rc19hcmVuYV9uZXdfaG9vaykgewot CQkJdGVzdF9ob29rc19hcmVuYV9uZXdfaG9vaygpOwotCQl9Ci0JCXBvc3RfcmVlbnRyYW5jeSh0 c2RuX3RzZCh0c2RuKSk7Ci0JfQotCi0JcmV0dXJuIGFyZW5hOwotbGFiZWxfZXJyb3I6Ci0JaWYg KGluZCAhPSAwKSB7Ci0JCWJhc2VfZGVsZXRlKHRzZG4sIGJhc2UpOwotCX0KLQlyZXR1cm4gTlVM TDsKLX0KLQotYXJlbmFfdCAqCi1hcmVuYV9jaG9vc2VfaHVnZSh0c2RfdCAqdHNkKSB7Ci0JLyog aHVnZV9hcmVuYV9pbmQgY2FuIGJlIDAgZHVyaW5nIGluaXQgKHdpbGwgdXNlIGEwKS4gKi8KLQlp ZiAoaHVnZV9hcmVuYV9pbmQgPT0gMCkgewotCQlhc3NlcnQoIW1hbGxvY19pbml0aWFsaXplZCgp KTsKLQl9Ci0KLQlhcmVuYV90ICpodWdlX2FyZW5hID0gYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCks IGh1Z2VfYXJlbmFfaW5kLCBmYWxzZSk7Ci0JaWYgKGh1Z2VfYXJlbmEgPT0gTlVMTCkgewotCQkv KiBDcmVhdGUgdGhlIGh1Z2UgYXJlbmEgb24gZGVtYW5kLiAqLwotCQlhc3NlcnQoaHVnZV9hcmVu YV9pbmQgIT0gMCk7Ci0JCWh1Z2VfYXJlbmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgaHVn ZV9hcmVuYV9pbmQsIHRydWUpOwotCQlpZiAoaHVnZV9hcmVuYSA9PSBOVUxMKSB7Ci0JCQlyZXR1 cm4gTlVMTDsKLQkJfQotCQkvKgotCQkgKiBQdXJnZSBlYWdlcmx5IGZvciBodWdlIGFsbG9jYXRp b25zLCBiZWNhdXNlOiAxKSBudW1iZXIgb2YKLQkJICogaHVnZSBhbGxvY2F0aW9ucyBpcyB1c3Vh bGx5IHNtYWxsLCB3aGljaCBtZWFucyB0aWNrZXIgYmFzZWQKLQkJICogZGVjYXkgaXMgbm90IHJl bGlhYmxlOyBhbmQgMikgbGVzcyBpbW1lZGlhdGUgcmV1c2UgaXMKLQkJICogZXhwZWN0ZWQgZm9y IGh1Z2UgYWxsb2NhdGlvbnMuCi0JCSAqLwotCQlpZiAoYXJlbmFfZGlydHlfZGVjYXlfbXNfZGVm YXVsdF9nZXQoKSA+IDApIHsKLQkJCWFyZW5hX2RlY2F5X21zX3NldCh0c2RfdHNkbih0c2QpLCBo dWdlX2FyZW5hLAotCQkJICAgIGV4dGVudF9zdGF0ZV9kaXJ0eSwgMCk7Ci0JCX0KLQkJaWYgKGFy ZW5hX211enp5X2RlY2F5X21zX2RlZmF1bHRfZ2V0KCkgPiAwKSB7Ci0JCQlhcmVuYV9kZWNheV9t c19zZXQodHNkX3RzZG4odHNkKSwgaHVnZV9hcmVuYSwKLQkJCSAgICBleHRlbnRfc3RhdGVfbXV6 enksIDApOwotCQl9Ci0JfQotCi0JcmV0dXJuIGh1Z2VfYXJlbmE7Ci19Ci0KLWJvb2wKLWFyZW5h X2luaXRfaHVnZSh2b2lkKSB7Ci0JYm9vbCBodWdlX2VuYWJsZWQ7Ci0KLQkvKiBUaGUgdGhyZXNo b2xkIHNob3VsZCBiZSBsYXJnZSBzaXplIGNsYXNzLiAqLwotCWlmIChvcHRfb3ZlcnNpemVfdGhy ZXNob2xkID4gU0NfTEFSR0VfTUFYQ0xBU1MgfHwKLQkgICAgb3B0X292ZXJzaXplX3RocmVzaG9s ZCA8IFNDX0xBUkdFX01JTkNMQVNTKSB7Ci0JCW9wdF9vdmVyc2l6ZV90aHJlc2hvbGQgPSAwOwot CQlvdmVyc2l6ZV90aHJlc2hvbGQgPSBTQ19MQVJHRV9NQVhDTEFTUyArIFBBR0U7Ci0JCWh1Z2Vf ZW5hYmxlZCA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCS8qIFJlc2VydmUgdGhlIGluZGV4IGZvciB0 aGUgaHVnZSBhcmVuYS4gKi8KLQkJaHVnZV9hcmVuYV9pbmQgPSBuYXJlbmFzX3RvdGFsX2dldCgp OwotCQlvdmVyc2l6ZV90aHJlc2hvbGQgPSBvcHRfb3ZlcnNpemVfdGhyZXNob2xkOwotCQlodWdl X2VuYWJsZWQgPSB0cnVlOwotCX0KLQotCXJldHVybiBodWdlX2VuYWJsZWQ7Ci19Ci0KLWJvb2wK LWFyZW5hX2lzX2h1Z2UodW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JaWYgKGh1Z2VfYXJlbmFfaW5k ID09IDApIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gKGFyZW5hX2luZCA9PSBodWdl X2FyZW5hX2luZCk7Ci19Ci0KLWJvb2wKLWFyZW5hX2Jvb3Qoc2NfZGF0YV90ICpzY19kYXRhLCBi YXNlX3QgKmJhc2UsIGJvb2wgaHBhKSB7Ci0JYXJlbmFfZGlydHlfZGVjYXlfbXNfZGVmYXVsdF9z ZXQob3B0X2RpcnR5X2RlY2F5X21zKTsKLQlhcmVuYV9tdXp6eV9kZWNheV9tc19kZWZhdWx0X3Nl dChvcHRfbXV6enlfZGVjYXlfbXMpOwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTQ19OQklO UzsgaSsrKSB7Ci0JCXNjX3QgKnNjID0gJnNjX2RhdGEtPnNjW2ldOwotCQlkaXZfaW5pdCgmYXJl bmFfYmluaW5kX2Rpdl9pbmZvW2ldLAotCQkgICAgKDFVIDw8IHNjLT5sZ19iYXNlKSArIChzYy0+ bmRlbHRhIDw8IHNjLT5sZ19kZWx0YSkpOwotCX0KLQotCXVpbnQzMl90IGN1cl9vZmZzZXQgPSAo dWludDMyX3Qpb2Zmc2V0b2YoYXJlbmFfdCwgYmlucyk7Ci0JZm9yIChzemluZF90IGkgPSAwOyBp IDwgU0NfTkJJTlM7IGkrKykgewotCQlhcmVuYV9iaW5fb2Zmc2V0c1tpXSA9IGN1cl9vZmZzZXQ7 Ci0JCW5iaW5zX3RvdGFsICs9IGJpbl9pbmZvc1tpXS5uX3NoYXJkczsKLQkJY3VyX29mZnNldCAr PSAodWludDMyX3QpKGJpbl9pbmZvc1tpXS5uX3NoYXJkcyAqIHNpemVvZihiaW5fdCkpOwotCX0K LQlyZXR1cm4gcGFfY2VudHJhbF9pbml0KCZhcmVuYV9wYV9jZW50cmFsX2dsb2JhbCwgYmFzZSwg aHBhLAotCSAgICAmaHBhX2hvb2tzX2RlZmF1bHQpOwotfQotCi12b2lkCi1hcmVuYV9wcmVmb3Jr MCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKSB7Ci0JcGFfc2hhcmRfcHJlZm9yazAodHNk biwgJmFyZW5hLT5wYV9zaGFyZCk7Ci19Ci0KLXZvaWQKLWFyZW5hX3ByZWZvcmsxKHRzZG5fdCAq dHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCW1hbGxvY19t dXRleF9wcmVmb3JrKHRzZG4sICZhcmVuYS0+dGNhY2hlX3FsX210eCk7Ci0JfQotfQotCi12b2lk Ci1hcmVuYV9wcmVmb3JrMih0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKSB7Ci0JcGFfc2hh cmRfcHJlZm9yazIodHNkbiwgJmFyZW5hLT5wYV9zaGFyZCk7Ci19Ci0KLXZvaWQKLWFyZW5hX3By ZWZvcmszKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEpIHsKLQlwYV9zaGFyZF9wcmVmb3Jr Myh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkKTsKLX0KLQotdm9pZAotYXJlbmFfcHJlZm9yazQodHNk bl90ICp0c2RuLCBhcmVuYV90ICphcmVuYSkgewotCXBhX3NoYXJkX3ByZWZvcms0KHRzZG4sICZh cmVuYS0+cGFfc2hhcmQpOwotfQotCi12b2lkCi1hcmVuYV9wcmVmb3JrNSh0c2RuX3QgKnRzZG4s IGFyZW5hX3QgKmFyZW5hKSB7Ci0JcGFfc2hhcmRfcHJlZm9yazUodHNkbiwgJmFyZW5hLT5wYV9z aGFyZCk7Ci19Ci0KLXZvaWQKLWFyZW5hX3ByZWZvcms2KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAq YXJlbmEpIHsKLQliYXNlX3ByZWZvcmsodHNkbiwgYXJlbmEtPmJhc2UpOwotfQotCi12b2lkCi1h cmVuYV9wcmVmb3JrNyh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKSB7Ci0JbWFsbG9jX211 dGV4X3ByZWZvcmsodHNkbiwgJmFyZW5hLT5sYXJnZV9tdHgpOwotfQotCi12b2lkCi1hcmVuYV9w cmVmb3JrOCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKSB7Ci0JZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IG5iaW5zX3RvdGFsOyBpKyspIHsKLQkJYmluX3ByZWZvcmsodHNkbiwgJmFyZW5h LT5iaW5zW2ldKTsKLQl9Ci19Ci0KLXZvaWQKLWFyZW5hX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3Qg KnRzZG4sIGFyZW5hX3QgKmFyZW5hKSB7Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5iaW5z X3RvdGFsOyBpKyspIHsKLQkJYmluX3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmYXJlbmEtPmJpbnNb aV0pOwotCX0KLQotCW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJmFyZW5hLT5s YXJnZV9tdHgpOwotCWJhc2VfcG9zdGZvcmtfcGFyZW50KHRzZG4sIGFyZW5hLT5iYXNlKTsKLQlw YV9zaGFyZF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJmFyZW5hLT5wYV9zaGFyZCk7Ci0JaWYgKGNv bmZpZ19zdGF0cykgewotCQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZhcmVu YS0+dGNhY2hlX3FsX210eCk7Ci0JfQotfQotCi12b2lkCi1hcmVuYV9wb3N0Zm9ya19jaGlsZCh0 c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hKSB7Ci0JYXRvbWljX3N0b3JlX3UoJmFyZW5hLT5u dGhyZWFkc1swXSwgMCwgQVRPTUlDX1JFTEFYRUQpOwotCWF0b21pY19zdG9yZV91KCZhcmVuYS0+ bnRocmVhZHNbMV0sIDAsIEFUT01JQ19SRUxBWEVEKTsKLQlpZiAodHNkX2FyZW5hX2dldCh0c2Ru X3RzZCh0c2RuKSkgPT0gYXJlbmEpIHsKLQkJYXJlbmFfbnRocmVhZHNfaW5jKGFyZW5hLCBmYWxz ZSk7Ci0JfQotCWlmICh0c2RfaWFyZW5hX2dldCh0c2RuX3RzZCh0c2RuKSkgPT0gYXJlbmEpIHsK LQkJYXJlbmFfbnRocmVhZHNfaW5jKGFyZW5hLCB0cnVlKTsKLQl9Ci0JaWYgKGNvbmZpZ19zdGF0 cykgewotCQlxbF9uZXcoJmFyZW5hLT50Y2FjaGVfcWwpOwotCQlxbF9uZXcoJmFyZW5hLT5jYWNo ZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9xbCk7Ci0JCXRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93 ID0gdGNhY2hlX3Nsb3dfZ2V0KHRzZG5fdHNkKHRzZG4pKTsKLQkJaWYgKHRjYWNoZV9zbG93ICE9 IE5VTEwgJiYgdGNhY2hlX3Nsb3ctPmFyZW5hID09IGFyZW5hKSB7Ci0JCQl0Y2FjaGVfdCAqdGNh Y2hlID0gdGNhY2hlX3Nsb3ctPnRjYWNoZTsKLQkJCXFsX2VsbV9uZXcodGNhY2hlX3Nsb3csIGxp bmspOwotCQkJcWxfdGFpbF9pbnNlcnQoJmFyZW5hLT50Y2FjaGVfcWwsIHRjYWNoZV9zbG93LCBs aW5rKTsKLQkJCWNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yX2luaXQoCi0JCQkgICAgJnRjYWNo ZV9zbG93LT5jYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvciwKLQkJCSAgICB0Y2FjaGUtPmJpbnMp OwotCQkJcWxfdGFpbF9pbnNlcnQoJmFyZW5hLT5jYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9x bCwKLQkJCSAgICAmdGNhY2hlX3Nsb3ctPmNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yLCBsaW5r KTsKLQkJfQotCX0KLQotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuYmluc190b3RhbDsgaSsr KSB7Ci0JCWJpbl9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmYXJlbmEtPmJpbnNbaV0pOwotCX0KLQot CW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmYXJlbmEtPmxhcmdlX210eCk7Ci0J YmFzZV9wb3N0Zm9ya19jaGlsZCh0c2RuLCBhcmVuYS0+YmFzZSk7Ci0JcGFfc2hhcmRfcG9zdGZv cmtfY2hpbGQodHNkbiwgJmFyZW5hLT5wYV9zaGFyZCk7Ci0JaWYgKGNvbmZpZ19zdGF0cykgewot CQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNkbiwgJmFyZW5hLT50Y2FjaGVfcWxfbXR4 KTsKLQl9Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvc3JjL2JhY2tncm91bmRfdGhyZWFkLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9zcmMvYmFja2dyb3VuZF90aHJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggM2JiOGQyNi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zcmMvYmFja2dyb3VuZF90aHJlYWQuYworKysgL2Rldi9udWxsCkBA IC0xLDgyMCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJl YW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9p bmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0KLUpF TUFMTE9DX0RJQUdOT1NUSUNfRElTQUJMRV9TUFVSSU9VUwotCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotLyogRGF0YS4gKi8KLQotLyogVGhpcyBvcHRpb24gc2hvdWxkIGJlIG9wdC1pbiBvbmx5 LiAqLwotI2RlZmluZSBCQUNLR1JPVU5EX1RIUkVBRF9ERUZBVUxUIGZhbHNlCi0vKiBSZWFkLW9u bHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uICovCi1ib29sIG9wdF9iYWNrZ3JvdW5kX3RocmVhZCA9 IEJBQ0tHUk9VTkRfVEhSRUFEX0RFRkFVTFQ7Ci1zaXplX3Qgb3B0X21heF9iYWNrZ3JvdW5kX3Ro cmVhZHMgPSBNQVhfQkFDS0dST1VORF9USFJFQURfTElNSVQgKyAxOwotCi0vKiBVc2VkIGZvciB0 aHJlYWQgY3JlYXRpb24sIHRlcm1pbmF0aW9uIGFuZCBzdGF0cy4gKi8KLW1hbGxvY19tdXRleF90 IGJhY2tncm91bmRfdGhyZWFkX2xvY2s7Ci0vKiBJbmRpY2F0ZXMgZ2xvYmFsIHN0YXRlLiAgQXRv bWljIGJlY2F1c2UgZGVjYXkgcmVhZHMgdGhpcyB3L28gbG9ja2luZy4gKi8KLWF0b21pY19iX3Qg YmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZF9zdGF0ZTsKLXNpemVfdCBuX2JhY2tncm91bmRfdGhy ZWFkczsKLXNpemVfdCBtYXhfYmFja2dyb3VuZF90aHJlYWRzOwotLyogVGhyZWFkIGluZm8gcGVy LWluZGV4LiAqLwotYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICpiYWNrZ3JvdW5kX3RocmVhZF9p bmZvOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgSkVNQUxMT0NfUFRIUkVB RF9DUkVBVEVfV1JBUFBFUgotCi1zdGF0aWMgaW50ICgqcHRocmVhZF9jcmVhdGVfZnB0cikocHRo cmVhZF90ICpfX3Jlc3RyaWN0LCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqLAotICAgIHZvaWQgKigq KSh2b2lkICopLCB2b2lkICpfX3Jlc3RyaWN0KTsKLQotc3RhdGljIHZvaWQKLXB0aHJlYWRfY3Jl YXRlX3dyYXBwZXJfaW5pdCh2b2lkKSB7Ci0jaWZkZWYgSkVNQUxMT0NfTEFaWV9MT0NLCi0JaWYg KCFpc3RocmVhZGVkKSB7Ci0JCWlzdGhyZWFkZWQgPSB0cnVlOwotCX0KLSNlbmRpZgotfQotCi1p bnQKLXB0aHJlYWRfY3JlYXRlX3dyYXBwZXIocHRocmVhZF90ICpfX3Jlc3RyaWN0IHRocmVhZCwg Y29uc3QgcHRocmVhZF9hdHRyX3QgKmF0dHIsCi0gICAgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2 b2lkICopLCB2b2lkICpfX3Jlc3RyaWN0IGFyZykgewotCXB0aHJlYWRfY3JlYXRlX3dyYXBwZXJf aW5pdCgpOwotCi0JcmV0dXJuIHB0aHJlYWRfY3JlYXRlX2ZwdHIodGhyZWFkLCBhdHRyLCBzdGFy dF9yb3V0aW5lLCBhcmcpOwotfQotI2VuZGlmIC8qIEpFTUFMTE9DX1BUSFJFQURfQ1JFQVRFX1dS QVBQRVIgKi8KLQotI2lmbmRlZiBKRU1BTExPQ19CQUNLR1JPVU5EX1RIUkVBRAotI2RlZmluZSBO T1RfUkVBQ0hFRCB7IG5vdF9yZWFjaGVkKCk7IH0KLWJvb2wgYmFja2dyb3VuZF90aHJlYWRfY3Jl YXRlKHRzZF90ICp0c2QsIHVuc2lnbmVkIGFyZW5hX2luZCkgTk9UX1JFQUNIRUQKLWJvb2wgYmFj a2dyb3VuZF90aHJlYWRzX2VuYWJsZSh0c2RfdCAqdHNkKSBOT1RfUkVBQ0hFRAotYm9vbCBiYWNr Z3JvdW5kX3RocmVhZHNfZGlzYWJsZSh0c2RfdCAqdHNkKSBOT1RfUkVBQ0hFRAotYm9vbCBiYWNr Z3JvdW5kX3RocmVhZF9pc19zdGFydGVkKGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbykg Tk9UX1JFQUNIRUQKLXZvaWQgYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX2Vhcmx5KGJhY2tncm91 bmRfdGhyZWFkX2luZm9fdCAqaW5mbywKLSAgICBuc3RpbWVfdCAqcmVtYWluaW5nX3NsZWVwKSBO T1RfUkVBQ0hFRAotdm9pZCBiYWNrZ3JvdW5kX3RocmVhZF9wcmVmb3JrMCh0c2RuX3QgKnRzZG4p IE5PVF9SRUFDSEVECi12b2lkIGJhY2tncm91bmRfdGhyZWFkX3ByZWZvcmsxKHRzZG5fdCAqdHNk bikgTk9UX1JFQUNIRUQKLXZvaWQgYmFja2dyb3VuZF90aHJlYWRfcG9zdGZvcmtfcGFyZW50KHRz ZG5fdCAqdHNkbikgTk9UX1JFQUNIRUQKLXZvaWQgYmFja2dyb3VuZF90aHJlYWRfcG9zdGZvcmtf Y2hpbGQodHNkbl90ICp0c2RuKSBOT1RfUkVBQ0hFRAotYm9vbCBiYWNrZ3JvdW5kX3RocmVhZF9z dGF0c19yZWFkKHRzZG5fdCAqdHNkbiwKLSAgICBiYWNrZ3JvdW5kX3RocmVhZF9zdGF0c190ICpz dGF0cykgTk9UX1JFQUNIRUQKLXZvaWQgYmFja2dyb3VuZF90aHJlYWRfY3RsX2luaXQodHNkbl90 ICp0c2RuKSBOT1RfUkVBQ0hFRAotI3VuZGVmIE5PVF9SRUFDSEVECi0jZWxzZQotCi1zdGF0aWMg Ym9vbCBiYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkX2F0X2Zvcms7Ci0KLXN0YXRpYyB2b2lkCi1i YWNrZ3JvdW5kX3RocmVhZF9pbmZvX2luaXQodHNkbl90ICp0c2RuLCBiYWNrZ3JvdW5kX3RocmVh ZF9pbmZvX3QgKmluZm8pIHsKLQliYWNrZ3JvdW5kX3RocmVhZF93YWtldXBfdGltZV9zZXQodHNk biwgaW5mbywgMCk7Ci0JaW5mby0+bnBhZ2VzX3RvX3B1cmdlX25ldyA9IDA7Ci0JaWYgKGNvbmZp Z19zdGF0cykgewotCQlpbmZvLT50b3Rfbl9ydW5zID0gMDsKLQkJbnN0aW1lX2luaXRfemVybygm aW5mby0+dG90X3NsZWVwX3RpbWUpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBib29sCi1zZXRf Y3VycmVudF90aHJlYWRfYWZmaW5pdHkoaW50IGNwdSkgewotI2lmIGRlZmluZWQoSkVNQUxMT0Nf SEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkKLQljcHVfc2V0X3QgY3B1c2V0OwotI2Vsc2UKLSMgIGlm bmRlZiBfX05ldEJTRF9fCi0JY3B1c2V0X3QgY3B1c2V0OwotIyAgZWxzZQotCWNwdXNldF90ICpj cHVzZXQ7Ci0jICBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgX19OZXRCU0RfXwotCUNQVV9aRVJP KCZjcHVzZXQpOwotCUNQVV9TRVQoY3B1LCAmY3B1c2V0KTsKLSNlbHNlCi0JY3B1c2V0ID0gY3B1 c2V0X2NyZWF0ZSgpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfU0NIRURf U0VUQUZGSU5JVFkpCi0JcmV0dXJuIChzY2hlZF9zZXRhZmZpbml0eSgwLCBzaXplb2YoY3B1X3Nl dF90KSwgJmNwdXNldCkgIT0gMCk7Ci0jZWxzZQotIyAgaWZuZGVmIF9fTmV0QlNEX18KLQlpbnQg cmV0ID0gcHRocmVhZF9zZXRhZmZpbml0eV9ucChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9mKGNwdXNl dF90KSwKLQkgICAgJmNwdXNldCk7Ci0jICBlbHNlCi0JaW50IHJldCA9IHB0aHJlYWRfc2V0YWZm aW5pdHlfbnAocHRocmVhZF9zZWxmKCksIGNwdXNldF9zaXplKGNwdXNldCksCi0JICAgIGNwdXNl dCk7Ci0JY3B1c2V0X2Rlc3Ryb3koY3B1c2V0KTsKLSMgIGVuZGlmCi0JcmV0dXJuIHJldCAhPSAw OwotI2VuZGlmCi19Ci0KLSNkZWZpbmUgQklMTElPTiBVSU5UNjRfQygxMDAwMDAwMDAwKQotLyog TWluaW1hbCBzbGVlcCBpbnRlcnZhbCAxMDAgbXMuICovCi0jZGVmaW5lIEJBQ0tHUk9VTkRfVEhS RUFEX01JTl9JTlRFUlZBTF9OUyAoQklMTElPTiAvIDEwKQotCi1zdGF0aWMgdm9pZAotYmFja2dy b3VuZF90aHJlYWRfc2xlZXAodHNkbl90ICp0c2RuLCBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3Qg KmluZm8sCi0gICAgdWludDY0X3QgaW50ZXJ2YWwpIHsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0J CWluZm8tPnRvdF9uX3J1bnMrKzsKLQl9Ci0JaW5mby0+bnBhZ2VzX3RvX3B1cmdlX25ldyA9IDA7 Ci0KLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQkvKiBTcGVjaWZpYyBjbG9jayByZXF1aXJlZCBieSB0 aW1lZHdhaXQuICovCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JbnN0aW1lX3QgYmVmb3Jl X3NsZWVwOwotCW5zdGltZV9pbml0MigmYmVmb3JlX3NsZWVwLCB0di50dl9zZWMsIHR2LnR2X3Vz ZWMgKiAxMDAwKTsKLQotCWludCByZXQ7Ci0JaWYgKGludGVydmFsID09IEJBQ0tHUk9VTkRfVEhS RUFEX0lOREVGSU5JVEVfU0xFRVApIHsKLQkJYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX3RpbWVf c2V0KHRzZG4sIGluZm8sCi0JCSAgICBCQUNLR1JPVU5EX1RIUkVBRF9JTkRFRklOSVRFX1NMRUVQ KTsKLQkJcmV0ID0gcHRocmVhZF9jb25kX3dhaXQoJmluZm8tPmNvbmQsICZpbmZvLT5tdHgubG9j ayk7Ci0JCWFzc2VydChyZXQgPT0gMCk7Ci0JfSBlbHNlIHsKLQkJYXNzZXJ0KGludGVydmFsID49 IEJBQ0tHUk9VTkRfVEhSRUFEX01JTl9JTlRFUlZBTF9OUyAmJgotCQkgICAgaW50ZXJ2YWwgPD0g QkFDS0dST1VORF9USFJFQURfSU5ERUZJTklURV9TTEVFUCk7Ci0JCS8qIFdlIG5lZWQgbWFsbG9j IGNsb2NrIChjYW4gYmUgZGlmZmVyZW50IGZyb20gdHYpLiAqLwotCQluc3RpbWVfdCBuZXh0X3dh a2V1cDsKLQkJbnN0aW1lX2luaXRfdXBkYXRlKCZuZXh0X3dha2V1cCk7Ci0JCW5zdGltZV9pYWRk KCZuZXh0X3dha2V1cCwgaW50ZXJ2YWwpOwotCQlhc3NlcnQobnN0aW1lX25zKCZuZXh0X3dha2V1 cCkgPAotCQkgICAgQkFDS0dST1VORF9USFJFQURfSU5ERUZJTklURV9TTEVFUCk7Ci0JCWJhY2tn cm91bmRfdGhyZWFkX3dha2V1cF90aW1lX3NldCh0c2RuLCBpbmZvLAotCQkgICAgbnN0aW1lX25z KCZuZXh0X3dha2V1cCkpOwotCi0JCW5zdGltZV90IHRzX3dha2V1cDsKLQkJbnN0aW1lX2NvcHko JnRzX3dha2V1cCwgJmJlZm9yZV9zbGVlcCk7Ci0JCW5zdGltZV9pYWRkKCZ0c193YWtldXAsIGlu dGVydmFsKTsKLQkJc3RydWN0IHRpbWVzcGVjIHRzOwotCQl0cy50dl9zZWMgPSAoc2l6ZV90KW5z dGltZV9zZWMoJnRzX3dha2V1cCk7Ci0JCXRzLnR2X25zZWMgPSAoc2l6ZV90KW5zdGltZV9uc2Vj KCZ0c193YWtldXApOwotCi0JCWFzc2VydCghYmFja2dyb3VuZF90aHJlYWRfaW5kZWZpbml0ZV9z bGVlcChpbmZvKSk7Ci0JCXJldCA9IHB0aHJlYWRfY29uZF90aW1lZHdhaXQoJmluZm8tPmNvbmQs ICZpbmZvLT5tdHgubG9jaywgJnRzKTsKLQkJYXNzZXJ0KHJldCA9PSBFVElNRURPVVQgfHwgcmV0 ID09IDApOwotCX0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWdldHRpbWVvZmRheSgmdHYsIE5V TEwpOwotCQluc3RpbWVfdCBhZnRlcl9zbGVlcDsKLQkJbnN0aW1lX2luaXQyKCZhZnRlcl9zbGVl cCwgdHYudHZfc2VjLCB0di50dl91c2VjICogMTAwMCk7Ci0JCWlmIChuc3RpbWVfY29tcGFyZSgm YWZ0ZXJfc2xlZXAsICZiZWZvcmVfc2xlZXApID4gMCkgewotCQkJbnN0aW1lX3N1YnRyYWN0KCZh ZnRlcl9zbGVlcCwgJmJlZm9yZV9zbGVlcCk7Ci0JCQluc3RpbWVfYWRkKCZpbmZvLT50b3Rfc2xl ZXBfdGltZSwgJmFmdGVyX3NsZWVwKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGJvb2wKLWJhY2tn cm91bmRfdGhyZWFkX3BhdXNlX2NoZWNrKHRzZG5fdCAqdHNkbiwgYmFja2dyb3VuZF90aHJlYWRf aW5mb190ICppbmZvKSB7Ci0JaWYgKHVubGlrZWx5KGluZm8tPnN0YXRlID09IGJhY2tncm91bmRf dGhyZWFkX3BhdXNlZCkpIHsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmaW5mby0+bXR4 KTsKLQkJLyogV2FpdCBvbiBnbG9iYWwgbG9jayB0byB1cGRhdGUgc3RhdHVzLiAqLwotCQltYWxs b2NfbXV0ZXhfbG9jayh0c2RuLCAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7Ci0JCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotCQltYWxsb2NfbXV0 ZXhfbG9jayh0c2RuLCAmaW5mby0+bXR4KTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJu IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWJhY2tncm91bmRfd29ya19zbGVlcF9v bmNlKHRzZG5fdCAqdHNkbiwgYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvLAotICAgIHVu c2lnbmVkIGluZCkgewotCXVpbnQ2NF90IG5zX3VudGlsX2RlZmVycmVkID0gQkFDS0dST1VORF9U SFJFQURfREVGRVJSRURfTUFYOwotCXVuc2lnbmVkIG5hcmVuYXMgPSBuYXJlbmFzX3RvdGFsX2dl dCgpOwotCWJvb2wgc2xlcHRfaW5kZWZpbml0ZWx5ID0gYmFja2dyb3VuZF90aHJlYWRfaW5kZWZp bml0ZV9zbGVlcChpbmZvKTsKLQotCWZvciAodW5zaWduZWQgaSA9IGluZDsgaSA8IG5hcmVuYXM7 IGkgKz0gbWF4X2JhY2tncm91bmRfdGhyZWFkcykgewotCQlhcmVuYV90ICphcmVuYSA9IGFyZW5h X2dldCh0c2RuLCBpLCBmYWxzZSk7Ci0JCWlmICghYXJlbmEpIHsKLQkJCWNvbnRpbnVlOwotCQl9 Ci0JCS8qCi0JCSAqIElmIHRocmVhZCB3YXMgd29rZW4gdXAgZnJvbSB0aGUgaW5kZWZpbml0ZSBz bGVlcCwgZG9uJ3QKLQkJICogZG8gdGhlIHdvcmsgaW5zdGFudGx5LCBidXQgcmF0aGVyIGNoZWNr IHdoZW4gdGhlIGRlZmVycmVkCi0JCSAqIHdvcmsgdGhhdCBjYXVzZWQgdGhpcyB0aHJlYWQgdG8g d2FrZSB1cCBpcyBzY2hlZHVsZWQgZm9yLgotCQkgKi8KLQkJaWYgKCFzbGVwdF9pbmRlZmluaXRl bHkpIHsKLQkJCWFyZW5hX2RvX2RlZmVycmVkX3dvcmsodHNkbiwgYXJlbmEpOwotCQl9Ci0JCWlm IChuc191bnRpbF9kZWZlcnJlZCA8PSBCQUNLR1JPVU5EX1RIUkVBRF9NSU5fSU5URVJWQUxfTlMp IHsKLQkJCS8qIE1pbiBpbnRlcnZhbCB3aWxsIGJlIHVzZWQuICovCi0JCQljb250aW51ZTsKLQkJ fQotCQl1aW50NjRfdCBuc19hcmVuYV9kZWZlcnJlZCA9IHBhX3NoYXJkX3RpbWVfdW50aWxfZGVm ZXJyZWRfd29yaygKLQkJICAgIHRzZG4sICZhcmVuYS0+cGFfc2hhcmQpOwotCQlpZiAobnNfYXJl bmFfZGVmZXJyZWQgPCBuc191bnRpbF9kZWZlcnJlZCkgewotCQkJbnNfdW50aWxfZGVmZXJyZWQg PSBuc19hcmVuYV9kZWZlcnJlZDsKLQkJfQotCX0KLQotCXVpbnQ2NF90IHNsZWVwX25zOwotCWlm IChuc191bnRpbF9kZWZlcnJlZCA9PSBCQUNLR1JPVU5EX1RIUkVBRF9ERUZFUlJFRF9NQVgpIHsK LQkJc2xlZXBfbnMgPSBCQUNLR1JPVU5EX1RIUkVBRF9JTkRFRklOSVRFX1NMRUVQOwotCX0gZWxz ZSB7Ci0JCXNsZWVwX25zID0KLQkJICAgIChuc191bnRpbF9kZWZlcnJlZCA8IEJBQ0tHUk9VTkRf VEhSRUFEX01JTl9JTlRFUlZBTF9OUykKLQkJICAgID8gQkFDS0dST1VORF9USFJFQURfTUlOX0lO VEVSVkFMX05TCi0JCSAgICA6IG5zX3VudGlsX2RlZmVycmVkOwotCi0JfQotCi0JYmFja2dyb3Vu ZF90aHJlYWRfc2xlZXAodHNkbiwgaW5mbywgc2xlZXBfbnMpOwotfQotCi1zdGF0aWMgYm9vbAot YmFja2dyb3VuZF90aHJlYWRzX2Rpc2FibGVfc2luZ2xlKHRzZF90ICp0c2QsIGJhY2tncm91bmRf dGhyZWFkX2luZm9fdCAqaW5mbykgewotCWlmIChpbmZvID09ICZiYWNrZ3JvdW5kX3RocmVhZF9p bmZvWzBdKSB7Ci0JCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwKLQkJ ICAgICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKLQl9IGVsc2UgewotCQltYWxsb2NfbXV0ZXhf YXNzZXJ0X25vdF9vd25lcih0c2RfdHNkbih0c2QpLAotCQkgICAgJmJhY2tncm91bmRfdGhyZWFk X2xvY2spOwotCX0KLQotCXByZV9yZWVudHJhbmN5KHRzZCwgTlVMTCk7Ci0JbWFsbG9jX211dGV4 X2xvY2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7Ci0JYm9vbCBoYXNfdGhyZWFkOwotCWFz c2VydChpbmZvLT5zdGF0ZSAhPSBiYWNrZ3JvdW5kX3RocmVhZF9wYXVzZWQpOwotCWlmIChpbmZv LT5zdGF0ZSA9PSBiYWNrZ3JvdW5kX3RocmVhZF9zdGFydGVkKSB7Ci0JCWhhc190aHJlYWQgPSB0 cnVlOwotCQlpbmZvLT5zdGF0ZSA9IGJhY2tncm91bmRfdGhyZWFkX3N0b3BwZWQ7Ci0JCXB0aHJl YWRfY29uZF9zaWduYWwoJmluZm8tPmNvbmQpOwotCX0gZWxzZSB7Ci0JCWhhc190aHJlYWQgPSBm YWxzZTsKLQl9Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4 KTsKLQotCWlmICghaGFzX3RocmVhZCkgewotCQlwb3N0X3JlZW50cmFuY3kodHNkKTsKLQkJcmV0 dXJuIGZhbHNlOwotCX0KLQl2b2lkICpyZXQ7Ci0JaWYgKHB0aHJlYWRfam9pbihpbmZvLT50aHJl YWQsICZyZXQpKSB7Ci0JCXBvc3RfcmVlbnRyYW5jeSh0c2QpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9 Ci0JYXNzZXJ0KHJldCA9PSBOVUxMKTsKLQluX2JhY2tncm91bmRfdGhyZWFkcy0tOwotCXBvc3Rf cmVlbnRyYW5jeSh0c2QpOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCAqYmFj a2dyb3VuZF90aHJlYWRfZW50cnkodm9pZCAqaW5kX2FyZyk7Ci0KLXN0YXRpYyBpbnQKLWJhY2tn cm91bmRfdGhyZWFkX2NyZWF0ZV9zaWduYWxzX21hc2tlZChwdGhyZWFkX3QgKnRocmVhZCwKLSAg ICBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lk ICopLCB2b2lkICphcmcpIHsKLQkvKgotCSAqIE1hc2sgc2lnbmFscyBkdXJpbmcgdGhyZWFkIGNy ZWF0aW9uIHNvIHRoYXQgdGhlIHRocmVhZCBpbmhlcml0cwotCSAqIGFuIGVtcHR5IHNpZ25hbCBz ZXQuCi0JICovCi0Jc2lnc2V0X3Qgc2V0OwotCXNpZ2ZpbGxzZXQoJnNldCk7Ci0Jc2lnc2V0X3Qg b2xkc2V0OwotCWludCBtYXNrX2VyciA9IHB0aHJlYWRfc2lnbWFzayhTSUdfU0VUTUFTSywgJnNl dCwgJm9sZHNldCk7Ci0JaWYgKG1hc2tfZXJyICE9IDApIHsKLQkJcmV0dXJuIG1hc2tfZXJyOwot CX0KLQlpbnQgY3JlYXRlX2VyciA9IHB0aHJlYWRfY3JlYXRlX3dyYXBwZXIodGhyZWFkLCBhdHRy LCBzdGFydF9yb3V0aW5lLAotCSAgICBhcmcpOwotCS8qCi0JICogUmVzdG9yZSB0aGUgc2lnbmFs IG1hc2suICBGYWlsdXJlIHRvIHJlc3RvcmUgdGhlIHNpZ25hbCBtYXNrIGhlcmUKLQkgKiBjaGFu Z2VzIHByb2dyYW0gYmVoYXZpb3IuCi0JICovCi0JaW50IHJlc3RvcmVfZXJyID0gcHRocmVhZF9z aWdtYXNrKFNJR19TRVRNQVNLLCAmb2xkc2V0LCBOVUxMKTsKLQlpZiAocmVzdG9yZV9lcnIgIT0g MCkgewotCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBiYWNrZ3JvdW5kIHRocmVhZCBjcmVh dGlvbiAiCi0JCSAgICAiZmFpbGVkICglZCksIGFuZCBzaWduYWwgbWFzayByZXN0b3JhdGlvbiBm YWlsZWQgIgotCQkgICAgIiglZClcbiIsIGNyZWF0ZV9lcnIsIHJlc3RvcmVfZXJyKTsKLQkJaWYg KG9wdF9hYm9ydCkgewotCQkJYWJvcnQoKTsKLQkJfQotCX0KLQlyZXR1cm4gY3JlYXRlX2VycjsK LX0KLQotc3RhdGljIGJvb2wKLWNoZWNrX2JhY2tncm91bmRfdGhyZWFkX2NyZWF0aW9uKHRzZF90 ICp0c2QsIHVuc2lnbmVkICpuX2NyZWF0ZWQsCi0gICAgYm9vbCAqY3JlYXRlZF90aHJlYWRzKSB7 Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQlpZiAobGlrZWx5KCpuX2NyZWF0ZWQgPT0gbl9iYWNrZ3Jv dW5kX3RocmVhZHMpKSB7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JdHNkbl90ICp0c2RuID0gdHNk X3RzZG4odHNkKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVh ZF9pbmZvWzBdLm10eCk7Ci0JZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1heF9iYWNrZ3JvdW5k X3RocmVhZHM7IGkrKykgewotCQlpZiAoY3JlYXRlZF90aHJlYWRzW2ldKSB7Ci0JCQljb250aW51 ZTsKLQkJfQotCQliYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8gPSAmYmFja2dyb3VuZF90 aHJlYWRfaW5mb1tpXTsKLQkJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmluZm8tPm10eCk7Ci0J CS8qCi0JCSAqIEluIGNhc2Ugb2YgdGhlIGJhY2tncm91bmRfdGhyZWFkX3BhdXNlZCBzdGF0ZSBi ZWNhdXNlIG9mCi0JCSAqIGFyZW5hIHJlc2V0LCBkZWxheSB0aGUgY3JlYXRpb24uCi0JCSAqLwot CQlib29sIGNyZWF0ZSA9IChpbmZvLT5zdGF0ZSA9PSBiYWNrZ3JvdW5kX3RocmVhZF9zdGFydGVk KTsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmaW5mby0+bXR4KTsKLQkJaWYgKCFjcmVh dGUpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcHJlX3JlZW50cmFuY3kodHNkLCBOVUxMKTsK LQkJaW50IGVyciA9IGJhY2tncm91bmRfdGhyZWFkX2NyZWF0ZV9zaWduYWxzX21hc2tlZCgmaW5m by0+dGhyZWFkLAotCQkgICAgTlVMTCwgYmFja2dyb3VuZF90aHJlYWRfZW50cnksICh2b2lkICop KHVpbnRwdHJfdClpKTsKLQkJcG9zdF9yZWVudHJhbmN5KHRzZCk7Ci0KLQkJaWYgKGVyciA9PSAw KSB7Ci0JCQkoKm5fY3JlYXRlZCkrKzsKLQkJCWNyZWF0ZWRfdGhyZWFkc1tpXSA9IHRydWU7Ci0J CX0gZWxzZSB7Ci0JCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBiYWNrZ3JvdW5kIHRocmVh ZCAiCi0JCQkgICAgImNyZWF0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCQkJaWYgKG9wdF9h Ym9ydCkgewotCQkJCWFib3J0KCk7Ci0JCQl9Ci0JCX0KLQkJLyogUmV0dXJuIHRvIHJlc3RhcnQg dGhlIGxvb3Agc2luY2Ugd2UgdW5sb2NrZWQuICovCi0JCXJldCA9IHRydWU7Ci0JCWJyZWFrOwot CX0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1swXS5t dHgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWJhY2tncm91bmRfdGhyZWFk MF93b3JrKHRzZF90ICp0c2QpIHsKLQkvKiBUaHJlYWQwIGlzIGFsc28gcmVzcG9uc2libGUgZm9y IGxhdW5jaGluZyAvIHRlcm1pbmF0aW5nIHRocmVhZHMuICovCi0JVkFSSUFCTEVfQVJSQVkoYm9v bCwgY3JlYXRlZF90aHJlYWRzLCBtYXhfYmFja2dyb3VuZF90aHJlYWRzKTsKLQl1bnNpZ25lZCBp OwotCWZvciAoaSA9IDE7IGkgPCBtYXhfYmFja2dyb3VuZF90aHJlYWRzOyBpKyspIHsKLQkJY3Jl YXRlZF90aHJlYWRzW2ldID0gZmFsc2U7Ci0JfQotCS8qIFN0YXJ0IHdvcmtpbmcsIGFuZCBjcmVh dGUgbW9yZSB0aHJlYWRzIHdoZW4gYXNrZWQuICovCi0JdW5zaWduZWQgbl9jcmVhdGVkID0gMTsK LQl3aGlsZSAoYmFja2dyb3VuZF90aHJlYWRfaW5mb1swXS5zdGF0ZSAhPSBiYWNrZ3JvdW5kX3Ro cmVhZF9zdG9wcGVkKSB7Ci0JCWlmIChiYWNrZ3JvdW5kX3RocmVhZF9wYXVzZV9jaGVjayh0c2Rf dHNkbih0c2QpLAotCQkgICAgJmJhY2tncm91bmRfdGhyZWFkX2luZm9bMF0pKSB7Ci0JCQljb250 aW51ZTsKLQkJfQotCQlpZiAoY2hlY2tfYmFja2dyb3VuZF90aHJlYWRfY3JlYXRpb24odHNkLCAm bl9jcmVhdGVkLAotCQkgICAgKGJvb2wgKikmY3JlYXRlZF90aHJlYWRzKSkgewotCQkJY29udGlu dWU7Ci0JCX0KLQkJYmFja2dyb3VuZF93b3JrX3NsZWVwX29uY2UodHNkX3RzZG4odHNkKSwKLQkJ ICAgICZiYWNrZ3JvdW5kX3RocmVhZF9pbmZvWzBdLCAwKTsKLQl9Ci0KLQkvKgotCSAqIFNodXQg ZG93biBvdGhlciB0aHJlYWRzIGF0IGV4aXQuICBOb3RlIHRoYXQgdGhlIGN0bCB0aHJlYWQgaXMg aG9sZGluZwotCSAqIHRoZSBnbG9iYWwgYmFja2dyb3VuZF90aHJlYWQgbXV0ZXggKGFuZCBpcyB3 YWl0aW5nKSBmb3IgdXMuCi0JICovCi0JYXNzZXJ0KCFiYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVk KCkpOwotCWZvciAoaSA9IDE7IGkgPCBtYXhfYmFja2dyb3VuZF90aHJlYWRzOyBpKyspIHsKLQkJ YmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvID0gJmJhY2tncm91bmRfdGhyZWFkX2luZm9b aV07Ci0JCWFzc2VydChpbmZvLT5zdGF0ZSAhPSBiYWNrZ3JvdW5kX3RocmVhZF9wYXVzZWQpOwot CQlpZiAoY3JlYXRlZF90aHJlYWRzW2ldKSB7Ci0JCQliYWNrZ3JvdW5kX3RocmVhZHNfZGlzYWJs ZV9zaW5nbGUodHNkLCBpbmZvKTsKLQkJfSBlbHNlIHsKLQkJCW1hbGxvY19tdXRleF9sb2NrKHRz ZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCQkJaWYgKGluZm8tPnN0YXRlICE9IGJhY2tncm91 bmRfdGhyZWFkX3N0b3BwZWQpIHsKLQkJCQkvKiBUaGUgdGhyZWFkIHdhcyBub3QgY3JlYXRlZC4g Ki8KLQkJCQlhc3NlcnQoaW5mby0+c3RhdGUgPT0KLQkJCQkgICAgYmFja2dyb3VuZF90aHJlYWRf c3RhcnRlZCk7Ci0JCQkJbl9iYWNrZ3JvdW5kX3RocmVhZHMtLTsKLQkJCQlpbmZvLT5zdGF0ZSA9 IGJhY2tncm91bmRfdGhyZWFkX3N0b3BwZWQ7Ci0JCQl9Ci0JCQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCQl9Ci0JfQotCWJhY2tncm91bmRfdGhyZWFk X2luZm9bMF0uc3RhdGUgPSBiYWNrZ3JvdW5kX3RocmVhZF9zdG9wcGVkOwotCWFzc2VydChuX2Jh Y2tncm91bmRfdGhyZWFkcyA9PSAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWJhY2tncm91bmRfd29y ayh0c2RfdCAqdHNkLCB1bnNpZ25lZCBpbmQpIHsKLQliYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3Qg KmluZm8gPSAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1tpbmRdOwotCi0JbWFsbG9jX211dGV4X2xv Y2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7Ci0JYmFja2dyb3VuZF90aHJlYWRfd2FrZXVw X3RpbWVfc2V0KHRzZF90c2RuKHRzZCksIGluZm8sCi0JICAgIEJBQ0tHUk9VTkRfVEhSRUFEX0lO REVGSU5JVEVfU0xFRVApOwotCWlmIChpbmQgPT0gMCkgewotCQliYWNrZ3JvdW5kX3RocmVhZDBf d29yayh0c2QpOwotCX0gZWxzZSB7Ci0JCXdoaWxlIChpbmZvLT5zdGF0ZSAhPSBiYWNrZ3JvdW5k X3RocmVhZF9zdG9wcGVkKSB7Ci0JCQlpZiAoYmFja2dyb3VuZF90aHJlYWRfcGF1c2VfY2hlY2so dHNkX3RzZG4odHNkKSwKLQkJCSAgICBpbmZvKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJ YmFja2dyb3VuZF93b3JrX3NsZWVwX29uY2UodHNkX3RzZG4odHNkKSwgaW5mbywgaW5kKTsKLQkJ fQotCX0KLQlhc3NlcnQoaW5mby0+c3RhdGUgPT0gYmFja2dyb3VuZF90aHJlYWRfc3RvcHBlZCk7 Ci0JYmFja2dyb3VuZF90aHJlYWRfd2FrZXVwX3RpbWVfc2V0KHRzZF90c2RuKHRzZCksIGluZm8s IDApOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7Ci19 Ci0KLXN0YXRpYyB2b2lkICoKLWJhY2tncm91bmRfdGhyZWFkX2VudHJ5KHZvaWQgKmluZF9hcmcp IHsKLQl1bnNpZ25lZCB0aHJlYWRfaW5kID0gKHVuc2lnbmVkKSh1aW50cHRyX3QpaW5kX2FyZzsK LQlhc3NlcnQodGhyZWFkX2luZCA8IG1heF9iYWNrZ3JvdW5kX3RocmVhZHMpOwotI2lmZGVmIEpF TUFMTE9DX0hBVkVfUFRIUkVBRF9TRVROQU1FX05QCi0JcHRocmVhZF9zZXRuYW1lX25wKHB0aHJl YWRfc2VsZigpLCAiamVtYWxsb2NfYmdfdGhkIik7Ci0jZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9f KSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0JcHRocmVhZF9zZXRfbmFtZV9ucChwdGhyZWFk X3NlbGYoKSwgImplbWFsbG9jX2JnX3RoZCIpOwotI2VuZGlmCi0JaWYgKG9wdF9wZXJjcHVfYXJl bmEgIT0gcGVyY3B1X2FyZW5hX2Rpc2FibGVkKSB7Ci0JCXNldF9jdXJyZW50X3RocmVhZF9hZmZp bml0eSgoaW50KXRocmVhZF9pbmQpOwotCX0KLQkvKgotCSAqIFN0YXJ0IHBlcmlvZGljIGJhY2tn cm91bmQgd29yay4gIFdlIHVzZSBpbnRlcm5hbCB0c2Qgd2hpY2ggYXZvaWRzCi0JICogc2lkZSBl ZmZlY3RzLCBmb3IgZXhhbXBsZSB0cmlnZ2VyaW5nIG5ldyBhcmVuYSBjcmVhdGlvbiAod2hpY2gg aW4KLQkgKiB0dXJuIHRyaWdnZXJzIGFub3RoZXIgYmFja2dyb3VuZCB0aHJlYWQgY3JlYXRpb24p LgotCSAqLwotCWJhY2tncm91bmRfd29yayh0c2RfaW50ZXJuYWxfZmV0Y2goKSwgdGhyZWFkX2lu ZCk7Ci0JYXNzZXJ0KHB0aHJlYWRfZXF1YWwocHRocmVhZF9zZWxmKCksCi0JICAgIGJhY2tncm91 bmRfdGhyZWFkX2luZm9bdGhyZWFkX2luZF0udGhyZWFkKSk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0K LQotc3RhdGljIHZvaWQKLWJhY2tncm91bmRfdGhyZWFkX2luaXQodHNkX3QgKnRzZCwgYmFja2dy b3VuZF90aHJlYWRfaW5mb190ICppbmZvKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0 c2RfdHNkbih0c2QpLCAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7Ci0JaW5mby0+c3RhdGUgPSBi YWNrZ3JvdW5kX3RocmVhZF9zdGFydGVkOwotCWJhY2tncm91bmRfdGhyZWFkX2luZm9faW5pdCh0 c2RfdHNkbih0c2QpLCBpbmZvKTsKLQluX2JhY2tncm91bmRfdGhyZWFkcysrOwotfQotCi1zdGF0 aWMgYm9vbAotYmFja2dyb3VuZF90aHJlYWRfY3JlYXRlX2xvY2tlZCh0c2RfdCAqdHNkLCB1bnNp Z25lZCBhcmVuYV9pbmQpIHsKLQlhc3NlcnQoaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCk7Ci0JbWFs bG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmYmFja2dyb3VuZF90aHJlYWRf bG9jayk7Ci0KLQkvKiBXZSBjcmVhdGUgYXQgbW9zdCBOQ1BVcyB0aHJlYWRzLiAqLwotCXNpemVf dCB0aHJlYWRfaW5kID0gYXJlbmFfaW5kICUgbWF4X2JhY2tncm91bmRfdGhyZWFkczsKLQliYWNr Z3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8gPSAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1t0aHJl YWRfaW5kXTsKLQotCWJvb2wgbmVlZF9uZXdfdGhyZWFkOwotCW1hbGxvY19tdXRleF9sb2NrKHRz ZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCW5lZWRfbmV3X3RocmVhZCA9IGJhY2tncm91bmRf dGhyZWFkX2VuYWJsZWQoKSAmJgotCSAgICAoaW5mby0+c3RhdGUgPT0gYmFja2dyb3VuZF90aHJl YWRfc3RvcHBlZCk7Ci0JaWYgKG5lZWRfbmV3X3RocmVhZCkgewotCQliYWNrZ3JvdW5kX3RocmVh ZF9pbml0KHRzZCwgaW5mbyk7Ci0JfQotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNk KSwgJmluZm8tPm10eCk7Ci0JaWYgKCFuZWVkX25ld190aHJlYWQpIHsKLQkJcmV0dXJuIGZhbHNl OwotCX0KLQlpZiAoYXJlbmFfaW5kICE9IDApIHsKLQkJLyogVGhyZWFkcyBhcmUgY3JlYXRlZCBh c3luY2hyb25vdXNseSBieSBUaHJlYWQgMC4gKi8KLQkJYmFja2dyb3VuZF90aHJlYWRfaW5mb190 ICp0MCA9ICZiYWNrZ3JvdW5kX3RocmVhZF9pbmZvWzBdOwotCQltYWxsb2NfbXV0ZXhfbG9jayh0 c2RfdHNkbih0c2QpLCAmdDAtPm10eCk7Ci0JCWFzc2VydCh0MC0+c3RhdGUgPT0gYmFja2dyb3Vu ZF90aHJlYWRfc3RhcnRlZCk7Ci0JCXB0aHJlYWRfY29uZF9zaWduYWwoJnQwLT5jb25kKTsKLQkJ bWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmdDAtPm10eCk7Ci0KLQkJcmV0dXJu IGZhbHNlOwotCX0KLQotCXByZV9yZWVudHJhbmN5KHRzZCwgTlVMTCk7Ci0JLyoKLQkgKiBUbyBh dm9pZCBjb21wbGljYXRpb25zIChiZXNpZGVzIHJlZW50cmFuY3kpLCBjcmVhdGUgaW50ZXJuYWwK LQkgKiBiYWNrZ3JvdW5kIHRocmVhZHMgd2l0aCB0aGUgdW5kZXJseWluZyBwdGhyZWFkX2NyZWF0 ZS4KLQkgKi8KLQlpbnQgZXJyID0gYmFja2dyb3VuZF90aHJlYWRfY3JlYXRlX3NpZ25hbHNfbWFz a2VkKCZpbmZvLT50aHJlYWQsIE5VTEwsCi0JICAgIGJhY2tncm91bmRfdGhyZWFkX2VudHJ5LCAo dm9pZCAqKXRocmVhZF9pbmQpOwotCXBvc3RfcmVlbnRyYW5jeSh0c2QpOwotCi0JaWYgKGVyciAh PSAwKSB7Ci0JCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46IGFyZW5hIDAgYmFja2dyb3VuZCB0 aHJlYWQgY3JlYXRpb24gIgotCQkgICAgImZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCQltYWxsb2Nf bXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKLQkJaW5mby0+c3RhdGUgPSBi YWNrZ3JvdW5kX3RocmVhZF9zdG9wcGVkOwotCQluX2JhY2tncm91bmRfdGhyZWFkcy0tOwotCQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCi0JCXJldHVy biB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotLyogQ3JlYXRlIGEgbmV3IGJhY2tn cm91bmQgdGhyZWFkIGlmIG5lZWRlZC4gKi8KLWJvb2wKLWJhY2tncm91bmRfdGhyZWFkX2NyZWF0 ZSh0c2RfdCAqdHNkLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQlhc3NlcnQoaGF2ZV9iYWNrZ3Jv dW5kX3RocmVhZCk7Ci0KLQlib29sIHJldDsKLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0 c2QpLCAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7Ci0JcmV0ID0gYmFja2dyb3VuZF90aHJlYWRf Y3JlYXRlX2xvY2tlZCh0c2QsIGFyZW5hX2luZCk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2Rf dHNkbih0c2QpLCAmYmFja2dyb3VuZF90aHJlYWRfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQot Ci1ib29sCi1iYWNrZ3JvdW5kX3RocmVhZHNfZW5hYmxlKHRzZF90ICp0c2QpIHsKLQlhc3NlcnQo bl9iYWNrZ3JvdW5kX3RocmVhZHMgPT0gMCk7Ci0JYXNzZXJ0KGJhY2tncm91bmRfdGhyZWFkX2Vu YWJsZWQoKSk7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmYmFj a2dyb3VuZF90aHJlYWRfbG9jayk7Ci0KLQlWQVJJQUJMRV9BUlJBWShib29sLCBtYXJrZWQsIG1h eF9iYWNrZ3JvdW5kX3RocmVhZHMpOwotCXVuc2lnbmVkIG5tYXJrZWQ7Ci0JZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7IGkrKykgewotCQltYXJrZWRbaV0g PSBmYWxzZTsKLQl9Ci0Jbm1hcmtlZCA9IDA7Ci0JLyogVGhyZWFkIDAgaXMgcmVxdWlyZWQgYW5k IGNyZWF0ZWQgYXQgdGhlIGVuZC4gKi8KLQltYXJrZWRbMF0gPSB0cnVlOwotCS8qIE1hcmsgdGhl IHRocmVhZHMgd2UgbmVlZCB0byBjcmVhdGUgZm9yIHRocmVhZCAwLiAqLwotCXVuc2lnbmVkIG5h cmVuYXMgPSBuYXJlbmFzX3RvdGFsX2dldCgpOwotCWZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBu YXJlbmFzOyBpKyspIHsKLQkJaWYgKG1hcmtlZFtpICUgbWF4X2JhY2tncm91bmRfdGhyZWFkc10g fHwKLQkJICAgIGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBpLCBmYWxzZSkgPT0gTlVMTCkgewot CQkJY29udGludWU7Ci0JCX0KLQkJYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvID0gJmJh Y2tncm91bmRfdGhyZWFkX2luZm9bCi0JCSAgICBpICUgbWF4X2JhY2tncm91bmRfdGhyZWFkc107 Ci0JCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCQlhc3Nl cnQoaW5mby0+c3RhdGUgPT0gYmFja2dyb3VuZF90aHJlYWRfc3RvcHBlZCk7Ci0JCWJhY2tncm91 bmRfdGhyZWFkX2luaXQodHNkLCBpbmZvKTsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNk bih0c2QpLCAmaW5mby0+bXR4KTsKLQkJbWFya2VkW2kgJSBtYXhfYmFja2dyb3VuZF90aHJlYWRz XSA9IHRydWU7Ci0JCWlmICgrK25tYXJrZWQgPT0gbWF4X2JhY2tncm91bmRfdGhyZWFkcykgewot CQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlib29sIGVyciA9IGJhY2tncm91bmRfdGhyZWFkX2NyZWF0 ZV9sb2NrZWQodHNkLCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgbmFyZW5hczsgaSsrKSB7Ci0JCWFyZW5hX3QgKmFyZW5hID0g YXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIGksIGZhbHNlKTsKLQkJaWYgKGFyZW5hICE9IE5VTEwp IHsKLQkJCXBhX3NoYXJkX3NldF9kZWZlcnJhbF9hbGxvd2VkKHRzZF90c2RuKHRzZCksCi0JCQkg ICAgJmFyZW5hLT5wYV9zaGFyZCwgdHJ1ZSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQot Ci1ib29sCi1iYWNrZ3JvdW5kX3RocmVhZHNfZGlzYWJsZSh0c2RfdCAqdHNkKSB7Ci0JYXNzZXJ0 KCFiYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkKCkpOwotCW1hbGxvY19tdXRleF9hc3NlcnRfb3du ZXIodHNkX3RzZG4odHNkKSwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotCi0JLyogVGhyZWFk IDAgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgdGVybWluYXRpbmcgb3RoZXIgdGhyZWFkcy4gKi8K LQlpZiAoYmFja2dyb3VuZF90aHJlYWRzX2Rpc2FibGVfc2luZ2xlKHRzZCwKLQkgICAgJmJhY2tn cm91bmRfdGhyZWFkX2luZm9bMF0pKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlhc3NlcnQobl9i YWNrZ3JvdW5kX3RocmVhZHMgPT0gMCk7Ci0JdW5zaWduZWQgbmFyZW5hcyA9IG5hcmVuYXNfdG90 YWxfZ2V0KCk7Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5hcmVuYXM7IGkrKykgewotCQlh cmVuYV90ICphcmVuYSA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBpLCBmYWxzZSk7Ci0JCWlm IChhcmVuYSAhPSBOVUxMKSB7Ci0JCQlwYV9zaGFyZF9zZXRfZGVmZXJyYWxfYWxsb3dlZCh0c2Rf dHNkbih0c2QpLAotCQkJICAgICZhcmVuYS0+cGFfc2hhcmQsIGZhbHNlKTsKLQkJfQotCX0KLQot CXJldHVybiBmYWxzZTsKLX0KLQotYm9vbAotYmFja2dyb3VuZF90aHJlYWRfaXNfc3RhcnRlZChi YWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8pIHsKLQlyZXR1cm4gaW5mby0+c3RhdGUgPT0g YmFja2dyb3VuZF90aHJlYWRfc3RhcnRlZDsKLX0KLQotdm9pZAotYmFja2dyb3VuZF90aHJlYWRf d2FrZXVwX2Vhcmx5KGJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbywKLSAgICBuc3RpbWVf dCAqcmVtYWluaW5nX3NsZWVwKSB7Ci0JLyoKLQkgKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0 byBpbmNyZWFzZSBiYXRjaGluZy4gQXQgdGhpcyBwb2ludAotCSAqIHdlIGtub3cgdGhhdCBiYWNr Z3JvdW5kIHRocmVhZCB3YWtlcyB1cCBzb29uLCBzbyB0aGUgdGltZSB0byBjYWNoZQotCSAqIHRo ZSBqdXN0IGZyZWVkIG1lbW9yeSBpcyBib3VuZGVkIGFuZCBsb3cuCi0JICovCi0JaWYgKHJlbWFp bmluZ19zbGVlcCAhPSBOVUxMICYmIG5zdGltZV9ucyhyZW1haW5pbmdfc2xlZXApIDwKLQkgICAg QkFDS0dST1VORF9USFJFQURfTUlOX0lOVEVSVkFMX05TKSB7Ci0JCXJldHVybjsKLQl9Ci0JcHRo cmVhZF9jb25kX3NpZ25hbCgmaW5mby0+Y29uZCk7Ci19Ci0KLXZvaWQKLWJhY2tncm91bmRfdGhy ZWFkX3ByZWZvcmswKHRzZG5fdCAqdHNkbikgewotCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4s ICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKLQliYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkX2F0 X2ZvcmsgPSBiYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkKCk7Ci19Ci0KLXZvaWQKLWJhY2tncm91 bmRfdGhyZWFkX3ByZWZvcmsxKHRzZG5fdCAqdHNkbikgewotCWZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBtYXhfYmFja2dyb3VuZF90aHJlYWRzOyBpKyspIHsKLQkJbWFsbG9jX211dGV4X3ByZWZv cmsodHNkbiwgJmJhY2tncm91bmRfdGhyZWFkX2luZm9baV0ubXR4KTsKLQl9Ci19Ci0KLXZvaWQK LWJhY2tncm91bmRfdGhyZWFkX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4pIHsKLQlmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4X2JhY2tncm91bmRfdGhyZWFkczsgaSsrKSB7Ci0JCW1h bGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwKLQkJICAgICZiYWNrZ3JvdW5kX3RocmVh ZF9pbmZvW2ldLm10eCk7Ci0JfQotCW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwg JmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotfQotCi12b2lkCi1iYWNrZ3JvdW5kX3RocmVhZF9w b3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4pIHsKLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg bWF4X2JhY2tncm91bmRfdGhyZWFkczsgaSsrKSB7Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9ya19j aGlsZCh0c2RuLAotCQkgICAgJmJhY2tncm91bmRfdGhyZWFkX2luZm9baV0ubXR4KTsKLQl9Ci0J bWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2Nr KTsKLQlpZiAoIWJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWRfYXRfZm9yaykgewotCQlyZXR1cm47 Ci0JfQotCi0JLyogQ2xlYXIgYmFja2dyb3VuZF90aHJlYWQgc3RhdGUgKHJlc2V0IHRvIGRpc2Fi bGVkIGZvciBjaGlsZCkuICovCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhY2tncm91bmRf dGhyZWFkX2xvY2spOwotCW5fYmFja2dyb3VuZF90aHJlYWRzID0gMDsKLQliYWNrZ3JvdW5kX3Ro cmVhZF9lbmFibGVkX3NldCh0c2RuLCBmYWxzZSk7Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7IGkrKykgewotCQliYWNrZ3JvdW5kX3RocmVhZF9pbmZv X3QgKmluZm8gPSAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1tpXTsKLQkJbWFsbG9jX211dGV4X2xv Y2sodHNkbiwgJmluZm8tPm10eCk7Ci0JCWluZm8tPnN0YXRlID0gYmFja2dyb3VuZF90aHJlYWRf c3RvcHBlZDsKLQkJaW50IHJldCA9IHB0aHJlYWRfY29uZF9pbml0KCZpbmZvLT5jb25kLCBOVUxM KTsKLQkJYXNzZXJ0KHJldCA9PSAwKTsKLQkJYmFja2dyb3VuZF90aHJlYWRfaW5mb19pbml0KHRz ZG4sIGluZm8pOwotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZpbmZvLT5tdHgpOwotCX0K LQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVhZF9sb2NrKTsKLX0K LQotYm9vbAotYmFja2dyb3VuZF90aHJlYWRfc3RhdHNfcmVhZCh0c2RuX3QgKnRzZG4sIGJhY2tn cm91bmRfdGhyZWFkX3N0YXRzX3QgKnN0YXRzKSB7Ci0JYXNzZXJ0KGNvbmZpZ19zdGF0cyk7Ci0J bWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotCWlmICgh YmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpKSB7Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNk biwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQluc3Rp bWVfaW5pdF96ZXJvKCZzdGF0cy0+cnVuX2ludGVydmFsKTsKLQltZW1zZXQoJnN0YXRzLT5tYXhf Y291bnRlcl9wZXJfYmdfdGhkLCAwLCBzaXplb2YobXV0ZXhfcHJvZl9kYXRhX3QpKTsKLQotCXVp bnQ2NF90IG51bV9ydW5zID0gMDsKLQlzdGF0cy0+bnVtX3RocmVhZHMgPSBuX2JhY2tncm91bmRf dGhyZWFkczsKLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4X2JhY2tncm91bmRfdGhyZWFk czsgaSsrKSB7Ci0JCWJhY2tncm91bmRfdGhyZWFkX2luZm9fdCAqaW5mbyA9ICZiYWNrZ3JvdW5k X3RocmVhZF9pbmZvW2ldOwotCQlpZiAobWFsbG9jX211dGV4X3RyeWxvY2sodHNkbiwgJmluZm8t Pm10eCkpIHsKLQkJCS8qCi0JCQkgKiBFYWNoIGJhY2tncm91bmQgdGhyZWFkIHJ1biBtYXkgdGFr ZSBhIGxvbmcgdGltZTsKLQkJCSAqIGF2b2lkIHdhaXRpbmcgb24gdGhlIHN0YXRzIGlmIHRoZSB0 aHJlYWQgaXMgYWN0aXZlLgotCQkJICovCi0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoaW5mby0+ c3RhdGUgIT0gYmFja2dyb3VuZF90aHJlYWRfc3RvcHBlZCkgewotCQkJbnVtX3J1bnMgKz0gaW5m by0+dG90X25fcnVuczsKLQkJCW5zdGltZV9hZGQoJnN0YXRzLT5ydW5faW50ZXJ2YWwsICZpbmZv LT50b3Rfc2xlZXBfdGltZSk7Ci0JCQltYWxsb2NfbXV0ZXhfcHJvZl9tYXhfdXBkYXRlKHRzZG4s Ci0JCQkgICAgJnN0YXRzLT5tYXhfY291bnRlcl9wZXJfYmdfdGhkLCAmaW5mby0+bXR4KTsKLQkJ fQotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZpbmZvLT5tdHgpOwotCX0KLQlzdGF0cy0+ bnVtX3J1bnMgPSBudW1fcnVuczsKLQlpZiAobnVtX3J1bnMgPiAwKSB7Ci0JCW5zdGltZV9pZGl2 aWRlKCZzdGF0cy0+cnVuX2ludGVydmFsLCBudW1fcnVucyk7Ci0JfQotCW1hbGxvY19tdXRleF91 bmxvY2sodHNkbiwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotCi0JcmV0dXJuIGZhbHNlOwot fQotCi0jdW5kZWYgQkFDS0dST1VORF9USFJFQURfTlBBR0VTX1RIUkVTSE9MRAotI3VuZGVmIEJJ TExJT04KLSN1bmRlZiBCQUNLR1JPVU5EX1RIUkVBRF9NSU5fSU5URVJWQUxfTlMKLQotI2lmZGVm IEpFTUFMTE9DX0hBVkVfRExTWU0KLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0KLXN0YXRp YyBib29sCi1wdGhyZWFkX2NyZWF0ZV9mcHRyX2luaXQodm9pZCkgewotCWlmIChwdGhyZWFkX2Ny ZWF0ZV9mcHRyICE9IE5VTEwpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQkvKgotCSAqIFRyeSB0 aGUgbmV4dCBzeW1ib2wgZmlyc3QsIGJlY2F1c2UgMSkgd2hlbiB1c2UgbGF6eV9sb2NrIHdlIGhh dmUgYQotCSAqIHdyYXBwZXIgZm9yIHB0aHJlYWRfY3JlYXRlOyBhbmQgMikgYXBwbGljYXRpb24g bWF5IGRlZmluZSBpdHMgb3duCi0JICogd3JhcHBlciBhcyB3ZWxsIChhbmQgY2FuIGNhbGwgbWFs bG9jIHdpdGhpbiB0aGUgd3JhcHBlcikuCi0JICovCi0jaWZkZWYgSkVNQUxMT0NfSEFWRV9ETFNZ TQotCXB0aHJlYWRfY3JlYXRlX2ZwdHIgPSBkbHN5bShSVExEX05FWFQsICJwdGhyZWFkX2NyZWF0 ZSIpOwotI2Vsc2UKLQlwdGhyZWFkX2NyZWF0ZV9mcHRyID0gTlVMTDsKLSNlbmRpZgotCWlmIChw dGhyZWFkX2NyZWF0ZV9mcHRyID09IE5VTEwpIHsKLQkJaWYgKGNvbmZpZ19sYXp5X2xvY2spIHsK LQkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogRXJyb3IgaW4gZGxzeW0oUlRMRF9ORVhULCAi Ci0JCQkgICAgIlwicHRocmVhZF9jcmVhdGVcIilcbiIpOwotCQkJYWJvcnQoKTsKLQkJfSBlbHNl IHsKLQkJCS8qIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBzeW1ib2wuICovCi0JCQlwdGhyZWFk X2NyZWF0ZV9mcHRyID0gcHRocmVhZF9jcmVhdGU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZmFsc2U7 Ci19Ci0KLS8qCi0gKiBXaGVuIGxhenkgbG9jayBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIG1ha2Ug c3VyZSBzZXR0aW5nIGlzdGhyZWFkZWQgYmVmb3JlCi0gKiB0YWtpbmcgYW55IGJhY2tncm91bmRf dGhyZWFkIGxvY2tzLiAgVGhpcyBpcyBjYWxsZWQgZWFybHkgaW4gY3RsIChpbnN0ZWFkIG9mCi0g KiB3YWl0IGZvciB0aGUgcHRocmVhZF9jcmVhdGUgY2FsbHMgdG8gdHJpZ2dlcikgYmVjYXVzZSB0 aGUgbXV0ZXggaXMgcmVxdWlyZWQKLSAqIGJlZm9yZSBjcmVhdGluZyBiYWNrZ3JvdW5kIHRocmVh ZHMuCi0gKi8KLXZvaWQKLWJhY2tncm91bmRfdGhyZWFkX2N0bF9pbml0KHRzZG5fdCAqdHNkbikg ewotCW1hbGxvY19tdXRleF9hc3NlcnRfbm90X293bmVyKHRzZG4sICZiYWNrZ3JvdW5kX3RocmVh ZF9sb2NrKTsKLSNpZmRlZiBKRU1BTExPQ19QVEhSRUFEX0NSRUFURV9XUkFQUEVSCi0JcHRocmVh ZF9jcmVhdGVfZnB0cl9pbml0KCk7Ci0JcHRocmVhZF9jcmVhdGVfd3JhcHBlcl9pbml0KCk7Ci0j ZW5kaWYKLX0KLQotI2VuZGlmIC8qIGRlZmluZWQoSkVNQUxMT0NfQkFDS0dST1VORF9USFJFQUQp ICovCi0KLWJvb2wKLWJhY2tncm91bmRfdGhyZWFkX2Jvb3QwKHZvaWQpIHsKLQlpZiAoIWhhdmVf YmFja2dyb3VuZF90aHJlYWQgJiYgb3B0X2JhY2tncm91bmRfdGhyZWFkKSB7Ci0JCW1hbGxvY19w cmludGYoIjxqZW1hbGxvYz46IG9wdGlvbiBiYWNrZ3JvdW5kX3RocmVhZCBjdXJyZW50bHkgIgot CQkgICAgInN1cHBvcnRzIHB0aHJlYWQgb25seVxuIik7Ci0JCXJldHVybiB0cnVlOwotCX0KLSNp ZmRlZiBKRU1BTExPQ19QVEhSRUFEX0NSRUFURV9XUkFQUEVSCi0JaWYgKChjb25maWdfbGF6eV9s b2NrIHx8IG9wdF9iYWNrZ3JvdW5kX3RocmVhZCkgJiYKLQkgICAgcHRocmVhZF9jcmVhdGVfZnB0 cl9pbml0KCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIGZhbHNlOwot fQotCi1ib29sCi1iYWNrZ3JvdW5kX3RocmVhZF9ib290MSh0c2RuX3QgKnRzZG4sIGJhc2VfdCAq YmFzZSkgewotI2lmZGVmIEpFTUFMTE9DX0JBQ0tHUk9VTkRfVEhSRUFECi0JYXNzZXJ0KGhhdmVf YmFja2dyb3VuZF90aHJlYWQpOwotCWFzc2VydChuYXJlbmFzX3RvdGFsX2dldCgpID4gMCk7Ci0K LQlpZiAob3B0X21heF9iYWNrZ3JvdW5kX3RocmVhZHMgPiBNQVhfQkFDS0dST1VORF9USFJFQURf TElNSVQpIHsKLQkJb3B0X21heF9iYWNrZ3JvdW5kX3RocmVhZHMgPSBERUZBVUxUX05VTV9CQUNL R1JPVU5EX1RIUkVBRDsKLQl9Ci0JbWF4X2JhY2tncm91bmRfdGhyZWFkcyA9IG9wdF9tYXhfYmFj a2dyb3VuZF90aHJlYWRzOwotCi0JYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZF9zZXQodHNkbiwg b3B0X2JhY2tncm91bmRfdGhyZWFkKTsKLQlpZiAobWFsbG9jX211dGV4X2luaXQoJmJhY2tncm91 bmRfdGhyZWFkX2xvY2ssCi0JICAgICJiYWNrZ3JvdW5kX3RocmVhZF9nbG9iYWwiLAotCSAgICBX SVRORVNTX1JBTktfQkFDS0dST1VORF9USFJFQURfR0xPQkFMLAotCSAgICBtYWxsb2NfbXV0ZXhf cmFua19leGNsdXNpdmUpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCWJhY2tncm91bmRfdGhy ZWFkX2luZm8gPSAoYmFja2dyb3VuZF90aHJlYWRfaW5mb190ICopYmFzZV9hbGxvYyh0c2RuLAot CSAgICBiYXNlLCBvcHRfbWF4X2JhY2tncm91bmRfdGhyZWFkcyAqCi0JICAgIHNpemVvZihiYWNr Z3JvdW5kX3RocmVhZF9pbmZvX3QpLCBDQUNIRUxJTkUpOwotCWlmIChiYWNrZ3JvdW5kX3RocmVh ZF9pbmZvID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IG1heF9iYWNrZ3JvdW5kX3RocmVhZHM7IGkrKykgewotCQliYWNrZ3JvdW5kX3Ro cmVhZF9pbmZvX3QgKmluZm8gPSAmYmFja2dyb3VuZF90aHJlYWRfaW5mb1tpXTsKLQkJLyogVGhy ZWFkIG11dGV4IGlzIHJhbmtfaW5jbHVzaXZlIGJlY2F1c2Ugb2YgdGhyZWFkMC4gKi8KLQkJaWYg KG1hbGxvY19tdXRleF9pbml0KCZpbmZvLT5tdHgsICJiYWNrZ3JvdW5kX3RocmVhZCIsCi0JCSAg ICBXSVRORVNTX1JBTktfQkFDS0dST1VORF9USFJFQUQsCi0JCSAgICBtYWxsb2NfbXV0ZXhfYWRk cmVzc19vcmRlcmVkKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKHB0aHJlYWRfY29u ZF9pbml0KCZpbmZvLT5jb25kLCBOVUxMKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJbWFs bG9jX211dGV4X2xvY2sodHNkbiwgJmluZm8tPm10eCk7Ci0JCWluZm8tPnN0YXRlID0gYmFja2dy b3VuZF90aHJlYWRfc3RvcHBlZDsKLQkJYmFja2dyb3VuZF90aHJlYWRfaW5mb19pbml0KHRzZG4s IGluZm8pOwotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZpbmZvLT5tdHgpOwotCX0KLSNl bmRpZgotCi0JcmV0dXJuIGZhbHNlOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iYXNlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zcmMvYmFzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA3ZjRkNjc1Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3NyYy9iYXNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2V4dGVudF9tbWFwLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgotCi0vKgotICogSW4gYXV0byBtb2RlLCBh cmVuYXMgc3dpdGNoIHRvIGh1Z2UgcGFnZXMgZm9yIHRoZSBiYXNlIGFsbG9jYXRvciBvbiB0aGUK LSAqIHNlY29uZCBiYXNlIGJsb2NrLiAgYTAgc3dpdGNoZXMgdG8gdGhwIG9uIHRoZSA1dGggYmxv Y2sgKGFmdGVyIDIwIG1lZ2FieXRlcwotICogb2YgbWV0YWRhdGEpLCBzaW5jZSBtb3JlIG1ldGFk YXRhIChlLmcuIHJ0cmVlIG5vZGVzKSBjb21lIGZyb20gYTAncyBiYXNlLgotICovCi0KLSNkZWZp bmUgQkFTRV9BVVRPX1RIUF9USFJFU0hPTEQgICAgMgotI2RlZmluZSBCQVNFX0FVVE9fVEhQX1RI UkVTSE9MRF9BMCA1Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEYXRhLiAqLwotCi1z dGF0aWMgYmFzZV90ICpiMDsKLQotbWV0YWRhdGFfdGhwX21vZGVfdCBvcHRfbWV0YWRhdGFfdGhw ID0gTUVUQURBVEFfVEhQX0RFRkFVTFQ7Ci0KLWNvbnN0IGNoYXIgKm1ldGFkYXRhX3RocF9tb2Rl X25hbWVzW10gPSB7Ci0JImRpc2FibGVkIiwKLQkiYXV0byIsCi0JImFsd2F5cyIKLX07Ci0KLS8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgYm9vbAotbWV0YWRhdGFfdGhw X21hZHZpc2Uodm9pZCkgewotCXJldHVybiAobWV0YWRhdGFfdGhwX2VuYWJsZWQoKSAmJgotCSAg ICAoaW5pdF9zeXN0ZW1fdGhwX21vZGUgPT0gdGhwX21vZGVfZGVmYXVsdCkpOwotfQotCi1zdGF0 aWMgdm9pZCAqCi1iYXNlX21hcCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIHVuc2ln bmVkIGluZCwgc2l6ZV90IHNpemUpIHsKLQl2b2lkICphZGRyOwotCWJvb2wgemVybyA9IHRydWU7 Ci0JYm9vbCBjb21taXQgPSB0cnVlOwotCi0JLyogVXNlIGh1Z2UgcGFnZSBzaXplcyBhbmQgYWxp Z25tZW50IHJlZ2FyZGxlc3Mgb2Ygb3B0X21ldGFkYXRhX3RocC4gKi8KLQlhc3NlcnQoc2l6ZSA9 PSBIVUdFUEFHRV9DRUlMSU5HKHNpemUpKTsKLQlzaXplX3QgYWxpZ25tZW50ID0gSFVHRVBBR0U7 Ci0JaWYgKGVob29rc19hcmVfZGVmYXVsdChlaG9va3MpKSB7Ci0JCWFkZHIgPSBleHRlbnRfYWxs b2NfbW1hcChOVUxMLCBzaXplLCBhbGlnbm1lbnQsICZ6ZXJvLCAmY29tbWl0KTsKLQkJaWYgKGhh dmVfbWFkdmlzZV9odWdlICYmIGFkZHIpIHsKLQkJCXBhZ2VzX3NldF90aHBfc3RhdGUoYWRkciwg c2l6ZSk7Ci0JCX0KLQl9IGVsc2UgewotCQlhZGRyID0gZWhvb2tzX2FsbG9jKHRzZG4sIGVob29r cywgTlVMTCwgc2l6ZSwgYWxpZ25tZW50LCAmemVybywKLQkJICAgICZjb21taXQpOwotCX0KLQot CXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgdm9pZAotYmFzZV91bm1hcCh0c2RuX3QgKnRzZG4s IGVob29rc190ICplaG9va3MsIHVuc2lnbmVkIGluZCwgdm9pZCAqYWRkciwKLSAgICBzaXplX3Qg c2l6ZSkgewotCS8qCi0JICogQ2FzY2FkZSB0aHJvdWdoIGRhbGxvYywgZGVjb21taXQsIHB1cmdl X2ZvcmNlZCwgYW5kIHB1cmdlX2xhenksCi0JICogc3RvcHBpbmcgYXQgZmlyc3Qgc3VjY2Vzcy4g IFRoaXMgY2FzY2FkZSBpcyBwZXJmb3JtZWQgZm9yIGNvbnNpc3RlbmN5Ci0JICogd2l0aCB0aGUg Y2FzY2FkZSBpbiBleHRlbnRfZGFsbG9jX3dyYXBwZXIoKSBiZWNhdXNlIGFuIGFwcGxpY2F0aW9u J3MKLQkgKiBjdXN0b20gaG9va3MgbWF5IG5vdCBzdXBwb3J0IGUuZy4gZGFsbG9jLiAgVGhpcyBm dW5jdGlvbiBpcyBvbmx5IGV2ZXIKLQkgKiBjYWxsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBhcmVu YSBkZXN0cnVjdGlvbiwgc28gYWx0aG91Z2ggaXQgbWlnaHQKLQkgKiBzZWVtIHBvaW50bGVzcyB0 byBkbyBhbnl0aGluZyBiZXNpZGVzIGRhbGxvYyBoZXJlLCB0aGUgYXBwbGljYXRpb24KLQkgKiBt YXkgaW4gZmFjdCB3YW50IHRoZSBlbmQgc3RhdGUgb2YgYWxsIGFzc29jaWF0ZWQgdmlydHVhbCBt ZW1vcnkgdG8gYmUKLQkgKiBpbiBzb21lIGNvbnNpc3RlbnQtYnV0LWFsbG9jYXRlZCBzdGF0ZS4K LQkgKi8KLQlpZiAoZWhvb2tzX2FyZV9kZWZhdWx0KGVob29rcykpIHsKLQkJaWYgKCFleHRlbnRf ZGFsbG9jX21tYXAoYWRkciwgc2l6ZSkpIHsKLQkJCWdvdG8gbGFiZWxfZG9uZTsKLQkJfQotCQlp ZiAoIXBhZ2VzX2RlY29tbWl0KGFkZHIsIHNpemUpKSB7Ci0JCQlnb3RvIGxhYmVsX2RvbmU7Ci0J CX0KLQkJaWYgKCFwYWdlc19wdXJnZV9mb3JjZWQoYWRkciwgc2l6ZSkpIHsKLQkJCWdvdG8gbGFi ZWxfZG9uZTsKLQkJfQotCQlpZiAoIXBhZ2VzX3B1cmdlX2xhenkoYWRkciwgc2l6ZSkpIHsKLQkJ CWdvdG8gbGFiZWxfZG9uZTsKLQkJfQotCQkvKiBOb3RoaW5nIHdvcmtlZC4gIFRoaXMgc2hvdWxk IG5ldmVyIGhhcHBlbi4gKi8KLQkJbm90X3JlYWNoZWQoKTsKLQl9IGVsc2UgewotCQlpZiAoIWVo b29rc19kYWxsb2ModHNkbiwgZWhvb2tzLCBhZGRyLCBzaXplLCB0cnVlKSkgewotCQkJZ290byBs YWJlbF9kb25lOwotCQl9Ci0JCWlmICghZWhvb2tzX2RlY29tbWl0KHRzZG4sIGVob29rcywgYWRk ciwgc2l6ZSwgMCwgc2l6ZSkpIHsKLQkJCWdvdG8gbGFiZWxfZG9uZTsKLQkJfQotCQlpZiAoIWVo b29rc19wdXJnZV9mb3JjZWQodHNkbiwgZWhvb2tzLCBhZGRyLCBzaXplLCAwLCBzaXplKSkgewot CQkJZ290byBsYWJlbF9kb25lOwotCQl9Ci0JCWlmICghZWhvb2tzX3B1cmdlX2xhenkodHNkbiwg ZWhvb2tzLCBhZGRyLCBzaXplLCAwLCBzaXplKSkgewotCQkJZ290byBsYWJlbF9kb25lOwotCQl9 Ci0JCS8qIE5vdGhpbmcgd29ya2VkLiAgVGhhdCdzIHRoZSBhcHBsaWNhdGlvbidzIHByb2JsZW0u ICovCi0JfQotbGFiZWxfZG9uZToKLQlpZiAobWV0YWRhdGFfdGhwX21hZHZpc2UoKSkgewotCQkv KiBTZXQgTk9IVUdFUEFHRSBhZnRlciB1bm1hcCB0byBhdm9pZCBrZXJuZWwgZGVmcmFnLiAqLwot CQlhc3NlcnQoKCh1aW50cHRyX3QpYWRkciAmIEhVR0VQQUdFX01BU0spID09IDAgJiYKLQkJICAg IChzaXplICYgSFVHRVBBR0VfTUFTSykgPT0gMCk7Ci0JCXBhZ2VzX25vaHVnZShhZGRyLCBzaXpl KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1iYXNlX2VkYXRhX2luaXQoc2l6ZV90ICpleHRlbnRf c25fbmV4dCwgZWRhdGFfdCAqZWRhdGEsIHZvaWQgKmFkZHIsCi0gICAgc2l6ZV90IHNpemUpIHsK LQlzaXplX3Qgc247Ci0KLQlzbiA9ICpleHRlbnRfc25fbmV4dDsKLQkoKmV4dGVudF9zbl9uZXh0 KSsrOwotCi0JZWRhdGFfYmluaXQoZWRhdGEsIGFkZHIsIHNpemUsIHNuKTsKLX0KLQotc3RhdGlj IHNpemVfdAotYmFzZV9nZXRfbnVtX2Jsb2NrcyhiYXNlX3QgKmJhc2UsIGJvb2wgd2l0aF9uZXdf YmxvY2spIHsKLQliYXNlX2Jsb2NrX3QgKmIgPSBiYXNlLT5ibG9ja3M7Ci0JYXNzZXJ0KGIgIT0g TlVMTCk7Ci0KLQlzaXplX3Qgbl9ibG9ja3MgPSB3aXRoX25ld19ibG9jayA/IDIgOiAxOwotCXdo aWxlIChiLT5uZXh0ICE9IE5VTEwpIHsKLQkJbl9ibG9ja3MrKzsKLQkJYiA9IGItPm5leHQ7Ci0J fQotCi0JcmV0dXJuIG5fYmxvY2tzOwotfQotCi1zdGF0aWMgdm9pZAotYmFzZV9hdXRvX3RocF9z d2l0Y2godHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UpIHsKLQlhc3NlcnQob3B0X21ldGFkYXRh X3RocCA9PSBtZXRhZGF0YV90aHBfYXV0byk7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0 c2RuLCAmYmFzZS0+bXR4KTsKLQlpZiAoYmFzZS0+YXV0b190aHBfc3dpdGNoZWQpIHsKLQkJcmV0 dXJuOwotCX0KLQkvKiBDYWxsZWQgd2hlbiBhZGRpbmcgYSBuZXcgYmxvY2suICovCi0JYm9vbCBz aG91bGRfc3dpdGNoOwotCWlmIChiYXNlX2luZF9nZXQoYmFzZSkgIT0gMCkgewotCQlzaG91bGRf c3dpdGNoID0gKGJhc2VfZ2V0X251bV9ibG9ja3MoYmFzZSwgdHJ1ZSkgPT0KLQkJICAgIEJBU0Vf QVVUT19USFBfVEhSRVNIT0xEKTsKLQl9IGVsc2UgewotCQlzaG91bGRfc3dpdGNoID0gKGJhc2Vf Z2V0X251bV9ibG9ja3MoYmFzZSwgdHJ1ZSkgPT0KLQkJICAgIEJBU0VfQVVUT19USFBfVEhSRVNI T0xEX0EwKTsKLQl9Ci0JaWYgKCFzaG91bGRfc3dpdGNoKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQli YXNlLT5hdXRvX3RocF9zd2l0Y2hlZCA9IHRydWU7Ci0JYXNzZXJ0KCFjb25maWdfc3RhdHMgfHwg YmFzZS0+bl90aHAgPT0gMCk7Ci0JLyogTWFrZSB0aGUgaW5pdGlhbCBibG9ja3MgVEhQIGxhemls eS4gKi8KLQliYXNlX2Jsb2NrX3QgKmJsb2NrID0gYmFzZS0+YmxvY2tzOwotCXdoaWxlIChibG9j ayAhPSBOVUxMKSB7Ci0JCWFzc2VydCgoYmxvY2stPnNpemUgJiBIVUdFUEFHRV9NQVNLKSA9PSAw KTsKLQkJcGFnZXNfaHVnZShibG9jaywgYmxvY2stPnNpemUpOwotCQlpZiAoY29uZmlnX3N0YXRz KSB7Ci0JCQliYXNlLT5uX3RocCArPSBIVUdFUEFHRV9DRUlMSU5HKGJsb2NrLT5zaXplIC0KLQkJ CSAgICBlZGF0YV9ic2l6ZV9nZXQoJmJsb2NrLT5lZGF0YSkpID4+IExHX0hVR0VQQUdFOwotCQl9 Ci0JCWJsb2NrID0gYmxvY2stPm5leHQ7Ci0JCWFzc2VydChibG9jayA9PSBOVUxMIHx8IChiYXNl X2luZF9nZXQoYmFzZSkgPT0gMCkpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgKgotYmFzZV9leHRl bnRfYnVtcF9hbGxvY19oZWxwZXIoZWRhdGFfdCAqZWRhdGEsIHNpemVfdCAqZ2FwX3NpemUsIHNp emVfdCBzaXplLAotICAgIHNpemVfdCBhbGlnbm1lbnQpIHsKLQl2b2lkICpyZXQ7Ci0KLQlhc3Nl cnQoYWxpZ25tZW50ID09IEFMSUdOTUVOVF9DRUlMSU5HKGFsaWdubWVudCwgUVVBTlRVTSkpOwot CWFzc2VydChzaXplID09IEFMSUdOTUVOVF9DRUlMSU5HKHNpemUsIGFsaWdubWVudCkpOwotCi0J KmdhcF9zaXplID0gQUxJR05NRU5UX0NFSUxJTkcoKHVpbnRwdHJfdCllZGF0YV9hZGRyX2dldChl ZGF0YSksCi0JICAgIGFsaWdubWVudCkgLSAodWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KGVkYXRh KTsKLQlyZXQgPSAodm9pZCAqKSgodWludHB0cl90KWVkYXRhX2FkZHJfZ2V0KGVkYXRhKSArICpn YXBfc2l6ZSk7Ci0JYXNzZXJ0KGVkYXRhX2JzaXplX2dldChlZGF0YSkgPj0gKmdhcF9zaXplICsg c2l6ZSk7Ci0JZWRhdGFfYmluaXQoZWRhdGEsICh2b2lkICopKCh1aW50cHRyX3QpZWRhdGFfYWRk cl9nZXQoZWRhdGEpICsKLQkgICAgKmdhcF9zaXplICsgc2l6ZSksIGVkYXRhX2JzaXplX2dldChl ZGF0YSkgLSAqZ2FwX3NpemUgLSBzaXplLAotCSAgICBlZGF0YV9zbl9nZXQoZWRhdGEpKTsKLQly ZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotYmFzZV9leHRlbnRfYnVtcF9hbGxvY19wb3N0 KGJhc2VfdCAqYmFzZSwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBnYXBfc2l6ZSwKLSAgICB2b2lk ICphZGRyLCBzaXplX3Qgc2l6ZSkgewotCWlmIChlZGF0YV9ic2l6ZV9nZXQoZWRhdGEpID4gMCkg ewotCQkvKgotCQkgKiBDb21wdXRlIHRoZSBpbmRleCBmb3IgdGhlIGxhcmdlc3Qgc2l6ZSBjbGFz cyB0aGF0IGRvZXMgbm90Ci0JCSAqIGV4Y2VlZCBleHRlbnQncyBzaXplLgotCQkgKi8KLQkJc3pp bmRfdCBpbmRleF9mbG9vciA9Ci0JCSAgICBzel9zaXplMmluZGV4KGVkYXRhX2JzaXplX2dldChl ZGF0YSkgKyAxKSAtIDE7Ci0JCWVkYXRhX2hlYXBfaW5zZXJ0KCZiYXNlLT5hdmFpbFtpbmRleF9m bG9vcl0sIGVkYXRhKTsKLQl9Ci0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWJhc2UtPmFsbG9j YXRlZCArPSBzaXplOwotCQkvKgotCQkgKiBBZGQgb25lIFBBR0UgdG8gYmFzZV9yZXNpZGVudCBm b3IgZXZlcnkgcGFnZSBib3VuZGFyeSB0aGF0IGlzCi0JCSAqIGNyb3NzZWQgYnkgdGhlIG5ldyBh bGxvY2F0aW9uLiBBZGp1c3Qgbl90aHAgc2ltaWxhcmx5IHdoZW4KLQkJICogbWV0YWRhdGFfdGhw IGlzIGVuYWJsZWQuCi0JCSAqLwotCQliYXNlLT5yZXNpZGVudCArPSBQQUdFX0NFSUxJTkcoKHVp bnRwdHJfdClhZGRyICsgc2l6ZSkgLQotCQkgICAgUEFHRV9DRUlMSU5HKCh1aW50cHRyX3QpYWRk ciAtIGdhcF9zaXplKTsKLQkJYXNzZXJ0KGJhc2UtPmFsbG9jYXRlZCA8PSBiYXNlLT5yZXNpZGVu dCk7Ci0JCWFzc2VydChiYXNlLT5yZXNpZGVudCA8PSBiYXNlLT5tYXBwZWQpOwotCQlpZiAobWV0 YWRhdGFfdGhwX21hZHZpc2UoKSAmJiAob3B0X21ldGFkYXRhX3RocCA9PQotCQkgICAgbWV0YWRh dGFfdGhwX2Fsd2F5cyB8fCBiYXNlLT5hdXRvX3RocF9zd2l0Y2hlZCkpIHsKLQkJCWJhc2UtPm5f dGhwICs9IChIVUdFUEFHRV9DRUlMSU5HKCh1aW50cHRyX3QpYWRkciArIHNpemUpCi0JCQkgICAg LSBIVUdFUEFHRV9DRUlMSU5HKCh1aW50cHRyX3QpYWRkciAtIGdhcF9zaXplKSkgPj4KLQkJCSAg ICBMR19IVUdFUEFHRTsKLQkJCWFzc2VydChiYXNlLT5tYXBwZWQgPj0gYmFzZS0+bl90aHAgPDwg TEdfSFVHRVBBR0UpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCAqCi1iYXNlX2V4dGVudF9i dW1wX2FsbG9jKGJhc2VfdCAqYmFzZSwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBzaXplLAotICAg IHNpemVfdCBhbGlnbm1lbnQpIHsKLQl2b2lkICpyZXQ7Ci0Jc2l6ZV90IGdhcF9zaXplOwotCi0J cmV0ID0gYmFzZV9leHRlbnRfYnVtcF9hbGxvY19oZWxwZXIoZWRhdGEsICZnYXBfc2l6ZSwgc2l6 ZSwgYWxpZ25tZW50KTsKLQliYXNlX2V4dGVudF9idW1wX2FsbG9jX3Bvc3QoYmFzZSwgZWRhdGEs IGdhcF9zaXplLCByZXQsIHNpemUpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0 ZSBhIGJsb2NrIG9mIHZpcnR1YWwgbWVtb3J5IHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIHN0YXJ0 IHdpdGggYQotICogYmFzZV9ibG9ja190IGhlYWRlciwgZm9sbG93ZWQgYnkgYW4gb2JqZWN0IG9m IHNwZWNpZmllZCBzaXplIGFuZCBhbGlnbm1lbnQuCi0gKiBPbiBzdWNjZXNzIGEgcG9pbnRlciB0 byB0aGUgaW5pdGlhbGl6ZWQgYmFzZV9ibG9ja190IGhlYWRlciBpcyByZXR1cm5lZC4KLSAqLwot c3RhdGljIGJhc2VfYmxvY2tfdCAqCi1iYXNlX2Jsb2NrX2FsbG9jKHRzZG5fdCAqdHNkbiwgYmFz ZV90ICpiYXNlLCBlaG9va3NfdCAqZWhvb2tzLCB1bnNpZ25lZCBpbmQsCi0gICAgcHN6aW5kX3Qg KnBpbmRfbGFzdCwgc2l6ZV90ICpleHRlbnRfc25fbmV4dCwgc2l6ZV90IHNpemUsCi0gICAgc2l6 ZV90IGFsaWdubWVudCkgewotCWFsaWdubWVudCA9IEFMSUdOTUVOVF9DRUlMSU5HKGFsaWdubWVu dCwgUVVBTlRVTSk7Ci0Jc2l6ZV90IHVzaXplID0gQUxJR05NRU5UX0NFSUxJTkcoc2l6ZSwgYWxp Z25tZW50KTsKLQlzaXplX3QgaGVhZGVyX3NpemUgPSBzaXplb2YoYmFzZV9ibG9ja190KTsKLQlz aXplX3QgZ2FwX3NpemUgPSBBTElHTk1FTlRfQ0VJTElORyhoZWFkZXJfc2l6ZSwgYWxpZ25tZW50 KSAtCi0JICAgIGhlYWRlcl9zaXplOwotCS8qCi0JICogQ3JlYXRlIGluY3JlYXNpbmdseSBsYXJn ZXIgYmxvY2tzIGluIG9yZGVyIHRvIGxpbWl0IHRoZSB0b3RhbCBudW1iZXIKLQkgKiBvZiBkaXNq b2ludCB2aXJ0dWFsIG1lbW9yeSByYW5nZXMuICBDaG9vc2UgdGhlIG5leHQgc2l6ZSBpbiB0aGUg cGFnZQotCSAqIHNpemUgY2xhc3Mgc2VyaWVzIChza2lwcGluZyBzaXplIGNsYXNzZXMgdGhhdCBh cmUgbm90IGEgbXVsdGlwbGUgb2YKLQkgKiBIVUdFUEFHRSksIG9yIGEgc2l6ZSBsYXJnZSBlbm91 Z2ggdG8gc2F0aXNmeSB0aGUgcmVxdWVzdGVkIHNpemUgYW5kCi0JICogYWxpZ25tZW50LCB3aGlj aGV2ZXIgaXMgbGFyZ2VyLgotCSAqLwotCXNpemVfdCBtaW5fYmxvY2tfc2l6ZSA9IEhVR0VQQUdF X0NFSUxJTkcoc3pfcHN6MnUoaGVhZGVyX3NpemUgKyBnYXBfc2l6ZQotCSAgICArIHVzaXplKSk7 Ci0JcHN6aW5kX3QgcGluZF9uZXh0ID0gKCpwaW5kX2xhc3QgKyAxIDwgc3pfcHN6MmluZChTQ19M QVJHRV9NQVhDTEFTUykpID8KLQkgICAgKnBpbmRfbGFzdCArIDEgOiAqcGluZF9sYXN0OwotCXNp emVfdCBuZXh0X2Jsb2NrX3NpemUgPSBIVUdFUEFHRV9DRUlMSU5HKHN6X3BpbmQyc3oocGluZF9u ZXh0KSk7Ci0Jc2l6ZV90IGJsb2NrX3NpemUgPSAobWluX2Jsb2NrX3NpemUgPiBuZXh0X2Jsb2Nr X3NpemUpID8gbWluX2Jsb2NrX3NpemUKLQkgICAgOiBuZXh0X2Jsb2NrX3NpemU7Ci0JYmFzZV9i bG9ja190ICpibG9jayA9IChiYXNlX2Jsb2NrX3QgKiliYXNlX21hcCh0c2RuLCBlaG9va3MsIGlu ZCwKLQkgICAgYmxvY2tfc2l6ZSk7Ci0JaWYgKGJsb2NrID09IE5VTEwpIHsKLQkJcmV0dXJuIE5V TEw7Ci0JfQotCi0JaWYgKG1ldGFkYXRhX3RocF9tYWR2aXNlKCkpIHsKLQkJdm9pZCAqYWRkciA9 ICh2b2lkICopYmxvY2s7Ci0JCWFzc2VydCgoKHVpbnRwdHJfdClhZGRyICYgSFVHRVBBR0VfTUFT SykgPT0gMCAmJgotCQkgICAgKGJsb2NrX3NpemUgJiBIVUdFUEFHRV9NQVNLKSA9PSAwKTsKLQkJ aWYgKG9wdF9tZXRhZGF0YV90aHAgPT0gbWV0YWRhdGFfdGhwX2Fsd2F5cykgewotCQkJcGFnZXNf aHVnZShhZGRyLCBibG9ja19zaXplKTsKLQkJfSBlbHNlIGlmIChvcHRfbWV0YWRhdGFfdGhwID09 IG1ldGFkYXRhX3RocF9hdXRvICYmCi0JCSAgICBiYXNlICE9IE5VTEwpIHsKLQkJCS8qIGJhc2Ug IT0gTlVMTCBpbmRpY2F0ZXMgdGhpcyBpcyBub3QgYSBuZXcgYmFzZS4gKi8KLQkJCW1hbGxvY19t dXRleF9sb2NrKHRzZG4sICZiYXNlLT5tdHgpOwotCQkJYmFzZV9hdXRvX3RocF9zd2l0Y2godHNk biwgYmFzZSk7Ci0JCQlpZiAoYmFzZS0+YXV0b190aHBfc3dpdGNoZWQpIHsKLQkJCQlwYWdlc19o dWdlKGFkZHIsIGJsb2NrX3NpemUpOwotCQkJfQotCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2Ru LCAmYmFzZS0+bXR4KTsKLQkJfQotCX0KLQotCSpwaW5kX2xhc3QgPSBzel9wc3oyaW5kKGJsb2Nr X3NpemUpOwotCWJsb2NrLT5zaXplID0gYmxvY2tfc2l6ZTsKLQlibG9jay0+bmV4dCA9IE5VTEw7 Ci0JYXNzZXJ0KGJsb2NrX3NpemUgPj0gaGVhZGVyX3NpemUpOwotCWJhc2VfZWRhdGFfaW5pdChl eHRlbnRfc25fbmV4dCwgJmJsb2NrLT5lZGF0YSwKLQkgICAgKHZvaWQgKikoKHVpbnRwdHJfdCli bG9jayArIGhlYWRlcl9zaXplKSwgYmxvY2tfc2l6ZSAtIGhlYWRlcl9zaXplKTsKLQlyZXR1cm4g YmxvY2s7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhbiBleHRlbnQgdGhhdCBpcyBhdCBsZWFzdCBh cyBsYXJnZSBhcyBzcGVjaWZpZWQgc2l6ZSwgd2l0aAotICogc3BlY2lmaWVkIGFsaWdubWVudC4K LSAqLwotc3RhdGljIGVkYXRhX3QgKgotYmFzZV9leHRlbnRfYWxsb2ModHNkbl90ICp0c2RuLCBi YXNlX3QgKmJhc2UsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KSB7Ci0JbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmYmFzZS0+bXR4KTsKLQotCWVob29rc190ICplaG9va3Mg PSBiYXNlX2Vob29rc19nZXRfZm9yX21ldGFkYXRhKGJhc2UpOwotCS8qCi0JICogRHJvcCBtdXRl eCBkdXJpbmcgYmFzZV9ibG9ja19hbGxvYygpLCBiZWNhdXNlIGFuIGV4dGVudCBob29rIHdpbGwg YmUKLQkgKiBjYWxsZWQuCi0JICovCi0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYmFzZS0+ bXR4KTsKLQliYXNlX2Jsb2NrX3QgKmJsb2NrID0gYmFzZV9ibG9ja19hbGxvYyh0c2RuLCBiYXNl LCBlaG9va3MsCi0JICAgIGJhc2VfaW5kX2dldChiYXNlKSwgJmJhc2UtPnBpbmRfbGFzdCwgJmJh c2UtPmV4dGVudF9zbl9uZXh0LCBzaXplLAotCSAgICBhbGlnbm1lbnQpOwotCW1hbGxvY19tdXRl eF9sb2NrKHRzZG4sICZiYXNlLT5tdHgpOwotCWlmIChibG9jayA9PSBOVUxMKSB7Ci0JCXJldHVy biBOVUxMOwotCX0KLQlibG9jay0+bmV4dCA9IGJhc2UtPmJsb2NrczsKLQliYXNlLT5ibG9ja3Mg PSBibG9jazsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWJhc2UtPmFsbG9jYXRlZCArPSBzaXpl b2YoYmFzZV9ibG9ja190KTsKLQkJYmFzZS0+cmVzaWRlbnQgKz0gUEFHRV9DRUlMSU5HKHNpemVv ZihiYXNlX2Jsb2NrX3QpKTsKLQkJYmFzZS0+bWFwcGVkICs9IGJsb2NrLT5zaXplOwotCQlpZiAo bWV0YWRhdGFfdGhwX21hZHZpc2UoKSAmJgotCQkgICAgIShvcHRfbWV0YWRhdGFfdGhwID09IG1l dGFkYXRhX3RocF9hdXRvCi0JCSAgICAgICYmICFiYXNlLT5hdXRvX3RocF9zd2l0Y2hlZCkpIHsK LQkJCWFzc2VydChiYXNlLT5uX3RocCA+IDApOwotCQkJYmFzZS0+bl90aHAgKz0gSFVHRVBBR0Vf Q0VJTElORyhzaXplb2YoYmFzZV9ibG9ja190KSkgPj4KLQkJCSAgICBMR19IVUdFUEFHRTsKLQkJ fQotCQlhc3NlcnQoYmFzZS0+YWxsb2NhdGVkIDw9IGJhc2UtPnJlc2lkZW50KTsKLQkJYXNzZXJ0 KGJhc2UtPnJlc2lkZW50IDw9IGJhc2UtPm1hcHBlZCk7Ci0JCWFzc2VydChiYXNlLT5uX3RocCA8 PCBMR19IVUdFUEFHRSA8PSBiYXNlLT5tYXBwZWQpOwotCX0KLQlyZXR1cm4gJmJsb2NrLT5lZGF0 YTsKLX0KLQotYmFzZV90ICoKLWIwZ2V0KHZvaWQpIHsKLQlyZXR1cm4gYjA7Ci19Ci0KLWJhc2Vf dCAqCi1iYXNlX25ldyh0c2RuX3QgKnRzZG4sIHVuc2lnbmVkIGluZCwgY29uc3QgZXh0ZW50X2hv b2tzX3QgKmV4dGVudF9ob29rcywKLSAgICBib29sIG1ldGFkYXRhX3VzZV9ob29rcykgewotCXBz emluZF90IHBpbmRfbGFzdCA9IDA7Ci0Jc2l6ZV90IGV4dGVudF9zbl9uZXh0ID0gMDsKLQotCS8q Ci0JICogVGhlIGJhc2Ugd2lsbCBjb250YWluIHRoZSBlaG9va3MgZXZlbnR1YWxseSwgYnV0IGl0 IGl0c2VsZiBpcwotCSAqIGFsbG9jYXRlZCB1c2luZyB0aGVtLiAgU28gd2UgdXNlIHNvbWUgc3Rh Y2sgZWhvb2tzIHRvIGJvb3RzdHJhcCBpdHMKLQkgKiBtZW1vcnksIGFuZCB0aGVuIGluaXRpYWxp emUgdGhlIGVob29rcyB3aXRoaW4gdGhlIGJhc2VfdC4KLQkgKi8KLQllaG9va3NfdCBmYWtlX2Vo b29rczsKLQllaG9va3NfaW5pdCgmZmFrZV9laG9va3MsIG1ldGFkYXRhX3VzZV9ob29rcyA/Ci0J ICAgIChleHRlbnRfaG9va3NfdCAqKWV4dGVudF9ob29rcyA6Ci0JICAgIChleHRlbnRfaG9va3Nf dCAqKSZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MsIGluZCk7Ci0KLQliYXNlX2Jsb2NrX3Qg KmJsb2NrID0gYmFzZV9ibG9ja19hbGxvYyh0c2RuLCBOVUxMLCAmZmFrZV9laG9va3MsIGluZCwK LQkgICAgJnBpbmRfbGFzdCwgJmV4dGVudF9zbl9uZXh0LCBzaXplb2YoYmFzZV90KSwgUVVBTlRV TSk7Ci0JaWYgKGJsb2NrID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc2l6ZV90 IGdhcF9zaXplOwotCXNpemVfdCBiYXNlX2FsaWdubWVudCA9IENBQ0hFTElORTsKLQlzaXplX3Qg YmFzZV9zaXplID0gQUxJR05NRU5UX0NFSUxJTkcoc2l6ZW9mKGJhc2VfdCksIGJhc2VfYWxpZ25t ZW50KTsKLQliYXNlX3QgKmJhc2UgPSAoYmFzZV90ICopYmFzZV9leHRlbnRfYnVtcF9hbGxvY19o ZWxwZXIoJmJsb2NrLT5lZGF0YSwKLQkgICAgJmdhcF9zaXplLCBiYXNlX3NpemUsIGJhc2VfYWxp Z25tZW50KTsKLQllaG9va3NfaW5pdCgmYmFzZS0+ZWhvb2tzLCAoZXh0ZW50X2hvb2tzX3QgKill eHRlbnRfaG9va3MsIGluZCk7Ci0JZWhvb2tzX2luaXQoJmJhc2UtPmVob29rc19iYXNlLCBtZXRh ZGF0YV91c2VfaG9va3MgPwotCSAgICAoZXh0ZW50X2hvb2tzX3QgKilleHRlbnRfaG9va3MgOgot CSAgICAoZXh0ZW50X2hvb2tzX3QgKikmZWhvb2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzLCBpbmQp OwotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmYmFzZS0+bXR4LCAiYmFzZSIsIFdJVE5FU1NfUkFO S19CQVNFLAotCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7Ci0JCWJhc2VfdW5t YXAodHNkbiwgJmZha2VfZWhvb2tzLCBpbmQsIGJsb2NrLCBibG9jay0+c2l6ZSk7Ci0JCXJldHVy biBOVUxMOwotCX0KLQliYXNlLT5waW5kX2xhc3QgPSBwaW5kX2xhc3Q7Ci0JYmFzZS0+ZXh0ZW50 X3NuX25leHQgPSBleHRlbnRfc25fbmV4dDsKLQliYXNlLT5ibG9ja3MgPSBibG9jazsKLQliYXNl LT5hdXRvX3RocF9zd2l0Y2hlZCA9IGZhbHNlOwotCWZvciAoc3ppbmRfdCBpID0gMDsgaSA8IFND X05TSVpFUzsgaSsrKSB7Ci0JCWVkYXRhX2hlYXBfbmV3KCZiYXNlLT5hdmFpbFtpXSk7Ci0JfQot CWlmIChjb25maWdfc3RhdHMpIHsKLQkJYmFzZS0+YWxsb2NhdGVkID0gc2l6ZW9mKGJhc2VfYmxv Y2tfdCk7Ci0JCWJhc2UtPnJlc2lkZW50ID0gUEFHRV9DRUlMSU5HKHNpemVvZihiYXNlX2Jsb2Nr X3QpKTsKLQkJYmFzZS0+bWFwcGVkID0gYmxvY2stPnNpemU7Ci0JCWJhc2UtPm5fdGhwID0gKG9w dF9tZXRhZGF0YV90aHAgPT0gbWV0YWRhdGFfdGhwX2Fsd2F5cykgJiYKLQkJICAgIG1ldGFkYXRh X3RocF9tYWR2aXNlKCkgPyBIVUdFUEFHRV9DRUlMSU5HKHNpemVvZihiYXNlX2Jsb2NrX3QpKQot CQkgICAgPj4gTEdfSFVHRVBBR0UgOiAwOwotCQlhc3NlcnQoYmFzZS0+YWxsb2NhdGVkIDw9IGJh c2UtPnJlc2lkZW50KTsKLQkJYXNzZXJ0KGJhc2UtPnJlc2lkZW50IDw9IGJhc2UtPm1hcHBlZCk7 Ci0JCWFzc2VydChiYXNlLT5uX3RocCA8PCBMR19IVUdFUEFHRSA8PSBiYXNlLT5tYXBwZWQpOwot CX0KLQliYXNlX2V4dGVudF9idW1wX2FsbG9jX3Bvc3QoYmFzZSwgJmJsb2NrLT5lZGF0YSwgZ2Fw X3NpemUsIGJhc2UsCi0JICAgIGJhc2Vfc2l6ZSk7Ci0KLQlyZXR1cm4gYmFzZTsKLX0KLQotdm9p ZAotYmFzZV9kZWxldGUodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UpIHsKLQllaG9va3NfdCAq ZWhvb2tzID0gYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0YShiYXNlKTsKLQliYXNlX2Jsb2Nr X3QgKm5leHQgPSBiYXNlLT5ibG9ja3M7Ci0JZG8gewotCQliYXNlX2Jsb2NrX3QgKmJsb2NrID0g bmV4dDsKLQkJbmV4dCA9IGJsb2NrLT5uZXh0OwotCQliYXNlX3VubWFwKHRzZG4sIGVob29rcywg YmFzZV9pbmRfZ2V0KGJhc2UpLCBibG9jaywKLQkJICAgIGJsb2NrLT5zaXplKTsKLQl9IHdoaWxl IChuZXh0ICE9IE5VTEwpOwotfQotCi1laG9va3NfdCAqCi1iYXNlX2Vob29rc19nZXQoYmFzZV90 ICpiYXNlKSB7Ci0JcmV0dXJuICZiYXNlLT5laG9va3M7Ci19Ci0KLWVob29rc190ICoKLWJhc2Vf ZWhvb2tzX2dldF9mb3JfbWV0YWRhdGEoYmFzZV90ICpiYXNlKSB7Ci0JcmV0dXJuICZiYXNlLT5l aG9va3NfYmFzZTsKLX0KLQotZXh0ZW50X2hvb2tzX3QgKgotYmFzZV9leHRlbnRfaG9va3Nfc2V0 KGJhc2VfdCAqYmFzZSwgZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcykgewotCWV4dGVudF9o b29rc190ICpvbGRfZXh0ZW50X2hvb2tzID0KLQkgICAgZWhvb2tzX2dldF9leHRlbnRfaG9va3Nf cHRyKCZiYXNlLT5laG9va3MpOwotCWVob29rc19pbml0KCZiYXNlLT5laG9va3MsIGV4dGVudF9o b29rcywgZWhvb2tzX2luZF9nZXQoJmJhc2UtPmVob29rcykpOwotCXJldHVybiBvbGRfZXh0ZW50 X2hvb2tzOwotfQotCi1zdGF0aWMgdm9pZCAqCi1iYXNlX2FsbG9jX2ltcGwodHNkbl90ICp0c2Ru LCBiYXNlX3QgKmJhc2UsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LAotICAgIHNpemVf dCAqZXNuKSB7Ci0JYWxpZ25tZW50ID0gUVVBTlRVTV9DRUlMSU5HKGFsaWdubWVudCk7Ci0Jc2l6 ZV90IHVzaXplID0gQUxJR05NRU5UX0NFSUxJTkcoc2l6ZSwgYWxpZ25tZW50KTsKLQlzaXplX3Qg YXNpemUgPSB1c2l6ZSArIGFsaWdubWVudCAtIFFVQU5UVU07Ci0KLQllZGF0YV90ICplZGF0YSA9 IE5VTEw7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhc2UtPm10eCk7Ci0JZm9yIChzemlu ZF90IGkgPSBzel9zaXplMmluZGV4KGFzaXplKTsgaSA8IFNDX05TSVpFUzsgaSsrKSB7Ci0JCWVk YXRhID0gZWRhdGFfaGVhcF9yZW1vdmVfZmlyc3QoJmJhc2UtPmF2YWlsW2ldKTsKLQkJaWYgKGVk YXRhICE9IE5VTEwpIHsKLQkJCS8qIFVzZSBleGlzdGluZyBzcGFjZS4gKi8KLQkJCWJyZWFrOwot CQl9Ci0JfQotCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0JCS8qIFRyeSB0byBhbGxvY2F0ZSBtb3Jl IHNwYWNlLiAqLwotCQllZGF0YSA9IGJhc2VfZXh0ZW50X2FsbG9jKHRzZG4sIGJhc2UsIHVzaXpl LCBhbGlnbm1lbnQpOwotCX0KLQl2b2lkICpyZXQ7Ci0JaWYgKGVkYXRhID09IE5VTEwpIHsKLQkJ cmV0ID0gTlVMTDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCi0JcmV0ID0gYmFzZV9leHRl bnRfYnVtcF9hbGxvYyhiYXNlLCBlZGF0YSwgdXNpemUsIGFsaWdubWVudCk7Ci0JaWYgKGVzbiAh PSBOVUxMKSB7Ci0JCSplc24gPSAoc2l6ZV90KWVkYXRhX3NuX2dldChlZGF0YSk7Ci0JfQotbGFi ZWxfcmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmJhc2UtPm10eCk7Ci0JcmV0 dXJuIHJldDsKLX0KLQotLyoKLSAqIGJhc2VfYWxsb2MoKSByZXR1cm5zIHplcm9lZCBtZW1vcnks IHdoaWNoIGlzIGFsd2F5cyBkZW1hbmQtemVyb2VkIGZvciB0aGUKLSAqIGF1dG8gYXJlbmFzLCBp biBvcmRlciB0byBtYWtlIG11bHRpLXBhZ2Ugc3BhcnNlIGRhdGEgc3RydWN0dXJlcyBzdWNoIGFz IHJhZGl4Ci0gKiB0cmVlIG5vZGVzIGVmZmljaWVudCB3aXRoIHJlc3BlY3QgdG8gcGh5c2ljYWwg bWVtb3J5IHVzYWdlLiAgVXBvbiBzdWNjZXNzIGEKLSAqIHBvaW50ZXIgdG8gYXQgbGVhc3Qgc2l6 ZSBieXRlcyB3aXRoIHNwZWNpZmllZCBhbGlnbm1lbnQgaXMgcmV0dXJuZWQuICBOb3RlCi0gKiB0 aGF0IHNpemUgaXMgcm91bmRlZCB1cCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBhbGlnbm1l bnQgdG8gYXZvaWQgZmFsc2UKLSAqIHNoYXJpbmcuCi0gKi8KLXZvaWQgKgotYmFzZV9hbGxvYyh0 c2RuX3QgKnRzZG4sIGJhc2VfdCAqYmFzZSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQp IHsKLQlyZXR1cm4gYmFzZV9hbGxvY19pbXBsKHRzZG4sIGJhc2UsIHNpemUsIGFsaWdubWVudCwg TlVMTCk7Ci19Ci0KLWVkYXRhX3QgKgotYmFzZV9hbGxvY19lZGF0YSh0c2RuX3QgKnRzZG4sIGJh c2VfdCAqYmFzZSkgewotCXNpemVfdCBlc247Ci0JZWRhdGFfdCAqZWRhdGEgPSBiYXNlX2FsbG9j X2ltcGwodHNkbiwgYmFzZSwgc2l6ZW9mKGVkYXRhX3QpLAotCSAgICBFREFUQV9BTElHTk1FTlQs ICZlc24pOwotCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQllZGF0 YV9lc25fc2V0KGVkYXRhLCBlc24pOwotCXJldHVybiBlZGF0YTsKLX0KLQotdm9pZAotYmFzZV9z dGF0c19nZXQodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJhc2UsIHNpemVfdCAqYWxsb2NhdGVkLCBz aXplX3QgKnJlc2lkZW50LAotICAgIHNpemVfdCAqbWFwcGVkLCBzaXplX3QgKm5fdGhwKSB7Ci0J Y2Fzc2VydChjb25maWdfc3RhdHMpOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmJhc2Ut Pm10eCk7Ci0JYXNzZXJ0KGJhc2UtPmFsbG9jYXRlZCA8PSBiYXNlLT5yZXNpZGVudCk7Ci0JYXNz ZXJ0KGJhc2UtPnJlc2lkZW50IDw9IGJhc2UtPm1hcHBlZCk7Ci0JKmFsbG9jYXRlZCA9IGJhc2Ut PmFsbG9jYXRlZDsKLQkqcmVzaWRlbnQgPSBiYXNlLT5yZXNpZGVudDsKLQkqbWFwcGVkID0gYmFz ZS0+bWFwcGVkOwotCSpuX3RocCA9IGJhc2UtPm5fdGhwOwotCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgJmJhc2UtPm10eCk7Ci19Ci0KLXZvaWQKLWJhc2VfcHJlZm9yayh0c2RuX3QgKnRzZG4s IGJhc2VfdCAqYmFzZSkgewotCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZiYXNlLT5tdHgp OwotfQotCi12b2lkCi1iYXNlX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGJhc2VfdCAq YmFzZSkgewotCW1hbGxvY19tdXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJmJhc2UtPm10eCk7 Ci19Ci0KLXZvaWQKLWJhc2VfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBiYXNlX3QgKmJh c2UpIHsKLQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNkbiwgJmJhc2UtPm10eCk7Ci19 Ci0KLWJvb2wKLWJhc2VfYm9vdCh0c2RuX3QgKnRzZG4pIHsKLQliMCA9IGJhc2VfbmV3KHRzZG4s IDAsIChleHRlbnRfaG9va3NfdCAqKSZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MsCi0JICAg IC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKLQlyZXR1cm4gKGIwID09IE5VTEwpOwot fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Ny Yy9iaW4uYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iaW4u YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEyMDQ1OC4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvYmluLmMKKysrIC9kZXYv bnVsbApAQCAtMSw2OSArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxs b2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRl cm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0Lmgi Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYmluLmgiCi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvc2MuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC93aXRuZXNzLmgiCi0K LWJvb2wKLWJpbl91cGRhdGVfc2hhcmRfc2l6ZSh1bnNpZ25lZCBiaW5fc2hhcmRfc2l6ZXNbU0Nf TkJJTlNdLCBzaXplX3Qgc3RhcnRfc2l6ZSwKLSAgICBzaXplX3QgZW5kX3NpemUsIHNpemVfdCBu c2hhcmRzKSB7Ci0JaWYgKG5zaGFyZHMgPiBCSU5fU0hBUkRTX01BWCB8fCBuc2hhcmRzID09IDAp IHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JaWYgKHN0YXJ0X3NpemUgPiBTQ19TTUFMTF9NQVhD TEFTUykgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChlbmRfc2l6ZSA+IFNDX1NNQUxMX01B WENMQVNTKSB7Ci0JCWVuZF9zaXplID0gU0NfU01BTExfTUFYQ0xBU1M7Ci0JfQotCi0JLyogQ29t cHV0ZSB0aGUgaW5kZXggc2luY2UgdGhpcyBtYXkgaGFwcGVuIGJlZm9yZSBzeiBpbml0LiAqLwot CXN6aW5kX3QgaW5kMSA9IHN6X3NpemUyaW5kZXhfY29tcHV0ZShzdGFydF9zaXplKTsKLQlzemlu ZF90IGluZDIgPSBzel9zaXplMmluZGV4X2NvbXB1dGUoZW5kX3NpemUpOwotCWZvciAodW5zaWdu ZWQgaSA9IGluZDE7IGkgPD0gaW5kMjsgaSsrKSB7Ci0JCWJpbl9zaGFyZF9zaXplc1tpXSA9ICh1 bnNpZ25lZCluc2hhcmRzOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotdm9pZAotYmluX3No YXJkX3NpemVzX2Jvb3QodW5zaWduZWQgYmluX3NoYXJkX3NpemVzW1NDX05CSU5TXSkgewotCS8q IExvYWQgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHNoYXJkcy4gKi8KLQlmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgU0NfTkJJTlM7IGkrKykgewotCQliaW5fc2hhcmRfc2l6ZXNbaV0gPSBOX0JJTl9T SEFSRFNfREVGQVVMVDsKLQl9Ci19Ci0KLWJvb2wKLWJpbl9pbml0KGJpbl90ICpiaW4pIHsKLQlp ZiAobWFsbG9jX211dGV4X2luaXQoJmJpbi0+bG9jaywgImJpbiIsIFdJVE5FU1NfUkFOS19CSU4s Ci0JICAgIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0J fQotCWJpbi0+c2xhYmN1ciA9IE5VTEw7Ci0JZWRhdGFfaGVhcF9uZXcoJmJpbi0+c2xhYnNfbm9u ZnVsbCk7Ci0JZWRhdGFfbGlzdF9hY3RpdmVfaW5pdCgmYmluLT5zbGFic19mdWxsKTsKLQlpZiAo Y29uZmlnX3N0YXRzKSB7Ci0JCW1lbXNldCgmYmluLT5zdGF0cywgMCwgc2l6ZW9mKGJpbl9zdGF0 c190KSk7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotdm9pZAotYmluX3ByZWZvcmsodHNkbl90 ICp0c2RuLCBiaW5fdCAqYmluKSB7Ci0JbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJmJpbi0+ bG9jayk7Ci19Ci0KLXZvaWQKLWJpbl9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuLCBiaW5f dCAqYmluKSB7Ci0JbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmYmluLT5sb2Nr KTsKLX0KLQotdm9pZAotYmluX3Bvc3Rmb3JrX2NoaWxkKHRzZG5fdCAqdHNkbiwgYmluX3QgKmJp bikgewotCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmYmluLT5sb2NrKTsKLX0K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv YmluX2luZm8uYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9i aW5faW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjI5ZWY4Li4wMDAwMDAw Ci0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iaW5faW5m by5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv amVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2Jpbl9pbmZvLmgiCi0KLWJpbl9pbmZvX3QgYmluX2luZm9zW1NDX05CSU5TXTsKLQotc3Rh dGljIHZvaWQKLWJpbl9pbmZvc19pbml0KHNjX2RhdGFfdCAqc2NfZGF0YSwgdW5zaWduZWQgYmlu X3NoYXJkX3NpemVzW1NDX05CSU5TXSwKLSAgICBiaW5faW5mb190IGluZm9zW1NDX05CSU5TXSkg ewotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTQ19OQklOUzsgaSsrKSB7Ci0JCWJpbl9pbmZv X3QgKmJpbl9pbmZvID0gJmluZm9zW2ldOwotCQlzY190ICpzYyA9ICZzY19kYXRhLT5zY1tpXTsK LQkJYmluX2luZm8tPnJlZ19zaXplID0gKChzaXplX3QpMVUgPDwgc2MtPmxnX2Jhc2UpCi0JCSAg ICArICgoc2l6ZV90KXNjLT5uZGVsdGEgPDwgc2MtPmxnX2RlbHRhKTsKLQkJYmluX2luZm8tPnNs YWJfc2l6ZSA9IChzYy0+cGdzIDw8IExHX1BBR0UpOwotCQliaW5faW5mby0+bnJlZ3MgPQotCQkg ICAgKHVpbnQzMl90KShiaW5faW5mby0+c2xhYl9zaXplIC8gYmluX2luZm8tPnJlZ19zaXplKTsK LQkJYmluX2luZm8tPm5fc2hhcmRzID0gYmluX3NoYXJkX3NpemVzW2ldOwotCQliaXRtYXBfaW5m b190IGJpdG1hcF9pbmZvID0gQklUTUFQX0lORk9fSU5JVElBTElaRVIoCi0JCSAgICBiaW5faW5m by0+bnJlZ3MpOwotCQliaW5faW5mby0+Yml0bWFwX2luZm8gPSBiaXRtYXBfaW5mbzsKLQl9Ci19 Ci0KLXZvaWQKLWJpbl9pbmZvX2Jvb3Qoc2NfZGF0YV90ICpzY19kYXRhLCB1bnNpZ25lZCBiaW5f c2hhcmRfc2l6ZXNbU0NfTkJJTlNdKSB7Ci0JYXNzZXJ0KHNjX2RhdGEtPmluaXRpYWxpemVkKTsK LQliaW5faW5mb3NfaW5pdChzY19kYXRhLCBiaW5fc2hhcmRfc2l6ZXMsIGJpbl9pbmZvcyk7Ci19 CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3Jj L2JpdG1hcC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Jp dG1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2NlZGM1Li4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9iaXRtYXAuYwor KysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv YXNzZXJ0LmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBCSVRNQVBfVVNF X1RSRUUKLQotdm9pZAotYml0bWFwX2luZm9faW5pdChiaXRtYXBfaW5mb190ICpiaW5mbywgc2l6 ZV90IG5iaXRzKSB7Ci0JdW5zaWduZWQgaTsKLQlzaXplX3QgZ3JvdXBfY291bnQ7Ci0KLQlhc3Nl cnQobmJpdHMgPiAwKTsKLQlhc3NlcnQobmJpdHMgPD0gKFpVKDEpIDw8IExHX0JJVE1BUF9NQVhC SVRTKSk7Ci0KLQkvKgotCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBncm91cHMgbmVjZXNzYXJ5 IHRvIHN0b3JlIG5iaXRzIGJpdHMsIGFuZAotCSAqIHByb2dyZXNzaXZlbHkgd29yayB1cHdhcmQg dGhyb3VnaCB0aGUgbGV2ZWxzIHVudGlsIHJlYWNoaW5nIGEgbGV2ZWwKLQkgKiB0aGF0IHJlcXVp cmVzIG9ubHkgb25lIGdyb3VwLgotCSAqLwotCWJpbmZvLT5sZXZlbHNbMF0uZ3JvdXBfb2Zmc2V0 ID0gMDsKLQlncm91cF9jb3VudCA9IEJJVE1BUF9CSVRTMkdST1VQUyhuYml0cyk7Ci0JZm9yIChp ID0gMTsgZ3JvdXBfY291bnQgPiAxOyBpKyspIHsKLQkJYXNzZXJ0KGkgPCBCSVRNQVBfTUFYX0xF VkVMUyk7Ci0JCWJpbmZvLT5sZXZlbHNbaV0uZ3JvdXBfb2Zmc2V0ID0gYmluZm8tPmxldmVsc1tp LTFdLmdyb3VwX29mZnNldAotCQkgICAgKyBncm91cF9jb3VudDsKLQkJZ3JvdXBfY291bnQgPSBC SVRNQVBfQklUUzJHUk9VUFMoZ3JvdXBfY291bnQpOwotCX0KLQliaW5mby0+bGV2ZWxzW2ldLmdy b3VwX29mZnNldCA9IGJpbmZvLT5sZXZlbHNbaS0xXS5ncm91cF9vZmZzZXQKLQkgICAgKyBncm91 cF9jb3VudDsKLQlhc3NlcnQoYmluZm8tPmxldmVsc1tpXS5ncm91cF9vZmZzZXQgPD0gQklUTUFQ X0dST1VQU19NQVgpOwotCWJpbmZvLT5ubGV2ZWxzID0gaTsKLQliaW5mby0+bmJpdHMgPSBuYml0 czsKLX0KLQotc3RhdGljIHNpemVfdAotYml0bWFwX2luZm9fbmdyb3Vwcyhjb25zdCBiaXRtYXBf aW5mb190ICpiaW5mbykgewotCXJldHVybiBiaW5mby0+bGV2ZWxzW2JpbmZvLT5ubGV2ZWxzXS5n cm91cF9vZmZzZXQ7Ci19Ci0KLXZvaWQKLWJpdG1hcF9pbml0KGJpdG1hcF90ICpiaXRtYXAsIGNv bnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBib29sIGZpbGwpIHsKLQlzaXplX3QgZXh0cmE7Ci0J dW5zaWduZWQgaTsKLQotCS8qCi0JICogQml0cyBhcmUgYWN0dWFsbHkgaW52ZXJ0ZWQgd2l0aCBy ZWdhcmQgdG8gdGhlIGV4dGVybmFsIGJpdG1hcAotCSAqIGludGVyZmFjZS4KLQkgKi8KLQotCWlm IChmaWxsKSB7Ci0JCS8qIFRoZSAiZmlsbGVkIiBiaXRtYXAgc3RhcnRzIG91dCB3aXRoIGFsbCAw IGJpdHMuICovCi0JCW1lbXNldChiaXRtYXAsIDAsIGJpdG1hcF9zaXplKGJpbmZvKSk7Ci0JCXJl dHVybjsKLQl9Ci0KLQkvKgotCSAqIFRoZSAiZW1wdHkiIGJpdG1hcCBzdGFydHMgb3V0IHdpdGgg YWxsIDEgYml0cywgZXhjZXB0IGZvciB0cmFpbGluZwotCSAqIHVudXNlZCBiaXRzIChpZiBhbnkp LiAgTm90ZSB0aGF0IGVhY2ggZ3JvdXAgdXNlcyBiaXQgMCB0byBjb3JyZXNwb25kCi0JICogdG8g dGhlIGZpcnN0IGxvZ2ljYWwgYml0IGluIHRoZSBncm91cCwgc28gZXh0cmEgYml0cyBhcmUgdGhl IG1vc3QKLQkgKiBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBsYXN0IGdyb3VwLgotCSAqLwotCW1l bXNldChiaXRtYXAsIDB4ZmZVLCBiaXRtYXBfc2l6ZShiaW5mbykpOwotCWV4dHJhID0gKEJJVE1B UF9HUk9VUF9OQklUUyAtIChiaW5mby0+bmJpdHMgJiBCSVRNQVBfR1JPVVBfTkJJVFNfTUFTSykp Ci0JICAgICYgQklUTUFQX0dST1VQX05CSVRTX01BU0s7Ci0JaWYgKGV4dHJhICE9IDApIHsKLQkJ Yml0bWFwW2JpbmZvLT5sZXZlbHNbMV0uZ3JvdXBfb2Zmc2V0IC0gMV0gPj49IGV4dHJhOwotCX0K LQlmb3IgKGkgPSAxOyBpIDwgYmluZm8tPm5sZXZlbHM7IGkrKykgewotCQlzaXplX3QgZ3JvdXBf Y291bnQgPSBiaW5mby0+bGV2ZWxzW2ldLmdyb3VwX29mZnNldCAtCi0JCSAgICBiaW5mby0+bGV2 ZWxzW2ktMV0uZ3JvdXBfb2Zmc2V0OwotCQlleHRyYSA9IChCSVRNQVBfR1JPVVBfTkJJVFMgLSAo Z3JvdXBfY291bnQgJgotCQkgICAgQklUTUFQX0dST1VQX05CSVRTX01BU0spKSAmIEJJVE1BUF9H Uk9VUF9OQklUU19NQVNLOwotCQlpZiAoZXh0cmEgIT0gMCkgewotCQkJYml0bWFwW2JpbmZvLT5s ZXZlbHNbaSsxXS5ncm91cF9vZmZzZXQgLSAxXSA+Pj0gZXh0cmE7Ci0JCX0KLQl9Ci19Ci0KLSNl bHNlIC8qIEJJVE1BUF9VU0VfVFJFRSAqLwotCi12b2lkCi1iaXRtYXBfaW5mb19pbml0KGJpdG1h cF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbmJpdHMpIHsKLQlhc3NlcnQobmJpdHMgPiAwKTsKLQlh c3NlcnQobmJpdHMgPD0gKFpVKDEpIDw8IExHX0JJVE1BUF9NQVhCSVRTKSk7Ci0KLQliaW5mby0+ bmdyb3VwcyA9IEJJVE1BUF9CSVRTMkdST1VQUyhuYml0cyk7Ci0JYmluZm8tPm5iaXRzID0gbmJp dHM7Ci19Ci0KLXN0YXRpYyBzaXplX3QKLWJpdG1hcF9pbmZvX25ncm91cHMoY29uc3QgYml0bWFw X2luZm9fdCAqYmluZm8pIHsKLQlyZXR1cm4gYmluZm8tPm5ncm91cHM7Ci19Ci0KLXZvaWQKLWJp dG1hcF9pbml0KGJpdG1hcF90ICpiaXRtYXAsIGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBi b29sIGZpbGwpIHsKLQlzaXplX3QgZXh0cmE7Ci0KLQlpZiAoZmlsbCkgewotCQltZW1zZXQoYml0 bWFwLCAwLCBiaXRtYXBfc2l6ZShiaW5mbykpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtc2V0KGJp dG1hcCwgMHhmZlUsIGJpdG1hcF9zaXplKGJpbmZvKSk7Ci0JZXh0cmEgPSAoQklUTUFQX0dST1VQ X05CSVRTIC0gKGJpbmZvLT5uYml0cyAmIEJJVE1BUF9HUk9VUF9OQklUU19NQVNLKSkKLQkgICAg JiBCSVRNQVBfR1JPVVBfTkJJVFNfTUFTSzsKLQlpZiAoZXh0cmEgIT0gMCkgewotCQliaXRtYXBb YmluZm8tPm5ncm91cHMgLSAxXSA+Pj0gZXh0cmE7Ci0JfQotfQotCi0jZW5kaWYgLyogQklUTUFQ X1VTRV9UUkVFICovCi0KLXNpemVfdAotYml0bWFwX3NpemUoY29uc3QgYml0bWFwX2luZm9fdCAq YmluZm8pIHsKLQlyZXR1cm4gKGJpdG1hcF9pbmZvX25ncm91cHMoYmluZm8pIDw8IExHX1NJWkVP Rl9CSVRNQVApOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3NyYy9idWZfd3JpdGVyLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9zcmMvYnVmX3dyaXRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA3YzZmNzk0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3NyYy9idWZfd3JpdGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9tYWxsb2NfaW8uaCIKLQotc3RhdGljIHZvaWQgKgotYnVmX3dyaXRlcl9hbGxv Y2F0ZV9pbnRlcm5hbF9idWYodHNkbl90ICp0c2RuLCBzaXplX3QgYnVmX2xlbikgewotI2lmZGVm IEpFTUFMTE9DX0pFVAotCWlmIChidWZfbGVuID4gU0NfTEFSR0VfTUFYQ0xBU1MpIHsKLQkJcmV0 dXJuIE5VTEw7Ci0JfQotI2Vsc2UKLQlhc3NlcnQoYnVmX2xlbiA8PSBTQ19MQVJHRV9NQVhDTEFT Uyk7Ci0jZW5kaWYKLQlyZXR1cm4gaWFsbG9jenRtKHRzZG4sIGJ1Zl9sZW4sIHN6X3NpemUyaW5k ZXgoYnVmX2xlbiksIGZhbHNlLCBOVUxMLAotCSAgICB0cnVlLCBhcmVuYV9nZXQodHNkbiwgMCwg ZmFsc2UpLCB0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWJ1Zl93cml0ZXJfZnJlZV9pbnRlcm5h bF9idWYodHNkbl90ICp0c2RuLCB2b2lkICpidWYpIHsKLQlpZiAoYnVmICE9IE5VTEwpIHsKLQkJ aWRhbGxvY3RtKHRzZG4sIGJ1ZiwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotfQotCi1z dGF0aWMgdm9pZAotYnVmX3dyaXRlcl9hc3NlcnQoYnVmX3dyaXRlcl90ICpidWZfd3JpdGVyKSB7 Ci0JYXNzZXJ0KGJ1Zl93cml0ZXIgIT0gTlVMTCk7Ci0JYXNzZXJ0KGJ1Zl93cml0ZXItPndyaXRl X2NiICE9IE5VTEwpOwotCWlmIChidWZfd3JpdGVyLT5idWYgIT0gTlVMTCkgewotCQlhc3NlcnQo YnVmX3dyaXRlci0+YnVmX3NpemUgPiAwKTsKLQl9IGVsc2UgewotCQlhc3NlcnQoYnVmX3dyaXRl ci0+YnVmX3NpemUgPT0gMCk7Ci0JCWFzc2VydChidWZfd3JpdGVyLT5pbnRlcm5hbF9idWYpOwot CX0KLQlhc3NlcnQoYnVmX3dyaXRlci0+YnVmX2VuZCA8PSBidWZfd3JpdGVyLT5idWZfc2l6ZSk7 Ci19Ci0KLWJvb2wKLWJ1Zl93cml0ZXJfaW5pdCh0c2RuX3QgKnRzZG4sIGJ1Zl93cml0ZXJfdCAq YnVmX3dyaXRlciwgd3JpdGVfY2JfdCAqd3JpdGVfY2IsCi0gICAgdm9pZCAqY2JvcGFxdWUsIGNo YXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pIHsKLQlpZiAod3JpdGVfY2IgIT0gTlVMTCkgewotCQli dWZfd3JpdGVyLT53cml0ZV9jYiA9IHdyaXRlX2NiOwotCX0gZWxzZSB7Ci0JCWJ1Zl93cml0ZXIt PndyaXRlX2NiID0gamVfbWFsbG9jX21lc3NhZ2UgIT0gTlVMTCA/Ci0JCSAgICBqZV9tYWxsb2Nf bWVzc2FnZSA6IHdydG1lc3NhZ2U7Ci0JfQotCWJ1Zl93cml0ZXItPmNib3BhcXVlID0gY2JvcGFx dWU7Ci0JYXNzZXJ0KGJ1Zl9sZW4gPj0gMik7Ci0JaWYgKGJ1ZiAhPSBOVUxMKSB7Ci0JCWJ1Zl93 cml0ZXItPmJ1ZiA9IGJ1ZjsKLQkJYnVmX3dyaXRlci0+aW50ZXJuYWxfYnVmID0gZmFsc2U7Ci0J fSBlbHNlIHsKLQkJYnVmX3dyaXRlci0+YnVmID0gYnVmX3dyaXRlcl9hbGxvY2F0ZV9pbnRlcm5h bF9idWYodHNkbiwKLQkJICAgIGJ1Zl9sZW4pOwotCQlidWZfd3JpdGVyLT5pbnRlcm5hbF9idWYg PSB0cnVlOwotCX0KLQlpZiAoYnVmX3dyaXRlci0+YnVmICE9IE5VTEwpIHsKLQkJYnVmX3dyaXRl ci0+YnVmX3NpemUgPSBidWZfbGVuIC0gMTsgLyogQWxsb3dpbmcgZm9yICdcMCcuICovCi0JfSBl bHNlIHsKLQkJYnVmX3dyaXRlci0+YnVmX3NpemUgPSAwOwotCX0KLQlidWZfd3JpdGVyLT5idWZf ZW5kID0gMDsKLQlidWZfd3JpdGVyX2Fzc2VydChidWZfd3JpdGVyKTsKLQlyZXR1cm4gYnVmX3dy aXRlci0+YnVmID09IE5VTEw7Ci19Ci0KLXZvaWQKLWJ1Zl93cml0ZXJfZmx1c2goYnVmX3dyaXRl cl90ICpidWZfd3JpdGVyKSB7Ci0JYnVmX3dyaXRlcl9hc3NlcnQoYnVmX3dyaXRlcik7Ci0JaWYg KGJ1Zl93cml0ZXItPmJ1ZiA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JYnVmX3dyaXRlci0+ YnVmW2J1Zl93cml0ZXItPmJ1Zl9lbmRdID0gJ1wwJzsKLQlidWZfd3JpdGVyLT53cml0ZV9jYihi dWZfd3JpdGVyLT5jYm9wYXF1ZSwgYnVmX3dyaXRlci0+YnVmKTsKLQlidWZfd3JpdGVyLT5idWZf ZW5kID0gMDsKLQlidWZfd3JpdGVyX2Fzc2VydChidWZfd3JpdGVyKTsKLX0KLQotdm9pZAotYnVm X3dyaXRlcl9jYih2b2lkICpidWZfd3JpdGVyX2FyZywgY29uc3QgY2hhciAqcykgewotCWJ1Zl93 cml0ZXJfdCAqYnVmX3dyaXRlciA9IChidWZfd3JpdGVyX3QgKilidWZfd3JpdGVyX2FyZzsKLQli dWZfd3JpdGVyX2Fzc2VydChidWZfd3JpdGVyKTsKLQlpZiAoYnVmX3dyaXRlci0+YnVmID09IE5V TEwpIHsKLQkJYnVmX3dyaXRlci0+d3JpdGVfY2IoYnVmX3dyaXRlci0+Y2JvcGFxdWUsIHMpOwot CQlyZXR1cm47Ci0JfQotCXNpemVfdCBpLCBzbGVuLCBuOwotCWZvciAoaSA9IDAsIHNsZW4gPSBz dHJsZW4ocyk7IGkgPCBzbGVuOyBpICs9IG4pIHsKLQkJaWYgKGJ1Zl93cml0ZXItPmJ1Zl9lbmQg PT0gYnVmX3dyaXRlci0+YnVmX3NpemUpIHsKLQkJCWJ1Zl93cml0ZXJfZmx1c2goYnVmX3dyaXRl cik7Ci0JCX0KLQkJc2l6ZV90IHNfcmVtYWluID0gc2xlbiAtIGk7Ci0JCXNpemVfdCBidWZfcmVt YWluID0gYnVmX3dyaXRlci0+YnVmX3NpemUgLSBidWZfd3JpdGVyLT5idWZfZW5kOwotCQluID0g c19yZW1haW4gPCBidWZfcmVtYWluID8gc19yZW1haW4gOiBidWZfcmVtYWluOwotCQltZW1jcHko YnVmX3dyaXRlci0+YnVmICsgYnVmX3dyaXRlci0+YnVmX2VuZCwgcyArIGksIG4pOwotCQlidWZf d3JpdGVyLT5idWZfZW5kICs9IG47Ci0JCWJ1Zl93cml0ZXJfYXNzZXJ0KGJ1Zl93cml0ZXIpOwot CX0KLQlhc3NlcnQoaSA9PSBzbGVuKTsKLX0KLQotdm9pZAotYnVmX3dyaXRlcl90ZXJtaW5hdGUo dHNkbl90ICp0c2RuLCBidWZfd3JpdGVyX3QgKmJ1Zl93cml0ZXIpIHsKLQlidWZfd3JpdGVyX2Fz c2VydChidWZfd3JpdGVyKTsKLQlidWZfd3JpdGVyX2ZsdXNoKGJ1Zl93cml0ZXIpOwotCWlmIChi dWZfd3JpdGVyLT5pbnRlcm5hbF9idWYpIHsKLQkJYnVmX3dyaXRlcl9mcmVlX2ludGVybmFsX2J1 Zih0c2RuLCBidWZfd3JpdGVyLT5idWYpOwotCX0KLX0KLQotdm9pZAotYnVmX3dyaXRlcl9waXBl KGJ1Zl93cml0ZXJfdCAqYnVmX3dyaXRlciwgcmVhZF9jYl90ICpyZWFkX2NiLAotICAgIHZvaWQg KnJlYWRfY2JvcGFxdWUpIHsKLQkvKgotCSAqIEEgdGlueSBsb2NhbCBidWZmZXIgaW4gY2FzZSB0 aGUgYnVmZmVyZWQgd3JpdGVyIGZhaWxlZCB0byBhbGxvY2F0ZQotCSAqIGF0IGluaXQuCi0JICov Ci0Jc3RhdGljIGNoYXIgYmFja3VwX2J1ZlsxNl07Ci0Jc3RhdGljIGJ1Zl93cml0ZXJfdCBiYWNr dXBfYnVmX3dyaXRlcjsKLQotCWJ1Zl93cml0ZXJfYXNzZXJ0KGJ1Zl93cml0ZXIpOwotCWFzc2Vy dChyZWFkX2NiICE9IE5VTEwpOwotCWlmIChidWZfd3JpdGVyLT5idWYgPT0gTlVMTCkgewotCQli dWZfd3JpdGVyX2luaXQoVFNETl9OVUxMLCAmYmFja3VwX2J1Zl93cml0ZXIsCi0JCSAgICBidWZf d3JpdGVyLT53cml0ZV9jYiwgYnVmX3dyaXRlci0+Y2JvcGFxdWUsIGJhY2t1cF9idWYsCi0JCSAg ICBzaXplb2YoYmFja3VwX2J1ZikpOwotCQlidWZfd3JpdGVyID0gJmJhY2t1cF9idWZfd3JpdGVy OwotCX0KLQlhc3NlcnQoYnVmX3dyaXRlci0+YnVmICE9IE5VTEwpOwotCXNzaXplX3QgbnJlYWQg PSAwOwotCWRvIHsKLQkJYnVmX3dyaXRlci0+YnVmX2VuZCArPSBucmVhZDsKLQkJYnVmX3dyaXRl cl9hc3NlcnQoYnVmX3dyaXRlcik7Ci0JCWlmIChidWZfd3JpdGVyLT5idWZfZW5kID09IGJ1Zl93 cml0ZXItPmJ1Zl9zaXplKSB7Ci0JCQlidWZfd3JpdGVyX2ZsdXNoKGJ1Zl93cml0ZXIpOwotCQl9 Ci0JCW5yZWFkID0gcmVhZF9jYihyZWFkX2Nib3BhcXVlLAotCQkgICAgYnVmX3dyaXRlci0+YnVm ICsgYnVmX3dyaXRlci0+YnVmX2VuZCwKLQkJICAgIGJ1Zl93cml0ZXItPmJ1Zl9zaXplIC0gYnVm X3dyaXRlci0+YnVmX2VuZCk7Ci0JfSB3aGlsZSAobnJlYWQgPiAwKTsKLQlidWZfd3JpdGVyX2Zs dXNoKGJ1Zl93cml0ZXIpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3NyYy9jYWNoZV9iaW4uYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3NyYy9jYWNoZV9iaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggOWFlMDcyYS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9zcmMvY2FjaGVfYmluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBA Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYml0X3V0aWwuaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9jYWNoZV9iaW4uaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYWZl dHlfY2hlY2suaCIKLQotdm9pZAotY2FjaGVfYmluX2luZm9faW5pdChjYWNoZV9iaW5faW5mb190 ICppbmZvLAotICAgIGNhY2hlX2Jpbl9zel90IG5jYWNoZWRfbWF4KSB7Ci0JYXNzZXJ0KG5jYWNo ZWRfbWF4IDw9IENBQ0hFX0JJTl9OQ0FDSEVEX01BWCk7Ci0Jc2l6ZV90IHN0YWNrX3NpemUgPSAo c2l6ZV90KW5jYWNoZWRfbWF4ICogc2l6ZW9mKHZvaWQgKik7Ci0JYXNzZXJ0KHN0YWNrX3NpemUg PCAoKHNpemVfdCkxIDw8IChzaXplb2YoY2FjaGVfYmluX3N6X3QpICogOCkpKTsKLQlpbmZvLT5u Y2FjaGVkX21heCA9IChjYWNoZV9iaW5fc3pfdCluY2FjaGVkX21heDsKLX0KLQotdm9pZAotY2Fj aGVfYmluX2luZm9fY29tcHV0ZV9hbGxvYyhjYWNoZV9iaW5faW5mb190ICppbmZvcywgc3ppbmRf dCBuaW5mb3MsCi0gICAgc2l6ZV90ICpzaXplLCBzaXplX3QgKmFsaWdubWVudCkgewotCS8qIEZv ciB0aGUgdG90YWwgYmluIHN0YWNrIHJlZ2lvbiAocGVyIHRjYWNoZSksIHJlc2VydmUgMiBtb3Jl IHNsb3RzIHNvCi0JICogdGhhdAotCSAqIDEpIHRoZSBlbXB0eSBwb3NpdGlvbiBjYW4gYmUgc2Fm ZWx5IHJlYWQgb24gdGhlIGZhc3QgcGF0aCBiZWZvcmUKLQkgKiAgICBjaGVja2luZyAiaXNfZW1w dHkiOyBhbmQKLQkgKiAyKSB0aGUgY3VyX3B0ciBjYW4gZ28gYmV5b25kIHRoZSBlbXB0eSBwb3Np dGlvbiBieSAxIHN0ZXAgc2FmZWx5IG9uCi0JICogdGhlIGZhc3QgcGF0aCAoaS5lLiBubyBvdmVy ZmxvdykuCi0JICovCi0JKnNpemUgPSBzaXplb2Yodm9pZCAqKSAqIDI7Ci0JZm9yIChzemluZF90 IGkgPSAwOyBpIDwgbmluZm9zOyBpKyspIHsKLQkJYXNzZXJ0KGluZm9zW2ldLm5jYWNoZWRfbWF4 ID4gMCk7Ci0JCSpzaXplICs9IGluZm9zW2ldLm5jYWNoZWRfbWF4ICogc2l6ZW9mKHZvaWQgKik7 Ci0JfQotCi0JLyoKLQkgKiBBbGlnbiB0byBhdCBsZWFzdCBQQUdFLCB0byBtaW5pbWl6ZSB0aGUg IyBvZiBUTEJzIG5lZWRlZCBieSB0aGUKLQkgKiBzbWFsbGVyIHNpemVzOyBhbHNvIGhlbHBzIGlm IHRoZSBsYXJnZXIgc2l6ZXMgZG9uJ3QgZ2V0IHVzZWQgYXQgYWxsLgotCSAqLwotCSphbGlnbm1l bnQgPSBQQUdFOwotfQotCi12b2lkCi1jYWNoZV9iaW5fcHJlaW5jcmVtZW50KGNhY2hlX2Jpbl9p bmZvX3QgKmluZm9zLCBzemluZF90IG5pbmZvcywgdm9pZCAqYWxsb2MsCi0gICAgc2l6ZV90ICpj dXJfb2Zmc2V0KSB7Ci0JaWYgKGNvbmZpZ19kZWJ1ZykgewotCQlzaXplX3QgY29tcHV0ZWRfc2l6 ZTsKLQkJc2l6ZV90IGNvbXB1dGVkX2FsaWdubWVudDsKLQotCQkvKiBQb2ludGVyIHNob3VsZCBi ZSBhcyBhbGlnbmVkIGFzIHdlIGFza2VkIGZvci4gKi8KLQkJY2FjaGVfYmluX2luZm9fY29tcHV0 ZV9hbGxvYyhpbmZvcywgbmluZm9zLCAmY29tcHV0ZWRfc2l6ZSwKLQkJICAgICZjb21wdXRlZF9h bGlnbm1lbnQpOwotCQlhc3NlcnQoKCh1aW50cHRyX3QpYWxsb2MgJiAoY29tcHV0ZWRfYWxpZ25t ZW50IC0gMSkpID09IDApOwotCX0KLQotCSoodWludHB0cl90ICopKCh1aW50cHRyX3QpYWxsb2Mg KyAqY3VyX29mZnNldCkgPQotCSAgICBjYWNoZV9iaW5fcHJlY2VkaW5nX2p1bms7Ci0JKmN1cl9v ZmZzZXQgKz0gc2l6ZW9mKHZvaWQgKik7Ci19Ci0KLXZvaWQKLWNhY2hlX2Jpbl9wb3N0aW5jcmVt ZW50KGNhY2hlX2Jpbl9pbmZvX3QgKmluZm9zLCBzemluZF90IG5pbmZvcywgdm9pZCAqYWxsb2Ms Ci0gICAgc2l6ZV90ICpjdXJfb2Zmc2V0KSB7Ci0JKih1aW50cHRyX3QgKikoKHVpbnRwdHJfdClh bGxvYyArICpjdXJfb2Zmc2V0KSA9Ci0JICAgIGNhY2hlX2Jpbl90cmFpbGluZ19qdW5rOwotCSpj dXJfb2Zmc2V0ICs9IHNpemVvZih2b2lkICopOwotfQotCi12b2lkCi1jYWNoZV9iaW5faW5pdChj YWNoZV9iaW5fdCAqYmluLCBjYWNoZV9iaW5faW5mb190ICppbmZvLCB2b2lkICphbGxvYywKLSAg ICBzaXplX3QgKmN1cl9vZmZzZXQpIHsKLQkvKgotCSAqIFRoZSBmdWxsX3Bvc2l0aW9uIHBvaW50 cyB0byB0aGUgbG93ZXN0IGF2YWlsYWJsZSBzcGFjZS4gIEFsbG9jYXRpb25zCi0JICogd2lsbCBh Y2Nlc3MgdGhlIHNsb3RzIHRvd2FyZCBoaWdoZXIgYWRkcmVzc2VzIChmb3IgdGhlIGJlbmVmaXQg b2YKLQkgKiBhZGphY2VudCBwcmVmZXRjaCkuCi0JICovCi0Jdm9pZCAqc3RhY2tfY3VyID0gKHZv aWQgKikoKHVpbnRwdHJfdClhbGxvYyArICpjdXJfb2Zmc2V0KTsKLQl2b2lkICpmdWxsX3Bvc2l0 aW9uID0gc3RhY2tfY3VyOwotCXVpbnQxNl90IGJpbl9zdGFja19zaXplID0gaW5mby0+bmNhY2hl ZF9tYXggKiBzaXplb2Yodm9pZCAqKTsKLQotCSpjdXJfb2Zmc2V0ICs9IGJpbl9zdGFja19zaXpl OwotCXZvaWQgKmVtcHR5X3Bvc2l0aW9uID0gKHZvaWQgKikoKHVpbnRwdHJfdClhbGxvYyArICpj dXJfb2Zmc2V0KTsKLQotCS8qIEluaXQgdG8gdGhlIGVtcHR5IHBvc2l0aW9uLiAqLwotCWJpbi0+ c3RhY2tfaGVhZCA9ICh2b2lkICoqKWVtcHR5X3Bvc2l0aW9uOwotCWJpbi0+bG93X2JpdHNfbG93 X3dhdGVyID0gKHVpbnQxNl90KSh1aW50cHRyX3QpYmluLT5zdGFja19oZWFkOwotCWJpbi0+bG93 X2JpdHNfZnVsbCA9ICh1aW50MTZfdCkodWludHB0cl90KWZ1bGxfcG9zaXRpb247Ci0JYmluLT5s b3dfYml0c19lbXB0eSA9ICh1aW50MTZfdCkodWludHB0cl90KWVtcHR5X3Bvc2l0aW9uOwotCWNh Y2hlX2Jpbl9zel90IGZyZWVfc3BvdHMgPSBjYWNoZV9iaW5fZGlmZihiaW4sCi0JICAgIGJpbi0+ bG93X2JpdHNfZnVsbCwgKHVpbnQxNl90KSh1aW50cHRyX3QpYmluLT5zdGFja19oZWFkLAotCSAg ICAvKiByYWN5ICovIGZhbHNlKTsKLQlhc3NlcnQoZnJlZV9zcG90cyA9PSBiaW5fc3RhY2tfc2l6 ZSk7Ci0JYXNzZXJ0KGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbChiaW4sIGluZm8pID09IDAp OwotCWFzc2VydChjYWNoZV9iaW5fZW1wdHlfcG9zaXRpb25fZ2V0KGJpbikgPT0gZW1wdHlfcG9z aXRpb24pOwotCi0JYXNzZXJ0KGJpbl9zdGFja19zaXplID4gMCB8fCBlbXB0eV9wb3NpdGlvbiA9 PSBmdWxsX3Bvc2l0aW9uKTsKLX0KLQotYm9vbAotY2FjaGVfYmluX3N0aWxsX3plcm9faW5pdGlh bGl6ZWQoY2FjaGVfYmluX3QgKmJpbikgewotCXJldHVybiBiaW4tPnN0YWNrX2hlYWQgPT0gTlVM TDsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9zcmMvY2toLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv Y2toLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYjQzMTkuLjAwMDAwMDAKLS0t IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2NraC5jCisrKyAv ZGV2L251bGwKQEAgLTEsNTY5ICswLDAgQEAKLS8qCi0gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot ICogSW1wbGVtZW50YXRpb24gb2YgKDJeMSssMikgY3Vja29vIGhhc2hpbmcsIHdoZXJlIDJeMSsg aW5kaWNhdGVzIHRoYXQgZWFjaAotICogaGFzaCBidWNrZXQgY29udGFpbnMgMl5uIGNlbGxzLCBm b3IgbiA+PSAxLCBhbmQgMiBpbmRpY2F0ZXMgdGhhdCB0d28gaGFzaAotICogZnVuY3Rpb25zIGFy ZSBlbXBsb3llZC4gIFRoZSBvcmlnaW5hbCBjdWNrb28gaGFzaGluZyBhbGdvcml0aG0gd2FzIGRl c2NyaWJlZAotICogaW46Ci0gKgotICogICBQYWdoLCBSLiwgRi5GLiBSb2RsZXIgKDIwMDQpIEN1 Y2tvbyBIYXNoaW5nLiAgSm91cm5hbCBvZiBBbGdvcml0aG1zCi0gKiAgICAgNTEoMik6MTIyLTE0 NC4KLSAqCi0gKiBHZW5lcmFsaXphdGlvbiBvZiBjdWNrb28gaGFzaGluZyB3YXMgZGlzY3Vzc2Vk IGluOgotICoKLSAqICAgRXJsaW5nc3NvbiwgVS4sIE0uIE1hbmFzc2UsIEYuIE1jU2hlcnJ5ICgy MDA2KSBBIGNvb2wgYW5kIHByYWN0aWNhbAotICogICAgIGFsdGVybmF0aXZlIHRvIHRyYWRpdGlv bmFsIGhhc2ggdGFibGVzLiAgSW4gUHJvY2VlZGluZ3Mgb2YgdGhlIDd0aAotICogICAgIFdvcmtz aG9wIG9uIERpc3RyaWJ1dGVkIERhdGEgYW5kIFN0cnVjdHVyZXMgKFdEQVMnMDYpLCBTYW50YSBD bGFyYSwgQ0EsCi0gKiAgICAgSmFudWFyeSAyMDA2LgotICoKLSAqIFRoaXMgaW1wbGVtZW50YXRp b24gdXNlcyBwcmVjaXNlbHkgdHdvIGhhc2ggZnVuY3Rpb25zIGJlY2F1c2UgdGhhdCBpcyB0aGUK LSAqIGZld2VzdCB0aGF0IGNhbiB3b3JrLCBhbmQgc3VwcG9ydGluZyBtdWx0aXBsZSBoYXNoZXMg aXMgYW4gaW1wbGVtZW50YXRpb24KLSAqIGJ1cmRlbi4gIEhlcmUgaXMgYSByZXByb2R1Y3Rpb24g b2YgRmlndXJlIDEgZnJvbSBFcmxpbmdzc29uIGV0IGFsLiAoMjAwNikKLSAqIHRoYXQgc2hvd3Mg YXBwcm94aW1hdGUgZXhwZWN0ZWQgbWF4aW11bSBsb2FkIGZhY3RvcnMgZm9yIHZhcmlvdXMKLSAq IGNvbmZpZ3VyYXRpb25zOgotICoKLSAqICAgICAgICAgICB8ICAgICAgICAgI2NlbGxzL2J1Y2tl dCAgICAgICAgIHwKLSAqICAgI2hhc2hlcyB8ICAgMSAgIHwgICAyICAgfCAgIDQgICB8ICAgOCAg IHwKLSAqICAgLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKLSAqICAg ICAgICAgMSB8IDAuMDA2IHwgMC4wMDYgfCAwLjAzICB8IDAuMTIgIHwKLSAqICAgICAgICAgMiB8 IDAuNDkgIHwgMC44NiAgfD4wLjkzPCB8PjAuOTY8IHwKLSAqICAgICAgICAgMyB8IDAuOTEgIHwg MC45NyAgfCAwLjk4ICB8IDAuOTk5IHwKLSAqICAgICAgICAgNCB8IDAuOTcgIHwgMC45OSAgfCAw Ljk5OSB8ICAgICAgIHwKLSAqCi0gKiBUaGUgbnVtYmVyIG9mIGNlbGxzIHBlciBidWNrZXQgaXMg Y2hvc2VuIHN1Y2ggdGhhdCBhIGJ1Y2tldCBmaXRzIGluIG9uZSBjYWNoZQotICogbGluZS4gIFNv LCBvbiAzMi0gYW5kIDY0LWJpdCBzeXN0ZW1zLCB3ZSB1c2UgKDgsMikgYW5kICg0LDIpIGN1Y2tv byBoYXNoaW5nLAotICogcmVzcGVjdGl2ZWx5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLQotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2NraC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2Fzc2VydC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hhc2guaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2NfaW8uaCIKLSNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9wcm5nLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdXRpbC5o IgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Ig bm9uLWlubGluZSBzdGF0aWMgZnVuY3Rpb25zLiAqLwotCi1zdGF0aWMgYm9vbAlja2hfZ3Jvdyh0 c2RfdCAqdHNkLCBja2hfdCAqY2toKTsKLXN0YXRpYyB2b2lkCWNraF9zaHJpbmsodHNkX3QgKnRz ZCwgY2toX3QgKmNraCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTZWFy Y2ggYnVja2V0IGZvciBrZXkgYW5kIHJldHVybiB0aGUgY2VsbCBudW1iZXIgaWYgZm91bmQ7IFNJ WkVfVF9NQVgKLSAqIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIHNpemVfdAotY2toX2J1Y2tldF9z ZWFyY2goY2toX3QgKmNraCwgc2l6ZV90IGJ1Y2tldCwgY29uc3Qgdm9pZCAqa2V5KSB7Ci0JY2to Y190ICpjZWxsOwotCXVuc2lnbmVkIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKFpVKDEpIDw8IExH X0NLSF9CVUNLRVRfQ0VMTFMpOyBpKyspIHsKLQkJY2VsbCA9ICZja2gtPnRhYlsoYnVja2V0IDw8 IExHX0NLSF9CVUNLRVRfQ0VMTFMpICsgaV07Ci0JCWlmIChjZWxsLT5rZXkgIT0gTlVMTCAmJiBj a2gtPmtleWNvbXAoa2V5LCBjZWxsLT5rZXkpKSB7Ci0JCQlyZXR1cm4gKGJ1Y2tldCA8PCBMR19D S0hfQlVDS0VUX0NFTExTKSArIGk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gU0laRV9UX01BWDsKLX0K LQotLyoKLSAqIFNlYXJjaCB0YWJsZSBmb3Iga2V5IGFuZCByZXR1cm4gY2VsbCBudW1iZXIgaWYg Zm91bmQ7IFNJWkVfVF9NQVggb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgc2l6ZV90Ci1ja2hfaXNl YXJjaChja2hfdCAqY2toLCBjb25zdCB2b2lkICprZXkpIHsKLQlzaXplX3QgaGFzaGVzWzJdLCBi dWNrZXQsIGNlbGw7Ci0KLQlhc3NlcnQoY2toICE9IE5VTEwpOwotCi0JY2toLT5oYXNoKGtleSwg aGFzaGVzKTsKLQotCS8qIFNlYXJjaCBwcmltYXJ5IGJ1Y2tldC4gKi8KLQlidWNrZXQgPSBoYXNo ZXNbMF0gJiAoKFpVKDEpIDw8IGNraC0+bGdfY3VyYnVja2V0cykgLSAxKTsKLQljZWxsID0gY2to X2J1Y2tldF9zZWFyY2goY2toLCBidWNrZXQsIGtleSk7Ci0JaWYgKGNlbGwgIT0gU0laRV9UX01B WCkgewotCQlyZXR1cm4gY2VsbDsKLQl9Ci0KLQkvKiBTZWFyY2ggc2Vjb25kYXJ5IGJ1Y2tldC4g Ki8KLQlidWNrZXQgPSBoYXNoZXNbMV0gJiAoKFpVKDEpIDw8IGNraC0+bGdfY3VyYnVja2V0cykg LSAxKTsKLQljZWxsID0gY2toX2J1Y2tldF9zZWFyY2goY2toLCBidWNrZXQsIGtleSk7Ci0JcmV0 dXJuIGNlbGw7Ci19Ci0KLXN0YXRpYyBib29sCi1ja2hfdHJ5X2J1Y2tldF9pbnNlcnQoY2toX3Qg KmNraCwgc2l6ZV90IGJ1Y2tldCwgY29uc3Qgdm9pZCAqa2V5LAotICAgIGNvbnN0IHZvaWQgKmRh dGEpIHsKLQlja2hjX3QgKmNlbGw7Ci0JdW5zaWduZWQgb2Zmc2V0LCBpOwotCi0JLyoKLQkgKiBD eWNsZSB0aHJvdWdoIHRoZSBjZWxscyBpbiB0aGUgYnVja2V0LCBzdGFydGluZyBhdCBhIHJhbmRv bSBwb3NpdGlvbi4KLQkgKiBUaGUgcmFuZG9tbmVzcyBhdm9pZHMgd29yc3QtY2FzZSBzZWFyY2gg b3ZlcmhlYWQgYXMgYnVja2V0cyBmaWxsIHVwLgotCSAqLwotCW9mZnNldCA9ICh1bnNpZ25lZClw cm5nX2xnX3JhbmdlX3U2NCgmY2toLT5wcm5nX3N0YXRlLAotCSAgICBMR19DS0hfQlVDS0VUX0NF TExTKTsKLQlmb3IgKGkgPSAwOyBpIDwgKFpVKDEpIDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMpOyBp KyspIHsKLQkJY2VsbCA9ICZja2gtPnRhYlsoYnVja2V0IDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMp ICsKLQkJICAgICgoaSArIG9mZnNldCkgJiAoKFpVKDEpIDw8IExHX0NLSF9CVUNLRVRfQ0VMTFMp IC0gMSkpXTsKLQkJaWYgKGNlbGwtPmtleSA9PSBOVUxMKSB7Ci0JCQljZWxsLT5rZXkgPSBrZXk7 Ci0JCQljZWxsLT5kYXRhID0gZGF0YTsKLQkJCWNraC0+Y291bnQrKzsKLQkJCXJldHVybiBmYWxz ZTsKLQkJfQotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogTm8gc3BhY2UgaXMgYXZh aWxhYmxlIGluIGJ1Y2tldC4gIFJhbmRvbWx5IGV2aWN0IGFuIGl0ZW0sIHRoZW4gdHJ5IHRvIGZp bmQgYW4KLSAqIGFsdGVybmF0ZSBsb2NhdGlvbiBmb3IgdGhhdCBpdGVtLiAgSXRlcmF0aXZlbHkg cmVwZWF0IHRoaXMKLSAqIGV2aWN0aW9uL3JlbG9jYXRpb24gcHJvY2VkdXJlIHVudGlsIGVpdGhl ciBzdWNjZXNzIG9yIGRldGVjdGlvbiBvZiBhbgotICogZXZpY3Rpb24vcmVsb2NhdGlvbiBidWNr ZXQgY3ljbGUuCi0gKi8KLXN0YXRpYyBib29sCi1ja2hfZXZpY3RfcmVsb2NfaW5zZXJ0KGNraF90 ICpja2gsIHNpemVfdCBhcmdidWNrZXQsIHZvaWQgY29uc3QgKiphcmdrZXksCi0gICAgdm9pZCBj b25zdCAqKmFyZ2RhdGEpIHsKLQljb25zdCB2b2lkICprZXksICpkYXRhLCAqdGtleSwgKnRkYXRh OwotCWNraGNfdCAqY2VsbDsKLQlzaXplX3QgaGFzaGVzWzJdLCBidWNrZXQsIHRidWNrZXQ7Ci0J dW5zaWduZWQgaTsKLQotCWJ1Y2tldCA9IGFyZ2J1Y2tldDsKLQlrZXkgPSAqYXJna2V5OwotCWRh dGEgPSAqYXJnZGF0YTsKLQl3aGlsZSAodHJ1ZSkgewotCQkvKgotCQkgKiBDaG9vc2UgYSByYW5k b20gaXRlbSB3aXRoaW4gdGhlIGJ1Y2tldCB0byBldmljdC4gIFRoaXMgaXMKLQkJICogY3JpdGlj YWwgdG8gY29ycmVjdCBmdW5jdGlvbiwgYmVjYXVzZSB3aXRob3V0IChldmVudHVhbGx5KQotCQkg KiBldmljdGluZyBhbGwgaXRlbXMgd2l0aGluIGEgYnVja2V0IGR1cmluZyBpdGVyYXRpb24sIGl0 Ci0JCSAqIHdvdWxkIGJlIHBvc3NpYmxlIHRvIGdldCBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29w IGlmIHRoZXJlCi0JCSAqIHdlcmUgYW4gaXRlbSBmb3Igd2hpY2ggYm90aCBoYXNoZXMgaW5kaWNh dGVkIHRoZSBzYW1lCi0JCSAqIGJ1Y2tldC4KLQkJICovCi0JCWkgPSAodW5zaWduZWQpcHJuZ19s Z19yYW5nZV91NjQoJmNraC0+cHJuZ19zdGF0ZSwKLQkJICAgIExHX0NLSF9CVUNLRVRfQ0VMTFMp OwotCQljZWxsID0gJmNraC0+dGFiWyhidWNrZXQgPDwgTEdfQ0tIX0JVQ0tFVF9DRUxMUykgKyBp XTsKLQkJYXNzZXJ0KGNlbGwtPmtleSAhPSBOVUxMKTsKLQotCQkvKiBTd2FwIGNlbGwtPntrZXks ZGF0YX0gYW5kIHtrZXksZGF0YX0gKGV2aWN0KS4gKi8KLQkJdGtleSA9IGNlbGwtPmtleTsgdGRh dGEgPSBjZWxsLT5kYXRhOwotCQljZWxsLT5rZXkgPSBrZXk7IGNlbGwtPmRhdGEgPSBkYXRhOwot CQlrZXkgPSB0a2V5OyBkYXRhID0gdGRhdGE7Ci0KLSNpZmRlZiBDS0hfQ09VTlQKLQkJY2toLT5u cmVsb2NzKys7Ci0jZW5kaWYKLQotCQkvKiBGaW5kIHRoZSBhbHRlcm5hdGUgYnVja2V0IGZvciB0 aGUgZXZpY3RlZCBpdGVtLiAqLwotCQlja2gtPmhhc2goa2V5LCBoYXNoZXMpOwotCQl0YnVja2V0 ID0gaGFzaGVzWzFdICYgKChaVSgxKSA8PCBja2gtPmxnX2N1cmJ1Y2tldHMpIC0gMSk7Ci0JCWlm ICh0YnVja2V0ID09IGJ1Y2tldCkgewotCQkJdGJ1Y2tldCA9IGhhc2hlc1swXSAmICgoWlUoMSkg PDwgY2toLT5sZ19jdXJidWNrZXRzKQotCQkJICAgIC0gMSk7Ci0JCQkvKgotCQkJICogSXQgbWF5 IGJlIHRoYXQgKHRidWNrZXQgPT0gYnVja2V0KSBzdGlsbCwgaWYgdGhlCi0JCQkgKiBpdGVtJ3Mg aGFzaGVzIGJvdGggaW5kaWNhdGUgdGhpcyBidWNrZXQuICBIb3dldmVyLAotCQkJICogd2UgYXJl IGd1YXJhbnRlZWQgdG8gZXZlbnR1YWxseSBlc2NhcGUgdGhpcyBidWNrZXQKLQkJCSAqIGR1cmlu ZyBpdGVyYXRpb24sIGFzc3VtaW5nIHBzZXVkby1yYW5kb20gaXRlbQotCQkJICogc2VsZWN0aW9u ICh0cnVlIHJhbmRvbW5lc3Mgd291bGQgbWFrZSBpbmZpbml0ZQotCQkJICogbG9vcGluZyBhIHJl bW90ZSBwb3NzaWJpbGl0eSkuICBUaGUgcmVhc29uIHdlIGNhbgotCQkJICogbmV2ZXIgZ2V0IHRy YXBwZWQgZm9yZXZlciBpcyB0aGF0IHRoZXJlIGFyZSB0d28KLQkJCSAqIGNhc2VzOgotCQkJICoK LQkJCSAqIDEpIFRoaXMgYnVja2V0ID09IGFyZ2J1Y2tldCwgc28gd2Ugd2lsbCBxdWlja2x5Ci0J CQkgKiAgICBkZXRlY3QgYW4gZXZpY3Rpb24gY3ljbGUgYW5kIHRlcm1pbmF0ZS4KLQkJCSAqIDIp IEFuIGl0ZW0gd2FzIGV2aWN0ZWQgdG8gdGhpcyBidWNrZXQgZnJvbSBhbm90aGVyLAotCQkJICog ICAgd2hpY2ggbWVhbnMgdGhhdCBhdCBsZWFzdCBvbmUgaXRlbSBpbiB0aGlzIGJ1Y2tldAotCQkJ ICogICAgaGFzIGhhc2hlcyB0aGF0IGluZGljYXRlIGRpc3RpbmN0IGJ1Y2tldHMuCi0JCQkgKi8K LQkJfQotCQkvKiBDaGVjayBmb3IgYSBjeWNsZS4gKi8KLQkJaWYgKHRidWNrZXQgPT0gYXJnYnVj a2V0KSB7Ci0JCQkqYXJna2V5ID0ga2V5OwotCQkJKmFyZ2RhdGEgPSBkYXRhOwotCQkJcmV0dXJu IHRydWU7Ci0JCX0KLQotCQlidWNrZXQgPSB0YnVja2V0OwotCQlpZiAoIWNraF90cnlfYnVja2V0 X2luc2VydChja2gsIGJ1Y2tldCwga2V5LCBkYXRhKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0JfQotfQotCi1zdGF0aWMgYm9vbAotY2toX3RyeV9pbnNlcnQoY2toX3QgKmNraCwgdm9pZCBj b25zdCoqYXJna2V5LCB2b2lkIGNvbnN0KiphcmdkYXRhKSB7Ci0Jc2l6ZV90IGhhc2hlc1syXSwg YnVja2V0OwotCWNvbnN0IHZvaWQgKmtleSA9ICphcmdrZXk7Ci0JY29uc3Qgdm9pZCAqZGF0YSA9 ICphcmdkYXRhOwotCi0JY2toLT5oYXNoKGtleSwgaGFzaGVzKTsKLQotCS8qIFRyeSB0byBpbnNl cnQgaW4gcHJpbWFyeSBidWNrZXQuICovCi0JYnVja2V0ID0gaGFzaGVzWzBdICYgKChaVSgxKSA8 PCBja2gtPmxnX2N1cmJ1Y2tldHMpIC0gMSk7Ci0JaWYgKCFja2hfdHJ5X2J1Y2tldF9pbnNlcnQo Y2toLCBidWNrZXQsIGtleSwgZGF0YSkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIFRy eSB0byBpbnNlcnQgaW4gc2Vjb25kYXJ5IGJ1Y2tldC4gKi8KLQlidWNrZXQgPSBoYXNoZXNbMV0g JiAoKFpVKDEpIDw8IGNraC0+bGdfY3VyYnVja2V0cykgLSAxKTsKLQlpZiAoIWNraF90cnlfYnVj a2V0X2luc2VydChja2gsIGJ1Y2tldCwga2V5LCBkYXRhKSkgewotCQlyZXR1cm4gZmFsc2U7Ci0J fQotCi0JLyoKLQkgKiBUcnkgdG8gZmluZCBhIHBsYWNlIGZvciB0aGlzIGl0ZW0gdmlhIGl0ZXJh dGl2ZSBldmljdGlvbi9yZWxvY2F0aW9uLgotCSAqLwotCXJldHVybiBja2hfZXZpY3RfcmVsb2Nf aW5zZXJ0KGNraCwgYnVja2V0LCBhcmdrZXksIGFyZ2RhdGEpOwotfQotCi0vKgotICogVHJ5IHRv IHJlYnVpbGQgdGhlIGhhc2ggdGFibGUgZnJvbSBzY3JhdGNoIGJ5IGluc2VydGluZyBhbGwgaXRl bXMgZnJvbSB0aGUKLSAqIG9sZCB0YWJsZSBpbnRvIHRoZSBuZXcuCi0gKi8KLXN0YXRpYyBib29s Ci1ja2hfcmVidWlsZChja2hfdCAqY2toLCBja2hjX3QgKmFUYWIpIHsKLQlzaXplX3QgY291bnQs IGksIG5pbnM7Ci0JY29uc3Qgdm9pZCAqa2V5LCAqZGF0YTsKLQotCWNvdW50ID0gY2toLT5jb3Vu dDsKLQlja2gtPmNvdW50ID0gMDsKLQlmb3IgKGkgPSBuaW5zID0gMDsgbmlucyA8IGNvdW50OyBp KyspIHsKLQkJaWYgKGFUYWJbaV0ua2V5ICE9IE5VTEwpIHsKLQkJCWtleSA9IGFUYWJbaV0ua2V5 OwotCQkJZGF0YSA9IGFUYWJbaV0uZGF0YTsKLQkJCWlmIChja2hfdHJ5X2luc2VydChja2gsICZr ZXksICZkYXRhKSkgewotCQkJCWNraC0+Y291bnQgPSBjb3VudDsKLQkJCQlyZXR1cm4gdHJ1ZTsK LQkJCX0KLQkJCW5pbnMrKzsKLQkJfQotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj IGJvb2wKLWNraF9ncm93KHRzZF90ICp0c2QsIGNraF90ICpja2gpIHsKLQlib29sIHJldDsKLQlj a2hjX3QgKnRhYiwgKnR0YWI7Ci0JdW5zaWduZWQgbGdfcHJldmJ1Y2tldHMsIGxnX2N1cmNlbGxz OwotCi0jaWZkZWYgQ0tIX0NPVU5UCi0JY2toLT5uZ3Jvd3MrKzsKLSNlbmRpZgotCi0JLyoKLQkg KiBJdCBpcyBwb3NzaWJsZSAodGhvdWdoIHVubGlrZWx5LCBnaXZlbiB3ZWxsIGJlaGF2ZWQgaGFz aGVzKSB0aGF0IHRoZQotCSAqIHRhYmxlIHdpbGwgaGF2ZSB0byBiZSBkb3VibGVkIG1vcmUgdGhh biBvbmNlIGluIG9yZGVyIHRvIGNyZWF0ZSBhCi0JICogdXNhYmxlIHRhYmxlLgotCSAqLwotCWxn X3ByZXZidWNrZXRzID0gY2toLT5sZ19jdXJidWNrZXRzOwotCWxnX2N1cmNlbGxzID0gY2toLT5s Z19jdXJidWNrZXRzICsgTEdfQ0tIX0JVQ0tFVF9DRUxMUzsKLQl3aGlsZSAodHJ1ZSkgewotCQlz aXplX3QgdXNpemU7Ci0KLQkJbGdfY3VyY2VsbHMrKzsKLQkJdXNpemUgPSBzel9zYTJ1KHNpemVv Zihja2hjX3QpIDw8IGxnX2N1cmNlbGxzLCBDQUNIRUxJTkUpOwotCQlpZiAodW5saWtlbHkodXNp emUgPT0gMAotCQkgICAgfHwgdXNpemUgPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKLQkJCXJldCA9 IHRydWU7Ci0JCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJfQotCQl0YWIgPSAoY2toY190ICopaXBh bGxvY3p0bSh0c2RfdHNkbih0c2QpLCB1c2l6ZSwgQ0FDSEVMSU5FLAotCQkgICAgdHJ1ZSwgTlVM TCwgdHJ1ZSwgYXJlbmFfaWNob29zZSh0c2QsIE5VTEwpKTsKLQkJaWYgKHRhYiA9PSBOVUxMKSB7 Ci0JCQlyZXQgPSB0cnVlOwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0KLQkJLyogU3dhcCBp biBuZXcgdGFibGUuICovCi0JCXR0YWIgPSBja2gtPnRhYjsKLQkJY2toLT50YWIgPSB0YWI7Ci0J CXRhYiA9IHR0YWI7Ci0JCWNraC0+bGdfY3VyYnVja2V0cyA9IGxnX2N1cmNlbGxzIC0gTEdfQ0tI X0JVQ0tFVF9DRUxMUzsKLQotCQlpZiAoIWNraF9yZWJ1aWxkKGNraCwgdGFiKSkgewotCQkJaWRh bGxvY3RtKHRzZF90c2RuKHRzZCksIHRhYiwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JCQli cmVhazsKLQkJfQotCi0JCS8qIFJlYnVpbGRpbmcgZmFpbGVkLCBzbyBiYWNrIG91dCBwYXJ0aWFs bHkgcmVidWlsdCB0YWJsZS4gKi8KLQkJaWRhbGxvY3RtKHRzZF90c2RuKHRzZCksIGNraC0+dGFi LCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKLQkJY2toLT50YWIgPSB0YWI7Ci0JCWNraC0+bGdf Y3VyYnVja2V0cyA9IGxnX3ByZXZidWNrZXRzOwotCX0KLQotCXJldCA9IGZhbHNlOwotbGFiZWxf cmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ja2hfc2hyaW5rKHRzZF90 ICp0c2QsIGNraF90ICpja2gpIHsKLQlja2hjX3QgKnRhYiwgKnR0YWI7Ci0Jc2l6ZV90IHVzaXpl OwotCXVuc2lnbmVkIGxnX3ByZXZidWNrZXRzLCBsZ19jdXJjZWxsczsKLQotCS8qCi0JICogSXQg aXMgcG9zc2libGUgKHRob3VnaCB1bmxpa2VseSwgZ2l2ZW4gd2VsbCBiZWhhdmVkIGhhc2hlcykg dGhhdCB0aGUKLQkgKiB0YWJsZSByZWJ1aWxkIHdpbGwgZmFpbC4KLQkgKi8KLQlsZ19wcmV2YnVj a2V0cyA9IGNraC0+bGdfY3VyYnVja2V0czsKLQlsZ19jdXJjZWxscyA9IGNraC0+bGdfY3VyYnVj a2V0cyArIExHX0NLSF9CVUNLRVRfQ0VMTFMgLSAxOwotCXVzaXplID0gc3pfc2EydShzaXplb2Yo Y2toY190KSA8PCBsZ19jdXJjZWxscywgQ0FDSEVMSU5FKTsKLQlpZiAodW5saWtlbHkodXNpemUg PT0gMCB8fCB1c2l6ZSA+IFNDX0xBUkdFX01BWENMQVNTKSkgewotCQlyZXR1cm47Ci0JfQotCXRh YiA9IChja2hjX3QgKilpcGFsbG9jenRtKHRzZF90c2RuKHRzZCksIHVzaXplLCBDQUNIRUxJTkUs IHRydWUsIE5VTEwsCi0JICAgIHRydWUsIGFyZW5hX2ljaG9vc2UodHNkLCBOVUxMKSk7Ci0JaWYg KHRhYiA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIEFuIE9PTSBlcnJvciBpc24ndCB3b3J0aCBwcm9w YWdhdGluZywgc2luY2UgaXQgZG9lc24ndAotCQkgKiBwcmV2ZW50IHRoaXMgb3IgZnV0dXJlIG9w ZXJhdGlvbnMgZnJvbSBwcm9jZWVkaW5nLgotCQkgKi8KLQkJcmV0dXJuOwotCX0KLQkvKiBTd2Fw IGluIG5ldyB0YWJsZS4gKi8KLQl0dGFiID0gY2toLT50YWI7Ci0JY2toLT50YWIgPSB0YWI7Ci0J dGFiID0gdHRhYjsKLQlja2gtPmxnX2N1cmJ1Y2tldHMgPSBsZ19jdXJjZWxscyAtIExHX0NLSF9C VUNLRVRfQ0VMTFM7Ci0KLQlpZiAoIWNraF9yZWJ1aWxkKGNraCwgdGFiKSkgewotCQlpZGFsbG9j dG0odHNkX3RzZG4odHNkKSwgdGFiLCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKLSNpZmRlZiBD S0hfQ09VTlQKLQkJY2toLT5uc2hyaW5rcysrOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQkv KiBSZWJ1aWxkaW5nIGZhaWxlZCwgc28gYmFjayBvdXQgcGFydGlhbGx5IHJlYnVpbHQgdGFibGUu ICovCi0JaWRhbGxvY3RtKHRzZF90c2RuKHRzZCksIGNraC0+dGFiLCBOVUxMLCBOVUxMLCB0cnVl LCB0cnVlKTsKLQlja2gtPnRhYiA9IHRhYjsKLQlja2gtPmxnX2N1cmJ1Y2tldHMgPSBsZ19wcmV2 YnVja2V0czsKLSNpZmRlZiBDS0hfQ09VTlQKLQlja2gtPm5zaHJpbmtmYWlscysrOwotI2VuZGlm Ci19Ci0KLWJvb2wKLWNraF9uZXcodHNkX3QgKnRzZCwgY2toX3QgKmNraCwgc2l6ZV90IG1pbml0 ZW1zLCBja2hfaGFzaF90ICpja2hfaGFzaCwKLSAgICBja2hfa2V5Y29tcF90ICprZXljb21wKSB7 Ci0JYm9vbCByZXQ7Ci0Jc2l6ZV90IG1pbmNlbGxzLCB1c2l6ZTsKLQl1bnNpZ25lZCBsZ19taW5j ZWxsczsKLQotCWFzc2VydChtaW5pdGVtcyA+IDApOwotCWFzc2VydChja2hfaGFzaCAhPSBOVUxM KTsKLQlhc3NlcnQoa2V5Y29tcCAhPSBOVUxMKTsKLQotI2lmZGVmIENLSF9DT1VOVAotCWNraC0+ bmdyb3dzID0gMDsKLQlja2gtPm5zaHJpbmtzID0gMDsKLQlja2gtPm5zaHJpbmtmYWlscyA9IDA7 Ci0JY2toLT5uaW5zZXJ0cyA9IDA7Ci0JY2toLT5ucmVsb2NzID0gMDsKLSNlbmRpZgotCWNraC0+ cHJuZ19zdGF0ZSA9IDQyOyAvKiBWYWx1ZSBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuICovCi0JY2to LT5jb3VudCA9IDA7Ci0KLQkvKgotCSAqIEZpbmQgdGhlIG1pbmltdW0gcG93ZXIgb2YgMiB0aGF0 IGlzIGxhcmdlIGVub3VnaCB0byBmaXQgbWluaXRlbXMKLQkgKiBlbnRyaWVzLiAgV2UgYXJlIHVz aW5nICgyKywyKSBjdWNrb28gaGFzaGluZywgd2hpY2ggaGFzIGFuIGV4cGVjdGVkCi0JICogbWF4 aW11bSBsb2FkIGZhY3RvciBvZiBhdCBsZWFzdCB+MC44Niwgc28gMC43NSBpcyBhIGNvbnNlcnZh dGl2ZSBsb2FkCi0JICogZmFjdG9yIHRoYXQgd2lsbCB0eXBpY2FsbHkgYWxsb3cgbWluY2VsbHMg aXRlbXMgdG8gZml0IHdpdGhvdXQgZXZlcgotCSAqIGdyb3dpbmcgdGhlIHRhYmxlLgotCSAqLwot CWFzc2VydChMR19DS0hfQlVDS0VUX0NFTExTID4gMCk7Ci0JbWluY2VsbHMgPSAoKG1pbml0ZW1z ICsgKDMgLSAobWluaXRlbXMgJSAzKSkpIC8gMykgPDwgMjsKLQlmb3IgKGxnX21pbmNlbGxzID0g TEdfQ0tIX0JVQ0tFVF9DRUxMUzsKLQkgICAgKFpVKDEpIDw8IGxnX21pbmNlbGxzKSA8IG1pbmNl bGxzOwotCSAgICBsZ19taW5jZWxscysrKSB7Ci0JCS8qIERvIG5vdGhpbmcuICovCi0JfQotCWNr aC0+bGdfbWluYnVja2V0cyA9IGxnX21pbmNlbGxzIC0gTEdfQ0tIX0JVQ0tFVF9DRUxMUzsKLQlj a2gtPmxnX2N1cmJ1Y2tldHMgPSBsZ19taW5jZWxscyAtIExHX0NLSF9CVUNLRVRfQ0VMTFM7Ci0J Y2toLT5oYXNoID0gY2toX2hhc2g7Ci0JY2toLT5rZXljb21wID0ga2V5Y29tcDsKLQotCXVzaXpl ID0gc3pfc2EydShzaXplb2YoY2toY190KSA8PCBsZ19taW5jZWxscywgQ0FDSEVMSU5FKTsKLQlp ZiAodW5saWtlbHkodXNpemUgPT0gMCB8fCB1c2l6ZSA+IFNDX0xBUkdFX01BWENMQVNTKSkgewot CQlyZXQgPSB0cnVlOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0JY2toLT50YWIgPSAoY2to Y190ICopaXBhbGxvY3p0bSh0c2RfdHNkbih0c2QpLCB1c2l6ZSwgQ0FDSEVMSU5FLCB0cnVlLAot CSAgICBOVUxMLCB0cnVlLCBhcmVuYV9pY2hvb3NlKHRzZCwgTlVMTCkpOwotCWlmIChja2gtPnRh YiA9PSBOVUxMKSB7Ci0JCXJldCA9IHRydWU7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQot CXJldCA9IGZhbHNlOwotbGFiZWxfcmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQKLWNr aF9kZWxldGUodHNkX3QgKnRzZCwgY2toX3QgKmNraCkgewotCWFzc2VydChja2ggIT0gTlVMTCk7 Ci0KLSNpZmRlZiBDS0hfVkVSQk9TRQotCW1hbGxvY19wcmludGYoCi0JICAgICIlcyglcCk6IG5n cm93czogJSJGTVR1NjQiLCBuc2hyaW5rczogJSJGTVR1NjQiLCIKLQkgICAgIiBuc2hyaW5rZmFp bHM6ICUiRk1UdTY0Iiwgbmluc2VydHM6ICUiRk1UdTY0IiwiCi0JICAgICIgbnJlbG9jczogJSJG TVR1NjQiXG4iLCBfX2Z1bmNfXywgY2toLAotCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWNraC0+ bmdyb3dzLAotCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWNraC0+bnNocmlua3MsCi0JICAgICh1 bnNpZ25lZCBsb25nIGxvbmcpY2toLT5uc2hyaW5rZmFpbHMsCi0JICAgICh1bnNpZ25lZCBsb25n IGxvbmcpY2toLT5uaW5zZXJ0cywKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylja2gtPm5yZWxv Y3MpOwotI2VuZGlmCi0KLQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgY2toLT50YWIsIE5VTEws IE5VTEwsIHRydWUsIHRydWUpOwotCWlmIChjb25maWdfZGVidWcpIHsKLQkJbWVtc2V0KGNraCwg SkVNQUxMT0NfRlJFRV9KVU5LLCBzaXplb2YoY2toX3QpKTsKLQl9Ci19Ci0KLXNpemVfdAotY2to X2NvdW50KGNraF90ICpja2gpIHsKLQlhc3NlcnQoY2toICE9IE5VTEwpOwotCi0JcmV0dXJuIGNr aC0+Y291bnQ7Ci19Ci0KLWJvb2wKLWNraF9pdGVyKGNraF90ICpja2gsIHNpemVfdCAqdGFiaW5k LCB2b2lkICoqa2V5LCB2b2lkICoqZGF0YSkgewotCXNpemVfdCBpLCBuY2VsbHM7Ci0KLQlmb3Ig KGkgPSAqdGFiaW5kLCBuY2VsbHMgPSAoWlUoMSkgPDwgKGNraC0+bGdfY3VyYnVja2V0cyArCi0J ICAgIExHX0NLSF9CVUNLRVRfQ0VMTFMpKTsgaSA8IG5jZWxsczsgaSsrKSB7Ci0JCWlmIChja2gt PnRhYltpXS5rZXkgIT0gTlVMTCkgewotCQkJaWYgKGtleSAhPSBOVUxMKSB7Ci0JCQkJKmtleSA9 ICh2b2lkICopY2toLT50YWJbaV0ua2V5OwotCQkJfQotCQkJaWYgKGRhdGEgIT0gTlVMTCkgewot CQkJCSpkYXRhID0gKHZvaWQgKilja2gtPnRhYltpXS5kYXRhOwotCQkJfQotCQkJKnRhYmluZCA9 IGkgKyAxOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0K LWJvb2wKLWNraF9pbnNlcnQodHNkX3QgKnRzZCwgY2toX3QgKmNraCwgY29uc3Qgdm9pZCAqa2V5 LCBjb25zdCB2b2lkICpkYXRhKSB7Ci0JYm9vbCByZXQ7Ci0KLQlhc3NlcnQoY2toICE9IE5VTEwp OwotCWFzc2VydChja2hfc2VhcmNoKGNraCwga2V5LCBOVUxMLCBOVUxMKSk7Ci0KLSNpZmRlZiBD S0hfQ09VTlQKLQlja2gtPm5pbnNlcnRzKys7Ci0jZW5kaWYKLQotCXdoaWxlIChja2hfdHJ5X2lu c2VydChja2gsICZrZXksICZkYXRhKSkgewotCQlpZiAoY2toX2dyb3codHNkLCBja2gpKSB7Ci0J CQlyZXQgPSB0cnVlOwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0KLQl9Ci0KLQlyZXQgPSBm YWxzZTsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1ib29sCi1ja2hfcmVtb3Zl KHRzZF90ICp0c2QsIGNraF90ICpja2gsIGNvbnN0IHZvaWQgKnNlYXJjaGtleSwgdm9pZCAqKmtl eSwKLSAgICB2b2lkICoqZGF0YSkgewotCXNpemVfdCBjZWxsOwotCi0JYXNzZXJ0KGNraCAhPSBO VUxMKTsKLQotCWNlbGwgPSBja2hfaXNlYXJjaChja2gsIHNlYXJjaGtleSk7Ci0JaWYgKGNlbGwg IT0gU0laRV9UX01BWCkgewotCQlpZiAoa2V5ICE9IE5VTEwpIHsKLQkJCSprZXkgPSAodm9pZCAq KWNraC0+dGFiW2NlbGxdLmtleTsKLQkJfQotCQlpZiAoZGF0YSAhPSBOVUxMKSB7Ci0JCQkqZGF0 YSA9ICh2b2lkICopY2toLT50YWJbY2VsbF0uZGF0YTsKLQkJfQotCQlja2gtPnRhYltjZWxsXS5r ZXkgPSBOVUxMOwotCQlja2gtPnRhYltjZWxsXS5kYXRhID0gTlVMTDsgLyogTm90IG5lY2Vzc2Fy eS4gKi8KLQotCQlja2gtPmNvdW50LS07Ci0JCS8qIFRyeSB0byBoYWx2ZSB0aGUgdGFibGUgaWYg aXQgaXMgbGVzcyB0aGFuIDEvNCBmdWxsLiAqLwotCQlpZiAoY2toLT5jb3VudCA8IChaVSgxKSA8 PCAoY2toLT5sZ19jdXJidWNrZXRzCi0JCSAgICArIExHX0NLSF9CVUNLRVRfQ0VMTFMgLSAyKSkg JiYgY2toLT5sZ19jdXJidWNrZXRzCi0JCSAgICA+IGNraC0+bGdfbWluYnVja2V0cykgewotCQkJ LyogSWdub3JlIGVycm9yIGR1ZSB0byBPT00uICovCi0JCQlja2hfc2hyaW5rKHRzZCwgY2toKTsK LQkJfQotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbAot Y2toX3NlYXJjaChja2hfdCAqY2toLCBjb25zdCB2b2lkICpzZWFyY2hrZXksIHZvaWQgKiprZXks IHZvaWQgKipkYXRhKSB7Ci0Jc2l6ZV90IGNlbGw7Ci0KLQlhc3NlcnQoY2toICE9IE5VTEwpOwot Ci0JY2VsbCA9IGNraF9pc2VhcmNoKGNraCwgc2VhcmNoa2V5KTsKLQlpZiAoY2VsbCAhPSBTSVpF X1RfTUFYKSB7Ci0JCWlmIChrZXkgIT0gTlVMTCkgewotCQkJKmtleSA9ICh2b2lkICopY2toLT50 YWJbY2VsbF0ua2V5OwotCQl9Ci0JCWlmIChkYXRhICE9IE5VTEwpIHsKLQkJCSpkYXRhID0gKHZv aWQgKilja2gtPnRhYltjZWxsXS5kYXRhOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQly ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZAotY2toX3N0cmluZ19oYXNoKGNvbnN0IHZvaWQgKmtleSwg c2l6ZV90IHJfaGFzaFsyXSkgewotCWhhc2goa2V5LCBzdHJsZW4oKGNvbnN0IGNoYXIgKilrZXkp LCAweDk0MTIyZjMzVSwgcl9oYXNoKTsKLX0KLQotYm9vbAotY2toX3N0cmluZ19rZXljb21wKGNv bnN0IHZvaWQgKmsxLCBjb25zdCB2b2lkICprMikgewotCWFzc2VydChrMSAhPSBOVUxMKTsKLQlh c3NlcnQoazIgIT0gTlVMTCk7Ci0KLQlyZXR1cm4gIXN0cmNtcCgoY2hhciAqKWsxLCAoY2hhciAq KWsyKTsKLX0KLQotdm9pZAotY2toX3BvaW50ZXJfaGFzaChjb25zdCB2b2lkICprZXksIHNpemVf dCByX2hhc2hbMl0pIHsKLQl1bmlvbiB7Ci0JCWNvbnN0IHZvaWQJKnY7Ci0JCXNpemVfdAkJaTsK LQl9IHU7Ci0KLQlhc3NlcnQoc2l6ZW9mKHUudikgPT0gc2l6ZW9mKHUuaSkpOwotCXUudiA9IGtl eTsKLQloYXNoKCZ1LmksIHNpemVvZih1LmkpLCAweGQ5ODMzOTZlVSwgcl9oYXNoKTsKLX0KLQot Ym9vbAotY2toX3BvaW50ZXJfa2V5Y29tcChjb25zdCB2b2lkICprMSwgY29uc3Qgdm9pZCAqazIp IHsKLQlyZXR1cm4gKGsxID09IGsyKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvY291bnRlci5jIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2NvdW50ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggOGYxYWUzYS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9zcmMvY291bnRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBA QAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2NvdW50ZXIuaCIKLQotYm9vbAotY291bnRlcl9h Y2N1bV9pbml0KGNvdW50ZXJfYWNjdW1fdCAqY291bnRlciwgdWludDY0X3QgaW50ZXJ2YWwpIHsK LQlpZiAoTE9DS0VESU5UX01UWF9JTklUKGNvdW50ZXItPm10eCwgImNvdW50ZXJfYWNjdW0iLAot CSAgICBXSVRORVNTX1JBTktfQ09VTlRFUl9BQ0NVTSwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVz aXZlKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JbG9ja2VkX2luaXRfdTY0X3Vuc3luY2hyb25p emVkKCZjb3VudGVyLT5hY2N1bWJ5dGVzLCAwKTsKLQljb3VudGVyLT5pbnRlcnZhbCA9IGludGVy dmFsOwotCXJldHVybiBmYWxzZTsKLX0KLQotdm9pZAotY291bnRlcl9wcmVmb3JrKHRzZG5fdCAq dHNkbiwgY291bnRlcl9hY2N1bV90ICpjb3VudGVyKSB7Ci0JTE9DS0VESU5UX01UWF9QUkVGT1JL KHRzZG4sIGNvdW50ZXItPm10eCk7Ci19Ci0KLXZvaWQKLWNvdW50ZXJfcG9zdGZvcmtfcGFyZW50 KHRzZG5fdCAqdHNkbiwgY291bnRlcl9hY2N1bV90ICpjb3VudGVyKSB7Ci0JTE9DS0VESU5UX01U WF9QT1NURk9SS19QQVJFTlQodHNkbiwgY291bnRlci0+bXR4KTsKLX0KLQotdm9pZAotY291bnRl cl9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4sIGNvdW50ZXJfYWNjdW1fdCAqY291bnRlcikg ewotCUxPQ0tFRElOVF9NVFhfUE9TVEZPUktfQ0hJTEQodHNkbiwgY291bnRlci0+bXR4KTsKLX0K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv Y3RsLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvY3RsLmMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTI3MWIuLjAwMDAwMDAKLS0tIGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2N0bC5jCisrKyAvZGV2L251 bGwKQEAgLTEsNDQxNCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxs b2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRl cm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0Lmgi Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvY3RsLmgiCi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvZXh0ZW50X2Rzcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4dGVu dF9tbWFwLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvaW5zcGVjdC5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvbnN0aW1lLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGVha19ldmVudC5oIgot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfZGF0YS5oIgotI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3Byb2ZfbG9nLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJv Zl9yZWNlbnQuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N0YXRzLmgiCi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9zeXMuaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9zYWZldHlfY2hlY2suaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9z Yy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKLQotLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLS8qIERhdGEuICovCi0KLS8qCi0gKiBjdGxfbXR4IHByb3RlY3RzIHRoZSBm b2xsb3dpbmc6Ci0gKiAtIGN0bF9zdGF0cy0+KgotICovCi1zdGF0aWMgbWFsbG9jX211dGV4X3QJ Y3RsX210eDsKLXN0YXRpYyBib29sCQljdGxfaW5pdGlhbGl6ZWQ7Ci1zdGF0aWMgY3RsX3N0YXRz X3QJKmN0bF9zdGF0czsKLXN0YXRpYyBjdGxfYXJlbmFzX3QJKmN0bF9hcmVuYXM7Ci0KLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0vKiBIZWxwZXJzIGZvciBuYW1lZCBhbmQgaW5kZXhlZCBub2Rl cy4gKi8KLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKgotY3RsX25hbWVkX25vZGUo Y29uc3QgY3RsX25vZGVfdCAqbm9kZSkgewotCXJldHVybiAoKG5vZGUtPm5hbWVkKSA/IChjb25z dCBjdGxfbmFtZWRfbm9kZV90ICopbm9kZSA6IE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3QgY3Rs X25hbWVkX25vZGVfdCAqCi1jdGxfbmFtZWRfY2hpbGRyZW4oY29uc3QgY3RsX25hbWVkX25vZGVf dCAqbm9kZSwgc2l6ZV90IGluZGV4KSB7Ci0JY29uc3QgY3RsX25hbWVkX25vZGVfdCAqY2hpbGRy ZW4gPSBjdGxfbmFtZWRfbm9kZShub2RlLT5jaGlsZHJlbik7Ci0KLQlyZXR1cm4gKGNoaWxkcmVu ID8gJmNoaWxkcmVuW2luZGV4XSA6IE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3QgY3RsX2luZGV4 ZWRfbm9kZV90ICoKLWN0bF9pbmRleGVkX25vZGUoY29uc3QgY3RsX25vZGVfdCAqbm9kZSkgewot CXJldHVybiAoIW5vZGUtPm5hbWVkID8gKGNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCAqKW5vZGUg OiBOVUxMKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZ1bmN0aW9uIHByb3Rv dHlwZXMgZm9yIG5vbi1pbmxpbmUgc3RhdGljIGZ1bmN0aW9ucy4gKi8KLQotI2RlZmluZSBDVExf UFJPVE8obikJCQkJCQkJXAotc3RhdGljIGludAluIyNfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNp emVfdCAqbWliLCBzaXplX3QgbWlibGVuLAlcCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRs ZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKTsKLQotI2RlZmluZSBJTkRFWF9QUk9UTyhu KQkJCQkJCQlcCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdAkqbiMjX2luZGV4KHRzZG5f dCAqdHNkbiwJCVwKLSAgICBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgc2l6ZV90 IGkpOwotCi1DVExfUFJPVE8odmVyc2lvbikKLUNUTF9QUk9UTyhlcG9jaCkKLUNUTF9QUk9UTyhi YWNrZ3JvdW5kX3RocmVhZCkKLUNUTF9QUk9UTyhtYXhfYmFja2dyb3VuZF90aHJlYWRzKQotQ1RM X1BST1RPKHRocmVhZF90Y2FjaGVfZW5hYmxlZCkKLUNUTF9QUk9UTyh0aHJlYWRfdGNhY2hlX2Zs dXNoKQotQ1RMX1BST1RPKHRocmVhZF9wZWFrX3JlYWQpCi1DVExfUFJPVE8odGhyZWFkX3BlYWtf cmVzZXQpCi1DVExfUFJPVE8odGhyZWFkX3Byb2ZfbmFtZSkKLUNUTF9QUk9UTyh0aHJlYWRfcHJv Zl9hY3RpdmUpCi1DVExfUFJPVE8odGhyZWFkX2FyZW5hKQotQ1RMX1BST1RPKHRocmVhZF9hbGxv Y2F0ZWQpCi1DVExfUFJPVE8odGhyZWFkX2FsbG9jYXRlZHApCi1DVExfUFJPVE8odGhyZWFkX2Rl YWxsb2NhdGVkKQotQ1RMX1BST1RPKHRocmVhZF9kZWFsbG9jYXRlZHApCi1DVExfUFJPVE8odGhy ZWFkX2lkbGUpCi1DVExfUFJPVE8oY29uZmlnX2NhY2hlX29ibGl2aW91cykKLUNUTF9QUk9UTyhj b25maWdfZGVidWcpCi1DVExfUFJPVE8oY29uZmlnX2ZpbGwpCi1DVExfUFJPVE8oY29uZmlnX2xh enlfbG9jaykKLUNUTF9QUk9UTyhjb25maWdfbWFsbG9jX2NvbmYpCi1DVExfUFJPVE8oY29uZmln X29wdF9zYWZldHlfY2hlY2tzKQotQ1RMX1BST1RPKGNvbmZpZ19wcm9mKQotQ1RMX1BST1RPKGNv bmZpZ19wcm9mX2xpYmdjYykKLUNUTF9QUk9UTyhjb25maWdfcHJvZl9saWJ1bndpbmQpCi1DVExf UFJPVE8oY29uZmlnX3N0YXRzKQotQ1RMX1BST1RPKGNvbmZpZ191dHJhY2UpCi1DVExfUFJPVE8o Y29uZmlnX3htYWxsb2MpCi1DVExfUFJPVE8ob3B0X2Fib3J0KQotQ1RMX1BST1RPKG9wdF9hYm9y dF9jb25mKQotQ1RMX1BST1RPKG9wdF9jYWNoZV9vYmxpdmlvdXMpCi1DVExfUFJPVE8ob3B0X3Ry dXN0X21hZHZpc2UpCi1DVExfUFJPVE8ob3B0X2NvbmZpcm1fY29uZikKLUNUTF9QUk9UTyhvcHRf aHBhKQotQ1RMX1BST1RPKG9wdF9ocGFfc2xhYl9tYXhfYWxsb2MpCi1DVExfUFJPVE8ob3B0X2hw YV9odWdpZmljYXRpb25fdGhyZXNob2xkKQotQ1RMX1BST1RPKG9wdF9ocGFfaHVnaWZ5X2RlbGF5 X21zKQotQ1RMX1BST1RPKG9wdF9ocGFfbWluX3B1cmdlX2ludGVydmFsX21zKQotQ1RMX1BST1RP KG9wdF9ocGFfZGlydHlfbXVsdCkKLUNUTF9QUk9UTyhvcHRfaHBhX3NlY19uc2hhcmRzKQotQ1RM X1BST1RPKG9wdF9ocGFfc2VjX21heF9hbGxvYykKLUNUTF9QUk9UTyhvcHRfaHBhX3NlY19tYXhf Ynl0ZXMpCi1DVExfUFJPVE8ob3B0X2hwYV9zZWNfYnl0ZXNfYWZ0ZXJfZmx1c2gpCi1DVExfUFJP VE8ob3B0X2hwYV9zZWNfYmF0Y2hfZmlsbF9leHRyYSkKLUNUTF9QUk9UTyhvcHRfbWV0YWRhdGFf dGhwKQotQ1RMX1BST1RPKG9wdF9yZXRhaW4pCi1DVExfUFJPVE8ob3B0X2RzcykKLUNUTF9QUk9U TyhvcHRfbmFyZW5hcykKLUNUTF9QUk9UTyhvcHRfcGVyY3B1X2FyZW5hKQotQ1RMX1BST1RPKG9w dF9vdmVyc2l6ZV90aHJlc2hvbGQpCi1DVExfUFJPVE8ob3B0X2JhY2tncm91bmRfdGhyZWFkKQot Q1RMX1BST1RPKG9wdF9tdXRleF9tYXhfc3BpbikKLUNUTF9QUk9UTyhvcHRfbWF4X2JhY2tncm91 bmRfdGhyZWFkcykKLUNUTF9QUk9UTyhvcHRfZGlydHlfZGVjYXlfbXMpCi1DVExfUFJPVE8ob3B0 X211enp5X2RlY2F5X21zKQotQ1RMX1BST1RPKG9wdF9zdGF0c19wcmludCkKLUNUTF9QUk9UTyhv cHRfc3RhdHNfcHJpbnRfb3B0cykKLUNUTF9QUk9UTyhvcHRfc3RhdHNfaW50ZXJ2YWwpCi1DVExf UFJPVE8ob3B0X3N0YXRzX2ludGVydmFsX29wdHMpCi1DVExfUFJPVE8ob3B0X2p1bmspCi1DVExf UFJPVE8ob3B0X3plcm8pCi1DVExfUFJPVE8ob3B0X3V0cmFjZSkKLUNUTF9QUk9UTyhvcHRfeG1h bGxvYykKLUNUTF9QUk9UTyhvcHRfZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3KQotQ1RMX1BS T1RPKG9wdF90Y2FjaGUpCi1DVExfUFJPVE8ob3B0X3RjYWNoZV9tYXgpCi1DVExfUFJPVE8ob3B0 X3RjYWNoZV9uc2xvdHNfc21hbGxfbWluKQotQ1RMX1BST1RPKG9wdF90Y2FjaGVfbnNsb3RzX3Nt YWxsX21heCkKLUNUTF9QUk9UTyhvcHRfdGNhY2hlX25zbG90c19sYXJnZSkKLUNUTF9QUk9UTyhv cHRfbGdfdGNhY2hlX25zbG90c19tdWwpCi1DVExfUFJPVE8ob3B0X3RjYWNoZV9nY19pbmNyX2J5 dGVzKQotQ1RMX1BST1RPKG9wdF90Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMpCi1DVExfUFJPVE8ob3B0 X2xnX3RjYWNoZV9mbHVzaF9zbWFsbF9kaXYpCi1DVExfUFJPVE8ob3B0X2xnX3RjYWNoZV9mbHVz aF9sYXJnZV9kaXYpCi1DVExfUFJPVE8ob3B0X3RocCkKLUNUTF9QUk9UTyhvcHRfbGdfZXh0ZW50 X21heF9hY3RpdmVfZml0KQotQ1RMX1BST1RPKG9wdF9wcm9mKQotQ1RMX1BST1RPKG9wdF9wcm9m X3ByZWZpeCkKLUNUTF9QUk9UTyhvcHRfcHJvZl9hY3RpdmUpCi1DVExfUFJPVE8ob3B0X3Byb2Zf dGhyZWFkX2FjdGl2ZV9pbml0KQotQ1RMX1BST1RPKG9wdF9sZ19wcm9mX3NhbXBsZSkKLUNUTF9Q Uk9UTyhvcHRfbGdfcHJvZl9pbnRlcnZhbCkKLUNUTF9QUk9UTyhvcHRfcHJvZl9nZHVtcCkKLUNU TF9QUk9UTyhvcHRfcHJvZl9maW5hbCkKLUNUTF9QUk9UTyhvcHRfcHJvZl9sZWFrKQotQ1RMX1BS T1RPKG9wdF9wcm9mX2xlYWtfZXJyb3IpCi1DVExfUFJPVE8ob3B0X3Byb2ZfYWNjdW0pCi1DVExf UFJPVE8ob3B0X3Byb2ZfcmVjZW50X2FsbG9jX21heCkKLUNUTF9QUk9UTyhvcHRfcHJvZl9zdGF0 cykKLUNUTF9QUk9UTyhvcHRfcHJvZl9zeXNfdGhyZWFkX25hbWUpCi1DVExfUFJPVE8ob3B0X3By b2ZfdGltZV9yZXMpCi1DVExfUFJPVE8ob3B0X2xnX3Nhbl91YWZfYWxpZ24pCi1DVExfUFJPVE8o b3B0X3plcm9fcmVhbGxvYykKLUNUTF9QUk9UTyh0Y2FjaGVfY3JlYXRlKQotQ1RMX1BST1RPKHRj YWNoZV9mbHVzaCkKLUNUTF9QUk9UTyh0Y2FjaGVfZGVzdHJveSkKLUNUTF9QUk9UTyhhcmVuYV9p X2luaXRpYWxpemVkKQotQ1RMX1BST1RPKGFyZW5hX2lfZGVjYXkpCi1DVExfUFJPVE8oYXJlbmFf aV9wdXJnZSkKLUNUTF9QUk9UTyhhcmVuYV9pX3Jlc2V0KQotQ1RMX1BST1RPKGFyZW5hX2lfZGVz dHJveSkKLUNUTF9QUk9UTyhhcmVuYV9pX2RzcykKLUNUTF9QUk9UTyhhcmVuYV9pX292ZXJzaXpl X3RocmVzaG9sZCkKLUNUTF9QUk9UTyhhcmVuYV9pX2RpcnR5X2RlY2F5X21zKQotQ1RMX1BST1RP KGFyZW5hX2lfbXV6enlfZGVjYXlfbXMpCi1DVExfUFJPVE8oYXJlbmFfaV9leHRlbnRfaG9va3Mp Ci1DVExfUFJPVE8oYXJlbmFfaV9yZXRhaW5fZ3Jvd19saW1pdCkKLUlOREVYX1BST1RPKGFyZW5h X2kpCi1DVExfUFJPVE8oYXJlbmFzX2Jpbl9pX3NpemUpCi1DVExfUFJPVE8oYXJlbmFzX2Jpbl9p X25yZWdzKQotQ1RMX1BST1RPKGFyZW5hc19iaW5faV9zbGFiX3NpemUpCi1DVExfUFJPVE8oYXJl bmFzX2Jpbl9pX25zaGFyZHMpCi1JTkRFWF9QUk9UTyhhcmVuYXNfYmluX2kpCi1DVExfUFJPVE8o YXJlbmFzX2xleHRlbnRfaV9zaXplKQotSU5ERVhfUFJPVE8oYXJlbmFzX2xleHRlbnRfaSkKLUNU TF9QUk9UTyhhcmVuYXNfbmFyZW5hcykKLUNUTF9QUk9UTyhhcmVuYXNfZGlydHlfZGVjYXlfbXMp Ci1DVExfUFJPVE8oYXJlbmFzX211enp5X2RlY2F5X21zKQotQ1RMX1BST1RPKGFyZW5hc19xdWFu dHVtKQotQ1RMX1BST1RPKGFyZW5hc19wYWdlKQotQ1RMX1BST1RPKGFyZW5hc190Y2FjaGVfbWF4 KQotQ1RMX1BST1RPKGFyZW5hc19uYmlucykKLUNUTF9QUk9UTyhhcmVuYXNfbmhiaW5zKQotQ1RM X1BST1RPKGFyZW5hc19ubGV4dGVudHMpCi1DVExfUFJPVE8oYXJlbmFzX2NyZWF0ZSkKLUNUTF9Q Uk9UTyhhcmVuYXNfbG9va3VwKQotQ1RMX1BST1RPKHByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0KQot Q1RMX1BST1RPKHByb2ZfYWN0aXZlKQotQ1RMX1BST1RPKHByb2ZfZHVtcCkKLUNUTF9QUk9UTyhw cm9mX2dkdW1wKQotQ1RMX1BST1RPKHByb2ZfcHJlZml4KQotQ1RMX1BST1RPKHByb2ZfcmVzZXQp Ci1DVExfUFJPVE8ocHJvZl9pbnRlcnZhbCkKLUNUTF9QUk9UTyhsZ19wcm9mX3NhbXBsZSkKLUNU TF9QUk9UTyhwcm9mX2xvZ19zdGFydCkKLUNUTF9QUk9UTyhwcm9mX2xvZ19zdG9wKQotQ1RMX1BS T1RPKHByb2Zfc3RhdHNfYmluc19pX2xpdmUpCi1DVExfUFJPVE8ocHJvZl9zdGF0c19iaW5zX2lf YWNjdW0pCi1JTkRFWF9QUk9UTyhwcm9mX3N0YXRzX2JpbnNfaSkKLUNUTF9QUk9UTyhwcm9mX3N0 YXRzX2xleHRlbnRzX2lfbGl2ZSkKLUNUTF9QUk9UTyhwcm9mX3N0YXRzX2xleHRlbnRzX2lfYWNj dW0pCi1JTkRFWF9QUk9UTyhwcm9mX3N0YXRzX2xleHRlbnRzX2kpCi1DVExfUFJPVE8oc3RhdHNf YXJlbmFzX2lfc21hbGxfYWxsb2NhdGVkKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX3NtYWxs X25tYWxsb2MpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfc21hbGxfbmRhbGxvYykKLUNUTF9Q Uk9UTyhzdGF0c19hcmVuYXNfaV9zbWFsbF9ucmVxdWVzdHMpCi1DVExfUFJPVE8oc3RhdHNfYXJl bmFzX2lfc21hbGxfbmZpbGxzKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX3NtYWxsX25mbHVz aGVzKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2xhcmdlX2FsbG9jYXRlZCkKLUNUTF9QUk9U TyhzdGF0c19hcmVuYXNfaV9sYXJnZV9ubWFsbG9jKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19p X2xhcmdlX25kYWxsb2MpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbGFyZ2VfbnJlcXVlc3Rz KQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2xhcmdlX25maWxscykKLUNUTF9QUk9UTyhzdGF0 c19hcmVuYXNfaV9sYXJnZV9uZmx1c2hlcykKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9iaW5z X2pfbm1hbGxvYykKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9iaW5zX2pfbmRhbGxvYykKLUNU TF9QUk9UTyhzdGF0c19hcmVuYXNfaV9iaW5zX2pfbnJlcXVlc3RzKQotQ1RMX1BST1RPKHN0YXRz X2FyZW5hc19pX2JpbnNfal9jdXJyZWdzKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2JpbnNf al9uZmlsbHMpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfYmluc19qX25mbHVzaGVzKQotQ1RM X1BST1RPKHN0YXRzX2FyZW5hc19pX2JpbnNfal9uc2xhYnMpCi1DVExfUFJPVE8oc3RhdHNfYXJl bmFzX2lfYmluc19qX25yZXNsYWJzKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2JpbnNfal9j dXJzbGFicykKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9iaW5zX2pfbm9uZnVsbF9zbGFicykK LUlOREVYX1BST1RPKHN0YXRzX2FyZW5hc19pX2JpbnNfaikKLUNUTF9QUk9UTyhzdGF0c19hcmVu YXNfaV9sZXh0ZW50c19qX25tYWxsb2MpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbGV4dGVu dHNfal9uZGFsbG9jKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfbnJlcXVl c3RzKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfY3VybGV4dGVudHMpCi1J TkRFWF9QUk9UTyhzdGF0c19hcmVuYXNfaV9sZXh0ZW50c19qKQotQ1RMX1BST1RPKHN0YXRzX2Fy ZW5hc19pX2V4dGVudHNfal9uZGlydHkpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfZXh0ZW50 c19qX25tdXp6eSkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfbnJldGFpbmVk KQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2V4dGVudHNfal9kaXJ0eV9ieXRlcykKLUNUTF9Q Uk9UTyhzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfbXV6enlfYnl0ZXMpCi1DVExfUFJPVE8oc3Rh dHNfYXJlbmFzX2lfZXh0ZW50c19qX3JldGFpbmVkX2J5dGVzKQotSU5ERVhfUFJPVE8oc3RhdHNf YXJlbmFzX2lfZXh0ZW50c19qKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9u cHVyZ2VfcGFzc2VzKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ucHVyZ2Vz KQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9uaHVnaWZpZXMpCi1DVExfUFJP VE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25kZWh1Z2lmaWVzKQotCi0vKiBXZSBoYXZlIGEg c2V0IG9mIHN0YXRzIGZvciBmdWxsIHNsYWJzLiAqLwotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19p X2hwYV9zaGFyZF9mdWxsX3NsYWJzX25wYWdlc2xhYnNfbm9uaHVnZSkKLUNUTF9QUk9UTyhzdGF0 c19hcmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFic19ucGFnZXNsYWJzX2h1Z2UpCi1DVExfUFJP VE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNfbmFjdGl2ZV9ub25odWdlKQot Q1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9mdWxsX3NsYWJzX25hY3RpdmVfaHVn ZSkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFic19uZGlydHlf bm9uaHVnZSkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFic19u ZGlydHlfaHVnZSkKLQotLyogQSBwYXJhbGxlbCBzZXQgZm9yIHRoZSBlbXB0eSBzbGFicy4gKi8K LUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbnBhZ2VzbGFi c19ub25odWdlKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9lbXB0eV9zbGFi c19ucGFnZXNsYWJzX2h1Z2UpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Vt cHR5X3NsYWJzX25hY3RpdmVfbm9uaHVnZSkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9ocGFf c2hhcmRfZW1wdHlfc2xhYnNfbmFjdGl2ZV9odWdlKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19p X2hwYV9zaGFyZF9lbXB0eV9zbGFic19uZGlydHlfbm9uaHVnZSkKLUNUTF9QUk9UTyhzdGF0c19h cmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbmRpcnR5X2h1Z2UpCi0KLS8qCi0gKiBBbmQg b25lIGZvciB0aGUgc2xhYnMgdGhhdCBhcmUgbmVpdGhlciBlbXB0eSBub3IgZnVsbCwgYnV0IGlu ZGV4ZWQgYnkgaG93Ci0gKiBmdWxsIHRoZXkgYXJlLgotICovCi1DVExfUFJPVE8oc3RhdHNfYXJl bmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9ucGFnZXNsYWJzX25vbmh1Z2UpCi1DVExf UFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9ucGFnZXNsYWJz X2h1Z2UpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNf al9uYWN0aXZlX25vbmh1Z2UpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25v bmZ1bGxfc2xhYnNfal9uYWN0aXZlX2h1Z2UpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfaHBh X3NoYXJkX25vbmZ1bGxfc2xhYnNfal9uZGlydHlfbm9uaHVnZSkKLUNUTF9QUk9UTyhzdGF0c19h cmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qX25kaXJ0eV9odWdlKQotCi1JTkRFWF9Q Uk9UTyhzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qKQotQ1RMX1BST1RP KHN0YXRzX2FyZW5hc19pX250aHJlYWRzKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX3VwdGlt ZSkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9kc3MpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFz X2lfZGlydHlfZGVjYXlfbXMpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbXV6enlfZGVjYXlf bXMpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfcGFjdGl2ZSkKLUNUTF9QUk9UTyhzdGF0c19h cmVuYXNfaV9wZGlydHkpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfcG11enp5KQotQ1RMX1BS T1RPKHN0YXRzX2FyZW5hc19pX21hcHBlZCkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9yZXRh aW5lZCkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9leHRlbnRfYXZhaWwpCi1DVExfUFJPVE8o c3RhdHNfYXJlbmFzX2lfZGlydHlfbnB1cmdlKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2Rp cnR5X25tYWR2aXNlKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2RpcnR5X3B1cmdlZCkKLUNU TF9QUk9UTyhzdGF0c19hcmVuYXNfaV9tdXp6eV9ucHVyZ2UpCi1DVExfUFJPVE8oc3RhdHNfYXJl bmFzX2lfbXV6enlfbm1hZHZpc2UpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbXV6enlfcHVy Z2VkKQotQ1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX2Jhc2UpCi1DVExfUFJPVE8oc3RhdHNfYXJl bmFzX2lfaW50ZXJuYWwpCi1DVExfUFJPVE8oc3RhdHNfYXJlbmFzX2lfbWV0YWRhdGFfdGhwKQot Q1RMX1BST1RPKHN0YXRzX2FyZW5hc19pX3RjYWNoZV9ieXRlcykKLUNUTF9QUk9UTyhzdGF0c19h cmVuYXNfaV90Y2FjaGVfc3Rhc2hlZF9ieXRlcykKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9y ZXNpZGVudCkKLUNUTF9QUk9UTyhzdGF0c19hcmVuYXNfaV9hYmFuZG9uZWRfdm0pCi1DVExfUFJP VE8oc3RhdHNfYXJlbmFzX2lfaHBhX3NlY19ieXRlcykKLUlOREVYX1BST1RPKHN0YXRzX2FyZW5h c19pKQotQ1RMX1BST1RPKHN0YXRzX2FsbG9jYXRlZCkKLUNUTF9QUk9UTyhzdGF0c19hY3RpdmUp Ci1DVExfUFJPVE8oc3RhdHNfYmFja2dyb3VuZF90aHJlYWRfbnVtX3RocmVhZHMpCi1DVExfUFJP VE8oc3RhdHNfYmFja2dyb3VuZF90aHJlYWRfbnVtX3J1bnMpCi1DVExfUFJPVE8oc3RhdHNfYmFj a2dyb3VuZF90aHJlYWRfcnVuX2ludGVydmFsKQotQ1RMX1BST1RPKHN0YXRzX21ldGFkYXRhKQot Q1RMX1BST1RPKHN0YXRzX21ldGFkYXRhX3RocCkKLUNUTF9QUk9UTyhzdGF0c19yZXNpZGVudCkK LUNUTF9QUk9UTyhzdGF0c19tYXBwZWQpCi1DVExfUFJPVE8oc3RhdHNfcmV0YWluZWQpCi1DVExf UFJPVE8oc3RhdHNfemVyb19yZWFsbG9jcykKLUNUTF9QUk9UTyhleHBlcmltZW50YWxfaG9va3Nf aW5zdGFsbCkKLUNUTF9QUk9UTyhleHBlcmltZW50YWxfaG9va3NfcmVtb3ZlKQotQ1RMX1BST1RP KGV4cGVyaW1lbnRhbF9ob29rc19wcm9mX2JhY2t0cmFjZSkKLUNUTF9QUk9UTyhleHBlcmltZW50 YWxfaG9va3NfcHJvZl9kdW1wKQotQ1RMX1BST1RPKGV4cGVyaW1lbnRhbF9ob29rc19zYWZldHlf Y2hlY2tfYWJvcnQpCi1DVExfUFJPVE8oZXhwZXJpbWVudGFsX3RocmVhZF9hY3Rpdml0eV9jYWxs YmFjaykKLUNUTF9QUk9UTyhleHBlcmltZW50YWxfdXRpbGl6YXRpb25fcXVlcnkpCi1DVExfUFJP VE8oZXhwZXJpbWVudGFsX3V0aWxpemF0aW9uX2JhdGNoX3F1ZXJ5KQotQ1RMX1BST1RPKGV4cGVy aW1lbnRhbF9hcmVuYXNfaV9wYWN0aXZlcCkKLUlOREVYX1BST1RPKGV4cGVyaW1lbnRhbF9hcmVu YXNfaSkKLUNUTF9QUk9UTyhleHBlcmltZW50YWxfcHJvZl9yZWNlbnRfYWxsb2NfbWF4KQotQ1RM X1BST1RPKGV4cGVyaW1lbnRhbF9wcm9mX3JlY2VudF9hbGxvY19kdW1wKQotQ1RMX1BST1RPKGV4 cGVyaW1lbnRhbF9iYXRjaF9hbGxvYykKLUNUTF9QUk9UTyhleHBlcmltZW50YWxfYXJlbmFzX2Ny ZWF0ZV9leHQpCi0KLSNkZWZpbmUgTVVURVhfU1RBVFNfQ1RMX1BST1RPX0dFTihuKQkJCQkJXAot Q1RMX1BST1RPKHN0YXRzXyMjbiMjX251bV9vcHMpCQkJCQkJXAotQ1RMX1BST1RPKHN0YXRzXyMj biMjX251bV93YWl0KQkJCQkJCVwKLUNUTF9QUk9UTyhzdGF0c18jI24jI19udW1fc3Bpbl9hY3Ep CQkJCQlcCi1DVExfUFJPVE8oc3RhdHNfIyNuIyNfbnVtX293bmVyX3N3aXRjaCkJCQkJCVwKLUNU TF9QUk9UTyhzdGF0c18jI24jI190b3RhbF93YWl0X3RpbWUpCQkJCQlcCi1DVExfUFJPVE8oc3Rh dHNfIyNuIyNfbWF4X3dhaXRfdGltZSkJCQkJCVwKLUNUTF9QUk9UTyhzdGF0c18jI24jI19tYXhf bnVtX3RoZHMpCi0KLS8qIEdsb2JhbCBtdXRleGVzLiAqLwotI2RlZmluZSBPUChtdHgpIE1VVEVY X1NUQVRTX0NUTF9QUk9UT19HRU4obXV0ZXhlc18jI210eCkKLU1VVEVYX1BST0ZfR0xPQkFMX01V VEVYRVMKLSN1bmRlZiBPUAotCi0vKiBQZXIgYXJlbmEgbXV0ZXhlcy4gKi8KLSNkZWZpbmUgT1Ao bXR4KSBNVVRFWF9TVEFUU19DVExfUFJPVE9fR0VOKGFyZW5hc19pX211dGV4ZXNfIyNtdHgpCi1N VVRFWF9QUk9GX0FSRU5BX01VVEVYRVMKLSN1bmRlZiBPUAotCi0vKiBBcmVuYSBiaW4gbXV0ZXhl cy4gKi8KLU1VVEVYX1NUQVRTX0NUTF9QUk9UT19HRU4oYXJlbmFzX2lfYmluc19qX211dGV4KQot I3VuZGVmIE1VVEVYX1NUQVRTX0NUTF9QUk9UT19HRU4KLQotQ1RMX1BST1RPKHN0YXRzX211dGV4 ZXNfcmVzZXQpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBtYWxsY3RsIHRyZWUuICov Ci0KLSNkZWZpbmUgTkFNRShuKQl7dHJ1ZX0sCW4KLSNkZWZpbmUgQ0hJTEQodCwgYykJCQkJCQkJ XAotCXNpemVvZihjIyNfbm9kZSkgLyBzaXplb2YoY3RsXyMjdCMjX25vZGVfdCksCQkJXAotCShj dGxfbm9kZV90ICopYyMjX25vZGUsCQkJCQkJXAotCU5VTEwKLSNkZWZpbmUgQ1RMKGMpCTAsIE5V TEwsIGMjI19jdGwKLQotLyoKLSAqIE9ubHkgaGFuZGxlcyBpbnRlcm5hbCBpbmRleGVkIG5vZGVz LCBzaW5jZSB0aGVyZSBhcmUgY3VycmVudGx5IG5vIGV4dGVybmFsCi0gKiBvbmVzLgotICovCi0j ZGVmaW5lIElOREVYKGkpCXtmYWxzZX0sCWkjI19pbmRleAotCi1zdGF0aWMgY29uc3QgY3RsX25h bWVkX25vZGVfdAl0aHJlYWRfdGNhY2hlX25vZGVbXSA9IHsKLQl7TkFNRSgiZW5hYmxlZCIpLAlD VEwodGhyZWFkX3RjYWNoZV9lbmFibGVkKX0sCi0Je05BTUUoImZsdXNoIiksCQlDVEwodGhyZWFk X3RjYWNoZV9mbHVzaCl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdAl0aHJl YWRfcGVha19ub2RlW10gPSB7Ci0Je05BTUUoInJlYWQiKSwJCUNUTCh0aHJlYWRfcGVha19yZWFk KX0sCi0Je05BTUUoInJlc2V0IiksCQlDVEwodGhyZWFkX3BlYWtfcmVzZXQpfSwKLX07Ci0KLXN0 YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90CXRocmVhZF9wcm9mX25vZGVbXSA9IHsKLQl7TkFN RSgibmFtZSIpLAkJQ1RMKHRocmVhZF9wcm9mX25hbWUpfSwKLQl7TkFNRSgiYWN0aXZlIiksCUNU TCh0aHJlYWRfcHJvZl9hY3RpdmUpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2Rl X3QJdGhyZWFkX25vZGVbXSA9IHsKLQl7TkFNRSgiYXJlbmEiKSwJCUNUTCh0aHJlYWRfYXJlbmEp fSwKLQl7TkFNRSgiYWxsb2NhdGVkIiksCUNUTCh0aHJlYWRfYWxsb2NhdGVkKX0sCi0Je05BTUUo ImFsbG9jYXRlZHAiKSwJQ1RMKHRocmVhZF9hbGxvY2F0ZWRwKX0sCi0Je05BTUUoImRlYWxsb2Nh dGVkIiksCUNUTCh0aHJlYWRfZGVhbGxvY2F0ZWQpfSwKLQl7TkFNRSgiZGVhbGxvY2F0ZWRwIiks CUNUTCh0aHJlYWRfZGVhbGxvY2F0ZWRwKX0sCi0Je05BTUUoInRjYWNoZSIpLAlDSElMRChuYW1l ZCwgdGhyZWFkX3RjYWNoZSl9LAotCXtOQU1FKCJwZWFrIiksCQlDSElMRChuYW1lZCwgdGhyZWFk X3BlYWspfSwKLQl7TkFNRSgicHJvZiIpLAkJQ0hJTEQobmFtZWQsIHRocmVhZF9wcm9mKX0sCi0J e05BTUUoImlkbGUiKSwJCUNUTCh0aHJlYWRfaWRsZSl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3Rs X25hbWVkX25vZGVfdAljb25maWdfbm9kZVtdID0gewotCXtOQU1FKCJjYWNoZV9vYmxpdmlvdXMi KSwgQ1RMKGNvbmZpZ19jYWNoZV9vYmxpdmlvdXMpfSwKLQl7TkFNRSgiZGVidWciKSwJCUNUTChj b25maWdfZGVidWcpfSwKLQl7TkFNRSgiZmlsbCIpLAkJQ1RMKGNvbmZpZ19maWxsKX0sCi0Je05B TUUoImxhenlfbG9jayIpLAlDVEwoY29uZmlnX2xhenlfbG9jayl9LAotCXtOQU1FKCJtYWxsb2Nf Y29uZiIpLAlDVEwoY29uZmlnX21hbGxvY19jb25mKX0sCi0Je05BTUUoIm9wdF9zYWZldHlfY2hl Y2tzIiksCUNUTChjb25maWdfb3B0X3NhZmV0eV9jaGVja3MpfSwKLQl7TkFNRSgicHJvZiIpLAkJ Q1RMKGNvbmZpZ19wcm9mKX0sCi0Je05BTUUoInByb2ZfbGliZ2NjIiksCUNUTChjb25maWdfcHJv Zl9saWJnY2MpfSwKLQl7TkFNRSgicHJvZl9saWJ1bndpbmQiKSwgQ1RMKGNvbmZpZ19wcm9mX2xp YnVud2luZCl9LAotCXtOQU1FKCJzdGF0cyIpLAkJQ1RMKGNvbmZpZ19zdGF0cyl9LAotCXtOQU1F KCJ1dHJhY2UiKSwJQ1RMKGNvbmZpZ191dHJhY2UpfSwKLQl7TkFNRSgieG1hbGxvYyIpLAlDVEwo Y29uZmlnX3htYWxsb2MpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgb3B0 X25vZGVbXSA9IHsKLQl7TkFNRSgiYWJvcnQiKSwJCUNUTChvcHRfYWJvcnQpfSwKLQl7TkFNRSgi YWJvcnRfY29uZiIpLAlDVEwob3B0X2Fib3J0X2NvbmYpfSwKLQl7TkFNRSgiY2FjaGVfb2JsaXZp b3VzIiksCUNUTChvcHRfY2FjaGVfb2JsaXZpb3VzKX0sCi0Je05BTUUoInRydXN0X21hZHZpc2Ui KSwJQ1RMKG9wdF90cnVzdF9tYWR2aXNlKX0sCi0Je05BTUUoImNvbmZpcm1fY29uZiIpLAlDVEwo b3B0X2NvbmZpcm1fY29uZil9LAotCXtOQU1FKCJocGEiKSwJCUNUTChvcHRfaHBhKX0sCi0Je05B TUUoImhwYV9zbGFiX21heF9hbGxvYyIpLAlDVEwob3B0X2hwYV9zbGFiX21heF9hbGxvYyl9LAot CXtOQU1FKCJocGFfaHVnaWZpY2F0aW9uX3RocmVzaG9sZCIpLAotCQlDVEwob3B0X2hwYV9odWdp ZmljYXRpb25fdGhyZXNob2xkKX0sCi0Je05BTUUoImhwYV9odWdpZnlfZGVsYXlfbXMiKSwgQ1RM KG9wdF9ocGFfaHVnaWZ5X2RlbGF5X21zKX0sCi0Je05BTUUoImhwYV9taW5fcHVyZ2VfaW50ZXJ2 YWxfbXMiKSwgQ1RMKG9wdF9ocGFfbWluX3B1cmdlX2ludGVydmFsX21zKX0sCi0Je05BTUUoImhw YV9kaXJ0eV9tdWx0IiksIENUTChvcHRfaHBhX2RpcnR5X211bHQpfSwKLQl7TkFNRSgiaHBhX3Nl Y19uc2hhcmRzIiksCUNUTChvcHRfaHBhX3NlY19uc2hhcmRzKX0sCi0Je05BTUUoImhwYV9zZWNf bWF4X2FsbG9jIiksCUNUTChvcHRfaHBhX3NlY19tYXhfYWxsb2MpfSwKLQl7TkFNRSgiaHBhX3Nl Y19tYXhfYnl0ZXMiKSwJQ1RMKG9wdF9ocGFfc2VjX21heF9ieXRlcyl9LAotCXtOQU1FKCJocGFf c2VjX2J5dGVzX2FmdGVyX2ZsdXNoIiksCi0JCUNUTChvcHRfaHBhX3NlY19ieXRlc19hZnRlcl9m bHVzaCl9LAotCXtOQU1FKCJocGFfc2VjX2JhdGNoX2ZpbGxfZXh0cmEiKSwKLQkJQ1RMKG9wdF9o cGFfc2VjX2JhdGNoX2ZpbGxfZXh0cmEpfSwKLQl7TkFNRSgibWV0YWRhdGFfdGhwIiksCUNUTChv cHRfbWV0YWRhdGFfdGhwKX0sCi0Je05BTUUoInJldGFpbiIpLAlDVEwob3B0X3JldGFpbil9LAot CXtOQU1FKCJkc3MiKSwJCUNUTChvcHRfZHNzKX0sCi0Je05BTUUoIm5hcmVuYXMiKSwJQ1RMKG9w dF9uYXJlbmFzKX0sCi0Je05BTUUoInBlcmNwdV9hcmVuYSIpLAlDVEwob3B0X3BlcmNwdV9hcmVu YSl9LAotCXtOQU1FKCJvdmVyc2l6ZV90aHJlc2hvbGQiKSwJQ1RMKG9wdF9vdmVyc2l6ZV90aHJl c2hvbGQpfSwKLQl7TkFNRSgibXV0ZXhfbWF4X3NwaW4iKSwJQ1RMKG9wdF9tdXRleF9tYXhfc3Bp bil9LAotCXtOQU1FKCJiYWNrZ3JvdW5kX3RocmVhZCIpLAlDVEwob3B0X2JhY2tncm91bmRfdGhy ZWFkKX0sCi0Je05BTUUoIm1heF9iYWNrZ3JvdW5kX3RocmVhZHMiKSwJQ1RMKG9wdF9tYXhfYmFj a2dyb3VuZF90aHJlYWRzKX0sCi0Je05BTUUoImRpcnR5X2RlY2F5X21zIiksIENUTChvcHRfZGly dHlfZGVjYXlfbXMpfSwKLQl7TkFNRSgibXV6enlfZGVjYXlfbXMiKSwgQ1RMKG9wdF9tdXp6eV9k ZWNheV9tcyl9LAotCXtOQU1FKCJzdGF0c19wcmludCIpLAlDVEwob3B0X3N0YXRzX3ByaW50KX0s Ci0Je05BTUUoInN0YXRzX3ByaW50X29wdHMiKSwJQ1RMKG9wdF9zdGF0c19wcmludF9vcHRzKX0s Ci0Je05BTUUoInN0YXRzX2ludGVydmFsIiksCUNUTChvcHRfc3RhdHNfaW50ZXJ2YWwpfSwKLQl7 TkFNRSgic3RhdHNfaW50ZXJ2YWxfb3B0cyIpLAlDVEwob3B0X3N0YXRzX2ludGVydmFsX29wdHMp fSwKLQl7TkFNRSgianVuayIpLAkJQ1RMKG9wdF9qdW5rKX0sCi0Je05BTUUoInplcm8iKSwJCUNU TChvcHRfemVybyl9LAotCXtOQU1FKCJ1dHJhY2UiKSwJQ1RMKG9wdF91dHJhY2UpfSwKLQl7TkFN RSgieG1hbGxvYyIpLAlDVEwob3B0X3htYWxsb2MpfSwKLQl7TkFNRSgiZXhwZXJpbWVudGFsX2lu ZmFsbGlibGVfbmV3IiksCi0JCUNUTChvcHRfZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3KX0s Ci0Je05BTUUoInRjYWNoZSIpLAlDVEwob3B0X3RjYWNoZSl9LAotCXtOQU1FKCJ0Y2FjaGVfbWF4 IiksCUNUTChvcHRfdGNhY2hlX21heCl9LAotCXtOQU1FKCJ0Y2FjaGVfbnNsb3RzX3NtYWxsX21p biIpLAotCQlDVEwob3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWluKX0sCi0Je05BTUUoInRjYWNo ZV9uc2xvdHNfc21hbGxfbWF4IiksCi0JCUNUTChvcHRfdGNhY2hlX25zbG90c19zbWFsbF9tYXgp fSwKLQl7TkFNRSgidGNhY2hlX25zbG90c19sYXJnZSIpLAlDVEwob3B0X3RjYWNoZV9uc2xvdHNf bGFyZ2UpfSwKLQl7TkFNRSgibGdfdGNhY2hlX25zbG90c19tdWwiKSwJQ1RMKG9wdF9sZ190Y2Fj aGVfbnNsb3RzX211bCl9LAotCXtOQU1FKCJ0Y2FjaGVfZ2NfaW5jcl9ieXRlcyIpLAlDVEwob3B0 X3RjYWNoZV9nY19pbmNyX2J5dGVzKX0sCi0Je05BTUUoInRjYWNoZV9nY19kZWxheV9ieXRlcyIp LAlDVEwob3B0X3RjYWNoZV9nY19kZWxheV9ieXRlcyl9LAotCXtOQU1FKCJsZ190Y2FjaGVfZmx1 c2hfc21hbGxfZGl2IiksCi0JCUNUTChvcHRfbGdfdGNhY2hlX2ZsdXNoX3NtYWxsX2Rpdil9LAot CXtOQU1FKCJsZ190Y2FjaGVfZmx1c2hfbGFyZ2VfZGl2IiksCi0JCUNUTChvcHRfbGdfdGNhY2hl X2ZsdXNoX2xhcmdlX2Rpdil9LAotCXtOQU1FKCJ0aHAiKSwJCUNUTChvcHRfdGhwKX0sCi0Je05B TUUoImxnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCIpLCBDVEwob3B0X2xnX2V4dGVudF9tYXhfYWN0 aXZlX2ZpdCl9LAotCXtOQU1FKCJwcm9mIiksCQlDVEwob3B0X3Byb2YpfSwKLQl7TkFNRSgicHJv Zl9wcmVmaXgiKSwJQ1RMKG9wdF9wcm9mX3ByZWZpeCl9LAotCXtOQU1FKCJwcm9mX2FjdGl2ZSIp LAlDVEwob3B0X3Byb2ZfYWN0aXZlKX0sCi0Je05BTUUoInByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0 IiksIENUTChvcHRfcHJvZl90aHJlYWRfYWN0aXZlX2luaXQpfSwKLQl7TkFNRSgibGdfcHJvZl9z YW1wbGUiKSwgQ1RMKG9wdF9sZ19wcm9mX3NhbXBsZSl9LAotCXtOQU1FKCJsZ19wcm9mX2ludGVy dmFsIiksIENUTChvcHRfbGdfcHJvZl9pbnRlcnZhbCl9LAotCXtOQU1FKCJwcm9mX2dkdW1wIiks CUNUTChvcHRfcHJvZl9nZHVtcCl9LAotCXtOQU1FKCJwcm9mX2ZpbmFsIiksCUNUTChvcHRfcHJv Zl9maW5hbCl9LAotCXtOQU1FKCJwcm9mX2xlYWsiKSwJQ1RMKG9wdF9wcm9mX2xlYWspfSwKLQl7 TkFNRSgicHJvZl9sZWFrX2Vycm9yIiksCUNUTChvcHRfcHJvZl9sZWFrX2Vycm9yKX0sCi0Je05B TUUoInByb2ZfYWNjdW0iKSwJQ1RMKG9wdF9wcm9mX2FjY3VtKX0sCi0Je05BTUUoInByb2ZfcmVj ZW50X2FsbG9jX21heCIpLAlDVEwob3B0X3Byb2ZfcmVjZW50X2FsbG9jX21heCl9LAotCXtOQU1F KCJwcm9mX3N0YXRzIiksCUNUTChvcHRfcHJvZl9zdGF0cyl9LAotCXtOQU1FKCJwcm9mX3N5c190 aHJlYWRfbmFtZSIpLAlDVEwob3B0X3Byb2Zfc3lzX3RocmVhZF9uYW1lKX0sCi0Je05BTUUoInBy b2ZfdGltZV9yZXNvbHV0aW9uIiksCUNUTChvcHRfcHJvZl90aW1lX3Jlcyl9LAotCXtOQU1FKCJs Z19zYW5fdWFmX2FsaWduIiksCUNUTChvcHRfbGdfc2FuX3VhZl9hbGlnbil9LAotCXtOQU1FKCJ6 ZXJvX3JlYWxsb2MiKSwJQ1RMKG9wdF96ZXJvX3JlYWxsb2MpfQotfTsKLQotc3RhdGljIGNvbnN0 IGN0bF9uYW1lZF9ub2RlX3QJdGNhY2hlX25vZGVbXSA9IHsKLQl7TkFNRSgiY3JlYXRlIiksCUNU TCh0Y2FjaGVfY3JlYXRlKX0sCi0Je05BTUUoImZsdXNoIiksCQlDVEwodGNhY2hlX2ZsdXNoKX0s Ci0Je05BTUUoImRlc3Ryb3kiKSwJQ1RMKHRjYWNoZV9kZXN0cm95KX0KLX07Ci0KLXN0YXRpYyBj b25zdCBjdGxfbmFtZWRfbm9kZV90IGFyZW5hX2lfbm9kZVtdID0gewotCXtOQU1FKCJpbml0aWFs aXplZCIpLAlDVEwoYXJlbmFfaV9pbml0aWFsaXplZCl9LAotCXtOQU1FKCJkZWNheSIpLAkJQ1RM KGFyZW5hX2lfZGVjYXkpfSwKLQl7TkFNRSgicHVyZ2UiKSwJCUNUTChhcmVuYV9pX3B1cmdlKX0s Ci0Je05BTUUoInJlc2V0IiksCQlDVEwoYXJlbmFfaV9yZXNldCl9LAotCXtOQU1FKCJkZXN0cm95 IiksCUNUTChhcmVuYV9pX2Rlc3Ryb3kpfSwKLQl7TkFNRSgiZHNzIiksCQlDVEwoYXJlbmFfaV9k c3MpfSwKLQkvKgotCSAqIFVuZG9jdW1lbnRlZCBmb3Igbm93LCBzaW5jZSB3ZSBhbnRpY2lwYXRl IGFuIGFyZW5hIEFQSSBpbiBmbHV4IGFmdGVyCi0JICogd2UgY3V0IHRoZSBsYXN0IDUtc2VyaWVz IHJlbGVhc2UuCi0JICovCi0Je05BTUUoIm92ZXJzaXplX3RocmVzaG9sZCIpLCBDVEwoYXJlbmFf aV9vdmVyc2l6ZV90aHJlc2hvbGQpfSwKLQl7TkFNRSgiZGlydHlfZGVjYXlfbXMiKSwgQ1RMKGFy ZW5hX2lfZGlydHlfZGVjYXlfbXMpfSwKLQl7TkFNRSgibXV6enlfZGVjYXlfbXMiKSwgQ1RMKGFy ZW5hX2lfbXV6enlfZGVjYXlfbXMpfSwKLQl7TkFNRSgiZXh0ZW50X2hvb2tzIiksCUNUTChhcmVu YV9pX2V4dGVudF9ob29rcyl9LAotCXtOQU1FKCJyZXRhaW5fZ3Jvd19saW1pdCIpLAlDVEwoYXJl bmFfaV9yZXRhaW5fZ3Jvd19saW1pdCl9Ci19Owotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2Rl X3Qgc3VwZXJfYXJlbmFfaV9ub2RlW10gPSB7Ci0Je05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIGFy ZW5hX2kpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCBhcmVuYV9ub2Rl W10gPSB7Ci0Je0lOREVYKGFyZW5hX2kpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9u b2RlX3QgYXJlbmFzX2Jpbl9pX25vZGVbXSA9IHsKLQl7TkFNRSgic2l6ZSIpLAkJQ1RMKGFyZW5h c19iaW5faV9zaXplKX0sCi0Je05BTUUoIm5yZWdzIiksCQlDVEwoYXJlbmFzX2Jpbl9pX25yZWdz KX0sCi0Je05BTUUoInNsYWJfc2l6ZSIpLAlDVEwoYXJlbmFzX2Jpbl9pX3NsYWJfc2l6ZSl9LAot CXtOQU1FKCJuc2hhcmRzIiksCUNUTChhcmVuYXNfYmluX2lfbnNoYXJkcyl9Ci19Owotc3RhdGlj IGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3VwZXJfYXJlbmFzX2Jpbl9pX25vZGVbXSA9IHsKLQl7 TkFNRSgiIiksCQlDSElMRChuYW1lZCwgYXJlbmFzX2Jpbl9pKX0KLX07Ci0KLXN0YXRpYyBjb25z dCBjdGxfaW5kZXhlZF9ub2RlX3QgYXJlbmFzX2Jpbl9ub2RlW10gPSB7Ci0Je0lOREVYKGFyZW5h c19iaW5faSl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBhcmVuYXNfbGV4 dGVudF9pX25vZGVbXSA9IHsKLQl7TkFNRSgic2l6ZSIpLAkJQ1RMKGFyZW5hc19sZXh0ZW50X2lf c2l6ZSl9Ci19Owotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3VwZXJfYXJlbmFzX2xl eHRlbnRfaV9ub2RlW10gPSB7Ci0Je05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIGFyZW5hc19sZXh0 ZW50X2kpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCBhcmVuYXNfbGV4 dGVudF9ub2RlW10gPSB7Ci0Je0lOREVYKGFyZW5hc19sZXh0ZW50X2kpfQotfTsKLQotc3RhdGlj IGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgYXJlbmFzX25vZGVbXSA9IHsKLQl7TkFNRSgibmFyZW5h cyIpLAlDVEwoYXJlbmFzX25hcmVuYXMpfSwKLQl7TkFNRSgiZGlydHlfZGVjYXlfbXMiKSwgQ1RM KGFyZW5hc19kaXJ0eV9kZWNheV9tcyl9LAotCXtOQU1FKCJtdXp6eV9kZWNheV9tcyIpLCBDVEwo YXJlbmFzX211enp5X2RlY2F5X21zKX0sCi0Je05BTUUoInF1YW50dW0iKSwJQ1RMKGFyZW5hc19x dWFudHVtKX0sCi0Je05BTUUoInBhZ2UiKSwJCUNUTChhcmVuYXNfcGFnZSl9LAotCXtOQU1FKCJ0 Y2FjaGVfbWF4IiksCUNUTChhcmVuYXNfdGNhY2hlX21heCl9LAotCXtOQU1FKCJuYmlucyIpLAkJ Q1RMKGFyZW5hc19uYmlucyl9LAotCXtOQU1FKCJuaGJpbnMiKSwJQ1RMKGFyZW5hc19uaGJpbnMp fSwKLQl7TkFNRSgiYmluIiksCQlDSElMRChpbmRleGVkLCBhcmVuYXNfYmluKX0sCi0Je05BTUUo Im5sZXh0ZW50cyIpLAlDVEwoYXJlbmFzX25sZXh0ZW50cyl9LAotCXtOQU1FKCJsZXh0ZW50Iiks CUNISUxEKGluZGV4ZWQsIGFyZW5hc19sZXh0ZW50KX0sCi0Je05BTUUoImNyZWF0ZSIpLAlDVEwo YXJlbmFzX2NyZWF0ZSl9LAotCXtOQU1FKCJsb29rdXAiKSwJQ1RMKGFyZW5hc19sb29rdXApfQot fTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgcHJvZl9zdGF0c19iaW5zX2lfbm9k ZVtdID0gewotCXtOQU1FKCJsaXZlIiksCQlDVEwocHJvZl9zdGF0c19iaW5zX2lfbGl2ZSl9LAot CXtOQU1FKCJhY2N1bSIpLAkJQ1RMKHByb2Zfc3RhdHNfYmluc19pX2FjY3VtKX0KLX07Ci0KLXN0 YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN1cGVyX3Byb2Zfc3RhdHNfYmluc19pX25vZGVb XSA9IHsKLQl7TkFNRSgiIiksCQlDSElMRChuYW1lZCwgcHJvZl9zdGF0c19iaW5zX2kpfQotfTsK LQotc3RhdGljIGNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCBwcm9mX3N0YXRzX2JpbnNfbm9kZVtd ID0gewotCXtJTkRFWChwcm9mX3N0YXRzX2JpbnNfaSl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3Rs X25hbWVkX25vZGVfdCBwcm9mX3N0YXRzX2xleHRlbnRzX2lfbm9kZVtdID0gewotCXtOQU1FKCJs aXZlIiksCQlDVEwocHJvZl9zdGF0c19sZXh0ZW50c19pX2xpdmUpfSwKLQl7TkFNRSgiYWNjdW0i KSwJCUNUTChwcm9mX3N0YXRzX2xleHRlbnRzX2lfYWNjdW0pfQotfTsKLQotc3RhdGljIGNvbnN0 IGN0bF9uYW1lZF9ub2RlX3Qgc3VwZXJfcHJvZl9zdGF0c19sZXh0ZW50c19pX25vZGVbXSA9IHsK LQl7TkFNRSgiIiksCQlDSElMRChuYW1lZCwgcHJvZl9zdGF0c19sZXh0ZW50c19pKX0KLX07Ci0K LXN0YXRpYyBjb25zdCBjdGxfaW5kZXhlZF9ub2RlX3QgcHJvZl9zdGF0c19sZXh0ZW50c19ub2Rl W10gPSB7Ci0Je0lOREVYKHByb2Zfc3RhdHNfbGV4dGVudHNfaSl9Ci19OwotCi1zdGF0aWMgY29u c3QgY3RsX25hbWVkX25vZGVfdAlwcm9mX3N0YXRzX25vZGVbXSA9IHsKLQl7TkFNRSgiYmlucyIp LAkJQ0hJTEQoaW5kZXhlZCwgcHJvZl9zdGF0c19iaW5zKX0sCi0Je05BTUUoImxleHRlbnRzIiks CUNISUxEKGluZGV4ZWQsIHByb2Zfc3RhdHNfbGV4dGVudHMpfSwKLX07Ci0KLXN0YXRpYyBjb25z dCBjdGxfbmFtZWRfbm9kZV90CXByb2Zfbm9kZVtdID0gewotCXtOQU1FKCJ0aHJlYWRfYWN0aXZl X2luaXQiKSwgQ1RMKHByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0KX0sCi0Je05BTUUoImFjdGl2ZSIp LAlDVEwocHJvZl9hY3RpdmUpfSwKLQl7TkFNRSgiZHVtcCIpLAkJQ1RMKHByb2ZfZHVtcCl9LAot CXtOQU1FKCJnZHVtcCIpLAkJQ1RMKHByb2ZfZ2R1bXApfSwKLQl7TkFNRSgicHJlZml4IiksCUNU TChwcm9mX3ByZWZpeCl9LAotCXtOQU1FKCJyZXNldCIpLAkJQ1RMKHByb2ZfcmVzZXQpfSwKLQl7 TkFNRSgiaW50ZXJ2YWwiKSwJQ1RMKHByb2ZfaW50ZXJ2YWwpfSwKLQl7TkFNRSgibGdfc2FtcGxl IiksCUNUTChsZ19wcm9mX3NhbXBsZSl9LAotCXtOQU1FKCJsb2dfc3RhcnQiKSwJQ1RMKHByb2Zf bG9nX3N0YXJ0KX0sCi0Je05BTUUoImxvZ19zdG9wIiksCUNUTChwcm9mX2xvZ19zdG9wKX0sCi0J e05BTUUoInN0YXRzIiksCQlDSElMRChuYW1lZCwgcHJvZl9zdGF0cyl9Ci19OwotCi1zdGF0aWMg Y29uc3QgY3RsX25hbWVkX25vZGVfdCBzdGF0c19hcmVuYXNfaV9zbWFsbF9ub2RlW10gPSB7Ci0J e05BTUUoImFsbG9jYXRlZCIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfc21hbGxfYWxsb2NhdGVkKX0s Ci0Je05BTUUoIm5tYWxsb2MiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX3NtYWxsX25tYWxsb2MpfSwK LQl7TkFNRSgibmRhbGxvYyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfc21hbGxfbmRhbGxvYyl9LAot CXtOQU1FKCJucmVxdWVzdHMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX3NtYWxsX25yZXF1ZXN0cyl9 LAotCXtOQU1FKCJuZmlsbHMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX3NtYWxsX25maWxscyl9LAot CXtOQU1FKCJuZmx1c2hlcyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfc21hbGxfbmZsdXNoZXMpfQot fTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lfbGFyZ2Vf bm9kZVtdID0gewotCXtOQU1FKCJhbGxvY2F0ZWQiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2xhcmdl X2FsbG9jYXRlZCl9LAotCXtOQU1FKCJubWFsbG9jIiksCUNUTChzdGF0c19hcmVuYXNfaV9sYXJn ZV9ubWFsbG9jKX0sCi0Je05BTUUoIm5kYWxsb2MiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2xhcmdl X25kYWxsb2MpfSwKLQl7TkFNRSgibnJlcXVlc3RzIiksCUNUTChzdGF0c19hcmVuYXNfaV9sYXJn ZV9ucmVxdWVzdHMpfSwKLQl7TkFNRSgibmZpbGxzIiksCUNUTChzdGF0c19hcmVuYXNfaV9sYXJn ZV9uZmlsbHMpfSwKLQl7TkFNRSgibmZsdXNoZXMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2xhcmdl X25mbHVzaGVzKX0KLX07Ci0KLSNkZWZpbmUgTVVURVhfUFJPRl9EQVRBX05PREUocHJlZml4KQkJ CQkJXAotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfIyNwcmVmaXgjI19ub2Rl W10gPSB7CQlcCi0Je05BTUUoIm51bV9vcHMiKSwJCQkJCQlcCi0JIENUTChzdGF0c18jI3ByZWZp eCMjX251bV9vcHMpfSwJCQkJXAotCXtOQU1FKCJudW1fd2FpdCIpLAkJCQkJCVwKLQkgQ1RMKHN0 YXRzXyMjcHJlZml4IyNfbnVtX3dhaXQpfSwJCQkJXAotCXtOQU1FKCJudW1fc3Bpbl9hY3EiKSwJ CQkJCQlcCi0JIENUTChzdGF0c18jI3ByZWZpeCMjX251bV9zcGluX2FjcSl9LAkJCQlcCi0Je05B TUUoIm51bV9vd25lcl9zd2l0Y2giKSwJCQkJCVwKLQkgQ1RMKHN0YXRzXyMjcHJlZml4IyNfbnVt X293bmVyX3N3aXRjaCl9LAkJCVwKLQl7TkFNRSgidG90YWxfd2FpdF90aW1lIiksCQkJCQlcCi0J IENUTChzdGF0c18jI3ByZWZpeCMjX3RvdGFsX3dhaXRfdGltZSl9LAkJCVwKLQl7TkFNRSgibWF4 X3dhaXRfdGltZSIpLAkJCQkJCVwKLQkgQ1RMKHN0YXRzXyMjcHJlZml4IyNfbWF4X3dhaXRfdGlt ZSl9LAkJCQlcCi0Je05BTUUoIm1heF9udW1fdGhkcyIpLAkJCQkJCVwKLQkgQ1RMKHN0YXRzXyMj cHJlZml4IyNfbWF4X251bV90aGRzKX0JCQkJXAotCS8qIE5vdGUgdGhhdCAjIG9mIGN1cnJlbnQg d2FpdGluZyB0aHJlYWQgbm90IHByb3ZpZGVkLiAqLwlcCi19OwotCi1NVVRFWF9QUk9GX0RBVEFf Tk9ERShhcmVuYXNfaV9iaW5zX2pfbXV0ZXgpCi0KLXN0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9k ZV90IHN0YXRzX2FyZW5hc19pX2JpbnNfal9ub2RlW10gPSB7Ci0Je05BTUUoIm5tYWxsb2MiKSwJ Q1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9ubWFsbG9jKX0sCi0Je05BTUUoIm5kYWxsb2MiKSwJ Q1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9uZGFsbG9jKX0sCi0Je05BTUUoIm5yZXF1ZXN0cyIp LAlDVEwoc3RhdHNfYXJlbmFzX2lfYmluc19qX25yZXF1ZXN0cyl9LAotCXtOQU1FKCJjdXJyZWdz IiksCUNUTChzdGF0c19hcmVuYXNfaV9iaW5zX2pfY3VycmVncyl9LAotCXtOQU1FKCJuZmlsbHMi KSwJQ1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9uZmlsbHMpfSwKLQl7TkFNRSgibmZsdXNoZXMi KSwJQ1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9uZmx1c2hlcyl9LAotCXtOQU1FKCJuc2xhYnMi KSwJQ1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9uc2xhYnMpfSwKLQl7TkFNRSgibnJlc2xhYnMi KSwJQ1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9ucmVzbGFicyl9LAotCXtOQU1FKCJjdXJzbGFi cyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfYmluc19qX2N1cnNsYWJzKX0sCi0Je05BTUUoIm5vbmZ1 bGxfc2xhYnMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2JpbnNfal9ub25mdWxsX3NsYWJzKX0sCi0J e05BTUUoIm11dGV4IiksCQlDSElMRChuYW1lZCwgc3RhdHNfYXJlbmFzX2lfYmluc19qX211dGV4 KX0KLX07Ci0KLXN0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IHN1cGVyX3N0YXRzX2FyZW5h c19pX2JpbnNfal9ub2RlW10gPSB7Ci0Je05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIHN0YXRzX2Fy ZW5hc19pX2JpbnNfail9Ci19OwotCi1zdGF0aWMgY29uc3QgY3RsX2luZGV4ZWRfbm9kZV90IHN0 YXRzX2FyZW5hc19pX2JpbnNfbm9kZVtdID0gewotCXtJTkRFWChzdGF0c19hcmVuYXNfaV9iaW5z X2opfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lf bGV4dGVudHNfal9ub2RlW10gPSB7Ci0Je05BTUUoIm5tYWxsb2MiKSwJQ1RMKHN0YXRzX2FyZW5h c19pX2xleHRlbnRzX2pfbm1hbGxvYyl9LAotCXtOQU1FKCJuZGFsbG9jIiksCUNUTChzdGF0c19h cmVuYXNfaV9sZXh0ZW50c19qX25kYWxsb2MpfSwKLQl7TkFNRSgibnJlcXVlc3RzIiksCUNUTChz dGF0c19hcmVuYXNfaV9sZXh0ZW50c19qX25yZXF1ZXN0cyl9LAotCXtOQU1FKCJjdXJsZXh0ZW50 cyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfbGV4dGVudHNfal9jdXJsZXh0ZW50cyl9Ci19Owotc3Rh dGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3VwZXJfc3RhdHNfYXJlbmFzX2lfbGV4dGVudHNf al9ub2RlW10gPSB7Ci0Je05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIHN0YXRzX2FyZW5hc19pX2xl eHRlbnRzX2opfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCBzdGF0c19h cmVuYXNfaV9sZXh0ZW50c19ub2RlW10gPSB7Ci0Je0lOREVYKHN0YXRzX2FyZW5hc19pX2xleHRl bnRzX2opfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNfYXJlbmFz X2lfZXh0ZW50c19qX25vZGVbXSA9IHsKLQl7TkFNRSgibmRpcnR5IiksCUNUTChzdGF0c19hcmVu YXNfaV9leHRlbnRzX2pfbmRpcnR5KX0sCi0Je05BTUUoIm5tdXp6eSIpLAlDVEwoc3RhdHNfYXJl bmFzX2lfZXh0ZW50c19qX25tdXp6eSl9LAotCXtOQU1FKCJucmV0YWluZWQiKSwJQ1RMKHN0YXRz X2FyZW5hc19pX2V4dGVudHNfal9ucmV0YWluZWQpfSwKLQl7TkFNRSgiZGlydHlfYnl0ZXMiKSwJ Q1RMKHN0YXRzX2FyZW5hc19pX2V4dGVudHNfal9kaXJ0eV9ieXRlcyl9LAotCXtOQU1FKCJtdXp6 eV9ieXRlcyIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qX211enp5X2J5dGVzKX0sCi0J e05BTUUoInJldGFpbmVkX2J5dGVzIiksIENUTChzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfcmV0 YWluZWRfYnl0ZXMpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3VwZXJf c3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qX25vZGVbXSA9IHsKLQl7TkFNRSgiIiksCQlDSElMRChu YW1lZCwgc3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qKX0KLX07Ci0KLXN0YXRpYyBjb25zdCBjdGxf aW5kZXhlZF9ub2RlX3Qgc3RhdHNfYXJlbmFzX2lfZXh0ZW50c19ub2RlW10gPSB7Ci0Je0lOREVY KHN0YXRzX2FyZW5hc19pX2V4dGVudHNfail9Ci19OwotCi0jZGVmaW5lIE9QKG10eCkgIE1VVEVY X1BST0ZfREFUQV9OT0RFKGFyZW5hc19pX211dGV4ZXNfIyNtdHgpCi1NVVRFWF9QUk9GX0FSRU5B X01VVEVYRVMKLSN1bmRlZiBPUAotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdGF0 c19hcmVuYXNfaV9tdXRleGVzX25vZGVbXSA9IHsKLSNkZWZpbmUgT1AobXR4KSB7TkFNRSgjbXR4 KSwgQ0hJTEQobmFtZWQsIHN0YXRzX2FyZW5hc19pX211dGV4ZXNfIyNtdHgpfSwKLU1VVEVYX1BS T0ZfQVJFTkFfTVVURVhFUwotI3VuZGVmIE9QCi19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVk X25vZGVfdCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFic19ub2RlW10gPSB7Ci0J e05BTUUoIm5wYWdlc2xhYnNfbm9uaHVnZSIpLAotCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3No YXJkX2Z1bGxfc2xhYnNfbnBhZ2VzbGFic19ub25odWdlKX0sCi0Je05BTUUoIm5wYWdlc2xhYnNf aHVnZSIpLAotCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNfbnBhZ2Vz bGFic19odWdlKX0sCi0Je05BTUUoIm5hY3RpdmVfbm9uaHVnZSIpLAotCQlDVEwoc3RhdHNfYXJl bmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNfbmFjdGl2ZV9ub25odWdlKX0sCi0Je05BTUUoIm5h Y3RpdmVfaHVnZSIpLAotCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNf bmFjdGl2ZV9odWdlKX0sCi0Je05BTUUoIm5kaXJ0eV9ub25odWdlIiksCi0JCUNUTChzdGF0c19h cmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFic19uZGlydHlfbm9uaHVnZSl9LAotCXtOQU1FKCJu ZGlydHlfaHVnZSIpLAotCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1bGxfc2xhYnNf bmRpcnR5X2h1Z2UpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qgc3RhdHNf YXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25vZGVbXSA9IHsKLQl7TkFNRSgibnBhZ2Vz bGFic19ub25odWdlIiksCi0JCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xh YnNfbnBhZ2VzbGFic19ub25odWdlKX0sCi0Je05BTUUoIm5wYWdlc2xhYnNfaHVnZSIpLAotCQlD VEwoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25wYWdlc2xhYnNfaHVnZSl9 LAotCXtOQU1FKCJuYWN0aXZlX25vbmh1Z2UiKSwKLQkJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9z aGFyZF9lbXB0eV9zbGFic19uYWN0aXZlX25vbmh1Z2UpfSwKLQl7TkFNRSgibmFjdGl2ZV9odWdl IiksCi0JCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbmFjdGl2ZV9o dWdlKX0sCi0Je05BTUUoIm5kaXJ0eV9ub25odWdlIiksCi0JCUNUTChzdGF0c19hcmVuYXNfaV9o cGFfc2hhcmRfZW1wdHlfc2xhYnNfbmRpcnR5X25vbmh1Z2UpfSwKLQl7TkFNRSgibmRpcnR5X2h1 Z2UiKSwKLQkJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9lbXB0eV9zbGFic19uZGlydHlf aHVnZSl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdGF0c19hcmVuYXNf aV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qX25vZGVbXSA9IHsKLQl7TkFNRSgibnBhZ2VzbGFi c19ub25odWdlIiksCi0JCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFi c19qX25wYWdlc2xhYnNfbm9uaHVnZSl9LAotCXtOQU1FKCJucGFnZXNsYWJzX2h1Z2UiKSwKLQkJ Q1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbnBhZ2VzbGFic19o dWdlKX0sCi0Je05BTUUoIm5hY3RpdmVfbm9uaHVnZSIpLAotCQlDVEwoc3RhdHNfYXJlbmFzX2lf aHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9uYWN0aXZlX25vbmh1Z2UpfSwKLQl7TkFNRSgibmFj dGl2ZV9odWdlIiksCi0JCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFi c19qX25hY3RpdmVfaHVnZSl9LAotCXtOQU1FKCJuZGlydHlfbm9uaHVnZSIpLAotCQlDVEwoc3Rh dHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9uZGlydHlfbm9uaHVnZSl9LAot CXtOQU1FKCJuZGlydHlfaHVnZSIpLAotCQlDVEwoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25v bmZ1bGxfc2xhYnNfal9uZGlydHlfaHVnZSl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVk X25vZGVfdCBzdXBlcl9zdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qX25v ZGVbXSA9IHsKLQl7TkFNRSgiIiksCi0JCUNISUxEKG5hbWVkLCBzdGF0c19hcmVuYXNfaV9ocGFf c2hhcmRfbm9uZnVsbF9zbGFic19qKX0KLX07Ci0KLXN0YXRpYyBjb25zdCBjdGxfaW5kZXhlZF9u b2RlX3Qgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfbm9kZVtdID0KLXsK LQl7SU5ERVgoc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfail9Ci19Owot Ci1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRf bm9kZVtdID0gewotCXtOQU1FKCJmdWxsX3NsYWJzIiksCUNISUxEKG5hbWVkLAotCSAgICBzdGF0 c19hcmVuYXNfaV9ocGFfc2hhcmRfZnVsbF9zbGFicyl9LAotCXtOQU1FKCJlbXB0eV9zbGFicyIp LAlDSElMRChuYW1lZCwKLQkgICAgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJz KX0sCi0Je05BTUUoIm5vbmZ1bGxfc2xhYnMiKSwJQ0hJTEQoaW5kZXhlZCwKLQkgICAgc3RhdHNf YXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnMpfSwKLQotCXtOQU1FKCJucHVyZ2VfcGFz c2VzIiksCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbnB1cmdlX3Bhc3Nlcyl9LAotCXtO QU1FKCJucHVyZ2VzIiksCUNUTChzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbnB1cmdlcyl9LAot CXtOQU1FKCJuaHVnaWZpZXMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9uaHVnaWZp ZXMpfSwKLQl7TkFNRSgibmRlaHVnaWZpZXMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2hwYV9zaGFy ZF9uZGVodWdpZmllcyl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdGF0 c19hcmVuYXNfaV9ub2RlW10gPSB7Ci0Je05BTUUoIm50aHJlYWRzIiksCUNUTChzdGF0c19hcmVu YXNfaV9udGhyZWFkcyl9LAotCXtOQU1FKCJ1cHRpbWUiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX3Vw dGltZSl9LAotCXtOQU1FKCJkc3MiKSwJCUNUTChzdGF0c19hcmVuYXNfaV9kc3MpfSwKLQl7TkFN RSgiZGlydHlfZGVjYXlfbXMiKSwgQ1RMKHN0YXRzX2FyZW5hc19pX2RpcnR5X2RlY2F5X21zKX0s Ci0Je05BTUUoIm11enp5X2RlY2F5X21zIiksIENUTChzdGF0c19hcmVuYXNfaV9tdXp6eV9kZWNh eV9tcyl9LAotCXtOQU1FKCJwYWN0aXZlIiksCUNUTChzdGF0c19hcmVuYXNfaV9wYWN0aXZlKX0s Ci0Je05BTUUoInBkaXJ0eSIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfcGRpcnR5KX0sCi0Je05BTUUo InBtdXp6eSIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfcG11enp5KX0sCi0Je05BTUUoIm1hcHBlZCIp LAlDVEwoc3RhdHNfYXJlbmFzX2lfbWFwcGVkKX0sCi0Je05BTUUoInJldGFpbmVkIiksCUNUTChz dGF0c19hcmVuYXNfaV9yZXRhaW5lZCl9LAotCXtOQU1FKCJleHRlbnRfYXZhaWwiKSwJQ1RMKHN0 YXRzX2FyZW5hc19pX2V4dGVudF9hdmFpbCl9LAotCXtOQU1FKCJkaXJ0eV9ucHVyZ2UiKSwJQ1RM KHN0YXRzX2FyZW5hc19pX2RpcnR5X25wdXJnZSl9LAotCXtOQU1FKCJkaXJ0eV9ubWFkdmlzZSIp LCBDVEwoc3RhdHNfYXJlbmFzX2lfZGlydHlfbm1hZHZpc2UpfSwKLQl7TkFNRSgiZGlydHlfcHVy Z2VkIiksCUNUTChzdGF0c19hcmVuYXNfaV9kaXJ0eV9wdXJnZWQpfSwKLQl7TkFNRSgibXV6enlf bnB1cmdlIiksCUNUTChzdGF0c19hcmVuYXNfaV9tdXp6eV9ucHVyZ2UpfSwKLQl7TkFNRSgibXV6 enlfbm1hZHZpc2UiKSwgQ1RMKHN0YXRzX2FyZW5hc19pX211enp5X25tYWR2aXNlKX0sCi0Je05B TUUoIm11enp5X3B1cmdlZCIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfbXV6enlfcHVyZ2VkKX0sCi0J e05BTUUoImJhc2UiKSwJCUNUTChzdGF0c19hcmVuYXNfaV9iYXNlKX0sCi0Je05BTUUoImludGVy bmFsIiksCUNUTChzdGF0c19hcmVuYXNfaV9pbnRlcm5hbCl9LAotCXtOQU1FKCJtZXRhZGF0YV90 aHAiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX21ldGFkYXRhX3RocCl9LAotCXtOQU1FKCJ0Y2FjaGVf Ynl0ZXMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX3RjYWNoZV9ieXRlcyl9LAotCXtOQU1FKCJ0Y2Fj aGVfc3Rhc2hlZF9ieXRlcyIpLAotCSAgICBDVEwoc3RhdHNfYXJlbmFzX2lfdGNhY2hlX3N0YXNo ZWRfYnl0ZXMpfSwKLQl7TkFNRSgicmVzaWRlbnQiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX3Jlc2lk ZW50KX0sCi0Je05BTUUoImFiYW5kb25lZF92bSIpLAlDVEwoc3RhdHNfYXJlbmFzX2lfYWJhbmRv bmVkX3ZtKX0sCi0Je05BTUUoImhwYV9zZWNfYnl0ZXMiKSwJQ1RMKHN0YXRzX2FyZW5hc19pX2hw YV9zZWNfYnl0ZXMpfSwKLQl7TkFNRSgic21hbGwiKSwJCUNISUxEKG5hbWVkLCBzdGF0c19hcmVu YXNfaV9zbWFsbCl9LAotCXtOQU1FKCJsYXJnZSIpLAkJQ0hJTEQobmFtZWQsIHN0YXRzX2FyZW5h c19pX2xhcmdlKX0sCi0Je05BTUUoImJpbnMiKSwJCUNISUxEKGluZGV4ZWQsIHN0YXRzX2FyZW5h c19pX2JpbnMpfSwKLQl7TkFNRSgibGV4dGVudHMiKSwJQ0hJTEQoaW5kZXhlZCwgc3RhdHNfYXJl bmFzX2lfbGV4dGVudHMpfSwKLQl7TkFNRSgiZXh0ZW50cyIpLAlDSElMRChpbmRleGVkLCBzdGF0 c19hcmVuYXNfaV9leHRlbnRzKX0sCi0Je05BTUUoIm11dGV4ZXMiKSwJQ0hJTEQobmFtZWQsIHN0 YXRzX2FyZW5hc19pX211dGV4ZXMpfSwKLQl7TkFNRSgiaHBhX3NoYXJkIiksCUNISUxEKG5hbWVk LCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmQpfQotfTsKLXN0YXRpYyBjb25zdCBjdGxfbmFtZWRf bm9kZV90IHN1cGVyX3N0YXRzX2FyZW5hc19pX25vZGVbXSA9IHsKLQl7TkFNRSgiIiksCQlDSElM RChuYW1lZCwgc3RhdHNfYXJlbmFzX2kpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0bF9pbmRleGVk X25vZGVfdCBzdGF0c19hcmVuYXNfbm9kZVtdID0gewotCXtJTkRFWChzdGF0c19hcmVuYXNfaSl9 Ci19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBzdGF0c19iYWNrZ3JvdW5kX3Ro cmVhZF9ub2RlW10gPSB7Ci0Je05BTUUoIm51bV90aHJlYWRzIiksCUNUTChzdGF0c19iYWNrZ3Jv dW5kX3RocmVhZF9udW1fdGhyZWFkcyl9LAotCXtOQU1FKCJudW1fcnVucyIpLAlDVEwoc3RhdHNf YmFja2dyb3VuZF90aHJlYWRfbnVtX3J1bnMpfSwKLQl7TkFNRSgicnVuX2ludGVydmFsIiksCUNU TChzdGF0c19iYWNrZ3JvdW5kX3RocmVhZF9ydW5faW50ZXJ2YWwpfQotfTsKLQotI2RlZmluZSBP UChtdHgpIE1VVEVYX1BST0ZfREFUQV9OT0RFKG11dGV4ZXNfIyNtdHgpCi1NVVRFWF9QUk9GX0dM T0JBTF9NVVRFWEVTCi0jdW5kZWYgT1AKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qg c3RhdHNfbXV0ZXhlc19ub2RlW10gPSB7Ci0jZGVmaW5lIE9QKG10eCkge05BTUUoI210eCksIENI SUxEKG5hbWVkLCBzdGF0c19tdXRleGVzXyMjbXR4KX0sCi1NVVRFWF9QUk9GX0dMT0JBTF9NVVRF WEVTCi0jdW5kZWYgT1AKLQl7TkFNRSgicmVzZXQiKSwJCUNUTChzdGF0c19tdXRleGVzX3Jlc2V0 KX0KLX07Ci0jdW5kZWYgTVVURVhfUFJPRl9EQVRBX05PREUKLQotc3RhdGljIGNvbnN0IGN0bF9u YW1lZF9ub2RlX3Qgc3RhdHNfbm9kZVtdID0gewotCXtOQU1FKCJhbGxvY2F0ZWQiKSwJQ1RMKHN0 YXRzX2FsbG9jYXRlZCl9LAotCXtOQU1FKCJhY3RpdmUiKSwJQ1RMKHN0YXRzX2FjdGl2ZSl9LAot CXtOQU1FKCJtZXRhZGF0YSIpLAlDVEwoc3RhdHNfbWV0YWRhdGEpfSwKLQl7TkFNRSgibWV0YWRh dGFfdGhwIiksCUNUTChzdGF0c19tZXRhZGF0YV90aHApfSwKLQl7TkFNRSgicmVzaWRlbnQiKSwJ Q1RMKHN0YXRzX3Jlc2lkZW50KX0sCi0Je05BTUUoIm1hcHBlZCIpLAlDVEwoc3RhdHNfbWFwcGVk KX0sCi0Je05BTUUoInJldGFpbmVkIiksCUNUTChzdGF0c19yZXRhaW5lZCl9LAotCXtOQU1FKCJi YWNrZ3JvdW5kX3RocmVhZCIpLAotCSBDSElMRChuYW1lZCwgc3RhdHNfYmFja2dyb3VuZF90aHJl YWQpfSwKLQl7TkFNRSgibXV0ZXhlcyIpLAlDSElMRChuYW1lZCwgc3RhdHNfbXV0ZXhlcyl9LAot CXtOQU1FKCJhcmVuYXMiKSwJQ0hJTEQoaW5kZXhlZCwgc3RhdHNfYXJlbmFzKX0sCi0Je05BTUUo Inplcm9fcmVhbGxvY3MiKSwJQ1RMKHN0YXRzX3plcm9fcmVhbGxvY3MpfSwKLX07Ci0KLXN0YXRp YyBjb25zdCBjdGxfbmFtZWRfbm9kZV90IGV4cGVyaW1lbnRhbF9ob29rc19ub2RlW10gPSB7Ci0J e05BTUUoImluc3RhbGwiKSwJQ1RMKGV4cGVyaW1lbnRhbF9ob29rc19pbnN0YWxsKX0sCi0Je05B TUUoInJlbW92ZSIpLAlDVEwoZXhwZXJpbWVudGFsX2hvb2tzX3JlbW92ZSl9LAotCXtOQU1FKCJw cm9mX2JhY2t0cmFjZSIpLAlDVEwoZXhwZXJpbWVudGFsX2hvb2tzX3Byb2ZfYmFja3RyYWNlKX0s Ci0Je05BTUUoInByb2ZfZHVtcCIpLAlDVEwoZXhwZXJpbWVudGFsX2hvb2tzX3Byb2ZfZHVtcCl9 LAotCXtOQU1FKCJzYWZldHlfY2hlY2tfYWJvcnQiKSwJQ1RMKGV4cGVyaW1lbnRhbF9ob29rc19z YWZldHlfY2hlY2tfYWJvcnQpfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90 IGV4cGVyaW1lbnRhbF90aHJlYWRfbm9kZVtdID0gewotCXtOQU1FKCJhY3Rpdml0eV9jYWxsYmFj ayIpLAotCQlDVEwoZXhwZXJpbWVudGFsX3RocmVhZF9hY3Rpdml0eV9jYWxsYmFjayl9Ci19Owot Ci1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBleHBlcmltZW50YWxfdXRpbGl6YXRpb25f bm9kZVtdID0gewotCXtOQU1FKCJxdWVyeSIpLAkJQ1RMKGV4cGVyaW1lbnRhbF91dGlsaXphdGlv bl9xdWVyeSl9LAotCXtOQU1FKCJiYXRjaF9xdWVyeSIpLAlDVEwoZXhwZXJpbWVudGFsX3V0aWxp emF0aW9uX2JhdGNoX3F1ZXJ5KX0KLX07Ci0KLXN0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90 IGV4cGVyaW1lbnRhbF9hcmVuYXNfaV9ub2RlW10gPSB7Ci0Je05BTUUoInBhY3RpdmVwIiksCUNU TChleHBlcmltZW50YWxfYXJlbmFzX2lfcGFjdGl2ZXApfQotfTsKLXN0YXRpYyBjb25zdCBjdGxf bmFtZWRfbm9kZV90IHN1cGVyX2V4cGVyaW1lbnRhbF9hcmVuYXNfaV9ub2RlW10gPSB7Ci0Je05B TUUoIiIpLAkJQ0hJTEQobmFtZWQsIGV4cGVyaW1lbnRhbF9hcmVuYXNfaSl9Ci19OwotCi1zdGF0 aWMgY29uc3QgY3RsX2luZGV4ZWRfbm9kZV90IGV4cGVyaW1lbnRhbF9hcmVuYXNfbm9kZVtdID0g ewotCXtJTkRFWChleHBlcmltZW50YWxfYXJlbmFzX2kpfQotfTsKLQotc3RhdGljIGNvbnN0IGN0 bF9uYW1lZF9ub2RlX3QgZXhwZXJpbWVudGFsX3Byb2ZfcmVjZW50X25vZGVbXSA9IHsKLQl7TkFN RSgiYWxsb2NfbWF4IiksCUNUTChleHBlcmltZW50YWxfcHJvZl9yZWNlbnRfYWxsb2NfbWF4KX0s Ci0Je05BTUUoImFsbG9jX2R1bXAiKSwJQ1RMKGV4cGVyaW1lbnRhbF9wcm9mX3JlY2VudF9hbGxv Y19kdW1wKX0sCi19OwotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCBleHBlcmltZW50 YWxfbm9kZVtdID0gewotCXtOQU1FKCJob29rcyIpLAkJQ0hJTEQobmFtZWQsIGV4cGVyaW1lbnRh bF9ob29rcyl9LAotCXtOQU1FKCJ1dGlsaXphdGlvbiIpLAlDSElMRChuYW1lZCwgZXhwZXJpbWVu dGFsX3V0aWxpemF0aW9uKX0sCi0Je05BTUUoImFyZW5hcyIpLAlDSElMRChpbmRleGVkLCBleHBl cmltZW50YWxfYXJlbmFzKX0sCi0Je05BTUUoImFyZW5hc19jcmVhdGVfZXh0IiksCUNUTChleHBl cmltZW50YWxfYXJlbmFzX2NyZWF0ZV9leHQpfSwKLQl7TkFNRSgicHJvZl9yZWNlbnQiKSwJQ0hJ TEQobmFtZWQsIGV4cGVyaW1lbnRhbF9wcm9mX3JlY2VudCl9LAotCXtOQU1FKCJiYXRjaF9hbGxv YyIpLAlDVEwoZXhwZXJpbWVudGFsX2JhdGNoX2FsbG9jKX0sCi0Je05BTUUoInRocmVhZCIpLAlD SElMRChuYW1lZCwgZXhwZXJpbWVudGFsX3RocmVhZCl9Ci19OwotCi1zdGF0aWMgY29uc3QgY3Rs X25hbWVkX25vZGVfdAlyb290X25vZGVbXSA9IHsKLQl7TkFNRSgidmVyc2lvbiIpLAlDVEwodmVy c2lvbil9LAotCXtOQU1FKCJlcG9jaCIpLAkJQ1RMKGVwb2NoKX0sCi0Je05BTUUoImJhY2tncm91 bmRfdGhyZWFkIiksCUNUTChiYWNrZ3JvdW5kX3RocmVhZCl9LAotCXtOQU1FKCJtYXhfYmFja2dy b3VuZF90aHJlYWRzIiksCUNUTChtYXhfYmFja2dyb3VuZF90aHJlYWRzKX0sCi0Je05BTUUoInRo cmVhZCIpLAlDSElMRChuYW1lZCwgdGhyZWFkKX0sCi0Je05BTUUoImNvbmZpZyIpLAlDSElMRChu YW1lZCwgY29uZmlnKX0sCi0Je05BTUUoIm9wdCIpLAkJQ0hJTEQobmFtZWQsIG9wdCl9LAotCXtO QU1FKCJ0Y2FjaGUiKSwJQ0hJTEQobmFtZWQsIHRjYWNoZSl9LAotCXtOQU1FKCJhcmVuYSIpLAkJ Q0hJTEQoaW5kZXhlZCwgYXJlbmEpfSwKLQl7TkFNRSgiYXJlbmFzIiksCUNISUxEKG5hbWVkLCBh cmVuYXMpfSwKLQl7TkFNRSgicHJvZiIpLAkJQ0hJTEQobmFtZWQsIHByb2YpfSwKLQl7TkFNRSgi c3RhdHMiKSwJCUNISUxEKG5hbWVkLCBzdGF0cyl9LAotCXtOQU1FKCJleHBlcmltZW50YWwiKSwJ Q0hJTEQobmFtZWQsIGV4cGVyaW1lbnRhbCl9Ci19Owotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9u b2RlX3Qgc3VwZXJfcm9vdF9ub2RlW10gPSB7Ci0Je05BTUUoIiIpLAkJQ0hJTEQobmFtZWQsIHJv b3QpfQotfTsKLQotI3VuZGVmIE5BTUUKLSN1bmRlZiBDSElMRAotI3VuZGVmIENUTAotI3VuZGVm IElOREVYCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTZXRzICpkc3QgKyAq c3JjIG5vbi1hdG9taWNhbGx5LiAgVGhpcyBpcyBzYWZlLCBzaW5jZSBldmVyeXRoaW5nIGlzCi0g KiBzeW5jaHJvbml6ZWQgYnkgdGhlIGN0bCBtdXRleC4KLSAqLwotc3RhdGljIHZvaWQKLWN0bF9h Y2N1bV9sb2NrZWRfdTY0KGxvY2tlZF91NjRfdCAqZHN0LCBsb2NrZWRfdTY0X3QgKnNyYykgewot CWxvY2tlZF9pbmNfdTY0X3Vuc3luY2hyb25pemVkKGRzdCwKLQkgICAgbG9ja2VkX3JlYWRfdTY0 X3Vuc3luY2hyb25pemVkKHNyYykpOwotfQotCi1zdGF0aWMgdm9pZAotY3RsX2FjY3VtX2F0b21p Y196dShhdG9taWNfenVfdCAqZHN0LCBhdG9taWNfenVfdCAqc3JjKSB7Ci0Jc2l6ZV90IGN1cl9k c3QgPSBhdG9taWNfbG9hZF96dShkc3QsIEFUT01JQ19SRUxBWEVEKTsKLQlzaXplX3QgY3VyX3Ny YyA9IGF0b21pY19sb2FkX3p1KHNyYywgQVRPTUlDX1JFTEFYRUQpOwotCWF0b21pY19zdG9yZV96 dShkc3QsIGN1cl9kc3QgKyBjdXJfc3JjLCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLS8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0KLXN0YXRpYyB1bnNpZ25lZAotYXJlbmFzX2kyYV9pbXBsKHNpemVf dCBpLCBib29sIGNvbXBhdCwgYm9vbCB2YWxpZGF0ZSkgewotCXVuc2lnbmVkIGE7Ci0KLQlzd2l0 Y2ggKGkpIHsKLQljYXNlIE1BTExDVExfQVJFTkFTX0FMTDoKLQkJYSA9IDA7Ci0JCWJyZWFrOwot CWNhc2UgTUFMTENUTF9BUkVOQVNfREVTVFJPWUVEOgotCQlhID0gMTsKLQkJYnJlYWs7Ci0JZGVm YXVsdDoKLQkJaWYgKGNvbXBhdCAmJiBpID09IGN0bF9hcmVuYXMtPm5hcmVuYXMpIHsKLQkJCS8q Ci0JCQkgKiBQcm92aWRlIGRlcHJlY2F0ZWQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IKLQkJ CSAqIGFjY2Vzc2luZyB0aGUgbWVyZ2VkIHN0YXRzIGF0IGluZGV4IG5hcmVuYXMgcmF0aGVyCi0J CQkgKiB0aGFuIHZpYSBNQUxMQ1RMX0FSRU5BU19BTEwuICBUaGlzIGlzIHNjaGVkdWxlZCBmb3IK LQkJCSAqIHJlbW92YWwgaW4gNi4wLjAuCi0JCQkgKi8KLQkJCWEgPSAwOwotCQl9IGVsc2UgaWYg KHZhbGlkYXRlICYmIGkgPj0gY3RsX2FyZW5hcy0+bmFyZW5hcykgewotCQkJYSA9IFVJTlRfTUFY OwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5ldmVyIGJl IGNhbGxlZCBmb3IgYW4gaW5kZXgKLQkJCSAqIG1vcmUgdGhhbiBvbmUgcGFzdCB0aGUgcmFuZ2Ug b2YgaW5kaWNlcyB0aGF0IGhhdmUKLQkJCSAqIGluaXRpYWxpemVkIGN0bCBkYXRhLgotCQkJICov Ci0JCQlhc3NlcnQoaSA8IGN0bF9hcmVuYXMtPm5hcmVuYXMgfHwgKCF2YWxpZGF0ZSAmJiBpID09 Ci0JCQkgICAgY3RsX2FyZW5hcy0+bmFyZW5hcykpOwotCQkJYSA9ICh1bnNpZ25lZClpICsgMjsK LQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gYTsKLX0KLQotc3RhdGljIHVuc2lnbmVkCi1h cmVuYXNfaTJhKHNpemVfdCBpKSB7Ci0JcmV0dXJuIGFyZW5hc19pMmFfaW1wbChpLCB0cnVlLCBm YWxzZSk7Ci19Ci0KLXN0YXRpYyBjdGxfYXJlbmFfdCAqCi1hcmVuYXNfaV9pbXBsKHRzZF90ICp0 c2QsIHNpemVfdCBpLCBib29sIGNvbXBhdCwgYm9vbCBpbml0KSB7Ci0JY3RsX2FyZW5hX3QgKnJl dDsKLQotCWFzc2VydCghY29tcGF0IHx8ICFpbml0KTsKLQotCXJldCA9IGN0bF9hcmVuYXMtPmFy ZW5hc1thcmVuYXNfaTJhX2ltcGwoaSwgY29tcGF0LCBmYWxzZSldOwotCWlmIChpbml0ICYmIHJl dCA9PSBOVUxMKSB7Ci0JCWlmIChjb25maWdfc3RhdHMpIHsKLQkJCXN0cnVjdCBjb250YWluZXJf cyB7Ci0JCQkJY3RsX2FyZW5hX3QJCWN0bF9hcmVuYTsKLQkJCQljdGxfYXJlbmFfc3RhdHNfdAlh c3RhdHM7Ci0JCQl9OwotCQkJc3RydWN0IGNvbnRhaW5lcl9zICpjb250ID0KLQkJCSAgICAoc3Ry dWN0IGNvbnRhaW5lcl9zICopYmFzZV9hbGxvYyh0c2RfdHNkbih0c2QpLAotCQkJICAgIGIwZ2V0 KCksIHNpemVvZihzdHJ1Y3QgY29udGFpbmVyX3MpLCBRVUFOVFVNKTsKLQkJCWlmIChjb250ID09 IE5VTEwpIHsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCXJldCA9ICZjb250LT5jdGxfYXJl bmE7Ci0JCQlyZXQtPmFzdGF0cyA9ICZjb250LT5hc3RhdHM7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQg PSAoY3RsX2FyZW5hX3QgKiliYXNlX2FsbG9jKHRzZF90c2RuKHRzZCksIGIwZ2V0KCksCi0JCQkg ICAgc2l6ZW9mKGN0bF9hcmVuYV90KSwgUVVBTlRVTSk7Ci0JCQlpZiAocmV0ID09IE5VTEwpIHsK LQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJfQotCQlyZXQtPmFyZW5hX2luZCA9ICh1bnNpZ25l ZClpOwotCQljdGxfYXJlbmFzLT5hcmVuYXNbYXJlbmFzX2kyYV9pbXBsKGksIGNvbXBhdCwgZmFs c2UpXSA9IHJldDsKLQl9Ci0KLQlhc3NlcnQocmV0ID09IE5VTEwgfHwgYXJlbmFzX2kyYShyZXQt PmFyZW5hX2luZCkgPT0gYXJlbmFzX2kyYShpKSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IGN0bF9hcmVuYV90ICoKLWFyZW5hc19pKHNpemVfdCBpKSB7Ci0JY3RsX2FyZW5hX3QgKnJldCA9 IGFyZW5hc19pX2ltcGwodHNkX2ZldGNoKCksIGksIHRydWUsIGZhbHNlKTsKLQlhc3NlcnQocmV0 ICE9IE5VTEwpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jdGxfYXJlbmFfY2xl YXIoY3RsX2FyZW5hX3QgKmN0bF9hcmVuYSkgewotCWN0bF9hcmVuYS0+bnRocmVhZHMgPSAwOwot CWN0bF9hcmVuYS0+ZHNzID0gZHNzX3ByZWNfbmFtZXNbZHNzX3ByZWNfbGltaXRdOwotCWN0bF9h cmVuYS0+ZGlydHlfZGVjYXlfbXMgPSAtMTsKLQljdGxfYXJlbmEtPm11enp5X2RlY2F5X21zID0g LTE7Ci0JY3RsX2FyZW5hLT5wYWN0aXZlID0gMDsKLQljdGxfYXJlbmEtPnBkaXJ0eSA9IDA7Ci0J Y3RsX2FyZW5hLT5wbXV6enkgPSAwOwotCWlmIChjb25maWdfc3RhdHMpIHsKLQkJbWVtc2V0KCZj dGxfYXJlbmEtPmFzdGF0cy0+YXN0YXRzLCAwLCBzaXplb2YoYXJlbmFfc3RhdHNfdCkpOwotCQlj dGxfYXJlbmEtPmFzdGF0cy0+YWxsb2NhdGVkX3NtYWxsID0gMDsKLQkJY3RsX2FyZW5hLT5hc3Rh dHMtPm5tYWxsb2Nfc21hbGwgPSAwOwotCQljdGxfYXJlbmEtPmFzdGF0cy0+bmRhbGxvY19zbWFs bCA9IDA7Ci0JCWN0bF9hcmVuYS0+YXN0YXRzLT5ucmVxdWVzdHNfc21hbGwgPSAwOwotCQljdGxf YXJlbmEtPmFzdGF0cy0+bmZpbGxzX3NtYWxsID0gMDsKLQkJY3RsX2FyZW5hLT5hc3RhdHMtPm5m bHVzaGVzX3NtYWxsID0gMDsKLQkJbWVtc2V0KGN0bF9hcmVuYS0+YXN0YXRzLT5ic3RhdHMsIDAs IFNDX05CSU5TICoKLQkJICAgIHNpemVvZihiaW5fc3RhdHNfZGF0YV90KSk7Ci0JCW1lbXNldChj dGxfYXJlbmEtPmFzdGF0cy0+bHN0YXRzLCAwLCAoU0NfTlNJWkVTIC0gU0NfTkJJTlMpICoKLQkJ ICAgIHNpemVvZihhcmVuYV9zdGF0c19sYXJnZV90KSk7Ci0JCW1lbXNldChjdGxfYXJlbmEtPmFz dGF0cy0+ZXN0YXRzLCAwLCBTQ19OUFNJWkVTICoKLQkJICAgIHNpemVvZihwYWNfZXN0YXRzX3Qp KTsKLQkJbWVtc2V0KCZjdGxfYXJlbmEtPmFzdGF0cy0+aHBhc3RhdHMsIDAsCi0JCSAgICBzaXpl b2YoaHBhX3NoYXJkX3N0YXRzX3QpKTsKLQkJbWVtc2V0KCZjdGxfYXJlbmEtPmFzdGF0cy0+c2Vj c3RhdHMsIDAsCi0JCSAgICBzaXplb2Yoc2VjX3N0YXRzX3QpKTsKLQl9Ci19Ci0KLXN0YXRpYyB2 b2lkCi1jdGxfYXJlbmFfc3RhdHNfYW1lcmdlKHRzZG5fdCAqdHNkbiwgY3RsX2FyZW5hX3QgKmN0 bF9hcmVuYSwgYXJlbmFfdCAqYXJlbmEpIHsKLQl1bnNpZ25lZCBpOwotCi0JaWYgKGNvbmZpZ19z dGF0cykgewotCQlhcmVuYV9zdGF0c19tZXJnZSh0c2RuLCBhcmVuYSwgJmN0bF9hcmVuYS0+bnRo cmVhZHMsCi0JCSAgICAmY3RsX2FyZW5hLT5kc3MsICZjdGxfYXJlbmEtPmRpcnR5X2RlY2F5X21z LAotCQkgICAgJmN0bF9hcmVuYS0+bXV6enlfZGVjYXlfbXMsICZjdGxfYXJlbmEtPnBhY3RpdmUs Ci0JCSAgICAmY3RsX2FyZW5hLT5wZGlydHksICZjdGxfYXJlbmEtPnBtdXp6eSwKLQkJICAgICZj dGxfYXJlbmEtPmFzdGF0cy0+YXN0YXRzLCBjdGxfYXJlbmEtPmFzdGF0cy0+YnN0YXRzLAotCQkg ICAgY3RsX2FyZW5hLT5hc3RhdHMtPmxzdGF0cywgY3RsX2FyZW5hLT5hc3RhdHMtPmVzdGF0cywK LQkJICAgICZjdGxfYXJlbmEtPmFzdGF0cy0+aHBhc3RhdHMsICZjdGxfYXJlbmEtPmFzdGF0cy0+ c2Vjc3RhdHMpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBTQ19OQklOUzsgaSsrKSB7Ci0JCQliaW5f c3RhdHNfdCAqYnN0YXRzID0KLQkJCSAgICAmY3RsX2FyZW5hLT5hc3RhdHMtPmJzdGF0c1tpXS5z dGF0c19kYXRhOwotCQkJY3RsX2FyZW5hLT5hc3RhdHMtPmFsbG9jYXRlZF9zbWFsbCArPSBic3Rh dHMtPmN1cnJlZ3MgKgotCQkJICAgIHN6X2luZGV4MnNpemUoaSk7Ci0JCQljdGxfYXJlbmEtPmFz dGF0cy0+bm1hbGxvY19zbWFsbCArPSBic3RhdHMtPm5tYWxsb2M7Ci0JCQljdGxfYXJlbmEtPmFz dGF0cy0+bmRhbGxvY19zbWFsbCArPSBic3RhdHMtPm5kYWxsb2M7Ci0JCQljdGxfYXJlbmEtPmFz dGF0cy0+bnJlcXVlc3RzX3NtYWxsICs9IGJzdGF0cy0+bnJlcXVlc3RzOwotCQkJY3RsX2FyZW5h LT5hc3RhdHMtPm5maWxsc19zbWFsbCArPSBic3RhdHMtPm5maWxsczsKLQkJCWN0bF9hcmVuYS0+ YXN0YXRzLT5uZmx1c2hlc19zbWFsbCArPSBic3RhdHMtPm5mbHVzaGVzOwotCQl9Ci0JfSBlbHNl IHsKLQkJYXJlbmFfYmFzaWNfc3RhdHNfbWVyZ2UodHNkbiwgYXJlbmEsICZjdGxfYXJlbmEtPm50 aHJlYWRzLAotCQkgICAgJmN0bF9hcmVuYS0+ZHNzLCAmY3RsX2FyZW5hLT5kaXJ0eV9kZWNheV9t cywKLQkJICAgICZjdGxfYXJlbmEtPm11enp5X2RlY2F5X21zLCAmY3RsX2FyZW5hLT5wYWN0aXZl LAotCQkgICAgJmN0bF9hcmVuYS0+cGRpcnR5LCAmY3RsX2FyZW5hLT5wbXV6enkpOwotCX0KLX0K LQotc3RhdGljIHZvaWQKLWN0bF9hcmVuYV9zdGF0c19zZG1lcmdlKGN0bF9hcmVuYV90ICpjdGxf c2RhcmVuYSwgY3RsX2FyZW5hX3QgKmN0bF9hcmVuYSwKLSAgICBib29sIGRlc3Ryb3llZCkgewot CXVuc2lnbmVkIGk7Ci0KLQlpZiAoIWRlc3Ryb3llZCkgewotCQljdGxfc2RhcmVuYS0+bnRocmVh ZHMgKz0gY3RsX2FyZW5hLT5udGhyZWFkczsKLQkJY3RsX3NkYXJlbmEtPnBhY3RpdmUgKz0gY3Rs X2FyZW5hLT5wYWN0aXZlOwotCQljdGxfc2RhcmVuYS0+cGRpcnR5ICs9IGN0bF9hcmVuYS0+cGRp cnR5OwotCQljdGxfc2RhcmVuYS0+cG11enp5ICs9IGN0bF9hcmVuYS0+cG11enp5OwotCX0gZWxz ZSB7Ci0JCWFzc2VydChjdGxfYXJlbmEtPm50aHJlYWRzID09IDApOwotCQlhc3NlcnQoY3RsX2Fy ZW5hLT5wYWN0aXZlID09IDApOwotCQlhc3NlcnQoY3RsX2FyZW5hLT5wZGlydHkgPT0gMCk7Ci0J CWFzc2VydChjdGxfYXJlbmEtPnBtdXp6eSA9PSAwKTsKLQl9Ci0KLQlpZiAoY29uZmlnX3N0YXRz KSB7Ci0JCWN0bF9hcmVuYV9zdGF0c190ICpzZHN0YXRzID0gY3RsX3NkYXJlbmEtPmFzdGF0czsK LQkJY3RsX2FyZW5hX3N0YXRzX3QgKmFzdGF0cyA9IGN0bF9hcmVuYS0+YXN0YXRzOwotCi0JCWlm ICghZGVzdHJveWVkKSB7Ci0JCQlzZHN0YXRzLT5hc3RhdHMubWFwcGVkICs9IGFzdGF0cy0+YXN0 YXRzLm1hcHBlZDsKLQkJCXNkc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMu cmV0YWluZWQKLQkJCSAgICArPSBhc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3Rh dHMucmV0YWluZWQ7Ci0JCQlzZHN0YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMuZWRhdGFfYXZh aWwKLQkJCSAgICArPSBhc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5lZGF0YV9hdmFpbDsK LQkJfQotCi0JCWN0bF9hY2N1bV9sb2NrZWRfdTY0KAotCQkgICAgJnNkc3RhdHMtPmFzdGF0cy5w YV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuZGVjYXlfZGlydHkubnB1cmdlLAotCQkgICAgJmFzdGF0 cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9kaXJ0eS5ucHVyZ2UpOwot CQljdGxfYWNjdW1fbG9ja2VkX3U2NCgKLQkJICAgICZzZHN0YXRzLT5hc3RhdHMucGFfc2hhcmRf c3RhdHMucGFjX3N0YXRzLmRlY2F5X2RpcnR5Lm5tYWR2aXNlLAotCQkgICAgJmFzdGF0cy0+YXN0 YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9kaXJ0eS5ubWFkdmlzZSk7Ci0JCWN0 bF9hY2N1bV9sb2NrZWRfdTY0KAotCQkgICAgJnNkc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0 cy5wYWNfc3RhdHMuZGVjYXlfZGlydHkucHVyZ2VkLAotCQkgICAgJmFzdGF0cy0+YXN0YXRzLnBh X3NoYXJkX3N0YXRzLnBhY19zdGF0cy5kZWNheV9kaXJ0eS5wdXJnZWQpOwotCi0JCWN0bF9hY2N1 bV9sb2NrZWRfdTY0KAotCQkgICAgJnNkc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNf c3RhdHMuZGVjYXlfbXV6enkubnB1cmdlLAotCQkgICAgJmFzdGF0cy0+YXN0YXRzLnBhX3NoYXJk X3N0YXRzLnBhY19zdGF0cy5kZWNheV9tdXp6eS5ucHVyZ2UpOwotCQljdGxfYWNjdW1fbG9ja2Vk X3U2NCgKLQkJICAgICZzZHN0YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmRl Y2F5X211enp5Lm5tYWR2aXNlLAotCQkgICAgJmFzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRz LnBhY19zdGF0cy5kZWNheV9tdXp6eS5ubWFkdmlzZSk7Ci0JCWN0bF9hY2N1bV9sb2NrZWRfdTY0 KAotCQkgICAgJnNkc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuZGVjYXlf bXV6enkucHVyZ2VkLAotCQkgICAgJmFzdGF0cy0+YXN0YXRzLnBhX3NoYXJkX3N0YXRzLnBhY19z dGF0cy5kZWNheV9tdXp6eS5wdXJnZWQpOwotCi0jZGVmaW5lIE9QKG10eCkgbWFsbG9jX211dGV4 X3Byb2ZfbWVyZ2UoCQkJCVwKLQkJICAgICYoc2RzdGF0cy0+YXN0YXRzLm11dGV4X3Byb2ZfZGF0 YVsJCQlcCi0JCSAgICAgICAgYXJlbmFfcHJvZl9tdXRleF8jI210eF0pLAkJCVwKLQkJICAgICYo YXN0YXRzLT5hc3RhdHMubXV0ZXhfcHJvZl9kYXRhWwkJCVwKLQkJICAgICAgICBhcmVuYV9wcm9m X211dGV4XyMjbXR4XSkpOwotTVVURVhfUFJPRl9BUkVOQV9NVVRFWEVTCi0jdW5kZWYgT1AKLQkJ aWYgKCFkZXN0cm95ZWQpIHsKLQkJCXNkc3RhdHMtPmFzdGF0cy5iYXNlICs9IGFzdGF0cy0+YXN0 YXRzLmJhc2U7Ci0JCQlzZHN0YXRzLT5hc3RhdHMucmVzaWRlbnQgKz0gYXN0YXRzLT5hc3RhdHMu cmVzaWRlbnQ7Ci0JCQlzZHN0YXRzLT5hc3RhdHMubWV0YWRhdGFfdGhwICs9IGFzdGF0cy0+YXN0 YXRzLm1ldGFkYXRhX3RocDsKLQkJCWN0bF9hY2N1bV9hdG9taWNfenUoJnNkc3RhdHMtPmFzdGF0 cy5pbnRlcm5hbCwKLQkJCSAgICAmYXN0YXRzLT5hc3RhdHMuaW50ZXJuYWwpOwotCQl9IGVsc2Ug ewotCQkJYXNzZXJ0KGF0b21pY19sb2FkX3p1KAotCQkJICAgICZhc3RhdHMtPmFzdGF0cy5pbnRl cm5hbCwgQVRPTUlDX1JFTEFYRUQpID09IDApOwotCQl9Ci0KLQkJaWYgKCFkZXN0cm95ZWQpIHsK LQkJCXNkc3RhdHMtPmFsbG9jYXRlZF9zbWFsbCArPSBhc3RhdHMtPmFsbG9jYXRlZF9zbWFsbDsK LQkJfSBlbHNlIHsKLQkJCWFzc2VydChhc3RhdHMtPmFsbG9jYXRlZF9zbWFsbCA9PSAwKTsKLQkJ fQotCQlzZHN0YXRzLT5ubWFsbG9jX3NtYWxsICs9IGFzdGF0cy0+bm1hbGxvY19zbWFsbDsKLQkJ c2RzdGF0cy0+bmRhbGxvY19zbWFsbCArPSBhc3RhdHMtPm5kYWxsb2Nfc21hbGw7Ci0JCXNkc3Rh dHMtPm5yZXF1ZXN0c19zbWFsbCArPSBhc3RhdHMtPm5yZXF1ZXN0c19zbWFsbDsKLQkJc2RzdGF0 cy0+bmZpbGxzX3NtYWxsICs9IGFzdGF0cy0+bmZpbGxzX3NtYWxsOwotCQlzZHN0YXRzLT5uZmx1 c2hlc19zbWFsbCArPSBhc3RhdHMtPm5mbHVzaGVzX3NtYWxsOwotCi0JCWlmICghZGVzdHJveWVk KSB7Ci0JCQlzZHN0YXRzLT5hc3RhdHMuYWxsb2NhdGVkX2xhcmdlICs9Ci0JCQkgICAgYXN0YXRz LT5hc3RhdHMuYWxsb2NhdGVkX2xhcmdlOwotCQl9IGVsc2UgewotCQkJYXNzZXJ0KGFzdGF0cy0+ YXN0YXRzLmFsbG9jYXRlZF9sYXJnZSA9PSAwKTsKLQkJfQotCQlzZHN0YXRzLT5hc3RhdHMubm1h bGxvY19sYXJnZSArPSBhc3RhdHMtPmFzdGF0cy5ubWFsbG9jX2xhcmdlOwotCQlzZHN0YXRzLT5h c3RhdHMubmRhbGxvY19sYXJnZSArPSBhc3RhdHMtPmFzdGF0cy5uZGFsbG9jX2xhcmdlOwotCQlz ZHN0YXRzLT5hc3RhdHMubnJlcXVlc3RzX2xhcmdlCi0JCSAgICArPSBhc3RhdHMtPmFzdGF0cy5u cmVxdWVzdHNfbGFyZ2U7Ci0JCXNkc3RhdHMtPmFzdGF0cy5uZmx1c2hlc19sYXJnZSArPSBhc3Rh dHMtPmFzdGF0cy5uZmx1c2hlc19sYXJnZTsKLQkJY3RsX2FjY3VtX2F0b21pY196dSgKLQkJICAg ICZzZHN0YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmFiYW5kb25lZF92bSwK LQkJICAgICZhc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMuYWJhbmRvbmVk X3ZtKTsKLQotCQlzZHN0YXRzLT5hc3RhdHMudGNhY2hlX2J5dGVzICs9IGFzdGF0cy0+YXN0YXRz LnRjYWNoZV9ieXRlczsKLQkJc2RzdGF0cy0+YXN0YXRzLnRjYWNoZV9zdGFzaGVkX2J5dGVzICs9 Ci0JCSAgICBhc3RhdHMtPmFzdGF0cy50Y2FjaGVfc3Rhc2hlZF9ieXRlczsKLQotCQlpZiAoY3Rs X2FyZW5hLT5hcmVuYV9pbmQgPT0gMCkgewotCQkJc2RzdGF0cy0+YXN0YXRzLnVwdGltZSA9IGFz dGF0cy0+YXN0YXRzLnVwdGltZTsKLQkJfQotCi0JCS8qIE1lcmdlIGJpbiBzdGF0cy4gKi8KLQkJ Zm9yIChpID0gMDsgaSA8IFNDX05CSU5TOyBpKyspIHsKLQkJCWJpbl9zdGF0c190ICpic3RhdHMg PSAmYXN0YXRzLT5ic3RhdHNbaV0uc3RhdHNfZGF0YTsKLQkJCWJpbl9zdGF0c190ICptZXJnZWQg PSAmc2RzdGF0cy0+YnN0YXRzW2ldLnN0YXRzX2RhdGE7Ci0JCQltZXJnZWQtPm5tYWxsb2MgKz0g YnN0YXRzLT5ubWFsbG9jOwotCQkJbWVyZ2VkLT5uZGFsbG9jICs9IGJzdGF0cy0+bmRhbGxvYzsK LQkJCW1lcmdlZC0+bnJlcXVlc3RzICs9IGJzdGF0cy0+bnJlcXVlc3RzOwotCQkJaWYgKCFkZXN0 cm95ZWQpIHsKLQkJCQltZXJnZWQtPmN1cnJlZ3MgKz0gYnN0YXRzLT5jdXJyZWdzOwotCQkJfSBl bHNlIHsKLQkJCQlhc3NlcnQoYnN0YXRzLT5jdXJyZWdzID09IDApOwotCQkJfQotCQkJbWVyZ2Vk LT5uZmlsbHMgKz0gYnN0YXRzLT5uZmlsbHM7Ci0JCQltZXJnZWQtPm5mbHVzaGVzICs9IGJzdGF0 cy0+bmZsdXNoZXM7Ci0JCQltZXJnZWQtPm5zbGFicyArPSBic3RhdHMtPm5zbGFiczsKLQkJCW1l cmdlZC0+cmVzbGFicyArPSBic3RhdHMtPnJlc2xhYnM7Ci0JCQlpZiAoIWRlc3Ryb3llZCkgewot CQkJCW1lcmdlZC0+Y3Vyc2xhYnMgKz0gYnN0YXRzLT5jdXJzbGFiczsKLQkJCQltZXJnZWQtPm5v bmZ1bGxfc2xhYnMgKz0gYnN0YXRzLT5ub25mdWxsX3NsYWJzOwotCQkJfSBlbHNlIHsKLQkJCQlh c3NlcnQoYnN0YXRzLT5jdXJzbGFicyA9PSAwKTsKLQkJCQlhc3NlcnQoYnN0YXRzLT5ub25mdWxs X3NsYWJzID09IDApOwotCQkJfQotCQkJbWFsbG9jX211dGV4X3Byb2ZfbWVyZ2UoJnNkc3RhdHMt PmJzdGF0c1tpXS5tdXRleF9kYXRhLAotCQkJICAgICZhc3RhdHMtPmJzdGF0c1tpXS5tdXRleF9k YXRhKTsKLQkJfQotCi0JCS8qIE1lcmdlIHN0YXRzIGZvciBsYXJnZSBhbGxvY2F0aW9ucy4gKi8K LQkJZm9yIChpID0gMDsgaSA8IFNDX05TSVpFUyAtIFNDX05CSU5TOyBpKyspIHsKLQkJCWN0bF9h Y2N1bV9sb2NrZWRfdTY0KCZzZHN0YXRzLT5sc3RhdHNbaV0ubm1hbGxvYywKLQkJCSAgICAmYXN0 YXRzLT5sc3RhdHNbaV0ubm1hbGxvYyk7Ci0JCQljdGxfYWNjdW1fbG9ja2VkX3U2NCgmc2RzdGF0 cy0+bHN0YXRzW2ldLm5kYWxsb2MsCi0JCQkgICAgJmFzdGF0cy0+bHN0YXRzW2ldLm5kYWxsb2Mp OwotCQkJY3RsX2FjY3VtX2xvY2tlZF91NjQoJnNkc3RhdHMtPmxzdGF0c1tpXS5ucmVxdWVzdHMs Ci0JCQkgICAgJmFzdGF0cy0+bHN0YXRzW2ldLm5yZXF1ZXN0cyk7Ci0JCQlpZiAoIWRlc3Ryb3ll ZCkgewotCQkJCXNkc3RhdHMtPmxzdGF0c1tpXS5jdXJsZXh0ZW50cyArPQotCQkJCSAgICBhc3Rh dHMtPmxzdGF0c1tpXS5jdXJsZXh0ZW50czsKLQkJCX0gZWxzZSB7Ci0JCQkJYXNzZXJ0KGFzdGF0 cy0+bHN0YXRzW2ldLmN1cmxleHRlbnRzID09IDApOwotCQkJfQotCQl9Ci0KLQkJLyogTWVyZ2Ug ZXh0ZW50cyBzdGF0cy4gKi8KLQkJZm9yIChpID0gMDsgaSA8IFNDX05QU0laRVM7IGkrKykgewot CQkJc2RzdGF0cy0+ZXN0YXRzW2ldLm5kaXJ0eSArPSBhc3RhdHMtPmVzdGF0c1tpXS5uZGlydHk7 Ci0JCQlzZHN0YXRzLT5lc3RhdHNbaV0ubm11enp5ICs9IGFzdGF0cy0+ZXN0YXRzW2ldLm5tdXp6 eTsKLQkJCXNkc3RhdHMtPmVzdGF0c1tpXS5ucmV0YWluZWQKLQkJCSAgICArPSBhc3RhdHMtPmVz dGF0c1tpXS5ucmV0YWluZWQ7Ci0JCQlzZHN0YXRzLT5lc3RhdHNbaV0uZGlydHlfYnl0ZXMKLQkJ CSAgICArPSBhc3RhdHMtPmVzdGF0c1tpXS5kaXJ0eV9ieXRlczsKLQkJCXNkc3RhdHMtPmVzdGF0 c1tpXS5tdXp6eV9ieXRlcwotCQkJICAgICs9IGFzdGF0cy0+ZXN0YXRzW2ldLm11enp5X2J5dGVz OwotCQkJc2RzdGF0cy0+ZXN0YXRzW2ldLnJldGFpbmVkX2J5dGVzCi0JCQkgICAgKz0gYXN0YXRz LT5lc3RhdHNbaV0ucmV0YWluZWRfYnl0ZXM7Ci0JCX0KLQotCQkvKiBNZXJnZSBIUEEgc3RhdHMu ICovCi0JCWhwYV9zaGFyZF9zdGF0c19hY2N1bSgmc2RzdGF0cy0+aHBhc3RhdHMsICZhc3RhdHMt PmhwYXN0YXRzKTsKLQkJc2VjX3N0YXRzX2FjY3VtKCZzZHN0YXRzLT5zZWNzdGF0cywgJmFzdGF0 cy0+c2Vjc3RhdHMpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWN0bF9hcmVuYV9yZWZyZXNoKHRz ZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGN0bF9hcmVuYV90ICpjdGxfc2RhcmVuYSwKLSAg ICB1bnNpZ25lZCBpLCBib29sIGRlc3Ryb3llZCkgewotCWN0bF9hcmVuYV90ICpjdGxfYXJlbmEg PSBhcmVuYXNfaShpKTsKLQotCWN0bF9hcmVuYV9jbGVhcihjdGxfYXJlbmEpOwotCWN0bF9hcmVu YV9zdGF0c19hbWVyZ2UodHNkbiwgY3RsX2FyZW5hLCBhcmVuYSk7Ci0JLyogTWVyZ2UgaW50byBz dW0gc3RhdHMgYXMgd2VsbC4gKi8KLQljdGxfYXJlbmFfc3RhdHNfc2RtZXJnZShjdGxfc2RhcmVu YSwgY3RsX2FyZW5hLCBkZXN0cm95ZWQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQKLWN0bF9hcmVu YV9pbml0KHRzZF90ICp0c2QsIGNvbnN0IGFyZW5hX2NvbmZpZ190ICpjb25maWcpIHsKLQl1bnNp Z25lZCBhcmVuYV9pbmQ7Ci0JY3RsX2FyZW5hX3QgKmN0bF9hcmVuYTsKLQotCWlmICgoY3RsX2Fy ZW5hID0gcWxfbGFzdCgmY3RsX2FyZW5hcy0+ZGVzdHJveWVkLCBkZXN0cm95ZWRfbGluaykpICE9 Ci0JICAgIE5VTEwpIHsKLQkJcWxfcmVtb3ZlKCZjdGxfYXJlbmFzLT5kZXN0cm95ZWQsIGN0bF9h cmVuYSwgZGVzdHJveWVkX2xpbmspOwotCQlhcmVuYV9pbmQgPSBjdGxfYXJlbmEtPmFyZW5hX2lu ZDsKLQl9IGVsc2UgewotCQlhcmVuYV9pbmQgPSBjdGxfYXJlbmFzLT5uYXJlbmFzOwotCX0KLQot CS8qIFRyaWdnZXIgc3RhdHMgYWxsb2NhdGlvbi4gKi8KLQlpZiAoYXJlbmFzX2lfaW1wbCh0c2Qs IGFyZW5hX2luZCwgZmFsc2UsIHRydWUpID09IE5VTEwpIHsKLQkJcmV0dXJuIFVJTlRfTUFYOwot CX0KLQotCS8qIEluaXRpYWxpemUgbmV3IGFyZW5hLiAqLwotCWlmIChhcmVuYV9pbml0KHRzZF90 c2RuKHRzZCksIGFyZW5hX2luZCwgY29uZmlnKSA9PSBOVUxMKSB7Ci0JCXJldHVybiBVSU5UX01B WDsKLQl9Ci0KLQlpZiAoYXJlbmFfaW5kID09IGN0bF9hcmVuYXMtPm5hcmVuYXMpIHsKLQkJY3Rs X2FyZW5hcy0+bmFyZW5hcysrOwotCX0KLQotCXJldHVybiBhcmVuYV9pbmQ7Ci19Ci0KLXN0YXRp YyB2b2lkCi1jdGxfYmFja2dyb3VuZF90aHJlYWRfc3RhdHNfcmVhZCh0c2RuX3QgKnRzZG4pIHsK LQliYWNrZ3JvdW5kX3RocmVhZF9zdGF0c190ICpzdGF0cyA9ICZjdGxfc3RhdHMtPmJhY2tncm91 bmRfdGhyZWFkOwotCWlmICghaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCB8fAotCSAgICBiYWNrZ3Jv dW5kX3RocmVhZF9zdGF0c19yZWFkKHRzZG4sIHN0YXRzKSkgewotCQltZW1zZXQoc3RhdHMsIDAs IHNpemVvZihiYWNrZ3JvdW5kX3RocmVhZF9zdGF0c190KSk7Ci0JCW5zdGltZV9pbml0X3plcm8o JnN0YXRzLT5ydW5faW50ZXJ2YWwpOwotCX0KLQltYWxsb2NfbXV0ZXhfcHJvZl9jb3B5KAotCSAg ICAmY3RsX3N0YXRzLT5tdXRleF9wcm9mX2RhdGFbZ2xvYmFsX3Byb2ZfbXV0ZXhfbWF4X3Blcl9i Z190aGRdLAotCSAgICAmc3RhdHMtPm1heF9jb3VudGVyX3Blcl9iZ190aGQpOwotfQotCi1zdGF0 aWMgdm9pZAotY3RsX3JlZnJlc2godHNkbl90ICp0c2RuKSB7Ci0JdW5zaWduZWQgaTsKLQljdGxf YXJlbmFfdCAqY3RsX3NhcmVuYSA9IGFyZW5hc19pKE1BTExDVExfQVJFTkFTX0FMTCk7Ci0JVkFS SUFCTEVfQVJSQVkoYXJlbmFfdCAqLCB0YXJlbmFzLCBjdGxfYXJlbmFzLT5uYXJlbmFzKTsKLQot CS8qCi0JICogQ2xlYXIgc3VtIHN0YXRzLCBzaW5jZSB0aGV5IHdpbGwgYmUgbWVyZ2VkIGludG8g YnkKLQkgKiBjdGxfYXJlbmFfcmVmcmVzaCgpLgotCSAqLwotCWN0bF9hcmVuYV9jbGVhcihjdGxf c2FyZW5hKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjdGxfYXJlbmFzLT5uYXJlbmFzOyBpKyspIHsK LQkJdGFyZW5hc1tpXSA9IGFyZW5hX2dldCh0c2RuLCBpLCBmYWxzZSk7Ci0JfQotCi0JZm9yIChp ID0gMDsgaSA8IGN0bF9hcmVuYXMtPm5hcmVuYXM7IGkrKykgewotCQljdGxfYXJlbmFfdCAqY3Rs X2FyZW5hID0gYXJlbmFzX2koaSk7Ci0JCWJvb2wgaW5pdGlhbGl6ZWQgPSAodGFyZW5hc1tpXSAh PSBOVUxMKTsKLQotCQljdGxfYXJlbmEtPmluaXRpYWxpemVkID0gaW5pdGlhbGl6ZWQ7Ci0JCWlm IChpbml0aWFsaXplZCkgewotCQkJY3RsX2FyZW5hX3JlZnJlc2godHNkbiwgdGFyZW5hc1tpXSwg Y3RsX3NhcmVuYSwgaSwKLQkJCSAgICBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlpZiAoY29uZmlnX3N0 YXRzKSB7Ci0JCWN0bF9zdGF0cy0+YWxsb2NhdGVkID0gY3RsX3NhcmVuYS0+YXN0YXRzLT5hbGxv Y2F0ZWRfc21hbGwgKwotCQkgICAgY3RsX3NhcmVuYS0+YXN0YXRzLT5hc3RhdHMuYWxsb2NhdGVk X2xhcmdlOwotCQljdGxfc3RhdHMtPmFjdGl2ZSA9IChjdGxfc2FyZW5hLT5wYWN0aXZlIDw8IExH X1BBR0UpOwotCQljdGxfc3RhdHMtPm1ldGFkYXRhID0gY3RsX3NhcmVuYS0+YXN0YXRzLT5hc3Rh dHMuYmFzZSArCi0JCSAgICBhdG9taWNfbG9hZF96dSgmY3RsX3NhcmVuYS0+YXN0YXRzLT5hc3Rh dHMuaW50ZXJuYWwsCi0JCQlBVE9NSUNfUkVMQVhFRCk7Ci0JCWN0bF9zdGF0cy0+cmVzaWRlbnQg PSBjdGxfc2FyZW5hLT5hc3RhdHMtPmFzdGF0cy5yZXNpZGVudDsKLQkJY3RsX3N0YXRzLT5tZXRh ZGF0YV90aHAgPQotCQkgICAgY3RsX3NhcmVuYS0+YXN0YXRzLT5hc3RhdHMubWV0YWRhdGFfdGhw OwotCQljdGxfc3RhdHMtPm1hcHBlZCA9IGN0bF9zYXJlbmEtPmFzdGF0cy0+YXN0YXRzLm1hcHBl ZDsKLQkJY3RsX3N0YXRzLT5yZXRhaW5lZCA9IGN0bF9zYXJlbmEtPmFzdGF0cy0+YXN0YXRzCi0J CSAgICAucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLnJldGFpbmVkOwotCi0JCWN0bF9iYWNrZ3Jv dW5kX3RocmVhZF9zdGF0c19yZWFkKHRzZG4pOwotCi0jZGVmaW5lIFJFQURfR0xPQkFMX01VVEVY X1BST0ZfREFUQShpLCBtdHgpCQkJCVwKLSAgICBtYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmbXR4 KTsJCQkJCVwKLSAgICBtYWxsb2NfbXV0ZXhfcHJvZl9yZWFkKHRzZG4sICZjdGxfc3RhdHMtPm11 dGV4X3Byb2ZfZGF0YVtpXSwgJm10eCk7CVwKLSAgICBtYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4s ICZtdHgpOwotCi0JCWlmIChjb25maWdfcHJvZiAmJiBvcHRfcHJvZikgewotCQkJUkVBRF9HTE9C QUxfTVVURVhfUFJPRl9EQVRBKAotCQkJICAgIGdsb2JhbF9wcm9mX211dGV4X3Byb2YsIGJ0Mmdj dHhfbXR4KTsKLQkJCVJFQURfR0xPQkFMX01VVEVYX1BST0ZfREFUQSgKLQkJCSAgICBnbG9iYWxf cHJvZl9tdXRleF9wcm9mX3RoZHNfZGF0YSwgdGRhdGFzX210eCk7Ci0JCQlSRUFEX0dMT0JBTF9N VVRFWF9QUk9GX0RBVEEoCi0JCQkgICAgZ2xvYmFsX3Byb2ZfbXV0ZXhfcHJvZl9kdW1wLCBwcm9m X2R1bXBfbXR4KTsKLQkJCVJFQURfR0xPQkFMX01VVEVYX1BST0ZfREFUQSgKLQkJCSAgICBnbG9i YWxfcHJvZl9tdXRleF9wcm9mX3JlY2VudF9hbGxvYywKLQkJCSAgICBwcm9mX3JlY2VudF9hbGxv Y19tdHgpOwotCQkJUkVBRF9HTE9CQUxfTVVURVhfUFJPRl9EQVRBKAotCQkJICAgIGdsb2JhbF9w cm9mX211dGV4X3Byb2ZfcmVjZW50X2R1bXAsCi0JCQkgICAgcHJvZl9yZWNlbnRfZHVtcF9tdHgp OwotCQkJUkVBRF9HTE9CQUxfTVVURVhfUFJPRl9EQVRBKAotCQkJICAgIGdsb2JhbF9wcm9mX211 dGV4X3Byb2Zfc3RhdHMsIHByb2Zfc3RhdHNfbXR4KTsKLQkJfQotCQlpZiAoaGF2ZV9iYWNrZ3Jv dW5kX3RocmVhZCkgewotCQkJUkVBRF9HTE9CQUxfTVVURVhfUFJPRl9EQVRBKAotCQkJICAgIGds b2JhbF9wcm9mX211dGV4X2JhY2tncm91bmRfdGhyZWFkLAotCQkJICAgIGJhY2tncm91bmRfdGhy ZWFkX2xvY2spOwotCQl9IGVsc2UgewotCQkJbWVtc2V0KCZjdGxfc3RhdHMtPm11dGV4X3Byb2Zf ZGF0YVsKLQkJCSAgICBnbG9iYWxfcHJvZl9tdXRleF9iYWNrZ3JvdW5kX3RocmVhZF0sIDAsCi0J CQkgICAgc2l6ZW9mKG11dGV4X3Byb2ZfZGF0YV90KSk7Ci0JCX0KLQkJLyogV2Ugb3duIGN0bCBt dXRleCBhbHJlYWR5LiAqLwotCQltYWxsb2NfbXV0ZXhfcHJvZl9yZWFkKHRzZG4sCi0JCSAgICAm Y3RsX3N0YXRzLT5tdXRleF9wcm9mX2RhdGFbZ2xvYmFsX3Byb2ZfbXV0ZXhfY3RsXSwKLQkJICAg ICZjdGxfbXR4KTsKLSN1bmRlZiBSRUFEX0dMT0JBTF9NVVRFWF9QUk9GX0RBVEEKLQl9Ci0JY3Rs X2FyZW5hcy0+ZXBvY2grKzsKLX0KLQotc3RhdGljIGJvb2wKLWN0bF9pbml0KHRzZF90ICp0c2Qp IHsKLQlib29sIHJldDsKLQl0c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2QpOwotCi0JbWFsbG9j X211dGV4X2xvY2sodHNkbiwgJmN0bF9tdHgpOwotCWlmICghY3RsX2luaXRpYWxpemVkKSB7Ci0J CWN0bF9hcmVuYV90ICpjdGxfc2FyZW5hLCAqY3RsX2RhcmVuYTsKLQkJdW5zaWduZWQgaTsKLQot CQkvKgotCQkgKiBBbGxvY2F0ZSBkZW1hbmQtemVyb2VkIHNwYWNlIGZvciBwb2ludGVycyB0byB0 aGUgZnVsbAotCQkgKiByYW5nZSBvZiBzdXBwb3J0ZWQgYXJlbmEgaW5kaWNlcy4KLQkJICovCi0J CWlmIChjdGxfYXJlbmFzID09IE5VTEwpIHsKLQkJCWN0bF9hcmVuYXMgPSAoY3RsX2FyZW5hc190 ICopYmFzZV9hbGxvYyh0c2RuLAotCQkJICAgIGIwZ2V0KCksIHNpemVvZihjdGxfYXJlbmFzX3Qp LCBRVUFOVFVNKTsKLQkJCWlmIChjdGxfYXJlbmFzID09IE5VTEwpIHsKLQkJCQlyZXQgPSB0cnVl OwotCQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJaWYgKGNvbmZpZ19zdGF0 cyAmJiBjdGxfc3RhdHMgPT0gTlVMTCkgewotCQkJY3RsX3N0YXRzID0gKGN0bF9zdGF0c190ICop YmFzZV9hbGxvYyh0c2RuLCBiMGdldCgpLAotCQkJICAgIHNpemVvZihjdGxfc3RhdHNfdCksIFFV QU5UVU0pOwotCQkJaWYgKGN0bF9zdGF0cyA9PSBOVUxMKSB7Ci0JCQkJcmV0ID0gdHJ1ZTsKLQkJ CQlnb3RvIGxhYmVsX3JldHVybjsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIEFsbG9jYXRlIHNw YWNlIGZvciB0aGUgY3VycmVudCBmdWxsIHJhbmdlIG9mIGFyZW5hcwotCQkgKiBoZXJlIHJhdGhl ciB0aGFuIGRvaW5nIGl0IGxhemlseSBlbHNld2hlcmUsIGluIG9yZGVyCi0JCSAqIHRvIGxpbWl0 IHdoZW4gT09NLWNhdXNlZCBlcnJvcnMgY2FuIG9jY3VyLgotCQkgKi8KLQkJaWYgKChjdGxfc2Fy ZW5hID0gYXJlbmFzX2lfaW1wbCh0c2QsIE1BTExDVExfQVJFTkFTX0FMTCwgZmFsc2UsCi0JCSAg ICB0cnVlKSkgPT0gTlVMTCkgewotCQkJcmV0ID0gdHJ1ZTsKLQkJCWdvdG8gbGFiZWxfcmV0dXJu OwotCQl9Ci0JCWN0bF9zYXJlbmEtPmluaXRpYWxpemVkID0gdHJ1ZTsKLQotCQlpZiAoKGN0bF9k YXJlbmEgPSBhcmVuYXNfaV9pbXBsKHRzZCwgTUFMTENUTF9BUkVOQVNfREVTVFJPWUVELAotCQkg ICAgZmFsc2UsIHRydWUpKSA9PSBOVUxMKSB7Ci0JCQlyZXQgPSB0cnVlOwotCQkJZ290byBsYWJl bF9yZXR1cm47Ci0JCX0KLQkJY3RsX2FyZW5hX2NsZWFyKGN0bF9kYXJlbmEpOwotCQkvKgotCQkg KiBEb24ndCB0b2dnbGUgY3RsX2RhcmVuYSB0byBpbml0aWFsaXplZCB1bnRpbCBhbiBhcmVuYSBp cwotCQkgKiBhY3R1YWxseSBkZXN0cm95ZWQsIHNvIHRoYXQgYXJlbmEuPGk+LmluaXRpYWxpemVk IGNhbiBiZSB1c2VkCi0JCSAqIHRvIHF1ZXJ5IHdoZXRoZXIgdGhlIHN0YXRzIGFyZSByZWxldmFu dC4KLQkJICovCi0KLQkJY3RsX2FyZW5hcy0+bmFyZW5hcyA9IG5hcmVuYXNfdG90YWxfZ2V0KCk7 Ci0JCWZvciAoaSA9IDA7IGkgPCBjdGxfYXJlbmFzLT5uYXJlbmFzOyBpKyspIHsKLQkJCWlmIChh cmVuYXNfaV9pbXBsKHRzZCwgaSwgZmFsc2UsIHRydWUpID09IE5VTEwpIHsKLQkJCQlyZXQgPSB0 cnVlOwotCQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJcWxfbmV3KCZjdGxf YXJlbmFzLT5kZXN0cm95ZWQpOwotCQljdGxfcmVmcmVzaCh0c2RuKTsKLQotCQljdGxfaW5pdGlh bGl6ZWQgPSB0cnVlOwotCX0KLQotCXJldCA9IGZhbHNlOwotbGFiZWxfcmV0dXJuOgotCW1hbGxv Y19tdXRleF91bmxvY2sodHNkbiwgJmN0bF9tdHgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQKLWN0bF9sb29rdXAodHNkbl90ICp0c2RuLCBjb25zdCBjdGxfbmFtZWRfbm9kZV90ICpz dGFydGluZ19ub2RlLAotICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGN0bF9uYW1lZF9ub2Rl X3QgKiplbmRpbmdfbm9kZXAsIHNpemVfdCAqbWlicCwKLSAgICBzaXplX3QgKmRlcHRocCkgewot CWludCByZXQ7Ci0JY29uc3QgY2hhciAqZWxtLCAqdGRvdCwgKmRvdDsKLQlzaXplX3QgZWxlbiwg aSwgajsKLQljb25zdCBjdGxfbmFtZWRfbm9kZV90ICpub2RlOwotCi0JZWxtID0gbmFtZTsKLQkv KiBFcXVpdmFsZW50IHRvIHN0cmNocm51bCgpLiAqLwotCWRvdCA9ICgodGRvdCA9IHN0cmNocihl bG0sICcuJykpICE9IE5VTEwpID8gdGRvdCA6IHN0cmNocihlbG0sICdcMCcpOwotCWVsZW4gPSAo c2l6ZV90KSgodWludHB0cl90KWRvdCAtICh1aW50cHRyX3QpZWxtKTsKLQlpZiAoZWxlbiA9PSAw KSB7Ci0JCXJldCA9IEVOT0VOVDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCW5vZGUgPSBz dGFydGluZ19ub2RlOwotCWZvciAoaSA9IDA7IGkgPCAqZGVwdGhwOyBpKyspIHsKLQkJYXNzZXJ0 KG5vZGUpOwotCQlhc3NlcnQobm9kZS0+bmNoaWxkcmVuID4gMCk7Ci0JCWlmIChjdGxfbmFtZWRf bm9kZShub2RlLT5jaGlsZHJlbikgIT0gTlVMTCkgewotCQkJY29uc3QgY3RsX25hbWVkX25vZGVf dCAqcG5vZGUgPSBub2RlOwotCi0JCQkvKiBDaGlsZHJlbiBhcmUgbmFtZWQuICovCi0JCQlmb3Ig KGogPSAwOyBqIDwgbm9kZS0+bmNoaWxkcmVuOyBqKyspIHsKLQkJCQljb25zdCBjdGxfbmFtZWRf bm9kZV90ICpjaGlsZCA9Ci0JCQkJICAgIGN0bF9uYW1lZF9jaGlsZHJlbihub2RlLCBqKTsKLQkJ CQlpZiAoc3RybGVuKGNoaWxkLT5uYW1lKSA9PSBlbGVuICYmCi0JCQkJICAgIHN0cm5jbXAoZWxt LCBjaGlsZC0+bmFtZSwgZWxlbikgPT0gMCkgewotCQkJCQlub2RlID0gY2hpbGQ7Ci0JCQkJCW1p YnBbaV0gPSBqOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAobm9kZSA9PSBwbm9k ZSkgewotCQkJCXJldCA9IEVOT0VOVDsKLQkJCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJCX0KLQkJ fSBlbHNlIHsKLQkJCXVpbnRtYXhfdCBpbmRleDsKLQkJCWNvbnN0IGN0bF9pbmRleGVkX25vZGVf dCAqaW5vZGU7Ci0KLQkJCS8qIENoaWxkcmVuIGFyZSBpbmRleGVkLiAqLwotCQkJaW5kZXggPSBt YWxsb2Nfc3RydG91bWF4KGVsbSwgTlVMTCwgMTApOwotCQkJaWYgKGluZGV4ID09IFVJTlRNQVhf TUFYIHx8IGluZGV4ID4gU0laRV9UX01BWCkgewotCQkJCXJldCA9IEVOT0VOVDsKLQkJCQlnb3Rv IGxhYmVsX3JldHVybjsKLQkJCX0KLQotCQkJaW5vZGUgPSBjdGxfaW5kZXhlZF9ub2RlKG5vZGUt PmNoaWxkcmVuKTsKLQkJCW5vZGUgPSBpbm9kZS0+aW5kZXgodHNkbiwgbWlicCwgKmRlcHRocCwg KHNpemVfdClpbmRleCk7Ci0JCQlpZiAobm9kZSA9PSBOVUxMKSB7Ci0JCQkJcmV0ID0gRU5PRU5U OwotCQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQkJfQotCi0JCQltaWJwW2ldID0gKHNpemVfdClp bmRleDsKLQkJfQotCi0JCS8qIFJlYWNoZWQgdGhlIGVuZD8gKi8KLQkJaWYgKG5vZGUtPmN0bCAh PSBOVUxMIHx8ICpkb3QgPT0gJ1wwJykgewotCQkJLyogVGVybWluYWwgbm9kZS4gKi8KLQkJCWlm ICgqZG90ICE9ICdcMCcpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBuYW1lIGNvbnRhaW5zIG1vcmUg ZWxlbWVudHMgdGhhbiBhcmUKLQkJCQkgKiBpbiB0aGlzIHBhdGggdGhyb3VnaCB0aGUgdHJlZS4K LQkJCQkgKi8KLQkJCQlyZXQgPSBFTk9FTlQ7Ci0JCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCQl9 Ci0JCQkvKiBDb21wbGV0ZSBsb29rdXAgc3VjY2Vzc2Z1bC4gKi8KLQkJCSpkZXB0aHAgPSBpICsg MTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogVXBkYXRlIGVsbS4gKi8KLQkJZWxtID0gJmRvdFsx XTsKLQkJZG90ID0gKCh0ZG90ID0gc3RyY2hyKGVsbSwgJy4nKSkgIT0gTlVMTCkgPyB0ZG90IDoK LQkJICAgIHN0cmNocihlbG0sICdcMCcpOwotCQllbGVuID0gKHNpemVfdCkoKHVpbnRwdHJfdClk b3QgLSAodWludHB0cl90KWVsbSk7Ci0JfQotCWlmIChlbmRpbmdfbm9kZXAgIT0gTlVMTCkgewot CQkqZW5kaW5nX25vZGVwID0gbm9kZTsKLQl9Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJuOgot CXJldHVybiByZXQ7Ci19Ci0KLWludAotY3RsX2J5bmFtZSh0c2RfdCAqdHNkLCBjb25zdCBjaGFy ICpuYW1lLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsCi0gICAgdm9pZCAqbmV3cCwgc2l6 ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0Jc2l6ZV90IGRlcHRoOwotCXNpemVfdCBtaWJbQ1RM X01BWF9ERVBUSF07Ci0JY29uc3QgY3RsX25hbWVkX25vZGVfdCAqbm9kZTsKLQotCWlmICghY3Rs X2luaXRpYWxpemVkICYmIGN0bF9pbml0KHRzZCkpIHsKLQkJcmV0ID0gRUFHQUlOOwotCQlnb3Rv IGxhYmVsX3JldHVybjsKLQl9Ci0KLQlkZXB0aCA9IENUTF9NQVhfREVQVEg7Ci0JcmV0ID0gY3Rs X2xvb2t1cCh0c2RfdHNkbih0c2QpLCBzdXBlcl9yb290X25vZGUsIG5hbWUsICZub2RlLCBtaWIs Ci0JICAgICZkZXB0aCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwot CX0KLQotCWlmIChub2RlICE9IE5VTEwgJiYgbm9kZS0+Y3RsKSB7Ci0JCXJldCA9IG5vZGUtPmN0 bCh0c2QsIG1pYiwgZGVwdGgsIG9sZHAsIG9sZGxlbnAsIG5ld3AsIG5ld2xlbik7Ci0JfSBlbHNl IHsKLQkJLyogVGhlIG5hbWUgcmVmZXJzIHRvIGEgcGFydGlhbCBwYXRoIHRocm91Z2ggdGhlIGN0 bCB0cmVlLiAqLwotCQlyZXQgPSBFTk9FTlQ7Ci0JfQotCi1sYWJlbF9yZXR1cm46Ci0JcmV0dXJu KHJldCk7Ci19Ci0KLWludAotY3RsX25hbWV0b21pYih0c2RfdCAqdHNkLCBjb25zdCBjaGFyICpu YW1lLCBzaXplX3QgKm1pYnAsIHNpemVfdCAqbWlibGVucCkgewotCWludCByZXQ7Ci0KLQlpZiAo IWN0bF9pbml0aWFsaXplZCAmJiBjdGxfaW5pdCh0c2QpKSB7Ci0JCXJldCA9IEVBR0FJTjsKLQkJ Z290byBsYWJlbF9yZXR1cm47Ci0JfQotCi0JcmV0ID0gY3RsX2xvb2t1cCh0c2RfdHNkbih0c2Qp LCBzdXBlcl9yb290X25vZGUsIG5hbWUsIE5VTEwsIG1pYnAsCi0JICAgIG1pYmxlbnApOwotbGFi ZWxfcmV0dXJuOgotCXJldHVybihyZXQpOwotfQotCi1zdGF0aWMgaW50Ci1jdGxfbG9va3VwYnlt aWIodHNkbl90ICp0c2RuLCBjb25zdCBjdGxfbmFtZWRfbm9kZV90ICoqZW5kaW5nX25vZGVwLAot ICAgIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuKSB7Ci0JaW50IHJldDsKLQotCWNv bnN0IGN0bF9uYW1lZF9ub2RlX3QgKm5vZGUgPSBzdXBlcl9yb290X25vZGU7Ci0JZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBtaWJsZW47IGkrKykgewotCQlhc3NlcnQobm9kZSk7Ci0JCWFzc2VydChu b2RlLT5uY2hpbGRyZW4gPiAwKTsKLQkJaWYgKGN0bF9uYW1lZF9ub2RlKG5vZGUtPmNoaWxkcmVu KSAhPSBOVUxMKSB7Ci0JCQkvKiBDaGlsZHJlbiBhcmUgbmFtZWQuICovCi0JCQlpZiAobm9kZS0+ bmNoaWxkcmVuIDw9IG1pYltpXSkgewotCQkJCXJldCA9IEVOT0VOVDsKLQkJCQlnb3RvIGxhYmVs X3JldHVybjsKLQkJCX0KLQkJCW5vZGUgPSBjdGxfbmFtZWRfY2hpbGRyZW4obm9kZSwgbWliW2ld KTsKLQkJfSBlbHNlIHsKLQkJCWNvbnN0IGN0bF9pbmRleGVkX25vZGVfdCAqaW5vZGU7Ci0KLQkJ CS8qIEluZGV4ZWQgZWxlbWVudC4gKi8KLQkJCWlub2RlID0gY3RsX2luZGV4ZWRfbm9kZShub2Rl LT5jaGlsZHJlbik7Ci0JCQlub2RlID0gaW5vZGUtPmluZGV4KHRzZG4sIG1pYiwgbWlibGVuLCBt aWJbaV0pOwotCQkJaWYgKG5vZGUgPT0gTlVMTCkgewotCQkJCXJldCA9IEVOT0VOVDsKLQkJCQln b3RvIGxhYmVsX3JldHVybjsKLQkJCX0KLQkJfQotCX0KLQlhc3NlcnQoZW5kaW5nX25vZGVwICE9 IE5VTEwpOwotCSplbmRpbmdfbm9kZXAgPSBub2RlOwotCXJldCA9IDA7Ci0KLWxhYmVsX3JldHVy bjoKLQlyZXR1cm4ocmV0KTsKLX0KLQotaW50Ci1jdGxfYnltaWIodHNkX3QgKnRzZCwgY29uc3Qg c2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsCi0gICAgc2l6ZV90ICpvbGRs ZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQljb25zdCBjdGxf bmFtZWRfbm9kZV90ICpub2RlOwotCi0JaWYgKCFjdGxfaW5pdGlhbGl6ZWQgJiYgY3RsX2luaXQo dHNkKSkgewotCQlyZXQgPSBFQUdBSU47Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQotCXJl dCA9IGN0bF9sb29rdXBieW1pYih0c2RfdHNkbih0c2QpLCAmbm9kZSwgbWliLCBtaWJsZW4pOwot CWlmIChyZXQgIT0gMCkgewotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQkvKiBDYWxsIHRo ZSBjdGwgZnVuY3Rpb24uICovCi0JaWYgKG5vZGUgJiYgbm9kZS0+Y3RsKSB7Ci0JCXJldCA9IG5v ZGUtPmN0bCh0c2QsIG1pYiwgbWlibGVuLCBvbGRwLCBvbGRsZW5wLCBuZXdwLCBuZXdsZW4pOwot CX0gZWxzZSB7Ci0JCS8qIFBhcnRpYWwgTUlCLiAqLwotCQlyZXQgPSBFTk9FTlQ7Ci0JfQotCi1s YWJlbF9yZXR1cm46Ci0JcmV0dXJuKHJldCk7Ci19Ci0KLWludAotY3RsX21pYm5hbWV0b21pYih0 c2RfdCAqdHNkLCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgY29uc3QgY2hhciAqbmFtZSwK LSAgICBzaXplX3QgKm1pYmxlbnApIHsKLQlpbnQgcmV0OwotCWNvbnN0IGN0bF9uYW1lZF9ub2Rl X3QgKm5vZGU7Ci0KLQlpZiAoIWN0bF9pbml0aWFsaXplZCAmJiBjdGxfaW5pdCh0c2QpKSB7Ci0J CXJldCA9IEVBR0FJTjsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCi0JcmV0ID0gY3RsX2xv b2t1cGJ5bWliKHRzZF90c2RuKHRzZCksICZub2RlLCBtaWIsIG1pYmxlbik7Ci0JaWYgKHJldCAh PSAwKSB7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQlpZiAobm9kZSA9PSBOVUxMIHx8IG5v ZGUtPmN0bCAhPSBOVUxMKSB7Ci0JCXJldCA9IEVOT0VOVDsKLQkJZ290byBsYWJlbF9yZXR1cm47 Ci0JfQotCi0JYXNzZXJ0KG1pYmxlbnAgIT0gTlVMTCk7Ci0JYXNzZXJ0KCptaWJsZW5wID49IG1p Ymxlbik7Ci0JKm1pYmxlbnAgLT0gbWlibGVuOwotCXJldCA9IGN0bF9sb29rdXAodHNkX3RzZG4o dHNkKSwgbm9kZSwgbmFtZSwgTlVMTCwgbWliICsgbWlibGVuLAotCSAgICBtaWJsZW5wKTsKLQkq bWlibGVucCArPSBtaWJsZW47Ci1sYWJlbF9yZXR1cm46Ci0JcmV0dXJuKHJldCk7Ci19Ci0KLWlu dAotY3RsX2J5bWlibmFtZSh0c2RfdCAqdHNkLCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwg Y29uc3QgY2hhciAqbmFtZSwKLSAgICBzaXplX3QgKm1pYmxlbnAsIHZvaWQgKm9sZHAsIHNpemVf dCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JY29u c3QgY3RsX25hbWVkX25vZGVfdCAqbm9kZTsKLQotCWlmICghY3RsX2luaXRpYWxpemVkICYmIGN0 bF9pbml0KHRzZCkpIHsKLQkJcmV0ID0gRUFHQUlOOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9 Ci0KLQlyZXQgPSBjdGxfbG9va3VwYnltaWIodHNkX3RzZG4odHNkKSwgJm5vZGUsIG1pYiwgbWli bGVuKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCWlmIChu b2RlID09IE5VTEwgfHwgbm9kZS0+Y3RsICE9IE5VTEwpIHsKLQkJcmV0ID0gRU5PRU5UOwotCQln b3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlhc3NlcnQobWlibGVucCAhPSBOVUxMKTsKLQlhc3Nl cnQoKm1pYmxlbnAgPj0gbWlibGVuKTsKLQkqbWlibGVucCAtPSBtaWJsZW47Ci0JLyoKLQkgKiBU aGUgc2FtZSBub2RlIHN1cHBsaWVzIHRoZSBzdGFydGluZyBub2RlIGFuZCBzdG9yZXMgdGhlIGVu ZGluZyBub2RlLgotCSAqLwotCXJldCA9IGN0bF9sb29rdXAodHNkX3RzZG4odHNkKSwgbm9kZSwg bmFtZSwgJm5vZGUsIG1pYiArIG1pYmxlbiwKLQkgICAgbWlibGVucCk7Ci0JKm1pYmxlbnAgKz0g bWlibGVuOwotCWlmIChyZXQgIT0gMCkgewotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlp ZiAobm9kZSAhPSBOVUxMICYmIG5vZGUtPmN0bCkgewotCQlyZXQgPSBub2RlLT5jdGwodHNkLCBt aWIsICptaWJsZW5wLCBvbGRwLCBvbGRsZW5wLCBuZXdwLAotCQkgICAgbmV3bGVuKTsKLQl9IGVs c2UgewotCQkvKiBUaGUgbmFtZSByZWZlcnMgdG8gYSBwYXJ0aWFsIHBhdGggdGhyb3VnaCB0aGUg Y3RsIHRyZWUuICovCi0JCXJldCA9IEVOT0VOVDsKLQl9Ci0KLWxhYmVsX3JldHVybjoKLQlyZXR1 cm4ocmV0KTsKLX0KLQotYm9vbAotY3RsX2Jvb3Qodm9pZCkgewotCWlmIChtYWxsb2NfbXV0ZXhf aW5pdCgmY3RsX210eCwgImN0bCIsIFdJVE5FU1NfUkFOS19DVEwsCi0JICAgIG1hbGxvY19tdXRl eF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JY3RsX2luaXRpYWxp emVkID0gZmFsc2U7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQKLWN0bF9wcmVmb3JrKHRz ZG5fdCAqdHNkbikgewotCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZjdGxfbXR4KTsKLX0K LQotdm9pZAotY3RsX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4pIHsKLQltYWxsb2NfbXV0 ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZjdGxfbXR4KTsKLX0KLQotdm9pZAotY3RsX3Bvc3Rm b3JrX2NoaWxkKHRzZG5fdCAqdHNkbikgewotCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0 c2RuLCAmY3RsX210eCk7Ci19Ci0KLXZvaWQKLWN0bF9tdHhfYXNzZXJ0X2hlbGQodHNkbl90ICp0 c2RuKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmY3RsX210eCk7Ci19Ci0K LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAqX2N0bCgpIGZ1bmN0aW9ucy4gKi8KLQotI2Rl ZmluZSBSRUFET05MWSgpCWRvIHsJCQkJCQlcCi0JaWYgKG5ld3AgIT0gTlVMTCB8fCBuZXdsZW4g IT0gMCkgewkJCQlcCi0JCXJldCA9IEVQRVJNOwkJCQkJCVwKLQkJZ290byBsYWJlbF9yZXR1cm47 CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBXUklURU9OTFkoKQlk byB7CQkJCQkJXAotCWlmIChvbGRwICE9IE5VTEwgfHwgb2xkbGVucCAhPSBOVUxMKSB7CQkJCVwK LQkJcmV0ID0gRVBFUk07CQkJCQkJXAotCQlnb3RvIGxhYmVsX3JldHVybjsJCQkJCVwKLQl9CQkJ CQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBDYW4gcmVhZCBvciB3cml0ZSwgYnV0IG5vdCBib3Ro LiAqLwotI2RlZmluZSBSRUFEX1hPUl9XUklURSgpCWRvIHsJCQkJCVwKLQlpZiAoKG9sZHAgIT0g TlVMTCAmJiBvbGRsZW5wICE9IE5VTEwpICYmIChuZXdwICE9IE5VTEwgfHwJXAotCSAgICBuZXds ZW4gIT0gMCkpIHsJCQkJCQlcCi0JCXJldCA9IEVQRVJNOwkJCQkJCVwKLQkJZ290byBsYWJlbF9y ZXR1cm47CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogQ2FuIG5laXRoZXIg cmVhZCBub3Igd3JpdGUuICovCi0jZGVmaW5lIE5FSVRIRVJfUkVBRF9OT1JfV1JJVEUoKQlkbyB7 CQkJCVwKLQlpZiAob2xkcCAhPSBOVUxMIHx8IG9sZGxlbnAgIT0gTlVMTCB8fCBuZXdwICE9IE5V TEwgfHwJCVwKLQkgICAgbmV3bGVuICE9IDApIHsJCQkJCQlcCi0JCXJldCA9IEVQRVJNOwkJCQkJ CVwKLQkJZ290byBsYWJlbF9yZXR1cm47CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkK LQotLyogVmVyaWZ5IHRoYXQgdGhlIHNwYWNlIHByb3ZpZGVkIGlzIGVub3VnaC4gKi8KLSNkZWZp bmUgVkVSSUZZX1JFQUQodCkJZG8gewkJCQkJCVwKLQlpZiAob2xkcCA9PSBOVUxMIHx8IG9sZGxl bnAgPT0gTlVMTCB8fCAqb2xkbGVucCAhPSBzaXplb2YodCkpIHsJXAotCQkqb2xkbGVucCA9IDA7 CQkJCQkJXAotCQlyZXQgPSBFSU5WQUw7CQkJCQkJXAotCQlnb3RvIGxhYmVsX3JldHVybjsJCQkJ CVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFJFQUQodiwgdCkJZG8gewkJ CQkJCVwKLQlpZiAob2xkcCAhPSBOVUxMICYmIG9sZGxlbnAgIT0gTlVMTCkgewkJCQlcCi0JCWlm ICgqb2xkbGVucCAhPSBzaXplb2YodCkpIHsJCQkJXAotCQkJc2l6ZV90CWNvcHlsZW4gPSAoc2l6 ZW9mKHQpIDw9ICpvbGRsZW5wKQlcCi0JCQkgICAgPyBzaXplb2YodCkgOiAqb2xkbGVucDsJCQlc Ci0JCQltZW1jcHkob2xkcCwgKHZvaWQgKikmKHYpLCBjb3B5bGVuKTsJCVwKLQkJCSpvbGRsZW5w ID0gY29weWxlbjsJCQkJXAotCQkJcmV0ID0gRUlOVkFMOwkJCQkJXAotCQkJZ290byBsYWJlbF9y ZXR1cm47CQkJCVwKLQkJfQkJCQkJCQlcCi0JCSoodCAqKW9sZHAgPSAodik7CQkJCQlcCi0JfQkJ CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBXUklURSh2LCB0KQlkbyB7CQkJCQkJXAot CWlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQlcCi0JCWlmIChuZXdsZW4gIT0gc2l6ZW9mKHQpKSB7 CQkJCVwKLQkJCXJldCA9IEVJTlZBTDsJCQkJCVwKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwkJCQlc Ci0JCX0JCQkJCQkJXAotCQkodikgPSAqKHQgKiluZXdwOwkJCQkJXAotCX0JCQkJCQkJCVwKLX0g d2hpbGUgKDApCi0KLSNkZWZpbmUgQVNTVVJFRF9XUklURSh2LCB0KQlkbyB7CQkJCQlcCi0JaWYg KG5ld3AgPT0gTlVMTCB8fCBuZXdsZW4gIT0gc2l6ZW9mKHQpKSB7CQkJXAotCQlyZXQgPSBFSU5W QUw7CQkJCQkJXAotCQlnb3RvIGxhYmVsX3JldHVybjsJCQkJCVwKLQl9CQkJCQkJCQlcCi0JKHYp ID0gKih0ICopbmV3cDsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIE1JQl9VTlNJR05F RCh2LCBpKSBkbyB7CQkJCQkJXAotCWlmIChtaWJbaV0gPiBVSU5UX01BWCkgewkJCQkJXAotCQly ZXQgPSBFRkFVTFQ7CQkJCQkJXAotCQlnb3RvIGxhYmVsX3JldHVybjsJCQkJCVwKLQl9CQkJCQkJ CQlcCi0JdiA9ICh1bnNpZ25lZCltaWJbaV07CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyoKLSAq IFRoZXJlJ3MgYSBsb3Qgb2YgY29kZSBkdXBsaWNhdGlvbiBpbiB0aGUgZm9sbG93aW5nIG1hY3Jv cyBkdWUgdG8gbGltaXRhdGlvbnMKLSAqIGluIGhvdyBuZXN0ZWQgY3BwIG1hY3JvcyBhcmUgZXhw YW5kZWQuCi0gKi8KLSNkZWZpbmUgQ1RMX1JPX0NMR0VOKGMsIGwsIG4sIHYsIHQpCQkJCQlcCi1z dGF0aWMgaW50CQkJCQkJCQlcCi1uIyNfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWli LCBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLAlcCi0gICAgc2l6ZV90ICpvbGRsZW5wLCB2b2lk ICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CQkJXAotCWludCByZXQ7CQkJCQkJCVwKLQl0IG9sZHZh bDsJCQkJCQkJXAotCQkJCQkJCQkJXAotCWlmICghKGMpKSB7CQkJCQkJCVwKLQkJcmV0dXJuIEVO T0VOVDsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCWlmIChsKSB7CQkJCQkJCVwKLQkJbWFsbG9jX211 dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwkJXAotCX0JCQkJCQkJCVwKLQlSRUFE T05MWSgpOwkJCQkJCQlcCi0Jb2xkdmFsID0gKHYpOwkJCQkJCQlcCi0JUkVBRChvbGR2YWwsIHQp OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSAwOwkJCQkJCQlcCi1sYWJlbF9yZXR1cm46CQkJ CQkJCQlcCi0JaWYgKGwpIHsJCQkJCQkJXAotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2Ru KHRzZCksICZjdGxfbXR4KTsJCVwKLQl9CQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAot fQotCi0jZGVmaW5lIENUTF9ST19DR0VOKGMsIG4sIHYsIHQpCQkJCQkJXAotc3RhdGljIGludAkJ CQkJCQkJXAotbiMjX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1p YmxlbiwJCQlcCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBz aXplX3QgbmV3bGVuKSB7CQlcCi0JaW50IHJldDsJCQkJCQkJXAotCXQgb2xkdmFsOwkJCQkJCQlc Ci0JCQkJCQkJCQlcCi0JaWYgKCEoYykpIHsJCQkJCQkJXAotCQlyZXR1cm4gRU5PRU5UOwkJCQkJ CVwKLQl9CQkJCQkJCQlcCi0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9t dHgpOwkJCVwKLQlSRUFET05MWSgpOwkJCQkJCQlcCi0Jb2xkdmFsID0gKHYpOwkJCQkJCQlcCi0J UkVBRChvbGR2YWwsIHQpOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSAwOwkJCQkJCQlcCi1s YWJlbF9yZXR1cm46CQkJCQkJCQlcCi0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2Qp LCAmY3RsX210eCk7CQkJXAotCXJldHVybiByZXQ7CQkJCQkJCVwKLX0KLQotI2RlZmluZSBDVExf Uk9fR0VOKG4sIHYsIHQpCQkJCQkJXAotc3RhdGljIGludAkJCQkJCQkJXAotbiMjX2N0bCh0c2Rf dCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwJXAot ICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewkJCVwKLQlp bnQgcmV0OwkJCQkJCQlcCi0JdCBvbGR2YWw7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQltYWxsb2Nf bXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7CQkJXAotCVJFQURPTkxZKCk7CQkJ CQkJCVwKLQlvbGR2YWwgPSAodik7CQkJCQkJCVwKLQlSRUFEKG9sZHZhbCwgdCk7CQkJCQkJXAot CQkJCQkJCQkJXAotCXJldCA9IDA7CQkJCQkJCVwKLWxhYmVsX3JldHVybjoJCQkJCQkJCVwKLQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsJCQlcCi0JcmV0dXJu IHJldDsJCQkJCQkJXAotfQotCi0vKgotICogY3RsX210eCBpcyBub3QgYWNxdWlyZWQsIHVuZGVy IHRoZSBhc3N1bXB0aW9uIHRoYXQgbm8gcGVydGluZW50IGRhdGEgd2lsbAotICogbXV0YXRlIGR1 cmluZyB0aGUgY2FsbC4KLSAqLwotI2RlZmluZSBDVExfUk9fTkxfQ0dFTihjLCBuLCB2LCB0KQkJ CQkJXAotc3RhdGljIGludAkJCQkJCQkJXAotbiMjX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXpl X3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwJCQlcCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRs ZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CQlcCi0JaW50IHJldDsJCQkJCQkJXAot CXQgb2xkdmFsOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JaWYgKCEoYykpIHsJCQkJCQkJXAotCQly ZXR1cm4gRU5PRU5UOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JUkVBRE9OTFkoKTsJCQkJCQkJXAot CW9sZHZhbCA9ICh2KTsJCQkJCQkJXAotCVJFQUQob2xkdmFsLCB0KTsJCQkJCQlcCi0JCQkJCQkJ CQlcCi0JcmV0ID0gMDsJCQkJCQkJXAotbGFiZWxfcmV0dXJuOgkJCQkJCQkJXAotCXJldHVybiBy ZXQ7CQkJCQkJCVwKLX0KLQotI2RlZmluZSBDVExfUk9fTkxfR0VOKG4sIHYsIHQpCQkJCQkJXAot c3RhdGljIGludAkJCQkJCQkJXAotbiMjX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1p Yiwgc2l6ZV90IG1pYmxlbiwJCQlcCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2 b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7CQlcCi0JaW50IHJldDsJCQkJCQkJXAotCXQgb2xk dmFsOwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JUkVBRE9OTFkoKTsJCQkJCQkJXAotCW9sZHZhbCA9 ICh2KTsJCQkJCQkJXAotCVJFQUQob2xkdmFsLCB0KTsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JcmV0 ID0gMDsJCQkJCQkJXAotbGFiZWxfcmV0dXJuOgkJCQkJCQkJXAotCXJldHVybiByZXQ7CQkJCQkJ CVwKLX0KLQotI2RlZmluZSBDVExfUk9fQ09ORklHX0dFTihuLCB0KQkJCQkJCVwKLXN0YXRpYyBp bnQJCQkJCQkJCVwKLW4jI19jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVf dCBtaWJsZW4sCQkJXAotICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3 cCwgc2l6ZV90IG5ld2xlbikgewkJXAotCWludCByZXQ7CQkJCQkJCVwKLQl0IG9sZHZhbDsJCQkJ CQkJXAotCQkJCQkJCQkJXAotCVJFQURPTkxZKCk7CQkJCQkJCVwKLQlvbGR2YWwgPSBuOwkJCQkJ CQlcCi0JUkVBRChvbGR2YWwsIHQpOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlyZXQgPSAwOwkJCQkJ CQlcCi1sYWJlbF9yZXR1cm46CQkJCQkJCQlcCi0JcmV0dXJuIHJldDsJCQkJCQkJXAotfQotCi0v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotCi1DVExfUk9fTkxfR0VOKHZlcnNpb24sIEpFTUFMTE9D X1ZFUlNJT04sIGNvbnN0IGNoYXIgKikKLQotc3RhdGljIGludAotZXBvY2hfY3RsKHRzZF90ICp0 c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNp emVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0J VU5VU0VEIHVpbnQ2NF90IG5ld3ZhbDsKLQotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRz ZCksICZjdGxfbXR4KTsKLQlXUklURShuZXd2YWwsIHVpbnQ2NF90KTsKLQlpZiAobmV3cCAhPSBO VUxMKSB7Ci0JCWN0bF9yZWZyZXNoKHRzZF90c2RuKHRzZCkpOwotCX0KLQlSRUFEKGN0bF9hcmVu YXMtPmVwb2NoLCB1aW50NjRfdCk7Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJuOgotCW1hbGxv Y19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyBpbnQKLWJhY2tncm91bmRfdGhyZWFkX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBz aXplX3QgKm1pYiwKLSAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxl bnAsCi0gICAgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JYm9vbCBv bGR2YWw7Ci0KLQlpZiAoIWhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsKLQkJcmV0dXJuIEVOT0VO VDsKLQl9Ci0JYmFja2dyb3VuZF90aHJlYWRfY3RsX2luaXQodHNkX3RzZG4odHNkKSk7Ci0KLQlt YWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7Ci0JbWFsbG9jX211dGV4 X2xvY2sodHNkX3RzZG4odHNkKSwgJmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotCWlmIChuZXdw ID09IE5VTEwpIHsKLQkJb2xkdmFsID0gYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpOwotCQlS RUFEKG9sZHZhbCwgYm9vbCk7Ci0JfSBlbHNlIHsKLQkJaWYgKG5ld2xlbiAhPSBzaXplb2YoYm9v bCkpIHsKLQkJCXJldCA9IEVJTlZBTDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JCW9s ZHZhbCA9IGJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKTsKLQkJUkVBRChvbGR2YWwsIGJvb2wp OwotCi0JCWJvb2wgbmV3dmFsID0gKihib29sICopbmV3cDsKLQkJaWYgKG5ld3ZhbCA9PSBvbGR2 YWwpIHsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJfQotCi0JCWJhY2tn cm91bmRfdGhyZWFkX2VuYWJsZWRfc2V0KHRzZF90c2RuKHRzZCksIG5ld3ZhbCk7Ci0JCWlmIChu ZXd2YWwpIHsKLQkJCWlmIChiYWNrZ3JvdW5kX3RocmVhZHNfZW5hYmxlKHRzZCkpIHsKLQkJCQly ZXQgPSBFRkFVTFQ7Ci0JCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0J CQlpZiAoYmFja2dyb3VuZF90aHJlYWRzX2Rpc2FibGUodHNkKSkgewotCQkJCXJldCA9IEVGQVVM VDsKLQkJCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJCX0KLQkJfQotCX0KLQlyZXQgPSAwOwotbGFi ZWxfcmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmJhY2tncm91 bmRfdGhyZWFkX2xvY2spOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0 bF9tdHgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotbWF4X2JhY2tncm91bmRf dGhyZWFkc19jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1p Ymxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLAotICAgIHNpemVf dCBuZXdsZW4pIHsKLQlpbnQgcmV0OwotCXNpemVfdCBvbGR2YWw7Ci0KLQlpZiAoIWhhdmVfYmFj a2dyb3VuZF90aHJlYWQpIHsKLQkJcmV0dXJuIEVOT0VOVDsKLQl9Ci0JYmFja2dyb3VuZF90aHJl YWRfY3RsX2luaXQodHNkX3RzZG4odHNkKSk7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNk bih0c2QpLCAmY3RsX210eCk7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmJh Y2tncm91bmRfdGhyZWFkX2xvY2spOwotCWlmIChuZXdwID09IE5VTEwpIHsKLQkJb2xkdmFsID0g bWF4X2JhY2tncm91bmRfdGhyZWFkczsKLQkJUkVBRChvbGR2YWwsIHNpemVfdCk7Ci0JfSBlbHNl IHsKLQkJaWYgKG5ld2xlbiAhPSBzaXplb2Yoc2l6ZV90KSkgewotCQkJcmV0ID0gRUlOVkFMOwot CQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0KLQkJb2xkdmFsID0gbWF4X2JhY2tncm91bmRfdGhy ZWFkczsKLQkJUkVBRChvbGR2YWwsIHNpemVfdCk7Ci0KLQkJc2l6ZV90IG5ld3ZhbCA9ICooc2l6 ZV90ICopbmV3cDsKLQkJaWYgKG5ld3ZhbCA9PSBvbGR2YWwpIHsKLQkJCXJldCA9IDA7Ci0JCQln b3RvIGxhYmVsX3JldHVybjsKLQkJfQotCQlpZiAobmV3dmFsID4gb3B0X21heF9iYWNrZ3JvdW5k X3RocmVhZHMpIHsKLQkJCXJldCA9IEVJTlZBTDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9 Ci0KLQkJaWYgKGJhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSkgewotCQkJYmFja2dyb3VuZF90 aHJlYWRfZW5hYmxlZF9zZXQodHNkX3RzZG4odHNkKSwgZmFsc2UpOwotCQkJaWYgKGJhY2tncm91 bmRfdGhyZWFkc19kaXNhYmxlKHRzZCkpIHsKLQkJCQlyZXQgPSBFRkFVTFQ7Ci0JCQkJZ290byBs YWJlbF9yZXR1cm47Ci0JCQl9Ci0JCQltYXhfYmFja2dyb3VuZF90aHJlYWRzID0gbmV3dmFsOwot CQkJYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZF9zZXQodHNkX3RzZG4odHNkKSwgdHJ1ZSk7Ci0J CQlpZiAoYmFja2dyb3VuZF90aHJlYWRzX2VuYWJsZSh0c2QpKSB7Ci0JCQkJcmV0ID0gRUZBVUxU OwotCQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQkJfQotCQl9IGVsc2UgewotCQkJbWF4X2JhY2tn cm91bmRfdGhyZWFkcyA9IG5ld3ZhbDsKLQkJfQotCX0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJu OgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmJhY2tncm91bmRfdGhyZWFk X2xvY2spOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwot Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotQ1RMX1JPX0NP TkZJR19HRU4oY29uZmlnX2NhY2hlX29ibGl2aW91cywgYm9vbCkKLUNUTF9ST19DT05GSUdfR0VO KGNvbmZpZ19kZWJ1ZywgYm9vbCkKLUNUTF9ST19DT05GSUdfR0VOKGNvbmZpZ19maWxsLCBib29s KQotQ1RMX1JPX0NPTkZJR19HRU4oY29uZmlnX2xhenlfbG9jaywgYm9vbCkKLUNUTF9ST19DT05G SUdfR0VOKGNvbmZpZ19tYWxsb2NfY29uZiwgY29uc3QgY2hhciAqKQotQ1RMX1JPX0NPTkZJR19H RU4oY29uZmlnX29wdF9zYWZldHlfY2hlY2tzLCBib29sKQotQ1RMX1JPX0NPTkZJR19HRU4oY29u ZmlnX3Byb2YsIGJvb2wpCi1DVExfUk9fQ09ORklHX0dFTihjb25maWdfcHJvZl9saWJnY2MsIGJv b2wpCi1DVExfUk9fQ09ORklHX0dFTihjb25maWdfcHJvZl9saWJ1bndpbmQsIGJvb2wpCi1DVExf Uk9fQ09ORklHX0dFTihjb25maWdfc3RhdHMsIGJvb2wpCi1DVExfUk9fQ09ORklHX0dFTihjb25m aWdfdXRyYWNlLCBib29sKQotQ1RMX1JPX0NPTkZJR19HRU4oY29uZmlnX3htYWxsb2MsIGJvb2wp Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLUNUTF9ST19OTF9HRU4ob3B0X2Fib3J0LCBv cHRfYWJvcnQsIGJvb2wpCi1DVExfUk9fTkxfR0VOKG9wdF9hYm9ydF9jb25mLCBvcHRfYWJvcnRf Y29uZiwgYm9vbCkKLUNUTF9ST19OTF9HRU4ob3B0X2NhY2hlX29ibGl2aW91cywgb3B0X2NhY2hl X29ibGl2aW91cywgYm9vbCkKLUNUTF9ST19OTF9HRU4ob3B0X3RydXN0X21hZHZpc2UsIG9wdF90 cnVzdF9tYWR2aXNlLCBib29sKQotQ1RMX1JPX05MX0dFTihvcHRfY29uZmlybV9jb25mLCBvcHRf Y29uZmlybV9jb25mLCBib29sKQotCi0vKiBIUEEgb3B0aW9ucy4gKi8KLUNUTF9ST19OTF9HRU4o b3B0X2hwYSwgb3B0X2hwYSwgYm9vbCkKLUNUTF9ST19OTF9HRU4ob3B0X2hwYV9odWdpZmljYXRp b25fdGhyZXNob2xkLAotICAgIG9wdF9ocGFfb3B0cy5odWdpZmljYXRpb25fdGhyZXNob2xkLCBz aXplX3QpCi1DVExfUk9fTkxfR0VOKG9wdF9ocGFfaHVnaWZ5X2RlbGF5X21zLCBvcHRfaHBhX29w dHMuaHVnaWZ5X2RlbGF5X21zLCB1aW50NjRfdCkKLUNUTF9ST19OTF9HRU4ob3B0X2hwYV9taW5f cHVyZ2VfaW50ZXJ2YWxfbXMsIG9wdF9ocGFfb3B0cy5taW5fcHVyZ2VfaW50ZXJ2YWxfbXMsCi0g ICAgdWludDY0X3QpCi0KLS8qCi0gKiBUaGlzIHdpbGwgaGF2ZSB0byBjaGFuZ2UgYmVmb3JlIHdl IHB1YmxpY2x5IGRvY3VtZW50IHRoaXMgb3B0aW9uOyBmeHBfdCBhbmQKLSAqIGl0cyByZXByZXNl bnRhdGlvbiBhcmUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KLSAqLwotQ1RMX1JP X05MX0dFTihvcHRfaHBhX2RpcnR5X211bHQsIG9wdF9ocGFfb3B0cy5kaXJ0eV9tdWx0LCBmeHBf dCkKLUNUTF9ST19OTF9HRU4ob3B0X2hwYV9zbGFiX21heF9hbGxvYywgb3B0X2hwYV9vcHRzLnNs YWJfbWF4X2FsbG9jLCBzaXplX3QpCi0KLS8qIEhQQSBTRUMgb3B0aW9ucyAqLwotQ1RMX1JPX05M X0dFTihvcHRfaHBhX3NlY19uc2hhcmRzLCBvcHRfaHBhX3NlY19vcHRzLm5zaGFyZHMsIHNpemVf dCkKLUNUTF9ST19OTF9HRU4ob3B0X2hwYV9zZWNfbWF4X2FsbG9jLCBvcHRfaHBhX3NlY19vcHRz Lm1heF9hbGxvYywgc2l6ZV90KQotQ1RMX1JPX05MX0dFTihvcHRfaHBhX3NlY19tYXhfYnl0ZXMs IG9wdF9ocGFfc2VjX29wdHMubWF4X2J5dGVzLCBzaXplX3QpCi1DVExfUk9fTkxfR0VOKG9wdF9o cGFfc2VjX2J5dGVzX2FmdGVyX2ZsdXNoLCBvcHRfaHBhX3NlY19vcHRzLmJ5dGVzX2FmdGVyX2Zs dXNoLAotICAgIHNpemVfdCkKLUNUTF9ST19OTF9HRU4ob3B0X2hwYV9zZWNfYmF0Y2hfZmlsbF9l eHRyYSwgb3B0X2hwYV9zZWNfb3B0cy5iYXRjaF9maWxsX2V4dHJhLAotICAgIHNpemVfdCkKLQot Q1RMX1JPX05MX0dFTihvcHRfbWV0YWRhdGFfdGhwLCBtZXRhZGF0YV90aHBfbW9kZV9uYW1lc1tv cHRfbWV0YWRhdGFfdGhwXSwKLSAgICBjb25zdCBjaGFyICopCi1DVExfUk9fTkxfR0VOKG9wdF9y ZXRhaW4sIG9wdF9yZXRhaW4sIGJvb2wpCi1DVExfUk9fTkxfR0VOKG9wdF9kc3MsIG9wdF9kc3Ms IGNvbnN0IGNoYXIgKikKLUNUTF9ST19OTF9HRU4ob3B0X25hcmVuYXMsIG9wdF9uYXJlbmFzLCB1 bnNpZ25lZCkKLUNUTF9ST19OTF9HRU4ob3B0X3BlcmNwdV9hcmVuYSwgcGVyY3B1X2FyZW5hX21v ZGVfbmFtZXNbb3B0X3BlcmNwdV9hcmVuYV0sCi0gICAgY29uc3QgY2hhciAqKQotQ1RMX1JPX05M X0dFTihvcHRfbXV0ZXhfbWF4X3NwaW4sIG9wdF9tdXRleF9tYXhfc3BpbiwgaW50NjRfdCkKLUNU TF9ST19OTF9HRU4ob3B0X292ZXJzaXplX3RocmVzaG9sZCwgb3B0X292ZXJzaXplX3RocmVzaG9s ZCwgc2l6ZV90KQotQ1RMX1JPX05MX0dFTihvcHRfYmFja2dyb3VuZF90aHJlYWQsIG9wdF9iYWNr Z3JvdW5kX3RocmVhZCwgYm9vbCkKLUNUTF9ST19OTF9HRU4ob3B0X21heF9iYWNrZ3JvdW5kX3Ro cmVhZHMsIG9wdF9tYXhfYmFja2dyb3VuZF90aHJlYWRzLCBzaXplX3QpCi1DVExfUk9fTkxfR0VO KG9wdF9kaXJ0eV9kZWNheV9tcywgb3B0X2RpcnR5X2RlY2F5X21zLCBzc2l6ZV90KQotQ1RMX1JP X05MX0dFTihvcHRfbXV6enlfZGVjYXlfbXMsIG9wdF9tdXp6eV9kZWNheV9tcywgc3NpemVfdCkK LUNUTF9ST19OTF9HRU4ob3B0X3N0YXRzX3ByaW50LCBvcHRfc3RhdHNfcHJpbnQsIGJvb2wpCi1D VExfUk9fTkxfR0VOKG9wdF9zdGF0c19wcmludF9vcHRzLCBvcHRfc3RhdHNfcHJpbnRfb3B0cywg Y29uc3QgY2hhciAqKQotQ1RMX1JPX05MX0dFTihvcHRfc3RhdHNfaW50ZXJ2YWwsIG9wdF9zdGF0 c19pbnRlcnZhbCwgaW50NjRfdCkKLUNUTF9ST19OTF9HRU4ob3B0X3N0YXRzX2ludGVydmFsX29w dHMsIG9wdF9zdGF0c19pbnRlcnZhbF9vcHRzLCBjb25zdCBjaGFyICopCi1DVExfUk9fTkxfQ0dF Tihjb25maWdfZmlsbCwgb3B0X2p1bmssIG9wdF9qdW5rLCBjb25zdCBjaGFyICopCi1DVExfUk9f TkxfQ0dFTihjb25maWdfZmlsbCwgb3B0X3plcm8sIG9wdF96ZXJvLCBib29sKQotQ1RMX1JPX05M X0NHRU4oY29uZmlnX3V0cmFjZSwgb3B0X3V0cmFjZSwgb3B0X3V0cmFjZSwgYm9vbCkKLUNUTF9S T19OTF9DR0VOKGNvbmZpZ194bWFsbG9jLCBvcHRfeG1hbGxvYywgb3B0X3htYWxsb2MsIGJvb2wp Ci1DVExfUk9fTkxfQ0dFTihjb25maWdfZW5hYmxlX2N4eCwgb3B0X2V4cGVyaW1lbnRhbF9pbmZh bGxpYmxlX25ldywKLSAgICBvcHRfZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3LCBib29sKQot Q1RMX1JPX05MX0dFTihvcHRfdGNhY2hlLCBvcHRfdGNhY2hlLCBib29sKQotQ1RMX1JPX05MX0dF TihvcHRfdGNhY2hlX21heCwgb3B0X3RjYWNoZV9tYXgsIHNpemVfdCkKLUNUTF9ST19OTF9HRU4o b3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWluLCBvcHRfdGNhY2hlX25zbG90c19zbWFsbF9taW4s Ci0gICAgdW5zaWduZWQpCi1DVExfUk9fTkxfR0VOKG9wdF90Y2FjaGVfbnNsb3RzX3NtYWxsX21h eCwgb3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWF4LAotICAgIHVuc2lnbmVkKQotQ1RMX1JPX05M X0dFTihvcHRfdGNhY2hlX25zbG90c19sYXJnZSwgb3B0X3RjYWNoZV9uc2xvdHNfbGFyZ2UsIHVu c2lnbmVkKQotQ1RMX1JPX05MX0dFTihvcHRfbGdfdGNhY2hlX25zbG90c19tdWwsIG9wdF9sZ190 Y2FjaGVfbnNsb3RzX211bCwgc3NpemVfdCkKLUNUTF9ST19OTF9HRU4ob3B0X3RjYWNoZV9nY19p bmNyX2J5dGVzLCBvcHRfdGNhY2hlX2djX2luY3JfYnl0ZXMsIHNpemVfdCkKLUNUTF9ST19OTF9H RU4ob3B0X3RjYWNoZV9nY19kZWxheV9ieXRlcywgb3B0X3RjYWNoZV9nY19kZWxheV9ieXRlcywg c2l6ZV90KQotQ1RMX1JPX05MX0dFTihvcHRfbGdfdGNhY2hlX2ZsdXNoX3NtYWxsX2Rpdiwgb3B0 X2xnX3RjYWNoZV9mbHVzaF9zbWFsbF9kaXYsCi0gICAgdW5zaWduZWQpCi1DVExfUk9fTkxfR0VO KG9wdF9sZ190Y2FjaGVfZmx1c2hfbGFyZ2VfZGl2LCBvcHRfbGdfdGNhY2hlX2ZsdXNoX2xhcmdl X2RpdiwKLSAgICB1bnNpZ25lZCkKLUNUTF9ST19OTF9HRU4ob3B0X3RocCwgdGhwX21vZGVfbmFt ZXNbb3B0X3RocF0sIGNvbnN0IGNoYXIgKikKLUNUTF9ST19OTF9HRU4ob3B0X2xnX2V4dGVudF9t YXhfYWN0aXZlX2ZpdCwgb3B0X2xnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCwKLSAgICBzaXplX3Qp Ci1DVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgb3B0X3Byb2YsIG9wdF9wcm9mLCBib29sKQot Q1RMX1JPX05MX0NHRU4oY29uZmlnX3Byb2YsIG9wdF9wcm9mX3ByZWZpeCwgb3B0X3Byb2ZfcHJl Zml4LCBjb25zdCBjaGFyICopCi1DVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgb3B0X3Byb2Zf YWN0aXZlLCBvcHRfcHJvZl9hY3RpdmUsIGJvb2wpCi1DVExfUk9fTkxfQ0dFTihjb25maWdfcHJv Ziwgb3B0X3Byb2ZfdGhyZWFkX2FjdGl2ZV9pbml0LAotICAgIG9wdF9wcm9mX3RocmVhZF9hY3Rp dmVfaW5pdCwgYm9vbCkKLUNUTF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRfbGdfcHJvZl9z YW1wbGUsIG9wdF9sZ19wcm9mX3NhbXBsZSwgc2l6ZV90KQotQ1RMX1JPX05MX0NHRU4oY29uZmln X3Byb2YsIG9wdF9wcm9mX2FjY3VtLCBvcHRfcHJvZl9hY2N1bSwgYm9vbCkKLUNUTF9ST19OTF9D R0VOKGNvbmZpZ19wcm9mLCBvcHRfbGdfcHJvZl9pbnRlcnZhbCwgb3B0X2xnX3Byb2ZfaW50ZXJ2 YWwsIHNzaXplX3QpCi1DVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgb3B0X3Byb2ZfZ2R1bXAs IG9wdF9wcm9mX2dkdW1wLCBib29sKQotQ1RMX1JPX05MX0NHRU4oY29uZmlnX3Byb2YsIG9wdF9w cm9mX2ZpbmFsLCBvcHRfcHJvZl9maW5hbCwgYm9vbCkKLUNUTF9ST19OTF9DR0VOKGNvbmZpZ19w cm9mLCBvcHRfcHJvZl9sZWFrLCBvcHRfcHJvZl9sZWFrLCBib29sKQotQ1RMX1JPX05MX0NHRU4o Y29uZmlnX3Byb2YsIG9wdF9wcm9mX2xlYWtfZXJyb3IsIG9wdF9wcm9mX2xlYWtfZXJyb3IsIGJv b2wpCi1DVExfUk9fTkxfQ0dFTihjb25maWdfcHJvZiwgb3B0X3Byb2ZfcmVjZW50X2FsbG9jX21h eCwKLSAgICBvcHRfcHJvZl9yZWNlbnRfYWxsb2NfbWF4LCBzc2l6ZV90KQotQ1RMX1JPX05MX0NH RU4oY29uZmlnX3Byb2YsIG9wdF9wcm9mX3N0YXRzLCBvcHRfcHJvZl9zdGF0cywgYm9vbCkKLUNU TF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBvcHRfcHJvZl9zeXNfdGhyZWFkX25hbWUsIG9wdF9w cm9mX3N5c190aHJlYWRfbmFtZSwKLSAgICBib29sKQotQ1RMX1JPX05MX0NHRU4oY29uZmlnX3By b2YsIG9wdF9wcm9mX3RpbWVfcmVzLAotICAgIHByb2ZfdGltZV9yZXNfbW9kZV9uYW1lc1tvcHRf cHJvZl90aW1lX3Jlc10sIGNvbnN0IGNoYXIgKikKLUNUTF9ST19OTF9DR0VOKGNvbmZpZ191YWZf ZGV0ZWN0aW9uLCBvcHRfbGdfc2FuX3VhZl9hbGlnbiwKLSAgICBvcHRfbGdfc2FuX3VhZl9hbGln biwgc3NpemVfdCkKLUNUTF9ST19OTF9HRU4ob3B0X3plcm9fcmVhbGxvYywKLSAgICB6ZXJvX3Jl YWxsb2NfbW9kZV9uYW1lc1tvcHRfemVyb19yZWFsbG9jX2FjdGlvbl0sIGNvbnN0IGNoYXIgKikK LQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludAotdGhyZWFkX2FyZW5hX2N0 bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAgICB2b2lk ICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKLQlp bnQgcmV0OwotCWFyZW5hX3QgKm9sZGFyZW5hOwotCXVuc2lnbmVkIG5ld2luZCwgb2xkaW5kOwot Ci0Jb2xkYXJlbmEgPSBhcmVuYV9jaG9vc2UodHNkLCBOVUxMKTsKLQlpZiAob2xkYXJlbmEgPT0g TlVMTCkgewotCQlyZXR1cm4gRUFHQUlOOwotCX0KLQluZXdpbmQgPSBvbGRpbmQgPSBhcmVuYV9p bmRfZ2V0KG9sZGFyZW5hKTsKLQlXUklURShuZXdpbmQsIHVuc2lnbmVkKTsKLQlSRUFEKG9sZGlu ZCwgdW5zaWduZWQpOwotCi0JaWYgKG5ld2luZCAhPSBvbGRpbmQpIHsKLQkJYXJlbmFfdCAqbmV3 YXJlbmE7Ci0KLQkJaWYgKG5ld2luZCA+PSBuYXJlbmFzX3RvdGFsX2dldCgpKSB7Ci0JCQkvKiBO ZXcgYXJlbmEgaW5kZXggaXMgb3V0IG9mIHJhbmdlLiAqLwotCQkJcmV0ID0gRUZBVUxUOwotCQkJ Z290byBsYWJlbF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoaGF2ZV9wZXJjcHVfYXJlbmEgJiYKLQkJ ICAgIFBFUkNQVV9BUkVOQV9FTkFCTEVEKG9wdF9wZXJjcHVfYXJlbmEpKSB7Ci0JCQlpZiAobmV3 aW5kIDwgcGVyY3B1X2FyZW5hX2luZF9saW1pdChvcHRfcGVyY3B1X2FyZW5hKSkgewotCQkJCS8q Ci0JCQkJICogSWYgcGVyQ1BVIGFyZW5hIGlzIGVuYWJsZWQsIHRocmVhZF9hcmVuYQotCQkJCSAq IGNvbnRyb2wgaXMgbm90IGFsbG93ZWQgZm9yIHRoZSBhdXRvIGFyZW5hCi0JCQkJICogcmFuZ2Uu Ci0JCQkJICovCi0JCQkJcmV0ID0gRVBFUk07Ci0JCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCQl9 Ci0JCX0KLQotCQkvKiBJbml0aWFsaXplIGFyZW5hIGlmIG5lY2Vzc2FyeS4gKi8KLQkJbmV3YXJl bmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgbmV3aW5kLCB0cnVlKTsKLQkJaWYgKG5ld2Fy ZW5hID09IE5VTEwpIHsKLQkJCXJldCA9IEVBR0FJTjsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwot CQl9Ci0JCS8qIFNldCBuZXcgYXJlbmEvdGNhY2hlIGFzc29jaWF0aW9ucy4gKi8KLQkJYXJlbmFf bWlncmF0ZSh0c2QsIG9sZGFyZW5hLCBuZXdhcmVuYSk7Ci0JCWlmICh0Y2FjaGVfYXZhaWxhYmxl KHRzZCkpIHsKLQkJCXRjYWNoZV9hcmVuYV9yZWFzc29jaWF0ZSh0c2RfdHNkbih0c2QpLAotCQkJ ICAgIHRzZF90Y2FjaGVfc2xvd3BfZ2V0KHRzZCksIHRzZF90Y2FjaGVwX2dldCh0c2QpLAotCQkJ ICAgIG5ld2FyZW5hKTsKLQkJfQotCX0KLQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JcmV0 dXJuIHJldDsKLX0KLQotQ1RMX1JPX05MX0dFTih0aHJlYWRfYWxsb2NhdGVkLCB0c2RfdGhyZWFk X2FsbG9jYXRlZF9nZXQodHNkKSwgdWludDY0X3QpCi1DVExfUk9fTkxfR0VOKHRocmVhZF9hbGxv Y2F0ZWRwLCB0c2RfdGhyZWFkX2FsbG9jYXRlZHBfZ2V0KHRzZCksIHVpbnQ2NF90ICopCi1DVExf Uk9fTkxfR0VOKHRocmVhZF9kZWFsbG9jYXRlZCwgdHNkX3RocmVhZF9kZWFsbG9jYXRlZF9nZXQo dHNkKSwgdWludDY0X3QpCi1DVExfUk9fTkxfR0VOKHRocmVhZF9kZWFsbG9jYXRlZHAsIHRzZF90 aHJlYWRfZGVhbGxvY2F0ZWRwX2dldCh0c2QpLCB1aW50NjRfdCAqKQotCi1zdGF0aWMgaW50Ci10 aHJlYWRfdGNhY2hlX2VuYWJsZWRfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAot ICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3 cCwKLSAgICBzaXplX3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQlib29sIG9sZHZhbDsKLQotCW9s ZHZhbCA9IHRjYWNoZV9lbmFibGVkX2dldCh0c2QpOwotCWlmIChuZXdwICE9IE5VTEwpIHsKLQkJ aWYgKG5ld2xlbiAhPSBzaXplb2YoYm9vbCkpIHsKLQkJCXJldCA9IEVJTlZBTDsKLQkJCWdvdG8g bGFiZWxfcmV0dXJuOwotCQl9Ci0JCXRjYWNoZV9lbmFibGVkX3NldCh0c2QsICooYm9vbCAqKW5l d3ApOwotCX0KLQlSRUFEKG9sZHZhbCwgYm9vbCk7Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJu OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXRocmVhZF90Y2FjaGVfZmx1c2hfY3Rs KHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNpemVfdCBtaWJsZW4sIHZvaWQg Km9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwKLSAgICBzaXplX3QgbmV3bGVuKSB7 Ci0JaW50IHJldDsKLQotCWlmICghdGNhY2hlX2F2YWlsYWJsZSh0c2QpKSB7Ci0JCXJldCA9IEVG QVVMVDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCi0JTkVJVEhFUl9SRUFEX05PUl9XUklU RSgpOwotCi0JdGNhY2hlX2ZsdXNoKHRzZCk7Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJuOgot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXRocmVhZF9wZWFrX3JlYWRfY3RsKHRzZF90 ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAs IHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwKLSAgICBzaXplX3QgbmV3bGVuKSB7Ci0JaW50 IHJldDsKLQlpZiAoIWNvbmZpZ19zdGF0cykgewotCQlyZXR1cm4gRU5PRU5UOwotCX0KLQlSRUFE T05MWSgpOwotCXBlYWtfZXZlbnRfdXBkYXRlKHRzZCk7Ci0JdWludDY0X3QgcmVzdWx0ID0gcGVh a19ldmVudF9tYXgodHNkKTsKLQlSRUFEKHJlc3VsdCwgdWludDY0X3QpOwotCXJldCA9IDA7Ci1s YWJlbF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotdGhyZWFkX3BlYWtf cmVzZXRfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNpemVfdCBtaWJs ZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwKLSAgICBzaXplX3Qg bmV3bGVuKSB7Ci0JaW50IHJldDsKLQlpZiAoIWNvbmZpZ19zdGF0cykgewotCQlyZXR1cm4gRU5P RU5UOwotCX0KLQlORUlUSEVSX1JFQURfTk9SX1dSSVRFKCk7Ci0JcGVha19ldmVudF96ZXJvKHRz ZCk7Ci0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg aW50Ci10aHJlYWRfcHJvZl9uYW1lX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwK LSAgICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5l d3AsCi0gICAgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0KLQlpZiAoIWNvbmZpZ19wcm9m IHx8ICFvcHRfcHJvZikgewotCQlyZXR1cm4gRU5PRU5UOwotCX0KLQotCVJFQURfWE9SX1dSSVRF KCk7Ci0KLQlpZiAobmV3cCAhPSBOVUxMKSB7Ci0JCWlmIChuZXdsZW4gIT0gc2l6ZW9mKGNvbnN0 IGNoYXIgKikpIHsKLQkJCXJldCA9IEVJTlZBTDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9 Ci0KLQkJaWYgKChyZXQgPSBwcm9mX3RocmVhZF9uYW1lX3NldCh0c2QsICooY29uc3QgY2hhciAq KiluZXdwKSkgIT0KLQkJICAgIDApIHsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JfSBl bHNlIHsKLQkJY29uc3QgY2hhciAqb2xkbmFtZSA9IHByb2ZfdGhyZWFkX25hbWVfZ2V0KHRzZCk7 Ci0JCVJFQUQob2xkbmFtZSwgY29uc3QgY2hhciAqKTsKLQl9Ci0KLQlyZXQgPSAwOwotbGFiZWxf cmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXRocmVhZF9wcm9mX2FjdGl2 ZV9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1pYmxlbiwg dm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLAotICAgIHNpemVfdCBuZXds ZW4pIHsKLQlpbnQgcmV0OwotCWJvb2wgb2xkdmFsOwotCi0JaWYgKCFjb25maWdfcHJvZikgewot CQlyZXR1cm4gRU5PRU5UOwotCX0KLQotCW9sZHZhbCA9IG9wdF9wcm9mID8gcHJvZl90aHJlYWRf YWN0aXZlX2dldCh0c2QpIDogZmFsc2U7Ci0JaWYgKG5ld3AgIT0gTlVMTCkgewotCQlpZiAoIW9w dF9wcm9mKSB7Ci0JCQlyZXQgPSBFTk9FTlQ7Ci0JCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJfQot CQlpZiAobmV3bGVuICE9IHNpemVvZihib29sKSkgewotCQkJcmV0ID0gRUlOVkFMOwotCQkJZ290 byBsYWJlbF9yZXR1cm47Ci0JCX0KLQkJaWYgKHByb2ZfdGhyZWFkX2FjdGl2ZV9zZXQodHNkLCAq KGJvb2wgKiluZXdwKSkgewotCQkJcmV0ID0gRUFHQUlOOwotCQkJZ290byBsYWJlbF9yZXR1cm47 Ci0JCX0KLQl9Ci0JUkVBRChvbGR2YWwsIGJvb2wpOwotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVy bjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci10aHJlYWRfaWRsZV9jdGwodHNkX3Qg KnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwg c2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLAotICAgIHNpemVfdCBuZXdsZW4pIHsKLQlpbnQg cmV0OwotCi0JTkVJVEhFUl9SRUFEX05PUl9XUklURSgpOwotCi0JaWYgKHRjYWNoZV9hdmFpbGFi bGUodHNkKSkgewotCQl0Y2FjaGVfZmx1c2godHNkKTsKLQl9Ci0JLyoKLQkgKiBUaGlzIGhldXJp c3RpYyBpcyBwZXJoYXBzIG5vdCB0aGUgbW9zdCB3ZWxsLWNvbnNpZGVyZWQuICBCdXQgaXQKLQkg KiBtYXRjaGVzIHRoZSBvbmx5IGlkbGluZyBwb2xpY3kgd2UgaGF2ZSBleHBlcmllbmNlIHdpdGgg aW4gdGhlIHN0YXR1cwotCSAqIHF1by4gIE92ZXIgdGltZSB3ZSBzaG91bGQgaW52ZXN0aWdhdGUg bW9yZSBwcmluY2lwbGVkIGFwcHJvYWNoZXMuCi0JICovCi0JaWYgKG9wdF9uYXJlbmFzID4gbmNw dXMgKiAyKSB7Ci0JCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfY2hvb3NlKHRzZCwgTlVMTCk7Ci0J CWlmIChhcmVuYSAhPSBOVUxMKSB7Ci0JCQlhcmVuYV9kZWNheSh0c2RfdHNkbih0c2QpLCBhcmVu YSwgZmFsc2UsIHRydWUpOwotCQl9Ci0JCS8qCi0JCSAqIFRoZSBtaXNzaW5nIGFyZW5hIGNhc2Ug aXMgbm90IGFjdHVhbGx5IGFuIGVycm9yOyBhIHRocmVhZAotCQkgKiBtaWdodCBiZSBpZGxlIGJl Zm9yZSBpdCBhc3NvY2lhdGVzIGl0c2VsZiB0byBvbmUuICBUaGlzIGlzCi0JCSAqIHVudXN1YWws IGJ1dCBub3Qgd3JvbmcuCi0JCSAqLwotCX0KLQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0J cmV0dXJuIHJldDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludAot dGNhY2hlX2NyZWF0ZV9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBt aWJsZW4sCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXpl X3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCB0Y2FjaGVfaW5kOwotCi0JUkVBRE9O TFkoKTsKLQlWRVJJRllfUkVBRCh1bnNpZ25lZCk7Ci0JaWYgKHRjYWNoZXNfY3JlYXRlKHRzZCwg YjBnZXQoKSwgJnRjYWNoZV9pbmQpKSB7Ci0JCXJldCA9IEVGQVVMVDsKLQkJZ290byBsYWJlbF9y ZXR1cm47Ci0JfQotCVJFQUQodGNhY2hlX2luZCwgdW5zaWduZWQpOwotCi0JcmV0ID0gMDsKLWxh YmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci10Y2FjaGVfZmx1c2hf Y3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZv aWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewot CWludCByZXQ7Ci0JdW5zaWduZWQgdGNhY2hlX2luZDsKLQotCVdSSVRFT05MWSgpOwotCUFTU1VS RURfV1JJVEUodGNhY2hlX2luZCwgdW5zaWduZWQpOwotCXRjYWNoZXNfZmx1c2godHNkLCB0Y2Fj aGVfaW5kKTsKLQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0KLQot c3RhdGljIGludAotdGNhY2hlX2Rlc3Ryb3lfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAq bWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9p ZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JdW5zaWduZWQgdGNhY2hlX2lu ZDsKLQotCVdSSVRFT05MWSgpOwotCUFTU1VSRURfV1JJVEUodGNhY2hlX2luZCwgdW5zaWduZWQp OwotCXRjYWNoZXNfZGVzdHJveSh0c2QsIHRjYWNoZV9pbmQpOwotCi0JcmV0ID0gMDsKLWxhYmVs X3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1z dGF0aWMgaW50Ci1hcmVuYV9pX2luaXRpYWxpemVkX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXpl X3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAs IHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKLQlpbnQgcmV0OwotCXRzZG5fdCAqdHNkbiA9 IHRzZF90c2RuKHRzZCk7Ci0JdW5zaWduZWQgYXJlbmFfaW5kOwotCWJvb2wgaW5pdGlhbGl6ZWQ7 Ci0KLQlSRUFET05MWSgpOwotCU1JQl9VTlNJR05FRChhcmVuYV9pbmQsIDEpOwotCi0JbWFsbG9j X211dGV4X2xvY2sodHNkbiwgJmN0bF9tdHgpOwotCWluaXRpYWxpemVkID0gYXJlbmFzX2koYXJl bmFfaW5kKS0+aW5pdGlhbGl6ZWQ7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmY3RsX210 eCk7Ci0KLQlSRUFEKGluaXRpYWxpemVkLCBib29sKTsKLQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1 cm46Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQKLWFyZW5hX2lfZGVjYXkodHNkbl90 ICp0c2RuLCB1bnNpZ25lZCBhcmVuYV9pbmQsIGJvb2wgYWxsKSB7Ci0JbWFsbG9jX211dGV4X2xv Y2sodHNkbiwgJmN0bF9tdHgpOwotCXsKLQkJdW5zaWduZWQgbmFyZW5hcyA9IGN0bF9hcmVuYXMt Pm5hcmVuYXM7Ci0KLQkJLyoKLQkJICogQWNjZXNzIHZpYSBpbmRleCBuYXJlbmFzIGlzIGRlcHJl Y2F0ZWQsIGFuZCBzY2hlZHVsZWQgZm9yCi0JCSAqIHJlbW92YWwgaW4gNi4wLjAuCi0JCSAqLwot CQlpZiAoYXJlbmFfaW5kID09IE1BTExDVExfQVJFTkFTX0FMTCB8fCBhcmVuYV9pbmQgPT0gbmFy ZW5hcykgewotCQkJdW5zaWduZWQgaTsKLQkJCVZBUklBQkxFX0FSUkFZKGFyZW5hX3QgKiwgdGFy ZW5hcywgbmFyZW5hcyk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBuYXJlbmFzOyBpKyspIHsKLQkJ CQl0YXJlbmFzW2ldID0gYXJlbmFfZ2V0KHRzZG4sIGksIGZhbHNlKTsKLQkJCX0KLQotCQkJLyoK LQkJCSAqIE5vIGZ1cnRoZXIgbmVlZCB0byBob2xkIGN0bF9tdHgsIHNpbmNlIG5hcmVuYXMgYW5k Ci0JCQkgKiB0YXJlbmFzIGNvbnRhaW4gZXZlcnl0aGluZyBuZWVkZWQgYmVsb3cuCi0JCQkgKi8K LQkJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmN0bF9tdHgpOwotCi0JCQlmb3IgKGkgPSAw OyBpIDwgbmFyZW5hczsgaSsrKSB7Ci0JCQkJaWYgKHRhcmVuYXNbaV0gIT0gTlVMTCkgewotCQkJ CQlhcmVuYV9kZWNheSh0c2RuLCB0YXJlbmFzW2ldLCBmYWxzZSwKLQkJCQkJICAgIGFsbCk7Ci0J CQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJYXJlbmFfdCAqdGFyZW5hOwotCi0JCQlhc3NlcnQo YXJlbmFfaW5kIDwgbmFyZW5hcyk7Ci0KLQkJCXRhcmVuYSA9IGFyZW5hX2dldCh0c2RuLCBhcmVu YV9pbmQsIGZhbHNlKTsKLQotCQkJLyogTm8gZnVydGhlciBuZWVkIHRvIGhvbGQgY3RsX210eC4g Ki8KLQkJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmN0bF9tdHgpOwotCi0JCQlpZiAodGFy ZW5hICE9IE5VTEwpIHsKLQkJCQlhcmVuYV9kZWNheSh0c2RuLCB0YXJlbmEsIGZhbHNlLCBhbGwp OwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1hcmVuYV9pX2RlY2F5X2N0bCh0c2Rf dCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwKLSAg ICBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKLQlpbnQgcmV0 OwotCXVuc2lnbmVkIGFyZW5hX2luZDsKLQotCU5FSVRIRVJfUkVBRF9OT1JfV1JJVEUoKTsKLQlN SUJfVU5TSUdORUQoYXJlbmFfaW5kLCAxKTsKLQlhcmVuYV9pX2RlY2F5KHRzZF90c2RuKHRzZCks IGFyZW5hX2luZCwgZmFsc2UpOwotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4g cmV0OwotfQotCi1zdGF0aWMgaW50Ci1hcmVuYV9pX3B1cmdlX2N0bCh0c2RfdCAqdHNkLCBjb25z dCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwKLSAgICBzaXplX3QgKm9s ZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKLQlpbnQgcmV0OwotCXVuc2lnbmVk IGFyZW5hX2luZDsKLQotCU5FSVRIRVJfUkVBRF9OT1JfV1JJVEUoKTsKLQlNSUJfVU5TSUdORUQo YXJlbmFfaW5kLCAxKTsKLQlhcmVuYV9pX2RlY2F5KHRzZF90c2RuKHRzZCksIGFyZW5hX2luZCwg dHJ1ZSk7Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0 YXRpYyBpbnQKLWFyZW5hX2lfcmVzZXRfZGVzdHJveV9oZWxwZXIodHNkX3QgKnRzZCwgY29uc3Qg c2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRs ZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuLCB1bnNpZ25lZCAqYXJlbmFfaW5kLAotICAg IGFyZW5hX3QgKiphcmVuYSkgewotCWludCByZXQ7Ci0KLQlORUlUSEVSX1JFQURfTk9SX1dSSVRF KCk7Ci0JTUlCX1VOU0lHTkVEKCphcmVuYV9pbmQsIDEpOwotCi0JKmFyZW5hID0gYXJlbmFfZ2V0 KHRzZF90c2RuKHRzZCksICphcmVuYV9pbmQsIGZhbHNlKTsKLQlpZiAoKmFyZW5hID09IE5VTEwg fHwgYXJlbmFfaXNfYXV0bygqYXJlbmEpKSB7Ci0JCXJldCA9IEVGQVVMVDsKLQkJZ290byBsYWJl bF9yZXR1cm47Ci0JfQotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0Owot fQotCi1zdGF0aWMgdm9pZAotYXJlbmFfcmVzZXRfcHJlcGFyZV9iYWNrZ3JvdW5kX3RocmVhZCh0 c2RfdCAqdHNkLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQkvKiBUZW1wb3JhcmlseSBkaXNhYmxl IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBkdXJpbmcgYXJlbmEgcmVzZXQuICovCi0JaWYgKGhhdmVf YmFja2dyb3VuZF90aHJlYWQpIHsKLQkJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwg JmJhY2tncm91bmRfdGhyZWFkX2xvY2spOwotCQlpZiAoYmFja2dyb3VuZF90aHJlYWRfZW5hYmxl ZCgpKSB7Ci0JCQliYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8gPQotCQkJICAgIGJhY2tn cm91bmRfdGhyZWFkX2luZm9fZ2V0KGFyZW5hX2luZCk7Ci0JCQlhc3NlcnQoaW5mby0+c3RhdGUg PT0gYmFja2dyb3VuZF90aHJlYWRfc3RhcnRlZCk7Ci0JCQltYWxsb2NfbXV0ZXhfbG9jayh0c2Rf dHNkbih0c2QpLCAmaW5mby0+bXR4KTsKLQkJCWluZm8tPnN0YXRlID0gYmFja2dyb3VuZF90aHJl YWRfcGF1c2VkOwotCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+ bXR4KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLWFyZW5hX3Jlc2V0X2ZpbmlzaF9iYWNr Z3JvdW5kX3RocmVhZCh0c2RfdCAqdHNkLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQlpZiAoaGF2 ZV9iYWNrZ3JvdW5kX3RocmVhZCkgewotCQlpZiAoYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgp KSB7Ci0JCQliYWNrZ3JvdW5kX3RocmVhZF9pbmZvX3QgKmluZm8gPQotCQkJICAgIGJhY2tncm91 bmRfdGhyZWFkX2luZm9fZ2V0KGFyZW5hX2luZCk7Ci0JCQlhc3NlcnQoaW5mby0+c3RhdGUgPT0g YmFja2dyb3VuZF90aHJlYWRfcGF1c2VkKTsKLQkJCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2Ru KHRzZCksICZpbmZvLT5tdHgpOwotCQkJaW5mby0+c3RhdGUgPSBiYWNrZ3JvdW5kX3RocmVhZF9z dGFydGVkOwotCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4 KTsKLQkJfQotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZiYWNrZ3JvdW5k X3RocmVhZF9sb2NrKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLWFyZW5hX2lfcmVzZXRfY3RsKHRz ZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLAot ICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCBy ZXQ7Ci0JdW5zaWduZWQgYXJlbmFfaW5kOwotCWFyZW5hX3QgKmFyZW5hOwotCi0JcmV0ID0gYXJl bmFfaV9yZXNldF9kZXN0cm95X2hlbHBlcih0c2QsIG1pYiwgbWlibGVuLCBvbGRwLCBvbGRsZW5w LAotCSAgICBuZXdwLCBuZXdsZW4sICZhcmVuYV9pbmQsICZhcmVuYSk7Ci0JaWYgKHJldCAhPSAw KSB7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JYXJlbmFfcmVzZXRfcHJlcGFyZV9iYWNrZ3JvdW5k X3RocmVhZCh0c2QsIGFyZW5hX2luZCk7Ci0JYXJlbmFfcmVzZXQodHNkLCBhcmVuYSk7Ci0JYXJl bmFfcmVzZXRfZmluaXNoX2JhY2tncm91bmRfdGhyZWFkKHRzZCwgYXJlbmFfaW5kKTsKLQotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyZW5hX2lfZGVzdHJveV9jdGwodHNkX3QgKnRz ZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsCi0gICAgc2l6 ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQl1 bnNpZ25lZCBhcmVuYV9pbmQ7Ci0JYXJlbmFfdCAqYXJlbmE7Ci0JY3RsX2FyZW5hX3QgKmN0bF9k YXJlbmEsICpjdGxfYXJlbmE7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAm Y3RsX210eCk7Ci0KLQlyZXQgPSBhcmVuYV9pX3Jlc2V0X2Rlc3Ryb3lfaGVscGVyKHRzZCwgbWli LCBtaWJsZW4sIG9sZHAsIG9sZGxlbnAsCi0JICAgIG5ld3AsIG5ld2xlbiwgJmFyZW5hX2luZCwg JmFyZW5hKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCi0J aWYgKGFyZW5hX250aHJlYWRzX2dldChhcmVuYSwgZmFsc2UpICE9IDAgfHwgYXJlbmFfbnRocmVh ZHNfZ2V0KGFyZW5hLAotCSAgICB0cnVlKSAhPSAwKSB7Ci0JCXJldCA9IEVGQVVMVDsKLQkJZ290 byBsYWJlbF9yZXR1cm47Ci0JfQotCi0JYXJlbmFfcmVzZXRfcHJlcGFyZV9iYWNrZ3JvdW5kX3Ro cmVhZCh0c2QsIGFyZW5hX2luZCk7Ci0JLyogTWVyZ2Ugc3RhdHMgYWZ0ZXIgcmVzZXR0aW5nIGFu ZCBwdXJnaW5nIGFyZW5hLiAqLwotCWFyZW5hX3Jlc2V0KHRzZCwgYXJlbmEpOwotCWFyZW5hX2Rl Y2F5KHRzZF90c2RuKHRzZCksIGFyZW5hLCBmYWxzZSwgdHJ1ZSk7Ci0JY3RsX2RhcmVuYSA9IGFy ZW5hc19pKE1BTExDVExfQVJFTkFTX0RFU1RST1lFRCk7Ci0JY3RsX2RhcmVuYS0+aW5pdGlhbGl6 ZWQgPSB0cnVlOwotCWN0bF9hcmVuYV9yZWZyZXNoKHRzZF90c2RuKHRzZCksIGFyZW5hLCBjdGxf ZGFyZW5hLCBhcmVuYV9pbmQsIHRydWUpOwotCS8qIERlc3Ryb3kgYXJlbmEuICovCi0JYXJlbmFf ZGVzdHJveSh0c2QsIGFyZW5hKTsKLQljdGxfYXJlbmEgPSBhcmVuYXNfaShhcmVuYV9pbmQpOwot CWN0bF9hcmVuYS0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQkvKiBSZWNvcmQgYXJlbmEgaW5kZXgg Zm9yIGxhdGVyIHJlY3ljbGluZyB2aWEgYXJlbmFzLmNyZWF0ZS4gKi8KLQlxbF9lbG1fbmV3KGN0 bF9hcmVuYSwgZGVzdHJveWVkX2xpbmspOwotCXFsX3RhaWxfaW5zZXJ0KCZjdGxfYXJlbmFzLT5k ZXN0cm95ZWQsIGN0bF9hcmVuYSwgZGVzdHJveWVkX2xpbmspOwotCWFyZW5hX3Jlc2V0X2Zpbmlz aF9iYWNrZ3JvdW5kX3RocmVhZCh0c2QsIGFyZW5hX2luZCk7Ci0KLQlhc3NlcnQocmV0ID09IDAp OwotbGFiZWxfcmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0 bF9tdHgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXJlbmFfaV9kc3NfY3Rs KHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRw LAotICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWlu dCByZXQ7Ci0JY29uc3QgY2hhciAqZHNzID0gTlVMTDsKLQl1bnNpZ25lZCBhcmVuYV9pbmQ7Ci0J ZHNzX3ByZWNfdCBkc3NfcHJlY19vbGQgPSBkc3NfcHJlY19saW1pdDsKLQlkc3NfcHJlY190IGRz c19wcmVjID0gZHNzX3ByZWNfbGltaXQ7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0 c2QpLCAmY3RsX210eCk7Ci0JV1JJVEUoZHNzLCBjb25zdCBjaGFyICopOwotCU1JQl9VTlNJR05F RChhcmVuYV9pbmQsIDEpOwotCWlmIChkc3MgIT0gTlVMTCkgewotCQlpbnQgaTsKLQkJYm9vbCBt YXRjaCA9IGZhbHNlOwotCi0JCWZvciAoaSA9IDA7IGkgPCBkc3NfcHJlY19saW1pdDsgaSsrKSB7 Ci0JCQlpZiAoc3RyY21wKGRzc19wcmVjX25hbWVzW2ldLCBkc3MpID09IDApIHsKLQkJCQlkc3Nf cHJlYyA9IGk7Ci0JCQkJbWF0Y2ggPSB0cnVlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJ aWYgKCFtYXRjaCkgewotCQkJcmV0ID0gRUlOVkFMOwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0J CX0KLQl9Ci0KLQkvKgotCSAqIEFjY2VzcyB2aWEgaW5kZXggbmFyZW5hcyBpcyBkZXByZWNhdGVk LCBhbmQgc2NoZWR1bGVkIGZvciByZW1vdmFsIGluCi0JICogNi4wLjAuCi0JICovCi0JaWYgKGFy ZW5hX2luZCA9PSBNQUxMQ1RMX0FSRU5BU19BTEwgfHwgYXJlbmFfaW5kID09Ci0JICAgIGN0bF9h cmVuYXMtPm5hcmVuYXMpIHsKLQkJaWYgKGRzc19wcmVjICE9IGRzc19wcmVjX2xpbWl0ICYmCi0J CSAgICBleHRlbnRfZHNzX3ByZWNfc2V0KGRzc19wcmVjKSkgewotCQkJcmV0ID0gRUZBVUxUOwot CQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0KLQkJZHNzX3ByZWNfb2xkID0gZXh0ZW50X2Rzc19w cmVjX2dldCgpOwotCX0gZWxzZSB7Ci0JCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0KHRzZF90 c2RuKHRzZCksIGFyZW5hX2luZCwgZmFsc2UpOwotCQlpZiAoYXJlbmEgPT0gTlVMTCB8fCAoZHNz X3ByZWMgIT0gZHNzX3ByZWNfbGltaXQgJiYKLQkJICAgIGFyZW5hX2Rzc19wcmVjX3NldChhcmVu YSwgZHNzX3ByZWMpKSkgewotCQkJcmV0ID0gRUZBVUxUOwotCQkJZ290byBsYWJlbF9yZXR1cm47 Ci0JCX0KLQkJZHNzX3ByZWNfb2xkID0gYXJlbmFfZHNzX3ByZWNfZ2V0KGFyZW5hKTsKLQl9Ci0K LQlkc3MgPSBkc3NfcHJlY19uYW1lc1tkc3NfcHJlY19vbGRdOwotCVJFQUQoZHNzLCBjb25zdCBj aGFyICopOwotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50 Ci1hcmVuYV9pX292ZXJzaXplX3RocmVzaG9sZF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90 ICptaWIsIHNpemVfdCBtaWJsZW4sCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2 b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQotCXVuc2lnbmVkIGFyZW5h X2luZDsKLQlNSUJfVU5TSUdORUQoYXJlbmFfaW5kLCAxKTsKLQotCWFyZW5hX3QgKmFyZW5hID0g YXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIGFyZW5hX2luZCwgZmFsc2UpOwotCWlmIChhcmVuYSA9 PSBOVUxMKSB7Ci0JCXJldCA9IEVGQVVMVDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCi0J aWYgKG9sZHAgIT0gTlVMTCAmJiBvbGRsZW5wICE9IE5VTEwpIHsKLQkJc2l6ZV90IG9sZHZhbCA9 IGF0b21pY19sb2FkX3p1KAotCQkgICAgJmFyZW5hLT5wYV9zaGFyZC5wYWMub3ZlcnNpemVfdGhy ZXNob2xkLCBBVE9NSUNfUkVMQVhFRCk7Ci0JCVJFQUQob2xkdmFsLCBzaXplX3QpOwotCX0KLQlp ZiAobmV3cCAhPSBOVUxMKSB7Ci0JCWlmIChuZXdsZW4gIT0gc2l6ZW9mKHNpemVfdCkpIHsKLQkJ CXJldCA9IEVJTlZBTDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JCWF0b21pY19zdG9y ZV96dSgmYXJlbmEtPnBhX3NoYXJkLnBhYy5vdmVyc2l6ZV90aHJlc2hvbGQsCi0JCSAgICAqKHNp emVfdCAqKW5ld3AsIEFUT01JQ19SRUxBWEVEKTsKLQl9Ci0JcmV0ID0gMDsKLWxhYmVsX3JldHVy bjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1hcmVuYV9pX2RlY2F5X21zX2N0bF9p bXBsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZv aWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbiwgYm9v bCBkaXJ0eSkgewotCWludCByZXQ7Ci0JdW5zaWduZWQgYXJlbmFfaW5kOwotCWFyZW5hX3QgKmFy ZW5hOwotCi0JTUlCX1VOU0lHTkVEKGFyZW5hX2luZCwgMSk7Ci0JYXJlbmEgPSBhcmVuYV9nZXQo dHNkX3RzZG4odHNkKSwgYXJlbmFfaW5kLCBmYWxzZSk7Ci0JaWYgKGFyZW5hID09IE5VTEwpIHsK LQkJcmV0ID0gRUZBVUxUOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0JZXh0ZW50X3N0YXRl X3Qgc3RhdGUgPSBkaXJ0eSA/IGV4dGVudF9zdGF0ZV9kaXJ0eSA6IGV4dGVudF9zdGF0ZV9tdXp6 eTsKLQotCWlmIChvbGRwICE9IE5VTEwgJiYgb2xkbGVucCAhPSBOVUxMKSB7Ci0JCXNpemVfdCBv bGR2YWwgPSBhcmVuYV9kZWNheV9tc19nZXQoYXJlbmEsIHN0YXRlKTsKLQkJUkVBRChvbGR2YWws IHNzaXplX3QpOwotCX0KLQlpZiAobmV3cCAhPSBOVUxMKSB7Ci0JCWlmIChuZXdsZW4gIT0gc2l6 ZW9mKHNzaXplX3QpKSB7Ci0JCQlyZXQgPSBFSU5WQUw7Ci0JCQlnb3RvIGxhYmVsX3JldHVybjsK LQkJfQotCQlpZiAoYXJlbmFfaXNfaHVnZShhcmVuYV9pbmQpICYmICooc3NpemVfdCAqKW5ld3Ag PiAwKSB7Ci0JCQkvKgotCQkJICogQnkgZGVmYXVsdCB0aGUgaHVnZSBhcmVuYSBwdXJnZXMgZWFn ZXJseS4gIElmIGl0IGlzCi0JCQkgKiBzZXQgdG8gbm9uLXplcm8gZGVjYXkgdGltZSBhZnRlcndh cmRzLCBiYWNrZ3JvdW5kCi0JCQkgKiB0aHJlYWQgbWlnaHQgYmUgbmVlZGVkLgotCQkJICovCi0J CQlpZiAoYmFja2dyb3VuZF90aHJlYWRfY3JlYXRlKHRzZCwgYXJlbmFfaW5kKSkgewotCQkJCXJl dCA9IEVGQVVMVDsKLQkJCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJCX0KLQkJfQotCi0JCWlmIChh cmVuYV9kZWNheV9tc19zZXQodHNkX3RzZG4odHNkKSwgYXJlbmEsIHN0YXRlLAotCQkgICAgKihz c2l6ZV90ICopbmV3cCkpIHsKLQkJCXJldCA9IEVGQVVMVDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJu OwotCQl9Ci0JfQotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQot Ci1zdGF0aWMgaW50Ci1hcmVuYV9pX2RpcnR5X2RlY2F5X21zX2N0bCh0c2RfdCAqdHNkLCBjb25z dCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9s ZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKLQlyZXR1cm4gYXJlbmFfaV9kZWNh eV9tc19jdGxfaW1wbCh0c2QsIG1pYiwgbWlibGVuLCBvbGRwLCBvbGRsZW5wLCBuZXdwLAotCSAg ICBuZXdsZW4sIHRydWUpOwotfQotCi1zdGF0aWMgaW50Ci1hcmVuYV9pX211enp5X2RlY2F5X21z X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAgICB2 b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsK LQlyZXR1cm4gYXJlbmFfaV9kZWNheV9tc19jdGxfaW1wbCh0c2QsIG1pYiwgbWlibGVuLCBvbGRw LCBvbGRsZW5wLCBuZXdwLAotCSAgICBuZXdsZW4sIGZhbHNlKTsKLX0KLQotc3RhdGljIGludAot YXJlbmFfaV9leHRlbnRfaG9va3NfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBz aXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3 cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JdW5zaWduZWQgYXJlbmFfaW5kOwotCWFy ZW5hX3QgKmFyZW5hOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9t dHgpOwotCU1JQl9VTlNJR05FRChhcmVuYV9pbmQsIDEpOwotCWlmIChhcmVuYV9pbmQgPCBuYXJl bmFzX3RvdGFsX2dldCgpKSB7Ci0JCWV4dGVudF9ob29rc190ICpvbGRfZXh0ZW50X2hvb2tzOwot CQlhcmVuYSA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBhcmVuYV9pbmQsIGZhbHNlKTsKLQkJ aWYgKGFyZW5hID09IE5VTEwpIHsKLQkJCWlmIChhcmVuYV9pbmQgPj0gbmFyZW5hc19hdXRvKSB7 Ci0JCQkJcmV0ID0gRUZBVUxUOwotCQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQkJfQotCQkJb2xk X2V4dGVudF9ob29rcyA9Ci0JCQkgICAgKGV4dGVudF9ob29rc190ICopJmVob29rc19kZWZhdWx0 X2V4dGVudF9ob29rczsKLQkJCVJFQUQob2xkX2V4dGVudF9ob29rcywgZXh0ZW50X2hvb2tzX3Qg Kik7Ci0JCQlpZiAobmV3cCAhPSBOVUxMKSB7Ci0JCQkJLyogSW5pdGlhbGl6ZSBhIG5ldyBhcmVu YSBhcyBhIHNpZGUgZWZmZWN0LiAqLwotCQkJCWV4dGVudF9ob29rc190ICpuZXdfZXh0ZW50X2hv b2tzCi0JCQkJICAgIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVChOVUxMKTsKLQkJCQlXUklURShu ZXdfZXh0ZW50X2hvb2tzLCBleHRlbnRfaG9va3NfdCAqKTsKLQkJCQlhcmVuYV9jb25maWdfdCBj b25maWcgPSBhcmVuYV9jb25maWdfZGVmYXVsdDsKLQkJCQljb25maWcuZXh0ZW50X2hvb2tzID0g bmV3X2V4dGVudF9ob29rczsKLQotCQkJCWFyZW5hID0gYXJlbmFfaW5pdCh0c2RfdHNkbih0c2Qp LCBhcmVuYV9pbmQsCi0JCQkJICAgICZjb25maWcpOwotCQkJCWlmIChhcmVuYSA9PSBOVUxMKSB7 Ci0JCQkJCXJldCA9IEVGQVVMVDsKLQkJCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCQkJfQotCQkJ fQotCQl9IGVsc2UgewotCQkJaWYgKG5ld3AgIT0gTlVMTCkgewotCQkJCWV4dGVudF9ob29rc190 ICpuZXdfZXh0ZW50X2hvb2tzCi0JCQkJICAgIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVChOVUxM KTsKLQkJCQlXUklURShuZXdfZXh0ZW50X2hvb2tzLCBleHRlbnRfaG9va3NfdCAqKTsKLQkJCQlv bGRfZXh0ZW50X2hvb2tzID0gYXJlbmFfc2V0X2V4dGVudF9ob29rcyh0c2QsCi0JCQkJICAgIGFy ZW5hLCBuZXdfZXh0ZW50X2hvb2tzKTsKLQkJCQlSRUFEKG9sZF9leHRlbnRfaG9va3MsIGV4dGVu dF9ob29rc190ICopOwotCQkJfSBlbHNlIHsKLQkJCQlvbGRfZXh0ZW50X2hvb2tzID0KLQkJCQkg ICAgZWhvb2tzX2dldF9leHRlbnRfaG9va3NfcHRyKAotCQkJCQlhcmVuYV9nZXRfZWhvb2tzKGFy ZW5hKSk7Ci0JCQkJUkVBRChvbGRfZXh0ZW50X2hvb2tzLCBleHRlbnRfaG9va3NfdCAqKTsKLQkJ CX0KLQkJfQotCX0gZWxzZSB7Ci0JCXJldCA9IEVGQVVMVDsKLQkJZ290byBsYWJlbF9yZXR1cm47 Ci0JfQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2Rf dHNkbih0c2QpLCAmY3RsX210eCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXJl bmFfaV9yZXRhaW5fZ3Jvd19saW1pdF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIs Ci0gICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpu ZXdwLAotICAgIHNpemVfdCBuZXdsZW4pIHsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGFyZW5hX2lu ZDsKLQlhcmVuYV90ICphcmVuYTsKLQotCWlmICghb3B0X3JldGFpbikgewotCQkvKiBPbmx5IHJl bGV2YW50IHdoZW4gcmV0YWluIGlzIGVuYWJsZWQuICovCi0JCXJldHVybiBFTk9FTlQ7Ci0JfQot Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwotCU1JQl9VTlNJ R05FRChhcmVuYV9pbmQsIDEpOwotCWlmIChhcmVuYV9pbmQgPCBuYXJlbmFzX3RvdGFsX2dldCgp ICYmIChhcmVuYSA9Ci0JICAgIGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBhcmVuYV9pbmQsIGZh bHNlKSkgIT0gTlVMTCkgewotCQlzaXplX3Qgb2xkX2xpbWl0LCBuZXdfbGltaXQ7Ci0JCWlmIChu ZXdwICE9IE5VTEwpIHsKLQkJCVdSSVRFKG5ld19saW1pdCwgc2l6ZV90KTsKLQkJfQotCQlib29s IGVyciA9IGFyZW5hX3JldGFpbl9ncm93X2xpbWl0X2dldF9zZXQodHNkLCBhcmVuYSwKLQkJICAg ICZvbGRfbGltaXQsIG5ld3AgIT0gTlVMTCA/ICZuZXdfbGltaXQgOiBOVUxMKTsKLQkJaWYgKCFl cnIpIHsKLQkJCVJFQUQob2xkX2xpbWl0LCBzaXplX3QpOwotCQkJcmV0ID0gMDsKLQkJfSBlbHNl IHsKLQkJCXJldCA9IEVGQVVMVDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldCA9IEVGQVVMVDsKLQl9 Ci1sYWJlbF9yZXR1cm46Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmY3Rs X210eCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3Qg KgotYXJlbmFfaV9pbmRleCh0c2RuX3QgKnRzZG4sIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3Qg bWlibGVuLAotICAgIHNpemVfdCBpKSB7Ci0JY29uc3QgY3RsX25hbWVkX25vZGVfdCAqcmV0Owot Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmN0bF9tdHgpOwotCXN3aXRjaCAoaSkgewotCWNh c2UgTUFMTENUTF9BUkVOQVNfQUxMOgotCWNhc2UgTUFMTENUTF9BUkVOQVNfREVTVFJPWUVEOgot CQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAoaSA+IGN0bF9hcmVuYXMtPm5hcmVuYXMpIHsKLQkJ CXJldCA9IE5VTEw7Ci0JCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJfQotCQlicmVhazsKLQl9Ci0K LQlyZXQgPSBzdXBlcl9hcmVuYV9pX25vZGU7Ci1sYWJlbF9yZXR1cm46Ci0JbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCAmY3RsX210eCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KLQotc3RhdGljIGludAotYXJlbmFzX25hcmVuYXNfY3RsKHRzZF90ICp0c2Qs IGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVf dCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JdW5z aWduZWQgbmFyZW5hczsKLQotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZjdGxf bXR4KTsKLQlSRUFET05MWSgpOwotCW5hcmVuYXMgPSBjdGxfYXJlbmFzLT5uYXJlbmFzOwotCVJF QUQobmFyZW5hcywgdW5zaWduZWQpOwotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQltYWxs b2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKLQlyZXR1cm4gcmV0Owot fQotCi1zdGF0aWMgaW50Ci1hcmVuYXNfZGVjYXlfbXNfY3RsX2ltcGwodHNkX3QgKnRzZCwgY29u c3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpv bGRsZW5wLCB2b2lkICpuZXdwLAotICAgIHNpemVfdCBuZXdsZW4sIGJvb2wgZGlydHkpIHsKLQlp bnQgcmV0OwotCi0JaWYgKG9sZHAgIT0gTlVMTCAmJiBvbGRsZW5wICE9IE5VTEwpIHsKLQkJc2l6 ZV90IG9sZHZhbCA9IChkaXJ0eSA/IGFyZW5hX2RpcnR5X2RlY2F5X21zX2RlZmF1bHRfZ2V0KCkg OgotCQkgICAgYXJlbmFfbXV6enlfZGVjYXlfbXNfZGVmYXVsdF9nZXQoKSk7Ci0JCVJFQUQob2xk dmFsLCBzc2l6ZV90KTsKLQl9Ci0JaWYgKG5ld3AgIT0gTlVMTCkgewotCQlpZiAobmV3bGVuICE9 IHNpemVvZihzc2l6ZV90KSkgewotCQkJcmV0ID0gRUlOVkFMOwotCQkJZ290byBsYWJlbF9yZXR1 cm47Ci0JCX0KLQkJaWYgKGRpcnR5ID8gYXJlbmFfZGlydHlfZGVjYXlfbXNfZGVmYXVsdF9zZXQo Kihzc2l6ZV90ICopbmV3cCkKLQkJICAgIDogYXJlbmFfbXV6enlfZGVjYXlfbXNfZGVmYXVsdF9z ZXQoKihzc2l6ZV90ICopbmV3cCkpIHsKLQkJCXJldCA9IEVGQVVMVDsKLQkJCWdvdG8gbGFiZWxf cmV0dXJuOwotCQl9Ci0JfQotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0 OwotfQotCi1zdGF0aWMgaW50Ci1hcmVuYXNfZGlydHlfZGVjYXlfbXNfY3RsKHRzZF90ICp0c2Qs IGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVf dCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCXJldHVybiBhcmVuYXNf ZGVjYXlfbXNfY3RsX2ltcGwodHNkLCBtaWIsIG1pYmxlbiwgb2xkcCwgb2xkbGVucCwgbmV3cCwK LQkgICAgbmV3bGVuLCB0cnVlKTsKLX0KLQotc3RhdGljIGludAotYXJlbmFzX211enp5X2RlY2F5 X21zX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAg ICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4p IHsKLQlyZXR1cm4gYXJlbmFzX2RlY2F5X21zX2N0bF9pbXBsKHRzZCwgbWliLCBtaWJsZW4sIG9s ZHAsIG9sZGxlbnAsIG5ld3AsCi0JICAgIG5ld2xlbiwgZmFsc2UpOwotfQotCi1DVExfUk9fTkxf R0VOKGFyZW5hc19xdWFudHVtLCBRVUFOVFVNLCBzaXplX3QpCi1DVExfUk9fTkxfR0VOKGFyZW5h c19wYWdlLCBQQUdFLCBzaXplX3QpCi1DVExfUk9fTkxfR0VOKGFyZW5hc190Y2FjaGVfbWF4LCB0 Y2FjaGVfbWF4Y2xhc3MsIHNpemVfdCkKLUNUTF9ST19OTF9HRU4oYXJlbmFzX25iaW5zLCBTQ19O QklOUywgdW5zaWduZWQpCi1DVExfUk9fTkxfR0VOKGFyZW5hc19uaGJpbnMsIG5oYmlucywgdW5z aWduZWQpCi1DVExfUk9fTkxfR0VOKGFyZW5hc19iaW5faV9zaXplLCBiaW5faW5mb3NbbWliWzJd XS5yZWdfc2l6ZSwgc2l6ZV90KQotQ1RMX1JPX05MX0dFTihhcmVuYXNfYmluX2lfbnJlZ3MsIGJp bl9pbmZvc1ttaWJbMl1dLm5yZWdzLCB1aW50MzJfdCkKLUNUTF9ST19OTF9HRU4oYXJlbmFzX2Jp bl9pX3NsYWJfc2l6ZSwgYmluX2luZm9zW21pYlsyXV0uc2xhYl9zaXplLCBzaXplX3QpCi1DVExf Uk9fTkxfR0VOKGFyZW5hc19iaW5faV9uc2hhcmRzLCBiaW5faW5mb3NbbWliWzJdXS5uX3NoYXJk cywgdWludDMyX3QpCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCAqCi1hcmVuYXNfYmlu X2lfaW5kZXgodHNkbl90ICp0c2RuLCBjb25zdCBzaXplX3QgKm1pYiwKLSAgICBzaXplX3QgbWli bGVuLCBzaXplX3QgaSkgewotCWlmIChpID4gU0NfTkJJTlMpIHsKLQkJcmV0dXJuIE5VTEw7Ci0J fQotCXJldHVybiBzdXBlcl9hcmVuYXNfYmluX2lfbm9kZTsKLX0KLQotQ1RMX1JPX05MX0dFTihh cmVuYXNfbmxleHRlbnRzLCBTQ19OU0laRVMgLSBTQ19OQklOUywgdW5zaWduZWQpCi1DVExfUk9f TkxfR0VOKGFyZW5hc19sZXh0ZW50X2lfc2l6ZSwgc3pfaW5kZXgyc2l6ZShTQ19OQklOUysoc3pp bmRfdCltaWJbMl0pLAotICAgIHNpemVfdCkKLXN0YXRpYyBjb25zdCBjdGxfbmFtZWRfbm9kZV90 ICoKLWFyZW5hc19sZXh0ZW50X2lfaW5kZXgodHNkbl90ICp0c2RuLCBjb25zdCBzaXplX3QgKm1p YiwKLSAgICBzaXplX3QgbWlibGVuLCBzaXplX3QgaSkgewotCWlmIChpID4gU0NfTlNJWkVTIC0g U0NfTkJJTlMpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBzdXBlcl9hcmVuYXNfbGV4 dGVudF9pX25vZGU7Ci19Ci0KLXN0YXRpYyBpbnQKLWFyZW5hc19jcmVhdGVfY3RsKHRzZF90ICp0 c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNp emVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0J dW5zaWduZWQgYXJlbmFfaW5kOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwg JmN0bF9tdHgpOwotCi0JVkVSSUZZX1JFQUQodW5zaWduZWQpOwotCWFyZW5hX2NvbmZpZ190IGNv bmZpZyA9IGFyZW5hX2NvbmZpZ19kZWZhdWx0OwotCVdSSVRFKGNvbmZpZy5leHRlbnRfaG9va3Ms IGV4dGVudF9ob29rc190ICopOwotCWlmICgoYXJlbmFfaW5kID0gY3RsX2FyZW5hX2luaXQodHNk LCAmY29uZmlnKSkgPT0gVUlOVF9NQVgpIHsKLQkJcmV0ID0gRUFHQUlOOwotCQlnb3RvIGxhYmVs X3JldHVybjsKLQl9Ci0JUkVBRChhcmVuYV9pbmQsIHVuc2lnbmVkKTsKLQotCXJldCA9IDA7Ci1s YWJlbF9yZXR1cm46Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210 eCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotZXhwZXJpbWVudGFsX2FyZW5hc19j cmVhdGVfZXh0X2N0bCh0c2RfdCAqdHNkLAotICAgIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3Qg bWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6 ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JdW5zaWduZWQgYXJlbmFfaW5kOwotCi0JbWFsbG9j X211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwotCi0JYXJlbmFfY29uZmlnX3Qg Y29uZmlnID0gYXJlbmFfY29uZmlnX2RlZmF1bHQ7Ci0JVkVSSUZZX1JFQUQodW5zaWduZWQpOwot CVdSSVRFKGNvbmZpZywgYXJlbmFfY29uZmlnX3QpOwotCi0JaWYgKChhcmVuYV9pbmQgPSBjdGxf YXJlbmFfaW5pdCh0c2QsICZjb25maWcpKSA9PSBVSU5UX01BWCkgewotCQlyZXQgPSBFQUdBSU47 Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQlSRUFEKGFyZW5hX2luZCwgdW5zaWduZWQpOwot CXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0 c2QpLCAmY3RsX210eCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotYXJlbmFzX2xv b2t1cF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1pYmxl biwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLAotICAgIHNpemVfdCBu ZXdsZW4pIHsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGFyZW5hX2luZDsKLQl2b2lkICpwdHI7Ci0J ZWRhdGFfdCAqZWRhdGE7Ci0JYXJlbmFfdCAqYXJlbmE7Ci0KLQlwdHIgPSBOVUxMOwotCXJldCA9 IEVJTlZBTDsKLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7Ci0J V1JJVEUocHRyLCB2b2lkICopOwotCWVkYXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkX3RzZG4o dHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpOwotCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0J CWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQotCWFyZW5hID0gYXJlbmFfZ2V0X2Zyb21fZWRhdGEo ZWRhdGEpOwotCWlmIChhcmVuYSA9PSBOVUxMKSB7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0K LQotCWFyZW5hX2luZCA9IGFyZW5hX2luZF9nZXQoYXJlbmEpOwotCVJFQUQoYXJlbmFfaW5kLCB1 bnNpZ25lZCk7Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxv Y2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQKLXByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0X2N0 bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwKLSAgICBzaXplX3QgbWlibGVuLCB2b2lk ICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsCi0gICAgc2l6ZV90IG5ld2xlbikg ewotCWludCByZXQ7Ci0JYm9vbCBvbGR2YWw7Ci0KLQlpZiAoIWNvbmZpZ19wcm9mKSB7Ci0JCXJl dHVybiBFTk9FTlQ7Ci0JfQotCi0JaWYgKG5ld3AgIT0gTlVMTCkgewotCQlpZiAoIW9wdF9wcm9m KSB7Ci0JCQlyZXQgPSBFTk9FTlQ7Ci0JCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJfQotCQlpZiAo bmV3bGVuICE9IHNpemVvZihib29sKSkgewotCQkJcmV0ID0gRUlOVkFMOwotCQkJZ290byBsYWJl bF9yZXR1cm47Ci0JCX0KLQkJb2xkdmFsID0gcHJvZl90aHJlYWRfYWN0aXZlX2luaXRfc2V0KHRz ZF90c2RuKHRzZCksCi0JCSAgICAqKGJvb2wgKiluZXdwKTsKLQl9IGVsc2UgewotCQlvbGR2YWwg PSBvcHRfcHJvZiA/IHByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0X2dldCh0c2RfdHNkbih0c2QpKSA6 Ci0JCSAgICBmYWxzZTsKLQl9Ci0JUkVBRChvbGR2YWwsIGJvb2wpOwotCi0JcmV0ID0gMDsKLWxh YmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1wcm9mX2FjdGl2ZV9j dGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCi0gICAgdm9p ZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0J aW50IHJldDsKLQlib29sIG9sZHZhbDsKLQotCWlmICghY29uZmlnX3Byb2YpIHsKLQkJcmV0ID0g RU5PRU5UOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlpZiAobmV3cCAhPSBOVUxMKSB7 Ci0JCWlmIChuZXdsZW4gIT0gc2l6ZW9mKGJvb2wpKSB7Ci0JCQlyZXQgPSBFSU5WQUw7Ci0JCQln b3RvIGxhYmVsX3JldHVybjsKLQkJfQotCQlib29sIHZhbCA9ICooYm9vbCAqKW5ld3A7Ci0JCWlm ICghb3B0X3Byb2YpIHsKLQkJCWlmICh2YWwpIHsKLQkJCQlyZXQgPSBFTk9FTlQ7Ci0JCQkJZ290 byBsYWJlbF9yZXR1cm47Ci0JCQl9IGVsc2UgewotCQkJCS8qIE5vIGNoYW5nZSBuZWVkZWQgKGFs cmVhZHkgb2ZmKS4gKi8KLQkJCQlvbGR2YWwgPSBmYWxzZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJ CW9sZHZhbCA9IHByb2ZfYWN0aXZlX3NldCh0c2RfdHNkbih0c2QpLCB2YWwpOwotCQl9Ci0JfSBl bHNlIHsKLQkJb2xkdmFsID0gb3B0X3Byb2YgPyBwcm9mX2FjdGl2ZV9nZXQodHNkX3RzZG4odHNk KSkgOiBmYWxzZTsKLQl9Ci0JUkVBRChvbGR2YWwsIGJvb2wpOwotCi0JcmV0ID0gMDsKLWxhYmVs X3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1wcm9mX2R1bXBfY3RsKHRz ZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9s ZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCBy ZXQ7Ci0JY29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwotCi0JaWYgKCFjb25maWdfcHJvZiB8 fCAhb3B0X3Byb2YpIHsKLQkJcmV0dXJuIEVOT0VOVDsKLQl9Ci0KLQlXUklURU9OTFkoKTsKLQlX UklURShmaWxlbmFtZSwgY29uc3QgY2hhciAqKTsKLQotCWlmIChwcm9mX21kdW1wKHRzZCwgZmls ZW5hbWUpKSB7Ci0JCXJldCA9IEVGQVVMVDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCi0J cmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1w cm9mX2dkdW1wX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxl biwKLSAgICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBu ZXdsZW4pIHsKLQlpbnQgcmV0OwotCWJvb2wgb2xkdmFsOwotCi0JaWYgKCFjb25maWdfcHJvZikg ewotCQlyZXR1cm4gRU5PRU5UOwotCX0KLQotCWlmIChuZXdwICE9IE5VTEwpIHsKLQkJaWYgKCFv cHRfcHJvZikgewotCQkJcmV0ID0gRU5PRU5UOwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0K LQkJaWYgKG5ld2xlbiAhPSBzaXplb2YoYm9vbCkpIHsKLQkJCXJldCA9IEVJTlZBTDsKLQkJCWdv dG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JCW9sZHZhbCA9IHByb2ZfZ2R1bXBfc2V0KHRzZF90c2Ru KHRzZCksICooYm9vbCAqKW5ld3ApOwotCX0gZWxzZSB7Ci0JCW9sZHZhbCA9IG9wdF9wcm9mID8g cHJvZl9nZHVtcF9nZXQodHNkX3RzZG4odHNkKSkgOiBmYWxzZTsKLQl9Ci0JUkVBRChvbGR2YWws IGJvb2wpOwotCi0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1z dGF0aWMgaW50Ci1wcm9mX3ByZWZpeF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIs IHNpemVfdCBtaWJsZW4sCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpu ZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQljb25zdCBjaGFyICpwcmVmaXggPSBO VUxMOwotCi0JaWYgKCFjb25maWdfcHJvZiB8fCAhb3B0X3Byb2YpIHsKLQkJcmV0dXJuIEVOT0VO VDsKLQl9Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmY3RsX210eCk7Ci0J V1JJVEVPTkxZKCk7Ci0JV1JJVEUocHJlZml4LCBjb25zdCBjaGFyICopOwotCi0JcmV0ID0gcHJv Zl9wcmVmaXhfc2V0KHRzZF90c2RuKHRzZCksIHByZWZpeCkgPyBFRkFVTFQgOiAwOwotbGFiZWxf cmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9tdHgpOwot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXByb2ZfcmVzZXRfY3RsKHRzZF90ICp0c2Qs IGNvbnN0IHNpemVfdCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVf dCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0Jc2l6 ZV90IGxnX3NhbXBsZSA9IGxnX3Byb2Zfc2FtcGxlOwotCi0JaWYgKCFjb25maWdfcHJvZiB8fCAh b3B0X3Byb2YpIHsKLQkJcmV0dXJuIEVOT0VOVDsKLQl9Ci0KLQlXUklURU9OTFkoKTsKLQlXUklU RShsZ19zYW1wbGUsIHNpemVfdCk7Ci0JaWYgKGxnX3NhbXBsZSA+PSAoc2l6ZW9mKHVpbnQ2NF90 KSA8PCAzKSkgewotCQlsZ19zYW1wbGUgPSAoc2l6ZW9mKHVpbnQ2NF90KSA8PCAzKSAtIDE7Ci0J fQotCi0JcHJvZl9yZXNldCh0c2QsIGxnX3NhbXBsZSk7Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0 dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLUNUTF9ST19OTF9DR0VOKGNvbmZpZ19wcm9mLCBwcm9m X2ludGVydmFsLCBwcm9mX2ludGVydmFsLCB1aW50NjRfdCkKLUNUTF9ST19OTF9DR0VOKGNvbmZp Z19wcm9mLCBsZ19wcm9mX3NhbXBsZSwgbGdfcHJvZl9zYW1wbGUsIHNpemVfdCkKLQotc3RhdGlj IGludAotcHJvZl9sb2dfc3RhcnRfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLCBz aXplX3QgbWlibGVuLCB2b2lkICpvbGRwLAotICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3 cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0KLQljb25zdCBjaGFyICpmaWxlbmFtZSA9 IE5VTEw7Ci0KLQlpZiAoIWNvbmZpZ19wcm9mIHx8ICFvcHRfcHJvZikgewotCQlyZXR1cm4gRU5P RU5UOwotCX0KLQotCVdSSVRFT05MWSgpOwotCVdSSVRFKGZpbGVuYW1lLCBjb25zdCBjaGFyICop OwotCi0JaWYgKHByb2ZfbG9nX3N0YXJ0KHRzZF90c2RuKHRzZCksIGZpbGVuYW1lKSkgewotCQly ZXQgPSBFRkFVTFQ7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQotCXJldCA9IDA7Ci1sYWJl bF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotcHJvZl9sb2dfc3RvcF9j dGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9s ZHAsCi0gICAgc2l6ZV90ICpvbGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0J aWYgKCFjb25maWdfcHJvZiB8fCAhb3B0X3Byb2YpIHsKLQkJcmV0dXJuIEVOT0VOVDsKLQl9Ci0K LQlpZiAocHJvZl9sb2dfc3RvcCh0c2RfdHNkbih0c2QpKSkgewotCQlyZXR1cm4gRUZBVUxUOwot CX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1leHBlcmltZW50YWxfaG9va3NfcHJv Zl9iYWNrdHJhY2VfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNpemVf dCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90 IG5ld2xlbikgewotCWludCByZXQ7Ci0KLQlpZiAob2xkcCA9PSBOVUxMICYmIG5ld3AgPT0gTlVM TCkgewotCQlyZXQgPSBFSU5WQUw7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQlpZiAob2xk cCAhPSBOVUxMKSB7Ci0JCXByb2ZfYmFja3RyYWNlX2hvb2tfdCBvbGRfaG9vayA9Ci0JCSAgICBw cm9mX2JhY2t0cmFjZV9ob29rX2dldCgpOwotCQlSRUFEKG9sZF9ob29rLCBwcm9mX2JhY2t0cmFj ZV9ob29rX3QpOwotCX0KLQlpZiAobmV3cCAhPSBOVUxMKSB7Ci0JCWlmICghb3B0X3Byb2YpIHsK LQkJCXJldCA9IEVOT0VOVDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JCXByb2ZfYmFj a3RyYWNlX2hvb2tfdCBuZXdfaG9vayBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoTlVMTCk7Ci0J CVdSSVRFKG5ld19ob29rLCBwcm9mX2JhY2t0cmFjZV9ob29rX3QpOwotCQlpZiAobmV3X2hvb2sg PT0gTlVMTCkgewotCQkJcmV0ID0gRUlOVkFMOwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0K LQkJcHJvZl9iYWNrdHJhY2VfaG9va19zZXQobmV3X2hvb2spOwotCX0KLQlyZXQgPSAwOwotbGFi ZWxfcmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4cGVyaW1lbnRhbF9o b29rc19wcm9mX2R1bXBfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNp emVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6 ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0KLQlpZiAob2xkcCA9PSBOVUxMICYmIG5ld3AgPT0g TlVMTCkgewotCQlyZXQgPSBFSU5WQUw7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQlpZiAo b2xkcCAhPSBOVUxMKSB7Ci0JCXByb2ZfZHVtcF9ob29rX3Qgb2xkX2hvb2sgPQotCQkgICAgcHJv Zl9kdW1wX2hvb2tfZ2V0KCk7Ci0JCVJFQUQob2xkX2hvb2ssIHByb2ZfZHVtcF9ob29rX3QpOwot CX0KLQlpZiAobmV3cCAhPSBOVUxMKSB7Ci0JCWlmICghb3B0X3Byb2YpIHsKLQkJCXJldCA9IEVO T0VOVDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JCXByb2ZfZHVtcF9ob29rX3QgbmV3 X2hvb2sgSkVNQUxMT0NfQ0NfU0lMRU5DRV9JTklUKE5VTEwpOwotCQlXUklURShuZXdfaG9vaywg cHJvZl9kdW1wX2hvb2tfdCk7Ci0JCXByb2ZfZHVtcF9ob29rX3NldChuZXdfaG9vayk7Ci0JfQot CXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogRm9yIGludGVn cmF0aW9uIHRlc3QgcHVycG9zZSBvbmx5LiAgTm8gcGxhbiB0byBtb3ZlIG91dCBvZiBleHBlcmlt ZW50YWwuICovCi1zdGF0aWMgaW50Ci1leHBlcmltZW50YWxfaG9va3Nfc2FmZXR5X2NoZWNrX2Fi b3J0X2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwKLSAgICBzaXplX3QgbWlibGVu LCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4p IHsKLQlpbnQgcmV0OwotCi0JV1JJVEVPTkxZKCk7Ci0JaWYgKG5ld3AgIT0gTlVMTCkgewotCQlp ZiAobmV3bGVuICE9IHNpemVvZihzYWZldHlfY2hlY2tfYWJvcnRfaG9va190KSkgewotCQkJcmV0 ID0gRUlOVkFMOwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0KLQkJc2FmZXR5X2NoZWNrX2Fi b3J0X2hvb2tfdCBob29rIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVChOVUxMKTsKLQkJV1JJVEUo aG9vaywgc2FmZXR5X2NoZWNrX2Fib3J0X2hvb2tfdCk7Ci0JCXNhZmV0eV9jaGVja19zZXRfYWJv cnQoaG9vayk7Ci0JfQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0K LQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBz dGF0c19hbGxvY2F0ZWQsIGN0bF9zdGF0cy0+YWxsb2NhdGVkLCBzaXplX3QpCi1DVExfUk9fQ0dF Tihjb25maWdfc3RhdHMsIHN0YXRzX2FjdGl2ZSwgY3RsX3N0YXRzLT5hY3RpdmUsIHNpemVfdCkK LUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfbWV0YWRhdGEsIGN0bF9zdGF0cy0+bWV0 YWRhdGEsIHNpemVfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfbWV0YWRhdGFf dGhwLCBjdGxfc3RhdHMtPm1ldGFkYXRhX3RocCwgc2l6ZV90KQotQ1RMX1JPX0NHRU4oY29uZmln X3N0YXRzLCBzdGF0c19yZXNpZGVudCwgY3RsX3N0YXRzLT5yZXNpZGVudCwgc2l6ZV90KQotQ1RM X1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19tYXBwZWQsIGN0bF9zdGF0cy0+bWFwcGVkLCBz aXplX3QpCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX3JldGFpbmVkLCBjdGxfc3Rh dHMtPnJldGFpbmVkLCBzaXplX3QpCi0KLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNf YmFja2dyb3VuZF90aHJlYWRfbnVtX3RocmVhZHMsCi0gICAgY3RsX3N0YXRzLT5iYWNrZ3JvdW5k X3RocmVhZC5udW1fdGhyZWFkcywgc2l6ZV90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBz dGF0c19iYWNrZ3JvdW5kX3RocmVhZF9udW1fcnVucywKLSAgICBjdGxfc3RhdHMtPmJhY2tncm91 bmRfdGhyZWFkLm51bV9ydW5zLCB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywg c3RhdHNfYmFja2dyb3VuZF90aHJlYWRfcnVuX2ludGVydmFsLAotICAgIG5zdGltZV9ucygmY3Rs X3N0YXRzLT5iYWNrZ3JvdW5kX3RocmVhZC5ydW5faW50ZXJ2YWwpLCB1aW50NjRfdCkKLQotQ1RM X1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c196ZXJvX3JlYWxsb2NzLAotICAgIGF0b21pY19s b2FkX3p1KCZ6ZXJvX3JlYWxsb2NfY291bnQsIEFUT01JQ19SRUxBWEVEKSwgc2l6ZV90KQotCi1D VExfUk9fR0VOKHN0YXRzX2FyZW5hc19pX2RzcywgYXJlbmFzX2kobWliWzJdKS0+ZHNzLCBjb25z dCBjaGFyICopCi1DVExfUk9fR0VOKHN0YXRzX2FyZW5hc19pX2RpcnR5X2RlY2F5X21zLCBhcmVu YXNfaShtaWJbMl0pLT5kaXJ0eV9kZWNheV9tcywKLSAgICBzc2l6ZV90KQotQ1RMX1JPX0dFTihz dGF0c19hcmVuYXNfaV9tdXp6eV9kZWNheV9tcywgYXJlbmFzX2kobWliWzJdKS0+bXV6enlfZGVj YXlfbXMsCi0gICAgc3NpemVfdCkKLUNUTF9ST19HRU4oc3RhdHNfYXJlbmFzX2lfbnRocmVhZHMs IGFyZW5hc19pKG1pYlsyXSktPm50aHJlYWRzLCB1bnNpZ25lZCkKLUNUTF9ST19HRU4oc3RhdHNf YXJlbmFzX2lfdXB0aW1lLAotICAgIG5zdGltZV9ucygmYXJlbmFzX2kobWliWzJdKS0+YXN0YXRz LT5hc3RhdHMudXB0aW1lKSwgdWludDY0X3QpCi1DVExfUk9fR0VOKHN0YXRzX2FyZW5hc19pX3Bh Y3RpdmUsIGFyZW5hc19pKG1pYlsyXSktPnBhY3RpdmUsIHNpemVfdCkKLUNUTF9ST19HRU4oc3Rh dHNfYXJlbmFzX2lfcGRpcnR5LCBhcmVuYXNfaShtaWJbMl0pLT5wZGlydHksIHNpemVfdCkKLUNU TF9ST19HRU4oc3RhdHNfYXJlbmFzX2lfcG11enp5LCBhcmVuYXNfaShtaWJbMl0pLT5wbXV6enks IHNpemVfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbWFwcGVk LAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLm1hcHBlZCwgc2l6ZV90KQot Q1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9yZXRhaW5lZCwKLSAgICBh cmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmFzdGF0cy5wYV9zaGFyZF9zdGF0cy5wYWNfc3RhdHMu cmV0YWluZWQsIHNpemVfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFz X2lfZXh0ZW50X2F2YWlsLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnBh X3NoYXJkX3N0YXRzLmVkYXRhX2F2YWlsLCBzaXplX3QpCi0KLUNUTF9ST19DR0VOKGNvbmZpZ19z dGF0cywgc3RhdHNfYXJlbmFzX2lfZGlydHlfbnB1cmdlLAotICAgIGxvY2tlZF9yZWFkX3U2NF91 bnN5bmNocm9uaXplZCgKLSAgICAmYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3RhdHMucGFf c2hhcmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X2RpcnR5Lm5wdXJnZSksCi0gICAgdWludDY0X3Qp Ci1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2RpcnR5X25tYWR2aXNl LAotICAgIGxvY2tlZF9yZWFkX3U2NF91bnN5bmNocm9uaXplZCgKLSAgICAmYXJlbmFzX2kobWli WzJdKS0+YXN0YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X2RpcnR5 Lm5tYWR2aXNlKSwKLSAgICB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3Rh dHNfYXJlbmFzX2lfZGlydHlfcHVyZ2VkLAotICAgIGxvY2tlZF9yZWFkX3U2NF91bnN5bmNocm9u aXplZCgKLSAgICAmYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3RhdHMucGFfc2hhcmRfc3Rh dHMucGFjX3N0YXRzLmRlY2F5X2RpcnR5LnB1cmdlZCksCi0gICAgdWludDY0X3QpCi0KLUNUTF9S T19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbXV6enlfbnB1cmdlLAotICAgIGxv Y2tlZF9yZWFkX3U2NF91bnN5bmNocm9uaXplZCgKLSAgICAmYXJlbmFzX2kobWliWzJdKS0+YXN0 YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X211enp5Lm5wdXJnZSks Ci0gICAgdWludDY0X3QpCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19p X211enp5X25tYWR2aXNlLAotICAgIGxvY2tlZF9yZWFkX3U2NF91bnN5bmNocm9uaXplZCgKLSAg ICAmYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3RhdHMucGFfc2hhcmRfc3RhdHMucGFjX3N0 YXRzLmRlY2F5X211enp5Lm5tYWR2aXNlKSwKLSAgICB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNv bmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbXV6enlfcHVyZ2VkLAotICAgIGxvY2tlZF9yZWFk X3U2NF91bnN5bmNocm9uaXplZCgKLSAgICAmYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3Rh dHMucGFfc2hhcmRfc3RhdHMucGFjX3N0YXRzLmRlY2F5X211enp5LnB1cmdlZCksCi0gICAgdWlu dDY0X3QpCi0KLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfYmFzZSwK LSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmFzdGF0cy5iYXNlLAotICAgIHNpemVfdCkK LUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaW50ZXJuYWwsCi0gICAg YXRvbWljX2xvYWRfenUoJmFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLmludGVybmFs LCBBVE9NSUNfUkVMQVhFRCksCi0gICAgc2l6ZV90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRz LCBzdGF0c19hcmVuYXNfaV9tZXRhZGF0YV90aHAsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0 YXRzLT5hc3RhdHMubWV0YWRhdGFfdGhwLCBzaXplX3QpCi1DVExfUk9fQ0dFTihjb25maWdfc3Rh dHMsIHN0YXRzX2FyZW5hc19pX3RjYWNoZV9ieXRlcywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5h c3RhdHMtPmFzdGF0cy50Y2FjaGVfYnl0ZXMsIHNpemVfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19z dGF0cywgc3RhdHNfYXJlbmFzX2lfdGNhY2hlX3N0YXNoZWRfYnl0ZXMsCi0gICAgYXJlbmFzX2ko bWliWzJdKS0+YXN0YXRzLT5hc3RhdHMudGNhY2hlX3N0YXNoZWRfYnl0ZXMsIHNpemVfdCkKLUNU TF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfcmVzaWRlbnQsCi0gICAgYXJl bmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3RhdHMucmVzaWRlbnQsCi0gICAgc2l6ZV90KQotQ1RM X1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9hYmFuZG9uZWRfdm0sCi0gICAg YXRvbWljX2xvYWRfenUoCi0gICAgJmFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLnBh X3NoYXJkX3N0YXRzLnBhY19zdGF0cy5hYmFuZG9uZWRfdm0sCi0gICAgQVRPTUlDX1JFTEFYRUQp LCBzaXplX3QpCi0KLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBh X3NlY19ieXRlcywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPnNlY3N0YXRzLmJ5dGVz LCBzaXplX3QpCi0KLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfc21h bGxfYWxsb2NhdGVkLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YWxsb2NhdGVkX3Nt YWxsLCBzaXplX3QpCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX3Nt YWxsX25tYWxsb2MsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5ubWFsbG9jX3NtYWxs LCB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfc21h bGxfbmRhbGxvYywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPm5kYWxsb2Nfc21hbGws IHVpbnQ2NF90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9zbWFs bF9ucmVxdWVzdHMsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5ucmVxdWVzdHNfc21h bGwsIHVpbnQ2NF90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9z bWFsbF9uZmlsbHMsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5uZmlsbHNfc21hbGws IHVpbnQ2NF90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9zbWFs bF9uZmx1c2hlcywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPm5mbHVzaGVzX3NtYWxs LCB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbGFy Z2VfYWxsb2NhdGVkLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLmFsbG9j YXRlZF9sYXJnZSwgc2l6ZV90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVu YXNfaV9sYXJnZV9ubWFsbG9jLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRz Lm5tYWxsb2NfbGFyZ2UsIHVpbnQ2NF90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0 c19hcmVuYXNfaV9sYXJnZV9uZGFsbG9jLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+ YXN0YXRzLm5kYWxsb2NfbGFyZ2UsIHVpbnQ2NF90KQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRz LCBzdGF0c19hcmVuYXNfaV9sYXJnZV9ucmVxdWVzdHMsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+ YXN0YXRzLT5hc3RhdHMubnJlcXVlc3RzX2xhcmdlLCB1aW50NjRfdCkKLS8qCi0gKiBOb3RlOiAi bm1hbGxvY19sYXJnZSIgaGVyZSBpbnN0ZWFkIG9mICJuZmlsbHMiIGluIHRoZSByZWFkLiAgVGhp cyBpcwotICogaW50ZW50aW9uYWwgKGxhcmdlIGhhcyBubyBiYXRjaCBmaWxsKS4KLSAqLwotQ1RM X1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9sYXJnZV9uZmlsbHMsCi0gICAg YXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5hc3RhdHMubm1hbGxvY19sYXJnZSwgdWludDY0X3Qp Ci1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2xhcmdlX25mbHVzaGVz LAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YXN0YXRzLm5mbHVzaGVzX2xhcmdlLCB1 aW50NjRfdCkKLQotLyogTG9jayBwcm9maWxpbmcgcmVsYXRlZCBBUElzIGJlbG93LiAqLwotI2Rl ZmluZSBST19NVVRFWF9DVExfR0VOKG4sIGwpCQkJCQkJXAotQ1RMX1JPX0NHRU4oY29uZmlnX3N0 YXRzLCBzdGF0c18jI24jI19udW1fb3BzLAkJCQlcCi0gICAgbC5uX2xvY2tfb3BzLCB1aW50NjRf dCkJCQkJCQlcCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzXyMjbiMjX251bV93YWl0 LAkJCQlcCi0gICAgbC5uX3dhaXRfdGltZXMsIHVpbnQ2NF90KQkJCQkJCVwKLUNUTF9ST19DR0VO KGNvbmZpZ19zdGF0cywgc3RhdHNfIyNuIyNfbnVtX3NwaW5fYWNxLAkJCVwKLSAgICBsLm5fc3Bp bl9hY3F1aXJlZCwgdWludDY0X3QpCQkJCQlcCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0 YXRzXyMjbiMjX251bV9vd25lcl9zd2l0Y2gsCQkJXAotICAgIGwubl9vd25lcl9zd2l0Y2hlcywg dWludDY0X3QpIAkJCQkJXAotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c18jI24jI190 b3RhbF93YWl0X3RpbWUsCQkJXAotICAgIG5zdGltZV9ucygmbC50b3Rfd2FpdF90aW1lKSwgdWlu dDY0X3QpCQkJCVwKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfIyNuIyNfbWF4X3dh aXRfdGltZSwJCQlcCi0gICAgbnN0aW1lX25zKCZsLm1heF93YWl0X3RpbWUpLCB1aW50NjRfdCkJ CQkJXAotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c18jI24jI19tYXhfbnVtX3RoZHMs CQkJXAotICAgIGwubWF4X25fdGhkcywgdWludDMyX3QpCi0KLS8qIEdsb2JhbCBtdXRleGVzLiAq LwotI2RlZmluZSBPUChtdHgpCQkJCQkJCQlcCi0gICAgUk9fTVVURVhfQ1RMX0dFTihtdXRleGVz XyMjbXR4LAkJCQkJXAotICAgICAgICBjdGxfc3RhdHMtPm11dGV4X3Byb2ZfZGF0YVtnbG9iYWxf cHJvZl9tdXRleF8jI210eF0pCi1NVVRFWF9QUk9GX0dMT0JBTF9NVVRFWEVTCi0jdW5kZWYgT1AK LQotLyogUGVyIGFyZW5hIG11dGV4ZXMgKi8KLSNkZWZpbmUgT1AobXR4KSBST19NVVRFWF9DVExf R0VOKGFyZW5hc19pX211dGV4ZXNfIyNtdHgsCQlcCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0 YXRzLT5hc3RhdHMubXV0ZXhfcHJvZl9kYXRhW2FyZW5hX3Byb2ZfbXV0ZXhfIyNtdHhdKQotTVVU RVhfUFJPRl9BUkVOQV9NVVRFWEVTCi0jdW5kZWYgT1AKLQotLyogdGNhY2hlIGJpbiBtdXRleCAq LwotUk9fTVVURVhfQ1RMX0dFTihhcmVuYXNfaV9iaW5zX2pfbXV0ZXgsCi0gICAgYXJlbmFzX2ko bWliWzJdKS0+YXN0YXRzLT5ic3RhdHNbbWliWzRdXS5tdXRleF9kYXRhKQotI3VuZGVmIFJPX01V VEVYX0NUTF9HRU4KLQotLyogUmVzZXRzIGFsbCBtdXRleCBzdGF0cywgaW5jbHVkaW5nIGdsb2Jh bCwgYXJlbmEgYW5kIGJpbiBtdXRleGVzLiAqLwotc3RhdGljIGludAotc3RhdHNfbXV0ZXhlc19y ZXNldF9jdGwodHNkX3QgKnRzZCwgY29uc3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1pYmxl biwgdm9pZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLAotICAgIHZvaWQgKm5ld3AsIHNpemVfdCBu ZXdsZW4pIHsKLQlpZiAoIWNvbmZpZ19zdGF0cykgewotCQlyZXR1cm4gRU5PRU5UOwotCX0KLQot CXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZCk7Ci0KLSNkZWZpbmUgTVVURVhfUFJPRl9SRVNF VChtdHgpCQkJCQkJXAotICAgIG1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZtdHgpOwkJCQkJXAot ICAgIG1hbGxvY19tdXRleF9wcm9mX2RhdGFfcmVzZXQodHNkbiwgJm10eCk7CQkJCVwKLSAgICBt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZtdHgpOwotCi0JLyogR2xvYmFsIG11dGV4ZXM6IGN0 bCBhbmQgcHJvZi4gKi8KLQlNVVRFWF9QUk9GX1JFU0VUKGN0bF9tdHgpOwotCWlmIChoYXZlX2Jh Y2tncm91bmRfdGhyZWFkKSB7Ci0JCU1VVEVYX1BST0ZfUkVTRVQoYmFja2dyb3VuZF90aHJlYWRf bG9jayk7Ci0JfQotCWlmIChjb25maWdfcHJvZiAmJiBvcHRfcHJvZikgewotCQlNVVRFWF9QUk9G X1JFU0VUKGJ0MmdjdHhfbXR4KTsKLQkJTVVURVhfUFJPRl9SRVNFVCh0ZGF0YXNfbXR4KTsKLQkJ TVVURVhfUFJPRl9SRVNFVChwcm9mX2R1bXBfbXR4KTsKLQkJTVVURVhfUFJPRl9SRVNFVChwcm9m X3JlY2VudF9hbGxvY19tdHgpOwotCQlNVVRFWF9QUk9GX1JFU0VUKHByb2ZfcmVjZW50X2R1bXBf bXR4KTsKLQkJTVVURVhfUFJPRl9SRVNFVChwcm9mX3N0YXRzX210eCk7Ci0JfQotCi0JLyogUGVy IGFyZW5hIG11dGV4ZXMuICovCi0JdW5zaWduZWQgbiA9IG5hcmVuYXNfdG90YWxfZ2V0KCk7Ci0K LQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCWFyZW5hX3QgKmFyZW5hID0g YXJlbmFfZ2V0KHRzZG4sIGksIGZhbHNlKTsKLQkJaWYgKCFhcmVuYSkgewotCQkJY29udGludWU7 Ci0JCX0KLQkJTVVURVhfUFJPRl9SRVNFVChhcmVuYS0+bGFyZ2VfbXR4KTsKLQkJTVVURVhfUFJP Rl9SRVNFVChhcmVuYS0+cGFfc2hhcmQuZWRhdGFfY2FjaGUubXR4KTsKLQkJTVVURVhfUFJPRl9S RVNFVChhcmVuYS0+cGFfc2hhcmQucGFjLmVjYWNoZV9kaXJ0eS5tdHgpOwotCQlNVVRFWF9QUk9G X1JFU0VUKGFyZW5hLT5wYV9zaGFyZC5wYWMuZWNhY2hlX211enp5Lm10eCk7Ci0JCU1VVEVYX1BS T0ZfUkVTRVQoYXJlbmEtPnBhX3NoYXJkLnBhYy5lY2FjaGVfcmV0YWluZWQubXR4KTsKLQkJTVVU RVhfUFJPRl9SRVNFVChhcmVuYS0+cGFfc2hhcmQucGFjLmRlY2F5X2RpcnR5Lm10eCk7Ci0JCU1V VEVYX1BST0ZfUkVTRVQoYXJlbmEtPnBhX3NoYXJkLnBhYy5kZWNheV9tdXp6eS5tdHgpOwotCQlN VVRFWF9QUk9GX1JFU0VUKGFyZW5hLT50Y2FjaGVfcWxfbXR4KTsKLQkJTVVURVhfUFJPRl9SRVNF VChhcmVuYS0+YmFzZS0+bXR4KTsKLQotCQlmb3IgKHN6aW5kX3QgaiA9IDA7IGogPCBTQ19OQklO UzsgaisrKSB7Ci0JCQlmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmluX2luZm9zW2pdLm5fc2hh cmRzOyBrKyspIHsKLQkJCQliaW5fdCAqYmluID0gYXJlbmFfZ2V0X2JpbihhcmVuYSwgaiwgayk7 Ci0JCQkJTVVURVhfUFJPRl9SRVNFVChiaW4tPmxvY2spOwotCQkJfQotCQl9Ci0JfQotI3VuZGVm IE1VVEVYX1BST0ZfUkVTRVQKLQlyZXR1cm4gMDsKLX0KLQotQ1RMX1JPX0NHRU4oY29uZmlnX3N0 YXRzLCBzdGF0c19hcmVuYXNfaV9iaW5zX2pfbm1hbGxvYywKLSAgICBhcmVuYXNfaShtaWJbMl0p LT5hc3RhdHMtPmJzdGF0c1ttaWJbNF1dLnN0YXRzX2RhdGEubm1hbGxvYywgdWludDY0X3QpCi1D VExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2JpbnNfal9uZGFsbG9jLAot ICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YnN0YXRzW21pYls0XV0uc3RhdHNfZGF0YS5u ZGFsbG9jLCB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFz X2lfYmluc19qX25yZXF1ZXN0cywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmJzdGF0 c1ttaWJbNF1dLnN0YXRzX2RhdGEubnJlcXVlc3RzLCB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNv bmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfYmluc19qX2N1cnJlZ3MsCi0gICAgYXJlbmFzX2ko bWliWzJdKS0+YXN0YXRzLT5ic3RhdHNbbWliWzRdXS5zdGF0c19kYXRhLmN1cnJlZ3MsIHNpemVf dCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfYmluc19qX25maWxs cywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmJzdGF0c1ttaWJbNF1dLnN0YXRzX2Rh dGEubmZpbGxzLCB1aW50NjRfdCkKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJl bmFzX2lfYmluc19qX25mbHVzaGVzLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+YnN0 YXRzW21pYls0XV0uc3RhdHNfZGF0YS5uZmx1c2hlcywgdWludDY0X3QpCi1DVExfUk9fQ0dFTihj b25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2JpbnNfal9uc2xhYnMsCi0gICAgYXJlbmFzX2ko bWliWzJdKS0+YXN0YXRzLT5ic3RhdHNbbWliWzRdXS5zdGF0c19kYXRhLm5zbGFicywgdWludDY0 X3QpCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2JpbnNfal9ucmVz bGFicywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmJzdGF0c1ttaWJbNF1dLnN0YXRz X2RhdGEucmVzbGFicywgdWludDY0X3QpCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRz X2FyZW5hc19pX2JpbnNfal9jdXJzbGFicywKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMt PmJzdGF0c1ttaWJbNF1dLnN0YXRzX2RhdGEuY3Vyc2xhYnMsIHNpemVfdCkKLUNUTF9ST19DR0VO KGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfYmluc19qX25vbmZ1bGxfc2xhYnMsCi0gICAg YXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5ic3RhdHNbbWliWzRdXS5zdGF0c19kYXRhLm5vbmZ1 bGxfc2xhYnMsIHNpemVfdCkKLQotc3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKgotc3Rh dHNfYXJlbmFzX2lfYmluc19qX2luZGV4KHRzZG5fdCAqdHNkbiwgY29uc3Qgc2l6ZV90ICptaWIs Ci0gICAgc2l6ZV90IG1pYmxlbiwgc2l6ZV90IGopIHsKLQlpZiAoaiA+IFNDX05CSU5TKSB7Ci0J CXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gc3VwZXJfc3RhdHNfYXJlbmFzX2lfYmluc19qX25v ZGU7Ci19Ci0KLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfbGV4dGVu dHNfal9ubWFsbG9jLAotICAgIGxvY2tlZF9yZWFkX3U2NF91bnN5bmNocm9uaXplZCgKLSAgICAm YXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5sc3RhdHNbbWliWzRdXS5ubWFsbG9jKSwgdWludDY0 X3QpCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pf bmRhbGxvYywKLSAgICBsb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQoCi0gICAgJmFyZW5h c19pKG1pYlsyXSktPmFzdGF0cy0+bHN0YXRzW21pYls0XV0ubmRhbGxvYyksIHVpbnQ2NF90KQot Q1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9sZXh0ZW50c19qX25yZXF1 ZXN0cywKLSAgICBsb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQoCi0gICAgJmFyZW5hc19p KG1pYlsyXSktPmFzdGF0cy0+bHN0YXRzW21pYls0XV0ubnJlcXVlc3RzKSwgdWludDY0X3QpCi1D VExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2xleHRlbnRzX2pfY3VybGV4 dGVudHMsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5sc3RhdHNbbWliWzRdXS5jdXJs ZXh0ZW50cywgc2l6ZV90KQotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCAqCi1zdGF0 c19hcmVuYXNfaV9sZXh0ZW50c19qX2luZGV4KHRzZG5fdCAqdHNkbiwgY29uc3Qgc2l6ZV90ICpt aWIsCi0gICAgc2l6ZV90IG1pYmxlbiwgc2l6ZV90IGopIHsKLQlpZiAoaiA+IFNDX05TSVpFUyAt IFNDX05CSU5TKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gc3VwZXJfc3RhdHNfYXJl bmFzX2lfbGV4dGVudHNfal9ub2RlOwotfQotCi1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0 YXRzX2FyZW5hc19pX2V4dGVudHNfal9uZGlydHksCi0gICAgICAgIGFyZW5hc19pKG1pYlsyXSkt PmFzdGF0cy0+ZXN0YXRzW21pYls0XV0ubmRpcnR5LCBzaXplX3QpOwotQ1RMX1JPX0NHRU4oY29u ZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pfbm11enp5LAotICAgICAgICBhcmVu YXNfaShtaWJbMl0pLT5hc3RhdHMtPmVzdGF0c1ttaWJbNF1dLm5tdXp6eSwgc2l6ZV90KTsKLUNU TF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qX25yZXRhaW5l ZCwKLSAgICAgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5lc3RhdHNbbWliWzRdXS5ucmV0 YWluZWQsIHNpemVfdCk7Ci1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19p X2V4dGVudHNfal9kaXJ0eV9ieXRlcywKLSAgICAgICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRz LT5lc3RhdHNbbWliWzRdXS5kaXJ0eV9ieXRlcywgc2l6ZV90KTsKLUNUTF9ST19DR0VOKGNvbmZp Z19zdGF0cywgc3RhdHNfYXJlbmFzX2lfZXh0ZW50c19qX211enp5X2J5dGVzLAotICAgICAgICBh cmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmVzdGF0c1ttaWJbNF1dLm11enp5X2J5dGVzLCBzaXpl X3QpOwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9leHRlbnRzX2pf cmV0YWluZWRfYnl0ZXMsCi0gICAgICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+ZXN0YXRz W21pYls0XV0ucmV0YWluZWRfYnl0ZXMsIHNpemVfdCk7Ci0KLXN0YXRpYyBjb25zdCBjdGxfbmFt ZWRfbm9kZV90ICoKLXN0YXRzX2FyZW5hc19pX2V4dGVudHNfal9pbmRleCh0c2RuX3QgKnRzZG4s IGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNpemVfdCBtaWJsZW4sIHNpemVfdCBqKSB7Ci0JaWYg KGogPj0gU0NfTlBTSVpFUykgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHN1cGVyX3N0 YXRzX2FyZW5hc19pX2V4dGVudHNfal9ub2RlOwotfQotCi1DVExfUk9fQ0dFTihjb25maWdfc3Rh dHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ucHVyZ2VfcGFzc2VzLAotICAgIGFyZW5hc19p KG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMubm9uZGVyaXZlZF9zdGF0cy5ucHVyZ2VfcGFzc2Vz LCB1aW50NjRfdCk7Ci1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hw YV9zaGFyZF9ucHVyZ2VzLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMu bm9uZGVyaXZlZF9zdGF0cy5ucHVyZ2VzLCB1aW50NjRfdCk7Ci1DVExfUk9fQ0dFTihjb25maWdf c3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9uaHVnaWZpZXMsCi0gICAgYXJlbmFzX2ko bWliWzJdKS0+YXN0YXRzLT5ocGFzdGF0cy5ub25kZXJpdmVkX3N0YXRzLm5odWdpZmllcywgdWlu dDY0X3QpOwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFfc2hh cmRfbmRlaHVnaWZpZXMsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5ocGFzdGF0cy5u b25kZXJpdmVkX3N0YXRzLm5kZWh1Z2lmaWVzLCB1aW50NjRfdCk7Ci0KLS8qIEZ1bGwsIG5vbmh1 Z2UgKi8KLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJk X2Z1bGxfc2xhYnNfbnBhZ2VzbGFic19ub25odWdlLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFz dGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZnVsbF9zbGFic1swXS5ucGFnZXNsYWJzLAotICAg IHNpemVfdCk7Ci1DVExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9z aGFyZF9mdWxsX3NsYWJzX25hY3RpdmVfbm9uaHVnZSwKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5h c3RhdHMtPmhwYXN0YXRzLnBzc2V0X3N0YXRzLmZ1bGxfc2xhYnNbMF0ubmFjdGl2ZSwgc2l6ZV90 KTsKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX2Z1 bGxfc2xhYnNfbmRpcnR5X25vbmh1Z2UsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+YXN0YXRzLT5o cGFzdGF0cy5wc3NldF9zdGF0cy5mdWxsX3NsYWJzWzBdLm5kaXJ0eSwgc2l6ZV90KTsKLQotLyog RnVsbCwgaHVnZSAqLwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9o cGFfc2hhcmRfZnVsbF9zbGFic19ucGFnZXNsYWJzX2h1Z2UsCi0gICAgYXJlbmFzX2kobWliWzJd KS0+YXN0YXRzLT5ocGFzdGF0cy5wc3NldF9zdGF0cy5mdWxsX3NsYWJzWzFdLm5wYWdlc2xhYnMs Ci0gICAgc2l6ZV90KTsKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lf aHBhX3NoYXJkX2Z1bGxfc2xhYnNfbmFjdGl2ZV9odWdlLAotICAgIGFyZW5hc19pKG1pYlsyXSkt PmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZnVsbF9zbGFic1sxXS5uYWN0aXZlLCBzaXpl X3QpOwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRf ZnVsbF9zbGFic19uZGlydHlfaHVnZSwKLSAgICBhcmVuYXNfaShtaWJbMl0pLT5hc3RhdHMtPmhw YXN0YXRzLnBzc2V0X3N0YXRzLmZ1bGxfc2xhYnNbMV0ubmRpcnR5LCBzaXplX3QpOwotCi0vKiBF bXB0eSwgbm9uaHVnZSAqLwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVuYXNf aV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbnBhZ2VzbGFic19ub25odWdlLAotICAgIGFyZW5hc19p KG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZW1wdHlfc2xhYnNbMF0ubnBh Z2VzbGFicywKLSAgICBzaXplX3QpOwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19h cmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbmFjdGl2ZV9ub25odWdlLAotICAgIGFyZW5h c19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZW1wdHlfc2xhYnNbMF0u bmFjdGl2ZSwgc2l6ZV90KTsKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFz X2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25kaXJ0eV9ub25odWdlLAotICAgIGFyZW5hc19pKG1p YlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZW1wdHlfc2xhYnNbMF0ubmRpcnR5 LCBzaXplX3QpOwotCi0vKiBFbXB0eSwgaHVnZSAqLwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRz LCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbnBhZ2VzbGFic19odWdlLAot ICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZW1wdHlf c2xhYnNbMV0ubnBhZ2VzbGFicywKLSAgICBzaXplX3QpOwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0 YXRzLCBzdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfZW1wdHlfc2xhYnNfbmFjdGl2ZV9odWdlLAot ICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZW1wdHlf c2xhYnNbMV0ubmFjdGl2ZSwgc2l6ZV90KTsKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3Rh dHNfYXJlbmFzX2lfaHBhX3NoYXJkX2VtcHR5X3NsYWJzX25kaXJ0eV9odWdlLAotICAgIGFyZW5h c19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMuZW1wdHlfc2xhYnNbMV0u bmRpcnR5LCBzaXplX3QpOwotCi0vKiBOb25mdWxsLCBub25odWdlICovCi1DVExfUk9fQ0dFTihj b25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxsX3NsYWJzX2pfbnBh Z2VzbGFic19ub25odWdlLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMu cHNzZXRfc3RhdHMubm9uZnVsbF9zbGFic1ttaWJbNV1dWzBdLm5wYWdlc2xhYnMsCi0gICAgc2l6 ZV90KTsKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJk X25vbmZ1bGxfc2xhYnNfal9uYWN0aXZlX25vbmh1Z2UsCi0gICAgYXJlbmFzX2kobWliWzJdKS0+ YXN0YXRzLT5ocGFzdGF0cy5wc3NldF9zdGF0cy5ub25mdWxsX3NsYWJzW21pYls1XV1bMF0ubmFj dGl2ZSwKLSAgICBzaXplX3QpOwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0c19hcmVu YXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qX25kaXJ0eV9ub25odWdlLAotICAgIGFyZW5h c19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMubm9uZnVsbF9zbGFic1tt aWJbNV1dWzBdLm5kaXJ0eSwKLSAgICBzaXplX3QpOwotCi0vKiBOb25mdWxsLCBodWdlICovCi1D VExfUk9fQ0dFTihjb25maWdfc3RhdHMsIHN0YXRzX2FyZW5hc19pX2hwYV9zaGFyZF9ub25mdWxs X3NsYWJzX2pfbnBhZ2VzbGFic19odWdlLAotICAgIGFyZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+ aHBhc3RhdHMucHNzZXRfc3RhdHMubm9uZnVsbF9zbGFic1ttaWJbNV1dWzFdLm5wYWdlc2xhYnMs Ci0gICAgc2l6ZV90KTsKLUNUTF9ST19DR0VOKGNvbmZpZ19zdGF0cywgc3RhdHNfYXJlbmFzX2lf aHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNfal9uYWN0aXZlX2h1Z2UsCi0gICAgYXJlbmFzX2kobWli WzJdKS0+YXN0YXRzLT5ocGFzdGF0cy5wc3NldF9zdGF0cy5ub25mdWxsX3NsYWJzW21pYls1XV1b MV0ubmFjdGl2ZSwKLSAgICBzaXplX3QpOwotQ1RMX1JPX0NHRU4oY29uZmlnX3N0YXRzLCBzdGF0 c19hcmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qX25kaXJ0eV9odWdlLAotICAgIGFy ZW5hc19pKG1pYlsyXSktPmFzdGF0cy0+aHBhc3RhdHMucHNzZXRfc3RhdHMubm9uZnVsbF9zbGFi c1ttaWJbNV1dWzFdLm5kaXJ0eSwKLSAgICBzaXplX3QpOwotCi1zdGF0aWMgY29uc3QgY3RsX25h bWVkX25vZGVfdCAqCi1zdGF0c19hcmVuYXNfaV9ocGFfc2hhcmRfbm9uZnVsbF9zbGFic19qX2lu ZGV4KHRzZG5fdCAqdHNkbiwgY29uc3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1pYmxlbiwg c2l6ZV90IGopIHsKLQlpZiAoaiA+PSBQU1NFVF9OUFNJWkVTKSB7Ci0JCXJldHVybiBOVUxMOwot CX0KLQlyZXR1cm4gc3VwZXJfc3RhdHNfYXJlbmFzX2lfaHBhX3NoYXJkX25vbmZ1bGxfc2xhYnNf al9ub2RlOwotfQotCi1zdGF0aWMgYm9vbAotY3RsX2FyZW5hc19pX3ZlcmlmeShzaXplX3QgaSkg ewotCXNpemVfdCBhID0gYXJlbmFzX2kyYV9pbXBsKGksIHRydWUsIHRydWUpOwotCWlmIChhID09 IFVJTlRfTUFYIHx8ICFjdGxfYXJlbmFzLT5hcmVuYXNbYV0tPmluaXRpYWxpemVkKSB7Ci0JCXJl dHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IGN0bF9u YW1lZF9ub2RlX3QgKgotc3RhdHNfYXJlbmFzX2lfaW5kZXgodHNkbl90ICp0c2RuLCBjb25zdCBz aXplX3QgKm1pYiwKLSAgICBzaXplX3QgbWlibGVuLCBzaXplX3QgaSkgewotCWNvbnN0IGN0bF9u YW1lZF9ub2RlX3QgKnJldDsKLQotCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZjdGxfbXR4KTsK LQlpZiAoY3RsX2FyZW5hc19pX3ZlcmlmeShpKSkgewotCQlyZXQgPSBOVUxMOwotCQlnb3RvIGxh YmVsX3JldHVybjsKLQl9Ci0KLQlyZXQgPSBzdXBlcl9zdGF0c19hcmVuYXNfaV9ub2RlOwotbGFi ZWxfcmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmN0bF9tdHgpOwotCXJldHVy biByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4cGVyaW1lbnRhbF9ob29rc19pbnN0YWxsX2N0bCh0 c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAgICB2b2lkICpv bGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKLQlpbnQg cmV0OwotCWlmIChvbGRwID09IE5VTEwgfHwgb2xkbGVucCA9PSBOVUxMfHwgbmV3cCA9PSBOVUxM KSB7Ci0JCXJldCA9IEVJTlZBTDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCS8qCi0JICog Tm90ZTogdGhpcyBpcyBhICpwcml2YXRlKiBzdHJ1Y3QuICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRh bCBpbnRlcmZhY2U7Ci0JICogZm9yY2luZyB0aGUgdXNlciB0byBrbm93IHRoZSBqZW1hbGxvYyBp bnRlcm5hbHMgd2VsbCBlbm91Z2ggdG8KLQkgKiBleHRyYWN0IHRoZSBBQkkgaG9wZWZ1bGx5IGVu c3VyZXMgbm9ib2R5IGdldHMgdG9vIGNvbWZvcnRhYmxlIHdpdGgKLQkgKiB0aGlzIEFQSSwgd2hp Y2ggY2FuIGNoYW5nZSBhdCBhIG1vbWVudCdzIG5vdGljZS4KLQkgKi8KLQlob29rc190IGhvb2tz OwotCVdSSVRFKGhvb2tzLCBob29rc190KTsKLQl2b2lkICpoYW5kbGUgPSBob29rX2luc3RhbGwo dHNkX3RzZG4odHNkKSwgJmhvb2tzKTsKLQlpZiAoaGFuZGxlID09IE5VTEwpIHsKLQkJcmV0ID0g RUFHQUlOOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0JUkVBRChoYW5kbGUsIHZvaWQgKik7 Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBp bnQKLWV4cGVyaW1lbnRhbF9ob29rc19yZW1vdmVfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVf dCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwg dm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JV1JJVEVPTkxZKCk7Ci0J dm9pZCAqaGFuZGxlID0gTlVMTDsKLQlXUklURShoYW5kbGUsIHZvaWQgKik7Ci0JaWYgKGhhbmRs ZSA9PSBOVUxMKSB7Ci0JCXJldCA9IEVJTlZBTDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQot CWhvb2tfcmVtb3ZlKHRzZF90c2RuKHRzZCksIGhhbmRsZSk7Ci0JcmV0ID0gMDsKLWxhYmVsX3Jl dHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50Ci1leHBlcmltZW50YWxfdGhyZWFk X2FjdGl2aXR5X2NhbGxiYWNrX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwKLSAg ICBzaXplX3QgbWlibGVuLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3As IHNpemVfdCBuZXdsZW4pIHsKLQlpbnQgcmV0OwotCi0JaWYgKCFjb25maWdfc3RhdHMpIHsKLQkJ cmV0dXJuIEVOT0VOVDsKLQl9Ci0KLQlhY3Rpdml0eV9jYWxsYmFja190aHVua190IHRfb2xkID0g dHNkX2FjdGl2aXR5X2NhbGxiYWNrX3RodW5rX2dldCh0c2QpOwotCVJFQUQodF9vbGQsIGFjdGl2 aXR5X2NhbGxiYWNrX3RodW5rX3QpOwotCi0JaWYgKG5ld3AgIT0gTlVMTCkgewotCQkvKgotCQkg KiBUaGlzIGluaXRpYWxpemF0aW9uIGlzIHVubmVjZXNzYXJ5LiAgSWYgaXQncyBvbWl0dGVkLCB0 aG91Z2gsCi0JCSAqIGNsYW5nIGdldHMgY29uZnVzZWQgYW5kIHdhcm5zIG9uIHRoZSBzdWJzZXF1 ZW50IHVzZSBvZiB0X25ldy4KLQkJICovCi0JCWFjdGl2aXR5X2NhbGxiYWNrX3RodW5rX3QgdF9u ZXcgPSB7TlVMTCwgTlVMTH07Ci0JCVdSSVRFKHRfbmV3LCBhY3Rpdml0eV9jYWxsYmFja190aHVu a190KTsKLQkJdHNkX2FjdGl2aXR5X2NhbGxiYWNrX3RodW5rX3NldCh0c2QsIHRfbmV3KTsKLQl9 Ci0JcmV0ID0gMDsKLWxhYmVsX3JldHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogT3V0 cHV0IHNpeCBtZW1vcnkgdXRpbGl6YXRpb24gZW50cmllcyBmb3IgYW4gaW5wdXQgcG9pbnRlciwg dGhlIGZpcnN0IG9uZSBvZgotICogdHlwZSAodm9pZCAqKSBhbmQgdGhlIHJlbWFpbmluZyBmaXZl IG9mIHR5cGUgc2l6ZV90LCBkZXNjcmliaW5nIHRoZSBmb2xsb3dpbmcKLSAqIChpbiB0aGUgc2Ft ZSBvcmRlcik6Ci0gKgotICogKGEpIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBleHRlbnQgYSBwb3Rl bnRpYWwgcmVhbGxvY2F0aW9uIHdvdWxkIGdvIGludG8sCi0gKiA9PSB0aGUgZml2ZSBmaWVsZHMg YmVsb3cgZGVzY3JpYmUgYWJvdXQgdGhlIGV4dGVudCB0aGUgcG9pbnRlciByZXNpZGVzIGluID09 Ci0gKiAoYikgbnVtYmVyIG9mIGZyZWUgcmVnaW9ucyBpbiB0aGUgZXh0ZW50LAotICogKGMpIG51 bWJlciBvZiByZWdpb25zIGluIHRoZSBleHRlbnQsCi0gKiAoZCkgc2l6ZSBvZiB0aGUgZXh0ZW50 IGluIHRlcm1zIG9mIGJ5dGVzLAotICogKGUpIHRvdGFsIG51bWJlciBvZiBmcmVlIHJlZ2lvbnMg aW4gdGhlIGJpbiB0aGUgZXh0ZW50IGJlbG9uZ3MgdG8sIGFuZAotICogKGYpIHRvdGFsIG51bWJl ciBvZiByZWdpb25zIGluIHRoZSBiaW4gdGhlIGV4dGVudCBiZWxvbmdzIHRvLgotICoKLSAqIE5v dGUgdGhhdCAiKGUpIiBhbmQgIihmKSIgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gc3RhdHMgYXJl IGVuYWJsZWQ7Ci0gKiBvdGhlcndpc2UgdGhlaXIgdmFsdWVzIGFyZSB1bmRlZmluZWQuCi0gKgot ICogVGhpcyBBUEkgaXMgbWFpbmx5IGludGVuZGVkIGZvciBzbWFsbCBjbGFzcyBhbGxvY2F0aW9u cywgd2hlcmUgZXh0ZW50cyBhcmUKLSAqIHVzZWQgYXMgc2xhYi4gIE5vdGUgdGhhdCBpZiB0aGUg YmluIHRoZSBleHRlbnQgYmVsb25ncyB0byBpcyBjb21wbGV0ZWx5Ci0gKiBmdWxsLCAiKGEpIiB3 aWxsIGJlIE5VTEwuCi0gKgotICogSW4gY2FzZSBvZiBsYXJnZSBjbGFzcyBhbGxvY2F0aW9ucywg IihhKSIgd2lsbCBiZSBOVUxMLCBhbmQgIihlKSIgYW5kICIoZikiCi0gKiB3aWxsIGJlIHplcm8g KGlmIHN0YXRzIGFyZSBlbmFibGVkOyBvdGhlcndpc2UgdW5kZWZpbmVkKS4gIFRoZSBvdGhlciB0 aHJlZQotICogZmllbGRzIHdpbGwgYmUgcHJvcGVybHkgc2V0IHRob3VnaCB0aGUgdmFsdWVzIGFy ZSB0cml2aWFsOiAiKGIpIiB3aWxsIGJlIDAsCi0gKiAiKGMpIiB3aWxsIGJlIDEsIGFuZCAiKGQp IiB3aWxsIGJlIHRoZSB1c2FibGUgc2l6ZS4KLSAqCi0gKiBUaGUgaW5wdXQgcG9pbnRlciBhbmQg c2l6ZSBhcmUgcmVzcGVjdGl2ZWx5IHBhc3NlZCBpbiBieSBuZXdwIGFuZCBuZXdsZW4sCi0gKiBh bmQgdGhlIG91dHB1dCBmaWVsZHMgYW5kIHNpemUgYXJlIHJlc3BlY3RpdmVseSBvbGRwIGFuZCAq b2xkbGVucC4KLSAqCi0gKiBJdCBjYW4gYmUgYmVuZWZpY2lhbCB0byBkZWZpbmUgdGhlIGZvbGxv d2luZyBtYWNyb3MgdG8gbWFrZSBpdCBlYXNpZXIgdG8KLSAqIGFjY2VzcyB0aGUgb3V0cHV0Ogot ICoKLSAqICNkZWZpbmUgU0xBQkNVUl9SRUFEKG91dCkgKCoodm9pZCAqKilvdXQpCi0gKiAjZGVm aW5lIENPVU5UUyhvdXQpICgoc2l6ZV90ICopKCh2b2lkICoqKW91dCArIDEpKQotICogI2RlZmlu ZSBORlJFRV9SRUFEKG91dCkgQ09VTlRTKG91dClbMF0KLSAqICNkZWZpbmUgTlJFR1NfUkVBRChv dXQpIENPVU5UUyhvdXQpWzFdCi0gKiAjZGVmaW5lIFNJWkVfUkVBRChvdXQpIENPVU5UUyhvdXQp WzJdCi0gKiAjZGVmaW5lIEJJTl9ORlJFRV9SRUFEKG91dCkgQ09VTlRTKG91dClbM10KLSAqICNk ZWZpbmUgQklOX05SRUdTX1JFQUQob3V0KSBDT1VOVFMob3V0KVs0XQotICoKLSAqIGFuZCB0aGVu IHdyaXRlIGUuZy4gTkZSRUVfUkVBRChvbGRwKSB0byBmZXRjaCB0aGUgb3V0cHV0LiAgU2VlIHRo ZSB1bml0IHRlc3QKLSAqIHRlc3RfcXVlcnkgaW4gdGVzdC91bml0L2V4dGVudF91dGlsLmMgZm9y IGFuIGV4YW1wbGUuCi0gKgotICogRm9yIGEgdHlwaWNhbCBkZWZyYWdtZW50YXRpb24gd29ya2Zs b3cgbWFraW5nIHVzZSBvZiB0aGlzIEFQSSBmb3IKLSAqIHVuZGVyc3RhbmRpbmcgdGhlIGZyYWdt ZW50YXRpb24gbGV2ZWwsIHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudCBmb3IKLSAqIGV4cGVy aW1lbnRhbF91dGlsaXphdGlvbl9iYXRjaF9xdWVyeV9jdGwuCi0gKgotICogSXQncyB1cCB0byB0 aGUgYXBwbGljYXRpb24gaG93IHRvIGRldGVybWluZSB0aGUgc2lnbmlmaWNhbmNlIG9mCi0gKiBm cmFnbWVudGF0aW9uIHJlbHlpbmcgb24gdGhlIG91dHB1dHMgcmV0dXJuZWQuICBQb3NzaWJsZSBj aG9pY2VzIGFyZToKLSAqCi0gKiAoYSkgaWYgZXh0ZW50IHV0aWxpemF0aW9uIHJhdGlvIGlzIGJl bG93IGNlcnRhaW4gdGhyZXNob2xkLAotICogKGIpIGlmIGV4dGVudCBtZW1vcnkgY29uc3VtcHRp b24gaXMgYWJvdmUgY2VydGFpbiB0aHJlc2hvbGQsCi0gKiAoYykgaWYgZXh0ZW50IHV0aWxpemF0 aW9uIHJhdGlvIGlzIHNpZ25pZmljYW50bHkgYmVsb3cgYmluIHV0aWxpemF0aW9uIHJhdGlvLAot ICogKGQpIGlmIGlucHV0IHBvaW50ZXIgZGV2aWF0ZXMgYSBsb3QgZnJvbSBwb3RlbnRpYWwgcmVh bGxvY2F0aW9uIGFkZHJlc3MsIG9yCi0gKiAoZSkgc29tZSBzZWxlY3Rpb24vY29tYmluYXRpb24g b2YgdGhlIGFib3ZlLgotICoKLSAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQg dGhlIGlucHV0L291dHB1dCBhcmd1bWVudHMgYXJlIHZhbGlkLAotICogaW4gcGFydGljdWxhciwg dGhhdCB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGlzIGNvcnJlY3QsIGkuZS46Ci0gKgotICogICAg ICpvbGRsZW5wID0gc2l6ZW9mKHZvaWQgKikgKyBzaXplb2Yoc2l6ZV90KSAqIDUKLSAqCi0gKiBP dGhlcndpc2UsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIEVJTlZBTCB3aXRob3V0 IHRvdWNoaW5nIGFueXRoaW5nLgotICoKLSAqIEluIHRoZSByYXJlIGNhc2Ugd2hlcmUgdGhlcmUn cyBubyBhc3NvY2lhdGVkIGV4dGVudCBmb3VuZCBmb3IgdGhlIGlucHV0Ci0gKiBwb2ludGVyLCB0 aGUgZnVuY3Rpb24gemVyb3Mgb3V0IGFsbCBvdXRwdXQgZmllbGRzIGFuZCByZXR1cm4uICBQbGVh c2UgcmVmZXIKLSAqIHRvIHRoZSBjb21tZW50IGZvciBleHBlcmltZW50YWxfdXRpbGl6YXRpb25f YmF0Y2hfcXVlcnlfY3RsIHRvIHVuZGVyc3RhbmQgdGhlCi0gKiBtb3RpdmF0aW9uIGZyb20gQysr LgotICovCi1zdGF0aWMgaW50Ci1leHBlcmltZW50YWxfdXRpbGl6YXRpb25fcXVlcnlfY3RsKHRz ZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9s ZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCBy ZXQ7Ci0KLQlhc3NlcnQoc2l6ZW9mKGluc3BlY3RfZXh0ZW50X3V0aWxfc3RhdHNfdmVyYm9zZV90 KQotCSAgICA9PSBzaXplb2Yodm9pZCAqKSArIHNpemVvZihzaXplX3QpICogNSk7Ci0KLQlpZiAo b2xkcCA9PSBOVUxMIHx8IG9sZGxlbnAgPT0gTlVMTAotCSAgICB8fCAqb2xkbGVucCAhPSBzaXpl b2YoaW5zcGVjdF9leHRlbnRfdXRpbF9zdGF0c192ZXJib3NlX3QpCi0JICAgIHx8IG5ld3AgPT0g TlVMTCkgewotCQlyZXQgPSBFSU5WQUw7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQotCXZv aWQgKnB0ciA9IE5VTEw7Ci0JV1JJVEUocHRyLCB2b2lkICopOwotCWluc3BlY3RfZXh0ZW50X3V0 aWxfc3RhdHNfdmVyYm9zZV90ICp1dGlsX3N0YXRzCi0JICAgID0gKGluc3BlY3RfZXh0ZW50X3V0 aWxfc3RhdHNfdmVyYm9zZV90ICopb2xkcDsKLQlpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3Zl cmJvc2VfZ2V0KHRzZF90c2RuKHRzZCksIHB0ciwKLQkgICAgJnV0aWxfc3RhdHMtPm5mcmVlLCAm dXRpbF9zdGF0cy0+bnJlZ3MsICZ1dGlsX3N0YXRzLT5zaXplLAotCSAgICAmdXRpbF9zdGF0cy0+ YmluX25mcmVlLCAmdXRpbF9zdGF0cy0+YmluX25yZWdzLAotCSAgICAmdXRpbF9zdGF0cy0+c2xh YmN1cl9hZGRyKTsKLQlyZXQgPSAwOwotCi1sYWJlbF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0K LQotLyoKLSAqIEdpdmVuIGFuIGlucHV0IGFycmF5IG9mIHBvaW50ZXJzLCBvdXRwdXQgdGhyZWUg bWVtb3J5IHV0aWxpemF0aW9uIGVudHJpZXMgb2YKLSAqIHR5cGUgc2l6ZV90IGZvciBlYWNoIGlu cHV0IHBvaW50ZXIgYWJvdXQgdGhlIGV4dGVudCBpdCByZXNpZGVzIGluOgotICoKLSAqIChhKSBu dW1iZXIgb2YgZnJlZSByZWdpb25zIGluIHRoZSBleHRlbnQsCi0gKiAoYikgbnVtYmVyIG9mIHJl Z2lvbnMgaW4gdGhlIGV4dGVudCwgYW5kCi0gKiAoYykgc2l6ZSBvZiB0aGUgZXh0ZW50IGluIHRl cm1zIG9mIGJ5dGVzLgotICoKLSAqIFRoaXMgQVBJIGlzIG1haW5seSBpbnRlbmRlZCBmb3Igc21h bGwgY2xhc3MgYWxsb2NhdGlvbnMsIHdoZXJlIGV4dGVudHMgYXJlCi0gKiB1c2VkIGFzIHNsYWIu ICBJbiBjYXNlIG9mIGxhcmdlIGNsYXNzIGFsbG9jYXRpb25zLCB0aGUgb3V0cHV0cyBhcmUgdHJp dmlhbDoKLSAqICIoYSkiIHdpbGwgYmUgMCwgIihiKSIgd2lsbCBiZSAxLCBhbmQgIihjKSIgd2ls bCBiZSB0aGUgdXNhYmxlIHNpemUuCi0gKgotICogTm90ZSB0aGF0IG11bHRpcGxlIGlucHV0IHBv aW50ZXJzIG1heSByZXNpZGUgb24gYSBzYW1lIGV4dGVudCBzbyB0aGUgb3V0cHV0Ci0gKiBmaWVs ZHMgbWF5IGNvbnRhaW4gZHVwbGljYXRlcy4KLSAqCi0gKiBUaGUgZm9ybWF0IG9mIHRoZSBpbnB1 dC9vdXRwdXQgbG9va3MgbGlrZToKLSAqCi0gKiBpbnB1dFswXTogIDFzdF9wb2ludGVyX3RvX3F1 ZXJ5CXwgIG91dHB1dFswXTogMXN0X2V4dGVudF9uX2ZyZWVfcmVnaW9ucwotICoJCQkJCXwgIG91 dHB1dFsxXTogMXN0X2V4dGVudF9uX3JlZ2lvbnMKLSAqCQkJCQl8ICBvdXRwdXRbMl06IDFzdF9l eHRlbnRfc2l6ZQotICogaW5wdXRbMV06ICAybmRfcG9pbnRlcl90b19xdWVyeQl8ICBvdXRwdXRb M106IDJuZF9leHRlbnRfbl9mcmVlX3JlZ2lvbnMKLSAqCQkJCQl8ICBvdXRwdXRbNF06IDJuZF9l eHRlbnRfbl9yZWdpb25zCi0gKgkJCQkJfCAgb3V0cHV0WzVdOiAybmRfZXh0ZW50X3NpemUKLSAq IC4uLgkJCQkJfCAgLi4uCi0gKgotICogVGhlIGlucHV0IGFycmF5IGFuZCBzaXplIGFyZSByZXNw ZWN0aXZlbHkgcGFzc2VkIGluIGJ5IG5ld3AgYW5kIG5ld2xlbiwgYW5kCi0gKiB0aGUgb3V0cHV0 IGFycmF5IGFuZCBzaXplIGFyZSByZXNwZWN0aXZlbHkgb2xkcCBhbmQgKm9sZGxlbnAuCi0gKgot ICogSXQgY2FuIGJlIGJlbmVmaWNpYWwgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHRv IG1ha2UgaXQgZWFzaWVyIHRvCi0gKiBhY2Nlc3MgdGhlIG91dHB1dDoKLSAqCi0gKiAjZGVmaW5l IE5GUkVFX1JFQUQob3V0LCBpKSBvdXRbKGkpICogM10KLSAqICNkZWZpbmUgTlJFR1NfUkVBRChv dXQsIGkpIG91dFsoaSkgKiAzICsgMV0KLSAqICNkZWZpbmUgU0laRV9SRUFEKG91dCwgaSkgb3V0 WyhpKSAqIDMgKyAyXQotICoKLSAqIGFuZCB0aGVuIHdyaXRlIGUuZy4gTkZSRUVfUkVBRChvbGRw LCBpKSB0byBmZXRjaCB0aGUgb3V0cHV0LiAgU2VlIHRoZSB1bml0Ci0gKiB0ZXN0IHRlc3RfYmF0 Y2ggaW4gdGVzdC91bml0L2V4dGVudF91dGlsLmMgZm9yIGEgY29uY3JldGUgZXhhbXBsZS4KLSAq Ci0gKiBBIHR5cGljYWwgd29ya2Zsb3cgd291bGQgYmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2lu ZyBzdGVwczoKLSAqCi0gKiAoMSkgZmx1c2ggdGNhY2hlOiBtYWxsY3RsKCJ0aHJlYWQudGNhY2hl LmZsdXNoIiwgLi4uKQotICogKDIpIGluaXRpYWxpemUgaW5wdXQgYXJyYXkgb2YgcG9pbnRlcnMg dG8gcXVlcnkgZnJhZ21lbnRhdGlvbgotICogKDMpIGFsbG9jYXRlIG91dHB1dCBhcnJheSB0byBo b2xkIHV0aWxpemF0aW9uIHN0YXRpc3RpY3MKLSAqICg0KSBxdWVyeSB1dGlsaXphdGlvbjogbWFs bGN0bCgiZXhwZXJpbWVudGFsLnV0aWxpemF0aW9uLmJhdGNoX3F1ZXJ5IiwgLi4uKQotICogKDUp IChvcHRpb25hbCkgZGVjaWRlIGlmIGl0J3Mgd29ydGh3aGlsZSB0byBkZWZyYWdtZW50OyBvdGhl cndpc2Ugc3RvcCBoZXJlCi0gKiAoNikgZGlzYWJsZSB0Y2FjaGU6IG1hbGxjdGwoInRocmVhZC50 Y2FjaGUuZW5hYmxlZCIsIC4uLikKLSAqICg3KSBkZWZyYWdtZW50IGFsbG9jYXRpb25zIHdpdGgg c2lnbmlmaWNhbnQgZnJhZ21lbnRhdGlvbiwgZS5nLjoKLSAqICAgICAgICAgZm9yIGVhY2ggYWxs b2NhdGlvbiB7Ci0gKiAgICAgICAgICAgICBpZiBpdCdzIGZyYWdtZW50ZWQgewotICogICAgICAg ICAgICAgICAgIG1hbGxvYyguLi4pOwotICogICAgICAgICAgICAgICAgIG1lbWNweSguLi4pOwot ICogICAgICAgICAgICAgICAgIGZyZWUoLi4uKTsKLSAqICAgICAgICAgICAgIH0KLSAqICAgICAg ICAgfQotICogKDgpIGVuYWJsZSB0Y2FjaGU6IG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZW5hYmxl ZCIsIC4uLikKLSAqCi0gKiBUaGUgYXBwbGljYXRpb24gY2FuIGRldGVybWluZSB0aGUgc2lnbmlm aWNhbmNlIG9mIGZyYWdtZW50YXRpb24gdGhlbXNlbHZlcwotICogcmVseWluZyBvbiB0aGUgc3Rh dGlzdGljcyByZXR1cm5lZCwgYm90aCBhdCB0aGUgb3ZlcmFsbCBsZXZlbCBpLmUuIHN0ZXAgIig1 KSIKLSAqIGFuZCBhdCBpbmRpdmlkdWFsIGFsbG9jYXRpb24gbGV2ZWwgaS5lLiB3aXRoaW4gc3Rl cCAiKDcpIi4gIFBvc3NpYmxlIGNob2ljZXMKLSAqIGFyZToKLSAqCi0gKiAoYSkgd2hldGhlciBt ZW1vcnkgdXRpbGl6YXRpb24gcmF0aW8gaXMgYmVsb3cgY2VydGFpbiB0aHJlc2hvbGQsCi0gKiAo Yikgd2hldGhlciBtZW1vcnkgY29uc3VtcHRpb24gaXMgYWJvdmUgY2VydGFpbiB0aHJlc2hvbGQs IG9yCi0gKiAoYykgc29tZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvLgotICoKLSAqIFRoZSBjYWxs ZXIgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGlucHV0L291dHB1dCBhcnJheXMgYXJlIHZh bGlkIGFuZAotICogdGhlaXIgc2l6ZXMgYXJlIHByb3BlciBhcyB3ZWxsIGFzIG1hdGNoZWQsIG1l YW5pbmc6Ci0gKgotICogKGEpIG5ld2xlbiA9IG5fcG9pbnRlcnMgKiBzaXplb2YoY29uc3Qgdm9p ZCAqKQotICogKGIpICpvbGRsZW5wID0gbl9wb2ludGVycyAqIHNpemVvZihzaXplX3QpICogMwot ICogKGMpIG5fcG9pbnRlcnMgPiAwCi0gKgotICogT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gaW1t ZWRpYXRlbHkgcmV0dXJucyBFSU5WQUwgd2l0aG91dCB0b3VjaGluZyBhbnl0aGluZy4KLSAqCi0g KiBJbiB0aGUgcmFyZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgbm8gYXNzb2NpYXRlZCBleHRlbnQgZm91 bmQgZm9yIHNvbWUgcG9pbnRlcnMsCi0gKiByYXRoZXIgdGhhbiBpbW1lZGlhdGVseSB0ZXJtaW5h dGluZyB0aGUgY29tcHV0YXRpb24gYW5kIHJhaXNpbmcgYW4gZXJyb3IsCi0gKiB0aGUgZnVuY3Rp b24gc2ltcGx5IHplcm9zIG91dCB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQgZmllbGRzIGFuZCBj b250aW51ZXMKLSAqIHRoZSBjb21wdXRhdGlvbiB1bnRpbCBhbGwgaW5wdXQgcG9pbnRlcnMgYXJl IGhhbmRsZWQuICBUaGUgbW90aXZhdGlvbnMgb2YKLSAqIHN1Y2ggYSBkZXNpZ24gYXJlIGFzIGZv bGxvd3M6Ci0gKgotICogKGEpIFRoZSBmdW5jdGlvbiBhbHdheXMgZWl0aGVyIHByb2Nlc3NlcyBu b3RoaW5nIG9yIHByb2Nlc3NlcyBldmVyeXRoaW5nLCBhbmQKLSAqIG5ldmVyIGxlYXZlcyB0aGUg b3V0cHV0IGhhbGYgdG91Y2hlZCBhbmQgaGFsZiB1bnRvdWNoZWQuCi0gKgotICogKGIpIEl0IGZh Y2lsaXRhdGVzIHVzYWdlIG5lZWRzIGVzcGVjaWFsbHkgY29tbW9uIGluIEMrKy4gIEEgdmFzdCB2 YXJpZXR5IG9mCi0gKiBDKysgb2JqZWN0cyBhcmUgaW5zdGFudGlhdGVkIHdpdGggbXVsdGlwbGUg ZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbnMuICBGb3IKLSAqIGV4YW1wbGUsIHN0ZDo6c3RyaW5n IGFuZCBzdGQ6OnZlY3RvciB0eXBpY2FsbHkgdXNlIGF0IGxlYXN0IHR3byBhbGxvY2F0aW9ucywK LSAqIG9uZSBmb3IgdGhlIG1ldGFkYXRhIGFuZCBvbmUgZm9yIHRoZSBhY3R1YWwgY29udGVudC4g IE90aGVyIHR5cGVzIG1heSB1c2UKLSAqIGV2ZW4gbW9yZSBhbGxvY2F0aW9ucy4gIFdoZW4gaW5x dWlyaW5nIGFib3V0IHV0aWxpemF0aW9uIHN0YXRpc3RpY3MsIHRoZQotICogY2FsbGVyIG9mdGVu IHdhbnRzIHRvIGV4YW1pbmUgaW50byBhbGwgc3VjaCBhbGxvY2F0aW9ucywgZXNwZWNpYWxseSBp bnRlcm5hbAotICogb25lKHMpLCByYXRoZXIgdGhhbiBqdXN0IHRoZSB0b3Btb3N0IG9uZS4gIFRo ZSBpc3N1ZSBjb21lcyB3aGVuIHNvbWUKLSAqIGltcGxlbWVudGF0aW9ucyBkbyBjZXJ0YWluIG9w dGltaXphdGlvbnMgdG8gcmVkdWNlL2FnZ3JlZ2F0ZSBzb21lIGludGVybmFsCi0gKiBhbGxvY2F0 aW9ucywgZS5nLiBwdXR0aW5nIHNob3J0IHN0cmluZ3MgZGlyZWN0bHkgaW50byB0aGUgbWV0YWRh dGEsIGFuZCBzdWNoCi0gKiBkZWNpc2lvbnMgYXJlIG5vdCBrbm93biB0byB0aGUgY2FsbGVyLiAg VGhlcmVmb3JlLCB3ZSBwZXJtaXQgcG9pbnRlcnMgdG8KLSAqIG1lbW9yeSB1c2FnZXMgdGhhdCBt YXkgbm90IGJlIHJldHVybmVkIGJ5IHByZXZpb3VzIG1hbGxvYyBjYWxscywgYW5kIHdlCi0gKiBw cm92aWRlIHRoZSBjYWxsZXIgYSBjb252ZW5pZW50IHdheSB0byBpZGVudGlmeSBzdWNoIGNhc2Vz LgotICovCi1zdGF0aWMgaW50Ci1leHBlcmltZW50YWxfdXRpbGl6YXRpb25fYmF0Y2hfcXVlcnlf Y3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNpemVfdCBtaWJsZW4sIHZv aWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewot CWludCByZXQ7Ci0KLQlhc3NlcnQoc2l6ZW9mKGluc3BlY3RfZXh0ZW50X3V0aWxfc3RhdHNfdCkg PT0gc2l6ZW9mKHNpemVfdCkgKiAzKTsKLQotCWNvbnN0IHNpemVfdCBsZW4gPSBuZXdsZW4gLyBz aXplb2YoY29uc3Qgdm9pZCAqKTsKLQlpZiAob2xkcCA9PSBOVUxMIHx8IG9sZGxlbnAgPT0gTlVM TCB8fCBuZXdwID09IE5VTEwgfHwgbmV3bGVuID09IDAKLQkgICAgfHwgbmV3bGVuICE9IGxlbiAq IHNpemVvZihjb25zdCB2b2lkICopCi0JICAgIHx8ICpvbGRsZW5wICE9IGxlbiAqIHNpemVvZihp bnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3QpKSB7Ci0JCXJldCA9IEVJTlZBTDsKLQkJZ290byBs YWJlbF9yZXR1cm47Ci0JfQotCi0Jdm9pZCAqKnB0cnMgPSAodm9pZCAqKiluZXdwOwotCWluc3Bl Y3RfZXh0ZW50X3V0aWxfc3RhdHNfdCAqdXRpbF9zdGF0cyA9Ci0JICAgIChpbnNwZWN0X2V4dGVu dF91dGlsX3N0YXRzX3QgKilvbGRwOwotCXNpemVfdCBpOwotCWZvciAoaSA9IDA7IGkgPCBsZW47 ICsraSkgewotCQlpbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX2dldCh0c2RfdHNkbih0c2QpLCBw dHJzW2ldLAotCQkgICAgJnV0aWxfc3RhdHNbaV0ubmZyZWUsICZ1dGlsX3N0YXRzW2ldLm5yZWdz LAotCQkgICAgJnV0aWxfc3RhdHNbaV0uc2l6ZSk7Ci0JfQotCXJldCA9IDA7Ci0KLWxhYmVsX3Jl dHVybjoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY29uc3QgY3RsX25hbWVkX25vZGVfdCAq Ci1leHBlcmltZW50YWxfYXJlbmFzX2lfaW5kZXgodHNkbl90ICp0c2RuLCBjb25zdCBzaXplX3Qg Km1pYiwKLSAgICBzaXplX3QgbWlibGVuLCBzaXplX3QgaSkgewotCWNvbnN0IGN0bF9uYW1lZF9u b2RlX3QgKnJldDsKLQotCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZjdGxfbXR4KTsKLQlpZiAo Y3RsX2FyZW5hc19pX3ZlcmlmeShpKSkgewotCQlyZXQgPSBOVUxMOwotCQlnb3RvIGxhYmVsX3Jl dHVybjsKLQl9Ci0JcmV0ID0gc3VwZXJfZXhwZXJpbWVudGFsX2FyZW5hc19pX25vZGU7Ci1sYWJl bF9yZXR1cm46Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmY3RsX210eCk7Ci0JcmV0dXJu IHJldDsKLX0KLQotc3RhdGljIGludAotZXhwZXJpbWVudGFsX2FyZW5hc19pX3BhY3RpdmVwX2N0 bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwKLSAgICBzaXplX3QgbWlibGVuLCB2b2lk ICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4pIHsKLQlp ZiAoIWNvbmZpZ19zdGF0cykgewotCQlyZXR1cm4gRU5PRU5UOwotCX0KLQlpZiAob2xkcCA9PSBO VUxMIHx8IG9sZGxlbnAgPT0gTlVMTCB8fCAqb2xkbGVucCAhPSBzaXplb2Yoc2l6ZV90ICopKSB7 Ci0JCXJldHVybiBFSU5WQUw7Ci0JfQotCi0JdW5zaWduZWQgYXJlbmFfaW5kOwotCWFyZW5hX3Qg KmFyZW5hOwotCWludCByZXQ7Ci0Jc2l6ZV90ICpwYWN0aXZlcDsKLQotCW1hbGxvY19tdXRleF9s b2NrKHRzZF90c2RuKHRzZCksICZjdGxfbXR4KTsKLQlSRUFET05MWSgpOwotCU1JQl9VTlNJR05F RChhcmVuYV9pbmQsIDIpOwotCWlmIChhcmVuYV9pbmQgPCBuYXJlbmFzX3RvdGFsX2dldCgpICYm IChhcmVuYSA9Ci0JICAgIGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBhcmVuYV9pbmQsIGZhbHNl KSkgIT0gTlVMTCkgewotI2lmIGRlZmluZWQoSkVNQUxMT0NfR0NDX0FUT01JQ19BVE9NSUNTKSB8 fAkJCQlcCi0gICAgZGVmaW5lZChKRU1BTExPQ19HQ0NfU1lOQ19BVE9NSUNTKSB8fCBkZWZpbmVk KF9NU0NfVkVSKQotCQkvKiBFeHBvc2UgdGhlIHVuZGVybHlpbmcgY291bnRlciBmb3IgZmFzdCBy ZWFkLiAqLwotCQlwYWN0aXZlcCA9IChzaXplX3QgKikmKGFyZW5hLT5wYV9zaGFyZC5uYWN0aXZl LnJlcHIpOwotCQlSRUFEKHBhY3RpdmVwLCBzaXplX3QgKik7Ci0JCXJldCA9IDA7Ci0jZWxzZQot CQlyZXQgPSBFRkFVTFQ7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlyZXQgPSBFRkFVTFQ7Ci0JfQot bGFiZWxfcmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmN0bF9t dHgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWV4cGVyaW1lbnRhbF9wcm9mX3Jl Y2VudF9hbGxvY19tYXhfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAgIHNp emVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwgc2l6 ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0KLQlpZiAoIShjb25maWdfcHJvZiAmJiBvcHRfcHJv ZikpIHsKLQkJcmV0ID0gRU5PRU5UOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlzc2l6 ZV90IG9sZF9tYXg7Ci0JaWYgKG5ld3AgIT0gTlVMTCkgewotCQlpZiAobmV3bGVuICE9IHNpemVv Zihzc2l6ZV90KSkgewotCQkJcmV0ID0gRUlOVkFMOwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0J CX0KLQkJc3NpemVfdCBtYXggPSAqKHNzaXplX3QgKiluZXdwOwotCQlpZiAobWF4IDwgLTEpIHsK LQkJCXJldCA9IEVJTlZBTDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JCW9sZF9tYXgg PSBwcm9mX3JlY2VudF9hbGxvY19tYXhfY3RsX3dyaXRlKHRzZCwgbWF4KTsKLQl9IGVsc2Ugewot CQlvbGRfbWF4ID0gcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2N0bF9yZWFkKCk7Ci0JfQotCVJFQUQo b2xkX21heCwgc3NpemVfdCk7Ci0KLQlyZXQgPSAwOwotCi1sYWJlbF9yZXR1cm46Ci0JcmV0dXJu IHJldDsKLX0KLQotdHlwZWRlZiBzdHJ1Y3Qgd3JpdGVfY2JfcGFja2V0X3Mgd3JpdGVfY2JfcGFj a2V0X3Q7Ci1zdHJ1Y3Qgd3JpdGVfY2JfcGFja2V0X3MgewotCXdyaXRlX2NiX3QgKndyaXRlX2Ni OwotCXZvaWQgKmNib3BhcXVlOwotfTsKLQotc3RhdGljIGludAotZXhwZXJpbWVudGFsX3Byb2Zf cmVjZW50X2FsbG9jX2R1bXBfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVfdCAqbWliLAotICAg IHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3cCwg c2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0KLQlpZiAoIShjb25maWdfcHJvZiAmJiBvcHRf cHJvZikpIHsKLQkJcmV0ID0gRU5PRU5UOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlh c3NlcnQoc2l6ZW9mKHdyaXRlX2NiX3BhY2tldF90KSA9PSBzaXplb2Yodm9pZCAqKSAqIDIpOwot Ci0JV1JJVEVPTkxZKCk7Ci0Jd3JpdGVfY2JfcGFja2V0X3Qgd3JpdGVfY2JfcGFja2V0OwotCUFT U1VSRURfV1JJVEUod3JpdGVfY2JfcGFja2V0LCB3cml0ZV9jYl9wYWNrZXRfdCk7Ci0KLQlwcm9m X3JlY2VudF9hbGxvY19kdW1wKHRzZCwgd3JpdGVfY2JfcGFja2V0LndyaXRlX2NiLAotCSAgICB3 cml0ZV9jYl9wYWNrZXQuY2JvcGFxdWUpOwotCi0JcmV0ID0gMDsKLQotbGFiZWxfcmV0dXJuOgot CXJldHVybiByZXQ7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IGJhdGNoX2FsbG9jX3BhY2tldF9zIGJh dGNoX2FsbG9jX3BhY2tldF90Owotc3RydWN0IGJhdGNoX2FsbG9jX3BhY2tldF9zIHsKLQl2b2lk ICoqcHRyczsKLQlzaXplX3QgbnVtOwotCXNpemVfdCBzaXplOwotCWludCBmbGFnczsKLX07Ci0K LXN0YXRpYyBpbnQKLWV4cGVyaW1lbnRhbF9iYXRjaF9hbGxvY19jdGwodHNkX3QgKnRzZCwgY29u c3Qgc2l6ZV90ICptaWIsCi0gICAgc2l6ZV90IG1pYmxlbiwgdm9pZCAqb2xkcCwgc2l6ZV90ICpv bGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQotCVZFUklG WV9SRUFEKHNpemVfdCk7Ci0KLQliYXRjaF9hbGxvY19wYWNrZXRfdCBiYXRjaF9hbGxvY19wYWNr ZXQ7Ci0JQVNTVVJFRF9XUklURShiYXRjaF9hbGxvY19wYWNrZXQsIGJhdGNoX2FsbG9jX3BhY2tl dF90KTsKLQlzaXplX3QgZmlsbGVkID0gYmF0Y2hfYWxsb2MoYmF0Y2hfYWxsb2NfcGFja2V0LnB0 cnMsCi0JICAgIGJhdGNoX2FsbG9jX3BhY2tldC5udW0sIGJhdGNoX2FsbG9jX3BhY2tldC5zaXpl LAotCSAgICBiYXRjaF9hbGxvY19wYWNrZXQuZmxhZ3MpOwotCVJFQUQoZmlsbGVkLCBzaXplX3Qp OwotCi0JcmV0ID0gMDsKLQotbGFiZWxfcmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQKLXByb2Zfc3RhdHNfYmluc19pX2xpdmVfY3RsKHRzZF90ICp0c2QsIGNvbnN0IHNpemVf dCAqbWliLCBzaXplX3QgbWlibGVuLAotICAgIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwg dm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JdW5zaWduZWQgYmluaW5k OwotCXByb2Zfc3RhdHNfdCBzdGF0czsKLQotCWlmICghKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9m ICYmIG9wdF9wcm9mX3N0YXRzKSkgewotCQlyZXQgPSBFTk9FTlQ7Ci0JCWdvdG8gbGFiZWxfcmV0 dXJuOwotCX0KLQotCVJFQURPTkxZKCk7Ci0JTUlCX1VOU0lHTkVEKGJpbmluZCwgMyk7Ci0JaWYg KGJpbmluZCA+PSBTQ19OQklOUykgewotCQlyZXQgPSBFSU5WQUw7Ci0JCWdvdG8gbGFiZWxfcmV0 dXJuOwotCX0KLQlwcm9mX3N0YXRzX2dldF9saXZlKHRzZCwgKHN6aW5kX3QpYmluaW5kLCAmc3Rh dHMpOwotCVJFQUQoc3RhdHMsIHByb2Zfc3RhdHNfdCk7Ci0KLQlyZXQgPSAwOwotbGFiZWxfcmV0 dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXByb2Zfc3RhdHNfYmluc19pX2Fj Y3VtX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAg ICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4p IHsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGJpbmluZDsKLQlwcm9mX3N0YXRzX3Qgc3RhdHM7Ci0K LQlpZiAoIShjb25maWdfcHJvZiAmJiBvcHRfcHJvZiAmJiBvcHRfcHJvZl9zdGF0cykpIHsKLQkJ cmV0ID0gRU5PRU5UOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlSRUFET05MWSgpOwot CU1JQl9VTlNJR05FRChiaW5pbmQsIDMpOwotCWlmIChiaW5pbmQgPj0gU0NfTkJJTlMpIHsKLQkJ cmV0ID0gRUlOVkFMOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0JcHJvZl9zdGF0c19nZXRf YWNjdW0odHNkLCAoc3ppbmRfdCliaW5pbmQsICZzdGF0cyk7Ci0JUkVBRChzdGF0cywgcHJvZl9z dGF0c190KTsKLQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0KLQot c3RhdGljIGNvbnN0IGN0bF9uYW1lZF9ub2RlX3QgKgotcHJvZl9zdGF0c19iaW5zX2lfaW5kZXgo dHNkbl90ICp0c2RuLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAgICBzaXpl X3QgaSkgewotCWlmICghKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mICYmIG9wdF9wcm9mX3N0YXRz KSkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKGkgPj0gU0NfTkJJTlMpIHsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCXJldHVybiBzdXBlcl9wcm9mX3N0YXRzX2JpbnNfaV9ub2RlOwotfQotCi1z dGF0aWMgaW50Ci1wcm9mX3N0YXRzX2xleHRlbnRzX2lfbGl2ZV9jdGwodHNkX3QgKnRzZCwgY29u c3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCi0gICAgdm9pZCAqb2xkcCwgc2l6ZV90ICpv bGRsZW5wLCB2b2lkICpuZXdwLCBzaXplX3QgbmV3bGVuKSB7Ci0JaW50IHJldDsKLQl1bnNpZ25l ZCBsZXh0ZW50X2luZDsKLQlwcm9mX3N0YXRzX3Qgc3RhdHM7Ci0KLQlpZiAoIShjb25maWdfcHJv ZiAmJiBvcHRfcHJvZiAmJiBvcHRfcHJvZl9zdGF0cykpIHsKLQkJcmV0ID0gRU5PRU5UOwotCQln b3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlSRUFET05MWSgpOwotCU1JQl9VTlNJR05FRChsZXh0 ZW50X2luZCwgMyk7Ci0JaWYgKGxleHRlbnRfaW5kID49IFNDX05TSVpFUyAtIFNDX05CSU5TKSB7 Ci0JCXJldCA9IEVJTlZBTDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCXByb2Zfc3RhdHNf Z2V0X2xpdmUodHNkLCAoc3ppbmRfdCkobGV4dGVudF9pbmQgKyBTQ19OQklOUyksICZzdGF0cyk7 Ci0JUkVBRChzdGF0cywgcHJvZl9zdGF0c190KTsKLQotCXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46 Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotcHJvZl9zdGF0c19sZXh0ZW50c19pX2Fj Y3VtX2N0bCh0c2RfdCAqdHNkLCBjb25zdCBzaXplX3QgKm1pYiwgc2l6ZV90IG1pYmxlbiwKLSAg ICB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3AsIHNpemVfdCBuZXdsZW4p IHsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxleHRlbnRfaW5kOwotCXByb2Zfc3RhdHNfdCBzdGF0 czsKLQotCWlmICghKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mICYmIG9wdF9wcm9mX3N0YXRzKSkg ewotCQlyZXQgPSBFTk9FTlQ7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQotCVJFQURPTkxZ KCk7Ci0JTUlCX1VOU0lHTkVEKGxleHRlbnRfaW5kLCAzKTsKLQlpZiAobGV4dGVudF9pbmQgPj0g U0NfTlNJWkVTIC0gU0NfTkJJTlMpIHsKLQkJcmV0ID0gRUlOVkFMOwotCQlnb3RvIGxhYmVsX3Jl dHVybjsKLQl9Ci0JcHJvZl9zdGF0c19nZXRfYWNjdW0odHNkLCAoc3ppbmRfdCkobGV4dGVudF9p bmQgKyBTQ19OQklOUyksICZzdGF0cyk7Ci0JUkVBRChzdGF0cywgcHJvZl9zdGF0c190KTsKLQot CXJldCA9IDA7Ci1sYWJlbF9yZXR1cm46Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0 IGN0bF9uYW1lZF9ub2RlX3QgKgotcHJvZl9zdGF0c19sZXh0ZW50c19pX2luZGV4KHRzZG5fdCAq dHNkbiwgY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sCi0gICAgc2l6ZV90IGkpIHsK LQlpZiAoIShjb25maWdfcHJvZiAmJiBvcHRfcHJvZiAmJiBvcHRfcHJvZl9zdGF0cykpIHsKLQkJ cmV0dXJuIE5VTEw7Ci0JfQotCWlmIChpID49IFNDX05TSVpFUyAtIFNDX05CSU5TKSB7Ci0JCXJl dHVybiBOVUxMOwotCX0KLQlyZXR1cm4gc3VwZXJfcHJvZl9zdGF0c19sZXh0ZW50c19pX25vZGU7 Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL2RlY2F5LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv ZGVjYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwMWIyYi4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZGVjYXkuYwor KysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv ZGVjYXkuaCIKLQotc3RhdGljIGNvbnN0IHVpbnQ2NF90IGhfc3RlcHNbU01PT1RIU1RFUF9OU1RF UFNdID0gewotI2RlZmluZSBTVEVQKHN0ZXAsIGgsIHgsIHkpCQkJXAotCQloLAotCQlTTU9PVEhT VEVQCi0jdW5kZWYgU1RFUAotfTsKLQotLyoKLSAqIEdlbmVyYXRlIGEgbmV3IGRlYWRsaW5lIHRo YXQgaXMgdW5pZm9ybWx5IHJhbmRvbSB3aXRoaW4gdGhlIG5leHQgZXBvY2ggYWZ0ZXIKLSAqIHRo ZSBjdXJyZW50IG9uZS4KLSAqLwotdm9pZAotZGVjYXlfZGVhZGxpbmVfaW5pdChkZWNheV90ICpk ZWNheSkgewotCW5zdGltZV9jb3B5KCZkZWNheS0+ZGVhZGxpbmUsICZkZWNheS0+ZXBvY2gpOwot CW5zdGltZV9hZGQoJmRlY2F5LT5kZWFkbGluZSwgJmRlY2F5LT5pbnRlcnZhbCk7Ci0JaWYgKGRl Y2F5X21zX3JlYWQoZGVjYXkpID4gMCkgewotCQluc3RpbWVfdCBqaXR0ZXI7Ci0KLQkJbnN0aW1l X2luaXQoJmppdHRlciwgcHJuZ19yYW5nZV91NjQoJmRlY2F5LT5qaXR0ZXJfc3RhdGUsCi0JCSAg ICBuc3RpbWVfbnMoJmRlY2F5LT5pbnRlcnZhbCkpKTsKLQkJbnN0aW1lX2FkZCgmZGVjYXktPmRl YWRsaW5lLCAmaml0dGVyKTsKLQl9Ci19Ci0KLXZvaWQKLWRlY2F5X3JlaW5pdChkZWNheV90ICpk ZWNheSwgbnN0aW1lX3QgKmN1cl90aW1lLCBzc2l6ZV90IGRlY2F5X21zKSB7Ci0JYXRvbWljX3N0 b3JlX3pkKCZkZWNheS0+dGltZV9tcywgZGVjYXlfbXMsIEFUT01JQ19SRUxBWEVEKTsKLQlpZiAo ZGVjYXlfbXMgPiAwKSB7Ci0JCW5zdGltZV9pbml0KCZkZWNheS0+aW50ZXJ2YWwsICh1aW50NjRf dClkZWNheV9tcyAqCi0JCSAgICBLUVUoMTAwMDAwMCkpOwotCQluc3RpbWVfaWRpdmlkZSgmZGVj YXktPmludGVydmFsLCBTTU9PVEhTVEVQX05TVEVQUyk7Ci0JfQotCi0JbnN0aW1lX2NvcHkoJmRl Y2F5LT5lcG9jaCwgY3VyX3RpbWUpOwotCWRlY2F5LT5qaXR0ZXJfc3RhdGUgPSAodWludDY0X3Qp KHVpbnRwdHJfdClkZWNheTsKLQlkZWNheV9kZWFkbGluZV9pbml0KGRlY2F5KTsKLQlkZWNheS0+ bnVucHVyZ2VkID0gMDsKLQltZW1zZXQoZGVjYXktPmJhY2tsb2csIDAsIFNNT09USFNURVBfTlNU RVBTICogc2l6ZW9mKHNpemVfdCkpOwotfQotCi1ib29sCi1kZWNheV9pbml0KGRlY2F5X3QgKmRl Y2F5LCBuc3RpbWVfdCAqY3VyX3RpbWUsIHNzaXplX3QgZGVjYXlfbXMpIHsKLQlpZiAoY29uZmln X2RlYnVnKSB7Ci0JCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGRlY2F5X3QpOyBpKysp IHsKLQkJCWFzc2VydCgoKGNoYXIgKilkZWNheSlbaV0gPT0gMCk7Ci0JCX0KLQkJZGVjYXktPmNl aWxfbnBhZ2VzID0gMDsKLQl9Ci0JaWYgKG1hbGxvY19tdXRleF9pbml0KCZkZWNheS0+bXR4LCAi ZGVjYXkiLCBXSVRORVNTX1JBTktfREVDQVksCi0JICAgIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1 c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWRlY2F5LT5wdXJnaW5nID0gZmFsc2U7Ci0J ZGVjYXlfcmVpbml0KGRlY2F5LCBjdXJfdGltZSwgZGVjYXlfbXMpOwotCXJldHVybiBmYWxzZTsK LX0KLQotYm9vbAotZGVjYXlfbXNfdmFsaWQoc3NpemVfdCBkZWNheV9tcykgewotCWlmIChkZWNh eV9tcyA8IC0xKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKGRlY2F5X21zID09IC0xIHx8 ICh1aW50NjRfdClkZWNheV9tcyA8PSBOU1RJTUVfU0VDX01BWCAqCi0JICAgIEtRVSgxMDAwKSkg ewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZAot ZGVjYXlfbWF5YmVfdXBkYXRlX3RpbWUoZGVjYXlfdCAqZGVjYXksIG5zdGltZV90ICpuZXdfdGlt ZSkgewotCWlmICh1bmxpa2VseSghbnN0aW1lX21vbm90b25pYygpICYmIG5zdGltZV9jb21wYXJl KCZkZWNheS0+ZXBvY2gsCi0JICAgIG5ld190aW1lKSA+IDApKSB7Ci0JCS8qCi0JCSAqIFRpbWUg d2VudCBiYWNrd2FyZHMuICBNb3ZlIHRoZSBlcG9jaCBiYWNrIGluIHRpbWUgYW5kCi0JCSAqIGdl bmVyYXRlIGEgbmV3IGRlYWRsaW5lLCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IHRpbWUKLQkJ ICogdHlwaWNhbGx5IGZsb3dzIGZvcndhcmQgZm9yIGxvbmcgZW5vdWdoIHBlcmlvZHMgb2YgdGlt ZSB0aGF0Ci0JCSAqIGVwb2NocyBjb21wbGV0ZS4gIFVuZm9ydHVuYXRlbHksIHRoaXMgc3RyYXRl Z3kgaXMgc3VzY2VwdGlibGUKLQkJICogdG8gY2xvY2sgaml0dGVyIHRyaWdnZXJpbmcgcHJlbWF0 dXJlIGVwb2NoIGFkdmFuY2VzLCBidXQKLQkJICogY2xvY2sgaml0dGVyIGVzdGltYXRpb24gYW5k IGNvbXBlbnNhdGlvbiBpc24ndCBmZWFzaWJsZSBoZXJlCi0JCSAqIGJlY2F1c2UgY2FsbHMgaW50 byB0aGlzIGNvZGUgYXJlIGV2ZW50LWRyaXZlbi4KLQkJICovCi0JCW5zdGltZV9jb3B5KCZkZWNh eS0+ZXBvY2gsIG5ld190aW1lKTsKLQkJZGVjYXlfZGVhZGxpbmVfaW5pdChkZWNheSk7Ci0JfSBl bHNlIHsKLQkJLyogVmVyaWZ5IHRoYXQgdGltZSBkb2VzIG5vdCBnbyBiYWNrd2FyZHMuICovCi0J CWFzc2VydChuc3RpbWVfY29tcGFyZSgmZGVjYXktPmVwb2NoLCBuZXdfdGltZSkgPD0gMCk7Ci0J fQotfQotCi1zdGF0aWMgc2l6ZV90Ci1kZWNheV9iYWNrbG9nX25wYWdlc19saW1pdChjb25zdCBk ZWNheV90ICpkZWNheSkgewotCS8qCi0JICogRm9yIGVhY2ggZWxlbWVudCBvZiBkZWNheV9iYWNr bG9nLCBtdWx0aXBseSBieSB0aGUgY29ycmVzcG9uZGluZwotCSAqIGZpeGVkLXBvaW50IHNtb290 aHN0ZXAgZGVjYXkgZmFjdG9yLiAgU3VtIHRoZSBwcm9kdWN0cywgdGhlbiBkaXZpZGUKLQkgKiB0 byByb3VuZCBkb3duIHRvIHRoZSBuZWFyZXN0IHdob2xlIG51bWJlciBvZiBwYWdlcy4KLQkgKi8K LQl1aW50NjRfdCBzdW0gPSAwOwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTTU9PVEhTVEVQ X05TVEVQUzsgaSsrKSB7Ci0JCXN1bSArPSBkZWNheS0+YmFja2xvZ1tpXSAqIGhfc3RlcHNbaV07 Ci0JfQotCXNpemVfdCBucGFnZXNfbGltaXRfYmFja2xvZyA9IChzaXplX3QpKHN1bSA+PiBTTU9P VEhTVEVQX0JGUCk7Ci0KLQlyZXR1cm4gbnBhZ2VzX2xpbWl0X2JhY2tsb2c7Ci19Ci0KLS8qCi0g KiBVcGRhdGUgYmFja2xvZywgYXNzdW1pbmcgdGhhdCAnbmFkdmFuY2VfdTY0JyB0aW1lIGludGVy dmFscyBoYXZlIHBhc3NlZC4KLSAqIFRyYWlsaW5nICduYWR2YW5jZV91NjQnIHJlY29yZHMgc2hv dWxkIGJlIGVyYXNlZCBhbmQgJ2N1cnJlbnRfbnBhZ2VzJyBpcwotICogcGxhY2VkIGFzIHRoZSBu ZXdlc3QgcmVjb3JkLgotICovCi1zdGF0aWMgdm9pZAotZGVjYXlfYmFja2xvZ191cGRhdGUoZGVj YXlfdCAqZGVjYXksIHVpbnQ2NF90IG5hZHZhbmNlX3U2NCwKLSAgICBzaXplX3QgY3VycmVudF9u cGFnZXMpIHsKLQlpZiAobmFkdmFuY2VfdTY0ID49IFNNT09USFNURVBfTlNURVBTKSB7Ci0JCW1l bXNldChkZWNheS0+YmFja2xvZywgMCwgKFNNT09USFNURVBfTlNURVBTLTEpICoKLQkJICAgIHNp emVvZihzaXplX3QpKTsKLQl9IGVsc2UgewotCQlzaXplX3QgbmFkdmFuY2VfeiA9IChzaXplX3Qp bmFkdmFuY2VfdTY0OwotCi0JCWFzc2VydCgodWludDY0X3QpbmFkdmFuY2VfeiA9PSBuYWR2YW5j ZV91NjQpOwotCi0JCW1lbW1vdmUoZGVjYXktPmJhY2tsb2csICZkZWNheS0+YmFja2xvZ1tuYWR2 YW5jZV96XSwKLQkJICAgIChTTU9PVEhTVEVQX05TVEVQUyAtIG5hZHZhbmNlX3opICogc2l6ZW9m KHNpemVfdCkpOwotCQlpZiAobmFkdmFuY2VfeiA+IDEpIHsKLQkJCW1lbXNldCgmZGVjYXktPmJh Y2tsb2dbU01PT1RIU1RFUF9OU1RFUFMgLQotCQkJICAgIG5hZHZhbmNlX3pdLCAwLCAobmFkdmFu Y2Vfei0xKSAqIHNpemVvZihzaXplX3QpKTsKLQkJfQotCX0KLQotCXNpemVfdCBucGFnZXNfZGVs dGEgPSAoY3VycmVudF9ucGFnZXMgPiBkZWNheS0+bnVucHVyZ2VkKSA/Ci0JICAgIGN1cnJlbnRf bnBhZ2VzIC0gZGVjYXktPm51bnB1cmdlZCA6IDA7Ci0JZGVjYXktPmJhY2tsb2dbU01PT1RIU1RF UF9OU1RFUFMtMV0gPSBucGFnZXNfZGVsdGE7Ci0KLQlpZiAoY29uZmlnX2RlYnVnKSB7Ci0JCWlm IChjdXJyZW50X25wYWdlcyA+IGRlY2F5LT5jZWlsX25wYWdlcykgewotCQkJZGVjYXktPmNlaWxf bnBhZ2VzID0gY3VycmVudF9ucGFnZXM7Ci0JCX0KLQkJc2l6ZV90IG5wYWdlc19saW1pdCA9IGRl Y2F5X2JhY2tsb2dfbnBhZ2VzX2xpbWl0KGRlY2F5KTsKLQkJYXNzZXJ0KGRlY2F5LT5jZWlsX25w YWdlcyA+PSBucGFnZXNfbGltaXQpOwotCQlpZiAoZGVjYXktPmNlaWxfbnBhZ2VzID4gbnBhZ2Vz X2xpbWl0KSB7Ci0JCQlkZWNheS0+Y2VpbF9ucGFnZXMgPSBucGFnZXNfbGltaXQ7Ci0JCX0KLQl9 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotZGVjYXlfZGVhZGxpbmVfcmVhY2hlZChjb25zdCBk ZWNheV90ICpkZWNheSwgY29uc3QgbnN0aW1lX3QgKnRpbWUpIHsKLQlyZXR1cm4gKG5zdGltZV9j b21wYXJlKCZkZWNheS0+ZGVhZGxpbmUsIHRpbWUpIDw9IDApOwotfQotCi11aW50NjRfdAotZGVj YXlfbnBhZ2VzX3B1cmdlX2luKGRlY2F5X3QgKmRlY2F5LCBuc3RpbWVfdCAqdGltZSwgc2l6ZV90 IG5wYWdlc19uZXcpIHsKLQl1aW50NjRfdCBkZWNheV9pbnRlcnZhbF9ucyA9IGRlY2F5X2Vwb2No X2R1cmF0aW9uX25zKGRlY2F5KTsKLQlzaXplX3Qgbl9lcG9jaCA9IChzaXplX3QpKG5zdGltZV9u cyh0aW1lKSAvIGRlY2F5X2ludGVydmFsX25zKTsKLQotCXVpbnQ2NF90IG5wYWdlc19wdXJnZTsK LQlpZiAobl9lcG9jaCA+PSBTTU9PVEhTVEVQX05TVEVQUykgewotCQlucGFnZXNfcHVyZ2UgPSBu cGFnZXNfbmV3OwotCX0gZWxzZSB7Ci0JCXVpbnQ2NF90IGhfc3RlcHNfbWF4ID0gaF9zdGVwc1tT TU9PVEhTVEVQX05TVEVQUyAtIDFdOwotCQlhc3NlcnQoaF9zdGVwc19tYXggPj0KLQkJICAgIGhf c3RlcHNbU01PT1RIU1RFUF9OU1RFUFMgLSAxIC0gbl9lcG9jaF0pOwotCQlucGFnZXNfcHVyZ2Ug PSBucGFnZXNfbmV3ICogKGhfc3RlcHNfbWF4IC0KLQkJICAgIGhfc3RlcHNbU01PT1RIU1RFUF9O U1RFUFMgLSAxIC0gbl9lcG9jaF0pOwotCQlucGFnZXNfcHVyZ2UgPj49IFNNT09USFNURVBfQkZQ OwotCX0KLQlyZXR1cm4gbnBhZ2VzX3B1cmdlOwotfQotCi1ib29sCi1kZWNheV9tYXliZV9hZHZh bmNlX2Vwb2NoKGRlY2F5X3QgKmRlY2F5LCBuc3RpbWVfdCAqbmV3X3RpbWUsCi0gICAgc2l6ZV90 IG5wYWdlc19jdXJyZW50KSB7Ci0JLyogSGFuZGxlIHBvc3NpYmxlIG5vbi1tb25vdG9uaWNpdHkg b2YgdGltZS4gKi8KLQlkZWNheV9tYXliZV91cGRhdGVfdGltZShkZWNheSwgbmV3X3RpbWUpOwot Ci0JaWYgKCFkZWNheV9kZWFkbGluZV9yZWFjaGVkKGRlY2F5LCBuZXdfdGltZSkpIHsKLQkJcmV0 dXJuIGZhbHNlOwotCX0KLQluc3RpbWVfdCBkZWx0YTsKLQluc3RpbWVfY29weSgmZGVsdGEsIG5l d190aW1lKTsKLQluc3RpbWVfc3VidHJhY3QoJmRlbHRhLCAmZGVjYXktPmVwb2NoKTsKLQotCXVp bnQ2NF90IG5hZHZhbmNlX3U2NCA9IG5zdGltZV9kaXZpZGUoJmRlbHRhLCAmZGVjYXktPmludGVy dmFsKTsKLQlhc3NlcnQobmFkdmFuY2VfdTY0ID4gMCk7Ci0KLQkvKiBBZGQgbmFkdmFuY2VfdTY0 IGRlY2F5IGludGVydmFscyB0byBlcG9jaC4gKi8KLQluc3RpbWVfY29weSgmZGVsdGEsICZkZWNh eS0+aW50ZXJ2YWwpOwotCW5zdGltZV9pbXVsdGlwbHkoJmRlbHRhLCBuYWR2YW5jZV91NjQpOwot CW5zdGltZV9hZGQoJmRlY2F5LT5lcG9jaCwgJmRlbHRhKTsKLQotCS8qIFNldCBhIG5ldyBkZWFk bGluZS4gKi8KLQlkZWNheV9kZWFkbGluZV9pbml0KGRlY2F5KTsKLQotCS8qIFVwZGF0ZSB0aGUg YmFja2xvZy4gKi8KLQlkZWNheV9iYWNrbG9nX3VwZGF0ZShkZWNheSwgbmFkdmFuY2VfdTY0LCBu cGFnZXNfY3VycmVudCk7Ci0KLQlkZWNheS0+bnBhZ2VzX2xpbWl0ID0gZGVjYXlfYmFja2xvZ19u cGFnZXNfbGltaXQoZGVjYXkpOwotCWRlY2F5LT5udW5wdXJnZWQgPSAoZGVjYXktPm5wYWdlc19s aW1pdCA+IG5wYWdlc19jdXJyZW50KSA/Ci0JICAgIGRlY2F5LT5ucGFnZXNfbGltaXQgOiBucGFn ZXNfY3VycmVudDsKLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogQ2FsY3VsYXRlIGhvdyBt YW55IHBhZ2VzIHNob3VsZCBiZSBwdXJnZWQgYWZ0ZXIgJ2ludGVydmFsJy4KLSAqCi0gKiBGaXJz dCwgY2FsY3VsYXRlIGhvdyBtYW55IHBhZ2VzIHNob3VsZCByZW1haW4gYXQgdGhlIG1vbWVudCwg dGhlbiBzdWJ0cmFjdAotICogdGhlIG51bWJlciBvZiBwYWdlcyB0aGF0IHNob3VsZCByZW1haW4g YWZ0ZXIgJ2ludGVydmFsJy4gVGhlIGRpZmZlcmVuY2UgaXMKLSAqIGhvdyBtYW55IHBhZ2VzIHNo b3VsZCBiZSBwdXJnZWQgdW50aWwgdGhlbi4KLSAqCi0gKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRo YXQgc2hvdWxkIHJlbWFpbiBhdCBhIHNwZWNpZmljIG1vbWVudCBpcyBjYWxjdWxhdGVkCi0gKiBs aWtlIHRoaXM6IHBhZ2VzKG5vdykgPSBzdW0oYmFja2xvZ1tpXSAqIGhfc3RlcHNbaV0pLiBBZnRl ciAnaW50ZXJ2YWwnCi0gKiBwYXNzZXMsIGJhY2tsb2cgd291bGQgc2hpZnQgJ2ludGVydmFsJyBw b3NpdGlvbnMgdG8gdGhlIGxlZnQgYW5kIHNpZ21vaWQKLSAqIGN1cnZlIHdvdWxkIGJlIGFwcGxp ZWQgc3RhcnRpbmcgd2l0aCBiYWNrbG9nW2ludGVydmFsXS4KLSAqCi0gKiBUaGUgaW1wbGVtZW50 YXRpb24gZG9lc24ndCBkaXJlY3RseSBtYXAgdG8gdGhlIGRlc2NyaXB0aW9uLCBidXQgaXQncwot ICogZXNzZW50aWFsbHkgdGhlIHNhbWUgY2FsY3VsYXRpb24sIG9wdGltaXplZCB0byBhdm9pZCBp dGVyYXRpbmcgb3ZlcgotICogW2ludGVydmFsLi5TTU9PVEhTVEVQX05TVEVQUykgdHdpY2UuCi0g Ki8KLXN0YXRpYyBpbmxpbmUgc2l6ZV90Ci1kZWNheV9ucHVyZ2VfYWZ0ZXJfaW50ZXJ2YWwoZGVj YXlfdCAqZGVjYXksIHNpemVfdCBpbnRlcnZhbCkgewotCXNpemVfdCBpOwotCXVpbnQ2NF90IHN1 bSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGludGVydmFsOyBpKyspIHsKLQkJc3VtICs9IGRlY2F5 LT5iYWNrbG9nW2ldICogaF9zdGVwc1tpXTsKLQl9Ci0JZm9yICg7IGkgPCBTTU9PVEhTVEVQX05T VEVQUzsgaSsrKSB7Ci0JCXN1bSArPSBkZWNheS0+YmFja2xvZ1tpXSAqCi0JCSAgICAoaF9zdGVw c1tpXSAtIGhfc3RlcHNbaSAtIGludGVydmFsXSk7Ci0JfQotCi0JcmV0dXJuIChzaXplX3QpKHN1 bSA+PiBTTU9PVEhTVEVQX0JGUCk7Ci19Ci0KLXVpbnQ2NF90IGRlY2F5X25zX3VudGlsX3B1cmdl KGRlY2F5X3QgKmRlY2F5LCBzaXplX3QgbnBhZ2VzX2N1cnJlbnQsCi0gICAgdWludDY0X3QgbnBh Z2VzX3RocmVzaG9sZCkgewotCWlmICghZGVjYXlfZ3JhZHVhbGx5KGRlY2F5KSkgewotCQlyZXR1 cm4gREVDQVlfVU5CT1VOREVEX1RJTUVfVE9fUFVSR0U7Ci0JfQotCXVpbnQ2NF90IGRlY2F5X2lu dGVydmFsX25zID0gZGVjYXlfZXBvY2hfZHVyYXRpb25fbnMoZGVjYXkpOwotCWFzc2VydChkZWNh eV9pbnRlcnZhbF9ucyA+IDApOwotCWlmIChucGFnZXNfY3VycmVudCA9PSAwKSB7Ci0JCXVuc2ln bmVkIGk7Ci0JCWZvciAoaSA9IDA7IGkgPCBTTU9PVEhTVEVQX05TVEVQUzsgaSsrKSB7Ci0JCQlp ZiAoZGVjYXktPmJhY2tsb2dbaV0gPiAwKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYg KGkgPT0gU01PT1RIU1RFUF9OU1RFUFMpIHsKLQkJCS8qIE5vIGRpcnR5IHBhZ2VzIHJlY29yZGVk LiAgU2xlZXAgaW5kZWZpbml0ZWx5LiAqLwotCQkJcmV0dXJuIERFQ0FZX1VOQk9VTkRFRF9USU1F X1RPX1BVUkdFOwotCQl9Ci0JfQotCWlmIChucGFnZXNfY3VycmVudCA8PSBucGFnZXNfdGhyZXNo b2xkKSB7Ci0JCS8qIFVzZSBtYXggaW50ZXJ2YWwuICovCi0JCXJldHVybiBkZWNheV9pbnRlcnZh bF9ucyAqIFNNT09USFNURVBfTlNURVBTOwotCX0KLQotCS8qIE1pbmltYWwgMiBpbnRlcnZhbHMg dG8gZW5zdXJlIHJlYWNoaW5nIG5leHQgZXBvY2ggZGVhZGxpbmUuICovCi0Jc2l6ZV90IGxiID0g MjsKLQlzaXplX3QgdWIgPSBTTU9PVEhTVEVQX05TVEVQUzsKLQotCXNpemVfdCBucHVyZ2VfbGIs IG5wdXJnZV91YjsKLQlucHVyZ2VfbGIgPSBkZWNheV9ucHVyZ2VfYWZ0ZXJfaW50ZXJ2YWwoZGVj YXksIGxiKTsKLQlpZiAobnB1cmdlX2xiID4gbnBhZ2VzX3RocmVzaG9sZCkgewotCQlyZXR1cm4g ZGVjYXlfaW50ZXJ2YWxfbnMgKiBsYjsKLQl9Ci0JbnB1cmdlX3ViID0gZGVjYXlfbnB1cmdlX2Fm dGVyX2ludGVydmFsKGRlY2F5LCB1Yik7Ci0JaWYgKG5wdXJnZV91YiA8IG5wYWdlc190aHJlc2hv bGQpIHsKLQkJcmV0dXJuIGRlY2F5X2ludGVydmFsX25zICogdWI7Ci0JfQotCi0JdW5zaWduZWQg bl9zZWFyY2ggPSAwOwotCXNpemVfdCB0YXJnZXQsIG5wdXJnZTsKLQl3aGlsZSAoKG5wdXJnZV9s YiArIG5wYWdlc190aHJlc2hvbGQgPCBucHVyZ2VfdWIpICYmIChsYiArIDIgPCB1YikpIHsKLQkJ dGFyZ2V0ID0gKGxiICsgdWIpIC8gMjsKLQkJbnB1cmdlID0gZGVjYXlfbnB1cmdlX2FmdGVyX2lu dGVydmFsKGRlY2F5LCB0YXJnZXQpOwotCQlpZiAobnB1cmdlID4gbnBhZ2VzX3RocmVzaG9sZCkg ewotCQkJdWIgPSB0YXJnZXQ7Ci0JCQlucHVyZ2VfdWIgPSBucHVyZ2U7Ci0JCX0gZWxzZSB7Ci0J CQlsYiA9IHRhcmdldDsKLQkJCW5wdXJnZV9sYiA9IG5wdXJnZTsKLQkJfQotCQlhc3NlcnQobl9z ZWFyY2ggPCBsZ19mbG9vcihTTU9PVEhTVEVQX05TVEVQUykgKyAxKTsKLQkJKytuX3NlYXJjaDsK LQl9Ci0JcmV0dXJuIGRlY2F5X2ludGVydmFsX25zICogKHViICsgbGIpIC8gMjsKLX0KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZGl2LmMg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZGl2LmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwODg5MmEuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Rpdi5jCisrKyAvZGV2L251bGwKQEAg LTEsNTUgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFt YmxlLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9kaXYuaCIKLQotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgotCi0vKgotICogU3VwcG9zZSB3ZSBoYXZlIG4g PSBxICogZCwgYWxsIGludGVnZXJzLiBXZSBrbm93IG4gYW5kIGQsIGFuZCB3YW50IHEgPSBuIC8g ZC4KLSAqCi0gKiBGb3IgYW55IGssIHdlIGhhdmUgKGhlcmUsIGFsbCBkaXZpc2lvbiBpcyBleGFj dDsgbm90IEMtc3R5bGUgcm91bmRpbmcpOgotICogZmxvb3IoY2VpbCgyXmsgLyBkKSAqIG4gLyAy XmspID0gZmxvb3IoKDJeayArIHIpIC8gZCAqIG4gLyAyXmspLCB3aGVyZQotICogciA9ICgtMl5r KSBtb2QgZC4KLSAqCi0gKiBFeHBhbmRpbmcgdGhpcyBvdXQ6Ci0gKiAuLi4gPSBmbG9vcigyXmsg LyBkICogbiAvIDJeayArIHIgLyBkICogbiAvIDJeaykKLSAqICAgICA9IGZsb29yKG4gLyBkICsg KHIgLyBkKSAqIChuIC8gMl5rKSkuCi0gKgotICogVGhlIGZyYWN0aW9uYWwgcGFydCBvZiBuIC8g ZCBpcyAwIChiZWNhdXNlIG9mIHRoZSBhc3N1bXB0aW9uIHRoYXQgZCBkaXZpZGVzIG4KLSAqIGV4 YWN0bHkpLCBzbyB3ZSBoYXZlOgotICogLi4uID0gbiAvIGQgKyBmbG9vcigociAvIGQpICogKG4g LyAyXmspKQotICoKLSAqIFNvIHRoYXQgb3VyIGluaXRpYWwgZXhwcmVzc2lvbiBpcyBlcXVhbCB0 byB0aGUgcXVhbnRpdHkgd2Ugc2Vlaywgc28gbG9uZyBhcwotICogKHIgLyBkKSAqIChuIC8gMl5r KSA8IDEuCi0gKgotICogciBpcyBhIHJlbWFpbmRlciBtb2QgZCwgc28gciA8IGQgYW5kIHIgLyBk IDwgMSBhbHdheXMuIFdlIGNhbiBtYWtlCi0gKiBuIC8gMiBeIGsgPCAxIGJ5IHNldHRpbmcgayA9 IDMyLiBUaGlzIGdldHMgdXMgYSB2YWx1ZSBvZiBtYWdpYyB0aGF0IHdvcmtzLgotICovCi0KLXZv aWQKLWRpdl9pbml0KGRpdl9pbmZvX3QgKmRpdl9pbmZvLCBzaXplX3QgZCkgewotCS8qIE5vbnNl bnNpY2FsLiAqLwotCWFzc2VydChkICE9IDApOwotCS8qCi0JICogVGhpcyB3b3VsZCBtYWtlIHRo ZSB2YWx1ZSBvZiBtYWdpYyB0b28gaGlnaCB0byBmaXQgaW50byBhIHVpbnQzMl90Ci0JICogKHdl IHdvdWxkIHdhbnQgbWFnaWMgPSAyXjMyIGV4YWN0bHkpLiBUaGlzIHdvdWxkIG1lc3Mgd2l0aCBj b2RlIGdlbgotCSAqIG9uIDMyLWJpdCBtYWNoaW5lcy4KLQkgKi8KLQlhc3NlcnQoZCAhPSAxKTsK LQotCXVpbnQ2NF90IHR3b190b19rID0gKCh1aW50NjRfdCkxIDw8IDMyKTsKLQl1aW50MzJfdCBt YWdpYyA9ICh1aW50MzJfdCkodHdvX3RvX2sgLyBkKTsKLQotCS8qCi0JICogV2Ugd2FudCBtYWdp YyA9IGNlaWwoMl5rIC8gZCksIGJ1dCBDIGdpdmVzIHVzIGZsb29yLiBXZSBoYXZlIHRvCi0JICog aW5jcmVtZW50IGl0IHVubGVzcyB0aGUgcmVzdWx0IHdhcyBleGFjdCAoaS5lLiB1bmxlc3MgZCBp cyBhIHBvd2VyIG9mCi0JICogdHdvKS4KLQkgKi8KLQlpZiAodHdvX3RvX2sgJSBkICE9IDApIHsK LQkJbWFnaWMrKzsKLQl9Ci0JZGl2X2luZm8tPm1hZ2ljID0gbWFnaWM7Ci0jaWZkZWYgSkVNQUxM T0NfREVCVUcKLQlkaXZfaW5mby0+ZCA9IGQ7Ci0jZW5kaWYKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZWNhY2hlLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZWNhY2hlLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGEyNDIyMjcuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2VjYWNoZS5jCisrKyAvZGV2L251bGwKQEAgLTEs MzUgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxl LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVk ZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nhbi5oIgotCi1ib29sCi1lY2Fj aGVfaW5pdCh0c2RuX3QgKnRzZG4sIGVjYWNoZV90ICplY2FjaGUsIGV4dGVudF9zdGF0ZV90IHN0 YXRlLCB1bnNpZ25lZCBpbmQsCi0gICAgYm9vbCBkZWxheV9jb2FsZXNjZSkgewotCWlmIChtYWxs b2NfbXV0ZXhfaW5pdCgmZWNhY2hlLT5tdHgsICJleHRlbnRzIiwgV0lUTkVTU19SQU5LX0VYVEVO VFMsCi0JICAgIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7 Ci0JfQotCWVjYWNoZS0+c3RhdGUgPSBzdGF0ZTsKLQllY2FjaGUtPmluZCA9IGluZDsKLQllY2Fj aGUtPmRlbGF5X2NvYWxlc2NlID0gZGVsYXlfY29hbGVzY2U7Ci0JZXNldF9pbml0KCZlY2FjaGUt PmVzZXQsIHN0YXRlKTsKLQllc2V0X2luaXQoJmVjYWNoZS0+Z3VhcmRlZF9lc2V0LCBzdGF0ZSk7 Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQKLWVjYWNoZV9wcmVmb3JrKHRzZG5fdCAqdHNk biwgZWNhY2hlX3QgKmVjYWNoZSkgewotCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZlY2Fj aGUtPm10eCk7Ci19Ci0KLXZvaWQKLWVjYWNoZV9wb3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2Ru LCBlY2FjaGVfdCAqZWNhY2hlKSB7Ci0JbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2Ru LCAmZWNhY2hlLT5tdHgpOwotfQotCi12b2lkCi1lY2FjaGVfcG9zdGZvcmtfY2hpbGQodHNkbl90 ICp0c2RuLCBlY2FjaGVfdCAqZWNhY2hlKSB7Ci0JbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxk KHRzZG4sICZlY2FjaGUtPm10eCk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2VkYXRhLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zcmMvZWRhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggODJiNmY1Ni4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9zcmMvZWRhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotcGhfZ2VuKCwg ZWRhdGFfYXZhaWwsIGVkYXRhX3QsIGF2YWlsX2xpbmssCi0gICAgZWRhdGFfZXNuZWFkX2NvbXAp Ci1waF9nZW4oLCBlZGF0YV9oZWFwLCBlZGF0YV90LCBoZWFwX2xpbmssIGVkYXRhX3NuYWRfY29t cCkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z cmMvZWRhdGFfY2FjaGUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3NyYy9lZGF0YV9jYWNoZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmMxODQ4 Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Ny Yy9lZGF0YV9jYWNoZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLWJvb2wKLWVkYXRh X2NhY2hlX2luaXQoZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUsIGJhc2VfdCAqYmFzZSkgewot CWVkYXRhX2F2YWlsX25ldygmZWRhdGFfY2FjaGUtPmF2YWlsKTsKLQkvKgotCSAqIFRoaXMgaXMg bm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgc2luY2UgdGhlIGVkYXRhX2NhY2hlX3QgaXMgb25seQot CSAqIGNyZWF0ZWQgaW5zaWRlIGFuIGFyZW5hLCB3aGljaCBpcyB6ZXJvZWQgb24gY3JlYXRpb24u ICBCdXQgdGhpcyBpcwotCSAqIGhhbmR5IGFzIGEgc2FmZXR5IG1lYXN1cmUuCi0JICovCi0JYXRv bWljX3N0b3JlX3p1KCZlZGF0YV9jYWNoZS0+Y291bnQsIDAsIEFUT01JQ19SRUxBWEVEKTsKLQlp ZiAobWFsbG9jX211dGV4X2luaXQoJmVkYXRhX2NhY2hlLT5tdHgsICJlZGF0YV9jYWNoZSIsCi0J ICAgIFdJVE5FU1NfUkFOS19FREFUQV9DQUNIRSwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZl KSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JZWRhdGFfY2FjaGUtPmJhc2UgPSBiYXNlOwotCXJl dHVybiBmYWxzZTsKLX0KLQotZWRhdGFfdCAqCi1lZGF0YV9jYWNoZV9nZXQodHNkbl90ICp0c2Ru LCBlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNoZSkgewotCW1hbGxvY19tdXRleF9sb2NrKHRzZG4s ICZlZGF0YV9jYWNoZS0+bXR4KTsKLQllZGF0YV90ICplZGF0YSA9IGVkYXRhX2F2YWlsX2ZpcnN0 KCZlZGF0YV9jYWNoZS0+YXZhaWwpOwotCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0JCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgJmVkYXRhX2NhY2hlLT5tdHgpOwotCQlyZXR1cm4gYmFzZV9hbGxv Y19lZGF0YSh0c2RuLCBlZGF0YV9jYWNoZS0+YmFzZSk7Ci0JfQotCWVkYXRhX2F2YWlsX3JlbW92 ZSgmZWRhdGFfY2FjaGUtPmF2YWlsLCBlZGF0YSk7Ci0JYXRvbWljX2xvYWRfc3ViX3N0b3JlX3p1 KCZlZGF0YV9jYWNoZS0+Y291bnQsIDEpOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmVk YXRhX2NhY2hlLT5tdHgpOwotCXJldHVybiBlZGF0YTsKLX0KLQotdm9pZAotZWRhdGFfY2FjaGVf cHV0KHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUsIGVkYXRhX3QgKmVk YXRhKSB7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmVkYXRhX2NhY2hlLT5tdHgpOwotCWVk YXRhX2F2YWlsX2luc2VydCgmZWRhdGFfY2FjaGUtPmF2YWlsLCBlZGF0YSk7Ci0JYXRvbWljX2xv YWRfYWRkX3N0b3JlX3p1KCZlZGF0YV9jYWNoZS0+Y291bnQsIDEpOwotCW1hbGxvY19tdXRleF91 bmxvY2sodHNkbiwgJmVkYXRhX2NhY2hlLT5tdHgpOwotfQotCi12b2lkCi1lZGF0YV9jYWNoZV9w cmVmb3JrKHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUpIHsKLQltYWxs b2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmZWRhdGFfY2FjaGUtPm10eCk7Ci19Ci0KLXZvaWQKLWVk YXRhX2NhY2hlX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4sIGVkYXRhX2NhY2hlX3QgKmVk YXRhX2NhY2hlKSB7Ci0JbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmZWRhdGFf Y2FjaGUtPm10eCk7Ci19Ci0KLXZvaWQKLWVkYXRhX2NhY2hlX3Bvc3Rmb3JrX2NoaWxkKHRzZG5f dCAqdHNkbiwgZWRhdGFfY2FjaGVfdCAqZWRhdGFfY2FjaGUpIHsKLQltYWxsb2NfbXV0ZXhfcG9z dGZvcmtfY2hpbGQodHNkbiwgJmVkYXRhX2NhY2hlLT5tdHgpOwotfQotCi12b2lkCi1lZGF0YV9j YWNoZV9mYXN0X2luaXQoZWRhdGFfY2FjaGVfZmFzdF90ICplY3MsIGVkYXRhX2NhY2hlX3QgKmZh bGxiYWNrKSB7Ci0JZWRhdGFfbGlzdF9pbmFjdGl2ZV9pbml0KCZlY3MtPmxpc3QpOwotCWVjcy0+ ZmFsbGJhY2sgPSBmYWxsYmFjazsKLQllY3MtPmRpc2FibGVkID0gZmFsc2U7Ci19Ci0KLXN0YXRp YyB2b2lkCi1lZGF0YV9jYWNoZV9mYXN0X3RyeV9maWxsX2Zyb21fZmFsbGJhY2sodHNkbl90ICp0 c2RuLAotICAgIGVkYXRhX2NhY2hlX2Zhc3RfdCAqZWNzKSB7Ci0JZWRhdGFfdCAqZWRhdGE7Ci0J bWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmVjcy0+ZmFsbGJhY2stPm10eCk7Ci0JZm9yIChpbnQg aSA9IDA7IGkgPCBFREFUQV9DQUNIRV9GQVNUX0ZJTEw7IGkrKykgewotCQllZGF0YSA9IGVkYXRh X2F2YWlsX3JlbW92ZV9maXJzdCgmZWNzLT5mYWxsYmFjay0+YXZhaWwpOwotCQlpZiAoZWRhdGEg PT0gTlVMTCkgewotCQkJYnJlYWs7Ci0JCX0KLQkJZWRhdGFfbGlzdF9pbmFjdGl2ZV9hcHBlbmQo JmVjcy0+bGlzdCwgZWRhdGEpOwotCQlhdG9taWNfbG9hZF9zdWJfc3RvcmVfenUoJmVjcy0+ZmFs bGJhY2stPmNvdW50LCAxKTsKLQl9Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZWNzLT5m YWxsYmFjay0+bXR4KTsKLX0KLQotZWRhdGFfdCAqCi1lZGF0YV9jYWNoZV9mYXN0X2dldCh0c2Ru X3QgKnRzZG4sIGVkYXRhX2NhY2hlX2Zhc3RfdCAqZWNzKSB7Ci0Jd2l0bmVzc19hc3NlcnRfZGVw dGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFO S19FREFUQV9DQUNIRSwgMCk7Ci0KLQlpZiAoZWNzLT5kaXNhYmxlZCkgewotCQlhc3NlcnQoZWRh dGFfbGlzdF9pbmFjdGl2ZV9maXJzdCgmZWNzLT5saXN0KSA9PSBOVUxMKTsKLQkJcmV0dXJuIGVk YXRhX2NhY2hlX2dldCh0c2RuLCBlY3MtPmZhbGxiYWNrKTsKLQl9Ci0KLQllZGF0YV90ICplZGF0 YSA9IGVkYXRhX2xpc3RfaW5hY3RpdmVfZmlyc3QoJmVjcy0+bGlzdCk7Ci0JaWYgKGVkYXRhICE9 IE5VTEwpIHsKLQkJZWRhdGFfbGlzdF9pbmFjdGl2ZV9yZW1vdmUoJmVjcy0+bGlzdCwgZWRhdGEp OwotCQlyZXR1cm4gZWRhdGE7Ci0JfQotCS8qIFNsb3cgcGF0aDsgcmVxdWlyZXMgc3luY2hyb25p emF0aW9uLiAqLwotCWVkYXRhX2NhY2hlX2Zhc3RfdHJ5X2ZpbGxfZnJvbV9mYWxsYmFjayh0c2Ru LCBlY3MpOwotCWVkYXRhID0gZWRhdGFfbGlzdF9pbmFjdGl2ZV9maXJzdCgmZWNzLT5saXN0KTsK LQlpZiAoZWRhdGEgIT0gTlVMTCkgewotCQllZGF0YV9saXN0X2luYWN0aXZlX3JlbW92ZSgmZWNz LT5saXN0LCBlZGF0YSk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogU2xvd2VzdCBwYXRoIChmYWxs YmFjayB3YXMgYWxzbyBlbXB0eSk7IGFsbG9jYXRlIHNvbWV0aGluZwotCQkgKiBuZXcuCi0JCSAq LwotCQllZGF0YSA9IGJhc2VfYWxsb2NfZWRhdGEodHNkbiwgZWNzLT5mYWxsYmFjay0+YmFzZSk7 Ci0JfQotCXJldHVybiBlZGF0YTsKLX0KLQotc3RhdGljIHZvaWQKLWVkYXRhX2NhY2hlX2Zhc3Rf Zmx1c2hfYWxsKHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfZmFzdF90ICplY3MpIHsKLQkvKgot CSAqIFlvdSBjb3VsZCBpbWFnaW5lIHNtYXJ0ZXIgY2FjaGUgbWFuYWdlbWVudCBwb2xpY2llcyAo bGlrZQotCSAqIG9ubHkgZmx1c2hpbmcgZG93biB0byBzb21lIHRocmVzaG9sZCBpbiBhbnRpY2lw YXRpb24gb2YKLQkgKiBmdXR1cmUgZ2V0IHJlcXVlc3RzKS4gIEJ1dCBqdXN0IGZsdXNoaW5nIGV2 ZXJ5dGhpbmcgcHJvdmlkZXMKLQkgKiBhIGdvb2Qgb3Bwb3J0dW5pdHkgdG8gZGVmcmFnIHRvbywg YW5kIGxldHMgdXMgc2hhcmUgY29kZSBiZXR3ZWVuIHRoZQotCSAqIGZsdXNoIGFuZCBkaXNhYmxl IHBhdGh3YXlzLgotCSAqLwotCWVkYXRhX3QgKmVkYXRhOwotCXNpemVfdCBuZmx1c2hlZCA9IDA7 Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmVjcy0+ZmFsbGJhY2stPm10eCk7Ci0Jd2hpbGUg KChlZGF0YSA9IGVkYXRhX2xpc3RfaW5hY3RpdmVfZmlyc3QoJmVjcy0+bGlzdCkpICE9IE5VTEwp IHsKLQkJZWRhdGFfbGlzdF9pbmFjdGl2ZV9yZW1vdmUoJmVjcy0+bGlzdCwgZWRhdGEpOwotCQll ZGF0YV9hdmFpbF9pbnNlcnQoJmVjcy0+ZmFsbGJhY2stPmF2YWlsLCBlZGF0YSk7Ci0JCW5mbHVz aGVkKys7Ci0JfQotCWF0b21pY19sb2FkX2FkZF9zdG9yZV96dSgmZWNzLT5mYWxsYmFjay0+Y291 bnQsIG5mbHVzaGVkKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZlY3MtPmZhbGxiYWNr LT5tdHgpOwotfQotCi12b2lkCi1lZGF0YV9jYWNoZV9mYXN0X3B1dCh0c2RuX3QgKnRzZG4sIGVk YXRhX2NhY2hlX2Zhc3RfdCAqZWNzLCBlZGF0YV90ICplZGF0YSkgewotCXdpdG5lc3NfYXNzZXJ0 X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRORVNT X1JBTktfRURBVEFfQ0FDSEUsIDApOwotCi0JaWYgKGVjcy0+ZGlzYWJsZWQpIHsKLQkJYXNzZXJ0 KGVkYXRhX2xpc3RfaW5hY3RpdmVfZmlyc3QoJmVjcy0+bGlzdCkgPT0gTlVMTCk7Ci0JCWVkYXRh X2NhY2hlX3B1dCh0c2RuLCBlY3MtPmZhbGxiYWNrLCBlZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0K LQkvKgotCSAqIFByZXBlbmQgcmF0aGVyIHRoYW4gYXBwZW5kLCB0byBkbyBMSUZPIG9yZGVyaW5n IGluIHRoZSBob3BlcyBvZiBzb21lCi0JICogY2FjaGUgbG9jYWxpdHkuCi0JICovCi0JZWRhdGFf bGlzdF9pbmFjdGl2ZV9wcmVwZW5kKCZlY3MtPmxpc3QsIGVkYXRhKTsKLX0KLQotdm9pZAotZWRh dGFfY2FjaGVfZmFzdF9kaXNhYmxlKHRzZG5fdCAqdHNkbiwgZWRhdGFfY2FjaGVfZmFzdF90ICpl Y3MpIHsKLQllZGF0YV9jYWNoZV9mYXN0X2ZsdXNoX2FsbCh0c2RuLCBlY3MpOwotCWVjcy0+ZGlz YWJsZWQgPSB0cnVlOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3NyYy9laG9va3MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3NyYy9laG9va3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgz ZTlkZS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9zcmMvZWhvb2tzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2Vob29rcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4 dGVudF9tbWFwLmgiCi0KLXZvaWQKLWVob29rc19pbml0KGVob29rc190ICplaG9va3MsIGV4dGVu dF9ob29rc190ICpleHRlbnRfaG9va3MsIHVuc2lnbmVkIGluZCkgewotCS8qIEFsbCBvdGhlciBo b29rcyBhcmUgb3B0aW9uYWw7IHRoaXMgb25lIGlzIG5vdC4gKi8KLQlhc3NlcnQoZXh0ZW50X2hv b2tzLT5hbGxvYyAhPSBOVUxMKTsKLQllaG9va3MtPmluZCA9IGluZDsKLQllaG9va3Nfc2V0X2V4 dGVudF9ob29rc19wdHIoZWhvb2tzLCBleHRlbnRfaG9va3MpOwotfQotCi0vKgotICogSWYgdGhl IGNhbGxlciBzcGVjaWZpZXMgKCEqemVybyksIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHJlY2Vp dmUgemVyb2VkCi0gKiBtZW1vcnksIGluIHdoaWNoIGNhc2UgKnplcm8gaXMgdG9nZ2xlZCB0byB0 cnVlLiAgYXJlbmFfZXh0ZW50X2FsbG9jKCkgdGFrZXMKLSAqIGFkdmFudGFnZSBvZiB0aGlzIHRv IGF2b2lkIGRlbWFuZGluZyB6ZXJvZWQgZXh0ZW50cywgYnV0IHRha2luZyBhZHZhbnRhZ2Ugb2YK LSAqIHRoZW0gaWYgdGhleSBhcmUgcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyB2b2lkICoKLWV4dGVu dF9hbGxvY19jb3JlKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHZvaWQgKm5ld19hZGRy LCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLCBib29sICpj b21taXQsIGRzc19wcmVjX3QgZHNzX3ByZWMpIHsKLQl2b2lkICpyZXQ7Ci0KLQlhc3NlcnQoc2l6 ZSAhPSAwKTsKLQlhc3NlcnQoYWxpZ25tZW50ICE9IDApOwotCi0JLyogInByaW1hcnkiIGRzcy4g Ki8KLQlpZiAoaGF2ZV9kc3MgJiYgZHNzX3ByZWMgPT0gZHNzX3ByZWNfcHJpbWFyeSAmJiAocmV0 ID0KLQkgICAgZXh0ZW50X2FsbG9jX2Rzcyh0c2RuLCBhcmVuYSwgbmV3X2FkZHIsIHNpemUsIGFs aWdubWVudCwgemVybywKLQkgICAgY29tbWl0KSkgIT0gTlVMTCkgewotCQlyZXR1cm4gcmV0Owot CX0KLQkvKiBtbWFwLiAqLwotCWlmICgocmV0ID0gZXh0ZW50X2FsbG9jX21tYXAobmV3X2FkZHIs IHNpemUsIGFsaWdubWVudCwgemVybywgY29tbWl0KSkKLQkgICAgIT0gTlVMTCkgewotCQlyZXR1 cm4gcmV0OwotCX0KLQkvKiAic2Vjb25kYXJ5IiBkc3MuICovCi0JaWYgKGhhdmVfZHNzICYmIGRz c19wcmVjID09IGRzc19wcmVjX3NlY29uZGFyeSAmJiAocmV0ID0KLQkgICAgZXh0ZW50X2FsbG9j X2Rzcyh0c2RuLCBhcmVuYSwgbmV3X2FkZHIsIHNpemUsIGFsaWdubWVudCwgemVybywKLQkgICAg Y29tbWl0KSkgIT0gTlVMTCkgewotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIEFsbCBzdHJhdGVn aWVzIGZvciBhbGxvY2F0aW9uIGZhaWxlZC4gKi8KLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZCAq Ci1laG9va3NfZGVmYXVsdF9hbGxvY19pbXBsKHRzZG5fdCAqdHNkbiwgdm9pZCAqbmV3X2FkZHIs IHNpemVfdCBzaXplLAotICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgKnplcm8sIGJvb2wgKmNv bW1pdCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JYXJlbmFfdCAqYXJlbmEgPSBhcmVuYV9nZXQo dHNkbiwgYXJlbmFfaW5kLCBmYWxzZSk7Ci0JLyogTlVMTCBhcmVuYSBpbmRpY2F0ZXMgYXJlbmFf Y3JlYXRlLiAqLwotCWFzc2VydChhcmVuYSAhPSBOVUxMIHx8IGFsaWdubWVudCA9PSBIVUdFUEFH RSk7Ci0JZHNzX3ByZWNfdCBkc3MgPSAoYXJlbmEgPT0gTlVMTCkgPyBkc3NfcHJlY19kaXNhYmxl ZCA6Ci0JICAgIChkc3NfcHJlY190KWF0b21pY19sb2FkX3UoJmFyZW5hLT5kc3NfcHJlYywgQVRP TUlDX1JFTEFYRUQpOwotCXZvaWQgKnJldCA9IGV4dGVudF9hbGxvY19jb3JlKHRzZG4sIGFyZW5h LCBuZXdfYWRkciwgc2l6ZSwgYWxpZ25tZW50LAotCSAgICB6ZXJvLCBjb21taXQsIGRzcyk7Ci0J aWYgKGhhdmVfbWFkdmlzZV9odWdlICYmIHJldCkgewotCQlwYWdlc19zZXRfdGhwX3N0YXRlKHJl dCwgc2l6ZSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLWVob29rc19k ZWZhdWx0X2FsbG9jKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKm5ld19hZGRy LCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLCBib29sICpj b21taXQsIHVuc2lnbmVkIGFyZW5hX2luZCkgewotCXJldHVybiBlaG9va3NfZGVmYXVsdF9hbGxv Y19pbXBsKHRzZG5fZmV0Y2goKSwgbmV3X2FkZHIsIHNpemUsCi0JICAgIEFMSUdOTUVOVF9DRUlM SU5HKGFsaWdubWVudCwgUEFHRSksIHplcm8sIGNvbW1pdCwgYXJlbmFfaW5kKTsKLX0KLQotYm9v bAotZWhvb2tzX2RlZmF1bHRfZGFsbG9jX2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsK LQlpZiAoIWhhdmVfZHNzIHx8ICFleHRlbnRfaW5fZHNzKGFkZHIpKSB7Ci0JCXJldHVybiBleHRl bnRfZGFsbG9jX21tYXAoYWRkciwgc2l6ZSk7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0 aWMgYm9vbAotZWhvb2tzX2RlZmF1bHRfZGFsbG9jKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9v a3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotICAgIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25l ZCBhcmVuYV9pbmQpIHsKLQlyZXR1cm4gZWhvb2tzX2RlZmF1bHRfZGFsbG9jX2ltcGwoYWRkciwg c2l6ZSk7Ci19Ci0KLXZvaWQKLWVob29rc19kZWZhdWx0X2Rlc3Ryb3lfaW1wbCh2b2lkICphZGRy LCBzaXplX3Qgc2l6ZSkgewotCWlmICghaGF2ZV9kc3MgfHwgIWV4dGVudF9pbl9kc3MoYWRkcikp IHsKLQkJcGFnZXNfdW5tYXAoYWRkciwgc2l6ZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZWhv b2tzX2RlZmF1bHRfZGVzdHJveShleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICph ZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5k KSB7Ci0JZWhvb2tzX2RlZmF1bHRfZGVzdHJveV9pbXBsKGFkZHIsIHNpemUpOwotfQotCi1ib29s Ci1laG9va3NfZGVmYXVsdF9jb21taXRfaW1wbCh2b2lkICphZGRyLCBzaXplX3Qgb2Zmc2V0LCBz aXplX3QgbGVuZ3RoKSB7Ci0JcmV0dXJuIHBhZ2VzX2NvbW1pdCgodm9pZCAqKSgodWludHB0cl90 KWFkZHIgKyAodWludHB0cl90KW9mZnNldCksCi0JICAgIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBi b29sCi1laG9va3NfZGVmYXVsdF9jb21taXQoZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywg dm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0 aCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JcmV0dXJuIGVob29rc19kZWZhdWx0X2NvbW1pdF9p bXBsKGFkZHIsIG9mZnNldCwgbGVuZ3RoKTsKLX0KLQotYm9vbAotZWhvb2tzX2RlZmF1bHRfZGVj b21taXRfaW1wbCh2b2lkICphZGRyLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSB7Ci0J cmV0dXJuIHBhZ2VzX2RlY29tbWl0KCh2b2lkICopKCh1aW50cHRyX3QpYWRkciArICh1aW50cHRy X3Qpb2Zmc2V0KSwKLQkgICAgbGVuZ3RoKTsKLX0KLQotc3RhdGljIGJvb2wKLWVob29rc19kZWZh dWx0X2RlY29tbWl0KGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsIHNp emVfdCBzaXplLAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGFy ZW5hX2luZCkgewotCXJldHVybiBlaG9va3NfZGVmYXVsdF9kZWNvbW1pdF9pbXBsKGFkZHIsIG9m ZnNldCwgbGVuZ3RoKTsKLX0KLQotI2lmZGVmIFBBR0VTX0NBTl9QVVJHRV9MQVpZCi1ib29sCi1l aG9va3NfZGVmYXVsdF9wdXJnZV9sYXp5X2ltcGwodm9pZCAqYWRkciwgc2l6ZV90IG9mZnNldCwg c2l6ZV90IGxlbmd0aCkgewotCXJldHVybiBwYWdlc19wdXJnZV9sYXp5KCh2b2lkICopKCh1aW50 cHRyX3QpYWRkciArICh1aW50cHRyX3Qpb2Zmc2V0KSwKLQkgICAgbGVuZ3RoKTsKLX0KLQotc3Rh dGljIGJvb2wKLWVob29rc19kZWZhdWx0X3B1cmdlX2xhenkoZXh0ZW50X2hvb2tzX3QgKmV4dGVu dF9ob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IG9mZnNldCwgc2l6 ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JYXNzZXJ0KGFkZHIgIT0gTlVMTCk7 Ci0JYXNzZXJ0KChvZmZzZXQgJiBQQUdFX01BU0spID09IDApOwotCWFzc2VydChsZW5ndGggIT0g MCk7Ci0JYXNzZXJ0KChsZW5ndGggJiBQQUdFX01BU0spID09IDApOwotCXJldHVybiBlaG9va3Nf ZGVmYXVsdF9wdXJnZV9sYXp5X2ltcGwoYWRkciwgb2Zmc2V0LCBsZW5ndGgpOwotfQotI2VuZGlm Ci0KLSNpZmRlZiBQQUdFU19DQU5fUFVSR0VfRk9SQ0VECi1ib29sCi1laG9va3NfZGVmYXVsdF9w dXJnZV9mb3JjZWRfaW1wbCh2b2lkICphZGRyLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3Ro KSB7Ci0JcmV0dXJuIHBhZ2VzX3B1cmdlX2ZvcmNlZCgodm9pZCAqKSgodWludHB0cl90KWFkZHIg KwotCSAgICAodWludHB0cl90KW9mZnNldCksIGxlbmd0aCk7Ci19Ci0KLXN0YXRpYyBib29sCi1l aG9va3NfZGVmYXVsdF9wdXJnZV9mb3JjZWQoZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywg dm9pZCAqYWRkciwKLSAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0 aCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JYXNzZXJ0KGFkZHIgIT0gTlVMTCk7Ci0JYXNzZXJ0 KChvZmZzZXQgJiBQQUdFX01BU0spID09IDApOwotCWFzc2VydChsZW5ndGggIT0gMCk7Ci0JYXNz ZXJ0KChsZW5ndGggJiBQQUdFX01BU0spID09IDApOwotCXJldHVybiBlaG9va3NfZGVmYXVsdF9w dXJnZV9mb3JjZWRfaW1wbChhZGRyLCBvZmZzZXQsIGxlbmd0aCk7Ci19Ci0jZW5kaWYKLQotYm9v bAotZWhvb2tzX2RlZmF1bHRfc3BsaXRfaW1wbCgpIHsKLQlpZiAoIW1hcHNfY29hbGVzY2UpIHsK LQkJLyoKLQkJICogV2l0aG91dCByZXRhaW4sIG9ubHkgd2hvbGUgcmVnaW9ucyBjYW4gYmUgcHVy Z2VkIChyZXF1aXJlZCBieQotCQkgKiBNRU1fUkVMRUFTRSBvbiBXaW5kb3dzKSAtLSB0aGVyZWZv cmUgZGlzYWxsb3cgc3BsaXR0aW5nLiAgU2VlCi0JCSAqIGNvbW1lbnRzIGluIGV4dGVudF9oZWFk X25vX21lcmdlKCkuCi0JCSAqLwotCQlyZXR1cm4gIW9wdF9yZXRhaW47Ci0JfQotCi0JcmV0dXJu IGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbAotZWhvb2tzX2RlZmF1bHRfc3BsaXQoZXh0ZW50X2hv b2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90 IHNpemVfYSwgc2l6ZV90IHNpemVfYiwgYm9vbCBjb21taXR0ZWQsIHVuc2lnbmVkIGFyZW5hX2lu ZCkgewotCXJldHVybiBlaG9va3NfZGVmYXVsdF9zcGxpdF9pbXBsKCk7Ci19Ci0KLWJvb2wKLWVo b29rc19kZWZhdWx0X21lcmdlX2ltcGwodHNkbl90ICp0c2RuLCB2b2lkICphZGRyX2EsIHZvaWQg KmFkZHJfYikgewotCWFzc2VydChhZGRyX2EgPCBhZGRyX2IpOwotCS8qCi0JICogRm9yIG5vbi1E U1MgY2FzZXMgLS0KLQkgKiBhKSBXL28gbWFwc19jb2FsZXNjZSwgbWVyZ2UgaXMgbm90IGFsd2F5 cyBhbGxvd2VkIChXaW5kb3dzKToKLQkgKiAgIDEpIHcvbyByZXRhaW4sIG5ldmVyIG1lcmdlIChm aXJzdCBicmFuY2ggYmVsb3cpLgotCSAqICAgMikgd2l0aCByZXRhaW4sIG9ubHkgbWVyZ2UgZXh0 ZW50cyBmcm9tIHRoZSBzYW1lIFZpcnR1YWxBbGxvYwotCSAqICAgICAgcmVnaW9uIChpbiB3aGlj aCBjYXNlIE1FTV9ERUNPTU1JVCBpcyB1dGlsaXplZCBmb3IgcHVyZ2luZykuCi0JICoKLQkgKiBi KSBXaXRoIG1hcHNfY29hbGVzY2UsIGl0J3MgYWx3YXlzIHBvc3NpYmxlIHRvIG1lcmdlLgotCSAq ICAgMSkgdy9vIHJldGFpbiwgYWx3YXlzIGFsbG93IG1lcmdlIChvbmx5IGFib3V0IGRpcnR5IC8g bXV6enkpLgotCSAqICAgMikgd2l0aCByZXRhaW4sIHRvIHByZXNlcnZlIHRoZSBTTiAvIGZpcnN0 LWZpdCwgbWVyZ2UgaXMgc3RpbGwKLQkgKiAgICAgIGRpc2FsbG93ZWQgaWYgYiBpcyBhIGhlYWQg ZXh0ZW50LCBpLmUuIG5vIG1lcmdpbmcgYWNyb3NzCi0JICogICAgICBkaWZmZXJlbnQgbW1hcCBy ZWdpb25zLgotCSAqCi0JICogYTIpIGFuZCBiMikgYXJlIGltcGxlbWVudGVkIGluIGVtYXBfdHJ5 X2FjcXVpcmVfZWRhdGFfbmVpZ2hib3IsIGFuZAotCSAqIHNhbml0eSBjaGVja2VkIGluIHRoZSBz ZWNvbmQgYnJhbmNoIGJlbG93LgotCSAqLwotCWlmICghbWFwc19jb2FsZXNjZSAmJiAhb3B0X3Jl dGFpbikgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JaWYgKGNvbmZpZ19kZWJ1ZykgewotCQllZGF0 YV90ICphID0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLAotCQkg ICAgYWRkcl9hKTsKLQkJYm9vbCBoZWFkX2EgPSBlZGF0YV9pc19oZWFkX2dldChhKTsKLQkJZWRh dGFfdCAqYiA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2dsb2JhbCwKLQkJ ICAgIGFkZHJfYik7Ci0JCWJvb2wgaGVhZF9iID0gZWRhdGFfaXNfaGVhZF9nZXQoYik7Ci0JCWVt YXBfYXNzZXJ0X21hcHBlZCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIGEpOwotCQllbWFwX2Fz c2VydF9tYXBwZWQodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBiKTsKLQkJYXNzZXJ0KGV4dGVu dF9uZWlnaGJvcl9oZWFkX3N0YXRlX21lcmdlYWJsZShoZWFkX2EsIGhlYWRfYiwKLQkJICAgIC8q IGZvcndhcmQgKi8gdHJ1ZSkpOwotCX0KLQlpZiAoaGF2ZV9kc3MgJiYgIWV4dGVudF9kc3NfbWVy Z2VhYmxlKGFkZHJfYSwgYWRkcl9iKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4g ZmFsc2U7Ci19Ci0KLWJvb2wKLWVob29rc19kZWZhdWx0X21lcmdlKGV4dGVudF9ob29rc190ICpl eHRlbnRfaG9va3MsIHZvaWQgKmFkZHJfYSwgc2l6ZV90IHNpemVfYSwKLSAgICB2b2lkICphZGRy X2IsIHNpemVfdCBzaXplX2IsIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsK LQl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0KLQlyZXR1cm4gZWhvb2tzX2RlZmF1bHRf bWVyZ2VfaW1wbCh0c2RuLCBhZGRyX2EsIGFkZHJfYik7Ci19Ci0KLXZvaWQKLWVob29rc19kZWZh dWx0X3plcm9faW1wbCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkgewotCS8qCi0JICogQnkgZGVm YXVsdCwgd2UgdHJ5IHRvIHplcm8gb3V0IG1lbW9yeSB1c2luZyBPUy1wcm92aWRlZCBkZW1hbmQt emVyb2VkCi0JICogcGFnZXMuICBJZiB0aGUgdXNlciBoYXMgc3BlY2lmaWNhbGx5IHJlcXVlc3Rl ZCBodWdlcGFnZXMsIHRob3VnaCwgd2UKLQkgKiBkb24ndCB3YW50IHRvIHB1cmdlIGluIHRoZSBt aWRkbGUgb2YgYSBodWdlcGFnZSAod2hpY2ggd291bGQgYnJlYWsgaXQKLQkgKiB1cCksIHNvIHdl IGFjdCBjb25zZXJ2YXRpdmVseSBhbmQgdXNlIG1lbXNldC4KLQkgKi8KLQlib29sIG5lZWRzX21l bXNldCA9IHRydWU7Ci0JaWYgKG9wdF90aHAgIT0gdGhwX21vZGVfYWx3YXlzKSB7Ci0JCW5lZWRz X21lbXNldCA9IHBhZ2VzX3B1cmdlX2ZvcmNlZChhZGRyLCBzaXplKTsKLQl9Ci0JaWYgKG5lZWRz X21lbXNldCkgewotCQltZW1zZXQoYWRkciwgMCwgc2l6ZSk7Ci0JfQotfQotCi12b2lkCi1laG9v a3NfZGVmYXVsdF9ndWFyZF9pbXBsKHZvaWQgKmd1YXJkMSwgdm9pZCAqZ3VhcmQyKSB7Ci0JcGFn ZXNfbWFya19ndWFyZHMoZ3VhcmQxLCBndWFyZDIpOwotfQotCi12b2lkCi1laG9va3NfZGVmYXVs dF91bmd1YXJkX2ltcGwodm9pZCAqZ3VhcmQxLCB2b2lkICpndWFyZDIpIHsKLQlwYWdlc191bm1h cmtfZ3VhcmRzKGd1YXJkMSwgZ3VhcmQyKTsKLX0KLQotY29uc3QgZXh0ZW50X2hvb2tzX3QgZWhv b2tzX2RlZmF1bHRfZXh0ZW50X2hvb2tzID0gewotCWVob29rc19kZWZhdWx0X2FsbG9jLAotCWVo b29rc19kZWZhdWx0X2RhbGxvYywKLQllaG9va3NfZGVmYXVsdF9kZXN0cm95LAotCWVob29rc19k ZWZhdWx0X2NvbW1pdCwKLQllaG9va3NfZGVmYXVsdF9kZWNvbW1pdCwKLSNpZmRlZiBQQUdFU19D QU5fUFVSR0VfTEFaWQotCWVob29rc19kZWZhdWx0X3B1cmdlX2xhenksCi0jZWxzZQotCU5VTEws Ci0jZW5kaWYKLSNpZmRlZiBQQUdFU19DQU5fUFVSR0VfRk9SQ0VECi0JZWhvb2tzX2RlZmF1bHRf cHVyZ2VfZm9yY2VkLAotI2Vsc2UKLQlOVUxMLAotI2VuZGlmCi0JZWhvb2tzX2RlZmF1bHRfc3Bs aXQsCi0JZWhvb2tzX2RlZmF1bHRfbWVyZ2UKLX07CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2VtYXAuYyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lbWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDljYzk1YTcuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvc3JjL2VtYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDM4NiArMCwwIEBACi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oIgotCi1lbnVtIGVtYXBfbG9ja19yZXN1bHRf ZSB7Ci0JZW1hcF9sb2NrX3Jlc3VsdF9zdWNjZXNzLAotCWVtYXBfbG9ja19yZXN1bHRfZmFpbHVy ZSwKLQllbWFwX2xvY2tfcmVzdWx0X25vX2V4dGVudAotfTsKLXR5cGVkZWYgZW51bSBlbWFwX2xv Y2tfcmVzdWx0X2UgZW1hcF9sb2NrX3Jlc3VsdF90OwotCi1ib29sCi1lbWFwX2luaXQoZW1hcF90 ICplbWFwLCBiYXNlX3QgKmJhc2UsIGJvb2wgemVyb2VkKSB7Ci0JcmV0dXJuIHJ0cmVlX25ldygm ZW1hcC0+cnRyZWUsIGJhc2UsIHplcm9lZCk7Ci19Ci0KLXZvaWQKLWVtYXBfdXBkYXRlX2VkYXRh X3N0YXRlKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90ICplZGF0YSwKLSAgICBl eHRlbnRfc3RhdGVfdCBzdGF0ZSkgewotCXdpdG5lc3NfYXNzZXJ0X3Bvc2l0aXZlX2RlcHRoX3Rv X3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRORVNTX1JBTktfQ09S RSk7Ci0KLQllZGF0YV9zdGF0ZV9zZXQoZWRhdGEsIHN0YXRlKTsKLQotCUVNQVBfREVDTEFSRV9S VFJFRV9DVFg7Ci0JcnRyZWVfbGVhZl9lbG1fdCAqZWxtMSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1 cCh0c2RuLCAmZW1hcC0+cnRyZWUsCi0JICAgIHJ0cmVlX2N0eCwgKHVpbnRwdHJfdCllZGF0YV9i YXNlX2dldChlZGF0YSksIC8qIGRlcGVuZGVudCAqLyB0cnVlLAotCSAgICAvKiBpbml0X21pc3Np bmcgKi8gZmFsc2UpOwotCWFzc2VydChlbG0xICE9IE5VTEwpOwotCXJ0cmVlX2xlYWZfZWxtX3Qg KmVsbTIgPSBlZGF0YV9zaXplX2dldChlZGF0YSkgPT0gUEFHRSA/IE5VTEwgOgotCSAgICBydHJl ZV9sZWFmX2VsbV9sb29rdXAodHNkbiwgJmVtYXAtPnJ0cmVlLCBydHJlZV9jdHgsCi0JICAgICh1 aW50cHRyX3QpZWRhdGFfbGFzdF9nZXQoZWRhdGEpLCAvKiBkZXBlbmRlbnQgKi8gdHJ1ZSwKLQkg ICAgLyogaW5pdF9taXNzaW5nICovIGZhbHNlKTsKLQotCXJ0cmVlX2xlYWZfZWxtX3N0YXRlX3Vw ZGF0ZSh0c2RuLCAmZW1hcC0+cnRyZWUsIGVsbTEsIGVsbTIsIHN0YXRlKTsKLQotCWVtYXBfYXNz ZXJ0X21hcHBlZCh0c2RuLCBlbWFwLCBlZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZWRhdGFf dCAqCi1lbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yX2ltcGwodHNkbl90ICp0c2RuLCBl bWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhLAotICAgIGV4dGVudF9wYWlfdCBwYWksIGV4dGVu dF9zdGF0ZV90IGV4cGVjdGVkX3N0YXRlLCBib29sIGZvcndhcmQsCi0gICAgYm9vbCBleHBhbmRp bmcpIHsKLQl3aXRuZXNzX2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVz c190c2RwX2dldCh0c2RuKSwKLQkgICAgV0lUTkVTU19SQU5LX0NPUkUpOwotCWFzc2VydCghZWRh dGFfZ3VhcmRlZF9nZXQoZWRhdGEpKTsKLQlhc3NlcnQoIWV4cGFuZGluZyB8fCBmb3J3YXJkKTsK LQlhc3NlcnQoIWVkYXRhX3N0YXRlX2luX3RyYW5zaXRpb24oZXhwZWN0ZWRfc3RhdGUpKTsKLQlh c3NlcnQoZXhwZWN0ZWRfc3RhdGUgPT0gZXh0ZW50X3N0YXRlX2RpcnR5IHx8Ci0JICAgICAgIGV4 cGVjdGVkX3N0YXRlID09IGV4dGVudF9zdGF0ZV9tdXp6eSB8fAotCSAgICAgICBleHBlY3RlZF9z dGF0ZSA9PSBleHRlbnRfc3RhdGVfcmV0YWluZWQpOwotCi0Jdm9pZCAqbmVpZ2hib3JfYWRkciA9 IGZvcndhcmQgPyBlZGF0YV9wYXN0X2dldChlZGF0YSkgOgotCSAgICBlZGF0YV9iZWZvcmVfZ2V0 KGVkYXRhKTsKLQkvKgotCSAqIFRoaXMgaXMgc3VidGxlOyB0aGUgcnRyZWUgY29kZSBhc3NlcnRz IHRoYXQgaXRzIGlucHV0IHBvaW50ZXIgaXMKLQkgKiBub24tTlVMTCwgYW5kIHRoaXMgaXMgYSB1 c2VmdWwgdGhpbmcgdG8gY2hlY2suICBCdXQgaXQncyBwb3NzaWJsZQotCSAqIHRoYXQgZWRhdGEg Y29ycmVzcG9uZHMgdG8gYW4gYWRkcmVzcyBvZiAodm9pZCAqKVBBR0UgKGluIHByYWN0aWNlLAot CSAqIHRoaXMgaGFzIG9ubHkgYmVlbiBvYnNlcnZlZCBvbiBGcmVlQlNEIHdoZW4gYWRkcmVzcy1z cGFjZQotCSAqIHJhbmRvbWl6YXRpb24gaXMgb24sIGJ1dCBpdCBjb3VsZCBpbiBwcmluY2lwbGUg aGFwcGVuIGFueXdoZXJlKS4gIEluCi0JICogdGhpcyBjYXNlLCBlZGF0YV9iZWZvcmVfZ2V0KGVk YXRhKSBpcyBOVUxMLCB0cmlnZ2VyaW5nIHRoZSBhc3NlcnQuCi0JICovCi0JaWYgKG5laWdoYm9y X2FkZHIgPT0gTlVMTCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlFTUFQX0RFQ0xBUkVfUlRS RUVfQ1RYOwotCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0 c2RuLCAmZW1hcC0+cnRyZWUsCi0JICAgIHJ0cmVlX2N0eCwgKHVpbnRwdHJfdCluZWlnaGJvcl9h ZGRyLCAvKiBkZXBlbmRlbnQqLyBmYWxzZSwKLQkgICAgLyogaW5pdF9taXNzaW5nICovIGZhbHNl KTsKLQlpZiAoZWxtID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcnRyZWVfY29u dGVudHNfdCBuZWlnaGJvcl9jb250ZW50cyA9IHJ0cmVlX2xlYWZfZWxtX3JlYWQodHNkbiwKLQkg ICAgJmVtYXAtPnJ0cmVlLCBlbG0sIC8qIGRlcGVuZGVudCAqLyB0cnVlKTsKLQlpZiAoIWV4dGVu dF9jYW5fYWNxdWlyZV9uZWlnaGJvcihlZGF0YSwgbmVpZ2hib3JfY29udGVudHMsIHBhaSwKLQkg ICAgZXhwZWN0ZWRfc3RhdGUsIGZvcndhcmQsIGV4cGFuZGluZykpIHsKLQkJcmV0dXJuIE5VTEw7 Ci0JfQotCi0JLyogRnJvbSB0aGlzIHBvaW50LCB0aGUgbmVpZ2hib3IgZWRhdGEgY2FuIGJlIHNh ZmVseSBhY3F1aXJlZC4gKi8KLQllZGF0YV90ICpuZWlnaGJvciA9IG5laWdoYm9yX2NvbnRlbnRz LmVkYXRhOwotCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQobmVpZ2hib3IpID09IGV4cGVjdGVkX3N0 YXRlKTsKLQllbWFwX3VwZGF0ZV9lZGF0YV9zdGF0ZSh0c2RuLCBlbWFwLCBuZWlnaGJvciwgZXh0 ZW50X3N0YXRlX21lcmdpbmcpOwotCWlmIChleHBhbmRpbmcpIHsKLQkJZXh0ZW50X2Fzc2VydF9j YW5fZXhwYW5kKGVkYXRhLCBuZWlnaGJvcik7Ci0JfSBlbHNlIHsKLQkJZXh0ZW50X2Fzc2VydF9j YW5fY29hbGVzY2UoZWRhdGEsIG5laWdoYm9yKTsKLQl9Ci0KLQlyZXR1cm4gbmVpZ2hib3I7Ci19 Ci0KLWVkYXRhX3QgKgotZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWlnaGJvcih0c2RuX3QgKnRz ZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsCi0gICAgZXh0ZW50X3BhaV90IHBhaSwg ZXh0ZW50X3N0YXRlX3QgZXhwZWN0ZWRfc3RhdGUsIGJvb2wgZm9yd2FyZCkgewotCXJldHVybiBl bWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yX2ltcGwodHNkbiwgZW1hcCwgZWRhdGEsIHBh aSwKLQkgICAgZXhwZWN0ZWRfc3RhdGUsIGZvcndhcmQsIC8qIGV4cGFuZCAqLyBmYWxzZSk7Ci19 Ci0KLWVkYXRhX3QgKgotZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWlnaGJvcl9leHBhbmQodHNk bl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsCi0gICAgZWRhdGFfdCAqZWRhdGEsIGV4dGVudF9wYWlf dCBwYWksIGV4dGVudF9zdGF0ZV90IGV4cGVjdGVkX3N0YXRlKSB7Ci0JLyogVHJ5IGV4cGFuZGlu ZyBmb3J3YXJkLiAqLwotCXJldHVybiBlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdoYm9yX2lt cGwodHNkbiwgZW1hcCwgZWRhdGEsIHBhaSwKLQkgICAgZXhwZWN0ZWRfc3RhdGUsIC8qIGZvcndh cmQgKi8gdHJ1ZSwgLyogZXhwYW5kICovIHRydWUpOwotfQotCi12b2lkCi1lbWFwX3JlbGVhc2Vf ZWRhdGEodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRhLAotICAgIGV4 dGVudF9zdGF0ZV90IG5ld19zdGF0ZSkgewotCWFzc2VydChlbWFwX2VkYXRhX2luX3RyYW5zaXRp b24odHNkbiwgZW1hcCwgZWRhdGEpKTsKLQlhc3NlcnQoZW1hcF9lZGF0YV9pc19hY3F1aXJlZCh0 c2RuLCBlbWFwLCBlZGF0YSkpOwotCi0JZW1hcF91cGRhdGVfZWRhdGFfc3RhdGUodHNkbiwgZW1h cCwgZWRhdGEsIG5ld19zdGF0ZSk7Ci19Ci0KLXN0YXRpYyBib29sCi1lbWFwX3J0cmVlX2xlYWZf ZWxtc19sb29rdXAodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIHJ0cmVlX2N0eF90ICpydHJl ZV9jdHgsCi0gICAgY29uc3QgZWRhdGFfdCAqZWRhdGEsIGJvb2wgZGVwZW5kZW50LCBib29sIGlu aXRfbWlzc2luZywKLSAgICBydHJlZV9sZWFmX2VsbV90ICoqcl9lbG1fYSwgcnRyZWVfbGVhZl9l bG1fdCAqKnJfZWxtX2IpIHsKLQkqcl9lbG1fYSA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2Ru LCAmZW1hcC0+cnRyZWUsIHJ0cmVlX2N0eCwKLQkgICAgKHVpbnRwdHJfdCllZGF0YV9iYXNlX2dl dChlZGF0YSksIGRlcGVuZGVudCwgaW5pdF9taXNzaW5nKTsKLQlpZiAoIWRlcGVuZGVudCAmJiAq cl9lbG1fYSA9PSBOVUxMKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlhc3NlcnQoKnJfZWxtX2Eg IT0gTlVMTCk7Ci0KLQkqcl9lbG1fYiA9IHJ0cmVlX2xlYWZfZWxtX2xvb2t1cCh0c2RuLCAmZW1h cC0+cnRyZWUsIHJ0cmVlX2N0eCwKLQkgICAgKHVpbnRwdHJfdCllZGF0YV9sYXN0X2dldChlZGF0 YSksIGRlcGVuZGVudCwgaW5pdF9taXNzaW5nKTsKLQlpZiAoIWRlcGVuZGVudCAmJiAqcl9lbG1f YiA9PSBOVUxMKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlhc3NlcnQoKnJfZWxtX2IgIT0gTlVM TCk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1lbWFwX3J0cmVlX3dyaXRl X2FjcXVpcmVkKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBydHJlZV9sZWFmX2VsbV90ICpl bG1fYSwKLSAgICBydHJlZV9sZWFmX2VsbV90ICplbG1fYiwgZWRhdGFfdCAqZWRhdGEsIHN6aW5k X3Qgc3ppbmQsIGJvb2wgc2xhYikgewotCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHM7Ci0JY29u dGVudHMuZWRhdGEgPSBlZGF0YTsKLQljb250ZW50cy5tZXRhZGF0YS5zemluZCA9IHN6aW5kOwot CWNvbnRlbnRzLm1ldGFkYXRhLnNsYWIgPSBzbGFiOwotCWNvbnRlbnRzLm1ldGFkYXRhLmlzX2hl YWQgPSAoZWRhdGEgPT0gTlVMTCkgPyBmYWxzZSA6Ci0JICAgIGVkYXRhX2lzX2hlYWRfZ2V0KGVk YXRhKTsKLQljb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IChlZGF0YSA9PSBOVUxMKSA/IDAgOiBl ZGF0YV9zdGF0ZV9nZXQoZWRhdGEpOwotCXJ0cmVlX2xlYWZfZWxtX3dyaXRlKHRzZG4sICZlbWFw LT5ydHJlZSwgZWxtX2EsIGNvbnRlbnRzKTsKLQlpZiAoZWxtX2IgIT0gTlVMTCkgewotCQlydHJl ZV9sZWFmX2VsbV93cml0ZSh0c2RuLCAmZW1hcC0+cnRyZWUsIGVsbV9iLCBjb250ZW50cyk7Ci0J fQotfQotCi1ib29sCi1lbWFwX3JlZ2lzdGVyX2JvdW5kYXJ5KHRzZG5fdCAqdHNkbiwgZW1hcF90 ICplbWFwLCBlZGF0YV90ICplZGF0YSwKLSAgICBzemluZF90IHN6aW5kLCBib29sIHNsYWIpIHsK LQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsK LQlFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYOwotCi0JcnRyZWVfbGVhZl9lbG1fdCAqZWxtX2EsICpl bG1fYjsKLQlib29sIGVyciA9IGVtYXBfcnRyZWVfbGVhZl9lbG1zX2xvb2t1cCh0c2RuLCBlbWFw LCBydHJlZV9jdHgsIGVkYXRhLAotCSAgICBmYWxzZSwgdHJ1ZSwgJmVsbV9hLCAmZWxtX2IpOwot CWlmIChlcnIpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWFzc2VydChydHJlZV9sZWFmX2VsbV9y ZWFkKHRzZG4sICZlbWFwLT5ydHJlZSwgZWxtX2EsCi0JICAgIC8qIGRlcGVuZGVudCAqLyBmYWxz ZSkuZWRhdGEgPT0gTlVMTCk7Ci0JYXNzZXJ0KHJ0cmVlX2xlYWZfZWxtX3JlYWQodHNkbiwgJmVt YXAtPnJ0cmVlLCBlbG1fYiwKLQkgICAgLyogZGVwZW5kZW50ICovIGZhbHNlKS5lZGF0YSA9PSBO VUxMKTsKLQllbWFwX3J0cmVlX3dyaXRlX2FjcXVpcmVkKHRzZG4sIGVtYXAsIGVsbV9hLCBlbG1f YiwgZWRhdGEsIHN6aW5kLCBzbGFiKTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qIEludm9rZWQg KmFmdGVyKiBlbWFwX3JlZ2lzdGVyX2JvdW5kYXJ5LiAqLwotdm9pZAotZW1hcF9yZWdpc3Rlcl9p bnRlcmlvcih0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEsCi0gICAg c3ppbmRfdCBzemluZCkgewotCUVNQVBfREVDTEFSRV9SVFJFRV9DVFg7Ci0KLQlhc3NlcnQoZWRh dGFfc2xhYl9nZXQoZWRhdGEpKTsKLQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBl eHRlbnRfc3RhdGVfYWN0aXZlKTsKLQotCWlmIChjb25maWdfZGVidWcpIHsKLQkJLyogTWFraW5n IHN1cmUgdGhlIGJvdW5kYXJ5IGlzIHJlZ2lzdGVyZWQgYWxyZWFkeS4gKi8KLQkJcnRyZWVfbGVh Zl9lbG1fdCAqZWxtX2EsICplbG1fYjsKLQkJYm9vbCBlcnIgPSBlbWFwX3J0cmVlX2xlYWZfZWxt c19sb29rdXAodHNkbiwgZW1hcCwgcnRyZWVfY3R4LAotCQkgICAgZWRhdGEsIC8qIGRlcGVuZGVu dCAqLyB0cnVlLCAvKiBpbml0X21pc3NpbmcgKi8gZmFsc2UsCi0JCSAgICAmZWxtX2EsICZlbG1f Yik7Ci0JCWFzc2VydCghZXJyKTsKLQkJcnRyZWVfY29udGVudHNfdCBjb250ZW50c19hLCBjb250 ZW50c19iOwotCQljb250ZW50c19hID0gcnRyZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCAmZW1hcC0+ cnRyZWUsIGVsbV9hLAotCQkgICAgLyogZGVwZW5kZW50ICovIHRydWUpOwotCQljb250ZW50c19i ID0gcnRyZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCAmZW1hcC0+cnRyZWUsIGVsbV9iLAotCQkgICAg LyogZGVwZW5kZW50ICovIHRydWUpOwotCQlhc3NlcnQoY29udGVudHNfYS5lZGF0YSA9PSBlZGF0 YSAmJiBjb250ZW50c19iLmVkYXRhID09IGVkYXRhKTsKLQkJYXNzZXJ0KGNvbnRlbnRzX2EubWV0 YWRhdGEuc2xhYiAmJiBjb250ZW50c19iLm1ldGFkYXRhLnNsYWIpOwotCX0KLQotCXJ0cmVlX2Nv bnRlbnRzX3QgY29udGVudHM7Ci0JY29udGVudHMuZWRhdGEgPSBlZGF0YTsKLQljb250ZW50cy5t ZXRhZGF0YS5zemluZCA9IHN6aW5kOwotCWNvbnRlbnRzLm1ldGFkYXRhLnNsYWIgPSB0cnVlOwot CWNvbnRlbnRzLm1ldGFkYXRhLnN0YXRlID0gZXh0ZW50X3N0YXRlX2FjdGl2ZTsKLQljb250ZW50 cy5tZXRhZGF0YS5pc19oZWFkID0gZmFsc2U7IC8qIE5vdCBhbGxvd2VkIHRvIGFjY2Vzcy4gKi8K LQotCWFzc2VydChlZGF0YV9zaXplX2dldChlZGF0YSkgPiAoMiA8PCBMR19QQUdFKSk7Ci0JcnRy ZWVfd3JpdGVfcmFuZ2UodHNkbiwgJmVtYXAtPnJ0cmVlLCBydHJlZV9jdHgsCi0JICAgICh1aW50 cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpICsgUEFHRSwKLQkgICAgKHVpbnRwdHJfdCllZGF0 YV9sYXN0X2dldChlZGF0YSkgLSBQQUdFLCBjb250ZW50cyk7Ci19Ci0KLXZvaWQKLWVtYXBfZGVy ZWdpc3Rlcl9ib3VuZGFyeSh0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRh dGEpIHsKLQkvKgotCSAqIFRoZSBlZGF0YSBtdXN0IGJlIGVpdGhlciBpbiBhbiBhY3F1aXJlZCBz dGF0ZSwgb3IgcHJvdGVjdGVkIGJ5IHN0YXRlCi0JICogYmFzZWQgbG9ja3MuCi0JICovCi0JaWYg KCFlbWFwX2VkYXRhX2lzX2FjcXVpcmVkKHRzZG4sIGVtYXAsIGVkYXRhKSkgewotCQl3aXRuZXNz X2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKAotCQkgICAgdHNkbl93aXRuZXNzX3RzZHBf Z2V0KHRzZG4pLCBXSVRORVNTX1JBTktfQ09SRSk7Ci0JfQotCi0JRU1BUF9ERUNMQVJFX1JUUkVF X0NUWDsKLQlydHJlZV9sZWFmX2VsbV90ICplbG1fYSwgKmVsbV9iOwotCi0JZW1hcF9ydHJlZV9s ZWFmX2VsbXNfbG9va3VwKHRzZG4sIGVtYXAsIHJ0cmVlX2N0eCwgZWRhdGEsCi0JICAgIHRydWUs IGZhbHNlLCAmZWxtX2EsICZlbG1fYik7Ci0JZW1hcF9ydHJlZV93cml0ZV9hY3F1aXJlZCh0c2Ru LCBlbWFwLCBlbG1fYSwgZWxtX2IsIE5VTEwsIFNDX05TSVpFUywKLQkgICAgZmFsc2UpOwotfQot Ci12b2lkCi1lbWFwX2RlcmVnaXN0ZXJfaW50ZXJpb3IodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVt YXAsIGVkYXRhX3QgKmVkYXRhKSB7Ci0JRU1BUF9ERUNMQVJFX1JUUkVFX0NUWDsKLQotCWFzc2Vy dChlZGF0YV9zbGFiX2dldChlZGF0YSkpOwotCWlmIChlZGF0YV9zaXplX2dldChlZGF0YSkgPiAo MiA8PCBMR19QQUdFKSkgewotCQlydHJlZV9jbGVhcl9yYW5nZSh0c2RuLCAmZW1hcC0+cnRyZWUs IHJ0cmVlX2N0eCwKLQkJICAgICh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpICsgUEFH RSwKLQkJICAgICh1aW50cHRyX3QpZWRhdGFfbGFzdF9nZXQoZWRhdGEpIC0gUEFHRSk7Ci0JfQot fQotCi12b2lkCi1lbWFwX3JlbWFwKHRzZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlZGF0YV90 ICplZGF0YSwgc3ppbmRfdCBzemluZCwKLSAgICBib29sIHNsYWIpIHsKLQlFTUFQX0RFQ0xBUkVf UlRSRUVfQ1RYOwotCi0JaWYgKHN6aW5kICE9IFNDX05TSVpFUykgewotCQlydHJlZV9jb250ZW50 c190IGNvbnRlbnRzOwotCQljb250ZW50cy5lZGF0YSA9IGVkYXRhOwotCQljb250ZW50cy5tZXRh ZGF0YS5zemluZCA9IHN6aW5kOwotCQljb250ZW50cy5tZXRhZGF0YS5zbGFiID0gc2xhYjsKLQkJ Y29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IGVkYXRhX2lzX2hlYWRfZ2V0KGVkYXRhKTsKLQkJ Y29udGVudHMubWV0YWRhdGEuc3RhdGUgPSBlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpOwotCi0JCXJ0 cmVlX3dyaXRlKHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVfY3R4LAotCQkgICAgKHVpbnRwdHJf dCllZGF0YV9hZGRyX2dldChlZGF0YSksIGNvbnRlbnRzKTsKLQkJLyoKLQkJICogUmVjYWxsIHRo YXQgdGhpcyBpcyBjYWxsZWQgb25seSBmb3IgYWN0aXZlLT5pbmFjdGl2ZSBhbmQKLQkJICogaW5h Y3RpdmUtPmFjdGl2ZSB0cmFuc2l0aW9ucyAoc2luY2Ugb25seSBhY3RpdmUgZXh0ZW50cyBoYXZl Ci0JCSAqIG1lYW5pbmdmdWwgdmFsdWVzIGZvciBzemluZCBhbmQgc2xhYikuICBBY3RpdmUsIG5v bi1zbGFiCi0JCSAqIGV4dGVudHMgb25seSBuZWVkIHRvIGhhbmRsZSBsb29rdXBzIGF0IHRoZWly IGhlYWQgKG9uCi0JCSAqIGRlYWxsb2NhdGlvbiksIHNvIHdlIGRvbid0IGJvdGhlciBmaWxsaW5n IGluIHRoZSBlbmQKLQkJICogYm91bmRhcnkuCi0JCSAqCi0JCSAqIEZvciBzbGFiIGV4dGVudHMs IHdlIGRvIHRoZSBlbmQtbWFwcGluZyBjaGFuZ2UuICBUaGlzIHN0aWxsCi0JCSAqIGxlYXZlcyB0 aGUgaW50ZXJpb3IgdW5tb2RpZmllZDsgYW4gZW1hcF9yZWdpc3Rlcl9pbnRlcmlvcgotCQkgKiBj YWxsIGlzIGNvbWluZyBpbiB0aG9zZSBjYXNlcywgdGhvdWdoLgotCQkgKi8KLQkJaWYgKHNsYWIg JiYgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID4gUEFHRSkgewotCQkJdWludHB0cl90IGtleSA9ICh1 aW50cHRyX3QpZWRhdGFfcGFzdF9nZXQoZWRhdGEpCi0JCQkgICAgLSAodWludHB0cl90KVBBR0U7 Ci0JCQlydHJlZV93cml0ZSh0c2RuLCAmZW1hcC0+cnRyZWUsIHJ0cmVlX2N0eCwga2V5LAotCQkJ ICAgIGNvbnRlbnRzKTsKLQkJfQotCX0KLX0KLQotYm9vbAotZW1hcF9zcGxpdF9wcmVwYXJlKHRz ZG5fdCAqdHNkbiwgZW1hcF90ICplbWFwLCBlbWFwX3ByZXBhcmVfdCAqcHJlcGFyZSwKLSAgICBl ZGF0YV90ICplZGF0YSwgc2l6ZV90IHNpemVfYSwgZWRhdGFfdCAqdHJhaWwsIHNpemVfdCBzaXpl X2IpIHsKLQlFTUFQX0RFQ0xBUkVfUlRSRUVfQ1RYOwotCi0JLyoKLQkgKiBXZSB1c2UgaW5jb3Jy ZWN0IGNvbnN0YW50cyBmb3IgdGhpbmdzIGxpa2UgYXJlbmEgaW5kLCB6ZXJvLCByYW5nZWQsCi0J ICogYW5kIGNvbW1pdCBzdGF0ZSwgYW5kIGhlYWQgc3RhdHVzLiAgVGhpcyBpcyBhIGZha2UgZWRh dGFfdCwgdXNlZCB0bwotCSAqIGZhY2lsaXRhdGUgYSBsb29rdXAuCi0JICovCi0JZWRhdGFfdCBs ZWFkID0gezB9OwotCWVkYXRhX2luaXQoJmxlYWQsIDBVLCBlZGF0YV9hZGRyX2dldChlZGF0YSks IHNpemVfYSwgZmFsc2UsIDAsIDAsCi0JICAgIGV4dGVudF9zdGF0ZV9hY3RpdmUsIGZhbHNlLCBm YWxzZSwgRVhURU5UX1BBSV9QQUMsIEVYVEVOVF9OT1RfSEVBRCk7Ci0KLQllbWFwX3J0cmVlX2xl YWZfZWxtc19sb29rdXAodHNkbiwgZW1hcCwgcnRyZWVfY3R4LCAmbGVhZCwgZmFsc2UsIHRydWUs Ci0JICAgICZwcmVwYXJlLT5sZWFkX2VsbV9hLCAmcHJlcGFyZS0+bGVhZF9lbG1fYik7Ci0JZW1h cF9ydHJlZV9sZWFmX2VsbXNfbG9va3VwKHRzZG4sIGVtYXAsIHJ0cmVlX2N0eCwgdHJhaWwsIGZh bHNlLCB0cnVlLAotCSAgICAmcHJlcGFyZS0+dHJhaWxfZWxtX2EsICZwcmVwYXJlLT50cmFpbF9l bG1fYik7Ci0KLQlpZiAocHJlcGFyZS0+bGVhZF9lbG1fYSA9PSBOVUxMIHx8IHByZXBhcmUtPmxl YWRfZWxtX2IgPT0gTlVMTAotCSAgICB8fCBwcmVwYXJlLT50cmFpbF9lbG1fYSA9PSBOVUxMIHx8 IHByZXBhcmUtPnRyYWlsX2VsbV9iID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXJl dHVybiBmYWxzZTsKLX0KLQotdm9pZAotZW1hcF9zcGxpdF9jb21taXQodHNkbl90ICp0c2RuLCBl bWFwX3QgKmVtYXAsIGVtYXBfcHJlcGFyZV90ICpwcmVwYXJlLAotICAgIGVkYXRhX3QgKmxlYWQs IHNpemVfdCBzaXplX2EsIGVkYXRhX3QgKnRyYWlsLCBzaXplX3Qgc2l6ZV9iKSB7Ci0JLyoKLQkg KiBXZSBzaG91bGQgdGhpbmsgYWJvdXQgbm90IHdyaXRpbmcgdG8gdGhlIGxlYWQgbGVhZiBlbGVt ZW50LiAgV2UgY2FuCi0JICogZ2V0IGludG8gc2l0dWF0aW9ucyB3aGVyZSBhIHJhY2luZyByZWFs bG9jLWxpa2UgY2FsbCBjYW4gZGlzYWdyZWUKLQkgKiB3aXRoIGEgc2l6ZSBsb29rdXAgcmVxdWVz dC4gIEkgdGhpbmsgaXQncyBmaW5lIHRvIGRlY2xhcmUgdGhhdCB0aGVzZQotCSAqIHNpdHVhdGlv bnMgYXJlIHJhY2UgYnVncywgYnV0IHRoZXJlJ3MgYW4gYXJndW1lbnQgdG8gYmUgbWFkZSB0aGF0 IGZvcgotCSAqIHRoaW5ncyBsaWtlIHhhbGxvY3gsIGEgc2l6ZSBsb29rdXAgY2FsbCBzaG91bGQg cmV0dXJuIGVpdGhlciB0aGUgb2xkCi0JICogc2l6ZSBvciB0aGUgbmV3IHNpemUsIGJ1dCBub3Qg YW55dGhpbmcgZWxzZS4KLQkgKi8KLQllbWFwX3J0cmVlX3dyaXRlX2FjcXVpcmVkKHRzZG4sIGVt YXAsIHByZXBhcmUtPmxlYWRfZWxtX2EsCi0JICAgIHByZXBhcmUtPmxlYWRfZWxtX2IsIGxlYWQs IFNDX05TSVpFUywgLyogc2xhYiAqLyBmYWxzZSk7Ci0JZW1hcF9ydHJlZV93cml0ZV9hY3F1aXJl ZCh0c2RuLCBlbWFwLCBwcmVwYXJlLT50cmFpbF9lbG1fYSwKLQkgICAgcHJlcGFyZS0+dHJhaWxf ZWxtX2IsIHRyYWlsLCBTQ19OU0laRVMsIC8qIHNsYWIgKi8gZmFsc2UpOwotfQotCi12b2lkCi1l bWFwX21lcmdlX3ByZXBhcmUodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVtYXBfcHJlcGFy ZV90ICpwcmVwYXJlLAotICAgIGVkYXRhX3QgKmxlYWQsIGVkYXRhX3QgKnRyYWlsKSB7Ci0JRU1B UF9ERUNMQVJFX1JUUkVFX0NUWDsKLQllbWFwX3J0cmVlX2xlYWZfZWxtc19sb29rdXAodHNkbiwg ZW1hcCwgcnRyZWVfY3R4LCBsZWFkLCB0cnVlLCBmYWxzZSwKLQkgICAgJnByZXBhcmUtPmxlYWRf ZWxtX2EsICZwcmVwYXJlLT5sZWFkX2VsbV9iKTsKLQllbWFwX3J0cmVlX2xlYWZfZWxtc19sb29r dXAodHNkbiwgZW1hcCwgcnRyZWVfY3R4LCB0cmFpbCwgdHJ1ZSwgZmFsc2UsCi0JICAgICZwcmVw YXJlLT50cmFpbF9lbG1fYSwgJnByZXBhcmUtPnRyYWlsX2VsbV9iKTsKLX0KLQotdm9pZAotZW1h cF9tZXJnZV9jb21taXQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVtYXBfcHJlcGFyZV90 ICpwcmVwYXJlLAotICAgIGVkYXRhX3QgKmxlYWQsIGVkYXRhX3QgKnRyYWlsKSB7Ci0JcnRyZWVf Y29udGVudHNfdCBjbGVhcl9jb250ZW50czsKLQljbGVhcl9jb250ZW50cy5lZGF0YSA9IE5VTEw7 Ci0JY2xlYXJfY29udGVudHMubWV0YWRhdGEuc3ppbmQgPSBTQ19OU0laRVM7Ci0JY2xlYXJfY29u dGVudHMubWV0YWRhdGEuc2xhYiA9IGZhbHNlOwotCWNsZWFyX2NvbnRlbnRzLm1ldGFkYXRhLmlz X2hlYWQgPSBmYWxzZTsKLQljbGVhcl9jb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IChleHRlbnRf c3RhdGVfdCkwOwotCi0JaWYgKHByZXBhcmUtPmxlYWRfZWxtX2IgIT0gTlVMTCkgewotCQlydHJl ZV9sZWFmX2VsbV93cml0ZSh0c2RuLCAmZW1hcC0+cnRyZWUsCi0JCSAgICBwcmVwYXJlLT5sZWFk X2VsbV9iLCBjbGVhcl9jb250ZW50cyk7Ci0JfQotCi0JcnRyZWVfbGVhZl9lbG1fdCAqbWVyZ2Vk X2I7Ci0JaWYgKHByZXBhcmUtPnRyYWlsX2VsbV9iICE9IE5VTEwpIHsKLQkJcnRyZWVfbGVhZl9l bG1fd3JpdGUodHNkbiwgJmVtYXAtPnJ0cmVlLAotCQkgICAgcHJlcGFyZS0+dHJhaWxfZWxtX2Es IGNsZWFyX2NvbnRlbnRzKTsKLQkJbWVyZ2VkX2IgPSBwcmVwYXJlLT50cmFpbF9lbG1fYjsKLQl9 IGVsc2UgewotCQltZXJnZWRfYiA9IHByZXBhcmUtPnRyYWlsX2VsbV9hOwotCX0KLQotCWVtYXBf cnRyZWVfd3JpdGVfYWNxdWlyZWQodHNkbiwgZW1hcCwgcHJlcGFyZS0+bGVhZF9lbG1fYSwgbWVy Z2VkX2IsCi0JICAgIGxlYWQsIFNDX05TSVpFUywgZmFsc2UpOwotfQotCi12b2lkCi1lbWFwX2Rv X2Fzc2VydF9tYXBwZWQodHNkbl90ICp0c2RuLCBlbWFwX3QgKmVtYXAsIGVkYXRhX3QgKmVkYXRh KSB7Ci0JRU1BUF9ERUNMQVJFX1JUUkVFX0NUWDsKLQotCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVu dHMgPSBydHJlZV9yZWFkKHRzZG4sICZlbWFwLT5ydHJlZSwgcnRyZWVfY3R4LAotCSAgICAodWlu dHB0cl90KWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSk7Ci0JYXNzZXJ0KGNvbnRlbnRzLmVkYXRhID09 IGVkYXRhKTsKLQlhc3NlcnQoY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9PSBlZGF0YV9pc19o ZWFkX2dldChlZGF0YSkpOwotCWFzc2VydChjb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9PSBlZGF0 YV9zdGF0ZV9nZXQoZWRhdGEpKTsKLX0KLQotdm9pZAotZW1hcF9kb19hc3NlcnRfbm90X21hcHBl ZCh0c2RuX3QgKnRzZG4sIGVtYXBfdCAqZW1hcCwgZWRhdGFfdCAqZWRhdGEpIHsKLQllbWFwX2Z1 bGxfYWxsb2NfY3R4X3QgY29udGV4dDEgPSB7MH07Ci0JZW1hcF9mdWxsX2FsbG9jX2N0eF90cnlf bG9va3VwKHRzZG4sIGVtYXAsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKLQkgICAgJmNvbnRleHQx KTsKLQlhc3NlcnQoY29udGV4dDEuZWRhdGEgPT0gTlVMTCk7Ci0KLQllbWFwX2Z1bGxfYWxsb2Nf Y3R4X3QgY29udGV4dDIgPSB7MH07Ci0JZW1hcF9mdWxsX2FsbG9jX2N0eF90cnlfbG9va3VwKHRz ZG4sIGVtYXAsIGVkYXRhX2xhc3RfZ2V0KGVkYXRhKSwKLQkgICAgJmNvbnRleHQyKTsKLQlhc3Nl cnQoY29udGV4dDIuZWRhdGEgPT0gTlVMTCk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2VzZXQuYyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9lc2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDZmOGYzMzUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvc3JjL2VzZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDI4MiArMCwwIEBACi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZXNldC5oIgotCi0jZGVmaW5lIEVTRVRfTlBTSVpFUyAo U0NfTlBTSVpFUyArIDEpCi0KLXN0YXRpYyB2b2lkCi1lc2V0X2Jpbl9pbml0KGVzZXRfYmluX3Qg KmJpbikgewotCWVkYXRhX2hlYXBfbmV3KCZiaW4tPmhlYXApOwotCS8qCi0JICogaGVhcF9taW4g ZG9lc24ndCBuZWVkIGluaXRpYWxpemF0aW9uOyBpdCBnZXRzIGZpbGxlZCBpbiB3aGVuIHRoZSBi aW4KLQkgKiBnb2VzIGZyb20gbm9uLWVtcHR5IHRvIGVtcHR5LgotCSAqLwotfQotCi1zdGF0aWMg dm9pZAotZXNldF9iaW5fc3RhdHNfaW5pdChlc2V0X2Jpbl9zdGF0c190ICpiaW5fc3RhdHMpIHsK LQlhdG9taWNfc3RvcmVfenUoJmJpbl9zdGF0cy0+bmV4dGVudHMsIDAsIEFUT01JQ19SRUxBWEVE KTsKLQlhdG9taWNfc3RvcmVfenUoJmJpbl9zdGF0cy0+bmJ5dGVzLCAwLCBBVE9NSUNfUkVMQVhF RCk7Ci19Ci0KLXZvaWQKLWVzZXRfaW5pdChlc2V0X3QgKmVzZXQsIGV4dGVudF9zdGF0ZV90IHN0 YXRlKSB7Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEVTRVRfTlBTSVpFUzsgaSsrKSB7Ci0J CWVzZXRfYmluX2luaXQoJmVzZXQtPmJpbnNbaV0pOwotCQllc2V0X2Jpbl9zdGF0c19pbml0KCZl c2V0LT5iaW5fc3RhdHNbaV0pOwotCX0KLQlmYl9pbml0KGVzZXQtPmJpdG1hcCwgRVNFVF9OUFNJ WkVTKTsKLQllZGF0YV9saXN0X2luYWN0aXZlX2luaXQoJmVzZXQtPmxydSk7Ci0JZXNldC0+c3Rh dGUgPSBzdGF0ZTsKLX0KLQotc2l6ZV90Ci1lc2V0X25wYWdlc19nZXQoZXNldF90ICplc2V0KSB7 Ci0JcmV0dXJuIGF0b21pY19sb2FkX3p1KCZlc2V0LT5ucGFnZXMsIEFUT01JQ19SRUxBWEVEKTsK LX0KLQotc2l6ZV90Ci1lc2V0X25leHRlbnRzX2dldChlc2V0X3QgKmVzZXQsIHBzemluZF90IHBp bmQpIHsKLQlyZXR1cm4gYXRvbWljX2xvYWRfenUoJmVzZXQtPmJpbl9zdGF0c1twaW5kXS5uZXh0 ZW50cywgQVRPTUlDX1JFTEFYRUQpOwotfQotCi1zaXplX3QKLWVzZXRfbmJ5dGVzX2dldChlc2V0 X3QgKmVzZXQsIHBzemluZF90IHBpbmQpIHsKLQlyZXR1cm4gYXRvbWljX2xvYWRfenUoJmVzZXQt PmJpbl9zdGF0c1twaW5kXS5uYnl0ZXMsIEFUT01JQ19SRUxBWEVEKTsKLX0KLQotc3RhdGljIHZv aWQKLWVzZXRfc3RhdHNfYWRkKGVzZXRfdCAqZXNldCwgcHN6aW5kX3QgcGluZCwgc2l6ZV90IHN6 KSB7Ci0Jc2l6ZV90IGN1ciA9IGF0b21pY19sb2FkX3p1KCZlc2V0LT5iaW5fc3RhdHNbcGluZF0u bmV4dGVudHMsCi0JICAgIEFUT01JQ19SRUxBWEVEKTsKLQlhdG9taWNfc3RvcmVfenUoJmVzZXQt PmJpbl9zdGF0c1twaW5kXS5uZXh0ZW50cywgY3VyICsgMSwKLQkgICAgQVRPTUlDX1JFTEFYRUQp OwotCWN1ciA9IGF0b21pY19sb2FkX3p1KCZlc2V0LT5iaW5fc3RhdHNbcGluZF0ubmJ5dGVzLCBB VE9NSUNfUkVMQVhFRCk7Ci0JYXRvbWljX3N0b3JlX3p1KCZlc2V0LT5iaW5fc3RhdHNbcGluZF0u bmJ5dGVzLCBjdXIgKyBzeiwKLQkgICAgQVRPTUlDX1JFTEFYRUQpOwotfQotCi1zdGF0aWMgdm9p ZAotZXNldF9zdGF0c19zdWIoZXNldF90ICplc2V0LCBwc3ppbmRfdCBwaW5kLCBzaXplX3Qgc3op IHsKLQlzaXplX3QgY3VyID0gYXRvbWljX2xvYWRfenUoJmVzZXQtPmJpbl9zdGF0c1twaW5kXS5u ZXh0ZW50cywKLQkgICAgQVRPTUlDX1JFTEFYRUQpOwotCWF0b21pY19zdG9yZV96dSgmZXNldC0+ YmluX3N0YXRzW3BpbmRdLm5leHRlbnRzLCBjdXIgLSAxLAotCSAgICBBVE9NSUNfUkVMQVhFRCk7 Ci0JY3VyID0gYXRvbWljX2xvYWRfenUoJmVzZXQtPmJpbl9zdGF0c1twaW5kXS5uYnl0ZXMsIEFU T01JQ19SRUxBWEVEKTsKLQlhdG9taWNfc3RvcmVfenUoJmVzZXQtPmJpbl9zdGF0c1twaW5kXS5u Ynl0ZXMsIGN1ciAtIHN6LAotCSAgICBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLXZvaWQKLWVzZXRf aW5zZXJ0KGVzZXRfdCAqZXNldCwgZWRhdGFfdCAqZWRhdGEpIHsKLQlhc3NlcnQoZWRhdGFfc3Rh dGVfZ2V0KGVkYXRhKSA9PSBlc2V0LT5zdGF0ZSk7Ci0KLQlzaXplX3Qgc2l6ZSA9IGVkYXRhX3Np emVfZ2V0KGVkYXRhKTsKLQlzaXplX3QgcHN6ID0gc3pfcHN6X3F1YW50aXplX2Zsb29yKHNpemUp OwotCXBzemluZF90IHBpbmQgPSBzel9wc3oyaW5kKHBzeik7Ci0KLQllZGF0YV9jbXBfc3VtbWFy eV90IGVkYXRhX2NtcF9zdW1tYXJ5ID0gZWRhdGFfY21wX3N1bW1hcnlfZ2V0KGVkYXRhKTsKLQlp ZiAoZWRhdGFfaGVhcF9lbXB0eSgmZXNldC0+Ymluc1twaW5kXS5oZWFwKSkgewotCQlmYl9zZXQo ZXNldC0+Yml0bWFwLCBFU0VUX05QU0laRVMsIChzaXplX3QpcGluZCk7Ci0JCS8qIE9ubHkgZWxl bWVudCBpcyBhdXRvbWF0aWNhbGx5IHRoZSBtaW4gZWxlbWVudC4gKi8KLQkJZXNldC0+Ymluc1tw aW5kXS5oZWFwX21pbiA9IGVkYXRhX2NtcF9zdW1tYXJ5OwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAq IFRoZXJlJ3MgYWxyZWFkeSBhIG1pbiBlbGVtZW50OyB1cGRhdGUgdGhlIHN1bW1hcnkgaWYgd2Un cmUKLQkJICogYWJvdXQgdG8gaW5zZXJ0IGEgbG93ZXIgb25lLgotCQkgKi8KLQkJaWYgKGVkYXRh X2NtcF9zdW1tYXJ5X2NvbXAoZWRhdGFfY21wX3N1bW1hcnksCi0JCSAgICBlc2V0LT5iaW5zW3Bp bmRdLmhlYXBfbWluKSA8IDApIHsKLQkJCWVzZXQtPmJpbnNbcGluZF0uaGVhcF9taW4gPSBlZGF0 YV9jbXBfc3VtbWFyeTsKLQkJfQotCX0KLQllZGF0YV9oZWFwX2luc2VydCgmZXNldC0+Ymluc1tw aW5kXS5oZWFwLCBlZGF0YSk7Ci0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWVzZXRfc3RhdHNf YWRkKGVzZXQsIHBpbmQsIHNpemUpOwotCX0KLQotCWVkYXRhX2xpc3RfaW5hY3RpdmVfYXBwZW5k KCZlc2V0LT5scnUsIGVkYXRhKTsKLQlzaXplX3QgbnBhZ2VzID0gc2l6ZSA+PiBMR19QQUdFOwot CS8qCi0JICogQWxsIG1vZGlmaWNhdGlvbnMgdG8gbnBhZ2VzIGhvbGQgdGhlIG11dGV4IChhcyBh c3NlcnRlZCBhYm92ZSksIHNvIHdlCi0JICogZG9uJ3QgbmVlZCBhbiBhdG9taWMgZmV0Y2gtYWRk OyB3ZSBjYW4gZ2V0IGJ5IHdpdGggYSBsb2FkIGZvbGxvd2VkIGJ5Ci0JICogYSBzdG9yZS4KLQkg Ki8KLQlzaXplX3QgY3VyX2VzZXRfbnBhZ2VzID0KLQkgICAgYXRvbWljX2xvYWRfenUoJmVzZXQt Pm5wYWdlcywgQVRPTUlDX1JFTEFYRUQpOwotCWF0b21pY19zdG9yZV96dSgmZXNldC0+bnBhZ2Vz LCBjdXJfZXNldF9ucGFnZXMgKyBucGFnZXMsCi0JICAgIEFUT01JQ19SRUxBWEVEKTsKLX0KLQot dm9pZAotZXNldF9yZW1vdmUoZXNldF90ICplc2V0LCBlZGF0YV90ICplZGF0YSkgewotCWFzc2Vy dChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGVzZXQtPnN0YXRlIHx8Ci0JICAgIGVkYXRhX3N0 YXRlX2luX3RyYW5zaXRpb24oZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSkpOwotCi0Jc2l6ZV90IHNp emUgPSBlZGF0YV9zaXplX2dldChlZGF0YSk7Ci0Jc2l6ZV90IHBzeiA9IHN6X3Bzel9xdWFudGl6 ZV9mbG9vcihzaXplKTsKLQlwc3ppbmRfdCBwaW5kID0gc3pfcHN6MmluZChwc3opOwotCWlmIChj b25maWdfc3RhdHMpIHsKLQkJZXNldF9zdGF0c19zdWIoZXNldCwgcGluZCwgc2l6ZSk7Ci0JfQot Ci0JZWRhdGFfY21wX3N1bW1hcnlfdCBlZGF0YV9jbXBfc3VtbWFyeSA9IGVkYXRhX2NtcF9zdW1t YXJ5X2dldChlZGF0YSk7Ci0JZWRhdGFfaGVhcF9yZW1vdmUoJmVzZXQtPmJpbnNbcGluZF0uaGVh cCwgZWRhdGEpOwotCWlmIChlZGF0YV9oZWFwX2VtcHR5KCZlc2V0LT5iaW5zW3BpbmRdLmhlYXAp KSB7Ci0JCWZiX3Vuc2V0KGVzZXQtPmJpdG1hcCwgRVNFVF9OUFNJWkVTLCAoc2l6ZV90KXBpbmQp OwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFRoaXMgaXMgYSBsaXR0bGUgd2VpcmQ7IHdlIGNvbXBh cmUgaWYgdGhlIHN1bW1hcmllcyBhcmUKLQkJICogZXF1YWwsIHJhdGhlciB0aGFuIGlmIHRoZSBl ZGF0YSB3ZSByZW1vdmVkIHdhcyB0aGUgaGVhcAotCQkgKiBtaW5pbXVtLiAgVGhlIHJlYXNvbiB3 aHkgaXMgdGhhdCBnZXR0aW5nIHRoZSBoZWFwIG1pbmltdW0KLQkJICogY2FuIGNhdXNlIGEgcGFp cmluZyBoZWFwIG1lcmdlIG9wZXJhdGlvbi4gIFdlIGNhbiBhdm9pZCB0aGlzCi0JCSAqIGlmIHdl IG9ubHkgdXBkYXRlIHRoZSBtaW4gaWYgaXQncyBjaGFuZ2VkLCBpbiB3aGljaCBjYXNlIHRoZQot CQkgKiBzdW1tYXJpZXMgb2YgdGhlIHJlbW92ZWQgZWxlbWVudCBhbmQgdGhlIG1pbiBlbGVtZW50 IHNob3VsZAotCQkgKiBjb21wYXJlIGVxdWFsLgotCQkgKi8KLQkJaWYgKGVkYXRhX2NtcF9zdW1t YXJ5X2NvbXAoZWRhdGFfY21wX3N1bW1hcnksCi0JCSAgICBlc2V0LT5iaW5zW3BpbmRdLmhlYXBf bWluKSA9PSAwKSB7Ci0JCQllc2V0LT5iaW5zW3BpbmRdLmhlYXBfbWluID0gZWRhdGFfY21wX3N1 bW1hcnlfZ2V0KAotCQkJICAgIGVkYXRhX2hlYXBfZmlyc3QoJmVzZXQtPmJpbnNbcGluZF0uaGVh cCkpOwotCQl9Ci0JfQotCWVkYXRhX2xpc3RfaW5hY3RpdmVfcmVtb3ZlKCZlc2V0LT5scnUsIGVk YXRhKTsKLQlzaXplX3QgbnBhZ2VzID0gc2l6ZSA+PiBMR19QQUdFOwotCS8qCi0JICogQXMgaW4g ZXNldF9pbnNlcnQsIHdlIGhvbGQgZXNldC0+bXR4IGFuZCBzbyBkb24ndCBuZWVkIGF0b21pYwot CSAqIG9wZXJhdGlvbnMgZm9yIHVwZGF0aW5nIGVzZXQtPm5wYWdlcy4KLQkgKi8KLQlzaXplX3Qg Y3VyX2V4dGVudHNfbnBhZ2VzID0KLQkgICAgYXRvbWljX2xvYWRfenUoJmVzZXQtPm5wYWdlcywg QVRPTUlDX1JFTEFYRUQpOwotCWFzc2VydChjdXJfZXh0ZW50c19ucGFnZXMgPj0gbnBhZ2VzKTsK LQlhdG9taWNfc3RvcmVfenUoJmVzZXQtPm5wYWdlcywKLQkgICAgY3VyX2V4dGVudHNfbnBhZ2Vz IC0gKHNpemUgPj4gTEdfUEFHRSksIEFUT01JQ19SRUxBWEVEKTsKLX0KLQotLyoKLSAqIEZpbmQg YW4gZXh0ZW50IHdpdGggc2l6ZSBbbWluX3NpemUsIG1heF9zaXplKSB0byBzYXRpc2Z5IHRoZSBh bGlnbm1lbnQKLSAqIHJlcXVpcmVtZW50LiAgRm9yIGVhY2ggc2l6ZSwgdHJ5IG9ubHkgdGhlIGZp cnN0IGV4dGVudCBpbiB0aGUgaGVhcC4KLSAqLwotc3RhdGljIGVkYXRhX3QgKgotZXNldF9maXRf YWxpZ25tZW50KGVzZXRfdCAqZXNldCwgc2l6ZV90IG1pbl9zaXplLCBzaXplX3QgbWF4X3NpemUs Ci0gICAgc2l6ZV90IGFsaWdubWVudCkgewotICAgICAgICBwc3ppbmRfdCBwaW5kID0gc3pfcHN6 MmluZChzel9wc3pfcXVhbnRpemVfY2VpbChtaW5fc2l6ZSkpOwotICAgICAgICBwc3ppbmRfdCBw aW5kX21heCA9IHN6X3BzejJpbmQoc3pfcHN6X3F1YW50aXplX2NlaWwobWF4X3NpemUpKTsKLQot CWZvciAocHN6aW5kX3QgaSA9Ci0JICAgIChwc3ppbmRfdClmYl9mZnMoZXNldC0+Yml0bWFwLCBF U0VUX05QU0laRVMsIChzaXplX3QpcGluZCk7Ci0JICAgIGkgPCBwaW5kX21heDsKLQkgICAgaSA9 IChwc3ppbmRfdClmYl9mZnMoZXNldC0+Yml0bWFwLCBFU0VUX05QU0laRVMsIChzaXplX3QpaSAr IDEpKSB7Ci0JCWFzc2VydChpIDwgU0NfTlBTSVpFUyk7Ci0JCWFzc2VydCghZWRhdGFfaGVhcF9l bXB0eSgmZXNldC0+Ymluc1tpXS5oZWFwKSk7Ci0JCWVkYXRhX3QgKmVkYXRhID0gZWRhdGFfaGVh cF9maXJzdCgmZXNldC0+Ymluc1tpXS5oZWFwKTsKLQkJdWludHB0cl90IGJhc2UgPSAodWludHB0 cl90KWVkYXRhX2Jhc2VfZ2V0KGVkYXRhKTsKLQkJc2l6ZV90IGNhbmRpZGF0ZV9zaXplID0gZWRh dGFfc2l6ZV9nZXQoZWRhdGEpOwotCQlhc3NlcnQoY2FuZGlkYXRlX3NpemUgPj0gbWluX3NpemUp OwotCi0JCXVpbnRwdHJfdCBuZXh0X2FsaWduID0gQUxJR05NRU5UX0NFSUxJTkcoKHVpbnRwdHJf dCliYXNlLAotCQkgICAgUEFHRV9DRUlMSU5HKGFsaWdubWVudCkpOwotCQlpZiAoYmFzZSA+IG5l eHRfYWxpZ24gfHwgYmFzZSArIGNhbmRpZGF0ZV9zaXplIDw9IG5leHRfYWxpZ24pIHsKLQkJCS8q IE92ZXJmbG93IG9yIG5vdCBjcm9zc2luZyB0aGUgbmV4dCBhbGlnbm1lbnQuICovCi0JCQljb250 aW51ZTsKLQkJfQotCi0JCXNpemVfdCBsZWFkc2l6ZSA9IG5leHRfYWxpZ24gLSBiYXNlOwotCQlp ZiAoY2FuZGlkYXRlX3NpemUgLSBsZWFkc2l6ZSA+PSBtaW5fc2l6ZSkgewotCQkJcmV0dXJuIGVk YXRhOwotCQl9Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBEbyBmaXJzdC1maXQg ZXh0ZW50IHNlbGVjdGlvbiwgaS5lLiBzZWxlY3QgdGhlIG9sZGVzdC9sb3dlc3QgZXh0ZW50IHRo YXQgaXMKLSAqIGxhcmdlIGVub3VnaC4KLSAqCi0gKiBsZ19tYXhfZml0IGlzIHRoZSAobG9nIG9m IHRoZSkgbWF4aW11bSByYXRpbyBiZXR3ZWVuIHRoZSByZXF1ZXN0ZWQgc2l6ZSBhbmQKLSAqIHRo ZSByZXR1cm5lZCBzaXplIHRoYXQgd2UnbGwgYWxsb3cuICBUaGlzIGNhbiByZWR1Y2UgZnJhZ21l bnRhdGlvbiBieQotICogYXZvaWRpbmcgcmV1c2luZyBhbmQgc3BsaXR0aW5nIGxhcmdlIGV4dGVu dHMgZm9yIHNtYWxsZXIgc2l6ZXMuICBJbiBwcmFjdGljZSwKLSAqIGl0J3Mgc2V0IHRvIG9wdF9s Z19leHRlbnRfbWF4X2FjdGl2ZV9maXQgZm9yIHRoZSBkaXJ0eSBlc2V0IGFuZCBTQ19QVFJfQklU UwotICogZm9yIG90aGVycy4KLSAqLwotc3RhdGljIGVkYXRhX3QgKgotZXNldF9maXJzdF9maXQo ZXNldF90ICplc2V0LCBzaXplX3Qgc2l6ZSwgYm9vbCBleGFjdF9vbmx5LAotICAgIHVuc2lnbmVk IGxnX21heF9maXQpIHsKLQllZGF0YV90ICpyZXQgPSBOVUxMOwotCWVkYXRhX2NtcF9zdW1tYXJ5 X3QgcmV0X3N1bW0gSkVNQUxMT0NfQ0NfU0lMRU5DRV9JTklUKHswfSk7Ci0KLQlwc3ppbmRfdCBw aW5kID0gc3pfcHN6MmluZChzel9wc3pfcXVhbnRpemVfY2VpbChzaXplKSk7Ci0KLQlpZiAoZXhh Y3Rfb25seSkgewotCQlyZXR1cm4gZWRhdGFfaGVhcF9lbXB0eSgmZXNldC0+Ymluc1twaW5kXS5o ZWFwKSA/IE5VTEwgOgotCQkgICAgZWRhdGFfaGVhcF9maXJzdCgmZXNldC0+Ymluc1twaW5kXS5o ZWFwKTsKLQl9Ci0KLQlmb3IgKHBzemluZF90IGkgPQotCSAgICAocHN6aW5kX3QpZmJfZmZzKGVz ZXQtPmJpdG1hcCwgRVNFVF9OUFNJWkVTLCAoc2l6ZV90KXBpbmQpOwotCSAgICBpIDwgRVNFVF9O UFNJWkVTOwotCSAgICBpID0gKHBzemluZF90KWZiX2Zmcyhlc2V0LT5iaXRtYXAsIEVTRVRfTlBT SVpFUywgKHNpemVfdClpICsgMSkpIHsKLQkJYXNzZXJ0KCFlZGF0YV9oZWFwX2VtcHR5KCZlc2V0 LT5iaW5zW2ldLmhlYXApKTsKLQkJaWYgKGxnX21heF9maXQgPT0gU0NfUFRSX0JJVFMpIHsKLQkJ CS8qCi0JCQkgKiBXZSdsbCBzaGlmdCBieSB0aGlzIGJlbG93LCBhbmQgc2hpZnRpbmcgb3V0IGFs bCB0aGUKLQkJCSAqIGJpdHMgaXMgdW5kZWZpbmVkLiAgRGVjcmVhc2luZyBpcyBzYWZlLCBzaW5j ZSB0aGUKLQkJCSAqIHBhZ2Ugc2l6ZSBpcyBsYXJnZXIgdGhhbiAxIGJ5dGUuCi0JCQkgKi8KLQkJ CWxnX21heF9maXQgPSBTQ19QVFJfQklUUyAtIDE7Ci0JCX0KLQkJaWYgKChzel9waW5kMnN6KGkp ID4+IGxnX21heF9maXQpID4gc2l6ZSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHJldCA9PSBO VUxMIHx8IGVkYXRhX2NtcF9zdW1tYXJ5X2NvbXAoCi0JCSAgICBlc2V0LT5iaW5zW2ldLmhlYXBf bWluLCByZXRfc3VtbSkgPCAwKSB7Ci0JCQkvKgotCQkJICogV2UgZ3JhYiB0aGUgZWRhdGEgYXMg ZWFybHkgYXMgcG9zc2libGUsIGV2ZW4gdGhvdWdoCi0JCQkgKiB3ZSBtaWdodCBjaGFuZ2UgaXQg bGF0ZXIuICBQcmFjdGljYWxseSwgYSBsYXJnZQotCQkJICogcG9ydGlvbiBvZiBlc2V0X2ZpdCBj YWxscyBzdWNjZWVkIGF0IHRoZSBmaXJzdCB2YWxpZAotCQkJICogaW5kZXgsIHNvIHRoaXMgZG9l c24ndCBjb3N0IG11Y2gsIGFuZCB3ZSBnZXQgdGhlCi0JCQkgKiBlZmZlY3Qgb2YgcHJlZmV0Y2hp bmcgdGhlIGVkYXRhIGFzIGVhcmx5IGFzIHBvc3NpYmxlLgotCQkJICovCi0JCQllZGF0YV90ICpl ZGF0YSA9IGVkYXRhX2hlYXBfZmlyc3QoJmVzZXQtPmJpbnNbaV0uaGVhcCk7Ci0JCQlhc3NlcnQo ZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID49IHNpemUpOwotCQkJYXNzZXJ0KHJldCA9PSBOVUxMIHx8 IGVkYXRhX3NuYWRfY29tcChlZGF0YSwgcmV0KSA8IDApOwotCQkJYXNzZXJ0KHJldCA9PSBOVUxM IHx8IGVkYXRhX2NtcF9zdW1tYXJ5X2NvbXAoCi0JCQkgICAgZXNldC0+Ymluc1tpXS5oZWFwX21p biwKLQkJCSAgICBlZGF0YV9jbXBfc3VtbWFyeV9nZXQoZWRhdGEpKSA9PSAwKTsKLQkJCXJldCA9 IGVkYXRhOwotCQkJcmV0X3N1bW0gPSBlc2V0LT5iaW5zW2ldLmhlYXBfbWluOwotCQl9Ci0JCWlm IChpID09IFNDX05QU0laRVMpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWFzc2VydChpIDwgU0NfTlBT SVpFUyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotZWRhdGFfdCAqCi1lc2V0X2ZpdChlc2V0 X3QgKmVzZXQsIHNpemVfdCBlc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCBleGFjdF9vbmx5 LAotICAgIHVuc2lnbmVkIGxnX21heF9maXQpIHsKLQlzaXplX3QgbWF4X3NpemUgPSBlc2l6ZSAr IFBBR0VfQ0VJTElORyhhbGlnbm1lbnQpIC0gUEFHRTsKLQkvKiBCZXdhcmUgc2l6ZV90IHdyYXAt YXJvdW5kLiAqLwotCWlmIChtYXhfc2l6ZSA8IGVzaXplKSB7Ci0JCXJldHVybiBOVUxMOwotCX0K LQotCWVkYXRhX3QgKmVkYXRhID0gZXNldF9maXJzdF9maXQoZXNldCwgbWF4X3NpemUsIGV4YWN0 X29ubHksIGxnX21heF9maXQpOwotCi0JaWYgKGFsaWdubWVudCA+IFBBR0UgJiYgZWRhdGEgPT0g TlVMTCkgewotCQkvKgotCQkgKiBtYXhfc2l6ZSBndWFyYW50ZWVzIHRoZSBhbGlnbm1lbnQgcmVx dWlyZW1lbnQgYnV0IGlzIHJhdGhlcgotCQkgKiBwZXNzaW1pc3RpYy4gIE5leHQgd2UgdHJ5IHRv IHNhdGlzZnkgdGhlIGFsaWduZWQgYWxsb2NhdGlvbgotCQkgKiB3aXRoIHNpemVzIGluIFtlc2l6 ZSwgbWF4X3NpemUpLgotCQkgKi8KLQkJZWRhdGEgPSBlc2V0X2ZpdF9hbGlnbm1lbnQoZXNldCwg ZXNpemUsIG1heF9zaXplLCBhbGlnbm1lbnQpOwotCX0KLQotCXJldHVybiBlZGF0YTsKLX0KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZXhw X2dyb3cuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9leHBf Z3Jvdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODY0NzFmLi4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9leHBfZ3Jvdy5j CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi12b2lkCi1leHBfZ3Jvd19pbml0KGV4cF9ncm93 X3QgKmV4cF9ncm93KSB7Ci0JZXhwX2dyb3ctPm5leHQgPSBzel9wc3oyaW5kKEhVR0VQQUdFKTsK LQlleHBfZ3Jvdy0+bGltaXQgPSBzel9wc3oyaW5kKFNDX0xBUkdFX01BWENMQVNTKTsKLX0KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZXh0 ZW50LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZXh0ZW50 LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmM2QxZjMuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2V4dGVudC5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTMyNiArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv amVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxv Y19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNz ZXJ0LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1hcC5oIgotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2V4dGVudF9kc3MuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9leHRlbnRfbW1hcC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BoLmgiCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXguaCIKLQotLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLS8qIERhdGEuICovCi0KLXNpemVfdCBvcHRfbGdfZXh0ZW50X21heF9hY3RpdmVfZml0ID0g TEdfRVhURU5UX01BWF9BQ1RJVkVfRklUX0RFRkFVTFQ7Ci0KLXN0YXRpYyBib29sIGV4dGVudF9j b21taXRfaW1wbCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRh LAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIGJvb2wgZ3Jvd2luZ19yZXRhaW5l ZCk7Ci1zdGF0aWMgYm9vbCBleHRlbnRfcHVyZ2VfbGF6eV9pbXBsKHRzZG5fdCAqdHNkbiwgZWhv b2tzX3QgKmVob29rcywKLSAgICBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90 IGxlbmd0aCwgYm9vbCBncm93aW5nX3JldGFpbmVkKTsKLXN0YXRpYyBib29sIGV4dGVudF9wdXJn ZV9mb3JjZWRfaW1wbCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsCi0gICAgZWRhdGFf dCAqZWRhdGEsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIGJvb2wgZ3Jvd2luZ19yZXRh aW5lZCk7Ci1zdGF0aWMgZWRhdGFfdCAqZXh0ZW50X3NwbGl0X2ltcGwodHNkbl90ICp0c2RuLCBw YWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAotICAgIGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qg c2l6ZV9hLCBzaXplX3Qgc2l6ZV9iLCBib29sIGhvbGRpbmdfY29yZV9sb2Nrcyk7Ci1zdGF0aWMg Ym9vbCBleHRlbnRfbWVyZ2VfaW1wbCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190 ICplaG9va3MsCi0gICAgZWRhdGFfdCAqYSwgZWRhdGFfdCAqYiwgYm9vbCBob2xkaW5nX2NvcmVf bG9ja3MpOwotCi0vKiBVc2VkIGV4Y2x1c2l2ZWx5IGZvciBnZHVtcCB0cmlnZ2VyaW5nLiAqLwot c3RhdGljIGF0b21pY196dV90IGN1cnBhZ2VzOwotc3RhdGljIGF0b21pY196dV90IGhpZ2hwYWdl czsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBGdW5jdGlvbiBwcm90b3R5cGVz IGZvciBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlZmVyZW5jZWQgcHJpb3IgdG8KLSAqIGRl ZmluaXRpb24uCi0gKi8KLQotc3RhdGljIHZvaWQgZXh0ZW50X2RlcmVnaXN0ZXIodHNkbl90ICp0 c2RuLCBwYWNfdCAqcGFjLCBlZGF0YV90ICplZGF0YSk7Ci1zdGF0aWMgZWRhdGFfdCAqZXh0ZW50 X3JlY3ljbGUodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAotICAg IGVjYWNoZV90ICplY2FjaGUsIGVkYXRhX3QgKmV4cGFuZF9lZGF0YSwgc2l6ZV90IHVzaXplLCBz aXplX3QgYWxpZ25tZW50LAotICAgIGJvb2wgemVybywgYm9vbCAqY29tbWl0LCBib29sIGdyb3dp bmdfcmV0YWluZWQsIGJvb2wgZ3VhcmRlZCk7Ci1zdGF0aWMgZWRhdGFfdCAqZXh0ZW50X3RyeV9j b2FsZXNjZSh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCi0gICAg ZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZWRhdGEsIGJvb2wgKmNvYWxlc2NlZCk7Ci1zdGF0 aWMgZWRhdGFfdCAqZXh0ZW50X2FsbG9jX3JldGFpbmVkKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBh YywKLSAgICBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICpleHBhbmRfZWRhdGEsIHNpemVfdCBz aXplLCBzaXplX3QgYWxpZ25tZW50LAotICAgIGJvb2wgemVybywgYm9vbCAqY29tbWl0LCBib29s IGd1YXJkZWQpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zaXplX3QKLWV4dGVudF9z bl9uZXh0KHBhY190ICpwYWMpIHsKLQlyZXR1cm4gYXRvbWljX2ZldGNoX2FkZF96dSgmcGFjLT5l eHRlbnRfc25fbmV4dCwgMSwgQVRPTUlDX1JFTEFYRUQpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv b2wKLWV4dGVudF9tYXlfZm9yY2VfZGVjYXkocGFjX3QgKnBhYykgewotCXJldHVybiAhKHBhY19k ZWNheV9tc19nZXQocGFjLCBleHRlbnRfc3RhdGVfZGlydHkpID09IC0xCi0JICAgIHx8IHBhY19k ZWNheV9tc19nZXQocGFjLCBleHRlbnRfc3RhdGVfbXV6enkpID09IC0xKTsKLX0KLQotc3RhdGlj IGJvb2wKLWV4dGVudF90cnlfZGVsYXllZF9jb2FsZXNjZSh0c2RuX3QgKnRzZG4sIHBhY190ICpw YWMsIGVob29rc190ICplaG9va3MsCi0gICAgZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZWRh dGEpIHsKLQllbWFwX3VwZGF0ZV9lZGF0YV9zdGF0ZSh0c2RuLCBwYWMtPmVtYXAsIGVkYXRhLCBl eHRlbnRfc3RhdGVfYWN0aXZlKTsKLQotCWJvb2wgY29hbGVzY2VkOwotCWVkYXRhID0gZXh0ZW50 X3RyeV9jb2FsZXNjZSh0c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLAotCSAgICBlZGF0YSwgJmNv YWxlc2NlZCk7Ci0JZW1hcF91cGRhdGVfZWRhdGFfc3RhdGUodHNkbiwgcGFjLT5lbWFwLCBlZGF0 YSwgZWNhY2hlLT5zdGF0ZSk7Ci0KLQlpZiAoIWNvYWxlc2NlZCkgewotCQlyZXR1cm4gdHJ1ZTsK LQl9Ci0JZXNldF9pbnNlcnQoJmVjYWNoZS0+ZXNldCwgZWRhdGEpOwotCXJldHVybiBmYWxzZTsK LX0KLQotZWRhdGFfdCAqCi1lY2FjaGVfYWxsb2ModHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBl aG9va3NfdCAqZWhvb2tzLCBlY2FjaGVfdCAqZWNhY2hlLAotICAgIGVkYXRhX3QgKmV4cGFuZF9l ZGF0YSwgc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywKLSAgICBib29s IGd1YXJkZWQpIHsKLQlhc3NlcnQoc2l6ZSAhPSAwKTsKLQlhc3NlcnQoYWxpZ25tZW50ICE9IDAp OwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRz ZG4pLAotCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7Ci0KLQlib29sIGNvbW1pdCA9IHRydWU7 Ci0JZWRhdGFfdCAqZWRhdGEgPSBleHRlbnRfcmVjeWNsZSh0c2RuLCBwYWMsIGVob29rcywgZWNh Y2hlLCBleHBhbmRfZWRhdGEsCi0JICAgIHNpemUsIGFsaWdubWVudCwgemVybywgJmNvbW1pdCwg ZmFsc2UsIGd1YXJkZWQpOwotCWFzc2VydChlZGF0YSA9PSBOVUxMIHx8IGVkYXRhX3BhaV9nZXQo ZWRhdGEpID09IEVYVEVOVF9QQUlfUEFDKTsKLQlhc3NlcnQoZWRhdGEgPT0gTlVMTCB8fCBlZGF0 YV9ndWFyZGVkX2dldChlZGF0YSkgPT0gZ3VhcmRlZCk7Ci0JcmV0dXJuIGVkYXRhOwotfQotCi1l ZGF0YV90ICoKLWVjYWNoZV9hbGxvY19ncm93KHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhv b2tzX3QgKmVob29rcywgZWNhY2hlX3QgKmVjYWNoZSwKLSAgICBlZGF0YV90ICpleHBhbmRfZWRh dGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sCi0gICAgYm9vbCBn dWFyZGVkKSB7Ci0JYXNzZXJ0KHNpemUgIT0gMCk7Ci0JYXNzZXJ0KGFsaWdubWVudCAhPSAwKTsK LQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2Ru KSwKLQkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOwotCi0JYm9vbCBjb21taXQgPSB0cnVlOwot CWVkYXRhX3QgKmVkYXRhID0gZXh0ZW50X2FsbG9jX3JldGFpbmVkKHRzZG4sIHBhYywgZWhvb2tz LCBleHBhbmRfZWRhdGEsCi0JICAgIHNpemUsIGFsaWdubWVudCwgemVybywgJmNvbW1pdCwgZ3Vh cmRlZCk7Ci0JaWYgKGVkYXRhID09IE5VTEwpIHsKLQkJaWYgKG9wdF9yZXRhaW4gJiYgZXhwYW5k X2VkYXRhICE9IE5VTEwpIHsKLQkJCS8qCi0JCQkgKiBXaGVuIHJldGFpbiBpcyBlbmFibGVkIGFu ZCB0cnlpbmcgdG8gZXhwYW5kLCB3ZSBkbwotCQkJICogbm90IGF0dGVtcHQgZXh0ZW50X2FsbG9j X3dyYXBwZXIgd2hpY2ggZG9lcyBtbWFwIHRoYXQKLQkJCSAqIGlzIHZlcnkgdW5saWtlbHkgdG8g c3VjY2VlZCAodW5sZXNzIGl0IGhhcHBlbnMgdG8gYmUKLQkJCSAqIGF0IHRoZSBlbmQpLgotCQkJ ICovCi0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlpZiAoZ3VhcmRlZCkgewotCQkJLyoKLQkJCSAq IE1lYW5zIG5vIGNhY2hlZCBndWFyZGVkIGV4dGVudHMgYXZhaWxhYmxlIChhbmQgbm8KLQkJCSAq IGdyb3dfcmV0YWluZWQgd2FzIGF0dGVtcHRlZCkuICBUaGUgcGFjX2FsbG9jIGZsb3cKLQkJCSAq IHdpbGwgYWxsb2MgcmVndWxhciBleHRlbnRzIHRvIG1ha2UgbmV3IGd1YXJkZWQgb25lcy4KLQkJ CSAqLwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJdm9pZCAqbmV3X2FkZHIgPSAoZXhwYW5kX2Vk YXRhID09IE5VTEwpID8gTlVMTCA6Ci0JCSAgICBlZGF0YV9wYXN0X2dldChleHBhbmRfZWRhdGEp OwotCQllZGF0YSA9IGV4dGVudF9hbGxvY193cmFwcGVyKHRzZG4sIHBhYywgZWhvb2tzLCBuZXdf YWRkciwKLQkJICAgIHNpemUsIGFsaWdubWVudCwgemVybywgJmNvbW1pdCwKLQkJICAgIC8qIGdy b3dpbmdfcmV0YWluZWQgKi8gZmFsc2UpOwotCX0KLQotCWFzc2VydChlZGF0YSA9PSBOVUxMIHx8 IGVkYXRhX3BhaV9nZXQoZWRhdGEpID09IEVYVEVOVF9QQUlfUEFDKTsKLQlyZXR1cm4gZWRhdGE7 Ci19Ci0KLXZvaWQKLWVjYWNoZV9kYWxsb2ModHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9v a3NfdCAqZWhvb2tzLCBlY2FjaGVfdCAqZWNhY2hlLAotICAgIGVkYXRhX3QgKmVkYXRhKSB7Ci0J YXNzZXJ0KGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSAhPSBOVUxMKTsKLQlhc3NlcnQoZWRhdGFfc2l6 ZV9nZXQoZWRhdGEpICE9IDApOwotCWFzc2VydChlZGF0YV9wYWlfZ2V0KGVkYXRhKSA9PSBFWFRF TlRfUEFJX1BBQyk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3Nf dHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQotCWVkYXRhX2Fk ZHJfc2V0KGVkYXRhLCBlZGF0YV9iYXNlX2dldChlZGF0YSkpOwotCWVkYXRhX3plcm9lZF9zZXQo ZWRhdGEsIGZhbHNlKTsKLQotCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9va3MsIGVjYWNo ZSwgZWRhdGEpOwotfQotCi1lZGF0YV90ICoKLWVjYWNoZV9ldmljdCh0c2RuX3QgKnRzZG4sIHBh Y190ICpwYWMsIGVob29rc190ICplaG9va3MsCi0gICAgZWNhY2hlX3QgKmVjYWNoZSwgc2l6ZV90 IG5wYWdlc19taW4pIHsKLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZWNhY2hlLT5tdHgpOwot Ci0JLyoKLQkgKiBHZXQgdGhlIExSVSBjb2FsZXNjZWQgZXh0ZW50LCBpZiBhbnkuICBJZiBjb2Fs ZXNjaW5nIHdhcyBkZWxheWVkLAotCSAqIHRoZSBsb29wIHdpbGwgaXRlcmF0ZSB1bnRpbCB0aGUg TFJVIGV4dGVudCBpcyBmdWxseSBjb2FsZXNjZWQuCi0JICovCi0JZWRhdGFfdCAqZWRhdGE7Ci0J d2hpbGUgKHRydWUpIHsKLQkJLyogR2V0IHRoZSBMUlUgZXh0ZW50LCBpZiBhbnkuICovCi0JCWVz ZXRfdCAqZXNldCA9ICZlY2FjaGUtPmVzZXQ7Ci0JCWVkYXRhID0gZWRhdGFfbGlzdF9pbmFjdGl2 ZV9maXJzdCgmZXNldC0+bHJ1KTsKLQkJaWYgKGVkYXRhID09IE5VTEwpIHsKLQkJCS8qCi0JCQkg KiBOZXh0IGNoZWNrIGlmIHRoZXJlIGFyZSBndWFyZGVkIGV4dGVudHMuICBUaGV5IGFyZQotCQkJ ICogbW9yZSBleHBlbnNpdmUgdG8gcHVyZ2UgKHNpbmNlIHRoZXkgYXJlIG5vdAotCQkJICogbWVy Z2VhYmxlKSwgdGh1cyBpbiBmYXZvciBvZiBjYWNoaW5nIHRoZW0gbG9uZ2VyLgotCQkJICovCi0J CQllc2V0ID0gJmVjYWNoZS0+Z3VhcmRlZF9lc2V0OwotCQkJZWRhdGEgPSBlZGF0YV9saXN0X2lu YWN0aXZlX2ZpcnN0KCZlc2V0LT5scnUpOwotCQkJaWYgKGVkYXRhID09IE5VTEwpIHsKLQkJCQln b3RvIGxhYmVsX3JldHVybjsKLQkJCX0KLQkJfQotCQkvKiBDaGVjayB0aGUgZXZpY3Rpb24gbGlt aXQuICovCi0JCXNpemVfdCBleHRlbnRzX25wYWdlcyA9IGVjYWNoZV9ucGFnZXNfZ2V0KGVjYWNo ZSk7Ci0JCWlmIChleHRlbnRzX25wYWdlcyA8PSBucGFnZXNfbWluKSB7Ci0JCQllZGF0YSA9IE5V TEw7Ci0JCQlnb3RvIGxhYmVsX3JldHVybjsKLQkJfQotCQllc2V0X3JlbW92ZShlc2V0LCBlZGF0 YSk7Ci0JCWlmICghZWNhY2hlLT5kZWxheV9jb2FsZXNjZSB8fCBlZGF0YV9ndWFyZGVkX2dldChl ZGF0YSkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIFRyeSB0byBjb2FsZXNjZS4gKi8KLQkJaWYg KGV4dGVudF90cnlfZGVsYXllZF9jb2FsZXNjZSh0c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLAot CQkgICAgZWRhdGEpKSB7Ci0JCQlicmVhazsKLQkJfQotCQkvKgotCQkgKiBUaGUgTFJVIGV4dGVu dCB3YXMganVzdCBjb2FsZXNjZWQgYW5kIHRoZSByZXN1bHQgcGxhY2VkIGluCi0JCSAqIHRoZSBM UlUgYXQgaXRzIG5laWdoYm9yJ3MgcG9zaXRpb24uICBTdGFydCBvdmVyLgotCQkgKi8KLQl9Ci0K LQkvKgotCSAqIEVpdGhlciBtYXJrIHRoZSBleHRlbnQgYWN0aXZlIG9yIGRlcmVnaXN0ZXIgaXQg dG8gcHJvdGVjdCBhZ2FpbnN0Ci0JICogY29uY3VycmVudCBvcGVyYXRpb25zLgotCSAqLwotCXN3 aXRjaCAoZWNhY2hlLT5zdGF0ZSkgewotCWNhc2UgZXh0ZW50X3N0YXRlX2FjdGl2ZToKLQkJbm90 X3JlYWNoZWQoKTsKLQljYXNlIGV4dGVudF9zdGF0ZV9kaXJ0eToKLQljYXNlIGV4dGVudF9zdGF0 ZV9tdXp6eToKLQkJZW1hcF91cGRhdGVfZWRhdGFfc3RhdGUodHNkbiwgcGFjLT5lbWFwLCBlZGF0 YSwKLQkJICAgIGV4dGVudF9zdGF0ZV9hY3RpdmUpOwotCQlicmVhazsKLQljYXNlIGV4dGVudF9z dGF0ZV9yZXRhaW5lZDoKLQkJZXh0ZW50X2RlcmVnaXN0ZXIodHNkbiwgcGFjLCBlZGF0YSk7Ci0J CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5vdF9yZWFjaGVkKCk7Ci0JfQotCi1sYWJlbF9yZXR1cm46 Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZWNhY2hlLT5tdHgpOwotCXJldHVybiBlZGF0 YTsKLX0KLQotLyoKLSAqIFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdoZW4gd2UgZmFpbCB0byBhbGxv Y2F0ZSBhIG5ldyBleHRlbnQgc3RydWN0ICh3aGljaAotICogaW5kaWNhdGVzIE9PTSksIGUuZy4g d2hlbiB0cnlpbmcgdG8gc3BsaXQgYW4gZXhpc3RpbmcgZXh0ZW50LgotICovCi1zdGF0aWMgdm9p ZAotZXh0ZW50c19hYmFuZG9uX3ZtKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3Qg KmVob29rcywgZWNhY2hlX3QgKmVjYWNoZSwKLSAgICBlZGF0YV90ICplZGF0YSwgYm9vbCBncm93 aW5nX3JldGFpbmVkKSB7Ci0Jc2l6ZV90IHN6ID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOwotCWlm IChjb25maWdfc3RhdHMpIHsKLQkJYXRvbWljX2ZldGNoX2FkZF96dSgmcGFjLT5zdGF0cy0+YWJh bmRvbmVkX3ZtLCBzeiwKLQkJICAgIEFUT01JQ19SRUxBWEVEKTsKLQl9Ci0JLyoKLQkgKiBMZWFr IGV4dGVudCBhZnRlciBtYWtpbmcgc3VyZSBpdHMgcGFnZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcHVy Z2VkLCBzbwotCSAqIHRoYXQgdGhpcyBpcyBvbmx5IGEgdmlydHVhbCBtZW1vcnkgbGVhay4KLQkg Ki8KLQlpZiAoZWNhY2hlLT5zdGF0ZSA9PSBleHRlbnRfc3RhdGVfZGlydHkpIHsKLQkJaWYgKGV4 dGVudF9wdXJnZV9sYXp5X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0YSwgMCwgc3osCi0JCSAgICBn cm93aW5nX3JldGFpbmVkKSkgewotCQkJZXh0ZW50X3B1cmdlX2ZvcmNlZF9pbXBsKHRzZG4sIGVo b29rcywgZWRhdGEsIDAsCi0JCQkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBncm93aW5nX3Jl dGFpbmVkKTsKLQkJfQotCX0KLQllZGF0YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5lZGF0YV9jYWNo ZSwgZWRhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotZXh0ZW50X2RlYWN0aXZhdGVfbG9ja2VkX2lt cGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlY2FjaGVfdCAqZWNhY2hlLAotICAgIGVkYXRh X3QgKmVkYXRhKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmZWNhY2hlLT5t dHgpOwotCWFzc2VydChlZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRhKSA9PSBlY2FjaGVfaW5kX2dl dChlY2FjaGUpKTsKLQotCWVtYXBfdXBkYXRlX2VkYXRhX3N0YXRlKHRzZG4sIHBhYy0+ZW1hcCwg ZWRhdGEsIGVjYWNoZS0+c3RhdGUpOwotCWVzZXRfdCAqZXNldCA9IGVkYXRhX2d1YXJkZWRfZ2V0 KGVkYXRhKSA/ICZlY2FjaGUtPmd1YXJkZWRfZXNldCA6Ci0JICAgICZlY2FjaGUtPmVzZXQ7Ci0J ZXNldF9pbnNlcnQoZXNldCwgZWRhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotZXh0ZW50X2RlYWN0 aXZhdGVfbG9ja2VkKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWNhY2hlX3QgKmVjYWNoZSwK LSAgICBlZGF0YV90ICplZGF0YSkgewotCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09 IGV4dGVudF9zdGF0ZV9hY3RpdmUpOwotCWV4dGVudF9kZWFjdGl2YXRlX2xvY2tlZF9pbXBsKHRz ZG4sIHBhYywgZWNhY2hlLCBlZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1leHRlbnRfZGVhY3Rp dmF0ZV9jaGVja19zdGF0ZV9sb2NrZWQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlY2FjaGVf dCAqZWNhY2hlLAotICAgIGVkYXRhX3QgKmVkYXRhLCBleHRlbnRfc3RhdGVfdCBleHBlY3RlZF9z dGF0ZSkgewotCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGV4cGVjdGVkX3N0YXRl KTsKLQlleHRlbnRfZGVhY3RpdmF0ZV9sb2NrZWRfaW1wbCh0c2RuLCBwYWMsIGVjYWNoZSwgZWRh dGEpOwotfQotCi1zdGF0aWMgdm9pZAotZXh0ZW50X2FjdGl2YXRlX2xvY2tlZCh0c2RuX3QgKnRz ZG4sIHBhY190ICpwYWMsIGVjYWNoZV90ICplY2FjaGUsIGVzZXRfdCAqZXNldCwKLSAgICBlZGF0 YV90ICplZGF0YSkgewotCWFzc2VydChlZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRhKSA9PSBlY2Fj aGVfaW5kX2dldChlY2FjaGUpKTsKLQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBl Y2FjaGUtPnN0YXRlIHx8Ci0JICAgIGVkYXRhX3N0YXRlX2dldChlZGF0YSkgPT0gZXh0ZW50X3N0 YXRlX21lcmdpbmcpOwotCi0JZXNldF9yZW1vdmUoZXNldCwgZWRhdGEpOwotCWVtYXBfdXBkYXRl X2VkYXRhX3N0YXRlKHRzZG4sIHBhYy0+ZW1hcCwgZWRhdGEsIGV4dGVudF9zdGF0ZV9hY3RpdmUp OwotfQotCi12b2lkCi1leHRlbnRfZ2R1bXBfYWRkKHRzZG5fdCAqdHNkbiwgY29uc3QgZWRhdGFf dCAqZWRhdGEpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQkvKiBwcm9mX2dkdW1wKCkgcmVx dWlyZW1lbnQuICovCi0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3Nf dHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQotCWlmIChvcHRf cHJvZiAmJiBlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGV4dGVudF9zdGF0ZV9hY3RpdmUpIHsK LQkJc2l6ZV90IG5hZGQgPSBlZGF0YV9zaXplX2dldChlZGF0YSkgPj4gTEdfUEFHRTsKLQkJc2l6 ZV90IGN1ciA9IGF0b21pY19mZXRjaF9hZGRfenUoJmN1cnBhZ2VzLCBuYWRkLAotCQkgICAgQVRP TUlDX1JFTEFYRUQpICsgbmFkZDsKLQkJc2l6ZV90IGhpZ2ggPSBhdG9taWNfbG9hZF96dSgmaGln aHBhZ2VzLCBBVE9NSUNfUkVMQVhFRCk7Ci0JCXdoaWxlIChjdXIgPiBoaWdoICYmICFhdG9taWNf Y29tcGFyZV9leGNoYW5nZV93ZWFrX3p1KAotCQkgICAgJmhpZ2hwYWdlcywgJmhpZ2gsIGN1ciwg QVRPTUlDX1JFTEFYRUQsIEFUT01JQ19SRUxBWEVEKSkgewotCQkJLyoKLQkJCSAqIERvbid0IHJl ZnJlc2ggY3VyLCBiZWNhdXNlIGl0IG1heSBoYXZlIGRlY3JlYXNlZAotCQkJICogc2luY2UgdGhp cyB0aHJlYWQgbG9zdCB0aGUgaGlnaHBhZ2VzIHVwZGF0ZSByYWNlLgotCQkJICogTm90ZSB0aGF0 IGhpZ2ggaXMgdXBkYXRlZCBpbiBjYXNlIG9mIENBUyBmYWlsdXJlLgotCQkJICovCi0JCX0KLQkJ aWYgKGN1ciA+IGhpZ2ggJiYgcHJvZl9nZHVtcF9nZXRfdW5sb2NrZWQoKSkgewotCQkJcHJvZl9n ZHVtcCh0c2RuKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLWV4dGVudF9nZHVtcF9zdWIo dHNkbl90ICp0c2RuLCBjb25zdCBlZGF0YV90ICplZGF0YSkgewotCWNhc3NlcnQoY29uZmlnX3By b2YpOwotCi0JaWYgKG9wdF9wcm9mICYmIGVkYXRhX3N0YXRlX2dldChlZGF0YSkgPT0gZXh0ZW50 X3N0YXRlX2FjdGl2ZSkgewotCQlzaXplX3QgbnN1YiA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA+ PiBMR19QQUdFOwotCQlhc3NlcnQoYXRvbWljX2xvYWRfenUoJmN1cnBhZ2VzLCBBVE9NSUNfUkVM QVhFRCkgPj0gbnN1Yik7Ci0JCWF0b21pY19mZXRjaF9zdWJfenUoJmN1cnBhZ2VzLCBuc3ViLCBB VE9NSUNfUkVMQVhFRCk7Ci0JfQotfQotCi1zdGF0aWMgYm9vbAotZXh0ZW50X3JlZ2lzdGVyX2lt cGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlZGF0YV90ICplZGF0YSwgYm9vbCBnZHVtcF9h ZGQpIHsKLQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0 aXZlKTsKLQkvKgotCSAqIE5vIGxvY2tpbmcgbmVlZGVkLCBhcyB0aGUgZWRhdGEgbXVzdCBiZSBp biBhY3RpdmUgc3RhdGUsIHdoaWNoCi0JICogcHJldmVudHMgb3RoZXIgdGhyZWFkcyBmcm9tIGFj Y2Vzc2luZyB0aGUgZWRhdGEuCi0JICovCi0JaWYgKGVtYXBfcmVnaXN0ZXJfYm91bmRhcnkodHNk biwgcGFjLT5lbWFwLCBlZGF0YSwgU0NfTlNJWkVTLAotCSAgICAvKiBzbGFiICovIGZhbHNlKSkg ewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoY29uZmlnX3Byb2YgJiYgZ2R1bXBfYWRkKSB7 Ci0JCWV4dGVudF9nZHVtcF9hZGQodHNkbiwgZWRhdGEpOwotCX0KLQotCXJldHVybiBmYWxzZTsK LX0KLQotc3RhdGljIGJvb2wKLWV4dGVudF9yZWdpc3Rlcih0c2RuX3QgKnRzZG4sIHBhY190ICpw YWMsIGVkYXRhX3QgKmVkYXRhKSB7Ci0JcmV0dXJuIGV4dGVudF9yZWdpc3Rlcl9pbXBsKHRzZG4s IHBhYywgZWRhdGEsIHRydWUpOwotfQotCi1zdGF0aWMgYm9vbAotZXh0ZW50X3JlZ2lzdGVyX25v X2dkdW1wX2FkZCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVkYXRhX3QgKmVkYXRhKSB7Ci0J cmV0dXJuIGV4dGVudF9yZWdpc3Rlcl9pbXBsKHRzZG4sIHBhYywgZWRhdGEsIGZhbHNlKTsKLX0K LQotc3RhdGljIHZvaWQKLWV4dGVudF9yZXJlZ2lzdGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBh YywgZWRhdGFfdCAqZWRhdGEpIHsKLQlib29sIGVyciA9IGV4dGVudF9yZWdpc3Rlcih0c2RuLCBw YWMsIGVkYXRhKTsKLQlhc3NlcnQoIWVycik7Ci19Ci0KLS8qCi0gKiBSZW1vdmVzIGFsbCBwb2lu dGVycyB0byB0aGUgZ2l2ZW4gZXh0ZW50IGZyb20gdGhlIGdsb2JhbCBydHJlZS4KLSAqLwotc3Rh dGljIHZvaWQKLWV4dGVudF9kZXJlZ2lzdGVyX2ltcGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFj LCBlZGF0YV90ICplZGF0YSwKLSAgICBib29sIGdkdW1wKSB7Ci0JZW1hcF9kZXJlZ2lzdGVyX2Jv dW5kYXJ5KHRzZG4sIHBhYy0+ZW1hcCwgZWRhdGEpOwotCi0JaWYgKGNvbmZpZ19wcm9mICYmIGdk dW1wKSB7Ci0JCWV4dGVudF9nZHVtcF9zdWIodHNkbiwgZWRhdGEpOwotCX0KLX0KLQotc3RhdGlj IHZvaWQKLWV4dGVudF9kZXJlZ2lzdGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWRhdGFf dCAqZWRhdGEpIHsKLQlleHRlbnRfZGVyZWdpc3Rlcl9pbXBsKHRzZG4sIHBhYywgZWRhdGEsIHRy dWUpOwotfQotCi1zdGF0aWMgdm9pZAotZXh0ZW50X2RlcmVnaXN0ZXJfbm9fZ2R1bXBfc3ViKHRz ZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywKLSAgICBlZGF0YV90ICplZGF0YSkgewotCWV4dGVudF9k ZXJlZ2lzdGVyX2ltcGwodHNkbiwgcGFjLCBlZGF0YSwgZmFsc2UpOwotfQotCi0vKgotICogVHJp ZXMgdG8gZmluZCBhbmQgcmVtb3ZlIGFuIGV4dGVudCBmcm9tIGVjYWNoZSB0aGF0IGNhbiBiZSB1 c2VkIGZvciB0aGUKLSAqIGdpdmVuIGFsbG9jYXRpb24gcmVxdWVzdC4KLSAqLwotc3RhdGljIGVk YXRhX3QgKgotZXh0ZW50X3JlY3ljbGVfZXh0cmFjdCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMs IGVob29rc190ICplaG9va3MsCi0gICAgZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZXhwYW5k X2VkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKLSAgICBib29sIGd1YXJkZWQp IHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZlY2FjaGUtPm10eCk7Ci0JYXNz ZXJ0KGFsaWdubWVudCA+IDApOwotCWlmIChjb25maWdfZGVidWcgJiYgZXhwYW5kX2VkYXRhICE9 IE5VTEwpIHsKLQkJLyoKLQkJICogTm9uLU5VTEwgZXhwYW5kX2VkYXRhIGluZGljYXRlcyBpbi1w bGFjZSBleHBhbmRpbmcgcmVhbGxvYy4KLQkJICogbmV3X2FkZHIgbXVzdCBlaXRoZXIgcmVmZXIg dG8gYSBub24tZXhpc3RpbmcgZXh0ZW50LCBvciB0bwotCQkgKiB0aGUgYmFzZSBvZiBhbiBleHRh bnQgZXh0ZW50LCBzaW5jZSBvbmx5IGFjdGl2ZSBzbGFicyBzdXBwb3J0Ci0JCSAqIGludGVyaW9y IGxvb2t1cHMgKHdoaWNoIG9mIGNvdXJzZSBjYW5ub3QgYmUgcmVjeWNsZWQpLgotCQkgKi8KLQkJ dm9pZCAqbmV3X2FkZHIgPSBlZGF0YV9wYXN0X2dldChleHBhbmRfZWRhdGEpOwotCQlhc3NlcnQo UEFHRV9BRERSMkJBU0UobmV3X2FkZHIpID09IG5ld19hZGRyKTsKLQkJYXNzZXJ0KGFsaWdubWVu dCA8PSBQQUdFKTsKLQl9Ci0KLQllZGF0YV90ICplZGF0YTsKLQllc2V0X3QgKmVzZXQgPSBndWFy ZGVkID8gJmVjYWNoZS0+Z3VhcmRlZF9lc2V0IDogJmVjYWNoZS0+ZXNldDsKLQlpZiAoZXhwYW5k X2VkYXRhICE9IE5VTEwpIHsKLQkJZWRhdGEgPSBlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25laWdo Ym9yX2V4cGFuZCh0c2RuLCBwYWMtPmVtYXAsCi0JCSAgICBleHBhbmRfZWRhdGEsIEVYVEVOVF9Q QUlfUEFDLCBlY2FjaGUtPnN0YXRlKTsKLQkJaWYgKGVkYXRhICE9IE5VTEwpIHsKLQkJCWV4dGVu dF9hc3NlcnRfY2FuX2V4cGFuZChleHBhbmRfZWRhdGEsIGVkYXRhKTsKLQkJCWlmIChlZGF0YV9z aXplX2dldChlZGF0YSkgPCBzaXplKSB7Ci0JCQkJZW1hcF9yZWxlYXNlX2VkYXRhKHRzZG4sIHBh Yy0+ZW1hcCwgZWRhdGEsCi0JCQkJICAgIGVjYWNoZS0+c3RhdGUpOwotCQkJCWVkYXRhID0gTlVM TDsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEEgbGFyZ2UgZXh0ZW50IG1pZ2h0 IGJlIGJyb2tlbiB1cCBmcm9tIGl0cyBvcmlnaW5hbCBzaXplIHRvCi0JCSAqIHNvbWUgc21hbGwg c2l6ZSB0byBzYXRpc2Z5IGEgc21hbGwgcmVxdWVzdC4gIFdoZW4gdGhhdCBzbWFsbAotCQkgKiBy ZXF1ZXN0IGlzIGZyZWVkLCB0aG91Z2gsIGl0IHdvbid0IG1lcmdlIGJhY2sgd2l0aCB0aGUgbGFy Z2VyCi0JCSAqIGV4dGVudCBpZiBkZWxheWVkIGNvYWxlc2NpbmcgaXMgb24uICBUaGUgbGFyZ2Ug ZXh0ZW50IGNhbgotCQkgKiB0aGVuIG5vIGxvbmdlciBzYXRpZnkgYSByZXF1ZXN0IGZvciBpdHMg b3JpZ2luYWwgc2l6ZS4gIFRvCi0JCSAqIGxpbWl0IHRoaXMgZWZmZWN0LCB3aGVuIGRlbGF5ZWQg Y29hbGVzY2luZyBpcyBlbmFibGVkLCB3ZQotCQkgKiBwdXQgYSBjYXAgb24gaG93IGJpZyBhbiBl eHRlbnQgd2UgY2FuIHNwbGl0IGZvciBhIHJlcXVlc3QuCi0JCSAqLwotCQl1bnNpZ25lZCBsZ19t YXhfZml0ID0gZWNhY2hlLT5kZWxheV9jb2FsZXNjZQotCQkgICAgPyAodW5zaWduZWQpb3B0X2xn X2V4dGVudF9tYXhfYWN0aXZlX2ZpdCA6IFNDX1BUUl9CSVRTOwotCi0JCS8qCi0JCSAqIElmIHNw bGl0IGFuZCBtZXJnZSBhcmUgbm90IGFsbG93ZWQgKFdpbmRvd3Mgdy9vIHJldGFpbiksIHRyeQot CQkgKiBleGFjdCBmaXQgb25seS4KLQkJICoKLQkJICogRm9yIHNpbXBsaWNpdHkgcHVycG9zZXMs IHNwbGl0dGluZyBndWFyZGVkIGV4dGVudHMgaXMgbm90Ci0JCSAqIHN1cHBvcnRlZC4gIEhlbmNl LCB3ZSBkbyBvbmx5IGV4YWN0IGZpdCBmb3IgZ3VhcmRlZAotCQkgKiBhbGxvY2F0aW9ucy4KLQkJ ICovCi0JCWJvb2wgZXhhY3Rfb25seSA9ICghbWFwc19jb2FsZXNjZSAmJiAhb3B0X3JldGFpbikg fHwgZ3VhcmRlZDsKLQkJZWRhdGEgPSBlc2V0X2ZpdChlc2V0LCBzaXplLCBhbGlnbm1lbnQsIGV4 YWN0X29ubHksCi0JCSAgICBsZ19tYXhfZml0KTsKLQl9Ci0JaWYgKGVkYXRhID09IE5VTEwpIHsK LQkJcmV0dXJuIE5VTEw7Ci0JfQotCWFzc2VydCghZ3VhcmRlZCB8fCBlZGF0YV9ndWFyZGVkX2dl dChlZGF0YSkpOwotCWV4dGVudF9hY3RpdmF0ZV9sb2NrZWQodHNkbiwgcGFjLCBlY2FjaGUsIGVz ZXQsIGVkYXRhKTsKLQotCXJldHVybiBlZGF0YTsKLX0KLQotLyoKLSAqIEdpdmVuIGFuIGFsbG9j YXRpb24gcmVxdWVzdCBhbmQgYW4gZXh0ZW50IGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byBzYXRp c2Z5Ci0gKiBpdCwgdGhpcyBzcGxpdHMgb2ZmIGxlYWQgYW5kIHRyYWlsIGV4dGVudHMsIGxlYXZp bmcgZWRhdGEgcG9pbnRpbmcgdG8gYW4KLSAqIGV4dGVudCBzYXRpc2Z5aW5nIHRoZSBhbGxvY2F0 aW9uLgotICogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHB1dCBsZWFkIG9yIHRyYWlsIGludG8gYW55 IGVjYWNoZTsgaXQncyB0aGUgY2FsbGVyJ3MKLSAqIGpvYiB0byBlbnN1cmUgdGhhdCB0aGV5IGNh biBiZSByZXVzZWQuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0JLyoKLQkgKiBTcGxpdCBzdWNjZXNz ZnVsbHkuICBsZWFkLCBlZGF0YSwgYW5kIHRyYWlsLCBhcmUgbW9kaWZpZWQgdG8gZXh0ZW50cwot CSAqIGRlc2NyaWJpbmcgdGhlIHJhbmdlcyBiZWZvcmUsIGluLCBhbmQgYWZ0ZXIgdGhlIGdpdmVu IGFsbG9jYXRpb24uCi0JICovCi0JZXh0ZW50X3NwbGl0X2ludGVyaW9yX29rLAotCS8qCi0JICog VGhlIGV4dGVudCBjYW4ndCBzYXRpc2Z5IHRoZSBnaXZlbiBhbGxvY2F0aW9uIHJlcXVlc3QuICBO b25lIG9mIHRoZQotCSAqIGlucHV0IGVkYXRhX3QgKnMgYXJlIHRvdWNoZWQuCi0JICovCi0JZXh0 ZW50X3NwbGl0X2ludGVyaW9yX2NhbnRfYWxsb2MsCi0JLyoKLQkgKiBJbiBhIHBvdGVudGlhbGx5 IGludmFsaWQgc3RhdGUuICBNdXN0IGxlYWsgKGlmICp0b19sZWFrIGlzIG5vbi1OVUxMKSwKLQkg KiBhbmQgc2FsdmFnZSB3aGF0J3Mgc3RpbGwgc2FsdmFnZWFibGUgKGlmICp0b19zYWx2YWdlIGlz IG5vbi1OVUxMKS4KLQkgKiBOb25lIG9mIGxlYWQsIGVkYXRhLCBvciB0cmFpbCBhcmUgdmFsaWQu Ci0JICovCi0JZXh0ZW50X3NwbGl0X2ludGVyaW9yX2Vycm9yCi19IGV4dGVudF9zcGxpdF9pbnRl cmlvcl9yZXN1bHRfdDsKLQotc3RhdGljIGV4dGVudF9zcGxpdF9pbnRlcmlvcl9yZXN1bHRfdAot ZXh0ZW50X3NwbGl0X2ludGVyaW9yKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3Qg KmVob29rcywKLSAgICAvKiBUaGUgcmVzdWx0IG9mIHNwbGl0dGluZywgaW4gY2FzZSBvZiBzdWNj ZXNzLiAqLwotICAgIGVkYXRhX3QgKiplZGF0YSwgZWRhdGFfdCAqKmxlYWQsIGVkYXRhX3QgKip0 cmFpbCwKLSAgICAvKiBUaGUgbWVzcyB0byBjbGVhbiB1cCwgaW4gY2FzZSBvZiBlcnJvci4gKi8K LSAgICBlZGF0YV90ICoqdG9fbGVhaywgZWRhdGFfdCAqKnRvX3NhbHZhZ2UsCi0gICAgZWRhdGFf dCAqZXhwYW5kX2VkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgewotCXNpemVf dCBsZWFkc2l6ZSA9IEFMSUdOTUVOVF9DRUlMSU5HKCh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQo KmVkYXRhKSwKLQkgICAgUEFHRV9DRUlMSU5HKGFsaWdubWVudCkpIC0gKHVpbnRwdHJfdCllZGF0 YV9iYXNlX2dldCgqZWRhdGEpOwotCWFzc2VydChleHBhbmRfZWRhdGEgPT0gTlVMTCB8fCBsZWFk c2l6ZSA9PSAwKTsKLQlpZiAoZWRhdGFfc2l6ZV9nZXQoKmVkYXRhKSA8IGxlYWRzaXplICsgc2l6 ZSkgewotCQlyZXR1cm4gZXh0ZW50X3NwbGl0X2ludGVyaW9yX2NhbnRfYWxsb2M7Ci0JfQotCXNp emVfdCB0cmFpbHNpemUgPSBlZGF0YV9zaXplX2dldCgqZWRhdGEpIC0gbGVhZHNpemUgLSBzaXpl OwotCi0JKmxlYWQgPSBOVUxMOwotCSp0cmFpbCA9IE5VTEw7Ci0JKnRvX2xlYWsgPSBOVUxMOwot CSp0b19zYWx2YWdlID0gTlVMTDsKLQotCS8qIFNwbGl0IHRoZSBsZWFkLiAqLwotCWlmIChsZWFk c2l6ZSAhPSAwKSB7Ci0JCWFzc2VydCghZWRhdGFfZ3VhcmRlZF9nZXQoKmVkYXRhKSk7Ci0JCSps ZWFkID0gKmVkYXRhOwotCQkqZWRhdGEgPSBleHRlbnRfc3BsaXRfaW1wbCh0c2RuLCBwYWMsIGVo b29rcywgKmxlYWQsIGxlYWRzaXplLAotCQkgICAgc2l6ZSArIHRyYWlsc2l6ZSwgLyogaG9sZGlu Z19jb3JlX2xvY2tzKi8gdHJ1ZSk7Ci0JCWlmICgqZWRhdGEgPT0gTlVMTCkgewotCQkJKnRvX2xl YWsgPSAqbGVhZDsKLQkJCSpsZWFkID0gTlVMTDsKLQkJCXJldHVybiBleHRlbnRfc3BsaXRfaW50 ZXJpb3JfZXJyb3I7Ci0JCX0KLQl9Ci0KLQkvKiBTcGxpdCB0aGUgdHJhaWwuICovCi0JaWYgKHRy YWlsc2l6ZSAhPSAwKSB7Ci0JCWFzc2VydCghZWRhdGFfZ3VhcmRlZF9nZXQoKmVkYXRhKSk7Ci0J CSp0cmFpbCA9IGV4dGVudF9zcGxpdF9pbXBsKHRzZG4sIHBhYywgZWhvb2tzLCAqZWRhdGEsIHNp emUsCi0JCSAgICB0cmFpbHNpemUsIC8qIGhvbGRpbmdfY29yZV9sb2NrcyAqLyB0cnVlKTsKLQkJ aWYgKCp0cmFpbCA9PSBOVUxMKSB7Ci0JCQkqdG9fbGVhayA9ICplZGF0YTsKLQkJCSp0b19zYWx2 YWdlID0gKmxlYWQ7Ci0JCQkqbGVhZCA9IE5VTEw7Ci0JCQkqZWRhdGEgPSBOVUxMOwotCQkJcmV0 dXJuIGV4dGVudF9zcGxpdF9pbnRlcmlvcl9lcnJvcjsKLQkJfQotCX0KLQotCXJldHVybiBleHRl bnRfc3BsaXRfaW50ZXJpb3Jfb2s7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bGZpbGxzIHRoZSBpbmRp Y2F0ZWQgYWxsb2NhdGlvbiByZXF1ZXN0IG91dCBvZiB0aGUgZ2l2ZW4gZXh0ZW50ICh3aGljaAot ICogdGhlIGNhbGxlciBzaG91bGQgaGF2ZSBlbnN1cmVkIHdhcyBiaWcgZW5vdWdoKS4gIElmIHRo ZXJlJ3MgYW55IHVudXNlZCBzcGFjZQotICogYmVmb3JlIG9yIGFmdGVyIHRoZSByZXN1bHRpbmcg YWxsb2NhdGlvbiwgdGhhdCBzcGFjZSBpcyBnaXZlbiBpdHMgb3duIGV4dGVudAotICogYW5kIHB1 dCBiYWNrIGludG8gZWNhY2hlLgotICovCi1zdGF0aWMgZWRhdGFfdCAqCi1leHRlbnRfcmVjeWNs ZV9zcGxpdCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCi0gICAg ZWNhY2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZXhwYW5kX2VkYXRhLCBzaXplX3Qgc2l6ZSwgc2l6 ZV90IGFsaWdubWVudCwKLSAgICBlZGF0YV90ICplZGF0YSwgYm9vbCBncm93aW5nX3JldGFpbmVk KSB7Ci0JYXNzZXJ0KCFlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkgfHwgc2l6ZSA9PSBlZGF0YV9z aXplX2dldChlZGF0YSkpOwotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJmVjYWNo ZS0+bXR4KTsKLQotCWVkYXRhX3QgKmxlYWQ7Ci0JZWRhdGFfdCAqdHJhaWw7Ci0JZWRhdGFfdCAq dG9fbGVhayBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoTlVMTCk7Ci0JZWRhdGFfdCAqdG9fc2Fs dmFnZSBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoTlVMTCk7Ci0KLQlleHRlbnRfc3BsaXRfaW50 ZXJpb3JfcmVzdWx0X3QgcmVzdWx0ID0gZXh0ZW50X3NwbGl0X2ludGVyaW9yKAotCSAgICB0c2Ru LCBwYWMsIGVob29rcywgJmVkYXRhLCAmbGVhZCwgJnRyYWlsLCAmdG9fbGVhaywgJnRvX3NhbHZh Z2UsCi0JICAgIGV4cGFuZF9lZGF0YSwgc2l6ZSwgYWxpZ25tZW50KTsKLQotCWlmICghbWFwc19j b2FsZXNjZSAmJiByZXN1bHQgIT0gZXh0ZW50X3NwbGl0X2ludGVyaW9yX29rCi0JICAgICYmICFv cHRfcmV0YWluKSB7Ci0JCS8qCi0JCSAqIFNwbGl0IGlzbid0IHN1cHBvcnRlZCAoaW1wbGllcyBX aW5kb3dzIHcvbyByZXRhaW4pLiAgQXZvaWQKLQkJICogbGVha2luZyB0aGUgZXh0ZW50LgotCQkg Ki8KLQkJYXNzZXJ0KHRvX2xlYWsgIT0gTlVMTCAmJiBsZWFkID09IE5VTEwgJiYgdHJhaWwgPT0g TlVMTCk7Ci0JCWV4dGVudF9kZWFjdGl2YXRlX2xvY2tlZCh0c2RuLCBwYWMsIGVjYWNoZSwgdG9f bGVhayk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChyZXN1bHQgPT0gZXh0ZW50X3NwbGl0 X2ludGVyaW9yX29rKSB7Ci0JCWlmIChsZWFkICE9IE5VTEwpIHsKLQkJCWV4dGVudF9kZWFjdGl2 YXRlX2xvY2tlZCh0c2RuLCBwYWMsIGVjYWNoZSwgbGVhZCk7Ci0JCX0KLQkJaWYgKHRyYWlsICE9 IE5VTEwpIHsKLQkJCWV4dGVudF9kZWFjdGl2YXRlX2xvY2tlZCh0c2RuLCBwYWMsIGVjYWNoZSwg dHJhaWwpOwotCQl9Ci0JCXJldHVybiBlZGF0YTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBXZSBz aG91bGQgaGF2ZSBwaWNrZWQgYW4gZXh0ZW50IHRoYXQgd2FzIGxhcmdlIGVub3VnaCB0bwotCQkg KiBmdWxmaWxsIG91ciBhbGxvY2F0aW9uIHJlcXVlc3QuCi0JCSAqLwotCQlhc3NlcnQocmVzdWx0 ID09IGV4dGVudF9zcGxpdF9pbnRlcmlvcl9lcnJvcik7Ci0JCWlmICh0b19zYWx2YWdlICE9IE5V TEwpIHsKLQkJCWV4dGVudF9kZXJlZ2lzdGVyKHRzZG4sIHBhYywgdG9fc2FsdmFnZSk7Ci0JCX0K LQkJaWYgKHRvX2xlYWsgIT0gTlVMTCkgewotCQkJZXh0ZW50X2RlcmVnaXN0ZXJfbm9fZ2R1bXBf c3ViKHRzZG4sIHBhYywgdG9fbGVhayk7Ci0JCQkvKgotCQkJICogTWF5IGdvIGRvd24gdGhlIHB1 cmdlIHBhdGggKHdoaWNoIGFzc3VtZSBubyBlY2FjaGUKLQkJCSAqIGxvY2tzKS4gIE9ubHkgaGFw cGVucyB3aXRoIE9PTSBjYXVzZWQgc3BsaXQgZmFpbHVyZXMuCi0JCQkgKi8KLQkJCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgJmVjYWNoZS0+bXR4KTsKLQkJCWV4dGVudHNfYWJhbmRvbl92bSh0 c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLCB0b19sZWFrLAotCQkJICAgIGdyb3dpbmdfcmV0YWlu ZWQpOwotCQkJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmVjYWNoZS0+bXR4KTsKLQkJfQotCQly ZXR1cm4gTlVMTDsKLQl9Ci0JdW5yZWFjaGFibGUoKTsKLX0KLQotLyoKLSAqIFRyaWVzIHRvIHNh dGlzZnkgdGhlIGdpdmVuIGFsbG9jYXRpb24gcmVxdWVzdCBieSByZXVzaW5nIG9uZSBvZiB0aGUg ZXh0ZW50cwotICogaW4gdGhlIGdpdmVuIGVjYWNoZV90LgotICovCi1zdGF0aWMgZWRhdGFfdCAq Ci1leHRlbnRfcmVjeWNsZSh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9v a3MsIGVjYWNoZV90ICplY2FjaGUsCi0gICAgZWRhdGFfdCAqZXhwYW5kX2VkYXRhLCBzaXplX3Qg c2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLAotICAgIGJvb2wgKmNvbW1pdCwgYm9v bCBncm93aW5nX3JldGFpbmVkLCBib29sIGd1YXJkZWQpIHsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0 aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RuKSwKLQkgICAgV0lUTkVTU19SQU5L X0NPUkUsIGdyb3dpbmdfcmV0YWluZWQgPyAxIDogMCk7Ci0JYXNzZXJ0KCFndWFyZGVkIHx8IGV4 cGFuZF9lZGF0YSA9PSBOVUxMKTsKLQlhc3NlcnQoIWd1YXJkZWQgfHwgYWxpZ25tZW50IDw9IFBB R0UpOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmVjYWNoZS0+bXR4KTsKLQotCWVkYXRh X3QgKmVkYXRhID0gZXh0ZW50X3JlY3ljbGVfZXh0cmFjdCh0c2RuLCBwYWMsIGVob29rcywgZWNh Y2hlLAotCSAgICBleHBhbmRfZWRhdGEsIHNpemUsIGFsaWdubWVudCwgZ3VhcmRlZCk7Ci0JaWYg KGVkYXRhID09IE5VTEwpIHsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmZWNhY2hlLT5t dHgpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQllZGF0YSA9IGV4dGVudF9yZWN5Y2xlX3NwbGl0 KHRzZG4sIHBhYywgZWhvb2tzLCBlY2FjaGUsIGV4cGFuZF9lZGF0YSwKLQkgICAgc2l6ZSwgYWxp Z25tZW50LCBlZGF0YSwgZ3Jvd2luZ19yZXRhaW5lZCk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0 c2RuLCAmZWNhY2hlLT5tdHgpOwotCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0JCXJldHVybiBOVUxM OwotCX0KLQotCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGV4dGVudF9zdGF0ZV9h Y3RpdmUpOwotCWlmIChleHRlbnRfY29tbWl0X3plcm8odHNkbiwgZWhvb2tzLCBlZGF0YSwgKmNv bW1pdCwgemVybywKLQkgICAgZ3Jvd2luZ19yZXRhaW5lZCkpIHsKLQkJZXh0ZW50X3JlY29yZCh0 c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLCBlZGF0YSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlp ZiAoZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSkpIHsKLQkJLyoKLQkJICogVGhpcyByZXZlcnNl cyB0aGUgcHVycG9zZSBvZiB0aGlzIHZhcmlhYmxlIC0gcHJldmlvdXNseSBpdAotCQkgKiB3YXMg dHJlYXRlZCBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIsIG5vdyBpdCB0dXJucyBpbnRvIGFuCi0JCSAq IG91dHB1dCBwYXJhbWV0ZXIsIHJlcG9ydGluZyBpZiB0aGUgZWRhdGEgaGFzIGFjdHVhbGx5IGJl ZW4KLQkJICogY29tbWl0dGVkLgotCQkgKi8KLQkJKmNvbW1pdCA9IHRydWU7Ci0JfQotCXJldHVy biBlZGF0YTsKLX0KLQotLyoKLSAqIElmIHZpcnR1YWwgbWVtb3J5IGlzIHJldGFpbmVkLCBjcmVh dGUgaW5jcmVhc2luZ2x5IGxhcmdlciBleHRlbnRzIGZyb20gd2hpY2gKLSAqIHRvIHNwbGl0IHJl cXVlc3RlZCBleHRlbnRzIGluIG9yZGVyIHRvIGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgZGlz am9pbnQKLSAqIHZpcnR1YWwgbWVtb3J5IHJhbmdlcyByZXRhaW5lZCBieSBlYWNoIHNoYXJkLgot ICovCi1zdGF0aWMgZWRhdGFfdCAqCi1leHRlbnRfZ3Jvd19yZXRhaW5lZCh0c2RuX3QgKnRzZG4s IHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCi0gICAgc2l6ZV90IHNpemUsIHNpemVfdCBh bGlnbm1lbnQsIGJvb2wgemVybywgYm9vbCAqY29tbWl0KSB7Ci0JbWFsbG9jX211dGV4X2Fzc2Vy dF9vd25lcih0c2RuLCAmcGFjLT5ncm93X210eCk7Ci0KLQlzaXplX3QgYWxsb2Nfc2l6ZV9taW4g PSBzaXplICsgUEFHRV9DRUlMSU5HKGFsaWdubWVudCkgLSBQQUdFOwotCS8qIEJld2FyZSBzaXpl X3Qgd3JhcC1hcm91bmQuICovCi0JaWYgKGFsbG9jX3NpemVfbWluIDwgc2l6ZSkgewotCQlnb3Rv IGxhYmVsX2VycjsKLQl9Ci0JLyoKLQkgKiBGaW5kIHRoZSBuZXh0IGV4dGVudCBzaXplIGluIHRo ZSBzZXJpZXMgdGhhdCB3b3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8KLQkgKiBzYXRpc2Z5IHRoaXMg cmVxdWVzdC4KLQkgKi8KLQlzaXplX3QgYWxsb2Nfc2l6ZTsKLQlwc3ppbmRfdCBleHBfZ3Jvd19z a2lwOwotCWJvb2wgZXJyID0gZXhwX2dyb3dfc2l6ZV9wcmVwYXJlKCZwYWMtPmV4cF9ncm93LCBh bGxvY19zaXplX21pbiwKLQkgICAgJmFsbG9jX3NpemUsICZleHBfZ3Jvd19za2lwKTsKLQlpZiAo ZXJyKSB7Ci0JCWdvdG8gbGFiZWxfZXJyOwotCX0KLQotCWVkYXRhX3QgKmVkYXRhID0gZWRhdGFf Y2FjaGVfZ2V0KHRzZG4sIHBhYy0+ZWRhdGFfY2FjaGUpOwotCWlmIChlZGF0YSA9PSBOVUxMKSB7 Ci0JCWdvdG8gbGFiZWxfZXJyOwotCX0KLQlib29sIHplcm9lZCA9IGZhbHNlOwotCWJvb2wgY29t bWl0dGVkID0gZmFsc2U7Ci0KLQl2b2lkICpwdHIgPSBlaG9va3NfYWxsb2ModHNkbiwgZWhvb2tz LCBOVUxMLCBhbGxvY19zaXplLCBQQUdFLCAmemVyb2VkLAotCSAgICAmY29tbWl0dGVkKTsKLQot CWlmIChwdHIgPT0gTlVMTCkgewotCQllZGF0YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5lZGF0YV9j YWNoZSwgZWRhdGEpOwotCQlnb3RvIGxhYmVsX2VycjsKLQl9Ci0KLQllZGF0YV9pbml0KGVkYXRh LCBlY2FjaGVfaW5kX2dldCgmcGFjLT5lY2FjaGVfcmV0YWluZWQpLCBwdHIsCi0JICAgIGFsbG9j X3NpemUsIGZhbHNlLCBTQ19OU0laRVMsIGV4dGVudF9zbl9uZXh0KHBhYyksCi0JICAgIGV4dGVu dF9zdGF0ZV9hY3RpdmUsIHplcm9lZCwgY29tbWl0dGVkLCBFWFRFTlRfUEFJX1BBQywKLQkgICAg RVhURU5UX0lTX0hFQUQpOwotCi0JaWYgKGV4dGVudF9yZWdpc3Rlcl9ub19nZHVtcF9hZGQodHNk biwgcGFjLCBlZGF0YSkpIHsKLQkJZWRhdGFfY2FjaGVfcHV0KHRzZG4sIHBhYy0+ZWRhdGFfY2Fj aGUsIGVkYXRhKTsKLQkJZ290byBsYWJlbF9lcnI7Ci0JfQotCi0JaWYgKGVkYXRhX2NvbW1pdHRl ZF9nZXQoZWRhdGEpKSB7Ci0JCSpjb21taXQgPSB0cnVlOwotCX0KLQotCWVkYXRhX3QgKmxlYWQ7 Ci0JZWRhdGFfdCAqdHJhaWw7Ci0JZWRhdGFfdCAqdG9fbGVhayBKRU1BTExPQ19DQ19TSUxFTkNF X0lOSVQoTlVMTCk7Ci0JZWRhdGFfdCAqdG9fc2FsdmFnZSBKRU1BTExPQ19DQ19TSUxFTkNFX0lO SVQoTlVMTCk7Ci0KLQlleHRlbnRfc3BsaXRfaW50ZXJpb3JfcmVzdWx0X3QgcmVzdWx0ID0gZXh0 ZW50X3NwbGl0X2ludGVyaW9yKHRzZG4sCi0JICAgIHBhYywgZWhvb2tzLCAmZWRhdGEsICZsZWFk LCAmdHJhaWwsICZ0b19sZWFrLCAmdG9fc2FsdmFnZSwgTlVMTCwKLQkgICAgc2l6ZSwgYWxpZ25t ZW50KTsKLQotCWlmIChyZXN1bHQgPT0gZXh0ZW50X3NwbGl0X2ludGVyaW9yX29rKSB7Ci0JCWlm IChsZWFkICE9IE5VTEwpIHsKLQkJCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9va3MsICZw YWMtPmVjYWNoZV9yZXRhaW5lZCwKLQkJCSAgICBsZWFkKTsKLQkJfQotCQlpZiAodHJhaWwgIT0g TlVMTCkgewotCQkJZXh0ZW50X3JlY29yZCh0c2RuLCBwYWMsIGVob29rcywgJnBhYy0+ZWNhY2hl X3JldGFpbmVkLAotCQkJICAgIHRyYWlsKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFdl IHNob3VsZCBoYXZlIGFsbG9jYXRlZCBhIHN1ZmZpY2llbnRseSBsYXJnZSBleHRlbnQ7IHRoZQot CQkgKiBjYW50X2FsbG9jIGNhc2Ugc2hvdWxkIG5vdCBvY2N1ci4KLQkJICovCi0JCWFzc2VydChy ZXN1bHQgPT0gZXh0ZW50X3NwbGl0X2ludGVyaW9yX2Vycm9yKTsKLQkJaWYgKHRvX3NhbHZhZ2Ug IT0gTlVMTCkgewotCQkJaWYgKGNvbmZpZ19wcm9mKSB7Ci0JCQkJZXh0ZW50X2dkdW1wX2FkZCh0 c2RuLCB0b19zYWx2YWdlKTsKLQkJCX0KLQkJCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9v a3MsICZwYWMtPmVjYWNoZV9yZXRhaW5lZCwKLQkJCSAgICB0b19zYWx2YWdlKTsKLQkJfQotCQlp ZiAodG9fbGVhayAhPSBOVUxMKSB7Ci0JCQlleHRlbnRfZGVyZWdpc3Rlcl9ub19nZHVtcF9zdWIo dHNkbiwgcGFjLCB0b19sZWFrKTsKLQkJCWV4dGVudHNfYWJhbmRvbl92bSh0c2RuLCBwYWMsIGVo b29rcywKLQkJCSAgICAmcGFjLT5lY2FjaGVfcmV0YWluZWQsIHRvX2xlYWssIHRydWUpOwotCQl9 Ci0JCWdvdG8gbGFiZWxfZXJyOwotCX0KLQotCWlmICgqY29tbWl0ICYmICFlZGF0YV9jb21taXR0 ZWRfZ2V0KGVkYXRhKSkgewotCQlpZiAoZXh0ZW50X2NvbW1pdF9pbXBsKHRzZG4sIGVob29rcywg ZWRhdGEsIDAsCi0JCSAgICBlZGF0YV9zaXplX2dldChlZGF0YSksIHRydWUpKSB7Ci0JCQlleHRl bnRfcmVjb3JkKHRzZG4sIHBhYywgZWhvb2tzLAotCQkJICAgICZwYWMtPmVjYWNoZV9yZXRhaW5l ZCwgZWRhdGEpOwotCQkJZ290byBsYWJlbF9lcnI7Ci0JCX0KLQkJLyogQSBzdWNjZXNzZnVsIGNv bW1pdCBzaG91bGQgcmV0dXJuIHplcm9lZCBtZW1vcnkuICovCi0JCWlmIChjb25maWdfZGVidWcp IHsKLQkJCXZvaWQgKmFkZHIgPSBlZGF0YV9hZGRyX2dldChlZGF0YSk7Ci0JCQlzaXplX3QgKnAg PSAoc2l6ZV90ICopKHVpbnRwdHJfdClhZGRyOwotCQkJLyogQ2hlY2sgdGhlIGZpcnN0IHBhZ2Ug b25seS4gKi8KLQkJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgUEFHRSAvIHNpemVvZihzaXplX3Qp OyBpKyspIHsKLQkJCQlhc3NlcnQocFtpXSA9PSAwKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qCi0J ICogSW5jcmVtZW50IGV4dGVudF9ncm93X25leHQgaWYgZG9pbmcgc28gd291bGRuJ3QgZXhjZWVk IHRoZSBhbGxvd2VkCi0JICogcmFuZ2UuCi0JICovCi0JLyogQWxsIG9wcG9ydHVuaXRpZXMgZm9y IGZhaWx1cmUgYXJlIHBhc3QuICovCi0JZXhwX2dyb3dfc2l6ZV9jb21taXQoJnBhYy0+ZXhwX2dy b3csIGV4cF9ncm93X3NraXApOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnBhYy0+Z3Jv d19tdHgpOwotCi0JaWYgKGNvbmZpZ19wcm9mKSB7Ci0JCS8qIEFkanVzdCBnZHVtcCBzdGF0cyBu b3cgdGhhdCBleHRlbnQgaXMgZmluYWwgc2l6ZS4gKi8KLQkJZXh0ZW50X2dkdW1wX2FkZCh0c2Ru LCBlZGF0YSk7Ci0JfQotCWlmICh6ZXJvICYmICFlZGF0YV96ZXJvZWRfZ2V0KGVkYXRhKSkgewot CQllaG9va3NfemVybyh0c2RuLCBlaG9va3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKLQkJICAg IGVkYXRhX3NpemVfZ2V0KGVkYXRhKSk7Ci0JfQotCXJldHVybiBlZGF0YTsKLWxhYmVsX2VycjoK LQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZwYWMtPmdyb3dfbXR4KTsKLQlyZXR1cm4gTlVM TDsKLX0KLQotc3RhdGljIGVkYXRhX3QgKgotZXh0ZW50X2FsbG9jX3JldGFpbmVkKHRzZG5fdCAq dHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKLSAgICBlZGF0YV90ICpleHBhbmRf ZWRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8sCi0gICAgYm9v bCAqY29tbWl0LCBib29sIGd1YXJkZWQpIHsKLQlhc3NlcnQoc2l6ZSAhPSAwKTsKLQlhc3NlcnQo YWxpZ25tZW50ICE9IDApOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnBhYy0+Z3Jvd19t dHgpOwotCi0JZWRhdGFfdCAqZWRhdGEgPSBleHRlbnRfcmVjeWNsZSh0c2RuLCBwYWMsIGVob29r cywKLQkgICAgJnBhYy0+ZWNhY2hlX3JldGFpbmVkLCBleHBhbmRfZWRhdGEsIHNpemUsIGFsaWdu bWVudCwgemVybywgY29tbWl0LAotCSAgICAvKiBncm93aW5nX3JldGFpbmVkICovIHRydWUsIGd1 YXJkZWQpOwotCWlmIChlZGF0YSAhPSBOVUxMKSB7Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNk biwgJnBhYy0+Z3Jvd19tdHgpOwotCQlpZiAoY29uZmlnX3Byb2YpIHsKLQkJCWV4dGVudF9nZHVt cF9hZGQodHNkbiwgZWRhdGEpOwotCQl9Ci0JfSBlbHNlIGlmIChvcHRfcmV0YWluICYmIGV4cGFu ZF9lZGF0YSA9PSBOVUxMICYmICFndWFyZGVkKSB7Ci0JCWVkYXRhID0gZXh0ZW50X2dyb3dfcmV0 YWluZWQodHNkbiwgcGFjLCBlaG9va3MsIHNpemUsCi0JCSAgICBhbGlnbm1lbnQsIHplcm8sIGNv bW1pdCk7Ci0JCS8qIGV4dGVudF9ncm93X3JldGFpbmVkKCkgYWx3YXlzIHJlbGVhc2VzIHBhYy0+ Z3Jvd19tdHguICovCi0JfSBlbHNlIHsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcGFj LT5ncm93X210eCk7Ci0JfQotCW1hbGxvY19tdXRleF9hc3NlcnRfbm90X293bmVyKHRzZG4sICZw YWMtPmdyb3dfbXR4KTsKLQotCXJldHVybiBlZGF0YTsKLX0KLQotc3RhdGljIGJvb2wKLWV4dGVu dF9jb2FsZXNjZSh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsIGVj YWNoZV90ICplY2FjaGUsCi0gICAgZWRhdGFfdCAqaW5uZXIsIGVkYXRhX3QgKm91dGVyLCBib29s IGZvcndhcmQpIHsKLQlleHRlbnRfYXNzZXJ0X2Nhbl9jb2FsZXNjZShpbm5lciwgb3V0ZXIpOwot CWVzZXRfcmVtb3ZlKCZlY2FjaGUtPmVzZXQsIG91dGVyKTsKLQotCWJvb2wgZXJyID0gZXh0ZW50 X21lcmdlX2ltcGwodHNkbiwgcGFjLCBlaG9va3MsCi0JICAgIGZvcndhcmQgPyBpbm5lciA6IG91 dGVyLCBmb3J3YXJkID8gb3V0ZXIgOiBpbm5lciwKLQkgICAgLyogaG9sZGluZ19jb3JlX2xvY2tz ICovIHRydWUpOwotCWlmIChlcnIpIHsKLQkJZXh0ZW50X2RlYWN0aXZhdGVfY2hlY2tfc3RhdGVf bG9ja2VkKHRzZG4sIHBhYywgZWNhY2hlLCBvdXRlciwKLQkJICAgIGV4dGVudF9zdGF0ZV9tZXJn aW5nKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgZWRhdGFfdCAqCi1leHRlbnRf dHJ5X2NvYWxlc2NlX2ltcGwodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhv b2tzLAotICAgIGVjYWNoZV90ICplY2FjaGUsIGVkYXRhX3QgKmVkYXRhLCBib29sICpjb2FsZXNj ZWQpIHsKLQlhc3NlcnQoIWVkYXRhX2d1YXJkZWRfZ2V0KGVkYXRhKSk7Ci0JLyoKLQkgKiBXZSBh dm9pZCBjaGVja2luZyAvIGxvY2tpbmcgaW5hY3RpdmUgbmVpZ2hib3JzIGZvciBsYXJnZSBzaXpl Ci0JICogY2xhc3Nlcywgc2luY2UgdGhleSBhcmUgZWFnZXJseSBjb2FsZXNjZWQgb24gZGVhbGxv Y2F0aW9uIHdoaWNoIGNhbgotCSAqIGNhdXNlIGxvY2sgY29udGVudGlvbi4KLQkgKi8KLQkvKgot CSAqIENvbnRpbnVlIGF0dGVtcHRpbmcgdG8gY29hbGVzY2UgdW50aWwgZmFpbHVyZSwgdG8gcHJv dGVjdCBhZ2FpbnN0Ci0JICogcmFjZXMgd2l0aCBvdGhlciB0aHJlYWRzIHRoYXQgYXJlIHRod2Fy dGVkIGJ5IHRoaXMgb25lLgotCSAqLwotCWJvb2wgYWdhaW47Ci0JZG8gewotCQlhZ2FpbiA9IGZh bHNlOwotCi0JCS8qIFRyeSB0byBjb2FsZXNjZSBmb3J3YXJkLiAqLwotCQllZGF0YV90ICpuZXh0 ID0gZW1hcF90cnlfYWNxdWlyZV9lZGF0YV9uZWlnaGJvcih0c2RuLCBwYWMtPmVtYXAsCi0JCSAg ICBlZGF0YSwgRVhURU5UX1BBSV9QQUMsIGVjYWNoZS0+c3RhdGUsIC8qIGZvcndhcmQgKi8gdHJ1 ZSk7Ci0JCWlmIChuZXh0ICE9IE5VTEwpIHsKLQkJCWlmICghZXh0ZW50X2NvYWxlc2NlKHRzZG4s IHBhYywgZWhvb2tzLCBlY2FjaGUsIGVkYXRhLAotCQkJICAgIG5leHQsIHRydWUpKSB7Ci0JCQkJ aWYgKGVjYWNoZS0+ZGVsYXlfY29hbGVzY2UpIHsKLQkJCQkJLyogRG8gbWluaW1hbCBjb2FsZXNj aW5nLiAqLwotCQkJCQkqY29hbGVzY2VkID0gdHJ1ZTsKLQkJCQkJcmV0dXJuIGVkYXRhOwotCQkJ CX0KLQkJCQlhZ2FpbiA9IHRydWU7Ci0JCQl9Ci0JCX0KLQotCQkvKiBUcnkgdG8gY29hbGVzY2Ug YmFja3dhcmQuICovCi0JCWVkYXRhX3QgKnByZXYgPSBlbWFwX3RyeV9hY3F1aXJlX2VkYXRhX25l aWdoYm9yKHRzZG4sIHBhYy0+ZW1hcCwKLQkJICAgIGVkYXRhLCBFWFRFTlRfUEFJX1BBQywgZWNh Y2hlLT5zdGF0ZSwgLyogZm9yd2FyZCAqLyBmYWxzZSk7Ci0JCWlmIChwcmV2ICE9IE5VTEwpIHsK LQkJCWlmICghZXh0ZW50X2NvYWxlc2NlKHRzZG4sIHBhYywgZWhvb2tzLCBlY2FjaGUsIGVkYXRh LAotCQkJICAgIHByZXYsIGZhbHNlKSkgewotCQkJCWVkYXRhID0gcHJldjsKLQkJCQlpZiAoZWNh Y2hlLT5kZWxheV9jb2FsZXNjZSkgewotCQkJCQkvKiBEbyBtaW5pbWFsIGNvYWxlc2NpbmcuICov Ci0JCQkJCSpjb2FsZXNjZWQgPSB0cnVlOwotCQkJCQlyZXR1cm4gZWRhdGE7Ci0JCQkJfQotCQkJ CWFnYWluID0gdHJ1ZTsKLQkJCX0KLQkJfQotCX0gd2hpbGUgKGFnYWluKTsKLQotCWlmIChlY2Fj aGUtPmRlbGF5X2NvYWxlc2NlKSB7Ci0JCSpjb2FsZXNjZWQgPSBmYWxzZTsKLQl9Ci0JcmV0dXJu IGVkYXRhOwotfQotCi1zdGF0aWMgZWRhdGFfdCAqCi1leHRlbnRfdHJ5X2NvYWxlc2NlKHRzZG5f dCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKLSAgICBlY2FjaGVfdCAqZWNh Y2hlLCBlZGF0YV90ICplZGF0YSwgYm9vbCAqY29hbGVzY2VkKSB7Ci0JcmV0dXJuIGV4dGVudF90 cnlfY29hbGVzY2VfaW1wbCh0c2RuLCBwYWMsIGVob29rcywgZWNhY2hlLCBlZGF0YSwKLQkgICAg Y29hbGVzY2VkKTsKLX0KLQotc3RhdGljIGVkYXRhX3QgKgotZXh0ZW50X3RyeV9jb2FsZXNjZV9s YXJnZSh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCi0gICAgZWNh Y2hlX3QgKmVjYWNoZSwgZWRhdGFfdCAqZWRhdGEsIGJvb2wgKmNvYWxlc2NlZCkgewotCXJldHVy biBleHRlbnRfdHJ5X2NvYWxlc2NlX2ltcGwodHNkbiwgcGFjLCBlaG9va3MsIGVjYWNoZSwgZWRh dGEsCi0JICAgIGNvYWxlc2NlZCk7Ci19Ci0KLS8qIFB1cmdlIGEgc2luZ2xlIGV4dGVudCB0byBy ZXRhaW5lZCAvIHVubWFwcGVkIGRpcmVjdGx5LiAqLwotc3RhdGljIHZvaWQKLWV4dGVudF9tYXhp bWFsbHlfcHVyZ2UodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAot ICAgIGVkYXRhX3QgKmVkYXRhKSB7Ci0Jc2l6ZV90IGV4dGVudF9zaXplID0gZWRhdGFfc2l6ZV9n ZXQoZWRhdGEpOwotCWV4dGVudF9kYWxsb2Nfd3JhcHBlcih0c2RuLCBwYWMsIGVob29rcywgZWRh dGEpOwotCWlmIChjb25maWdfc3RhdHMpIHsKLQkJLyogVXBkYXRlIHN0YXRzIGFjY29yZGluZ2x5 LiAqLwotCQlMT0NLRURJTlRfTVRYX0xPQ0sodHNkbiwgKnBhYy0+c3RhdHNfbXR4KTsKLQkJbG9j a2VkX2luY191NjQodHNkbiwKLQkJICAgIExPQ0tFRElOVF9NVFgoKnBhYy0+c3RhdHNfbXR4KSwK LQkJICAgICZwYWMtPnN0YXRzLT5kZWNheV9kaXJ0eS5ubWFkdmlzZSwgMSk7Ci0JCWxvY2tlZF9p bmNfdTY0KHRzZG4sCi0JCSAgICBMT0NLRURJTlRfTVRYKCpwYWMtPnN0YXRzX210eCksCi0JCSAg ICAmcGFjLT5zdGF0cy0+ZGVjYXlfZGlydHkucHVyZ2VkLAotCQkgICAgZXh0ZW50X3NpemUgPj4g TEdfUEFHRSk7Ci0JCUxPQ0tFRElOVF9NVFhfVU5MT0NLKHRzZG4sICpwYWMtPnN0YXRzX210eCk7 Ci0JCWF0b21pY19mZXRjaF9zdWJfenUoJnBhYy0+c3RhdHMtPnBhY19tYXBwZWQsIGV4dGVudF9z aXplLAotCQkgICAgQVRPTUlDX1JFTEFYRUQpOwotCX0KLX0KLQotLyoKLSAqIERvZXMgdGhlIG1l dGFkYXRhIG1hbmFnZW1lbnQgcG9ydGlvbnMgb2YgcHV0dGluZyBhbiB1bnVzZWQgZXh0ZW50IGlu dG8gdGhlCi0gKiBnaXZlbiBlY2FjaGVfdCAoY29hbGVzY2VzIGFuZCBpbnNlcnRzIGludG8gdGhl IGVzZXQpLgotICovCi12b2lkCi1leHRlbnRfcmVjb3JkKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBh YywgZWhvb2tzX3QgKmVob29rcywgZWNhY2hlX3QgKmVjYWNoZSwKLSAgICBlZGF0YV90ICplZGF0 YSkgewotCWFzc2VydCgoZWNhY2hlLT5zdGF0ZSAhPSBleHRlbnRfc3RhdGVfZGlydHkgJiYKLQkg ICAgZWNhY2hlLT5zdGF0ZSAhPSBleHRlbnRfc3RhdGVfbXV6enkpIHx8Ci0JICAgICFlZGF0YV96 ZXJvZWRfZ2V0KGVkYXRhKSk7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZWNhY2hlLT5t dHgpOwotCi0JZW1hcF9hc3NlcnRfbWFwcGVkKHRzZG4sIHBhYy0+ZW1hcCwgZWRhdGEpOwotCi0J aWYgKGVkYXRhX2d1YXJkZWRfZ2V0KGVkYXRhKSkgewotCQlnb3RvIGxhYmVsX3NraXBfY29hbGVz Y2U7Ci0JfQotCWlmICghZWNhY2hlLT5kZWxheV9jb2FsZXNjZSkgewotCQllZGF0YSA9IGV4dGVu dF90cnlfY29hbGVzY2UodHNkbiwgcGFjLCBlaG9va3MsIGVjYWNoZSwgZWRhdGEsCi0JCSAgICBO VUxMKTsKLQl9IGVsc2UgaWYgKGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA+PSBTQ19MQVJHRV9NSU5D TEFTUykgewotCQlhc3NlcnQoZWNhY2hlID09ICZwYWMtPmVjYWNoZV9kaXJ0eSk7Ci0JCS8qIEFs d2F5cyBjb2FsZXNjZSBsYXJnZSBleHRlbnRzIGVhZ2VybHkuICovCi0JCWJvb2wgY29hbGVzY2Vk OwotCQlkbyB7Ci0JCQlhc3NlcnQoZWRhdGFfc3RhdGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3Rh dGVfYWN0aXZlKTsKLQkJCWVkYXRhID0gZXh0ZW50X3RyeV9jb2FsZXNjZV9sYXJnZSh0c2RuLCBw YWMsIGVob29rcywKLQkJCSAgICBlY2FjaGUsIGVkYXRhLCAmY29hbGVzY2VkKTsKLQkJfSB3aGls ZSAoY29hbGVzY2VkKTsKLQkJaWYgKGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA+PQotCQkgICAgYXRv bWljX2xvYWRfenUoJnBhYy0+b3ZlcnNpemVfdGhyZXNob2xkLCBBVE9NSUNfUkVMQVhFRCkKLQkJ ICAgICYmIGV4dGVudF9tYXlfZm9yY2VfZGVjYXkocGFjKSkgewotCQkJLyogU2hvcnRjdXQgdG8g cHVyZ2UgdGhlIG92ZXJzaXplIGV4dGVudCBlYWdlcmx5LiAqLwotCQkJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RuLCAmZWNhY2hlLT5tdHgpOwotCQkJZXh0ZW50X21heGltYWxseV9wdXJnZSh0c2Ru LCBwYWMsIGVob29rcywgZWRhdGEpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotbGFiZWxfc2tpcF9j b2FsZXNjZToKLQlleHRlbnRfZGVhY3RpdmF0ZV9sb2NrZWQodHNkbiwgcGFjLCBlY2FjaGUsIGVk YXRhKTsKLQotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmVjYWNoZS0+bXR4KTsKLX0KLQot dm9pZAotZXh0ZW50X2RhbGxvY19nYXAodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3Nf dCAqZWhvb2tzLAotICAgIGVkYXRhX3QgKmVkYXRhKSB7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhf dG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19D T1JFLCAwKTsKLQotCWlmIChleHRlbnRfcmVnaXN0ZXIodHNkbiwgcGFjLCBlZGF0YSkpIHsKLQkJ ZWRhdGFfY2FjaGVfcHV0KHRzZG4sIHBhYy0+ZWRhdGFfY2FjaGUsIGVkYXRhKTsKLQkJcmV0dXJu OwotCX0KLQlleHRlbnRfZGFsbG9jX3dyYXBwZXIodHNkbiwgcGFjLCBlaG9va3MsIGVkYXRhKTsK LX0KLQotc3RhdGljIGJvb2wKLWV4dGVudF9kYWxsb2Nfd3JhcHBlcl90cnkodHNkbl90ICp0c2Ru LCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAotICAgIGVkYXRhX3QgKmVkYXRhKSB7Ci0J Ym9vbCBlcnI7Ci0KLQlhc3NlcnQoZWRhdGFfYmFzZV9nZXQoZWRhdGEpICE9IE5VTEwpOwotCWFz c2VydChlZGF0YV9zaXplX2dldChlZGF0YSkgIT0gMCk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhf dG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19D T1JFLCAwKTsKLQotCWVkYXRhX2FkZHJfc2V0KGVkYXRhLCBlZGF0YV9iYXNlX2dldChlZGF0YSkp OwotCi0JLyogVHJ5IHRvIGRlYWxsb2NhdGUuICovCi0JZXJyID0gZWhvb2tzX2RhbGxvYyh0c2Ru LCBlaG9va3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKLQkgICAgZWRhdGFfc2l6ZV9nZXQoZWRh dGEpLCBlZGF0YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSk7Ci0KLQlpZiAoIWVycikgewotCQllZGF0 YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5lZGF0YV9jYWNoZSwgZWRhdGEpOwotCX0KLQotCXJldHVy biBlcnI7Ci19Ci0KLWVkYXRhX3QgKgotZXh0ZW50X2FsbG9jX3dyYXBwZXIodHNkbl90ICp0c2Ru LCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAotICAgIHZvaWQgKm5ld19hZGRyLCBzaXpl X3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLCBib29sICpjb21taXQsCi0gICAg Ym9vbCBncm93aW5nX3JldGFpbmVkKSB7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0 c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19DT1JFLCBncm93 aW5nX3JldGFpbmVkID8gMSA6IDApOwotCi0JZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9jYWNoZV9n ZXQodHNkbiwgcGFjLT5lZGF0YV9jYWNoZSk7Ci0JaWYgKGVkYXRhID09IE5VTEwpIHsKLQkJcmV0 dXJuIE5VTEw7Ci0JfQotCXNpemVfdCBwYWxpZ25tZW50ID0gQUxJR05NRU5UX0NFSUxJTkcoYWxp Z25tZW50LCBQQUdFKTsKLQl2b2lkICphZGRyID0gZWhvb2tzX2FsbG9jKHRzZG4sIGVob29rcywg bmV3X2FkZHIsIHNpemUsIHBhbGlnbm1lbnQsCi0JICAgICZ6ZXJvLCBjb21taXQpOwotCWlmIChh ZGRyID09IE5VTEwpIHsKLQkJZWRhdGFfY2FjaGVfcHV0KHRzZG4sIHBhYy0+ZWRhdGFfY2FjaGUs IGVkYXRhKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWVkYXRhX2luaXQoZWRhdGEsIGVjYWNoZV9p bmRfZ2V0KCZwYWMtPmVjYWNoZV9kaXJ0eSksIGFkZHIsCi0JICAgIHNpemUsIC8qIHNsYWIgKi8g ZmFsc2UsIFNDX05TSVpFUywgZXh0ZW50X3NuX25leHQocGFjKSwKLQkgICAgZXh0ZW50X3N0YXRl X2FjdGl2ZSwgemVybywgKmNvbW1pdCwgRVhURU5UX1BBSV9QQUMsCi0JICAgIG9wdF9yZXRhaW4g PyBFWFRFTlRfSVNfSEVBRCA6IEVYVEVOVF9OT1RfSEVBRCk7Ci0JLyoKLQkgKiBSZXRhaW5lZCBt ZW1vcnkgaXMgbm90IGNvdW50ZWQgdG93YXJkcyBnZHVtcC4gIE9ubHkgaWYgYW4gZXh0ZW50IGlz Ci0JICogYWxsb2NhdGVkIGFzIGEgc2VwYXJhdGUgbWFwcGluZywgaS5lLiBncm93aW5nX3JldGFp bmVkIGlzIGZhbHNlLCB0aGVuCi0JICogZ2R1bXAgc2hvdWxkIGJlIHVwZGF0ZWQuCi0JICovCi0J Ym9vbCBnZHVtcF9hZGQgPSAhZ3Jvd2luZ19yZXRhaW5lZDsKLQlpZiAoZXh0ZW50X3JlZ2lzdGVy X2ltcGwodHNkbiwgcGFjLCBlZGF0YSwgZ2R1bXBfYWRkKSkgewotCQllZGF0YV9jYWNoZV9wdXQo dHNkbiwgcGFjLT5lZGF0YV9jYWNoZSwgZWRhdGEpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQly ZXR1cm4gZWRhdGE7Ci19Ci0KLXZvaWQKLWV4dGVudF9kYWxsb2Nfd3JhcHBlcih0c2RuX3QgKnRz ZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsCi0gICAgZWRhdGFfdCAqZWRhdGEpIHsK LQlhc3NlcnQoZWRhdGFfcGFpX2dldChlZGF0YSkgPT0gRVhURU5UX1BBSV9QQUMpOwotCXdpdG5l c3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAg ICBXSVRORVNTX1JBTktfQ09SRSwgMCk7Ci0KLQkvKiBBdm9pZCBjYWxsaW5nIHRoZSBkZWZhdWx0 IGV4dGVudF9kYWxsb2MgdW5sZXNzIGhhdmUgdG8uICovCi0JaWYgKCFlaG9va3NfZGFsbG9jX3dp bGxfZmFpbChlaG9va3MpKSB7Ci0JCS8qIFJlbW92ZSBndWFyZCBwYWdlcyBmb3IgZGFsbG9jIC8g dW5tYXAuICovCi0JCWlmIChlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpIHsKLQkJCWFzc2VydChl aG9va3NfYXJlX2RlZmF1bHQoZWhvb2tzKSk7Ci0JCQlzYW5fdW5ndWFyZF9wYWdlc190d29fc2lk ZWQodHNkbiwgZWhvb2tzLCBlZGF0YSwKLQkJCSAgICBwYWMtPmVtYXApOwotCQl9Ci0JCS8qCi0J CSAqIERlcmVnaXN0ZXIgZmlyc3QgdG8gYXZvaWQgYSByYWNlIHdpdGggb3RoZXIgYWxsb2NhdGlu ZwotCQkgKiB0aHJlYWRzLCBhbmQgcmVyZWdpc3RlciBpZiBkZWFsbG9jYXRpb24gZmFpbHMuCi0J CSAqLwotCQlleHRlbnRfZGVyZWdpc3Rlcih0c2RuLCBwYWMsIGVkYXRhKTsKLQkJaWYgKCFleHRl bnRfZGFsbG9jX3dyYXBwZXJfdHJ5KHRzZG4sIHBhYywgZWhvb2tzLCBlZGF0YSkpIHsKLQkJCXJl dHVybjsKLQkJfQotCQlleHRlbnRfcmVyZWdpc3Rlcih0c2RuLCBwYWMsIGVkYXRhKTsKLQl9Ci0K LQkvKiBUcnkgdG8gZGVjb21taXQ7IHB1cmdlIGlmIHRoYXQgZmFpbHMuICovCi0JYm9vbCB6ZXJv ZWQ7Ci0JaWYgKCFlZGF0YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSkgewotCQl6ZXJvZWQgPSB0cnVl OwotCX0gZWxzZSBpZiAoIWV4dGVudF9kZWNvbW1pdF93cmFwcGVyKHRzZG4sIGVob29rcywgZWRh dGEsIDAsCi0JICAgIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSkpIHsKLQkJemVyb2VkID0gdHJ1ZTsK LQl9IGVsc2UgaWYgKCFlaG9va3NfcHVyZ2VfZm9yY2VkKHRzZG4sIGVob29rcywgZWRhdGFfYmFz ZV9nZXQoZWRhdGEpLAotCSAgICBlZGF0YV9zaXplX2dldChlZGF0YSksIDAsIGVkYXRhX3NpemVf Z2V0KGVkYXRhKSkpIHsKLQkJemVyb2VkID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKGVkYXRhX3N0YXRl X2dldChlZGF0YSkgPT0gZXh0ZW50X3N0YXRlX211enp5IHx8Ci0JICAgICFlaG9va3NfcHVyZ2Vf bGF6eSh0c2RuLCBlaG9va3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKLQkgICAgZWRhdGFfc2l6 ZV9nZXQoZWRhdGEpLCAwLCBlZGF0YV9zaXplX2dldChlZGF0YSkpKSB7Ci0JCXplcm9lZCA9IGZh bHNlOwotCX0gZWxzZSB7Ci0JCXplcm9lZCA9IGZhbHNlOwotCX0KLQllZGF0YV96ZXJvZWRfc2V0 KGVkYXRhLCB6ZXJvZWQpOwotCi0JaWYgKGNvbmZpZ19wcm9mKSB7Ci0JCWV4dGVudF9nZHVtcF9z dWIodHNkbiwgZWRhdGEpOwotCX0KLQotCWV4dGVudF9yZWNvcmQodHNkbiwgcGFjLCBlaG9va3Ms ICZwYWMtPmVjYWNoZV9yZXRhaW5lZCwgZWRhdGEpOwotfQotCi12b2lkCi1leHRlbnRfZGVzdHJv eV93cmFwcGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywKLSAg ICBlZGF0YV90ICplZGF0YSkgewotCWFzc2VydChlZGF0YV9iYXNlX2dldChlZGF0YSkgIT0gTlVM TCk7Ci0JYXNzZXJ0KGVkYXRhX3NpemVfZ2V0KGVkYXRhKSAhPSAwKTsKLQlleHRlbnRfc3RhdGVf dCBzdGF0ZSA9IGVkYXRhX3N0YXRlX2dldChlZGF0YSk7Ci0JYXNzZXJ0KHN0YXRlID09IGV4dGVu dF9zdGF0ZV9yZXRhaW5lZCB8fCBzdGF0ZSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsKLQlhc3Nl cnQoZW1hcF9lZGF0YV9pc19hY3F1aXJlZCh0c2RuLCBwYWMtPmVtYXAsIGVkYXRhKSk7Ci0Jd2l0 bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0J ICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQotCWlmIChlZGF0YV9ndWFyZGVkX2dldChlZGF0 YSkpIHsKLQkJYXNzZXJ0KG9wdF9yZXRhaW4pOwotCQlzYW5fdW5ndWFyZF9wYWdlc19wcmVfZGVz dHJveSh0c2RuLCBlaG9va3MsIGVkYXRhLCBwYWMtPmVtYXApOwotCX0KLQllZGF0YV9hZGRyX3Nl dChlZGF0YSwgZWRhdGFfYmFzZV9nZXQoZWRhdGEpKTsKLQotCS8qIFRyeSB0byBkZXN0cm95OyBz aWxlbnRseSBmYWlsIG90aGVyd2lzZS4gKi8KLQllaG9va3NfZGVzdHJveSh0c2RuLCBlaG9va3Ms IGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwKLQkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBlZGF0 YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSk7Ci0KLQllZGF0YV9jYWNoZV9wdXQodHNkbiwgcGFjLT5l ZGF0YV9jYWNoZSwgZWRhdGEpOwotfQotCi1zdGF0aWMgYm9vbAotZXh0ZW50X2NvbW1pdF9pbXBs KHRzZG5fdCAqdHNkbiwgZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAqZWRhdGEsCi0gICAgc2l6 ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgYm9vbCBncm93aW5nX3JldGFpbmVkKSB7Ci0Jd2l0 bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0J ICAgIFdJVE5FU1NfUkFOS19DT1JFLCBncm93aW5nX3JldGFpbmVkID8gMSA6IDApOwotCWJvb2wg ZXJyID0gZWhvb2tzX2NvbW1pdCh0c2RuLCBlaG9va3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwK LQkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBvZmZzZXQsIGxlbmd0aCk7Ci0JZWRhdGFfY29t bWl0dGVkX3NldChlZGF0YSwgZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSkgfHwgIWVycik7Ci0J cmV0dXJuIGVycjsKLX0KLQotYm9vbAotZXh0ZW50X2NvbW1pdF93cmFwcGVyKHRzZG5fdCAqdHNk biwgZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAqZWRhdGEsCi0gICAgc2l6ZV90IG9mZnNldCwg c2l6ZV90IGxlbmd0aCkgewotCXJldHVybiBleHRlbnRfY29tbWl0X2ltcGwodHNkbiwgZWhvb2tz LCBlZGF0YSwgb2Zmc2V0LCBsZW5ndGgsCi0JICAgIC8qIGdyb3dpbmdfcmV0YWluZWQgKi8gZmFs c2UpOwotfQotCi1ib29sCi1leHRlbnRfZGVjb21taXRfd3JhcHBlcih0c2RuX3QgKnRzZG4sIGVo b29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVf dCBsZW5ndGgpIHsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190 c2RwX2dldCh0c2RuKSwKLQkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDApOwotCWJvb2wgZXJyID0g ZWhvb2tzX2RlY29tbWl0KHRzZG4sIGVob29rcywgZWRhdGFfYmFzZV9nZXQoZWRhdGEpLAotCSAg ICBlZGF0YV9zaXplX2dldChlZGF0YSksIG9mZnNldCwgbGVuZ3RoKTsKLQllZGF0YV9jb21taXR0 ZWRfc2V0KGVkYXRhLCBlZGF0YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSAmJiBlcnIpOwotCXJldHVy biBlcnI7Ci19Ci0KLXN0YXRpYyBib29sCi1leHRlbnRfcHVyZ2VfbGF6eV9pbXBsKHRzZG5fdCAq dHNkbiwgZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAqZWRhdGEsCi0gICAgc2l6ZV90IG9mZnNl dCwgc2l6ZV90IGxlbmd0aCwgYm9vbCBncm93aW5nX3JldGFpbmVkKSB7Ci0Jd2l0bmVzc19hc3Nl cnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5F U1NfUkFOS19DT1JFLCBncm93aW5nX3JldGFpbmVkID8gMSA6IDApOwotCWJvb2wgZXJyID0gZWhv b2tzX3B1cmdlX2xhenkodHNkbiwgZWhvb2tzLCBlZGF0YV9iYXNlX2dldChlZGF0YSksCi0JICAg IGVkYXRhX3NpemVfZ2V0KGVkYXRhKSwgb2Zmc2V0LCBsZW5ndGgpOwotCXJldHVybiBlcnI7Ci19 Ci0KLWJvb2wKLWV4dGVudF9wdXJnZV9sYXp5X3dyYXBwZXIodHNkbl90ICp0c2RuLCBlaG9va3Nf dCAqZWhvb2tzLCBlZGF0YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVu Z3RoKSB7Ci0JcmV0dXJuIGV4dGVudF9wdXJnZV9sYXp5X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0 YSwgb2Zmc2V0LAotCSAgICBsZW5ndGgsIGZhbHNlKTsKLX0KLQotc3RhdGljIGJvb2wKLWV4dGVu dF9wdXJnZV9mb3JjZWRfaW1wbCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRh X3QgKmVkYXRhLAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIGJvb2wgZ3Jvd2lu Z19yZXRhaW5lZCkgewotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNz X3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRORVNTX1JBTktfQ09SRSwgZ3Jvd2luZ19yZXRhaW5l ZCA/IDEgOiAwKTsKLQlib29sIGVyciA9IGVob29rc19wdXJnZV9mb3JjZWQodHNkbiwgZWhvb2tz LCBlZGF0YV9iYXNlX2dldChlZGF0YSksCi0JICAgIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSwgb2Zm c2V0LCBsZW5ndGgpOwotCXJldHVybiBlcnI7Ci19Ci0KLWJvb2wKLWV4dGVudF9wdXJnZV9mb3Jj ZWRfd3JhcHBlcih0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRh LAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIHsKLQlyZXR1cm4gZXh0ZW50X3B1 cmdlX2ZvcmNlZF9pbXBsKHRzZG4sIGVob29rcywgZWRhdGEsIG9mZnNldCwgbGVuZ3RoLAotCSAg ICBmYWxzZSk7Ci19Ci0KLS8qCi0gKiBBY2NlcHRzIHRoZSBleHRlbnQgdG8gc3BsaXQsIGFuZCB0 aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGVhY2ggc2lkZSBvZiB0aGUKLSAqIHNwbGl0LiAgVGhlICdh JyBwYXJhbWV0ZXJzIGdvIHdpdGggdGhlICdsZWFkJyBvZiB0aGUgcmVzdWx0aW5nIHBhaXIgb2YK LSAqIGV4dGVudHMgKHRoZSBsb3dlciBhZGRyZXNzZWQgcG9ydGlvbiBvZiB0aGUgc3BsaXQpLCBh bmQgdGhlICdiJyBwYXJhbWV0ZXJzIGdvCi0gKiB3aXRoIHRoZSB0cmFpbCAodGhlIGhpZ2hlciBh ZGRyZXNzZWQgcG9ydGlvbikuICBUaGlzIG1ha2VzICdleHRlbnQnIHRoZSBsZWFkLAotICogYW5k IHJldHVybnMgdGhlIHRyYWlsIChleGNlcHQgaW4gY2FzZSBvZiBlcnJvcikuCi0gKi8KLXN0YXRp YyBlZGF0YV90ICoKLWV4dGVudF9zcGxpdF9pbXBsKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywg ZWhvb2tzX3QgKmVob29rcywKLSAgICBlZGF0YV90ICplZGF0YSwgc2l6ZV90IHNpemVfYSwgc2l6 ZV90IHNpemVfYiwgYm9vbCBob2xkaW5nX2NvcmVfbG9ja3MpIHsKLQlhc3NlcnQoZWRhdGFfc2l6 ZV9nZXQoZWRhdGEpID09IHNpemVfYSArIHNpemVfYik7Ci0JLyogT25seSB0aGUgc2hyaW5rIHBh dGggbWF5IHNwbGl0IHcvbyBob2xkaW5nIGNvcmUgbG9ja3MuICovCi0JaWYgKGhvbGRpbmdfY29y ZV9sb2NrcykgewotCQl3aXRuZXNzX2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKAotCQkg ICAgdHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLCBXSVRORVNTX1JBTktfQ09SRSk7Ci0JfSBl bHNlIHsKLQkJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9n ZXQodHNkbiksCi0JCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7Ci0JfQotCi0JaWYgKGVob29r c19zcGxpdF93aWxsX2ZhaWwoZWhvb2tzKSkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQllZGF0 YV90ICp0cmFpbCA9IGVkYXRhX2NhY2hlX2dldCh0c2RuLCBwYWMtPmVkYXRhX2NhY2hlKTsKLQlp ZiAodHJhaWwgPT0gTlVMTCkgewotCQlnb3RvIGxhYmVsX2Vycm9yX2E7Ci0JfQotCi0JZWRhdGFf aW5pdCh0cmFpbCwgZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSksCi0JICAgICh2b2lkICopKCh1 aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpICsgc2l6ZV9hKSwgc2l6ZV9iLAotCSAgICAv KiBzbGFiICovIGZhbHNlLCBTQ19OU0laRVMsIGVkYXRhX3NuX2dldChlZGF0YSksCi0JICAgIGVk YXRhX3N0YXRlX2dldChlZGF0YSksIGVkYXRhX3plcm9lZF9nZXQoZWRhdGEpLAotCSAgICBlZGF0 YV9jb21taXR0ZWRfZ2V0KGVkYXRhKSwgRVhURU5UX1BBSV9QQUMsIEVYVEVOVF9OT1RfSEVBRCk7 Ci0JZW1hcF9wcmVwYXJlX3QgcHJlcGFyZTsKLQlib29sIGVyciA9IGVtYXBfc3BsaXRfcHJlcGFy ZSh0c2RuLCBwYWMtPmVtYXAsICZwcmVwYXJlLCBlZGF0YSwKLQkgICAgc2l6ZV9hLCB0cmFpbCwg c2l6ZV9iKTsKLQlpZiAoZXJyKSB7Ci0JCWdvdG8gbGFiZWxfZXJyb3JfYjsKLQl9Ci0KLQkvKgot CSAqIE5vIG5lZWQgdG8gYWNxdWlyZSB0cmFpbCBvciBlZGF0YSwgYmVjYXVzZTogMSkgdHJhaWwg d2FzIG5ldyAoanVzdAotCSAqIGFsbG9jYXRlZCk7IGFuZCAyKSBlZGF0YSBpcyBlaXRoZXIgYW4g YWN0aXZlIGFsbG9jYXRpb24gKHRoZSBzaHJpbmsKLQkgKiBwYXRoKSwgb3IgaW4gYW4gYWNxdWly ZWQgc3RhdGUgKGV4dHJhY3RlZCBmcm9tIHRoZSBlY2FjaGUgb24gdGhlCi0JICogZXh0ZW50X3Jl Y3ljbGVfc3BsaXQgcGF0aCkuCi0JICovCi0JYXNzZXJ0KGVtYXBfZWRhdGFfaXNfYWNxdWlyZWQo dHNkbiwgcGFjLT5lbWFwLCBlZGF0YSkpOwotCWFzc2VydChlbWFwX2VkYXRhX2lzX2FjcXVpcmVk KHRzZG4sIHBhYy0+ZW1hcCwgdHJhaWwpKTsKLQotCWVyciA9IGVob29rc19zcGxpdCh0c2RuLCBl aG9va3MsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSwgc2l6ZV9hICsgc2l6ZV9iLAotCSAgICBzaXpl X2EsIHNpemVfYiwgZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSkpOwotCi0JaWYgKGVycikgewot CQlnb3RvIGxhYmVsX2Vycm9yX2I7Ci0JfQotCi0JZWRhdGFfc2l6ZV9zZXQoZWRhdGEsIHNpemVf YSk7Ci0JZW1hcF9zcGxpdF9jb21taXQodHNkbiwgcGFjLT5lbWFwLCAmcHJlcGFyZSwgZWRhdGEs IHNpemVfYSwgdHJhaWwsCi0JICAgIHNpemVfYik7Ci0KLQlyZXR1cm4gdHJhaWw7Ci1sYWJlbF9l cnJvcl9iOgotCWVkYXRhX2NhY2hlX3B1dCh0c2RuLCBwYWMtPmVkYXRhX2NhY2hlLCB0cmFpbCk7 Ci1sYWJlbF9lcnJvcl9hOgotCXJldHVybiBOVUxMOwotfQotCi1lZGF0YV90ICoKLWV4dGVudF9z cGxpdF93cmFwcGVyKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywg ZWRhdGFfdCAqZWRhdGEsCi0gICAgc2l6ZV90IHNpemVfYSwgc2l6ZV90IHNpemVfYiwgYm9vbCBo b2xkaW5nX2NvcmVfbG9ja3MpIHsKLQlyZXR1cm4gZXh0ZW50X3NwbGl0X2ltcGwodHNkbiwgcGFj LCBlaG9va3MsIGVkYXRhLCBzaXplX2EsIHNpemVfYiwKLQkgICAgaG9sZGluZ19jb3JlX2xvY2tz KTsKLX0KLQotc3RhdGljIGJvb2wKLWV4dGVudF9tZXJnZV9pbXBsKHRzZG5fdCAqdHNkbiwgcGFj X3QgKnBhYywgZWhvb2tzX3QgKmVob29rcywgZWRhdGFfdCAqYSwKLSAgICBlZGF0YV90ICpiLCBi b29sIGhvbGRpbmdfY29yZV9sb2NrcykgewotCS8qIE9ubHkgdGhlIGV4cGFuZGluZyBwYXRoIG1h eSBtZXJnZSB3L28gaG9sZGluZyBlY2FjaGUgbG9ja3MuICovCi0JaWYgKGhvbGRpbmdfY29yZV9s b2NrcykgewotCQl3aXRuZXNzX2Fzc2VydF9wb3NpdGl2ZV9kZXB0aF90b19yYW5rKAotCQkgICAg dHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLCBXSVRORVNTX1JBTktfQ09SRSk7Ci0JfSBlbHNl IHsKLQkJd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQo dHNkbiksCi0JCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7Ci0JfQotCi0JYXNzZXJ0KGVkYXRh X2Jhc2VfZ2V0KGEpIDwgZWRhdGFfYmFzZV9nZXQoYikpOwotCWFzc2VydChlZGF0YV9hcmVuYV9p bmRfZ2V0KGEpID09IGVkYXRhX2FyZW5hX2luZF9nZXQoYikpOwotCWFzc2VydChlZGF0YV9hcmVu YV9pbmRfZ2V0KGEpID09IGVob29rc19pbmRfZ2V0KGVob29rcykpOwotCWVtYXBfYXNzZXJ0X21h cHBlZCh0c2RuLCBwYWMtPmVtYXAsIGEpOwotCWVtYXBfYXNzZXJ0X21hcHBlZCh0c2RuLCBwYWMt PmVtYXAsIGIpOwotCi0JYm9vbCBlcnIgPSBlaG9va3NfbWVyZ2UodHNkbiwgZWhvb2tzLCBlZGF0 YV9iYXNlX2dldChhKSwKLQkgICAgZWRhdGFfc2l6ZV9nZXQoYSksIGVkYXRhX2Jhc2VfZ2V0KGIp LCBlZGF0YV9zaXplX2dldChiKSwKLQkgICAgZWRhdGFfY29tbWl0dGVkX2dldChhKSk7Ci0KLQlp ZiAoZXJyKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogVGhlIHJ0cmVlIHdyaXRl cyBtdXN0IGhhcHBlbiB3aGlsZSBhbGwgdGhlIHJlbGV2YW50IGVsZW1lbnRzIGFyZQotCSAqIG93 bmVkLCBzbyB0aGUgZm9sbG93aW5nIGNvZGUgdXNlcyBkZWNvbXBvc2VkIGhlbHBlciBmdW5jdGlv bnMgcmF0aGVyCi0JICogdGhhbiBleHRlbnRfeyxkZX1yZWdpc3RlcigpIHRvIGRvIHRoaW5ncyBp biB0aGUgcmlnaHQgb3JkZXIuCi0JICovCi0JZW1hcF9wcmVwYXJlX3QgcHJlcGFyZTsKLQllbWFw X21lcmdlX3ByZXBhcmUodHNkbiwgcGFjLT5lbWFwLCAmcHJlcGFyZSwgYSwgYik7Ci0KLQlhc3Nl cnQoZWRhdGFfc3RhdGVfZ2V0KGEpID09IGV4dGVudF9zdGF0ZV9hY3RpdmUgfHwKLQkgICAgZWRh dGFfc3RhdGVfZ2V0KGEpID09IGV4dGVudF9zdGF0ZV9tZXJnaW5nKTsKLQllZGF0YV9zdGF0ZV9z ZXQoYSwgZXh0ZW50X3N0YXRlX2FjdGl2ZSk7Ci0JZWRhdGFfc2l6ZV9zZXQoYSwgZWRhdGFfc2l6 ZV9nZXQoYSkgKyBlZGF0YV9zaXplX2dldChiKSk7Ci0JZWRhdGFfc25fc2V0KGEsIChlZGF0YV9z bl9nZXQoYSkgPCBlZGF0YV9zbl9nZXQoYikpID8KLQkgICAgZWRhdGFfc25fZ2V0KGEpIDogZWRh dGFfc25fZ2V0KGIpKTsKLQllZGF0YV96ZXJvZWRfc2V0KGEsIGVkYXRhX3plcm9lZF9nZXQoYSkg JiYgZWRhdGFfemVyb2VkX2dldChiKSk7Ci0KLQllbWFwX21lcmdlX2NvbW1pdCh0c2RuLCBwYWMt PmVtYXAsICZwcmVwYXJlLCBhLCBiKTsKLQotCWVkYXRhX2NhY2hlX3B1dCh0c2RuLCBwYWMtPmVk YXRhX2NhY2hlLCBiKTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotYm9vbAotZXh0ZW50X21lcmdl X3dyYXBwZXIodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlaG9va3NfdCAqZWhvb2tzLAotICAg IGVkYXRhX3QgKmEsIGVkYXRhX3QgKmIpIHsKLQlyZXR1cm4gZXh0ZW50X21lcmdlX2ltcGwodHNk biwgcGFjLCBlaG9va3MsIGEsIGIsCi0JICAgIC8qIGhvbGRpbmdfY29yZV9sb2NrcyAqLyBmYWxz ZSk7Ci19Ci0KLWJvb2wKLWV4dGVudF9jb21taXRfemVybyh0c2RuX3QgKnRzZG4sIGVob29rc190 ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAotICAgIGJvb2wgY29tbWl0LCBib29sIHplcm8sIGJv b2wgZ3Jvd2luZ19yZXRhaW5lZCkgewotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNk bl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRORVNTX1JBTktfQ09SRSwgZ3Jvd2lu Z19yZXRhaW5lZCA/IDEgOiAwKTsKLQotCWlmIChjb21taXQgJiYgIWVkYXRhX2NvbW1pdHRlZF9n ZXQoZWRhdGEpKSB7Ci0JCWlmIChleHRlbnRfY29tbWl0X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0 YSwgMCwKLQkJICAgIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSwgZ3Jvd2luZ19yZXRhaW5lZCkpIHsK LQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCWlmICh6ZXJvICYmICFlZGF0YV96ZXJvZWRfZ2V0 KGVkYXRhKSkgewotCQl2b2lkICphZGRyID0gZWRhdGFfYmFzZV9nZXQoZWRhdGEpOwotCQlzaXpl X3Qgc2l6ZSA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKTsKLQkJZWhvb2tzX3plcm8odHNkbiwgZWhv b2tzLCBhZGRyLCBzaXplKTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1ib29sCi1leHRlbnRf Ym9vdCh2b2lkKSB7Ci0JYXNzZXJ0KHNpemVvZihzbGFiX2RhdGFfdCkgPj0gc2l6ZW9mKGVfcHJv Zl9pbmZvX3QpKTsKLQotCWlmIChoYXZlX2RzcykgewotCQlleHRlbnRfZHNzX2Jvb3QoKTsKLQl9 Ci0KLQlyZXR1cm4gZmFsc2U7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvc3JjL2V4dGVudF9kc3MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9leHRlbnRfZHNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDlhMzViYWMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL2V4dGVudF9kc3MuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NyAr MCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5o IgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvZXh0ZW50X2Rzcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3NwaW4uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERhdGEuICovCi0KLWNvbnN0 IGNoYXIJKm9wdF9kc3MgPSBEU1NfREVGQVVMVDsKLQotY29uc3QgY2hhcgkqZHNzX3ByZWNfbmFt ZXNbXSA9IHsKLQkiZGlzYWJsZWQiLAotCSJwcmltYXJ5IiwKLQkic2Vjb25kYXJ5IiwKLQkiTi9B IgotfTsKLQotLyoKLSAqIEN1cnJlbnQgZHNzIHByZWNlZGVuY2UgZGVmYXVsdCwgdXNlZCB3aGVu IGNyZWF0aW5nIG5ldyBhcmVuYXMuICBOQjogVGhpcyBpcwotICogc3RvcmVkIGFzIHVuc2lnbmVk IHJhdGhlciB0aGFuIGRzc19wcmVjX3QgYmVjYXVzZSBpbiBwcmluY2lwbGUgdGhlcmUncyBubwot ICogZ3VhcmFudGVlIHRoYXQgc2l6ZW9mKGRzc19wcmVjX3QpIGlzIHRoZSBzYW1lIGFzIHNpemVv Zih1bnNpZ25lZCksIGFuZCB3ZSB1c2UKLSAqIGF0b21pYyBvcGVyYXRpb25zIHRvIHN5bmNocm9u aXplIHRoZSBzZXR0aW5nLgotICovCi1zdGF0aWMgYXRvbWljX3VfdAlkc3NfcHJlY19kZWZhdWx0 ID0gQVRPTUlDX0lOSVQoCi0gICAgKHVuc2lnbmVkKURTU19QUkVDX0RFRkFVTFQpOwotCi0vKiBC YXNlIGFkZHJlc3Mgb2YgdGhlIERTUy4gKi8KLXN0YXRpYyB2b2lkCQkqZHNzX2Jhc2U7Ci0vKiBB dG9taWMgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSB0aHJlYWQgaXMgY3VycmVudGx5IGV4 dGVuZGluZyBEU1MuICovCi1zdGF0aWMgYXRvbWljX2JfdAlkc3NfZXh0ZW5kaW5nOwotLyogQXRv bWljIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBEU1MgaXMgZXhoYXVzdGVkLiAqLwot c3RhdGljIGF0b21pY19iX3QJZHNzX2V4aGF1c3RlZDsKLS8qIEF0b21pYyBjdXJyZW50IHVwcGVy IGxpbWl0IG9uIERTUyBhZGRyZXNzZXMuICovCi1zdGF0aWMgYXRvbWljX3BfdAlkc3NfbWF4Owot Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCAqCi1leHRlbnRfZHNzX3Ni cmsoaW50cHRyX3QgaW5jcmVtZW50KSB7Ci0jaWZkZWYgSkVNQUxMT0NfRFNTCi0JcmV0dXJuIHNi cmsoaW5jcmVtZW50KTsKLSNlbHNlCi0Jbm90X2ltcGxlbWVudGVkKCk7Ci0JcmV0dXJuIE5VTEw7 Ci0jZW5kaWYKLX0KLQotZHNzX3ByZWNfdAotZXh0ZW50X2Rzc19wcmVjX2dldCh2b2lkKSB7Ci0J ZHNzX3ByZWNfdCByZXQ7Ci0KLQlpZiAoIWhhdmVfZHNzKSB7Ci0JCXJldHVybiBkc3NfcHJlY19k aXNhYmxlZDsKLQl9Ci0JcmV0ID0gKGRzc19wcmVjX3QpYXRvbWljX2xvYWRfdSgmZHNzX3ByZWNf ZGVmYXVsdCwgQVRPTUlDX0FDUVVJUkUpOwotCXJldHVybiByZXQ7Ci19Ci0KLWJvb2wKLWV4dGVu dF9kc3NfcHJlY19zZXQoZHNzX3ByZWNfdCBkc3NfcHJlYykgewotCWlmICghaGF2ZV9kc3MpIHsK LQkJcmV0dXJuIChkc3NfcHJlYyAhPSBkc3NfcHJlY19kaXNhYmxlZCk7Ci0JfQotCWF0b21pY19z dG9yZV91KCZkc3NfcHJlY19kZWZhdWx0LCAodW5zaWduZWQpZHNzX3ByZWMsIEFUT01JQ19SRUxF QVNFKTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1leHRlbnRfZHNzX2V4dGVu ZGluZ19zdGFydCh2b2lkKSB7Ci0Jc3Bpbl90IHNwaW5uZXIgPSBTUElOX0lOSVRJQUxJWkVSOwot CXdoaWxlICh0cnVlKSB7Ci0JCWJvb2wgZXhwZWN0ZWQgPSBmYWxzZTsKLQkJaWYgKGF0b21pY19j b21wYXJlX2V4Y2hhbmdlX3dlYWtfYigmZHNzX2V4dGVuZGluZywgJmV4cGVjdGVkLAotCQkgICAg dHJ1ZSwgQVRPTUlDX0FDUV9SRUwsIEFUT01JQ19SRUxBWEVEKSkgewotCQkJYnJlYWs7Ci0JCX0K LQkJc3Bpbl9hZGFwdGl2ZSgmc3Bpbm5lcik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZXh0ZW50 X2Rzc19leHRlbmRpbmdfZmluaXNoKHZvaWQpIHsKLQlhc3NlcnQoYXRvbWljX2xvYWRfYigmZHNz X2V4dGVuZGluZywgQVRPTUlDX1JFTEFYRUQpKTsKLQotCWF0b21pY19zdG9yZV9iKCZkc3NfZXh0 ZW5kaW5nLCBmYWxzZSwgQVRPTUlDX1JFTEVBU0UpOwotfQotCi1zdGF0aWMgdm9pZCAqCi1leHRl bnRfZHNzX21heF91cGRhdGUodm9pZCAqbmV3X2FkZHIpIHsKLQkvKgotCSAqIEdldCB0aGUgY3Vy cmVudCBlbmQgb2YgdGhlIERTUyBhcyBtYXhfY3VyIGFuZCBhc3N1cmUgdGhhdCBkc3NfbWF4IGlz Ci0JICogdXAgdG8gZGF0ZS4KLQkgKi8KLQl2b2lkICptYXhfY3VyID0gZXh0ZW50X2Rzc19zYnJr KDApOwotCWlmIChtYXhfY3VyID09ICh2b2lkICopLTEpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQot CWF0b21pY19zdG9yZV9wKCZkc3NfbWF4LCBtYXhfY3VyLCBBVE9NSUNfUkVMRUFTRSk7Ci0JLyog Rml4ZWQgbmV3X2FkZHIgY2FuIG9ubHkgYmUgc3VwcG9ydGVkIGlmIGl0IGlzIGF0IHRoZSBlZGdl IG9mIERTUy4gKi8KLQlpZiAobmV3X2FkZHIgIT0gTlVMTCAmJiBtYXhfY3VyICE9IG5ld19hZGRy KSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gbWF4X2N1cjsKLX0KLQotdm9pZCAqCi1l eHRlbnRfYWxsb2NfZHNzKHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHZvaWQgKm5ld19h ZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLCBib29s ICpjb21taXQpIHsKLQllZGF0YV90ICpnYXA7Ci0KLQljYXNzZXJ0KGhhdmVfZHNzKTsKLQlhc3Nl cnQoc2l6ZSA+IDApOwotCWFzc2VydChhbGlnbm1lbnQgPT0gQUxJR05NRU5UX0NFSUxJTkcoYWxp Z25tZW50LCBQQUdFKSk7Ci0KLQkvKgotCSAqIHNicmsoKSB1c2VzIGEgc2lnbmVkIGluY3JlbWVu dCBhcmd1bWVudCwgc28gdGFrZSBjYXJlIG5vdCB0bwotCSAqIGludGVycHJldCBhIGxhcmdlIGFs bG9jYXRpb24gcmVxdWVzdCBhcyBhIG5lZ2F0aXZlIGluY3JlbWVudC4KLQkgKi8KLQlpZiAoKGlu dHB0cl90KXNpemUgPCAwKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWdhcCA9IGVkYXRhX2Nh Y2hlX2dldCh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkLmVkYXRhX2NhY2hlKTsKLQlpZiAoZ2FwID09 IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZXh0ZW50X2Rzc19leHRlbmRpbmdfc3Rh cnQoKTsKLQlpZiAoIWF0b21pY19sb2FkX2IoJmRzc19leGhhdXN0ZWQsIEFUT01JQ19BQ1FVSVJF KSkgewotCQkvKgotCQkgKiBUaGUgbG9vcCBpcyBuZWNlc3NhcnkgdG8gcmVjb3ZlciBmcm9tIHJh Y2VzIHdpdGggb3RoZXIKLQkJICogdGhyZWFkcyB0aGF0IGFyZSB1c2luZyB0aGUgRFNTIGZvciBz b21ldGhpbmcgb3RoZXIgdGhhbgotCQkgKiBtYWxsb2MuCi0JCSAqLwotCQl3aGlsZSAodHJ1ZSkg ewotCQkJdm9pZCAqbWF4X2N1ciA9IGV4dGVudF9kc3NfbWF4X3VwZGF0ZShuZXdfYWRkcik7Ci0J CQlpZiAobWF4X2N1ciA9PSBOVUxMKSB7Ci0JCQkJZ290byBsYWJlbF9vb207Ci0JCQl9Ci0KLQkJ CWJvb2wgaGVhZF9zdGF0ZSA9IG9wdF9yZXRhaW4gPyBFWFRFTlRfSVNfSEVBRCA6Ci0JCQkgICAg RVhURU5UX05PVF9IRUFEOwotCQkJLyoKLQkJCSAqIENvbXB1dGUgaG93IG11Y2ggcGFnZS1hbGln bmVkIGdhcCBzcGFjZSAoaWYgYW55KSBpcwotCQkJICogbmVjZXNzYXJ5IHRvIHNhdGlzZnkgYWxp Z25tZW50LiAgVGhpcyBzcGFjZSBjYW4gYmUKLQkJCSAqIHJlY3ljbGVkIGZvciBsYXRlciB1c2Uu Ci0JCQkgKi8KLQkJCXZvaWQgKmdhcF9hZGRyX3BhZ2UgPSAodm9pZCAqKShQQUdFX0NFSUxJTkco Ci0JCQkgICAgKHVpbnRwdHJfdCltYXhfY3VyKSk7Ci0JCQl2b2lkICpyZXQgPSAodm9pZCAqKUFM SUdOTUVOVF9DRUlMSU5HKAotCQkJICAgICh1aW50cHRyX3QpZ2FwX2FkZHJfcGFnZSwgYWxpZ25t ZW50KTsKLQkJCXNpemVfdCBnYXBfc2l6ZV9wYWdlID0gKHVpbnRwdHJfdClyZXQgLQotCQkJICAg ICh1aW50cHRyX3QpZ2FwX2FkZHJfcGFnZTsKLQkJCWlmIChnYXBfc2l6ZV9wYWdlICE9IDApIHsK LQkJCQllZGF0YV9pbml0KGdhcCwgYXJlbmFfaW5kX2dldChhcmVuYSksCi0JCQkJICAgIGdhcF9h ZGRyX3BhZ2UsIGdhcF9zaXplX3BhZ2UsIGZhbHNlLAotCQkJCSAgICBTQ19OU0laRVMsIGV4dGVu dF9zbl9uZXh0KAotCQkJCQkmYXJlbmEtPnBhX3NoYXJkLnBhYyksCi0JCQkJICAgIGV4dGVudF9z dGF0ZV9hY3RpdmUsIGZhbHNlLCB0cnVlLAotCQkJCSAgICBFWFRFTlRfUEFJX1BBQywgaGVhZF9z dGF0ZSk7Ci0JCQl9Ci0JCQkvKgotCQkJICogQ29tcHV0ZSB0aGUgYWRkcmVzcyBqdXN0IHBhc3Qg dGhlIGVuZCBvZiB0aGUgZGVzaXJlZAotCQkJICogYWxsb2NhdGlvbiBzcGFjZS4KLQkJCSAqLwot CQkJdm9pZCAqZHNzX25leHQgPSAodm9pZCAqKSgodWludHB0cl90KXJldCArIHNpemUpOwotCQkJ aWYgKCh1aW50cHRyX3QpcmV0IDwgKHVpbnRwdHJfdCltYXhfY3VyIHx8Ci0JCQkgICAgKHVpbnRw dHJfdClkc3NfbmV4dCA8ICh1aW50cHRyX3QpbWF4X2N1cikgewotCQkJCWdvdG8gbGFiZWxfb29t OyAvKiBXcmFwLWFyb3VuZC4gKi8KLQkJCX0KLQkJCS8qIENvbXB1dGUgdGhlIGluY3JlbWVudCwg aW5jbHVkaW5nIHN1YnBhZ2UgYnl0ZXMuICovCi0JCQl2b2lkICpnYXBfYWRkcl9zdWJwYWdlID0g bWF4X2N1cjsKLQkJCXNpemVfdCBnYXBfc2l6ZV9zdWJwYWdlID0gKHVpbnRwdHJfdClyZXQgLQot CQkJICAgICh1aW50cHRyX3QpZ2FwX2FkZHJfc3VicGFnZTsKLQkJCWludHB0cl90IGluY3IgPSBn YXBfc2l6ZV9zdWJwYWdlICsgc2l6ZTsKLQotCQkJYXNzZXJ0KCh1aW50cHRyX3QpbWF4X2N1ciAr IGluY3IgPT0gKHVpbnRwdHJfdClyZXQgKwotCQkJICAgIHNpemUpOwotCi0JCQkvKiBUcnkgdG8g YWxsb2NhdGUuICovCi0JCQl2b2lkICpkc3NfcHJldiA9IGV4dGVudF9kc3Nfc2JyayhpbmNyKTsK LQkJCWlmIChkc3NfcHJldiA9PSBtYXhfY3VyKSB7Ci0JCQkJLyogU3VjY2Vzcy4gKi8KLQkJCQlh dG9taWNfc3RvcmVfcCgmZHNzX21heCwgZHNzX25leHQsCi0JCQkJICAgIEFUT01JQ19SRUxFQVNF KTsKLQkJCQlleHRlbnRfZHNzX2V4dGVuZGluZ19maW5pc2goKTsKLQotCQkJCWlmIChnYXBfc2l6 ZV9wYWdlICE9IDApIHsKLQkJCQkJZWhvb2tzX3QgKmVob29rcyA9IGFyZW5hX2dldF9laG9va3Mo Ci0JCQkJCSAgICBhcmVuYSk7Ci0JCQkJCWV4dGVudF9kYWxsb2NfZ2FwKHRzZG4sCi0JCQkJCSAg ICAmYXJlbmEtPnBhX3NoYXJkLnBhYywgZWhvb2tzLCBnYXApOwotCQkJCX0gZWxzZSB7Ci0JCQkJ CWVkYXRhX2NhY2hlX3B1dCh0c2RuLAotCQkJCQkgICAgJmFyZW5hLT5wYV9zaGFyZC5lZGF0YV9j YWNoZSwgZ2FwKTsKLQkJCQl9Ci0JCQkJaWYgKCEqY29tbWl0KSB7Ci0JCQkJCSpjb21taXQgPSBw YWdlc19kZWNvbW1pdChyZXQsIHNpemUpOwotCQkJCX0KLQkJCQlpZiAoKnplcm8gJiYgKmNvbW1p dCkgewotCQkJCQllZGF0YV90IGVkYXRhID0gezB9OwotCQkJCQllaG9va3NfdCAqZWhvb2tzID0g YXJlbmFfZ2V0X2Vob29rcygKLQkJCQkJICAgIGFyZW5hKTsKLQotCQkJCQllZGF0YV9pbml0KCZl ZGF0YSwKLQkJCQkJICAgIGFyZW5hX2luZF9nZXQoYXJlbmEpLCByZXQsIHNpemUsCi0JCQkJCSAg ICBzaXplLCBmYWxzZSwgU0NfTlNJWkVTLAotCQkJCQkgICAgZXh0ZW50X3N0YXRlX2FjdGl2ZSwg ZmFsc2UsIHRydWUsCi0JCQkJCSAgICBFWFRFTlRfUEFJX1BBQywgaGVhZF9zdGF0ZSk7Ci0JCQkJ CWlmIChleHRlbnRfcHVyZ2VfZm9yY2VkX3dyYXBwZXIodHNkbiwKLQkJCQkJICAgIGVob29rcywg JmVkYXRhLCAwLCBzaXplKSkgewotCQkJCQkJbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JCQkJCX0K LQkJCQl9Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCS8qCi0JCQkgKiBGYWlsdXJlLCB3aGV0 aGVyIGR1ZSB0byBPT00gb3IgYSByYWNlIHdpdGggYSByYXcKLQkJCSAqIHNicmsoKSBjYWxsIGZy b20gb3V0c2lkZSB0aGUgYWxsb2NhdG9yLgotCQkJICovCi0JCQlpZiAoZHNzX3ByZXYgPT0gKHZv aWQgKiktMSkgewotCQkJCS8qIE9PTS4gKi8KLQkJCQlhdG9taWNfc3RvcmVfYigmZHNzX2V4aGF1 c3RlZCwgdHJ1ZSwKLQkJCQkgICAgQVRPTUlDX1JFTEVBU0UpOwotCQkJCWdvdG8gbGFiZWxfb29t OwotCQkJfQotCQl9Ci0JfQotbGFiZWxfb29tOgotCWV4dGVudF9kc3NfZXh0ZW5kaW5nX2Zpbmlz aCgpOwotCWVkYXRhX2NhY2hlX3B1dCh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkLmVkYXRhX2NhY2hl LCBnYXApOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgYm9vbAotZXh0ZW50X2luX2Rzc19o ZWxwZXIodm9pZCAqYWRkciwgdm9pZCAqbWF4KSB7Ci0JcmV0dXJuICgodWludHB0cl90KWFkZHIg Pj0gKHVpbnRwdHJfdClkc3NfYmFzZSAmJiAodWludHB0cl90KWFkZHIgPAotCSAgICAodWludHB0 cl90KW1heCk7Ci19Ci0KLWJvb2wKLWV4dGVudF9pbl9kc3Modm9pZCAqYWRkcikgewotCWNhc3Nl cnQoaGF2ZV9kc3MpOwotCi0JcmV0dXJuIGV4dGVudF9pbl9kc3NfaGVscGVyKGFkZHIsIGF0b21p Y19sb2FkX3AoJmRzc19tYXgsCi0JICAgIEFUT01JQ19BQ1FVSVJFKSk7Ci19Ci0KLWJvb2wKLWV4 dGVudF9kc3NfbWVyZ2VhYmxlKHZvaWQgKmFkZHJfYSwgdm9pZCAqYWRkcl9iKSB7Ci0Jdm9pZCAq bWF4OwotCi0JY2Fzc2VydChoYXZlX2Rzcyk7Ci0KLQlpZiAoKHVpbnRwdHJfdClhZGRyX2EgPCAo dWludHB0cl90KWRzc19iYXNlICYmICh1aW50cHRyX3QpYWRkcl9iIDwKLQkgICAgKHVpbnRwdHJf dClkc3NfYmFzZSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQltYXggPSBhdG9taWNfbG9hZF9w KCZkc3NfbWF4LCBBVE9NSUNfQUNRVUlSRSk7Ci0JcmV0dXJuIChleHRlbnRfaW5fZHNzX2hlbHBl cihhZGRyX2EsIG1heCkgPT0KLQkgICAgZXh0ZW50X2luX2Rzc19oZWxwZXIoYWRkcl9iLCBtYXgp KTsKLX0KLQotdm9pZAotZXh0ZW50X2Rzc19ib290KHZvaWQpIHsKLQljYXNzZXJ0KGhhdmVfZHNz KTsKLQotCWRzc19iYXNlID0gZXh0ZW50X2Rzc19zYnJrKDApOwotCWF0b21pY19zdG9yZV9iKCZk c3NfZXh0ZW5kaW5nLCBmYWxzZSwgQVRPTUlDX1JFTEFYRUQpOwotCWF0b21pY19zdG9yZV9iKCZk c3NfZXhoYXVzdGVkLCBkc3NfYmFzZSA9PSAodm9pZCAqKS0xLCBBVE9NSUNfUkVMQVhFRCk7Ci0J YXRvbWljX3N0b3JlX3AoJmRzc19tYXgsIGRzc19iYXNlLCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0K LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2V4dGVudF9tbWFwLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZXh0ZW50X21tYXAuYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNWYwZWUyZC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZXh0ZW50X21tYXAuYworKysgL2Rldi9udWxsCkBAIC0x LDQxICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJs ZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1 ZGVzLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfbW1hcC5oIgotCi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwotLyogRGF0YS4gKi8KLQotYm9vbAlvcHRfcmV0YWluID0KLSNpZmRlZiBKRU1BTExPQ19S RVRBSU4KLSAgICB0cnVlCi0jZWxzZQotICAgIGZhbHNlCi0jZW5kaWYKLSAgICA7Ci0KLS8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCi0KLXZvaWQgKgotZXh0ZW50X2FsbG9jX21tYXAodm9pZCAqbmV3 X2FkZHIsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLAotICAgIGJv b2wgKmNvbW1pdCkgewotCWFzc2VydChhbGlnbm1lbnQgPT0gQUxJR05NRU5UX0NFSUxJTkcoYWxp Z25tZW50LCBQQUdFKSk7Ci0Jdm9pZCAqcmV0ID0gcGFnZXNfbWFwKG5ld19hZGRyLCBzaXplLCBh bGlnbm1lbnQsIGNvbW1pdCk7Ci0JaWYgKHJldCA9PSBOVUxMKSB7Ci0JCXJldHVybiBOVUxMOwot CX0KLQlhc3NlcnQocmV0ICE9IE5VTEwpOwotCWlmICgqY29tbWl0KSB7Ci0JCSp6ZXJvID0gdHJ1 ZTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotYm9vbAotZXh0ZW50X2RhbGxvY19tbWFwKHZvaWQg KmFkZHIsIHNpemVfdCBzaXplKSB7Ci0JaWYgKCFvcHRfcmV0YWluKSB7Ci0JCXBhZ2VzX3VubWFw KGFkZHIsIHNpemUpOwotCX0KLQlyZXR1cm4gb3B0X3JldGFpbjsKLX0KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZnhwLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvZnhwLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDk2NTg1ZjAuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2Z4cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICsw LDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgi Ci0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9meHAuaCIKLQotc3RhdGljIGJvb2wKLWZ4 cF9pc2RpZ2l0KGNoYXIgYykgewotCXJldHVybiAnMCcgPD0gYyAmJiBjIDw9ICc5JzsKLX0KLQot Ym9vbAotZnhwX3BhcnNlKGZ4cF90ICpyZXN1bHQsIGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKmVu ZCkgewotCS8qCi0JICogVXNpbmcgbWFsbG9jX3N0cnRvdW1heCBpbiB0aGlzIG1ldGhvZCBpc24n dCBhcyBoYW5keSBhcyB5b3UgbWlnaHQKLQkgKiBleHBlY3QgKEkgdHJpZWQpLiBJbiB0aGUgZnJh Y3Rpb25hbCBwYXJ0LCBzaWduaWZpY2FudCBsZWFkaW5nIHplcm9zCi0JICogbWVhbiB0aGF0IHlv dSBzdGlsbCBuZWVkIHRvIGRvIHlvdXIgb3duIHBhcnNpbmcsIG5vdyB3aXRoIHRyaWNraWVyCi0J ICogbWF0aC4gIEluIHRoZSBpbnRlZ2VyIHBhcnQsIHRoZSBjYXN0aW5nICh1aW50bWF4X3QgdG8g dWludDMyX3QpCi0JICogZm9yY2VzIG1vcmUgcmVhc29uaW5nIGFib3V0IGJvdW5kcyB0aGFuIGp1 c3QgY2hlY2tpbmcgZm9yIG92ZXJmbG93IGFzCi0JICogd2UgcGFyc2UuCi0JICovCi0JdWludDMy X3QgaW50ZWdlcl9wYXJ0ID0gMDsKLQotCWNvbnN0IGNoYXIgKmN1ciA9IHN0cjsKLQotCS8qIFRo ZSBzdHJpbmcgbXVzdCBzdGFydCB3aXRoIGEgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50LiAqLwot CWlmICgqY3VyICE9ICcuJyAmJiAhZnhwX2lzZGlnaXQoKmN1cikpIHsKLQkJcmV0dXJuIHRydWU7 Ci0JfQotCi0Jd2hpbGUgKCcwJyA8PSAqY3VyICYmICpjdXIgPD0gJzknKSB7Ci0JCWludGVnZXJf cGFydCAqPSAxMDsKLQkJaW50ZWdlcl9wYXJ0ICs9ICpjdXIgLSAnMCc7Ci0JCWlmIChpbnRlZ2Vy X3BhcnQgPj0gKDFVIDw8IDE2KSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJY3VyKys7Ci0J fQotCi0JLyoKLQkgKiBXZSd2ZSBwYXJzZWQgYWxsIGRpZ2l0cyBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBzdHJpbmcsIHdpdGhvdXQKLQkgKiBvdmVyZmxvdy4gIEVpdGhlciB3ZSdyZSBkb25lLCBv ciB0aGVyZSdzIGEgZnJhY3Rpb25hbCBwYXJ0LgotCSAqLwotCWlmICgqY3VyICE9ICcuJykgewot CQkqcmVzdWx0ID0gKGludGVnZXJfcGFydCA8PCAxNik7Ci0JCWlmIChlbmQgIT0gTlVMTCkgewot CQkJKmVuZCA9IChjaGFyICopY3VyOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKiBU aGVyZSdzIGEgZnJhY3Rpb25hbCBwYXJ0LiAqLwotCWN1cisrOwotCWlmICghZnhwX2lzZGlnaXQo KmN1cikpIHsKLQkJLyogU2hvdWxkbid0IGVuZCBvbiB0aGUgZGVjaW1hbCBwb2ludC4gKi8KLQkJ cmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiBXZSB1c2UgYSBsb3Qgb2YgcHJlY2lzaW9uIGZv ciB0aGUgZnJhY3Rpb25hbCBwYXJ0LCBldmVuIHRob3VnaCB3ZSdsbAotCSAqIGRpc2NhcmQgbW9z dCBvZiBpdDsgdGhpcyBsZXRzIHVzIGdldCBleGFjdCB2YWx1ZXMgZm9yIHRoZSBpbXBvcnRhbnQK LQkgKiBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGRlbm9taW5hdG9yIGlzIGEgc21hbGwgcG93ZXIg b2YgMiAoZm9yCi0JICogaW5zdGFuY2UsIDEvNTEyID09IDAuMDAxOTUzMTI1IGlzIGV4YWN0bHkg cmVwcmVzZW50YWJsZSBldmVuIHdpdGgKLQkgKiBvbmx5IDE2IGJpdHMgb2YgZnJhY3Rpb25hbCBw cmVjaXNpb24pLiAgV2UgbmVlZCB0byBsZWZ0LXNoaWZ0IGJ5IDE2Ci0JICogYmVmb3JlIGRpdmlk aW5nIHNvIHdlIHBpY2sgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUKLQkgKiBmbG9vcihsb2co MioqNDgpKSA9IDE0LgotCSAqLwotCXVpbnQ2NF90IGZyYWN0aW9uYWxfcGFydCA9IDA7Ci0JdWlu dDY0X3QgZnJhY19kaXYgPSAxOwotCWZvciAoaW50IGkgPSAwOyBpIDwgRlhQX0ZSQUNUSU9OQUxf UEFSVF9ESUdJVFM7IGkrKykgewotCQlmcmFjdGlvbmFsX3BhcnQgKj0gMTA7Ci0JCWZyYWNfZGl2 ICo9IDEwOwotCQlpZiAoZnhwX2lzZGlnaXQoKmN1cikpIHsKLQkJCWZyYWN0aW9uYWxfcGFydCAr PSAqY3VyIC0gJzAnOwotCQkJY3VyKys7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBXZSBvbmx5IHBhcnNl IHRoZSBmaXJzdCBtYXhkaWdpdHMgY2hhcmFjdGVycywgYnV0IHdlIGNhbiBzdGlsbCBpZ25vcmUK LQkgKiBhbnkgZGlnaXRzIGFmdGVyIHRoYXQuCi0JICovCi0Jd2hpbGUgKGZ4cF9pc2RpZ2l0KCpj dXIpKSB7Ci0JCWN1cisrOwotCX0KLQotCWFzc2VydChmcmFjdGlvbmFsX3BhcnQgPCBmcmFjX2Rp dik7Ci0JdWludDMyX3QgZnJhY3Rpb25hbF9yZXByID0gKHVpbnQzMl90KSgKLQkgICAgKGZyYWN0 aW9uYWxfcGFydCA8PCAxNikgLyBmcmFjX2Rpdik7Ci0KLQkvKiBTdWNjZXNzISAqLwotCSpyZXN1 bHQgPSAoaW50ZWdlcl9wYXJ0IDw8IDE2KSArIGZyYWN0aW9uYWxfcmVwcjsKLQlpZiAoZW5kICE9 IE5VTEwpIHsKLQkJKmVuZCA9IChjaGFyICopY3VyOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0K LXZvaWQKLWZ4cF9wcmludChmeHBfdCBhLCBjaGFyIGJ1ZltGWFBfQlVGX1NJWkVdKSB7Ci0JdWlu dDMyX3QgaW50ZWdlcl9wYXJ0ID0gZnhwX3JvdW5kX2Rvd24oYSk7Ci0JdWludDMyX3QgZnJhY3Rp b25hbF9wYXJ0ID0gKGEgJiAoKDFVIDw8IDE2KSAtIDEpKTsKLQotCWludCBsZWFkaW5nX2ZyYWN0 aW9uX3plcm9zID0gMDsKLQl1aW50NjRfdCBmcmFjdGlvbl9kaWdpdHMgPSBmcmFjdGlvbmFsX3Bh cnQ7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBGWFBfRlJBQ1RJT05BTF9QQVJUX0RJR0lUUzsgaSsr KSB7Ci0JCWlmIChmcmFjdGlvbl9kaWdpdHMgPCAoMVUgPDwgMTYpCi0JCSAgICAmJiBmcmFjdGlv bl9kaWdpdHMgKiAxMCA+PSAoMVUgPDwgMTYpKSB7Ci0JCQlsZWFkaW5nX2ZyYWN0aW9uX3plcm9z ID0gaTsKLQkJfQotCQlmcmFjdGlvbl9kaWdpdHMgKj0gMTA7Ci0JfQotCWZyYWN0aW9uX2RpZ2l0 cyA+Pj0gMTY7Ci0Jd2hpbGUgKGZyYWN0aW9uX2RpZ2l0cyA+IDAgJiYgZnJhY3Rpb25fZGlnaXRz ICUgMTAgPT0gMCkgewotCQlmcmFjdGlvbl9kaWdpdHMgLz0gMTA7Ci0JfQotCi0Jc2l6ZV90IHBy aW50ZWQgPSBtYWxsb2Nfc25wcmludGYoYnVmLCBGWFBfQlVGX1NJWkUsICIlIkZNVHUzMiIuIiwK LQkgICAgaW50ZWdlcl9wYXJ0KTsKLQlmb3IgKGludCBpID0gMDsgaSA8IGxlYWRpbmdfZnJhY3Rp b25femVyb3M7IGkrKykgewotCQlidWZbcHJpbnRlZF0gPSAnMCc7Ci0JCXByaW50ZWQrKzsKLQl9 Ci0JbWFsbG9jX3NucHJpbnRmKCZidWZbcHJpbnRlZF0sIEZYUF9CVUZfU0laRSAtIHByaW50ZWQs ICIlIkZNVHU2NCwKLQkgICAgZnJhY3Rpb25fZGlnaXRzKTsKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaG9vay5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2hvb2suYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNDkzZWRiYi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvaG9vay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICsw LDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgot Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvaG9vay5oIgotCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvYXRvbWljLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbXV0ZXgu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zZXEuaCIKLQotdHlwZWRlZiBzdHJ1Y3Qg aG9va3NfaW50ZXJuYWxfcyBob29rc19pbnRlcm5hbF90Owotc3RydWN0IGhvb2tzX2ludGVybmFs X3MgewotCWhvb2tzX3QgaG9va3M7Ci0JYm9vbCBpbl91c2U7Ci19OwotCi1zZXFfZGVmaW5lKGhv b2tzX2ludGVybmFsX3QsIGhvb2tzKQotCi1zdGF0aWMgYXRvbWljX3VfdCBuaG9va3MgPSBBVE9N SUNfSU5JVCgwKTsKLXN0YXRpYyBzZXFfaG9va3NfdCBob29rc1tIT09LX01BWF07Ci1zdGF0aWMg bWFsbG9jX211dGV4X3QgaG9va3NfbXU7Ci0KLWJvb2wKLWhvb2tfYm9vdCgpIHsKLQlyZXR1cm4g bWFsbG9jX211dGV4X2luaXQoJmhvb2tzX211LCAiaG9va3MiLCBXSVRORVNTX1JBTktfSE9PSywK LQkgICAgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKTsKLX0KLQotc3RhdGljIHZvaWQgKgot aG9va19pbnN0YWxsX2xvY2tlZChob29rc190ICp0b19pbnN0YWxsKSB7Ci0JaG9va3NfaW50ZXJu YWxfdCBob29rc19pbnRlcm5hbDsKLQlmb3IgKGludCBpID0gMDsgaSA8IEhPT0tfTUFYOyBpKysp IHsKLQkJYm9vbCBzdWNjZXNzID0gc2VxX3RyeV9sb2FkX2hvb2tzKCZob29rc19pbnRlcm5hbCwg Jmhvb2tzW2ldKTsKLQkJLyogV2UgaG9sZCBtdTsgbm8gY29uY3VycmVudCBhY2Nlc3MuICovCi0J CWFzc2VydChzdWNjZXNzKTsKLQkJaWYgKCFob29rc19pbnRlcm5hbC5pbl91c2UpIHsKLQkJCWhv b2tzX2ludGVybmFsLmhvb2tzID0gKnRvX2luc3RhbGw7Ci0JCQlob29rc19pbnRlcm5hbC5pbl91 c2UgPSB0cnVlOwotCQkJc2VxX3N0b3JlX2hvb2tzKCZob29rc1tpXSwgJmhvb2tzX2ludGVybmFs KTsKLQkJCWF0b21pY19zdG9yZV91KCZuaG9va3MsCi0JCQkgICAgYXRvbWljX2xvYWRfdSgmbmhv b2tzLCBBVE9NSUNfUkVMQVhFRCkgKyAxLAotCQkJICAgIEFUT01JQ19SRUxBWEVEKTsKLQkJCXJl dHVybiAmaG9va3NbaV07Ci0JCX0KLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQgKgotaG9v a19pbnN0YWxsKHRzZG5fdCAqdHNkbiwgaG9va3NfdCAqdG9faW5zdGFsbCkgewotCW1hbGxvY19t dXRleF9sb2NrKHRzZG4sICZob29rc19tdSk7Ci0Jdm9pZCAqcmV0ID0gaG9va19pbnN0YWxsX2xv Y2tlZCh0b19pbnN0YWxsKTsKLQlpZiAocmV0ICE9IE5VTEwpIHsKLQkJdHNkX2dsb2JhbF9zbG93 X2luYyh0c2RuKTsKLQl9Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmaG9va3NfbXUpOwot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ob29rX3JlbW92ZV9sb2NrZWQoc2VxX2hv b2tzX3QgKnRvX3JlbW92ZSkgewotCWhvb2tzX2ludGVybmFsX3QgaG9va3NfaW50ZXJuYWw7Ci0J Ym9vbCBzdWNjZXNzID0gc2VxX3RyeV9sb2FkX2hvb2tzKCZob29rc19pbnRlcm5hbCwgdG9fcmVt b3ZlKTsKLQkvKiBXZSBob2xkIG11OyBubyBjb25jdXJyZW50IGFjY2Vzcy4gKi8KLQlhc3NlcnQo c3VjY2Vzcyk7Ci0JLyogU2hvdWxkIG9ubHkgcmVtb3ZlIGhvb2tzIHRoYXQgd2VyZSBhZGRlZC4g Ki8KLQlhc3NlcnQoaG9va3NfaW50ZXJuYWwuaW5fdXNlKTsKLQlob29rc19pbnRlcm5hbC5pbl91 c2UgPSBmYWxzZTsKLQlzZXFfc3RvcmVfaG9va3ModG9fcmVtb3ZlLCAmaG9va3NfaW50ZXJuYWwp OwotCWF0b21pY19zdG9yZV91KCZuaG9va3MsIGF0b21pY19sb2FkX3UoJm5ob29rcywgQVRPTUlD X1JFTEFYRUQpIC0gMSwKLQkgICAgQVRPTUlDX1JFTEFYRUQpOwotfQotCi12b2lkCi1ob29rX3Jl bW92ZSh0c2RuX3QgKnRzZG4sIHZvaWQgKm9wYXF1ZSkgewotCWlmIChjb25maWdfZGVidWcpIHsK LQkJY2hhciAqaG9va3NfYmVnaW4gPSAoY2hhciAqKSZob29rc1swXTsKLQkJY2hhciAqaG9va3Nf ZW5kID0gKGNoYXIgKikmaG9va3NbSE9PS19NQVhdOwotCQljaGFyICpob29rID0gKGNoYXIgKilv cGFxdWU7Ci0JCWFzc2VydChob29rc19iZWdpbiA8PSBob29rICYmIGhvb2sgPCBob29rc19lbmQK LQkJICAgICYmIChob29rIC0gaG9va3NfYmVnaW4pICUgc2l6ZW9mKHNlcV9ob29rc190KSA9PSAw KTsKLQl9Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmhvb2tzX211KTsKLQlob29rX3JlbW92 ZV9sb2NrZWQoKHNlcV9ob29rc190ICopb3BhcXVlKTsKLQl0c2RfZ2xvYmFsX3Nsb3dfZGVjKHRz ZG4pOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmhvb2tzX211KTsKLX0KLQotI2RlZmlu ZSBGT1JfRUFDSF9IT09LX0JFR0lOKGhvb2tzX2ludGVybmFsX3B0cikJCQkJXAotZm9yIChpbnQg Zm9yX2VhY2hfaG9va19jb3VudGVyID0gMDsJCQkJCVwKLSAgICBmb3JfZWFjaF9ob29rX2NvdW50 ZXIgPCBIT09LX01BWDsJCQkJCVwKLSAgICBmb3JfZWFjaF9ob29rX2NvdW50ZXIrKykgewkJCQkJ CVwKLQlib29sIGZvcl9lYWNoX2hvb2tfc3VjY2VzcyA9IHNlcV90cnlfbG9hZF9ob29rcygJCVwK LQkgICAgKGhvb2tzX2ludGVybmFsX3B0ciksICZob29rc1tmb3JfZWFjaF9ob29rX2NvdW50ZXJd KTsJXAotCWlmICghZm9yX2VhY2hfaG9va19zdWNjZXNzKSB7CQkJCQlcCi0JCWNvbnRpbnVlOwkJ CQkJCVwKLQl9CQkJCQkJCQlcCi0JaWYgKCEoaG9va3NfaW50ZXJuYWxfcHRyKS0+aW5fdXNlKSB7 CQkJCVwKLQkJY29udGludWU7CQkJCQkJXAotCX0KLSNkZWZpbmUgRk9SX0VBQ0hfSE9PS19FTkQJ CQkJCQlcCi19Ci0KLXN0YXRpYyBib29sICoKLWhvb2tfcmVlbnRyYW50cCgpIHsKLQkvKgotCSAq IFdlIHByZXZlbnQgdXNlciByZWVudHJhbmN5IHdpdGhpbiBob29rcy4gIFRoaXMgaXMgYmFzaWNh bGx5IGp1c3QgYQotCSAqIHRocmVhZC1sb2NhbCBib29sIHRoYXQgdHJpZ2dlcnMgYW4gZWFybHkt ZXhpdC4KLQkgKgotCSAqIFdlIGRvbid0IGZvbGQgaW5faG9vayBpbnRvIHJlZW50cmFuY3kuICBU aGVyZSBhcmUgdHdvIHJlYXNvbnMgZm9yCi0JICogdGhpczoKLQkgKiAtIFJpZ2h0IG5vdywgd2Ug dHVybiBvbiByZWVudHJhbmN5IGR1cmluZyB0aGluZ3MgbGlrZSBleHRlbnQgaG9vawotCSAqICAg ZXhlY3V0aW9uLiAgQWxsb2NhdGluZyBkdXJpbmcgZXh0ZW50IGhvb2tzIGlzIG5vdCBvZmZpY2lh bGx5Ci0JICogICBzdXBwb3J0ZWQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIGl0IGZvciB0 aGUgdGltZSBiZWluZy4gIFRoZXNlCi0JICogICBzb3J0cyBvZiBhbGxvY2F0aW9ucyBzaG91bGQg cHJvYmFibHkgc3RpbGwgYmUgaG9va2VkLCB0aG91Z2guCi0JICogLSBJZiBhIGhvb2sgYWxsb2Nh dGVzLCB3ZSBtYXkgd2FudCBpdCB0byBiZSByZWxhdGl2ZWx5IGZhc3QgKGFmdGVyCi0JICogICBh bGwsIGl0IGV4ZWN1dGVzIG9uIGV2ZXJ5IGFsbG9jYXRvciBvcGVyYXRpb24pLiAgVHVybmluZyBv bgotCSAqICAgcmVlbnRyYW5jeSBpcyBhIGZhaXJseSBoZWF2eXdlaWdodCBtb2RlIChkaXNhYmxp bmcgdGNhY2hlLAotCSAqICAgcmVkaXJlY3RpbmcgdG8gYXJlbmEgMCwgZXRjLikuICBJdCdzIHBv c3NpYmxlIHdlIG1heSBvbmUgZGF5IHdhbnQKLQkgKiAgIHRvIHR1cm4gb24gcmVlbnRyYW50IG1v ZGUgaGVyZSwgaWYgaXQgcHJvdmVzIHRvbyBkaWZmaWN1bHQgdG8ga2VlcAotCSAqICAgdGhpcyB3 b3JraW5nLiAgQnV0IHRoYXQncyBmYWlybHkgZWFzeSBmb3IgdXMgdG8gc2VlOyBPVE9ILCBwZW9w bGUKLQkgKiAgIG5vdCB1c2luZyBob29rcyBiZWNhdXNlIHRoZXkncmUgdG9vIHNsb3cgaXMgZWFz eSBmb3IgdXMgdG8gbWlzcy4KLQkgKgotCSAqIFRoZSB0cmlja3kgcGFydCBpcwotCSAqIHRoYXQg dGhpcyBjb2RlIG1pZ2h0IGdldCBpbnZva2VkIGV2ZW4gaWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3Mg dG8gdHNkLgotCSAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIGdldHRpbmcgYSBwb2ludGVyIHRvIHRo cmVhZC1sb2NhbCBkYXRhLCBleGNlcHQKLQkgKiB0aGF0IGl0IG1pZ2h0IHNlY3JldGx5IHJldHVy biBhIHBvaW50ZXIgdG8gc29tZSBnbG9iYWwgZGF0YSBpZiB3ZQotCSAqIGtub3cgdGhhdCB0aGUg Y2FsbGVyIHdpbGwgdGFrZSB0aGUgZWFybHktZXhpdCBwYXRoLgotCSAqIElmIHdlIHJldHVybiBh IGJvb2wgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgcmVlbnRyYW50LCB0aGVuIHRoZQotCSAq IGNhbGxlciB3aWxsIGdvIGRvd24gdGhlIGVhcmx5IGV4aXQgcGF0aCwgbGVhdmluZyB0aGUgZ2xv YmFsCi0JICogdW50b3VjaGVkLgotCSAqLwotCXN0YXRpYyBib29sIGluX2hvb2tfZ2xvYmFsID0g dHJ1ZTsKLQl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0JYm9vbCAqaW5faG9vayA9IHRz ZG5faW5faG9va3BfZ2V0KHRzZG4pOwotCWlmIChpbl9ob29rIT0gTlVMTCkgewotCQlyZXR1cm4g aW5faG9vazsKLQl9Ci0JcmV0dXJuICZpbl9ob29rX2dsb2JhbDsKLX0KLQotI2RlZmluZSBIT09L X1BST0xPR1VFCQkJCQkJCVwKLQlpZiAobGlrZWx5KGF0b21pY19sb2FkX3UoJm5ob29rcywgQVRP TUlDX1JFTEFYRUQpID09IDApKSB7CVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JfQkJCQkJCQkJXAot CWJvb2wgKmluX2hvb2sgPSBob29rX3JlZW50cmFudHAoKTsJCQkJXAotCWlmICgqaW5faG9vaykg ewkJCQkJCQlcCi0JCXJldHVybjsJCQkJCQkJXAotCX0JCQkJCQkJCVwKLQkqaW5faG9vayA9IHRy dWU7Ci0KLSNkZWZpbmUgSE9PS19FUElMT0dVRQkJCQkJCQlcCi0JKmluX2hvb2sgPSBmYWxzZTsK LQotdm9pZAotaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY190IHR5cGUsIHZvaWQgKnJlc3Vs dCwgdWludHB0cl90IHJlc3VsdF9yYXcsCi0gICAgdWludHB0cl90IGFyZ3NfcmF3WzNdKSB7Ci0J SE9PS19QUk9MT0dVRQotCi0JaG9va3NfaW50ZXJuYWxfdCBob29rOwotCUZPUl9FQUNIX0hPT0tf QkVHSU4oJmhvb2spCi0JCWhvb2tfYWxsb2MgaCA9IGhvb2suaG9va3MuYWxsb2NfaG9vazsKLQkJ aWYgKGggIT0gTlVMTCkgewotCQkJaChob29rLmhvb2tzLmV4dHJhLCB0eXBlLCByZXN1bHQsIHJl c3VsdF9yYXcsIGFyZ3NfcmF3KTsKLQkJfQotCUZPUl9FQUNIX0hPT0tfRU5ECi0KLQlIT09LX0VQ SUxPR1VFCi19Ci0KLXZvaWQKLWhvb2tfaW52b2tlX2RhbGxvYyhob29rX2RhbGxvY190IHR5cGUs IHZvaWQgKmFkZHJlc3MsIHVpbnRwdHJfdCBhcmdzX3Jhd1szXSkgewotCUhPT0tfUFJPTE9HVUUK LQlob29rc19pbnRlcm5hbF90IGhvb2s7Ci0JRk9SX0VBQ0hfSE9PS19CRUdJTigmaG9vaykKLQkJ aG9va19kYWxsb2MgaCA9IGhvb2suaG9va3MuZGFsbG9jX2hvb2s7Ci0JCWlmIChoICE9IE5VTEwp IHsKLQkJCWgoaG9vay5ob29rcy5leHRyYSwgdHlwZSwgYWRkcmVzcywgYXJnc19yYXcpOwotCQl9 Ci0JRk9SX0VBQ0hfSE9PS19FTkQKLQlIT09LX0VQSUxPR1VFCi19Ci0KLXZvaWQKLWhvb2tfaW52 b2tlX2V4cGFuZChob29rX2V4cGFuZF90IHR5cGUsIHZvaWQgKmFkZHJlc3MsIHNpemVfdCBvbGRf dXNpemUsCi0gICAgc2l6ZV90IG5ld191c2l6ZSwgdWludHB0cl90IHJlc3VsdF9yYXcsIHVpbnRw dHJfdCBhcmdzX3Jhd1s0XSkgewotCUhPT0tfUFJPTE9HVUUKLQlob29rc19pbnRlcm5hbF90IGhv b2s7Ci0JRk9SX0VBQ0hfSE9PS19CRUdJTigmaG9vaykKLQkJaG9va19leHBhbmQgaCA9IGhvb2su aG9va3MuZXhwYW5kX2hvb2s7Ci0JCWlmIChoICE9IE5VTEwpIHsKLQkJCWgoaG9vay5ob29rcy5l eHRyYSwgdHlwZSwgYWRkcmVzcywgb2xkX3VzaXplLCBuZXdfdXNpemUsCi0JCQkgICAgcmVzdWx0 X3JhdywgYXJnc19yYXcpOwotCQl9Ci0JRk9SX0VBQ0hfSE9PS19FTkQKLQlIT09LX0VQSUxPR1VF Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL2hwYS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2hw YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTJhZWJhLi4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9ocGEuYworKysgL2Rl di9udWxsCkBAIC0xLDEwNDQgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2pl bWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2Nf aW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hwYS5o IgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZmIuaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC93aXRuZXNzLmgiCi0KLSNkZWZpbmUgSFBBX0VERU5fU0laRSAoMTI4ICogSFVH RVBBR0UpCi0KLXN0YXRpYyBlZGF0YV90ICpocGFfYWxsb2ModHNkbl90ICp0c2RuLCBwYWlfdCAq c2VsZiwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLCBib29s IGd1YXJkZWQsIGJvb2wgZnJlcXVlbnRfcmV1c2UsCi0gICAgYm9vbCAqZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQpOwotc3RhdGljIHNpemVfdCBocGFfYWxsb2NfYmF0Y2godHNkbl90ICp0c2RuLCBw YWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IG5hbGxvY3MsIGVkYXRhX2xpc3Rf YWN0aXZlX3QgKnJlc3VsdHMsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLXN0YXRp YyBib29sIGhwYV9leHBhbmQodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRh dGEsCi0gICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wgemVybywgYm9v bCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotc3RhdGljIGJvb2wgaHBhX3Nocmluayh0c2Ru X3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2xkX3Np emUsIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotc3Rh dGljIHZvaWQgaHBhX2RhbGxvYyh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICpl ZGF0YSwKLSAgICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci1zdGF0aWMgdm9pZCBo cGFfZGFsbG9jX2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsCi0gICAgZWRhdGFfbGlz dF9hY3RpdmVfdCAqbGlzdCwgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotc3RhdGlj IHVpbnQ2NF90IGhwYV90aW1lX3VudGlsX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBwYWlf dCAqc2VsZik7Ci0KLWJvb2wKLWhwYV9zdXBwb3J0ZWQoKSB7Ci0jaWZkZWYgX1dJTjMyCi0JLyoK LQkgKiBBdCBsZWFzdCB1bnRpbCB0aGUgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiBpcyBzb21ld2hh dCBzZXR0bGVkLCB3ZQotCSAqIGRvbid0IHdhbnQgdG8gdHJ5IHRvIGRlYnVnIHRoZSBWTSBzdWJz eXN0ZW0gb24gdGhlIGhhcmRlc3QtdG8tdGVzdAotCSAqIHBsYXRmb3JtLgotCSAqLwotCXJldHVy biBmYWxzZTsKLSNlbmRpZgotCWlmICghcGFnZXNfY2FuX2h1Z2lmeSkgewotCQlyZXR1cm4gZmFs c2U7Ci0JfQotCS8qCi0JICogV2UgZnVuZGFtZW50YWxseSByZWx5IG9uIGEgYWRkcmVzcy1zcGFj ZS1odW5ncnkgZ3Jvd3RoIHN0cmF0ZWd5IGZvcgotCSAqIGh1Z2VwYWdlcy4KLQkgKi8KLQlpZiAo TEdfU0laRU9GX1BUUiAhPSAzKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JLyoKLQkgKiBJZiB3 ZSBjb3VsZG4ndCBkZXRlY3QgdGhlIHZhbHVlIG9mIEhVR0VQQUdFLCBIVUdFUEFHRV9QQUdFUyBi ZWNvbWVzCi0JICogdGhpcyBzZW50aW5lbCB2YWx1ZSAtLSBzZWUgdGhlIGNvbW1lbnQgaW4gcGFn ZXMuaC4KLQkgKi8KLQlpZiAoSFVHRVBBR0VfUEFHRVMgPT0gMSkgewotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZAotaHBhX2RvX2NvbnNpc3RlbmN5 X2NoZWNrcyhocGFfc2hhcmRfdCAqc2hhcmQpIHsKLQlhc3NlcnQoc2hhcmQtPmJhc2UgIT0gTlVM TCk7Ci19Ci0KLWJvb2wKLWhwYV9jZW50cmFsX2luaXQoaHBhX2NlbnRyYWxfdCAqY2VudHJhbCwg YmFzZV90ICpiYXNlLCBjb25zdCBocGFfaG9va3NfdCAqaG9va3MpIHsKLQkvKiBtYWxsb2NfY29u ZiBwcm9jZXNzaW5nIHNob3VsZCBoYXZlIGZpbHRlcmVkIG91dCB0aGVzZSBjYXNlcy4gKi8KLQlh c3NlcnQoaHBhX3N1cHBvcnRlZCgpKTsKLQlib29sIGVycjsKLQllcnIgPSBtYWxsb2NfbXV0ZXhf aW5pdCgmY2VudHJhbC0+Z3Jvd19tdHgsICJocGFfY2VudHJhbF9ncm93IiwKLQkgICAgV0lUTkVT U19SQU5LX0hQQV9DRU5UUkFMX0dST1csIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSk7Ci0J aWYgKGVycikgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JZXJyID0gbWFsbG9jX211dGV4X2luaXQo JmNlbnRyYWwtPm10eCwgImhwYV9jZW50cmFsIiwKLQkgICAgV0lUTkVTU19SQU5LX0hQQV9DRU5U UkFMLCBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJu IHRydWU7Ci0JfQotCWNlbnRyYWwtPmJhc2UgPSBiYXNlOwotCWNlbnRyYWwtPmVkZW4gPSBOVUxM OwotCWNlbnRyYWwtPmVkZW5fbGVuID0gMDsKLQljZW50cmFsLT5hZ2VfY291bnRlciA9IDA7Ci0J Y2VudHJhbC0+aG9va3MgPSAqaG9va3M7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaHBk YXRhX3QgKgotaHBhX2FsbG9jX3BzKHRzZG5fdCAqdHNkbiwgaHBhX2NlbnRyYWxfdCAqY2VudHJh bCkgewotCXJldHVybiAoaHBkYXRhX3QgKiliYXNlX2FsbG9jKHRzZG4sIGNlbnRyYWwtPmJhc2Us IHNpemVvZihocGRhdGFfdCksCi0JICAgIENBQ0hFTElORSk7Ci19Ci0KLWhwZGF0YV90ICoKLWhw YV9jZW50cmFsX2V4dHJhY3QodHNkbl90ICp0c2RuLCBocGFfY2VudHJhbF90ICpjZW50cmFsLCBz aXplX3Qgc2l6ZSwKLSAgICBib29sICpvb20pIHsKLQkvKiBEb24ndCB5ZXQgc3VwcG9ydCBiaWcg YWxsb2NhdGlvbnM7IHRoZXNlIHNob3VsZCBnZXQgZmlsdGVyZWQgb3V0LiAqLwotCWFzc2VydChz aXplIDw9IEhVR0VQQUdFKTsKLQkvKgotCSAqIFNob3VsZCBvbmx5IHRyeSB0byBleHRyYWN0IGZy b20gdGhlIGNlbnRyYWwgYWxsb2NhdG9yIGlmIHRoZSBsb2NhbAotCSAqIHNoYXJkIGlzIGV4aGF1 c3RlZC4gIFdlIHNob3VsZCBob2xkIHRoZSBncm93X210eCBvbiB0aGF0IHNoYXJkLgotCSAqLwot CXdpdG5lc3NfYXNzZXJ0X3Bvc2l0aXZlX2RlcHRoX3RvX3JhbmsoCi0JICAgIHRzZG5fd2l0bmVz c190c2RwX2dldCh0c2RuKSwgV0lUTkVTU19SQU5LX0hQQV9TSEFSRF9HUk9XKTsKLQotCW1hbGxv Y19tdXRleF9sb2NrKHRzZG4sICZjZW50cmFsLT5ncm93X210eCk7Ci0JKm9vbSA9IGZhbHNlOwot Ci0JaHBkYXRhX3QgKnBzID0gTlVMTDsKLQotCS8qIElzIGVkZW4gYSBwZXJmZWN0IGZpdD8gKi8K LQlpZiAoY2VudHJhbC0+ZWRlbiAhPSBOVUxMICYmIGNlbnRyYWwtPmVkZW5fbGVuID09IEhVR0VQ QUdFKSB7Ci0JCXBzID0gaHBhX2FsbG9jX3BzKHRzZG4sIGNlbnRyYWwpOwotCQlpZiAocHMgPT0g TlVMTCkgewotCQkJKm9vbSA9IHRydWU7Ci0JCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZj ZW50cmFsLT5ncm93X210eCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlocGRhdGFfaW5pdChw cywgY2VudHJhbC0+ZWRlbiwgY2VudHJhbC0+YWdlX2NvdW50ZXIrKyk7Ci0JCWNlbnRyYWwtPmVk ZW4gPSBOVUxMOwotCQljZW50cmFsLT5lZGVuX2xlbiA9IDA7Ci0JCW1hbGxvY19tdXRleF91bmxv Y2sodHNkbiwgJmNlbnRyYWwtPmdyb3dfbXR4KTsKLQkJcmV0dXJuIHBzOwotCX0KLQotCS8qCi0J ICogV2UncmUgYWJvdXQgdG8gdHJ5IHRvIGFsbG9jYXRlIGZyb20gZWRlbiBieSBzcGxpdHRpbmcu ICBJZiBlZGVuIGlzCi0JICogTlVMTCwgd2UgaGF2ZSB0byBhbGxvY2F0ZSBpdCB0b28uICBPdGhl cndpc2UsIHdlIGp1c3QgaGF2ZSB0bwotCSAqIGFsbG9jYXRlIGFuIGVkYXRhX3QgZm9yIHRoZSBu ZXcgcHNzZXQuCi0JICovCi0JaWYgKGNlbnRyYWwtPmVkZW4gPT0gTlVMTCkgewotCQkvKgotCQkg KiBEdXJpbmcgZGV2ZWxvcG1lbnQsIHdlJ3JlIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCBzeXN0 ZW1zCi0JCSAqIHdpdGggb3ZlcmNvbW1pdC4gIEV2ZW50dWFsbHksIHdlIHNob3VsZCBiZSBtb3Jl IGNhcmVmdWwgaGVyZS4KLQkJICovCi0JCWJvb2wgY29tbWl0ID0gdHJ1ZTsKLQkJLyogQWxsb2Nh dGUgYWRkcmVzcyBzcGFjZSwgYmFpbGluZyBpZiB3ZSBmYWlsLiAqLwotCQl2b2lkICpuZXdfZWRl biA9IHBhZ2VzX21hcChOVUxMLCBIUEFfRURFTl9TSVpFLCBIVUdFUEFHRSwKLQkJICAgICZjb21t aXQpOwotCQlpZiAobmV3X2VkZW4gPT0gTlVMTCkgewotCQkJKm9vbSA9IHRydWU7Ci0JCQltYWxs b2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZjZW50cmFsLT5ncm93X210eCk7Ci0JCQlyZXR1cm4gTlVM TDsKLQkJfQotCQlwcyA9IGhwYV9hbGxvY19wcyh0c2RuLCBjZW50cmFsKTsKLQkJaWYgKHBzID09 IE5VTEwpIHsKLQkJCXBhZ2VzX3VubWFwKG5ld19lZGVuLCBIUEFfRURFTl9TSVpFKTsKLQkJCSpv b20gPSB0cnVlOwotCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmY2VudHJhbC0+Z3Jvd19t dHgpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJY2VudHJhbC0+ZWRlbiA9IG5ld19lZGVuOwot CQljZW50cmFsLT5lZGVuX2xlbiA9IEhQQV9FREVOX1NJWkU7Ci0JfSBlbHNlIHsKLQkJLyogRWRl biBpcyBhbHJlYWR5IG5vbmVtcHR5OyBvbmx5IG5lZWQgYW4gZWRhdGEgZm9yIHBzLiAqLwotCQlw cyA9IGhwYV9hbGxvY19wcyh0c2RuLCBjZW50cmFsKTsKLQkJaWYgKHBzID09IE5VTEwpIHsKLQkJ CSpvb20gPSB0cnVlOwotCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmY2VudHJhbC0+Z3Jv d19tdHgpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQl9Ci0JYXNzZXJ0KHBzICE9IE5VTEwpOwot CWFzc2VydChjZW50cmFsLT5lZGVuICE9IE5VTEwpOwotCWFzc2VydChjZW50cmFsLT5lZGVuX2xl biA+IEhVR0VQQUdFKTsKLQlhc3NlcnQoY2VudHJhbC0+ZWRlbl9sZW4gJSBIVUdFUEFHRSA9PSAw KTsKLQlhc3NlcnQoSFVHRVBBR0VfQUREUjJCQVNFKGNlbnRyYWwtPmVkZW4pID09IGNlbnRyYWwt PmVkZW4pOwotCi0JaHBkYXRhX2luaXQocHMsIGNlbnRyYWwtPmVkZW4sIGNlbnRyYWwtPmFnZV9j b3VudGVyKyspOwotCi0JY2hhciAqZWRlbl9jaGFyID0gKGNoYXIgKiljZW50cmFsLT5lZGVuOwot CWVkZW5fY2hhciArPSBIVUdFUEFHRTsKLQljZW50cmFsLT5lZGVuID0gKHZvaWQgKillZGVuX2No YXI7Ci0JY2VudHJhbC0+ZWRlbl9sZW4gLT0gSFVHRVBBR0U7Ci0KLQltYWxsb2NfbXV0ZXhfdW5s b2NrKHRzZG4sICZjZW50cmFsLT5ncm93X210eCk7Ci0KLQlyZXR1cm4gcHM7Ci19Ci0KLWJvb2wK LWhwYV9zaGFyZF9pbml0KGhwYV9zaGFyZF90ICpzaGFyZCwgaHBhX2NlbnRyYWxfdCAqY2VudHJh bCwgZW1hcF90ICplbWFwLAotICAgIGJhc2VfdCAqYmFzZSwgZWRhdGFfY2FjaGVfdCAqZWRhdGFf Y2FjaGUsIHVuc2lnbmVkIGluZCwKLSAgICBjb25zdCBocGFfc2hhcmRfb3B0c190ICpvcHRzKSB7 Ci0JLyogbWFsbG9jX2NvbmYgcHJvY2Vzc2luZyBzaG91bGQgaGF2ZSBmaWx0ZXJlZCBvdXQgdGhl c2UgY2FzZXMuICovCi0JYXNzZXJ0KGhwYV9zdXBwb3J0ZWQoKSk7Ci0JYm9vbCBlcnI7Ci0JZXJy ID0gbWFsbG9jX211dGV4X2luaXQoJnNoYXJkLT5ncm93X210eCwgImhwYV9zaGFyZF9ncm93IiwK LQkgICAgV0lUTkVTU19SQU5LX0hQQV9TSEFSRF9HUk9XLCBtYWxsb2NfbXV0ZXhfcmFua19leGNs dXNpdmUpOwotCWlmIChlcnIpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWVyciA9IG1hbGxvY19t dXRleF9pbml0KCZzaGFyZC0+bXR4LCAiaHBhX3NoYXJkIiwKLQkgICAgV0lUTkVTU19SQU5LX0hQ QV9TSEFSRCwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKTsKLQlpZiAoZXJyKSB7Ci0JCXJl dHVybiB0cnVlOwotCX0KLQotCWFzc2VydChlZGF0YV9jYWNoZSAhPSBOVUxMKTsKLQlzaGFyZC0+ Y2VudHJhbCA9IGNlbnRyYWw7Ci0Jc2hhcmQtPmJhc2UgPSBiYXNlOwotCWVkYXRhX2NhY2hlX2Zh c3RfaW5pdCgmc2hhcmQtPmVjZiwgZWRhdGFfY2FjaGUpOwotCXBzc2V0X2luaXQoJnNoYXJkLT5w c3NldCk7Ci0Jc2hhcmQtPmFnZV9jb3VudGVyID0gMDsKLQlzaGFyZC0+aW5kID0gaW5kOwotCXNo YXJkLT5lbWFwID0gZW1hcDsKLQotCXNoYXJkLT5vcHRzID0gKm9wdHM7Ci0KLQlzaGFyZC0+bnBl bmRpbmdfcHVyZ2UgPSAwOwotCW5zdGltZV9pbml0X3plcm8oJnNoYXJkLT5sYXN0X3B1cmdlKTsK LQotCXNoYXJkLT5zdGF0cy5ucHVyZ2VfcGFzc2VzID0gMDsKLQlzaGFyZC0+c3RhdHMubnB1cmdl cyA9IDA7Ci0Jc2hhcmQtPnN0YXRzLm5odWdpZmllcyA9IDA7Ci0Jc2hhcmQtPnN0YXRzLm5kZWh1 Z2lmaWVzID0gMDsKLQotCS8qCi0JICogRmlsbCB0aGVzZSBpbiBsYXN0LCBzbyB0aGF0IGlmIGFu IGhwYV9zaGFyZCBnZXRzIHVzZWQgZGVzcGl0ZQotCSAqIGluaXRpYWxpemF0aW9uIGZhaWxpbmcs IHdlJ2xsIGF0IGxlYXN0IGNyYXNoIGluc3RlYWQgb2YganVzdAotCSAqIG9wZXJhdGluZyBvbiBj b3JydXB0ZWQgZGF0YS4KLQkgKi8KLQlzaGFyZC0+cGFpLmFsbG9jID0gJmhwYV9hbGxvYzsKLQlz aGFyZC0+cGFpLmFsbG9jX2JhdGNoID0gJmhwYV9hbGxvY19iYXRjaDsKLQlzaGFyZC0+cGFpLmV4 cGFuZCA9ICZocGFfZXhwYW5kOwotCXNoYXJkLT5wYWkuc2hyaW5rID0gJmhwYV9zaHJpbms7Ci0J c2hhcmQtPnBhaS5kYWxsb2MgPSAmaHBhX2RhbGxvYzsKLQlzaGFyZC0+cGFpLmRhbGxvY19iYXRj aCA9ICZocGFfZGFsbG9jX2JhdGNoOwotCXNoYXJkLT5wYWkudGltZV91bnRpbF9kZWZlcnJlZF93 b3JrID0gJmhwYV90aW1lX3VudGlsX2RlZmVycmVkX3dvcms7Ci0KLQlocGFfZG9fY29uc2lzdGVu Y3lfY2hlY2tzKHNoYXJkKTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoKLSAqIE5vdGUgdGhh dCB0aGUgc3RhdHMgZnVuY3Rpb25zIGhlcmUgZm9sbG93IHRoZSB1c3VhbCBzdGF0cyBuYW1pbmcg Y29udmVudGlvbnM7Ci0gKiAibWVyZ2UiIG9idGFpbnMgdGhlIHN0YXRzIGZyb20gc29tZSBsaXZl IG9iamVjdCBvZiBpbnN0YW5jZSwgd2hpbGUgImFjY3VtIgotICogb25seSBjb21iaW5lcyB0aGUg c3RhdHMgZnJvbSBvbmUgc3RhdHMgb2JqZXQgdG8gYW5vdGhlci4gIEhlbmNlIHRoZSBsYWNrIG9m Ci0gKiBsb2NraW5nIGhlcmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1ocGFfc2hhcmRfbm9uZGVyaXZl ZF9zdGF0c19hY2N1bShocGFfc2hhcmRfbm9uZGVyaXZlZF9zdGF0c190ICpkc3QsCi0gICAgaHBh X3NoYXJkX25vbmRlcml2ZWRfc3RhdHNfdCAqc3JjKSB7Ci0JZHN0LT5ucHVyZ2VfcGFzc2VzICs9 IHNyYy0+bnB1cmdlX3Bhc3NlczsKLQlkc3QtPm5wdXJnZXMgKz0gc3JjLT5ucHVyZ2VzOwotCWRz dC0+bmh1Z2lmaWVzICs9IHNyYy0+bmh1Z2lmaWVzOwotCWRzdC0+bmRlaHVnaWZpZXMgKz0gc3Jj LT5uZGVodWdpZmllczsKLX0KLQotdm9pZAotaHBhX3NoYXJkX3N0YXRzX2FjY3VtKGhwYV9zaGFy ZF9zdGF0c190ICpkc3QsIGhwYV9zaGFyZF9zdGF0c190ICpzcmMpIHsKLQlwc3NldF9zdGF0c19h Y2N1bSgmZHN0LT5wc3NldF9zdGF0cywgJnNyYy0+cHNzZXRfc3RhdHMpOwotCWhwYV9zaGFyZF9u b25kZXJpdmVkX3N0YXRzX2FjY3VtKCZkc3QtPm5vbmRlcml2ZWRfc3RhdHMsCi0JICAgICZzcmMt Pm5vbmRlcml2ZWRfc3RhdHMpOwotfQotCi12b2lkCi1ocGFfc2hhcmRfc3RhdHNfbWVyZ2UodHNk bl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQsCi0gICAgaHBhX3NoYXJkX3N0YXRzX3QgKmRz dCkgewotCWhwYV9kb19jb25zaXN0ZW5jeV9jaGVja3Moc2hhcmQpOwotCi0JbWFsbG9jX211dGV4 X2xvY2sodHNkbiwgJnNoYXJkLT5ncm93X210eCk7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwg JnNoYXJkLT5tdHgpOwotCXBzc2V0X3N0YXRzX2FjY3VtKCZkc3QtPnBzc2V0X3N0YXRzLCAmc2hh cmQtPnBzc2V0LnN0YXRzKTsKLQlocGFfc2hhcmRfbm9uZGVyaXZlZF9zdGF0c19hY2N1bSgmZHN0 LT5ub25kZXJpdmVkX3N0YXRzLCAmc2hhcmQtPnN0YXRzKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZzaGFyZC0+bXR4KTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+ Z3Jvd19tdHgpOwotfQotCi1zdGF0aWMgYm9vbAotaHBhX2dvb2RfaHVnaWZpY2F0aW9uX2NhbmRp ZGF0ZShocGFfc2hhcmRfdCAqc2hhcmQsIGhwZGF0YV90ICpwcykgewotCS8qCi0JICogTm90ZSB0 aGF0IHRoaXMgbmVlZHMgdG8gYmUgPj0gcmF0aGVyIHRoYW4ganVzdCA+LCBiZWNhdXNlIG9mIHRo ZQotCSAqIGltcG9ydGFudCBzcGVjaWFsIGNhc2UgaW4gd2hpY2ggdGhlIGh1Z2lmaWNhdGlvbiB0 aHJlc2hvbGQgaXMgZXhhY3RseQotCSAqIEhVR0VQQUdFLgotCSAqLwotCXJldHVybiBocGRhdGFf bmFjdGl2ZV9nZXQocHMpICogUEFHRQotCSAgICA+PSBzaGFyZC0+b3B0cy5odWdpZmljYXRpb25f dGhyZXNob2xkOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1ocGFfYWRqdXN0ZWRfbmRpcnR5KHRzZG5f dCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25l cih0c2RuLCAmc2hhcmQtPm10eCk7Ci0JcmV0dXJuIHBzc2V0X25kaXJ0eSgmc2hhcmQtPnBzc2V0 KSAtIHNoYXJkLT5ucGVuZGluZ19wdXJnZTsKLX0KLQotc3RhdGljIHNpemVfdAotaHBhX25kaXJ0 eV9tYXgodHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQpIHsKLQltYWxsb2NfbXV0ZXhf YXNzZXJ0X293bmVyKHRzZG4sICZzaGFyZC0+bXR4KTsKLQlpZiAoc2hhcmQtPm9wdHMuZGlydHlf bXVsdCA9PSAoZnhwX3QpLTEpIHsKLQkJcmV0dXJuIChzaXplX3QpLTE7Ci0JfQotCXJldHVybiBm eHBfbXVsX2ZyYWMocHNzZXRfbmFjdGl2ZSgmc2hhcmQtPnBzc2V0KSwKLQkgICAgc2hhcmQtPm9w dHMuZGlydHlfbXVsdCk7Ci19Ci0KLXN0YXRpYyBib29sCi1ocGFfaHVnaWZ5X2Jsb2NrZWRfYnlf bmRpcnR5KHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JbWFsbG9jX211dGV4 X2Fzc2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7Ci0JaHBkYXRhX3QgKnRvX2h1Z2lmeSA9 IHBzc2V0X3BpY2tfaHVnaWZ5KCZzaGFyZC0+cHNzZXQpOwotCWlmICh0b19odWdpZnkgPT0gTlVM TCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiBocGFfYWRqdXN0ZWRfbmRpcnR5KHRz ZG4sIHNoYXJkKQotCSAgICArIGhwZGF0YV9ucmV0YWluZWRfZ2V0KHRvX2h1Z2lmeSkgPiBocGFf bmRpcnR5X21heCh0c2RuLCBzaGFyZCk7Ci19Ci0KLXN0YXRpYyBib29sCi1ocGFfc2hvdWxkX3B1 cmdlKHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JbWFsbG9jX211dGV4X2Fz c2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7Ci0JaWYgKGhwYV9hZGp1c3RlZF9uZGlydHko dHNkbiwgc2hhcmQpID4gaHBhX25kaXJ0eV9tYXgodHNkbiwgc2hhcmQpKSB7Ci0JCXJldHVybiB0 cnVlOwotCX0KLQlpZiAoaHBhX2h1Z2lmeV9ibG9ja2VkX2J5X25kaXJ0eSh0c2RuLCBzaGFyZCkp IHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQK LWhwYV91cGRhdGVfcHVyZ2VfaHVnaWZ5X2VsaWdpYmlsaXR5KHRzZG5fdCAqdHNkbiwgaHBhX3No YXJkX3QgKnNoYXJkLAotICAgIGhwZGF0YV90ICpwcykgewotCW1hbGxvY19tdXRleF9hc3NlcnRf b3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOwotCWlmIChocGRhdGFfY2hhbmdpbmdfc3RhdGVfZ2V0 KHBzKSkgewotCQlocGRhdGFfcHVyZ2VfYWxsb3dlZF9zZXQocHMsIGZhbHNlKTsKLQkJaHBkYXRh X2Rpc2FsbG93X2h1Z2lmeShwcyk7Ci0JCXJldHVybjsKLQl9Ci0JLyoKLQkgKiBIdWdlcGFnZXMg YXJlIGRpc3RpbmN0bHkgY29zdGx5IHRvIHB1cmdlLCBzbyB0cnkgdG8gYXZvaWQgaXQgdW5sZXNz Ci0JICogdGhleSdyZSAqcGFydGljdWxhcmx5KiBmdWxsIG9mIGRpcnR5IHBhZ2VzLiAgRXZlbnR1 YWxseSwgd2Ugc2hvdWxkCi0JICogdXNlIGEgc21hcnRlciAvIG1vcmUgZHluYW1pYyBoZXVyaXN0 aWMgZm9yIHNpdHVhdGlvbnMgd2hlcmUgd2UgaGF2ZQotCSAqIHRvIG1hbnVhbGx5IGh1Z2lmeS4K LQkgKgotCSAqIEluIHNpdHVhdGlvbnMgd2hlcmUgd2UgZG9uJ3QgbWFudWFsbHkgaHVnaWZ5LCB0 aGlzIHByb2JsZW0gaXMKLQkgKiByZWR1Y2VkLiAgVGhlICJiYWQiIHNpdHVhdGlvbiB3ZSdyZSB0 cnlpbmcgdG8gYXZvaWQgaXMgb25lJ3MgdGhhdCdzCi0JICogY29tbW9uIGluIHNvbWUgTGludXgg Y29uZmlndXJhdGlvbnMgKHdoZXJlIGJvdGggZW5hYmxlZCBhbmQgZGVmcmFnCi0JICogYXJlIHNl dCB0byBtYWR2aXNlKSB0aGF0IGNhbiBsZWFkIHRvIGxvbmcgbGF0ZW5jeSBzcGlrZXMgb24gdGhl IGZpcnN0Ci0JICogYWNjZXNzIGFmdGVyIGEgaHVnaWZpY2F0aW9uLiAgVGhlIGlkZWFsIHBvbGlj eSBpbiBzdWNoIGNvbmZpZ3VyYXRpb25zCi0JICogaXMgcHJvYmFibHkgdGltZS1iYXNlZCBmb3Ig Ym90aCBwdXJnaW5nIGFuZCBodWdpZnlpbmc7IG9ubHkgaHVnaWZ5IGEKLQkgKiBodWdlcGFnZSBp ZiBpdCdzIG1ldCB0aGUgY3JpdGVyaWEgZm9yIHNvbWUgZXh0ZW5kZWQgcGVyaW9kIG9mIHRpbWUs Ci0JICogYW5kIG9ubHkgZGVodWdpZnkgaXQgaWYgaXQncyBmYWlsZWQgdG8gbWVldCB0aGUgY3Jp dGVyaWEgZm9yIGFuCi0JICogZXh0ZW5kZWQgcGVyaW9kIG9mIHRpbWUuICBXaGVuIGJhY2tncm91 bmQgdGhyZWFkcyBhcmUgb24sIHdlIHNob3VsZAotCSAqIHRyeSB0byB0YWtlIHRoaXMgaGl0IG9u IG9uZSBvZiB0aGVtLCBhcyB3ZWxsLgotCSAqCi0JICogSSB0aGluayB0aGUgaWRlYWwgc2V0dGlu ZyBpcyBUSFAgYWx3YXlzIGVuYWJsZWQsIGFuZCBkZWZyYWcgc2V0IHRvCi0JICogZGVmZXJyZWQ7 IGluIHRoYXQgY2FzZSB3ZSBkb24ndCBuZWVkIGFueSBleHBsaWNpdCBjYWxscyBvbiB0aGUKLQkg KiBhbGxvY2F0b3IncyBlbmQgYXQgYWxsOyB3ZSBqdXN0IHRyeSB0byBwYWNrIGFsbG9jYXRpb25z IGluIGEKLQkgKiBodWdlcGFnZS1mcmllbmRseSBtYW5uZXIgYW5kIGxldCB0aGUgT1MgaHVnaWZ5 IGluIHRoZSBiYWNrZ3JvdW5kLgotCSAqLwotCWhwZGF0YV9wdXJnZV9hbGxvd2VkX3NldChwcywg aHBkYXRhX25kaXJ0eV9nZXQocHMpID4gMCk7Ci0JaWYgKGhwYV9nb29kX2h1Z2lmaWNhdGlvbl9j YW5kaWRhdGUoc2hhcmQsIHBzKQotCSAgICAmJiAhaHBkYXRhX2h1Z2VfZ2V0KHBzKSkgewotCQlu c3RpbWVfdCBub3c7Ci0JCXNoYXJkLT5jZW50cmFsLT5ob29rcy5jdXJ0aW1lKCZub3csIC8qIGZp cnN0X3JlYWRpbmcgKi8gdHJ1ZSk7Ci0JCWhwZGF0YV9hbGxvd19odWdpZnkocHMsIG5vdyk7Ci0J fQotCS8qCi0JICogT25jZSBhIGh1Z2VwYWdlIGhhcyBiZWNvbWUgZWxpZ2libGUgZm9yIGh1Z2lm aWNhdGlvbiwgd2UgZG9uJ3QgbWFyawotCSAqIGl0IGFzIGluZWxpZ2libGUganVzdCBiZWNhdXNl IGl0IHN0b3BzIG1lZXRpbmcgdGhlIGNyaXRlcmlhICh0aGlzCi0JICogY291bGQgbGVhZCB0byBz aXR1YXRpb25zIHdoZXJlIGEgaHVnZXBhZ2UgdGhhdCBzcGVuZHMgbW9zdCBvZiBpdHMKLQkgKiB0 aW1lIG1lZXRpbmcgdGhlIGNyaXRlcmlhIG5ldmVyIHF1aXRlIGdldHRpbmcgaHVnaWZpZWQgaWYg dGhlcmUgYXJlCi0JICogaW50ZXJ2ZW5pbmcgZGVhbGxvY2F0aW9ucykuICBUaGUgaWRlYSBpcyB0 aGF0IHRoZSBodWdpZmljYXRpb24gZGVsYXkKLQkgKiB3aWxsIGFsbG93IHRoZW0gdG8gZ2V0IHB1 cmdlZCwgcmVzZXRpbmcgdGhlaXIgImh1Z2lmeS1hbGxvd2VkIiBiaXQuCi0JICogSWYgdGhleSBk b24ndCBnZXQgcHVyZ2VkLCB0aGVuIHRoZSBodWdpZmljYXRpb24gaXNuJ3QgaHVydGluZyBhbmQK LQkgKiBtaWdodCBoZWxwLiAgQXMgYW4gZXhjZXB0aW9uLCB3ZSBkb24ndCBodWdpZnkgaHVnZXBh Z2VzIHRoYXQgYXJlIG5vdwotCSAqIGVtcHR5OyBpdCBkZWZpbml0ZWx5IGRvZXNuJ3QgaGVscCB0 aGVyZSB1bnRpbCB0aGUgaHVnZXBhZ2UgZ2V0cwotCSAqIHJldXNlZCwgd2hpY2ggaXMgbGlrZWx5 IG5vdCBmb3IgYSB3aGlsZS4KLQkgKi8KLQlpZiAoaHBkYXRhX25hY3RpdmVfZ2V0KHBzKSA9PSAw KSB7Ci0JCWhwZGF0YV9kaXNhbGxvd19odWdpZnkocHMpOwotCX0KLX0KLQotc3RhdGljIGJvb2wK LWhwYV9zaGFyZF9oYXNfZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpz aGFyZCkgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOwot CWhwZGF0YV90ICp0b19odWdpZnkgPSBwc3NldF9waWNrX2h1Z2lmeSgmc2hhcmQtPnBzc2V0KTsK LQlyZXR1cm4gdG9faHVnaWZ5ICE9IE5VTEwgfHwgaHBhX3Nob3VsZF9wdXJnZSh0c2RuLCBzaGFy ZCk7Ci19Ci0KLS8qIFJldHVybnMgd2hldGhlciBvciBub3Qgd2UgcHVyZ2VkIGFueXRoaW5nLiAq Lwotc3RhdGljIGJvb2wKLWhwYV90cnlfcHVyZ2UodHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAq c2hhcmQpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZzaGFyZC0+bXR4KTsK LQotCWhwZGF0YV90ICp0b19wdXJnZSA9IHBzc2V0X3BpY2tfcHVyZ2UoJnNoYXJkLT5wc3NldCk7 Ci0JaWYgKHRvX3B1cmdlID09IE5VTEwpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlhc3NlcnQo aHBkYXRhX3B1cmdlX2FsbG93ZWRfZ2V0KHRvX3B1cmdlKSk7Ci0JYXNzZXJ0KCFocGRhdGFfY2hh bmdpbmdfc3RhdGVfZ2V0KHRvX3B1cmdlKSk7Ci0KLQkvKgotCSAqIERvbid0IGxldCBhbnlvbmUg ZWxzZSBwdXJnZSBvciBodWdpZnkgdGhpcyBwYWdlIHdoaWxlCi0JICogd2UncmUgcHVyZ2luZyBp dCAoYWxsb2NhdGlvbnMgYW5kIGRlYWxsb2NhdGlvbnMgYXJlCi0JICogT0spLgotCSAqLwotCXBz c2V0X3VwZGF0ZV9iZWdpbigmc2hhcmQtPnBzc2V0LCB0b19wdXJnZSk7Ci0JYXNzZXJ0KGhwZGF0 YV9hbGxvY19hbGxvd2VkX2dldCh0b19wdXJnZSkpOwotCWhwZGF0YV9taWRfcHVyZ2Vfc2V0KHRv X3B1cmdlLCB0cnVlKTsKLQlocGRhdGFfcHVyZ2VfYWxsb3dlZF9zZXQodG9fcHVyZ2UsIGZhbHNl KTsKLQlocGRhdGFfZGlzYWxsb3dfaHVnaWZ5KHRvX3B1cmdlKTsKLQkvKgotCSAqIFVubGlrZSB3 aXRoIGh1Z2lmaWNhdGlvbiAod2hlcmUgY29uY3VycmVudAotCSAqIGFsbG9jYXRpb25zIGFyZSBh bGxvd2VkKSwgY29uY3VycmVudCBhbGxvY2F0aW9uIG91dAotCSAqIG9mIGEgaHVnZXBhZ2UgYmVp bmcgcHVyZ2VkIGlzIHVuc2FmZTsgd2UgbWlnaHQgaGFuZAotCSAqIG91dCBhbiBleHRlbnQgZm9y IGFuIGFsbG9jYXRpb24gYW5kIHRoZW4gcHVyZ2UgaXQKLQkgKiAoY2xlYXJpbmcgb3V0IHVzZXIg ZGF0YSkuCi0JICovCi0JaHBkYXRhX2FsbG9jX2FsbG93ZWRfc2V0KHRvX3B1cmdlLCBmYWxzZSk7 Ci0JcHNzZXRfdXBkYXRlX2VuZCgmc2hhcmQtPnBzc2V0LCB0b19wdXJnZSk7Ci0KLQkvKiBHYXRo ZXIgYWxsIHRoZSBtZXRhZGF0YSB3ZSdsbCBuZWVkIGR1cmluZyB0aGUgcHVyZ2UuICovCi0JYm9v bCBkZWh1Z2lmeSA9IGhwZGF0YV9odWdlX2dldCh0b19wdXJnZSk7Ci0JaHBkYXRhX3B1cmdlX3N0 YXRlX3QgcHVyZ2Vfc3RhdGU7Ci0Jc2l6ZV90IG51bV90b19wdXJnZSA9IGhwZGF0YV9wdXJnZV9i ZWdpbih0b19wdXJnZSwgJnB1cmdlX3N0YXRlKTsKLQotCXNoYXJkLT5ucGVuZGluZ19wdXJnZSAr PSBudW1fdG9fcHVyZ2U7Ci0KLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+bXR4 KTsKLQotCS8qIEFjdHVhbGx5IGRvIHRoZSBwdXJnaW5nLCBub3cgdGhhdCB0aGUgbG9jayBpcyBk cm9wcGVkLiAqLwotCWlmIChkZWh1Z2lmeSkgewotCQlzaGFyZC0+Y2VudHJhbC0+aG9va3MuZGVo dWdpZnkoaHBkYXRhX2FkZHJfZ2V0KHRvX3B1cmdlKSwKLQkJICAgIEhVR0VQQUdFKTsKLQl9Ci0J c2l6ZV90IHRvdGFsX3B1cmdlZCA9IDA7Ci0JdWludDY0X3QgcHVyZ2VzX3RoaXNfcGFzcyA9IDA7 Ci0Jdm9pZCAqcHVyZ2VfYWRkcjsKLQlzaXplX3QgcHVyZ2Vfc2l6ZTsKLQl3aGlsZSAoaHBkYXRh X3B1cmdlX25leHQodG9fcHVyZ2UsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCi0JICAgICZw dXJnZV9zaXplKSkgewotCQl0b3RhbF9wdXJnZWQgKz0gcHVyZ2Vfc2l6ZTsKLQkJYXNzZXJ0KHRv dGFsX3B1cmdlZCA8PSBIVUdFUEFHRSk7Ci0JCXB1cmdlc190aGlzX3Bhc3MrKzsKLQkJc2hhcmQt PmNlbnRyYWwtPmhvb2tzLnB1cmdlKHB1cmdlX2FkZHIsIHB1cmdlX3NpemUpOwotCX0KLQotCW1h bGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKLQkvKiBUaGUgc2hhcmQgdXBkYXRl cyAqLwotCXNoYXJkLT5ucGVuZGluZ19wdXJnZSAtPSBudW1fdG9fcHVyZ2U7Ci0Jc2hhcmQtPnN0 YXRzLm5wdXJnZV9wYXNzZXMrKzsKLQlzaGFyZC0+c3RhdHMubnB1cmdlcyArPSBwdXJnZXNfdGhp c19wYXNzOwotCXNoYXJkLT5jZW50cmFsLT5ob29rcy5jdXJ0aW1lKCZzaGFyZC0+bGFzdF9wdXJn ZSwKLQkgICAgLyogZmlyc3RfcmVhZGluZyAqLyBmYWxzZSk7Ci0JaWYgKGRlaHVnaWZ5KSB7Ci0J CXNoYXJkLT5zdGF0cy5uZGVodWdpZmllcysrOwotCX0KLQotCS8qIFRoZSBocGRhdGEgdXBkYXRl cy4gKi8KLQlwc3NldF91cGRhdGVfYmVnaW4oJnNoYXJkLT5wc3NldCwgdG9fcHVyZ2UpOwotCWlm IChkZWh1Z2lmeSkgewotCQlocGRhdGFfZGVodWdpZnkodG9fcHVyZ2UpOwotCX0KLQlocGRhdGFf cHVyZ2VfZW5kKHRvX3B1cmdlLCAmcHVyZ2Vfc3RhdGUpOwotCWhwZGF0YV9taWRfcHVyZ2Vfc2V0 KHRvX3B1cmdlLCBmYWxzZSk7Ci0KLQlocGRhdGFfYWxsb2NfYWxsb3dlZF9zZXQodG9fcHVyZ2Us IHRydWUpOwotCWhwYV91cGRhdGVfcHVyZ2VfaHVnaWZ5X2VsaWdpYmlsaXR5KHRzZG4sIHNoYXJk LCB0b19wdXJnZSk7Ci0KLQlwc3NldF91cGRhdGVfZW5kKCZzaGFyZC0+cHNzZXQsIHRvX3B1cmdl KTsKLQotCXJldHVybiB0cnVlOwotfQotCi0vKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHdlIGh1 Z2lmaWVkIGFueXRoaW5nLiAqLwotc3RhdGljIGJvb2wKLWhwYV90cnlfaHVnaWZ5KHRzZG5fdCAq dHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0 c2RuLCAmc2hhcmQtPm10eCk7Ci0KLQlpZiAoaHBhX2h1Z2lmeV9ibG9ja2VkX2J5X25kaXJ0eSh0 c2RuLCBzaGFyZCkpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWhwZGF0YV90ICp0b19odWdp ZnkgPSBwc3NldF9waWNrX2h1Z2lmeSgmc2hhcmQtPnBzc2V0KTsKLQlpZiAodG9faHVnaWZ5ID09 IE5VTEwpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlhc3NlcnQoaHBkYXRhX2h1Z2lmeV9hbGxv d2VkX2dldCh0b19odWdpZnkpKTsKLQlhc3NlcnQoIWhwZGF0YV9jaGFuZ2luZ19zdGF0ZV9nZXQo dG9faHVnaWZ5KSk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhhdCBpdCdzIGJlZW4gaHVnaWZpYWJsZSBm b3IgbG9uZyBlbm91Z2guICovCi0JbnN0aW1lX3QgdGltZV9odWdpZnlfYWxsb3dlZCA9IGhwZGF0 YV90aW1lX2h1Z2lmeV9hbGxvd2VkKHRvX2h1Z2lmeSk7Ci0JdWludDY0X3QgbWlsbGlzID0gc2hh cmQtPmNlbnRyYWwtPmhvb2tzLm1zX3NpbmNlKCZ0aW1lX2h1Z2lmeV9hbGxvd2VkKTsKLQlpZiAo bWlsbGlzIDwgc2hhcmQtPm9wdHMuaHVnaWZ5X2RlbGF5X21zKSB7Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQkvKgotCSAqIERvbid0IGxldCBhbnlvbmUgZWxzZSBwdXJnZSBvciBodWdpZnkgdGhp cyBwYWdlIHdoaWxlCi0JICogd2UncmUgaHVnaWZ5aW5nIGl0IChhbGxvY2F0aW9ucyBhbmQgZGVh bGxvY2F0aW9ucyBhcmUKLQkgKiBPSykuCi0JICovCi0JcHNzZXRfdXBkYXRlX2JlZ2luKCZzaGFy ZC0+cHNzZXQsIHRvX2h1Z2lmeSk7Ci0JaHBkYXRhX21pZF9odWdpZnlfc2V0KHRvX2h1Z2lmeSwg dHJ1ZSk7Ci0JaHBkYXRhX3B1cmdlX2FsbG93ZWRfc2V0KHRvX2h1Z2lmeSwgZmFsc2UpOwotCWhw ZGF0YV9kaXNhbGxvd19odWdpZnkodG9faHVnaWZ5KTsKLQlhc3NlcnQoaHBkYXRhX2FsbG9jX2Fs bG93ZWRfZ2V0KHRvX2h1Z2lmeSkpOwotCXBzc2V0X3VwZGF0ZV9lbmQoJnNoYXJkLT5wc3NldCwg dG9faHVnaWZ5KTsKLQotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwot Ci0Jc2hhcmQtPmNlbnRyYWwtPmhvb2tzLmh1Z2lmeShocGRhdGFfYWRkcl9nZXQodG9faHVnaWZ5 KSwgSFVHRVBBR0UpOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwot CXNoYXJkLT5zdGF0cy5uaHVnaWZpZXMrKzsKLQotCXBzc2V0X3VwZGF0ZV9iZWdpbigmc2hhcmQt PnBzc2V0LCB0b19odWdpZnkpOwotCWhwZGF0YV9odWdpZnkodG9faHVnaWZ5KTsKLQlocGRhdGFf bWlkX2h1Z2lmeV9zZXQodG9faHVnaWZ5LCBmYWxzZSk7Ci0JaHBhX3VwZGF0ZV9wdXJnZV9odWdp ZnlfZWxpZ2liaWxpdHkodHNkbiwgc2hhcmQsIHRvX2h1Z2lmeSk7Ci0JcHNzZXRfdXBkYXRlX2Vu ZCgmc2hhcmQtPnBzc2V0LCB0b19odWdpZnkpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0g KiBFeGVjdXRpb24gb2YgZGVmZXJyZWQgd29yayBpcyBmb3JjZWQgaWYgaXQncyB0cmlnZ2VyZWQg YnkgYW4gZXhwbGljaXQKLSAqIGhwYV9zaGFyZF9kb19kZWZlcnJlZF93b3JrKCkgY2FsbC4KLSAq Lwotc3RhdGljIHZvaWQKLWhwYV9zaGFyZF9tYXliZV9kb19kZWZlcnJlZF93b3JrKHRzZG5fdCAq dHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkLAotICAgIGJvb2wgZm9yY2VkKSB7Ci0JbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7Ci0JaWYgKCFmb3JjZWQgJiYgc2hh cmQtPm9wdHMuZGVmZXJyYWxfYWxsb3dlZCkgewotCQlyZXR1cm47Ci0JfQotCS8qCi0JICogSWYg d2UncmUgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCwgZG8gd29yayBzbyBsb25nIGFzIHRoZXJlJ3Mg d29yayB0bwotCSAqIGJlIGRvbmUuICBPdGhlcndpc2UsIGJvdW5kIGxhdGVuY3kgdG8gbm90IGJl ICp0b28qIGJhZCBieSBkb2luZyBhdAotCSAqIG1vc3QgYSBzbWFsbCBmaXhlZCBudW1iZXIgb2Yg b3BlcmF0aW9ucy4KLQkgKi8KLQlib29sIGh1Z2lmaWVkID0gZmFsc2U7Ci0JYm9vbCBwdXJnZWQg PSBmYWxzZTsKLQlzaXplX3QgbWF4X29wcyA9IChmb3JjZWQgPyAoc2l6ZV90KS0xIDogMTYpOwot CXNpemVfdCBub3BzID0gMDsKLQlkbyB7Ci0JCS8qCi0JCSAqIEFsd2F5cyBwdXJnZSBiZWZvcmUg aHVnaWZ5aW5nLCB0byBtYWtlIHN1cmUgd2UgZ2V0IHNvbWUKLQkJICogYWJpbGl0eSB0byBoaXQg b3VyIHF1aWVzY2VuY2UgdGFyZ2V0cy4KLQkJICovCi0JCXB1cmdlZCA9IGZhbHNlOwotCQl3aGls ZSAoaHBhX3Nob3VsZF9wdXJnZSh0c2RuLCBzaGFyZCkgJiYgbm9wcyA8IG1heF9vcHMpIHsKLQkJ CXB1cmdlZCA9IGhwYV90cnlfcHVyZ2UodHNkbiwgc2hhcmQpOwotCQkJaWYgKHB1cmdlZCkgewot CQkJCW5vcHMrKzsKLQkJCX0KLQkJfQotCQlodWdpZmllZCA9IGhwYV90cnlfaHVnaWZ5KHRzZG4s IHNoYXJkKTsKLQkJaWYgKGh1Z2lmaWVkKSB7Ci0JCQlub3BzKys7Ci0JCX0KLQkJbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7Ci0JCW1hbGxvY19tdXRleF9hc3Nl cnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOwotCX0gd2hpbGUgKChodWdpZmllZCB8fCBwdXJn ZWQpICYmIG5vcHMgPCBtYXhfb3BzKTsKLX0KLQotc3RhdGljIGVkYXRhX3QgKgotaHBhX3RyeV9h bGxvY19vbmVfbm9fZ3Jvdyh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCwgc2l6ZV90 IHNpemUsCi0gICAgYm9vbCAqb29tKSB7Ci0JYm9vbCBlcnI7Ci0JZWRhdGFfdCAqZWRhdGEgPSBl ZGF0YV9jYWNoZV9mYXN0X2dldCh0c2RuLCAmc2hhcmQtPmVjZik7Ci0JaWYgKGVkYXRhID09IE5V TEwpIHsKLQkJKm9vbSA9IHRydWU7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWhwZGF0YV90ICpw cyA9IHBzc2V0X3BpY2tfYWxsb2MoJnNoYXJkLT5wc3NldCwgc2l6ZSk7Ci0JaWYgKHBzID09IE5V TEwpIHsKLQkJZWRhdGFfY2FjaGVfZmFzdF9wdXQodHNkbiwgJnNoYXJkLT5lY2YsIGVkYXRhKTsK LQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcHNzZXRfdXBkYXRlX2JlZ2luKCZzaGFyZC0+cHNzZXQs IHBzKTsKLQotCWlmIChocGRhdGFfZW1wdHkocHMpKSB7Ci0JCS8qCi0JCSAqIElmIHRoZSBwYWdl c2xhYiB1c2VkIHRvIGJlIGVtcHR5LCB0cmVhdCBpdCBhcyB0aG91Z2ggaXQncwotCQkgKiBicmFu ZCBuZXcgZm9yIGZyYWdtZW50YXRpb24tYXZvaWRhbmNlIHB1cnBvc2VzOyB3aGF0IHdlJ3JlCi0J CSAqIHRyeWluZyB0byBhcHByb3hpbWF0ZSBpcyB0aGUgYWdlIG9mIHRoZSBhbGxvY2F0aW9ucyAq aW4qIHRoYXQKLQkJICogcGFnZXNsYWIsIGFuZCB0aGUgYWxsb2NhdGlvbnMgaW4gdGhlIG5ldyBw YWdlc2xhYiBhcmUKLQkJICogZGVmaW5pdGlvbmFsbHkgdGhlIHlvdW5nZXN0IGluIHRoaXMgaHBh IHNoYXJkLgotCQkgKi8KLQkJaHBkYXRhX2FnZV9zZXQocHMsIHNoYXJkLT5hZ2VfY291bnRlcisr KTsKLQl9Ci0KLQl2b2lkICphZGRyID0gaHBkYXRhX3Jlc2VydmVfYWxsb2MocHMsIHNpemUpOwot CWVkYXRhX2luaXQoZWRhdGEsIHNoYXJkLT5pbmQsIGFkZHIsIHNpemUsIC8qIHNsYWIgKi8gZmFs c2UsCi0JICAgIFNDX05TSVpFUywgLyogc24gKi8gaHBkYXRhX2FnZV9nZXQocHMpLCBleHRlbnRf c3RhdGVfYWN0aXZlLAotCSAgICAvKiB6ZXJvZWQgKi8gZmFsc2UsIC8qIGNvbW1pdHRlZCAqLyB0 cnVlLCBFWFRFTlRfUEFJX0hQQSwKLQkgICAgRVhURU5UX05PVF9IRUFEKTsKLQllZGF0YV9wc19z ZXQoZWRhdGEsIHBzKTsKLQotCS8qCi0JICogVGhpcyBjb3VsZCB0aGVvcmV0aWNhbGx5IGJlIG1v dmVkIG91dHNpZGUgb2YgdGhlIGNyaXRpY2FsIHNlY3Rpb24sCi0JICogYnV0IHRoYXQgaW50cm9k dWNlcyB0aGUgcG90ZW50aWFsIGZvciBhIHJhY2UuICBXaXRob3V0IHRoZSBsb2NrLCB0aGUKLQkg KiAoaW5pdGlhbGx5IG5vbmVtcHR5LCBzaW5jZSB0aGlzIGlzIHRoZSByZXVzZSBwYXRod2F5KSBw YWdlc2xhYiB3ZQotCSAqIGFsbG9jYXRlZCBvdXQgb2YgY291bGQgYmVjb21lIG90aGVyd2lzZSBl bXB0eSB3aGlsZSB0aGUgbG9jayBpcwotCSAqIGRyb3BwZWQuICBUaGlzIHdvdWxkIGZvcmNlIHVz IHRvIGRlYWwgd2l0aCBhIHBhZ2VzbGFiIGV2aWN0aW9uIGRvd24KLQkgKiB0aGUgZXJyb3IgcGF0 aHdheSwgd2hpY2ggaXMgYSBwYWluLgotCSAqLwotCWVyciA9IGVtYXBfcmVnaXN0ZXJfYm91bmRh cnkodHNkbiwgc2hhcmQtPmVtYXAsIGVkYXRhLAotCSAgICBTQ19OU0laRVMsIC8qIHNsYWIgKi8g ZmFsc2UpOwotCWlmIChlcnIpIHsKLQkJaHBkYXRhX3VucmVzZXJ2ZShwcywgZWRhdGFfYWRkcl9n ZXQoZWRhdGEpLAotCQkgICAgZWRhdGFfc2l6ZV9nZXQoZWRhdGEpKTsKLQkJLyoKLQkJICogV2Ug c2hvdWxkIGFyZ3VhYmx5IHJlc2V0IGRpcnR5IHN0YXRlIGhlcmUsIGJ1dCB0aGlzIHdvdWxkCi0J CSAqIHJlcXVpcmUgc29tZSBzb3J0IG9mIHByZXBhcmUgKyBjb21taXQgZnVuY3Rpb25hbGl0eSB0 aGF0J3MgYQotCQkgKiBsaXR0bGUgbXVjaCB0byBkZWFsIHdpdGggZm9yIG5vdy4KLQkJICoKLQkJ ICogV2UgZG9uJ3QgaGF2ZSBhIGRvX2RlZmVycmVkX3dvcmsgZG93biB0aGlzIHBhdGh3YXksIG9u IHRoZQotCQkgKiBwcmluY2lwbGUgdGhhdCB3ZSBkaWRuJ3QgKnJlYWxseSogYWZmZWN0IHNoYXJk IHN0YXRlICh3ZQotCQkgKiB0d2Vha2VkIHRoZSBzdGF0cywgYnV0IG91ciB0d2Vha3Mgd2VyZW4n dCByZWFsbHkgYWNjdXJhdGUpLgotCQkgKi8KLQkJcHNzZXRfdXBkYXRlX2VuZCgmc2hhcmQtPnBz c2V0LCBwcyk7Ci0JCWVkYXRhX2NhY2hlX2Zhc3RfcHV0KHRzZG4sICZzaGFyZC0+ZWNmLCBlZGF0 YSk7Ci0JCSpvb20gPSB0cnVlOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlocGFfdXBkYXRlX3B1 cmdlX2h1Z2lmeV9lbGlnaWJpbGl0eSh0c2RuLCBzaGFyZCwgcHMpOwotCXBzc2V0X3VwZGF0ZV9l bmQoJnNoYXJkLT5wc3NldCwgcHMpOwotCXJldHVybiBlZGF0YTsKLX0KLQotc3RhdGljIHNpemVf dAotaHBhX3RyeV9hbGxvY19iYXRjaF9ub19ncm93KHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3Qg KnNoYXJkLCBzaXplX3Qgc2l6ZSwKLSAgICBib29sICpvb20sIHNpemVfdCBuYWxsb2NzLCBlZGF0 YV9saXN0X2FjdGl2ZV90ICpyZXN1bHRzLAotICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJh dGVkKSB7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwotCXNpemVfdCBu c3VjY2VzcyA9IDA7Ci0JZm9yICg7IG5zdWNjZXNzIDwgbmFsbG9jczsgbnN1Y2Nlc3MrKykgewot CQllZGF0YV90ICplZGF0YSA9IGhwYV90cnlfYWxsb2Nfb25lX25vX2dyb3codHNkbiwgc2hhcmQs IHNpemUsCi0JCSAgICBvb20pOwotCQlpZiAoZWRhdGEgPT0gTlVMTCkgewotCQkJYnJlYWs7Ci0J CX0KLQkJZWRhdGFfbGlzdF9hY3RpdmVfYXBwZW5kKHJlc3VsdHMsIGVkYXRhKTsKLQl9Ci0KLQlo cGFfc2hhcmRfbWF5YmVfZG9fZGVmZXJyZWRfd29yayh0c2RuLCBzaGFyZCwgLyogZm9yY2VkICov IGZhbHNlKTsKLQkqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBocGFfc2hhcmRfaGFzX2RlZmVy cmVkX3dvcmsodHNkbiwgc2hhcmQpOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNoYXJk LT5tdHgpOwotCXJldHVybiBuc3VjY2VzczsKLX0KLQotc3RhdGljIHNpemVfdAotaHBhX2FsbG9j X2JhdGNoX3Bzc2V0KHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkLCBzaXplX3Qgc2l6 ZSwKLSAgICBzaXplX3QgbmFsbG9jcywgZWRhdGFfbGlzdF9hY3RpdmVfdCAqcmVzdWx0cywKLSAg ICBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgewotCWFzc2VydChzaXplIDw9IHNoYXJk LT5vcHRzLnNsYWJfbWF4X2FsbG9jKTsKLQlib29sIG9vbSA9IGZhbHNlOwotCi0Jc2l6ZV90IG5z dWNjZXNzID0gaHBhX3RyeV9hbGxvY19iYXRjaF9ub19ncm93KHRzZG4sIHNoYXJkLCBzaXplLCAm b29tLAotCSAgICBuYWxsb2NzLCByZXN1bHRzLCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0K LQlpZiAobnN1Y2Nlc3MgPT0gbmFsbG9jcyB8fCBvb20pIHsKLQkJcmV0dXJuIG5zdWNjZXNzOwot CX0KLQotCS8qCi0JICogV2UgZGlkbid0IE9PTSwgYnV0IHdlcmVuJ3QgYWJsZSB0byBmaWxsIGV2 ZXJ5dGhpbmcgcmVxdWVzdGVkIG9mIHVzOwotCSAqIHRyeSB0byBncm93LgotCSAqLwotCW1hbGxv Y19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+Z3Jvd19tdHgpOwotCS8qCi0JICogQ2hlY2sgZm9y IGdyb3cgcmFjZXM7IG1heWJlIHNvbWUgZWFybGllciB0aHJlYWQgZXhwYW5kZWQgdGhlIHBzc2V0 Ci0JICogaW4gYmV0d2VlbiB3aGVuIHdlIGRyb3BwZWQgdGhlIG1haW4gbXV0ZXggYW5kIGdyYWJi ZWQgdGhlIGdyb3cgbXV0ZXguCi0JICovCi0JbnN1Y2Nlc3MgKz0gaHBhX3RyeV9hbGxvY19iYXRj aF9ub19ncm93KHRzZG4sIHNoYXJkLCBzaXplLCAmb29tLAotCSAgICBuYWxsb2NzIC0gbnN1Y2Nl c3MsIHJlc3VsdHMsIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQlpZiAobnN1Y2Nlc3MgPT0g bmFsbG9jcyB8fCBvb20pIHsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPmdy b3dfbXR4KTsKLQkJcmV0dXJuIG5zdWNjZXNzOwotCX0KLQotCS8qCi0JICogTm90ZSB0aGF0IHdl IGRvbid0IGhvbGQgc2hhcmQtPm10eCBoZXJlICh3aGlsZSBncm93aW5nKTsKLQkgKiBkZWFsbG9j YXRpb25zIChhbmQgYWxsb2NhdGlvbnMgb2Ygc21hbGxlciBzaXplcykgbWF5IHN0aWxsIHN1Y2Nl ZWQKLQkgKiB3aGlsZSB3ZSdyZSBkb2luZyB0aGlzIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBzeXN0 ZW0gY2FsbC4KLQkgKi8KLQlocGRhdGFfdCAqcHMgPSBocGFfY2VudHJhbF9leHRyYWN0KHRzZG4s IHNoYXJkLT5jZW50cmFsLCBzaXplLCAmb29tKTsKLQlpZiAocHMgPT0gTlVMTCkgewotCQltYWxs b2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+Z3Jvd19tdHgpOwotCQlyZXR1cm4gbnN1Y2Nl c3M7Ci0JfQotCi0JLyoKLQkgKiBXZSBnb3QgdGhlIHBhZ2VzbGFiOyBhbGxvY2F0ZSBmcm9tIGl0 LiAgVGhpcyBkb2VzIGFuIHVubG9jayBmb2xsb3dlZAotCSAqIGJ5IGEgbG9jayBvbiB0aGUgc2Ft ZSBtdXRleCwgYW5kIGhvbGRzIHRoZSBncm93IG11dGV4IHdoaWxlIGRvaW5nCi0JICogZGVmZXJy ZWQgd29yaywgYnV0IHRoaXMgaXMgYW4gdW5jb21tb24gcGF0aDsgdGhlIHNpbXBsaWNpdHkgaXMg d29ydGgKLQkgKiBpdC4KLQkgKi8KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2hhcmQtPm10 eCk7Ci0JcHNzZXRfaW5zZXJ0KCZzaGFyZC0+cHNzZXQsIHBzKTsKLQltYWxsb2NfbXV0ZXhfdW5s b2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKLQotCW5zdWNjZXNzICs9IGhwYV90cnlfYWxsb2NfYmF0 Y2hfbm9fZ3Jvdyh0c2RuLCBzaGFyZCwgc2l6ZSwgJm9vbSwKLQkgICAgbmFsbG9jcyAtIG5zdWNj ZXNzLCByZXN1bHRzLCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JLyoKLQkgKiBEcm9wIGdy b3dfbXR4IGJlZm9yZSBkb2luZyBkZWZlcnJlZCB3b3JrOyBvdGhlciB0aHJlYWRzIGJsb2NrZWQg b24gaXQKLQkgKiBzaG91bGQgYmUgYWxsb3dlZCB0byBwcm9jZWVkIHdoaWxlIHdlJ3JlIHdvcmtp bmcuCi0JICovCi0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPmdyb3dfbXR4KTsK LQotCXJldHVybiBuc3VjY2VzczsKLX0KLQotc3RhdGljIGhwYV9zaGFyZF90ICoKLWhwYV9mcm9t X3BhaShwYWlfdCAqc2VsZikgewotCWFzc2VydChzZWxmLT5hbGxvYyA9ICZocGFfYWxsb2MpOwot CWFzc2VydChzZWxmLT5leHBhbmQgPSAmaHBhX2V4cGFuZCk7Ci0JYXNzZXJ0KHNlbGYtPnNocmlu ayA9ICZocGFfc2hyaW5rKTsKLQlhc3NlcnQoc2VsZi0+ZGFsbG9jID0gJmhwYV9kYWxsb2MpOwot CXJldHVybiAoaHBhX3NoYXJkX3QgKilzZWxmOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1ocGFfYWxs b2NfYmF0Y2godHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsIHNpemVfdCBu YWxsb2NzLAotICAgIGVkYXRhX2xpc3RfYWN0aXZlX3QgKnJlc3VsdHMsIGJvb2wgKmRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkKSB7Ci0JYXNzZXJ0KG5hbGxvY3MgPiAwKTsKLQlhc3NlcnQoKHNpemUg JiBQQUdFX01BU0spID09IDApOwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93 aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRORVNTX1JBTktfQ09SRSwgMCk7Ci0JaHBh X3NoYXJkX3QgKnNoYXJkID0gaHBhX2Zyb21fcGFpKHNlbGYpOwotCi0JaWYgKHNpemUgPiBzaGFy ZC0+b3B0cy5zbGFiX21heF9hbGxvYykgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzaXplX3QgbnN1 Y2Nlc3MgPSBocGFfYWxsb2NfYmF0Y2hfcHNzZXQodHNkbiwgc2hhcmQsIHNpemUsIG5hbGxvY3Ms Ci0JICAgIHJlc3VsdHMsIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQotCXdpdG5lc3NfYXNz ZXJ0X2RlcHRoX3RvX3JhbmsodHNkbl93aXRuZXNzX3RzZHBfZ2V0KHRzZG4pLAotCSAgICBXSVRO RVNTX1JBTktfQ09SRSwgMCk7Ci0KLQkvKgotCSAqIEd1YXJkIHRoZSBzYW5pdHkgY2hlY2tzIHdp dGggY29uZmlnX2RlYnVnIGJlY2F1c2UgdGhlIGxvb3AgY2Fubm90IGJlCi0JICogcHJvdmVuIG5v bi1jaXJjdWxhciBieSB0aGUgY29tcGlsZXIsIGV2ZW4gaWYgZXZlcnl0aGluZyB3aXRoaW4gdGhl Ci0JICogbG9vcCBpcyBvcHRpbWl6ZWQgYXdheS4KLQkgKi8KLQlpZiAoY29uZmlnX2RlYnVnKSB7 Ci0JCWVkYXRhX3QgKmVkYXRhOwotCQlxbF9mb3JlYWNoKGVkYXRhLCAmcmVzdWx0cy0+aGVhZCwg cWxfbGlua19hY3RpdmUpIHsKLQkJCWVtYXBfYXNzZXJ0X21hcHBlZCh0c2RuLCBzaGFyZC0+ZW1h cCwgZWRhdGEpOwotCQkJYXNzZXJ0KGVkYXRhX3BhaV9nZXQoZWRhdGEpID09IEVYVEVOVF9QQUlf SFBBKTsKLQkJCWFzc2VydChlZGF0YV9zdGF0ZV9nZXQoZWRhdGEpID09IGV4dGVudF9zdGF0ZV9h Y3RpdmUpOwotCQkJYXNzZXJ0KGVkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpID09IHNoYXJkLT5p bmQpOwotCQkJYXNzZXJ0KGVkYXRhX3N6aW5kX2dldF9tYXliZV9pbnZhbGlkKGVkYXRhKSA9PQot CQkJICAgIFNDX05TSVpFUyk7Ci0JCQlhc3NlcnQoIWVkYXRhX3NsYWJfZ2V0KGVkYXRhKSk7Ci0J CQlhc3NlcnQoZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSkpOwotCQkJYXNzZXJ0KGVkYXRhX2Jh c2VfZ2V0KGVkYXRhKSA9PSBlZGF0YV9hZGRyX2dldChlZGF0YSkpOwotCQkJYXNzZXJ0KGVkYXRh X2Jhc2VfZ2V0KGVkYXRhKSAhPSBOVUxMKTsKLQkJfQotCX0KLQlyZXR1cm4gbnN1Y2Nlc3M7Ci19 Ci0KLXN0YXRpYyBlZGF0YV90ICoKLWhwYV9hbGxvYyh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxm LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLAotICAgIGJvb2wgZ3Vh cmRlZCwgYm9vbCBmcmVxdWVudF9yZXVzZSwgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQp IHsKLQlhc3NlcnQoKHNpemUgJiBQQUdFX01BU0spID09IDApOwotCWFzc2VydCghZ3VhcmRlZCk7 Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNk biksCi0JICAgIFdJVE5FU1NfUkFOS19DT1JFLCAwKTsKLQotCS8qIFdlIGRvbid0IGhhbmRsZSBh bGlnbm1lbnQgb3IgemVyb2luZyBmb3Igbm93LiAqLwotCWlmIChhbGlnbm1lbnQgPiBQQUdFIHx8 IHplcm8pIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCS8qCi0JICogQW4gYWxsb2Mgd2l0aCBhbGln bm1lbnQgPT0gUEFHRSBhbmQgemVybyA9PSBmYWxzZSBpcyBlcXVpdmFsZW50IHRvIGEKLQkgKiBi YXRjaCBhbGxvYyBvZiAxLiAgSnVzdCBkbyB0aGF0LCBzbyB3ZSBjYW4gc2hhcmUgY29kZS4KLQkg Ki8KLQllZGF0YV9saXN0X2FjdGl2ZV90IHJlc3VsdHM7Ci0JZWRhdGFfbGlzdF9hY3RpdmVfaW5p dCgmcmVzdWx0cyk7Ci0Jc2l6ZV90IG5hbGxvY3MgPSBocGFfYWxsb2NfYmF0Y2godHNkbiwgc2Vs Ziwgc2l6ZSwgLyogbmFsbG9jcyAqLyAxLAotCSAgICAmcmVzdWx0cywgZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQpOwotCWFzc2VydChuYWxsb2NzID09IDAgfHwgbmFsbG9jcyA9PSAxKTsKLQllZGF0 YV90ICplZGF0YSA9IGVkYXRhX2xpc3RfYWN0aXZlX2ZpcnN0KCZyZXN1bHRzKTsKLQlyZXR1cm4g ZWRhdGE7Ci19Ci0KLXN0YXRpYyBib29sCi1ocGFfZXhwYW5kKHRzZG5fdCAqdHNkbiwgcGFpX3Qg KnNlbGYsIGVkYXRhX3QgKmVkYXRhLCBzaXplX3Qgb2xkX3NpemUsCi0gICAgc2l6ZV90IG5ld19z aXplLCBib29sIHplcm8sIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JLyogRXhw YW5kIG5vdCB5ZXQgc3VwcG9ydGVkLiAqLwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9v bAotaHBhX3Nocmluayh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwK LSAgICBzaXplX3Qgb2xkX3NpemUsIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCAqZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQpIHsKLQkvKiBTaHJpbmsgbm90IHlldCBzdXBwb3J0ZWQuICovCi0JcmV0dXJu IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ocGFfZGFsbG9jX3ByZXBhcmVfdW5sb2NrZWQodHNk bl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQsIGVkYXRhX3QgKmVkYXRhKSB7Ci0JbWFsbG9j X211dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOwotCi0JYXNzZXJ0KGVk YXRhX3BhaV9nZXQoZWRhdGEpID09IEVYVEVOVF9QQUlfSFBBKTsKLQlhc3NlcnQoZWRhdGFfc3Rh dGVfZ2V0KGVkYXRhKSA9PSBleHRlbnRfc3RhdGVfYWN0aXZlKTsKLQlhc3NlcnQoZWRhdGFfYXJl bmFfaW5kX2dldChlZGF0YSkgPT0gc2hhcmQtPmluZCk7Ci0JYXNzZXJ0KGVkYXRhX3N6aW5kX2dl dF9tYXliZV9pbnZhbGlkKGVkYXRhKSA9PSBTQ19OU0laRVMpOwotCWFzc2VydChlZGF0YV9jb21t aXR0ZWRfZ2V0KGVkYXRhKSk7Ci0JYXNzZXJ0KGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSAhPSBOVUxM KTsKLQotCS8qCi0JICogQW5vdGhlciB0aHJlYWQgc2hvdWxkbid0IGJlIHRyeWluZyB0byB0b3Vj aCB0aGUgbWV0YWRhdGEgb2YgYW4KLQkgKiBhbGxvY2F0aW9uIGJlaW5nIGZyZWVkLiAgVGhlIG9u ZSBleGNlcHRpb24gaXMgYSBtZXJnZSBhdHRlbXB0IGZyb20gYQotCSAqIGxvd2VyLWFkZHJlc3Nl ZCBQQUMgZXh0ZW50OyBpbiB0aGlzIGNhc2Ugd2UgaGF2ZSBhIG5vbWluYWwgcmFjZSBvbgotCSAq IHRoZSBlZGF0YSBtZXRhZGF0YSBiaXRzLCBidXQgaW4gcHJhY3RpY2UgdGhlIGZhY3QgdGhhdCB0 aGUgUEFJIGJpdHMKLQkgKiBhcmUgZGlmZmVyZW50IHdpbGwgcHJldmVudCBhbnkgZnVydGhlciBh Y2Nlc3MuICBUaGUgcmFjZSBpcyBiYWQsIGJ1dAotCSAqIGJlbmlnbiBpbiBwcmFjdGljZSwgYW5k IHRoZSBsb25nIHRlcm0gcGxhbiBpcyB0byB0cmFjayBlbm91Z2ggc3RhdGUKLQkgKiBpbiB0aGUg cnRyZWUgdG8gcHJldmVudCB0aGVzZSBtZXJnZSBhdHRlbXB0cyBpbiB0aGUgZmlyc3QgcGxhY2Uu Ci0JICovCi0JZWRhdGFfYWRkcl9zZXQoZWRhdGEsIGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSk7Ci0J ZWRhdGFfemVyb2VkX3NldChlZGF0YSwgZmFsc2UpOwotCWVtYXBfZGVyZWdpc3Rlcl9ib3VuZGFy eSh0c2RuLCBzaGFyZC0+ZW1hcCwgZWRhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotaHBhX2RhbGxv Y19sb2NrZWQodHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQsIGVkYXRhX3QgKmVkYXRh KSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7Ci0KLQkv KgotCSAqIFJlbGVhc2UgdGhlIG1ldGFkYXRhIGVhcmx5LCB0byBhdm9pZCBoYXZpbmcgdG8gcmVt ZW1iZXIgdG8gZG8gaXQKLQkgKiB3aGlsZSB3ZSdyZSBhbHNvIGRvaW5nIHRyaWNreSBwdXJnaW5n IGxvZ2ljLiAgRmlyc3QsIHdlIG5lZWQgdG8gZ3JhYgotCSAqIGEgZmV3IGJpdHMgb2YgbWV0YWRh dGEgZnJvbSBpdC4KLQkgKgotCSAqIE5vdGUgdGhhdCB0aGUgc2hhcmQgbXV0ZXggcHJvdGVjdHMg cHMncyBtZXRhZGF0YSB0b287IGl0IHdvdWxkbid0IGJlCi0JICogY29ycmVjdCB0byB0cnkgdG8g cmVhZCBtb3N0IGluZm9ybWF0aW9uIG91dCBvZiBpdCB3aXRob3V0IHRoZSBsb2NrLgotCSAqLwot CWhwZGF0YV90ICpwcyA9IGVkYXRhX3BzX2dldChlZGF0YSk7Ci0JLyogQ3VycmVudGx5LCBhbGwg ZWRhdGFzIGNvbWUgZnJvbSBwYWdlc2xhYnMuICovCi0JYXNzZXJ0KHBzICE9IE5VTEwpOwotCXZv aWQgKnVucmVzZXJ2ZV9hZGRyID0gZWRhdGFfYWRkcl9nZXQoZWRhdGEpOwotCXNpemVfdCB1bnJl c2VydmVfc2l6ZSA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKTsKLQllZGF0YV9jYWNoZV9mYXN0X3B1 dCh0c2RuLCAmc2hhcmQtPmVjZiwgZWRhdGEpOwotCi0JcHNzZXRfdXBkYXRlX2JlZ2luKCZzaGFy ZC0+cHNzZXQsIHBzKTsKLQlocGRhdGFfdW5yZXNlcnZlKHBzLCB1bnJlc2VydmVfYWRkciwgdW5y ZXNlcnZlX3NpemUpOwotCWhwYV91cGRhdGVfcHVyZ2VfaHVnaWZ5X2VsaWdpYmlsaXR5KHRzZG4s IHNoYXJkLCBwcyk7Ci0JcHNzZXRfdXBkYXRlX2VuZCgmc2hhcmQtPnBzc2V0LCBwcyk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1ocGFfZGFsbG9jX2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYs IGVkYXRhX2xpc3RfYWN0aXZlX3QgKmxpc3QsCi0gICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5l cmF0ZWQpIHsKLQlocGFfc2hhcmRfdCAqc2hhcmQgPSBocGFfZnJvbV9wYWkoc2VsZik7Ci0KLQll ZGF0YV90ICplZGF0YTsKLQlxbF9mb3JlYWNoKGVkYXRhLCAmbGlzdC0+aGVhZCwgcWxfbGlua19h Y3RpdmUpIHsKLQkJaHBhX2RhbGxvY19wcmVwYXJlX3VubG9ja2VkKHRzZG4sIHNoYXJkLCBlZGF0 YSk7Ci0JfQotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwotCS8qIE5v dywgcmVtb3ZlIGZyb20gdGhlIGxpc3QuICovCi0Jd2hpbGUgKChlZGF0YSA9IGVkYXRhX2xpc3Rf YWN0aXZlX2ZpcnN0KGxpc3QpKSAhPSBOVUxMKSB7Ci0JCWVkYXRhX2xpc3RfYWN0aXZlX3JlbW92 ZShsaXN0LCBlZGF0YSk7Ci0JCWhwYV9kYWxsb2NfbG9ja2VkKHRzZG4sIHNoYXJkLCBlZGF0YSk7 Ci0JfQotCWhwYV9zaGFyZF9tYXliZV9kb19kZWZlcnJlZF93b3JrKHRzZG4sIHNoYXJkLCAvKiBm b3JjZWQgKi8gZmFsc2UpOwotCSpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9Ci0JICAgIGhwYV9z aGFyZF9oYXNfZGVmZXJyZWRfd29yayh0c2RuLCBzaGFyZCk7Ci0KLQltYWxsb2NfbXV0ZXhfdW5s b2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKLX0KLQotc3RhdGljIHZvaWQKLWhwYV9kYWxsb2ModHNk bl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsCi0gICAgYm9vbCAqZGVmZXJy ZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlhc3NlcnQoIWVkYXRhX2d1YXJkZWRfZ2V0KGVkYXRhKSk7 Ci0JLyogSnVzdCBhIGRhbGxvY19iYXRjaCBvZiBzaXplIDE7IHRoaXMgbGV0cyB1cyBzaGFyZSBs b2dpYy4gKi8KLQllZGF0YV9saXN0X2FjdGl2ZV90IGRhbGxvY19saXN0OwotCWVkYXRhX2xpc3Rf YWN0aXZlX2luaXQoJmRhbGxvY19saXN0KTsKLQllZGF0YV9saXN0X2FjdGl2ZV9hcHBlbmQoJmRh bGxvY19saXN0LCBlZGF0YSk7Ci0JaHBhX2RhbGxvY19iYXRjaCh0c2RuLCBzZWxmLCAmZGFsbG9j X2xpc3QsIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLX0KLQotLyoKLSAqIENhbGN1bGF0ZSB0 aW1lIHVudGlsIGVpdGhlciBwdXJnaW5nIG9yIGh1Z2lmaWNhdGlvbiBvdWdodCB0byBoYXBwZW4u Ci0gKiBDYWxsZWQgYnkgYmFja2dyb3VuZCB0aHJlYWRzLgotICovCi1zdGF0aWMgdWludDY0X3QK LWhwYV90aW1lX3VudGlsX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZikg ewotCWhwYV9zaGFyZF90ICpzaGFyZCA9IGhwYV9mcm9tX3BhaShzZWxmKTsKLQl1aW50NjRfdCB0 aW1lX25zID0gQkFDS0dST1VORF9USFJFQURfREVGRVJSRURfTUFYOwotCi0JbWFsbG9jX211dGV4 X2xvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwotCi0JaHBkYXRhX3QgKnRvX2h1Z2lmeSA9IHBzc2V0 X3BpY2tfaHVnaWZ5KCZzaGFyZC0+cHNzZXQpOwotCWlmICh0b19odWdpZnkgIT0gTlVMTCkgewot CQluc3RpbWVfdCB0aW1lX2h1Z2lmeV9hbGxvd2VkID0KLQkJICAgIGhwZGF0YV90aW1lX2h1Z2lm eV9hbGxvd2VkKHRvX2h1Z2lmeSk7Ci0JCXVpbnQ2NF90IHNpbmNlX2h1Z2lmeV9hbGxvd2VkX21z ID0KLQkJICAgIHNoYXJkLT5jZW50cmFsLT5ob29rcy5tc19zaW5jZSgmdGltZV9odWdpZnlfYWxs b3dlZCk7Ci0JCS8qCi0JCSAqIElmIG5vdCBlbm91Z2ggdGltZSBoYXMgcGFzc2VkIHNpbmNlIGh1 Z2lmaWNhdGlvbiB3YXMgYWxsb3dlZCwKLQkJICogc2xlZXAgZm9yIHRoZSByZXN0LgotCQkgKi8K LQkJaWYgKHNpbmNlX2h1Z2lmeV9hbGxvd2VkX21zIDwgc2hhcmQtPm9wdHMuaHVnaWZ5X2RlbGF5 X21zKSB7Ci0JCQl0aW1lX25zID0gc2hhcmQtPm9wdHMuaHVnaWZ5X2RlbGF5X21zIC0KLQkJCSAg ICBzaW5jZV9odWdpZnlfYWxsb3dlZF9tczsKLQkJCXRpbWVfbnMgKj0gMTAwMCAqIDEwMDA7Ci0J CX0gZWxzZSB7Ci0JCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKLQkJ CXJldHVybiBCQUNLR1JPVU5EX1RIUkVBRF9ERUZFUlJFRF9NSU47Ci0JCX0KLQl9Ci0KLQlpZiAo aHBhX3Nob3VsZF9wdXJnZSh0c2RuLCBzaGFyZCkpIHsKLQkJLyoKLQkJICogSWYgd2UgaGF2ZW4n dCBwdXJnZWQgYmVmb3JlLCBubyBuZWVkIHRvIGNoZWNrIGludGVydmFsCi0JCSAqIGJldHdlZW4g cHVyZ2VzLiBTaW1wbHkgcHVyZ2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KLQkJICovCi0JCWlmIChz aGFyZC0+c3RhdHMubnB1cmdlX3Bhc3NlcyA9PSAwKSB7Ci0JCQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZzaGFyZC0+bXR4KTsKLQkJCXJldHVybiBCQUNLR1JPVU5EX1RIUkVBRF9ERUZFUlJF RF9NSU47Ci0JCX0KLQkJdWludDY0X3Qgc2luY2VfbGFzdF9wdXJnZV9tcyA9IHNoYXJkLT5jZW50 cmFsLT5ob29rcy5tc19zaW5jZSgKLQkJICAgICZzaGFyZC0+bGFzdF9wdXJnZSk7Ci0KLQkJaWYg KHNpbmNlX2xhc3RfcHVyZ2VfbXMgPCBzaGFyZC0+b3B0cy5taW5fcHVyZ2VfaW50ZXJ2YWxfbXMp IHsKLQkJCXVpbnQ2NF90IHVudGlsX3B1cmdlX25zOwotCQkJdW50aWxfcHVyZ2VfbnMgPSBzaGFy ZC0+b3B0cy5taW5fcHVyZ2VfaW50ZXJ2YWxfbXMgLQotCQkJICAgIHNpbmNlX2xhc3RfcHVyZ2Vf bXM7Ci0JCQl1bnRpbF9wdXJnZV9ucyAqPSAxMDAwICogMTAwMDsKLQotCQkJaWYgKHVudGlsX3B1 cmdlX25zIDwgdGltZV9ucykgewotCQkJCXRpbWVfbnMgPSB1bnRpbF9wdXJnZV9uczsKLQkJCX0K LQkJfSBlbHNlIHsKLQkJCXRpbWVfbnMgPSBCQUNLR1JPVU5EX1RIUkVBRF9ERUZFUlJFRF9NSU47 Ci0JCX0KLQl9Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0JcmV0 dXJuIHRpbWVfbnM7Ci19Ci0KLXZvaWQKLWhwYV9zaGFyZF9kaXNhYmxlKHRzZG5fdCAqdHNkbiwg aHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JaHBhX2RvX2NvbnNpc3RlbmN5X2NoZWNrcyhzaGFyZCk7 Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0JZWRhdGFfY2FjaGVf ZmFzdF9kaXNhYmxlKHRzZG4sICZzaGFyZC0+ZWNmKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRz ZG4sICZzaGFyZC0+bXR4KTsKLX0KLQotc3RhdGljIHZvaWQKLWhwYV9zaGFyZF9hc3NlcnRfc3Rh dHNfZW1wdHkocHNzZXRfYmluX3N0YXRzX3QgKmJpbl9zdGF0cykgewotCWFzc2VydChiaW5fc3Rh dHMtPm5wYWdlc2xhYnMgPT0gMCk7Ci0JYXNzZXJ0KGJpbl9zdGF0cy0+bmFjdGl2ZSA9PSAwKTsK LX0KLQotc3RhdGljIHZvaWQKLWhwYV9hc3NlcnRfZW1wdHkodHNkbl90ICp0c2RuLCBocGFfc2hh cmRfdCAqc2hhcmQsIHBzc2V0X3QgKnBzc2V0KSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25l cih0c2RuLCAmc2hhcmQtPm10eCk7Ci0JZm9yIChpbnQgaHVnZSA9IDA7IGh1Z2UgPD0gMTsgaHVn ZSsrKSB7Ci0JCWhwYV9zaGFyZF9hc3NlcnRfc3RhdHNfZW1wdHkoJnBzc2V0LT5zdGF0cy5mdWxs X3NsYWJzW2h1Z2VdKTsKLQkJZm9yIChwc3ppbmRfdCBpID0gMDsgaSA8IFBTU0VUX05QU0laRVM7 IGkrKykgewotCQkJaHBhX3NoYXJkX2Fzc2VydF9zdGF0c19lbXB0eSgKLQkJCSAgICAmcHNzZXQt PnN0YXRzLm5vbmZ1bGxfc2xhYnNbaV1baHVnZV0pOwotCQl9Ci0JfQotfQotCi12b2lkCi1ocGFf c2hhcmRfZGVzdHJveSh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCkgewotCWhwYV9k b19jb25zaXN0ZW5jeV9jaGVja3Moc2hhcmQpOwotCS8qCi0JICogQnkgdGhlIHRpbWUgd2UncmUg aGVyZSwgdGhlIGFyZW5hIGNvZGUgc2hvdWxkIGhhdmUgZGFsbG9jJ2QgYWxsIHRoZQotCSAqIGFj dGl2ZSBleHRlbnRzLCB3aGljaCBtZWFucyB3ZSBzaG91bGQgaGF2ZSBldmVudHVhbGx5IGV2aWN0 ZWQKLQkgKiBldmVyeXRoaW5nIGZyb20gdGhlIHBzc2V0LCBzbyBpdCBzaG91bGRuJ3QgYmUgYWJs ZSB0byBzZXJ2ZSBldmVuIGEKLQkgKiAxLXBhZ2UgYWxsb2NhdGlvbi4KLQkgKi8KLQlpZiAoY29u ZmlnX2RlYnVnKSB7Ci0JCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZzaGFyZC0+bXR4KTsKLQkJ aHBhX2Fzc2VydF9lbXB0eSh0c2RuLCBzaGFyZCwgJnNoYXJkLT5wc3NldCk7Ci0JCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwotCX0KLQlocGRhdGFfdCAqcHM7Ci0Jd2hp bGUgKChwcyA9IHBzc2V0X3BpY2tfYWxsb2MoJnNoYXJkLT5wc3NldCwgUEFHRSkpICE9IE5VTEwp IHsKLQkJLyogVGhlcmUgc2hvdWxkIGJlIG5vIGFsbG9jYXRpb25zIGFueXdoZXJlLiAqLwotCQlh c3NlcnQoaHBkYXRhX2VtcHR5KHBzKSk7Ci0JCXBzc2V0X3JlbW92ZSgmc2hhcmQtPnBzc2V0LCBw cyk7Ci0JCXNoYXJkLT5jZW50cmFsLT5ob29rcy51bm1hcChocGRhdGFfYWRkcl9nZXQocHMpLCBI VUdFUEFHRSk7Ci0JfQotfQotCi12b2lkCi1ocGFfc2hhcmRfc2V0X2RlZmVycmFsX2FsbG93ZWQo dHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQsCi0gICAgYm9vbCBkZWZlcnJhbF9hbGxv d2VkKSB7Ci0JaHBhX2RvX2NvbnNpc3RlbmN5X2NoZWNrcyhzaGFyZCk7Ci0KLQltYWxsb2NfbXV0 ZXhfbG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0JYm9vbCBkZWZlcnJhbF9wcmV2aW91c2x5X2Fs bG93ZWQgPSBzaGFyZC0+b3B0cy5kZWZlcnJhbF9hbGxvd2VkOwotCXNoYXJkLT5vcHRzLmRlZmVy cmFsX2FsbG93ZWQgPSBkZWZlcnJhbF9hbGxvd2VkOwotCWlmIChkZWZlcnJhbF9wcmV2aW91c2x5 X2FsbG93ZWQgJiYgIWRlZmVycmFsX2FsbG93ZWQpIHsKLQkJaHBhX3NoYXJkX21heWJlX2RvX2Rl ZmVycmVkX3dvcmsodHNkbiwgc2hhcmQsCi0JCSAgICAvKiBmb3JjZWQgKi8gdHJ1ZSk7Ci0JfQot CW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwotfQotCi12b2lkCi1ocGFf c2hhcmRfZG9fZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCkg ewotCWhwYV9kb19jb25zaXN0ZW5jeV9jaGVja3Moc2hhcmQpOwotCi0JbWFsbG9jX211dGV4X2xv Y2sodHNkbiwgJnNoYXJkLT5tdHgpOwotCWhwYV9zaGFyZF9tYXliZV9kb19kZWZlcnJlZF93b3Jr KHRzZG4sIHNoYXJkLCAvKiBmb3JjZWQgKi8gdHJ1ZSk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0 c2RuLCAmc2hhcmQtPm10eCk7Ci19Ci0KLXZvaWQKLWhwYV9zaGFyZF9wcmVmb3JrMyh0c2RuX3Qg KnRzZG4sIGhwYV9zaGFyZF90ICpzaGFyZCkgewotCWhwYV9kb19jb25zaXN0ZW5jeV9jaGVja3Mo c2hhcmQpOwotCi0JbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnNoYXJkLT5ncm93X210eCk7 Ci19Ci0KLXZvaWQKLWhwYV9zaGFyZF9wcmVmb3JrNCh0c2RuX3QgKnRzZG4sIGhwYV9zaGFyZF90 ICpzaGFyZCkgewotCWhwYV9kb19jb25zaXN0ZW5jeV9jaGVja3Moc2hhcmQpOwotCi0JbWFsbG9j X211dGV4X3ByZWZvcmsodHNkbiwgJnNoYXJkLT5tdHgpOwotfQotCi12b2lkCi1ocGFfc2hhcmRf cG9zdGZvcmtfcGFyZW50KHRzZG5fdCAqdHNkbiwgaHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JaHBh X2RvX2NvbnNpc3RlbmN5X2NoZWNrcyhzaGFyZCk7Ci0KLQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtf cGFyZW50KHRzZG4sICZzaGFyZC0+Z3Jvd19tdHgpOwotCW1hbGxvY19tdXRleF9wb3N0Zm9ya19w YXJlbnQodHNkbiwgJnNoYXJkLT5tdHgpOwotfQotCi12b2lkCi1ocGFfc2hhcmRfcG9zdGZvcmtf Y2hpbGQodHNkbl90ICp0c2RuLCBocGFfc2hhcmRfdCAqc2hhcmQpIHsKLQlocGFfZG9fY29uc2lz dGVuY3lfY2hlY2tzKHNoYXJkKTsKLQotCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2Ru LCAmc2hhcmQtPmdyb3dfbXR4KTsKLQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNkbiwg JnNoYXJkLT5tdHgpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3NyYy9ocGFfaG9va3MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3NyYy9ocGFfaG9va3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYWRlNTgxZS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC9zcmMvaHBhX2hvb2tzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvaHBhX2hvb2tzLmgiCi0KLXN0YXRpYyB2b2lkICpocGFf aG9va3NfbWFwKHNpemVfdCBzaXplKTsKLXN0YXRpYyB2b2lkIGhwYV9ob29rc191bm1hcCh2b2lk ICpwdHIsIHNpemVfdCBzaXplKTsKLXN0YXRpYyB2b2lkIGhwYV9ob29rc19wdXJnZSh2b2lkICpw dHIsIHNpemVfdCBzaXplKTsKLXN0YXRpYyB2b2lkIGhwYV9ob29rc19odWdpZnkodm9pZCAqcHRy LCBzaXplX3Qgc2l6ZSk7Ci1zdGF0aWMgdm9pZCBocGFfaG9va3NfZGVodWdpZnkodm9pZCAqcHRy LCBzaXplX3Qgc2l6ZSk7Ci1zdGF0aWMgdm9pZCBocGFfaG9va3NfY3VydGltZShuc3RpbWVfdCAq cl9uc3RpbWUsIGJvb2wgZmlyc3RfcmVhZGluZyk7Ci1zdGF0aWMgdWludDY0X3QgaHBhX2hvb2tz X21zX3NpbmNlKG5zdGltZV90ICpwYXN0X25zdGltZSk7Ci0KLWhwYV9ob29rc190IGhwYV9ob29r c19kZWZhdWx0ID0gewotCSZocGFfaG9va3NfbWFwLAotCSZocGFfaG9va3NfdW5tYXAsCi0JJmhw YV9ob29rc19wdXJnZSwKLQkmaHBhX2hvb2tzX2h1Z2lmeSwKLQkmaHBhX2hvb2tzX2RlaHVnaWZ5 LAotCSZocGFfaG9va3NfY3VydGltZSwKLQkmaHBhX2hvb2tzX21zX3NpbmNlCi19OwotCi1zdGF0 aWMgdm9pZCAqCi1ocGFfaG9va3NfbWFwKHNpemVfdCBzaXplKSB7Ci0JYm9vbCBjb21taXQgPSB0 cnVlOwotCXJldHVybiBwYWdlc19tYXAoTlVMTCwgc2l6ZSwgSFVHRVBBR0UsICZjb21taXQpOwot fQotCi1zdGF0aWMgdm9pZAotaHBhX2hvb2tzX3VubWFwKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUp IHsKLQlwYWdlc191bm1hcChwdHIsIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZAotaHBhX2hvb2tz X3B1cmdlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpIHsKLQlwYWdlc19wdXJnZV9mb3JjZWQocHRy LCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQKLWhwYV9ob29rc19odWdpZnkodm9pZCAqcHRyLCBz aXplX3Qgc2l6ZSkgewotCWJvb2wgZXJyID0gcGFnZXNfaHVnZShwdHIsIHNpemUpOwotCSh2b2lk KWVycjsKLX0KLQotc3RhdGljIHZvaWQKLWhwYV9ob29rc19kZWh1Z2lmeSh2b2lkICpwdHIsIHNp emVfdCBzaXplKSB7Ci0JYm9vbCBlcnIgPSBwYWdlc19ub2h1Z2UocHRyLCBzaXplKTsKLQkodm9p ZCllcnI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ocGFfaG9va3NfY3VydGltZShuc3RpbWVfdCAqcl9u c3RpbWUsIGJvb2wgZmlyc3RfcmVhZGluZykgewotCWlmIChmaXJzdF9yZWFkaW5nKSB7Ci0JCW5z dGltZV9pbml0X3plcm8ocl9uc3RpbWUpOwotCX0KLQluc3RpbWVfdXBkYXRlKHJfbnN0aW1lKTsK LX0KLQotc3RhdGljIHVpbnQ2NF90Ci1ocGFfaG9va3NfbXNfc2luY2UobnN0aW1lX3QgKnBhc3Rf bnN0aW1lKSB7Ci0JcmV0dXJuIG5zdGltZV9uc19zaW5jZShwYXN0X25zdGltZSkgLyAxMDAwIC8g MTAwMDsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvaHBkYXRhLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC9zcmMvaHBkYXRhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZDcyOTQuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2hw ZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI1ICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9ocGRhdGEuaCIKLQotc3RhdGljIGludAotaHBkYXRhX2FnZV9jb21wKGNvbnN0IGhw ZGF0YV90ICphLCBjb25zdCBocGRhdGFfdCAqYikgewotCXVpbnQ2NF90IGFfYWdlID0gaHBkYXRh X2FnZV9nZXQoYSk7Ci0JdWludDY0X3QgYl9hZ2UgPSBocGRhdGFfYWdlX2dldChiKTsKLQkvKgot CSAqIGhwZGF0YSBhZ2VzIGFyZSBvcGVyYXRpb24gY291bnRzIGluIHRoZSBwc3NldDsgbm8gdHdv IHNob3VsZCBiZSB0aGUKLQkgKiBzYW1lLgotCSAqLwotCWFzc2VydChhX2FnZSAhPSBiX2FnZSk7 Ci0JcmV0dXJuIChhX2FnZSA+IGJfYWdlKSAtIChhX2FnZSA8IGJfYWdlKTsKLX0KLQotcGhfZ2Vu KCwgaHBkYXRhX2FnZV9oZWFwLCBocGRhdGFfdCwgYWdlX2xpbmssIGhwZGF0YV9hZ2VfY29tcCkK LQotdm9pZAotaHBkYXRhX2luaXQoaHBkYXRhX3QgKmhwZGF0YSwgdm9pZCAqYWRkciwgdWludDY0 X3QgYWdlKSB7Ci0JaHBkYXRhX2FkZHJfc2V0KGhwZGF0YSwgYWRkcik7Ci0JaHBkYXRhX2FnZV9z ZXQoaHBkYXRhLCBhZ2UpOwotCWhwZGF0YS0+aF9odWdlID0gZmFsc2U7Ci0JaHBkYXRhLT5oX2Fs bG9jX2FsbG93ZWQgPSB0cnVlOwotCWhwZGF0YS0+aF9pbl9wc3NldF9hbGxvY19jb250YWluZXIg PSBmYWxzZTsKLQlocGRhdGEtPmhfcHVyZ2VfYWxsb3dlZCA9IGZhbHNlOwotCWhwZGF0YS0+aF9o dWdpZnlfYWxsb3dlZCA9IGZhbHNlOwotCWhwZGF0YS0+aF9pbl9wc3NldF9odWdpZnlfY29udGFp bmVyID0gZmFsc2U7Ci0JaHBkYXRhLT5oX21pZF9wdXJnZSA9IGZhbHNlOwotCWhwZGF0YS0+aF9t aWRfaHVnaWZ5ID0gZmFsc2U7Ci0JaHBkYXRhLT5oX3VwZGF0aW5nID0gZmFsc2U7Ci0JaHBkYXRh LT5oX2luX3Bzc2V0ID0gZmFsc2U7Ci0JaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9zZXQoaHBk YXRhLCBIVUdFUEFHRV9QQUdFUyk7Ci0JaHBkYXRhLT5oX25hY3RpdmUgPSAwOwotCWZiX2luaXQo aHBkYXRhLT5hY3RpdmVfcGFnZXMsIEhVR0VQQUdFX1BBR0VTKTsKLQlocGRhdGEtPmhfbnRvdWNo ZWQgPSAwOwotCWZiX2luaXQoaHBkYXRhLT50b3VjaGVkX3BhZ2VzLCBIVUdFUEFHRV9QQUdFUyk7 Ci0KLQlocGRhdGFfYXNzZXJ0X2NvbnNpc3RlbnQoaHBkYXRhKTsKLX0KLQotdm9pZCAqCi1ocGRh dGFfcmVzZXJ2ZV9hbGxvYyhocGRhdGFfdCAqaHBkYXRhLCBzaXplX3Qgc3opIHsKLQlocGRhdGFf YXNzZXJ0X2NvbnNpc3RlbnQoaHBkYXRhKTsKLQkvKgotCSAqIFRoaXMgaXMgYSBtZXRhZGF0YSBj aGFuZ2U7IHRoZSBocGRhdGEgc2hvdWxkIHRoZXJlZm9yZSBlaXRoZXIgbm90IGJlCi0JICogaW4g dGhlIHBzc2V0LCBvciBzaG91bGQgaGF2ZSBleHBsaWNpdGx5IG1hcmtlZCBpdHNlbGYgYXMgYmVp bmcKLQkgKiBtaWQtdXBkYXRlLgotCSAqLwotCWFzc2VydCghaHBkYXRhLT5oX2luX3Bzc2V0IHx8 IGhwZGF0YS0+aF91cGRhdGluZyk7Ci0JYXNzZXJ0KGhwZGF0YS0+aF9hbGxvY19hbGxvd2VkKTsK LQlhc3NlcnQoKHN6ICYgUEFHRV9NQVNLKSA9PSAwKTsKLQlzaXplX3QgbnBhZ2VzID0gc3ogPj4g TEdfUEFHRTsKLQlhc3NlcnQobnBhZ2VzIDw9IGhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2VfZ2V0 KGhwZGF0YSkpOwotCi0Jc2l6ZV90IHJlc3VsdDsKLQotCXNpemVfdCBzdGFydCA9IDA7Ci0JLyoK LQkgKiBUaGVzZSBhcmUgZGVhZCBzdG9yZXMsIGJ1dCB0aGUgY29tcGlsZXIgd2lsbCBpc3N1ZSB3 YXJuaW5ncyBvbiB0aGVtCi0JICogc2luY2UgaXQgY2FuJ3QgdGVsbCBzdGF0aWNhbGx5IHRoYXQg Zm91bmQgaXMgYWx3YXlzIHRydWUgYmVsb3cuCi0JICovCi0Jc2l6ZV90IGJlZ2luID0gMDsKLQlz aXplX3QgbGVuID0gMDsKLQotCXNpemVfdCBsYXJnZXN0X3VuY2hvc2VuX3JhbmdlID0gMDsKLQl3 aGlsZSAodHJ1ZSkgewotCQlib29sIGZvdW5kID0gZmJfdXJhbmdlX2l0ZXIoaHBkYXRhLT5hY3Rp dmVfcGFnZXMsCi0JCSAgICBIVUdFUEFHRV9QQUdFUywgc3RhcnQsICZiZWdpbiwgJmxlbik7Ci0J CS8qCi0JCSAqIEEgcHJlY29uZGl0aW9uIHRvIHRoaXMgZnVuY3Rpb24gaXMgdGhhdCBocGRhdGEg bXVzdCBiZSBhYmxlCi0JCSAqIHRvIHNlcnZlIHRoZSBhbGxvY2F0aW9uLgotCQkgKi8KLQkJYXNz ZXJ0KGZvdW5kKTsKLQkJYXNzZXJ0KGxlbiA8PSBocGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dl dChocGRhdGEpKTsKLQkJaWYgKGxlbiA+PSBucGFnZXMpIHsKLQkJCS8qCi0JCQkgKiBXZSB1c2Ug Zmlyc3QtZml0IHdpdGhpbiB0aGUgcGFnZSBzbGFiczsgdGhpcyBnaXZlcwotCQkJICogYm91bmRl ZCB3b3JzdC1jYXNlIGZyYWdtZW50YXRpb24gd2l0aGluIGEgc2xhYi4gIEl0J3MKLQkJCSAqIG5v dCBuZWNlc3NhcmlseSByaWdodDsgd2UgY291bGQgZXhwZXJpbWVudCB3aXRoCi0JCQkgKiB2YXJp b3VzIG90aGVyIG9wdGlvbnMuCi0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChsZW4gPiBs YXJnZXN0X3VuY2hvc2VuX3JhbmdlKSB7Ci0JCQlsYXJnZXN0X3VuY2hvc2VuX3JhbmdlID0gbGVu OwotCQl9Ci0JCXN0YXJ0ID0gYmVnaW4gKyBsZW47Ci0JfQotCS8qIFdlIGZvdW5kIGEgcmFuZ2U7 IHJlbWVtYmVyIGl0LiAqLwotCXJlc3VsdCA9IGJlZ2luOwotCWZiX3NldF9yYW5nZShocGRhdGEt PmFjdGl2ZV9wYWdlcywgSFVHRVBBR0VfUEFHRVMsIGJlZ2luLCBucGFnZXMpOwotCWhwZGF0YS0+ aF9uYWN0aXZlICs9IG5wYWdlczsKLQotCS8qCi0JICogV2UgbWlnaHQgYmUgYWJvdXQgdG8gZGly dHkgc29tZSBtZW1vcnkgZm9yIHRoZSBmaXJzdCB0aW1lOyB1cGRhdGUgb3VyCi0JICogY291bnQg aWYgc28uCi0JICovCi0Jc2l6ZV90IG5ld19kaXJ0eSA9IGZiX3Vjb3VudChocGRhdGEtPnRvdWNo ZWRfcGFnZXMsICBIVUdFUEFHRV9QQUdFUywKLQkgICAgcmVzdWx0LCBucGFnZXMpOwotCWZiX3Nl dF9yYW5nZShocGRhdGEtPnRvdWNoZWRfcGFnZXMsIEhVR0VQQUdFX1BBR0VTLCByZXN1bHQsIG5w YWdlcyk7Ci0JaHBkYXRhLT5oX250b3VjaGVkICs9IG5ld19kaXJ0eTsKLQotCS8qCi0JICogSWYg d2UgYWxsb2NhdGVkIG91dCBvZiBhIHJhbmdlIHRoYXQgd2FzIHRoZSBsb25nZXN0IGluIHRoZSBo cGRhdGEsIGl0Ci0JICogbWlnaHQgYmUgdGhlIG9ubHkgb25lIG9mIHRoYXQgc2l6ZSBhbmQgd2Un bGwgaGF2ZSB0byBhZGp1c3QgdGhlCi0JICogbWV0YWRhdGEuCi0JICovCi0JaWYgKGxlbiA9PSBo cGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dldChocGRhdGEpKSB7Ci0JCXN0YXJ0ID0gYmVnaW4g KyBucGFnZXM7Ci0JCXdoaWxlIChzdGFydCA8IEhVR0VQQUdFX1BBR0VTKSB7Ci0JCQlib29sIGZv dW5kID0gZmJfdXJhbmdlX2l0ZXIoaHBkYXRhLT5hY3RpdmVfcGFnZXMsCi0JCQkgICAgSFVHRVBB R0VfUEFHRVMsIHN0YXJ0LCAmYmVnaW4sICZsZW4pOwotCQkJaWYgKCFmb3VuZCkgewotCQkJCWJy ZWFrOwotCQkJfQotCQkJYXNzZXJ0KGxlbiA8PSBocGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dl dChocGRhdGEpKTsKLQkJCWlmIChsZW4gPT0gaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9nZXQo aHBkYXRhKSkgewotCQkJCWxhcmdlc3RfdW5jaG9zZW5fcmFuZ2UgPSBsZW47Ci0JCQkJYnJlYWs7 Ci0JCQl9Ci0JCQlpZiAobGVuID4gbGFyZ2VzdF91bmNob3Nlbl9yYW5nZSkgewotCQkJCWxhcmdl c3RfdW5jaG9zZW5fcmFuZ2UgPSBsZW47Ci0JCQl9Ci0JCQlzdGFydCA9IGJlZ2luICsgbGVuOwot CQl9Ci0JCWhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2Vfc2V0KGhwZGF0YSwgbGFyZ2VzdF91bmNo b3Nlbl9yYW5nZSk7Ci0JfQotCi0JaHBkYXRhX2Fzc2VydF9jb25zaXN0ZW50KGhwZGF0YSk7Ci0J cmV0dXJuICh2b2lkICopKAotCSAgICAodWludHB0cl90KWhwZGF0YV9hZGRyX2dldChocGRhdGEp ICsgKHJlc3VsdCA8PCBMR19QQUdFKSk7Ci19Ci0KLXZvaWQKLWhwZGF0YV91bnJlc2VydmUoaHBk YXRhX3QgKmhwZGF0YSwgdm9pZCAqYWRkciwgc2l6ZV90IHN6KSB7Ci0JaHBkYXRhX2Fzc2VydF9j b25zaXN0ZW50KGhwZGF0YSk7Ci0JLyogU2VlIHRoZSBjb21tZW50IGluIHJlc2VydmUuICovCi0J YXNzZXJ0KCFocGRhdGEtPmhfaW5fcHNzZXQgfHwgaHBkYXRhLT5oX3VwZGF0aW5nKTsKLQlhc3Nl cnQoKCh1aW50cHRyX3QpYWRkciAmIFBBR0VfTUFTSykgPT0gMCk7Ci0JYXNzZXJ0KChzeiAmIFBB R0VfTUFTSykgPT0gMCk7Ci0Jc2l6ZV90IGJlZ2luID0gKCh1aW50cHRyX3QpYWRkciAtICh1aW50 cHRyX3QpaHBkYXRhX2FkZHJfZ2V0KGhwZGF0YSkpCi0JICAgID4+IExHX1BBR0U7Ci0JYXNzZXJ0 KGJlZ2luIDwgSFVHRVBBR0VfUEFHRVMpOwotCXNpemVfdCBucGFnZXMgPSBzeiA+PiBMR19QQUdF OwotCXNpemVfdCBvbGRfbG9uZ2VzdF9yYW5nZSA9IGhwZGF0YV9sb25nZXN0X2ZyZWVfcmFuZ2Vf Z2V0KGhwZGF0YSk7Ci0KLQlmYl91bnNldF9yYW5nZShocGRhdGEtPmFjdGl2ZV9wYWdlcywgSFVH RVBBR0VfUEFHRVMsIGJlZ2luLCBucGFnZXMpOwotCS8qIFdlIG1pZ2h0IGhhdmUganVzdCBjcmVh dGVkIGEgbmV3LCBsYXJnZXIgcmFuZ2UuICovCi0Jc2l6ZV90IG5ld19iZWdpbiA9IChmYl9mbHMo aHBkYXRhLT5hY3RpdmVfcGFnZXMsIEhVR0VQQUdFX1BBR0VTLAotCSAgICBiZWdpbikgKyAxKTsK LQlzaXplX3QgbmV3X2VuZCA9IGZiX2ZmcyhocGRhdGEtPmFjdGl2ZV9wYWdlcywgSFVHRVBBR0Vf UEFHRVMsCi0JICAgIGJlZ2luICsgbnBhZ2VzIC0gMSk7Ci0Jc2l6ZV90IG5ld19yYW5nZV9sZW4g PSBuZXdfZW5kIC0gbmV3X2JlZ2luOwotCi0JaWYgKG5ld19yYW5nZV9sZW4gPiBvbGRfbG9uZ2Vz dF9yYW5nZSkgewotCQlocGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX3NldChocGRhdGEsIG5ld19y YW5nZV9sZW4pOwotCX0KLQotCWhwZGF0YS0+aF9uYWN0aXZlIC09IG5wYWdlczsKLQotCWhwZGF0 YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOwotfQotCi1zaXplX3QKLWhwZGF0YV9wdXJnZV9i ZWdpbihocGRhdGFfdCAqaHBkYXRhLCBocGRhdGFfcHVyZ2Vfc3RhdGVfdCAqcHVyZ2Vfc3RhdGUp IHsKLQlocGRhdGFfYXNzZXJ0X2NvbnNpc3RlbnQoaHBkYXRhKTsKLQkvKgotCSAqIFNlZSB0aGUg Y29tbWVudCBiZWxvdzsgd2UgbWlnaHQgcHVyZ2UgYW55IGluYWN0aXZlIGV4dGVudCwgc28gaXQn cwotCSAqIHVuc2FmZSBmb3IgYW55IG90aGVyIHRocmVhZCB0byB0dXJuIGFueSBpbmFjdGl2ZSBl eHRlbnQgYWN0aXZlIHdoaWxlCi0JICogd2UncmUgb3BlcmF0aW5nIG9uIGl0LgotCSAqLwotCWFz c2VydCghaHBkYXRhX2FsbG9jX2FsbG93ZWRfZ2V0KGhwZGF0YSkpOwotCi0JcHVyZ2Vfc3RhdGUt Pm5wdXJnZWQgPSAwOwotCXB1cmdlX3N0YXRlLT5uZXh0X3B1cmdlX3NlYXJjaF9iZWdpbiA9IDA7 Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgdG9fcHVyZ2UuCi0JICoKLQkgKiBJdCdzIHBvc3NpYmxl IHRvIGVuZCB1cCBpbiBzaXR1YXRpb25zIHdoZXJlIHR3byBkaXJ0eSBleHRlbnRzIGFyZQotCSAq IHNlcGFyYXRlZCBieSBhIHJldGFpbmVkIGV4dGVudDoKLQkgKiAtIDEgcGFnZSBhbGxvY2F0ZWQu Ci0JICogLSAxIHBhZ2UgYWxsb2NhdGVkLgotCSAqIC0gMSBwYWdlcyBhbGxvY2F0ZWQuCi0JICoK LQkgKiBJZiB0aGUgbWlkZGxlIHBhZ2UgaXMgZnJlZWQgYW5kIHB1cmdlZCwgYW5kIHRoZW4gdGhl IGZpcnN0IGFuZCB0aGlyZAotCSAqIHBhZ2VzIGFyZSBmcmVlZCwgYW5kIHRoZW4gYW5vdGhlciBw dXJnZSBwYXNzIGhhcHBlbnMsIHRoZSBocGRhdGEKLQkgKiBsb29rcyBsaWtlIHRoaXM6Ci0JICog LSAxIHBhZ2UgZGlydHkuCi0JICogLSAxIHBhZ2UgcmV0YWluZWQuCi0JICogLSAxIHBhZ2UgZGly dHkuCi0JICoKLQkgKiBCdXQgaXQncyBzYWZlIHRvIGRvIGEgc2luZ2xlIDMtcGFnZSBwdXJnZS4K LQkgKgotCSAqIFdlIGRvIHRoaXMgYnkgZmlyc3QgY29tcHV0aW5nIHRoZSBkaXJ0eSBwYWdlcywg YW5kIHRoZW4gZmlsbGluZyBpbgotCSAqIGFueSBnYXBzIGJ5IGV4dGVuZGluZyBlYWNoIHJhbmdl IGluIHRoZSBkaXJ0eSBiaXRtYXAgdG8gZXh0ZW5kIHVudGlsCi0JICogdGhlIG5leHQgYWN0aXZl IHBhZ2UuICBUaGlzIHB1cmdlcyBtb3JlIHBhZ2VzLCBidXQgdGhlIGV4cGVuc2l2ZSBwYXJ0Ci0J ICogb2YgcHVyZ2luZyBpcyB0aGUgVExCIHNob290ZG93bnMsIHJhdGhlciB0aGFuIHRoZSBrZXJu ZWwgc3RhdGUKLQkgKiB0cmFja2luZzsgZG9pbmcgYSBsaXR0bGUgYml0IG1vcmUgb2YgdGhlIGxh dHRlciBpcyBmaW5lIGlmIGl0IHNhdmVzCi0JICogdXMgZnJvbSBkb2luZyBzb21lIG9mIHRoZSBm b3JtZXIuCi0JICovCi0KLQkvKgotCSAqIFRoZSBkaXJ0eSBwYWdlcyBhcmUgdGhvc2UgdGhhdCBh cmUgdG91Y2hlZCBidXQgbm90IGFjdGl2ZS4gIE5vdGUgdGhhdAotCSAqIGluIGEgbm9ybWFsLWlz aCBjYXNlLCBIVUdFUEFHRV9QQUdFUyBpcyBzb21ldGhpbmcgbGlrZSA1MTIgYW5kIHRoZQotCSAq IGZiX2dyb3VwX3QgaXMgNjQgYml0cywgc28gdGhpcyBpcyA2NCBieXRlcywgc3ByZWFkIGFjcm9z cyA4Ci0JICogZmJfZ3JvdXBfdHMuCi0JICovCi0JZmJfZ3JvdXBfdCBkaXJ0eV9wYWdlc1tGQl9O R1JPVVBTKEhVR0VQQUdFX1BBR0VTKV07Ci0JZmJfaW5pdChkaXJ0eV9wYWdlcywgSFVHRVBBR0Vf UEFHRVMpOwotCWZiX2JpdF9ub3QoZGlydHlfcGFnZXMsIGhwZGF0YS0+YWN0aXZlX3BhZ2VzLCBI VUdFUEFHRV9QQUdFUyk7Ci0JZmJfYml0X2FuZChkaXJ0eV9wYWdlcywgZGlydHlfcGFnZXMsIGhw ZGF0YS0+dG91Y2hlZF9wYWdlcywKLQkgICAgSFVHRVBBR0VfUEFHRVMpOwotCi0JZmJfaW5pdChw dXJnZV9zdGF0ZS0+dG9fcHVyZ2UsIEhVR0VQQUdFX1BBR0VTKTsKLQlzaXplX3QgbmV4dF9iaXQg PSAwOwotCXdoaWxlIChuZXh0X2JpdCA8IEhVR0VQQUdFX1BBR0VTKSB7Ci0JCXNpemVfdCBuZXh0 X2RpcnR5ID0gZmJfZmZzKGRpcnR5X3BhZ2VzLCBIVUdFUEFHRV9QQUdFUywKLQkJICAgIG5leHRf Yml0KTsKLQkJLyogUmVjYWxsIHRoYXQgZmJfZmZzIHJldHVybnMgbmJpdHMgaWYgbm8gc2V0IGJp dCBpcyBmb3VuZC4gKi8KLQkJaWYgKG5leHRfZGlydHkgPT0gSFVHRVBBR0VfUEFHRVMpIHsKLQkJ CWJyZWFrOwotCQl9Ci0JCXNpemVfdCBuZXh0X2FjdGl2ZSA9IGZiX2ZmcyhocGRhdGEtPmFjdGl2 ZV9wYWdlcywKLQkJICAgIEhVR0VQQUdFX1BBR0VTLCBuZXh0X2RpcnR5KTsKLQkJLyoKLQkJICog RG9uJ3QgcHVyZ2UgcGFzdCB0aGUgZW5kIG9mIHRoZSBkaXJ0eSBleHRlbnQsIGludG8gcmV0YWlu ZWQKLQkJICogcGFnZXMuICBUaGlzIGhlbHBzIHRoZSBrZXJuZWwgYSB0aW55IGJpdCwgYnV0IGhv bmVzdGx5IGl0J3MKLQkJICogbW9zdGx5IGhlbHBmdWwgZm9yIHRlc3RpbmcgKHdoZXJlIHdlIHRl bmQgdG8gd3JpdGUgdGVzdCBjYXNlcwotCQkgKiB0aGF0IHRoaW5rIGluIHRlcm1zIG9mIHRoZSBk aXJ0eSByYW5nZXMpLgotCQkgKi8KLQkJc3NpemVfdCBsYXN0X2RpcnR5ID0gZmJfZmxzKGRpcnR5 X3BhZ2VzLCBIVUdFUEFHRV9QQUdFUywKLQkJICAgIG5leHRfYWN0aXZlIC0gMSk7Ci0JCWFzc2Vy dChsYXN0X2RpcnR5ID49IDApOwotCQlhc3NlcnQoKHNpemVfdClsYXN0X2RpcnR5ID49IG5leHRf ZGlydHkpOwotCQlhc3NlcnQoKHNpemVfdClsYXN0X2RpcnR5IC0gbmV4dF9kaXJ0eSArIDEgPD0g SFVHRVBBR0VfUEFHRVMpOwotCi0JCWZiX3NldF9yYW5nZShwdXJnZV9zdGF0ZS0+dG9fcHVyZ2Us IEhVR0VQQUdFX1BBR0VTLCBuZXh0X2RpcnR5LAotCQkgICAgbGFzdF9kaXJ0eSAtIG5leHRfZGly dHkgKyAxKTsKLQkJbmV4dF9iaXQgPSBuZXh0X2FjdGl2ZSArIDE7Ci0JfQotCi0JLyogV2Ugc2hv dWxkIHB1cmdlLCBhdCBsZWFzdCwgZXZlcnl0aGluZyBkaXJ0eS4gKi8KLQlzaXplX3QgbmRpcnR5 ID0gaHBkYXRhLT5oX250b3VjaGVkIC0gaHBkYXRhLT5oX25hY3RpdmU7Ci0JcHVyZ2Vfc3RhdGUt Pm5kaXJ0eV90b19wdXJnZSA9IG5kaXJ0eTsKLQlhc3NlcnQobmRpcnR5IDw9IGZiX3Njb3VudCgK LQkgICAgcHVyZ2Vfc3RhdGUtPnRvX3B1cmdlLCBIVUdFUEFHRV9QQUdFUywgMCwgSFVHRVBBR0Vf UEFHRVMpKTsKLQlhc3NlcnQobmRpcnR5ID09IGZiX3Njb3VudChkaXJ0eV9wYWdlcywgSFVHRVBB R0VfUEFHRVMsIDAsCi0JICAgIEhVR0VQQUdFX1BBR0VTKSk7Ci0KLQlocGRhdGFfYXNzZXJ0X2Nv bnNpc3RlbnQoaHBkYXRhKTsKLQotCXJldHVybiBuZGlydHk7Ci19Ci0KLWJvb2wKLWhwZGF0YV9w dXJnZV9uZXh0KGhwZGF0YV90ICpocGRhdGEsIGhwZGF0YV9wdXJnZV9zdGF0ZV90ICpwdXJnZV9z dGF0ZSwKLSAgICB2b2lkICoqcl9wdXJnZV9hZGRyLCBzaXplX3QgKnJfcHVyZ2Vfc2l6ZSkgewot CS8qCi0JICogTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUgYSBjb25zaXN0ZW5jeSBjaGVjayBoZXJl OyB3ZSdyZSBhY2Nlc3NpbmcKLQkgKiBocGRhdGEgd2l0aG91dCBzeW5jaHJvbml6YXRpb24sIGFu ZCB0aGVyZWZvcmUgaGF2ZSBubyByaWdodCB0byBleHBlY3QKLQkgKiBhIGNvbnNpc3RlbnQgc3Rh dGUuCi0JICovCi0JYXNzZXJ0KCFocGRhdGFfYWxsb2NfYWxsb3dlZF9nZXQoaHBkYXRhKSk7Ci0K LQlpZiAocHVyZ2Vfc3RhdGUtPm5leHRfcHVyZ2Vfc2VhcmNoX2JlZ2luID09IEhVR0VQQUdFX1BB R0VTKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0Jc2l6ZV90IHB1cmdlX2JlZ2luOwotCXNpemVf dCBwdXJnZV9sZW47Ci0JYm9vbCBmb3VuZF9yYW5nZSA9IGZiX3NyYW5nZV9pdGVyKHB1cmdlX3N0 YXRlLT50b19wdXJnZSwgSFVHRVBBR0VfUEFHRVMsCi0JICAgIHB1cmdlX3N0YXRlLT5uZXh0X3B1 cmdlX3NlYXJjaF9iZWdpbiwgJnB1cmdlX2JlZ2luLCAmcHVyZ2VfbGVuKTsKLQlpZiAoIWZvdW5k X3JhbmdlKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkqcl9wdXJnZV9hZGRyID0gKHZvaWQg KikoCi0JICAgICh1aW50cHRyX3QpaHBkYXRhX2FkZHJfZ2V0KGhwZGF0YSkgKyBwdXJnZV9iZWdp biAqIFBBR0UpOwotCSpyX3B1cmdlX3NpemUgPSBwdXJnZV9sZW4gKiBQQUdFOwotCi0JcHVyZ2Vf c3RhdGUtPm5leHRfcHVyZ2Vfc2VhcmNoX2JlZ2luID0gcHVyZ2VfYmVnaW4gKyBwdXJnZV9sZW47 Ci0JcHVyZ2Vfc3RhdGUtPm5wdXJnZWQgKz0gcHVyZ2VfbGVuOwotCWFzc2VydChwdXJnZV9zdGF0 ZS0+bnB1cmdlZCA8PSBIVUdFUEFHRV9QQUdFUyk7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotdm9p ZAotaHBkYXRhX3B1cmdlX2VuZChocGRhdGFfdCAqaHBkYXRhLCBocGRhdGFfcHVyZ2Vfc3RhdGVf dCAqcHVyZ2Vfc3RhdGUpIHsKLQlhc3NlcnQoIWhwZGF0YV9hbGxvY19hbGxvd2VkX2dldChocGRh dGEpKTsKLQlocGRhdGFfYXNzZXJ0X2NvbnNpc3RlbnQoaHBkYXRhKTsKLQkvKiBTZWUgdGhlIGNv bW1lbnQgaW4gcmVzZXJ2ZS4gKi8KLQlhc3NlcnQoIWhwZGF0YS0+aF9pbl9wc3NldCB8fCBocGRh dGEtPmhfdXBkYXRpbmcpOwotCi0JYXNzZXJ0KHB1cmdlX3N0YXRlLT5ucHVyZ2VkID09IGZiX3Nj b3VudChwdXJnZV9zdGF0ZS0+dG9fcHVyZ2UsCi0JICAgIEhVR0VQQUdFX1BBR0VTLCAwLCBIVUdF UEFHRV9QQUdFUykpOwotCWFzc2VydChwdXJnZV9zdGF0ZS0+bnB1cmdlZCA+PSBwdXJnZV9zdGF0 ZS0+bmRpcnR5X3RvX3B1cmdlKTsKLQotCWZiX2JpdF9ub3QocHVyZ2Vfc3RhdGUtPnRvX3B1cmdl LCBwdXJnZV9zdGF0ZS0+dG9fcHVyZ2UsCi0JICAgIEhVR0VQQUdFX1BBR0VTKTsKLQlmYl9iaXRf YW5kKGhwZGF0YS0+dG91Y2hlZF9wYWdlcywgaHBkYXRhLT50b3VjaGVkX3BhZ2VzLAotCSAgICBw dXJnZV9zdGF0ZS0+dG9fcHVyZ2UsIEhVR0VQQUdFX1BBR0VTKTsKLQlhc3NlcnQoaHBkYXRhLT5o X250b3VjaGVkID49IHB1cmdlX3N0YXRlLT5uZGlydHlfdG9fcHVyZ2UpOwotCWhwZGF0YS0+aF9u dG91Y2hlZCAtPSBwdXJnZV9zdGF0ZS0+bmRpcnR5X3RvX3B1cmdlOwotCi0JaHBkYXRhX2Fzc2Vy dF9jb25zaXN0ZW50KGhwZGF0YSk7Ci19Ci0KLXZvaWQKLWhwZGF0YV9odWdpZnkoaHBkYXRhX3Qg KmhwZGF0YSkgewotCWhwZGF0YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOwotCWhwZGF0YS0+ aF9odWdlID0gdHJ1ZTsKLQlmYl9zZXRfcmFuZ2UoaHBkYXRhLT50b3VjaGVkX3BhZ2VzLCBIVUdF UEFHRV9QQUdFUywgMCwgSFVHRVBBR0VfUEFHRVMpOwotCWhwZGF0YS0+aF9udG91Y2hlZCA9IEhV R0VQQUdFX1BBR0VTOwotCWhwZGF0YV9hc3NlcnRfY29uc2lzdGVudChocGRhdGEpOwotfQotCi12 b2lkCi1ocGRhdGFfZGVodWdpZnkoaHBkYXRhX3QgKmhwZGF0YSkgewotCWhwZGF0YV9hc3NlcnRf Y29uc2lzdGVudChocGRhdGEpOwotCWhwZGF0YS0+aF9odWdlID0gZmFsc2U7Ci0JaHBkYXRhX2Fz c2VydF9jb25zaXN0ZW50KGhwZGF0YSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2luc3BlY3QuYyBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9pbnNwZWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDkxMWI1ZDUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL2luc3BlY3QuYworKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAg QEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0K LXZvaWQKLWluc3BlY3RfZXh0ZW50X3V0aWxfc3RhdHNfZ2V0KHRzZG5fdCAqdHNkbiwgY29uc3Qg dm9pZCAqcHRyLCBzaXplX3QgKm5mcmVlLAotICAgIHNpemVfdCAqbnJlZ3MsIHNpemVfdCAqc2l6 ZSkgewotCWFzc2VydChwdHIgIT0gTlVMTCAmJiBuZnJlZSAhPSBOVUxMICYmIG5yZWdzICE9IE5V TEwgJiYgc2l6ZSAhPSBOVUxMKTsKLQotCWNvbnN0IGVkYXRhX3QgKmVkYXRhID0gZW1hcF9lZGF0 YV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpOwotCWlmICh1bmxpa2VseShl ZGF0YSA9PSBOVUxMKSkgewotCQkqbmZyZWUgPSAqbnJlZ3MgPSAqc2l6ZSA9IDA7Ci0JCXJldHVy bjsKLQl9Ci0KLQkqc2l6ZSA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKTsKLQlpZiAoIWVkYXRhX3Ns YWJfZ2V0KGVkYXRhKSkgewotCQkqbmZyZWUgPSAwOwotCQkqbnJlZ3MgPSAxOwotCX0gZWxzZSB7 Ci0JCSpuZnJlZSA9IGVkYXRhX25mcmVlX2dldChlZGF0YSk7Ci0JCSpucmVncyA9IGJpbl9pbmZv c1tlZGF0YV9zemluZF9nZXQoZWRhdGEpXS5ucmVnczsKLQkJYXNzZXJ0KCpuZnJlZSA8PSAqbnJl Z3MpOwotCQlhc3NlcnQoKm5mcmVlICogZWRhdGFfdXNpemVfZ2V0KGVkYXRhKSA8PSAqc2l6ZSk7 Ci0JfQotfQotCi12b2lkCi1pbnNwZWN0X2V4dGVudF91dGlsX3N0YXRzX3ZlcmJvc2VfZ2V0KHRz ZG5fdCAqdHNkbiwgY29uc3Qgdm9pZCAqcHRyLAotICAgIHNpemVfdCAqbmZyZWUsIHNpemVfdCAq bnJlZ3MsIHNpemVfdCAqc2l6ZSwgc2l6ZV90ICpiaW5fbmZyZWUsCi0gICAgc2l6ZV90ICpiaW5f bnJlZ3MsIHZvaWQgKipzbGFiY3VyX2FkZHIpIHsKLQlhc3NlcnQocHRyICE9IE5VTEwgJiYgbmZy ZWUgIT0gTlVMTCAmJiBucmVncyAhPSBOVUxMICYmIHNpemUgIT0gTlVMTAotCSAgICAmJiBiaW5f bmZyZWUgIT0gTlVMTCAmJiBiaW5fbnJlZ3MgIT0gTlVMTCAmJiBzbGFiY3VyX2FkZHIgIT0gTlVM TCk7Ci0KLQljb25zdCBlZGF0YV90ICplZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZh cmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKLQlpZiAodW5saWtlbHkoZWRhdGEgPT0gTlVMTCkpIHsK LQkJKm5mcmVlID0gKm5yZWdzID0gKnNpemUgPSAqYmluX25mcmVlID0gKmJpbl9ucmVncyA9IDA7 Ci0JCSpzbGFiY3VyX2FkZHIgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQotCi0JKnNpemUgPSBlZGF0 YV9zaXplX2dldChlZGF0YSk7Ci0JaWYgKCFlZGF0YV9zbGFiX2dldChlZGF0YSkpIHsKLQkJKm5m cmVlID0gKmJpbl9uZnJlZSA9ICpiaW5fbnJlZ3MgPSAwOwotCQkqbnJlZ3MgPSAxOwotCQkqc2xh YmN1cl9hZGRyID0gTlVMTDsKLQkJcmV0dXJuOwotCX0KLQotCSpuZnJlZSA9IGVkYXRhX25mcmVl X2dldChlZGF0YSk7Ci0JY29uc3Qgc3ppbmRfdCBzemluZCA9IGVkYXRhX3N6aW5kX2dldChlZGF0 YSk7Ci0JKm5yZWdzID0gYmluX2luZm9zW3N6aW5kXS5ucmVnczsKLQlhc3NlcnQoKm5mcmVlIDw9 ICpucmVncyk7Ci0JYXNzZXJ0KCpuZnJlZSAqIGVkYXRhX3VzaXplX2dldChlZGF0YSkgPD0gKnNp emUpOwotCi0JYXJlbmFfdCAqYXJlbmEgPSAoYXJlbmFfdCAqKWF0b21pY19sb2FkX3AoCi0JICAg ICZhcmVuYXNbZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSldLCBBVE9NSUNfUkVMQVhFRCk7Ci0J YXNzZXJ0KGFyZW5hICE9IE5VTEwpOwotCWNvbnN0IHVuc2lnbmVkIGJpbnNoYXJkID0gZWRhdGFf Ymluc2hhcmRfZ2V0KGVkYXRhKTsKLQliaW5fdCAqYmluID0gYXJlbmFfZ2V0X2JpbihhcmVuYSwg c3ppbmQsIGJpbnNoYXJkKTsKLQotCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZiaW4tPmxvY2sp OwotCWlmIChjb25maWdfc3RhdHMpIHsKLQkJKmJpbl9ucmVncyA9ICpucmVncyAqIGJpbi0+c3Rh dHMuY3Vyc2xhYnM7Ci0JCWFzc2VydCgqYmluX25yZWdzID49IGJpbi0+c3RhdHMuY3VycmVncyk7 Ci0JCSpiaW5fbmZyZWUgPSAqYmluX25yZWdzIC0gYmluLT5zdGF0cy5jdXJyZWdzOwotCX0gZWxz ZSB7Ci0JCSpiaW5fbmZyZWUgPSAqYmluX25yZWdzID0gMDsKLQl9Ci0JZWRhdGFfdCAqc2xhYjsK LQlpZiAoYmluLT5zbGFiY3VyICE9IE5VTEwpIHsKLQkJc2xhYiA9IGJpbi0+c2xhYmN1cjsKLQl9 IGVsc2UgewotCQlzbGFiID0gZWRhdGFfaGVhcF9maXJzdCgmYmluLT5zbGFic19ub25mdWxsKTsK LQl9Ci0JKnNsYWJjdXJfYWRkciA9IHNsYWIgIT0gTlVMTCA/IGVkYXRhX2FkZHJfZ2V0KHNsYWIp IDogTlVMTDsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZiaW4tPmxvY2spOwotfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9qZW1h bGxvYy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2plbWFs bG9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NTVkZTQuLjAwMDAwMDAKLS0t IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2plbWFsbG9jLmMK KysrIC9kZXYvbnVsbApAQCAtMSw0NDc2ICswLDAgQEAKLSNkZWZpbmUgSkVNQUxMT0NfQ18KLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9hdG9taWMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9idWZfd3JpdGVyLmgi Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvY3RsLmgiCi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvZW1hcC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2V4dGVudF9kc3Mu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRfbW1hcC5oIgotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2Z4cC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nh bi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2hvb2suaCIKLSNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF90eXBlcy5oIgotI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL2xvZy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21hbGxvY19p by5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvbnN0aW1lLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcnRy ZWUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYWZldHlfY2hlY2suaCIKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L3NwaW4uaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zei5oIgotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3RpY2tlci5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Ro cmVhZF9ldmVudC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3V0aWwuaCIKLQotLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLS8qIERhdGEuICovCi0KLS8qIFJ1bnRpbWUgY29uZmlndXJh dGlvbiBvcHRpb25zLiAqLwotY29uc3QgY2hhcgkqamVfbWFsbG9jX2NvbmYKLSNpZm5kZWYgX1dJ TjMyCi0gICAgSkVNQUxMT0NfQVRUUih3ZWFrKQotI2VuZGlmCi0gICAgOwotLyoKLSAqIFRoZSB1 c3VhbCBydWxlIGlzIHRoYXQgdGhlIGNsb3NlciB0byBydW50aW1lIHlvdSBhcmUsIHRoZSBoaWdo ZXIgcHJpb3JpdHkKLSAqIHlvdXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBhcmUgKHNvIHRoZSBq ZW1hbGxvYyBjb25maWcgb3B0aW9ucyBnZXQgbG93ZXIKLSAqIHByaW9yaXR5IHRoYW4gdGhlIHBl ci1iaW5hcnkgc2V0dGluZywgd2hpY2ggZ2V0cyBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSAvZXRj Ci0gKiBzZXR0aW5nLCB3aGljaCBnZXRzIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIGVudmlyb25t ZW50IHNldHRpbmdzKS4KLSAqCi0gKiBCdXQgaXQncyBhIGZhaXJseSBjb21tb24gdXNlIGNhc2Ug aW4gc29tZSB0ZXN0aW5nIGVudmlyb25tZW50cyBmb3IgYSB1c2VyIHRvCi0gKiBiZSBhYmxlIHRv IGNvbnRyb2wgdGhlIGJpbmFyeSwgYnV0IG5vdGhpbmcgZWxzZSAoZS5nLiBhIHBlcmZvcm1hbmN5 IGNhbmFyeQotICogdXNlcyB0aGUgcHJvZHVjdGlvbiBPUyBhbmQgZW52aXJvbm1lbnQgdmFyaWFi bGVzLCBidXQgY2FuIHJ1biBhbnkgYmluYXJ5IGluCi0gKiB0aG9zZSBjaXJjdW1zdGFuY2VzKS4g IEZvciB0aGVzZSB1c2UgY2FzZXMsIGl0J3MgaGFuZHkgdG8gaGF2ZSBhbiBpbi1iaW5hcnkKLSAq IG1lY2hhbmlzbSBmb3Igb3ZlcnJpZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXR0aW5ncywg d2l0aCB0aGUgaWRlYSB0aGF0IGlmCi0gKiB0aGUgcmVzdWx0cyBhcmUgcG9zaXRpdmUgdGhleSBn ZXQgcHJvbW90ZWQgdG8gdGhlIG9mZmljaWFsIHNldHRpbmdzLCBhbmQKLSAqIG1vdmVkIGZyb20g dGhlIGJpbmFyeSB0byB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0gKgotICogV2UgZG9uJ3Qg YWN0dWFsbHkgd2FudCB0aGlzIHRvIGJlIHdpZGVzcHJlYWQsIHNvIHdlJ2xsIGdpdmUgaXQgYSBz aWxseSBuYW1lCi0gKiBhbmQgbm90IG1lbnRpb24gaXQgaW4gaGVhZGVycyBvciBkb2N1bWVudGF0 aW9uLgotICovCi1jb25zdCBjaGFyCSpqZV9tYWxsb2NfY29uZl8yX2NvbmZfaGFyZGVyCi0jaWZu ZGVmIF9XSU4zMgotICAgIEpFTUFMTE9DX0FUVFIod2VhaykKLSNlbmRpZgotICAgIDsKLQotYm9v bAlvcHRfYWJvcnQgPQotI2lmZGVmIEpFTUFMTE9DX0RFQlVHCi0gICAgdHJ1ZQotI2Vsc2UKLSAg ICBmYWxzZQotI2VuZGlmCi0gICAgOwotYm9vbAlvcHRfYWJvcnRfY29uZiA9Ci0jaWZkZWYgSkVN QUxMT0NfREVCVUcKLSAgICB0cnVlCi0jZWxzZQotICAgIGZhbHNlCi0jZW5kaWYKLSAgICA7Ci0v KiBJbnRlbnRpb25hbGx5IGRlZmF1bHQgb2ZmLCBldmVuIHdpdGggZGVidWcgYnVpbGRzLiAqLwot Ym9vbAlvcHRfY29uZmlybV9jb25mID0gZmFsc2U7Ci1jb25zdCBjaGFyCSpvcHRfanVuayA9Ci0j aWYgKGRlZmluZWQoSkVNQUxMT0NfREVCVUcpICYmIGRlZmluZWQoSkVNQUxMT0NfRklMTCkpCi0g ICAgInRydWUiCi0jZWxzZQotICAgICJmYWxzZSIKLSNlbmRpZgotICAgIDsKLWJvb2wJb3B0X2p1 bmtfYWxsb2MgPQotI2lmIChkZWZpbmVkKEpFTUFMTE9DX0RFQlVHKSAmJiBkZWZpbmVkKEpFTUFM TE9DX0ZJTEwpKQotICAgIHRydWUKLSNlbHNlCi0gICAgZmFsc2UKLSNlbmRpZgotICAgIDsKLWJv b2wJb3B0X2p1bmtfZnJlZSA9Ci0jaWYgKGRlZmluZWQoSkVNQUxMT0NfREVCVUcpICYmIGRlZmlu ZWQoSkVNQUxMT0NfRklMTCkpCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQotI2VuZGlmCi0g ICAgOwotYm9vbAlvcHRfdHJ1c3RfbWFkdmlzZSA9Ci0jaWZkZWYgSkVNQUxMT0NfUFVSR0VfTUFE VklTRV9ET05UTkVFRF9aRVJPUwotICAgIGZhbHNlCi0jZWxzZQotICAgIHRydWUKLSNlbmRpZgot ICAgIDsKLQotYm9vbCBvcHRfY2FjaGVfb2JsaXZpb3VzID0KLSNpZmRlZiBKRU1BTExPQ19DQUNI RV9PQkxJVklPVVMKLSAgICB0cnVlCi0jZWxzZQotICAgIGZhbHNlCi0jZW5kaWYKLSAgICA7Ci0K LXplcm9fcmVhbGxvY19hY3Rpb25fdCBvcHRfemVyb19yZWFsbG9jX2FjdGlvbiA9Ci0jaWZkZWYg SkVNQUxMT0NfWkVST19SRUFMTE9DX0RFRkFVTFRfRlJFRQotICAgIHplcm9fcmVhbGxvY19hY3Rp b25fZnJlZQotI2Vsc2UKLSAgICB6ZXJvX3JlYWxsb2NfYWN0aW9uX2FsbG9jCi0jZW5kaWYKLSAg ICA7Ci0KLWF0b21pY196dV90IHplcm9fcmVhbGxvY19jb3VudCA9IEFUT01JQ19JTklUKDApOwot Ci1jb25zdCBjaGFyICp6ZXJvX3JlYWxsb2NfbW9kZV9uYW1lc1tdID0gewotCSJhbGxvYyIsCi0J ImZyZWUiLAotCSJhYm9ydCIsCi19OwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkb2N1bWVudGVk IHZhbHVlcyBmb3IganVuayBmaWxsIGRlYnVnZ2luZyBmYWNpbGl0aWVzIC0tIHNlZSB0aGUKLSAq IG1hbiBwYWdlLgotICovCi1zdGF0aWMgY29uc3QgdWludDhfdCBqdW5rX2FsbG9jX2J5dGUgPSAw eGE1Owotc3RhdGljIGNvbnN0IHVpbnQ4X3QganVua19mcmVlX2J5dGUgPSAweDVhOwotCi1zdGF0 aWMgdm9pZCBkZWZhdWx0X2p1bmtfYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgdXNpemUpIHsKLQlt ZW1zZXQocHRyLCBqdW5rX2FsbG9jX2J5dGUsIHVzaXplKTsKLX0KLQotc3RhdGljIHZvaWQgZGVm YXVsdF9qdW5rX2ZyZWUodm9pZCAqcHRyLCBzaXplX3QgdXNpemUpIHsKLQltZW1zZXQocHRyLCBq dW5rX2ZyZWVfYnl0ZSwgdXNpemUpOwotfQotCi12b2lkICgqanVua19hbGxvY19jYWxsYmFjayko dm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgPSAmZGVmYXVsdF9qdW5rX2FsbG9jOwotdm9pZCAoKmp1 bmtfZnJlZV9jYWxsYmFjaykodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgPSAmZGVmYXVsdF9qdW5r X2ZyZWU7Ci0KLWJvb2wJb3B0X3V0cmFjZSA9IGZhbHNlOwotYm9vbAlvcHRfeG1hbGxvYyA9IGZh bHNlOwotYm9vbAlvcHRfZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3ID0gZmFsc2U7Ci1ib29s CW9wdF96ZXJvID0gZmFsc2U7Ci11bnNpZ25lZAlvcHRfbmFyZW5hcyA9IDA7Ci1meHBfdAkJb3B0 X25hcmVuYXNfcmF0aW8gPSBGWFBfSU5JVF9JTlQoNCk7Ci0KLXVuc2lnbmVkCW5jcHVzOwotCi0v KiBQcm90ZWN0cyBhcmVuYXMgaW5pdGlhbGl6YXRpb24uICovCi1tYWxsb2NfbXV0ZXhfdCBhcmVu YXNfbG9jazsKLQotLyogVGhlIGdsb2JhbCBocGEsIGFuZCB3aGV0aGVyIGl0J3Mgb24uICovCi1i b29sIG9wdF9ocGEgPSBmYWxzZTsKLWhwYV9zaGFyZF9vcHRzX3Qgb3B0X2hwYV9vcHRzID0gSFBB X1NIQVJEX09QVFNfREVGQVVMVDsKLXNlY19vcHRzX3Qgb3B0X2hwYV9zZWNfb3B0cyA9IFNFQ19P UFRTX0RFRkFVTFQ7Ci0KLS8qCi0gKiBBcmVuYXMgdGhhdCBhcmUgdXNlZCB0byBzZXJ2aWNlIGV4 dGVybmFsIHJlcXVlc3RzLiAgTm90IGFsbCBlbGVtZW50cyBvZiB0aGUKLSAqIGFyZW5hcyBhcnJh eSBhcmUgbmVjZXNzYXJpbHkgdXNlZDsgYXJlbmFzIGFyZSBjcmVhdGVkIGxhemlseSBhcyBuZWVk ZWQuCi0gKgotICogYXJlbmFzWzAuLm5hcmVuYXNfYXV0bykgYXJlIHVzZWQgZm9yIGF1dG9tYXRp YyBtdWx0aXBsZXhpbmcgb2YgdGhyZWFkcyBhbmQKLSAqIGFyZW5hcy4gIGFyZW5hc1tuYXJlbmFz X2F1dG8uLm5hcmVuYXNfdG90YWwpIGFyZSBvbmx5IHVzZWQgaWYgdGhlIGFwcGxpY2F0aW9uCi0g KiB0YWtlcyBzb21lIGFjdGlvbiB0byBjcmVhdGUgdGhlbSBhbmQgYWxsb2NhdGUgZnJvbSB0aGVt LgotICoKLSAqIFBvaW50cyB0byBhbiBhcmVuYV90LgotICovCi1KRU1BTExPQ19BTElHTkVEKENB Q0hFTElORSkKLWF0b21pY19wX3QJCWFyZW5hc1tNQUxMT0NYX0FSRU5BX0xJTUlUXTsKLXN0YXRp YyBhdG9taWNfdV90CW5hcmVuYXNfdG90YWw7IC8qIFVzZSBuYXJlbmFzX3RvdGFsXyooKS4gKi8K LS8qIEJlbG93IHRocmVlIGFyZSByZWFkLW9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uICovCi1z dGF0aWMgYXJlbmFfdAkJKmEwOyAvKiBhcmVuYXNbMF0uICovCi11bnNpZ25lZAkJbmFyZW5hc19h dXRvOwotdW5zaWduZWQJCW1hbnVhbF9hcmVuYV9iYXNlOwotCi1tYWxsb2NfaW5pdF90IG1hbGxv Y19pbml0X3N0YXRlID0gbWFsbG9jX2luaXRfdW5pbml0aWFsaXplZDsKLQotLyogRmFsc2Ugc2hv dWxkIGJlIHRoZSBjb21tb24gY2FzZS4gIFNldCB0byB0cnVlIHRvIHRyaWdnZXIgaW5pdGlhbGl6 YXRpb24uICovCi1ib29sCQkJbWFsbG9jX3Nsb3cgPSB0cnVlOwotCi0vKiBXaGVuIG1hbGxvY19z bG93IGlzIHRydWUsIHNldCB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGZvciBzYW5pdHkgY2hlY2su ICovCi1lbnVtIHsKLQlmbGFnX29wdF9qdW5rX2FsbG9jCT0gKDFVKSwKLQlmbGFnX29wdF9qdW5r X2ZyZWUJPSAoMVUgPDwgMSksCi0JZmxhZ19vcHRfemVybwkJPSAoMVUgPDwgMiksCi0JZmxhZ19v cHRfdXRyYWNlCQk9ICgxVSA8PCAzKSwKLQlmbGFnX29wdF94bWFsbG9jCT0gKDFVIDw8IDQpCi19 Owotc3RhdGljIHVpbnQ4X3QJbWFsbG9jX3Nsb3dfZmxhZ3M7Ci0KLSNpZmRlZiBKRU1BTExPQ19U SFJFQURFRF9JTklUCi0vKiBVc2VkIHRvIGxldCB0aGUgaW5pdGlhbGl6aW5nIHRocmVhZCByZWN1 cnNpdmVseSBhbGxvY2F0ZS4gKi8KLSMgIGRlZmluZSBOT19JTklUSUFMSVpFUgkoKHVuc2lnbmVk IGxvbmcpMCkKLSMgIGRlZmluZSBJTklUSUFMSVpFUgkJcHRocmVhZF9zZWxmKCkKLSMgIGRlZmlu ZSBJU19JTklUSUFMSVpFUgkobWFsbG9jX2luaXRpYWxpemVyID09IHB0aHJlYWRfc2VsZigpKQot c3RhdGljIHB0aHJlYWRfdAkJbWFsbG9jX2luaXRpYWxpemVyID0gTk9fSU5JVElBTElaRVI7Ci0j ZWxzZQotIyAgZGVmaW5lIE5PX0lOSVRJQUxJWkVSCWZhbHNlCi0jICBkZWZpbmUgSU5JVElBTEla RVIJCXRydWUKLSMgIGRlZmluZSBJU19JTklUSUFMSVpFUgltYWxsb2NfaW5pdGlhbGl6ZXIKLXN0 YXRpYyBib29sCQkJbWFsbG9jX2luaXRpYWxpemVyID0gTk9fSU5JVElBTElaRVI7Ci0jZW5kaWYK LQotLyogVXNlZCB0byBhdm9pZCBpbml0aWFsaXphdGlvbiByYWNlcy4gKi8KLSNpZmRlZiBfV0lO MzIKLSNpZiBfV0lOMzJfV0lOTlQgPj0gMHgwNjAwCi1zdGF0aWMgbWFsbG9jX211dGV4X3QJaW5p dF9sb2NrID0gU1JXTE9DS19JTklUOwotI2Vsc2UKLXN0YXRpYyBtYWxsb2NfbXV0ZXhfdAlpbml0 X2xvY2s7Ci1zdGF0aWMgYm9vbCBpbml0X2xvY2tfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotSkVN QUxMT0NfQVRUUihjb25zdHJ1Y3RvcikKLXN0YXRpYyB2b2lkIFdJTkFQSQotX2luaXRfaW5pdF9s b2NrKHZvaWQpIHsKLQkvKgotCSAqIElmIGFub3RoZXIgY29uc3RydWN0b3IgaW4gdGhlIHNhbWUg YmluYXJ5IGlzIHVzaW5nIG1hbGxjdGwgdG8gZS5nLgotCSAqIHNldCB1cCBleHRlbnQgaG9va3Ms IGl0IG1heSBlbmQgdXAgcnVubmluZyBiZWZvcmUgdGhpcyBvbmUsIGFuZAotCSAqIG1hbGxvY19p bml0X2hhcmQgd2lsbCBjcmFzaCB0cnlpbmcgdG8gbG9jayB0aGUgdW5pbml0aWFsaXplZCBsb2Nr LiBTbwotCSAqIHdlIGZvcmNlIGFuIGluaXRpYWxpemF0aW9uIG9mIHRoZSBsb2NrIGluIG1hbGxv Y19pbml0X2hhcmQgYXMgd2VsbC4KLQkgKiBXZSBkb24ndCB0cnkgdG8gY2FyZSBhYm91dCBhdG9t aWNpdHkgb2YgdGhlIGFjY2Vzc2VkIHRvIHRoZQotCSAqIGluaXRfbG9ja19pbml0aWFsaXplZCBi b29sZWFuLCBzaW5jZSBpdCByZWFsbHkgb25seSBtYXR0ZXJzIGVhcmx5IGluCi0JICogdGhlIHBy b2Nlc3MgY3JlYXRpb24sIGJlZm9yZSBhbnkgc2VwYXJhdGUgdGhyZWFkIG5vcm1hbGx5IHN0YXJ0 cwotCSAqIGRvaW5nIGFueXRoaW5nLgotCSAqLwotCWlmICghaW5pdF9sb2NrX2luaXRpYWxpemVk KSB7Ci0JCW1hbGxvY19tdXRleF9pbml0KCZpbml0X2xvY2ssICJpbml0IiwgV0lUTkVTU19SQU5L X0lOSVQsCi0JCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpOwotCX0KLQlpbml0X2xv Y2tfaW5pdGlhbGl6ZWQgPSB0cnVlOwotfQotCi0jaWZkZWYgX01TQ19WRVIKLSMgIHByYWdtYSBz ZWN0aW9uKCIuQ1JUJFhDVSIsIHJlYWQpCi1KRU1BTExPQ19TRUNUSU9OKCIuQ1JUJFhDVSIpIEpF TUFMTE9DX0FUVFIodXNlZCkKLXN0YXRpYyBjb25zdCB2b2lkIChXSU5BUEkgKmluaXRfaW5pdF9s b2NrKSh2b2lkKSA9IF9pbml0X2luaXRfbG9jazsKLSNlbmRpZgotI2VuZGlmCi0jZWxzZQotc3Rh dGljIG1hbGxvY19tdXRleF90CWluaXRfbG9jayA9IE1BTExPQ19NVVRFWF9JTklUSUFMSVpFUjsK LSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB7Ci0Jdm9pZAkqcDsJLyogSW5wdXQgcG9pbnRlciAo YXMgaW4gcmVhbGxvYyhwLCBzKSkuICovCi0Jc2l6ZV90CXM7CS8qIFJlcXVlc3Qgc2l6ZS4gKi8K LQl2b2lkCSpyOwkvKiBSZXN1bHQgcG9pbnRlci4gKi8KLX0gbWFsbG9jX3V0cmFjZV90OwotCi0j aWZkZWYgSkVNQUxMT0NfVVRSQUNFCi0jICBkZWZpbmUgVVRSQUNFKGEsIGIsIGMpIGRvIHsJCQkJ CQlcCi0JaWYgKHVubGlrZWx5KG9wdF91dHJhY2UpKSB7CQkJCQlcCi0JCWludCB1dHJhY2Vfc2Vy cm5vID0gZXJybm87CQkJCVwKLQkJbWFsbG9jX3V0cmFjZV90IHV0OwkJCQkJXAotCQl1dC5wID0g KGEpOwkJCQkJCVwKLQkJdXQucyA9IChiKTsJCQkJCQlcCi0JCXV0LnIgPSAoYyk7CQkJCQkJXAot CQlVVFJBQ0VfQ0FMTCgmdXQsIHNpemVvZih1dCkpOwkJCQlcCi0JCWVycm5vID0gdXRyYWNlX3Nl cnJubzsJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSMgIGRlZmluZSBV VFJBQ0UoYSwgYiwgYykKLSNlbmRpZgotCi0vKiBXaGV0aGVyIGVuY291bnRlcmVkIGFueSBpbnZh bGlkIGNvbmZpZyBvcHRpb25zLiAqLwotc3RhdGljIGJvb2wgaGFkX2NvbmZfZXJyb3IgPSBmYWxz ZTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBGdW5jdGlvbiBwcm90b3R5cGVz IGZvciBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlZmVyZW5jZWQgcHJpb3IgdG8KLSAqIGRl ZmluaXRpb24uCi0gKi8KLQotc3RhdGljIGJvb2wJbWFsbG9jX2luaXRfaGFyZF9hMCh2b2lkKTsK LXN0YXRpYyBib29sCW1hbGxvY19pbml0X2hhcmQodm9pZCk7Ci0KLS8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0vKgotICogQmVnaW4gbWlzY2VsbGFuZW91cyBzdXBwb3J0IGZ1bmN0aW9ucy4KLSAq LwotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLW1hbGxvY19pbml0X2EwKHZvaWQpIHsK LQlpZiAodW5saWtlbHkobWFsbG9jX2luaXRfc3RhdGUgPT0gbWFsbG9jX2luaXRfdW5pbml0aWFs aXplZCkpIHsKLQkJcmV0dXJuIG1hbGxvY19pbml0X2hhcmRfYTAoKTsKLQl9Ci0JcmV0dXJuIGZh bHNlOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLW1hbGxvY19pbml0KHZvaWQp IHsKLQlpZiAodW5saWtlbHkoIW1hbGxvY19pbml0aWFsaXplZCgpKSAmJiBtYWxsb2NfaW5pdF9o YXJkKCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoKLSAq IFRoZSBhMCooKSBmdW5jdGlvbnMgYXJlIHVzZWQgaW5zdGVhZCBvZiBpe2QsfWFsbG9jKCkgaW4g c2l0dWF0aW9ucyB0aGF0Ci0gKiBjYW5ub3QgdG9sZXJhdGUgVExTIHZhcmlhYmxlIGFjY2Vzcy4K LSAqLwotCi1zdGF0aWMgdm9pZCAqCi1hMGlhbGxvYyhzaXplX3Qgc2l6ZSwgYm9vbCB6ZXJvLCBi b29sIGlzX2ludGVybmFsKSB7Ci0JaWYgKHVubGlrZWx5KG1hbGxvY19pbml0X2EwKCkpKSB7Ci0J CXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBpYWxsb2N6dG0oVFNETl9OVUxMLCBzaXplLCBz el9zaXplMmluZGV4KHNpemUpLCB6ZXJvLCBOVUxMLAotCSAgICBpc19pbnRlcm5hbCwgYXJlbmFf Z2V0KFRTRE5fTlVMTCwgMCwgdHJ1ZSksIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZAotYTBpZGFs bG9jKHZvaWQgKnB0ciwgYm9vbCBpc19pbnRlcm5hbCkgewotCWlkYWxsb2N0bShUU0ROX05VTEws IHB0ciwgTlVMTCwgTlVMTCwgaXNfaW50ZXJuYWwsIHRydWUpOwotfQotCi12b2lkICoKLWEwbWFs bG9jKHNpemVfdCBzaXplKSB7Ci0JcmV0dXJuIGEwaWFsbG9jKHNpemUsIGZhbHNlLCB0cnVlKTsK LX0KLQotdm9pZAotYTBkYWxsb2Modm9pZCAqcHRyKSB7Ci0JYTBpZGFsbG9jKHB0ciwgdHJ1ZSk7 Ci19Ci0KLS8qCi0gKiBGcmVlQlNEJ3MgbGliYyB1c2VzIHRoZSBib290c3RyYXBfKigpIGZ1bmN0 aW9ucyBpbiBib290c3RyYXAtc2Vuc2l0aXZlCi0gKiBzaXR1YXRpb25zIHRoYXQgY2Fubm90IHRv bGVyYXRlIFRMUyB2YXJpYWJsZSBhY2Nlc3MgKFRMUyBhbGxvY2F0aW9uIGFuZCB2ZXJ5Ci0gKiBl YXJseSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbikuCi0gKi8KLQotdm9p ZCAqCi1ib290c3RyYXBfbWFsbG9jKHNpemVfdCBzaXplKSB7Ci0JaWYgKHVubGlrZWx5KHNpemUg PT0gMCkpIHsKLQkJc2l6ZSA9IDE7Ci0JfQotCi0JcmV0dXJuIGEwaWFsbG9jKHNpemUsIGZhbHNl LCBmYWxzZSk7Ci19Ci0KLXZvaWQgKgotYm9vdHN0cmFwX2NhbGxvYyhzaXplX3QgbnVtLCBzaXpl X3Qgc2l6ZSkgewotCXNpemVfdCBudW1fc2l6ZTsKLQotCW51bV9zaXplID0gbnVtICogc2l6ZTsK LQlpZiAodW5saWtlbHkobnVtX3NpemUgPT0gMCkpIHsKLQkJYXNzZXJ0KG51bSA9PSAwIHx8IHNp emUgPT0gMCk7Ci0JCW51bV9zaXplID0gMTsKLQl9Ci0KLQlyZXR1cm4gYTBpYWxsb2MobnVtX3Np emUsIHRydWUsIGZhbHNlKTsKLX0KLQotdm9pZAotYm9vdHN0cmFwX2ZyZWUodm9pZCAqcHRyKSB7 Ci0JaWYgKHVubGlrZWx5KHB0ciA9PSBOVUxMKSkgewotCQlyZXR1cm47Ci0JfQotCi0JYTBpZGFs bG9jKHB0ciwgZmFsc2UpOwotfQotCi12b2lkCi1hcmVuYV9zZXQodW5zaWduZWQgaW5kLCBhcmVu YV90ICphcmVuYSkgewotCWF0b21pY19zdG9yZV9wKCZhcmVuYXNbaW5kXSwgYXJlbmEsIEFUT01J Q19SRUxFQVNFKTsKLX0KLQotc3RhdGljIHZvaWQKLW5hcmVuYXNfdG90YWxfc2V0KHVuc2lnbmVk IG5hcmVuYXMpIHsKLQlhdG9taWNfc3RvcmVfdSgmbmFyZW5hc190b3RhbCwgbmFyZW5hcywgQVRP TUlDX1JFTEVBU0UpOwotfQotCi1zdGF0aWMgdm9pZAotbmFyZW5hc190b3RhbF9pbmModm9pZCkg ewotCWF0b21pY19mZXRjaF9hZGRfdSgmbmFyZW5hc190b3RhbCwgMSwgQVRPTUlDX1JFTEVBU0Up OwotfQotCi11bnNpZ25lZAotbmFyZW5hc190b3RhbF9nZXQodm9pZCkgewotCXJldHVybiBhdG9t aWNfbG9hZF91KCZuYXJlbmFzX3RvdGFsLCBBVE9NSUNfQUNRVUlSRSk7Ci19Ci0KLS8qIENyZWF0 ZSBhIG5ldyBhcmVuYSBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIGFyZW5hcyBhcnJheSBhdCBpbmRl eCBpbmQuICovCi1zdGF0aWMgYXJlbmFfdCAqCi1hcmVuYV9pbml0X2xvY2tlZCh0c2RuX3QgKnRz ZG4sIHVuc2lnbmVkIGluZCwgY29uc3QgYXJlbmFfY29uZmlnX3QgKmNvbmZpZykgewotCWFyZW5h X3QgKmFyZW5hOwotCi0JYXNzZXJ0KGluZCA8PSBuYXJlbmFzX3RvdGFsX2dldCgpKTsKLQlpZiAo aW5kID49IE1BTExPQ1hfQVJFTkFfTElNSVQpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmIChp bmQgPT0gbmFyZW5hc190b3RhbF9nZXQoKSkgewotCQluYXJlbmFzX3RvdGFsX2luYygpOwotCX0K LQotCS8qCi0JICogQW5vdGhlciB0aHJlYWQgbWF5IGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZCBh cmVuYXNbaW5kXSBpZiBpdCdzIGFuCi0JICogYXV0byBhcmVuYS4KLQkgKi8KLQlhcmVuYSA9IGFy ZW5hX2dldCh0c2RuLCBpbmQsIGZhbHNlKTsKLQlpZiAoYXJlbmEgIT0gTlVMTCkgewotCQlhc3Nl cnQoYXJlbmFfaXNfYXV0byhhcmVuYSkpOwotCQlyZXR1cm4gYXJlbmE7Ci0JfQotCi0JLyogQWN0 dWFsbHkgaW5pdGlhbGl6ZSB0aGUgYXJlbmEuICovCi0JYXJlbmEgPSBhcmVuYV9uZXcodHNkbiwg aW5kLCBjb25maWcpOwotCi0JcmV0dXJuIGFyZW5hOwotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFf bmV3X2NyZWF0ZV9iYWNrZ3JvdW5kX3RocmVhZCh0c2RuX3QgKnRzZG4sIHVuc2lnbmVkIGluZCkg ewotCWlmIChpbmQgPT0gMCkgewotCQlyZXR1cm47Ci0JfQotCS8qCi0JICogQXZvaWQgY3JlYXRp bmcgYSBuZXcgYmFja2dyb3VuZCB0aHJlYWQganVzdCBmb3IgdGhlIGh1Z2UgYXJlbmEsIHdoaWNo Ci0JICogcHVyZ2VzIGVhZ2VybHkgYnkgZGVmYXVsdC4KLQkgKi8KLQlpZiAoaGF2ZV9iYWNrZ3Jv dW5kX3RocmVhZCAmJiAhYXJlbmFfaXNfaHVnZShpbmQpKSB7Ci0JCWlmIChiYWNrZ3JvdW5kX3Ro cmVhZF9jcmVhdGUodHNkbl90c2QodHNkbiksIGluZCkpIHsKLQkJCW1hbGxvY19wcmludGYoIjxq ZW1hbGxvYz46IGVycm9yIGluIGJhY2tncm91bmQgdGhyZWFkICIKLQkJCQkgICAgICAiY3JlYXRp b24gZm9yIGFyZW5hICV1LiBBYm9ydC5cbiIsIGluZCk7Ci0JCQlhYm9ydCgpOwotCQl9Ci0JfQot fQotCi1hcmVuYV90ICoKLWFyZW5hX2luaXQodHNkbl90ICp0c2RuLCB1bnNpZ25lZCBpbmQsIGNv bnN0IGFyZW5hX2NvbmZpZ190ICpjb25maWcpIHsKLQlhcmVuYV90ICphcmVuYTsKLQotCW1hbGxv Y19tdXRleF9sb2NrKHRzZG4sICZhcmVuYXNfbG9jayk7Ci0JYXJlbmEgPSBhcmVuYV9pbml0X2xv Y2tlZCh0c2RuLCBpbmQsIGNvbmZpZyk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmYXJl bmFzX2xvY2spOwotCi0JYXJlbmFfbmV3X2NyZWF0ZV9iYWNrZ3JvdW5kX3RocmVhZCh0c2RuLCBp bmQpOwotCi0JcmV0dXJuIGFyZW5hOwotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFfYmluZCh0c2Rf dCAqdHNkLCB1bnNpZ25lZCBpbmQsIGJvb2wgaW50ZXJuYWwpIHsKLQlhcmVuYV90ICphcmVuYSA9 IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCBpbmQsIGZhbHNlKTsKLQlhcmVuYV9udGhyZWFkc19p bmMoYXJlbmEsIGludGVybmFsKTsKLQotCWlmIChpbnRlcm5hbCkgewotCQl0c2RfaWFyZW5hX3Nl dCh0c2QsIGFyZW5hKTsKLQl9IGVsc2UgewotCQl0c2RfYXJlbmFfc2V0KHRzZCwgYXJlbmEpOwot CQl1bnNpZ25lZCBzaGFyZCA9IGF0b21pY19mZXRjaF9hZGRfdSgmYXJlbmEtPmJpbnNoYXJkX25l eHQsIDEsCi0JCSAgICBBVE9NSUNfUkVMQVhFRCk7Ci0JCXRzZF9iaW5zaGFyZHNfdCAqYmlucyA9 IHRzZF9iaW5zaGFyZHNwX2dldCh0c2QpOwotCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU0Nf TkJJTlM7IGkrKykgewotCQkJYXNzZXJ0KGJpbl9pbmZvc1tpXS5uX3NoYXJkcyA+IDAgJiYKLQkJ CSAgICBiaW5faW5mb3NbaV0ubl9zaGFyZHMgPD0gQklOX1NIQVJEU19NQVgpOwotCQkJYmlucy0+ Ymluc2hhcmRbaV0gPSBzaGFyZCAlIGJpbl9pbmZvc1tpXS5uX3NoYXJkczsKLQkJfQotCX0KLX0K LQotdm9pZAotYXJlbmFfbWlncmF0ZSh0c2RfdCAqdHNkLCBhcmVuYV90ICpvbGRhcmVuYSwgYXJl bmFfdCAqbmV3YXJlbmEpIHsKLQlhc3NlcnQob2xkYXJlbmEgIT0gTlVMTCk7Ci0JYXNzZXJ0KG5l d2FyZW5hICE9IE5VTEwpOwotCi0JYXJlbmFfbnRocmVhZHNfZGVjKG9sZGFyZW5hLCBmYWxzZSk7 Ci0JYXJlbmFfbnRocmVhZHNfaW5jKG5ld2FyZW5hLCBmYWxzZSk7Ci0JdHNkX2FyZW5hX3NldCh0 c2QsIG5ld2FyZW5hKTsKLQotCWlmIChhcmVuYV9udGhyZWFkc19nZXQob2xkYXJlbmEsIGZhbHNl KSA9PSAwKSB7Ci0JCS8qIFB1cmdlIGlmIHRoZSBvbGQgYXJlbmEgaGFzIG5vIGFzc29jaWF0ZWQg dGhyZWFkcyBhbnltb3JlLiAqLwotCQlhcmVuYV9kZWNheSh0c2RfdHNkbih0c2QpLCBvbGRhcmVu YSwKLQkJICAgIC8qIGlzX2JhY2tncm91bmRfdGhyZWFkICovIGZhbHNlLCAvKiBhbGwgKi8gdHJ1 ZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYXJlbmFfdW5iaW5kKHRzZF90ICp0c2QsIHVuc2ln bmVkIGluZCwgYm9vbCBpbnRlcm5hbCkgewotCWFyZW5hX3QgKmFyZW5hOwotCi0JYXJlbmEgPSBh cmVuYV9nZXQodHNkX3RzZG4odHNkKSwgaW5kLCBmYWxzZSk7Ci0JYXJlbmFfbnRocmVhZHNfZGVj KGFyZW5hLCBpbnRlcm5hbCk7Ci0KLQlpZiAoaW50ZXJuYWwpIHsKLQkJdHNkX2lhcmVuYV9zZXQo dHNkLCBOVUxMKTsKLQl9IGVsc2UgewotCQl0c2RfYXJlbmFfc2V0KHRzZCwgTlVMTCk7Ci0JfQot fQotCi0vKiBTbG93IHBhdGgsIGNhbGxlZCBvbmx5IGJ5IGFyZW5hX2Nob29zZSgpLiAqLwotYXJl bmFfdCAqCi1hcmVuYV9jaG9vc2VfaGFyZCh0c2RfdCAqdHNkLCBib29sIGludGVybmFsKSB7Ci0J YXJlbmFfdCAqcmV0IEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVChOVUxMKTsKLQotCWlmIChoYXZl X3BlcmNwdV9hcmVuYSAmJiBQRVJDUFVfQVJFTkFfRU5BQkxFRChvcHRfcGVyY3B1X2FyZW5hKSkg ewotCQl1bnNpZ25lZCBjaG9vc2UgPSBwZXJjcHVfYXJlbmFfY2hvb3NlKCk7Ci0JCXJldCA9IGFy ZW5hX2dldCh0c2RfdHNkbih0c2QpLCBjaG9vc2UsIHRydWUpOwotCQlhc3NlcnQocmV0ICE9IE5V TEwpOwotCQlhcmVuYV9iaW5kKHRzZCwgYXJlbmFfaW5kX2dldChyZXQpLCBmYWxzZSk7Ci0JCWFy ZW5hX2JpbmQodHNkLCBhcmVuYV9pbmRfZ2V0KHJldCksIHRydWUpOwotCi0JCXJldHVybiByZXQ7 Ci0JfQotCi0JaWYgKG5hcmVuYXNfYXV0byA+IDEpIHsKLQkJdW5zaWduZWQgaSwgaiwgY2hvb3Nl WzJdLCBmaXJzdF9udWxsOwotCQlib29sIGlzX25ld19hcmVuYVsyXTsKLQotCQkvKgotCQkgKiBE ZXRlcm1pbmUgYmluZGluZyBmb3IgYm90aCBub24taW50ZXJuYWwgYW5kIGludGVybmFsCi0JCSAq IGFsbG9jYXRpb24uCi0JCSAqCi0JCSAqICAgY2hvb3NlWzBdOiBGb3IgYXBwbGljYXRpb24gYWxs b2NhdGlvbi4KLQkJICogICBjaG9vc2VbMV06IEZvciBpbnRlcm5hbCBtZXRhZGF0YSBhbGxvY2F0 aW9uLgotCQkgKi8KLQotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQljaG9vc2Vbal0g PSAwOwotCQkJaXNfbmV3X2FyZW5hW2pdID0gZmFsc2U7Ci0JCX0KLQotCQlmaXJzdF9udWxsID0g bmFyZW5hc19hdXRvOwotCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmYXJlbmFz X2xvY2spOwotCQlhc3NlcnQoYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIDAsIGZhbHNlKSAhPSBO VUxMKTsKLQkJZm9yIChpID0gMTsgaSA8IG5hcmVuYXNfYXV0bzsgaSsrKSB7Ci0JCQlpZiAoYXJl bmFfZ2V0KHRzZF90c2RuKHRzZCksIGksIGZhbHNlKSAhPSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkg KiBDaG9vc2UgdGhlIGZpcnN0IGFyZW5hIHRoYXQgaGFzIHRoZSBsb3dlc3QKLQkJCQkgKiBudW1i ZXIgb2YgdGhyZWFkcyBhc3NpZ25lZCB0byBpdC4KLQkJCQkgKi8KLQkJCQlmb3IgKGogPSAwOyBq IDwgMjsgaisrKSB7Ci0JCQkJCWlmIChhcmVuYV9udGhyZWFkc19nZXQoYXJlbmFfZ2V0KAotCQkJ CQkgICAgdHNkX3RzZG4odHNkKSwgaSwgZmFsc2UpLCAhIWopIDwKLQkJCQkJICAgIGFyZW5hX250 aHJlYWRzX2dldChhcmVuYV9nZXQoCi0JCQkJCSAgICB0c2RfdHNkbih0c2QpLCBjaG9vc2Vbal0s IGZhbHNlKSwKLQkJCQkJICAgICEhaikpIHsKLQkJCQkJCWNob29zZVtqXSA9IGk7Ci0JCQkJCX0K LQkJCQl9Ci0JCQl9IGVsc2UgaWYgKGZpcnN0X251bGwgPT0gbmFyZW5hc19hdXRvKSB7Ci0JCQkJ LyoKLQkJCQkgKiBSZWNvcmQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB1bmluaXRpYWxpemVkCi0J CQkJICogYXJlbmEsIGluIGNhc2UgYWxsIGV4dGFudCBhcmVuYXMgYXJlIGluIHVzZS4KLQkJCQkg KgotCQkJCSAqIE5COiBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUKLQkJCQkgKiBkaXNj b250aW51aXRpZXMgaW4gdGVybXMgb2YgaW5pdGlhbGl6ZWQKLQkJCQkgKiB2ZXJzdXMgdW5pbml0 aWFsaXplZCBhcmVuYXMsIGR1ZSB0byB0aGUKLQkJCQkgKiAidGhyZWFkLmFyZW5hIiBtYWxsY3Rs LgotCQkJCSAqLwotCQkJCWZpcnN0X251bGwgPSBpOwotCQkJfQotCQl9Ci0KLQkJZm9yIChqID0g MDsgaiA8IDI7IGorKykgewotCQkJaWYgKGFyZW5hX250aHJlYWRzX2dldChhcmVuYV9nZXQodHNk X3RzZG4odHNkKSwKLQkJCSAgICBjaG9vc2Vbal0sIGZhbHNlKSwgISFqKSA9PSAwIHx8IGZpcnN0 X251bGwgPT0KLQkJCSAgICBuYXJlbmFzX2F1dG8pIHsKLQkJCQkvKgotCQkJCSAqIFVzZSBhbiB1 bmxvYWRlZCBhcmVuYSwgb3IgdGhlIGxlYXN0IGxvYWRlZAotCQkJCSAqIGFyZW5hIGlmIGFsbCBh cmVuYXMgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuCi0JCQkJICovCi0JCQkJaWYgKCEhaiA9PSBp bnRlcm5hbCkgewotCQkJCQlyZXQgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwKLQkJCQkJICAg IGNob29zZVtqXSwgZmFsc2UpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJYXJlbmFfdCAqYXJl bmE7Ci0KLQkJCQkvKiBJbml0aWFsaXplIGEgbmV3IGFyZW5hLiAqLwotCQkJCWNob29zZVtqXSA9 IGZpcnN0X251bGw7Ci0JCQkJYXJlbmEgPSBhcmVuYV9pbml0X2xvY2tlZCh0c2RfdHNkbih0c2Qp LAotCQkJCSAgICBjaG9vc2Vbal0sICZhcmVuYV9jb25maWdfZGVmYXVsdCk7Ci0JCQkJaWYgKGFy ZW5hID09IE5VTEwpIHsKLQkJCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLAot CQkJCQkgICAgJmFyZW5hc19sb2NrKTsKLQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJfQotCQkJCWlz X25ld19hcmVuYVtqXSA9IHRydWU7Ci0JCQkJaWYgKCEhaiA9PSBpbnRlcm5hbCkgewotCQkJCQly ZXQgPSBhcmVuYTsKLQkJCQl9Ci0JCQl9Ci0JCQlhcmVuYV9iaW5kKHRzZCwgY2hvb3NlW2pdLCAh IWopOwotCQl9Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmFyZW5hc19s b2NrKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7Ci0JCQlpZiAoaXNfbmV3X2FyZW5h W2pdKSB7Ci0JCQkJYXNzZXJ0KGNob29zZVtqXSA+IDApOwotCQkJCWFyZW5hX25ld19jcmVhdGVf YmFja2dyb3VuZF90aHJlYWQoCi0JCQkJICAgIHRzZF90c2RuKHRzZCksIGNob29zZVtqXSk7Ci0J CQl9Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCXJldCA9IGFyZW5hX2dldCh0c2RfdHNkbih0c2QpLCAw LCBmYWxzZSk7Ci0JCWFyZW5hX2JpbmQodHNkLCAwLCBmYWxzZSk7Ci0JCWFyZW5hX2JpbmQodHNk LCAwLCB0cnVlKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkCi1pYXJlbmFfY2xlYW51 cCh0c2RfdCAqdHNkKSB7Ci0JYXJlbmFfdCAqaWFyZW5hOwotCi0JaWFyZW5hID0gdHNkX2lhcmVu YV9nZXQodHNkKTsKLQlpZiAoaWFyZW5hICE9IE5VTEwpIHsKLQkJYXJlbmFfdW5iaW5kKHRzZCwg YXJlbmFfaW5kX2dldChpYXJlbmEpLCB0cnVlKTsKLQl9Ci19Ci0KLXZvaWQKLWFyZW5hX2NsZWFu dXAodHNkX3QgKnRzZCkgewotCWFyZW5hX3QgKmFyZW5hOwotCi0JYXJlbmEgPSB0c2RfYXJlbmFf Z2V0KHRzZCk7Ci0JaWYgKGFyZW5hICE9IE5VTEwpIHsKLQkJYXJlbmFfdW5iaW5kKHRzZCwgYXJl bmFfaW5kX2dldChhcmVuYSksIGZhbHNlKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zdGF0c19w cmludF9hdGV4aXQodm9pZCkgewotCWlmIChjb25maWdfc3RhdHMpIHsKLQkJdHNkbl90ICp0c2Ru OwotCQl1bnNpZ25lZCBuYXJlbmFzLCBpOwotCi0JCXRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0KLQkJ LyoKLQkJICogTWVyZ2Ugc3RhdHMgZnJvbSBleHRhbnQgdGhyZWFkcy4gIFRoaXMgaXMgcmFjeSwg c2luY2UKLQkJICogaW5kaXZpZHVhbCB0aHJlYWRzIGRvIG5vdCBsb2NrIHdoZW4gcmVjb3JkaW5n IHRjYWNoZSBzdGF0cwotCQkgKiBldmVudHMuICBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgZmluYWwg c3RhdHMgbWF5IGJlIHNsaWdodGx5Ci0JCSAqIG91dCBvZiBkYXRlIGJ5IHRoZSB0aW1lIHRoZXkg YXJlIHJlcG9ydGVkLCBpZiBvdGhlciB0aHJlYWRzCi0JCSAqIGNvbnRpbnVlIHRvIGFsbG9jYXRl LgotCQkgKi8KLQkJZm9yIChpID0gMCwgbmFyZW5hcyA9IG5hcmVuYXNfdG90YWxfZ2V0KCk7IGkg PCBuYXJlbmFzOyBpKyspIHsKLQkJCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0KHRzZG4sIGks IGZhbHNlKTsKLQkJCWlmIChhcmVuYSAhPSBOVUxMKSB7Ci0JCQkJdGNhY2hlX3Nsb3dfdCAqdGNh Y2hlX3Nsb3c7Ci0KLQkJCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYXJlbmEtPnRjYWNoZV9x bF9tdHgpOwotCQkJCXFsX2ZvcmVhY2godGNhY2hlX3Nsb3csICZhcmVuYS0+dGNhY2hlX3FsLAot CQkJCSAgICBsaW5rKSB7Ci0JCQkJCXRjYWNoZV9zdGF0c19tZXJnZSh0c2RuLAotCQkJCQkgICAg dGNhY2hlX3Nsb3ctPnRjYWNoZSwgYXJlbmEpOwotCQkJCX0KLQkJCQltYWxsb2NfbXV0ZXhfdW5s b2NrKHRzZG4sCi0JCQkJICAgICZhcmVuYS0+dGNhY2hlX3FsX210eCk7Ci0JCQl9Ci0JCX0KLQl9 Ci0JamVfbWFsbG9jX3N0YXRzX3ByaW50KE5VTEwsIE5VTEwsIG9wdF9zdGF0c19wcmludF9vcHRz KTsKLX0KLQotLyoKLSAqIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhvbGQgYW55IGxvY2tzIHVwb24g ZW50cnkgdG8gb3IgZXhpdCBmcm9tIGFsbG9jYXRvcgotICogY29kZSAoaW4gYSAiYnJvYWQiIHNl bnNlIHRoYXQgZG9lc24ndCBjb3VudCBhIHJlZW50cmFudCBhbGxvY2F0aW9uIGFzIGFuCi0gKiBl bnRyYW5jZSBvciBleGl0KS4KLSAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1jaGVj a19lbnRyeV9leGl0X2xvY2tpbmcodHNkbl90ICp0c2RuKSB7Ci0JaWYgKCFjb25maWdfZGVidWcp IHsKLQkJcmV0dXJuOwotCX0KLQlpZiAodHNkbl9udWxsKHRzZG4pKSB7Ci0JCXJldHVybjsKLQl9 Ci0JdHNkX3QgKnRzZCA9IHRzZG5fdHNkKHRzZG4pOwotCS8qCi0JICogSXQncyBwb3NzaWJsZSB3 ZSBob2xkIGxvY2tzIGF0IGVudHJ5L2V4aXQgaWYgd2UncmUgaW4gYSBuZXN0ZWQKLQkgKiBhbGxv Y2F0aW9uLgotCSAqLwotCWludDhfdCByZWVudHJhbmN5X2xldmVsID0gdHNkX3JlZW50cmFuY3lf bGV2ZWxfZ2V0KHRzZCk7Ci0JaWYgKHJlZW50cmFuY3lfbGV2ZWwgIT0gMCkgewotCQlyZXR1cm47 Ci0JfQotCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2Ru KSk7Ci19Ci0KLS8qCi0gKiBFbmQgbWlzY2VsbGFuZW91cyBzdXBwb3J0IGZ1bmN0aW9ucy4KLSAq LwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBCZWdpbiBpbml0aWFsaXphdGlvbiBm dW5jdGlvbnMuCi0gKi8KLQotc3RhdGljIGNoYXIgKgotamVtYWxsb2Nfc2VjdXJlX2dldGVudihj b25zdCBjaGFyICpuYW1lKSB7Ci0jaWZkZWYgSkVNQUxMT0NfSEFWRV9TRUNVUkVfR0VURU5WCi0J cmV0dXJuIHNlY3VyZV9nZXRlbnYobmFtZSk7Ci0jZWxzZQotIyAgaWZkZWYgSkVNQUxMT0NfSEFW RV9JU1NFVFVHSUQKLQlpZiAoaXNzZXR1Z2lkKCkgIT0gMCkgewotCQlyZXR1cm4gTlVMTDsKLQl9 Ci0jICBlbmRpZgotCXJldHVybiBnZXRlbnYobmFtZSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHVu c2lnbmVkCi1tYWxsb2NfbmNwdXModm9pZCkgewotCWxvbmcgcmVzdWx0OwotCi0jaWZkZWYgX1dJ TjMyCi0JU1lTVEVNX0lORk8gc2k7Ci0JR2V0U3lzdGVtSW5mbygmc2kpOwotCXJlc3VsdCA9IHNp LmR3TnVtYmVyT2ZQcm9jZXNzb3JzOwotI2VsaWYgZGVmaW5lZChDUFVfQ09VTlQpCi0JLyoKLQkg KiBnbGliYyA+PSAyLjYgaGFzIHRoZSBDUFVfQ09VTlQgbWFjcm8uCi0JICoKLQkgKiBnbGliYydz IHN5c2NvbmYoKSB1c2VzIGlzc3BhY2UoKS4gIGdsaWJjIGFsbG9jYXRlcyBmb3IgdGhlIGZpcnN0 IHRpbWUKLQkgKiAqYmVmb3JlKiBzZXR0aW5nIHVwIHRoZSBpc3NwYWNlIHRhYmxlcy4gIFRoZXJl Zm9yZSB3ZSBuZWVkIGEKLQkgKiBkaWZmZXJlbnQgbWV0aG9kIHRvIGdldCB0aGUgbnVtYmVyIG9m IENQVXMuCi0JICoKLQkgKiBUaGUgZ2V0YWZmaW5pdHkgYXBwcm9hY2ggaXMgYWxzbyBwcmVmZXJy ZWQgd2hlbiBvbmx5IGEgc3Vic2V0IG9mIENQVXMKLQkgKiBpcyBhdmFpbGFibGUsIHRvIGF2b2lk IHVzaW5nIG1vcmUgYXJlbmFzIHRoYW4gbmVjZXNzYXJ5LgotCSAqLwotCXsKLSMgIGlmIGRlZmlu ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykKLQkJY3B1c2V0X3Qgc2V0 OwotIyAgZWxzZQotCQljcHVfc2V0X3Qgc2V0OwotIyAgZW5kaWYKLSMgIGlmIGRlZmluZWQoSkVN QUxMT0NfSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkKLQkJc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6 ZW9mKHNldCksICZzZXQpOwotIyAgZWxzZQotCQlwdGhyZWFkX2dldGFmZmluaXR5X25wKHB0aHJl YWRfc2VsZigpLCBzaXplb2Yoc2V0KSwgJnNldCk7Ci0jICBlbmRpZgotCQlyZXN1bHQgPSBDUFVf Q09VTlQoJnNldCk7Ci0JfQotI2Vsc2UKLQlyZXN1bHQgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09S U19PTkxOKTsKLSNlbmRpZgotCXJldHVybiAoKHJlc3VsdCA9PSAtMSkgPyAxIDogKHVuc2lnbmVk KXJlc3VsdCk7Ci19Ci0KLS8qCi0gKiBFbnN1cmUgdGhhdCBudW1iZXIgb2YgQ1BVcyBpcyBkZXRl cm1pc3RpbmMsIGkuZS4gaXQgaXMgdGhlIHNhbWUgYmFzZWQgb246Ci0gKiAtIHNjaGVkX2dldGFm ZmluaXR5KCkKLSAqIC0gX1NDX05QUk9DRVNTT1JTX09OTE4KLSAqIC0gX1NDX05QUk9DRVNTT1JT X0NPTkYKLSAqIFNpbmNlIG90aGVyd2lzZSB0cmlja3kgdGhpbmdzIGlzIHBvc3NpYmxlIHdpdGgg cGVyY3B1IGFyZW5hcyBpbiB1c2UuCi0gKi8KLXN0YXRpYyBib29sCi1tYWxsb2NfY3B1X2NvdW50 X2lzX2RldGVybWluaXN0aWMoKQotewotI2lmZGVmIF9XSU4zMgotCXJldHVybiB0cnVlOwotI2Vs c2UKLQlsb25nIGNwdV9vbmxuID0gc3lzY29uZihfU0NfTlBST0NFU1NPUlNfT05MTik7Ci0JbG9u ZyBjcHVfY29uZiA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX0NPTkYpOwotCWlmIChjcHVfb25s biAhPSBjcHVfY29uZikgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotIyAgaWYgZGVmaW5lZChDUFVf Q09VTlQpCi0jICAgIGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25G bHlfXykKLQljcHVzZXRfdCBzZXQ7Ci0jICAgIGVsc2UKLQljcHVfc2V0X3Qgc2V0OwotIyAgICBl bmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwotIyAgICBpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfU0NI RURfU0VUQUZGSU5JVFkpCi0Jc2NoZWRfZ2V0YWZmaW5pdHkoMCwgc2l6ZW9mKHNldCksICZzZXQp OwotIyAgICBlbHNlIC8qICFKRU1BTExPQ19IQVZFX1NDSEVEX1NFVEFGRklOSVRZICovCi0JcHRo cmVhZF9nZXRhZmZpbml0eV9ucChwdGhyZWFkX3NlbGYoKSwgc2l6ZW9mKHNldCksICZzZXQpOwot IyAgICBlbmRpZiAvKiBKRU1BTExPQ19IQVZFX1NDSEVEX1NFVEFGRklOSVRZICovCi0JbG9uZyBj cHVfYWZmaW5pdHkgPSBDUFVfQ09VTlQoJnNldCk7Ci0JaWYgKGNwdV9hZmZpbml0eSAhPSBjcHVf Y29uZikgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotIyAgZW5kaWYgLyogQ1BVX0NPVU5UICovCi0J cmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLWluaXRfb3B0X3N0YXRzX29w dHMoY29uc3QgY2hhciAqdiwgc2l6ZV90IHZsZW4sIGNoYXIgKmRlc3QpIHsKLQlzaXplX3Qgb3B0 c19sZW4gPSBzdHJsZW4oZGVzdCk7Ci0JYXNzZXJ0KG9wdHNfbGVuIDw9IHN0YXRzX3ByaW50X3Rv dF9udW1fb3B0aW9ucyk7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZsZW47IGkrKykgewot CQlzd2l0Y2ggKHZbaV0pIHsKLSNkZWZpbmUgT1BUSU9OKG8sIHYsIGQsIHMpIGNhc2UgbzogYnJl YWs7Ci0JCQlTVEFUU19QUklOVF9PUFRJT05TCi0jdW5kZWYgT1BUSU9OCi0JCWRlZmF1bHQ6IGNv bnRpbnVlOwotCQl9Ci0KLQkJaWYgKHN0cmNocihkZXN0LCB2W2ldKSAhPSBOVUxMKSB7Ci0JCQkv KiBJZ25vcmUgcmVwZWF0ZWQuICovCi0JCQljb250aW51ZTsKLQkJfQotCi0JCWRlc3Rbb3B0c19s ZW4rK10gPSB2W2ldOwotCQlkZXN0W29wdHNfbGVuXSA9ICdcMCc7Ci0JCWFzc2VydChvcHRzX2xl biA8PSBzdGF0c19wcmludF90b3RfbnVtX29wdGlvbnMpOwotCX0KLQlhc3NlcnQob3B0c19sZW4g PT0gc3RybGVuKGRlc3QpKTsKLX0KLQotLyogUmVhZHMgdGhlIG5leHQgc2l6ZSBwYWlyIGluIGEg bXVsdGktc2l6ZWQgb3B0aW9uLiAqLwotc3RhdGljIGJvb2wKLW1hbGxvY19jb25mX211bHRpX3Np emVzX25leHQoY29uc3QgY2hhciAqKnNsYWJfc2l6ZV9zZWdtZW50X2N1ciwKLSAgICBzaXplX3Qg KnZsZW5fbGVmdCwgc2l6ZV90ICpzbGFiX3N0YXJ0LCBzaXplX3QgKnNsYWJfZW5kLCBzaXplX3Qg Km5ld19zaXplKSB7Ci0JY29uc3QgY2hhciAqY3VyID0gKnNsYWJfc2l6ZV9zZWdtZW50X2N1cjsK LQljaGFyICplbmQ7Ci0JdWludG1heF90IHVtOwotCi0Jc2V0X2Vycm5vKDApOwotCi0JLyogRmly c3QgbnVtYmVyLCB0aGVuICctJyAqLwotCXVtID0gbWFsbG9jX3N0cnRvdW1heChjdXIsICZlbmQs IDApOwotCWlmIChnZXRfZXJybm8oKSAhPSAwIHx8ICplbmQgIT0gJy0nKSB7Ci0JCXJldHVybiB0 cnVlOwotCX0KLQkqc2xhYl9zdGFydCA9IChzaXplX3QpdW07Ci0JY3VyID0gZW5kICsgMTsKLQot CS8qIFNlY29uZCBudW1iZXIsIHRoZW4gJzonICovCi0JdW0gPSBtYWxsb2Nfc3RydG91bWF4KGN1 ciwgJmVuZCwgMCk7Ci0JaWYgKGdldF9lcnJubygpICE9IDAgfHwgKmVuZCAhPSAnOicpIHsKLQkJ cmV0dXJuIHRydWU7Ci0JfQotCSpzbGFiX2VuZCA9IChzaXplX3QpdW07Ci0JY3VyID0gZW5kICsg MTsKLQotCS8qIExhc3QgbnVtYmVyICovCi0JdW0gPSBtYWxsb2Nfc3RydG91bWF4KGN1ciwgJmVu ZCwgMCk7Ci0JaWYgKGdldF9lcnJubygpICE9IDApIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCSpu ZXdfc2l6ZSA9IChzaXplX3QpdW07Ci0KLQkvKiBDb25zdW1lIHRoZSBzZXBhcmF0b3IgaWYgdGhl cmUgaXMgb25lLiAqLwotCWlmICgqZW5kID09ICd8JykgewotCQllbmQrKzsKLQl9Ci0KLQkqdmxl bl9sZWZ0IC09IGVuZCAtICpzbGFiX3NpemVfc2VnbWVudF9jdXI7Ci0JKnNsYWJfc2l6ZV9zZWdt ZW50X2N1ciA9IGVuZDsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wKLW1hbGxv Y19jb25mX25leHQoY2hhciBjb25zdCAqKm9wdHNfcCwgY2hhciBjb25zdCAqKmtfcCwgc2l6ZV90 ICprbGVuX3AsCi0gICAgY2hhciBjb25zdCAqKnZfcCwgc2l6ZV90ICp2bGVuX3ApIHsKLQlib29s IGFjY2VwdDsKLQljb25zdCBjaGFyICpvcHRzID0gKm9wdHNfcDsKLQotCSprX3AgPSBvcHRzOwot Ci0JZm9yIChhY2NlcHQgPSBmYWxzZTsgIWFjY2VwdDspIHsKLQkJc3dpdGNoICgqb3B0cykgewot CQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOiBjYXNlICdEJzogY2FzZSAnRSc6IGNhc2Ug J0YnOgotCQljYXNlICdHJzogY2FzZSAnSCc6IGNhc2UgJ0knOiBjYXNlICdKJzogY2FzZSAnSyc6 IGNhc2UgJ0wnOgotCQljYXNlICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOiBjYXNlICdQJzogY2Fz ZSAnUSc6IGNhc2UgJ1InOgotCQljYXNlICdTJzogY2FzZSAnVCc6IGNhc2UgJ1UnOiBjYXNlICdW JzogY2FzZSAnVyc6IGNhc2UgJ1gnOgotCQljYXNlICdZJzogY2FzZSAnWic6Ci0JCWNhc2UgJ2En OiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBjYXNlICdlJzogY2FzZSAnZic6Ci0JCWNh c2UgJ2cnOiBjYXNlICdoJzogY2FzZSAnaSc6IGNhc2UgJ2onOiBjYXNlICdrJzogY2FzZSAnbCc6 Ci0JCWNhc2UgJ20nOiBjYXNlICduJzogY2FzZSAnbyc6IGNhc2UgJ3AnOiBjYXNlICdxJzogY2Fz ZSAncic6Ci0JCWNhc2UgJ3MnOiBjYXNlICd0JzogY2FzZSAndSc6IGNhc2UgJ3YnOiBjYXNlICd3 JzogY2FzZSAneCc6Ci0JCWNhc2UgJ3knOiBjYXNlICd6JzoKLQkJY2FzZSAnMCc6IGNhc2UgJzEn OiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKLQkJY2FzZSAnNic6IGNh c2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0JCWNhc2UgJ18nOgotCQkJb3B0cysrOwotCQkJ YnJlYWs7Ci0JCWNhc2UgJzonOgotCQkJb3B0cysrOwotCQkJKmtsZW5fcCA9ICh1aW50cHRyX3Qp b3B0cyAtIDEgLSAodWludHB0cl90KSprX3A7Ci0JCQkqdl9wID0gb3B0czsKLQkJCWFjY2VwdCA9 IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSAnXDAnOgotCQkJaWYgKG9wdHMgIT0gKm9wdHNfcCkg ewotCQkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogQ29uZiBzdHJpbmcgZW5kcyAiCi0JCQkJ ICAgICJ3aXRoIGtleVxuIik7Ci0JCQkJaGFkX2NvbmZfZXJyb3IgPSB0cnVlOwotCQkJfQotCQkJ cmV0dXJuIHRydWU7Ci0JCWRlZmF1bHQ6Ci0JCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IE1h bGZvcm1lZCBjb25mIHN0cmluZ1xuIik7Ci0JCQloYWRfY29uZl9lcnJvciA9IHRydWU7Ci0JCQly ZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCWZvciAoYWNjZXB0ID0gZmFsc2U7ICFhY2NlcHQ7KSB7 Ci0JCXN3aXRjaCAoKm9wdHMpIHsKLQkJY2FzZSAnLCc6Ci0JCQlvcHRzKys7Ci0JCQkvKgotCQkJ ICogTG9vayBhaGVhZCBvbmUgY2hhcmFjdGVyIGhlcmUsIGJlY2F1c2UgdGhlIG5leHQgdGltZQot CQkJICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IHdpbGwgYXNzdW1lIHRoYXQgZW5kIG9m Ci0JCQkgKiBpbnB1dCBoYXMgYmVlbiBjbGVhbmx5IHJlYWNoZWQgaWYgbm8gaW5wdXQgcmVtYWlu cywKLQkJCSAqIGJ1dCB3ZSBoYXZlIG9wdGltaXN0aWNhbGx5IGFscmVhZHkgY29uc3VtZWQgdGhl Ci0JCQkgKiBjb21tYSBpZiBvbmUgZXhpc3RzLgotCQkJICovCi0JCQlpZiAoKm9wdHMgPT0gJ1ww JykgewotCQkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogQ29uZiBzdHJpbmcgZW5kcyAiCi0J CQkJICAgICJ3aXRoIGNvbW1hXG4iKTsKLQkJCQloYWRfY29uZl9lcnJvciA9IHRydWU7Ci0JCQl9 Ci0JCQkqdmxlbl9wID0gKHVpbnRwdHJfdClvcHRzIC0gMSAtICh1aW50cHRyX3QpKnZfcDsKLQkJ CWFjY2VwdCA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSAnXDAnOgotCQkJKnZsZW5fcCA9ICh1 aW50cHRyX3Qpb3B0cyAtICh1aW50cHRyX3QpKnZfcDsKLQkJCWFjY2VwdCA9IHRydWU7Ci0JCQli cmVhazsKLQkJZGVmYXVsdDoKLQkJCW9wdHMrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JKm9w dHNfcCA9IG9wdHM7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZAotbWFsbG9jX2Fi b3J0X2ludmFsaWRfY29uZih2b2lkKSB7Ci0JYXNzZXJ0KG9wdF9hYm9ydF9jb25mKTsKLQltYWxs b2NfcHJpbnRmKCI8amVtYWxsb2M+OiBBYm9ydCAoYWJvcnRfY29uZjp0cnVlKSBvbiBpbnZhbGlk IGNvbmYgIgotCSAgICAidmFsdWUgKHNlZSBhYm92ZSkuXG4iKTsKLQlhYm9ydCgpOwotfQotCi1z dGF0aWMgdm9pZAotbWFsbG9jX2NvbmZfZXJyb3IoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFy ICprLCBzaXplX3Qga2xlbiwgY29uc3QgY2hhciAqdiwKLSAgICBzaXplX3QgdmxlbikgewotCW1h bGxvY19wcmludGYoIjxqZW1hbGxvYz46ICVzOiAlLipzOiUuKnNcbiIsIG1zZywgKGludClrbGVu LCBrLAotCSAgICAoaW50KXZsZW4sIHYpOwotCS8qIElmIGFib3J0X2NvbmYgaXMgc2V0LCBlcnJv ciBvdXQgYWZ0ZXIgcHJvY2Vzc2luZyBhbGwgb3B0aW9ucy4gKi8KLQljb25zdCBjaGFyICpleHBl cmltZW50YWwgPSAiZXhwZXJpbWVudGFsXyI7Ci0JaWYgKHN0cm5jbXAoaywgZXhwZXJpbWVudGFs LCBzdHJsZW4oZXhwZXJpbWVudGFsKSkgPT0gMCkgewotCQkvKiBIb3dldmVyLCB0b2xlcmF0ZSBl eHBlcmltZW50YWwgZmVhdHVyZXMuICovCi0JCXJldHVybjsKLQl9Ci0JaGFkX2NvbmZfZXJyb3Ig PSB0cnVlOwotfQotCi1zdGF0aWMgdm9pZAotbWFsbG9jX3Nsb3dfZmxhZ19pbml0KHZvaWQpIHsK LQkvKgotCSAqIENvbWJpbmUgdGhlIHJ1bnRpbWUgb3B0aW9ucyBpbnRvIG1hbGxvY19zbG93IGZv ciBmYXN0IHBhdGguICBDYWxsZWQKLQkgKiBhZnRlciBwcm9jZXNzaW5nIGFsbCB0aGUgb3B0aW9u cy4KLQkgKi8KLQltYWxsb2Nfc2xvd19mbGFncyB8PSAob3B0X2p1bmtfYWxsb2MgPyBmbGFnX29w dF9qdW5rX2FsbG9jIDogMCkKLQkgICAgfCAob3B0X2p1bmtfZnJlZSA/IGZsYWdfb3B0X2p1bmtf ZnJlZSA6IDApCi0JICAgIHwgKG9wdF96ZXJvID8gZmxhZ19vcHRfemVybyA6IDApCi0JICAgIHwg KG9wdF91dHJhY2UgPyBmbGFnX29wdF91dHJhY2UgOiAwKQotCSAgICB8IChvcHRfeG1hbGxvYyA/ IGZsYWdfb3B0X3htYWxsb2MgOiAwKTsKLQotCW1hbGxvY19zbG93ID0gKG1hbGxvY19zbG93X2Zs YWdzICE9IDApOwotfQotCi0vKiBOdW1iZXIgb2Ygc291cmNlcyBmb3IgaW5pdGlhbGl6aW5nIG1h bGxvY19jb25mICovCi0jZGVmaW5lIE1BTExPQ19DT05GX05TT1VSQ0VTIDUKLQotc3RhdGljIGNv bnN0IGNoYXIgKgotb2J0YWluX21hbGxvY19jb25mKHVuc2lnbmVkIHdoaWNoX3NvdXJjZSwgY2hh ciBidWZbUEFUSF9NQVggKyAxXSkgewotCWlmIChjb25maWdfZGVidWcpIHsKLQkJc3RhdGljIHVu c2lnbmVkIHJlYWRfc291cmNlID0gMDsKLQkJLyoKLQkJICogRWFjaCBzb3VyY2Ugc2hvdWxkIG9u bHkgYmUgcmVhZCBvbmNlLCB0byBtaW5pbWl6ZSAjIG9mCi0JCSAqIHN5c2NhbGxzIG9uIGluaXQu Ci0JCSAqLwotCQlhc3NlcnQocmVhZF9zb3VyY2UrKyA9PSB3aGljaF9zb3VyY2UpOwotCX0KLQlh c3NlcnQod2hpY2hfc291cmNlIDwgTUFMTE9DX0NPTkZfTlNPVVJDRVMpOwotCi0JY29uc3QgY2hh ciAqcmV0OwotCXN3aXRjaCAod2hpY2hfc291cmNlKSB7Ci0JY2FzZSAwOgotCQlyZXQgPSBjb25m aWdfbWFsbG9jX2NvbmY7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJaWYgKGplX21hbGxvY19jb25m ICE9IE5VTEwpIHsKLQkJCS8qIFVzZSBvcHRpb25zIHRoYXQgd2VyZSBjb21waWxlZCBpbnRvIHRo ZSBwcm9ncmFtLiAqLwotCQkJcmV0ID0gamVfbWFsbG9jX2NvbmY7Ci0JCX0gZWxzZSB7Ci0JCQkv KiBObyBjb25maWd1cmF0aW9uIHNwZWNpZmllZC4gKi8KLQkJCXJldCA9IE5VTEw7Ci0JCX0KLQkJ YnJlYWs7Ci0JY2FzZSAyOiB7Ci0JCXNzaXplX3QgbGlua2xlbiA9IDA7Ci0jaWZuZGVmIF9XSU4z MgotCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKLQkJY29uc3QgY2hhciAqbGlua25hbWUgPQot IyAgaWZkZWYgSkVNQUxMT0NfUFJFRklYCi0JCSAgICAiL2V0Yy8iSkVNQUxMT0NfUFJFRklYIm1h bGxvYy5jb25mIgotIyAgZWxzZQotCQkgICAgIi9ldGMvbWFsbG9jLmNvbmYiCi0jICBlbmRpZgot CQkgICAgOwotCi0JCS8qCi0JCSAqIFRyeSB0byB1c2UgdGhlIGNvbnRlbnRzIG9mIHRoZSAiL2V0 Yy9tYWxsb2MuY29uZiIgc3ltYm9saWMKLQkJICogbGluaydzIG5hbWUuCi0JCSAqLwotI2lmbmRl ZiBKRU1BTExPQ19SRUFETElOS0FUCi0JCWxpbmtsZW4gPSByZWFkbGluayhsaW5rbmFtZSwgYnVm LCBQQVRIX01BWCk7Ci0jZWxzZQotCQlsaW5rbGVuID0gcmVhZGxpbmthdChBVF9GRENXRCwgbGlu a25hbWUsIGJ1ZiwgUEFUSF9NQVgpOwotI2VuZGlmCi0JCWlmIChsaW5rbGVuID09IC0xKSB7Ci0J CQkvKiBObyBjb25maWd1cmF0aW9uIHNwZWNpZmllZC4gKi8KLQkJCWxpbmtsZW4gPSAwOwotCQkJ LyogUmVzdG9yZSBlcnJuby4gKi8KLQkJCXNldF9lcnJubyhzYXZlZF9lcnJubyk7Ci0JCX0KLSNl bmRpZgotCQlidWZbbGlua2xlbl0gPSAnXDAnOwotCQlyZXQgPSBidWY7Ci0JCWJyZWFrOwotCX0g Y2FzZSAzOiB7Ci0JCWNvbnN0IGNoYXIgKmVudm5hbWUgPQotI2lmZGVmIEpFTUFMTE9DX1BSRUZJ WAotCQkgICAgSkVNQUxMT0NfQ1BSRUZJWCJNQUxMT0NfQ09ORiIKLSNlbHNlCi0JCSAgICAiTUFM TE9DX0NPTkYiCi0jZW5kaWYKLQkJICAgIDsKLQotCQlpZiAoKHJldCA9IGplbWFsbG9jX3NlY3Vy ZV9nZXRlbnYoZW52bmFtZSkpICE9IE5VTEwpIHsKLQkJCS8qCi0JCQkgKiBEbyBub3RoaW5nOyBv cHRzIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gdGhlIHZhbHVlCi0JCQkgKiBvZiB0aGUgTUFM TE9DX0NPTkYgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0JCQkgKi8KLQkJfSBlbHNlIHsKLQkJCS8q IE5vIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkLiAqLwotCQkJcmV0ID0gTlVMTDsKLQkJfQotCQli cmVhazsKLQl9IGNhc2UgNDogewotCQlyZXQgPSBqZV9tYWxsb2NfY29uZl8yX2NvbmZfaGFyZGVy OwotCQlicmVhazsKLQl9IGRlZmF1bHQ6Ci0JCW5vdF9yZWFjaGVkKCk7Ci0JCXJldCA9IE5VTEw7 Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tYWxsb2NfY29uZl9pbml0X2hl bHBlcihzY19kYXRhX3QgKnNjX2RhdGEsIHVuc2lnbmVkIGJpbl9zaGFyZF9zaXplc1tTQ19OQklO U10sCi0gICAgYm9vbCBpbml0aWFsX2NhbGwsIGNvbnN0IGNoYXIgKm9wdHNfY2FjaGVbTUFMTE9D X0NPTkZfTlNPVVJDRVNdLAotICAgIGNoYXIgYnVmW1BBVEhfTUFYICsgMV0pIHsKLQlzdGF0aWMg Y29uc3QgY2hhciAqb3B0c19leHBsYWluW01BTExPQ19DT05GX05TT1VSQ0VTXSA9IHsKLQkJInN0 cmluZyBzcGVjaWZpZWQgdmlhIC0td2l0aC1tYWxsb2MtY29uZiIsCi0JCSJzdHJpbmcgcG9pbnRl ZCB0byBieSB0aGUgZ2xvYmFsIHZhcmlhYmxlIG1hbGxvY19jb25mIiwKLQkJIlwibmFtZVwiIG9m IHRoZSBmaWxlIHJlZmVyZW5jZWQgYnkgdGhlIHN5bWJvbGljIGxpbmsgbmFtZWQgIgotCQkgICAg Ii9ldGMvbWFsbG9jLmNvbmYiLAotCQkidmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxl IE1BTExPQ19DT05GIiwKLQkJInN0cmluZyBwb2ludGVkIHRvIGJ5IHRoZSBnbG9iYWwgdmFyaWFi bGUgIgotCQkgICAgIm1hbGxvY19jb25mXzJfY29uZl9oYXJkZXIiLAotCX07Ci0JdW5zaWduZWQg aTsKLQljb25zdCBjaGFyICpvcHRzLCAqaywgKnY7Ci0Jc2l6ZV90IGtsZW4sIHZsZW47Ci0KLQlm b3IgKGkgPSAwOyBpIDwgTUFMTE9DX0NPTkZfTlNPVVJDRVM7IGkrKykgewotCQkvKiBHZXQgcnVu dGltZSBjb25maWd1cmF0aW9uLiAqLwotCQlpZiAoaW5pdGlhbF9jYWxsKSB7Ci0JCQlvcHRzX2Nh Y2hlW2ldID0gb2J0YWluX21hbGxvY19jb25mKGksIGJ1Zik7Ci0JCX0KLQkJb3B0cyA9IG9wdHNf Y2FjaGVbaV07Ci0JCWlmICghaW5pdGlhbF9jYWxsICYmIG9wdF9jb25maXJtX2NvbmYpIHsKLQkJ CW1hbGxvY19wcmludGYoCi0JCQkgICAgIjxqZW1hbGxvYz46IG1hbGxvY19jb25mICMldSAoJXMp OiBcIiVzXCJcbiIsCi0JCQkgICAgaSArIDEsIG9wdHNfZXhwbGFpbltpXSwgb3B0cyAhPSBOVUxM ID8gb3B0cyA6ICIiKTsKLQkJfQotCQlpZiAob3B0cyA9PSBOVUxMKSB7Ci0JCQljb250aW51ZTsK LQkJfQotCi0JCXdoaWxlICgqb3B0cyAhPSAnXDAnICYmICFtYWxsb2NfY29uZl9uZXh0KCZvcHRz LCAmaywgJmtsZW4sICZ2LAotCQkgICAgJnZsZW4pKSB7Ci0KLSNkZWZpbmUgQ09ORl9FUlJPUiht c2csIGssIGtsZW4sIHYsIHZsZW4pCQkJCVwKLQkJCWlmICghaW5pdGlhbF9jYWxsKSB7CQkJCVwK LQkJCQltYWxsb2NfY29uZl9lcnJvcigJCQlcCi0JCQkJICAgIG1zZywgaywga2xlbiwgdiwgdmxl bik7CQlcCi0JCQkJY3VyX29wdF92YWxpZCA9IGZhbHNlOwkJCVwKLQkJCX0KLSNkZWZpbmUgQ09O Rl9DT05USU5VRQl7CQkJCQkJXAotCQkJCWlmICghaW5pdGlhbF9jYWxsICYmIG9wdF9jb25maXJt X2NvbmYJXAotCQkJCSAgICAmJiBjdXJfb3B0X3ZhbGlkKSB7CQkJXAotCQkJCQltYWxsb2NfcHJp bnRmKCI8amVtYWxsb2M+OiAtLSAiCVwKLQkJCQkJICAgICJTZXQgY29uZiB2YWx1ZTogJS4qczol LipzIglcCi0JCQkJCSAgICAiXG4iLCAoaW50KWtsZW4sIGssCQlcCi0JCQkJCSAgICAoaW50KXZs ZW4sIHYpOwkJXAotCQkJCX0JCQkJCVwKLQkJCQljb250aW51ZTsJCQkJXAotCQkJfQotI2RlZmlu ZSBDT05GX01BVENIKG4pCQkJCQkJCVwKLQkoc2l6ZW9mKG4pLTEgPT0ga2xlbiAmJiBzdHJuY21w KG4sIGssIGtsZW4pID09IDApCi0jZGVmaW5lIENPTkZfTUFUQ0hfVkFMVUUobikJCQkJCQlcCi0J KHNpemVvZihuKS0xID09IHZsZW4gJiYgc3RybmNtcChuLCB2LCB2bGVuKSA9PSAwKQotI2RlZmlu ZSBDT05GX0hBTkRMRV9CT09MKG8sIG4pCQkJCQkJXAotCQkJaWYgKENPTkZfTUFUQ0gobikpIHsJ CQkJXAotCQkJCWlmIChDT05GX01BVENIX1ZBTFVFKCJ0cnVlIikpIHsJCVwKLQkJCQkJbyA9IHRy dWU7CQkJXAotCQkJCX0gZWxzZSBpZiAoQ09ORl9NQVRDSF9WQUxVRSgiZmFsc2UiKSkgewlcCi0J CQkJCW8gPSBmYWxzZTsJCQlcCi0JCQkJfSBlbHNlIHsJCQkJXAotCQkJCQlDT05GX0VSUk9SKCJJ bnZhbGlkIGNvbmYgdmFsdWUiLFwKLQkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOwkJXAotCQkJ CX0JCQkJCVwKLQkJCQlDT05GX0NPTlRJTlVFOwkJCQlcCi0JCQl9Ci0gICAgICAvKgotICAgICAg ICogT25lIG9mIHRoZSBDT05GX01JTiBtYWNyb3MgYmVsb3cgZXhwYW5kcywgaW4gb25lIG9mIHRo ZSB1c2UgcG9pbnRzLAotICAgICAgICogdG8gInVuc2lnbmVkIGludGVnZXIgPCAwIiwgd2hpY2gg aXMgYWx3YXlzIGZhbHNlLCB0cmlnZ2VyaW5nIHRoZQotICAgICAgICogR0NDIC1XdHlwZS1saW1p dHMgd2FybmluZywgd2hpY2ggd2UgZGlzYWJsZSBoZXJlIGFuZCByZS1lbmFibGUgYmVsb3cuCi0g ICAgICAgKi8KLSAgICAgIEpFTUFMTE9DX0RJQUdOT1NUSUNfUFVTSAotICAgICAgSkVNQUxMT0Nf RElBR05PU1RJQ19JR05PUkVfVFlQRV9MSU1JVFMKLQotI2RlZmluZSBDT05GX0RPTlRfQ0hFQ0tf TUlOKHVtLCBtaW4pCWZhbHNlCi0jZGVmaW5lIENPTkZfQ0hFQ0tfTUlOKHVtLCBtaW4pCSgodW0p IDwgKG1pbikpCi0jZGVmaW5lIENPTkZfRE9OVF9DSEVDS19NQVgodW0sIG1heCkJZmFsc2UKLSNk ZWZpbmUgQ09ORl9DSEVDS19NQVgodW0sIG1heCkJKCh1bSkgPiAobWF4KSkKLQotI2RlZmluZSBD T05GX1ZBTFVFX1JFQUQobWF4X3QsIHJlc3VsdCkJCQkJCVwKLQkgICAgICBjaGFyICplbmQ7CQkJ CQkJXAotCSAgICAgIHNldF9lcnJubygwKTsJCQkJCQlcCi0JICAgICAgcmVzdWx0ID0gKG1heF90 KW1hbGxvY19zdHJ0b3VtYXgodiwgJmVuZCwgMCk7Ci0jZGVmaW5lIENPTkZfVkFMVUVfUkVBRF9G QUlMKCkJCQkJCQlcCi0JICAgICAgKGdldF9lcnJubygpICE9IDAgfHwgKHVpbnRwdHJfdCllbmQg LSAodWludHB0cl90KXYgIT0gdmxlbikKLQotI2RlZmluZSBDT05GX0hBTkRMRV9UKHQsIG1heF90 LCBvLCBuLCBtaW4sIG1heCwgY2hlY2tfbWluLCBjaGVja19tYXgsIGNsaXApIFwKLQkJCWlmIChD T05GX01BVENIKG4pKSB7CQkJCVwKLQkJCQltYXhfdCBtdjsJCQkJXAotCQkJCUNPTkZfVkFMVUVf UkVBRChtYXhfdCwgbXYpCQlcCi0JCQkJaWYgKENPTkZfVkFMVUVfUkVBRF9GQUlMKCkpIHsJCVwK LQkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25mIHZhbHVlIixcCi0JCQkJCSAgICBrLCBrbGVu LCB2LCB2bGVuKTsJCVwKLQkJCQl9IGVsc2UgaWYgKGNsaXApIHsJCQlcCi0JCQkJCWlmIChjaGVj a19taW4obXYsICh0KShtaW4pKSkgewlcCi0JCQkJCQlvID0gKHQpKG1pbik7CQlcCi0JCQkJCX0g ZWxzZSBpZiAoCQkJXAotCQkJCQkgICAgY2hlY2tfbWF4KG12LCAodCkobWF4KSkpIHsJXAotCQkJ CQkJbyA9ICh0KShtYXgpOwkJXAotCQkJCQl9IGVsc2UgewkJCVwKLQkJCQkJCW8gPSAodCltdjsJ CVwKLQkJCQkJfQkJCQlcCi0JCQkJfSBlbHNlIHsJCQkJXAotCQkJCQlpZiAoY2hlY2tfbWluKG12 LCAodCkobWluKSkgfHwJXAotCQkJCQkgICAgY2hlY2tfbWF4KG12LCAodCkobWF4KSkpIHsJXAot CQkJCQkJQ09ORl9FUlJPUigJCVwKLQkJCQkJCSAgICAiT3V0LW9mLXJhbmdlICIJXAotCQkJCQkJ ICAgICJjb25mIHZhbHVlIiwJXAotCQkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOwlcCi0JCQkJ CX0gZWxzZSB7CQkJXAotCQkJCQkJbyA9ICh0KW12OwkJXAotCQkJCQl9CQkJCVwKLQkJCQl9CQkJ CQlcCi0JCQkJQ09ORl9DT05USU5VRTsJCQkJXAotCQkJfQotI2RlZmluZSBDT05GX0hBTkRMRV9U X1UodCwgbywgbiwgbWluLCBtYXgsIGNoZWNrX21pbiwgY2hlY2tfbWF4LCBjbGlwKQlcCi0JICAg ICAgQ09ORl9IQU5ETEVfVCh0LCB1aW50bWF4X3QsIG8sIG4sIG1pbiwgbWF4LCBjaGVja19taW4s CVwKLQkJCSAgICBjaGVja19tYXgsIGNsaXApCi0jZGVmaW5lIENPTkZfSEFORExFX1RfU0lHTkVE KHQsIG8sIG4sIG1pbiwgbWF4LCBjaGVja19taW4sIGNoZWNrX21heCwgY2xpcClcCi0JICAgICAg Q09ORl9IQU5ETEVfVCh0LCBpbnRtYXhfdCwgbywgbiwgbWluLCBtYXgsIGNoZWNrX21pbiwJXAot CQkJICAgIGNoZWNrX21heCwgY2xpcCkKLQotI2RlZmluZSBDT05GX0hBTkRMRV9VTlNJR05FRChv LCBuLCBtaW4sIG1heCwgY2hlY2tfbWluLCBjaGVja19tYXgsCVwKLSAgICBjbGlwKQkJCQkJCQkJ XAotCQkJQ09ORl9IQU5ETEVfVF9VKHVuc2lnbmVkLCBvLCBuLCBtaW4sIG1heCwJXAotCQkJICAg IGNoZWNrX21pbiwgY2hlY2tfbWF4LCBjbGlwKQotI2RlZmluZSBDT05GX0hBTkRMRV9TSVpFX1Qo bywgbiwgbWluLCBtYXgsIGNoZWNrX21pbiwgY2hlY2tfbWF4LCBjbGlwKQlcCi0JCQlDT05GX0hB TkRMRV9UX1Uoc2l6ZV90LCBvLCBuLCBtaW4sIG1heCwJCVwKLQkJCSAgICBjaGVja19taW4sIGNo ZWNrX21heCwgY2xpcCkKLSNkZWZpbmUgQ09ORl9IQU5ETEVfSU5UNjRfVChvLCBuLCBtaW4sIG1h eCwgY2hlY2tfbWluLCBjaGVja19tYXgsIGNsaXApCVwKLQkJCUNPTkZfSEFORExFX1RfU0lHTkVE KGludDY0X3QsIG8sIG4sIG1pbiwgbWF4LAlcCi0JCQkgICAgY2hlY2tfbWluLCBjaGVja19tYXgs IGNsaXApCi0jZGVmaW5lIENPTkZfSEFORExFX1VJTlQ2NF9UKG8sIG4sIG1pbiwgbWF4LCBjaGVj a19taW4sIGNoZWNrX21heCwgY2xpcClcCi0JCQlDT05GX0hBTkRMRV9UX1UodWludDY0X3QsIG8s IG4sIG1pbiwgbWF4LAlcCi0JCQkgICAgY2hlY2tfbWluLCBjaGVja19tYXgsIGNsaXApCi0jZGVm aW5lIENPTkZfSEFORExFX1NTSVpFX1QobywgbiwgbWluLCBtYXgpCQkJCVwKLQkJCUNPTkZfSEFO RExFX1RfU0lHTkVEKHNzaXplX3QsIG8sIG4sIG1pbiwgbWF4LAlcCi0JCQkgICAgQ09ORl9DSEVD S19NSU4sIENPTkZfQ0hFQ0tfTUFYLCBmYWxzZSkKLSNkZWZpbmUgQ09ORl9IQU5ETEVfQ0hBUl9Q KG8sIG4sIGQpCQkJCQlcCi0JCQlpZiAoQ09ORl9NQVRDSChuKSkgewkJCQlcCi0JCQkJc2l6ZV90 IGNweWxlbiA9ICh2bGVuIDw9CQlcCi0JCQkJICAgIHNpemVvZihvKS0xKSA/IHZsZW4gOgkJXAot CQkJCSAgICBzaXplb2YobyktMTsJCQlcCi0JCQkJc3RybmNweShvLCB2LCBjcHlsZW4pOwkJCVwK LQkJCQlvW2NweWxlbl0gPSAnXDAnOwkJCVwKLQkJCQlDT05GX0NPTlRJTlVFOwkJCQlcCi0JCQl9 Ci0KLQkJCWJvb2wgY3VyX29wdF92YWxpZCA9IHRydWU7Ci0KLQkJCUNPTkZfSEFORExFX0JPT0wo b3B0X2NvbmZpcm1fY29uZiwgImNvbmZpcm1fY29uZiIpCi0JCQlpZiAoaW5pdGlhbF9jYWxsKSB7 Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCUNPTkZfSEFORExFX0JPT0wob3B0X2Fib3J0LCAi YWJvcnQiKQotCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfYWJvcnRfY29uZiwgImFib3J0X2NvbmYi KQotCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfdHJ1c3RfbWFkdmlzZSwgInRydXN0X21hZHZpc2Ui KQotCQkJaWYgKHN0cm5jbXAoIm1ldGFkYXRhX3RocCIsIGssIGtsZW4pID09IDApIHsKLQkJCQlp bnQgbTsKLQkJCQlib29sIG1hdGNoID0gZmFsc2U7Ci0JCQkJZm9yIChtID0gMDsgbSA8IG1ldGFk YXRhX3RocF9tb2RlX2xpbWl0OyBtKyspIHsKLQkJCQkJaWYgKHN0cm5jbXAobWV0YWRhdGFfdGhw X21vZGVfbmFtZXNbbV0sCi0JCQkJCSAgICB2LCB2bGVuKSA9PSAwKSB7Ci0JCQkJCQlvcHRfbWV0 YWRhdGFfdGhwID0gbTsKLQkJCQkJCW1hdGNoID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9 Ci0JCQkJfQotCQkJCWlmICghbWF0Y2gpIHsKLQkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25m IHZhbHVlIiwKLQkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOwotCQkJCX0KLQkJCQlDT05GX0NP TlRJTlVFOwotCQkJfQotCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfcmV0YWluLCAicmV0YWluIikK LQkJCWlmIChzdHJuY21wKCJkc3MiLCBrLCBrbGVuKSA9PSAwKSB7Ci0JCQkJaW50IG07Ci0JCQkJ Ym9vbCBtYXRjaCA9IGZhbHNlOwotCQkJCWZvciAobSA9IDA7IG0gPCBkc3NfcHJlY19saW1pdDsg bSsrKSB7Ci0JCQkJCWlmIChzdHJuY21wKGRzc19wcmVjX25hbWVzW21dLCB2LCB2bGVuKQotCQkJ CQkgICAgPT0gMCkgewotCQkJCQkJaWYgKGV4dGVudF9kc3NfcHJlY19zZXQobSkpIHsKLQkJCQkJ CQlDT05GX0VSUk9SKAotCQkJCQkJCSAgICAiRXJyb3Igc2V0dGluZyBkc3MiLAotCQkJCQkJCSAg ICBrLCBrbGVuLCB2LCB2bGVuKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJb3B0X2RzcyA9Ci0J CQkJCQkJICAgIGRzc19wcmVjX25hbWVzW21dOwotCQkJCQkJCW1hdGNoID0gdHJ1ZTsKLQkJCQkJ CQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoIW1hdGNoKSB7Ci0JCQkJ CUNPTkZfRVJST1IoIkludmFsaWQgY29uZiB2YWx1ZSIsCi0JCQkJCSAgICBrLCBrbGVuLCB2LCB2 bGVuKTsKLQkJCQl9Ci0JCQkJQ09ORl9DT05USU5VRTsKLQkJCX0KLQkJCWlmIChDT05GX01BVENI KCJuYXJlbmFzIikpIHsKLQkJCQlpZiAoQ09ORl9NQVRDSF9WQUxVRSgiZGVmYXVsdCIpKSB7Ci0J CQkJCW9wdF9uYXJlbmFzID0gMDsKLQkJCQkJQ09ORl9DT05USU5VRTsKLQkJCQl9IGVsc2Ugewot CQkJCQlDT05GX0hBTkRMRV9VTlNJR05FRChvcHRfbmFyZW5hcywKLQkJCQkJICAgICJuYXJlbmFz IiwgMSwgVUlOVF9NQVgsCi0JCQkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09ORl9ET05UX0NIRUNL X01BWCwKLQkJCQkJICAgIC8qIGNsaXAgKi8gZmFsc2UpCi0JCQkJfQotCQkJfQotCQkJaWYgKENP TkZfTUFUQ0goIm5hcmVuYXNfcmF0aW8iKSkgewotCQkJCWNoYXIgKmVuZDsKLQkJCQlib29sIGVy ciA9IGZ4cF9wYXJzZSgmb3B0X25hcmVuYXNfcmF0aW8sIHYsCi0JCQkJICAgICZlbmQpOwotCQkJ CWlmIChlcnIgfHwgKHNpemVfdCkoZW5kIC0gdikgIT0gdmxlbikgewotCQkJCQlDT05GX0VSUk9S KCJJbnZhbGlkIGNvbmYgdmFsdWUiLAotCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7Ci0JCQkJ fQotCQkJCUNPTkZfQ09OVElOVUU7Ci0JCQl9Ci0JCQlpZiAoQ09ORl9NQVRDSCgiYmluX3NoYXJk cyIpKSB7Ci0JCQkJY29uc3QgY2hhciAqYmluX3NoYXJkc19zZWdtZW50X2N1ciA9IHY7Ci0JCQkJ c2l6ZV90IHZsZW5fbGVmdCA9IHZsZW47Ci0JCQkJZG8gewotCQkJCQlzaXplX3Qgc2l6ZV9zdGFy dDsKLQkJCQkJc2l6ZV90IHNpemVfZW5kOwotCQkJCQlzaXplX3QgbnNoYXJkczsKLQkJCQkJYm9v bCBlcnIgPSBtYWxsb2NfY29uZl9tdWx0aV9zaXplc19uZXh0KAotCQkJCQkgICAgJmJpbl9zaGFy ZHNfc2VnbWVudF9jdXIsICZ2bGVuX2xlZnQsCi0JCQkJCSAgICAmc2l6ZV9zdGFydCwgJnNpemVf ZW5kLCAmbnNoYXJkcyk7Ci0JCQkJCWlmIChlcnIgfHwgYmluX3VwZGF0ZV9zaGFyZF9zaXplKAot CQkJCQkgICAgYmluX3NoYXJkX3NpemVzLCBzaXplX3N0YXJ0LAotCQkJCQkgICAgc2l6ZV9lbmQs IG5zaGFyZHMpKSB7Ci0JCQkJCQlDT05GX0VSUk9SKAotCQkJCQkJICAgICJJbnZhbGlkIHNldHRp bmdzIGZvciAiCi0JCQkJCQkgICAgImJpbl9zaGFyZHMiLCBrLCBrbGVuLCB2LAotCQkJCQkJICAg IHZsZW4pOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9IHdoaWxlICh2bGVuX2xlZnQgPiAw KTsKLQkJCQlDT05GX0NPTlRJTlVFOwotCQkJfQotCQkJQ09ORl9IQU5ETEVfSU5UNjRfVChvcHRf bXV0ZXhfbWF4X3NwaW4sCi0JCQkgICAgIm11dGV4X21heF9zcGluIiwgLTEsIElOVDY0X01BWCwg Q09ORl9DSEVDS19NSU4sCi0JCQkgICAgQ09ORl9ET05UX0NIRUNLX01BWCwgZmFsc2UpOwotCQkJ Q09ORl9IQU5ETEVfU1NJWkVfVChvcHRfZGlydHlfZGVjYXlfbXMsCi0JCQkgICAgImRpcnR5X2Rl Y2F5X21zIiwgLTEsIE5TVElNRV9TRUNfTUFYICogS1FVKDEwMDApIDwKLQkJCSAgICBRVShTU0la RV9NQVgpID8gTlNUSU1FX1NFQ19NQVggKiBLUVUoMTAwMCkgOgotCQkJICAgIFNTSVpFX01BWCk7 Ci0JCQlDT05GX0hBTkRMRV9TU0laRV9UKG9wdF9tdXp6eV9kZWNheV9tcywKLQkJCSAgICAibXV6 enlfZGVjYXlfbXMiLCAtMSwgTlNUSU1FX1NFQ19NQVggKiBLUVUoMTAwMCkgPAotCQkJICAgIFFV KFNTSVpFX01BWCkgPyBOU1RJTUVfU0VDX01BWCAqIEtRVSgxMDAwKSA6Ci0JCQkgICAgU1NJWkVf TUFYKTsKLQkJCUNPTkZfSEFORExFX0JPT0wob3B0X3N0YXRzX3ByaW50LCAic3RhdHNfcHJpbnQi KQotCQkJaWYgKENPTkZfTUFUQ0goInN0YXRzX3ByaW50X29wdHMiKSkgewotCQkJCWluaXRfb3B0 X3N0YXRzX29wdHModiwgdmxlbiwKLQkJCQkgICAgb3B0X3N0YXRzX3ByaW50X29wdHMpOwotCQkJ CUNPTkZfQ09OVElOVUU7Ci0JCQl9Ci0JCQlDT05GX0hBTkRMRV9JTlQ2NF9UKG9wdF9zdGF0c19p bnRlcnZhbCwKLQkJCSAgICAic3RhdHNfaW50ZXJ2YWwiLCAtMSwgSU5UNjRfTUFYLAotCQkJICAg IENPTkZfQ0hFQ0tfTUlOLCBDT05GX0RPTlRfQ0hFQ0tfTUFYLCBmYWxzZSkKLQkJCWlmIChDT05G X01BVENIKCJzdGF0c19pbnRlcnZhbF9vcHRzIikpIHsKLQkJCQlpbml0X29wdF9zdGF0c19vcHRz KHYsIHZsZW4sCi0JCQkJICAgIG9wdF9zdGF0c19pbnRlcnZhbF9vcHRzKTsKLQkJCQlDT05GX0NP TlRJTlVFOwotCQkJfQotCQkJaWYgKGNvbmZpZ19maWxsKSB7Ci0JCQkJaWYgKENPTkZfTUFUQ0go Imp1bmsiKSkgewotCQkJCQlpZiAoQ09ORl9NQVRDSF9WQUxVRSgidHJ1ZSIpKSB7Ci0JCQkJCQlv cHRfanVuayA9ICJ0cnVlIjsKLQkJCQkJCW9wdF9qdW5rX2FsbG9jID0gb3B0X2p1bmtfZnJlZSA9 Ci0JCQkJCQkgICAgdHJ1ZTsKLQkJCQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVFKCJmYWxz ZSIpKSB7Ci0JCQkJCQlvcHRfanVuayA9ICJmYWxzZSI7Ci0JCQkJCQlvcHRfanVua19hbGxvYyA9 IG9wdF9qdW5rX2ZyZWUgPQotCQkJCQkJICAgIGZhbHNlOwotCQkJCQl9IGVsc2UgaWYgKENPTkZf TUFUQ0hfVkFMVUUoImFsbG9jIikpIHsKLQkJCQkJCW9wdF9qdW5rID0gImFsbG9jIjsKLQkJCQkJ CW9wdF9qdW5rX2FsbG9jID0gdHJ1ZTsKLQkJCQkJCW9wdF9qdW5rX2ZyZWUgPSBmYWxzZTsKLQkJ CQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVFKCJmcmVlIikpIHsKLQkJCQkJCW9wdF9qdW5r ID0gImZyZWUiOwotCQkJCQkJb3B0X2p1bmtfYWxsb2MgPSBmYWxzZTsKLQkJCQkJCW9wdF9qdW5r X2ZyZWUgPSB0cnVlOwotCQkJCQl9IGVsc2UgewotCQkJCQkJQ09ORl9FUlJPUigKLQkJCQkJCSAg ICAiSW52YWxpZCBjb25mIHZhbHVlIiwKLQkJCQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKLQkJ CQkJfQotCQkJCQlDT05GX0NPTlRJTlVFOwotCQkJCX0KLQkJCQlDT05GX0hBTkRMRV9CT09MKG9w dF96ZXJvLCAiemVybyIpCi0JCQl9Ci0JCQlpZiAoY29uZmlnX3V0cmFjZSkgewotCQkJCUNPTkZf SEFORExFX0JPT0wob3B0X3V0cmFjZSwgInV0cmFjZSIpCi0JCQl9Ci0JCQlpZiAoY29uZmlnX3ht YWxsb2MpIHsKLQkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF94bWFsbG9jLCAieG1hbGxvYyIpCi0J CQl9Ci0JCQlpZiAoY29uZmlnX2VuYWJsZV9jeHgpIHsKLQkJCQlDT05GX0hBTkRMRV9CT09MKAot CQkJCSAgICBvcHRfZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3LAotCQkJCSAgICAiZXhwZXJp bWVudGFsX2luZmFsbGlibGVfbmV3IikKLQkJCX0KLQotCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRf dGNhY2hlLCAidGNhY2hlIikKLQkJCUNPTkZfSEFORExFX1NJWkVfVChvcHRfdGNhY2hlX21heCwg InRjYWNoZV9tYXgiLAotCQkJICAgIDAsIFRDQUNIRV9NQVhDTEFTU19MSU1JVCwgQ09ORl9ET05U X0NIRUNLX01JTiwKLQkJCSAgICBDT05GX0NIRUNLX01BWCwgLyogY2xpcCAqLyB0cnVlKQotCQkJ aWYgKENPTkZfTUFUQ0goImxnX3RjYWNoZV9tYXgiKSkgewotCQkJCXNpemVfdCBtOwotCQkJCUNP TkZfVkFMVUVfUkVBRChzaXplX3QsIG0pCi0JCQkJaWYgKENPTkZfVkFMVUVfUkVBRF9GQUlMKCkp IHsKLQkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25mIHZhbHVlIiwKLQkJCQkJICAgIGssIGts ZW4sIHYsIHZsZW4pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIGNsaXAgaWYgbmVjZXNzYXJ5ICov Ci0JCQkJCWlmIChtID4gVENBQ0hFX0xHX01BWENMQVNTX0xJTUlUKSB7Ci0JCQkJCQltID0gVENB Q0hFX0xHX01BWENMQVNTX0xJTUlUOwotCQkJCQl9Ci0JCQkJCW9wdF90Y2FjaGVfbWF4ID0gKHNp emVfdCkxIDw8IG07Ci0JCQkJfQotCQkJCUNPTkZfQ09OVElOVUU7Ci0JCQl9Ci0JCQkvKgotCQkJ ICogQW55b25lIHRyeWluZyB0byBzZXQgYSB2YWx1ZSBvdXRzaWRlIC0xNiB0byAxNiBpcwotCQkJ ICogZGVlcGx5IGNvbmZ1c2VkLgotCQkJICovCi0JCQlDT05GX0hBTkRMRV9TU0laRV9UKG9wdF9s Z190Y2FjaGVfbnNsb3RzX211bCwKLQkJCSAgICAibGdfdGNhY2hlX25zbG90c19tdWwiLCAtMTYs IDE2KQotCQkJLyogRGl0dG8gd2l0aCB2YWx1ZXMgcGFzdCAyMDQ4LiAqLwotCQkJQ09ORl9IQU5E TEVfVU5TSUdORUQob3B0X3RjYWNoZV9uc2xvdHNfc21hbGxfbWluLAotCQkJICAgICJ0Y2FjaGVf bnNsb3RzX3NtYWxsX21pbiIsIDEsIDIwNDgsCi0JCQkgICAgQ09ORl9DSEVDS19NSU4sIENPTkZf Q0hFQ0tfTUFYLCAvKiBjbGlwICovIHRydWUpCi0JCQlDT05GX0hBTkRMRV9VTlNJR05FRChvcHRf dGNhY2hlX25zbG90c19zbWFsbF9tYXgsCi0JCQkgICAgInRjYWNoZV9uc2xvdHNfc21hbGxfbWF4 IiwgMSwgMjA0OCwKLQkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09ORl9DSEVDS19NQVgsIC8qIGNs aXAgKi8gdHJ1ZSkKLQkJCUNPTkZfSEFORExFX1VOU0lHTkVEKG9wdF90Y2FjaGVfbnNsb3RzX2xh cmdlLAotCQkJICAgICJ0Y2FjaGVfbnNsb3RzX2xhcmdlIiwgMSwgMjA0OCwKLQkJCSAgICBDT05G X0NIRUNLX01JTiwgQ09ORl9DSEVDS19NQVgsIC8qIGNsaXAgKi8gdHJ1ZSkKLQkJCUNPTkZfSEFO RExFX1NJWkVfVChvcHRfdGNhY2hlX2djX2luY3JfYnl0ZXMsCi0JCQkgICAgInRjYWNoZV9nY19p bmNyX2J5dGVzIiwgMTAyNCwgU0laRV9UX01BWCwKLQkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09O Rl9ET05UX0NIRUNLX01BWCwKLQkJCSAgICAvKiBjbGlwICovIHRydWUpCi0JCQlDT05GX0hBTkRM RV9TSVpFX1Qob3B0X3RjYWNoZV9nY19kZWxheV9ieXRlcywKLQkJCSAgICAidGNhY2hlX2djX2Rl bGF5X2J5dGVzIiwgMCwgU0laRV9UX01BWCwKLQkJCSAgICBDT05GX0RPTlRfQ0hFQ0tfTUlOLCBD T05GX0RPTlRfQ0hFQ0tfTUFYLAotCQkJICAgIC8qIGNsaXAgKi8gZmFsc2UpCi0JCQlDT05GX0hB TkRMRV9VTlNJR05FRChvcHRfbGdfdGNhY2hlX2ZsdXNoX3NtYWxsX2RpdiwKLQkJCSAgICAibGdf dGNhY2hlX2ZsdXNoX3NtYWxsX2RpdiIsIDEsIDE2LAotCQkJICAgIENPTkZfQ0hFQ0tfTUlOLCBD T05GX0NIRUNLX01BWCwgLyogY2xpcCAqLyB0cnVlKQotCQkJQ09ORl9IQU5ETEVfVU5TSUdORUQo b3B0X2xnX3RjYWNoZV9mbHVzaF9sYXJnZV9kaXYsCi0JCQkgICAgImxnX3RjYWNoZV9mbHVzaF9s YXJnZV9kaXYiLCAxLCAxNiwKLQkJCSAgICBDT05GX0NIRUNLX01JTiwgQ09ORl9DSEVDS19NQVgs IC8qIGNsaXAgKi8gdHJ1ZSkKLQotCQkJLyoKLQkJCSAqIFRoZSBydW50aW1lIG9wdGlvbiBvZiBv dmVyc2l6ZV90aHJlc2hvbGQgcmVtYWlucwotCQkJICogdW5kb2N1bWVudGVkLiAgSXQgbWF5IGJl IHR3ZWFrZWQgaW4gdGhlIG5leHQgbWFqb3IKLQkJCSAqIHJlbGVhc2UgKDYuMCkuICBUaGUgZGVm YXVsdCB2YWx1ZSA4TSBpcyByYXRoZXIKLQkJCSAqIGNvbnNlcnZhdGl2ZSAvIHNhZmUuICBUdW5p bmcgaXQgZnVydGhlciBkb3duIG1heQotCQkJICogaW1wcm92ZSBmcmFnbWVudGF0aW9uIGEgYml0 IG1vcmUsIGJ1dCBtYXkgYWxzbyBjYXVzZQotCQkJICogY29udGVudGlvbiBvbiB0aGUgaHVnZSBh cmVuYS4KLQkJCSAqLwotCQkJQ09ORl9IQU5ETEVfU0laRV9UKG9wdF9vdmVyc2l6ZV90aHJlc2hv bGQsCi0JCQkgICAgIm92ZXJzaXplX3RocmVzaG9sZCIsIDAsIFNDX0xBUkdFX01BWENMQVNTLAot CQkJICAgIENPTkZfRE9OVF9DSEVDS19NSU4sIENPTkZfQ0hFQ0tfTUFYLCBmYWxzZSkKLQkJCUNP TkZfSEFORExFX1NJWkVfVChvcHRfbGdfZXh0ZW50X21heF9hY3RpdmVfZml0LAotCQkJICAgICJs Z19leHRlbnRfbWF4X2FjdGl2ZV9maXQiLCAwLAotCQkJICAgIChzaXplb2Yoc2l6ZV90KSA8PCAz KSwgQ09ORl9ET05UX0NIRUNLX01JTiwKLQkJCSAgICBDT05GX0NIRUNLX01BWCwgZmFsc2UpCi0K LQkJCWlmIChzdHJuY21wKCJwZXJjcHVfYXJlbmEiLCBrLCBrbGVuKSA9PSAwKSB7Ci0JCQkJYm9v bCBtYXRjaCA9IGZhbHNlOwotCQkJCWZvciAoaW50IG0gPSBwZXJjcHVfYXJlbmFfbW9kZV9uYW1l c19iYXNlOyBtIDwKLQkJCQkgICAgcGVyY3B1X2FyZW5hX21vZGVfbmFtZXNfbGltaXQ7IG0rKykg ewotCQkJCQlpZiAoc3RybmNtcChwZXJjcHVfYXJlbmFfbW9kZV9uYW1lc1ttXSwKLQkJCQkJICAg IHYsIHZsZW4pID09IDApIHsKLQkJCQkJCWlmICghaGF2ZV9wZXJjcHVfYXJlbmEpIHsKLQkJCQkJ CQlDT05GX0VSUk9SKAotCQkJCQkJCSAgICAiTm8gZ2V0Y3B1IHN1cHBvcnQiLAotCQkJCQkJCSAg ICBrLCBrbGVuLCB2LCB2bGVuKTsKLQkJCQkJCX0KLQkJCQkJCW9wdF9wZXJjcHVfYXJlbmEgPSBt OwotCQkJCQkJbWF0Y2ggPSB0cnVlOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJ aWYgKCFtYXRjaCkgewotCQkJCQlDT05GX0VSUk9SKCJJbnZhbGlkIGNvbmYgdmFsdWUiLAotCQkJ CQkgICAgaywga2xlbiwgdiwgdmxlbik7Ci0JCQkJfQotCQkJCUNPTkZfQ09OVElOVUU7Ci0JCQl9 Ci0JCQlDT05GX0hBTkRMRV9CT09MKG9wdF9iYWNrZ3JvdW5kX3RocmVhZCwKLQkJCSAgICAiYmFj a2dyb3VuZF90aHJlYWQiKTsKLQkJCUNPTkZfSEFORExFX1NJWkVfVChvcHRfbWF4X2JhY2tncm91 bmRfdGhyZWFkcywKLQkJCQkJICAgIm1heF9iYWNrZ3JvdW5kX3RocmVhZHMiLCAxLAotCQkJCQkg ICBvcHRfbWF4X2JhY2tncm91bmRfdGhyZWFkcywKLQkJCQkJICAgQ09ORl9DSEVDS19NSU4sIENP TkZfQ0hFQ0tfTUFYLAotCQkJCQkgICB0cnVlKTsKLQkJCUNPTkZfSEFORExFX0JPT0wob3B0X2hw YSwgImhwYSIpCi0JCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2hwYV9vcHRzLnNsYWJfbWF4X2Fs bG9jLAotCQkJICAgICJocGFfc2xhYl9tYXhfYWxsb2MiLCBQQUdFLCBIVUdFUEFHRSwKLQkJCSAg ICBDT05GX0NIRUNLX01JTiwgQ09ORl9DSEVDS19NQVgsIHRydWUpOwotCi0JCQkvKgotCQkJICog QWNjZXB0IGVpdGhlciBhIHJhdGlvLWJhc2VkIG9yIGFuIGV4YWN0IGh1Z2lmaWNhdGlvbgotCQkJ ICogdGhyZXNob2xkLgotCQkJICovCi0JCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2hwYV9vcHRz Lmh1Z2lmaWNhdGlvbl90aHJlc2hvbGQsCi0JCQkgICAgImhwYV9odWdpZmljYXRpb25fdGhyZXNo b2xkIiwgUEFHRSwgSFVHRVBBR0UsCi0JCQkgICAgQ09ORl9DSEVDS19NSU4sIENPTkZfQ0hFQ0tf TUFYLCB0cnVlKTsKLQkJCWlmIChDT05GX01BVENIKCJocGFfaHVnaWZpY2F0aW9uX3RocmVzaG9s ZF9yYXRpbyIpKSB7Ci0JCQkJZnhwX3QgcmF0aW87Ci0JCQkJY2hhciAqZW5kOwotCQkJCWJvb2wg ZXJyID0gZnhwX3BhcnNlKCZyYXRpbywgdiwKLQkJCQkgICAgJmVuZCk7Ci0JCQkJaWYgKGVyciB8 fCAoc2l6ZV90KShlbmQgLSB2KSAhPSB2bGVuCi0JCQkJICAgIHx8IHJhdGlvID4gRlhQX0lOSVRf SU5UKDEpKSB7Ci0JCQkJCUNPTkZfRVJST1IoIkludmFsaWQgY29uZiB2YWx1ZSIsCi0JCQkJCSAg ICBrLCBrbGVuLCB2LCB2bGVuKTsKLQkJCQl9IGVsc2UgewotCQkJCQlvcHRfaHBhX29wdHMuaHVn aWZpY2F0aW9uX3RocmVzaG9sZCA9Ci0JCQkJCSAgICBmeHBfbXVsX2ZyYWMoSFVHRVBBR0UsIHJh dGlvKTsKLQkJCQl9Ci0JCQkJQ09ORl9DT05USU5VRTsKLQkJCX0KLQotCQkJQ09ORl9IQU5ETEVf VUlOVDY0X1QoCi0JCQkgICAgb3B0X2hwYV9vcHRzLmh1Z2lmeV9kZWxheV9tcywgImhwYV9odWdp ZnlfZGVsYXlfbXMiLAotCQkJICAgIDAsIDAsIENPTkZfRE9OVF9DSEVDS19NSU4sIENPTkZfRE9O VF9DSEVDS19NQVgsCi0JCQkgICAgZmFsc2UpOwotCi0JCQlDT05GX0hBTkRMRV9VSU5UNjRfVCgK LQkJCSAgICBvcHRfaHBhX29wdHMubWluX3B1cmdlX2ludGVydmFsX21zLAotCQkJICAgICJocGFf bWluX3B1cmdlX2ludGVydmFsX21zIiwgMCwgMCwKLQkJCSAgICBDT05GX0RPTlRfQ0hFQ0tfTUlO LCBDT05GX0RPTlRfQ0hFQ0tfTUFYLCBmYWxzZSk7Ci0KLQkJCWlmIChDT05GX01BVENIKCJocGFf ZGlydHlfbXVsdCIpKSB7Ci0JCQkJaWYgKENPTkZfTUFUQ0hfVkFMVUUoIi0xIikpIHsKLQkJCQkJ b3B0X2hwYV9vcHRzLmRpcnR5X211bHQgPSAoZnhwX3QpLTE7Ci0JCQkJCUNPTkZfQ09OVElOVUU7 Ci0JCQkJfQotCQkJCWZ4cF90IHJhdGlvOwotCQkJCWNoYXIgKmVuZDsKLQkJCQlib29sIGVyciA9 IGZ4cF9wYXJzZSgmcmF0aW8sIHYsCi0JCQkJICAgICZlbmQpOwotCQkJCWlmIChlcnIgfHwgKHNp emVfdCkoZW5kIC0gdikgIT0gdmxlbikgewotCQkJCQlDT05GX0VSUk9SKCJJbnZhbGlkIGNvbmYg dmFsdWUiLAotCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ b3B0X2hwYV9vcHRzLmRpcnR5X211bHQgPSByYXRpbzsKLQkJCQl9Ci0JCQkJQ09ORl9DT05USU5V RTsKLQkJCX0KLQotCQkJQ09ORl9IQU5ETEVfU0laRV9UKG9wdF9ocGFfc2VjX29wdHMubnNoYXJk cywKLQkJCSAgICAiaHBhX3NlY19uc2hhcmRzIiwgMCwgMCwgQ09ORl9DSEVDS19NSU4sCi0JCQkg ICAgQ09ORl9ET05UX0NIRUNLX01BWCwgdHJ1ZSk7Ci0JCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0 X2hwYV9zZWNfb3B0cy5tYXhfYWxsb2MsCi0JCQkgICAgImhwYV9zZWNfbWF4X2FsbG9jIiwgUEFH RSwgMCwgQ09ORl9DSEVDS19NSU4sCi0JCQkgICAgQ09ORl9ET05UX0NIRUNLX01BWCwgdHJ1ZSk7 Ci0JCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2hwYV9zZWNfb3B0cy5tYXhfYnl0ZXMsCi0JCQkg ICAgImhwYV9zZWNfbWF4X2J5dGVzIiwgUEFHRSwgMCwgQ09ORl9DSEVDS19NSU4sCi0JCQkgICAg Q09ORl9ET05UX0NIRUNLX01BWCwgdHJ1ZSk7Ci0JCQlDT05GX0hBTkRMRV9TSVpFX1Qob3B0X2hw YV9zZWNfb3B0cy5ieXRlc19hZnRlcl9mbHVzaCwKLQkJCSAgICAiaHBhX3NlY19ieXRlc19hZnRl cl9mbHVzaCIsIFBBR0UsIDAsCi0JCQkgICAgQ09ORl9DSEVDS19NSU4sIENPTkZfRE9OVF9DSEVD S19NQVgsIHRydWUpOwotCQkJQ09ORl9IQU5ETEVfU0laRV9UKG9wdF9ocGFfc2VjX29wdHMuYmF0 Y2hfZmlsbF9leHRyYSwKLQkJCSAgICAiaHBhX3NlY19iYXRjaF9maWxsX2V4dHJhIiwgMCwgSFVH RVBBR0VfUEFHRVMsCi0JCQkgICAgQ09ORl9DSEVDS19NSU4sIENPTkZfQ0hFQ0tfTUFYLCB0cnVl KTsKLQotCQkJaWYgKENPTkZfTUFUQ0goInNsYWJfc2l6ZXMiKSkgewotCQkJCWlmIChDT05GX01B VENIX1ZBTFVFKCJkZWZhdWx0IikpIHsKLQkJCQkJc2NfZGF0YV9pbml0KHNjX2RhdGEpOwotCQkJ CQlDT05GX0NPTlRJTlVFOwotCQkJCX0KLQkJCQlib29sIGVycjsKLQkJCQljb25zdCBjaGFyICpz bGFiX3NpemVfc2VnbWVudF9jdXIgPSB2OwotCQkJCXNpemVfdCB2bGVuX2xlZnQgPSB2bGVuOwot CQkJCWRvIHsKLQkJCQkJc2l6ZV90IHNsYWJfc3RhcnQ7Ci0JCQkJCXNpemVfdCBzbGFiX2VuZDsK LQkJCQkJc2l6ZV90IHBnczsKLQkJCQkJZXJyID0gbWFsbG9jX2NvbmZfbXVsdGlfc2l6ZXNfbmV4 dCgKLQkJCQkJICAgICZzbGFiX3NpemVfc2VnbWVudF9jdXIsCi0JCQkJCSAgICAmdmxlbl9sZWZ0 LCAmc2xhYl9zdGFydCwgJnNsYWJfZW5kLAotCQkJCQkgICAgJnBncyk7Ci0JCQkJCWlmICghZXJy KSB7Ci0JCQkJCQlzY19kYXRhX3VwZGF0ZV9zbGFiX3NpemUoCi0JCQkJCQkgICAgc2NfZGF0YSwg c2xhYl9zdGFydCwKLQkJCQkJCSAgICBzbGFiX2VuZCwgKGludClwZ3MpOwotCQkJCQl9IGVsc2Ug ewotCQkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBzZXR0aW5ncyAiCi0JCQkJCQkgICAgImZvciBz bGFiX3NpemVzIiwKLQkJCQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKLQkJCQkJfQotCQkJCX0g d2hpbGUgKCFlcnIgJiYgdmxlbl9sZWZ0ID4gMCk7Ci0JCQkJQ09ORl9DT05USU5VRTsKLQkJCX0K LQkJCWlmIChjb25maWdfcHJvZikgewotCQkJCUNPTkZfSEFORExFX0JPT0wob3B0X3Byb2YsICJw cm9mIikKLQkJCQlDT05GX0hBTkRMRV9DSEFSX1Aob3B0X3Byb2ZfcHJlZml4LAotCQkJCSAgICAi cHJvZl9wcmVmaXgiLCAiamVwcm9mIikKLQkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF9wcm9mX2Fj dGl2ZSwgInByb2ZfYWN0aXZlIikKLQkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF9wcm9mX3RocmVh ZF9hY3RpdmVfaW5pdCwKLQkJCQkgICAgInByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0IikKLQkJCQlD T05GX0hBTkRMRV9TSVpFX1Qob3B0X2xnX3Byb2Zfc2FtcGxlLAotCQkJCSAgICAibGdfcHJvZl9z YW1wbGUiLCAwLCAoc2l6ZW9mKHVpbnQ2NF90KSA8PCAzKQotCQkJCSAgICAtIDEsIENPTkZfRE9O VF9DSEVDS19NSU4sIENPTkZfQ0hFQ0tfTUFYLAotCQkJCSAgICB0cnVlKQotCQkJCUNPTkZfSEFO RExFX0JPT0wob3B0X3Byb2ZfYWNjdW0sICJwcm9mX2FjY3VtIikKLQkJCQlDT05GX0hBTkRMRV9T U0laRV9UKG9wdF9sZ19wcm9mX2ludGVydmFsLAotCQkJCSAgICAibGdfcHJvZl9pbnRlcnZhbCIs IC0xLAotCQkJCSAgICAoc2l6ZW9mKHVpbnQ2NF90KSA8PCAzKSAtIDEpCi0JCQkJQ09ORl9IQU5E TEVfQk9PTChvcHRfcHJvZl9nZHVtcCwgInByb2ZfZ2R1bXAiKQotCQkJCUNPTkZfSEFORExFX0JP T0wob3B0X3Byb2ZfZmluYWwsICJwcm9mX2ZpbmFsIikKLQkJCQlDT05GX0hBTkRMRV9CT09MKG9w dF9wcm9mX2xlYWssICJwcm9mX2xlYWsiKQotCQkJCUNPTkZfSEFORExFX0JPT0wob3B0X3Byb2Zf bGVha19lcnJvciwKLQkJCQkgICAgInByb2ZfbGVha19lcnJvciIpCi0JCQkJQ09ORl9IQU5ETEVf Qk9PTChvcHRfcHJvZl9sb2csICJwcm9mX2xvZyIpCi0JCQkJQ09ORl9IQU5ETEVfU1NJWkVfVChv cHRfcHJvZl9yZWNlbnRfYWxsb2NfbWF4LAotCQkJCSAgICAicHJvZl9yZWNlbnRfYWxsb2NfbWF4 IiwgLTEsIFNTSVpFX01BWCkKLQkJCQlDT05GX0hBTkRMRV9CT09MKG9wdF9wcm9mX3N0YXRzLCAi cHJvZl9zdGF0cyIpCi0JCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfcHJvZl9zeXNfdGhyZWFkX25h bWUsCi0JCQkJICAgICJwcm9mX3N5c190aHJlYWRfbmFtZSIpCi0JCQkJaWYgKENPTkZfTUFUQ0go InByb2ZfdGltZV9yZXNvbHV0aW9uIikpIHsKLQkJCQkJaWYgKENPTkZfTUFUQ0hfVkFMVUUoImRl ZmF1bHQiKSkgewotCQkJCQkJb3B0X3Byb2ZfdGltZV9yZXMgPQotCQkJCQkJICAgIHByb2ZfdGlt ZV9yZXNfZGVmYXVsdDsKLQkJCQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVFKCJoaWdoIikp IHsKLQkJCQkJCWlmICghY29uZmlnX2hpZ2hfcmVzX3RpbWVyKSB7Ci0JCQkJCQkJQ09ORl9FUlJP UigKLQkJCQkJCQkgICAgIk5vIGhpZ2ggcmVzb2x1dGlvbiIKLQkJCQkJCQkgICAgIiB0aW1lciBz dXBwb3J0IiwKLQkJCQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7Ci0JCQkJCQl9IGVsc2Ugewot CQkJCQkJCW9wdF9wcm9mX3RpbWVfcmVzID0KLQkJCQkJCQkgICAgcHJvZl90aW1lX3Jlc19oaWdo OwotCQkJCQkJfQotCQkJCQl9IGVsc2UgewotCQkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25m IHZhbHVlIiwKLQkJCQkJCSAgICBrLCBrbGVuLCB2LCB2bGVuKTsKLQkJCQkJfQotCQkJCQlDT05G X0NPTlRJTlVFOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIFVuZG9jdW1lbnRlZC4gIFdoZW4gc2V0 IHRvIGZhbHNlLCBkb24ndAotCQkJCSAqIGNvcnJlY3QgZm9yIGFuIHVuYmlhc2luZyBidWcgaW4g amVwcm9mCi0JCQkJICogYXR0cmlidXRpb24uICBUaGlzIGNhbiBiZSBoYW5keSBpZiB5b3Ugd2Fu dAotCQkJCSAqIHRvIGdldCBjb25zaXN0ZW50IG51bWJlcnMgZnJvbSB5b3VyIGJpbmFyeQotCQkJ CSAqIGFjcm9zcyBkaWZmZXJlbnQgamVtYWxsb2MgdmVyc2lvbnMsIGV2ZW4gaWYKLQkJCQkgKiB0 aG9zZSBudW1iZXJzIGFyZSBpbmNvcnJlY3QuICBUaGUgZGVmYXVsdCBpcwotCQkJCSAqIHRydWUu Ci0JCQkJICovCi0JCQkJQ09ORl9IQU5ETEVfQk9PTChvcHRfcHJvZl91bmJpYXMsICJwcm9mX3Vu YmlhcyIpCi0JCQl9Ci0JCQlpZiAoY29uZmlnX2xvZykgewotCQkJCWlmIChDT05GX01BVENIKCJs b2ciKSkgewotCQkJCQlzaXplX3QgY3B5bGVuID0gKAotCQkJCQkgICAgdmxlbiA8PSBzaXplb2Yo bG9nX3Zhcl9uYW1lcykgPwotCQkJCQkgICAgdmxlbiA6IHNpemVvZihsb2dfdmFyX25hbWVzKSAt IDEpOwotCQkJCQlzdHJuY3B5KGxvZ192YXJfbmFtZXMsIHYsIGNweWxlbik7Ci0JCQkJCWxvZ192 YXJfbmFtZXNbY3B5bGVuXSA9ICdcMCc7Ci0JCQkJCUNPTkZfQ09OVElOVUU7Ci0JCQkJfQotCQkJ fQotCQkJaWYgKENPTkZfTUFUQ0goInRocCIpKSB7Ci0JCQkJYm9vbCBtYXRjaCA9IGZhbHNlOwot CQkJCWZvciAoaW50IG0gPSAwOyBtIDwgdGhwX21vZGVfbmFtZXNfbGltaXQ7IG0rKykgewotCQkJ CQlpZiAoc3RybmNtcCh0aHBfbW9kZV9uYW1lc1ttXSx2LCB2bGVuKQotCQkJCQkgICAgPT0gMCkg ewotCQkJCQkJaWYgKCFoYXZlX21hZHZpc2VfaHVnZSAmJiAhaGF2ZV9tZW1jbnRsKSB7Ci0JCQkJ CQkJQ09ORl9FUlJPUigKLQkJCQkJCQkgICAgIk5vIFRIUCBzdXBwb3J0IiwKLQkJCQkJCQkgICAg aywga2xlbiwgdiwgdmxlbik7Ci0JCQkJCQl9Ci0JCQkJCQlvcHRfdGhwID0gbTsKLQkJCQkJCW1h dGNoID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICghbWF0Y2gp IHsKLQkJCQkJQ09ORl9FUlJPUigiSW52YWxpZCBjb25mIHZhbHVlIiwKLQkJCQkJICAgIGssIGts ZW4sIHYsIHZsZW4pOwotCQkJCX0KLQkJCQlDT05GX0NPTlRJTlVFOwotCQkJfQotCQkJaWYgKENP TkZfTUFUQ0goInplcm9fcmVhbGxvYyIpKSB7Ci0JCQkJaWYgKENPTkZfTUFUQ0hfVkFMVUUoImFs bG9jIikpIHsKLQkJCQkJb3B0X3plcm9fcmVhbGxvY19hY3Rpb24KLQkJCQkJICAgID0gemVyb19y ZWFsbG9jX2FjdGlvbl9hbGxvYzsKLQkJCQl9IGVsc2UgaWYgKENPTkZfTUFUQ0hfVkFMVUUoImZy ZWUiKSkgewotCQkJCQlvcHRfemVyb19yZWFsbG9jX2FjdGlvbgotCQkJCQkgICAgPSB6ZXJvX3Jl YWxsb2NfYWN0aW9uX2ZyZWU7Ci0JCQkJfSBlbHNlIGlmIChDT05GX01BVENIX1ZBTFVFKCJhYm9y dCIpKSB7Ci0JCQkJCW9wdF96ZXJvX3JlYWxsb2NfYWN0aW9uCi0JCQkJCSAgICA9IHplcm9fcmVh bGxvY19hY3Rpb25fYWJvcnQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJQ09ORl9FUlJPUigiSW52YWxp ZCBjb25mIHZhbHVlIiwKLQkJCQkJICAgIGssIGtsZW4sIHYsIHZsZW4pOwotCQkJCX0KLQkJCQlD T05GX0NPTlRJTlVFOwotCQkJfQotCQkJaWYgKGNvbmZpZ191YWZfZGV0ZWN0aW9uICYmCi0JCQkg ICAgQ09ORl9NQVRDSCgibGdfc2FuX3VhZl9hbGlnbiIpKSB7Ci0JCQkJc3NpemVfdCBhOwotCQkJ CUNPTkZfVkFMVUVfUkVBRChzc2l6ZV90LCBhKQotCQkJCWlmIChDT05GX1ZBTFVFX1JFQURfRkFJ TCgpIHx8IGEgPCAtMSkgewotCQkJCQlDT05GX0VSUk9SKCJJbnZhbGlkIGNvbmYgdmFsdWUiLAot CQkJCQkgICAgaywga2xlbiwgdiwgdmxlbik7Ci0JCQkJfQotCQkJCWlmIChhID09IC0xKSB7Ci0J CQkJCW9wdF9sZ19zYW5fdWFmX2FsaWduID0gLTE7Ci0JCQkJCUNPTkZfQ09OVElOVUU7Ci0JCQkJ fQotCi0JCQkJLyogY2xpcCBpZiBuZWNlc3NhcnkgKi8KLQkJCQlzc2l6ZV90IG1heF9hbGxvd2Vk ID0gKHNpemVvZihzaXplX3QpIDw8IDMpIC0gMTsKLQkJCQlzc2l6ZV90IG1pbl9hbGxvd2VkID0g TEdfUEFHRTsKLQkJCQlpZiAoYSA+IG1heF9hbGxvd2VkKSB7Ci0JCQkJCWEgPSBtYXhfYWxsb3dl ZDsKLQkJCQl9IGVsc2UgaWYgKGEgPCBtaW5fYWxsb3dlZCkgewotCQkJCQlhID0gbWluX2FsbG93 ZWQ7Ci0JCQkJfQotCi0JCQkJb3B0X2xnX3Nhbl91YWZfYWxpZ24gPSBhOwotCQkJCUNPTkZfQ09O VElOVUU7Ci0JCQl9Ci0KLQkJCUNPTkZfSEFORExFX1NJWkVfVChvcHRfc2FuX2d1YXJkX3NtYWxs LAotCQkJICAgICJzYW5fZ3VhcmRfc21hbGwiLCAwLCBTSVpFX1RfTUFYLAotCQkJICAgIENPTkZf RE9OVF9DSEVDS19NSU4sIENPTkZfRE9OVF9DSEVDS19NQVgsIGZhbHNlKQotCQkJQ09ORl9IQU5E TEVfU0laRV9UKG9wdF9zYW5fZ3VhcmRfbGFyZ2UsCi0JCQkgICAgInNhbl9ndWFyZF9sYXJnZSIs IDAsIFNJWkVfVF9NQVgsCi0JCQkgICAgQ09ORl9ET05UX0NIRUNLX01JTiwgQ09ORl9ET05UX0NI RUNLX01BWCwgZmFsc2UpCi0KLQkJCUNPTkZfRVJST1IoIkludmFsaWQgY29uZiBwYWlyIiwgaywg a2xlbiwgdiwgdmxlbik7Ci0jdW5kZWYgQ09ORl9FUlJPUgotI3VuZGVmIENPTkZfQ09OVElOVUUK LSN1bmRlZiBDT05GX01BVENICi0jdW5kZWYgQ09ORl9NQVRDSF9WQUxVRQotI3VuZGVmIENPTkZf SEFORExFX0JPT0wKLSN1bmRlZiBDT05GX0RPTlRfQ0hFQ0tfTUlOCi0jdW5kZWYgQ09ORl9DSEVD S19NSU4KLSN1bmRlZiBDT05GX0RPTlRfQ0hFQ0tfTUFYCi0jdW5kZWYgQ09ORl9DSEVDS19NQVgK LSN1bmRlZiBDT05GX0hBTkRMRV9UCi0jdW5kZWYgQ09ORl9IQU5ETEVfVF9VCi0jdW5kZWYgQ09O Rl9IQU5ETEVfVF9TSUdORUQKLSN1bmRlZiBDT05GX0hBTkRMRV9VTlNJR05FRAotI3VuZGVmIENP TkZfSEFORExFX1NJWkVfVAotI3VuZGVmIENPTkZfSEFORExFX1NTSVpFX1QKLSN1bmRlZiBDT05G X0hBTkRMRV9DSEFSX1AKLSAgICAvKiBSZS1lbmFibGUgZGlhZ25vc3RpYyAiLVd0eXBlLWxpbWl0 cyIgKi8KLSAgICBKRU1BTExPQ19ESUFHTk9TVElDX1BPUAotCQl9Ci0JCWlmIChvcHRfYWJvcnRf Y29uZiAmJiBoYWRfY29uZl9lcnJvcikgewotCQkJbWFsbG9jX2Fib3J0X2ludmFsaWRfY29uZigp OwotCQl9Ci0JfQotCWF0b21pY19zdG9yZV9iKCZsb2dfaW5pdF9kb25lLCB0cnVlLCBBVE9NSUNf UkVMRUFTRSk7Ci19Ci0KLXN0YXRpYyBib29sCi1tYWxsb2NfY29uZl9pbml0X2NoZWNrX2RlcHMo dm9pZCkgewotCWlmIChvcHRfcHJvZl9sZWFrX2Vycm9yICYmICFvcHRfcHJvZl9maW5hbCkgewot CQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBwcm9mX2xlYWtfZXJyb3IgaXMgc2V0IHcvbyAi Ci0JCSAgICAicHJvZl9maW5hbC5cbiIpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4g ZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tYWxsb2NfY29uZl9pbml0KHNjX2RhdGFfdCAqc2Nf ZGF0YSwgdW5zaWduZWQgYmluX3NoYXJkX3NpemVzW1NDX05CSU5TXSkgewotCWNvbnN0IGNoYXIg Km9wdHNfY2FjaGVbTUFMTE9DX0NPTkZfTlNPVVJDRVNdID0ge05VTEwsIE5VTEwsIE5VTEwsIE5V TEwsCi0JCU5VTEx9OwotCWNoYXIgYnVmW1BBVEhfTUFYICsgMV07Ci0KLQkvKiBUaGUgZmlyc3Qg Y2FsbCBvbmx5IHNldCB0aGUgY29uZmlybV9jb25mIG9wdGlvbiBhbmQgb3B0c19jYWNoZSAqLwot CW1hbGxvY19jb25mX2luaXRfaGVscGVyKE5VTEwsIE5VTEwsIHRydWUsIG9wdHNfY2FjaGUsIGJ1 Zik7Ci0JbWFsbG9jX2NvbmZfaW5pdF9oZWxwZXIoc2NfZGF0YSwgYmluX3NoYXJkX3NpemVzLCBm YWxzZSwgb3B0c19jYWNoZSwKLQkgICAgTlVMTCk7Ci0JaWYgKG1hbGxvY19jb25mX2luaXRfY2hl Y2tfZGVwcygpKSB7Ci0JCS8qIGNoZWNrX2RlcHMgZG9lcyB3YXJuaW5nIG1zZyBvbmx5OyBhYm9y dCBiZWxvdyBpZiBuZWVkZWQuICovCi0JCWlmIChvcHRfYWJvcnRfY29uZikgewotCQkJbWFsbG9j X2Fib3J0X2ludmFsaWRfY29uZigpOwotCQl9Ci0JfQotfQotCi0jdW5kZWYgTUFMTE9DX0NPTkZf TlNPVVJDRVMKLQotc3RhdGljIGJvb2wKLW1hbGxvY19pbml0X2hhcmRfbmVlZGVkKHZvaWQpIHsK LQlpZiAobWFsbG9jX2luaXRpYWxpemVkKCkgfHwgKElTX0lOSVRJQUxJWkVSICYmIG1hbGxvY19p bml0X3N0YXRlID09Ci0JICAgIG1hbGxvY19pbml0X3JlY3Vyc2libGUpKSB7Ci0JCS8qCi0JCSAq IEFub3RoZXIgdGhyZWFkIGluaXRpYWxpemVkIHRoZSBhbGxvY2F0b3IgYmVmb3JlIHRoaXMgb25l Ci0JCSAqIGFjcXVpcmVkIGluaXRfbG9jaywgb3IgdGhpcyB0aHJlYWQgaXMgdGhlIGluaXRpYWxp emluZwotCQkgKiB0aHJlYWQsIGFuZCBpdCBpcyByZWN1cnNpdmVseSBhbGxvY2F0aW5nLgotCQkg Ki8KLQkJcmV0dXJuIGZhbHNlOwotCX0KLSNpZmRlZiBKRU1BTExPQ19USFJFQURFRF9JTklUCi0J aWYgKG1hbGxvY19pbml0aWFsaXplciAhPSBOT19JTklUSUFMSVpFUiAmJiAhSVNfSU5JVElBTEla RVIpIHsKLQkJLyogQnVzeS13YWl0IHVudGlsIHRoZSBpbml0aWFsaXppbmcgdGhyZWFkIGNvbXBs ZXRlcy4gKi8KLQkJc3Bpbl90IHNwaW5uZXIgPSBTUElOX0lOSVRJQUxJWkVSOwotCQlkbyB7Ci0J CQltYWxsb2NfbXV0ZXhfdW5sb2NrKFRTRE5fTlVMTCwgJmluaXRfbG9jayk7Ci0JCQlzcGluX2Fk YXB0aXZlKCZzcGlubmVyKTsKLQkJCW1hbGxvY19tdXRleF9sb2NrKFRTRE5fTlVMTCwgJmluaXRf bG9jayk7Ci0JCX0gd2hpbGUgKCFtYWxsb2NfaW5pdGlhbGl6ZWQoKSk7Ci0JCXJldHVybiBmYWxz ZTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wKLW1hbGxvY19p bml0X2hhcmRfYTBfbG9ja2VkKCkgewotCW1hbGxvY19pbml0aWFsaXplciA9IElOSVRJQUxJWkVS OwotCi0JSkVNQUxMT0NfRElBR05PU1RJQ19QVVNICi0JSkVNQUxMT0NfRElBR05PU1RJQ19JR05P UkVfTUlTU0lOR19TVFJVQ1RfRklFTERfSU5JVElBTElaRVJTCi0Jc2NfZGF0YV90IHNjX2RhdGEg PSB7MH07Ci0JSkVNQUxMT0NfRElBR05PU1RJQ19QT1AKLQotCS8qCi0JICogT3JkZXJpbmcgaGVy ZSBpcyBzb21ld2hhdCB0cmlja3k7IHdlIG5lZWQgc2NfYm9vdCgpIGZpcnN0LCBzaW5jZSB0aGF0 Ci0JICogZGV0ZXJtaW5lcyB3aGF0IHRoZSBzaXplIGNsYXNzZXMgd2lsbCBiZSwgYW5kIHRoZW4K LQkgKiBtYWxsb2NfY29uZl9pbml0KCksIHNpbmNlIGFueSBzbGFiIHNpemUgdHdlYWtpbmcgd2ls bCBuZWVkIHRvIGJlIGRvbmUKLQkgKiBiZWZvcmUgc3pfYm9vdCBhbmQgYmluX2luZm9fYm9vdCwg d2hpY2ggYXNzdW1lIHRoYXQgdGhlIHZhbHVlcyB0aGV5Ci0JICogcmVhZCBvdXQgb2Ygc2NfZGF0 YV9nbG9iYWwgYXJlIGZpbmFsLgotCSAqLwotCXNjX2Jvb3QoJnNjX2RhdGEpOwotCXVuc2lnbmVk IGJpbl9zaGFyZF9zaXplc1tTQ19OQklOU107Ci0JYmluX3NoYXJkX3NpemVzX2Jvb3QoYmluX3No YXJkX3NpemVzKTsKLQkvKgotCSAqIHByb2ZfYm9vdDAgb25seSBpbml0aWFsaXplcyBvcHRfcHJv Zl9wcmVmaXguICBXZSBuZWVkIHRvIGRvIGl0IGJlZm9yZQotCSAqIHdlIHBhcnNlIG1hbGxvY19j b25mIG9wdGlvbnMsIGluIGNhc2UgbWFsbG9jX2NvbmYgcGFyc2luZyBvdmVyd3JpdGVzCi0JICog aXQuCi0JICovCi0JaWYgKGNvbmZpZ19wcm9mKSB7Ci0JCXByb2ZfYm9vdDAoKTsKLQl9Ci0JbWFs bG9jX2NvbmZfaW5pdCgmc2NfZGF0YSwgYmluX3NoYXJkX3NpemVzKTsKLQlzYW5faW5pdChvcHRf bGdfc2FuX3VhZl9hbGlnbik7Ci0Jc3pfYm9vdCgmc2NfZGF0YSwgb3B0X2NhY2hlX29ibGl2aW91 cyk7Ci0JYmluX2luZm9fYm9vdCgmc2NfZGF0YSwgYmluX3NoYXJkX3NpemVzKTsKLQotCWlmIChv cHRfc3RhdHNfcHJpbnQpIHsKLQkJLyogUHJpbnQgc3RhdGlzdGljcyBhdCBleGl0LiAqLwotCQlp ZiAoYXRleGl0KHN0YXRzX3ByaW50X2F0ZXhpdCkgIT0gMCkgewotCQkJbWFsbG9jX3dyaXRlKCI8 amVtYWxsb2M+OiBFcnJvciBpbiBhdGV4aXQoKVxuIik7Ci0JCQlpZiAob3B0X2Fib3J0KSB7Ci0J CQkJYWJvcnQoKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChzdGF0c19ib290KCkpIHsKLQkJcmV0 dXJuIHRydWU7Ci0JfQotCWlmIChwYWdlc19ib290KCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQot CWlmIChiYXNlX2Jvb3QoVFNETl9OVUxMKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JLyogZW1h cF9nbG9iYWwgaXMgc3RhdGljLCBoZW5jZSB6ZXJvZWQuICovCi0JaWYgKGVtYXBfaW5pdCgmYXJl bmFfZW1hcF9nbG9iYWwsIGIwZ2V0KCksIC8qIHplcm9lZCAqLyB0cnVlKSkgewotCQlyZXR1cm4g dHJ1ZTsKLQl9Ci0JaWYgKGV4dGVudF9ib290KCkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlm IChjdGxfYm9vdCgpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlpZiAoY29uZmlnX3Byb2YpIHsK LQkJcHJvZl9ib290MSgpOwotCX0KLQlpZiAob3B0X2hwYSAmJiAhaHBhX3N1cHBvcnRlZCgpKSB7 Ci0JCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46IEhQQSBub3Qgc3VwcG9ydGVkIGluIHRoZSBj dXJyZW50ICIKLQkJICAgICJjb25maWd1cmF0aW9uOyAlcy4iLAotCQkgICAgb3B0X2Fib3J0X2Nv bmYgPyAiYWJvcnRpbmciIDogImRpc2FibGluZyIpOwotCQlpZiAob3B0X2Fib3J0X2NvbmYpIHsK LQkJCW1hbGxvY19hYm9ydF9pbnZhbGlkX2NvbmYoKTsKLQkJfSBlbHNlIHsKLQkJCW9wdF9ocGEg PSBmYWxzZTsKLQkJfQotCX0KLQlpZiAoYXJlbmFfYm9vdCgmc2NfZGF0YSwgYjBnZXQoKSwgb3B0 X2hwYSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmICh0Y2FjaGVfYm9vdChUU0ROX05VTEws IGIwZ2V0KCkpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlpZiAobWFsbG9jX211dGV4X2luaXQo JmFyZW5hc19sb2NrLCAiYXJlbmFzIiwgV0lUTkVTU19SQU5LX0FSRU5BUywKLQkgICAgbWFsbG9j X211dGV4X3JhbmtfZXhjbHVzaXZlKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JaG9va19ib290 KCk7Ci0JLyoKLQkgKiBDcmVhdGUgZW5vdWdoIHNjYWZmb2xkaW5nIHRvIGFsbG93IHJlY3Vyc2l2 ZSBhbGxvY2F0aW9uIGluCi0JICogbWFsbG9jX25jcHVzKCkuCi0JICovCi0JbmFyZW5hc19hdXRv ID0gMTsKLQltYW51YWxfYXJlbmFfYmFzZSA9IG5hcmVuYXNfYXV0byArIDE7Ci0JbWVtc2V0KGFy ZW5hcywgMCwgc2l6ZW9mKGFyZW5hX3QgKikgKiBuYXJlbmFzX2F1dG8pOwotCS8qCi0JICogSW5p dGlhbGl6ZSBvbmUgYXJlbmEgaGVyZS4gIFRoZSByZXN0IGFyZSBsYXppbHkgY3JlYXRlZCBpbgot CSAqIGFyZW5hX2Nob29zZV9oYXJkKCkuCi0JICovCi0JaWYgKGFyZW5hX2luaXQoVFNETl9OVUxM LCAwLCAmYXJlbmFfY29uZmlnX2RlZmF1bHQpID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0J fQotCWEwID0gYXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwgZmFsc2UpOwotCi0JaWYgKG9wdF9ocGEg JiYgIWhwYV9zdXBwb3J0ZWQoKSkgewotCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBIUEEg bm90IHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCAiCi0JCSAgICAiY29uZmlndXJhdGlvbjsgJXMu IiwKLQkJICAgIG9wdF9hYm9ydF9jb25mID8gImFib3J0aW5nIiA6ICJkaXNhYmxpbmciKTsKLQkJ aWYgKG9wdF9hYm9ydF9jb25mKSB7Ci0JCQltYWxsb2NfYWJvcnRfaW52YWxpZF9jb25mKCk7Ci0J CX0gZWxzZSB7Ci0JCQlvcHRfaHBhID0gZmFsc2U7Ci0JCX0KLQl9IGVsc2UgaWYgKG9wdF9ocGEp IHsKLQkJaHBhX3NoYXJkX29wdHNfdCBocGFfc2hhcmRfb3B0cyA9IG9wdF9ocGFfb3B0czsKLQkJ aHBhX3NoYXJkX29wdHMuZGVmZXJyYWxfYWxsb3dlZCA9IGJhY2tncm91bmRfdGhyZWFkX2VuYWJs ZWQoKTsKLQkJaWYgKHBhX3NoYXJkX2VuYWJsZV9ocGEoVFNETl9OVUxMLCAmYTAtPnBhX3NoYXJk LAotCQkgICAgJmhwYV9zaGFyZF9vcHRzLCAmb3B0X2hwYV9zZWNfb3B0cykpIHsKLQkJCXJldHVy biB0cnVlOwotCQl9Ci0JfQotCi0JbWFsbG9jX2luaXRfc3RhdGUgPSBtYWxsb2NfaW5pdF9hMF9p bml0aWFsaXplZDsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wKLW1hbGxvY19p bml0X2hhcmRfYTAodm9pZCkgewotCWJvb2wgcmV0OwotCi0JbWFsbG9jX211dGV4X2xvY2soVFNE Tl9OVUxMLCAmaW5pdF9sb2NrKTsKLQlyZXQgPSBtYWxsb2NfaW5pdF9oYXJkX2EwX2xvY2tlZCgp OwotCW1hbGxvY19tdXRleF91bmxvY2soVFNETl9OVUxMLCAmaW5pdF9sb2NrKTsKLQlyZXR1cm4g cmV0OwotfQotCi0vKiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyB3aGljaCBtYXkgdHJpZ2dl ciByZWN1cnNpdmUgYWxsb2NhdGlvbi4gKi8KLXN0YXRpYyBib29sCi1tYWxsb2NfaW5pdF9oYXJk X3JlY3Vyc2libGUodm9pZCkgewotCW1hbGxvY19pbml0X3N0YXRlID0gbWFsbG9jX2luaXRfcmVj dXJzaWJsZTsKLQotCW5jcHVzID0gbWFsbG9jX25jcHVzKCk7Ci0JaWYgKG9wdF9wZXJjcHVfYXJl bmEgIT0gcGVyY3B1X2FyZW5hX2Rpc2FibGVkKSB7Ci0JCWJvb2wgY3B1X2NvdW50X2lzX2RldGVy bWluaXN0aWMgPQotCQkgICAgbWFsbG9jX2NwdV9jb3VudF9pc19kZXRlcm1pbmlzdGljKCk7Ci0J CWlmICghY3B1X2NvdW50X2lzX2RldGVybWluaXN0aWMpIHsKLQkJCS8qCi0JCQkgKiBJZiAjIG9m IENQVSBpcyBub3QgZGV0ZXJtaW5pc3RpYywgYW5kIG5hcmVuYXMgbm90Ci0JCQkgKiBzcGVjaWZp ZWQsIGRpc2FibGVzIHBlciBjcHUgYXJlbmEgc2luY2UgaXQgbWF5IG5vdAotCQkJICogZGV0ZWN0 IENQVSBJRHMgcHJvcGVybHkuCi0JCQkgKi8KLQkJCWlmIChvcHRfbmFyZW5hcyA9PSAwKSB7Ci0J CQkJb3B0X3BlcmNwdV9hcmVuYSA9IHBlcmNwdV9hcmVuYV9kaXNhYmxlZDsKLQkJCQltYWxsb2Nf d3JpdGUoIjxqZW1hbGxvYz46IE51bWJlciBvZiBDUFVzICIKLQkJCQkgICAgImRldGVjdGVkIGlz IG5vdCBkZXRlcm1pbmlzdGljLiBQZXItQ1BVICIKLQkJCQkgICAgImFyZW5hIGRpc2FibGVkLlxu Iik7Ci0JCQkJaWYgKG9wdF9hYm9ydF9jb25mKSB7Ci0JCQkJCW1hbGxvY19hYm9ydF9pbnZhbGlk X2NvbmYoKTsKLQkJCQl9Ci0JCQkJaWYgKG9wdF9hYm9ydCkgewotCQkJCQlhYm9ydCgpOwotCQkJ CX0KLQkJCX0KLQkJfQotCX0KLQotI2lmIChkZWZpbmVkKEpFTUFMTE9DX0hBVkVfUFRIUkVBRF9B VEZPUkspICYmICFkZWZpbmVkKEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IpIFwKLSAgICAmJiAhZGVm aW5lZChKRU1BTExPQ19aT05FKSAmJiAhZGVmaW5lZChfV0lOMzIpICYmIFwKLSAgICAhZGVmaW5l ZChfX25hdGl2ZV9jbGllbnRfXykpCi0JLyogTGludXhUaHJlYWRzJyBwdGhyZWFkX2F0Zm9yaygp IGFsbG9jYXRlcy4gKi8KLQlpZiAocHRocmVhZF9hdGZvcmsoamVtYWxsb2NfcHJlZm9yaywgamVt YWxsb2NfcG9zdGZvcmtfcGFyZW50LAotCSAgICBqZW1hbGxvY19wb3N0Zm9ya19jaGlsZCkgIT0g MCkgewotCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IEVycm9yIGluIHB0aHJlYWRfYXRmb3Jr KClcbiIpOwotCQlpZiAob3B0X2Fib3J0KSB7Ci0JCQlhYm9ydCgpOwotCQl9Ci0JCXJldHVybiB0 cnVlOwotCX0KLSNlbmRpZgotCi0JaWYgKGJhY2tncm91bmRfdGhyZWFkX2Jvb3QwKCkpIHsKLQkJ cmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdW5zaWduZWQK LW1hbGxvY19uYXJlbmFzX2RlZmF1bHQodm9pZCkgewotCWFzc2VydChuY3B1cyA+IDApOwotCS8q Ci0JICogRm9yIFNNUCBzeXN0ZW1zLCBjcmVhdGUgbW9yZSB0aGFuIG9uZSBhcmVuYSBwZXIgQ1BV IGJ5Ci0JICogZGVmYXVsdC4KLQkgKi8KLQlpZiAobmNwdXMgPiAxKSB7Ci0JCWZ4cF90IGZ4cF9u Y3B1cyA9IEZYUF9JTklUX0lOVChuY3B1cyk7Ci0JCWZ4cF90IGdvYWwgPSBmeHBfbXVsKGZ4cF9u Y3B1cywgb3B0X25hcmVuYXNfcmF0aW8pOwotCQl1aW50MzJfdCBpbnRfZ29hbCA9IGZ4cF9yb3Vu ZF9uZWFyZXN0KGdvYWwpOwotCQlpZiAoaW50X2dvYWwgPT0gMCkgewotCQkJcmV0dXJuIDE7Ci0J CX0KLQkJcmV0dXJuIGludF9nb2FsOwotCX0gZWxzZSB7Ci0JCXJldHVybiAxOwotCX0KLX0KLQot c3RhdGljIHBlcmNwdV9hcmVuYV9tb2RlX3QKLXBlcmNwdV9hcmVuYV9hc19pbml0aWFsaXplZChw ZXJjcHVfYXJlbmFfbW9kZV90IG1vZGUpIHsKLQlhc3NlcnQoIW1hbGxvY19pbml0aWFsaXplZCgp KTsKLQlhc3NlcnQobW9kZSA8PSBwZXJjcHVfYXJlbmFfZGlzYWJsZWQpOwotCi0JaWYgKG1vZGUg IT0gcGVyY3B1X2FyZW5hX2Rpc2FibGVkKSB7Ci0JCW1vZGUgKz0gcGVyY3B1X2FyZW5hX21vZGVf ZW5hYmxlZF9iYXNlOwotCX0KLQotCXJldHVybiBtb2RlOwotfQotCi1zdGF0aWMgYm9vbAotbWFs bG9jX2luaXRfbmFyZW5hcyh2b2lkKSB7Ci0JYXNzZXJ0KG5jcHVzID4gMCk7Ci0KLQlpZiAob3B0 X3BlcmNwdV9hcmVuYSAhPSBwZXJjcHVfYXJlbmFfZGlzYWJsZWQpIHsKLQkJaWYgKCFoYXZlX3Bl cmNwdV9hcmVuYSB8fCBtYWxsb2NfZ2V0Y3B1KCkgPCAwKSB7Ci0JCQlvcHRfcGVyY3B1X2FyZW5h ID0gcGVyY3B1X2FyZW5hX2Rpc2FibGVkOwotCQkJbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjog cGVyQ1BVIGFyZW5hIGdldGNwdSgpIG5vdCAiCi0JCQkgICAgImF2YWlsYWJsZS4gU2V0dGluZyBu YXJlbmFzIHRvICV1LlxuIiwgb3B0X25hcmVuYXMgPwotCQkJICAgIG9wdF9uYXJlbmFzIDogbWFs bG9jX25hcmVuYXNfZGVmYXVsdCgpKTsKLQkJCWlmIChvcHRfYWJvcnQpIHsKLQkJCQlhYm9ydCgp OwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG5jcHVzID49IE1BTExPQ1hfQVJFTkFfTElNSVQp IHsKLQkJCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBuYXJlbmFzIHcvIHBlcmNwdSIKLQkJ CQkgICAgImFyZW5hIGJleW9uZCBsaW1pdCAoJWQpXG4iLCBuY3B1cyk7Ci0JCQkJaWYgKG9wdF9h Ym9ydCkgewotCQkJCQlhYm9ydCgpOwotCQkJCX0KLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJ CS8qIE5COiBvcHRfcGVyY3B1X2FyZW5hIGlzbid0IGZ1bGx5IGluaXRpYWxpemVkIHlldC4gKi8K LQkJCWlmIChwZXJjcHVfYXJlbmFfYXNfaW5pdGlhbGl6ZWQob3B0X3BlcmNwdV9hcmVuYSkgPT0K LQkJCSAgICBwZXJfcGh5Y3B1X2FyZW5hICYmIG5jcHVzICUgMiAhPSAwKSB7Ci0JCQkJbWFsbG9j X3ByaW50ZigiPGplbWFsbG9jPjogaW52YWxpZCAiCi0JCQkJICAgICJjb25maWd1cmF0aW9uIC0t IHBlciBwaHlzaWNhbCBDUFUgYXJlbmEgIgotCQkJCSAgICAid2l0aCBvZGQgbnVtYmVyICgldSkg b2YgQ1BVcyAobm8gaHlwZXIgIgotCQkJCSAgICAidGhyZWFkaW5nPykuXG4iLCBuY3B1cyk7Ci0J CQkJaWYgKG9wdF9hYm9ydCkKLQkJCQkJYWJvcnQoKTsKLQkJCX0KLQkJCXVuc2lnbmVkIG4gPSBw ZXJjcHVfYXJlbmFfaW5kX2xpbWl0KAotCQkJICAgIHBlcmNwdV9hcmVuYV9hc19pbml0aWFsaXpl ZChvcHRfcGVyY3B1X2FyZW5hKSk7Ci0JCQlpZiAob3B0X25hcmVuYXMgPCBuKSB7Ci0JCQkJLyoK LQkJCQkgKiBJZiBuYXJlbmFzIGlzIHNwZWNpZmllZCB3aXRoIHBlcmNwdV9hcmVuYQotCQkJCSAq IGVuYWJsZWQsIGFjdHVhbCBuYXJlbmFzIGlzIHNldCBhcyB0aGUgZ3JlYXRlcgotCQkJCSAqIG9m IHRoZSB0d28uIHBlcmNwdV9hcmVuYV9jaG9vc2Ugd2lsbCBiZSBmcmVlCi0JCQkJICogdG8gdXNl IGFueSBvZiB0aGUgYXJlbmFzIGJhc2VkIG9uIENQVQotCQkJCSAqIGlkLiBUaGlzIGlzIGNvbnNl cnZhdGl2ZSAoYXQgYSBzbWFsbCBjb3N0KQotCQkJCSAqIGJ1dCBlbnN1cmVzIGNvcnJlY3RuZXNz LgotCQkJCSAqCi0JCQkJICogSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBuY3B1cyBkZXRlcm1pbmVk IGF0Ci0JCQkJICogYm9vdCBpcyBub3QgdGhlIGFjdHVhbCBudW1iZXIgKGUuZy4gYmVjYXVzZQot CQkJCSAqIG9mIGFmZmluaXR5IHNldHRpbmcgZnJvbSBudW1hY3RsKSwgcmVzZXJ2aW5nCi0JCQkJ ICogbmFyZW5hcyB0aGlzIHdheSBwcm92aWRlcyBhIHdvcmthcm91bmQgZm9yCi0JCQkJICogcGVy Y3B1X2FyZW5hLgotCQkJCSAqLwotCQkJCW9wdF9uYXJlbmFzID0gbjsKLQkJCX0KLQkJfQotCX0K LQlpZiAob3B0X25hcmVuYXMgPT0gMCkgewotCQlvcHRfbmFyZW5hcyA9IG1hbGxvY19uYXJlbmFz X2RlZmF1bHQoKTsKLQl9Ci0JYXNzZXJ0KG9wdF9uYXJlbmFzID4gMCk7Ci0KLQluYXJlbmFzX2F1 dG8gPSBvcHRfbmFyZW5hczsKLQkvKgotCSAqIExpbWl0IHRoZSBudW1iZXIgb2YgYXJlbmFzIHRv IHRoZSBpbmRleGluZyByYW5nZSBvZiBNQUxMT0NYX0FSRU5BKCkuCi0JICovCi0JaWYgKG5hcmVu YXNfYXV0byA+PSBNQUxMT0NYX0FSRU5BX0xJTUlUKSB7Ci0JCW5hcmVuYXNfYXV0byA9IE1BTExP Q1hfQVJFTkFfTElNSVQgLSAxOwotCQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBSZWR1Y2lu ZyBuYXJlbmFzIHRvIGxpbWl0ICglZClcbiIsCi0JCSAgICBuYXJlbmFzX2F1dG8pOwotCX0KLQlu YXJlbmFzX3RvdGFsX3NldChuYXJlbmFzX2F1dG8pOwotCWlmIChhcmVuYV9pbml0X2h1Z2UoKSkg ewotCQluYXJlbmFzX3RvdGFsX2luYygpOwotCX0KLQltYW51YWxfYXJlbmFfYmFzZSA9IG5hcmVu YXNfdG90YWxfZ2V0KCk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tYWxs b2NfaW5pdF9wZXJjcHUodm9pZCkgewotCW9wdF9wZXJjcHVfYXJlbmEgPSBwZXJjcHVfYXJlbmFf YXNfaW5pdGlhbGl6ZWQob3B0X3BlcmNwdV9hcmVuYSk7Ci19Ci0KLXN0YXRpYyBib29sCi1tYWxs b2NfaW5pdF9oYXJkX2ZpbmlzaCh2b2lkKSB7Ci0JaWYgKG1hbGxvY19tdXRleF9ib290KCkpIHsK LQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JbWFsbG9jX2luaXRfc3RhdGUgPSBtYWxsb2NfaW5pdF9p bml0aWFsaXplZDsKLQltYWxsb2Nfc2xvd19mbGFnX2luaXQoKTsKLQotCXJldHVybiBmYWxzZTsK LX0KLQotc3RhdGljIHZvaWQKLW1hbGxvY19pbml0X2hhcmRfY2xlYW51cCh0c2RuX3QgKnRzZG4s IGJvb2wgcmVlbnRyYW5jeV9zZXQpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4s ICZpbml0X2xvY2spOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmluaXRfbG9jayk7Ci0J aWYgKHJlZW50cmFuY3lfc2V0KSB7Ci0JCWFzc2VydCghdHNkbl9udWxsKHRzZG4pKTsKLQkJdHNk X3QgKnRzZCA9IHRzZG5fdHNkKHRzZG4pOwotCQlhc3NlcnQodHNkX3JlZW50cmFuY3lfbGV2ZWxf Z2V0KHRzZCkgPiAwKTsKLQkJcG9zdF9yZWVudHJhbmN5KHRzZCk7Ci0JfQotfQotCi1zdGF0aWMg Ym9vbAotbWFsbG9jX2luaXRfaGFyZCh2b2lkKSB7Ci0JdHNkX3QgKnRzZDsKLQotI2lmIGRlZmlu ZWQoX1dJTjMyKSAmJiBfV0lOMzJfV0lOTlQgPCAweDA2MDAKLQlfaW5pdF9pbml0X2xvY2soKTsK LSNlbmRpZgotCW1hbGxvY19tdXRleF9sb2NrKFRTRE5fTlVMTCwgJmluaXRfbG9jayk7Ci0KLSNk ZWZpbmUgVU5MT0NLX1JFVFVSTih0c2RuLCByZXQsIHJlZW50cmFuY3kpCQlcCi0JbWFsbG9jX2lu aXRfaGFyZF9jbGVhbnVwKHRzZG4sIHJlZW50cmFuY3kpOwlcCi0JcmV0dXJuIHJldDsKLQotCWlm ICghbWFsbG9jX2luaXRfaGFyZF9uZWVkZWQoKSkgewotCQlVTkxPQ0tfUkVUVVJOKFRTRE5fTlVM TCwgZmFsc2UsIGZhbHNlKQotCX0KLQotCWlmIChtYWxsb2NfaW5pdF9zdGF0ZSAhPSBtYWxsb2Nf aW5pdF9hMF9pbml0aWFsaXplZCAmJgotCSAgICBtYWxsb2NfaW5pdF9oYXJkX2EwX2xvY2tlZCgp KSB7Ci0JCVVOTE9DS19SRVRVUk4oVFNETl9OVUxMLCB0cnVlLCBmYWxzZSkKLQl9Ci0KLQltYWxs b2NfbXV0ZXhfdW5sb2NrKFRTRE5fTlVMTCwgJmluaXRfbG9jayk7Ci0JLyogUmVjdXJzaXZlIGFs bG9jYXRpb24gcmVsaWVzIG9uIGZ1bmN0aW9uYWwgdHNkLiAqLwotCXRzZCA9IG1hbGxvY190c2Rf Ym9vdDAoKTsKLQlpZiAodHNkID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmICht YWxsb2NfaW5pdF9oYXJkX3JlY3Vyc2libGUoKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlt YWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmaW5pdF9sb2NrKTsKLQkvKiBTZXQgcmVl bnRyYW5jeSBsZXZlbCB0byAxIGR1cmluZyBpbml0LiAqLwotCXByZV9yZWVudHJhbmN5KHRzZCwg TlVMTCk7Ci0JLyogSW5pdGlhbGl6ZSBuYXJlbmFzIGJlZm9yZSBwcm9mX2Jvb3QyIChmb3IgYWxs b2NhdGlvbikuICovCi0JaWYgKG1hbGxvY19pbml0X25hcmVuYXMoKQotCSAgICB8fCBiYWNrZ3Jv dW5kX3RocmVhZF9ib290MSh0c2RfdHNkbih0c2QpLCBiMGdldCgpKSkgewotCQlVTkxPQ0tfUkVU VVJOKHRzZF90c2RuKHRzZCksIHRydWUsIHRydWUpCi0JfQotCWlmIChjb25maWdfcHJvZiAmJiBw cm9mX2Jvb3QyKHRzZCwgYjBnZXQoKSkpIHsKLQkJVU5MT0NLX1JFVFVSTih0c2RfdHNkbih0c2Qp LCB0cnVlLCB0cnVlKQotCX0KLQotCW1hbGxvY19pbml0X3BlcmNwdSgpOwotCi0JaWYgKG1hbGxv Y19pbml0X2hhcmRfZmluaXNoKCkpIHsKLQkJVU5MT0NLX1JFVFVSTih0c2RfdHNkbih0c2QpLCB0 cnVlLCB0cnVlKQotCX0KLQlwb3N0X3JlZW50cmFuY3kodHNkKTsKLQltYWxsb2NfbXV0ZXhfdW5s b2NrKHRzZF90c2RuKHRzZCksICZpbml0X2xvY2spOwotCi0Jd2l0bmVzc19hc3NlcnRfbG9ja2xl c3Mod2l0bmVzc190c2RfdHNkbigKLQkgICAgdHNkX3dpdG5lc3NfdHNkcF9nZXRfdW5zYWZlKHRz ZCkpKTsKLQltYWxsb2NfdHNkX2Jvb3QxKCk7Ci0JLyogVXBkYXRlIFRTRCBhZnRlciB0c2RfYm9v dDEuICovCi0JdHNkID0gdHNkX2ZldGNoKCk7Ci0JaWYgKG9wdF9iYWNrZ3JvdW5kX3RocmVhZCkg ewotCQlhc3NlcnQoaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCk7Ci0JCS8qCi0JCSAqIE5lZWQgdG8g ZmluaXNoIGluaXQgJiB1bmxvY2sgZmlyc3QgYmVmb3JlIGNyZWF0aW5nIGJhY2tncm91bmQKLQkJ ICogdGhyZWFkcyAocHRocmVhZF9jcmVhdGUgZGVwZW5kcyBvbiBtYWxsb2MpLiAgY3RsX2luaXQg KHdoaWNoCi0JCSAqIHNldHMgaXN0aHJlYWRlZCkgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGhvdXQg aG9sZGluZyBhbnkgbG9jay4KLQkJICovCi0JCWJhY2tncm91bmRfdGhyZWFkX2N0bF9pbml0KHRz ZF90c2RuKHRzZCkpOwotCQlpZiAoYmFja2dyb3VuZF90aHJlYWRfY3JlYXRlKHRzZCwgMCkpIHsK LQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotI3VuZGVmIFVOTE9DS19SRVRVUk4KLQlyZXR1cm4g ZmFsc2U7Ci19Ci0KLS8qCi0gKiBFbmQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgotICovCi0v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIEJlZ2luIGFsbG9jYXRpb24tcGF0aCBpbnRl cm5hbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4KLSAqLwotCi0vKgotICogU2V0dGlu Z3MgZGV0ZXJtaW5lZCBieSB0aGUgZG9jdW1lbnRlZCBiZWhhdmlvciBvZiB0aGUgYWxsb2NhdGlv biBmdW5jdGlvbnMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHN0YXRpY19vcHRzX3Mgc3RhdGljX29w dHNfdDsKLXN0cnVjdCBzdGF0aWNfb3B0c19zIHsKLQkvKiBXaGV0aGVyIG9yIG5vdCBhbGxvY2F0 aW9uIHNpemUgbWF5IG92ZXJmbG93LiAqLwotCWJvb2wgbWF5X292ZXJmbG93OwotCi0JLyoKLQkg KiBXaGV0aGVyIG9yIG5vdCBhbGxvY2F0aW9ucyAod2l0aCBhbGlnbm1lbnQpIG9mIHNpemUgMCBz aG91bGQgYmUKLQkgKiB0cmVhdGVkIGFzIHNpemUgMS4KLQkgKi8KLQlib29sIGJ1bXBfZW1wdHlf YWxpZ25lZF9hbGxvYzsKLQkvKgotCSAqIFdoZXRoZXIgdG8gYXNzZXJ0IHRoYXQgYWxsb2NhdGlv bnMgYXJlIG5vdCBvZiBzaXplIDAgKGFmdGVyIGFueQotCSAqIGJ1bXBpbmcpLgotCSAqLwotCWJv b2wgYXNzZXJ0X25vbmVtcHR5X2FsbG9jOwotCi0JLyoKLQkgKiBXaGV0aGVyIG9yIG5vdCB0byBt b2RpZnkgdGhlICdyZXN1bHQnIGFyZ3VtZW50IHRvIG1hbGxvYyBpbiBjYXNlIG9mCi0JICogZXJy b3IuCi0JICovCi0JYm9vbCBudWxsX291dF9yZXN1bHRfb25fZXJyb3I7Ci0JLyogV2hldGhlciB0 byBzZXQgZXJybm8gd2hlbiB3ZSBlbmNvdW50ZXIgYW4gZXJyb3IgY29uZGl0aW9uLiAqLwotCWJv b2wgc2V0X2Vycm5vX29uX2Vycm9yOwotCi0JLyoKLQkgKiBUaGUgbWluaW11bSB2YWxpZCBhbGln bm1lbnQgZm9yIGZ1bmN0aW9ucyByZXF1ZXN0aW5nIGFsaWduZWQgc3RvcmFnZS4KLQkgKi8KLQlz aXplX3QgbWluX2FsaWdubWVudDsKLQotCS8qIFRoZSBlcnJvciBzdHJpbmcgdG8gdXNlIGlmIHdl IG9vbS4gKi8KLQljb25zdCBjaGFyICpvb21fc3RyaW5nOwotCS8qIFRoZSBlcnJvciBzdHJpbmcg dG8gdXNlIGlmIHRoZSBwYXNzZWQtaW4gYWxpZ25tZW50IGlzIGludmFsaWQuICovCi0JY29uc3Qg Y2hhciAqaW52YWxpZF9hbGlnbm1lbnRfc3RyaW5nOwotCi0JLyoKLQkgKiBGYWxzZSBpZiB3ZSdy ZSBjb25maWd1cmVkIHRvIHNraXAgc29tZSB0aW1lLWNvbnN1bWluZyBvcGVyYXRpb25zLgotCSAq Ci0JICogVGhpcyBpc24ndCByZWFsbHkgYSBtYWxsb2MgImJlaGF2aW9yIiwgYnV0IGl0IGFjdHMg YXMgYSB1c2VmdWwKLQkgKiBzdW1tYXJ5IG9mIHNldmVyYWwgb3RoZXIgc3RhdGljIChvciBhdCBs ZWFzdCwgc3RhdGljIGFmdGVyIHByb2dyYW0KLQkgKiBpbml0aWFsaXphdGlvbikgb3B0aW9ucy4K LQkgKi8KLQlib29sIHNsb3c7Ci0JLyoKLQkgKiBSZXR1cm4gc2l6ZS4KLQkgKi8KLQlib29sIHVz aXplOwotfTsKLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1zdGF0aWNfb3B0c19pbml0 KHN0YXRpY19vcHRzX3QgKnN0YXRpY19vcHRzKSB7Ci0Jc3RhdGljX29wdHMtPm1heV9vdmVyZmxv dyA9IGZhbHNlOwotCXN0YXRpY19vcHRzLT5idW1wX2VtcHR5X2FsaWduZWRfYWxsb2MgPSBmYWxz ZTsKLQlzdGF0aWNfb3B0cy0+YXNzZXJ0X25vbmVtcHR5X2FsbG9jID0gZmFsc2U7Ci0Jc3RhdGlj X29wdHMtPm51bGxfb3V0X3Jlc3VsdF9vbl9lcnJvciA9IGZhbHNlOwotCXN0YXRpY19vcHRzLT5z ZXRfZXJybm9fb25fZXJyb3IgPSBmYWxzZTsKLQlzdGF0aWNfb3B0cy0+bWluX2FsaWdubWVudCA9 IDA7Ci0Jc3RhdGljX29wdHMtPm9vbV9zdHJpbmcgPSAiIjsKLQlzdGF0aWNfb3B0cy0+aW52YWxp ZF9hbGlnbm1lbnRfc3RyaW5nID0gIiI7Ci0Jc3RhdGljX29wdHMtPnNsb3cgPSBmYWxzZTsKLQlz dGF0aWNfb3B0cy0+dXNpemUgPSBmYWxzZTsKLX0KLQotLyoKLSAqIFRoZXNlIGNvcnJlc3BvbmQg dG8gdGhlIG1hY3JvcyBpbiBqZW1hbGxvYy9qZW1hbGxvY19tYWNyb3MuaC4gIEJyb2FkbHksIHdl Ci0gKiBzaG91bGQgaGF2ZSBvbmUgY29uc3RhbnQgaGVyZSBwZXIgbWFnaWMgdmFsdWUgdGhlcmUu ICBOb3RlIGhvd2V2ZXIgdGhhdCB0aGUKLSAqIHJlcHJlc2VudGF0aW9ucyBuZWVkIG5vdCBiZSBy ZWxhdGVkLgotICovCi0jZGVmaW5lIFRDQUNIRV9JTkRfTk9ORSAoKHVuc2lnbmVkKS0xKQotI2Rl ZmluZSBUQ0FDSEVfSU5EX0FVVE9NQVRJQyAoKHVuc2lnbmVkKS0yKQotI2RlZmluZSBBUkVOQV9J TkRfQVVUT01BVElDICgodW5zaWduZWQpLTEpCi0KLXR5cGVkZWYgc3RydWN0IGR5bmFtaWNfb3B0 c19zIGR5bmFtaWNfb3B0c190Owotc3RydWN0IGR5bmFtaWNfb3B0c19zIHsKLQl2b2lkICoqcmVz dWx0OwotCXNpemVfdCB1c2l6ZTsKLQlzaXplX3QgbnVtX2l0ZW1zOwotCXNpemVfdCBpdGVtX3Np emU7Ci0Jc2l6ZV90IGFsaWdubWVudDsKLQlib29sIHplcm87Ci0JdW5zaWduZWQgdGNhY2hlX2lu ZDsKLQl1bnNpZ25lZCBhcmVuYV9pbmQ7Ci19OwotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZv aWQKLWR5bmFtaWNfb3B0c19pbml0KGR5bmFtaWNfb3B0c190ICpkeW5hbWljX29wdHMpIHsKLQlk eW5hbWljX29wdHMtPnJlc3VsdCA9IE5VTEw7Ci0JZHluYW1pY19vcHRzLT51c2l6ZSA9IDA7Ci0J ZHluYW1pY19vcHRzLT5udW1faXRlbXMgPSAwOwotCWR5bmFtaWNfb3B0cy0+aXRlbV9zaXplID0g MDsKLQlkeW5hbWljX29wdHMtPmFsaWdubWVudCA9IDA7Ci0JZHluYW1pY19vcHRzLT56ZXJvID0g ZmFsc2U7Ci0JZHluYW1pY19vcHRzLT50Y2FjaGVfaW5kID0gVENBQ0hFX0lORF9BVVRPTUFUSUM7 Ci0JZHluYW1pY19vcHRzLT5hcmVuYV9pbmQgPSBBUkVOQV9JTkRfQVVUT01BVElDOwotfQotCi0v KgotICogaW5kIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaXMgb25seSBjaGVja2VkIGFuZCBm aWxsZWQgaWYgYWxpZ25tZW50ID09IDA7Ci0gKiByZXR1cm4gdHJ1ZSBpZiByZXN1bHQgaXMgb3V0 IG9mIHJhbmdlLgotICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLWFsaWduZWRfdXNp emVfZ2V0KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgKnVzaXplLCBzemlu ZF90ICppbmQsCi0gICAgYm9vbCBidW1wX2VtcHR5X2FsaWduZWRfYWxsb2MpIHsKLQlhc3NlcnQo dXNpemUgIT0gTlVMTCk7Ci0JaWYgKGFsaWdubWVudCA9PSAwKSB7Ci0JCWlmIChpbmQgIT0gTlVM TCkgewotCQkJKmluZCA9IHN6X3NpemUyaW5kZXgoc2l6ZSk7Ci0JCQlpZiAodW5saWtlbHkoKmlu ZCA+PSBTQ19OU0laRVMpKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQkqdXNpemUgPSBz el9pbmRleDJzaXplKCppbmQpOwotCQkJYXNzZXJ0KCp1c2l6ZSA+IDAgJiYgKnVzaXplIDw9IFND X0xBUkdFX01BWENMQVNTKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQkqdXNpemUgPSBzel9z MnUoc2l6ZSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGJ1bXBfZW1wdHlfYWxpZ25lZF9hbGxvYyAmJiB1 bmxpa2VseShzaXplID09IDApKSB7Ci0JCQlzaXplID0gMTsKLQkJfQotCQkqdXNpemUgPSBzel9z YTJ1KHNpemUsIGFsaWdubWVudCk7Ci0JfQotCWlmICh1bmxpa2VseSgqdXNpemUgPT0gMCB8fCAq dXNpemUgPiBTQ19MQVJHRV9NQVhDTEFTUykpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXJldHVy biBmYWxzZTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi16ZXJvX2dldChib29s IGd1YXJhbnRlZSwgYm9vbCBzbG93KSB7Ci0JaWYgKGNvbmZpZ19maWxsICYmIHNsb3cgJiYgdW5s aWtlbHkob3B0X3plcm8pKSB7Ci0JCXJldHVybiB0cnVlOwotCX0gZWxzZSB7Ci0JCXJldHVybiBn dWFyYW50ZWU7Ci0JfQotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHRjYWNoZV90ICoKLXRj YWNoZV9nZXRfZnJvbV9pbmQodHNkX3QgKnRzZCwgdW5zaWduZWQgdGNhY2hlX2luZCwgYm9vbCBz bG93LCBib29sIGlzX2FsbG9jKSB7Ci0JdGNhY2hlX3QgKnRjYWNoZTsKLQlpZiAodGNhY2hlX2lu ZCA9PSBUQ0FDSEVfSU5EX0FVVE9NQVRJQykgewotCQlpZiAobGlrZWx5KCFzbG93KSkgewotCQkJ LyogR2V0dGluZyB0Y2FjaGUgcHRyIHVuY29uZGl0aW9uYWxseS4gKi8KLQkJCXRjYWNoZSA9IHRz ZF90Y2FjaGVwX2dldCh0c2QpOwotCQkJYXNzZXJ0KHRjYWNoZSA9PSB0Y2FjaGVfZ2V0KHRzZCkp OwotCQl9IGVsc2UgaWYgKGlzX2FsbG9jIHx8Ci0JCSAgICBsaWtlbHkodHNkX3JlZW50cmFuY3lf bGV2ZWxfZ2V0KHRzZCkgPT0gMCkpIHsKLQkJCXRjYWNoZSA9IHRjYWNoZV9nZXQodHNkKTsKLQkJ fSBlbHNlIHsKLQkJCXRjYWNoZSA9IE5VTEw7Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBT aG91bGQgbm90IHNwZWNpZnkgdGNhY2hlIG9uIGRlYWxsb2NhdGlvbiBwYXRoIHdoZW4gYmVpbmcK LQkJICogcmVlbnRyYW50LgotCQkgKi8KLQkJYXNzZXJ0KGlzX2FsbG9jIHx8IHRzZF9yZWVudHJh bmN5X2xldmVsX2dldCh0c2QpID09IDAgfHwKLQkJICAgIHRzZF9zdGF0ZV9ub2NsZWFudXAodHNk KSk7Ci0JCWlmICh0Y2FjaGVfaW5kID09IFRDQUNIRV9JTkRfTk9ORSkgewotCQkJdGNhY2hlID0g TlVMTDsKLQkJfSBlbHNlIHsKLQkJCXRjYWNoZSA9IHRjYWNoZXNfZ2V0KHRzZCwgdGNhY2hlX2lu ZCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRjYWNoZTsKLX0KLQotLyogUmV0dXJuIHRydWUgaWYgYSBt YW51YWwgYXJlbmEgaXMgc3BlY2lmaWVkIGFuZCBhcmVuYV9nZXQoKSBPT01zLiAqLwotSkVNQUxM T0NfQUxXQVlTX0lOTElORSBib29sCi1hcmVuYV9nZXRfZnJvbV9pbmQodHNkX3QgKnRzZCwgdW5z aWduZWQgYXJlbmFfaW5kLCBhcmVuYV90ICoqYXJlbmFfcCkgewotCWlmIChhcmVuYV9pbmQgPT0g QVJFTkFfSU5EX0FVVE9NQVRJQykgewotCQkvKgotCQkgKiBJbiBjYXNlIG9mIGF1dG9tYXRpYyBh cmVuYSBtYW5hZ2VtZW50LCB3ZSBkZWZlciBhcmVuYQotCQkgKiBjb21wdXRhdGlvbiB1bnRpbCBh cyBsYXRlIGFzIHdlIGNhbiwgaG9waW5nIHRvIGZpbGwgdGhlCi0JCSAqIGFsbG9jYXRpb24gb3V0 IG9mIHRoZSB0Y2FjaGUuCi0JCSAqLwotCQkqYXJlbmFfcCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJ KmFyZW5hX3AgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgYXJlbmFfaW5kLCB0cnVlKTsKLQkJ aWYgKHVubGlrZWx5KCphcmVuYV9wID09IE5VTEwpICYmIGFyZW5hX2luZCA+PSBuYXJlbmFzX2F1 dG8pIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotLyog aW5kIGlzIGlnbm9yZWQgaWYgZG9wdHMtPmFsaWdubWVudCA+IDAuICovCi1KRU1BTExPQ19BTFdB WVNfSU5MSU5FIHZvaWQgKgotaW1hbGxvY19ub19zYW1wbGUoc3RhdGljX29wdHNfdCAqc29wdHMs IGR5bmFtaWNfb3B0c190ICpkb3B0cywgdHNkX3QgKnRzZCwKLSAgICBzaXplX3Qgc2l6ZSwgc2l6 ZV90IHVzaXplLCBzemluZF90IGluZCkgewotCS8qIEZpbGwgaW4gdGhlIHRjYWNoZS4gKi8KLQl0 Y2FjaGVfdCAqdGNhY2hlID0gdGNhY2hlX2dldF9mcm9tX2luZCh0c2QsIGRvcHRzLT50Y2FjaGVf aW5kLAotCSAgICBzb3B0cy0+c2xvdywgLyogaXNfYWxsb2MgKi8gdHJ1ZSk7Ci0KLQkvKiBGaWxs IGluIHRoZSBhcmVuYS4gKi8KLQlhcmVuYV90ICphcmVuYTsKLQlpZiAoYXJlbmFfZ2V0X2Zyb21f aW5kKHRzZCwgZG9wdHMtPmFyZW5hX2luZCwgJmFyZW5hKSkgewotCQlyZXR1cm4gTlVMTDsKLQl9 Ci0KLQlpZiAodW5saWtlbHkoZG9wdHMtPmFsaWdubWVudCAhPSAwKSkgewotCQlyZXR1cm4gaXBh bGxvY3QodHNkX3RzZG4odHNkKSwgdXNpemUsIGRvcHRzLT5hbGlnbm1lbnQsCi0JCSAgICBkb3B0 cy0+emVybywgdGNhY2hlLCBhcmVuYSk7Ci0JfQotCi0JcmV0dXJuIGlhbGxvY3p0bSh0c2RfdHNk bih0c2QpLCBzaXplLCBpbmQsIGRvcHRzLT56ZXJvLCB0Y2FjaGUsIGZhbHNlLAotCSAgICBhcmVu YSwgc29wdHMtPnNsb3cpOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQgKgotaW1h bGxvY19zYW1wbGUoc3RhdGljX29wdHNfdCAqc29wdHMsIGR5bmFtaWNfb3B0c190ICpkb3B0cywg dHNkX3QgKnRzZCwKLSAgICBzaXplX3QgdXNpemUsIHN6aW5kX3QgaW5kKSB7Ci0Jdm9pZCAqcmV0 OwotCi0JLyoKLQkgKiBGb3Igc21hbGwgYWxsb2NhdGlvbnMsIHNhbXBsaW5nIGJ1bXBzIHRoZSB1 c2l6ZS4gIElmIHNvLCB3ZSBhbGxvY2F0ZQotCSAqIGZyb20gdGhlIGluZF9sYXJnZSBidWNrZXQu Ci0JICovCi0Jc3ppbmRfdCBpbmRfbGFyZ2U7Ci0Jc2l6ZV90IGJ1bXBlZF91c2l6ZSA9IHVzaXpl OwotCi0JZG9wdHMtPmFsaWdubWVudCA9IHByb2Zfc2FtcGxlX2FsaWduKGRvcHRzLT5hbGlnbm1l bnQpOwotCWlmICh1c2l6ZSA8PSBTQ19TTUFMTF9NQVhDTEFTUykgewotCQlhc3NlcnQoKChkb3B0 cy0+YWxpZ25tZW50ID09IDApID8KLQkJICAgIHN6X3MydShTQ19MQVJHRV9NSU5DTEFTUykgOgot CQkgICAgc3pfc2EydShTQ19MQVJHRV9NSU5DTEFTUywgZG9wdHMtPmFsaWdubWVudCkpCi0JCQk9 PSBTQ19MQVJHRV9NSU5DTEFTUyk7Ci0JCWluZF9sYXJnZSA9IHN6X3NpemUyaW5kZXgoU0NfTEFS R0VfTUlOQ0xBU1MpOwotCQlidW1wZWRfdXNpemUgPSBzel9zMnUoU0NfTEFSR0VfTUlOQ0xBU1Mp OwotCQlyZXQgPSBpbWFsbG9jX25vX3NhbXBsZShzb3B0cywgZG9wdHMsIHRzZCwgYnVtcGVkX3Vz aXplLAotCQkgICAgYnVtcGVkX3VzaXplLCBpbmRfbGFyZ2UpOwotCQlpZiAodW5saWtlbHkocmV0 ID09IE5VTEwpKSB7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlhcmVuYV9wcm9mX3Byb21vdGUo dHNkX3RzZG4odHNkKSwgcmV0LCB1c2l6ZSk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gaW1hbGxvY19u b19zYW1wbGUoc29wdHMsIGRvcHRzLCB0c2QsIHVzaXplLCB1c2l6ZSwgaW5kKTsKLQl9Ci0JYXNz ZXJ0KHByb2Zfc2FtcGxlX2FsaWduZWQocmV0KSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgot ICogUmV0dXJucyB0cnVlIGlmIHRoZSBhbGxvY2F0aW9uIHdpbGwgb3ZlcmZsb3csIGFuZCBmYWxz ZSBvdGhlcndpc2UuICBTZXRzCi0gKiAqc2l6ZSB0byB0aGUgcHJvZHVjdCBlaXRoZXIgd2F5Lgot ICovCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIGJvb2wKLWNvbXB1dGVfc2l6ZV93aXRoX292ZXJm bG93KGJvb2wgbWF5X292ZXJmbG93LCBkeW5hbWljX29wdHNfdCAqZG9wdHMsCi0gICAgc2l6ZV90 ICpzaXplKSB7Ci0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIGlzIGp1c3QgbnVtX2l0ZW1zICogaXRl bV9zaXplLCBleGNlcHQgdGhhdCB3ZSBtYXkgaGF2ZQotCSAqIHRvIGNoZWNrIGZvciBvdmVyZmxv dy4KLQkgKi8KLQotCWlmICghbWF5X292ZXJmbG93KSB7Ci0JCWFzc2VydChkb3B0cy0+bnVtX2l0 ZW1zID09IDEpOwotCQkqc2l6ZSA9IGRvcHRzLT5pdGVtX3NpemU7Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQkvKiBBIHNpemVfdCB3aXRoIGl0cyBoaWdoLWhhbGYgYml0cyBhbGwgc2V0IHRvIDEu ICovCi0Jc3RhdGljIGNvbnN0IHNpemVfdCBoaWdoX2JpdHMgPSBTSVpFX1RfTUFYIDw8IChzaXpl b2Yoc2l6ZV90KSAqIDggLyAyKTsKLQotCSpzaXplID0gZG9wdHMtPml0ZW1fc2l6ZSAqIGRvcHRz LT5udW1faXRlbXM7Ci0KLQlpZiAodW5saWtlbHkoKnNpemUgPT0gMCkpIHsKLQkJcmV0dXJuIChk b3B0cy0+bnVtX2l0ZW1zICE9IDAgJiYgZG9wdHMtPml0ZW1fc2l6ZSAhPSAwKTsKLQl9Ci0KLQkv KgotCSAqIFdlIGdvdCBhIG5vbi16ZXJvIHNpemUsIGJ1dCB3ZSBkb24ndCBrbm93IGlmIHdlIG92 ZXJmbG93ZWQgdG8gZ2V0Ci0JICogdGhlcmUuICBUbyBhdm9pZCBoYXZpbmcgdG8gZG8gYSBkaXZp ZGUsIHdlJ2xsIGJlIGNsZXZlciBhbmQgbm90ZSB0aGF0Ci0JICogaWYgYm90aCBBIGFuZCBCIGNh biBiZSByZXByZXNlbnRlZCBpbiBOLzIgYml0cywgdGhlbiB0aGVpciBwcm9kdWN0Ci0JICogY2Fu IGJlIHJlcHJlc2VudGVkIGluIE4gYml0cyAod2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2Ygb3Zl cmZsb3cpLgotCSAqLwotCWlmIChsaWtlbHkoKGhpZ2hfYml0cyAmIChkb3B0cy0+bnVtX2l0ZW1z IHwgZG9wdHMtPml0ZW1fc2l6ZSkpID09IDApKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYg KGxpa2VseSgqc2l6ZSAvIGRvcHRzLT5pdGVtX3NpemUgPT0gZG9wdHMtPm51bV9pdGVtcykpIHsK LQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotSkVNQUxMT0NfQUxXQVlT X0lOTElORSBpbnQKLWltYWxsb2NfYm9keShzdGF0aWNfb3B0c190ICpzb3B0cywgZHluYW1pY19v cHRzX3QgKmRvcHRzLCB0c2RfdCAqdHNkKSB7Ci0JLyogV2hlcmUgdGhlIGFjdHVhbCBhbGxvY2F0 ZWQgbWVtb3J5IHdpbGwgbGl2ZS4gKi8KLQl2b2lkICphbGxvY2F0aW9uID0gTlVMTDsKLQkvKiBG aWxsZWQgaW4gYnkgY29tcHV0ZV9zaXplX3dpdGhfb3ZlcmZsb3cgYmVsb3cuICovCi0Jc2l6ZV90 IHNpemUgPSAwOwotCS8qCi0JICogVGhlIHplcm8gaW5pdGlhbGl6YXRpb24gZm9yIGluZCBpcyBh Y3R1YWxseSBkZWFkIHN0b3JlLCBpbiB0aGF0IGl0cwotCSAqIHZhbHVlIGlzIHJlc2V0IGJlZm9y ZSBhbnkgYnJhbmNoIG9uIGl0cyB2YWx1ZSBpcyB0YWtlbi4gIFNvbWV0aW1lcwotCSAqIHRob3Vn aCwgaXQncyBjb252ZW5pZW50IHRvIHBhc3MgaXQgYXMgYXJndW1lbnRzIGJlZm9yZSB0aGlzIHBv aW50LgotCSAqIFRvIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvciB0aGVuLCB3ZSBpbml0aWFsaXpl IGl0IHdpdGggZHVtbXkgc3RvcmVzLgotCSAqLwotCXN6aW5kX3QgaW5kID0gMDsKLQkvKiB1c2l6 ZSB3aWxsIGFsd2F5cyBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4gKi8KLQlzaXplX3QgdXNpemU7 Ci0KLQkvKiBSZWVudHJhbmN5IGlzIG9ubHkgY2hlY2tlZCBvbiBzbG93IHBhdGguICovCi0JaW50 OF90IHJlZW50cmFuY3lfbGV2ZWw7Ci0KLQkvKiBDb21wdXRlIHRoZSBhbW91bnQgb2YgbWVtb3J5 IHRoZSB1c2VyIHdhbnRzLiAqLwotCWlmICh1bmxpa2VseShjb21wdXRlX3NpemVfd2l0aF9vdmVy Zmxvdyhzb3B0cy0+bWF5X292ZXJmbG93LCBkb3B0cywKLQkgICAgJnNpemUpKSkgewotCQlnb3Rv IGxhYmVsX29vbTsKLQl9Ci0KLQlpZiAodW5saWtlbHkoZG9wdHMtPmFsaWdubWVudCA8IHNvcHRz LT5taW5fYWxpZ25tZW50Ci0JICAgIHx8IChkb3B0cy0+YWxpZ25tZW50ICYgKGRvcHRzLT5hbGln bm1lbnQgLSAxKSkgIT0gMCkpIHsKLQkJZ290byBsYWJlbF9pbnZhbGlkX2FsaWdubWVudDsKLQl9 Ci0KLQkvKiBUaGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlICJjb3JlIiBhbGdvcml0aG0uICov Ci0JZG9wdHMtPnplcm8gPSB6ZXJvX2dldChkb3B0cy0+emVybywgc29wdHMtPnNsb3cpOwotCWlm IChhbGlnbmVkX3VzaXplX2dldChzaXplLCBkb3B0cy0+YWxpZ25tZW50LCAmdXNpemUsICZpbmQs Ci0JICAgIHNvcHRzLT5idW1wX2VtcHR5X2FsaWduZWRfYWxsb2MpKSB7Ci0JCWdvdG8gbGFiZWxf b29tOwotCX0KLQlkb3B0cy0+dXNpemUgPSB1c2l6ZTsKLQkvKiBWYWxpZGF0ZSB0aGUgdXNlciBp bnB1dC4gKi8KLQlpZiAoc29wdHMtPmFzc2VydF9ub25lbXB0eV9hbGxvYykgewotCQlhc3NlcnQg KHNpemUgIT0gMCk7Ci0JfQotCi0JY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRz ZCkpOwotCi0JLyoKLQkgKiBJZiB3ZSBuZWVkIHRvIGhhbmRsZSByZWVudHJhbmN5LCB3ZSBjYW4g ZG8gaXQgb3V0IG9mIGEKLQkgKiBrbm93bi1pbml0aWFsaXplZCBhcmVuYSAoaS5lLiBhcmVuYSAw KS4KLQkgKi8KLQlyZWVudHJhbmN5X2xldmVsID0gdHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRz ZCk7Ci0JaWYgKHNvcHRzLT5zbG93ICYmIHVubGlrZWx5KHJlZW50cmFuY3lfbGV2ZWwgPiAwKSkg ewotCQkvKgotCQkgKiBXZSBzaG91bGQgbmV2ZXIgc3BlY2lmeSBwYXJ0aWN1bGFyIGFyZW5hcyBv ciB0Y2FjaGVzIGZyb20KLQkJICogd2l0aGluIG91ciBpbnRlcm5hbCBhbGxvY2F0aW9ucy4KLQkJ ICovCi0JCWFzc2VydChkb3B0cy0+dGNhY2hlX2luZCA9PSBUQ0FDSEVfSU5EX0FVVE9NQVRJQyB8 fAotCQkgICAgZG9wdHMtPnRjYWNoZV9pbmQgPT0gVENBQ0hFX0lORF9OT05FKTsKLQkJYXNzZXJ0 KGRvcHRzLT5hcmVuYV9pbmQgPT0gQVJFTkFfSU5EX0FVVE9NQVRJQyk7Ci0JCWRvcHRzLT50Y2Fj aGVfaW5kID0gVENBQ0hFX0lORF9OT05FOwotCQkvKiBXZSBrbm93IHRoYXQgYXJlbmEgMCBoYXMg YWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLiAqLwotCQlkb3B0cy0+YXJlbmFfaW5kID0gMDsKLQl9 Ci0KLQkvKgotCSAqIElmIGRvcHRzLT5hbGlnbm1lbnQgPiAwLCB0aGVuIGluZCBpcyBzdGlsbCAw LCBidXQgdXNpemUgd2FzIGNvbXB1dGVkCi0JICogaW4gdGhlIHByZXZpb3VzIGlmIHN0YXRlbWVu dC4gIERvd24gdGhlIHBvc2l0aXZlIGFsaWdubWVudCBwYXRoLAotCSAqIGltYWxsb2Nfbm9fc2Ft cGxlIGFuZCBpbWFsbG9jX3NhbXBsZSB3aWxsIGlnbm9yZSBpbmQuCi0JICovCi0KLQkvKiBJZiBw cm9maWxpbmcgaXMgb24sIGdldCBvdXIgcHJvZmlsaW5nIGNvbnRleHQuICovCi0JaWYgKGNvbmZp Z19wcm9mICYmIG9wdF9wcm9mKSB7Ci0JCWJvb2wgcHJvZl9hY3RpdmUgPSBwcm9mX2FjdGl2ZV9n ZXRfdW5sb2NrZWQoKTsKLQkJYm9vbCBzYW1wbGVfZXZlbnQgPSB0ZV9wcm9mX3NhbXBsZV9ldmVu dF9sb29rYWhlYWQodHNkLCB1c2l6ZSk7Ci0JCXByb2ZfdGN0eF90ICp0Y3R4ID0gcHJvZl9hbGxv Y19wcmVwKHRzZCwgcHJvZl9hY3RpdmUsCi0JCSAgICBzYW1wbGVfZXZlbnQpOwotCi0JCWVtYXBf YWxsb2NfY3R4X3QgYWxsb2NfY3R4OwotCQlpZiAobGlrZWx5KCh1aW50cHRyX3QpdGN0eCA9PSAo dWludHB0cl90KTFVKSkgewotCQkJYWxsb2NfY3R4LnNsYWIgPSAodXNpemUgPD0gU0NfU01BTExf TUFYQ0xBU1MpOwotCQkJYWxsb2NhdGlvbiA9IGltYWxsb2Nfbm9fc2FtcGxlKAotCQkJICAgIHNv cHRzLCBkb3B0cywgdHNkLCB1c2l6ZSwgdXNpemUsIGluZCk7Ci0JCX0gZWxzZSBpZiAoKHVpbnRw dHJfdCl0Y3R4ID4gKHVpbnRwdHJfdCkxVSkgewotCQkJYWxsb2NhdGlvbiA9IGltYWxsb2Nfc2Ft cGxlKAotCQkJICAgIHNvcHRzLCBkb3B0cywgdHNkLCB1c2l6ZSwgaW5kKTsKLQkJCWFsbG9jX2N0 eC5zbGFiID0gZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQlhbGxvY2F0aW9uID0gTlVMTDsKLQkJfQot Ci0JCWlmICh1bmxpa2VseShhbGxvY2F0aW9uID09IE5VTEwpKSB7Ci0JCQlwcm9mX2FsbG9jX3Jv bGxiYWNrKHRzZCwgdGN0eCk7Ci0JCQlnb3RvIGxhYmVsX29vbTsKLQkJfQotCQlwcm9mX21hbGxv Yyh0c2QsIGFsbG9jYXRpb24sIHNpemUsIHVzaXplLCAmYWxsb2NfY3R4LCB0Y3R4KTsKLQl9IGVs c2UgewotCQlhc3NlcnQoIW9wdF9wcm9mKTsKLQkJYWxsb2NhdGlvbiA9IGltYWxsb2Nfbm9fc2Ft cGxlKHNvcHRzLCBkb3B0cywgdHNkLCBzaXplLCB1c2l6ZSwKLQkJICAgIGluZCk7Ci0JCWlmICh1 bmxpa2VseShhbGxvY2F0aW9uID09IE5VTEwpKSB7Ci0JCQlnb3RvIGxhYmVsX29vbTsKLQkJfQot CX0KLQotCS8qCi0JICogQWxsb2NhdGlvbiBoYXMgYmVlbiBkb25lIGF0IHRoaXMgcG9pbnQuICBX ZSBzdGlsbCBoYXZlIHNvbWUKLQkgKiBwb3N0LWFsbG9jYXRpb24gd29yayB0byBkbyB0aG91Z2gu Ci0JICovCi0KLQl0aHJlYWRfYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7Ci0KLQlhc3NlcnQoZG9w dHMtPmFsaWdubWVudCA9PSAwCi0JICAgIHx8ICgodWludHB0cl90KWFsbG9jYXRpb24gJiAoZG9w dHMtPmFsaWdubWVudCAtIDEpKSA9PSBaVSgwKSk7Ci0KLQlhc3NlcnQodXNpemUgPT0gaXNhbGxv Yyh0c2RfdHNkbih0c2QpLCBhbGxvY2F0aW9uKSk7Ci0KLQlpZiAoY29uZmlnX2ZpbGwgJiYgc29w dHMtPnNsb3cgJiYgIWRvcHRzLT56ZXJvCi0JICAgICYmIHVubGlrZWx5KG9wdF9qdW5rX2FsbG9j KSkgewotCQlqdW5rX2FsbG9jX2NhbGxiYWNrKGFsbG9jYXRpb24sIHVzaXplKTsKLQl9Ci0KLQlp ZiAoc29wdHMtPnNsb3cpIHsKLQkJVVRSQUNFKDAsIHNpemUsIGFsbG9jYXRpb24pOwotCX0KLQot CS8qIFN1Y2Nlc3MhICovCi0JY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkp OwotCSpkb3B0cy0+cmVzdWx0ID0gYWxsb2NhdGlvbjsKLQlyZXR1cm4gMDsKLQotbGFiZWxfb29t OgotCWlmICh1bmxpa2VseShzb3B0cy0+c2xvdykgJiYgY29uZmlnX3htYWxsb2MgJiYgdW5saWtl bHkob3B0X3htYWxsb2MpKSB7Ci0JCW1hbGxvY193cml0ZShzb3B0cy0+b29tX3N0cmluZyk7Ci0J CWFib3J0KCk7Ci0JfQotCi0JaWYgKHNvcHRzLT5zbG93KSB7Ci0JCVVUUkFDRShOVUxMLCBzaXpl LCBOVUxMKTsKLQl9Ci0KLQljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7 Ci0KLQlpZiAoc29wdHMtPnNldF9lcnJub19vbl9lcnJvcikgewotCQlzZXRfZXJybm8oRU5PTUVN KTsKLQl9Ci0KLQlpZiAoc29wdHMtPm51bGxfb3V0X3Jlc3VsdF9vbl9lcnJvcikgewotCQkqZG9w dHMtPnJlc3VsdCA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIEVOT01FTTsKLQotCS8qCi0JICogVGhp cyBsYWJlbCBpcyBvbmx5IGp1bXBlZCB0byBieSBvbmUgZ290bzsgd2UgbW92ZSBpdCBvdXQgb2Yg bGluZQotCSAqIGFueXdheXMgdG8gYXZvaWQgb2JzY3VyaW5nIHRoZSBub24tZXJyb3IgcGF0aHMs IGFuZCBmb3Igc3ltbWV0cnkgd2l0aAotCSAqIHRoZSBvb20gY2FzZS4KLQkgKi8KLWxhYmVsX2lu dmFsaWRfYWxpZ25tZW50OgotCWlmIChjb25maWdfeG1hbGxvYyAmJiB1bmxpa2VseShvcHRfeG1h bGxvYykpIHsKLQkJbWFsbG9jX3dyaXRlKHNvcHRzLT5pbnZhbGlkX2FsaWdubWVudF9zdHJpbmcp OwotCQlhYm9ydCgpOwotCX0KLQotCWlmIChzb3B0cy0+c2V0X2Vycm5vX29uX2Vycm9yKSB7Ci0J CXNldF9lcnJubyhFSU5WQUwpOwotCX0KLQotCWlmIChzb3B0cy0+c2xvdykgewotCQlVVFJBQ0Uo TlVMTCwgc2l6ZSwgTlVMTCk7Ci0JfQotCi0JY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90 c2RuKHRzZCkpOwotCi0JaWYgKHNvcHRzLT5udWxsX291dF9yZXN1bHRfb25fZXJyb3IpIHsKLQkJ KmRvcHRzLT5yZXN1bHQgPSBOVUxMOwotCX0KLQotCXJldHVybiBFSU5WQUw7Ci19Ci0KLUpFTUFM TE9DX0FMV0FZU19JTkxJTkUgYm9vbAotaW1hbGxvY19pbml0X2NoZWNrKHN0YXRpY19vcHRzX3Qg KnNvcHRzLCBkeW5hbWljX29wdHNfdCAqZG9wdHMpIHsKLQlpZiAodW5saWtlbHkoIW1hbGxvY19p bml0aWFsaXplZCgpKSAmJiB1bmxpa2VseShtYWxsb2NfaW5pdCgpKSkgewotCQlpZiAoY29uZmln X3htYWxsb2MgJiYgdW5saWtlbHkob3B0X3htYWxsb2MpKSB7Ci0JCQltYWxsb2Nfd3JpdGUoc29w dHMtPm9vbV9zdHJpbmcpOwotCQkJYWJvcnQoKTsKLQkJfQotCQlVVFJBQ0UoTlVMTCwgZG9wdHMt Pm51bV9pdGVtcyAqIGRvcHRzLT5pdGVtX3NpemUsIE5VTEwpOwotCQlzZXRfZXJybm8oRU5PTUVN KTsKLQkJKmRvcHRzLT5yZXN1bHQgPSBOVUxMOwotCi0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQly ZXR1cm4gdHJ1ZTsKLX0KLQotLyogUmV0dXJucyB0aGUgZXJybm8tc3R5bGUgZXJyb3IgY29kZSBv ZiB0aGUgYWxsb2NhdGlvbi4gKi8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgaW50Ci1pbWFsbG9j KHN0YXRpY19vcHRzX3QgKnNvcHRzLCBkeW5hbWljX29wdHNfdCAqZG9wdHMpIHsKLQlpZiAodHNk X2dldF9hbGxvY2F0ZXMoKSAmJiAhaW1hbGxvY19pbml0X2NoZWNrKHNvcHRzLCBkb3B0cykpIHsK LQkJcmV0dXJuIEVOT01FTTsKLQl9Ci0KLQkvKiBXZSBhbHdheXMgbmVlZCB0aGUgdHNkLiAgTGV0 J3MgZ3JhYiBpdCByaWdodCBhd2F5LiAqLwotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKLQlh c3NlcnQodHNkKTsKLQlpZiAobGlrZWx5KHRzZF9mYXN0KHRzZCkpKSB7Ci0JCS8qIEZhc3QgYW5k IGNvbW1vbiBwYXRoLiAqLwotCQl0c2RfYXNzZXJ0X2Zhc3QodHNkKTsKLQkJc29wdHMtPnNsb3cg PSBmYWxzZTsKLQkJcmV0dXJuIGltYWxsb2NfYm9keShzb3B0cywgZG9wdHMsIHRzZCk7Ci0JfSBl bHNlIHsKLQkJaWYgKCF0c2RfZ2V0X2FsbG9jYXRlcygpICYmICFpbWFsbG9jX2luaXRfY2hlY2so c29wdHMsIGRvcHRzKSkgewotCQkJcmV0dXJuIEVOT01FTTsKLQkJfQotCi0JCXNvcHRzLT5zbG93 ID0gdHJ1ZTsKLQkJcmV0dXJuIGltYWxsb2NfYm9keShzb3B0cywgZG9wdHMsIHRzZCk7Ci0JfQot fQotCi1KRU1BTExPQ19OT0lOTElORQotdm9pZCAqCi1tYWxsb2NfZGVmYXVsdChzaXplX3Qgc2l6 ZSkgewotCXZvaWQgKnJldDsKLQlzdGF0aWNfb3B0c190IHNvcHRzOwotCWR5bmFtaWNfb3B0c190 IGRvcHRzOwotCi0JLyoKLQkgKiBUaGlzIHZhcmlhbnQgaGFzIGxvZ2dpbmcgaG9vayBvbiBleGl0 IGJ1dCBub3Qgb24gZW50cnkuICBJdCdzIGNhbGxsZWQKLQkgKiBvbmx5IGJ5IGplX21hbGxvYywg YmVsb3csIHdoaWNoIGVtaXRzIHRoZSBlbnRyeSBvbmUgZm9yIHVzIChhbmQsIGlmCi0JICogaXQg Y2FsbHMgdXMsIGRvZXMgc28gb25seSB2aWEgdGFpbCBjYWxsKS4KLQkgKi8KLQotCXN0YXRpY19v cHRzX2luaXQoJnNvcHRzKTsKLQlkeW5hbWljX29wdHNfaW5pdCgmZG9wdHMpOwotCi0Jc29wdHMu bnVsbF9vdXRfcmVzdWx0X29uX2Vycm9yID0gdHJ1ZTsKLQlzb3B0cy5zZXRfZXJybm9fb25fZXJy b3IgPSB0cnVlOwotCXNvcHRzLm9vbV9zdHJpbmcgPSAiPGplbWFsbG9jPjogRXJyb3IgaW4gbWFs bG9jKCk6IG91dCBvZiBtZW1vcnlcbiI7Ci0KLQlkb3B0cy5yZXN1bHQgPSAmcmV0OwotCWRvcHRz Lm51bV9pdGVtcyA9IDE7Ci0JZG9wdHMuaXRlbV9zaXplID0gc2l6ZTsKLQotCWltYWxsb2MoJnNv cHRzLCAmZG9wdHMpOwotCS8qCi0JICogTm90ZSB0aGF0IHRoaXMgYnJhbmNoIGdldHMgb3B0aW1p emVkIGF3YXkgLS0gaXQgaW1tZWRpYXRlbHkgZm9sbG93cwotCSAqIHRoZSBjaGVjayBvbiB0c2Rf ZmFzdCB0aGF0IHNldHMgc29wdHMuc2xvdy4KLQkgKi8KLQlpZiAoc29wdHMuc2xvdykgewotCQl1 aW50cHRyX3QgYXJnc1szXSA9IHtzaXplfTsKLQkJaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxv Y19tYWxsb2MsIHJldCwgKHVpbnRwdHJfdClyZXQsIGFyZ3MpOwotCX0KLQotCUxPRygiY29yZS5t YWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQmVnaW4gbWFsbG9jKDMpLWNvbXBhdGlibGUg ZnVuY3Rpb25zLgotICovCi0KLUpFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVN QUxMT0NfUkVTVFJJQ1RfUkVUVVJOCi12b2lkIEpFTUFMTE9DX05PVEhST1cgKgotSkVNQUxMT0Nf QVRUUihtYWxsb2MpIEpFTUFMTE9DX0FMTE9DX1NJWkUoMSkKLWplX21hbGxvYyhzaXplX3Qgc2l6 ZSkgewotCXJldHVybiBpbWFsbG9jX2Zhc3RwYXRoKHNpemUsICZtYWxsb2NfZGVmYXVsdCk7Ci19 Ci0KLUpFTUFMTE9DX0VYUE9SVCBpbnQgSkVNQUxMT0NfTk9USFJPVwotSkVNQUxMT0NfQVRUUihu b25udWxsKDEpKQotamVfcG9zaXhfbWVtYWxpZ24odm9pZCAqKm1lbXB0ciwgc2l6ZV90IGFsaWdu bWVudCwgc2l6ZV90IHNpemUpIHsKLQlpbnQgcmV0OwotCXN0YXRpY19vcHRzX3Qgc29wdHM7Ci0J ZHluYW1pY19vcHRzX3QgZG9wdHM7Ci0KLQlMT0coImNvcmUucG9zaXhfbWVtYWxpZ24uZW50cnki LCAibWVtIHB0cjogJXAsIGFsaWdubWVudDogJXp1LCAiCi0JICAgICJzaXplOiAlenUiLCBtZW1w dHIsIGFsaWdubWVudCwgc2l6ZSk7Ci0KLQlzdGF0aWNfb3B0c19pbml0KCZzb3B0cyk7Ci0JZHlu YW1pY19vcHRzX2luaXQoJmRvcHRzKTsKLQotCXNvcHRzLmJ1bXBfZW1wdHlfYWxpZ25lZF9hbGxv YyA9IHRydWU7Ci0Jc29wdHMubWluX2FsaWdubWVudCA9IHNpemVvZih2b2lkICopOwotCXNvcHRz Lm9vbV9zdHJpbmcgPQotCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVk IG1lbW9yeTogb3V0IG9mIG1lbW9yeVxuIjsKLQlzb3B0cy5pbnZhbGlkX2FsaWdubWVudF9zdHJp bmcgPQotCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTog aW52YWxpZCBhbGlnbm1lbnRcbiI7Ci0KLQlkb3B0cy5yZXN1bHQgPSBtZW1wdHI7Ci0JZG9wdHMu bnVtX2l0ZW1zID0gMTsKLQlkb3B0cy5pdGVtX3NpemUgPSBzaXplOwotCWRvcHRzLmFsaWdubWVu dCA9IGFsaWdubWVudDsKLQotCXJldCA9IGltYWxsb2MoJnNvcHRzLCAmZG9wdHMpOwotCWlmIChz b3B0cy5zbG93KSB7Ci0JCXVpbnRwdHJfdCBhcmdzWzNdID0geyh1aW50cHRyX3QpbWVtcHRyLCAo dWludHB0cl90KWFsaWdubWVudCwKLQkJCSh1aW50cHRyX3Qpc2l6ZX07Ci0JCWhvb2tfaW52b2tl X2FsbG9jKGhvb2tfYWxsb2NfcG9zaXhfbWVtYWxpZ24sICptZW1wdHIsCi0JCSAgICAodWludHB0 cl90KXJldCwgYXJncyk7Ci0JfQotCi0JTE9HKCJjb3JlLnBvc2l4X21lbWFsaWduLmV4aXQiLCAi cmVzdWx0OiAlZCwgYWxsb2MgcHRyOiAlcCIsIHJldCwKLQkgICAgKm1lbXB0cik7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi1KRU1BTExPQ19FWFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9SIEpFTUFMTE9D X1JFU1RSSUNUX1JFVFVSTgotdm9pZCBKRU1BTExPQ19OT1RIUk9XICoKLUpFTUFMTE9DX0FUVFIo bWFsbG9jKSBKRU1BTExPQ19BTExPQ19TSVpFKDIpCi1qZV9hbGlnbmVkX2FsbG9jKHNpemVfdCBh bGlnbm1lbnQsIHNpemVfdCBzaXplKSB7Ci0Jdm9pZCAqcmV0OwotCi0Jc3RhdGljX29wdHNfdCBz b3B0czsKLQlkeW5hbWljX29wdHNfdCBkb3B0czsKLQotCUxPRygiY29yZS5hbGlnbmVkX2FsbG9j LmVudHJ5IiwgImFsaWdubWVudDogJXp1LCBzaXplOiAlenVcbiIsCi0JICAgIGFsaWdubWVudCwg c2l6ZSk7Ci0KLQlzdGF0aWNfb3B0c19pbml0KCZzb3B0cyk7Ci0JZHluYW1pY19vcHRzX2luaXQo JmRvcHRzKTsKLQotCXNvcHRzLmJ1bXBfZW1wdHlfYWxpZ25lZF9hbGxvYyA9IHRydWU7Ci0Jc29w dHMubnVsbF9vdXRfcmVzdWx0X29uX2Vycm9yID0gdHJ1ZTsKLQlzb3B0cy5zZXRfZXJybm9fb25f ZXJyb3IgPSB0cnVlOwotCXNvcHRzLm1pbl9hbGlnbm1lbnQgPSAxOwotCXNvcHRzLm9vbV9zdHJp bmcgPQotCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTog b3V0IG9mIG1lbW9yeVxuIjsKLQlzb3B0cy5pbnZhbGlkX2FsaWdubWVudF9zdHJpbmcgPQotCSAg ICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTogaW52YWxpZCBh bGlnbm1lbnRcbiI7Ci0KLQlkb3B0cy5yZXN1bHQgPSAmcmV0OwotCWRvcHRzLm51bV9pdGVtcyA9 IDE7Ci0JZG9wdHMuaXRlbV9zaXplID0gc2l6ZTsKLQlkb3B0cy5hbGlnbm1lbnQgPSBhbGlnbm1l bnQ7Ci0KLQlpbWFsbG9jKCZzb3B0cywgJmRvcHRzKTsKLQlpZiAoc29wdHMuc2xvdykgewotCQl1 aW50cHRyX3QgYXJnc1szXSA9IHsodWludHB0cl90KWFsaWdubWVudCwgKHVpbnRwdHJfdClzaXpl fTsKLQkJaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY19hbGlnbmVkX2FsbG9jLCByZXQsCi0J CSAgICAodWludHB0cl90KXJldCwgYXJncyk7Ci0JfQotCi0JTE9HKCJjb3JlLmFsaWduZWRfYWxs b2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLUpFTUFM TE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCi12 b2lkIEpFTUFMTE9DX05PVEhST1cgKgotSkVNQUxMT0NfQVRUUihtYWxsb2MpIEpFTUFMTE9DX0FM TE9DX1NJWkUyKDEsIDIpCi1qZV9jYWxsb2Moc2l6ZV90IG51bSwgc2l6ZV90IHNpemUpIHsKLQl2 b2lkICpyZXQ7Ci0Jc3RhdGljX29wdHNfdCBzb3B0czsKLQlkeW5hbWljX29wdHNfdCBkb3B0czsK LQotCUxPRygiY29yZS5jYWxsb2MuZW50cnkiLCAibnVtOiAlenUsIHNpemU6ICV6dVxuIiwgbnVt LCBzaXplKTsKLQotCXN0YXRpY19vcHRzX2luaXQoJnNvcHRzKTsKLQlkeW5hbWljX29wdHNfaW5p dCgmZG9wdHMpOwotCi0Jc29wdHMubWF5X292ZXJmbG93ID0gdHJ1ZTsKLQlzb3B0cy5udWxsX291 dF9yZXN1bHRfb25fZXJyb3IgPSB0cnVlOwotCXNvcHRzLnNldF9lcnJub19vbl9lcnJvciA9IHRy dWU7Ci0Jc29wdHMub29tX3N0cmluZyA9ICI8amVtYWxsb2M+OiBFcnJvciBpbiBjYWxsb2MoKTog b3V0IG9mIG1lbW9yeVxuIjsKLQotCWRvcHRzLnJlc3VsdCA9ICZyZXQ7Ci0JZG9wdHMubnVtX2l0 ZW1zID0gbnVtOwotCWRvcHRzLml0ZW1fc2l6ZSA9IHNpemU7Ci0JZG9wdHMuemVybyA9IHRydWU7 Ci0KLQlpbWFsbG9jKCZzb3B0cywgJmRvcHRzKTsKLQlpZiAoc29wdHMuc2xvdykgewotCQl1aW50 cHRyX3QgYXJnc1szXSA9IHsodWludHB0cl90KW51bSwgKHVpbnRwdHJfdClzaXplfTsKLQkJaG9v a19pbnZva2VfYWxsb2MoaG9va19hbGxvY19jYWxsb2MsIHJldCwgKHVpbnRwdHJfdClyZXQsIGFy Z3MpOwotCX0KLQotCUxPRygiY29yZS5jYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsK LQotCXJldHVybiByZXQ7Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgdm9pZAotaWZyZWUo dHNkX3QgKnRzZCwgdm9pZCAqcHRyLCB0Y2FjaGVfdCAqdGNhY2hlLCBib29sIHNsb3dfcGF0aCkg ewotCWlmICghc2xvd19wYXRoKSB7Ci0JCXRzZF9hc3NlcnRfZmFzdCh0c2QpOwotCX0KLQljaGVj a19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7Ci0JaWYgKHRzZF9yZWVudHJhbmN5 X2xldmVsX2dldCh0c2QpICE9IDApIHsKLQkJYXNzZXJ0KHNsb3dfcGF0aCk7Ci0JfQotCi0JYXNz ZXJ0KHB0ciAhPSBOVUxMKTsKLQlhc3NlcnQobWFsbG9jX2luaXRpYWxpemVkKCkgfHwgSVNfSU5J VElBTElaRVIpOwotCi0JZW1hcF9hbGxvY19jdHhfdCBhbGxvY19jdHg7Ci0JZW1hcF9hbGxvY19j dHhfbG9va3VwKHRzZF90c2RuKHRzZCksICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyLAotCSAgICAm YWxsb2NfY3R4KTsKLQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kICE9IFNDX05TSVpFUyk7Ci0KLQlz aXplX3QgdXNpemUgPSBzel9pbmRleDJzaXplKGFsbG9jX2N0eC5zemluZCk7Ci0JaWYgKGNvbmZp Z19wcm9mICYmIG9wdF9wcm9mKSB7Ci0JCXByb2ZfZnJlZSh0c2QsIHB0ciwgdXNpemUsICZhbGxv Y19jdHgpOwotCX0KLQotCWlmIChsaWtlbHkoIXNsb3dfcGF0aCkpIHsKLQkJaWRhbGxvY3RtKHRz ZF90c2RuKHRzZCksIHB0ciwgdGNhY2hlLCAmYWxsb2NfY3R4LCBmYWxzZSwKLQkJICAgIGZhbHNl KTsKLQl9IGVsc2UgewotCQlpZiAoY29uZmlnX2ZpbGwgJiYgc2xvd19wYXRoICYmIG9wdF9qdW5r X2ZyZWUpIHsKLQkJCWp1bmtfZnJlZV9jYWxsYmFjayhwdHIsIHVzaXplKTsKLQkJfQotCQlpZGFs bG9jdG0odHNkX3RzZG4odHNkKSwgcHRyLCB0Y2FjaGUsICZhbGxvY19jdHgsIGZhbHNlLAotCQkg ICAgdHJ1ZSk7Ci0JfQotCXRocmVhZF9kYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7Ci19Ci0KLUpF TUFMTE9DX0FMV0FZU19JTkxJTkUgYm9vbAotbWF5YmVfY2hlY2tfYWxsb2NfY3R4KHRzZF90ICp0 c2QsIHZvaWQgKnB0ciwgZW1hcF9hbGxvY19jdHhfdCAqYWxsb2NfY3R4KSB7Ci0JaWYgKGNvbmZp Z19vcHRfc2l6ZV9jaGVja3MpIHsKLQkJZW1hcF9hbGxvY19jdHhfdCBkYmdfY3R4OwotCQllbWFw X2FsbG9jX2N0eF9sb29rdXAodHNkX3RzZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIs Ci0JCSAgICAmZGJnX2N0eCk7Ci0JCWlmIChhbGxvY19jdHgtPnN6aW5kICE9IGRiZ19jdHguc3pp bmQpIHsKLQkJCXNhZmV0eV9jaGVja19mYWlsX3NpemVkX2RlYWxsb2MoCi0JCQkgICAgLyogY3Vy cmVudF9kZWFsbG9jICovIHRydWUsIHB0ciwKLQkJCSAgICAvKiB0cnVlX3NpemUgKi8gc3pfc2l6 ZTJpbmRleChkYmdfY3R4LnN6aW5kKSwKLQkJCSAgICAvKiBpbnB1dF9zaXplICovIHN6X3NpemUy aW5kZXgoYWxsb2NfY3R4LT5zemluZCkpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJaWYgKGFs bG9jX2N0eC0+c2xhYiAhPSBkYmdfY3R4LnNsYWIpIHsKLQkJCXNhZmV0eV9jaGVja19mYWlsKAot CQkJICAgICJJbnRlcm5hbCBoZWFwIGNvcnJ1cHRpb24gZGV0ZWN0ZWQ6ICIKLQkJCSAgICAibWlz bWF0Y2ggaW4gc2xhYiBiaXQiKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBm YWxzZTsKLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSB2b2lkCi1pc2ZyZWUodHNkX3QgKnRz ZCwgdm9pZCAqcHRyLCBzaXplX3QgdXNpemUsIHRjYWNoZV90ICp0Y2FjaGUsIGJvb2wgc2xvd19w YXRoKSB7Ci0JaWYgKCFzbG93X3BhdGgpIHsKLQkJdHNkX2Fzc2VydF9mYXN0KHRzZCk7Ci0JfQot CWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLQlpZiAodHNkX3JlZW50 cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgIT0gMCkgewotCQlhc3NlcnQoc2xvd19wYXRoKTsKLQl9Ci0K LQlhc3NlcnQocHRyICE9IE5VTEwpOwotCWFzc2VydChtYWxsb2NfaW5pdGlhbGl6ZWQoKSB8fCBJ U19JTklUSUFMSVpFUik7Ci0KLQllbWFwX2FsbG9jX2N0eF90IGFsbG9jX2N0eDsKLQlpZiAoIWNv bmZpZ19wcm9mKSB7Ci0JCWFsbG9jX2N0eC5zemluZCA9IHN6X3NpemUyaW5kZXgodXNpemUpOwot CQlhbGxvY19jdHguc2xhYiA9IChhbGxvY19jdHguc3ppbmQgPCBTQ19OQklOUyk7Ci0JfSBlbHNl IHsKLQkJaWYgKGxpa2VseSghcHJvZl9zYW1wbGVfYWxpZ25lZChwdHIpKSkgewotCQkJLyoKLQkJ CSAqIFdoZW4gdGhlIHB0ciBpcyBub3QgcGFnZSBhbGlnbmVkLCBpdCB3YXMgbm90IHNhbXBsZWQu Ci0JCQkgKiB1c2l6ZSBjYW4gYmUgdHJ1c3RlZCB0byBkZXRlcm1pbmUgc3ppbmQgYW5kIHNsYWIu Ci0JCQkgKi8KLQkJCWFsbG9jX2N0eC5zemluZCA9IHN6X3NpemUyaW5kZXgodXNpemUpOwotCQkJ YWxsb2NfY3R4LnNsYWIgPSAoYWxsb2NfY3R4LnN6aW5kIDwgU0NfTkJJTlMpOwotCQl9IGVsc2Ug aWYgKG9wdF9wcm9mKSB7Ci0JCQllbWFwX2FsbG9jX2N0eF9sb29rdXAodHNkX3RzZG4odHNkKSwg JmFyZW5hX2VtYXBfZ2xvYmFsLAotCQkJICAgIHB0ciwgJmFsbG9jX2N0eCk7Ci0KLQkJCWlmIChj b25maWdfb3B0X3NhZmV0eV9jaGVja3MpIHsKLQkJCQkvKiBTbWFsbCBhbGxvYyBtYXkgaGF2ZSAh c2xhYiAoc2FtcGxlZCkuICovCi0JCQkJaWYgKHVubGlrZWx5KGFsbG9jX2N0eC5zemluZCAhPQot CQkJCSAgICBzel9zaXplMmluZGV4KHVzaXplKSkpIHsKLQkJCQkJc2FmZXR5X2NoZWNrX2ZhaWxf c2l6ZWRfZGVhbGxvYygKLQkJCQkJICAgIC8qIGN1cnJlbnRfZGVhbGxvYyAqLyB0cnVlLCBwdHIs Ci0JCQkJCSAgICAvKiB0cnVlX3NpemUgKi8gc3pfaW5kZXgyc2l6ZSgKLQkJCQkJICAgIGFsbG9j X2N0eC5zemluZCksCi0JCQkJCSAgICAvKiBpbnB1dF9zaXplICovIHVzaXplKTsKLQkJCQl9Ci0J CQl9Ci0JCX0gZWxzZSB7Ci0JCQlhbGxvY19jdHguc3ppbmQgPSBzel9zaXplMmluZGV4KHVzaXpl KTsKLQkJCWFsbG9jX2N0eC5zbGFiID0gKGFsbG9jX2N0eC5zemluZCA8IFNDX05CSU5TKTsKLQkJ fQotCX0KLQlib29sIGZhaWwgPSBtYXliZV9jaGVja19hbGxvY19jdHgodHNkLCBwdHIsICZhbGxv Y19jdHgpOwotCWlmIChmYWlsKSB7Ci0JCS8qCi0JCSAqIFRoaXMgaXMgYSBoZWFwIGNvcnJ1cHRp b24gYnVnLiAgSW4gcmVhbCBsaWZlIHdlJ2xsIGNyYXNoOyBmb3IKLQkJICogdGhlIHVuaXQgdGVz dCB3ZSBqdXN0IHdhbnQgdG8gYXZvaWQgYnJlYWtpbmcgYW55dGhpbmcgdG9vCi0JCSAqIGJhZGx5 IHRvIGdldCBhIHRlc3QgcmVzdWx0IG91dC4gIExldCdzIGxlYWsgaW5zdGVhZCBvZiB0cnlpbmcK LQkJICogdG8gZnJlZS4KLQkJICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY29uZmlnX3Byb2Yg JiYgb3B0X3Byb2YpIHsKLQkJcHJvZl9mcmVlKHRzZCwgcHRyLCB1c2l6ZSwgJmFsbG9jX2N0eCk7 Ci0JfQotCWlmIChsaWtlbHkoIXNsb3dfcGF0aCkpIHsKLQkJaXNkYWxsb2N0KHRzZF90c2RuKHRz ZCksIHB0ciwgdXNpemUsIHRjYWNoZSwgJmFsbG9jX2N0eCwKLQkJICAgIGZhbHNlKTsKLQl9IGVs c2UgewotCQlpZiAoY29uZmlnX2ZpbGwgJiYgc2xvd19wYXRoICYmIG9wdF9qdW5rX2ZyZWUpIHsK LQkJCWp1bmtfZnJlZV9jYWxsYmFjayhwdHIsIHVzaXplKTsKLQkJfQotCQlpc2RhbGxvY3QodHNk X3RzZG4odHNkKSwgcHRyLCB1c2l6ZSwgdGNhY2hlLCAmYWxsb2NfY3R4LAotCQkgICAgdHJ1ZSk7 Ci0JfQotCXRocmVhZF9kYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7Ci19Ci0KLUpFTUFMTE9DX05P SU5MSU5FCi12b2lkCi1mcmVlX2RlZmF1bHQodm9pZCAqcHRyKSB7Ci0JVVRSQUNFKHB0ciwgMCwg MCk7Ci0JaWYgKGxpa2VseShwdHIgIT0gTlVMTCkpIHsKLQkJLyoKLQkJICogV2UgYXZvaWQgc2V0 dGluZyB1cCB0c2QgZnVsbHkgKGUuZy4gdGNhY2hlLCBhcmVuYSBiaW5kaW5nKQotCQkgKiBiYXNl ZCBvbiBvbmx5IGZyZWUoKSBjYWxscyAtLSBvdGhlciBhY3Rpdml0aWVzIHRyaWdnZXIgdGhlCi0J CSAqIG1pbmltYWwgdG8gZnVsbCB0cmFuc2l0aW9uLiAgVGhpcyBpcyBiZWNhdXNlIGZyZWUoKSBt YXkKLQkJICogaGFwcGVuIGR1cmluZyB0aHJlYWQgc2h1dGRvd24gYWZ0ZXIgdGxzIGRlYWxsb2Nh dGlvbjogaWYgYQotCQkgKiB0aHJlYWQgbmV2ZXIgaGFkIGFueSBtYWxsb2MgYWN0aXZpdGllcyB1 bnRpbCB0aGVuLCBhCi0JCSAqIGZ1bGx5LXNldHVwIHRzZCB3b24ndCBiZSBkZXN0cnVjdGVkIHBy b3Blcmx5LgotCQkgKi8KLQkJdHNkX3QgKnRzZCA9IHRzZF9mZXRjaF9taW4oKTsKLQkJY2hlY2tf ZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOwotCi0JCWlmIChsaWtlbHkodHNkX2Zh c3QodHNkKSkpIHsKLQkJCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0X2Zyb21faW5kKHRz ZCwKLQkJCSAgICBUQ0FDSEVfSU5EX0FVVE9NQVRJQywgLyogc2xvdyAqLyBmYWxzZSwKLQkJCSAg ICAvKiBpc19hbGxvYyAqLyBmYWxzZSk7Ci0JCQlpZnJlZSh0c2QsIHB0ciwgdGNhY2hlLCAvKiBz bG93ICovIGZhbHNlKTsKLQkJfSBlbHNlIHsKLQkJCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVf Z2V0X2Zyb21faW5kKHRzZCwKLQkJCSAgICBUQ0FDSEVfSU5EX0FVVE9NQVRJQywgLyogc2xvdyAq LyB0cnVlLAotCQkJICAgIC8qIGlzX2FsbG9jICovIGZhbHNlKTsKLQkJCXVpbnRwdHJfdCBhcmdz X3Jhd1szXSA9IHsodWludHB0cl90KXB0cn07Ci0JCQlob29rX2ludm9rZV9kYWxsb2MoaG9va19k YWxsb2NfZnJlZSwgcHRyLCBhcmdzX3Jhdyk7Ci0JCQlpZnJlZSh0c2QsIHB0ciwgdGNhY2hlLCAv KiBzbG93ICovIHRydWUpOwotCQl9Ci0KLQkJY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90 c2RuKHRzZCkpOwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi1mcmVlX2Zh c3RwYXRoX25vbmZhc3RfYWxpZ25lZCh2b2lkICpwdHIsIGJvb2wgY2hlY2tfcHJvZikgewotCS8q Ci0JICogZnJlZV9mYXN0cGF0aCBkbyBub3QgaGFuZGxlIHR3byB1bmNvbW1vbiBjYXNlczogMSkg c2FtcGxlZCBwcm9maWxlZAotCSAqIG9iamVjdHMgYW5kIDIpIHNhbXBsZWQganVuayAmIHN0YXNo IGZvciB1c2UtYWZ0ZXItZnJlZSBkZXRlY3Rpb24uCi0JICogQm90aCBoYXZlIHNwZWNpYWwgYWxp Z25tZW50cyB3aGljaCBhcmUgdXNlZCB0byBlc2NhcGUgdGhlIGZhc3RwYXRoLgotCSAqCi0JICog cHJvZl9zYW1wbGUgaXMgcGFnZS1hbGlnbmVkLCB3aGljaCBjb3ZlcnMgdGhlIFVBRiBjaGVjayB3 aGVuIGJvdGgKLQkgKiBhcmUgZW5hYmxlZCAodGhlIGFzc2VydGlvbiBiZWxvdykuICBBdm9pZGlu ZyByZWR1bmRhbnQgY2hlY2tzIHNpbmNlCi0JICogdGhpcyBpcyBvbiB0aGUgZmFzdHBhdGggLS0g YXQgbW9zdCBvbmUgcnVudGltZSBicmFuY2ggZnJvbSB0aGlzLgotCSAqLwotCWlmIChjb25maWdf ZGVidWcgJiYgY2FjaGVfYmluX25vbmZhc3RfYWxpZ25lZChwdHIpKSB7Ci0JCWFzc2VydChwcm9m X3NhbXBsZV9hbGlnbmVkKHB0cikpOwotCX0KLQotCWlmIChjb25maWdfcHJvZiAmJiBjaGVja19w cm9mKSB7Ci0JCS8qIFdoZW4gcHJvZiBpcyBlbmFibGVkLCB0aGUgcHJvZl9zYW1wbGUgYWxpZ25t ZW50IGlzIGVub3VnaC4gKi8KLQkJaWYgKHByb2Zfc2FtcGxlX2FsaWduZWQocHRyKSkgewotCQkJ cmV0dXJuIHRydWU7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlp ZiAoY29uZmlnX3VhZl9kZXRlY3Rpb24pIHsKLQkJaWYgKGNhY2hlX2Jpbl9ub25mYXN0X2FsaWdu ZWQocHRyKSkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gZmFsc2U7 Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qIFJldHVybnMgd2hldGhlciBvciBu b3QgdGhlIGZyZWUgYXR0ZW1wdCB3YXMgc3VjY2Vzc2Z1bC4gKi8KLUpFTUFMTE9DX0FMV0FZU19J TkxJTkUKLWJvb2wgZnJlZV9mYXN0cGF0aCh2b2lkICpwdHIsIHNpemVfdCBzaXplLCBib29sIHNp emVfaGludCkgewotCXRzZF90ICp0c2QgPSB0c2RfZ2V0KGZhbHNlKTsKLQkvKiBUaGUgYnJhbmNo IGdldHMgb3B0aW1pemVkIGF3YXkgdW5sZXNzIHRzZF9nZXRfYWxsb2NhdGVzKCkuICovCi0JaWYg KHVubGlrZWx5KHRzZCA9PSBOVUxMKSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCS8qCi0JICog IFRoZSB0c2RfZmFzdCgpIC8gaW5pdGlhbGl6ZWQgY2hlY2tzIGFyZSBmb2xkZWQgaW50byB0aGUg YnJhbmNoCi0JICogIHRlc3RpbmcgKGRlYWxsb2NhdGVkX2FmdGVyID49IHRocmVzaG9sZCkgbGF0 ZXIgaW4gdGhpcyBmdW5jdGlvbi4KLQkgKiAgVGhlIHRocmVzaG9sZCB3aWxsIGJlIHNldCB0byAw IHdoZW4gIXRzZF9mYXN0LgotCSAqLwotCWFzc2VydCh0c2RfZmFzdCh0c2QpIHx8Ci0JICAgICp0 c2RfdGhyZWFkX2RlYWxsb2NhdGVkX25leHRfZXZlbnRfZmFzdHBfZ2V0X3Vuc2FmZSh0c2QpID09 IDApOwotCi0JZW1hcF9hbGxvY19jdHhfdCBhbGxvY19jdHg7Ci0JaWYgKCFzaXplX2hpbnQpIHsK LQkJYm9vbCBlcnIgPSBlbWFwX2FsbG9jX2N0eF90cnlfbG9va3VwX2Zhc3QodHNkLAotCQkgICAg JmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIsICZhbGxvY19jdHgpOwotCi0JCS8qIE5vdGU6IHByb2Zp bGVkIG9iamVjdHMgd2lsbCBoYXZlIGFsbG9jX2N0eC5zbGFiIHNldCAqLwotCQlpZiAodW5saWtl bHkoZXJyIHx8ICFhbGxvY19jdHguc2xhYiB8fAotCQkgICAgZnJlZV9mYXN0cGF0aF9ub25mYXN0 X2FsaWduZWQocHRyLAotCQkgICAgLyogY2hlY2tfcHJvZiAqLyBmYWxzZSkpKSB7Ci0JCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KLQkJYXNzZXJ0KGFsbG9jX2N0eC5zemluZCAhPSBTQ19OU0laRVMpOwot CX0gZWxzZSB7Ci0JCS8qCi0JCSAqIENoZWNrIGZvciBib3RoIHNpemVzIHRoYXQgYXJlIHRvbyBs YXJnZSwgYW5kIGZvciBzYW1wbGVkIC8KLQkJICogc3BlY2lhbCBhbGlnbmVkIG9iamVjdHMuICBU aGUgYWxpZ25tZW50IGNoZWNrIHdpbGwgYWxzbyBjaGVjawotCQkgKiBmb3IgbnVsbCBwdHIuCi0J CSAqLwotCQlpZiAodW5saWtlbHkoc2l6ZSA+IFNDX0xPT0tVUF9NQVhDTEFTUyB8fAotCQkgICAg ZnJlZV9mYXN0cGF0aF9ub25mYXN0X2FsaWduZWQocHRyLAotCQkgICAgLyogY2hlY2tfcHJvZiAq LyB0cnVlKSkpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlhbGxvY19jdHguc3ppbmQgPSBz el9zaXplMmluZGV4X2xvb2t1cChzaXplKTsKLQkJLyogTWF4IGxvb2t1cCBjbGFzcyBtdXN0IGJl IHNtYWxsLiAqLwotCQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kIDwgU0NfTkJJTlMpOwotCQkvKiBU aGlzIGlzIGEgZGVhZCBzdG9yZSwgZXhjZXB0IHdoZW4gb3B0IHNpemUgY2hlY2tpbmcgaXMgb24u ICovCi0JCWFsbG9jX2N0eC5zbGFiID0gdHJ1ZTsKLQl9Ci0JLyoKLQkgKiBDdXJyZW50bHkgdGhl IGZhc3RwYXRoIG9ubHkgaGFuZGxlcyBzbWFsbCBzaXplcy4gIFRoZSBicmFuY2ggb24KLQkgKiBT Q19MT09LVVBfTUFYQ0xBU1MgbWFrZXMgc3VyZSBvZiBpdC4gIFRoaXMgbGV0cyB1cyBhdm9pZCBj aGVja2luZwotCSAqIHRjYWNoZSBzemluZCB1cHBlciBsaW1pdCAoaS5lLiB0Y2FjaGVfbWF4Y2xh c3MpIGFzIHdlbGwuCi0JICovCi0JYXNzZXJ0KGFsbG9jX2N0eC5zbGFiKTsKLQotCXVpbnQ2NF90 IGRlYWxsb2NhdGVkLCB0aHJlc2hvbGQ7Ci0JdGVfZnJlZV9mYXN0cGF0aF9jdHgodHNkLCAmZGVh bGxvY2F0ZWQsICZ0aHJlc2hvbGQpOwotCi0Jc2l6ZV90IHVzaXplID0gc3pfaW5kZXgyc2l6ZShh bGxvY19jdHguc3ppbmQpOwotCXVpbnQ2NF90IGRlYWxsb2NhdGVkX2FmdGVyID0gZGVhbGxvY2F0 ZWQgKyB1c2l6ZTsKLQkvKgotCSAqIENoZWNrIGZvciBldmVudHMgYW5kIHRzZCBub24tbm9taW5h bCAoZmFzdF90aHJlc2hvbGQgd2lsbCBiZSBzZXQgdG8KLQkgKiAwKSBpbiBhIHNpbmdsZSBicmFu Y2guICBOb3RlIHRoYXQgdGhpcyBoYW5kbGVzIHRoZSB1bmluaXRpYWxpemVkIGNhc2UKLQkgKiBh cyB3ZWxsIChUU0QgaW5pdCB3aWxsIGJlIHRyaWdnZXJlZCBvbiB0aGUgbm9uLWZhc3RwYXRoKS4g IFRoZXJlZm9yZQotCSAqIGFueXRoaW5nIGRlcGVuZHMgb24gYSBmdW5jdGlvbmFsIFRTRCAoZS5n LiB0aGUgYWxsb2NfY3R4IHNhbml0eSBjaGVjawotCSAqIGJlbG93KSBuZWVkcyB0byBiZSBhZnRl ciB0aGlzIGJyYW5jaC4KLQkgKi8KLQlpZiAodW5saWtlbHkoZGVhbGxvY2F0ZWRfYWZ0ZXIgPj0g dGhyZXNob2xkKSkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWFzc2VydCh0c2RfZmFzdCh0c2Qp KTsKLQlib29sIGZhaWwgPSBtYXliZV9jaGVja19hbGxvY19jdHgodHNkLCBwdHIsICZhbGxvY19j dHgpOwotCWlmIChmYWlsKSB7Ci0JCS8qIFNlZSB0aGUgY29tbWVudCBpbiBpc2ZyZWUuICovCi0J CXJldHVybiB0cnVlOwotCX0KLQotCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0X2Zyb21f aW5kKHRzZCwgVENBQ0hFX0lORF9BVVRPTUFUSUMsCi0JICAgIC8qIHNsb3cgKi8gZmFsc2UsIC8q IGlzX2FsbG9jICovIGZhbHNlKTsKLQljYWNoZV9iaW5fdCAqYmluID0gJnRjYWNoZS0+Ymluc1th bGxvY19jdHguc3ppbmRdOwotCi0JLyoKLQkgKiBJZiBqdW5raW5nIHdlcmUgZW5hYmxlZCwgdGhp cyBpcyB3aGVyZSB3ZSB3b3VsZCBkbyBpdC4gIEl0J3Mgbm90Ci0JICogdGhvdWdoLCBzaW5jZSB3 ZSBlbnN1cmVkIGFib3ZlIHRoYXQgd2UncmUgb24gdGhlIGZhc3QgcGF0aC4gIEFzc2VydAotCSAq IHRoYXQgdG8gZG91YmxlLWNoZWNrLgotCSAqLwotCWFzc2VydCghb3B0X2p1bmtfZnJlZSk7Ci0K LQlpZiAoIWNhY2hlX2Jpbl9kYWxsb2NfZWFzeShiaW4sIHB0cikpIHsKLQkJcmV0dXJuIGZhbHNl OwotCX0KLQotCSp0c2RfdGhyZWFkX2RlYWxsb2NhdGVkcF9nZXQodHNkKSA9IGRlYWxsb2NhdGVk X2FmdGVyOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLUpFTUFMTE9DX0VYUE9SVCB2b2lkIEpFTUFM TE9DX05PVEhST1cKLWplX2ZyZWUodm9pZCAqcHRyKSB7Ci0JTE9HKCJjb3JlLmZyZWUuZW50cnki LCAicHRyOiAlcCIsIHB0cik7Ci0KLQlpZiAoIWZyZWVfZmFzdHBhdGgocHRyLCAwLCBmYWxzZSkp IHsKLQkJZnJlZV9kZWZhdWx0KHB0cik7Ci0JfQotCi0JTE9HKCJjb3JlLmZyZWUuZXhpdCIsICIi KTsKLX0KLQotLyoKLSAqIEVuZCBtYWxsb2MoMyktY29tcGF0aWJsZSBmdW5jdGlvbnMuCi0gKi8K LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogQmVnaW4gbm9uLXN0YW5kYXJkIG92ZXJy aWRlIGZ1bmN0aW9ucy4KLSAqLwotCi0jaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfTUVNQUxJR04K LUpFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVU VVJOCi12b2lkIEpFTUFMTE9DX05PVEhST1cgKgotSkVNQUxMT0NfQVRUUihtYWxsb2MpCi1qZV9t ZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgewotCXZvaWQgKnJldDsKLQlz dGF0aWNfb3B0c190IHNvcHRzOwotCWR5bmFtaWNfb3B0c190IGRvcHRzOwotCi0JTE9HKCJjb3Jl Lm1lbWFsaWduLmVudHJ5IiwgImFsaWdubWVudDogJXp1LCBzaXplOiAlenVcbiIsIGFsaWdubWVu dCwKLQkgICAgc2l6ZSk7Ci0KLQlzdGF0aWNfb3B0c19pbml0KCZzb3B0cyk7Ci0JZHluYW1pY19v cHRzX2luaXQoJmRvcHRzKTsKLQotCXNvcHRzLm1pbl9hbGlnbm1lbnQgPSAxOwotCXNvcHRzLm9v bV9zdHJpbmcgPQotCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1l bW9yeTogb3V0IG9mIG1lbW9yeVxuIjsKLQlzb3B0cy5pbnZhbGlkX2FsaWdubWVudF9zdHJpbmcg PQotCSAgICAiPGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTogaW52 YWxpZCBhbGlnbm1lbnRcbiI7Ci0Jc29wdHMubnVsbF9vdXRfcmVzdWx0X29uX2Vycm9yID0gdHJ1 ZTsKLQotCWRvcHRzLnJlc3VsdCA9ICZyZXQ7Ci0JZG9wdHMubnVtX2l0ZW1zID0gMTsKLQlkb3B0 cy5pdGVtX3NpemUgPSBzaXplOwotCWRvcHRzLmFsaWdubWVudCA9IGFsaWdubWVudDsKLQotCWlt YWxsb2MoJnNvcHRzLCAmZG9wdHMpOwotCWlmIChzb3B0cy5zbG93KSB7Ci0JCXVpbnRwdHJfdCBh cmdzWzNdID0ge2FsaWdubWVudCwgc2l6ZX07Ci0JCWhvb2tfaW52b2tlX2FsbG9jKGhvb2tfYWxs b2NfbWVtYWxpZ24sIHJldCwgKHVpbnRwdHJfdClyZXQsCi0JCSAgICBhcmdzKTsKLQl9Ci0KLQlM T0coImNvcmUubWVtYWxpZ24uZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKLQlyZXR1cm4gcmV0 OwotfQotI2VuZGlmCi0KLSNpZmRlZiBKRU1BTExPQ19PVkVSUklERV9WQUxMT0MKLUpFTUFMTE9D X0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVNQUxMT0NfUkVTVFJJQ1RfUkVUVVJOCi12b2lk IEpFTUFMTE9DX05PVEhST1cgKgotSkVNQUxMT0NfQVRUUihtYWxsb2MpCi1qZV92YWxsb2Moc2l6 ZV90IHNpemUpIHsKLQl2b2lkICpyZXQ7Ci0KLQlzdGF0aWNfb3B0c190IHNvcHRzOwotCWR5bmFt aWNfb3B0c190IGRvcHRzOwotCi0JTE9HKCJjb3JlLnZhbGxvYy5lbnRyeSIsICJzaXplOiAlenVc biIsIHNpemUpOwotCi0Jc3RhdGljX29wdHNfaW5pdCgmc29wdHMpOwotCWR5bmFtaWNfb3B0c19p bml0KCZkb3B0cyk7Ci0KLQlzb3B0cy5udWxsX291dF9yZXN1bHRfb25fZXJyb3IgPSB0cnVlOwot CXNvcHRzLm1pbl9hbGlnbm1lbnQgPSBQQUdFOwotCXNvcHRzLm9vbV9zdHJpbmcgPQotCSAgICAi PGplbWFsbG9jPjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTogb3V0IG9mIG1lbW9y eVxuIjsKLQlzb3B0cy5pbnZhbGlkX2FsaWdubWVudF9zdHJpbmcgPQotCSAgICAiPGplbWFsbG9j PjogRXJyb3IgYWxsb2NhdGluZyBhbGlnbmVkIG1lbW9yeTogaW52YWxpZCBhbGlnbm1lbnRcbiI7 Ci0KLQlkb3B0cy5yZXN1bHQgPSAmcmV0OwotCWRvcHRzLm51bV9pdGVtcyA9IDE7Ci0JZG9wdHMu aXRlbV9zaXplID0gc2l6ZTsKLQlkb3B0cy5hbGlnbm1lbnQgPSBQQUdFOwotCi0JaW1hbGxvYygm c29wdHMsICZkb3B0cyk7Ci0JaWYgKHNvcHRzLnNsb3cpIHsKLQkJdWludHB0cl90IGFyZ3NbM10g PSB7c2l6ZX07Ci0JCWhvb2tfaW52b2tlX2FsbG9jKGhvb2tfYWxsb2NfdmFsbG9jLCByZXQsICh1 aW50cHRyX3QpcmV0LCBhcmdzKTsKLQl9Ci0KLQlMT0coImNvcmUudmFsbG9jLmV4aXQiLCAicmVz dWx0OiAlcFxuIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVk KEpFTUFMTE9DX0lTX01BTExPQykgJiYgZGVmaW5lZChKRU1BTExPQ19HTElCQ19NQUxMT0NfSE9P SykKLS8qCi0gKiBnbGliYyBwcm92aWRlcyB0aGUgUlRMRF9ERUVQQklORCBmbGFnIGZvciBkbG9w ZW4gd2hpY2ggY2FuIG1ha2UgaXQgcG9zc2libGUKLSAqIHRvIGluY29uc2lzdGVudGx5IHJlZmVy ZW5jZSBsaWJjJ3MgbWFsbG9jKDMpLWNvbXBhdGlibGUgZnVuY3Rpb25zCi0gKiAoaHR0cHM6Ly9i dWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTQxKS4KLSAqCi0gKiBUaGVz ZSBkZWZpbml0aW9ucyBpbnRlcnBvc2UgaG9va3MgaW4gZ2xpYmMuICBUaGUgZnVuY3Rpb25zIGFy ZSBhY3R1YWxseQotICogcGFzc2VkIGFuIGV4dHJhIGFyZ3VtZW50IGZvciB0aGUgY2FsbGVyIHJl dHVybiBhZGRyZXNzLCB3aGljaCB3aWxsIGJlCi0gKiBpZ25vcmVkLgotICovCi0jaW5jbHVkZSA8 ZmVhdHVyZXMuaD4gLy8gZGVmaW5lcyBfX0dMSUJDX18gaWYgd2UgYXJlIGNvbXBpbGluZyBhZ2Fp bnN0IGdsaWJjCi0KLUpFTUFMTE9DX0VYUE9SVCB2b2lkICgqX19mcmVlX2hvb2spKHZvaWQgKnB0 cikgPSBqZV9mcmVlOwotSkVNQUxMT0NfRVhQT1JUIHZvaWQgKigqX19tYWxsb2NfaG9vaykoc2l6 ZV90IHNpemUpID0gamVfbWFsbG9jOwotSkVNQUxMT0NfRVhQT1JUIHZvaWQgKigqX19yZWFsbG9j X2hvb2spKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpID0gamVfcmVhbGxvYzsKLSMgIGlmZGVmIEpF TUFMTE9DX0dMSUJDX01FTUFMSUdOX0hPT0sKLUpFTUFMTE9DX0VYUE9SVCB2b2lkICooKl9fbWVt YWxpZ25faG9vaykoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpID0KLSAgICBqZV9tZW1h bGlnbjsKLSMgIGVuZGlmCi0KLSMgIGlmZGVmIF9fR0xJQkNfXwotLyoKLSAqIFRvIGVuYWJsZSBz dGF0aWMgbGlua2luZyB3aXRoIGdsaWJjLCB0aGUgbGliYyBzcGVjaWZpYyBtYWxsb2MgaW50ZXJm YWNlIG11c3QKLSAqIGJlIGltcGxlbWVudGVkIGFsc28sIHNvIG5vbmUgb2YgZ2xpYmMncyBtYWxs b2MubyBmdW5jdGlvbnMgYXJlIGFkZGVkIHRvIHRoZQotICogbGluay4KLSAqLwotIyAgICBkZWZp bmUgQUxJQVMoamVfZm4pCV9fYXR0cmlidXRlX18oKGFsaWFzICgjamVfZm4pLCB1c2VkKSkKLS8q IFRvIGZvcmNlIG1hY3JvIGV4cGFuc2lvbiBvZiBqZV8gcHJlZml4IGJlZm9yZSBzdHJpbmdpZmlj YXRpb24uICovCi0jICAgIGRlZmluZSBQUkVBTElBUyhqZV9mbikJQUxJQVMoamVfZm4pCi0jICAg IGlmZGVmIEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19DQUxMT0MKLXZvaWQgKl9fbGliY19jYWxs b2Moc2l6ZV90IG4sIHNpemVfdCBzaXplKSBQUkVBTElBUyhqZV9jYWxsb2MpOwotIyAgICBlbmRp ZgotIyAgICBpZmRlZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfRlJFRQotdm9pZCBfX2xpYmNf ZnJlZSh2b2lkKiBwdHIpIFBSRUFMSUFTKGplX2ZyZWUpOwotIyAgICBlbmRpZgotIyAgICBpZmRl ZiBKRU1BTExPQ19PVkVSUklERV9fX0xJQkNfTUFMTE9DCi12b2lkICpfX2xpYmNfbWFsbG9jKHNp emVfdCBzaXplKSBQUkVBTElBUyhqZV9tYWxsb2MpOwotIyAgICBlbmRpZgotIyAgICBpZmRlZiBK RU1BTExPQ19PVkVSUklERV9fX0xJQkNfTUVNQUxJR04KLXZvaWQgKl9fbGliY19tZW1hbGlnbihz aXplX3QgYWxpZ24sIHNpemVfdCBzKSBQUkVBTElBUyhqZV9tZW1hbGlnbik7Ci0jICAgIGVuZGlm Ci0jICAgIGlmZGVmIEpFTUFMTE9DX09WRVJSSURFX19fTElCQ19SRUFMTE9DCi12b2lkICpfX2xp YmNfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSBQUkVBTElBUyhqZV9yZWFsbG9jKTsK LSMgICAgZW5kaWYKLSMgICAgaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfX19MSUJDX1ZBTExPQwot dm9pZCAqX19saWJjX3ZhbGxvYyhzaXplX3Qgc2l6ZSkgUFJFQUxJQVMoamVfdmFsbG9jKTsKLSMg ICAgZW5kaWYKLSMgICAgaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfX19QT1NJWF9NRU1BTElHTgot aW50IF9fcG9zaXhfbWVtYWxpZ24odm9pZCoqIHIsIHNpemVfdCBhLCBzaXplX3QgcykgUFJFQUxJ QVMoamVfcG9zaXhfbWVtYWxpZ24pOwotIyAgICBlbmRpZgotIyAgICB1bmRlZiBQUkVBTElBUwot IyAgICB1bmRlZiBBTElBUwotIyAgZW5kaWYKLSNlbmRpZgotCi0vKgotICogRW5kIG5vbi1zdGFu ZGFyZCBvdmVycmlkZSBmdW5jdGlvbnMuCi0gKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0v KgotICogQmVnaW4gbm9uLXN0YW5kYXJkIGZ1bmN0aW9ucy4KLSAqLwotCi1KRU1BTExPQ19BTFdB WVNfSU5MSU5FIHVuc2lnbmVkCi1tYWxsb2N4X3RjYWNoZV9nZXQoaW50IGZsYWdzKSB7Ci0JaWYg KGxpa2VseSgoZmxhZ3MgJiBNQUxMT0NYX1RDQUNIRV9NQVNLKSA9PSAwKSkgewotCQlyZXR1cm4g VENBQ0hFX0lORF9BVVRPTUFUSUM7Ci0JfSBlbHNlIGlmICgoZmxhZ3MgJiBNQUxMT0NYX1RDQUNI RV9NQVNLKSA9PSBNQUxMT0NYX1RDQUNIRV9OT05FKSB7Ci0JCXJldHVybiBUQ0FDSEVfSU5EX05P TkU7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIE1BTExPQ1hfVENBQ0hFX0dFVChmbGFncyk7Ci0JfQot fQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHVuc2lnbmVkCi1tYWxsb2N4X2FyZW5hX2dldChp bnQgZmxhZ3MpIHsKLQlpZiAodW5saWtlbHkoKGZsYWdzICYgTUFMTE9DWF9BUkVOQV9NQVNLKSAh PSAwKSkgewotCQlyZXR1cm4gTUFMTE9DWF9BUkVOQV9HRVQoZmxhZ3MpOwotCX0gZWxzZSB7Ci0J CXJldHVybiBBUkVOQV9JTkRfQVVUT01BVElDOwotCX0KLX0KLQotI2lmZGVmIEpFTUFMTE9DX0VY UEVSSU1FTlRBTF9TTUFMTE9DWF9BUEkKLQotI2RlZmluZSBKRU1BTExPQ19TTUFMTE9DWF9DT05D QVRfSEVMUEVSKHgsIHkpIHggIyMgeQotI2RlZmluZSBKRU1BTExPQ19TTUFMTE9DWF9DT05DQVRf SEVMUEVSMih4LCB5KSAgXAotICBKRU1BTExPQ19TTUFMTE9DWF9DT05DQVRfSEVMUEVSKHgsIHkp Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl2b2lkICpwdHI7Ci0Jc2l6ZV90IHNpemU7Ci19IHNtYWxs b2N4X3JldHVybl90OwotCi1KRU1BTExPQ19FWFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9SIEpFTUFM TE9DX1JFU1RSSUNUX1JFVFVSTgotc21hbGxvY3hfcmV0dXJuX3QgSkVNQUxMT0NfTk9USFJPVwot LyoKLSAqIFRoZSBhdHRyaWJ1dGUgSkVNQUxMT0NfQVRUUihtYWxsb2MpIGNhbm5vdCBiZSB1c2Vk IGR1ZSB0bzoKLSAqICAtIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dp P2lkPTg2NDg4Ci0gKi8KLUpFTUFMTE9DX1NNQUxMT0NYX0NPTkNBVF9IRUxQRVIyKGplX3NtYWxs b2N4XywgSkVNQUxMT0NfVkVSU0lPTl9HSURfSURFTlQpCi0gIChzaXplX3Qgc2l6ZSwgaW50IGZs YWdzKSB7Ci0JLyoKLQkgKiBOb3RlOiB0aGUgYXR0cmlidXRlIEpFTUFMTE9DX0FMTE9DX1NJWkUo MSkgY2Fubm90IGJlCi0JICogdXNlZCBoZXJlIGJlY2F1c2UgaXQgbWFrZXMgd3JpdGluZyBiZXlv bmQgdGhlIGBzaXplYAotCSAqIG9mIHRoZSBgcHRyYCB1bmRlZmluZWQgYmVoYXZpb3IsIGJ1dCB0 aGUgb2JqZWN0aXZlCi0JICogb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBhbGxvdyB3cml0aW5nIGJl eW9uZCBgc2l6ZWAKLQkgKiB1cCB0byBgc21hbGxvY3hfcmV0dXJuX3Q6OnNpemVgLgotCSAqLwot CXNtYWxsb2N4X3JldHVybl90IHJldDsKLQlzdGF0aWNfb3B0c190IHNvcHRzOwotCWR5bmFtaWNf b3B0c190IGRvcHRzOwotCi0JTE9HKCJjb3JlLnNtYWxsb2N4LmVudHJ5IiwgInNpemU6ICV6dSwg ZmxhZ3M6ICVkIiwgc2l6ZSwgZmxhZ3MpOwotCi0Jc3RhdGljX29wdHNfaW5pdCgmc29wdHMpOwot CWR5bmFtaWNfb3B0c19pbml0KCZkb3B0cyk7Ci0KLQlzb3B0cy5hc3NlcnRfbm9uZW1wdHlfYWxs b2MgPSB0cnVlOwotCXNvcHRzLm51bGxfb3V0X3Jlc3VsdF9vbl9lcnJvciA9IHRydWU7Ci0Jc29w dHMub29tX3N0cmluZyA9ICI8amVtYWxsb2M+OiBFcnJvciBpbiBtYWxsb2N4KCk6IG91dCBvZiBt ZW1vcnlcbiI7Ci0Jc29wdHMudXNpemUgPSB0cnVlOwotCi0JZG9wdHMucmVzdWx0ID0gJnJldC5w dHI7Ci0JZG9wdHMubnVtX2l0ZW1zID0gMTsKLQlkb3B0cy5pdGVtX3NpemUgPSBzaXplOwotCWlm ICh1bmxpa2VseShmbGFncyAhPSAwKSkgewotCQlkb3B0cy5hbGlnbm1lbnQgPSBNQUxMT0NYX0FM SUdOX0dFVChmbGFncyk7Ci0JCWRvcHRzLnplcm8gPSBNQUxMT0NYX1pFUk9fR0VUKGZsYWdzKTsK LQkJZG9wdHMudGNhY2hlX2luZCA9IG1hbGxvY3hfdGNhY2hlX2dldChmbGFncyk7Ci0JCWRvcHRz LmFyZW5hX2luZCA9IG1hbGxvY3hfYXJlbmFfZ2V0KGZsYWdzKTsKLQl9Ci0KLQlpbWFsbG9jKCZz b3B0cywgJmRvcHRzKTsKLQlhc3NlcnQoZG9wdHMudXNpemUgPT0gamVfbmFsbG9jeChzaXplLCBm bGFncykpOwotCXJldC5zaXplID0gZG9wdHMudXNpemU7Ci0KLQlMT0coImNvcmUuc21hbGxvY3gu ZXhpdCIsICJyZXN1bHQ6ICVwLCBzaXplOiAlenUiLCByZXQucHRyLCByZXQuc2l6ZSk7Ci0JcmV0 dXJuIHJldDsKLX0KLSN1bmRlZiBKRU1BTExPQ19TTUFMTE9DWF9DT05DQVRfSEVMUEVSCi0jdW5k ZWYgSkVNQUxMT0NfU01BTExPQ1hfQ09OQ0FUX0hFTFBFUjIKLSNlbmRpZgotCi1KRU1BTExPQ19F WFBPUlQgSkVNQUxMT0NfQUxMT0NBVE9SIEpFTUFMTE9DX1JFU1RSSUNUX1JFVFVSTgotdm9pZCBK RU1BTExPQ19OT1RIUk9XICoKLUpFTUFMTE9DX0FUVFIobWFsbG9jKSBKRU1BTExPQ19BTExPQ19T SVpFKDEpCi1qZV9tYWxsb2N4KHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpIHsKLQl2b2lkICpyZXQ7 Ci0Jc3RhdGljX29wdHNfdCBzb3B0czsKLQlkeW5hbWljX29wdHNfdCBkb3B0czsKLQotCUxPRygi Y29yZS5tYWxsb2N4LmVudHJ5IiwgInNpemU6ICV6dSwgZmxhZ3M6ICVkIiwgc2l6ZSwgZmxhZ3Mp OwotCi0Jc3RhdGljX29wdHNfaW5pdCgmc29wdHMpOwotCWR5bmFtaWNfb3B0c19pbml0KCZkb3B0 cyk7Ci0KLQlzb3B0cy5hc3NlcnRfbm9uZW1wdHlfYWxsb2MgPSB0cnVlOwotCXNvcHRzLm51bGxf b3V0X3Jlc3VsdF9vbl9lcnJvciA9IHRydWU7Ci0Jc29wdHMub29tX3N0cmluZyA9ICI8amVtYWxs b2M+OiBFcnJvciBpbiBtYWxsb2N4KCk6IG91dCBvZiBtZW1vcnlcbiI7Ci0KLQlkb3B0cy5yZXN1 bHQgPSAmcmV0OwotCWRvcHRzLm51bV9pdGVtcyA9IDE7Ci0JZG9wdHMuaXRlbV9zaXplID0gc2l6 ZTsKLQlpZiAodW5saWtlbHkoZmxhZ3MgIT0gMCkpIHsKLQkJZG9wdHMuYWxpZ25tZW50ID0gTUFM TE9DWF9BTElHTl9HRVQoZmxhZ3MpOwotCQlkb3B0cy56ZXJvID0gTUFMTE9DWF9aRVJPX0dFVChm bGFncyk7Ci0JCWRvcHRzLnRjYWNoZV9pbmQgPSBtYWxsb2N4X3RjYWNoZV9nZXQoZmxhZ3MpOwot CQlkb3B0cy5hcmVuYV9pbmQgPSBtYWxsb2N4X2FyZW5hX2dldChmbGFncyk7Ci0JfQotCi0JaW1h bGxvYygmc29wdHMsICZkb3B0cyk7Ci0JaWYgKHNvcHRzLnNsb3cpIHsKLQkJdWludHB0cl90IGFy Z3NbM10gPSB7c2l6ZSwgZmxhZ3N9OwotCQlob29rX2ludm9rZV9hbGxvYyhob29rX2FsbG9jX21h bGxvY3gsIHJldCwgKHVpbnRwdHJfdClyZXQsCi0JCSAgICBhcmdzKTsKLQl9Ci0KLQlMT0coImNv cmUubWFsbG9jeC5leGl0IiwgInJlc3VsdDogJXAiLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0K LXN0YXRpYyB2b2lkICoKLWlyYWxsb2N4X3Byb2Zfc2FtcGxlKHRzZG5fdCAqdHNkbiwgdm9pZCAq b2xkX3B0ciwgc2l6ZV90IG9sZF91c2l6ZSwKLSAgICBzaXplX3QgdXNpemUsIHNpemVfdCBhbGln bm1lbnQsIGJvb2wgemVybywgdGNhY2hlX3QgKnRjYWNoZSwgYXJlbmFfdCAqYXJlbmEsCi0gICAg cHJvZl90Y3R4X3QgKnRjdHgsIGhvb2tfcmFsbG9jX2FyZ3NfdCAqaG9va19hcmdzKSB7Ci0Jdm9p ZCAqcDsKLQotCWlmICh0Y3R4ID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYWxp Z25tZW50ID0gcHJvZl9zYW1wbGVfYWxpZ24oYWxpZ25tZW50KTsKLQlpZiAodXNpemUgPD0gU0Nf U01BTExfTUFYQ0xBU1MpIHsKLQkJcCA9IGlyYWxsb2N0KHRzZG4sIG9sZF9wdHIsIG9sZF91c2l6 ZSwKLQkJICAgIFNDX0xBUkdFX01JTkNMQVNTLCBhbGlnbm1lbnQsIHplcm8sIHRjYWNoZSwKLQkJ ICAgIGFyZW5hLCBob29rX2FyZ3MpOwotCQlpZiAocCA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gTlVM TDsKLQkJfQotCQlhcmVuYV9wcm9mX3Byb21vdGUodHNkbiwgcCwgdXNpemUpOwotCX0gZWxzZSB7 Ci0JCXAgPSBpcmFsbG9jdCh0c2RuLCBvbGRfcHRyLCBvbGRfdXNpemUsIHVzaXplLCBhbGlnbm1l bnQsIHplcm8sCi0JCSAgICB0Y2FjaGUsIGFyZW5hLCBob29rX2FyZ3MpOwotCX0KLQlhc3NlcnQo cHJvZl9zYW1wbGVfYWxpZ25lZChwKSk7Ci0KLQlyZXR1cm4gcDsKLX0KLQotSkVNQUxMT0NfQUxX QVlTX0lOTElORSB2b2lkICoKLWlyYWxsb2N4X3Byb2YodHNkX3QgKnRzZCwgdm9pZCAqb2xkX3B0 ciwgc2l6ZV90IG9sZF91c2l6ZSwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IGFsaWdubWVudCwg c2l6ZV90IHVzaXplLCBib29sIHplcm8sIHRjYWNoZV90ICp0Y2FjaGUsCi0gICAgYXJlbmFfdCAq YXJlbmEsIGVtYXBfYWxsb2NfY3R4X3QgKmFsbG9jX2N0eCwKLSAgICBob29rX3JhbGxvY19hcmdz X3QgKmhvb2tfYXJncykgewotCXByb2ZfaW5mb190IG9sZF9wcm9mX2luZm87Ci0JcHJvZl9pbmZv X2dldF9hbmRfcmVzZXRfcmVjZW50KHRzZCwgb2xkX3B0ciwgYWxsb2NfY3R4LCAmb2xkX3Byb2Zf aW5mbyk7Ci0JYm9vbCBwcm9mX2FjdGl2ZSA9IHByb2ZfYWN0aXZlX2dldF91bmxvY2tlZCgpOwot CWJvb2wgc2FtcGxlX2V2ZW50ID0gdGVfcHJvZl9zYW1wbGVfZXZlbnRfbG9va2FoZWFkKHRzZCwg dXNpemUpOwotCXByb2ZfdGN0eF90ICp0Y3R4ID0gcHJvZl9hbGxvY19wcmVwKHRzZCwgcHJvZl9h Y3RpdmUsIHNhbXBsZV9ldmVudCk7Ci0Jdm9pZCAqcDsKLQlpZiAodW5saWtlbHkoKHVpbnRwdHJf dCl0Y3R4ICE9ICh1aW50cHRyX3QpMVUpKSB7Ci0JCXAgPSBpcmFsbG9jeF9wcm9mX3NhbXBsZSh0 c2RfdHNkbih0c2QpLCBvbGRfcHRyLCBvbGRfdXNpemUsCi0JCSAgICB1c2l6ZSwgYWxpZ25tZW50 LCB6ZXJvLCB0Y2FjaGUsIGFyZW5hLCB0Y3R4LCBob29rX2FyZ3MpOwotCX0gZWxzZSB7Ci0JCXAg PSBpcmFsbG9jdCh0c2RfdHNkbih0c2QpLCBvbGRfcHRyLCBvbGRfdXNpemUsIHNpemUsIGFsaWdu bWVudCwKLQkJICAgIHplcm8sIHRjYWNoZSwgYXJlbmEsIGhvb2tfYXJncyk7Ci0JfQotCWlmICh1 bmxpa2VseShwID09IE5VTEwpKSB7Ci0JCXByb2ZfYWxsb2Nfcm9sbGJhY2sodHNkLCB0Y3R4KTsK LQkJcmV0dXJuIE5VTEw7Ci0JfQotCWFzc2VydCh1c2l6ZSA9PSBpc2FsbG9jKHRzZF90c2RuKHRz ZCksIHApKTsKLQlwcm9mX3JlYWxsb2ModHNkLCBwLCBzaXplLCB1c2l6ZSwgdGN0eCwgcHJvZl9h Y3RpdmUsIG9sZF9wdHIsCi0JICAgIG9sZF91c2l6ZSwgJm9sZF9wcm9mX2luZm8sIHNhbXBsZV9l dmVudCk7Ci0KLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIHZvaWQgKgotZG9fcmFsbG9jeCh2b2lk ICpwdHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIGJvb2wgaXNfcmVhbGxvYykgewotCXZvaWQg KnA7Ci0JdHNkX3QgKnRzZDsKLQlzaXplX3QgdXNpemU7Ci0Jc2l6ZV90IG9sZF91c2l6ZTsKLQlz aXplX3QgYWxpZ25tZW50ID0gTUFMTE9DWF9BTElHTl9HRVQoZmxhZ3MpOwotCWFyZW5hX3QgKmFy ZW5hOwotCi0JYXNzZXJ0KHB0ciAhPSBOVUxMKTsKLQlhc3NlcnQoc2l6ZSAhPSAwKTsKLQlhc3Nl cnQobWFsbG9jX2luaXRpYWxpemVkKCkgfHwgSVNfSU5JVElBTElaRVIpOwotCXRzZCA9IHRzZF9m ZXRjaCgpOwotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLQotCWJv b2wgemVybyA9IHplcm9fZ2V0KE1BTExPQ1hfWkVST19HRVQoZmxhZ3MpLCAvKiBzbG93ICovIHRy dWUpOwotCi0JdW5zaWduZWQgYXJlbmFfaW5kID0gbWFsbG9jeF9hcmVuYV9nZXQoZmxhZ3MpOwot CWlmIChhcmVuYV9nZXRfZnJvbV9pbmQodHNkLCBhcmVuYV9pbmQsICZhcmVuYSkpIHsKLQkJZ290 byBsYWJlbF9vb207Ci0JfQotCi0JdW5zaWduZWQgdGNhY2hlX2luZCA9IG1hbGxvY3hfdGNhY2hl X2dldChmbGFncyk7Ci0JdGNhY2hlX3QgKnRjYWNoZSA9IHRjYWNoZV9nZXRfZnJvbV9pbmQodHNk LCB0Y2FjaGVfaW5kLAotCSAgICAvKiBzbG93ICovIHRydWUsIC8qIGlzX2FsbG9jICovIHRydWUp OwotCi0JZW1hcF9hbGxvY19jdHhfdCBhbGxvY19jdHg7Ci0JZW1hcF9hbGxvY19jdHhfbG9va3Vw KHRzZF90c2RuKHRzZCksICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyLAotCSAgICAmYWxsb2NfY3R4 KTsKLQlhc3NlcnQoYWxsb2NfY3R4LnN6aW5kICE9IFNDX05TSVpFUyk7Ci0Jb2xkX3VzaXplID0g c3pfaW5kZXgyc2l6ZShhbGxvY19jdHguc3ppbmQpOwotCWFzc2VydChvbGRfdXNpemUgPT0gaXNh bGxvYyh0c2RfdHNkbih0c2QpLCBwdHIpKTsKLQlpZiAoYWxpZ25lZF91c2l6ZV9nZXQoc2l6ZSwg YWxpZ25tZW50LCAmdXNpemUsIE5VTEwsIGZhbHNlKSkgewotCQlnb3RvIGxhYmVsX29vbTsKLQl9 Ci0KLQlob29rX3JhbGxvY19hcmdzX3QgaG9va19hcmdzID0ge2lzX3JlYWxsb2MsIHsodWludHB0 cl90KXB0ciwgc2l6ZSwKLQkJZmxhZ3MsIDB9fTsKLQlpZiAoY29uZmlnX3Byb2YgJiYgb3B0X3By b2YpIHsKLQkJcCA9IGlyYWxsb2N4X3Byb2YodHNkLCBwdHIsIG9sZF91c2l6ZSwgc2l6ZSwgYWxp Z25tZW50LCB1c2l6ZSwKLQkJICAgIHplcm8sIHRjYWNoZSwgYXJlbmEsICZhbGxvY19jdHgsICZo b29rX2FyZ3MpOwotCQlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkgewotCQkJZ290byBsYWJlbF9v b207Ci0JCX0KLQl9IGVsc2UgewotCQlwID0gaXJhbGxvY3QodHNkX3RzZG4odHNkKSwgcHRyLCBv bGRfdXNpemUsIHNpemUsIGFsaWdubWVudCwKLQkJICAgIHplcm8sIHRjYWNoZSwgYXJlbmEsICZo b29rX2FyZ3MpOwotCQlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkgewotCQkJZ290byBsYWJlbF9v b207Ci0JCX0KLQkJYXNzZXJ0KHVzaXplID09IGlzYWxsb2ModHNkX3RzZG4odHNkKSwgcCkpOwot CX0KLQlhc3NlcnQoYWxpZ25tZW50ID09IDAgfHwgKCh1aW50cHRyX3QpcCAmIChhbGlnbm1lbnQg LSAxKSkgPT0gWlUoMCkpOwotCXRocmVhZF9hbGxvY19ldmVudCh0c2QsIHVzaXplKTsKLQl0aHJl YWRfZGFsbG9jX2V2ZW50KHRzZCwgb2xkX3VzaXplKTsKLQotCVVUUkFDRShwdHIsIHNpemUsIHAp OwotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLQotCWlmIChjb25m aWdfZmlsbCAmJiB1bmxpa2VseShvcHRfanVua19hbGxvYykgJiYgdXNpemUgPiBvbGRfdXNpemUK LQkgICAgJiYgIXplcm8pIHsKLQkJc2l6ZV90IGV4Y2Vzc19sZW4gPSB1c2l6ZSAtIG9sZF91c2l6 ZTsKLQkJdm9pZCAqZXhjZXNzX3N0YXJ0ID0gKHZvaWQgKikoKHVpbnRwdHJfdClwICsgb2xkX3Vz aXplKTsKLQkJanVua19hbGxvY19jYWxsYmFjayhleGNlc3Nfc3RhcnQsIGV4Y2Vzc19sZW4pOwot CX0KLQotCXJldHVybiBwOwotbGFiZWxfb29tOgotCWlmIChjb25maWdfeG1hbGxvYyAmJiB1bmxp a2VseShvcHRfeG1hbGxvYykpIHsKLQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBp biByYWxsb2N4KCk6IG91dCBvZiBtZW1vcnlcbiIpOwotCQlhYm9ydCgpOwotCX0KLQlVVFJBQ0Uo cHRyLCBzaXplLCAwKTsKLQljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7 Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotSkVNQUxMT0NfRVhQT1JUIEpFTUFMTE9DX0FMTE9DQVRP UiBKRU1BTExPQ19SRVNUUklDVF9SRVRVUk4KLXZvaWQgSkVNQUxMT0NfTk9USFJPVyAqCi1KRU1B TExPQ19BTExPQ19TSVpFKDIpCi1qZV9yYWxsb2N4KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGlu dCBmbGFncykgewotCUxPRygiY29yZS5yYWxsb2N4LmVudHJ5IiwgInB0cjogJXAsIHNpemU6ICV6 dSwgZmxhZ3M6ICVkIiwgcHRyLAotCSAgICBzaXplLCBmbGFncyk7Ci0Jdm9pZCAqcmV0ID0gZG9f cmFsbG9jeChwdHIsIHNpemUsIGZsYWdzLCBmYWxzZSk7Ci0JTE9HKCJjb3JlLnJhbGxvY3guZXhp dCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCAq Ci1kb19yZWFsbG9jX25vbm51bGxfemVybyh2b2lkICpwdHIpIHsKLQlpZiAoY29uZmlnX3N0YXRz KSB7Ci0JCWF0b21pY19mZXRjaF9hZGRfenUoJnplcm9fcmVhbGxvY19jb3VudCwgMSwgQVRPTUlD X1JFTEFYRUQpOwotCX0KLQlpZiAob3B0X3plcm9fcmVhbGxvY19hY3Rpb24gPT0gemVyb19yZWFs bG9jX2FjdGlvbl9hbGxvYykgewotCQkvKgotCQkgKiBUaGUgdXNlciBtaWdodCBoYXZlIGdvdHRl biBhbiBhbGxvYyBzZXR0aW5nIHdoaWxlIGV4cGVjdGluZyBhCi0JCSAqIGZyZWUgc2V0dGluZy4g IElmIHRoYXQncyB0aGUgY2FzZSwgd2UgYXQgbGVhc3QgdHJ5IHRvCi0JCSAqIHJlZHVjZSB0aGUg aGFybSwgYW5kIHR1cm4gb2ZmIHRoZSB0Y2FjaGUgd2hpbGUgYWxsb2NhdGluZywgc28KLQkJICog dGhhdCB3ZSdsbCBnZXQgYSB0cnVlIGZpcnN0IGZpdC4KLQkJICovCi0JCXJldHVybiBkb19yYWxs b2N4KHB0ciwgMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSwgdHJ1ZSk7Ci0JfSBlbHNlIGlmIChvcHRf emVyb19yZWFsbG9jX2FjdGlvbiA9PSB6ZXJvX3JlYWxsb2NfYWN0aW9uX2ZyZWUpIHsKLQkJVVRS QUNFKHB0ciwgMCwgMCk7Ci0JCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKLQkJY2hlY2tfZW50 cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOwotCi0JCXRjYWNoZV90ICp0Y2FjaGUgPSB0 Y2FjaGVfZ2V0X2Zyb21faW5kKHRzZCwKLQkJICAgIFRDQUNIRV9JTkRfQVVUT01BVElDLCAvKiBz bG93ICovIHRydWUsCi0JCSAgICAvKiBpc19hbGxvYyAqLyBmYWxzZSk7Ci0JCXVpbnRwdHJfdCBh cmdzWzNdID0geyh1aW50cHRyX3QpcHRyLCAwfTsKLQkJaG9va19pbnZva2VfZGFsbG9jKGhvb2tf ZGFsbG9jX3JlYWxsb2MsIHB0ciwgYXJncyk7Ci0JCWlmcmVlKHRzZCwgcHRyLCB0Y2FjaGUsIHRy dWUpOwotCi0JCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLQkJcmV0 dXJuIE5VTEw7Ci0JfSBlbHNlIHsKLQkJc2FmZXR5X2NoZWNrX2ZhaWwoIkNhbGxlZCByZWFsbG9j KG5vbi1udWxsLXB0ciwgMCkgd2l0aCAiCi0JCSAgICAiemVyb19yZWFsbG9jOmFib3J0IHNldFxu Iik7Ci0JCS8qIEluIHJlYWwgY29kZSwgdGhpcyB3aWxsIG5ldmVyIHJ1bjsgdGhlIHNhZmV0eSBj aGVjayBmYWlsdXJlCi0JCSAqIHdpbGwgY2FsbCBhYm9ydC4gIEluIHRoZSB1bml0IHRlc3QsIHdl IGp1c3Qgd2FudCB0byBiYWlsIG91dAotCQkgKiB3aXRob3V0IGNvcnJ1cHRpbmcgaW50ZXJuYWwg c3RhdGUgdGhhdCB0aGUgdGVzdCBuZWVkcyB0bwotCQkgKiBmaW5pc2guCi0JCSAqLwotCQlyZXR1 cm4gTlVMTDsKLQl9Ci19Ci0KLUpFTUFMTE9DX0VYUE9SVCBKRU1BTExPQ19BTExPQ0FUT1IgSkVN QUxMT0NfUkVTVFJJQ1RfUkVUVVJOCi12b2lkIEpFTUFMTE9DX05PVEhST1cgKgotSkVNQUxMT0Nf QUxMT0NfU0laRSgyKQotamVfcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7Ci0JTE9H KCJjb3JlLnJlYWxsb2MuZW50cnkiLCAicHRyOiAlcCwgc2l6ZTogJXp1XG4iLCBwdHIsIHNpemUp OwotCi0JaWYgKGxpa2VseShwdHIgIT0gTlVMTCAmJiBzaXplICE9IDApKSB7Ci0JCXZvaWQgKnJl dCA9IGRvX3JhbGxvY3gocHRyLCBzaXplLCAwLCB0cnVlKTsKLQkJTE9HKCJjb3JlLnJlYWxsb2Mu ZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKHB0 ciAhPSBOVUxMICYmIHNpemUgPT0gMCkgewotCQl2b2lkICpyZXQgPSBkb19yZWFsbG9jX25vbm51 bGxfemVybyhwdHIpOwotCQlMT0coImNvcmUucmVhbGxvYy5leGl0IiwgInJlc3VsdDogJXAiLCBy ZXQpOwotCQlyZXR1cm4gcmV0OwotCX0gZWxzZSB7Ci0JCS8qIHJlYWxsb2MoTlVMTCwgc2l6ZSkg aXMgZXF1aXZhbGVudCB0byBtYWxsb2Moc2l6ZSkuICovCi0JCXZvaWQgKnJldDsKLQotCQlzdGF0 aWNfb3B0c190IHNvcHRzOwotCQlkeW5hbWljX29wdHNfdCBkb3B0czsKLQotCQlzdGF0aWNfb3B0 c19pbml0KCZzb3B0cyk7Ci0JCWR5bmFtaWNfb3B0c19pbml0KCZkb3B0cyk7Ci0KLQkJc29wdHMu bnVsbF9vdXRfcmVzdWx0X29uX2Vycm9yID0gdHJ1ZTsKLQkJc29wdHMuc2V0X2Vycm5vX29uX2Vy cm9yID0gdHJ1ZTsKLQkJc29wdHMub29tX3N0cmluZyA9Ci0JCSAgICAiPGplbWFsbG9jPjogRXJy b3IgaW4gcmVhbGxvYygpOiBvdXQgb2YgbWVtb3J5XG4iOwotCi0JCWRvcHRzLnJlc3VsdCA9ICZy ZXQ7Ci0JCWRvcHRzLm51bV9pdGVtcyA9IDE7Ci0JCWRvcHRzLml0ZW1fc2l6ZSA9IHNpemU7Ci0K LQkJaW1hbGxvYygmc29wdHMsICZkb3B0cyk7Ci0JCWlmIChzb3B0cy5zbG93KSB7Ci0JCQl1aW50 cHRyX3QgYXJnc1szXSA9IHsodWludHB0cl90KXB0ciwgc2l6ZX07Ci0JCQlob29rX2ludm9rZV9h bGxvYyhob29rX2FsbG9jX3JlYWxsb2MsIHJldCwKLQkJCSAgICAodWludHB0cl90KXJldCwgYXJn cyk7Ci0JCX0KLQkJTE9HKCJjb3JlLnJlYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICVwIiwgcmV0KTsK LQkJcmV0dXJuIHJldDsKLQl9Ci19Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Ci1p eGFsbG9jeF9oZWxwZXIodHNkbl90ICp0c2RuLCB2b2lkICpwdHIsIHNpemVfdCBvbGRfdXNpemUs IHNpemVfdCBzaXplLAotICAgIHNpemVfdCBleHRyYSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6 ZXJvKSB7Ci0Jc2l6ZV90IG5ld3NpemU7Ci0KLQlpZiAoaXhhbGxvYyh0c2RuLCBwdHIsIG9sZF91 c2l6ZSwgc2l6ZSwgZXh0cmEsIGFsaWdubWVudCwgemVybywKLQkgICAgJm5ld3NpemUpKSB7Ci0J CXJldHVybiBvbGRfdXNpemU7Ci0JfQotCi0JcmV0dXJuIG5ld3NpemU7Ci19Ci0KLXN0YXRpYyBz aXplX3QKLWl4YWxsb2N4X3Byb2Zfc2FtcGxlKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyLCBzaXpl X3Qgb2xkX3VzaXplLCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgZXh0cmEsIHNpemVfdCBhbGln bm1lbnQsIGJvb2wgemVybywgcHJvZl90Y3R4X3QgKnRjdHgpIHsKLQkvKiBTYW1wbGVkIGFsbG9j YXRpb24gbmVlZHMgdG8gYmUgcGFnZSBhbGlnbmVkLiAqLwotCWlmICh0Y3R4ID09IE5VTEwgfHwg IXByb2Zfc2FtcGxlX2FsaWduZWQocHRyKSkgewotCQlyZXR1cm4gb2xkX3VzaXplOwotCX0KLQot CXJldHVybiBpeGFsbG9jeF9oZWxwZXIodHNkbiwgcHRyLCBvbGRfdXNpemUsIHNpemUsIGV4dHJh LCBhbGlnbm1lbnQsCi0JICAgIHplcm8pOwotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHNp emVfdAotaXhhbGxvY3hfcHJvZih0c2RfdCAqdHNkLCB2b2lkICpwdHIsIHNpemVfdCBvbGRfdXNp emUsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBleHRyYSwgc2l6ZV90IGFsaWdubWVudCwgYm9v bCB6ZXJvLCBlbWFwX2FsbG9jX2N0eF90ICphbGxvY19jdHgpIHsKLQkvKgotCSAqIG9sZF9wcm9m X2luZm8gaXMgb25seSB1c2VkIGZvciBhc3NlcnRpbmcgdGhhdCB0aGUgcHJvZmlsaW5nIGluZm8K LQkgKiBpc24ndCBjaGFuZ2VkIGJ5IHRoZSBpeGFsbG9jKCkgY2FsbC4KLQkgKi8KLQlwcm9mX2lu Zm9fdCBvbGRfcHJvZl9pbmZvOwotCXByb2ZfaW5mb19nZXQodHNkLCBwdHIsIGFsbG9jX2N0eCwg Jm9sZF9wcm9mX2luZm8pOwotCi0JLyoKLQkgKiB1c2l6ZSBpc24ndCBrbm93YWJsZSBiZWZvcmUg aXhhbGxvYygpIHJldHVybnMgd2hlbiBleHRyYSBpcyBub24temVyby4KLQkgKiBUaGVyZWZvcmUs IGNvbXB1dGUgaXRzIG1heGltdW0gcG9zc2libGUgdmFsdWUgYW5kIHVzZSB0aGF0IGluCi0JICog cHJvZl9hbGxvY19wcmVwKCkgdG8gZGVjaWRlIHdoZXRoZXIgdG8gY2FwdHVyZSBhIGJhY2t0cmFj ZS4KLQkgKiBwcm9mX3JlYWxsb2MoKSB3aWxsIHVzZSB0aGUgYWN0dWFsIHVzaXplIHRvIGRlY2lk ZSB3aGV0aGVyIHRvIHNhbXBsZS4KLQkgKi8KLQlzaXplX3QgdXNpemVfbWF4OwotCWlmIChhbGln bmVkX3VzaXplX2dldChzaXplICsgZXh0cmEsIGFsaWdubWVudCwgJnVzaXplX21heCwgTlVMTCwK LQkgICAgZmFsc2UpKSB7Ci0JCS8qCi0JCSAqIHVzaXplX21heCBpcyBvdXQgb2YgcmFuZ2UsIGFu ZCBjaGFuY2VzIGFyZSB0aGF0IGFsbG9jYXRpb24KLQkJICogd2lsbCBmYWlsLCBidXQgdXNlIHRo ZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIGFuZCBjYXJyeSBvbgotCQkgKiB3aXRoIHByb2ZfYWxs b2NfcHJlcCgpLCBqdXN0IGluIGNhc2UgYWxsb2NhdGlvbiBzdWNjZWVkcy4KLQkJICovCi0JCXVz aXplX21heCA9IFNDX0xBUkdFX01BWENMQVNTOwotCX0KLQlib29sIHByb2ZfYWN0aXZlID0gcHJv Zl9hY3RpdmVfZ2V0X3VubG9ja2VkKCk7Ci0JYm9vbCBzYW1wbGVfZXZlbnQgPSB0ZV9wcm9mX3Nh bXBsZV9ldmVudF9sb29rYWhlYWQodHNkLCB1c2l6ZV9tYXgpOwotCXByb2ZfdGN0eF90ICp0Y3R4 ID0gcHJvZl9hbGxvY19wcmVwKHRzZCwgcHJvZl9hY3RpdmUsIHNhbXBsZV9ldmVudCk7Ci0KLQlz aXplX3QgdXNpemU7Ci0JaWYgKHVubGlrZWx5KCh1aW50cHRyX3QpdGN0eCAhPSAodWludHB0cl90 KTFVKSkgewotCQl1c2l6ZSA9IGl4YWxsb2N4X3Byb2Zfc2FtcGxlKHRzZF90c2RuKHRzZCksIHB0 ciwgb2xkX3VzaXplLAotCQkgICAgc2l6ZSwgZXh0cmEsIGFsaWdubWVudCwgemVybywgdGN0eCk7 Ci0JfSBlbHNlIHsKLQkJdXNpemUgPSBpeGFsbG9jeF9oZWxwZXIodHNkX3RzZG4odHNkKSwgcHRy LCBvbGRfdXNpemUsIHNpemUsCi0JCSAgICBleHRyYSwgYWxpZ25tZW50LCB6ZXJvKTsKLQl9Ci0K LQkvKgotCSAqIEF0IHRoaXMgcG9pbnQgd2UgY2FuIHN0aWxsIHNhZmVseSBnZXQgdGhlIG9yaWdp bmFsIHByb2ZpbGluZwotCSAqIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHRyLCBi ZWNhdXNlIChhKSB0aGUgZWRhdGFfdCBvYmplY3QKLQkgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHB0 ciBzdGlsbCBsaXZlcyBhbmQgKGIpIHRoZSBwcm9maWxpbmcgaW5mbwotCSAqIGZpZWxkcyBhcmUg bm90IHRvdWNoZWQuICAiKGEpIiBpcyBhc3NlcnRlZCBpbiB0aGUgb3V0ZXIgamVfeGFsbG9jeCgp Ci0JICogZnVuY3Rpb24sIGFuZCAiKGIpIiBpcyBpbmRpcmVjdGx5IHZlcmlmaWVkIGJlbG93IGJ5 IGNoZWNraW5nIHRoYXQKLQkgKiB0aGUgYWxsb2NfdGN0eCBmaWVsZCBpcyB1bmNoYW5nZWQuCi0J ICovCi0JcHJvZl9pbmZvX3QgcHJvZl9pbmZvOwotCWlmICh1c2l6ZSA9PSBvbGRfdXNpemUpIHsK LQkJcHJvZl9pbmZvX2dldCh0c2QsIHB0ciwgYWxsb2NfY3R4LCAmcHJvZl9pbmZvKTsKLQkJcHJv Zl9hbGxvY19yb2xsYmFjayh0c2QsIHRjdHgpOwotCX0gZWxzZSB7Ci0JCXByb2ZfaW5mb19nZXRf YW5kX3Jlc2V0X3JlY2VudCh0c2QsIHB0ciwgYWxsb2NfY3R4LCAmcHJvZl9pbmZvKTsKLQkJYXNz ZXJ0KHVzaXplIDw9IHVzaXplX21heCk7Ci0JCXNhbXBsZV9ldmVudCA9IHRlX3Byb2Zfc2FtcGxl X2V2ZW50X2xvb2thaGVhZCh0c2QsIHVzaXplKTsKLQkJcHJvZl9yZWFsbG9jKHRzZCwgcHRyLCBz aXplLCB1c2l6ZSwgdGN0eCwgcHJvZl9hY3RpdmUsIHB0ciwKLQkJICAgIG9sZF91c2l6ZSwgJnBy b2ZfaW5mbywgc2FtcGxlX2V2ZW50KTsKLQl9Ci0KLQlhc3NlcnQob2xkX3Byb2ZfaW5mby5hbGxv Y190Y3R4ID09IHByb2ZfaW5mby5hbGxvY190Y3R4KTsKLQlyZXR1cm4gdXNpemU7Ci19Ci0KLUpF TUFMTE9DX0VYUE9SVCBzaXplX3QgSkVNQUxMT0NfTk9USFJPVwotamVfeGFsbG9jeCh2b2lkICpw dHIsIHNpemVfdCBzaXplLCBzaXplX3QgZXh0cmEsIGludCBmbGFncykgewotCXRzZF90ICp0c2Q7 Ci0Jc2l6ZV90IHVzaXplLCBvbGRfdXNpemU7Ci0Jc2l6ZV90IGFsaWdubWVudCA9IE1BTExPQ1hf QUxJR05fR0VUKGZsYWdzKTsKLQlib29sIHplcm8gPSB6ZXJvX2dldChNQUxMT0NYX1pFUk9fR0VU KGZsYWdzKSwgLyogc2xvdyAqLyB0cnVlKTsKLQotCUxPRygiY29yZS54YWxsb2N4LmVudHJ5Iiwg InB0cjogJXAsIHNpemU6ICV6dSwgZXh0cmE6ICV6dSwgIgotCSAgICAiZmxhZ3M6ICVkIiwgcHRy LCBzaXplLCBleHRyYSwgZmxhZ3MpOwotCi0JYXNzZXJ0KHB0ciAhPSBOVUxMKTsKLQlhc3NlcnQo c2l6ZSAhPSAwKTsKLQlhc3NlcnQoU0laRV9UX01BWCAtIHNpemUgPj0gZXh0cmEpOwotCWFzc2Vy dChtYWxsb2NfaW5pdGlhbGl6ZWQoKSB8fCBJU19JTklUSUFMSVpFUik7Ci0JdHNkID0gdHNkX2Zl dGNoKCk7Ci0JY2hlY2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOwotCi0JLyoK LQkgKiBvbGRfZWRhdGEgaXMgb25seSBmb3IgdmVyaWZ5aW5nIHRoYXQgeGFsbG9jeCgpIGtlZXBz IHRoZSBlZGF0YV90Ci0JICogb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgcHRyICh0aG91Z2gg dGhlIGNvbnRlbnQgb2YgdGhlIGVkYXRhX3QKLQkgKiBvYmplY3QgY2FuIGJlIGNoYW5nZWQpLgot CSAqLwotCWVkYXRhX3QgKm9sZF9lZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZF90c2RuKHRz ZCksCi0JICAgICZhcmVuYV9lbWFwX2dsb2JhbCwgcHRyKTsKLQotCWVtYXBfYWxsb2NfY3R4X3Qg YWxsb2NfY3R4OwotCWVtYXBfYWxsb2NfY3R4X2xvb2t1cCh0c2RfdHNkbih0c2QpLCAmYXJlbmFf ZW1hcF9nbG9iYWwsIHB0ciwKLQkgICAgJmFsbG9jX2N0eCk7Ci0JYXNzZXJ0KGFsbG9jX2N0eC5z emluZCAhPSBTQ19OU0laRVMpOwotCW9sZF91c2l6ZSA9IHN6X2luZGV4MnNpemUoYWxsb2NfY3R4 LnN6aW5kKTsKLQlhc3NlcnQob2xkX3VzaXplID09IGlzYWxsb2ModHNkX3RzZG4odHNkKSwgcHRy KSk7Ci0JLyoKLQkgKiBUaGUgQVBJIGV4cGxpY2l0bHkgYWJzb2x2ZXMgaXRzZWxmIG9mIHByb3Rl Y3RpbmcgYWdhaW5zdCAoc2l6ZSArCi0JICogZXh0cmEpIG51bWVyaWNhbCBvdmVyZmxvdywgYnV0 IHdlIG1heSBuZWVkIHRvIGNsYW1wIGV4dHJhIHRvIGF2b2lkCi0JICogZXhjZWVkaW5nIFNDX0xB UkdFX01BWENMQVNTLgotCSAqCi0JICogT3JkaW5hcmlseSwgc2l6ZSBsaW1pdCBjaGVja2luZyBp cyBoYW5kbGVkIGRlZXBlciBkb3duLCBidXQgaGVyZSB3ZQotCSAqIGhhdmUgdG8gY2hlY2sgYXMg cGFydCBvZiAoc2l6ZSArIGV4dHJhKSBjbGFtcGluZywgc2luY2Ugd2UgbmVlZCB0aGUKLQkgKiBj bGFtcGVkIHZhbHVlIGluIHRoZSBhYm92ZSBoZWxwZXIgZnVuY3Rpb25zLgotCSAqLwotCWlmICh1 bmxpa2VseShzaXplID4gU0NfTEFSR0VfTUFYQ0xBU1MpKSB7Ci0JCXVzaXplID0gb2xkX3VzaXpl OwotCQlnb3RvIGxhYmVsX25vdF9yZXNpemVkOwotCX0KLQlpZiAodW5saWtlbHkoU0NfTEFSR0Vf TUFYQ0xBU1MgLSBzaXplIDwgZXh0cmEpKSB7Ci0JCWV4dHJhID0gU0NfTEFSR0VfTUFYQ0xBU1Mg LSBzaXplOwotCX0KLQotCWlmIChjb25maWdfcHJvZiAmJiBvcHRfcHJvZikgewotCQl1c2l6ZSA9 IGl4YWxsb2N4X3Byb2YodHNkLCBwdHIsIG9sZF91c2l6ZSwgc2l6ZSwgZXh0cmEsCi0JCSAgICBh bGlnbm1lbnQsIHplcm8sICZhbGxvY19jdHgpOwotCX0gZWxzZSB7Ci0JCXVzaXplID0gaXhhbGxv Y3hfaGVscGVyKHRzZF90c2RuKHRzZCksIHB0ciwgb2xkX3VzaXplLCBzaXplLAotCQkgICAgZXh0 cmEsIGFsaWdubWVudCwgemVybyk7Ci0JfQotCi0JLyoKLQkgKiB4YWxsb2N4KCkgc2hvdWxkIGtl ZXAgdXNpbmcgdGhlIHNhbWUgZWRhdGFfdCBvYmplY3QgKHRob3VnaCBpdHMKLQkgKiBjb250ZW50 IGNhbiBiZSBjaGFuZ2VkKS4KLQkgKi8KLQlhc3NlcnQoZW1hcF9lZGF0YV9sb29rdXAodHNkX3Rz ZG4odHNkKSwgJmFyZW5hX2VtYXBfZ2xvYmFsLCBwdHIpCi0JICAgID09IG9sZF9lZGF0YSk7Ci0K LQlpZiAodW5saWtlbHkodXNpemUgPT0gb2xkX3VzaXplKSkgewotCQlnb3RvIGxhYmVsX25vdF9y ZXNpemVkOwotCX0KLQl0aHJlYWRfYWxsb2NfZXZlbnQodHNkLCB1c2l6ZSk7Ci0JdGhyZWFkX2Rh bGxvY19ldmVudCh0c2QsIG9sZF91c2l6ZSk7Ci0KLQlpZiAoY29uZmlnX2ZpbGwgJiYgdW5saWtl bHkob3B0X2p1bmtfYWxsb2MpICYmIHVzaXplID4gb2xkX3VzaXplICYmCi0JICAgICF6ZXJvKSB7 Ci0JCXNpemVfdCBleGNlc3NfbGVuID0gdXNpemUgLSBvbGRfdXNpemU7Ci0JCXZvaWQgKmV4Y2Vz c19zdGFydCA9ICh2b2lkICopKCh1aW50cHRyX3QpcHRyICsgb2xkX3VzaXplKTsKLQkJanVua19h bGxvY19jYWxsYmFjayhleGNlc3Nfc3RhcnQsIGV4Y2Vzc19sZW4pOwotCX0KLWxhYmVsX25vdF9y ZXNpemVkOgotCWlmICh1bmxpa2VseSghdHNkX2Zhc3QodHNkKSkpIHsKLQkJdWludHB0cl90IGFy Z3NbNF0gPSB7KHVpbnRwdHJfdClwdHIsIHNpemUsIGV4dHJhLCBmbGFnc307Ci0JCWhvb2tfaW52 b2tlX2V4cGFuZChob29rX2V4cGFuZF94YWxsb2N4LCBwdHIsIG9sZF91c2l6ZSwKLQkJICAgIHVz aXplLCAodWludHB0cl90KXVzaXplLCBhcmdzKTsKLQl9Ci0KLQlVVFJBQ0UocHRyLCBzaXplLCBw dHIpOwotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLQotCUxPRygi Y29yZS54YWxsb2N4LmV4aXQiLCAicmVzdWx0OiAlenUiLCB1c2l6ZSk7Ci0JcmV0dXJuIHVzaXpl OwotfQotCi1KRU1BTExPQ19FWFBPUlQgc2l6ZV90IEpFTUFMTE9DX05PVEhST1cKLUpFTUFMTE9D X0FUVFIocHVyZSkKLWplX3NhbGxvY3goY29uc3Qgdm9pZCAqcHRyLCBpbnQgZmxhZ3MpIHsKLQlz aXplX3QgdXNpemU7Ci0JdHNkbl90ICp0c2RuOwotCi0JTE9HKCJjb3JlLnNhbGxvY3guZW50cnki LCAicHRyOiAlcCwgZmxhZ3M6ICVkIiwgcHRyLCBmbGFncyk7Ci0KLQlhc3NlcnQobWFsbG9jX2lu aXRpYWxpemVkKCkgfHwgSVNfSU5JVElBTElaRVIpOwotCWFzc2VydChwdHIgIT0gTlVMTCk7Ci0K LQl0c2RuID0gdHNkbl9mZXRjaCgpOwotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RuKTsK LQotCWlmIChjb25maWdfZGVidWcgfHwgZm9yY2VfaXZzYWxsb2MpIHsKLQkJdXNpemUgPSBpdnNh bGxvYyh0c2RuLCBwdHIpOwotCQlhc3NlcnQoZm9yY2VfaXZzYWxsb2MgfHwgdXNpemUgIT0gMCk7 Ci0JfSBlbHNlIHsKLQkJdXNpemUgPSBpc2FsbG9jKHRzZG4sIHB0cik7Ci0JfQotCi0JY2hlY2tf ZW50cnlfZXhpdF9sb2NraW5nKHRzZG4pOwotCi0JTE9HKCJjb3JlLnNhbGxvY3guZXhpdCIsICJy ZXN1bHQ6ICV6dSIsIHVzaXplKTsKLQlyZXR1cm4gdXNpemU7Ci19Ci0KLUpFTUFMTE9DX0VYUE9S VCB2b2lkIEpFTUFMTE9DX05PVEhST1cKLWplX2RhbGxvY3godm9pZCAqcHRyLCBpbnQgZmxhZ3Mp IHsKLQlMT0coImNvcmUuZGFsbG9jeC5lbnRyeSIsICJwdHI6ICVwLCBmbGFnczogJWQiLCBwdHIs IGZsYWdzKTsKLQotCWFzc2VydChwdHIgIT0gTlVMTCk7Ci0JYXNzZXJ0KG1hbGxvY19pbml0aWFs aXplZCgpIHx8IElTX0lOSVRJQUxJWkVSKTsKLQotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2hfbWlu KCk7Ci0JYm9vbCBmYXN0ID0gdHNkX2Zhc3QodHNkKTsKLQljaGVja19lbnRyeV9leGl0X2xvY2tp bmcodHNkX3RzZG4odHNkKSk7Ci0KLQl1bnNpZ25lZCB0Y2FjaGVfaW5kID0gbWFsbG9jeF90Y2Fj aGVfZ2V0KGZsYWdzKTsKLQl0Y2FjaGVfdCAqdGNhY2hlID0gdGNhY2hlX2dldF9mcm9tX2luZCh0 c2QsIHRjYWNoZV9pbmQsICFmYXN0LAotCSAgICAvKiBpc19hbGxvYyAqLyBmYWxzZSk7Ci0KLQlV VFJBQ0UocHRyLCAwLCAwKTsKLQlpZiAobGlrZWx5KGZhc3QpKSB7Ci0JCXRzZF9hc3NlcnRfZmFz dCh0c2QpOwotCQlpZnJlZSh0c2QsIHB0ciwgdGNhY2hlLCBmYWxzZSk7Ci0JfSBlbHNlIHsKLQkJ dWludHB0cl90IGFyZ3NfcmF3WzNdID0geyh1aW50cHRyX3QpcHRyLCBmbGFnc307Ci0JCWhvb2tf aW52b2tlX2RhbGxvYyhob29rX2RhbGxvY19kYWxsb2N4LCBwdHIsIGFyZ3NfcmF3KTsKLQkJaWZy ZWUodHNkLCBwdHIsIHRjYWNoZSwgdHJ1ZSk7Ci0JfQotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2lu Zyh0c2RfdHNkbih0c2QpKTsKLQotCUxPRygiY29yZS5kYWxsb2N4LmV4aXQiLCAiIik7Ci19Ci0K LUpFTUFMTE9DX0FMV0FZU19JTkxJTkUgc2l6ZV90Ci1pbmFsbG9jeCh0c2RuX3QgKnRzZG4sIHNp emVfdCBzaXplLCBpbnQgZmxhZ3MpIHsKLQljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkbik7 Ci0Jc2l6ZV90IHVzaXplOwotCS8qIEluIGNhc2Ugb2Ygb3V0IG9mIHJhbmdlLCBsZXQgdGhlIHVz ZXIgc2VlIGl0IHJhdGhlciB0aGFuIGZhaWwuICovCi0JYWxpZ25lZF91c2l6ZV9nZXQoc2l6ZSwg TUFMTE9DWF9BTElHTl9HRVQoZmxhZ3MpLCAmdXNpemUsIE5VTEwsIGZhbHNlKTsKLQljaGVja19l bnRyeV9leGl0X2xvY2tpbmcodHNkbik7Ci0JcmV0dXJuIHVzaXplOwotfQotCi1KRU1BTExPQ19O T0lOTElORSB2b2lkCi1zZGFsbG9jeF9kZWZhdWx0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGlu dCBmbGFncykgewotCWFzc2VydChwdHIgIT0gTlVMTCk7Ci0JYXNzZXJ0KG1hbGxvY19pbml0aWFs aXplZCgpIHx8IElTX0lOSVRJQUxJWkVSKTsKLQotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2hfbWlu KCk7Ci0JYm9vbCBmYXN0ID0gdHNkX2Zhc3QodHNkKTsKLQlzaXplX3QgdXNpemUgPSBpbmFsbG9j eCh0c2RfdHNkbih0c2QpLCBzaXplLCBmbGFncyk7Ci0JY2hlY2tfZW50cnlfZXhpdF9sb2NraW5n KHRzZF90c2RuKHRzZCkpOwotCi0JdW5zaWduZWQgdGNhY2hlX2luZCA9IG1hbGxvY3hfdGNhY2hl X2dldChmbGFncyk7Ci0JdGNhY2hlX3QgKnRjYWNoZSA9IHRjYWNoZV9nZXRfZnJvbV9pbmQodHNk LCB0Y2FjaGVfaW5kLCAhZmFzdCwKLQkgICAgLyogaXNfYWxsb2MgKi8gZmFsc2UpOwotCi0JVVRS QUNFKHB0ciwgMCwgMCk7Ci0JaWYgKGxpa2VseShmYXN0KSkgewotCQl0c2RfYXNzZXJ0X2Zhc3Qo dHNkKTsKLQkJaXNmcmVlKHRzZCwgcHRyLCB1c2l6ZSwgdGNhY2hlLCBmYWxzZSk7Ci0JfSBlbHNl IHsKLQkJdWludHB0cl90IGFyZ3NfcmF3WzNdID0geyh1aW50cHRyX3QpcHRyLCBzaXplLCBmbGFn c307Ci0JCWhvb2tfaW52b2tlX2RhbGxvYyhob29rX2RhbGxvY19zZGFsbG9jeCwgcHRyLCBhcmdz X3Jhdyk7Ci0JCWlzZnJlZSh0c2QsIHB0ciwgdXNpemUsIHRjYWNoZSwgdHJ1ZSk7Ci0JfQotCWNo ZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLX0KLQotSkVNQUxMT0NfRVhQ T1JUIHZvaWQgSkVNQUxMT0NfTk9USFJPVwotamVfc2RhbGxvY3godm9pZCAqcHRyLCBzaXplX3Qg c2l6ZSwgaW50IGZsYWdzKSB7Ci0JTE9HKCJjb3JlLnNkYWxsb2N4LmVudHJ5IiwgInB0cjogJXAs IHNpemU6ICV6dSwgZmxhZ3M6ICVkIiwgcHRyLAotCQlzaXplLCBmbGFncyk7Ci0KLQlpZiAoZmxh Z3MgIT0gMCB8fCAhZnJlZV9mYXN0cGF0aChwdHIsIHNpemUsIHRydWUpKSB7Ci0JCXNkYWxsb2N4 X2RlZmF1bHQocHRyLCBzaXplLCBmbGFncyk7Ci0JfQotCi0JTE9HKCJjb3JlLnNkYWxsb2N4LmV4 aXQiLCAiIik7Ci19Ci0KLXZvaWQgSkVNQUxMT0NfTk9USFJPVwotamVfc2RhbGxvY3hfbm9mbGFn cyh2b2lkICpwdHIsIHNpemVfdCBzaXplKSB7Ci0JTE9HKCJjb3JlLnNkYWxsb2N4LmVudHJ5Iiwg InB0cjogJXAsIHNpemU6ICV6dSwgZmxhZ3M6IDAiLCBwdHIsCi0JCXNpemUpOwotCi0JaWYgKCFm cmVlX2Zhc3RwYXRoKHB0ciwgc2l6ZSwgdHJ1ZSkpIHsKLQkJc2RhbGxvY3hfZGVmYXVsdChwdHIs IHNpemUsIDApOwotCX0KLQotCUxPRygiY29yZS5zZGFsbG9jeC5leGl0IiwgIiIpOwotfQotCi1K RU1BTExPQ19FWFBPUlQgc2l6ZV90IEpFTUFMTE9DX05PVEhST1cKLUpFTUFMTE9DX0FUVFIocHVy ZSkKLWplX25hbGxvY3goc2l6ZV90IHNpemUsIGludCBmbGFncykgewotCXNpemVfdCB1c2l6ZTsK LQl0c2RuX3QgKnRzZG47Ci0KLQlhc3NlcnQoc2l6ZSAhPSAwKTsKLQotCWlmICh1bmxpa2VseSht YWxsb2NfaW5pdCgpKSkgewotCQlMT0coImNvcmUubmFsbG9jeC5leGl0IiwgInJlc3VsdDogJXp1 IiwgWlUoMCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl0c2RuID0gdHNkbl9mZXRjaCgpOwotCWNo ZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RuKTsKLQotCXVzaXplID0gaW5hbGxvY3godHNkbiwg c2l6ZSwgZmxhZ3MpOwotCWlmICh1bmxpa2VseSh1c2l6ZSA+IFNDX0xBUkdFX01BWENMQVNTKSkg ewotCQlMT0coImNvcmUubmFsbG9jeC5leGl0IiwgInJlc3VsdDogJXp1IiwgWlUoMCkpOwotCQly ZXR1cm4gMDsKLQl9Ci0KLQljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkbik7Ci0JTE9HKCJj b3JlLm5hbGxvY3guZXhpdCIsICJyZXN1bHQ6ICV6dSIsIHVzaXplKTsKLQlyZXR1cm4gdXNpemU7 Ci19Ci0KLUpFTUFMTE9DX0VYUE9SVCBpbnQgSkVNQUxMT0NfTk9USFJPVwotamVfbWFsbGN0bChj b25zdCBjaGFyICpuYW1lLCB2b2lkICpvbGRwLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3As Ci0gICAgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7Ci0JdHNkX3QgKnRzZDsKLQotCUxPRygi Y29yZS5tYWxsY3RsLmVudHJ5IiwgIm5hbWU6ICVzIiwgbmFtZSk7Ci0KLQlpZiAodW5saWtlbHko bWFsbG9jX2luaXQoKSkpIHsKLQkJTE9HKCJjb3JlLm1hbGxjdGwuZXhpdCIsICJyZXN1bHQ6ICVk IiwgRUFHQUlOKTsKLQkJcmV0dXJuIEVBR0FJTjsKLQl9Ci0KLQl0c2QgPSB0c2RfZmV0Y2goKTsK LQljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7Ci0JcmV0ID0gY3RsX2J5 bmFtZSh0c2QsIG5hbWUsIG9sZHAsIG9sZGxlbnAsIG5ld3AsIG5ld2xlbik7Ci0JY2hlY2tfZW50 cnlfZXhpdF9sb2NraW5nKHRzZF90c2RuKHRzZCkpOwotCi0JTE9HKCJjb3JlLm1hbGxjdGwuZXhp dCIsICJyZXN1bHQ6ICVkIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi1KRU1BTExPQ19FWFBP UlQgaW50IEpFTUFMTE9DX05PVEhST1cKLWplX21hbGxjdGxuYW1ldG9taWIoY29uc3QgY2hhciAq bmFtZSwgc2l6ZV90ICptaWJwLCBzaXplX3QgKm1pYmxlbnApIHsKLQlpbnQgcmV0OwotCi0JTE9H KCJjb3JlLm1hbGxjdGxuYW1ldG9taWIuZW50cnkiLCAibmFtZTogJXMiLCBuYW1lKTsKLQotCWlm ICh1bmxpa2VseShtYWxsb2NfaW5pdCgpKSkgewotCQlMT0coImNvcmUubWFsbGN0bG5hbWV0b21p Yi5leGl0IiwgInJlc3VsdDogJWQiLCBFQUdBSU4pOwotCQlyZXR1cm4gRUFHQUlOOwotCX0KLQot CXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKLQljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNk X3RzZG4odHNkKSk7Ci0JcmV0ID0gY3RsX25hbWV0b21pYih0c2QsIG5hbWUsIG1pYnAsIG1pYmxl bnApOwotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLQotCUxPRygi Y29yZS5tYWxsY3RsbmFtZXRvbWliLmV4aXQiLCAicmVzdWx0OiAlZCIsIHJldCk7Ci0JcmV0dXJu IHJldDsKLX0KLQotSkVNQUxMT0NfRVhQT1JUIGludCBKRU1BTExPQ19OT1RIUk9XCi1qZV9tYWxs Y3RsYnltaWIoY29uc3Qgc2l6ZV90ICptaWIsIHNpemVfdCBtaWJsZW4sIHZvaWQgKm9sZHAsIHNp emVfdCAqb2xkbGVucCwKLSAgdm9pZCAqbmV3cCwgc2l6ZV90IG5ld2xlbikgewotCWludCByZXQ7 Ci0JdHNkX3QgKnRzZDsKLQotCUxPRygiY29yZS5tYWxsY3RsYnltaWIuZW50cnkiLCAiIik7Ci0K LQlpZiAodW5saWtlbHkobWFsbG9jX2luaXQoKSkpIHsKLQkJTE9HKCJjb3JlLm1hbGxjdGxieW1p Yi5leGl0IiwgInJlc3VsdDogJWQiLCBFQUdBSU4pOwotCQlyZXR1cm4gRUFHQUlOOwotCX0KLQot CXRzZCA9IHRzZF9mZXRjaCgpOwotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0 c2QpKTsKLQlyZXQgPSBjdGxfYnltaWIodHNkLCBtaWIsIG1pYmxlbiwgb2xkcCwgb2xkbGVucCwg bmV3cCwgbmV3bGVuKTsKLQljaGVja19lbnRyeV9leGl0X2xvY2tpbmcodHNkX3RzZG4odHNkKSk7 Ci0JTE9HKCJjb3JlLm1hbGxjdGxieW1pYi5leGl0IiwgInJlc3VsdDogJWQiLCByZXQpOwotCXJl dHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgU1RBVFNfUFJJTlRfQlVGU0laRSA2NTUzNgotSkVNQUxM T0NfRVhQT1JUIHZvaWQgSkVNQUxMT0NfTk9USFJPVwotamVfbWFsbG9jX3N0YXRzX3ByaW50KHZv aWQgKCp3cml0ZV9jYikodm9pZCAqLCBjb25zdCBjaGFyICopLCB2b2lkICpjYm9wYXF1ZSwKLSAg ICBjb25zdCBjaGFyICpvcHRzKSB7Ci0JdHNkbl90ICp0c2RuOwotCi0JTE9HKCJjb3JlLm1hbGxv Y19zdGF0c19wcmludC5lbnRyeSIsICIiKTsKLQotCXRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0JY2hl Y2tfZW50cnlfZXhpdF9sb2NraW5nKHRzZG4pOwotCi0JaWYgKGNvbmZpZ19kZWJ1ZykgewotCQlz dGF0c19wcmludCh3cml0ZV9jYiwgY2JvcGFxdWUsIG9wdHMpOwotCX0gZWxzZSB7Ci0JCWJ1Zl93 cml0ZXJfdCBidWZfd3JpdGVyOwotCQlidWZfd3JpdGVyX2luaXQodHNkbiwgJmJ1Zl93cml0ZXIs IHdyaXRlX2NiLCBjYm9wYXF1ZSwgTlVMTCwKLQkJICAgIFNUQVRTX1BSSU5UX0JVRlNJWkUpOwot CQlzdGF0c19wcmludChidWZfd3JpdGVyX2NiLCAmYnVmX3dyaXRlciwgb3B0cyk7Ci0JCWJ1Zl93 cml0ZXJfdGVybWluYXRlKHRzZG4sICZidWZfd3JpdGVyKTsKLQl9Ci0KLQljaGVja19lbnRyeV9l eGl0X2xvY2tpbmcodHNkbik7Ci0JTE9HKCJjb3JlLm1hbGxvY19zdGF0c19wcmludC5leGl0Iiwg IiIpOwotfQotI3VuZGVmIFNUQVRTX1BSSU5UX0JVRlNJWkUKLQotSkVNQUxMT0NfQUxXQVlTX0lO TElORSBzaXplX3QKLWplX21hbGxvY191c2FibGVfc2l6ZV9pbXBsKEpFTUFMTE9DX1VTQUJMRV9T SVpFX0NPTlNUIHZvaWQgKnB0cikgewotCWFzc2VydChtYWxsb2NfaW5pdGlhbGl6ZWQoKSB8fCBJ U19JTklUSUFMSVpFUik7Ci0KLQl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0JY2hlY2tf ZW50cnlfZXhpdF9sb2NraW5nKHRzZG4pOwotCi0Jc2l6ZV90IHJldDsKLQlpZiAodW5saWtlbHko cHRyID09IE5VTEwpKSB7Ci0JCXJldCA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKGNvbmZpZ19kZWJ1 ZyB8fCBmb3JjZV9pdnNhbGxvYykgewotCQkJcmV0ID0gaXZzYWxsb2ModHNkbiwgcHRyKTsKLQkJ CWFzc2VydChmb3JjZV9pdnNhbGxvYyB8fCByZXQgIT0gMCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQg PSBpc2FsbG9jKHRzZG4sIHB0cik7Ci0JCX0KLQl9Ci0JY2hlY2tfZW50cnlfZXhpdF9sb2NraW5n KHRzZG4pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotSkVNQUxMT0NfRVhQT1JUIHNpemVfdCBKRU1B TExPQ19OT1RIUk9XCi1qZV9tYWxsb2NfdXNhYmxlX3NpemUoSkVNQUxMT0NfVVNBQkxFX1NJWkVf Q09OU1Qgdm9pZCAqcHRyKSB7Ci0JTE9HKCJjb3JlLm1hbGxvY191c2FibGVfc2l6ZS5lbnRyeSIs ICJwdHI6ICVwIiwgcHRyKTsKLQotCXNpemVfdCByZXQgPSBqZV9tYWxsb2NfdXNhYmxlX3NpemVf aW1wbChwdHIpOwotCi0JTE9HKCJjb3JlLm1hbGxvY191c2FibGVfc2l6ZS5leGl0IiwgInJlc3Vs dDogJXp1IiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotCi0jaWZkZWYgSkVNQUxMT0NfSEFWRV9N QUxMT0NfU0laRQotSkVNQUxMT0NfRVhQT1JUIHNpemVfdCBKRU1BTExPQ19OT1RIUk9XCi1qZV9t YWxsb2Nfc2l6ZShjb25zdCB2b2lkICpwdHIpIHsKLQlMT0coImNvcmUubWFsbG9jX3NpemUuZW50 cnkiLCAicHRyOiAlcCIsIHB0cik7Ci0KLQlzaXplX3QgcmV0ID0gamVfbWFsbG9jX3VzYWJsZV9z aXplX2ltcGwocHRyKTsKLQotCUxPRygiY29yZS5tYWxsb2Nfc2l6ZS5leGl0IiwgInJlc3VsdDog JXp1IiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1iYXRj aF9hbGxvY19wcm9mX3NhbXBsZV9hc3NlcnQodHNkX3QgKnRzZCwgc2l6ZV90IGJhdGNoLCBzaXpl X3QgdXNpemUpIHsKLQlhc3NlcnQoY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YpOwotCWJvb2wgcHJv Zl9zYW1wbGVfZXZlbnQgPSB0ZV9wcm9mX3NhbXBsZV9ldmVudF9sb29rYWhlYWQodHNkLAotCSAg ICBiYXRjaCAqIHVzaXplKTsKLQlhc3NlcnQoIXByb2Zfc2FtcGxlX2V2ZW50KTsKLQlzaXplX3Qg c3VycGx1czsKLQlwcm9mX3NhbXBsZV9ldmVudCA9IHRlX3Byb2Zfc2FtcGxlX2V2ZW50X2xvb2th aGVhZF9zdXJwbHVzKHRzZCwKLQkgICAgKGJhdGNoICsgMSkgKiB1c2l6ZSwgJnN1cnBsdXMpOwot CWFzc2VydChwcm9mX3NhbXBsZV9ldmVudCk7Ci0JYXNzZXJ0KHN1cnBsdXMgPCB1c2l6ZSk7Ci19 Ci0KLXNpemVfdAotYmF0Y2hfYWxsb2Modm9pZCAqKnB0cnMsIHNpemVfdCBudW0sIHNpemVfdCBz aXplLCBpbnQgZmxhZ3MpIHsKLQlMT0coImNvcmUuYmF0Y2hfYWxsb2MuZW50cnkiLAotCSAgICAi cHRyczogJXAsIG51bTogJXp1LCBzaXplOiAlenUsIGZsYWdzOiAlZCIsIHB0cnMsIG51bSwgc2l6 ZSwgZmxhZ3MpOwotCi0JdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOwotCWNoZWNrX2VudHJ5X2V4 aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsKLQotCXNpemVfdCBmaWxsZWQgPSAwOwotCi0JaWYg KHVubGlrZWx5KHRzZCA9PSBOVUxMIHx8IHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID4g MCkpIHsKLQkJZ290byBsYWJlbF9kb25lOwotCX0KLQotCXNpemVfdCBhbGlnbm1lbnQgPSBNQUxM T0NYX0FMSUdOX0dFVChmbGFncyk7Ci0Jc2l6ZV90IHVzaXplOwotCWlmIChhbGlnbmVkX3VzaXpl X2dldChzaXplLCBhbGlnbm1lbnQsICZ1c2l6ZSwgTlVMTCwgZmFsc2UpKSB7Ci0JCWdvdG8gbGFi ZWxfZG9uZTsKLQl9Ci0Jc3ppbmRfdCBpbmQgPSBzel9zaXplMmluZGV4KHVzaXplKTsKLQlib29s IHplcm8gPSB6ZXJvX2dldChNQUxMT0NYX1pFUk9fR0VUKGZsYWdzKSwgLyogc2xvdyAqLyB0cnVl KTsKLQotCS8qCi0JICogVGhlIGNhY2hlIGJpbiBhbmQgYXJlbmEgd2lsbCBiZSBsYXppbHkgaW5p dGlhbGl6ZWQ7IGl0J3MgaGFyZCB0bwotCSAqIGtub3cgaW4gYWR2YW5jZSB3aGV0aGVyIGVhY2gg b2YgdGhlbSBuZWVkcyB0byBiZSBpbml0aWFsaXplZC4KLQkgKi8KLQljYWNoZV9iaW5fdCAqYmlu ID0gTlVMTDsKLQlhcmVuYV90ICphcmVuYSA9IE5VTEw7Ci0KLQlzaXplX3QgbnJlZ3MgPSAwOwot CWlmIChsaWtlbHkoaW5kIDwgU0NfTkJJTlMpKSB7Ci0JCW5yZWdzID0gYmluX2luZm9zW2luZF0u bnJlZ3M7Ci0JCWFzc2VydChucmVncyA+IDApOwotCX0KLQotCXdoaWxlIChmaWxsZWQgPCBudW0p IHsKLQkJc2l6ZV90IGJhdGNoID0gbnVtIC0gZmlsbGVkOwotCQlzaXplX3Qgc3VycGx1cyA9IFNJ WkVfTUFYOyAvKiBEZWFkIHN0b3JlLiAqLwotCQlib29sIHByb2Zfc2FtcGxlX2V2ZW50ID0gY29u ZmlnX3Byb2YgJiYgb3B0X3Byb2YKLQkJICAgICYmIHByb2ZfYWN0aXZlX2dldF91bmxvY2tlZCgp Ci0JCSAgICAmJiB0ZV9wcm9mX3NhbXBsZV9ldmVudF9sb29rYWhlYWRfc3VycGx1cyh0c2QsCi0J CSAgICBiYXRjaCAqIHVzaXplLCAmc3VycGx1cyk7Ci0KLQkJaWYgKHByb2Zfc2FtcGxlX2V2ZW50 KSB7Ci0JCQkvKgotCQkJICogQWRqdXN0IHNvIHRoYXQgdGhlIGJhdGNoIGRvZXMgbm90IHRyaWdn ZXIgcHJvZgotCQkJICogc2FtcGxpbmcuCi0JCQkgKi8KLQkJCWJhdGNoIC09IHN1cnBsdXMgLyB1 c2l6ZSArIDE7Ci0JCQliYXRjaF9hbGxvY19wcm9mX3NhbXBsZV9hc3NlcnQodHNkLCBiYXRjaCwg dXNpemUpOwotCQl9Ci0KLQkJc2l6ZV90IHByb2dyZXNzID0gMDsKLQotCQlpZiAobGlrZWx5KGlu ZCA8IFNDX05CSU5TKSAmJiBiYXRjaCA+PSBucmVncykgewotCQkJaWYgKGFyZW5hID09IE5VTEwp IHsKLQkJCQl1bnNpZ25lZCBhcmVuYV9pbmQgPSBtYWxsb2N4X2FyZW5hX2dldChmbGFncyk7Ci0J CQkJaWYgKGFyZW5hX2dldF9mcm9tX2luZCh0c2QsIGFyZW5hX2luZCwKLQkJCQkgICAgJmFyZW5h KSkgewotCQkJCQlnb3RvIGxhYmVsX2RvbmU7Ci0JCQkJfQotCQkJCWlmIChhcmVuYSA9PSBOVUxM KSB7Ci0JCQkJCWFyZW5hID0gYXJlbmFfY2hvb3NlKHRzZCwgTlVMTCk7Ci0JCQkJfQotCQkJCWlm ICh1bmxpa2VseShhcmVuYSA9PSBOVUxMKSkgewotCQkJCQlnb3RvIGxhYmVsX2RvbmU7Ci0JCQkJ fQotCQkJfQotCQkJc2l6ZV90IGFyZW5hX2JhdGNoID0gYmF0Y2ggLSBiYXRjaCAlIG5yZWdzOwot CQkJc2l6ZV90IG4gPSBhcmVuYV9maWxsX3NtYWxsX2ZyZXNoKHRzZF90c2RuKHRzZCksIGFyZW5h LAotCQkJICAgIGluZCwgcHRycyArIGZpbGxlZCwgYXJlbmFfYmF0Y2gsIHplcm8pOwotCQkJcHJv Z3Jlc3MgKz0gbjsKLQkJCWZpbGxlZCArPSBuOwotCQl9Ci0KLQkJaWYgKGxpa2VseShpbmQgPCBu aGJpbnMpICYmIHByb2dyZXNzIDwgYmF0Y2gpIHsKLQkJCWlmIChiaW4gPT0gTlVMTCkgewotCQkJ CXVuc2lnbmVkIHRjYWNoZV9pbmQgPSBtYWxsb2N4X3RjYWNoZV9nZXQoZmxhZ3MpOwotCQkJCXRj YWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfZ2V0X2Zyb21faW5kKHRzZCwKLQkJCQkgICAgdGNhY2hl X2luZCwgLyogc2xvdyAqLyB0cnVlLAotCQkJCSAgICAvKiBpc19hbGxvYyAqLyB0cnVlKTsKLQkJ CQlpZiAodGNhY2hlICE9IE5VTEwpIHsKLQkJCQkJYmluID0gJnRjYWNoZS0+Ymluc1tpbmRdOwot CQkJCX0KLQkJCX0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdGNhY2hlIGJpbiwg d2UgZG9uJ3Qgd2FudCB0bwotCQkJICogaW1tZWRpYXRlbHkgZ2l2ZSB1cCwgYmVjYXVzZSB0aGVy ZSdzIHRoZSBwb3NzaWJpbGl0eQotCQkJICogdGhhdCB0aGUgdXNlciBleHBsaWNpdGx5IHJlcXVl c3RlZCB0byBieXBhc3MgdGhlCi0JCQkgKiB0Y2FjaGUsIG9yIHRoYXQgdGhlIHVzZXIgZXhwbGlj aXRseSB0dXJuZWQgb2ZmIHRoZQotCQkJICogdGNhY2hlOyBpbiBzdWNoIGNhc2VzLCB3ZSBnbyB0 aHJvdWdoIHRoZSBzbG93IHBhdGgsCi0JCQkgKiBpLmUuIHRoZSBtYWxsb2N4KCkgY2FsbCBhdCB0 aGUgZW5kIG9mIHRoZSB3aGlsZSBsb29wLgotCQkJICovCi0JCQlpZiAoYmluICE9IE5VTEwpIHsK LQkJCQlzaXplX3QgYmluX2JhdGNoID0gYmF0Y2ggLSBwcm9ncmVzczsKLQkJCQkvKgotCQkJCSAq IG4gY2FuIGJlIGxlc3MgdGhhbiBiaW5fYmF0Y2gsIG1lYW5pbmcgdGhhdAotCQkJCSAqIHRoZSBj YWNoZSBiaW4gZG9lcyBub3QgaGF2ZSBlbm91Z2ggbWVtb3J5LgotCQkJCSAqIEluIHN1Y2ggY2Fz ZXMsIHdlIHJlbHkgb24gdGhlIHNsb3cgcGF0aCwKLQkJCQkgKiBpLmUuIHRoZSBtYWxsb2N4KCkg Y2FsbCBhdCB0aGUgZW5kIG9mIHRoZQotCQkJCSAqIHdoaWxlIGxvb3AsIHRvIGZpbGwgaW4gdGhl IGNhY2hlLCBhbmQgaW4gdGhlCi0JCQkJICogbmV4dCBpdGVyYXRpb24gb2YgdGhlIHdoaWxlIGxv b3AsIHRoZSB0Y2FjaGUKLQkJCQkgKiB3aWxsIGNvbnRhaW4gYSBsb3Qgb2YgbWVtb3J5LCBhbmQg d2UgY2FuCi0JCQkJICogaGFydmVzdCB0aGVtIGhlcmUuICBDb21wYXJlZCB0byB0aGUKLQkJCQkg KiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB3aGVyZSB3ZSBkaXJlY3RseSBnbyB0bwotCQkJCSAqIHRo ZSBhcmVuYSBiaW5zIGhlcmUsIHRoZSBvdmVyaGVhZCBvZiBvdXIKLQkJCQkgKiBjdXJyZW50IGFw cHJvYWNoIHNob3VsZCB1c3VhbGx5IGJlIG1pbmltYWwsCi0JCQkJICogc2luY2Ugd2UgbmV2ZXIg dHJ5IHRvIGZldGNoIG1vcmUgbWVtb3J5IHRoYW4KLQkJCQkgKiB3aGF0IGEgc2xhYiBjb250YWlu cyB2aWEgdGhlIHRjYWNoZS4gIEFuCi0JCQkJICogYWRkaXRpb25hbCBiZW5lZml0IGlzIHRoYXQg dGhlIHRjYWNoZSB3aWxsCi0JCQkJICogbm90IGJlIGVtcHR5IGZvciB0aGUgbmV4dCBhbGxvY2F0 aW9uIHJlcXVlc3QuCi0JCQkJICovCi0JCQkJc2l6ZV90IG4gPSBjYWNoZV9iaW5fYWxsb2NfYmF0 Y2goYmluLCBiaW5fYmF0Y2gsCi0JCQkJICAgIHB0cnMgKyBmaWxsZWQpOwotCQkJCWlmIChjb25m aWdfc3RhdHMpIHsKLQkJCQkJYmluLT50c3RhdHMubnJlcXVlc3RzICs9IG47Ci0JCQkJfQotCQkJ CWlmICh6ZXJvKSB7Ci0JCQkJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0JCQkJ CQltZW1zZXQocHRyc1tmaWxsZWQgKyBpXSwgMCwKLQkJCQkJCSAgICB1c2l6ZSk7Ci0JCQkJCX0K LQkJCQl9Ci0JCQkJaWYgKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mCi0JCQkJICAgICYmIHVubGlr ZWx5KGluZCA+PSBTQ19OQklOUykpIHsKLQkJCQkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyAr K2kpIHsKLQkJCQkJCXByb2ZfdGN0eF9yZXNldF9zYW1wbGVkKHRzZCwKLQkJCQkJCSAgICBwdHJz W2ZpbGxlZCArIGldKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlwcm9ncmVzcyArPSBuOwotCQkJCWZp bGxlZCArPSBuOwotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogRm9yIHRocmVhZCBldmVudHMgb3Ro ZXIgdGhhbiBwcm9mIHNhbXBsaW5nLCB0cmlnZ2VyIHRoZW0gYXMKLQkJICogaWYgdGhlcmUncyBh IHNpbmdsZSBhbGxvY2F0aW9uIG9mIHNpemUgKG4gKiB1c2l6ZSkuICBUaGlzIGlzCi0JCSAqIGZp bmUgYmVjYXVzZToKLQkJICogKGEpIHRoZXNlIGV2ZW50cyBkbyBub3QgYWx0ZXIgdGhlIGFsbG9j YXRpb24gaXRzZWxmLCBhbmQKLQkJICogKGIpIGl0J3MgcG9zc2libGUgdGhhdCBzb21lIGV2ZW50 IHdvdWxkIGhhdmUgYmVlbiB0cmlnZ2VyZWQKLQkJICogICAgIG11bHRpcGxlIHRpbWVzLCBpbnN0 ZWFkIG9mIG9ubHkgb25jZSwgaWYgdGhlIGFsbG9jYXRpb25zCi0JCSAqICAgICB3ZXJlIGhhbmRs ZWQgaW5kaXZpZHVhbGx5LCBidXQgaXQgd291bGQgZG8gbm8gaGFybSAob3IKLQkJICogICAgIGV2 ZW4gYmUgYmVuZWZpY2lhbCkgdG8gY29hbGVzY2UgdGhlIHRyaWdnZXJpbmdzLgotCQkgKi8KLQkJ dGhyZWFkX2FsbG9jX2V2ZW50KHRzZCwgcHJvZ3Jlc3MgKiB1c2l6ZSk7Ci0KLQkJaWYgKHByb2dy ZXNzIDwgYmF0Y2ggfHwgcHJvZl9zYW1wbGVfZXZlbnQpIHsKLQkJCXZvaWQgKnAgPSBqZV9tYWxs b2N4KHNpemUsIGZsYWdzKTsKLQkJCWlmIChwID09IE5VTEwpIHsgLyogT09NICovCi0JCQkJYnJl YWs7Ci0JCQl9Ci0JCQlpZiAocHJvZ3Jlc3MgPT0gYmF0Y2gpIHsKLQkJCQlhc3NlcnQocHJvZl9z YW1wbGVkKHRzZCwgcCkpOwotCQkJfQotCQkJcHRyc1tmaWxsZWQrK10gPSBwOwotCQl9Ci0JfQot Ci1sYWJlbF9kb25lOgotCWNoZWNrX2VudHJ5X2V4aXRfbG9ja2luZyh0c2RfdHNkbih0c2QpKTsK LQlMT0coImNvcmUuYmF0Y2hfYWxsb2MuZXhpdCIsICJyZXN1bHQ6ICV6dSIsIGZpbGxlZCk7Ci0J cmV0dXJuIGZpbGxlZDsKLX0KLQotLyoKLSAqIEVuZCBub24tc3RhbmRhcmQgZnVuY3Rpb25zLgot ICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rp b25zIGFyZSB1c2VkIGJ5IHRocmVhZGluZyBsaWJyYXJpZXMgZm9yIHByb3RlY3Rpb24gb2YKLSAq IG1hbGxvYyBkdXJpbmcgZm9yaygpLgotICovCi0KLS8qCi0gKiBJZiBhbiBhcHBsaWNhdGlvbiBj cmVhdGVzIGEgdGhyZWFkIGJlZm9yZSBkb2luZyBhbnkgYWxsb2NhdGlvbiBpbiB0aGUgbWFpbgot ICogdGhyZWFkLCB0aGVuIGNhbGxzIGZvcmsoMikgaW4gdGhlIG1haW4gdGhyZWFkIGZvbGxvd2Vk IGJ5IG1lbW9yeSBhbGxvY2F0aW9uCi0gKiBpbiB0aGUgY2hpbGQgcHJvY2VzcywgYSByYWNlIGNh biBvY2N1ciB0aGF0IHJlc3VsdHMgaW4gZGVhZGxvY2sgd2l0aGluIHRoZQotICogY2hpbGQ6IHRo ZSBtYWluIHRocmVhZCBtYXkgaGF2ZSBmb3JrZWQgd2hpbGUgdGhlIGNyZWF0ZWQgdGhyZWFkIGhh ZAotICogcGFydGlhbGx5IGluaXRpYWxpemVkIHRoZSBhbGxvY2F0b3IuICBPcmRpbmFyaWx5IGpl bWFsbG9jIHByZXZlbnRzCi0gKiBmb3JrL21hbGxvYyByYWNlcyB2aWEgdGhlIGZvbGxvd2luZyBm dW5jdGlvbnMgaXQgcmVnaXN0ZXJzIGR1cmluZwotICogaW5pdGlhbGl6YXRpb24gdXNpbmcgcHRo cmVhZF9hdGZvcmsoKSwgYnV0IG9mIGNvdXJzZSB0aGF0IGRvZXMgbm8gZ29vZCBpZgotICogdGhl IGFsbG9jYXRvciBpc24ndCBmdWxseSBpbml0aWFsaXplZCBhdCBmb3JrIHRpbWUuICBUaGUgZm9s bG93aW5nIGxpYnJhcnkKLSAqIGNvbnN0cnVjdG9yIGlzIGEgcGFydGlhbCBzb2x1dGlvbiB0byB0 aGlzIHByb2JsZW0uICBJdCBtYXkgc3RpbGwgYmUgcG9zc2libGUKLSAqIHRvIHRyaWdnZXIgdGhl IGRlYWRsb2NrIGRlc2NyaWJlZCBhYm92ZSwgYnV0IGRvaW5nIHNvIHdvdWxkIGludm9sdmUgZm9y a2luZwotICogdmlhIGEgbGlicmFyeSBjb25zdHJ1Y3RvciB0aGF0IHJ1bnMgYmVmb3JlIGplbWFs bG9jJ3MgcnVucy4KLSAqLwotI2lmbmRlZiBKRU1BTExPQ19KRVQKLUpFTUFMTE9DX0FUVFIoY29u c3RydWN0b3IpCi1zdGF0aWMgdm9pZAotamVtYWxsb2NfY29uc3RydWN0b3Iodm9pZCkgewotCW1h bGxvY19pbml0KCk7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBKRU1BTExPQ19NVVRFWF9JTklUX0NC Ci12b2lkCi1qZW1hbGxvY19wcmVmb3JrKHZvaWQpCi0jZWxzZQotSkVNQUxMT0NfRVhQT1JUIHZv aWQKLV9tYWxsb2NfcHJlZm9yayh2b2lkKQotI2VuZGlmCi17Ci0JdHNkX3QgKnRzZDsKLQl1bnNp Z25lZCBpLCBqLCBuYXJlbmFzOwotCWFyZW5hX3QgKmFyZW5hOwotCi0jaWZkZWYgSkVNQUxMT0Nf TVVURVhfSU5JVF9DQgotCWlmICghbWFsbG9jX2luaXRpYWxpemVkKCkpIHsKLQkJcmV0dXJuOwot CX0KLSNlbmRpZgotCWFzc2VydChtYWxsb2NfaW5pdGlhbGl6ZWQoKSk7Ci0KLQl0c2QgPSB0c2Rf ZmV0Y2goKTsKLQotCW5hcmVuYXMgPSBuYXJlbmFzX3RvdGFsX2dldCgpOwotCi0Jd2l0bmVzc19w cmVmb3JrKHRzZF93aXRuZXNzX3RzZHBfZ2V0KHRzZCkpOwotCS8qIEFjcXVpcmUgYWxsIG11dGV4 ZXMgaW4gYSBzYWZlIG9yZGVyLiAqLwotCWN0bF9wcmVmb3JrKHRzZF90c2RuKHRzZCkpOwotCXRj YWNoZV9wcmVmb3JrKHRzZF90c2RuKHRzZCkpOwotCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZF90 c2RuKHRzZCksICZhcmVuYXNfbG9jayk7Ci0JaWYgKGhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsK LQkJYmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazAodHNkX3RzZG4odHNkKSk7Ci0JfQotCXByb2Zf cHJlZm9yazAodHNkX3RzZG4odHNkKSk7Ci0JaWYgKGhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsK LQkJYmFja2dyb3VuZF90aHJlYWRfcHJlZm9yazEodHNkX3RzZG4odHNkKSk7Ci0JfQotCS8qIEJy ZWFrIGFyZW5hIHByZWZvcmsgaW50byBzdGFnZXMgdG8gcHJlc2VydmUgbG9jayBvcmRlci4gKi8K LQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBuYXJlbmFzOyBq KyspIHsKLQkJCWlmICgoYXJlbmEgPSBhcmVuYV9nZXQodHNkX3RzZG4odHNkKSwgaiwgZmFsc2Up KSAhPQotCQkJICAgIE5VTEwpIHsKLQkJCQlzd2l0Y2ggKGkpIHsKLQkJCQljYXNlIDA6Ci0JCQkJ CWFyZW5hX3ByZWZvcmswKHRzZF90c2RuKHRzZCksIGFyZW5hKTsKLQkJCQkJYnJlYWs7Ci0JCQkJ Y2FzZSAxOgotCQkJCQlhcmVuYV9wcmVmb3JrMSh0c2RfdHNkbih0c2QpLCBhcmVuYSk7Ci0JCQkJ CWJyZWFrOwotCQkJCWNhc2UgMjoKLQkJCQkJYXJlbmFfcHJlZm9yazIodHNkX3RzZG4odHNkKSwg YXJlbmEpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDM6Ci0JCQkJCWFyZW5hX3ByZWZvcmszKHRz ZF90c2RuKHRzZCksIGFyZW5hKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA0OgotCQkJCQlhcmVu YV9wcmVmb3JrNCh0c2RfdHNkbih0c2QpLCBhcmVuYSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2Ug NToKLQkJCQkJYXJlbmFfcHJlZm9yazUodHNkX3RzZG4odHNkKSwgYXJlbmEpOwotCQkJCQlicmVh azsKLQkJCQljYXNlIDY6Ci0JCQkJCWFyZW5hX3ByZWZvcms2KHRzZF90c2RuKHRzZCksIGFyZW5h KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA3OgotCQkJCQlhcmVuYV9wcmVmb3JrNyh0c2RfdHNk bih0c2QpLCBhcmVuYSk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgODoKLQkJCQkJYXJlbmFfcHJl Zm9yazgodHNkX3RzZG4odHNkKSwgYXJlbmEpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OiBu b3RfcmVhY2hlZCgpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JfQotCXByb2ZfcHJlZm9yazEodHNk X3RzZG4odHNkKSk7Ci0Jc3RhdHNfcHJlZm9yayh0c2RfdHNkbih0c2QpKTsKLQl0c2RfcHJlZm9y ayh0c2QpOwotfQotCi0jaWZuZGVmIEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IKLXZvaWQKLWplbWFs bG9jX3Bvc3Rmb3JrX3BhcmVudCh2b2lkKQotI2Vsc2UKLUpFTUFMTE9DX0VYUE9SVCB2b2lkCi1f bWFsbG9jX3Bvc3Rmb3JrKHZvaWQpCi0jZW5kaWYKLXsKLQl0c2RfdCAqdHNkOwotCXVuc2lnbmVk IGksIG5hcmVuYXM7Ci0KLSNpZmRlZiBKRU1BTExPQ19NVVRFWF9JTklUX0NCCi0JaWYgKCFtYWxs b2NfaW5pdGlhbGl6ZWQoKSkgewotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JYXNzZXJ0KG1hbGxv Y19pbml0aWFsaXplZCgpKTsKLQotCXRzZCA9IHRzZF9mZXRjaCgpOwotCi0JdHNkX3Bvc3Rmb3Jr X3BhcmVudCh0c2QpOwotCi0Jd2l0bmVzc19wb3N0Zm9ya19wYXJlbnQodHNkX3dpdG5lc3NfdHNk cF9nZXQodHNkKSk7Ci0JLyogUmVsZWFzZSBhbGwgbXV0ZXhlcywgbm93IHRoYXQgZm9yaygpIGhh cyBjb21wbGV0ZWQuICovCi0Jc3RhdHNfcG9zdGZvcmtfcGFyZW50KHRzZF90c2RuKHRzZCkpOwot CWZvciAoaSA9IDAsIG5hcmVuYXMgPSBuYXJlbmFzX3RvdGFsX2dldCgpOyBpIDwgbmFyZW5hczsg aSsrKSB7Ci0JCWFyZW5hX3QgKmFyZW5hOwotCi0JCWlmICgoYXJlbmEgPSBhcmVuYV9nZXQodHNk X3RzZG4odHNkKSwgaSwgZmFsc2UpKSAhPSBOVUxMKSB7Ci0JCQlhcmVuYV9wb3N0Zm9ya19wYXJl bnQodHNkX3RzZG4odHNkKSwgYXJlbmEpOwotCQl9Ci0JfQotCXByb2ZfcG9zdGZvcmtfcGFyZW50 KHRzZF90c2RuKHRzZCkpOwotCWlmIChoYXZlX2JhY2tncm91bmRfdGhyZWFkKSB7Ci0JCWJhY2tn cm91bmRfdGhyZWFkX3Bvc3Rmb3JrX3BhcmVudCh0c2RfdHNkbih0c2QpKTsKLQl9Ci0JbWFsbG9j X211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RfdHNkbih0c2QpLCAmYXJlbmFzX2xvY2spOwotCXRj YWNoZV9wb3N0Zm9ya19wYXJlbnQodHNkX3RzZG4odHNkKSk7Ci0JY3RsX3Bvc3Rmb3JrX3BhcmVu dCh0c2RfdHNkbih0c2QpKTsKLX0KLQotdm9pZAotamVtYWxsb2NfcG9zdGZvcmtfY2hpbGQodm9p ZCkgewotCXRzZF90ICp0c2Q7Ci0JdW5zaWduZWQgaSwgbmFyZW5hczsKLQotCWFzc2VydChtYWxs b2NfaW5pdGlhbGl6ZWQoKSk7Ci0KLQl0c2QgPSB0c2RfZmV0Y2goKTsKLQotCXRzZF9wb3N0Zm9y a19jaGlsZCh0c2QpOwotCi0Jd2l0bmVzc19wb3N0Zm9ya19jaGlsZCh0c2Rfd2l0bmVzc190c2Rw X2dldCh0c2QpKTsKLQkvKiBSZWxlYXNlIGFsbCBtdXRleGVzLCBub3cgdGhhdCBmb3JrKCkgaGFz IGNvbXBsZXRlZC4gKi8KLQlzdGF0c19wb3N0Zm9ya19jaGlsZCh0c2RfdHNkbih0c2QpKTsKLQlm b3IgKGkgPSAwLCBuYXJlbmFzID0gbmFyZW5hc190b3RhbF9nZXQoKTsgaSA8IG5hcmVuYXM7IGkr KykgewotCQlhcmVuYV90ICphcmVuYTsKLQotCQlpZiAoKGFyZW5hID0gYXJlbmFfZ2V0KHRzZF90 c2RuKHRzZCksIGksIGZhbHNlKSkgIT0gTlVMTCkgewotCQkJYXJlbmFfcG9zdGZvcmtfY2hpbGQo dHNkX3RzZG4odHNkKSwgYXJlbmEpOwotCQl9Ci0JfQotCXByb2ZfcG9zdGZvcmtfY2hpbGQodHNk X3RzZG4odHNkKSk7Ci0JaWYgKGhhdmVfYmFja2dyb3VuZF90aHJlYWQpIHsKLQkJYmFja2dyb3Vu ZF90aHJlYWRfcG9zdGZvcmtfY2hpbGQodHNkX3RzZG4odHNkKSk7Ci0JfQotCW1hbGxvY19tdXRl eF9wb3N0Zm9ya19jaGlsZCh0c2RfdHNkbih0c2QpLCAmYXJlbmFzX2xvY2spOwotCXRjYWNoZV9w b3N0Zm9ya19jaGlsZCh0c2RfdHNkbih0c2QpKTsKLQljdGxfcG9zdGZvcmtfY2hpbGQodHNkX3Rz ZG4odHNkKSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL2plbWFsbG9jX2NwcC5jcHAg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvamVtYWxsb2NfY3Bw LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUxNjU1Zi4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvamVtYWxsb2NfY3Bw LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0jaW5jbHVkZSA8bXV0ZXg+Ci0j aW5jbHVkZSA8bmV3PgotCi0jZGVmaW5lIEpFTUFMTE9DX0NQUF9DUFBfCi0jaWZkZWYgX19jcGx1 c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFs bG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlm Ci0KLS8vIEFsbCBvcGVyYXRvcnMgaW4gdGhpcyBmaWxlIGFyZSBleHBvcnRlZC4KLQotLy8gUG9z c2libHkgYWxpYXMgaGlkZGVuIHZlcnNpb25zIG9mIG1hbGxvYyBhbmQgc2RhbGxvY3ggdG8gYXZv aWQgYW4gZXh0cmEgcGx0Ci0vLyB0aHVuaz8KLS8vCi0vLyBleHRlcm4gX190eXBlb2YgKHNkYWxs b2N4KSBzZGFsbG9jeF9pbnQKLS8vICBfX2F0dHJpYnV0ZSAoKGFsaWFzICgic2RhbGxvY3giKSwK LS8vCQl2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKLS8vCi0vLyAuLi4gYnV0IGl0IG5lZWRzIHRv IHdvcmsgd2l0aCBqZW1hbGxvYyBuYW1lc3BhY2VzLgotCi12b2lkCSpvcGVyYXRvciBuZXcoc3Rk OjpzaXplX3Qgc2l6ZSk7Ci12b2lkCSpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCBzaXplKTsK LXZvaWQJKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBzaXplLCBjb25zdCBzdGQ6Om5vdGhyb3df dCAmKSBub2V4Y2VwdDsKLXZvaWQJKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90IHNpemUsIGNv bnN0IHN0ZDo6bm90aHJvd190ICYpIG5vZXhjZXB0Owotdm9pZAlvcGVyYXRvciBkZWxldGUodm9p ZCAqcHRyKSBub2V4Y2VwdDsKLXZvaWQJb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcHRyKSBub2V4 Y2VwdDsKLXZvaWQJb3BlcmF0b3IgZGVsZXRlKHZvaWQgKnB0ciwgY29uc3Qgc3RkOjpub3Rocm93 X3QgJikgbm9leGNlcHQ7Ci12b2lkCW9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKnB0ciwgY29uc3Qg c3RkOjpub3Rocm93X3QgJikgbm9leGNlcHQ7Ci0KLSNpZiBfX2NwcF9zaXplZF9kZWFsbG9jYXRp b24gPj0gMjAxMzA5Ci0vKiBDKysxNCdzIHNpemVkLWRlbGV0ZSBvcGVyYXRvcnMuICovCi12b2lk CW9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwdHIsIHN0ZDo6c2l6ZV90IHNpemUpIG5vZXhjZXB0Owot dm9pZAlvcGVyYXRvciBkZWxldGVbXSh2b2lkICpwdHIsIHN0ZDo6c2l6ZV90IHNpemUpIG5vZXhj ZXB0OwotI2VuZGlmCi0KLSNpZiBfX2NwcF9hbGlnbmVkX25ldyA+PSAyMDE2MDYKLS8qIEMrKzE3 J3Mgb3Zlci1hbGlnbmVkIG9wZXJhdG9ycy4gKi8KLXZvaWQJKm9wZXJhdG9yIG5ldyhzdGQ6OnNp emVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90KTsKLXZvaWQJKm9wZXJhdG9yIG5ldyhzdGQ6OnNp emVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCAmKSBub2V4 Y2VwdDsKLXZvaWQJKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25f dmFsX3QpOwotdm9pZAkqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjphbGln bl92YWxfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QgJikgbm9leGNlcHQ7Ci12b2lkCW9wZXJhdG9y IGRlbGV0ZSh2b2lkKiBwdHIsIHN0ZDo6YWxpZ25fdmFsX3QpIG5vZXhjZXB0Owotdm9pZAlvcGVy YXRvciBkZWxldGUodm9pZCogcHRyLCBzdGQ6OmFsaWduX3ZhbF90LCBjb25zdCBzdGQ6Om5vdGhy b3dfdCAmKSBub2V4Y2VwdDsKLXZvaWQJb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgc3RkOjpz aXplX3Qgc2l6ZSwgc3RkOjphbGlnbl92YWxfdCBhbCkgbm9leGNlcHQ7Ci12b2lkCW9wZXJhdG9y IGRlbGV0ZVtdKHZvaWQqIHB0ciwgc3RkOjphbGlnbl92YWxfdCkgbm9leGNlcHQ7Ci12b2lkCW9w ZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0ciwgc3RkOjphbGlnbl92YWxfdCwgY29uc3Qgc3RkOjpu b3Rocm93X3QgJikgbm9leGNlcHQ7Ci12b2lkCW9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0ciwg c3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjphbGlnbl92YWxfdCBhbCkgbm9leGNlcHQ7Ci0jZW5kaWYK LQotSkVNQUxMT0NfTk9JTkxJTkUKLXN0YXRpYyB2b2lkICoKLWhhbmRsZU9PTShzdGQ6OnNpemVf dCBzaXplLCBib29sIG5vdGhyb3cpIHsKLQlpZiAob3B0X2V4cGVyaW1lbnRhbF9pbmZhbGxpYmxl X25ldykgewotCQlzYWZldHlfY2hlY2tfZmFpbCgiPGplbWFsbG9jPjogQWxsb2NhdGlvbiBmYWls ZWQgYW5kICIKLQkJICAgICJvcHQuZXhwZXJpbWVudGFsX2luZmFsbGlibGVfbmV3IGlzIHRydWUu IEFib3J0aW5nLlxuIik7Ci0JCXJldHVybiBudWxscHRyOwotCX0KLQotCXZvaWQgKnB0ciA9IG51 bGxwdHI7Ci0KLQl3aGlsZSAocHRyID09IG51bGxwdHIpIHsKLQkJc3RkOjpuZXdfaGFuZGxlciBo YW5kbGVyOwotCQkvLyBHQ0MtNC44IGFuZCBjbGFuZyA0LjAgZG8gbm90IGhhdmUgc3RkOjpnZXRf bmV3X2hhbmRsZXIuCi0JCXsKLQkJCXN0YXRpYyBzdGQ6Om11dGV4IG10eDsKLQkJCXN0ZDo6bG9j a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG10eCk7Ci0KLQkJCWhhbmRsZXIgPSBzdGQ6OnNldF9u ZXdfaGFuZGxlcihudWxscHRyKTsKLQkJCXN0ZDo6c2V0X25ld19oYW5kbGVyKGhhbmRsZXIpOwot CQl9Ci0JCWlmIChoYW5kbGVyID09IG51bGxwdHIpCi0JCQlicmVhazsKLQotCQl0cnkgewotCQkJ aGFuZGxlcigpOwotCQl9IGNhdGNoIChjb25zdCBzdGQ6OmJhZF9hbGxvYyAmKSB7Ci0JCQlicmVh azsKLQkJfQotCi0JCXB0ciA9IGplX21hbGxvYyhzaXplKTsKLQl9Ci0KLQlpZiAocHRyID09IG51 bGxwdHIgJiYgIW5vdGhyb3cpCi0JCXN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKLQlyZXR1cm4g cHRyOwotfQotCi10ZW1wbGF0ZSA8Ym9vbCBJc05vRXhjZXB0PgotSkVNQUxMT0NfTk9JTkxJTkUK LXN0YXRpYyB2b2lkICoKLWZhbGxiYWNrX2ltcGwoc3RkOjpzaXplX3Qgc2l6ZSkgbm9leGNlcHQo SXNOb0V4Y2VwdCkgewotCXZvaWQgKnB0ciA9IG1hbGxvY19kZWZhdWx0KHNpemUpOwotCWlmIChs aWtlbHkocHRyICE9IG51bGxwdHIpKSB7Ci0JCXJldHVybiBwdHI7Ci0JfQotCXJldHVybiBoYW5k bGVPT00oc2l6ZSwgSXNOb0V4Y2VwdCk7Ci19Ci0KLXRlbXBsYXRlIDxib29sIElzTm9FeGNlcHQ+ Ci1KRU1BTExPQ19BTFdBWVNfSU5MSU5FCi12b2lkICoKLW5ld0ltcGwoc3RkOjpzaXplX3Qgc2l6 ZSkgbm9leGNlcHQoSXNOb0V4Y2VwdCkgewotCXJldHVybiBpbWFsbG9jX2Zhc3RwYXRoKHNpemUs ICZmYWxsYmFja19pbXBsPElzTm9FeGNlcHQ+KTsKLX0KLQotdm9pZCAqCi1vcGVyYXRvciBuZXco c3RkOjpzaXplX3Qgc2l6ZSkgewotCXJldHVybiBuZXdJbXBsPGZhbHNlPihzaXplKTsKLX0KLQot dm9pZCAqCi1vcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCBzaXplKSB7Ci0JcmV0dXJuIG5ld0lt cGw8ZmFsc2U+KHNpemUpOwotfQotCi12b2lkICoKLW9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBz aXplLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCAmKSBub2V4Y2VwdCB7Ci0JcmV0dXJuIG5ld0ltcGw8 dHJ1ZT4oc2l6ZSk7Ci19Ci0KLXZvaWQgKgotb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6 ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QgJikgbm9leGNlcHQgewotCXJldHVybiBuZXdJbXBsPHRy dWU+KHNpemUpOwotfQotCi0jaWYgX19jcHBfYWxpZ25lZF9uZXcgPj0gMjAxNjA2Ci0KLXRlbXBs YXRlIDxib29sIElzTm9FeGNlcHQ+Ci1KRU1BTExPQ19BTFdBWVNfSU5MSU5FCi12b2lkICoKLWFs aWduZWROZXdJbXBsKHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25fdmFsX3QgYWxpZ25tZW50 KSBub2V4Y2VwdChJc05vRXhjZXB0KSB7Ci0Jdm9pZCAqcHRyID0gamVfYWxpZ25lZF9hbGxvYyhz dGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYWxpZ25tZW50KSwgc2l6ZSk7Ci0JaWYgKGxpa2VseShw dHIgIT0gbnVsbHB0cikpIHsKLQkJcmV0dXJuIHB0cjsKLQl9Ci0KLQlyZXR1cm4gaGFuZGxlT09N KHNpemUsIElzTm9FeGNlcHQpOwotfQotCi12b2lkICoKLW9wZXJhdG9yIG5ldyhzdGQ6OnNpemVf dCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsaWdubWVudCkgewotCXJldHVybiBhbGlnbmVkTmV3 SW1wbDxmYWxzZT4oc2l6ZSwgYWxpZ25tZW50KTsKLX0KLQotdm9pZCAqCi1vcGVyYXRvciBuZXdb XShzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsaWdubWVudCkgewotCXJldHVy biBhbGlnbmVkTmV3SW1wbDxmYWxzZT4oc2l6ZSwgYWxpZ25tZW50KTsKLX0KLQotdm9pZCAqCi1v cGVyYXRvciBuZXcoc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjphbGlnbl92YWxfdCBhbGlnbm1lbnQs IGNvbnN0IHN0ZDo6bm90aHJvd190ICYpIG5vZXhjZXB0IHsKLQlyZXR1cm4gYWxpZ25lZE5ld0lt cGw8dHJ1ZT4oc2l6ZSwgYWxpZ25tZW50KTsKLX0KLQotdm9pZCAqCi1vcGVyYXRvciBuZXdbXShz dGQ6OnNpemVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsaWdubWVudCwgY29uc3Qgc3RkOjpu b3Rocm93X3QgJikgbm9leGNlcHQgewotCXJldHVybiBhbGlnbmVkTmV3SW1wbDx0cnVlPihzaXpl LCBhbGlnbm1lbnQpOwotfQotCi0jZW5kaWYgIC8vIF9fY3BwX2FsaWduZWRfbmV3Ci0KLXZvaWQK LW9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwdHIpIG5vZXhjZXB0IHsKLQlqZV9mcmVlKHB0cik7Ci19 Ci0KLXZvaWQKLW9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKnB0cikgbm9leGNlcHQgewotCWplX2Zy ZWUocHRyKTsKLX0KLQotdm9pZAotb3BlcmF0b3IgZGVsZXRlKHZvaWQgKnB0ciwgY29uc3Qgc3Rk Ojpub3Rocm93X3QgJikgbm9leGNlcHQgewotCWplX2ZyZWUocHRyKTsKLX0KLQotdm9pZCBvcGVy YXRvciBkZWxldGVbXSh2b2lkICpwdHIsIGNvbnN0IHN0ZDo6bm90aHJvd190ICYpIG5vZXhjZXB0 IHsKLQlqZV9mcmVlKHB0cik7Ci19Ci0KLSNpZiBfX2NwcF9zaXplZF9kZWFsbG9jYXRpb24gPj0g MjAxMzA5Ci0KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUKLXZvaWQKLXNpemVkRGVsZXRlSW1wbCh2 b2lkKiBwdHIsIHN0ZDo6c2l6ZV90IHNpemUpIG5vZXhjZXB0IHsKLQlpZiAodW5saWtlbHkocHRy ID09IG51bGxwdHIpKSB7Ci0JCXJldHVybjsKLQl9Ci0JamVfc2RhbGxvY3hfbm9mbGFncyhwdHIs IHNpemUpOwotfQotCi12b2lkCi1vcGVyYXRvciBkZWxldGUodm9pZCAqcHRyLCBzdGQ6OnNpemVf dCBzaXplKSBub2V4Y2VwdCB7Ci0Jc2l6ZWREZWxldGVJbXBsKHB0ciwgc2l6ZSk7Ci19Ci0KLXZv aWQKLW9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKnB0ciwgc3RkOjpzaXplX3Qgc2l6ZSkgbm9leGNl cHQgewotCXNpemVkRGVsZXRlSW1wbChwdHIsIHNpemUpOwotfQotCi0jZW5kaWYgIC8vIF9fY3Bw X3NpemVkX2RlYWxsb2NhdGlvbgotCi0jaWYgX19jcHBfYWxpZ25lZF9uZXcgPj0gMjAxNjA2Ci0K LUpFTUFMTE9DX0FMV0FZU19JTkxJTkUKLXZvaWQKLWFsaWduZWRTaXplZERlbGV0ZUltcGwodm9p ZCogcHRyLCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsaWdubWVudCkgbm9l eGNlcHQgewotCWlmIChjb25maWdfZGVidWcpIHsKLQkJYXNzZXJ0KCgoc2l6ZV90KWFsaWdubWVu dCAmICgoc2l6ZV90KWFsaWdubWVudCAtIDEpKSA9PSAwKTsKLQl9Ci0JaWYgKHVubGlrZWx5KHB0 ciA9PSBudWxscHRyKSkgewotCQlyZXR1cm47Ci0JfQotCWplX3NkYWxsb2N4KHB0ciwgc2l6ZSwg TUFMTE9DWF9BTElHTihhbGlnbm1lbnQpKTsKLX0KLQotdm9pZAotb3BlcmF0b3IgZGVsZXRlKHZv aWQqIHB0ciwgc3RkOjphbGlnbl92YWxfdCkgbm9leGNlcHQgewotCWplX2ZyZWUocHRyKTsKLX0K LQotdm9pZAotb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcHRyLCBzdGQ6OmFsaWduX3ZhbF90KSBu b2V4Y2VwdCB7Ci0JamVfZnJlZShwdHIpOwotfQotCi12b2lkCi1vcGVyYXRvciBkZWxldGUodm9p ZCogcHRyLCBzdGQ6OmFsaWduX3ZhbF90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIG5vZXhjZXB0 IHsKLQlqZV9mcmVlKHB0cik7Ci19Ci0KLXZvaWQKLW9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHB0 ciwgc3RkOjphbGlnbl92YWxfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSBub2V4Y2VwdCB7Ci0J amVfZnJlZShwdHIpOwotfQotCi12b2lkCi1vcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzdGQ6 OnNpemVfdCBzaXplLCBzdGQ6OmFsaWduX3ZhbF90IGFsaWdubWVudCkgbm9leGNlcHQgewotCWFs aWduZWRTaXplZERlbGV0ZUltcGwocHRyLCBzaXplLCBhbGlnbm1lbnQpOwotfQotCi12b2lkCi1v cGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6YWxpZ25f dmFsX3QgYWxpZ25tZW50KSBub2V4Y2VwdCB7Ci0JYWxpZ25lZFNpemVkRGVsZXRlSW1wbChwdHIs IHNpemUsIGFsaWdubWVudCk7Ci19Ci0KLSNlbmRpZiAgLy8gX19jcHBfYWxpZ25lZF9uZXcKCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbGFy Z2UuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9sYXJnZS5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmM0YmY1Li4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9sYXJnZS5jCisrKyAvZGV2 L251bGwKQEAgLTEsMzIyICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2lu dGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lbWFwLmgiCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvZXh0ZW50X21tYXAuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9t dXRleC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfcmVjZW50LmgiCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdXRpbC5oIgotCi0vKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwotCi12b2lkICoKLWxhcmdlX21hbGxvYyh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBz aXplX3QgdXNpemUsIGJvb2wgemVybykgewotCWFzc2VydCh1c2l6ZSA9PSBzel9zMnUodXNpemUp KTsKLQotCXJldHVybiBsYXJnZV9wYWxsb2ModHNkbiwgYXJlbmEsIHVzaXplLCBDQUNIRUxJTkUs IHplcm8pOwotfQotCi12b2lkICoKLWxhcmdlX3BhbGxvYyh0c2RuX3QgKnRzZG4sIGFyZW5hX3Qg KmFyZW5hLCBzaXplX3QgdXNpemUsIHNpemVfdCBhbGlnbm1lbnQsCi0gICAgYm9vbCB6ZXJvKSB7 Ci0Jc2l6ZV90IGF1c2l6ZTsKLQllZGF0YV90ICplZGF0YTsKLQlVTlVTRUQgYm9vbCBpZHVtcCBK RU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoZmFsc2UpOwotCi0JYXNzZXJ0KCF0c2RuX251bGwodHNk bikgfHwgYXJlbmEgIT0gTlVMTCk7Ci0KLQlhdXNpemUgPSBzel9zYTJ1KHVzaXplLCBhbGlnbm1l bnQpOwotCWlmICh1bmxpa2VseShhdXNpemUgPT0gMCB8fCBhdXNpemUgPiBTQ19MQVJHRV9NQVhD TEFTUykpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGxpa2VseSghdHNkbl9udWxsKHRz ZG4pKSkgewotCQlhcmVuYSA9IGFyZW5hX2Nob29zZV9tYXliZV9odWdlKHRzZG5fdHNkKHRzZG4p LCBhcmVuYSwgdXNpemUpOwotCX0KLQlpZiAodW5saWtlbHkoYXJlbmEgPT0gTlVMTCkgfHwgKGVk YXRhID0gYXJlbmFfZXh0ZW50X2FsbG9jX2xhcmdlKHRzZG4sCi0JICAgIGFyZW5hLCB1c2l6ZSwg YWxpZ25tZW50LCB6ZXJvKSkgPT0gTlVMTCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBT ZWUgY29tbWVudHMgaW4gYXJlbmFfYmluX3NsYWJzX2Z1bGxfaW5zZXJ0KCkuICovCi0JaWYgKCFh cmVuYV9pc19hdXRvKGFyZW5hKSkgewotCQkvKiBJbnNlcnQgZWRhdGEgaW50byBsYXJnZS4gKi8K LQkJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmFyZW5hLT5sYXJnZV9tdHgpOwotCQllZGF0YV9s aXN0X2FjdGl2ZV9hcHBlbmQoJmFyZW5hLT5sYXJnZSwgZWRhdGEpOwotCQltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZG4sICZhcmVuYS0+bGFyZ2VfbXR4KTsKLQl9Ci0KLQlhcmVuYV9kZWNheV90aWNr KHRzZG4sIGFyZW5hKTsKLQlyZXR1cm4gZWRhdGFfYWRkcl9nZXQoZWRhdGEpOwotfQotCi1zdGF0 aWMgYm9vbAotbGFyZ2VfcmFsbG9jX25vX21vdmVfc2hyaW5rKHRzZG5fdCAqdHNkbiwgZWRhdGFf dCAqZWRhdGEsIHNpemVfdCB1c2l6ZSkgewotCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0X2Zy b21fZWRhdGEoZWRhdGEpOwotCWVob29rc190ICplaG9va3MgPSBhcmVuYV9nZXRfZWhvb2tzKGFy ZW5hKTsKLQlzaXplX3Qgb2xkX3NpemUgPSBlZGF0YV9zaXplX2dldChlZGF0YSk7Ci0Jc2l6ZV90 IG9sZF91c2l6ZSA9IGVkYXRhX3VzaXplX2dldChlZGF0YSk7Ci0KLQlhc3NlcnQob2xkX3VzaXpl ID4gdXNpemUpOwotCi0JaWYgKGVob29rc19zcGxpdF93aWxsX2ZhaWwoZWhvb2tzKSkgewotCQly ZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlib29sIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7 Ci0JYm9vbCBlcnIgPSBwYV9zaHJpbmsodHNkbiwgJmFyZW5hLT5wYV9zaGFyZCwgZWRhdGEsIG9s ZF9zaXplLAotCSAgICB1c2l6ZSArIHN6X2xhcmdlX3BhZCwgc3pfc2l6ZTJpbmRleCh1c2l6ZSks Ci0JICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JaWYgKGVycikgewotCQlyZXR1cm4g dHJ1ZTsKLQl9Ci0JaWYgKGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JCWFyZW5hX2hhbmRs ZV9kZWZlcnJlZF93b3JrKHRzZG4sIGFyZW5hKTsKLQl9Ci0JYXJlbmFfZXh0ZW50X3JhbGxvY19s YXJnZV9zaHJpbmsodHNkbiwgYXJlbmEsIGVkYXRhLCBvbGRfdXNpemUpOwotCi0JcmV0dXJuIGZh bHNlOwotfQotCi1zdGF0aWMgYm9vbAotbGFyZ2VfcmFsbG9jX25vX21vdmVfZXhwYW5kKHRzZG5f dCAqdHNkbiwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCB1c2l6ZSwKLSAgICBib29sIHplcm8pIHsK LQlhcmVuYV90ICphcmVuYSA9IGFyZW5hX2dldF9mcm9tX2VkYXRhKGVkYXRhKTsKLQotCXNpemVf dCBvbGRfc2l6ZSA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKTsKLQlzaXplX3Qgb2xkX3VzaXplID0g ZWRhdGFfdXNpemVfZ2V0KGVkYXRhKTsKLQlzaXplX3QgbmV3X3NpemUgPSB1c2l6ZSArIHN6X2xh cmdlX3BhZDsKLQotCXN6aW5kX3Qgc3ppbmQgPSBzel9zaXplMmluZGV4KHVzaXplKTsKLQotCWJv b2wgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKLQlib29sIGVyciA9IHBhX2V4cGFu ZCh0c2RuLCAmYXJlbmEtPnBhX3NoYXJkLCBlZGF0YSwgb2xkX3NpemUsIG5ld19zaXplLAotCSAg ICBzemluZCwgemVybywgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQotCWlmIChkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCkgewotCQlhcmVuYV9oYW5kbGVfZGVmZXJyZWRfd29yayh0c2RuLCBh cmVuYSk7Ci0JfQotCi0JaWYgKGVycikgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoemVy bykgewotCQlpZiAob3B0X2NhY2hlX29ibGl2aW91cykgewotCQkJYXNzZXJ0KHN6X2xhcmdlX3Bh ZCA9PSBQQUdFKTsKLQkJCS8qCi0JCQkgKiBaZXJvIHRoZSB0cmFpbGluZyBieXRlcyBvZiB0aGUg b3JpZ2luYWwgYWxsb2NhdGlvbidzCi0JCQkgKiBsYXN0IHBhZ2UsIHNpbmNlIHRoZXkgYXJlIGlu IGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUuCi0JCQkgKiBUaGVyZSB3aWxsIGFsd2F5cyBiZSB0cmFp bGluZyBieXRlcywgYmVjYXVzZSBwdHIncwotCQkJICogb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmlu ZyBvZiB0aGUgZXh0ZW50IGlzIGEgbXVsdGlwbGUKLQkJCSAqIG9mIENBQ0hFTElORSBpbiBbMCAu LiBQQUdFKS4KLQkJCSAqLwotCQkJdm9pZCAqemJhc2UgPSAodm9pZCAqKQotCQkJICAgICgodWlu dHB0cl90KWVkYXRhX2FkZHJfZ2V0KGVkYXRhKSArIG9sZF91c2l6ZSk7Ci0JCQl2b2lkICp6cGFz dCA9IFBBR0VfQUREUjJCQVNFKCh2b2lkICopKCh1aW50cHRyX3QpemJhc2UgKwotCQkJICAgIFBB R0UpKTsKLQkJCXNpemVfdCBuemVybyA9ICh1aW50cHRyX3QpenBhc3QgLSAodWludHB0cl90KXpi YXNlOwotCQkJYXNzZXJ0KG56ZXJvID4gMCk7Ci0JCQltZW1zZXQoemJhc2UsIDAsIG56ZXJvKTsK LQkJfQotCX0KLQlhcmVuYV9leHRlbnRfcmFsbG9jX2xhcmdlX2V4cGFuZCh0c2RuLCBhcmVuYSwg ZWRhdGEsIG9sZF91c2l6ZSk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wKLWxhcmdlX3Jh bGxvY19ub19tb3ZlKHRzZG5fdCAqdHNkbiwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCB1c2l6ZV9t aW4sCi0gICAgc2l6ZV90IHVzaXplX21heCwgYm9vbCB6ZXJvKSB7Ci0Jc2l6ZV90IG9sZHVzaXpl ID0gZWRhdGFfdXNpemVfZ2V0KGVkYXRhKTsKLQotCS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhh dmUgYmVlbiBjYXVnaHQgYnkgY2FsbGVycy4gKi8KLQlhc3NlcnQodXNpemVfbWluID4gMCAmJiB1 c2l6ZV9tYXggPD0gU0NfTEFSR0VfTUFYQ0xBU1MpOwotCS8qIEJvdGggYWxsb2NhdGlvbiBzaXpl cyBtdXN0IGJlIGxhcmdlIHRvIGF2b2lkIGEgbW92ZS4gKi8KLQlhc3NlcnQob2xkdXNpemUgPj0g U0NfTEFSR0VfTUlOQ0xBU1MKLQkgICAgJiYgdXNpemVfbWF4ID49IFNDX0xBUkdFX01JTkNMQVNT KTsKLQotCWlmICh1c2l6ZV9tYXggPiBvbGR1c2l6ZSkgewotCQkvKiBBdHRlbXB0IHRvIGV4cGFu ZCB0aGUgYWxsb2NhdGlvbiBpbi1wbGFjZS4gKi8KLQkJaWYgKCFsYXJnZV9yYWxsb2Nfbm9fbW92 ZV9leHBhbmQodHNkbiwgZWRhdGEsIHVzaXplX21heCwKLQkJICAgIHplcm8pKSB7Ci0JCQlhcmVu YV9kZWNheV90aWNrKHRzZG4sIGFyZW5hX2dldF9mcm9tX2VkYXRhKGVkYXRhKSk7Ci0JCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KLQkJLyogVHJ5IGFnYWluLCB0aGlzIHRpbWUgd2l0aCB1c2l6ZV9taW4u ICovCi0JCWlmICh1c2l6ZV9taW4gPCB1c2l6ZV9tYXggJiYgdXNpemVfbWluID4gb2xkdXNpemUg JiYKLQkJICAgIGxhcmdlX3JhbGxvY19ub19tb3ZlX2V4cGFuZCh0c2RuLCBlZGF0YSwgdXNpemVf bWluLCB6ZXJvKSkgewotCQkJYXJlbmFfZGVjYXlfdGljayh0c2RuLCBhcmVuYV9nZXRfZnJvbV9l ZGF0YShlZGF0YSkpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBBdm9p ZCBtb3ZpbmcgdGhlIGFsbG9jYXRpb24gaWYgdGhlIGV4aXN0aW5nIGV4dGVudCBzaXplIGFjY29t bW9kYXRlcwotCSAqIHRoZSBuZXcgc2l6ZS4KLQkgKi8KLQlpZiAob2xkdXNpemUgPj0gdXNpemVf bWluICYmIG9sZHVzaXplIDw9IHVzaXplX21heCkgewotCQlhcmVuYV9kZWNheV90aWNrKHRzZG4s IGFyZW5hX2dldF9mcm9tX2VkYXRhKGVkYXRhKSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkv KiBBdHRlbXB0IHRvIHNocmluayB0aGUgYWxsb2NhdGlvbiBpbi1wbGFjZS4gKi8KLQlpZiAob2xk dXNpemUgPiB1c2l6ZV9tYXgpIHsKLQkJaWYgKCFsYXJnZV9yYWxsb2Nfbm9fbW92ZV9zaHJpbmso dHNkbiwgZWRhdGEsIHVzaXplX21heCkpIHsKLQkJCWFyZW5hX2RlY2F5X3RpY2sodHNkbiwgYXJl bmFfZ2V0X2Zyb21fZWRhdGEoZWRhdGEpKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQly ZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgKgotbGFyZ2VfcmFsbG9jX21vdmVfaGVscGVy KHRzZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIHNpemVfdCB1c2l6ZSwKLSAgICBzaXplX3Qg YWxpZ25tZW50LCBib29sIHplcm8pIHsKLQlpZiAoYWxpZ25tZW50IDw9IENBQ0hFTElORSkgewot CQlyZXR1cm4gbGFyZ2VfbWFsbG9jKHRzZG4sIGFyZW5hLCB1c2l6ZSwgemVybyk7Ci0JfQotCXJl dHVybiBsYXJnZV9wYWxsb2ModHNkbiwgYXJlbmEsIHVzaXplLCBhbGlnbm1lbnQsIHplcm8pOwot fQotCi12b2lkICoKLWxhcmdlX3JhbGxvYyh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCB2 b2lkICpwdHIsIHNpemVfdCB1c2l6ZSwKLSAgICBzaXplX3QgYWxpZ25tZW50LCBib29sIHplcm8s IHRjYWNoZV90ICp0Y2FjaGUsCi0gICAgaG9va19yYWxsb2NfYXJnc190ICpob29rX2FyZ3MpIHsK LQllZGF0YV90ICplZGF0YSA9IGVtYXBfZWRhdGFfbG9va3VwKHRzZG4sICZhcmVuYV9lbWFwX2ds b2JhbCwgcHRyKTsKLQotCXNpemVfdCBvbGR1c2l6ZSA9IGVkYXRhX3VzaXplX2dldChlZGF0YSk7 Ci0JLyogVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBiZWVuIGNhdWdodCBieSBjYWxsZXJzLiAq LwotCWFzc2VydCh1c2l6ZSA+IDAgJiYgdXNpemUgPD0gU0NfTEFSR0VfTUFYQ0xBU1MpOwotCS8q IEJvdGggYWxsb2NhdGlvbiBzaXplcyBtdXN0IGJlIGxhcmdlIHRvIGF2b2lkIGEgbW92ZS4gKi8K LQlhc3NlcnQob2xkdXNpemUgPj0gU0NfTEFSR0VfTUlOQ0xBU1MKLQkgICAgJiYgdXNpemUgPj0g U0NfTEFSR0VfTUlOQ0xBU1MpOwotCi0JLyogVHJ5IHRvIGF2b2lkIG1vdmluZyB0aGUgYWxsb2Nh dGlvbi4gKi8KLQlpZiAoIWxhcmdlX3JhbGxvY19ub19tb3ZlKHRzZG4sIGVkYXRhLCB1c2l6ZSwg dXNpemUsIHplcm8pKSB7Ci0JCWhvb2tfaW52b2tlX2V4cGFuZChob29rX2FyZ3MtPmlzX3JlYWxs b2MKLQkJICAgID8gaG9va19leHBhbmRfcmVhbGxvYyA6IGhvb2tfZXhwYW5kX3JhbGxvY3gsIHB0 ciwgb2xkdXNpemUsCi0JCSAgICB1c2l6ZSwgKHVpbnRwdHJfdClwdHIsIGhvb2tfYXJncy0+YXJn cyk7Ci0JCXJldHVybiBlZGF0YV9hZGRyX2dldChlZGF0YSk7Ci0JfQotCi0JLyoKLQkgKiB1c2l6 ZSBhbmQgb2xkIHNpemUgYXJlIGRpZmZlcmVudCBlbm91Z2ggdGhhdCB3ZSBuZWVkIHRvIHVzZSBh Ci0JICogZGlmZmVyZW50IHNpemUgY2xhc3MuICBJbiB0aGF0IGNhc2UsIGZhbGwgYmFjayB0byBh bGxvY2F0aW5nIG5ldwotCSAqIHNwYWNlIGFuZCBjb3B5aW5nLgotCSAqLwotCXZvaWQgKnJldCA9 IGxhcmdlX3JhbGxvY19tb3ZlX2hlbHBlcih0c2RuLCBhcmVuYSwgdXNpemUsIGFsaWdubWVudCwK LQkgICAgemVybyk7Ci0JaWYgKHJldCA9PSBOVUxMKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQot CWhvb2tfaW52b2tlX2FsbG9jKGhvb2tfYXJncy0+aXNfcmVhbGxvYwotCSAgICA/IGhvb2tfYWxs b2NfcmVhbGxvYyA6IGhvb2tfYWxsb2NfcmFsbG9jeCwgcmV0LCAodWludHB0cl90KXJldCwKLQkg ICAgaG9va19hcmdzLT5hcmdzKTsKLQlob29rX2ludm9rZV9kYWxsb2MoaG9va19hcmdzLT5pc19y ZWFsbG9jCi0JICAgID8gaG9va19kYWxsb2NfcmVhbGxvYyA6IGhvb2tfZGFsbG9jX3JhbGxvY3gs IHB0ciwgaG9va19hcmdzLT5hcmdzKTsKLQotCXNpemVfdCBjb3B5c2l6ZSA9ICh1c2l6ZSA8IG9s ZHVzaXplKSA/IHVzaXplIDogb2xkdXNpemU7Ci0JbWVtY3B5KHJldCwgZWRhdGFfYWRkcl9nZXQo ZWRhdGEpLCBjb3B5c2l6ZSk7Ci0JaXNkYWxsb2N0KHRzZG4sIGVkYXRhX2FkZHJfZ2V0KGVkYXRh KSwgb2xkdXNpemUsIHRjYWNoZSwgTlVMTCwgdHJ1ZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoK LSAqIGxvY2tlZCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYXJlbmEncyBsYXJnZV9tdHggaXMgY3Vy cmVudGx5IGhlbGQuCi0gKi8KLXN0YXRpYyB2b2lkCi1sYXJnZV9kYWxsb2NfcHJlcF9pbXBsKHRz ZG5fdCAqdHNkbiwgYXJlbmFfdCAqYXJlbmEsIGVkYXRhX3QgKmVkYXRhLAotICAgIGJvb2wgbG9j a2VkKSB7Ci0JaWYgKCFsb2NrZWQpIHsKLQkJLyogU2VlIGNvbW1lbnRzIGluIGFyZW5hX2Jpbl9z bGFic19mdWxsX2luc2VydCgpLiAqLwotCQlpZiAoIWFyZW5hX2lzX2F1dG8oYXJlbmEpKSB7Ci0J CQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYXJlbmEtPmxhcmdlX210eCk7Ci0JCQllZGF0YV9s aXN0X2FjdGl2ZV9yZW1vdmUoJmFyZW5hLT5sYXJnZSwgZWRhdGEpOwotCQkJbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCAmYXJlbmEtPmxhcmdlX210eCk7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBP bmx5IGhvbGQgdGhlIGxhcmdlX210eCBpZiBuZWNlc3NhcnkuICovCi0JCWlmICghYXJlbmFfaXNf YXV0byhhcmVuYSkpIHsKLQkJCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJmFyZW5h LT5sYXJnZV9tdHgpOwotCQkJZWRhdGFfbGlzdF9hY3RpdmVfcmVtb3ZlKCZhcmVuYS0+bGFyZ2Us IGVkYXRhKTsKLQkJfQotCX0KLQlhcmVuYV9leHRlbnRfZGFsbG9jX2xhcmdlX3ByZXAodHNkbiwg YXJlbmEsIGVkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQKLWxhcmdlX2RhbGxvY19maW5pc2hfaW1w bCh0c2RuX3QgKnRzZG4sIGFyZW5hX3QgKmFyZW5hLCBlZGF0YV90ICplZGF0YSkgewotCWJvb2wg ZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKLQlwYV9kYWxsb2ModHNkbiwgJmFyZW5h LT5wYV9zaGFyZCwgZWRhdGEsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JaWYgKGRlZmVy cmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JCWFyZW5hX2hhbmRsZV9kZWZlcnJlZF93b3JrKHRzZG4s IGFyZW5hKTsKLQl9Ci19Ci0KLXZvaWQKLWxhcmdlX2RhbGxvY19wcmVwX2xvY2tlZCh0c2RuX3Qg KnRzZG4sIGVkYXRhX3QgKmVkYXRhKSB7Ci0JbGFyZ2VfZGFsbG9jX3ByZXBfaW1wbCh0c2RuLCBh cmVuYV9nZXRfZnJvbV9lZGF0YShlZGF0YSksIGVkYXRhLCB0cnVlKTsKLX0KLQotdm9pZAotbGFy Z2VfZGFsbG9jX2ZpbmlzaCh0c2RuX3QgKnRzZG4sIGVkYXRhX3QgKmVkYXRhKSB7Ci0JbGFyZ2Vf ZGFsbG9jX2ZpbmlzaF9pbXBsKHRzZG4sIGFyZW5hX2dldF9mcm9tX2VkYXRhKGVkYXRhKSwgZWRh dGEpOwotfQotCi12b2lkCi1sYXJnZV9kYWxsb2ModHNkbl90ICp0c2RuLCBlZGF0YV90ICplZGF0 YSkgewotCWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0X2Zyb21fZWRhdGEoZWRhdGEpOwotCWxh cmdlX2RhbGxvY19wcmVwX2ltcGwodHNkbiwgYXJlbmEsIGVkYXRhLCBmYWxzZSk7Ci0JbGFyZ2Vf ZGFsbG9jX2ZpbmlzaF9pbXBsKHRzZG4sIGFyZW5hLCBlZGF0YSk7Ci0JYXJlbmFfZGVjYXlfdGlj ayh0c2RuLCBhcmVuYSk7Ci19Ci0KLXNpemVfdAotbGFyZ2Vfc2FsbG9jKHRzZG5fdCAqdHNkbiwg Y29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlyZXR1cm4gZWRhdGFfdXNpemVfZ2V0KGVkYXRhKTsK LX0KLQotdm9pZAotbGFyZ2VfcHJvZl9pbmZvX2dldCh0c2RfdCAqdHNkLCBlZGF0YV90ICplZGF0 YSwgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbywKLSAgICBib29sIHJlc2V0X3JlY2VudCkgewotCWFz c2VydChwcm9mX2luZm8gIT0gTlVMTCk7Ci0KLQlwcm9mX3RjdHhfdCAqYWxsb2NfdGN0eCA9IGVk YXRhX3Byb2ZfdGN0eF9nZXQoZWRhdGEpOwotCXByb2ZfaW5mby0+YWxsb2NfdGN0eCA9IGFsbG9j X3RjdHg7Ci0KLQlpZiAoKHVpbnRwdHJfdClhbGxvY190Y3R4ID4gKHVpbnRwdHJfdCkxVSkgewot CQluc3RpbWVfY29weSgmcHJvZl9pbmZvLT5hbGxvY190aW1lLAotCQkgICAgZWRhdGFfcHJvZl9h bGxvY190aW1lX2dldChlZGF0YSkpOwotCQlwcm9mX2luZm8tPmFsbG9jX3NpemUgPSBlZGF0YV9w cm9mX2FsbG9jX3NpemVfZ2V0KGVkYXRhKTsKLQkJaWYgKHJlc2V0X3JlY2VudCkgewotCQkJLyoK LQkJCSAqIFJlc2V0IHRoZSBwb2ludGVyIG9uIHRoZSByZWNlbnQgYWxsb2NhdGlvbiByZWNvcmQs Ci0JCQkgKiBzbyB0aGF0IHRoaXMgYWxsb2NhdGlvbiBpcyByZWNvcmRlZCBhcyByZWxlYXNlZC4K LQkJCSAqLwotCQkJcHJvZl9yZWNlbnRfYWxsb2NfcmVzZXQodHNkLCBlZGF0YSk7Ci0JCX0KLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi1sYXJnZV9wcm9mX3RjdHhfc2V0KGVkYXRhX3QgKmVkYXRhLCBw cm9mX3RjdHhfdCAqdGN0eCkgewotCWVkYXRhX3Byb2ZfdGN0eF9zZXQoZWRhdGEsIHRjdHgpOwot fQotCi12b2lkCi1sYXJnZV9wcm9mX3RjdHhfcmVzZXQoZWRhdGFfdCAqZWRhdGEpIHsKLQlsYXJn ZV9wcm9mX3RjdHhfc2V0KGVkYXRhLCAocHJvZl90Y3R4X3QgKikodWludHB0cl90KTFVKTsKLX0K LQotdm9pZAotbGFyZ2VfcHJvZl9pbmZvX3NldChlZGF0YV90ICplZGF0YSwgcHJvZl90Y3R4X3Qg KnRjdHgsIHNpemVfdCBzaXplKSB7Ci0JbnN0aW1lX3QgdDsKLQluc3RpbWVfcHJvZl9pbml0X3Vw ZGF0ZSgmdCk7Ci0JZWRhdGFfcHJvZl9hbGxvY190aW1lX3NldChlZGF0YSwgJnQpOwotCWVkYXRh X3Byb2ZfYWxsb2Nfc2l6ZV9zZXQoZWRhdGEsIHNpemUpOwotCWVkYXRhX3Byb2ZfcmVjZW50X2Fs bG9jX2luaXQoZWRhdGEpOwotCWxhcmdlX3Byb2ZfdGN0eF9zZXQoZWRhdGEsIHRjdHgpOwotfQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9s b2cuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9sb2cuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4OTAyZi4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbG9nLmMKKysrIC9kZXYvbnVs bApAQCAtMSw3OCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2Nf cHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5h bF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbG9nLmgiCi0KLWNo YXIgbG9nX3Zhcl9uYW1lc1tKRU1BTExPQ19MT0dfVkFSX0JVRlNJWkVdOwotYXRvbWljX2JfdCBs b2dfaW5pdF9kb25lID0gQVRPTUlDX0lOSVQoZmFsc2UpOwotCi0vKgotICogUmV0dXJucyB0cnVl IGlmIHdlIHdlcmUgYWJsZSB0byBwaWNrIG91dCBhIHNlZ21lbnQuICBGaWxscyBpbiByX3NlZ21l bnRfZW5kCi0gKiB3aXRoIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRo ZSBlbmQgb2YgdGhlIHN0cmluZy4KLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgotbG9nX3Zhcl9l eHRyYWN0X3NlZ21lbnQoY29uc3QgY2hhciogc2VnbWVudF9iZWdpbikgewotCWNvbnN0IGNoYXIg KmVuZDsKLQlmb3IgKGVuZCA9IHNlZ21lbnRfYmVnaW47ICplbmQgIT0gJ1wwJyAmJiAqZW5kICE9 ICd8JzsgZW5kKyspIHsKLQl9Ci0JcmV0dXJuIGVuZDsKLX0KLQotc3RhdGljIGJvb2wKLWxvZ192 YXJfbWF0Y2hlc19zZWdtZW50KGNvbnN0IGNoYXIgKnNlZ21lbnRfYmVnaW4sIGNvbnN0IGNoYXIg KnNlZ21lbnRfZW5kLAotICAgIGNvbnN0IGNoYXIgKmxvZ192YXJfYmVnaW4sIGNvbnN0IGNoYXIg KmxvZ192YXJfZW5kKSB7Ci0JYXNzZXJ0KHNlZ21lbnRfYmVnaW4gPD0gc2VnbWVudF9lbmQpOwot CWFzc2VydChsb2dfdmFyX2JlZ2luIDwgbG9nX3Zhcl9lbmQpOwotCi0JcHRyZGlmZl90IHNlZ21l bnRfbGVuID0gc2VnbWVudF9lbmQgLSBzZWdtZW50X2JlZ2luOwotCXB0cmRpZmZfdCBsb2dfdmFy X2xlbiA9IGxvZ192YXJfZW5kIC0gbG9nX3Zhcl9iZWdpbjsKLQkvKiBUaGUgc3BlY2lhbCAnLicg c2VnbWVudCBtYXRjaGVzIGV2ZXJ5dGhpbmcuICovCi0JaWYgKHNlZ21lbnRfbGVuID09IDEgJiYg KnNlZ21lbnRfYmVnaW4gPT0gJy4nKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLSAgICAgICAgaWYg KHNlZ21lbnRfbGVuID09IGxvZ192YXJfbGVuKSB7Ci0JCXJldHVybiBzdHJuY21wKHNlZ21lbnRf YmVnaW4sIGxvZ192YXJfYmVnaW4sIHNlZ21lbnRfbGVuKSA9PSAwOwotCX0gZWxzZSBpZiAoc2Vn bWVudF9sZW4gPCBsb2dfdmFyX2xlbikgewotCQlyZXR1cm4gc3RybmNtcChzZWdtZW50X2JlZ2lu LCBsb2dfdmFyX2JlZ2luLCBzZWdtZW50X2xlbikgPT0gMAotCQkgICAgJiYgbG9nX3Zhcl9iZWdp bltzZWdtZW50X2xlbl0gPT0gJy4nOwotICAgICAgICB9IGVsc2UgewotCQlyZXR1cm4gZmFsc2U7 Ci0JfQotfQotCi11bnNpZ25lZAotbG9nX3Zhcl91cGRhdGVfc3RhdGUobG9nX3Zhcl90ICpsb2df dmFyKSB7Ci0JY29uc3QgY2hhciAqbG9nX3Zhcl9iZWdpbiA9IGxvZ192YXItPm5hbWU7Ci0JY29u c3QgY2hhciAqbG9nX3Zhcl9lbmQgPSBsb2dfdmFyLT5uYW1lICsgc3RybGVuKGxvZ192YXItPm5h bWUpOwotCi0JLyogUG9pbnRlciB0byBvbmUgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1 cnJlbnQgc2VnbWVudC4gKi8KLQljb25zdCBjaGFyICpzZWdtZW50X2JlZ2luID0gbG9nX3Zhcl9u YW1lczsKLQotCS8qCi0JICogSWYgbG9nX2luaXQgZG9uZSBpcyBmYWxzZSwgd2UgaGF2ZW4ndCBw YXJzZWQgdGhlIG1hbGxvYyBjb25mIHlldC4gIFRvCi0JICogYXZvaWQgbG9nLXNwZXcsIHdlIGRl ZmF1bHQgdG8gbm90IGRpc3BsYXlpbmcgYW55dGhpbmcuCi0JICovCi0JaWYgKCFhdG9taWNfbG9h ZF9iKCZsb2dfaW5pdF9kb25lLCBBVE9NSUNfQUNRVUlSRSkpIHsKLQkJcmV0dXJuIExPR19JTklU SUFMSVpFRF9OT1RfRU5BQkxFRDsKLQl9Ci0KLQl3aGlsZSAodHJ1ZSkgewotCQljb25zdCBjaGFy ICpzZWdtZW50X2VuZCA9IGxvZ192YXJfZXh0cmFjdF9zZWdtZW50KAotCQkgICAgc2VnbWVudF9i ZWdpbik7Ci0JCWFzc2VydChzZWdtZW50X2VuZCA8IGxvZ192YXJfbmFtZXMgKyBKRU1BTExPQ19M T0dfVkFSX0JVRlNJWkUpOwotCQlpZiAobG9nX3Zhcl9tYXRjaGVzX3NlZ21lbnQoc2VnbWVudF9i ZWdpbiwgc2VnbWVudF9lbmQsCi0JCSAgICBsb2dfdmFyX2JlZ2luLCBsb2dfdmFyX2VuZCkpIHsK LQkJCWF0b21pY19zdG9yZV91KCZsb2dfdmFyLT5zdGF0ZSwgTE9HX0VOQUJMRUQsCi0JCQkgICAg QVRPTUlDX1JFTEFYRUQpOwotCQkJcmV0dXJuIExPR19FTkFCTEVEOwotCQl9Ci0JCWlmICgqc2Vn bWVudF9lbmQgPT0gJ1wwJykgewotCQkJLyogSGl0IHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQgc3Ry aW5nIHdpdGggbm8gbWF0Y2guICovCi0JCQlhdG9taWNfc3RvcmVfdSgmbG9nX3Zhci0+c3RhdGUs Ci0JCQkgICAgTE9HX0lOSVRJQUxJWkVEX05PVF9FTkFCTEVELCBBVE9NSUNfUkVMQVhFRCk7Ci0J CQlyZXR1cm4gTE9HX0lOSVRJQUxJWkVEX05PVF9FTkFCTEVEOwotCQl9Ci0JCS8qIE90aGVyd2lz ZSwgc2tpcCB0aGUgZGVsaW1pdGVyIGFuZCBjb250aW51ZS4gKi8KLQkJc2VnbWVudF9iZWdpbiA9 IHNlZ21lbnRfZW5kICsgMTsKLQl9Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL21hbGxvY19pby5jIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL21hbGxvY19pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBiNzY4ODVjLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3NyYy9tYWxsb2NfaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDY5NyAr MCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5o IgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbWFsbG9jX2lvLmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvdXRpbC5oIgotCi0jaWZkZWYgYXNzZXJ0Ci0jICB1bmRlZiBhc3Nl cnQKLSNlbmRpZgotI2lmZGVmIG5vdF9yZWFjaGVkCi0jICB1bmRlZiBub3RfcmVhY2hlZAotI2Vu ZGlmCi0jaWZkZWYgbm90X2ltcGxlbWVudGVkCi0jICB1bmRlZiBub3RfaW1wbGVtZW50ZWQKLSNl bmRpZgotI2lmZGVmIGFzc2VydF9ub3RfaW1wbGVtZW50ZWQKLSMgIHVuZGVmIGFzc2VydF9ub3Rf aW1wbGVtZW50ZWQKLSNlbmRpZgotCi0vKgotICogRGVmaW5lIHNpbXBsZSB2ZXJzaW9ucyBvZiBh c3NlcnRpb24gbWFjcm9zIHRoYXQgd29uJ3QgcmVjdXJzZSBpbiBjYXNlCi0gKiBvZiBhc3NlcnRp b24gZmFpbHVyZXMgaW4gbWFsbG9jXypwcmludGYoKS4KLSAqLwotI2RlZmluZSBhc3NlcnQoZSkg ZG8gewkJCQkJCQlcCi0JaWYgKGNvbmZpZ19kZWJ1ZyAmJiAhKGUpKSB7CQkJCQlcCi0JCW1hbGxv Y193cml0ZSgiPGplbWFsbG9jPjogRmFpbGVkIGFzc2VydGlvblxuIik7CQlcCi0JCWFib3J0KCk7 CQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbm90X3JlYWNoZWQo KSBkbyB7CQkJCQkJXAotCWlmIChjb25maWdfZGVidWcpIHsJCQkJCQlcCi0JCW1hbGxvY193cml0 ZSgiPGplbWFsbG9jPjogVW5yZWFjaGFibGUgY29kZSByZWFjaGVkXG4iKTsJXAotCQlhYm9ydCgp OwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JdW5yZWFjaGFibGUoKTsJCQkJCQkJXAotfSB3aGlsZSAo MCkKLQotI2RlZmluZSBub3RfaW1wbGVtZW50ZWQoKSBkbyB7CQkJCQkJXAotCWlmIChjb25maWdf ZGVidWcpIHsJCQkJCQlcCi0JCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogTm90IGltcGxlbWVu dGVkXG4iKTsJCVwKLQkJYWJvcnQoKTsJCQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkK LQotI2RlZmluZSBhc3NlcnRfbm90X2ltcGxlbWVudGVkKGUpIGRvIHsJCQkJCVwKLQlpZiAodW5s aWtlbHkoY29uZmlnX2RlYnVnICYmICEoZSkpKSB7CQkJCVwKLQkJbm90X2ltcGxlbWVudGVkKCk7 CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KLS8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIG5vbi1pbmxpbmUgc3RhdGljIGZ1bmN0aW9u cy4gKi8KLQotI2RlZmluZSBVMlNfQlVGU0laRSAoKDFVIDw8IChMR19TSVpFT0ZfSU5UTUFYX1Qg KyAzKSkgKyAxKQotc3RhdGljIGNoYXIgKnUycyh1aW50bWF4X3QgeCwgdW5zaWduZWQgYmFzZSwg Ym9vbCB1cHBlcmNhc2UsIGNoYXIgKnMsCi0gICAgc2l6ZV90ICpzbGVuX3ApOwotI2RlZmluZSBE MlNfQlVGU0laRSAoMSArIFUyU19CVUZTSVpFKQotc3RhdGljIGNoYXIgKmQycyhpbnRtYXhfdCB4 LCBjaGFyIHNpZ24sIGNoYXIgKnMsIHNpemVfdCAqc2xlbl9wKTsKLSNkZWZpbmUgTzJTX0JVRlNJ WkUgKDEgKyBVMlNfQlVGU0laRSkKLXN0YXRpYyBjaGFyICpvMnModWludG1heF90IHgsIGJvb2wg YWx0X2Zvcm0sIGNoYXIgKnMsIHNpemVfdCAqc2xlbl9wKTsKLSNkZWZpbmUgWDJTX0JVRlNJWkUg KDIgKyBVMlNfQlVGU0laRSkKLXN0YXRpYyBjaGFyICp4MnModWludG1heF90IHgsIGJvb2wgYWx0 X2Zvcm0sIGJvb2wgdXBwZXJjYXNlLCBjaGFyICpzLAotICAgIHNpemVfdCAqc2xlbl9wKTsKLQot LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogbWFsbG9jX21lc3NhZ2UoKSBzZXR1cC4gKi8K LXZvaWQKLXdydG1lc3NhZ2Uodm9pZCAqY2JvcGFxdWUsIGNvbnN0IGNoYXIgKnMpIHsKLQltYWxs b2Nfd3JpdGVfZmQoU1RERVJSX0ZJTEVOTywgcywgc3RybGVuKHMpKTsKLX0KLQotSkVNQUxMT0Nf RVhQT1JUIHZvaWQJKCpqZV9tYWxsb2NfbWVzc2FnZSkodm9pZCAqLCBjb25zdCBjaGFyICpzKTsK LQotLyoKLSAqIFdyYXBwZXIgYXJvdW5kIG1hbGxvY19tZXNzYWdlKCkgdGhhdCBhdm9pZHMgdGhl IG5lZWQgZm9yCi0gKiBqZV9tYWxsb2NfbWVzc2FnZSguLi4pIHRocm91Z2hvdXQgdGhlIGNvZGUu Ci0gKi8KLXZvaWQKLW1hbGxvY193cml0ZShjb25zdCBjaGFyICpzKSB7Ci0JaWYgKGplX21hbGxv Y19tZXNzYWdlICE9IE5VTEwpIHsKLQkJamVfbWFsbG9jX21lc3NhZ2UoTlVMTCwgcyk7Ci0JfSBl bHNlIHsKLQkJd3J0bWVzc2FnZShOVUxMLCBzKTsKLQl9Ci19Ci0KLS8qCi0gKiBnbGliYyBwcm92 aWRlcyBhIG5vbi1zdGFuZGFyZCBzdHJlcnJvcl9yKCkgd2hlbiBfR05VX1NPVVJDRSBpcyBkZWZp bmVkLCBzbwotICogcHJvdmlkZSBhIHdyYXBwZXIuCi0gKi8KLWludAotYnVmZXJyb3IoaW50IGVy ciwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKSB7Ci0jaWZkZWYgX1dJTjMyCi0JRm9ybWF0TWVz c2FnZUEoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sIE5VTEwsIGVyciwgMCwKLQkgICAgKExQ U1RSKWJ1ZiwgKERXT1JEKWJ1ZmxlbiwgTlVMTCk7Ci0JcmV0dXJuIDA7Ci0jZWxpZiBkZWZpbmVk KEpFTUFMTE9DX1NUUkVSUk9SX1JfUkVUVVJOU19DSEFSX1dJVEhfR05VX1NPVVJDRSkgJiYgZGVm aW5lZChfR05VX1NPVVJDRSkKLQljaGFyICpiID0gc3RyZXJyb3JfcihlcnIsIGJ1ZiwgYnVmbGVu KTsKLQlpZiAoYiAhPSBidWYpIHsKLQkJc3RybmNweShidWYsIGIsIGJ1Zmxlbik7Ci0JCWJ1Zlti dWZsZW4tMV0gPSAnXDAnOwotCX0KLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0dXJuIHN0cmVycm9y X3IoZXJyLCBidWYsIGJ1Zmxlbik7Ci0jZW5kaWYKLX0KLQotdWludG1heF90Ci1tYWxsb2Nfc3Ry dG91bWF4KGNvbnN0IGNoYXIgKnJlc3RyaWN0IG5wdHIsIGNoYXIgKipyZXN0cmljdCBlbmRwdHIs IGludCBiYXNlKSB7Ci0JdWludG1heF90IHJldCwgZGlnaXQ7Ci0JdW5zaWduZWQgYjsKLQlib29s IG5lZzsKLQljb25zdCBjaGFyICpwLCAqbnM7Ci0KLQlwID0gbnB0cjsKLQlpZiAoYmFzZSA8IDAg fHwgYmFzZSA9PSAxIHx8IGJhc2UgPiAzNikgewotCQlucyA9IHA7Ci0JCXNldF9lcnJubyhFSU5W QUwpOwotCQlyZXQgPSBVSU5UTUFYX01BWDsKLQkJZ290byBsYWJlbF9yZXR1cm47Ci0JfQotCWIg PSBiYXNlOwotCi0JLyogU3dhbGxvdyBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIGdldCBzaWduLCBp ZiBhbnkuICovCi0JbmVnID0gZmFsc2U7Ci0Jd2hpbGUgKHRydWUpIHsKLQkJc3dpdGNoICgqcCkg ewotCQljYXNlICdcdCc6IGNhc2UgJ1xuJzogY2FzZSAnXHYnOiBjYXNlICdcZic6IGNhc2UgJ1xy JzogY2FzZSAnICc6Ci0JCQlwKys7Ci0JCQlicmVhazsKLQkJY2FzZSAnLSc6Ci0JCQluZWcgPSB0 cnVlOwotCQkJSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWNhc2UgJysnOgotCQkJcCsrOwotCQkJ SkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIGxhYmVsX3ByZWZpeDsK LQkJfQotCX0KLQotCS8qIEdldCBwcmVmaXgsIGlmIGFueS4gKi8KLQlsYWJlbF9wcmVmaXg6Ci0J LyoKLQkgKiBOb3RlIHdoZXJlIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZS9zaWduIGNoYXJhY3Rl ciBpcyBzbyB0aGF0IGl0IGlzCi0JICogcG9zc2libGUgdG8gdGVsbCB3aGV0aGVyIGFueSBkaWdp dHMgYXJlIGNvbnN1bWVkIChlLmcuLCAiICAwIiB2cy4KLQkgKiAiICAteCIpLgotCSAqLwotCW5z ID0gcDsKLQlpZiAoKnAgPT0gJzAnKSB7Ci0JCXN3aXRjaCAocFsxXSkgewotCQljYXNlICcwJzog Y2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOgotCQljYXNl ICc2JzogY2FzZSAnNyc6Ci0JCQlpZiAoYiA9PSAwKSB7Ci0JCQkJYiA9IDg7Ci0JCQl9Ci0JCQlp ZiAoYiA9PSA4KSB7Ci0JCQkJcCsrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgJ1gnOiBjYXNl ICd4JzoKLQkJCXN3aXRjaCAocFsyXSkgewotCQkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcy JzogY2FzZSAnMyc6IGNhc2UgJzQnOgotCQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3Jzog Y2FzZSAnOCc6IGNhc2UgJzknOgotCQkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzogY2Fz ZSAnRCc6IGNhc2UgJ0UnOgotCQkJY2FzZSAnRic6Ci0JCQljYXNlICdhJzogY2FzZSAnYic6IGNh c2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6Ci0JCQljYXNlICdmJzoKLQkJCQlpZiAoYiA9PSAw KSB7Ci0JCQkJCWIgPSAxNjsKLQkJCQl9Ci0JCQkJaWYgKGIgPT0gMTYpIHsKLQkJCQkJcCArPSAy OwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQli cmVhazsKLQkJZGVmYXVsdDoKLQkJCXArKzsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIGxhYmVsX3Jl dHVybjsKLQkJfQotCX0KLQlpZiAoYiA9PSAwKSB7Ci0JCWIgPSAxMDsKLQl9Ci0KLQkvKiBDb252 ZXJ0LiAqLwotCXJldCA9IDA7Ci0Jd2hpbGUgKCgqcCA+PSAnMCcgJiYgKnAgPD0gJzknICYmIChk aWdpdCA9ICpwIC0gJzAnKSA8IGIpCi0JICAgIHx8ICgqcCA+PSAnQScgJiYgKnAgPD0gJ1onICYm IChkaWdpdCA9IDEwICsgKnAgLSAnQScpIDwgYikKLQkgICAgfHwgKCpwID49ICdhJyAmJiAqcCA8 PSAneicgJiYgKGRpZ2l0ID0gMTAgKyAqcCAtICdhJykgPCBiKSkgewotCQl1aW50bWF4X3QgcHJl dCA9IHJldDsKLQkJcmV0ICo9IGI7Ci0JCXJldCArPSBkaWdpdDsKLQkJaWYgKHJldCA8IHByZXQp IHsKLQkJCS8qIE92ZXJmbG93LiAqLwotCQkJc2V0X2Vycm5vKEVSQU5HRSk7Ci0JCQlyZXQgPSBV SU5UTUFYX01BWDsKLQkJCWdvdG8gbGFiZWxfcmV0dXJuOwotCQl9Ci0JCXArKzsKLQl9Ci0JaWYg KG5lZykgewotCQlyZXQgPSAodWludG1heF90KSgtKChpbnRtYXhfdClyZXQpKTsKLQl9Ci0KLQlp ZiAocCA9PSBucykgewotCQkvKiBObyBjb252ZXJzaW9uIHBlcmZvcm1lZC4gKi8KLQkJc2V0X2Vy cm5vKEVJTlZBTCk7Ci0JCXJldCA9IFVJTlRNQVhfTUFYOwotCQlnb3RvIGxhYmVsX3JldHVybjsK LQl9Ci0KLWxhYmVsX3JldHVybjoKLQlpZiAoZW5kcHRyICE9IE5VTEwpIHsKLQkJaWYgKHAgPT0g bnMpIHsKLQkJCS8qIE5vIGNoYXJhY3RlcnMgd2VyZSBjb252ZXJ0ZWQuICovCi0JCQkqZW5kcHRy ID0gKGNoYXIgKilucHRyOwotCQl9IGVsc2UgewotCQkJKmVuZHB0ciA9IChjaGFyICopcDsKLQkJ fQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY2hhciAqCi11MnModWludG1heF90IHgs IHVuc2lnbmVkIGJhc2UsIGJvb2wgdXBwZXJjYXNlLCBjaGFyICpzLCBzaXplX3QgKnNsZW5fcCkg ewotCXVuc2lnbmVkIGk7Ci0KLQlpID0gVTJTX0JVRlNJWkUgLSAxOwotCXNbaV0gPSAnXDAnOwot CXN3aXRjaCAoYmFzZSkgewotCWNhc2UgMTA6Ci0JCWRvIHsKLQkJCWktLTsKLQkJCXNbaV0gPSAi MDEyMzQ1Njc4OSJbeCAlICh1aW50NjRfdCkxMF07Ci0JCQl4IC89ICh1aW50NjRfdCkxMDsKLQkJ fSB3aGlsZSAoeCA+IDApOwotCQlicmVhazsKLQljYXNlIDE2OiB7Ci0JCWNvbnN0IGNoYXIgKmRp Z2l0cyA9ICh1cHBlcmNhc2UpCi0JCSAgICA/ICIwMTIzNDU2Nzg5QUJDREVGIgotCQkgICAgOiAi MDEyMzQ1Njc4OWFiY2RlZiI7Ci0KLQkJZG8gewotCQkJaS0tOwotCQkJc1tpXSA9IGRpZ2l0c1t4 ICYgMHhmXTsKLQkJCXggPj49IDQ7Ci0JCX0gd2hpbGUgKHggPiAwKTsKLQkJYnJlYWs7Ci0JfSBk ZWZhdWx0OiB7Ci0JCWNvbnN0IGNoYXIgKmRpZ2l0cyA9ICh1cHBlcmNhc2UpCi0JCSAgICA/ICIw MTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCi0JCSAgICA6ICIwMTIzNDU2Nzg5 YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwotCi0JCWFzc2VydChiYXNlID49IDIgJiYgYmFz ZSA8PSAzNik7Ci0JCWRvIHsKLQkJCWktLTsKLQkJCXNbaV0gPSBkaWdpdHNbeCAlICh1aW50NjRf dCliYXNlXTsKLQkJCXggLz0gKHVpbnQ2NF90KWJhc2U7Ci0JCX0gd2hpbGUgKHggPiAwKTsKLQl9 fQotCi0JKnNsZW5fcCA9IFUyU19CVUZTSVpFIC0gMSAtIGk7Ci0JcmV0dXJuICZzW2ldOwotfQot Ci1zdGF0aWMgY2hhciAqCi1kMnMoaW50bWF4X3QgeCwgY2hhciBzaWduLCBjaGFyICpzLCBzaXpl X3QgKnNsZW5fcCkgewotCWJvb2wgbmVnOwotCi0JaWYgKChuZWcgPSAoeCA8IDApKSkgewotCQl4 ID0gLXg7Ci0JfQotCXMgPSB1MnMoeCwgMTAsIGZhbHNlLCBzLCBzbGVuX3ApOwotCWlmIChuZWcp IHsKLQkJc2lnbiA9ICctJzsKLQl9Ci0Jc3dpdGNoIChzaWduKSB7Ci0JY2FzZSAnLSc6Ci0JCWlm ICghbmVnKSB7Ci0JCQlicmVhazsKLQkJfQotCQlKRU1BTExPQ19GQUxMVEhST1VHSDsKLQljYXNl ICcgJzoKLQljYXNlICcrJzoKLQkJcy0tOwotCQkoKnNsZW5fcCkrKzsKLQkJKnMgPSBzaWduOwot CQlicmVhazsKLQlkZWZhdWx0OiBub3RfcmVhY2hlZCgpOwotCX0KLQlyZXR1cm4gczsKLX0KLQot c3RhdGljIGNoYXIgKgotbzJzKHVpbnRtYXhfdCB4LCBib29sIGFsdF9mb3JtLCBjaGFyICpzLCBz aXplX3QgKnNsZW5fcCkgewotCXMgPSB1MnMoeCwgOCwgZmFsc2UsIHMsIHNsZW5fcCk7Ci0JaWYg KGFsdF9mb3JtICYmICpzICE9ICcwJykgewotCQlzLS07Ci0JCSgqc2xlbl9wKSsrOwotCQkqcyA9 ICcwJzsKLQl9Ci0JcmV0dXJuIHM7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLXgycyh1aW50bWF4X3Qg eCwgYm9vbCBhbHRfZm9ybSwgYm9vbCB1cHBlcmNhc2UsIGNoYXIgKnMsIHNpemVfdCAqc2xlbl9w KSB7Ci0JcyA9IHUycyh4LCAxNiwgdXBwZXJjYXNlLCBzLCBzbGVuX3ApOwotCWlmIChhbHRfZm9y bSkgewotCQlzIC09IDI7Ci0JCSgqc2xlbl9wKSArPSAyOwotCQltZW1jcHkocywgdXBwZXJjYXNl ID8gIjBYIiA6ICIweCIsIDIpOwotCX0KLQlyZXR1cm4gczsKLX0KLQotSkVNQUxMT0NfQ09MRAot c2l6ZV90Ci1tYWxsb2NfdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNo YXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkgewotCXNpemVfdCBpOwotCWNvbnN0IGNoYXIgKmY7Ci0K LSNkZWZpbmUgQVBQRU5EX0MoYykgZG8gewkJCQkJCVwKLQlpZiAoaSA8IHNpemUpIHsJCQkJCQkJ XAotCQlzdHJbaV0gPSAoYyk7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQlpKys7CQkJCQkJCQlcCi19 IHdoaWxlICgwKQotI2RlZmluZSBBUFBFTkRfUyhzLCBzbGVuKSBkbyB7CQkJCQkJXAotCWlmIChp IDwgc2l6ZSkgewkJCQkJCQlcCi0JCXNpemVfdCBjcHlsZW4gPSAoc2xlbiA8PSBzaXplIC0gaSkg PyBzbGVuIDogc2l6ZSAtIGk7CVwKLQkJbWVtY3B5KCZzdHJbaV0sIHMsIGNweWxlbik7CQkJCVwK LQl9CQkJCQkJCQlcCi0JaSArPSBzbGVuOwkJCQkJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBB UFBFTkRfUEFEREVEX1Mocywgc2xlbiwgd2lkdGgsIGxlZnRfanVzdGlmeSkgZG8gewkJXAotCS8q IExlZnQgcGFkZGluZy4gKi8JCQkJCQlcCi0Jc2l6ZV90IHBhZF9sZW4gPSAod2lkdGggPT0gLTEp ID8gMCA6ICgoc2xlbiA8IChzaXplX3Qpd2lkdGgpID8JXAotCSAgICAoc2l6ZV90KXdpZHRoIC0g c2xlbiA6IDApOwkJCQkJXAotCWlmICghbGVmdF9qdXN0aWZ5ICYmIHBhZF9sZW4gIT0gMCkgewkJ CQlcCi0JCXNpemVfdCBqOwkJCQkJCVwKLQkJZm9yIChqID0gMDsgaiA8IHBhZF9sZW47IGorKykg ewkJCQlcCi0JCQlpZiAocGFkX3plcm8pIHsJCQkJCVwKLQkJCQlBUFBFTkRfQygnMCcpOwkJCQlc Ci0JCQl9IGVsc2UgewkJCQkJXAotCQkJCUFQUEVORF9DKCcgJyk7CQkJCVwKLQkJCX0JCQkJCQlc Ci0JCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLQkvKiBWYWx1ZS4gKi8JCQkJCQkJXAotCUFQUEVO RF9TKHMsIHNsZW4pOwkJCQkJCVwKLQkvKiBSaWdodCBwYWRkaW5nLiAqLwkJCQkJCVwKLQlpZiAo bGVmdF9qdXN0aWZ5ICYmIHBhZF9sZW4gIT0gMCkgewkJCQlcCi0JCXNpemVfdCBqOwkJCQkJCVwK LQkJZm9yIChqID0gMDsgaiA8IHBhZF9sZW47IGorKykgewkJCQlcCi0JCQlBUFBFTkRfQygnICcp OwkJCQkJXAotCQl9CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBH RVRfQVJHX05VTUVSSUModmFsLCBsZW4pIGRvIHsJCQkJCVwKLQlzd2l0Y2ggKCh1bnNpZ25lZCBj aGFyKWxlbikgewkJCQkJXAotCWNhc2UgJz8nOgkJCQkJCQlcCi0JCXZhbCA9IHZhX2FyZyhhcCwg aW50KTsJCQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlICc/JyB8IDB4ODA6CQkJCQkJXAot CQl2YWwgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGludCk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwK LQljYXNlICdsJzoJCQkJCQkJXAotCQl2YWwgPSB2YV9hcmcoYXAsIGxvbmcpOwkJCQkJXAotCQli cmVhazsJCQkJCQkJXAotCWNhc2UgJ2wnIHwgMHg4MDoJCQkJCQlcCi0JCXZhbCA9IHZhX2FyZyhh cCwgdW5zaWduZWQgbG9uZyk7CQkJXAotCQlicmVhazsJCQkJCQkJXAotCWNhc2UgJ3EnOgkJCQkJ CQlcCi0JCXZhbCA9IHZhX2FyZyhhcCwgbG9uZyBsb25nKTsJCQkJXAotCQlicmVhazsJCQkJCQkJ XAotCWNhc2UgJ3EnIHwgMHg4MDoJCQkJCQlcCi0JCXZhbCA9IHZhX2FyZyhhcCwgdW5zaWduZWQg bG9uZyBsb25nKTsJCQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2FzZSAnaic6CQkJCQkJCVwKLQkJ dmFsID0gdmFfYXJnKGFwLCBpbnRtYXhfdCk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNl ICdqJyB8IDB4ODA6CQkJCQkJXAotCQl2YWwgPSB2YV9hcmcoYXAsIHVpbnRtYXhfdCk7CQkJCVwK LQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlICd0JzoJCQkJCQkJXAotCQl2YWwgPSB2YV9hcmcoYXAs IHB0cmRpZmZfdCk7CQkJCVwKLQkJYnJlYWs7CQkJCQkJCVwKLQljYXNlICd6JzoJCQkJCQkJXAot CQl2YWwgPSB2YV9hcmcoYXAsIHNzaXplX3QpOwkJCQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JY2Fz ZSAneicgfCAweDgwOgkJCQkJCVwKLQkJdmFsID0gdmFfYXJnKGFwLCBzaXplX3QpOwkJCQlcCi0J CWJyZWFrOwkJCQkJCQlcCi0JY2FzZSAncCc6IC8qIFN5bnRoZXRpYzsgdXNlZCBmb3IgJXAuICov CQkJCVwKLQkJdmFsID0gdmFfYXJnKGFwLCB1aW50cHRyX3QpOwkJCQlcCi0JCWJyZWFrOwkJCQkJ CQlcCi0JZGVmYXVsdDoJCQkJCQkJXAotCQlub3RfcmVhY2hlZCgpOwkJCQkJCVwKLQkJdmFsID0g MDsJCQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCWkgPSAwOwotCWYgPSBmb3Jt YXQ7Ci0Jd2hpbGUgKHRydWUpIHsKLQkJc3dpdGNoICgqZikgewotCQljYXNlICdcMCc6IGdvdG8g bGFiZWxfb3V0OwotCQljYXNlICclJzogewotCQkJYm9vbCBhbHRfZm9ybSA9IGZhbHNlOwotCQkJ Ym9vbCBsZWZ0X2p1c3RpZnkgPSBmYWxzZTsKLQkJCWJvb2wgcGx1c19zcGFjZSA9IGZhbHNlOwot CQkJYm9vbCBwbHVzX3BsdXMgPSBmYWxzZTsKLQkJCWludCBwcmVjID0gLTE7Ci0JCQlpbnQgd2lk dGggPSAtMTsKLQkJCXVuc2lnbmVkIGNoYXIgbGVuID0gJz8nOwotCQkJY2hhciAqczsKLQkJCXNp emVfdCBzbGVuOwotCQkJYm9vbCBmaXJzdF93aWR0aF9kaWdpdCA9IHRydWU7Ci0JCQlib29sIHBh ZF96ZXJvID0gZmFsc2U7Ci0KLQkJCWYrKzsKLQkJCS8qIEZsYWdzLiAqLwotCQkJd2hpbGUgKHRy dWUpIHsKLQkJCQlzd2l0Y2ggKCpmKSB7Ci0JCQkJY2FzZSAnIyc6Ci0JCQkJCWFzc2VydCghYWx0 X2Zvcm0pOwotCQkJCQlhbHRfZm9ybSA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJy0n OgotCQkJCQlhc3NlcnQoIWxlZnRfanVzdGlmeSk7Ci0JCQkJCWxlZnRfanVzdGlmeSA9IHRydWU7 Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJyAnOgotCQkJCQlhc3NlcnQoIXBsdXNfc3BhY2UpOwot CQkJCQlwbHVzX3NwYWNlID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnKyc6Ci0JCQkJ CWFzc2VydCghcGx1c19wbHVzKTsKLQkJCQkJcGx1c19wbHVzID0gdHJ1ZTsKLQkJCQkJYnJlYWs7 Ci0JCQkJZGVmYXVsdDogZ290byBsYWJlbF93aWR0aDsKLQkJCQl9Ci0JCQkJZisrOwotCQkJfQot CQkJLyogV2lkdGguICovCi0JCQlsYWJlbF93aWR0aDoKLQkJCXN3aXRjaCAoKmYpIHsKLQkJCWNh c2UgJyonOgotCQkJCXdpZHRoID0gdmFfYXJnKGFwLCBpbnQpOwotCQkJCWYrKzsKLQkJCQlpZiAo d2lkdGggPCAwKSB7Ci0JCQkJCWxlZnRfanVzdGlmeSA9IHRydWU7Ci0JCQkJCXdpZHRoID0gLXdp ZHRoOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgJzAnOgotCQkJCWlmIChmaXJzdF93aWR0 aF9kaWdpdCkgewotCQkJCQlwYWRfemVybyA9IHRydWU7Ci0JCQkJfQotCQkJCUpFTUFMTE9DX0ZB TExUSFJPVUdIOwotCQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0J CQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6IHsKLQkJ CQl1aW50bWF4X3QgdXdpZHRoOwotCQkJCXNldF9lcnJubygwKTsKLQkJCQl1d2lkdGggPSBtYWxs b2Nfc3RydG91bWF4KGYsIChjaGFyICoqKSZmLCAxMCk7Ci0JCQkJYXNzZXJ0KHV3aWR0aCAhPSBV SU5UTUFYX01BWCB8fCBnZXRfZXJybm8oKSAhPQotCQkJCSAgICBFUkFOR0UpOwotCQkJCXdpZHRo ID0gKGludCl1d2lkdGg7Ci0JCQkJZmlyc3Rfd2lkdGhfZGlnaXQgPSBmYWxzZTsKLQkJCQlicmVh azsKLQkJCX0gZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJCS8qIFdpZHRoL3ByZWNpc2lv biBzZXBhcmF0b3IuICovCi0JCQlpZiAoKmYgPT0gJy4nKSB7Ci0JCQkJZisrOwotCQkJfSBlbHNl IHsKLQkJCQlnb3RvIGxhYmVsX2xlbmd0aDsKLQkJCX0KLQkJCS8qIFByZWNpc2lvbi4gKi8KLQkJ CXN3aXRjaCAoKmYpIHsKLQkJCWNhc2UgJyonOgotCQkJCXByZWMgPSB2YV9hcmcoYXAsIGludCk7 Ci0JCQkJZisrOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzog Y2FzZSAnMyc6IGNhc2UgJzQnOgotCQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2Fz ZSAnOCc6IGNhc2UgJzknOiB7Ci0JCQkJdWludG1heF90IHVwcmVjOwotCQkJCXNldF9lcnJubygw KTsKLQkJCQl1cHJlYyA9IG1hbGxvY19zdHJ0b3VtYXgoZiwgKGNoYXIgKiopJmYsIDEwKTsKLQkJ CQlhc3NlcnQodXByZWMgIT0gVUlOVE1BWF9NQVggfHwgZ2V0X2Vycm5vKCkgIT0KLQkJCQkgICAg RVJBTkdFKTsKLQkJCQlwcmVjID0gKGludCl1cHJlYzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRl ZmF1bHQ6IGJyZWFrOwotCQkJfQotCQkJLyogTGVuZ3RoLiAqLwotCQkJbGFiZWxfbGVuZ3RoOgot CQkJc3dpdGNoICgqZikgewotCQkJY2FzZSAnbCc6Ci0JCQkJZisrOwotCQkJCWlmICgqZiA9PSAn bCcpIHsKLQkJCQkJbGVuID0gJ3EnOwotCQkJCQlmKys7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGVu ID0gJ2wnOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgJ3EnOiBjYXNlICdqJzogY2FzZSAn dCc6IGNhc2UgJ3onOgotCQkJCWxlbiA9ICpmOwotCQkJCWYrKzsKLQkJCQlicmVhazsKLQkJCWRl ZmF1bHQ6IGJyZWFrOwotCQkJfQotCQkJLyogQ29udmVyc2lvbiBzcGVjaWZpZXIuICovCi0JCQlz d2l0Y2ggKCpmKSB7Ci0JCQljYXNlICclJzoKLQkJCQkvKiAlJSAqLwotCQkJCUFQUEVORF9DKCpm KTsKLQkJCQlmKys7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdkJzogY2FzZSAnaSc6IHsKLQkJCQlp bnRtYXhfdCB2YWwgSkVNQUxMT0NfQ0NfU0lMRU5DRV9JTklUKDApOwotCQkJCWNoYXIgYnVmW0Qy U19CVUZTSVpFXTsKLQotCQkJCS8qCi0JCQkJICogT3V0cHV0dGluZyBuZWdhdGl2ZSwgemVyby1w YWRkZWQgbnVtYmVycwotCQkJCSAqIHdvdWxkIHJlcXVpcmUgYSBub250cml2aWFsIHJld29yayBv ZiB0aGUKLQkJCQkgKiBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB3aWR0aCBhbmQgcGFkZGluZwot CQkJCSAqIChzaW5jZSAwIHBhZGRpbmcgZ29lcyBiZXR3ZWVuIHRoZSAnLScgYW5kIHRoZQotCQkJ CSAqIG51bWJlciwgd2hpbGUgJyAnIHBhZGRpbmcgZ29lcyBlaXRoZXIgYmVmb3JlCi0JCQkJICog dGhlIC0gb3IgYWZ0ZXIgdGhlIG51bWJlci4gIFNpbmNlIHdlCi0JCQkJICogY3VycmVudGx5IGRv bid0IGV2ZXIgbmVlZCAwLXBhZGRlZCBuZWdhdGl2ZQotCQkJCSAqIG51bWJlcnMsIGp1c3QgZG9u J3QgYm90aGVyIHN1cHBvcnRpbmcgaXQuCi0JCQkJICovCi0JCQkJYXNzZXJ0KCFwYWRfemVybyk7 Ci0KLQkJCQlHRVRfQVJHX05VTUVSSUModmFsLCBsZW4pOwotCQkJCXMgPSBkMnModmFsLCAocGx1 c19wbHVzID8gJysnIDogKHBsdXNfc3BhY2UgPwotCQkJCSAgICAnICcgOiAnLScpKSwgYnVmLCAm c2xlbik7Ci0JCQkJQVBQRU5EX1BBRERFRF9TKHMsIHNsZW4sIHdpZHRoLCBsZWZ0X2p1c3RpZnkp OwotCQkJCWYrKzsKLQkJCQlicmVhazsKLQkJCX0gY2FzZSAnbyc6IHsKLQkJCQl1aW50bWF4X3Qg dmFsIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVCgwKTsKLQkJCQljaGFyIGJ1ZltPMlNfQlVGU0la RV07Ci0KLQkJCQlHRVRfQVJHX05VTUVSSUModmFsLCBsZW4gfCAweDgwKTsKLQkJCQlzID0gbzJz KHZhbCwgYWx0X2Zvcm0sIGJ1ZiwgJnNsZW4pOwotCQkJCUFQUEVORF9QQURERURfUyhzLCBzbGVu LCB3aWR0aCwgbGVmdF9qdXN0aWZ5KTsKLQkJCQlmKys7Ci0JCQkJYnJlYWs7Ci0JCQl9IGNhc2Ug J3UnOiB7Ci0JCQkJdWludG1heF90IHZhbCBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoMCk7Ci0J CQkJY2hhciBidWZbVTJTX0JVRlNJWkVdOwotCi0JCQkJR0VUX0FSR19OVU1FUklDKHZhbCwgbGVu IHwgMHg4MCk7Ci0JCQkJcyA9IHUycyh2YWwsIDEwLCBmYWxzZSwgYnVmLCAmc2xlbik7Ci0JCQkJ QVBQRU5EX1BBRERFRF9TKHMsIHNsZW4sIHdpZHRoLCBsZWZ0X2p1c3RpZnkpOwotCQkJCWYrKzsK LQkJCQlicmVhazsKLQkJCX0gY2FzZSAneCc6IGNhc2UgJ1gnOiB7Ci0JCQkJdWludG1heF90IHZh bCBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoMCk7Ci0JCQkJY2hhciBidWZbWDJTX0JVRlNJWkVd OwotCi0JCQkJR0VUX0FSR19OVU1FUklDKHZhbCwgbGVuIHwgMHg4MCk7Ci0JCQkJcyA9IHgycyh2 YWwsIGFsdF9mb3JtLCAqZiA9PSAnWCcsIGJ1ZiwgJnNsZW4pOwotCQkJCUFQUEVORF9QQURERURf UyhzLCBzbGVuLCB3aWR0aCwgbGVmdF9qdXN0aWZ5KTsKLQkJCQlmKys7Ci0JCQkJYnJlYWs7Ci0J CQl9IGNhc2UgJ2MnOiB7Ci0JCQkJdW5zaWduZWQgY2hhciB2YWw7Ci0JCQkJY2hhciBidWZbMl07 Ci0KLQkJCQlhc3NlcnQobGVuID09ICc/JyB8fCBsZW4gPT0gJ2wnKTsKLQkJCQlhc3NlcnRfbm90 X2ltcGxlbWVudGVkKGxlbiAhPSAnbCcpOwotCQkJCXZhbCA9IHZhX2FyZyhhcCwgaW50KTsKLQkJ CQlidWZbMF0gPSB2YWw7Ci0JCQkJYnVmWzFdID0gJ1wwJzsKLQkJCQlBUFBFTkRfUEFEREVEX1Mo YnVmLCAxLCB3aWR0aCwgbGVmdF9qdXN0aWZ5KTsKLQkJCQlmKys7Ci0JCQkJYnJlYWs7Ci0JCQl9 IGNhc2UgJ3MnOgotCQkJCWFzc2VydChsZW4gPT0gJz8nIHx8IGxlbiA9PSAnbCcpOwotCQkJCWFz c2VydF9ub3RfaW1wbGVtZW50ZWQobGVuICE9ICdsJyk7Ci0JCQkJcyA9IHZhX2FyZyhhcCwgY2hh ciAqKTsKLQkJCQlzbGVuID0gKHByZWMgPCAwKSA/IHN0cmxlbihzKSA6IChzaXplX3QpcHJlYzsK LQkJCQlBUFBFTkRfUEFEREVEX1Mocywgc2xlbiwgd2lkdGgsIGxlZnRfanVzdGlmeSk7Ci0JCQkJ ZisrOwotCQkJCWJyZWFrOwotCQkJY2FzZSAncCc6IHsKLQkJCQl1aW50bWF4X3QgdmFsOwotCQkJ CWNoYXIgYnVmW1gyU19CVUZTSVpFXTsKLQotCQkJCUdFVF9BUkdfTlVNRVJJQyh2YWwsICdwJyk7 Ci0JCQkJcyA9IHgycyh2YWwsIHRydWUsIGZhbHNlLCBidWYsICZzbGVuKTsKLQkJCQlBUFBFTkRf UEFEREVEX1Mocywgc2xlbiwgd2lkdGgsIGxlZnRfanVzdGlmeSk7Ci0JCQkJZisrOwotCQkJCWJy ZWFrOwotCQkJfSBkZWZhdWx0OiBub3RfcmVhY2hlZCgpOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0g ZGVmYXVsdDogewotCQkJQVBQRU5EX0MoKmYpOwotCQkJZisrOwotCQkJYnJlYWs7Ci0JCX19Ci0J fQotCWxhYmVsX291dDoKLQlpZiAoaSA8IHNpemUpIHsKLQkJc3RyW2ldID0gJ1wwJzsKLQl9IGVs c2UgewotCQlzdHJbc2l6ZSAtIDFdID0gJ1wwJzsKLQl9Ci0KLSN1bmRlZiBBUFBFTkRfQwotI3Vu ZGVmIEFQUEVORF9TCi0jdW5kZWYgQVBQRU5EX1BBRERFRF9TCi0jdW5kZWYgR0VUX0FSR19OVU1F UklDCi0JcmV0dXJuIGk7Ci19Ci0KLUpFTUFMTE9DX0ZPUk1BVF9QUklOVEYoMywgNCkKLXNpemVf dAotbWFsbG9jX3NucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZv cm1hdCwgLi4uKSB7Ci0Jc2l6ZV90IHJldDsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAs IGZvcm1hdCk7Ci0JcmV0ID0gbWFsbG9jX3ZzbnByaW50ZihzdHIsIHNpemUsIGZvcm1hdCwgYXAp OwotCXZhX2VuZChhcCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkCi1tYWxsb2NfdmNwcmlu dGYod3JpdGVfY2JfdCAqd3JpdGVfY2IsIHZvaWQgKmNib3BhcXVlLCBjb25zdCBjaGFyICpmb3Jt YXQsCi0gICAgdmFfbGlzdCBhcCkgewotCWNoYXIgYnVmW01BTExPQ19QUklOVEZfQlVGU0laRV07 Ci0KLQlpZiAod3JpdGVfY2IgPT0gTlVMTCkgewotCQkvKgotCQkgKiBUaGUgY2FsbGVyIGRpZCBu b3QgcHJvdmlkZSBhbiBhbHRlcm5hdGUgd3JpdGVfY2IgY2FsbGJhY2sKLQkJICogZnVuY3Rpb24s IHNvIHVzZSB0aGUgZGVmYXVsdCBvbmUuICBtYWxsb2Nfd3JpdGUoKSBpcyBhbgotCQkgKiBpbmxp bmUgZnVuY3Rpb24sIHNvIHVzZSBtYWxsb2NfbWVzc2FnZSgpIGRpcmVjdGx5IGhlcmUuCi0JCSAq LwotCQl3cml0ZV9jYiA9IChqZV9tYWxsb2NfbWVzc2FnZSAhPSBOVUxMKSA/IGplX21hbGxvY19t ZXNzYWdlIDoKLQkJICAgIHdydG1lc3NhZ2U7Ci0JfQotCi0JbWFsbG9jX3ZzbnByaW50ZihidWYs IHNpemVvZihidWYpLCBmb3JtYXQsIGFwKTsKLQl3cml0ZV9jYihjYm9wYXF1ZSwgYnVmKTsKLX0K LQotLyoKLSAqIFByaW50IHRvIGEgY2FsbGJhY2sgZnVuY3Rpb24gaW4gc3VjaCBhIHdheSBhcyB0 byAoaG9wZWZ1bGx5KSBhdm9pZCBtZW1vcnkKLSAqIGFsbG9jYXRpb24uCi0gKi8KLUpFTUFMTE9D X0ZPUk1BVF9QUklOVEYoMywgNCkKLXZvaWQKLW1hbGxvY19jcHJpbnRmKHdyaXRlX2NiX3QgKndy aXRlX2NiLCB2b2lkICpjYm9wYXF1ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKLQl2YV9s aXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JbWFsbG9jX3ZjcHJpbnRmKHdyaXRl X2NiLCBjYm9wYXF1ZSwgZm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotLyogUHJpbnQg dG8gc3RkZXJyIGluIHN1Y2ggYSB3YXkgYXMgdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb24uICov Ci1KRU1BTExPQ19GT1JNQVRfUFJJTlRGKDEsIDIpCi12b2lkCi1tYWxsb2NfcHJpbnRmKGNvbnN0 IGNoYXIgKmZvcm1hdCwgLi4uKSB7Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmb3Jt YXQpOwotCW1hbGxvY192Y3ByaW50ZihOVUxMLCBOVUxMLCBmb3JtYXQsIGFwKTsKLQl2YV9lbmQo YXApOwotfQotCi0vKgotICogUmVzdG9yZSBub3JtYWwgYXNzZXJ0aW9uIG1hY3JvcywgaW4gb3Jk ZXIgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBjb21waWxlIGFsbAotICogQyBmaWxlcyBhcyBhIHNp bmdsZSBjb25jYXRlbmF0aW9uLgotICovCi0jdW5kZWYgYXNzZXJ0Ci0jdW5kZWYgbm90X3JlYWNo ZWQKLSN1bmRlZiBub3RfaW1wbGVtZW50ZWQKLSN1bmRlZiBhc3NlcnRfbm90X2ltcGxlbWVudGVk Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL211dGV4LmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbXV0ZXguYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMGIzNTQ3YS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvbXV0ZXguYworKysgL2Rldi9udWxsCkBAIC0xLDIy OCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRl cy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvbWFsbG9jX2lvLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvc3Bpbi5oIgotCi0jaWZuZGVmIF9DUlRfU1BJTkNPVU5UCi0jZGVmaW5lIF9DUlRfU1BJTkNP VU5UIDQwMDAKLSNlbmRpZgotCi0vKgotICogQmFzZWQgb24gYmVuY2htYXJrIHJlc3VsdHMsIGEg Zml4ZWQgc3BpbiB3aXRoIHRoaXMgYW1vdW50IG9mIHJldHJpZXMgd29ya3MKLSAqIHdlbGwgZm9y IG91ciBjcml0aWNhbCBzZWN0aW9ucy4KLSAqLwotaW50NjRfdCBvcHRfbXV0ZXhfbWF4X3NwaW4g PSA2MDA7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEYXRhLiAqLwotCi0jaWZkZWYg SkVNQUxMT0NfTEFaWV9MT0NLCi1ib29sIGlzdGhyZWFkZWQgPSBmYWxzZTsKLSNlbmRpZgotI2lm ZGVmIEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IKLXN0YXRpYyBib29sCQlwb3N0cG9uZV9pbml0ID0g dHJ1ZTsKLXN0YXRpYyBtYWxsb2NfbXV0ZXhfdAkqcG9zdHBvbmVkX211dGV4ZXMgPSBOVUxMOwot I2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogV2UgaW50ZXJjZXB0IHB0 aHJlYWRfY3JlYXRlKCkgY2FsbHMgaW4gb3JkZXIgdG8gdG9nZ2xlIGlzdGhyZWFkZWQgaWYgdGhl Ci0gKiBwcm9jZXNzIGdvZXMgbXVsdGktdGhyZWFkZWQuCi0gKi8KLQotI2lmIGRlZmluZWQoSkVN QUxMT0NfTEFaWV9MT0NLKSAmJiAhZGVmaW5lZChfV0lOMzIpCi1KRU1BTExPQ19FWFBPUlQgaW50 Ci1wdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKl9fcmVzdHJpY3QgdGhyZWFkLAotICAgIGNvbnN0 IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IGF0dHIsIHZvaWQgKigqc3RhcnRfcm91dGluZSko dm9pZCAqKSwKLSAgICB2b2lkICpfX3Jlc3RyaWN0IGFyZykgewotCXJldHVybiBwdGhyZWFkX2Ny ZWF0ZV93cmFwcGVyKHRocmVhZCwgYXR0ciwgc3RhcnRfcm91dGluZSwgYXJnKTsKLX0KLSNlbmRp ZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgSkVNQUxMT0NfTVVURVhfSU5J VF9DQgotSkVNQUxMT0NfRVhQT1JUIGludAlfcHRocmVhZF9tdXRleF9pbml0X2NhbGxvY19jYihw dGhyZWFkX211dGV4X3QgKm11dGV4LAotICAgIHZvaWQgKihjYWxsb2NfY2IpKHNpemVfdCwgc2l6 ZV90KSk7Ci0jZW5kaWYKLQotdm9pZAotbWFsbG9jX211dGV4X2xvY2tfc2xvdyhtYWxsb2NfbXV0 ZXhfdCAqbXV0ZXgpIHsKLQltdXRleF9wcm9mX2RhdGFfdCAqZGF0YSA9ICZtdXRleC0+cHJvZl9k YXRhOwotCW5zdGltZV90IGJlZm9yZTsKLQotCWlmIChuY3B1cyA9PSAxKSB7Ci0JCWdvdG8gbGFi ZWxfc3Bpbl9kb25lOwotCX0KLQotCWludCBjbnQgPSAwOwotCWRvIHsKLQkJc3Bpbl9jcHVfc3Bp bndhaXQoKTsKLQkJaWYgKCFhdG9taWNfbG9hZF9iKCZtdXRleC0+bG9ja2VkLCBBVE9NSUNfUkVM QVhFRCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW1hbGxvY19tdXRleF90cnlsb2NrX2ZpbmFs KG11dGV4KSkgewotCQkJZGF0YS0+bl9zcGluX2FjcXVpcmVkKys7Ci0JCQlyZXR1cm47Ci0JCX0K LQl9IHdoaWxlIChjbnQrKyA8IG9wdF9tdXRleF9tYXhfc3BpbiB8fCBvcHRfbXV0ZXhfbWF4X3Nw aW4gPT0gLTEpOwotCi0JaWYgKCFjb25maWdfc3RhdHMpIHsKLQkJLyogT25seSBzcGluIGlzIHVz ZWZ1bCB3aGVuIHN0YXRzIGlzIG9mZi4gKi8KLQkJbWFsbG9jX211dGV4X2xvY2tfZmluYWwobXV0 ZXgpOwotCQlyZXR1cm47Ci0JfQotbGFiZWxfc3Bpbl9kb25lOgotCW5zdGltZV9pbml0X3VwZGF0 ZSgmYmVmb3JlKTsKLQkvKiBDb3B5IGJlZm9yZSB0byBhZnRlciB0byBhdm9pZCBjbG9jayBza2V3 cy4gKi8KLQluc3RpbWVfdCBhZnRlcjsKLQluc3RpbWVfY29weSgmYWZ0ZXIsICZiZWZvcmUpOwot CXVpbnQzMl90IG5fdGhkcyA9IGF0b21pY19mZXRjaF9hZGRfdTMyKCZkYXRhLT5uX3dhaXRpbmdf dGhkcywgMSwKLQkgICAgQVRPTUlDX1JFTEFYRUQpICsgMTsKLQkvKiBPbmUgbGFzdCB0cnkgYXMg YWJvdmUgdHdvIGNhbGxzIG1heSB0YWtlIHF1aXRlIHNvbWUgY3ljbGVzLiAqLwotCWlmICghbWFs bG9jX211dGV4X3RyeWxvY2tfZmluYWwobXV0ZXgpKSB7Ci0JCWF0b21pY19mZXRjaF9zdWJfdTMy KCZkYXRhLT5uX3dhaXRpbmdfdGhkcywgMSwgQVRPTUlDX1JFTEFYRUQpOwotCQlkYXRhLT5uX3Nw aW5fYWNxdWlyZWQrKzsKLQkJcmV0dXJuOwotCX0KLQotCS8qIFRydWUgc2xvdyBwYXRoLiAqLwot CW1hbGxvY19tdXRleF9sb2NrX2ZpbmFsKG11dGV4KTsKLQkvKiBVcGRhdGUgbW9yZSBzbG93LXBh dGggb25seSBjb3VudGVycy4gKi8KLQlhdG9taWNfZmV0Y2hfc3ViX3UzMigmZGF0YS0+bl93YWl0 aW5nX3RoZHMsIDEsIEFUT01JQ19SRUxBWEVEKTsKLQluc3RpbWVfdXBkYXRlKCZhZnRlcik7Ci0K LQluc3RpbWVfdCBkZWx0YTsKLQluc3RpbWVfY29weSgmZGVsdGEsICZhZnRlcik7Ci0JbnN0aW1l X3N1YnRyYWN0KCZkZWx0YSwgJmJlZm9yZSk7Ci0KLQlkYXRhLT5uX3dhaXRfdGltZXMrKzsKLQlu c3RpbWVfYWRkKCZkYXRhLT50b3Rfd2FpdF90aW1lLCAmZGVsdGEpOwotCWlmIChuc3RpbWVfY29t cGFyZSgmZGF0YS0+bWF4X3dhaXRfdGltZSwgJmRlbHRhKSA8IDApIHsKLQkJbnN0aW1lX2NvcHko JmRhdGEtPm1heF93YWl0X3RpbWUsICZkZWx0YSk7Ci0JfQotCWlmIChuX3RoZHMgPiBkYXRhLT5t YXhfbl90aGRzKSB7Ci0JCWRhdGEtPm1heF9uX3RoZHMgPSBuX3RoZHM7Ci0JfQotfQotCi1zdGF0 aWMgdm9pZAotbXV0ZXhfcHJvZl9kYXRhX2luaXQobXV0ZXhfcHJvZl9kYXRhX3QgKmRhdGEpIHsK LQltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKG11dGV4X3Byb2ZfZGF0YV90KSk7Ci0JbnN0aW1lX2lu aXRfemVybygmZGF0YS0+bWF4X3dhaXRfdGltZSk7Ci0JbnN0aW1lX2luaXRfemVybygmZGF0YS0+ dG90X3dhaXRfdGltZSk7Ci0JZGF0YS0+cHJldl9vd25lciA9IE5VTEw7Ci19Ci0KLXZvaWQKLW1h bGxvY19tdXRleF9wcm9mX2RhdGFfcmVzZXQodHNkbl90ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAq bXV0ZXgpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sIG11dGV4KTsKLQltdXRl eF9wcm9mX2RhdGFfaW5pdCgmbXV0ZXgtPnByb2ZfZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbnQKLW11 dGV4X2FkZHJfY29tcChjb25zdCB3aXRuZXNzX3QgKndpdG5lc3MxLCB2b2lkICptdXRleDEsCi0g ICAgY29uc3Qgd2l0bmVzc190ICp3aXRuZXNzMiwgdm9pZCAqbXV0ZXgyKSB7Ci0JYXNzZXJ0KG11 dGV4MSAhPSBOVUxMKTsKLQlhc3NlcnQobXV0ZXgyICE9IE5VTEwpOwotCXVpbnRwdHJfdCBtdTFp bnQgPSAodWludHB0cl90KW11dGV4MTsKLQl1aW50cHRyX3QgbXUyaW50ID0gKHVpbnRwdHJfdClt dXRleDI7Ci0JaWYgKG11MWludCA8IG11MmludCkgewotCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIGlm IChtdTFpbnQgPT0gbXUyaW50KSB7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXJldHVybiAx OwotCX0KLX0KLQotYm9vbAotbWFsbG9jX211dGV4X2luaXQobWFsbG9jX211dGV4X3QgKm11dGV4 LCBjb25zdCBjaGFyICpuYW1lLAotICAgIHdpdG5lc3NfcmFua190IHJhbmssIG1hbGxvY19tdXRl eF9sb2NrX29yZGVyX3QgbG9ja19vcmRlcikgewotCW11dGV4X3Byb2ZfZGF0YV9pbml0KCZtdXRl eC0+cHJvZl9kYXRhKTsKLSNpZmRlZiBfV0lOMzIKLSMgIGlmIF9XSU4zMl9XSU5OVCA+PSAweDA2 MDAKLQlJbml0aWFsaXplU1JXTG9jaygmbXV0ZXgtPmxvY2spOwotIyAgZWxzZQotCWlmICghSW5p dGlhbGl6ZUNyaXRpY2FsU2VjdGlvbkFuZFNwaW5Db3VudCgmbXV0ZXgtPmxvY2ssCi0JICAgIF9D UlRfU1BJTkNPVU5UKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0jICBlbmRpZgotI2VsaWYgKGRl ZmluZWQoSkVNQUxMT0NfT1NfVU5GQUlSX0xPQ0spKQotICAgICAgIG11dGV4LT5sb2NrID0gT1Nf VU5GQUlSX0xPQ0tfSU5JVDsKLSNlbGlmIChkZWZpbmVkKEpFTUFMTE9DX01VVEVYX0lOSVRfQ0Ip KQotCWlmIChwb3N0cG9uZV9pbml0KSB7Ci0JCW11dGV4LT5wb3N0cG9uZWRfbmV4dCA9IHBvc3Rw b25lZF9tdXRleGVzOwotCQlwb3N0cG9uZWRfbXV0ZXhlcyA9IG11dGV4OwotCX0gZWxzZSB7Ci0J CWlmIChfcHRocmVhZF9tdXRleF9pbml0X2NhbGxvY19jYigmbXV0ZXgtPmxvY2ssCi0JCSAgICBi b290c3RyYXBfY2FsbG9jKSAhPSAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLSNlbHNl Ci0JcHRocmVhZF9tdXRleGF0dHJfdCBhdHRyOwotCi0JaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2lu aXQoJmF0dHIpICE9IDApIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXB0aHJlYWRfbXV0ZXhhdHRy X3NldHR5cGUoJmF0dHIsIE1BTExPQ19NVVRFWF9UWVBFKTsKLQlpZiAocHRocmVhZF9tdXRleF9p bml0KCZtdXRleC0+bG9jaywgJmF0dHIpICE9IDApIHsKLQkJcHRocmVhZF9tdXRleGF0dHJfZGVz dHJveSgmYXR0cik7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlwdGhyZWFkX211dGV4YXR0cl9kZXN0 cm95KCZhdHRyKTsKLSNlbmRpZgotCWlmIChjb25maWdfZGVidWcpIHsKLQkJbXV0ZXgtPmxvY2tf b3JkZXIgPSBsb2NrX29yZGVyOwotCQlpZiAobG9ja19vcmRlciA9PSBtYWxsb2NfbXV0ZXhfYWRk cmVzc19vcmRlcmVkKSB7Ci0JCQl3aXRuZXNzX2luaXQoJm11dGV4LT53aXRuZXNzLCBuYW1lLCBy YW5rLAotCQkJICAgIG11dGV4X2FkZHJfY29tcCwgbXV0ZXgpOwotCQl9IGVsc2UgewotCQkJd2l0 bmVzc19pbml0KCZtdXRleC0+d2l0bmVzcywgbmFtZSwgcmFuaywgTlVMTCwgTlVMTCk7Ci0JCX0K LQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCi12b2lkCi1tYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2Ru X3QgKnRzZG4sIG1hbGxvY19tdXRleF90ICptdXRleCkgewotCW1hbGxvY19tdXRleF9sb2NrKHRz ZG4sIG11dGV4KTsKLX0KLQotdm9pZAotbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2Ru X3QgKnRzZG4sIG1hbGxvY19tdXRleF90ICptdXRleCkgewotCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgbXV0ZXgpOwotfQotCi12b2lkCi1tYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNk bl90ICp0c2RuLCBtYWxsb2NfbXV0ZXhfdCAqbXV0ZXgpIHsKLSNpZmRlZiBKRU1BTExPQ19NVVRF WF9JTklUX0NCCi0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCBtdXRleCk7Ci0jZWxzZQotCWlm IChtYWxsb2NfbXV0ZXhfaW5pdChtdXRleCwgbXV0ZXgtPndpdG5lc3MubmFtZSwKLQkgICAgbXV0 ZXgtPndpdG5lc3MucmFuaywgbXV0ZXgtPmxvY2tfb3JkZXIpKSB7Ci0JCW1hbGxvY19wcmludGYo IjxqZW1hbGxvYz46IEVycm9yIHJlLWluaXRpYWxpemluZyBtdXRleCBpbiAiCi0JCSAgICAiY2hp bGRcbiIpOwotCQlpZiAob3B0X2Fib3J0KSB7Ci0JCQlhYm9ydCgpOwotCQl9Ci0JfQotI2VuZGlm Ci19Ci0KLWJvb2wKLW1hbGxvY19tdXRleF9ib290KHZvaWQpIHsKLSNpZmRlZiBKRU1BTExPQ19N VVRFWF9JTklUX0NCCi0JcG9zdHBvbmVfaW5pdCA9IGZhbHNlOwotCXdoaWxlIChwb3N0cG9uZWRf bXV0ZXhlcyAhPSBOVUxMKSB7Ci0JCWlmIChfcHRocmVhZF9tdXRleF9pbml0X2NhbGxvY19jYigm cG9zdHBvbmVkX211dGV4ZXMtPmxvY2ssCi0JCSAgICBib290c3RyYXBfY2FsbG9jKSAhPSAwKSB7 Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlwb3N0cG9uZWRfbXV0ZXhlcyA9IHBvc3Rwb25lZF9t dXRleGVzLT5wb3N0cG9uZWRfbmV4dDsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gZmFsc2U7Ci19Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL25z dGltZS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL25zdGlt ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWE1Mzc3Li4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9uc3RpbWUuYworKysg L2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv amVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxv Y19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbnN0 aW1lLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hc3NlcnQuaCIKLQotI2RlZmlu ZSBCSUxMSU9OCVVJTlQ2NF9DKDEwMDAwMDAwMDApCi0jZGVmaW5lIE1JTExJT04JVUlOVDY0X0Mo MTAwMDAwMCkKLQotc3RhdGljIHZvaWQKLW5zdGltZV9zZXRfaW5pdGlhbGl6ZWQobnN0aW1lX3Qg KnRpbWUpIHsKLSNpZmRlZiBKRU1BTExPQ19ERUJVRwotCXRpbWUtPm1hZ2ljID0gTlNUSU1FX01B R0lDOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkCi1uc3RpbWVfYXNzZXJ0X2luaXRpYWxpemVk KGNvbnN0IG5zdGltZV90ICp0aW1lKSB7Ci0jaWZkZWYgSkVNQUxMT0NfREVCVUcKLQkvKgotCSAq IFNvbWUgcGFydHMgKGUuZy4gc3RhdHMpIHJlbHkgb24gbWVtc2V0IHRvIHplcm8gaW5pdGlhbGl6 ZS4gIFRyZWF0Ci0JICogdGhlc2UgYXMgdmFsaWQgaW5pdGlhbGl6YXRpb24uCi0JICovCi0JYXNz ZXJ0KHRpbWUtPm1hZ2ljID09IE5TVElNRV9NQUdJQyB8fAotCSAgICAodGltZS0+bWFnaWMgPT0g MCAmJiB0aW1lLT5ucyA9PSAwKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLW5zdGltZV9w YWlyX2Fzc2VydF9pbml0aWFsaXplZChjb25zdCBuc3RpbWVfdCAqdDEsIGNvbnN0IG5zdGltZV90 ICp0MikgewotCW5zdGltZV9hc3NlcnRfaW5pdGlhbGl6ZWQodDEpOwotCW5zdGltZV9hc3NlcnRf aW5pdGlhbGl6ZWQodDIpOwotfQotCi1zdGF0aWMgdm9pZAotbnN0aW1lX2luaXRpYWxpemVfb3Bl cmFuZChuc3RpbWVfdCAqdGltZSkgewotCS8qCi0JICogT3BlcmF0aW9ucyBsaWtlIG5zdGltZV9h ZGQgbWF5IGhhdmUgdGhlIGluaXRpYWwgb3BlcmFuZCBiZWluZyB6ZXJvCi0JICogaW5pdGlhbGl6 ZWQgKGNvdmVyZWQgYnkgdGhlIGFzc2VydCBiZWxvdykuICBGdWxsLWluaXRpYWxpemUgbmVlZGVk Ci0JICogYmVmb3JlIGNoYW5naW5nIGl0IHRvIG5vbi16ZXJvLgotCSAqLwotCW5zdGltZV9hc3Nl cnRfaW5pdGlhbGl6ZWQodGltZSk7Ci0JbnN0aW1lX3NldF9pbml0aWFsaXplZCh0aW1lKTsKLX0K LQotdm9pZAotbnN0aW1lX2luaXQobnN0aW1lX3QgKnRpbWUsIHVpbnQ2NF90IG5zKSB7Ci0JbnN0 aW1lX3NldF9pbml0aWFsaXplZCh0aW1lKTsKLQl0aW1lLT5ucyA9IG5zOwotfQotCi12b2lkCi1u c3RpbWVfaW5pdDIobnN0aW1lX3QgKnRpbWUsIHVpbnQ2NF90IHNlYywgdWludDY0X3QgbnNlYykg ewotCW5zdGltZV9zZXRfaW5pdGlhbGl6ZWQodGltZSk7Ci0JdGltZS0+bnMgPSBzZWMgKiBCSUxM SU9OICsgbnNlYzsKLX0KLQotdWludDY0X3QKLW5zdGltZV9ucyhjb25zdCBuc3RpbWVfdCAqdGlt ZSkgewotCW5zdGltZV9hc3NlcnRfaW5pdGlhbGl6ZWQodGltZSk7Ci0JcmV0dXJuIHRpbWUtPm5z OwotfQotCi11aW50NjRfdAotbnN0aW1lX21zZWMoY29uc3QgbnN0aW1lX3QgKnRpbWUpIHsKLQlu c3RpbWVfYXNzZXJ0X2luaXRpYWxpemVkKHRpbWUpOwotCXJldHVybiB0aW1lLT5ucyAvIE1JTExJ T047Ci19Ci0KLXVpbnQ2NF90Ci1uc3RpbWVfc2VjKGNvbnN0IG5zdGltZV90ICp0aW1lKSB7Ci0J bnN0aW1lX2Fzc2VydF9pbml0aWFsaXplZCh0aW1lKTsKLQlyZXR1cm4gdGltZS0+bnMgLyBCSUxM SU9OOwotfQotCi11aW50NjRfdAotbnN0aW1lX25zZWMoY29uc3QgbnN0aW1lX3QgKnRpbWUpIHsK LQluc3RpbWVfYXNzZXJ0X2luaXRpYWxpemVkKHRpbWUpOwotCXJldHVybiB0aW1lLT5ucyAlIEJJ TExJT047Ci19Ci0KLXZvaWQKLW5zdGltZV9jb3B5KG5zdGltZV90ICp0aW1lLCBjb25zdCBuc3Rp bWVfdCAqc291cmNlKSB7Ci0JLyogU291cmNlIGlzIHJlcXVpcmVkIHRvIGJlIGluaXRpYWxpemVk LiAqLwotCW5zdGltZV9hc3NlcnRfaW5pdGlhbGl6ZWQoc291cmNlKTsKLQkqdGltZSA9ICpzb3Vy Y2U7Ci0JbnN0aW1lX2Fzc2VydF9pbml0aWFsaXplZCh0aW1lKTsKLX0KLQotaW50Ci1uc3RpbWVf Y29tcGFyZShjb25zdCBuc3RpbWVfdCAqYSwgY29uc3QgbnN0aW1lX3QgKmIpIHsKLQluc3RpbWVf cGFpcl9hc3NlcnRfaW5pdGlhbGl6ZWQoYSwgYik7Ci0JcmV0dXJuIChhLT5ucyA+IGItPm5zKSAt IChhLT5ucyA8IGItPm5zKTsKLX0KLQotdm9pZAotbnN0aW1lX2FkZChuc3RpbWVfdCAqdGltZSwg Y29uc3QgbnN0aW1lX3QgKmFkZGVuZCkgewotCW5zdGltZV9wYWlyX2Fzc2VydF9pbml0aWFsaXpl ZCh0aW1lLCBhZGRlbmQpOwotCWFzc2VydChVSU5UNjRfTUFYIC0gdGltZS0+bnMgPj0gYWRkZW5k LT5ucyk7Ci0KLQluc3RpbWVfaW5pdGlhbGl6ZV9vcGVyYW5kKHRpbWUpOwotCXRpbWUtPm5zICs9 IGFkZGVuZC0+bnM7Ci19Ci0KLXZvaWQKLW5zdGltZV9pYWRkKG5zdGltZV90ICp0aW1lLCB1aW50 NjRfdCBhZGRlbmQpIHsKLQluc3RpbWVfYXNzZXJ0X2luaXRpYWxpemVkKHRpbWUpOwotCWFzc2Vy dChVSU5UNjRfTUFYIC0gdGltZS0+bnMgPj0gYWRkZW5kKTsKLQotCW5zdGltZV9pbml0aWFsaXpl X29wZXJhbmQodGltZSk7Ci0JdGltZS0+bnMgKz0gYWRkZW5kOwotfQotCi12b2lkCi1uc3RpbWVf c3VidHJhY3QobnN0aW1lX3QgKnRpbWUsIGNvbnN0IG5zdGltZV90ICpzdWJ0cmFoZW5kKSB7Ci0J bnN0aW1lX3BhaXJfYXNzZXJ0X2luaXRpYWxpemVkKHRpbWUsIHN1YnRyYWhlbmQpOwotCWFzc2Vy dChuc3RpbWVfY29tcGFyZSh0aW1lLCBzdWJ0cmFoZW5kKSA+PSAwKTsKLQotCS8qIE5vIGluaXRp YWxpemUgb3BlcmFuZCAtLSBzdWJ0cmFjdGlvbiBtdXN0IGJlIGluaXRpYWxpemVkLiAqLwotCXRp bWUtPm5zIC09IHN1YnRyYWhlbmQtPm5zOwotfQotCi12b2lkCi1uc3RpbWVfaXN1YnRyYWN0KG5z dGltZV90ICp0aW1lLCB1aW50NjRfdCBzdWJ0cmFoZW5kKSB7Ci0JbnN0aW1lX2Fzc2VydF9pbml0 aWFsaXplZCh0aW1lKTsKLQlhc3NlcnQodGltZS0+bnMgPj0gc3VidHJhaGVuZCk7Ci0KLQkvKiBO byBpbml0aWFsaXplIG9wZXJhbmQgLS0gc3VidHJhY3Rpb24gbXVzdCBiZSBpbml0aWFsaXplZC4g Ki8KLQl0aW1lLT5ucyAtPSBzdWJ0cmFoZW5kOwotfQotCi12b2lkCi1uc3RpbWVfaW11bHRpcGx5 KG5zdGltZV90ICp0aW1lLCB1aW50NjRfdCBtdWx0aXBsaWVyKSB7Ci0JbnN0aW1lX2Fzc2VydF9p bml0aWFsaXplZCh0aW1lKTsKLQlhc3NlcnQoKCgodGltZS0+bnMgfCBtdWx0aXBsaWVyKSAmIChV SU5UNjRfTUFYIDw8IChzaXplb2YodWludDY0X3QpIDw8Ci0JICAgIDIpKSkgPT0gMCkgfHwgKCh0 aW1lLT5ucyAqIG11bHRpcGxpZXIpIC8gbXVsdGlwbGllciA9PSB0aW1lLT5ucykpOwotCi0JbnN0 aW1lX2luaXRpYWxpemVfb3BlcmFuZCh0aW1lKTsKLQl0aW1lLT5ucyAqPSBtdWx0aXBsaWVyOwot fQotCi12b2lkCi1uc3RpbWVfaWRpdmlkZShuc3RpbWVfdCAqdGltZSwgdWludDY0X3QgZGl2aXNv cikgewotCW5zdGltZV9hc3NlcnRfaW5pdGlhbGl6ZWQodGltZSk7Ci0JYXNzZXJ0KGRpdmlzb3Ig IT0gMCk7Ci0KLQluc3RpbWVfaW5pdGlhbGl6ZV9vcGVyYW5kKHRpbWUpOwotCXRpbWUtPm5zIC89 IGRpdmlzb3I7Ci19Ci0KLXVpbnQ2NF90Ci1uc3RpbWVfZGl2aWRlKGNvbnN0IG5zdGltZV90ICp0 aW1lLCBjb25zdCBuc3RpbWVfdCAqZGl2aXNvcikgewotCW5zdGltZV9wYWlyX2Fzc2VydF9pbml0 aWFsaXplZCh0aW1lLCBkaXZpc29yKTsKLQlhc3NlcnQoZGl2aXNvci0+bnMgIT0gMCk7Ci0KLQkv KiBObyBpbml0aWFsaXplIG9wZXJhbmQgLS0gKnRpbWUgaXRzZWxmIHJlbWFpbnMgdW5jaGFuZ2Vk LiAqLwotCXJldHVybiB0aW1lLT5ucyAvIGRpdmlzb3ItPm5zOwotfQotCi0vKiBSZXR1cm5zIHRp bWUgc2luY2UgKnBhc3QsIHcvbyB1cGRhdGluZyAqcGFzdC4gKi8KLXVpbnQ2NF90Ci1uc3RpbWVf bnNfc2luY2UoY29uc3QgbnN0aW1lX3QgKnBhc3QpIHsKLQluc3RpbWVfYXNzZXJ0X2luaXRpYWxp emVkKHBhc3QpOwotCi0JbnN0aW1lX3Qgbm93OwotCW5zdGltZV9jb3B5KCZub3csIHBhc3QpOwot CW5zdGltZV91cGRhdGUoJm5vdyk7Ci0KLQlhc3NlcnQobnN0aW1lX2NvbXBhcmUoJm5vdywgcGFz dCkgPj0gMCk7Ci0JcmV0dXJuIG5vdy5ucyAtIHBhc3QtPm5zOwotfQotCi0jaWZkZWYgX1dJTjMy Ci0jICBkZWZpbmUgTlNUSU1FX01PTk9UT05JQyB0cnVlCi1zdGF0aWMgdm9pZAotbnN0aW1lX2dl dChuc3RpbWVfdCAqdGltZSkgewotCUZJTEVUSU1FIGZ0OwotCXVpbnQ2NF90IHRpY2tzXzEwMG5z OwotCi0JR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKLQl0aWNrc18xMDBucyA9ICgoKHVp bnQ2NF90KWZ0LmR3SGlnaERhdGVUaW1lKSA8PCAzMikgfCBmdC5kd0xvd0RhdGVUaW1lOwotCi0J bnN0aW1lX2luaXQodGltZSwgdGlja3NfMTAwbnMgKiAxMDApOwotfQotI2VsaWYgZGVmaW5lZChK RU1BTExPQ19IQVZFX0NMT0NLX01PTk9UT05JQ19DT0FSU0UpCi0jICBkZWZpbmUgTlNUSU1FX01P Tk9UT05JQyB0cnVlCi1zdGF0aWMgdm9pZAotbnN0aW1lX2dldChuc3RpbWVfdCAqdGltZSkgewot CXN0cnVjdCB0aW1lc3BlYyB0czsKLQotCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NP QVJTRSwgJnRzKTsKLQluc3RpbWVfaW5pdDIodGltZSwgdHMudHZfc2VjLCB0cy50dl9uc2VjKTsK LX0KLSNlbGlmIGRlZmluZWQoSkVNQUxMT0NfSEFWRV9DTE9DS19NT05PVE9OSUMpCi0jICBkZWZp bmUgTlNUSU1FX01PTk9UT05JQyB0cnVlCi1zdGF0aWMgdm9pZAotbnN0aW1lX2dldChuc3RpbWVf dCAqdGltZSkgewotCXN0cnVjdCB0aW1lc3BlYyB0czsKLQotCWNsb2NrX2dldHRpbWUoQ0xPQ0tf TU9OT1RPTklDLCAmdHMpOwotCW5zdGltZV9pbml0Mih0aW1lLCB0cy50dl9zZWMsIHRzLnR2X25z ZWMpOwotfQotI2VsaWYgZGVmaW5lZChKRU1BTExPQ19IQVZFX01BQ0hfQUJTT0xVVEVfVElNRSkK LSMgIGRlZmluZSBOU1RJTUVfTU9OT1RPTklDIHRydWUKLXN0YXRpYyB2b2lkCi1uc3RpbWVfZ2V0 KG5zdGltZV90ICp0aW1lKSB7Ci0JbnN0aW1lX2luaXQodGltZSwgbWFjaF9hYnNvbHV0ZV90aW1l KCkpOwotfQotI2Vsc2UKLSMgIGRlZmluZSBOU1RJTUVfTU9OT1RPTklDIGZhbHNlCi1zdGF0aWMg dm9pZAotbnN0aW1lX2dldChuc3RpbWVfdCAqdGltZSkgewotCXN0cnVjdCB0aW1ldmFsIHR2Owot Ci0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JbnN0aW1lX2luaXQyKHRpbWUsIHR2LnR2X3Nl YywgdHYudHZfdXNlYyAqIDEwMDApOwotfQotI2VuZGlmCi0KLXN0YXRpYyBib29sCi1uc3RpbWVf bW9ub3RvbmljX2ltcGwodm9pZCkgewotCXJldHVybiBOU1RJTUVfTU9OT1RPTklDOwotI3VuZGVm IE5TVElNRV9NT05PVE9OSUMKLX0KLW5zdGltZV9tb25vdG9uaWNfdCAqSkVUX01VVEFCTEUgbnN0 aW1lX21vbm90b25pYyA9IG5zdGltZV9tb25vdG9uaWNfaW1wbDsKLQotcHJvZl90aW1lX3Jlc190 IG9wdF9wcm9mX3RpbWVfcmVzID0KLQlwcm9mX3RpbWVfcmVzX2RlZmF1bHQ7Ci0KLWNvbnN0IGNo YXIgKnByb2ZfdGltZV9yZXNfbW9kZV9uYW1lc1tdID0gewotCSJkZWZhdWx0IiwKLQkiaGlnaCIs Ci19OwotCi0KLXN0YXRpYyB2b2lkCi1uc3RpbWVfZ2V0X3JlYWx0aW1lKG5zdGltZV90ICp0aW1l KSB7Ci0jaWYgZGVmaW5lZChKRU1BTExPQ19IQVZFX0NMT0NLX1JFQUxUSU1FKSAmJiAhZGVmaW5l ZChfV0lOMzIpCi0Jc3RydWN0IHRpbWVzcGVjIHRzOwotCi0JY2xvY2tfZ2V0dGltZShDTE9DS19S RUFMVElNRSwgJnRzKTsKLQluc3RpbWVfaW5pdDIodGltZSwgdHMudHZfc2VjLCB0cy50dl9uc2Vj KTsKLSNlbHNlCi0JdW5yZWFjaGFibGUoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotbnN0 aW1lX3Byb2ZfdXBkYXRlX2ltcGwobnN0aW1lX3QgKnRpbWUpIHsKLQluc3RpbWVfdCBvbGRfdGlt ZTsKLQotCW5zdGltZV9jb3B5KCZvbGRfdGltZSwgdGltZSk7Ci0KLQlpZiAob3B0X3Byb2ZfdGlt ZV9yZXMgPT0gcHJvZl90aW1lX3Jlc19oaWdoKSB7Ci0JCW5zdGltZV9nZXRfcmVhbHRpbWUodGlt ZSk7Ci0JfSBlbHNlIHsKLQkJbnN0aW1lX2dldCh0aW1lKTsKLQl9Ci19Ci1uc3RpbWVfcHJvZl91 cGRhdGVfdCAqSkVUX01VVEFCTEUgbnN0aW1lX3Byb2ZfdXBkYXRlID0gbnN0aW1lX3Byb2ZfdXBk YXRlX2ltcGw7Ci0KLXN0YXRpYyB2b2lkCi1uc3RpbWVfdXBkYXRlX2ltcGwobnN0aW1lX3QgKnRp bWUpIHsKLQluc3RpbWVfdCBvbGRfdGltZTsKLQotCW5zdGltZV9jb3B5KCZvbGRfdGltZSwgdGlt ZSk7Ci0JbnN0aW1lX2dldCh0aW1lKTsKLQotCS8qIEhhbmRsZSBub24tbW9ub3RvbmljIGNsb2Nr cy4gKi8KLQlpZiAodW5saWtlbHkobnN0aW1lX2NvbXBhcmUoJm9sZF90aW1lLCB0aW1lKSA+IDAp KSB7Ci0JCW5zdGltZV9jb3B5KHRpbWUsICZvbGRfdGltZSk7Ci0JfQotfQotbnN0aW1lX3VwZGF0 ZV90ICpKRVRfTVVUQUJMRSBuc3RpbWVfdXBkYXRlID0gbnN0aW1lX3VwZGF0ZV9pbXBsOwotCi12 b2lkCi1uc3RpbWVfaW5pdF91cGRhdGUobnN0aW1lX3QgKnRpbWUpIHsKLQluc3RpbWVfaW5pdF96 ZXJvKHRpbWUpOwotCW5zdGltZV91cGRhdGUodGltZSk7Ci19Ci0KLXZvaWQKLW5zdGltZV9wcm9m X2luaXRfdXBkYXRlKG5zdGltZV90ICp0aW1lKSB7Ci0JbnN0aW1lX2luaXRfemVybyh0aW1lKTsK LQluc3RpbWVfcHJvZl91cGRhdGUodGltZSk7Ci19Ci0KLQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wYS5jIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3BhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGViN2U0NjIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvc3JjL3BhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3Nhbi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2hwYS5oIgotCi1zdGF0aWMgdm9pZAotcGFfbmFjdGl2ZV9hZGQocGFfc2hhcmRfdCAqc2hhcmQs IHNpemVfdCBhZGRfcGFnZXMpIHsKLQlhdG9taWNfZmV0Y2hfYWRkX3p1KCZzaGFyZC0+bmFjdGl2 ZSwgYWRkX3BhZ2VzLCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYV9uYWN0 aXZlX3N1YihwYV9zaGFyZF90ICpzaGFyZCwgc2l6ZV90IHN1Yl9wYWdlcykgewotCWFzc2VydChh dG9taWNfbG9hZF96dSgmc2hhcmQtPm5hY3RpdmUsIEFUT01JQ19SRUxBWEVEKSA+PSBzdWJfcGFn ZXMpOwotCWF0b21pY19mZXRjaF9zdWJfenUoJnNoYXJkLT5uYWN0aXZlLCBzdWJfcGFnZXMsIEFU T01JQ19SRUxBWEVEKTsKLX0KLQotYm9vbAotcGFfY2VudHJhbF9pbml0KHBhX2NlbnRyYWxfdCAq Y2VudHJhbCwgYmFzZV90ICpiYXNlLCBib29sIGhwYSwKLSAgICBocGFfaG9va3NfdCAqaHBhX2hv b2tzKSB7Ci0JYm9vbCBlcnI7Ci0JaWYgKGhwYSkgewotCQllcnIgPSBocGFfY2VudHJhbF9pbml0 KCZjZW50cmFsLT5ocGEsIGJhc2UsIGhwYV9ob29rcyk7Ci0JCWlmIChlcnIpIHsKLQkJCXJldHVy biB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotYm9vbAotcGFfc2hhcmRfaW5p dCh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLCBwYV9jZW50cmFsX3QgKmNlbnRyYWws Ci0gICAgZW1hcF90ICplbWFwLCBiYXNlX3QgKmJhc2UsIHVuc2lnbmVkIGluZCwgcGFfc2hhcmRf c3RhdHNfdCAqc3RhdHMsCi0gICAgbWFsbG9jX211dGV4X3QgKnN0YXRzX210eCwgbnN0aW1lX3Qg KmN1cl90aW1lLAotICAgIHNpemVfdCBwYWNfb3ZlcnNpemVfdGhyZXNob2xkLCBzc2l6ZV90IGRp cnR5X2RlY2F5X21zLAotICAgIHNzaXplX3QgbXV6enlfZGVjYXlfbXMpIHsKLQkvKiBUaGlzIHdp bGwgY2hhbmdlIGV2ZW50dWFsbHksIGJ1dCBmb3Igbm93IGl0IHNob3VsZCBob2xkLiAqLwotCWFz c2VydChiYXNlX2luZF9nZXQoYmFzZSkgPT0gaW5kKTsKLQlpZiAoZWRhdGFfY2FjaGVfaW5pdCgm c2hhcmQtPmVkYXRhX2NhY2hlLCBiYXNlKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAo cGFjX2luaXQodHNkbiwgJnNoYXJkLT5wYWMsIGJhc2UsIGVtYXAsICZzaGFyZC0+ZWRhdGFfY2Fj aGUsCi0JICAgIGN1cl90aW1lLCBwYWNfb3ZlcnNpemVfdGhyZXNob2xkLCBkaXJ0eV9kZWNheV9t cywgbXV6enlfZGVjYXlfbXMsCi0JICAgICZzdGF0cy0+cGFjX3N0YXRzLCBzdGF0c19tdHgpKSB7 Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXNoYXJkLT5pbmQgPSBpbmQ7Ci0KLQlzaGFyZC0+ZXZl cl91c2VkX2hwYSA9IGZhbHNlOwotCWF0b21pY19zdG9yZV9iKCZzaGFyZC0+dXNlX2hwYSwgZmFs c2UsIEFUT01JQ19SRUxBWEVEKTsKLQotCWF0b21pY19zdG9yZV96dSgmc2hhcmQtPm5hY3RpdmUs IDAsIEFUT01JQ19SRUxBWEVEKTsKLQotCXNoYXJkLT5zdGF0c19tdHggPSBzdGF0c19tdHg7Ci0J c2hhcmQtPnN0YXRzID0gc3RhdHM7Ci0JbWVtc2V0KHNoYXJkLT5zdGF0cywgMCwgc2l6ZW9mKCpz aGFyZC0+c3RhdHMpKTsKLQotCXNoYXJkLT5jZW50cmFsID0gY2VudHJhbDsKLQlzaGFyZC0+ZW1h cCA9IGVtYXA7Ci0Jc2hhcmQtPmJhc2UgPSBiYXNlOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1i b29sCi1wYV9zaGFyZF9lbmFibGVfaHBhKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQs Ci0gICAgY29uc3QgaHBhX3NoYXJkX29wdHNfdCAqaHBhX29wdHMsIGNvbnN0IHNlY19vcHRzX3Qg KmhwYV9zZWNfb3B0cykgewotCWlmIChocGFfc2hhcmRfaW5pdCgmc2hhcmQtPmhwYV9zaGFyZCwg JnNoYXJkLT5jZW50cmFsLT5ocGEsIHNoYXJkLT5lbWFwLAotCSAgICBzaGFyZC0+YmFzZSwgJnNo YXJkLT5lZGF0YV9jYWNoZSwgc2hhcmQtPmluZCwgaHBhX29wdHMpKSB7Ci0JCXJldHVybiB0cnVl OwotCX0KLQlpZiAoc2VjX2luaXQodHNkbiwgJnNoYXJkLT5ocGFfc2VjLCBzaGFyZC0+YmFzZSwg JnNoYXJkLT5ocGFfc2hhcmQucGFpLAotCSAgICBocGFfc2VjX29wdHMpKSB7Ci0JCXJldHVybiB0 cnVlOwotCX0KLQlzaGFyZC0+ZXZlcl91c2VkX2hwYSA9IHRydWU7Ci0JYXRvbWljX3N0b3JlX2Io JnNoYXJkLT51c2VfaHBhLCB0cnVlLCBBVE9NSUNfUkVMQVhFRCk7Ci0KLQlyZXR1cm4gZmFsc2U7 Ci19Ci0KLXZvaWQKLXBhX3NoYXJkX2Rpc2FibGVfaHBhKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRf dCAqc2hhcmQpIHsKLQlhdG9taWNfc3RvcmVfYigmc2hhcmQtPnVzZV9ocGEsIGZhbHNlLCBBVE9N SUNfUkVMQVhFRCk7Ci0JaWYgKHNoYXJkLT5ldmVyX3VzZWRfaHBhKSB7Ci0JCXNlY19kaXNhYmxl KHRzZG4sICZzaGFyZC0+aHBhX3NlYyk7Ci0JCWhwYV9zaGFyZF9kaXNhYmxlKHRzZG4sICZzaGFy ZC0+aHBhX3NoYXJkKTsKLQl9Ci19Ci0KLXZvaWQKLXBhX3NoYXJkX3Jlc2V0KHRzZG5fdCAqdHNk biwgcGFfc2hhcmRfdCAqc2hhcmQpIHsKLQlhdG9taWNfc3RvcmVfenUoJnNoYXJkLT5uYWN0aXZl LCAwLCBBVE9NSUNfUkVMQVhFRCk7Ci0JaWYgKHNoYXJkLT5ldmVyX3VzZWRfaHBhKSB7Ci0JCXNl Y19mbHVzaCh0c2RuLCAmc2hhcmQtPmhwYV9zZWMpOwotCX0KLX0KLQotc3RhdGljIGJvb2wKLXBh X3NoYXJkX3VzZXNfaHBhKHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JcmV0dXJuIGF0b21pY19sb2Fk X2IoJnNoYXJkLT51c2VfaHBhLCBBVE9NSUNfUkVMQVhFRCk7Ci19Ci0KLXZvaWQKLXBhX3NoYXJk X2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkgewotCXBhY19kZXN0cm95 KHRzZG4sICZzaGFyZC0+cGFjKTsKLQlpZiAoc2hhcmQtPmV2ZXJfdXNlZF9ocGEpIHsKLQkJc2Vj X2ZsdXNoKHRzZG4sICZzaGFyZC0+aHBhX3NlYyk7Ci0JCWhwYV9zaGFyZF9kaXNhYmxlKHRzZG4s ICZzaGFyZC0+aHBhX3NoYXJkKTsKLQl9Ci19Ci0KLXN0YXRpYyBwYWlfdCAqCi1wYV9nZXRfcGFp KHBhX3NoYXJkX3QgKnNoYXJkLCBlZGF0YV90ICplZGF0YSkgewotCXJldHVybiAoZWRhdGFfcGFp X2dldChlZGF0YSkgPT0gRVhURU5UX1BBSV9QQUMKLQkgICAgPyAmc2hhcmQtPnBhYy5wYWkgOiAm c2hhcmQtPmhwYV9zZWMucGFpKTsKLX0KLQotZWRhdGFfdCAqCi1wYV9hbGxvYyh0c2RuX3QgKnRz ZG4sIHBhX3NoYXJkX3QgKnNoYXJkLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwKLSAg ICBib29sIHNsYWIsIHN6aW5kX3Qgc3ppbmQsIGJvb2wgemVybywgYm9vbCBndWFyZGVkLAotICAg IGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhf dG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19D T1JFLCAwKTsKLQlhc3NlcnQoIWd1YXJkZWQgfHwgYWxpZ25tZW50IDw9IFBBR0UpOwotCi0JZWRh dGFfdCAqZWRhdGEgPSBOVUxMOwotCWlmICghZ3VhcmRlZCAmJiBwYV9zaGFyZF91c2VzX2hwYShz aGFyZCkpIHsKLQkJZWRhdGEgPSBwYWlfYWxsb2ModHNkbiwgJnNoYXJkLT5ocGFfc2VjLnBhaSwg c2l6ZSwgYWxpZ25tZW50LAotCQkgICAgemVybywgLyogZ3VhcmRlZCAqLyBmYWxzZSwgc2xhYiwg ZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCX0KLQkvKgotCSAqIEZhbGwgYmFjayB0byB0aGUg UEFDIGlmIHRoZSBIUEEgaXMgb2ZmIG9yIGNvdWxkbid0IHNlcnZlIHRoZSBnaXZlbgotCSAqIGFs bG9jYXRpb24gcmVxdWVzdC4KLQkgKi8KLQlpZiAoZWRhdGEgPT0gTlVMTCkgewotCQllZGF0YSA9 IHBhaV9hbGxvYyh0c2RuLCAmc2hhcmQtPnBhYy5wYWksIHNpemUsIGFsaWdubWVudCwgemVybywK LQkJICAgIGd1YXJkZWQsIHNsYWIsIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQl9Ci0JaWYg KGVkYXRhICE9IE5VTEwpIHsKLQkJYXNzZXJ0KGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA9PSBzaXpl KTsKLQkJcGFfbmFjdGl2ZV9hZGQoc2hhcmQsIHNpemUgPj4gTEdfUEFHRSk7Ci0JCWVtYXBfcmVt YXAodHNkbiwgc2hhcmQtPmVtYXAsIGVkYXRhLCBzemluZCwgc2xhYik7Ci0JCWVkYXRhX3N6aW5k X3NldChlZGF0YSwgc3ppbmQpOwotCQllZGF0YV9zbGFiX3NldChlZGF0YSwgc2xhYik7Ci0JCWlm IChzbGFiICYmIChzaXplID4gMiAqIFBBR0UpKSB7Ci0JCQllbWFwX3JlZ2lzdGVyX2ludGVyaW9y KHRzZG4sIHNoYXJkLT5lbWFwLCBlZGF0YSwgc3ppbmQpOwotCQl9Ci0JCWFzc2VydChlZGF0YV9h cmVuYV9pbmRfZ2V0KGVkYXRhKSA9PSBzaGFyZC0+aW5kKTsKLQl9Ci0JcmV0dXJuIGVkYXRhOwot fQotCi1ib29sCi1wYV9leHBhbmQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZWRh dGFfdCAqZWRhdGEsIHNpemVfdCBvbGRfc2l6ZSwKLSAgICBzaXplX3QgbmV3X3NpemUsIHN6aW5k X3Qgc3ppbmQsIGJvb2wgemVybywgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlh c3NlcnQobmV3X3NpemUgPiBvbGRfc2l6ZSk7Ci0JYXNzZXJ0KGVkYXRhX3NpemVfZ2V0KGVkYXRh KSA9PSBvbGRfc2l6ZSk7Ci0JYXNzZXJ0KChuZXdfc2l6ZSAmIFBBR0VfTUFTSykgPT0gMCk7Ci0J aWYgKGVkYXRhX2d1YXJkZWRfZ2V0KGVkYXRhKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0Jc2l6 ZV90IGV4cGFuZF9hbW91bnQgPSBuZXdfc2l6ZSAtIG9sZF9zaXplOwotCi0JcGFpX3QgKnBhaSA9 IHBhX2dldF9wYWkoc2hhcmQsIGVkYXRhKTsKLQotCWJvb2wgZXJyb3IgPSBwYWlfZXhwYW5kKHRz ZG4sIHBhaSwgZWRhdGEsIG9sZF9zaXplLCBuZXdfc2l6ZSwgemVybywKLQkgICAgZGVmZXJyZWRf d29ya19nZW5lcmF0ZWQpOwotCWlmIChlcnJvcikgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlw YV9uYWN0aXZlX2FkZChzaGFyZCwgZXhwYW5kX2Ftb3VudCA+PiBMR19QQUdFKTsKLQllZGF0YV9z emluZF9zZXQoZWRhdGEsIHN6aW5kKTsKLQllbWFwX3JlbWFwKHRzZG4sIHNoYXJkLT5lbWFwLCBl ZGF0YSwgc3ppbmQsIC8qIHNsYWIgKi8gZmFsc2UpOwotCXJldHVybiBmYWxzZTsKLX0KLQotYm9v bAotcGFfc2hyaW5rKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQsIGVkYXRhX3QgKmVk YXRhLCBzaXplX3Qgb2xkX3NpemUsCi0gICAgc2l6ZV90IG5ld19zaXplLCBzemluZF90IHN6aW5k LCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgewotCWFzc2VydChuZXdfc2l6ZSA8IG9s ZF9zaXplKTsKLQlhc3NlcnQoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID09IG9sZF9zaXplKTsKLQlh c3NlcnQoKG5ld19zaXplICYgUEFHRV9NQVNLKSA9PSAwKTsKLQlpZiAoZWRhdGFfZ3VhcmRlZF9n ZXQoZWRhdGEpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlzaXplX3Qgc2hyaW5rX2Ftb3VudCA9 IG9sZF9zaXplIC0gbmV3X3NpemU7Ci0KLQlwYWlfdCAqcGFpID0gcGFfZ2V0X3BhaShzaGFyZCwg ZWRhdGEpOwotCWJvb2wgZXJyb3IgPSBwYWlfc2hyaW5rKHRzZG4sIHBhaSwgZWRhdGEsIG9sZF9z aXplLCBuZXdfc2l6ZSwKLQkgICAgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCWlmIChlcnJv cikgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcGFfbmFjdGl2ZV9zdWIoc2hhcmQsIHNocmlua19h bW91bnQgPj4gTEdfUEFHRSk7Ci0KLQllZGF0YV9zemluZF9zZXQoZWRhdGEsIHN6aW5kKTsKLQll bWFwX3JlbWFwKHRzZG4sIHNoYXJkLT5lbWFwLCBlZGF0YSwgc3ppbmQsIC8qIHNsYWIgKi8gZmFs c2UpOwotCXJldHVybiBmYWxzZTsKLX0KLQotdm9pZAotcGFfZGFsbG9jKHRzZG5fdCAqdHNkbiwg cGFfc2hhcmRfdCAqc2hhcmQsIGVkYXRhX3QgKmVkYXRhLAotICAgIGJvb2wgKmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKSB7Ci0JZW1hcF9yZW1hcCh0c2RuLCBzaGFyZC0+ZW1hcCwgZWRhdGEsIFND X05TSVpFUywgLyogc2xhYiAqLyBmYWxzZSk7Ci0JaWYgKGVkYXRhX3NsYWJfZ2V0KGVkYXRhKSkg ewotCQllbWFwX2RlcmVnaXN0ZXJfaW50ZXJpb3IodHNkbiwgc2hhcmQtPmVtYXAsIGVkYXRhKTsK LQkJLyoKLQkJICogVGhlIHNsYWIgc3RhdGUgb2YgdGhlIGV4dGVudCBpc24ndCBjbGVhcmVkLiAg SXQgbWF5IGJlIHVzZWQKLQkJICogYnkgdGhlIHBhaSBpbXBsZW1lbnRhdGlvbiwgZS5nLiB0byBt YWtlIGNhY2hpbmcgZGVjaXNpb25zLgotCQkgKi8KLQl9Ci0JZWRhdGFfYWRkcl9zZXQoZWRhdGEs IGVkYXRhX2Jhc2VfZ2V0KGVkYXRhKSk7Ci0JZWRhdGFfc3ppbmRfc2V0KGVkYXRhLCBTQ19OU0la RVMpOwotCXBhX25hY3RpdmVfc3ViKHNoYXJkLCBlZGF0YV9zaXplX2dldChlZGF0YSkgPj4gTEdf UEFHRSk7Ci0JcGFpX3QgKnBhaSA9IHBhX2dldF9wYWkoc2hhcmQsIGVkYXRhKTsKLQlwYWlfZGFs bG9jKHRzZG4sIHBhaSwgZWRhdGEsIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLX0KLQotYm9v bAotcGFfc2hhcmRfcmV0YWluX2dyb3dfbGltaXRfZ2V0X3NldCh0c2RuX3QgKnRzZG4sIHBhX3No YXJkX3QgKnNoYXJkLAotICAgIHNpemVfdCAqb2xkX2xpbWl0LCBzaXplX3QgKm5ld19saW1pdCkg ewotCXJldHVybiBwYWNfcmV0YWluX2dyb3dfbGltaXRfZ2V0X3NldCh0c2RuLCAmc2hhcmQtPnBh Yywgb2xkX2xpbWl0LAotCSAgICBuZXdfbGltaXQpOwotfQotCi1ib29sCi1wYV9kZWNheV9tc19z ZXQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUs Ci0gICAgc3NpemVfdCBkZWNheV9tcywgcGFjX3B1cmdlX2VhZ2VybmVzc190IGVhZ2VybmVzcykg ewotCXJldHVybiBwYWNfZGVjYXlfbXNfc2V0KHRzZG4sICZzaGFyZC0+cGFjLCBzdGF0ZSwgZGVj YXlfbXMsIGVhZ2VybmVzcyk7Ci19Ci0KLXNzaXplX3QKLXBhX2RlY2F5X21zX2dldChwYV9zaGFy ZF90ICpzaGFyZCwgZXh0ZW50X3N0YXRlX3Qgc3RhdGUpIHsKLQlyZXR1cm4gcGFjX2RlY2F5X21z X2dldCgmc2hhcmQtPnBhYywgc3RhdGUpOwotfQotCi12b2lkCi1wYV9zaGFyZF9zZXRfZGVmZXJy YWxfYWxsb3dlZCh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLAotICAgIGJvb2wgZGVm ZXJyYWxfYWxsb3dlZCkgewotCWlmIChwYV9zaGFyZF91c2VzX2hwYShzaGFyZCkpIHsKLQkJaHBh X3NoYXJkX3NldF9kZWZlcnJhbF9hbGxvd2VkKHRzZG4sICZzaGFyZC0+aHBhX3NoYXJkLAotCQkg ICAgZGVmZXJyYWxfYWxsb3dlZCk7Ci0JfQotfQotCi12b2lkCi1wYV9zaGFyZF9kb19kZWZlcnJl ZF93b3JrKHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQpIHsKLQlpZiAocGFfc2hhcmRf dXNlc19ocGEoc2hhcmQpKSB7Ci0JCWhwYV9zaGFyZF9kb19kZWZlcnJlZF93b3JrKHRzZG4sICZz aGFyZC0+aHBhX3NoYXJkKTsKLQl9Ci19Ci0KLS8qCi0gKiBHZXQgdGltZSB1bnRpbCBuZXh0IGRl ZmVycmVkIHdvcmsgb3VnaHQgdG8gaGFwcGVuLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUKLSAqIHRo aW5ncyB0aGF0IGhhdmUgYmVlbiBkZWZlcnJlZCwgdGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRo ZSB0aW1lIHVudGlsCi0gKiB0aGUgc29vbmVzdCBvZiB0aG9zZSB0aGluZ3MuCi0gKi8KLXVpbnQ2 NF90Ci1wYV9zaGFyZF90aW1lX3VudGlsX2RlZmVycmVkX3dvcmsodHNkbl90ICp0c2RuLCBwYV9z aGFyZF90ICpzaGFyZCkgewotCXVpbnQ2NF90IHRpbWUgPSBwYWlfdGltZV91bnRpbF9kZWZlcnJl ZF93b3JrKHRzZG4sICZzaGFyZC0+cGFjLnBhaSk7Ci0JaWYgKHRpbWUgPT0gQkFDS0dST1VORF9U SFJFQURfREVGRVJSRURfTUlOKSB7Ci0JCXJldHVybiB0aW1lOwotCX0KLQotCWlmIChwYV9zaGFy ZF91c2VzX2hwYShzaGFyZCkpIHsKLQkJdWludDY0X3QgaHBhID0KLQkJICAgIHBhaV90aW1lX3Vu dGlsX2RlZmVycmVkX3dvcmsodHNkbiwgJnNoYXJkLT5ocGFfc2hhcmQucGFpKTsKLQkJaWYgKGhw YSA8IHRpbWUpIHsKLQkJCXRpbWUgPSBocGE7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRpbWU7Ci19Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Bh X2V4dHJhLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFf ZXh0cmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY0ODhiZS4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFfZXh0cmEu YworKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0vKgotICogVGhpcyBmaWxlIGlzIGxvZ2lj YWxseSBwYXJ0IG9mIHRoZSBQQSBtb2R1bGUuICBXaGlsZSBwYS5jIGNvbnRhaW5zIHRoZSBjb3Jl Ci0gKiBhbGxvY2F0b3IgZnVuY3Rpb25hbGl0eSwgdGhpcyBmaWxlIGNvbnRhaW5zIGJvcmluZyBp bnRlZ3JhdGlvbiBmdW5jdGlvbmFsaXR5OwotICogdGhpbmdzIGxpa2UgdGhlIHByZS0gYW5kIHBv c3QtIGZvcmsgaGFuZGxlcnMsIGFuZCBzdGF0cyBtZXJnaW5nIGZvciBDVEwKLSAqIHJlZnJlc2hl cy4KLSAqLwotCi12b2lkCi1wYV9zaGFyZF9wcmVmb3JrMCh0c2RuX3QgKnRzZG4sIHBhX3NoYXJk X3QgKnNoYXJkKSB7Ci0JbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnNoYXJkLT5wYWMuZGVj YXlfZGlydHkubXR4KTsKLQltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmc2hhcmQtPnBhYy5k ZWNheV9tdXp6eS5tdHgpOwotfQotCi12b2lkCi1wYV9zaGFyZF9wcmVmb3JrMih0c2RuX3QgKnRz ZG4sIHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JaWYgKHNoYXJkLT5ldmVyX3VzZWRfaHBhKSB7Ci0J CXNlY19wcmVmb3JrMih0c2RuLCAmc2hhcmQtPmhwYV9zZWMpOwotCX0KLX0KLQotdm9pZAotcGFf c2hhcmRfcHJlZm9yazModHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkgewotCW1hbGxv Y19tdXRleF9wcmVmb3JrKHRzZG4sICZzaGFyZC0+cGFjLmdyb3dfbXR4KTsKLQlpZiAoc2hhcmQt PmV2ZXJfdXNlZF9ocGEpIHsKLQkJaHBhX3NoYXJkX3ByZWZvcmszKHRzZG4sICZzaGFyZC0+aHBh X3NoYXJkKTsKLQl9Ci19Ci0KLXZvaWQKLXBhX3NoYXJkX3ByZWZvcms0KHRzZG5fdCAqdHNkbiwg cGFfc2hhcmRfdCAqc2hhcmQpIHsKLQllY2FjaGVfcHJlZm9yayh0c2RuLCAmc2hhcmQtPnBhYy5l Y2FjaGVfZGlydHkpOwotCWVjYWNoZV9wcmVmb3JrKHRzZG4sICZzaGFyZC0+cGFjLmVjYWNoZV9t dXp6eSk7Ci0JZWNhY2hlX3ByZWZvcmsodHNkbiwgJnNoYXJkLT5wYWMuZWNhY2hlX3JldGFpbmVk KTsKLQlpZiAoc2hhcmQtPmV2ZXJfdXNlZF9ocGEpIHsKLQkJaHBhX3NoYXJkX3ByZWZvcms0KHRz ZG4sICZzaGFyZC0+aHBhX3NoYXJkKTsKLQl9Ci19Ci0KLXZvaWQKLXBhX3NoYXJkX3ByZWZvcms1 KHRzZG5fdCAqdHNkbiwgcGFfc2hhcmRfdCAqc2hhcmQpIHsKLQllZGF0YV9jYWNoZV9wcmVmb3Jr KHRzZG4sICZzaGFyZC0+ZWRhdGFfY2FjaGUpOwotfQotCi12b2lkCi1wYV9zaGFyZF9wb3N0Zm9y a19wYXJlbnQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkgewotCWVkYXRhX2NhY2hl X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmc2hhcmQtPmVkYXRhX2NhY2hlKTsKLQllY2FjaGVfcG9z dGZvcmtfcGFyZW50KHRzZG4sICZzaGFyZC0+cGFjLmVjYWNoZV9kaXJ0eSk7Ci0JZWNhY2hlX3Bv c3Rmb3JrX3BhcmVudCh0c2RuLCAmc2hhcmQtPnBhYy5lY2FjaGVfbXV6enkpOwotCWVjYWNoZV9w b3N0Zm9ya19wYXJlbnQodHNkbiwgJnNoYXJkLT5wYWMuZWNhY2hlX3JldGFpbmVkKTsKLQltYWxs b2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZzaGFyZC0+cGFjLmdyb3dfbXR4KTsKLQlt YWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZzaGFyZC0+cGFjLmRlY2F5X2RpcnR5 Lm10eCk7Ci0JbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmc2hhcmQtPnBhYy5k ZWNheV9tdXp6eS5tdHgpOwotCWlmIChzaGFyZC0+ZXZlcl91c2VkX2hwYSkgewotCQlzZWNfcG9z dGZvcmtfcGFyZW50KHRzZG4sICZzaGFyZC0+aHBhX3NlYyk7Ci0JCWhwYV9zaGFyZF9wb3N0Zm9y a19wYXJlbnQodHNkbiwgJnNoYXJkLT5ocGFfc2hhcmQpOwotCX0KLX0KLQotdm9pZAotcGFfc2hh cmRfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBwYV9zaGFyZF90ICpzaGFyZCkgewotCWVk YXRhX2NhY2hlX3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZzaGFyZC0+ZWRhdGFfY2FjaGUpOwotCWVj YWNoZV9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmc2hhcmQtPnBhYy5lY2FjaGVfZGlydHkpOwotCWVj YWNoZV9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmc2hhcmQtPnBhYy5lY2FjaGVfbXV6enkpOwotCWVj YWNoZV9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmc2hhcmQtPnBhYy5lY2FjaGVfcmV0YWluZWQpOwot CW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmc2hhcmQtPnBhYy5ncm93X210eCk7 Ci0JbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZzaGFyZC0+cGFjLmRlY2F5X2Rp cnR5Lm10eCk7Ci0JbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZzaGFyZC0+cGFj LmRlY2F5X211enp5Lm10eCk7Ci0JaWYgKHNoYXJkLT5ldmVyX3VzZWRfaHBhKSB7Ci0JCXNlY19w b3N0Zm9ya19jaGlsZCh0c2RuLCAmc2hhcmQtPmhwYV9zZWMpOwotCQlocGFfc2hhcmRfcG9zdGZv cmtfY2hpbGQodHNkbiwgJnNoYXJkLT5ocGFfc2hhcmQpOwotCX0KLX0KLQotdm9pZAotcGFfc2hh cmRfYmFzaWNfc3RhdHNfbWVyZ2UocGFfc2hhcmRfdCAqc2hhcmQsIHNpemVfdCAqbmFjdGl2ZSwg c2l6ZV90ICpuZGlydHksCi0gICAgc2l6ZV90ICpubXV6enkpIHsKLQkqbmFjdGl2ZSArPSBhdG9t aWNfbG9hZF96dSgmc2hhcmQtPm5hY3RpdmUsIEFUT01JQ19SRUxBWEVEKTsKLQkqbmRpcnR5ICs9 IGVjYWNoZV9ucGFnZXNfZ2V0KCZzaGFyZC0+cGFjLmVjYWNoZV9kaXJ0eSk7Ci0JKm5tdXp6eSAr PSBlY2FjaGVfbnBhZ2VzX2dldCgmc2hhcmQtPnBhYy5lY2FjaGVfbXV6enkpOwotfQotCi12b2lk Ci1wYV9zaGFyZF9zdGF0c19tZXJnZSh0c2RuX3QgKnRzZG4sIHBhX3NoYXJkX3QgKnNoYXJkLAot ICAgIHBhX3NoYXJkX3N0YXRzX3QgKnBhX3NoYXJkX3N0YXRzX291dCwgcGFjX2VzdGF0c190ICpl c3RhdHNfb3V0LAotICAgIGhwYV9zaGFyZF9zdGF0c190ICpocGFfc3RhdHNfb3V0LCBzZWNfc3Rh dHNfdCAqc2VjX3N0YXRzX291dCwKLSAgICBzaXplX3QgKnJlc2lkZW50KSB7Ci0JY2Fzc2VydChj b25maWdfc3RhdHMpOwotCi0JcGFfc2hhcmRfc3RhdHNfb3V0LT5wYWNfc3RhdHMucmV0YWluZWQg Kz0KLQkgICAgZWNhY2hlX25wYWdlc19nZXQoJnNoYXJkLT5wYWMuZWNhY2hlX3JldGFpbmVkKSA8 PCBMR19QQUdFOwotCXBhX3NoYXJkX3N0YXRzX291dC0+ZWRhdGFfYXZhaWwgKz0gYXRvbWljX2xv YWRfenUoCi0JICAgICZzaGFyZC0+ZWRhdGFfY2FjaGUuY291bnQsIEFUT01JQ19SRUxBWEVEKTsK LQotCXNpemVfdCByZXNpZGVudF9wZ3MgPSAwOwotCXJlc2lkZW50X3BncyArPSBhdG9taWNfbG9h ZF96dSgmc2hhcmQtPm5hY3RpdmUsIEFUT01JQ19SRUxBWEVEKTsKLQlyZXNpZGVudF9wZ3MgKz0g ZWNhY2hlX25wYWdlc19nZXQoJnNoYXJkLT5wYWMuZWNhY2hlX2RpcnR5KTsKLQkqcmVzaWRlbnQg Kz0gKHJlc2lkZW50X3BncyA8PCBMR19QQUdFKTsKLQotCS8qIERpcnR5IGRlY2F5IHN0YXRzICov Ci0JbG9ja2VkX2luY191NjRfdW5zeW5jaHJvbml6ZWQoCi0JICAgICZwYV9zaGFyZF9zdGF0c19v dXQtPnBhY19zdGF0cy5kZWNheV9kaXJ0eS5ucHVyZ2UsCi0JICAgIGxvY2tlZF9yZWFkX3U2NCh0 c2RuLCBMT0NLRURJTlRfTVRYKCpzaGFyZC0+c3RhdHNfbXR4KSwKLQkgICAgJnNoYXJkLT5wYWMu c3RhdHMtPmRlY2F5X2RpcnR5Lm5wdXJnZSkpOwotCWxvY2tlZF9pbmNfdTY0X3Vuc3luY2hyb25p emVkKAotCSAgICAmcGFfc2hhcmRfc3RhdHNfb3V0LT5wYWNfc3RhdHMuZGVjYXlfZGlydHkubm1h ZHZpc2UsCi0JICAgIGxvY2tlZF9yZWFkX3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKCpzaGFyZC0+ c3RhdHNfbXR4KSwKLQkgICAgJnNoYXJkLT5wYWMuc3RhdHMtPmRlY2F5X2RpcnR5Lm5tYWR2aXNl KSk7Ci0JbG9ja2VkX2luY191NjRfdW5zeW5jaHJvbml6ZWQoCi0JICAgICZwYV9zaGFyZF9zdGF0 c19vdXQtPnBhY19zdGF0cy5kZWNheV9kaXJ0eS5wdXJnZWQsCi0JICAgIGxvY2tlZF9yZWFkX3U2 NCh0c2RuLCBMT0NLRURJTlRfTVRYKCpzaGFyZC0+c3RhdHNfbXR4KSwKLQkgICAgJnNoYXJkLT5w YWMuc3RhdHMtPmRlY2F5X2RpcnR5LnB1cmdlZCkpOwotCi0JLyogTXV6enkgZGVjYXkgc3RhdHMg Ki8KLQlsb2NrZWRfaW5jX3U2NF91bnN5bmNocm9uaXplZCgKLQkgICAgJnBhX3NoYXJkX3N0YXRz X291dC0+cGFjX3N0YXRzLmRlY2F5X211enp5Lm5wdXJnZSwKLQkgICAgbG9ja2VkX3JlYWRfdTY0 KHRzZG4sIExPQ0tFRElOVF9NVFgoKnNoYXJkLT5zdGF0c19tdHgpLAotCSAgICAmc2hhcmQtPnBh Yy5zdGF0cy0+ZGVjYXlfbXV6enkubnB1cmdlKSk7Ci0JbG9ja2VkX2luY191NjRfdW5zeW5jaHJv bml6ZWQoCi0JICAgICZwYV9zaGFyZF9zdGF0c19vdXQtPnBhY19zdGF0cy5kZWNheV9tdXp6eS5u bWFkdmlzZSwKLQkgICAgbG9ja2VkX3JlYWRfdTY0KHRzZG4sIExPQ0tFRElOVF9NVFgoKnNoYXJk LT5zdGF0c19tdHgpLAotCSAgICAmc2hhcmQtPnBhYy5zdGF0cy0+ZGVjYXlfbXV6enkubm1hZHZp c2UpKTsKLQlsb2NrZWRfaW5jX3U2NF91bnN5bmNocm9uaXplZCgKLQkgICAgJnBhX3NoYXJkX3N0 YXRzX291dC0+cGFjX3N0YXRzLmRlY2F5X211enp5LnB1cmdlZCwKLQkgICAgbG9ja2VkX3JlYWRf dTY0KHRzZG4sIExPQ0tFRElOVF9NVFgoKnNoYXJkLT5zdGF0c19tdHgpLAotCSAgICAmc2hhcmQt PnBhYy5zdGF0cy0+ZGVjYXlfbXV6enkucHVyZ2VkKSk7Ci0KLQlhdG9taWNfbG9hZF9hZGRfc3Rv cmVfenUoJnBhX3NoYXJkX3N0YXRzX291dC0+cGFjX3N0YXRzLmFiYW5kb25lZF92bSwKLQkgICAg YXRvbWljX2xvYWRfenUoJnNoYXJkLT5wYWMuc3RhdHMtPmFiYW5kb25lZF92bSwgQVRPTUlDX1JF TEFYRUQpKTsKLQotCWZvciAocHN6aW5kX3QgaSA9IDA7IGkgPCBTQ19OUFNJWkVTOyBpKyspIHsK LQkJc2l6ZV90IGRpcnR5LCBtdXp6eSwgcmV0YWluZWQsIGRpcnR5X2J5dGVzLCBtdXp6eV9ieXRl cywKLQkJICAgIHJldGFpbmVkX2J5dGVzOwotCQlkaXJ0eSA9IGVjYWNoZV9uZXh0ZW50c19nZXQo JnNoYXJkLT5wYWMuZWNhY2hlX2RpcnR5LCBpKTsKLQkJbXV6enkgPSBlY2FjaGVfbmV4dGVudHNf Z2V0KCZzaGFyZC0+cGFjLmVjYWNoZV9tdXp6eSwgaSk7Ci0JCXJldGFpbmVkID0gZWNhY2hlX25l eHRlbnRzX2dldCgmc2hhcmQtPnBhYy5lY2FjaGVfcmV0YWluZWQsIGkpOwotCQlkaXJ0eV9ieXRl cyA9IGVjYWNoZV9uYnl0ZXNfZ2V0KCZzaGFyZC0+cGFjLmVjYWNoZV9kaXJ0eSwgaSk7Ci0JCW11 enp5X2J5dGVzID0gZWNhY2hlX25ieXRlc19nZXQoJnNoYXJkLT5wYWMuZWNhY2hlX211enp5LCBp KTsKLQkJcmV0YWluZWRfYnl0ZXMgPSBlY2FjaGVfbmJ5dGVzX2dldCgmc2hhcmQtPnBhYy5lY2Fj aGVfcmV0YWluZWQsCi0JCSAgICBpKTsKLQotCQllc3RhdHNfb3V0W2ldLm5kaXJ0eSA9IGRpcnR5 OwotCQllc3RhdHNfb3V0W2ldLm5tdXp6eSA9IG11enp5OwotCQllc3RhdHNfb3V0W2ldLm5yZXRh aW5lZCA9IHJldGFpbmVkOwotCQllc3RhdHNfb3V0W2ldLmRpcnR5X2J5dGVzID0gZGlydHlfYnl0 ZXM7Ci0JCWVzdGF0c19vdXRbaV0ubXV6enlfYnl0ZXMgPSBtdXp6eV9ieXRlczsKLQkJZXN0YXRz X291dFtpXS5yZXRhaW5lZF9ieXRlcyA9IHJldGFpbmVkX2J5dGVzOwotCX0KLQotCWlmIChzaGFy ZC0+ZXZlcl91c2VkX2hwYSkgewotCQlocGFfc2hhcmRfc3RhdHNfbWVyZ2UodHNkbiwgJnNoYXJk LT5ocGFfc2hhcmQsIGhwYV9zdGF0c19vdXQpOwotCQlzZWNfc3RhdHNfbWVyZ2UodHNkbiwgJnNo YXJkLT5ocGFfc2VjLCBzZWNfc3RhdHNfb3V0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYV9z aGFyZF9tdHhfc3RhdHNfcmVhZF9zaW5nbGUodHNkbl90ICp0c2RuLCBtdXRleF9wcm9mX2RhdGFf dCAqbXV0ZXhfcHJvZl9kYXRhLAotICAgIG1hbGxvY19tdXRleF90ICptdHgsIGludCBpbmQpIHsK LQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCBtdHgpOwotCW1hbGxvY19tdXRleF9wcm9mX3JlYWQo dHNkbiwgJm11dGV4X3Byb2ZfZGF0YVtpbmRdLCBtdHgpOwotCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgbXR4KTsKLX0KLQotdm9pZAotcGFfc2hhcmRfbXR4X3N0YXRzX3JlYWQodHNkbl90ICp0 c2RuLCBwYV9zaGFyZF90ICpzaGFyZCwKLSAgICBtdXRleF9wcm9mX2RhdGFfdCBtdXRleF9wcm9m X2RhdGFbbXV0ZXhfcHJvZl9udW1fYXJlbmFfbXV0ZXhlc10pIHsKLQlwYV9zaGFyZF9tdHhfc3Rh dHNfcmVhZF9zaW5nbGUodHNkbiwgbXV0ZXhfcHJvZl9kYXRhLAotCSAgICAmc2hhcmQtPmVkYXRh X2NhY2hlLm10eCwgYXJlbmFfcHJvZl9tdXRleF9leHRlbnRfYXZhaWwpOwotCXBhX3NoYXJkX210 eF9zdGF0c19yZWFkX3NpbmdsZSh0c2RuLCBtdXRleF9wcm9mX2RhdGEsCi0JICAgICZzaGFyZC0+ cGFjLmVjYWNoZV9kaXJ0eS5tdHgsIGFyZW5hX3Byb2ZfbXV0ZXhfZXh0ZW50c19kaXJ0eSk7Ci0J cGFfc2hhcmRfbXR4X3N0YXRzX3JlYWRfc2luZ2xlKHRzZG4sIG11dGV4X3Byb2ZfZGF0YSwKLQkg ICAgJnNoYXJkLT5wYWMuZWNhY2hlX211enp5Lm10eCwgYXJlbmFfcHJvZl9tdXRleF9leHRlbnRz X211enp5KTsKLQlwYV9zaGFyZF9tdHhfc3RhdHNfcmVhZF9zaW5nbGUodHNkbiwgbXV0ZXhfcHJv Zl9kYXRhLAotCSAgICAmc2hhcmQtPnBhYy5lY2FjaGVfcmV0YWluZWQubXR4LCBhcmVuYV9wcm9m X211dGV4X2V4dGVudHNfcmV0YWluZWQpOwotCXBhX3NoYXJkX210eF9zdGF0c19yZWFkX3Npbmds ZSh0c2RuLCBtdXRleF9wcm9mX2RhdGEsCi0JICAgICZzaGFyZC0+cGFjLmRlY2F5X2RpcnR5Lm10 eCwgYXJlbmFfcHJvZl9tdXRleF9kZWNheV9kaXJ0eSk7Ci0JcGFfc2hhcmRfbXR4X3N0YXRzX3Jl YWRfc2luZ2xlKHRzZG4sIG11dGV4X3Byb2ZfZGF0YSwKLQkgICAgJnNoYXJkLT5wYWMuZGVjYXlf bXV6enkubXR4LCBhcmVuYV9wcm9mX211dGV4X2RlY2F5X211enp5KTsKLQotCWlmIChzaGFyZC0+ ZXZlcl91c2VkX2hwYSkgewotCQlwYV9zaGFyZF9tdHhfc3RhdHNfcmVhZF9zaW5nbGUodHNkbiwg bXV0ZXhfcHJvZl9kYXRhLAotCQkgICAgJnNoYXJkLT5ocGFfc2hhcmQubXR4LCBhcmVuYV9wcm9m X211dGV4X2hwYV9zaGFyZCk7Ci0JCXBhX3NoYXJkX210eF9zdGF0c19yZWFkX3NpbmdsZSh0c2Ru LCBtdXRleF9wcm9mX2RhdGEsCi0JCSAgICAmc2hhcmQtPmhwYV9zaGFyZC5ncm93X210eCwKLQkJ ICAgIGFyZW5hX3Byb2ZfbXV0ZXhfaHBhX3NoYXJkX2dyb3cpOwotCQlzZWNfbXV0ZXhfc3RhdHNf cmVhZCh0c2RuLCAmc2hhcmQtPmhwYV9zZWMsCi0JCSAgICAmbXV0ZXhfcHJvZl9kYXRhW2FyZW5h X3Byb2ZfbXV0ZXhfaHBhX3NlY10pOwotCX0KLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFjLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDUzZTNkODIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvc3JjL3BhYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTg3ICswLDAgQEAKLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9wYWMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9z YW4uaCIKLQotc3RhdGljIGVkYXRhX3QgKnBhY19hbGxvY19pbXBsKHRzZG5fdCAqdHNkbiwgcGFp X3QgKnNlbGYsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywg Ym9vbCBndWFyZGVkLCBib29sIGZyZXF1ZW50X3JldXNlLAotICAgIGJvb2wgKmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKLXN0YXRpYyBib29sIHBhY19leHBhbmRfaW1wbCh0c2RuX3QgKnRzZG4s IHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2xkX3NpemUsIHNpemVf dCBuZXdfc2l6ZSwgYm9vbCB6ZXJvLCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci1z dGF0aWMgYm9vbCBwYWNfc2hyaW5rX2ltcGwodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRh dGFfdCAqZWRhdGEsCi0gICAgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUsIGJvb2wg KmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLXN0YXRpYyB2b2lkIHBhY19kYWxsb2NfaW1wbCh0 c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwKLSAgICBib29sICpkZWZl cnJlZF93b3JrX2dlbmVyYXRlZCk7Ci1zdGF0aWMgdWludDY0X3QgcGFjX3RpbWVfdW50aWxfZGVm ZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmKTsKLQotc3RhdGljIGlubGluZSB2 b2lkCi1wYWNfZGVjYXlfZGF0YV9nZXQocGFjX3QgKnBhYywgZXh0ZW50X3N0YXRlX3Qgc3RhdGUs Ci0gICAgZGVjYXlfdCAqKnJfZGVjYXksIHBhY19kZWNheV9zdGF0c190ICoqcl9kZWNheV9zdGF0 cywgZWNhY2hlX3QgKipyX2VjYWNoZSkgewotCXN3aXRjaChzdGF0ZSkgewotCWNhc2UgZXh0ZW50 X3N0YXRlX2RpcnR5OgotCQkqcl9kZWNheSA9ICZwYWMtPmRlY2F5X2RpcnR5OwotCQkqcl9kZWNh eV9zdGF0cyA9ICZwYWMtPnN0YXRzLT5kZWNheV9kaXJ0eTsKLQkJKnJfZWNhY2hlID0gJnBhYy0+ ZWNhY2hlX2RpcnR5OwotCQlyZXR1cm47Ci0JY2FzZSBleHRlbnRfc3RhdGVfbXV6enk6Ci0JCSpy X2RlY2F5ID0gJnBhYy0+ZGVjYXlfbXV6enk7Ci0JCSpyX2RlY2F5X3N0YXRzID0gJnBhYy0+c3Rh dHMtPmRlY2F5X211enp5OwotCQkqcl9lY2FjaGUgPSAmcGFjLT5lY2FjaGVfbXV6enk7Ci0JCXJl dHVybjsKLQlkZWZhdWx0OgotCQl1bnJlYWNoYWJsZSgpOwotCX0KLX0KLQotYm9vbAotcGFjX2lu aXQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBiYXNlX3QgKmJhc2UsIGVtYXBfdCAqZW1hcCwK LSAgICBlZGF0YV9jYWNoZV90ICplZGF0YV9jYWNoZSwgbnN0aW1lX3QgKmN1cl90aW1lLAotICAg IHNpemVfdCBwYWNfb3ZlcnNpemVfdGhyZXNob2xkLCBzc2l6ZV90IGRpcnR5X2RlY2F5X21zLAot ICAgIHNzaXplX3QgbXV6enlfZGVjYXlfbXMsIHBhY19zdGF0c190ICpwYWNfc3RhdHMsIG1hbGxv Y19tdXRleF90ICpzdGF0c19tdHgpIHsKLQl1bnNpZ25lZCBpbmQgPSBiYXNlX2luZF9nZXQoYmFz ZSk7Ci0JLyoKLQkgKiBEZWxheSBjb2FsZXNjaW5nIGZvciBkaXJ0eSBleHRlbnRzIGRlc3BpdGUg dGhlIGRpc3J1cHRpdmUgZWZmZWN0IG9uCi0JICogbWVtb3J5IGxheW91dCBmb3IgYmVzdC1maXQg ZXh0ZW50IGFsbG9jYXRpb24sIHNpbmNlIGNhY2hlZCBleHRlbnRzCi0JICogYXJlIGxpa2VseSB0 byBiZSByZXVzZWQgc29vbiBhZnRlciBkZWFsbG9jYXRpb24sIGFuZCB0aGUgY29zdCBvZgotCSAq IG1lcmdpbmcvc3BsaXR0aW5nIGV4dGVudHMgaXMgbm9uLXRyaXZpYWwuCi0JICovCi0JaWYgKGVj YWNoZV9pbml0KHRzZG4sICZwYWMtPmVjYWNoZV9kaXJ0eSwgZXh0ZW50X3N0YXRlX2RpcnR5LCBp bmQsCi0JICAgIC8qIGRlbGF5X2NvYWxlc2NlICovIHRydWUpKSB7Ci0JCXJldHVybiB0cnVlOwot CX0KLQkvKgotCSAqIENvYWxlc2NlIG11enp5IGV4dGVudHMgaW1tZWRpYXRlbHksIGJlY2F1c2Ug b3BlcmF0aW9ucyBvbiB0aGVtIGFyZSBpbgotCSAqIHRoZSBjcml0aWNhbCBwYXRoIG11Y2ggbGVz cyBvZnRlbiB0aGFuIGZvciBkaXJ0eSBleHRlbnRzLgotCSAqLwotCWlmIChlY2FjaGVfaW5pdCh0 c2RuLCAmcGFjLT5lY2FjaGVfbXV6enksIGV4dGVudF9zdGF0ZV9tdXp6eSwgaW5kLAotCSAgICAv KiBkZWxheV9jb2FsZXNjZSAqLyBmYWxzZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCS8qCi0J ICogQ29hbGVzY2UgcmV0YWluZWQgZXh0ZW50cyBpbW1lZGlhdGVseSwgaW4gcGFydCBiZWNhdXNl IHRoZXkgd2lsbAotCSAqIG5ldmVyIGJlIGV2aWN0ZWQgKGFuZCB0aGVyZWZvcmUgdGhlcmUncyBu byBvcHBvcnR1bml0eSBmb3IgZGVsYXllZAotCSAqIGNvYWxlc2NpbmcpLCBidXQgYWxzbyBiZWNh dXNlIG9wZXJhdGlvbnMgb24gcmV0YWluZWQgZXh0ZW50cyBhcmUgbm90Ci0JICogaW4gdGhlIGNy aXRpY2FsIHBhdGguCi0JICovCi0JaWYgKGVjYWNoZV9pbml0KHRzZG4sICZwYWMtPmVjYWNoZV9y ZXRhaW5lZCwgZXh0ZW50X3N0YXRlX3JldGFpbmVkLAotCSAgICBpbmQsIC8qIGRlbGF5X2NvYWxl c2NlICovIGZhbHNlKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JZXhwX2dyb3dfaW5pdCgmcGFj LT5leHBfZ3Jvdyk7Ci0JaWYgKG1hbGxvY19tdXRleF9pbml0KCZwYWMtPmdyb3dfbXR4LCAiZXh0 ZW50X2dyb3ciLAotCSAgICBXSVRORVNTX1JBTktfRVhURU5UX0dST1csIG1hbGxvY19tdXRleF9y YW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWF0b21pY19zdG9yZV96dSgm cGFjLT5vdmVyc2l6ZV90aHJlc2hvbGQsIHBhY19vdmVyc2l6ZV90aHJlc2hvbGQsCi0JICAgIEFU T01JQ19SRUxBWEVEKTsKLQlpZiAoZGVjYXlfaW5pdCgmcGFjLT5kZWNheV9kaXJ0eSwgY3VyX3Rp bWUsIGRpcnR5X2RlY2F5X21zKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JaWYgKGRlY2F5X2lu aXQoJnBhYy0+ZGVjYXlfbXV6enksIGN1cl90aW1lLCBtdXp6eV9kZWNheV9tcykpIHsKLQkJcmV0 dXJuIHRydWU7Ci0JfQotCWlmIChzYW5fYnVtcF9hbGxvY19pbml0KCZwYWMtPnNiYSkpIHsKLQkJ cmV0dXJuIHRydWU7Ci0JfQotCi0JcGFjLT5iYXNlID0gYmFzZTsKLQlwYWMtPmVtYXAgPSBlbWFw OwotCXBhYy0+ZWRhdGFfY2FjaGUgPSBlZGF0YV9jYWNoZTsKLQlwYWMtPnN0YXRzID0gcGFjX3N0 YXRzOwotCXBhYy0+c3RhdHNfbXR4ID0gc3RhdHNfbXR4OwotCWF0b21pY19zdG9yZV96dSgmcGFj LT5leHRlbnRfc25fbmV4dCwgMCwgQVRPTUlDX1JFTEFYRUQpOwotCi0JcGFjLT5wYWkuYWxsb2Mg PSAmcGFjX2FsbG9jX2ltcGw7Ci0JcGFjLT5wYWkuYWxsb2NfYmF0Y2ggPSAmcGFpX2FsbG9jX2Jh dGNoX2RlZmF1bHQ7Ci0JcGFjLT5wYWkuZXhwYW5kID0gJnBhY19leHBhbmRfaW1wbDsKLQlwYWMt PnBhaS5zaHJpbmsgPSAmcGFjX3Nocmlua19pbXBsOwotCXBhYy0+cGFpLmRhbGxvYyA9ICZwYWNf ZGFsbG9jX2ltcGw7Ci0JcGFjLT5wYWkuZGFsbG9jX2JhdGNoID0gJnBhaV9kYWxsb2NfYmF0Y2hf ZGVmYXVsdDsKLQlwYWMtPnBhaS50aW1lX3VudGlsX2RlZmVycmVkX3dvcmsgPSAmcGFjX3RpbWVf dW50aWxfZGVmZXJyZWRfd29yazsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGlu ZSBib29sCi1wYWNfbWF5X2hhdmVfbXV6enkocGFjX3QgKnBhYykgewotCXJldHVybiBwYWNfZGVj YXlfbXNfZ2V0KHBhYywgZXh0ZW50X3N0YXRlX211enp5KSAhPSAwOwotfQotCi1zdGF0aWMgZWRh dGFfdCAqCi1wYWNfYWxsb2NfcmVhbCh0c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190 ICplaG9va3MsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywg Ym9vbCBndWFyZGVkKSB7Ci0JYXNzZXJ0KCFndWFyZGVkIHx8IGFsaWdubWVudCA8PSBQQUdFKTsK LQotCWVkYXRhX3QgKmVkYXRhID0gZWNhY2hlX2FsbG9jKHRzZG4sIHBhYywgZWhvb2tzLCAmcGFj LT5lY2FjaGVfZGlydHksCi0JICAgIE5VTEwsIHNpemUsIGFsaWdubWVudCwgemVybywgZ3VhcmRl ZCk7Ci0KLQlpZiAoZWRhdGEgPT0gTlVMTCAmJiBwYWNfbWF5X2hhdmVfbXV6enkocGFjKSkgewot CQllZGF0YSA9IGVjYWNoZV9hbGxvYyh0c2RuLCBwYWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX211 enp5LAotCQkgICAgTlVMTCwgc2l6ZSwgYWxpZ25tZW50LCB6ZXJvLCBndWFyZGVkKTsKLQl9Ci0J aWYgKGVkYXRhID09IE5VTEwpIHsKLQkJZWRhdGEgPSBlY2FjaGVfYWxsb2NfZ3Jvdyh0c2RuLCBw YWMsIGVob29rcywKLQkJICAgICZwYWMtPmVjYWNoZV9yZXRhaW5lZCwgTlVMTCwgc2l6ZSwgYWxp Z25tZW50LCB6ZXJvLAotCQkgICAgZ3VhcmRlZCk7Ci0JCWlmIChjb25maWdfc3RhdHMgJiYgZWRh dGEgIT0gTlVMTCkgewotCQkJYXRvbWljX2ZldGNoX2FkZF96dSgmcGFjLT5zdGF0cy0+cGFjX21h cHBlZCwgc2l6ZSwKLQkJCSAgICBBVE9NSUNfUkVMQVhFRCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4g ZWRhdGE7Ci19Ci0KLXN0YXRpYyBlZGF0YV90ICoKLXBhY19hbGxvY19uZXdfZ3VhcmRlZCh0c2Ru X3QgKnRzZG4sIHBhY190ICpwYWMsIGVob29rc190ICplaG9va3MsIHNpemVfdCBzaXplLAotICAg IHNpemVfdCBhbGlnbm1lbnQsIGJvb2wgemVybywgYm9vbCBmcmVxdWVudF9yZXVzZSkgewotCWFz c2VydChhbGlnbm1lbnQgPD0gUEFHRSk7Ci0KLQllZGF0YV90ICplZGF0YTsKLQlpZiAoc2FuX2J1 bXBfZW5hYmxlZCgpICYmIGZyZXF1ZW50X3JldXNlKSB7Ci0JCWVkYXRhID0gc2FuX2J1bXBfYWxs b2ModHNkbiwgJnBhYy0+c2JhLCBwYWMsIGVob29rcywgc2l6ZSwKLQkJICAgIHplcm8pOwotCX0g ZWxzZSB7Ci0JCXNpemVfdCBzaXplX3dpdGhfZ3VhcmRzID0gc2FuX3R3b19zaWRlX2d1YXJkZWRf c3ooc2l6ZSk7Ci0JCS8qIEFsbG9jIGEgbm9uLWd1YXJkZWQgZXh0ZW50IGZpcnN0LiovCi0JCWVk YXRhID0gcGFjX2FsbG9jX3JlYWwodHNkbiwgcGFjLCBlaG9va3MsIHNpemVfd2l0aF9ndWFyZHMs Ci0JCSAgICAvKiBhbGlnbm1lbnQgKi8gUEFHRSwgemVybywgLyogZ3VhcmRlZCAqLyBmYWxzZSk7 Ci0JCWlmIChlZGF0YSAhPSBOVUxMKSB7Ci0JCQkvKiBBZGQgZ3VhcmRzIGFyb3VuZCBpdC4gKi8K LQkJCWFzc2VydChlZGF0YV9zaXplX2dldChlZGF0YSkgPT0gc2l6ZV93aXRoX2d1YXJkcyk7Ci0J CQlzYW5fZ3VhcmRfcGFnZXNfdHdvX3NpZGVkKHRzZG4sIGVob29rcywgZWRhdGEsCi0JCQkgICAg cGFjLT5lbWFwLCB0cnVlKTsKLQkJfQotCX0KLQlhc3NlcnQoZWRhdGEgPT0gTlVMTCB8fCAoZWRh dGFfZ3VhcmRlZF9nZXQoZWRhdGEpICYmCi0JICAgIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSA9PSBz aXplKSk7Ci0KLQlyZXR1cm4gZWRhdGE7Ci19Ci0KLXN0YXRpYyBlZGF0YV90ICoKLXBhY19hbGxv Y19pbXBsKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIHNpemVfdCBzaXplLCBzaXplX3QgYWxp Z25tZW50LAotICAgIGJvb2wgemVybywgYm9vbCBndWFyZGVkLCBib29sIGZyZXF1ZW50X3JldXNl LAotICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JcGFjX3QgKnBhYyA9IChw YWNfdCAqKXNlbGY7Ci0JZWhvb2tzX3QgKmVob29rcyA9IHBhY19laG9va3NfZ2V0KHBhYyk7Ci0K LQllZGF0YV90ICplZGF0YSA9IE5VTEw7Ci0JLyoKLQkgKiBUaGUgY29uZGl0aW9uIGlzIGFuIG9w dGltaXphdGlvbiAtIG5vdCBmcmVxdWVudGx5IHJldXNlZCBndWFyZGVkCi0JICogYWxsb2NhdGlv bnMgYXJlIG5ldmVyIHB1dCBpbiB0aGUgZWNhY2hlLiAgcGFjX2FsbG9jX3JlYWwgYWxzbwotCSAq IGRvZXNuJ3QgZ3JvdyByZXRhaW5lZCBmb3IgZ3VhcmRlZCBhbGxvY2F0aW9ucy4gIFNvIHBhY19h bGxvY19yZWFsCi0JICogZm9yIHN1Y2ggYWxsb2NhdGlvbnMgd291bGQgYWx3YXlzIHJldHVybiBO VUxMLgotCSAqICovCi0JaWYgKCFndWFyZGVkIHx8IGZyZXF1ZW50X3JldXNlKSB7Ci0JCWVkYXRh ID0JcGFjX2FsbG9jX3JlYWwodHNkbiwgcGFjLCBlaG9va3MsIHNpemUsIGFsaWdubWVudCwKLQkJ ICAgIHplcm8sIGd1YXJkZWQpOwotCX0KLQlpZiAoZWRhdGEgPT0gTlVMTCAmJiBndWFyZGVkKSB7 Ci0JCS8qIE5vIGNhY2hlZCBndWFyZGVkIGV4dGVudHM7IGNyZWF0aW5nIGEgbmV3IG9uZS4gKi8K LQkJZWRhdGEgPSBwYWNfYWxsb2NfbmV3X2d1YXJkZWQodHNkbiwgcGFjLCBlaG9va3MsIHNpemUs Ci0JCSAgICBhbGlnbm1lbnQsIHplcm8sIGZyZXF1ZW50X3JldXNlKTsKLQl9Ci0KLQlyZXR1cm4g ZWRhdGE7Ci19Ci0KLXN0YXRpYyBib29sCi1wYWNfZXhwYW5kX2ltcGwodHNkbl90ICp0c2RuLCBw YWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRfc2l6ZSwKLSAgICBzaXplX3Qg bmV3X3NpemUsIGJvb2wgemVybywgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlw YWNfdCAqcGFjID0gKHBhY190ICopc2VsZjsKLQllaG9va3NfdCAqZWhvb2tzID0gcGFjX2Vob29r c19nZXQocGFjKTsKLQotCXNpemVfdCBtYXBwZWRfYWRkID0gMDsKLQlzaXplX3QgZXhwYW5kX2Ft b3VudCA9IG5ld19zaXplIC0gb2xkX3NpemU7Ci0KLQlpZiAoZWhvb2tzX21lcmdlX3dpbGxfZmFp bChlaG9va3MpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQllZGF0YV90ICp0cmFpbCA9IGVjYWNo ZV9hbGxvYyh0c2RuLCBwYWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX2RpcnR5LAotCSAgICBlZGF0 YSwgZXhwYW5kX2Ftb3VudCwgUEFHRSwgemVybywgLyogZ3VhcmRlZCovIGZhbHNlKTsKLQlpZiAo dHJhaWwgPT0gTlVMTCkgewotCQl0cmFpbCA9IGVjYWNoZV9hbGxvYyh0c2RuLCBwYWMsIGVob29r cywgJnBhYy0+ZWNhY2hlX211enp5LAotCQkgICAgZWRhdGEsIGV4cGFuZF9hbW91bnQsIFBBR0Us IHplcm8sIC8qIGd1YXJkZWQqLyBmYWxzZSk7Ci0JfQotCWlmICh0cmFpbCA9PSBOVUxMKSB7Ci0J CXRyYWlsID0gZWNhY2hlX2FsbG9jX2dyb3codHNkbiwgcGFjLCBlaG9va3MsCi0JCSAgICAmcGFj LT5lY2FjaGVfcmV0YWluZWQsIGVkYXRhLCBleHBhbmRfYW1vdW50LCBQQUdFLCB6ZXJvLAotCQkg ICAgLyogZ3VhcmRlZCAqLyBmYWxzZSk7Ci0JCW1hcHBlZF9hZGQgPSBleHBhbmRfYW1vdW50Owot CX0KLQlpZiAodHJhaWwgPT0gTlVMTCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JaWYgKGV4dGVu dF9tZXJnZV93cmFwcGVyKHRzZG4sIHBhYywgZWhvb2tzLCBlZGF0YSwgdHJhaWwpKSB7Ci0JCWV4 dGVudF9kYWxsb2Nfd3JhcHBlcih0c2RuLCBwYWMsIGVob29rcywgdHJhaWwpOwotCQlyZXR1cm4g dHJ1ZTsKLQl9Ci0JaWYgKGNvbmZpZ19zdGF0cyAmJiBtYXBwZWRfYWRkID4gMCkgewotCQlhdG9t aWNfZmV0Y2hfYWRkX3p1KCZwYWMtPnN0YXRzLT5wYWNfbWFwcGVkLCBtYXBwZWRfYWRkLAotCQkg ICAgQVRPTUlDX1JFTEFYRUQpOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29s Ci1wYWNfc2hyaW5rX2ltcGwodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRh dGEsIHNpemVfdCBvbGRfc2l6ZSwKLSAgICBzaXplX3QgbmV3X3NpemUsIGJvb2wgKmRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkKSB7Ci0JcGFjX3QgKnBhYyA9IChwYWNfdCAqKXNlbGY7Ci0JZWhvb2tz X3QgKmVob29rcyA9IHBhY19laG9va3NfZ2V0KHBhYyk7Ci0KLQlzaXplX3Qgc2hyaW5rX2Ftb3Vu dCA9IG9sZF9zaXplIC0gbmV3X3NpemU7Ci0KLQlpZiAoZWhvb2tzX3NwbGl0X3dpbGxfZmFpbChl aG9va3MpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCWVkYXRhX3QgKnRyYWlsID0gZXh0ZW50 X3NwbGl0X3dyYXBwZXIodHNkbiwgcGFjLCBlaG9va3MsIGVkYXRhLAotCSAgICBuZXdfc2l6ZSwg c2hyaW5rX2Ftb3VudCwgLyogaG9sZGluZ19jb3JlX2xvY2tzICovIGZhbHNlKTsKLQlpZiAodHJh aWwgPT0gTlVMTCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JZWNhY2hlX2RhbGxvYyh0c2RuLCBw YWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX2RpcnR5LCB0cmFpbCk7Ci0JKmRlZmVycmVkX3dvcmtf Z2VuZXJhdGVkID0gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYWNf ZGFsbG9jX2ltcGwodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsCi0g ICAgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlwYWNfdCAqcGFjID0gKHBhY190 ICopc2VsZjsKLQllaG9va3NfdCAqZWhvb2tzID0gcGFjX2Vob29rc19nZXQocGFjKTsKLQotCWlm IChlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpIHsKLQkJLyoKLQkJICogQmVjYXVzZSBjYWNoZWQg Z3VhcmRlZCBleHRlbnRzIGRvIGV4YWN0IGZpdCBvbmx5LCBsYXJnZQotCQkgKiBndWFyZGVkIGV4 dGVudHMgYXJlIHJlc3RvcmVkIG9uIGRhbGxvYyBlYWdlcmx5IChvdGhlcndpc2UKLQkJICogdGhl eSB3aWxsIG5vdCBiZSByZXVzZWQgZWZmaWNpZW50bHkpLiAgU2xhYiBzaXplcyBoYXZlIGEKLQkJ ICogbGltaXRlZCBudW1iZXIgb2Ygc2l6ZSBjbGFzc2VzLCBhbmQgdGVuZCB0byBjeWNsZSBmYXN0 ZXIuCi0JCSAqCi0JCSAqIEluIHRoZSBjYXNlIHdoZXJlIGNvYWxlc2NlIGlzIHJlc3RyYWluZWQg KFZpcnR1YWxGcmVlIG9uCi0JCSAqIFdpbmRvd3MpLCBndWFyZGVkIGV4dGVudHMgYXJlIGFsc28g bm90IGNhY2hlZCAtLSBvdGhlcndpc2UKLQkJICogZHVyaW5nIGFyZW5hIGRlc3Ryb3kgLyByZXNl dCwgdGhlIHJldGFpbmVkIGV4dGVudHMgd291bGQgbm90Ci0JCSAqIGJlIHdob2xlIHJlZ2lvbnMg KGkuZS4gdGhleSBhcmUgc3BsaXQgYmV0d2VlbiByZWd1bGFyIGFuZAotCQkgKiBndWFyZGVkKS4K LQkJICovCi0JCWlmICghZWRhdGFfc2xhYl9nZXQoZWRhdGEpIHx8ICFtYXBzX2NvYWxlc2NlKSB7 Ci0JCQlhc3NlcnQoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID49IFNDX0xBUkdFX01JTkNMQVNTIHx8 Ci0JCQkgICAgIW1hcHNfY29hbGVzY2UpOwotCQkJc2FuX3VuZ3VhcmRfcGFnZXNfdHdvX3NpZGVk KHRzZG4sIGVob29rcywgZWRhdGEsCi0JCQkgICAgcGFjLT5lbWFwKTsKLQkJfQotCX0KLQotCWVj YWNoZV9kYWxsb2ModHNkbiwgcGFjLCBlaG9va3MsICZwYWMtPmVjYWNoZV9kaXJ0eSwgZWRhdGEp OwotCS8qIFB1cmdpbmcgb2YgZGVhbGxvY2F0ZWQgcGFnZXMgaXMgZGVmZXJyZWQgKi8KLQkqZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQgPSB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90 Ci1wYWNfbnNfdW50aWxfcHVyZ2UodHNkbl90ICp0c2RuLCBkZWNheV90ICpkZWNheSwgc2l6ZV90 IG5wYWdlcykgewotCWlmIChtYWxsb2NfbXV0ZXhfdHJ5bG9jayh0c2RuLCAmZGVjYXktPm10eCkp IHsKLQkJLyogVXNlIG1pbmltYWwgaW50ZXJ2YWwgaWYgZGVjYXkgaXMgY29udGVuZGVkLiAqLwot CQlyZXR1cm4gQkFDS0dST1VORF9USFJFQURfREVGRVJSRURfTUlOOwotCX0KLQl1aW50NjRfdCBy ZXN1bHQgPSBkZWNheV9uc191bnRpbF9wdXJnZShkZWNheSwgbnBhZ2VzLAotCSAgICBBUkVOQV9E RUZFUlJFRF9QVVJHRV9OUEFHRVNfVEhSRVNIT0xEKTsKLQotCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgJmRlY2F5LT5tdHgpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB1aW50NjRf dAotcGFjX3RpbWVfdW50aWxfZGVmZXJyZWRfd29yayh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxm KSB7Ci0JdWludDY0X3QgdGltZTsKLQlwYWNfdCAqcGFjID0gKHBhY190ICopc2VsZjsKLQotCXRp bWUgPSBwYWNfbnNfdW50aWxfcHVyZ2UodHNkbiwKLQkgICAgJnBhYy0+ZGVjYXlfZGlydHksCi0J ICAgIGVjYWNoZV9ucGFnZXNfZ2V0KCZwYWMtPmVjYWNoZV9kaXJ0eSkpOwotCWlmICh0aW1lID09 IEJBQ0tHUk9VTkRfVEhSRUFEX0RFRkVSUkVEX01JTikgewotCQlyZXR1cm4gdGltZTsKLQl9Ci0K LQl1aW50NjRfdCBtdXp6eSA9IHBhY19uc191bnRpbF9wdXJnZSh0c2RuLAotCSAgICAmcGFjLT5k ZWNheV9tdXp6eSwKLQkgICAgZWNhY2hlX25wYWdlc19nZXQoJnBhYy0+ZWNhY2hlX211enp5KSk7 Ci0JaWYgKG11enp5IDwgdGltZSkgewotCQl0aW1lID0gbXV6enk7Ci0JfQotCXJldHVybiB0aW1l OwotfQotCi1ib29sCi1wYWNfcmV0YWluX2dyb3dfbGltaXRfZ2V0X3NldCh0c2RuX3QgKnRzZG4s IHBhY190ICpwYWMsIHNpemVfdCAqb2xkX2xpbWl0LAotICAgIHNpemVfdCAqbmV3X2xpbWl0KSB7 Ci0JcHN6aW5kX3QgbmV3X2luZCBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoMCk7Ci0JaWYgKG5l d19saW1pdCAhPSBOVUxMKSB7Ci0JCXNpemVfdCBsaW1pdCA9ICpuZXdfbGltaXQ7Ci0JCS8qIEdy b3cgbm8gbW9yZSB0aGFuIHRoZSBuZXcgbGltaXQuICovCi0JCWlmICgobmV3X2luZCA9IHN6X3Bz ejJpbmQobGltaXQgKyAxKSAtIDEpID49IFNDX05QU0laRVMpIHsKLQkJCXJldHVybiB0cnVlOwot CQl9Ci0JfQotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnBhYy0+Z3Jvd19tdHgpOwotCWlm IChvbGRfbGltaXQgIT0gTlVMTCkgewotCQkqb2xkX2xpbWl0ID0gc3pfcGluZDJzeihwYWMtPmV4 cF9ncm93LmxpbWl0KTsKLQl9Ci0JaWYgKG5ld19saW1pdCAhPSBOVUxMKSB7Ci0JCXBhYy0+ZXhw X2dyb3cubGltaXQgPSBuZXdfaW5kOwotCX0KLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZw YWMtPmdyb3dfbXR4KTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHNpemVfdAotcGFj X3N0YXNoX2RlY2F5ZWQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBlY2FjaGVfdCAqZWNhY2hl LAotICAgIHNpemVfdCBucGFnZXNfbGltaXQsIHNpemVfdCBucGFnZXNfZGVjYXlfbWF4LAotICAg IGVkYXRhX2xpc3RfaW5hY3RpdmVfdCAqcmVzdWx0KSB7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhf dG9fcmFuayh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkbiksCi0JICAgIFdJVE5FU1NfUkFOS19D T1JFLCAwKTsKLQllaG9va3NfdCAqZWhvb2tzID0gcGFjX2Vob29rc19nZXQocGFjKTsKLQotCS8q IFN0YXNoIGV4dGVudHMgYWNjb3JkaW5nIHRvIG5wYWdlc19saW1pdC4gKi8KLQlzaXplX3QgbnN0 YXNoZWQgPSAwOwotCXdoaWxlIChuc3Rhc2hlZCA8IG5wYWdlc19kZWNheV9tYXgpIHsKLQkJZWRh dGFfdCAqZWRhdGEgPSBlY2FjaGVfZXZpY3QodHNkbiwgcGFjLCBlaG9va3MsIGVjYWNoZSwKLQkJ ICAgIG5wYWdlc19saW1pdCk7Ci0JCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0JCQlicmVhazsKLQkJ fQotCQllZGF0YV9saXN0X2luYWN0aXZlX2FwcGVuZChyZXN1bHQsIGVkYXRhKTsKLQkJbnN0YXNo ZWQgKz0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpID4+IExHX1BBR0U7Ci0JfQotCXJldHVybiBuc3Rh c2hlZDsKLX0KLQotc3RhdGljIHNpemVfdAotcGFjX2RlY2F5X3N0YXNoZWQodHNkbl90ICp0c2Ru LCBwYWNfdCAqcGFjLCBkZWNheV90ICpkZWNheSwKLSAgICBwYWNfZGVjYXlfc3RhdHNfdCAqZGVj YXlfc3RhdHMsIGVjYWNoZV90ICplY2FjaGUsIGJvb2wgZnVsbHlfZGVjYXksCi0gICAgZWRhdGFf bGlzdF9pbmFjdGl2ZV90ICpkZWNheV9leHRlbnRzKSB7Ci0JYm9vbCBlcnI7Ci0KLQlzaXplX3Qg bm1hZHZpc2UgPSAwOwotCXNpemVfdCBudW5tYXBwZWQgPSAwOwotCXNpemVfdCBucHVyZ2VkID0g MDsKLQotCWVob29rc190ICplaG9va3MgPSBwYWNfZWhvb2tzX2dldChwYWMpOwotCi0JYm9vbCB0 cnlfbXV6enkgPSAhZnVsbHlfZGVjYXkKLQkgICAgJiYgcGFjX2RlY2F5X21zX2dldChwYWMsIGV4 dGVudF9zdGF0ZV9tdXp6eSkgIT0gMDsKLQotCWZvciAoZWRhdGFfdCAqZWRhdGEgPSBlZGF0YV9s aXN0X2luYWN0aXZlX2ZpcnN0KGRlY2F5X2V4dGVudHMpOyBlZGF0YSAhPQotCSAgICBOVUxMOyBl ZGF0YSA9IGVkYXRhX2xpc3RfaW5hY3RpdmVfZmlyc3QoZGVjYXlfZXh0ZW50cykpIHsKLQkJZWRh dGFfbGlzdF9pbmFjdGl2ZV9yZW1vdmUoZGVjYXlfZXh0ZW50cywgZWRhdGEpOwotCi0JCXNpemVf dCBzaXplID0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOwotCQlzaXplX3QgbnBhZ2VzID0gc2l6ZSA+ PiBMR19QQUdFOwotCi0JCW5tYWR2aXNlKys7Ci0JCW5wdXJnZWQgKz0gbnBhZ2VzOwotCi0JCXN3 aXRjaCAoZWNhY2hlLT5zdGF0ZSkgewotCQljYXNlIGV4dGVudF9zdGF0ZV9hY3RpdmU6Ci0JCQlu b3RfcmVhY2hlZCgpOwotCQljYXNlIGV4dGVudF9zdGF0ZV9kaXJ0eToKLQkJCWlmICh0cnlfbXV6 enkpIHsKLQkJCQllcnIgPSBleHRlbnRfcHVyZ2VfbGF6eV93cmFwcGVyKHRzZG4sIGVob29rcywK LQkJCQkgICAgZWRhdGEsIC8qIG9mZnNldCAqLyAwLCBzaXplKTsKLQkJCQlpZiAoIWVycikgewot CQkJCQllY2FjaGVfZGFsbG9jKHRzZG4sIHBhYywgZWhvb2tzLAotCQkJCQkgICAgJnBhYy0+ZWNh Y2hlX211enp5LCBlZGF0YSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCUpFTUFMTE9D X0ZBTExUSFJPVUdIOwotCQljYXNlIGV4dGVudF9zdGF0ZV9tdXp6eToKLQkJCWV4dGVudF9kYWxs b2Nfd3JhcHBlcih0c2RuLCBwYWMsIGVob29rcywgZWRhdGEpOwotCQkJbnVubWFwcGVkICs9IG5w YWdlczsKLQkJCWJyZWFrOwotCQljYXNlIGV4dGVudF9zdGF0ZV9yZXRhaW5lZDoKLQkJZGVmYXVs dDoKLQkJCW5vdF9yZWFjaGVkKCk7Ci0JCX0KLQl9Ci0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0J CUxPQ0tFRElOVF9NVFhfTE9DSyh0c2RuLCAqcGFjLT5zdGF0c19tdHgpOwotCQlsb2NrZWRfaW5j X3U2NCh0c2RuLCBMT0NLRURJTlRfTVRYKCpwYWMtPnN0YXRzX210eCksCi0JCSAgICAmZGVjYXlf c3RhdHMtPm5wdXJnZSwgMSk7Ci0JCWxvY2tlZF9pbmNfdTY0KHRzZG4sIExPQ0tFRElOVF9NVFgo KnBhYy0+c3RhdHNfbXR4KSwKLQkJICAgICZkZWNheV9zdGF0cy0+bm1hZHZpc2UsIG5tYWR2aXNl KTsKLQkJbG9ja2VkX2luY191NjQodHNkbiwgTE9DS0VESU5UX01UWCgqcGFjLT5zdGF0c19tdHgp LAotCQkgICAgJmRlY2F5X3N0YXRzLT5wdXJnZWQsIG5wdXJnZWQpOwotCQlMT0NLRURJTlRfTVRY X1VOTE9DSyh0c2RuLCAqcGFjLT5zdGF0c19tdHgpOwotCQlhdG9taWNfZmV0Y2hfc3ViX3p1KCZw YWMtPnN0YXRzLT5wYWNfbWFwcGVkLAotCQkgICAgbnVubWFwcGVkIDw8IExHX1BBR0UsIEFUT01J Q19SRUxBWEVEKTsKLQl9Ci0KLQlyZXR1cm4gbnB1cmdlZDsKLX0KLQotLyoKLSAqIG5wYWdlc19s aW1pdDogRGVjYXkgYXQgbW9zdCBucGFnZXNfZGVjYXlfbWF4IHBhZ2VzIHdpdGhvdXQgdmlvbGF0 aW5nIHRoZQotICogaW52YXJpYW50OiAoZWNhY2hlX25wYWdlc19nZXQoZWNhY2hlKSA+PSBucGFn ZXNfbGltaXQpLiAgV2UgbmVlZCBhbiB1cHBlcgotICogYm91bmQgb24gbnVtYmVyIG9mIHBhZ2Vz IGluIG9yZGVyIHRvIHByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aCAobmFtZWx5IGluCi0gKiBzdGFz aGVkKSwgb3RoZXJ3aXNlIHVuYm91bmRlZCBuZXcgcGFnZXMgY291bGQgYmUgYWRkZWQgdG8gZXh0 ZW50cyBkdXJpbmcgdGhlCi0gKiBjdXJyZW50IGRlY2F5IHJ1biwgc28gdGhhdCB0aGUgcHVyZ2lu ZyB0aHJlYWQgbmV2ZXIgZmluaXNoZXMuCi0gKi8KLXN0YXRpYyB2b2lkCi1wYWNfZGVjYXlfdG9f bGltaXQodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjLCBkZWNheV90ICpkZWNheSwKLSAgICBwYWNf ZGVjYXlfc3RhdHNfdCAqZGVjYXlfc3RhdHMsIGVjYWNoZV90ICplY2FjaGUsIGJvb2wgZnVsbHlf ZGVjYXksCi0gICAgc2l6ZV90IG5wYWdlc19saW1pdCwgc2l6ZV90IG5wYWdlc19kZWNheV9tYXgp IHsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKHRzZG5fd2l0bmVzc190c2RwX2dldCh0 c2RuKSwKLQkgICAgV0lUTkVTU19SQU5LX0NPUkUsIDEpOwotCi0JaWYgKGRlY2F5LT5wdXJnaW5n IHx8IG5wYWdlc19kZWNheV9tYXggPT0gMCkgewotCQlyZXR1cm47Ci0JfQotCWRlY2F5LT5wdXJn aW5nID0gdHJ1ZTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZkZWNheS0+bXR4KTsKLQot CWVkYXRhX2xpc3RfaW5hY3RpdmVfdCBkZWNheV9leHRlbnRzOwotCWVkYXRhX2xpc3RfaW5hY3Rp dmVfaW5pdCgmZGVjYXlfZXh0ZW50cyk7Ci0Jc2l6ZV90IG5wdXJnZSA9IHBhY19zdGFzaF9kZWNh eWVkKHRzZG4sIHBhYywgZWNhY2hlLCBucGFnZXNfbGltaXQsCi0JICAgIG5wYWdlc19kZWNheV9t YXgsICZkZWNheV9leHRlbnRzKTsKLQlpZiAobnB1cmdlICE9IDApIHsKLQkJc2l6ZV90IG5wdXJn ZWQgPSBwYWNfZGVjYXlfc3Rhc2hlZCh0c2RuLCBwYWMsIGRlY2F5LAotCQkgICAgZGVjYXlfc3Rh dHMsIGVjYWNoZSwgZnVsbHlfZGVjYXksICZkZWNheV9leHRlbnRzKTsKLQkJYXNzZXJ0KG5wdXJn ZWQgPT0gbnB1cmdlKTsKLQl9Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZGVjYXktPm10 eCk7Ci0JZGVjYXktPnB1cmdpbmcgPSBmYWxzZTsKLX0KLQotdm9pZAotcGFjX2RlY2F5X2FsbCh0 c2RuX3QgKnRzZG4sIHBhY190ICpwYWMsIGRlY2F5X3QgKmRlY2F5LAotICAgIHBhY19kZWNheV9z dGF0c190ICpkZWNheV9zdGF0cywgZWNhY2hlX3QgKmVjYWNoZSwgYm9vbCBmdWxseV9kZWNheSkg ewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJmRlY2F5LT5tdHgpOwotCXBhY19k ZWNheV90b19saW1pdCh0c2RuLCBwYWMsIGRlY2F5LCBkZWNheV9zdGF0cywgZWNhY2hlLCBmdWxs eV9kZWNheSwKLQkgICAgLyogbnBhZ2VzX2xpbWl0ICovIDAsIGVjYWNoZV9ucGFnZXNfZ2V0KGVj YWNoZSkpOwotfQotCi1zdGF0aWMgdm9pZAotcGFjX2RlY2F5X3RyeV9wdXJnZSh0c2RuX3QgKnRz ZG4sIHBhY190ICpwYWMsIGRlY2F5X3QgKmRlY2F5LAotICAgIHBhY19kZWNheV9zdGF0c190ICpk ZWNheV9zdGF0cywgZWNhY2hlX3QgKmVjYWNoZSwKLSAgICBzaXplX3QgY3VycmVudF9ucGFnZXMs IHNpemVfdCBucGFnZXNfbGltaXQpIHsKLQlpZiAoY3VycmVudF9ucGFnZXMgPiBucGFnZXNfbGlt aXQpIHsKLQkJcGFjX2RlY2F5X3RvX2xpbWl0KHRzZG4sIHBhYywgZGVjYXksIGRlY2F5X3N0YXRz LCBlY2FjaGUsCi0JCSAgICAvKiBmdWxseV9kZWNheSAqLyBmYWxzZSwgbnBhZ2VzX2xpbWl0LAot CQkgICAgY3VycmVudF9ucGFnZXMgLSBucGFnZXNfbGltaXQpOwotCX0KLX0KLQotYm9vbAotcGFj X21heWJlX2RlY2F5X3B1cmdlKHRzZG5fdCAqdHNkbiwgcGFjX3QgKnBhYywgZGVjYXlfdCAqZGVj YXksCi0gICAgcGFjX2RlY2F5X3N0YXRzX3QgKmRlY2F5X3N0YXRzLCBlY2FjaGVfdCAqZWNhY2hl LAotICAgIHBhY19wdXJnZV9lYWdlcm5lc3NfdCBlYWdlcm5lc3MpIHsKLQltYWxsb2NfbXV0ZXhf YXNzZXJ0X293bmVyKHRzZG4sICZkZWNheS0+bXR4KTsKLQotCS8qIFB1cmdlIGFsbCBvciBub3Ro aW5nIGlmIHRoZSBvcHRpb24gaXMgZGlzYWJsZWQuICovCi0Jc3NpemVfdCBkZWNheV9tcyA9IGRl Y2F5X21zX3JlYWQoZGVjYXkpOwotCWlmIChkZWNheV9tcyA8PSAwKSB7Ci0JCWlmIChkZWNheV9t cyA9PSAwKSB7Ci0JCQlwYWNfZGVjYXlfdG9fbGltaXQodHNkbiwgcGFjLCBkZWNheSwgZGVjYXlf c3RhdHMsCi0JCQkgICAgZWNhY2hlLCAvKiBmdWxseV9kZWNheSAqLyBmYWxzZSwKLQkJCSAgICAv KiBucGFnZXNfbGltaXQgKi8gMCwgZWNhY2hlX25wYWdlc19nZXQoZWNhY2hlKSk7Ci0JCX0KLQkJ cmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogSWYgdGhlIGRlYWRsaW5lIGhhcyBiZWVuIHJl YWNoZWQsIGFkdmFuY2UgdG8gdGhlIGN1cnJlbnQgZXBvY2ggYW5kCi0JICogcHVyZ2UgdG8gdGhl IG5ldyBsaW1pdCBpZiBuZWNlc3NhcnkuICBOb3RlIHRoYXQgZGlydHkgcGFnZXMgY3JlYXRlZAot CSAqIGR1cmluZyB0aGUgY3VycmVudCBlcG9jaCBhcmUgbm90IHN1YmplY3QgdG8gcHVyZ2UgdW50 aWwgYSBmdXR1cmUKLQkgKiBlcG9jaCwgc28gYXMgYSByZXN1bHQgcHVyZ2luZyBvbmx5IGhhcHBl bnMgZHVyaW5nIGVwb2NoIGFkdmFuY2VzLCBvcgotCSAqIGJlaW5nIHRyaWdnZXJlZCBieSBiYWNr Z3JvdW5kIHRocmVhZHMgKHNjaGVkdWxlZCBldmVudCkuCi0JICovCi0JbnN0aW1lX3QgdGltZTsK LQluc3RpbWVfaW5pdF91cGRhdGUoJnRpbWUpOwotCXNpemVfdCBucGFnZXNfY3VycmVudCA9IGVj YWNoZV9ucGFnZXNfZ2V0KGVjYWNoZSk7Ci0JYm9vbCBlcG9jaF9hZHZhbmNlZCA9IGRlY2F5X21h eWJlX2FkdmFuY2VfZXBvY2goZGVjYXksICZ0aW1lLAotCSAgICBucGFnZXNfY3VycmVudCk7Ci0J aWYgKGVhZ2VybmVzcyA9PSBQQUNfUFVSR0VfQUxXQVlTCi0JICAgIHx8IChlcG9jaF9hZHZhbmNl ZCAmJiBlYWdlcm5lc3MgPT0gUEFDX1BVUkdFX09OX0VQT0NIX0FEVkFOQ0UpKSB7Ci0JCXNpemVf dCBucGFnZXNfbGltaXQgPSBkZWNheV9ucGFnZXNfbGltaXRfZ2V0KGRlY2F5KTsKLQkJcGFjX2Rl Y2F5X3RyeV9wdXJnZSh0c2RuLCBwYWMsIGRlY2F5LCBkZWNheV9zdGF0cywgZWNhY2hlLAotCQkg ICAgbnBhZ2VzX2N1cnJlbnQsIG5wYWdlc19saW1pdCk7Ci0JfQotCi0JcmV0dXJuIGVwb2NoX2Fk dmFuY2VkOwotfQotCi1ib29sCi1wYWNfZGVjYXlfbXNfc2V0KHRzZG5fdCAqdHNkbiwgcGFjX3Qg KnBhYywgZXh0ZW50X3N0YXRlX3Qgc3RhdGUsCi0gICAgc3NpemVfdCBkZWNheV9tcywgcGFjX3B1 cmdlX2VhZ2VybmVzc190IGVhZ2VybmVzcykgewotCWRlY2F5X3QgKmRlY2F5OwotCXBhY19kZWNh eV9zdGF0c190ICpkZWNheV9zdGF0czsKLQllY2FjaGVfdCAqZWNhY2hlOwotCXBhY19kZWNheV9k YXRhX2dldChwYWMsIHN0YXRlLCAmZGVjYXksICZkZWNheV9zdGF0cywgJmVjYWNoZSk7Ci0KLQlp ZiAoIWRlY2F5X21zX3ZhbGlkKGRlY2F5X21zKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlt YWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmZGVjYXktPm10eCk7Ci0JLyoKLQkgKiBSZXN0YXJ0IGRl Y2F5IGJhY2tsb2cgZnJvbSBzY3JhdGNoLCB3aGljaCBtYXkgY2F1c2UgbWFueSBkaXJ0eSBwYWdl cwotCSAqIHRvIGJlIGltbWVkaWF0ZWx5IHB1cmdlZC4gIEl0IHdvdWxkIGNvbmNlcHR1YWxseSBi ZSBwb3NzaWJsZSB0byBtYXAKLQkgKiB0aGUgb2xkIGJhY2tsb2cgb250byB0aGUgbmV3IGJhY2ts b2csIGJ1dCB0aGVyZSBpcyBubyBqdXN0aWZpY2F0aW9uCi0JICogZm9yIHN1Y2ggY29tcGxleGl0 eSBzaW5jZSBkZWNheV9tcyBjaGFuZ2VzIGFyZSBpbnRlbmRlZCB0byBiZQotCSAqIGluZnJlcXVl bnQsIGVpdGhlciBiZXR3ZWVuIHRoZSB7LTEsIDAsID4wfSBzdGF0ZXMsIG9yIGEgb25lLXRpbWUK LQkgKiBhcmJpdHJhcnkgY2hhbmdlIGR1cmluZyBpbml0aWFsIGFyZW5hIGNvbmZpZ3VyYXRpb24u Ci0JICovCi0JbnN0aW1lX3QgY3VyX3RpbWU7Ci0JbnN0aW1lX2luaXRfdXBkYXRlKCZjdXJfdGlt ZSk7Ci0JZGVjYXlfcmVpbml0KGRlY2F5LCAmY3VyX3RpbWUsIGRlY2F5X21zKTsKLQlwYWNfbWF5 YmVfZGVjYXlfcHVyZ2UodHNkbiwgcGFjLCBkZWNheSwgZGVjYXlfc3RhdHMsIGVjYWNoZSwgZWFn ZXJuZXNzKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZkZWNheS0+bXR4KTsKLQotCXJl dHVybiBmYWxzZTsKLX0KLQotc3NpemVfdAotcGFjX2RlY2F5X21zX2dldChwYWNfdCAqcGFjLCBl eHRlbnRfc3RhdGVfdCBzdGF0ZSkgewotCWRlY2F5X3QgKmRlY2F5OwotCXBhY19kZWNheV9zdGF0 c190ICpkZWNheV9zdGF0czsKLQllY2FjaGVfdCAqZWNhY2hlOwotCXBhY19kZWNheV9kYXRhX2dl dChwYWMsIHN0YXRlLCAmZGVjYXksICZkZWNheV9zdGF0cywgJmVjYWNoZSk7Ci0JcmV0dXJuIGRl Y2F5X21zX3JlYWQoZGVjYXkpOwotfQotCi12b2lkCi1wYWNfcmVzZXQodHNkbl90ICp0c2RuLCBw YWNfdCAqcGFjKSB7Ci0JLyoKLQkgKiBOby1vcCBmb3Igbm93OyBwdXJnaW5nIGlzIHN0aWxsIGRv bmUgYXQgdGhlIGFyZW5hLWxldmVsLiAgSXQgc2hvdWxkCi0JICogZ2V0IG1vdmVkIGluIGhlcmUs IHRob3VnaC4KLQkgKi8KLQkodm9pZCl0c2RuOwotCSh2b2lkKXBhYzsKLX0KLQotdm9pZAotcGFj X2Rlc3Ryb3kodHNkbl90ICp0c2RuLCBwYWNfdCAqcGFjKSB7Ci0JYXNzZXJ0KGVjYWNoZV9ucGFn ZXNfZ2V0KCZwYWMtPmVjYWNoZV9kaXJ0eSkgPT0gMCk7Ci0JYXNzZXJ0KGVjYWNoZV9ucGFnZXNf Z2V0KCZwYWMtPmVjYWNoZV9tdXp6eSkgPT0gMCk7Ci0JLyoKLQkgKiBJdGVyYXRlIG92ZXIgdGhl IHJldGFpbmVkIGV4dGVudHMgYW5kIGRlc3Ryb3kgdGhlbS4gIFRoaXMgZ2l2ZXMgdGhlCi0JICog ZXh0ZW50IGFsbG9jYXRvciB1bmRlcmx5aW5nIHRoZSBleHRlbnQgaG9va3MgYW4gb3Bwb3J0dW5p dHkgdG8gdW5tYXAKLQkgKiBhbGwgcmV0YWluZWQgbWVtb3J5IHdpdGhvdXQgaGF2aW5nIHRvIGtl ZXAgaXRzIG93biBtZXRhZGF0YQotCSAqIHN0cnVjdHVyZXMuICBJbiBwcmFjdGljZSwgdmlydHVh bCBtZW1vcnkgZm9yIGRzcy1hbGxvY2F0ZWQgZXh0ZW50cyBpcwotCSAqIGxlYWtlZCBoZXJlLCBz byBiZXN0IHByYWN0aWNlIGlzIHRvIGF2b2lkIGRzcyBmb3IgYXJlbmFzIHRvIGJlCi0JICogZGVz dHJveWVkLCBvciBwcm92aWRlIGN1c3RvbSBleHRlbnQgaG9va3MgdGhhdCB0cmFjayByZXRhaW5l ZAotCSAqIGRzcy1iYXNlZCBleHRlbnRzIGZvciBsYXRlciByZXVzZS4KLQkgKi8KLQllaG9va3Nf dCAqZWhvb2tzID0gcGFjX2Vob29rc19nZXQocGFjKTsKLQllZGF0YV90ICplZGF0YTsKLQl3aGls ZSAoKGVkYXRhID0gZWNhY2hlX2V2aWN0KHRzZG4sIHBhYywgZWhvb2tzLAotCSAgICAmcGFjLT5l Y2FjaGVfcmV0YWluZWQsIDApKSAhPSBOVUxMKSB7Ci0JCWV4dGVudF9kZXN0cm95X3dyYXBwZXIo dHNkbiwgcGFjLCBlaG9va3MsIGVkYXRhKTsKLQl9Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3BhZ2VzLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFnZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggOGM4M2E3ZC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC9zcmMvcGFnZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDgyNCArMCww IEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLQot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BhZ2VzLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbWFs bG9jX2lvLmgiCi0KLSNpZmRlZiBKRU1BTExPQ19TWVNDVExfVk1fT1ZFUkNPTU1JVAotI2luY2x1 ZGUgPHN5cy9zeXNjdGwuaD4KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHZtL3ZtX3Bh cmFtLmg+Ci0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIF9fTmV0QlNEX18KLSNpbmNsdWRlIDxzeXMv Yml0b3BzLmg+CS8qIGlsb2cyICovCi0jZW5kaWYKLSNpZmRlZiBKRU1BTExPQ19IQVZFX1ZNX01B S0VfVEFHCi0jZGVmaW5lIFBBR0VTX0ZEX1RBRyBWTV9NQUtFX1RBRygxMDFVKQotI2Vsc2UKLSNk ZWZpbmUgUEFHRVNfRkRfVEFHIC0xCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K LS8qIERhdGEuICovCi0KLS8qIEFjdHVhbCBvcGVyYXRpbmcgc3lzdGVtIHBhZ2Ugc2l6ZSwgZGV0 ZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcCwgPD0gUEFHRS4gKi8KLXN0YXRpYyBzaXplX3QJb3NfcGFn ZTsKLQotI2lmbmRlZiBfV0lOMzIKLSMgIGRlZmluZSBQQUdFU19QUk9UX0NPTU1JVCAoUFJPVF9S RUFEIHwgUFJPVF9XUklURSkKLSMgIGRlZmluZSBQQUdFU19QUk9UX0RFQ09NTUlUIChQUk9UX05P TkUpCi1zdGF0aWMgaW50CW1tYXBfZmxhZ3M7Ci0jZW5kaWYKLXN0YXRpYyBib29sCW9zX292ZXJj b21taXRzOwotCi1jb25zdCBjaGFyICp0aHBfbW9kZV9uYW1lc1tdID0gewotCSJkZWZhdWx0IiwK LQkiYWx3YXlzIiwKLQkibmV2ZXIiLAotCSJub3Qgc3VwcG9ydGVkIgotfTsKLXRocF9tb2RlX3Qg b3B0X3RocCA9IFRIUF9NT0RFX0RFRkFVTFQ7Ci10aHBfbW9kZV90IGluaXRfc3lzdGVtX3RocF9t b2RlOwotCi0vKiBSdW50aW1lIHN1cHBvcnQgZm9yIGxhenkgcHVyZ2UuIElycmVsZXZhbnQgd2hl biAhcGFnZXNfY2FuX3B1cmdlX2xhenkuICovCi1zdGF0aWMgYm9vbCBwYWdlc19jYW5fcHVyZ2Vf bGF6eV9ydW50aW1lID0gdHJ1ZTsKLQotI2lmZGVmIEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9O VE5FRURfWkVST1MKLXN0YXRpYyBpbnQgbWFkdmlzZV9kb250X25lZWRfemVyb3NfaXNfZmF1bHR5 ID0gLTE7Ci0vKioKLSAqIENoZWNrIHRoYXQgTUFEVl9ET05UTkVFRCB3aWxsIGFjdHVhbGx5IHpl cm8gcGFnZXMgb24gc3Vic2VxdWVudCBhY2Nlc3MuCi0gKgotICogU2luY2UgcWVtdSBkb2VzIG5v dCBzdXBwb3J0IHRoaXMsIHlldCBbMV0sIGFuZCB5b3UgY2FuIGdldCB2ZXJ5IHRyaWNreQotICog YXNzZXJ0IGlmIHlvdSB3aWxsIHJ1biBwcm9ncmFtIHdpdGggamVtYWxsb2MgaW4gdXNlIHVuZGVy IHFlbXU6Ci0gKgotICogICAgIDxqZW1hbGxvYz46IC4uL2NvbnRyaWIvamVtYWxsb2Mvc3JjL2V4 dGVudC5jOjExOTU6IEZhaWxlZCBhc3NlcnRpb246ICJwW2ldID09IDAiCi0gKgotICogICBbMV06 IGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvMTA1NzY2MzcvCi0gKi8KLXN0YXRp YyBpbnQgbWFkdmlzZV9NQURWX0RPTlRORUVEX3plcm9lc19wYWdlcygpCi17Ci0JaW50IHdvcmtz ID0gLTE7Ci0Jc2l6ZV90IHNpemUgPSBQQUdFOwotCi0Jdm9pZCAqIGFkZHIgPSBtbWFwKE5VTEws IHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAotCSAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllN T1VTLCAtMSwgMCk7Ci0KLQlpZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7Ci0JCW1hbGxvY193cml0 ZSgiPGplbWFsbG9jPjogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgIgotCQkgICAgIk1BRFZf RE9OVE5FRUQgY2hlY2tcbiIpOwotCQlpZiAob3B0X2Fib3J0KSB7Ci0JCQlhYm9ydCgpOwotCQl9 Ci0JfQotCi0JbWVtc2V0KGFkZHIsICdBJywgc2l6ZSk7Ci0JaWYgKG1hZHZpc2UoYWRkciwgc2l6 ZSwgTUFEVl9ET05UTkVFRCkgPT0gMCkgewotCQl3b3JrcyA9IG1lbWNocihhZGRyLCAnQScsIHNp emUpID09IE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSWYgbWFkdmlzZSgpIGRvZXMgbm90 IHN1cHBvcnQgTUFEVl9ET05UTkVFRCwgdGhlbiB3ZSBjYW4KLQkJICogY2FsbCBpdCBhbnl3YXks IGFuZCB1c2UgaXQncyByZXR1cm4gY29kZS4KLQkJICovCi0JCXdvcmtzID0gMTsKLQl9Ci0KLQlp ZiAobXVubWFwKGFkZHIsIHNpemUpICE9IDApIHsKLQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+ OiBDYW5ub3QgZGVhbGxvY2F0ZSBtZW1vcnkgZm9yICIKLQkJICAgICJNQURWX0RPTlRORUVEIGNo ZWNrXG4iKTsKLQkJaWYgKG9wdF9hYm9ydCkgewotCQkJYWJvcnQoKTsKLQkJfQotCX0KLQotCXJl dHVybiB3b3JrczsKLX0KLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAq IEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgcmVmZXJl bmNlZCBwcmlvciB0bwotICogZGVmaW5pdGlvbi4KLSAqLwotCi1zdGF0aWMgdm9pZCBvc19wYWdl c191bm1hcCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Ci0KLS8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCi0KLXN0YXRpYyB2b2lkICoKLW9zX3BhZ2VzX21hcCh2b2lkICphZGRyLCBzaXplX3Qgc2l6 ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCAqY29tbWl0KSB7Ci0JYXNzZXJ0KEFMSUdOTUVOVF9B RERSMkJBU0UoYWRkciwgb3NfcGFnZSkgPT0gYWRkcik7Ci0JYXNzZXJ0KEFMSUdOTUVOVF9DRUlM SU5HKHNpemUsIG9zX3BhZ2UpID09IHNpemUpOwotCWFzc2VydChzaXplICE9IDApOwotCi0JaWYg KG9zX292ZXJjb21taXRzKSB7Ci0JCSpjb21taXQgPSB0cnVlOwotCX0KLQotCXZvaWQgKnJldDsK LSNpZmRlZiBfV0lOMzIKLQkvKgotCSAqIElmIFZpcnR1YWxBbGxvYyBjYW4ndCBhbGxvY2F0ZSBh dCB0aGUgZ2l2ZW4gYWRkcmVzcyB3aGVuIG9uZSBpcwotCSAqIGdpdmVuLCBpdCBmYWlscyBhbmQg cmV0dXJucyBOVUxMLgotCSAqLwotCXJldCA9IFZpcnR1YWxBbGxvYyhhZGRyLCBzaXplLCBNRU1f UkVTRVJWRSB8ICgqY29tbWl0ID8gTUVNX0NPTU1JVCA6IDApLAotCSAgICBQQUdFX1JFQURXUklU RSk7Ci0jZWxzZQotCS8qCi0JICogV2UgZG9uJ3QgdXNlIE1BUF9GSVhFRCBoZXJlLCBiZWNhdXNl IGl0IGNhbiBjYXVzZSB0aGUgKnJlcGxhY2VtZW50KgotCSAqIG9mIGV4aXN0aW5nIG1hcHBpbmdz LCBhbmQgd2Ugb25seSB3YW50IHRvIGNyZWF0ZSBuZXcgbWFwcGluZ3MuCi0JICovCi0JewotI2lm ZGVmIF9fTmV0QlNEX18KLQkJLyoKLQkJICogT24gTmV0QlNEIFBBR0UgZm9yIGEgcGxhdGZvcm0g aXMgZGVmaW5lZCB0byB0aGUKLQkJICogbWF4aW11bSBwYWdlIHNpemUgb2YgYWxsIG1hY2hpbmUg YXJjaGl0ZWN0dXJlcwotCQkgKiBmb3IgdGhhdCBwbGF0Zm9ybSwgc28gdGhhdCB3ZSBjYW4gdXNl IHRoZSBzYW1lCi0JCSAqIGJpbmFyaWVzIGFjcm9zcyBhbGwgbWFjaGluZSBhcmNoaXRlY3R1cmVz LgotCQkgKi8KLQkJaWYgKGFsaWdubWVudCA+IG9zX3BhZ2UgfHwgUEFHRSA+IG9zX3BhZ2UpIHsK LQkJCXVuc2lnbmVkIGludCBhID0gaWxvZzIoTUFYKGFsaWdubWVudCwgUEFHRSkpOwotCQkJbW1h cF9mbGFncyB8PSBNQVBfQUxJR05FRChhKTsKLQkJfQotI2VuZGlmCi0JCWludCBwcm90ID0gKmNv bW1pdCA/IFBBR0VTX1BST1RfQ09NTUlUIDogUEFHRVNfUFJPVF9ERUNPTU1JVDsKLQotCQlyZXQg PSBtbWFwKGFkZHIsIHNpemUsIHByb3QsIG1tYXBfZmxhZ3MsIFBBR0VTX0ZEX1RBRywgMCk7Ci0J fQotCWFzc2VydChyZXQgIT0gTlVMTCk7Ci0KLQlpZiAocmV0ID09IE1BUF9GQUlMRUQpIHsKLQkJ cmV0ID0gTlVMTDsKLQl9IGVsc2UgaWYgKGFkZHIgIT0gTlVMTCAmJiByZXQgIT0gYWRkcikgewot CQkvKgotCQkgKiBXZSBzdWNjZWVkZWQgaW4gbWFwcGluZyBtZW1vcnksIGJ1dCBub3QgaW4gdGhl IHJpZ2h0IHBsYWNlLgotCQkgKi8KLQkJb3NfcGFnZXNfdW5tYXAocmV0LCBzaXplKTsKLQkJcmV0 ID0gTlVMTDsKLQl9Ci0jZW5kaWYKLQlhc3NlcnQocmV0ID09IE5VTEwgfHwgKGFkZHIgPT0gTlVM TCAmJiByZXQgIT0gYWRkcikgfHwgKGFkZHIgIT0gTlVMTCAmJgotCSAgICByZXQgPT0gYWRkcikp OwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLW9zX3BhZ2VzX3RyaW0odm9pZCAq YWRkciwgc2l6ZV90IGFsbG9jX3NpemUsIHNpemVfdCBsZWFkc2l6ZSwgc2l6ZV90IHNpemUsCi0g ICAgYm9vbCAqY29tbWl0KSB7Ci0Jdm9pZCAqcmV0ID0gKHZvaWQgKikoKHVpbnRwdHJfdClhZGRy ICsgbGVhZHNpemUpOwotCi0JYXNzZXJ0KGFsbG9jX3NpemUgPj0gbGVhZHNpemUgKyBzaXplKTsK LSNpZmRlZiBfV0lOMzIKLQlvc19wYWdlc191bm1hcChhZGRyLCBhbGxvY19zaXplKTsKLQl2b2lk ICpuZXdfYWRkciA9IG9zX3BhZ2VzX21hcChyZXQsIHNpemUsIFBBR0UsIGNvbW1pdCk7Ci0JaWYg KG5ld19hZGRyID09IHJldCkgewotCQlyZXR1cm4gcmV0OwotCX0KLQlpZiAobmV3X2FkZHIgIT0g TlVMTCkgewotCQlvc19wYWdlc191bm1hcChuZXdfYWRkciwgc2l6ZSk7Ci0JfQotCXJldHVybiBO VUxMOwotI2Vsc2UKLQlzaXplX3QgdHJhaWxzaXplID0gYWxsb2Nfc2l6ZSAtIGxlYWRzaXplIC0g c2l6ZTsKLQotCWlmIChsZWFkc2l6ZSAhPSAwKSB7Ci0JCW9zX3BhZ2VzX3VubWFwKGFkZHIsIGxl YWRzaXplKTsKLQl9Ci0JaWYgKHRyYWlsc2l6ZSAhPSAwKSB7Ci0JCW9zX3BhZ2VzX3VubWFwKCh2 b2lkICopKCh1aW50cHRyX3QpcmV0ICsgc2l6ZSksIHRyYWlsc2l6ZSk7Ci0JfQotCXJldHVybiBy ZXQ7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLW9zX3BhZ2VzX3VubWFwKHZvaWQgKmFkZHIs IHNpemVfdCBzaXplKSB7Ci0JYXNzZXJ0KEFMSUdOTUVOVF9BRERSMkJBU0UoYWRkciwgb3NfcGFn ZSkgPT0gYWRkcik7Ci0JYXNzZXJ0KEFMSUdOTUVOVF9DRUlMSU5HKHNpemUsIG9zX3BhZ2UpID09 IHNpemUpOwotCi0jaWZkZWYgX1dJTjMyCi0JaWYgKFZpcnR1YWxGcmVlKGFkZHIsIDAsIE1FTV9S RUxFQVNFKSA9PSAwKQotI2Vsc2UKLQlpZiAobXVubWFwKGFkZHIsIHNpemUpID09IC0xKQotI2Vu ZGlmCi0JewotCQljaGFyIGJ1ZltCVUZFUlJPUl9CVUZdOwotCi0JCWJ1ZmVycm9yKGdldF9lcnJu bygpLCBidWYsIHNpemVvZihidWYpKTsKLQkJbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogRXJy b3IgaW4gIgotI2lmZGVmIF9XSU4zMgotCQkgICAgIlZpcnR1YWxGcmVlIgotI2Vsc2UKLQkJICAg ICJtdW5tYXAiCi0jZW5kaWYKLQkJICAgICIoKTogJXNcbiIsIGJ1Zik7Ci0JCWlmIChvcHRfYWJv cnQpIHsKLQkJCWFib3J0KCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXBhZ2VzX21h cF9zbG93KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICpjb21taXQpIHsKLQlz aXplX3QgYWxsb2Nfc2l6ZSA9IHNpemUgKyBhbGlnbm1lbnQgLSBvc19wYWdlOwotCS8qIEJld2Fy ZSBzaXplX3Qgd3JhcC1hcm91bmQuICovCi0JaWYgKGFsbG9jX3NpemUgPCBzaXplKSB7Ci0JCXJl dHVybiBOVUxMOwotCX0KLQotCXZvaWQgKnJldDsKLQlkbyB7Ci0JCXZvaWQgKnBhZ2VzID0gb3Nf cGFnZXNfbWFwKE5VTEwsIGFsbG9jX3NpemUsIGFsaWdubWVudCwgY29tbWl0KTsKLQkJaWYgKHBh Z2VzID09IE5VTEwpIHsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXNpemVfdCBsZWFkc2l6ZSA9 IEFMSUdOTUVOVF9DRUlMSU5HKCh1aW50cHRyX3QpcGFnZXMsIGFsaWdubWVudCkKLQkJICAgIC0g KHVpbnRwdHJfdClwYWdlczsKLQkJcmV0ID0gb3NfcGFnZXNfdHJpbShwYWdlcywgYWxsb2Nfc2l6 ZSwgbGVhZHNpemUsIHNpemUsIGNvbW1pdCk7Ci0JfSB3aGlsZSAocmV0ID09IE5VTEwpOwotCi0J YXNzZXJ0KHJldCAhPSBOVUxMKTsKLQlhc3NlcnQoUEFHRV9BRERSMkJBU0UocmV0KSA9PSByZXQp OwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgKgotcGFnZXNfbWFwKHZvaWQgKmFkZHIsIHNpemVf dCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICpjb21taXQpIHsKLQlhc3NlcnQoYWxpZ25t ZW50ID49IFBBR0UpOwotCWFzc2VydChBTElHTk1FTlRfQUREUjJCQVNFKGFkZHIsIGFsaWdubWVu dCkgPT0gYWRkcik7Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKE1BUF9F WENMKQotCS8qCi0JICogRnJlZUJTRCBoYXMgbWVjaGFuaXNtcyBib3RoIHRvIG1tYXAgYXQgc3Bl Y2lmaWMgYWRkcmVzcyB3aXRob3V0Ci0JICogdG91Y2hpbmcgZXhpc3RpbmcgbWFwcGluZ3MsIGFu ZCB0byBtbWFwIHdpdGggc3BlY2lmaWMgYWxpZ25tZW50LgotCSAqLwotCXsKLQkJaWYgKG9zX292 ZXJjb21taXRzKSB7Ci0JCQkqY29tbWl0ID0gdHJ1ZTsKLQkJfQotCi0JCWludCBwcm90ID0gKmNv bW1pdCA/IFBBR0VTX1BST1RfQ09NTUlUIDogUEFHRVNfUFJPVF9ERUNPTU1JVDsKLQkJaW50IGZs YWdzID0gbW1hcF9mbGFnczsKLQotCQlpZiAoYWRkciAhPSBOVUxMKSB7Ci0JCQlmbGFncyB8PSBN QVBfRklYRUQgfCBNQVBfRVhDTDsKLQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGFsaWdubWVudF9i aXRzID0gZmZzX3p1KGFsaWdubWVudCk7Ci0JCQlhc3NlcnQoYWxpZ25tZW50X2JpdHMgPiAwKTsK LQkJCWZsYWdzIHw9IE1BUF9BTElHTkVEKGFsaWdubWVudF9iaXRzKTsKLQkJfQotCi0JCXZvaWQg KnJldCA9IG1tYXAoYWRkciwgc2l6ZSwgcHJvdCwgZmxhZ3MsIC0xLCAwKTsKLQkJaWYgKHJldCA9 PSBNQVBfRkFJTEVEKSB7Ci0JCQlyZXQgPSBOVUxMOwotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9 Ci0jZW5kaWYKLQkvKgotCSAqIElkZWFsbHksIHRoZXJlIHdvdWxkIGJlIGEgd2F5IHRvIHNwZWNp ZnkgYWxpZ25tZW50IHRvIG1tYXAoKSAobGlrZQotCSAqIE5ldEJTRCBoYXMpLCBidXQgaW4gdGhl IGFic2VuY2Ugb2Ygc3VjaCBhIGZlYXR1cmUsIHdlIGhhdmUgdG8gd29yawotCSAqIGhhcmQgdG8g ZWZmaWNpZW50bHkgY3JlYXRlIGFsaWduZWQgbWFwcGluZ3MuICBUaGUgcmVsaWFibGUsIGJ1dAot CSAqIHNsb3cgbWV0aG9kIGlzIHRvIGNyZWF0ZSBhIG1hcHBpbmcgdGhhdCBpcyBvdmVyLXNpemVk LCB0aGVuIHRyaW0gdGhlCi0JICogZXhjZXNzLiAgSG93ZXZlciwgdGhhdCBhbHdheXMgcmVzdWx0 cyBpbiBvbmUgb3IgdHdvIGNhbGxzIHRvCi0JICogb3NfcGFnZXNfdW5tYXAoKSwgYW5kIGl0IGNh biBsZWF2ZSBob2xlcyBpbiB0aGUgcHJvY2VzcydzIHZpcnR1YWwKLQkgKiBtZW1vcnkgbWFwIGlm IG1lbW9yeSBncm93cyBkb3dud2FyZC4KLQkgKgotCSAqIE9wdGltaXN0aWNhbGx5IHRyeSBtYXBw aW5nIHByZWNpc2VseSB0aGUgcmlnaHQgYW1vdW50IGJlZm9yZSBmYWxsaW5nCi0JICogYmFjayB0 byB0aGUgc2xvdyBtZXRob2QsIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIG9wdGltaXN0 aWMKLQkgKiBhcHByb2FjaCB3b3JrcyBtb3N0IG9mIHRoZSB0aW1lLgotCSAqLwotCi0Jdm9pZCAq cmV0ID0gb3NfcGFnZXNfbWFwKGFkZHIsIHNpemUsIG9zX3BhZ2UsIGNvbW1pdCk7Ci0JaWYgKHJl dCA9PSBOVUxMIHx8IHJldCA9PSBhZGRyKSB7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWFzc2VydChh ZGRyID09IE5VTEwpOwotCWlmIChBTElHTk1FTlRfQUREUjJPRkZTRVQocmV0LCBhbGlnbm1lbnQp ICE9IDApIHsKLQkJb3NfcGFnZXNfdW5tYXAocmV0LCBzaXplKTsKLQkJcmV0dXJuIHBhZ2VzX21h cF9zbG93KHNpemUsIGFsaWdubWVudCwgY29tbWl0KTsKLQl9Ci0KLQlhc3NlcnQoUEFHRV9BRERS MkJBU0UocmV0KSA9PSByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQKLXBhZ2VzX3VubWFw KHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKSB7Ci0JYXNzZXJ0KFBBR0VfQUREUjJCQVNFKGFkZHIp ID09IGFkZHIpOwotCWFzc2VydChQQUdFX0NFSUxJTkcoc2l6ZSkgPT0gc2l6ZSk7Ci0KLQlvc19w YWdlc191bm1hcChhZGRyLCBzaXplKTsKLX0KLQotc3RhdGljIGJvb2wKLW9zX3BhZ2VzX2NvbW1p dCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgYm9vbCBjb21taXQpIHsKLQlhc3NlcnQoUEFHRV9B RERSMkJBU0UoYWRkcikgPT0gYWRkcik7Ci0JYXNzZXJ0KFBBR0VfQ0VJTElORyhzaXplKSA9PSBz aXplKTsKLQotI2lmZGVmIF9XSU4zMgotCXJldHVybiAoY29tbWl0ID8gKGFkZHIgIT0gVmlydHVh bEFsbG9jKGFkZHIsIHNpemUsIE1FTV9DT01NSVQsCi0JICAgIFBBR0VfUkVBRFdSSVRFKSkgOiAo IVZpcnR1YWxGcmVlKGFkZHIsIHNpemUsIE1FTV9ERUNPTU1JVCkpKTsKLSNlbHNlCi0JewotCQlp bnQgcHJvdCA9IGNvbW1pdCA/IFBBR0VTX1BST1RfQ09NTUlUIDogUEFHRVNfUFJPVF9ERUNPTU1J VDsKLQkJdm9pZCAqcmVzdWx0ID0gbW1hcChhZGRyLCBzaXplLCBwcm90LCBtbWFwX2ZsYWdzIHwg TUFQX0ZJWEVELAotCQkgICAgUEFHRVNfRkRfVEFHLCAwKTsKLQkJaWYgKHJlc3VsdCA9PSBNQVBf RkFJTEVEKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAocmVzdWx0ICE9IGFkZHIpIHsK LQkJCS8qCi0JCQkgKiBXZSBzdWNjZWVkZWQgaW4gbWFwcGluZyBtZW1vcnksIGJ1dCBub3QgaW4g dGhlIHJpZ2h0Ci0JCQkgKiBwbGFjZS4KLQkJCSAqLwotCQkJb3NfcGFnZXNfdW5tYXAocmVzdWx0 LCBzaXplKTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0jZW5k aWYKLX0KLQotc3RhdGljIGJvb2wKLXBhZ2VzX2NvbW1pdF9pbXBsKHZvaWQgKmFkZHIsIHNpemVf dCBzaXplLCBib29sIGNvbW1pdCkgewotCWlmIChvc19vdmVyY29tbWl0cykgewotCQlyZXR1cm4g dHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gb3NfcGFnZXNfY29tbWl0KGFkZHIsIHNpemUsIGNvbW1pdCk7 Ci19Ci0KLWJvb2wKLXBhZ2VzX2NvbW1pdCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkgewotCXJl dHVybiBwYWdlc19jb21taXRfaW1wbChhZGRyLCBzaXplLCB0cnVlKTsKLX0KLQotYm9vbAotcGFn ZXNfZGVjb21taXQodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKLQlyZXR1cm4gcGFnZXNfY29t bWl0X2ltcGwoYWRkciwgc2l6ZSwgZmFsc2UpOwotfQotCi12b2lkCi1wYWdlc19tYXJrX2d1YXJk cyh2b2lkICpoZWFkLCB2b2lkICp0YWlsKSB7Ci0JYXNzZXJ0KGhlYWQgIT0gTlVMTCB8fCB0YWls ICE9IE5VTEwpOwotCWFzc2VydChoZWFkID09IE5VTEwgfHwgdGFpbCA9PSBOVUxMIHx8Ci0JICAg ICh1aW50cHRyX3QpaGVhZCA8ICh1aW50cHRyX3QpdGFpbCk7Ci0jaWZkZWYgSkVNQUxMT0NfSEFW RV9NUFJPVEVDVAotCWlmIChoZWFkICE9IE5VTEwpIHsKLQkJbXByb3RlY3QoaGVhZCwgUEFHRSwg UFJPVF9OT05FKTsKLQl9Ci0JaWYgKHRhaWwgIT0gTlVMTCkgewotCQltcHJvdGVjdCh0YWlsLCBQ QUdFLCBQUk9UX05PTkUpOwotCX0KLSNlbHNlCi0JLyogRGVjb21taXQgc2V0cyB0byBQUk9UX05P TkUgLyBNRU1fREVDT01NSVQuICovCi0JaWYgKGhlYWQgIT0gTlVMTCkgewotCQlvc19wYWdlc19j b21taXQoaGVhZCwgUEFHRSwgZmFsc2UpOwotCX0KLQlpZiAodGFpbCAhPSBOVUxMKSB7Ci0JCW9z X3BhZ2VzX2NvbW1pdCh0YWlsLCBQQUdFLCBmYWxzZSk7Ci0JfQotI2VuZGlmCi19Ci0KLXZvaWQK LXBhZ2VzX3VubWFya19ndWFyZHModm9pZCAqaGVhZCwgdm9pZCAqdGFpbCkgewotCWFzc2VydCho ZWFkICE9IE5VTEwgfHwgdGFpbCAhPSBOVUxMKTsKLQlhc3NlcnQoaGVhZCA9PSBOVUxMIHx8IHRh aWwgPT0gTlVMTCB8fAotCSAgICAodWludHB0cl90KWhlYWQgPCAodWludHB0cl90KXRhaWwpOwot I2lmZGVmIEpFTUFMTE9DX0hBVkVfTVBST1RFQ1QKLQlib29sIGhlYWRfYW5kX3RhaWwgPSAoaGVh ZCAhPSBOVUxMKSAmJiAodGFpbCAhPSBOVUxMKTsKLQlzaXplX3QgcmFuZ2UgPSBoZWFkX2FuZF90 YWlsID8KLQkgICAgKHVpbnRwdHJfdCl0YWlsIC0gKHVpbnRwdHJfdCloZWFkICsgUEFHRSA6Ci0J ICAgIFNJWkVfVF9NQVg7Ci0JLyoKLQkgKiBUaGUgYW1vdW50IG9mIHdvcmsgdGhhdCB0aGUga2Vy bmVsIGRvZXMgaW4gbXByb3RlY3QgZGVwZW5kcyBvbiB0aGUKLQkgKiByYW5nZSBhcmd1bWVudC4g IFNDX0xBUkdFX01JTkNMQVNTIGlzIGFuIGFyYml0cmFyeSB0aHJlc2hvbGQgY2hvc2VuCi0JICog dG8gcHJldmVudCBrZXJuZWwgZnJvbSBkb2luZyB0b28gbXVjaCB3b3JrIHRoYXQgd291bGQgb3V0 d2VpZ2ggdGhlCi0JICogc2F2aW5ncyBvZiBwZXJmb3JtaW5nIG9uZSBsZXNzIHN5c3RlbSBjYWxs LgotCSAqLwotCWJvb2wgcmFuZ2VkX21wcm90ZWN0ID0gaGVhZF9hbmRfdGFpbCAmJiByYW5nZSA8 PSBTQ19MQVJHRV9NSU5DTEFTUzsKLQlpZiAocmFuZ2VkX21wcm90ZWN0KSB7Ci0JCW1wcm90ZWN0 KGhlYWQsIHJhbmdlLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQl9IGVsc2UgewotCQlpZiAo aGVhZCAhPSBOVUxMKSB7Ci0JCQltcHJvdGVjdChoZWFkLCBQQUdFLCBQUk9UX1JFQUQgfCBQUk9U X1dSSVRFKTsKLQkJfQotCQlpZiAodGFpbCAhPSBOVUxMKSB7Ci0JCQltcHJvdGVjdCh0YWlsLCBQ QUdFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKLQkJfQotCX0KLSNlbHNlCi0JaWYgKGhlYWQg IT0gTlVMTCkgewotCQlvc19wYWdlc19jb21taXQoaGVhZCwgUEFHRSwgdHJ1ZSk7Ci0JfQotCWlm ICh0YWlsICE9IE5VTEwpIHsKLQkJb3NfcGFnZXNfY29tbWl0KHRhaWwsIFBBR0UsIHRydWUpOwot CX0KLSNlbmRpZgotfQotCi1ib29sCi1wYWdlc19wdXJnZV9sYXp5KHZvaWQgKmFkZHIsIHNpemVf dCBzaXplKSB7Ci0JYXNzZXJ0KEFMSUdOTUVOVF9BRERSMkJBU0UoYWRkciwgb3NfcGFnZSkgPT0g YWRkcik7Ci0JYXNzZXJ0KFBBR0VfQ0VJTElORyhzaXplKSA9PSBzaXplKTsKLQotCWlmICghcGFn ZXNfY2FuX3B1cmdlX2xhenkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmICghcGFnZXNfY2Fu X3B1cmdlX2xhenlfcnVudGltZSkgewotCQkvKgotCQkgKiBCdWlsdCB3aXRoIGxhenkgcHVyZ2Ug ZW5hYmxlZCwgYnV0IGRldGVjdGVkIGl0IHdhcyBub3QKLQkJICogc3VwcG9ydGVkIG9uIHRoZSBj dXJyZW50IHN5c3RlbS4KLQkJICovCi0JCXJldHVybiB0cnVlOwotCX0KLQotI2lmZGVmIF9XSU4z MgotCVZpcnR1YWxBbGxvYyhhZGRyLCBzaXplLCBNRU1fUkVTRVQsIFBBR0VfUkVBRFdSSVRFKTsK LQlyZXR1cm4gZmFsc2U7Ci0jZWxpZiBkZWZpbmVkKEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRlJF RSkKLQlyZXR1cm4gKG1hZHZpc2UoYWRkciwgc2l6ZSwKLSMgIGlmZGVmIE1BRFZfRlJFRQotCSAg ICBNQURWX0ZSRUUKLSMgIGVsc2UKLQkgICAgSkVNQUxMT0NfTUFEVl9GUkVFCi0jICBlbmRpZgot CSAgICApICE9IDApOwotI2VsaWYgZGVmaW5lZChKRU1BTExPQ19QVVJHRV9NQURWSVNFX0RPTlRO RUVEKSAmJiBcCi0gICAgIWRlZmluZWQoSkVNQUxMT0NfUFVSR0VfTUFEVklTRV9ET05UTkVFRF9a RVJPUykKLQlyZXR1cm4gKG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9ET05UTkVFRCkgIT0gMCk7 Ci0jZWxpZiBkZWZpbmVkKEpFTUFMTE9DX1BVUkdFX1BPU0lYX01BRFZJU0VfRE9OVE5FRUQpICYm IFwKLSAgICAhZGVmaW5lZChKRU1BTExPQ19QVVJHRV9QT1NJWF9NQURWSVNFX0RPTlRORUVEX1pF Uk9TKQotCXJldHVybiAocG9zaXhfbWFkdmlzZShhZGRyLCBzaXplLCBQT1NJWF9NQURWX0RPTlRO RUVEKSAhPSAwKTsKLSNlbHNlCi0Jbm90X3JlYWNoZWQoKTsKLSNlbmRpZgotfQotCi1ib29sCi1w YWdlc19wdXJnZV9mb3JjZWQodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKLQlhc3NlcnQoUEFH RV9BRERSMkJBU0UoYWRkcikgPT0gYWRkcik7Ci0JYXNzZXJ0KFBBR0VfQ0VJTElORyhzaXplKSA9 PSBzaXplKTsKLQotCWlmICghcGFnZXNfY2FuX3B1cmdlX2ZvcmNlZCkgewotCQlyZXR1cm4gdHJ1 ZTsKLQl9Ci0KLSNpZiBkZWZpbmVkKEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9OVE5FRUQpICYm IFwKLSAgICBkZWZpbmVkKEpFTUFMTE9DX1BVUkdFX01BRFZJU0VfRE9OVE5FRURfWkVST1MpCi0J cmV0dXJuICh1bmxpa2VseShtYWR2aXNlX2RvbnRfbmVlZF96ZXJvc19pc19mYXVsdHkpIHx8Ci0J ICAgIG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9ET05UTkVFRCkgIT0gMCk7Ci0jZWxpZiBkZWZp bmVkKEpFTUFMTE9DX1BVUkdFX1BPU0lYX01BRFZJU0VfRE9OVE5FRUQpICYmIFwKLSAgICBkZWZp bmVkKEpFTUFMTE9DX1BVUkdFX1BPU0lYX01BRFZJU0VfRE9OVE5FRURfWkVST1MpCi0JcmV0dXJu ICh1bmxpa2VseShtYWR2aXNlX2RvbnRfbmVlZF96ZXJvc19pc19mYXVsdHkpIHx8Ci0JICAgIHBv c2l4X21hZHZpc2UoYWRkciwgc2l6ZSwgUE9TSVhfTUFEVl9ET05UTkVFRCkgIT0gMCk7Ci0jZWxp ZiBkZWZpbmVkKEpFTUFMTE9DX01BUFNfQ09BTEVTQ0UpCi0JLyogVHJ5IHRvIG92ZXJsYXkgYSBu ZXcgZGVtYW5kLXplcm9lZCBtYXBwaW5nLiAqLwotCXJldHVybiBwYWdlc19jb21taXQoYWRkciwg c2l6ZSk7Ci0jZWxzZQotCW5vdF9yZWFjaGVkKCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGJvb2wK LXBhZ2VzX2h1Z2VfaW1wbCh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgYm9vbCBhbGlnbmVkKSB7 Ci0JaWYgKGFsaWduZWQpIHsKLQkJYXNzZXJ0KEhVR0VQQUdFX0FERFIyQkFTRShhZGRyKSA9PSBh ZGRyKTsKLQkJYXNzZXJ0KEhVR0VQQUdFX0NFSUxJTkcoc2l6ZSkgPT0gc2l6ZSk7Ci0JfQotI2lm IGRlZmluZWQoSkVNQUxMT0NfSEFWRV9NQURWSVNFX0hVR0UpCi0JcmV0dXJuIChtYWR2aXNlKGFk ZHIsIHNpemUsIE1BRFZfSFVHRVBBR0UpICE9IDApOwotI2VsaWYgZGVmaW5lZChKRU1BTExPQ19I QVZFX01FTUNOVEwpCi0Jc3RydWN0IG1lbWNudGxfbWhhIG0gPSB7MH07Ci0JbS5taGFfY21kID0g TUhBX01BUFNJWkVfVkE7Ci0JbS5taGFfcGFnZXNpemUgPSBIVUdFUEFHRTsKLQlyZXR1cm4gKG1l bWNudGwoYWRkciwgc2l6ZSwgTUNfSEFUX0FEVklTRSwgKGNhZGRyX3QpJm0sIDAsIDApID09IDAp OwotI2Vsc2UKLQlyZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCi1ib29sCi1wYWdlc19odWdlKHZv aWQgKmFkZHIsIHNpemVfdCBzaXplKSB7Ci0JcmV0dXJuIHBhZ2VzX2h1Z2VfaW1wbChhZGRyLCBz aXplLCB0cnVlKTsKLX0KLQotc3RhdGljIGJvb2wKLXBhZ2VzX2h1Z2VfdW5hbGlnbmVkKHZvaWQg KmFkZHIsIHNpemVfdCBzaXplKSB7Ci0JcmV0dXJuIHBhZ2VzX2h1Z2VfaW1wbChhZGRyLCBzaXpl LCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyBib29sCi1wYWdlc19ub2h1Z2VfaW1wbCh2b2lkICphZGRy LCBzaXplX3Qgc2l6ZSwgYm9vbCBhbGlnbmVkKSB7Ci0JaWYgKGFsaWduZWQpIHsKLQkJYXNzZXJ0 KEhVR0VQQUdFX0FERFIyQkFTRShhZGRyKSA9PSBhZGRyKTsKLQkJYXNzZXJ0KEhVR0VQQUdFX0NF SUxJTkcoc2l6ZSkgPT0gc2l6ZSk7Ci0JfQotCi0jaWZkZWYgSkVNQUxMT0NfSEFWRV9NQURWSVNF X0hVR0UKLQlyZXR1cm4gKG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9OT0hVR0VQQUdFKSAhPSAw KTsKLSNlbHNlCi0JcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wKLXBhZ2VzX25vaHVn ZSh2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkgewotCXJldHVybiBwYWdlc19ub2h1Z2VfaW1wbChh ZGRyLCBzaXplLCB0cnVlKTsKLX0KLQotc3RhdGljIGJvb2wKLXBhZ2VzX25vaHVnZV91bmFsaWdu ZWQodm9pZCAqYWRkciwgc2l6ZV90IHNpemUpIHsKLQlyZXR1cm4gcGFnZXNfbm9odWdlX2ltcGwo YWRkciwgc2l6ZSwgZmFsc2UpOwotfQotCi1ib29sCi1wYWdlc19kb250ZHVtcCh2b2lkICphZGRy LCBzaXplX3Qgc2l6ZSkgewotCWFzc2VydChQQUdFX0FERFIyQkFTRShhZGRyKSA9PSBhZGRyKTsK LQlhc3NlcnQoUEFHRV9DRUlMSU5HKHNpemUpID09IHNpemUpOwotI2lmIGRlZmluZWQoSkVNQUxM T0NfTUFEVklTRV9ET05URFVNUCkKLQlyZXR1cm4gbWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0RP TlREVU1QKSAhPSAwOwotI2VsaWYgZGVmaW5lZChKRU1BTExPQ19NQURWSVNFX05PQ09SRSkKLQly ZXR1cm4gbWFkdmlzZShhZGRyLCBzaXplLCBNQURWX05PQ09SRSkgIT0gMDsKLSNlbHNlCi0JcmV0 dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWJvb2wKLXBhZ2VzX2RvZHVtcCh2b2lkICphZGRyLCBz aXplX3Qgc2l6ZSkgewotCWFzc2VydChQQUdFX0FERFIyQkFTRShhZGRyKSA9PSBhZGRyKTsKLQlh c3NlcnQoUEFHRV9DRUlMSU5HKHNpemUpID09IHNpemUpOwotI2lmIGRlZmluZWQoSkVNQUxMT0Nf TUFEVklTRV9ET05URFVNUCkKLQlyZXR1cm4gbWFkdmlzZShhZGRyLCBzaXplLCBNQURWX0RPRFVN UCkgIT0gMDsKLSNlbGlmIGRlZmluZWQoSkVNQUxMT0NfTUFEVklTRV9OT0NPUkUpCi0JcmV0dXJu IG1hZHZpc2UoYWRkciwgc2l6ZSwgTUFEVl9DT1JFKSAhPSAwOwotI2Vsc2UKLQlyZXR1cm4gZmFs c2U7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgc2l6ZV90Ci1vc19wYWdlX2RldGVjdCh2b2lkKSB7 Ci0jaWZkZWYgX1dJTjMyCi0JU1lTVEVNX0lORk8gc2k7Ci0JR2V0U3lzdGVtSW5mbygmc2kpOwot CXJldHVybiBzaS5kd1BhZ2VTaXplOwotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkvKgot CSAqIFRoaXMgcmV0dXJucyB0aGUgdmFsdWUgb2J0YWluZWQgZnJvbQotCSAqIHRoZSBhdXh2IHZl Y3RvciwgYXZvaWRpbmcgYSBzeXNjYWxsLgotCSAqLwotCXJldHVybiBnZXRwYWdlc2l6ZSgpOwot I2Vsc2UKLQlsb25nIHJlc3VsdCA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKLQlpZiAocmVzdWx0 ID09IC0xKSB7Ci0JCXJldHVybiBMR19QQUdFOwotCX0KLQlyZXR1cm4gKHNpemVfdClyZXN1bHQ7 Ci0jZW5kaWYKLX0KLQotI2lmZGVmIEpFTUFMTE9DX1NZU0NUTF9WTV9PVkVSQ09NTUlUCi1zdGF0 aWMgYm9vbAotb3Nfb3ZlcmNvbW1pdHNfc3lzY3RsKHZvaWQpIHsKLQlpbnQgdm1fb3ZlcmNvbW1p dDsKLQlzaXplX3Qgc3o7Ci0KLQlzeiA9IHNpemVvZih2bV9vdmVyY29tbWl0KTsKLSNpZiBkZWZp bmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKFZNX09WRVJDT01NSVQpCi0JaW50IG1pYlsyXTsK LQotCW1pYlswXSA9IENUTF9WTTsKLQltaWJbMV0gPSBWTV9PVkVSQ09NTUlUOwotCWlmIChzeXNj dGwobWliLCAyLCAmdm1fb3ZlcmNvbW1pdCwgJnN6LCBOVUxMLCAwKSAhPSAwKSB7Ci0JCXJldHVy biBmYWxzZTsgLyogRXJyb3IuICovCi0JfQotI2Vsc2UKLQlpZiAoc3lzY3RsYnluYW1lKCJ2bS5v dmVyY29tbWl0IiwgJnZtX292ZXJjb21taXQsICZzeiwgTlVMTCwgMCkgIT0gMCkgewotCQlyZXR1 cm4gZmFsc2U7IC8qIEVycm9yLiAqLwotCX0KLSNlbmRpZgotCi0JcmV0dXJuICgodm1fb3ZlcmNv bW1pdCAmIDB4MykgPT0gMCk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIEpFTUFMTE9DX1BST0NfU1lT X1ZNX09WRVJDT01NSVRfTUVNT1JZCi0vKgotICogVXNlIHN5c2NhbGwoMikgcmF0aGVyIHRoYW4g e29wZW4scmVhZCxjbG9zZX0oMikgd2hlbiBwb3NzaWJsZSB0byBhdm9pZAotICogcmVlbnRyeSBk dXJpbmcgYm9vdHN0cmFwcGluZyBpZiBhbm90aGVyIGxpYnJhcnkgaGFzIGludGVycG9zZWQgc3lz dGVtIGNhbGwKLSAqIHdyYXBwZXJzLgotICovCi1zdGF0aWMgYm9vbAotb3Nfb3ZlcmNvbW1pdHNf cHJvYyh2b2lkKSB7Ci0JaW50IGZkOwotCWNoYXIgYnVmWzFdOwotCi0jaWYgZGVmaW5lZChKRU1B TExPQ19VU0VfU1lTQ0FMTCkgJiYgZGVmaW5lZChTWVNfb3BlbikKLQkjaWYgZGVmaW5lZChPX0NM T0VYRUMpCi0JCWZkID0gKGludClzeXNjYWxsKFNZU19vcGVuLCAiL3Byb2Mvc3lzL3ZtL292ZXJj b21taXRfbWVtb3J5IiwgT19SRE9OTFkgfAotCQkJT19DTE9FWEVDKTsKLQkjZWxzZQotCQlmZCA9 IChpbnQpc3lzY2FsbChTWVNfb3BlbiwgIi9wcm9jL3N5cy92bS9vdmVyY29tbWl0X21lbW9yeSIs IE9fUkRPTkxZKTsKLQkJaWYgKGZkICE9IC0xKSB7Ci0JCQlmY250bChmZCwgRl9TRVRGRCwgZmNu dGwoZmQsIEZfR0VURkQpIHwgRkRfQ0xPRVhFQyk7Ci0JCX0KLQkjZW5kaWYKLSNlbGlmIGRlZmlu ZWQoSkVNQUxMT0NfVVNFX1NZU0NBTEwpICYmIGRlZmluZWQoU1lTX29wZW5hdCkKLQkjaWYgZGVm aW5lZChPX0NMT0VYRUMpCi0JCWZkID0gKGludClzeXNjYWxsKFNZU19vcGVuYXQsCi0JCQlBVF9G RENXRCwgIi9wcm9jL3N5cy92bS9vdmVyY29tbWl0X21lbW9yeSIsIE9fUkRPTkxZIHwgT19DTE9F WEVDKTsKLQkjZWxzZQotCQlmZCA9IChpbnQpc3lzY2FsbChTWVNfb3BlbmF0LAotCQkJQVRfRkRD V0QsICIvcHJvYy9zeXMvdm0vb3ZlcmNvbW1pdF9tZW1vcnkiLCBPX1JET05MWSk7Ci0JCWlmIChm ZCAhPSAtMSkgewotCQkJZmNudGwoZmQsIEZfU0VURkQsIGZjbnRsKGZkLCBGX0dFVEZEKSB8IEZE X0NMT0VYRUMpOwotCQl9Ci0JI2VuZGlmCi0jZWxzZQotCSNpZiBkZWZpbmVkKE9fQ0xPRVhFQykK LQkJZmQgPSBvcGVuKCIvcHJvYy9zeXMvdm0vb3ZlcmNvbW1pdF9tZW1vcnkiLCBPX1JET05MWSB8 IE9fQ0xPRVhFQyk7Ci0JI2Vsc2UKLQkJZmQgPSBvcGVuKCIvcHJvYy9zeXMvdm0vb3ZlcmNvbW1p dF9tZW1vcnkiLCBPX1JET05MWSk7Ci0JCWlmIChmZCAhPSAtMSkgewotCQkJZmNudGwoZmQsIEZf U0VURkQsIGZjbnRsKGZkLCBGX0dFVEZEKSB8IEZEX0NMT0VYRUMpOwotCQl9Ci0JI2VuZGlmCi0j ZW5kaWYKLQotCWlmIChmZCA9PSAtMSkgewotCQlyZXR1cm4gZmFsc2U7IC8qIEVycm9yLiAqLwot CX0KLQotCXNzaXplX3QgbnJlYWQgPSBtYWxsb2NfcmVhZF9mZChmZCwgJmJ1Ziwgc2l6ZW9mKGJ1 ZikpOwotI2lmIGRlZmluZWQoSkVNQUxMT0NfVVNFX1NZU0NBTEwpICYmIGRlZmluZWQoU1lTX2Ns b3NlKQotCXN5c2NhbGwoU1lTX2Nsb3NlLCBmZCk7Ci0jZWxzZQotCWNsb3NlKGZkKTsKLSNlbmRp ZgotCi0JaWYgKG5yZWFkIDwgMSkgewotCQlyZXR1cm4gZmFsc2U7IC8qIEVycm9yLiAqLwotCX0K LQkvKgotCSAqIC9wcm9jL3N5cy92bS9vdmVyY29tbWl0X21lbW9yeSBtZWFuaW5nczoKLQkgKiAw OiBIZXVyaXN0aWMgb3ZlcmNvbW1pdC4KLQkgKiAxOiBBbHdheXMgb3ZlcmNvbW1pdC4KLQkgKiAy OiBOZXZlciBvdmVyY29tbWl0LgotCSAqLwotCXJldHVybiAoYnVmWzBdID09ICcwJyB8fCBidWZb MF0gPT0gJzEnKTsKLX0KLSNlbmRpZgotCi12b2lkCi1wYWdlc19zZXRfdGhwX3N0YXRlICh2b2lk ICpwdHIsIHNpemVfdCBzaXplKSB7Ci0JaWYgKG9wdF90aHAgPT0gdGhwX21vZGVfZGVmYXVsdCB8 fCBvcHRfdGhwID09IGluaXRfc3lzdGVtX3RocF9tb2RlKSB7Ci0JCXJldHVybjsKLQl9Ci0JYXNz ZXJ0KG9wdF90aHAgIT0gdGhwX21vZGVfbm90X3N1cHBvcnRlZCAmJgotCSAgICBpbml0X3N5c3Rl bV90aHBfbW9kZSAhPSB0aHBfbW9kZV9ub3Rfc3VwcG9ydGVkKTsKLQotCWlmIChvcHRfdGhwID09 IHRocF9tb2RlX2Fsd2F5cwotCSAgICAmJiBpbml0X3N5c3RlbV90aHBfbW9kZSAhPSB0aHBfbW9k ZV9uZXZlcikgewotCQlhc3NlcnQoaW5pdF9zeXN0ZW1fdGhwX21vZGUgPT0gdGhwX21vZGVfZGVm YXVsdCk7Ci0JCXBhZ2VzX2h1Z2VfdW5hbGlnbmVkKHB0ciwgc2l6ZSk7Ci0JfSBlbHNlIGlmIChv cHRfdGhwID09IHRocF9tb2RlX25ldmVyKSB7Ci0JCWFzc2VydChpbml0X3N5c3RlbV90aHBfbW9k ZSA9PSB0aHBfbW9kZV9kZWZhdWx0IHx8Ci0JCSAgICBpbml0X3N5c3RlbV90aHBfbW9kZSA9PSB0 aHBfbW9kZV9hbHdheXMpOwotCQlwYWdlc19ub2h1Z2VfdW5hbGlnbmVkKHB0ciwgc2l6ZSk7Ci0J fQotfQotCi1zdGF0aWMgdm9pZAotaW5pdF90aHBfc3RhdGUodm9pZCkgewotCWlmICghaGF2ZV9t YWR2aXNlX2h1Z2UgJiYgIWhhdmVfbWVtY250bCkgewotCQlpZiAobWV0YWRhdGFfdGhwX2VuYWJs ZWQoKSAmJiBvcHRfYWJvcnQpIHsKLQkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjogbm8gTUFE Vl9IVUdFUEFHRSBzdXBwb3J0XG4iKTsKLQkJCWFib3J0KCk7Ci0JCX0KLQkJZ290byBsYWJlbF9l cnJvcjsKLQl9Ci0jaWYgZGVmaW5lZChKRU1BTExPQ19IQVZFX01BRFZJU0VfSFVHRSkKLQlzdGF0 aWMgY29uc3QgY2hhciBzeXNfc3RhdGVfbWFkdmlzZVtdID0gImFsd2F5cyBbbWFkdmlzZV0gbmV2 ZXJcbiI7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgc3lzX3N0YXRlX2Fsd2F5c1tdID0gIlthbHdheXNd IG1hZHZpc2UgbmV2ZXJcbiI7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgc3lzX3N0YXRlX25ldmVyW10g PSAiYWx3YXlzIG1hZHZpc2UgW25ldmVyXVxuIjsKLQljaGFyIGJ1ZltzaXplb2Yoc3lzX3N0YXRl X21hZHZpc2UpXTsKLQotI2lmIGRlZmluZWQoSkVNQUxMT0NfVVNFX1NZU0NBTEwpICYmIGRlZmlu ZWQoU1lTX29wZW4pCi0JaW50IGZkID0gKGludClzeXNjYWxsKFNZU19vcGVuLAotCSAgICAiL3N5 cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvZW5hYmxlZCIsIE9fUkRPTkxZKTsKLSNl bGlmIGRlZmluZWQoSkVNQUxMT0NfVVNFX1NZU0NBTEwpICYmIGRlZmluZWQoU1lTX29wZW5hdCkK LQlpbnQgZmQgPSAoaW50KXN5c2NhbGwoU1lTX29wZW5hdCwKLQkJICAgIEFUX0ZEQ1dELCAiL3N5 cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvZW5hYmxlZCIsIE9fUkRPTkxZKTsKLSNl bHNlCi0JaW50IGZkID0gb3BlbigiL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2Uv ZW5hYmxlZCIsIE9fUkRPTkxZKTsKLSNlbmRpZgotCWlmIChmZCA9PSAtMSkgewotCQlnb3RvIGxh YmVsX2Vycm9yOwotCX0KLQotCXNzaXplX3QgbnJlYWQgPSBtYWxsb2NfcmVhZF9mZChmZCwgJmJ1 Ziwgc2l6ZW9mKGJ1ZikpOwotI2lmIGRlZmluZWQoSkVNQUxMT0NfVVNFX1NZU0NBTEwpICYmIGRl ZmluZWQoU1lTX2Nsb3NlKQotCXN5c2NhbGwoU1lTX2Nsb3NlLCBmZCk7Ci0jZWxzZQotCWNsb3Nl KGZkKTsKLSNlbmRpZgotCi0gICAgICAgIGlmIChucmVhZCA8IDApIHsKLQkJZ290byBsYWJlbF9l cnJvcjsKLSAgICAgICAgfQotCi0JaWYgKHN0cm5jbXAoYnVmLCBzeXNfc3RhdGVfbWFkdmlzZSwg KHNpemVfdClucmVhZCkgPT0gMCkgewotCQlpbml0X3N5c3RlbV90aHBfbW9kZSA9IHRocF9tb2Rl X2RlZmF1bHQ7Ci0JfSBlbHNlIGlmIChzdHJuY21wKGJ1Ziwgc3lzX3N0YXRlX2Fsd2F5cywgKHNp emVfdClucmVhZCkgPT0gMCkgewotCQlpbml0X3N5c3RlbV90aHBfbW9kZSA9IHRocF9tb2RlX2Fs d2F5czsKLQl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCBzeXNfc3RhdGVfbmV2ZXIsIChzaXplX3Qp bnJlYWQpID09IDApIHsKLQkJaW5pdF9zeXN0ZW1fdGhwX21vZGUgPSB0aHBfbW9kZV9uZXZlcjsK LQl9IGVsc2UgewotCQlnb3RvIGxhYmVsX2Vycm9yOwotCX0KLQlyZXR1cm47Ci0jZWxpZiBkZWZp bmVkKEpFTUFMTE9DX0hBVkVfTUVNQ05UTCkKLQlpbml0X3N5c3RlbV90aHBfbW9kZSA9IHRocF9t b2RlX2RlZmF1bHQ7Ci0JcmV0dXJuOwotI2VuZGlmCi1sYWJlbF9lcnJvcjoKLQlvcHRfdGhwID0g aW5pdF9zeXN0ZW1fdGhwX21vZGUgPSB0aHBfbW9kZV9ub3Rfc3VwcG9ydGVkOwotfQotCi1ib29s Ci1wYWdlc19ib290KHZvaWQpIHsKLQlvc19wYWdlID0gb3NfcGFnZV9kZXRlY3QoKTsKLQlpZiAo b3NfcGFnZSA+IFBBR0UpIHsKLQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBVbnN1cHBvcnRl ZCBzeXN0ZW0gcGFnZSBzaXplXG4iKTsKLQkJaWYgKG9wdF9hYm9ydCkgewotCQkJYWJvcnQoKTsK LQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLSNpZmRlZiBKRU1BTExPQ19QVVJHRV9NQURWSVNF X0RPTlRORUVEX1pFUk9TCi0JaWYgKCFvcHRfdHJ1c3RfbWFkdmlzZSkgewotCQltYWR2aXNlX2Rv bnRfbmVlZF96ZXJvc19pc19mYXVsdHkgPSAhbWFkdmlzZV9NQURWX0RPTlRORUVEX3plcm9lc19w YWdlcygpOwotCQlpZiAobWFkdmlzZV9kb250X25lZWRfemVyb3NfaXNfZmF1bHR5KSB7Ci0JCQlt YWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IE1BRFZfRE9OVE5FRUQgZG9lcyBub3Qgd29yayAobWVt c2V0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkKVxuIik7Ci0JCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxv Yz46IChUaGlzIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgaWYgeW91IGFyZSBydW5uaW5nIHVu ZGVyIFFFTVUpXG4iKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEluIGNhc2Ugb3B0X3RydXN0X21h ZHZpc2UgaXMgZGlzYWJsZSwKLQkJICogZG8gbm90IGRvIHJ1bnRpbWUgY2hlY2sgKi8KLQkJbWFk dmlzZV9kb250X25lZWRfemVyb3NfaXNfZmF1bHR5ID0gMDsKLQl9Ci0jZW5kaWYKLQotI2lmbmRl ZiBfV0lOMzIKLQltbWFwX2ZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBfQU5PTjsKLSNlbmRpZgot Ci0jaWZkZWYgSkVNQUxMT0NfU1lTQ1RMX1ZNX09WRVJDT01NSVQKLQlvc19vdmVyY29tbWl0cyA9 IG9zX292ZXJjb21taXRzX3N5c2N0bCgpOwotI2VsaWYgZGVmaW5lZChKRU1BTExPQ19QUk9DX1NZ U19WTV9PVkVSQ09NTUlUX01FTU9SWSkKLQlvc19vdmVyY29tbWl0cyA9IG9zX292ZXJjb21taXRz X3Byb2MoKTsKLSMgIGlmZGVmIE1BUF9OT1JFU0VSVkUKLQlpZiAob3Nfb3ZlcmNvbW1pdHMpIHsK LQkJbW1hcF9mbGFncyB8PSBNQVBfTk9SRVNFUlZFOwotCX0KLSMgIGVuZGlmCi0jZWxpZiBkZWZp bmVkKF9fTmV0QlNEX18pCi0Jb3Nfb3ZlcmNvbW1pdHMgPSB0cnVlOwotI2Vsc2UKLQlvc19vdmVy Y29tbWl0cyA9IGZhbHNlOwotI2VuZGlmCi0KLQlpbml0X3RocF9zdGF0ZSgpOwotCi0jaWZkZWYg X19GcmVlQlNEX18KLQkvKgotCSAqIEZyZWVCU0QgZG9lc24ndCBuZWVkIHRoZSBjaGVjazsgbWFk dmlzZSgyKSBpcyBrbm93biB0byB3b3JrLgotCSAqLwotI2Vsc2UKLQkvKiBEZXRlY3QgbGF6eSBw dXJnZSBydW50aW1lIHN1cHBvcnQuICovCi0JaWYgKHBhZ2VzX2Nhbl9wdXJnZV9sYXp5KSB7Ci0J CWJvb2wgY29tbWl0dGVkID0gZmFsc2U7Ci0JCXZvaWQgKm1hZHZfZnJlZV9wYWdlID0gb3NfcGFn ZXNfbWFwKE5VTEwsIFBBR0UsIFBBR0UsICZjb21taXR0ZWQpOwotCQlpZiAobWFkdl9mcmVlX3Bh Z2UgPT0gTlVMTCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJYXNzZXJ0KHBhZ2VzX2Nhbl9w dXJnZV9sYXp5X3J1bnRpbWUpOwotCQlpZiAocGFnZXNfcHVyZ2VfbGF6eShtYWR2X2ZyZWVfcGFn ZSwgUEFHRSkpIHsKLQkJCXBhZ2VzX2Nhbl9wdXJnZV9sYXp5X3J1bnRpbWUgPSBmYWxzZTsKLQkJ fQotCQlvc19wYWdlc191bm1hcChtYWR2X2ZyZWVfcGFnZSwgUEFHRSk7Ci0JfQotI2VuZGlmCi0K LQlyZXR1cm4gZmFsc2U7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvc3JjL3BhaS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvc3JjL3BhaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWM4Nzcy Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Ny Yy9wYWkuYworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLXNpemVfdAotcGFpX2FsbG9jX2Jh dGNoX2RlZmF1bHQodHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsIHNpemVf dCBuYWxsb2NzLAotICAgIGVkYXRhX2xpc3RfYWN0aXZlX3QgKnJlc3VsdHMsIGJvb2wgKmRlZmVy cmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYWxsb2NzOyBp KyspIHsKLQkJYm9vbCBkZWZlcnJlZF9ieV9hbGxvYyA9IGZhbHNlOwotCQllZGF0YV90ICplZGF0 YSA9IHBhaV9hbGxvYyh0c2RuLCBzZWxmLCBzaXplLCBQQUdFLAotCQkgICAgLyogemVybyAqLyBm YWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwKLQkJICAgIC8qIGZyZXF1ZW50X3JldXNlICovIGZh bHNlLCAmZGVmZXJyZWRfYnlfYWxsb2MpOwotCQkqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgfD0g ZGVmZXJyZWRfYnlfYWxsb2M7Ci0JCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gaTsK LQkJfQotCQllZGF0YV9saXN0X2FjdGl2ZV9hcHBlbmQocmVzdWx0cywgZWRhdGEpOwotCX0KLQly ZXR1cm4gbmFsbG9jczsKLX0KLQotdm9pZAotcGFpX2RhbGxvY19iYXRjaF9kZWZhdWx0KHRzZG5f dCAqdHNkbiwgcGFpX3QgKnNlbGYsCi0gICAgZWRhdGFfbGlzdF9hY3RpdmVfdCAqbGlzdCwgYm9v bCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQllZGF0YV90ICplZGF0YTsKLQl3aGlsZSAo KGVkYXRhID0gZWRhdGFfbGlzdF9hY3RpdmVfZmlyc3QobGlzdCkpICE9IE5VTEwpIHsKLQkJYm9v bCBkZWZlcnJlZF9ieV9kYWxsb2MgPSBmYWxzZTsKLQkJZWRhdGFfbGlzdF9hY3RpdmVfcmVtb3Zl KGxpc3QsIGVkYXRhKTsKLQkJcGFpX2RhbGxvYyh0c2RuLCBzZWxmLCBlZGF0YSwgJmRlZmVycmVk X2J5X2RhbGxvYyk7Ci0JCSpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCB8PSBkZWZlcnJlZF9ieV9k YWxsb2M7Ci0JfQotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3NyYy9wZWFrX2V2ZW50LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC9zcmMvcGVha19ldmVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA0MDkzZmJjLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3NyYy9wZWFrX2V2ZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0j aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGVha19ldmVudC5oIgotCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvYWN0aXZpdHlfY2FsbGJhY2suaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9wZWFrLmgiCi0KLS8qCi0gKiBVcGRhdGUgZXZlcnkgNjRLIGJ5IGRlZmF1bHQuICBXZSdy ZSBub3QgZXhwb3NpbmcgdGhpcyBhcyBhIGNvbmZpZ3VyYXRpb24KLSAqIG9wdGlvbiBmb3Igbm93 OyB3ZSBkb24ndCB3YW50IHRvIGJpbmQgb3Vyc2VsdmVzIHRvbyB0aWdodGx5IHRvIGFueSBwYXJ0 aWN1bGFyCi0gKiBwZXJmb3JtYW5jZSByZXF1aXJlbWVudHMgZm9yIHNtYWxsIHZhbHVlcywgb3Ig Z3VhcmFudGVlIHRoYXQgd2UnbGwgZXZlbiBiZQotICogYWJsZSB0byBwcm92aWRlIGZpbmUtZ3Jh aW5lZCBhY2N1cmFjeS4KLSAqLwotI2RlZmluZSBQRUFLX0VWRU5UX1dBSVQgKDY0ICogMTAyNCkK LQotLyogVXBkYXRlIHRoZSBwZWFrIHdpdGggY3VycmVudCB0c2Qgc3RhdGUuICovCi12b2lkCi1w ZWFrX2V2ZW50X3VwZGF0ZSh0c2RfdCAqdHNkKSB7Ci0JdWludDY0X3QgYWxsb2MgPSB0c2RfdGhy ZWFkX2FsbG9jYXRlZF9nZXQodHNkKTsKLQl1aW50NjRfdCBkYWxsb2MgPSB0c2RfdGhyZWFkX2Rl YWxsb2NhdGVkX2dldCh0c2QpOwotCXBlYWtfdCAqcGVhayA9IHRzZF9wZWFrcF9nZXQodHNkKTsK LQlwZWFrX3VwZGF0ZShwZWFrLCBhbGxvYywgZGFsbG9jKTsKLX0KLQotc3RhdGljIHZvaWQKLXBl YWtfZXZlbnRfYWN0aXZpdHlfY2FsbGJhY2sodHNkX3QgKnRzZCkgewotCWFjdGl2aXR5X2NhbGxi YWNrX3RodW5rX3QgKnRodW5rID0gdHNkX2FjdGl2aXR5X2NhbGxiYWNrX3RodW5rcF9nZXQoCi0J ICAgIHRzZCk7Ci0JdWludDY0X3QgYWxsb2MgPSB0c2RfdGhyZWFkX2FsbG9jYXRlZF9nZXQodHNk KTsKLQl1aW50NjRfdCBkYWxsb2MgPSB0c2RfdGhyZWFkX2RlYWxsb2NhdGVkX2dldCh0c2QpOwot CWlmICh0aHVuay0+Y2FsbGJhY2sgIT0gTlVMTCkgewotCQl0aHVuay0+Y2FsbGJhY2sodGh1bmst PnVjdHgsIGFsbG9jLCBkYWxsb2MpOwotCX0KLX0KLQotLyogU2V0IGN1cnJlbnQgc3RhdGUgdG8g emVyby4gKi8KLXZvaWQKLXBlYWtfZXZlbnRfemVybyh0c2RfdCAqdHNkKSB7Ci0JdWludDY0X3Qg YWxsb2MgPSB0c2RfdGhyZWFkX2FsbG9jYXRlZF9nZXQodHNkKTsKLQl1aW50NjRfdCBkYWxsb2Mg PSB0c2RfdGhyZWFkX2RlYWxsb2NhdGVkX2dldCh0c2QpOwotCXBlYWtfdCAqcGVhayA9IHRzZF9w ZWFrcF9nZXQodHNkKTsKLQlwZWFrX3NldF96ZXJvKHBlYWssIGFsbG9jLCBkYWxsb2MpOwotfQot Ci11aW50NjRfdAotcGVha19ldmVudF9tYXgodHNkX3QgKnRzZCkgewotCXBlYWtfdCAqcGVhayA9 IHRzZF9wZWFrcF9nZXQodHNkKTsKLQlyZXR1cm4gcGVha19tYXgocGVhayk7Ci19Ci0KLXVpbnQ2 NF90Ci1wZWFrX2FsbG9jX25ld19ldmVudF93YWl0KHRzZF90ICp0c2QpIHsKLQlyZXR1cm4gUEVB S19FVkVOVF9XQUlUOwotfQotCi11aW50NjRfdAotcGVha19hbGxvY19wb3N0cG9uZWRfZXZlbnRf d2FpdCh0c2RfdCAqdHNkKSB7Ci0JcmV0dXJuIFRFX01JTl9TVEFSVF9XQUlUOwotfQotCi12b2lk Ci1wZWFrX2FsbG9jX2V2ZW50X2hhbmRsZXIodHNkX3QgKnRzZCwgdWludDY0X3QgZWxhcHNlZCkg ewotCXBlYWtfZXZlbnRfdXBkYXRlKHRzZCk7Ci0JcGVha19ldmVudF9hY3Rpdml0eV9jYWxsYmFj ayh0c2QpOwotfQotCi11aW50NjRfdAotcGVha19kYWxsb2NfbmV3X2V2ZW50X3dhaXQodHNkX3Qg KnRzZCkgewotCXJldHVybiBQRUFLX0VWRU5UX1dBSVQ7Ci19Ci0KLXVpbnQ2NF90Ci1wZWFrX2Rh bGxvY19wb3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7Ci0JcmV0dXJuIFRFX01JTl9T VEFSVF9XQUlUOwotfQotCi12b2lkCi1wZWFrX2RhbGxvY19ldmVudF9oYW5kbGVyKHRzZF90ICp0 c2QsIHVpbnQ2NF90IGVsYXBzZWQpIHsKLQlwZWFrX2V2ZW50X3VwZGF0ZSh0c2QpOwotCXBlYWtf ZXZlbnRfYWN0aXZpdHlfY2FsbGJhY2sodHNkKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZi5jIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Byb2YuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggN2E2ZDVkNS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC9zcmMvcHJvZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzg5ICswLDAgQEAK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9jdGwuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9hc3NlcnQuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2NvdW50ZXIuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9wcm9mX2RhdGEuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2xv Zy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfcmVjZW50LmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9zdGF0cy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3Byb2Zfc3lzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9ob29r LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdGhyZWFkX2V2ZW50LmgiCi0KLS8qCi0g KiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgcHJvZmlsaW5nICJBUElzIiBuZWVkZWQgYnkgb3Ro ZXIgcGFydHMgb2YgamVtYWxsb2MsCi0gKiBhbmQgYWxzbyBtYW5hZ2VzIHRoZSByZWxldmFudCAi b3BlcmF0aW9uYWwiIGRhdGEsIG1haW5seSBvcHRpb25zIGFuZCBtdXRleGVzOwotICogdGhlIGNv cmUgcHJvZmlsaW5nIGRhdGEgc3RydWN0dXJlcyBhcmUgZW5jYXBzdWxhdGVkIGluIHByb2ZfZGF0 YS5jLgotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIERhdGEuICovCi0KLWJv b2wgb3B0X3Byb2YgPSBmYWxzZTsKLWJvb2wgb3B0X3Byb2ZfYWN0aXZlID0gdHJ1ZTsKLWJvb2wg b3B0X3Byb2ZfdGhyZWFkX2FjdGl2ZV9pbml0ID0gdHJ1ZTsKLXNpemVfdCBvcHRfbGdfcHJvZl9z YW1wbGUgPSBMR19QUk9GX1NBTVBMRV9ERUZBVUxUOwotc3NpemVfdCBvcHRfbGdfcHJvZl9pbnRl cnZhbCA9IExHX1BST0ZfSU5URVJWQUxfREVGQVVMVDsKLWJvb2wgb3B0X3Byb2ZfZ2R1bXAgPSBm YWxzZTsKLWJvb2wgb3B0X3Byb2ZfZmluYWwgPSBmYWxzZTsKLWJvb2wgb3B0X3Byb2ZfbGVhayA9 IGZhbHNlOwotYm9vbCBvcHRfcHJvZl9sZWFrX2Vycm9yID0gZmFsc2U7Ci1ib29sIG9wdF9wcm9m X2FjY3VtID0gZmFsc2U7Ci1jaGFyIG9wdF9wcm9mX3ByZWZpeFtQUk9GX0RVTVBfRklMRU5BTUVf TEVOXTsKLWJvb2wgb3B0X3Byb2Zfc3lzX3RocmVhZF9uYW1lID0gZmFsc2U7Ci1ib29sIG9wdF9w cm9mX3VuYmlhcyA9IHRydWU7Ci0KLS8qIEFjY2Vzc2VkIHZpYSBwcm9mX3NhbXBsZV9ldmVudF9o YW5kbGVyKCkuICovCi1zdGF0aWMgY291bnRlcl9hY2N1bV90IHByb2ZfaWR1bXBfYWNjdW11bGF0 ZWQ7Ci0KLS8qCi0gKiBJbml0aWFsaXplZCBhcyBvcHRfcHJvZl9hY3RpdmUsIGFuZCBhY2Nlc3Nl ZCB2aWEKLSAqIHByb2ZfYWN0aXZlX1tnc11ldHtfdW5sb2NrZWQsfSgpLgotICovCi1ib29sIHBy b2ZfYWN0aXZlX3N0YXRlOwotc3RhdGljIG1hbGxvY19tdXRleF90IHByb2ZfYWN0aXZlX210eDsK LQotLyoKLSAqIEluaXRpYWxpemVkIGFzIG9wdF9wcm9mX3RocmVhZF9hY3RpdmVfaW5pdCwgYW5k IGFjY2Vzc2VkIHZpYQotICogcHJvZl90aHJlYWRfYWN0aXZlX2luaXRfW2dzXWV0KCkuCi0gKi8K LXN0YXRpYyBib29sIHByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0Owotc3RhdGljIG1hbGxvY19tdXRl eF90IHByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0X210eDsKLQotLyoKLSAqIEluaXRpYWxpemVkIGFz IG9wdF9wcm9mX2dkdW1wLCBhbmQgYWNjZXNzZWQgdmlhCi0gKiBwcm9mX2dkdW1wX1tnc11ldHtf dW5sb2NrZWQsfSgpLgotICovCi1ib29sIHByb2ZfZ2R1bXBfdmFsOwotc3RhdGljIG1hbGxvY19t dXRleF90IHByb2ZfZ2R1bXBfbXR4OwotCi11aW50NjRfdCBwcm9mX2ludGVydmFsID0gMDsKLQot c2l6ZV90IGxnX3Byb2Zfc2FtcGxlOwotCi1zdGF0aWMgdWludDY0X3QgbmV4dF90aHJfdWlkOwot c3RhdGljIG1hbGxvY19tdXRleF90IG5leHRfdGhyX3VpZF9tdHg7Ci0KLS8qIERvIG5vdCBkdW1w IGFueSBwcm9maWxlcyB1bnRpbCBib290c3RyYXBwaW5nIGlzIGNvbXBsZXRlLiAqLwotYm9vbCBw cm9mX2Jvb3RlZCA9IGZhbHNlOwotCi0vKiBMb2dpY2FsbHkgYSBwcm9mX2JhY2t0cmFjZV9ob29r X3QuICovCi1hdG9taWNfcF90IHByb2ZfYmFja3RyYWNlX2hvb2s7Ci0KLS8qIExvZ2ljYWxseSBh IHByb2ZfZHVtcF9ob29rX3QuICovCi1hdG9taWNfcF90IHByb2ZfZHVtcF9ob29rOwotCi0vKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotCi12b2lkCi1wcm9mX2FsbG9jX3JvbGxiYWNrKHRzZF90ICp0 c2QsIHByb2ZfdGN0eF90ICp0Y3R4KSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0KLQlpZiAo dHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPiAwKSB7Ci0JCWFzc2VydCgodWludHB0cl90 KXRjdHggPT0gKHVpbnRwdHJfdCkxVSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKHVpbnRwdHJf dCl0Y3R4ID4gKHVpbnRwdHJfdCkxVSkgewotCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0 c2QpLCB0Y3R4LT50ZGF0YS0+bG9jayk7Ci0JCXRjdHgtPnByZXBhcmVkID0gZmFsc2U7Ci0JCXBy b2ZfdGN0eF90cnlfZGVzdHJveSh0c2QsIHRjdHgpOwotCX0KLX0KLQotdm9pZAotcHJvZl9tYWxs b2Nfc2FtcGxlX29iamVjdCh0c2RfdCAqdHNkLCBjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXpl LAotICAgIHNpemVfdCB1c2l6ZSwgcHJvZl90Y3R4X3QgKnRjdHgpIHsKLQljYXNzZXJ0KGNvbmZp Z19wcm9mKTsKLQotCWlmIChvcHRfcHJvZl9zeXNfdGhyZWFkX25hbWUpIHsKLQkJcHJvZl9zeXNf dGhyZWFkX25hbWVfZmV0Y2godHNkKTsKLQl9Ci0KLQllZGF0YV90ICplZGF0YSA9IGVtYXBfZWRh dGFfbG9va3VwKHRzZF90c2RuKHRzZCksICZhcmVuYV9lbWFwX2dsb2JhbCwKLQkgICAgcHRyKTsK LQlwcm9mX2luZm9fc2V0KHRzZCwgZWRhdGEsIHRjdHgsIHNpemUpOwotCi0Jc3ppbmRfdCBzemlu ZCA9IHN6X3NpemUyaW5kZXgodXNpemUpOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4o dHNkKSwgdGN0eC0+dGRhdGEtPmxvY2spOwotCS8qCi0JICogV2UgbmVlZCB0byBkbyB0aGVzZSBt YXAgbG9va3VwcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLCB0byBhdm9pZCB0aGUKLQkgKiBwb3Nz aWJpbGl0eSBvZiByYWNlcyB3aXRoIHByb2ZfcmVzZXQgY2FsbHMsIHdoaWNoIHVwZGF0ZSB0aGUg bWFwIGFuZAotCSAqIHRoZW4gYWNxdWlyZSB0aGUgbG9jay4gIFRoaXMgYWN0dWFsbHkgc3RpbGwg bGVhdmVzIGEgZGF0YSByYWNlIG9uIHRoZQotCSAqIGNvbnRlbnRzIG9mIHRoZSB1bmJpYXMgbWFw LCBidXQgd2UgaGF2ZSBub3QgeWV0IGdvbmUgdGhyb3VnaCBhbmQKLQkgKiBhdG9taWMtaWZpZWQg dGhlIHByb2YgbW9kdWxlLCBhbmQgY29tcGlsZXJzIGFyZSBub3QgeWV0IGNhdXNpbmcgdXMKLQkg KiBpc3N1ZXMuICBUaGUga2V5IHRoaW5nIGlzIHRvIG1ha2Ugc3VyZSB0aGF0LCBpZiB3ZSByZWFk IGdhcmJhZ2UgZGF0YSwKLQkgKiB0aGUgcHJvZl9yZXNldCBjYWxsIGlzIGFib3V0IHRvIG1hcmsg b3VyIHRjdHggYXMgZXhwaXJlZCBiZWZvcmUgYW55Ci0JICogZHVtcGluZyBvZiBvdXIgY29ycnVw dGVkIG91dHB1dCBpcyBhdHRlbXB0ZWQuCi0JICovCi0Jc2l6ZV90IHNoaWZ0ZWRfdW5iaWFzZWRf Y250ID0gcHJvZl9zaGlmdGVkX3VuYmlhc2VkX2NudFtzemluZF07Ci0Jc2l6ZV90IHVuYmlhc2Vk X2J5dGVzID0gcHJvZl91bmJpYXNlZF9zeltzemluZF07Ci0JdGN0eC0+Y250cy5jdXJvYmpzKys7 Ci0JdGN0eC0+Y250cy5jdXJvYmpzX3NoaWZ0ZWRfdW5iaWFzZWQgKz0gc2hpZnRlZF91bmJpYXNl ZF9jbnQ7Ci0JdGN0eC0+Y250cy5jdXJieXRlcyArPSB1c2l6ZTsKLQl0Y3R4LT5jbnRzLmN1cmJ5 dGVzX3VuYmlhc2VkICs9IHVuYmlhc2VkX2J5dGVzOwotCWlmIChvcHRfcHJvZl9hY2N1bSkgewot CQl0Y3R4LT5jbnRzLmFjY3Vtb2JqcysrOwotCQl0Y3R4LT5jbnRzLmFjY3Vtb2Jqc19zaGlmdGVk X3VuYmlhc2VkICs9IHNoaWZ0ZWRfdW5iaWFzZWRfY250OwotCQl0Y3R4LT5jbnRzLmFjY3VtYnl0 ZXMgKz0gdXNpemU7Ci0JCXRjdHgtPmNudHMuYWNjdW1ieXRlc191bmJpYXNlZCArPSB1bmJpYXNl ZF9ieXRlczsKLQl9Ci0JYm9vbCByZWNvcmRfcmVjZW50ID0gcHJvZl9yZWNlbnRfYWxsb2NfcHJl cGFyZSh0c2QsIHRjdHgpOwotCXRjdHgtPnByZXBhcmVkID0gZmFsc2U7Ci0JbWFsbG9jX211dGV4 X3VubG9jayh0c2RfdHNkbih0c2QpLCB0Y3R4LT50ZGF0YS0+bG9jayk7Ci0JaWYgKHJlY29yZF9y ZWNlbnQpIHsKLQkJYXNzZXJ0KHRjdHggPT0gZWRhdGFfcHJvZl90Y3R4X2dldChlZGF0YSkpOwot CQlwcm9mX3JlY2VudF9hbGxvYyh0c2QsIGVkYXRhLCBzaXplLCB1c2l6ZSk7Ci0JfQotCi0JaWYg KG9wdF9wcm9mX3N0YXRzKSB7Ci0JCXByb2Zfc3RhdHNfaW5jKHRzZCwgc3ppbmQsIHNpemUpOwot CX0KLX0KLQotdm9pZAotcHJvZl9mcmVlX3NhbXBsZWRfb2JqZWN0KHRzZF90ICp0c2QsIHNpemVf dCB1c2l6ZSwgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbykgewotCWNhc3NlcnQoY29uZmlnX3Byb2Yp OwotCi0JYXNzZXJ0KHByb2ZfaW5mbyAhPSBOVUxMKTsKLQlwcm9mX3RjdHhfdCAqdGN0eCA9IHBy b2ZfaW5mby0+YWxsb2NfdGN0eDsKLQlhc3NlcnQoKHVpbnRwdHJfdCl0Y3R4ID4gKHVpbnRwdHJf dCkxVSk7Ci0KLQlzemluZF90IHN6aW5kID0gc3pfc2l6ZTJpbmRleCh1c2l6ZSk7Ci0JbWFsbG9j X211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgdGN0eC0+dGRhdGEtPmxvY2spOwotCi0JYXNzZXJ0 KHRjdHgtPmNudHMuY3Vyb2JqcyA+IDApOwotCWFzc2VydCh0Y3R4LT5jbnRzLmN1cmJ5dGVzID49 IHVzaXplKTsKLQkvKgotCSAqIEl0J3Mgbm90IGNvcnJlY3QgdG8gZG8gZXF1aXZhbGVudCBhc3Nl cnRzIGZvciB1bmJpYXNlZCBieXRlcywgYmVjYXVzZQotCSAqIG9mIHRoZSBwb3RlbnRpYWwgZm9y IHJhY2VzIHdpdGggcHJvZi5yZXNldCBjYWxscy4gIFRoZSBtYXAgY29udGVudHMKLQkgKiBzaG91 bGQgcmVhbGx5IGJlIGF0b21pYywgYnV0IHdlIGhhdmUgbm90IGF0b21pYy1pZmllZCB0aGUgcHJv ZiBtb2R1bGUKLQkgKiB5ZXQuCi0JICovCi0JdGN0eC0+Y250cy5jdXJvYmpzLS07Ci0JdGN0eC0+ Y250cy5jdXJvYmpzX3NoaWZ0ZWRfdW5iaWFzZWQgLT0gcHJvZl9zaGlmdGVkX3VuYmlhc2VkX2Nu dFtzemluZF07Ci0JdGN0eC0+Y250cy5jdXJieXRlcyAtPSB1c2l6ZTsKLQl0Y3R4LT5jbnRzLmN1 cmJ5dGVzX3VuYmlhc2VkIC09IHByb2ZfdW5iaWFzZWRfc3pbc3ppbmRdOwotCi0JcHJvZl90cnlf bG9nKHRzZCwgdXNpemUsIHByb2ZfaW5mbyk7Ci0KLQlwcm9mX3RjdHhfdHJ5X2Rlc3Ryb3kodHNk LCB0Y3R4KTsKLQotCWlmIChvcHRfcHJvZl9zdGF0cykgewotCQlwcm9mX3N0YXRzX2RlYyh0c2Qs IHN6aW5kLCBwcm9mX2luZm8tPmFsbG9jX3NpemUpOwotCX0KLX0KLQotcHJvZl90Y3R4X3QgKgot cHJvZl90Y3R4X2NyZWF0ZSh0c2RfdCAqdHNkKSB7Ci0JaWYgKCF0c2Rfbm9taW5hbCh0c2QpIHx8 IHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID4gMCkgewotCQlyZXR1cm4gTlVMTDsKLQl9 Ci0KLQlwcm9mX3RkYXRhX3QgKnRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNkLCB0cnVlKTsKLQlp ZiAodGRhdGEgPT0gTlVMTCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwcm9mX2J0X3QgYnQ7 Ci0JYnRfaW5pdCgmYnQsIHRkYXRhLT52ZWMpOwotCXByb2ZfYmFja3RyYWNlKHRzZCwgJmJ0KTsK LQlyZXR1cm4gcHJvZl9sb29rdXAodHNkLCAmYnQpOwotfQotCi0vKgotICogVGhlIGJvZGllcyBv ZiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9mX2xlYWtjaGVjaygpIGFyZSBjb21waWxlZCBvdXQgdW5s ZXNzIGhlYXAKLSAqIHByb2ZpbGluZyBpcyBlbmFibGVkLCBzbyB0aGF0IGl0IGlzIHBvc3NpYmxl IHRvIGNvbXBpbGUgamVtYWxsb2Mgd2l0aAotICogZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBjb21w bGV0ZWx5IGRpc2FibGVkLiAgQXZvaWRpbmcgZmxvYXRpbmcgcG9pbnQgY29kZSBpcwotICogaW1w b3J0YW50IG9uIG1lbW9yeS1jb25zdHJhaW5lZCBzeXN0ZW1zLCBidXQgaXQgYWxzbyBlbmFibGVz IGEgd29ya2Fyb3VuZCBmb3IKLSAqIHZlcnNpb25zIG9mIGdsaWJjIHRoYXQgZG9uJ3QgcHJvcGVy bHkgc2F2ZS9yZXN0b3JlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycwotICogZHVyaW5nIGR5bmFt aWMgbGF6eSBzeW1ib2wgbG9hZGluZyAod2hpY2ggaW50ZXJuYWxseSBjYWxscyBpbnRvIHdoYXRl dmVyCi0gKiBtYWxsb2MgaW1wbGVtZW50YXRpb24gaGFwcGVucyB0byBiZSBpbnRlZ3JhdGVkIGlu dG8gdGhlIGFwcGxpY2F0aW9uKS4gIE5vdGUKLSAqIHRoYXQgc29tZSBjb21waWxlcnMgKGUuZy4g IGdjYyA0LjgpIG1heSB1c2UgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGZvciBmYXN0Ci0gKiBt ZW1vcnkgbW92ZXMsIHNvIGplbWFsbG9jIG11c3QgYmUgY29tcGlsZWQgd2l0aCBzdWNoIG9wdGlt aXphdGlvbnMgZGlzYWJsZWQKLSAqIChlLmcuCi0gKiAtbW5vLXNzZSkgaW4gb3JkZXIgZm9yIHRo ZSB3b3JrYXJvdW5kIHRvIGJlIGNvbXBsZXRlLgotICovCi11aW50NjRfdAotcHJvZl9zYW1wbGVf bmV3X2V2ZW50X3dhaXQodHNkX3QgKnRzZCkgewotI2lmZGVmIEpFTUFMTE9DX1BST0YKLQlpZiAo bGdfcHJvZl9zYW1wbGUgPT0gMCkgewotCQlyZXR1cm4gVEVfTUlOX1NUQVJUX1dBSVQ7Ci0JfQot Ci0JLyoKLQkgKiBDb21wdXRlIHNhbXBsZSBpbnRlcnZhbCBhcyBhIGdlb21ldHJpY2FsbHkgZGlz dHJpYnV0ZWQgcmFuZG9tCi0JICogdmFyaWFibGUgd2l0aCBtZWFuICgyXmxnX3Byb2Zfc2FtcGxl KS4KLQkgKgotCSAqICAgICAgICAgICAgICAgICAgICAgIF9fICAgICAgICBfXwotCSAqICAgICAg ICAgICAgICAgICAgICAgIHwgIGxvZyh1KSAgfCAgICAgICAgICAgICAgICAgICAgIDEKLQkgKiBi eXRlc191bnRpbF9zYW1wbGUgPSB8IC0tLS0tLS0tIHwsIHdoZXJlIHAgPSAtLS0tLS0tLS0tLS0t LS0KLQkgKiAgICAgICAgICAgICAgICAgICAgICB8IGxvZygxLXApIHwgICAgICAgICAgICAgbGdf cHJvZl9zYW1wbGUKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAyCi0JICoKLQkgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgbWF0aCwgc2VlOgot CSAqCi0JICogICBOb24tVW5pZm9ybSBSYW5kb20gVmFyaWF0ZSBHZW5lcmF0aW9uCi0JICogICBM dWMgRGV2cm95ZQotCSAqICAgU3ByaW5nZXItVmVybGFnLCBOZXcgWW9yaywgMTk4NgotCSAqICAg cHAgNTAwCi0JICogICAoaHR0cDovL2x1Yy5kZXZyb3llLm9yZy9ybmJvb2tpbmRleC5odG1sKQot CSAqCi0JICogSW4gdGhlIGFjdHVhbCBjb21wdXRhdGlvbiwgdGhlcmUncyBhIG5vbi16ZXJvIHBy b2JhYmlsaXR5IHRoYXQgb3VyCi0JICogcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGdl bmVyYXRlcyBhbiBleGFjdCAwLCBhbmQgdG8gYXZvaWQKLQkgKiBsb2coMCksIHdlIHNldCB1IHRv IDEuMCBpbiBjYXNlIHIgaXMgMC4gIFRoZXJlZm9yZSB1IGVmZmVjdGl2ZWx5IGlzCi0JICogdW5p Zm9ybWx5IGRpc3RyaWJ1dGVkIGluICgwLCAxXSBpbnN0ZWFkIG9mIFswLCAxKS4gIEZ1cnRoZXIs IHJhdGhlcgotCSAqIHRoYW4gdGFraW5nIHRoZSBjZWlsaW5nLCB3ZSB0YWtlIHRoZSBmbG9vciBh bmQgdGhlbiBhZGQgMSwgc2luY2UKLQkgKiBvdGhlcndpc2UgYnl0ZXNfdW50aWxfc2FtcGxlIHdv dWxkIGJlIDAgaWYgdSBpcyBleGFjdGx5IDEuMC4KLQkgKi8KLQl1aW50NjRfdCByID0gcHJuZ19s Z19yYW5nZV91NjQodHNkX3Bybmdfc3RhdGVwX2dldCh0c2QpLCA1Myk7Ci0JZG91YmxlIHUgPSAo ciA9PSAwVSkgPyAxLjAgOiAoZG91YmxlKXIgKiAoMS4wLzkwMDcxOTkyNTQ3NDA5OTIuMEwpOwot CXJldHVybiAodWludDY0X3QpKGxvZyh1KSAvCi0JICAgIGxvZygxLjAgLSAoMS4wIC8gKGRvdWJs ZSkoKHVpbnQ2NF90KTFVIDw8IGxnX3Byb2Zfc2FtcGxlKSkpKQotCSAgICArICh1aW50NjRfdCkx VTsKLSNlbHNlCi0Jbm90X3JlYWNoZWQoKTsKLQlyZXR1cm4gVEVfTUFYX1NUQVJUX1dBSVQ7Ci0j ZW5kaWYKLX0KLQotdWludDY0X3QKLXByb2Zfc2FtcGxlX3Bvc3Rwb25lZF9ldmVudF93YWl0KHRz ZF90ICp0c2QpIHsKLQkvKgotCSAqIFRoZSBwb3N0cG9uZWQgd2FpdCB0aW1lIGZvciBwcm9mIHNh bXBsZSBldmVudCBpcyBjb21wdXRlZCBhcyBpZiB3ZQotCSAqIHdhbnQgYSBuZXcgd2FpdCB0aW1l IChpLmUuIGFzIGlmIHRoZSBldmVudCB3ZXJlIHRyaWdnZXJlZCkuICBJZiB3ZQotCSAqIGluc3Rl YWQgcG9zdHBvbmUgdG8gdGhlIGltbWVkaWF0ZSBuZXh0IGFsbG9jYXRpb24sIGxpa2UgaG93IHdl J3JlCi0JICogaGFuZGxpbmcgdGhlIG90aGVyIGV2ZW50cywgdGhlbiB3ZSBjYW4gaGF2ZSBzYW1w bGluZyBiaWFzLCBpZiBlLmcuCi0JICogdGhlIGFsbG9jYXRpb24gaW1tZWRpYXRlbHkgZm9sbG93 aW5nIGEgcmVlbnRyYW5jeSBhbHdheXMgY29tZXMgZnJvbQotCSAqIHRoZSBzYW1lIHN0YWNrIHRy YWNlLgotCSAqLwotCXJldHVybiBwcm9mX3NhbXBsZV9uZXdfZXZlbnRfd2FpdCh0c2QpOwotfQot Ci12b2lkCi1wcm9mX3NhbXBsZV9ldmVudF9oYW5kbGVyKHRzZF90ICp0c2QsIHVpbnQ2NF90IGVs YXBzZWQpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQoZWxhcHNlZCA+IDAgJiYg ZWxhcHNlZCAhPSBURV9JTlZBTElEX0VMQVBTRUQpOwotCWlmIChwcm9mX2ludGVydmFsID09IDAg fHwgIXByb2ZfYWN0aXZlX2dldF91bmxvY2tlZCgpKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGNv dW50ZXJfYWNjdW0odHNkX3RzZG4odHNkKSwgJnByb2ZfaWR1bXBfYWNjdW11bGF0ZWQsIGVsYXBz ZWQpKSB7Ci0JCXByb2ZfaWR1bXAodHNkX3RzZG4odHNkKSk7Ci0JfQotfQotCi1zdGF0aWMgdm9p ZAotcHJvZl9mZHVtcCh2b2lkKSB7Ci0JdHNkX3QgKnRzZDsKLQotCWNhc3NlcnQoY29uZmlnX3By b2YpOwotCWFzc2VydChvcHRfcHJvZl9maW5hbCk7Ci0KLQlpZiAoIXByb2ZfYm9vdGVkKSB7Ci0J CXJldHVybjsKLQl9Ci0JdHNkID0gdHNkX2ZldGNoKCk7Ci0JYXNzZXJ0KHRzZF9yZWVudHJhbmN5 X2xldmVsX2dldCh0c2QpID09IDApOwotCi0JcHJvZl9mZHVtcF9pbXBsKHRzZCk7Ci19Ci0KLXN0 YXRpYyBib29sCi1wcm9mX2lkdW1wX2FjY3VtX2luaXQodm9pZCkgewotCWNhc3NlcnQoY29uZmln X3Byb2YpOwotCi0JcmV0dXJuIGNvdW50ZXJfYWNjdW1faW5pdCgmcHJvZl9pZHVtcF9hY2N1bXVs YXRlZCwgcHJvZl9pbnRlcnZhbCk7Ci19Ci0KLXZvaWQKLXByb2ZfaWR1bXAodHNkbl90ICp0c2Ru KSB7Ci0JdHNkX3QgKnRzZDsKLQlwcm9mX3RkYXRhX3QgKnRkYXRhOwotCi0JY2Fzc2VydChjb25m aWdfcHJvZik7Ci0KLQlpZiAoIXByb2ZfYm9vdGVkIHx8IHRzZG5fbnVsbCh0c2RuKSB8fCAhcHJv Zl9hY3RpdmVfZ2V0X3VubG9ja2VkKCkpIHsKLQkJcmV0dXJuOwotCX0KLQl0c2QgPSB0c2RuX3Rz ZCh0c2RuKTsKLQlpZiAodHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPiAwKSB7Ci0JCXJl dHVybjsKLQl9Ci0KLQl0ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgdHJ1ZSk7Ci0JaWYgKHRk YXRhID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAodGRhdGEtPmVucSkgewotCQl0ZGF0 YS0+ZW5xX2lkdW1wID0gdHJ1ZTsKLQkJcmV0dXJuOwotCX0KLQotCXByb2ZfaWR1bXBfaW1wbCh0 c2QpOwotfQotCi1ib29sCi1wcm9mX21kdW1wKHRzZF90ICp0c2QsIGNvbnN0IGNoYXIgKmZpbGVu YW1lKSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0JYXNzZXJ0KHRzZF9yZWVudHJhbmN5X2xl dmVsX2dldCh0c2QpID09IDApOwotCi0JaWYgKCFvcHRfcHJvZiB8fCAhcHJvZl9ib290ZWQpIHsK LQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIHByb2ZfbWR1bXBfaW1wbCh0c2QsIGZpbGVu YW1lKTsKLX0KLQotdm9pZAotcHJvZl9nZHVtcCh0c2RuX3QgKnRzZG4pIHsKLQl0c2RfdCAqdHNk OwotCXByb2ZfdGRhdGFfdCAqdGRhdGE7Ci0KLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQotCWlm ICghcHJvZl9ib290ZWQgfHwgdHNkbl9udWxsKHRzZG4pIHx8ICFwcm9mX2FjdGl2ZV9nZXRfdW5s b2NrZWQoKSkgewotCQlyZXR1cm47Ci0JfQotCXRzZCA9IHRzZG5fdHNkKHRzZG4pOwotCWlmICh0 c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA+IDApIHsKLQkJcmV0dXJuOwotCX0KLQotCXRk YXRhID0gcHJvZl90ZGF0YV9nZXQodHNkLCBmYWxzZSk7Ci0JaWYgKHRkYXRhID09IE5VTEwpIHsK LQkJcmV0dXJuOwotCX0KLQlpZiAodGRhdGEtPmVucSkgewotCQl0ZGF0YS0+ZW5xX2dkdW1wID0g dHJ1ZTsKLQkJcmV0dXJuOwotCX0KLQotCXByb2ZfZ2R1bXBfaW1wbCh0c2QpOwotfQotCi1zdGF0 aWMgdWludDY0X3QKLXByb2ZfdGhyX3VpZF9hbGxvYyh0c2RuX3QgKnRzZG4pIHsKLQl1aW50NjRf dCB0aHJfdWlkOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJm5leHRfdGhyX3VpZF9tdHgp OwotCXRocl91aWQgPSBuZXh0X3Rocl91aWQ7Ci0JbmV4dF90aHJfdWlkKys7Ci0JbWFsbG9jX211 dGV4X3VubG9jayh0c2RuLCAmbmV4dF90aHJfdWlkX210eCk7Ci0KLQlyZXR1cm4gdGhyX3VpZDsK LX0KLQotcHJvZl90ZGF0YV90ICoKLXByb2ZfdGRhdGFfaW5pdCh0c2RfdCAqdHNkKSB7Ci0JcmV0 dXJuIHByb2ZfdGRhdGFfaW5pdF9pbXBsKHRzZCwgcHJvZl90aHJfdWlkX2FsbG9jKHRzZF90c2Ru KHRzZCkpLCAwLAotCSAgICBOVUxMLCBwcm9mX3RocmVhZF9hY3RpdmVfaW5pdF9nZXQodHNkX3Rz ZG4odHNkKSkpOwotfQotCi1wcm9mX3RkYXRhX3QgKgotcHJvZl90ZGF0YV9yZWluaXQodHNkX3Qg KnRzZCwgcHJvZl90ZGF0YV90ICp0ZGF0YSkgewotCXVpbnQ2NF90IHRocl91aWQgPSB0ZGF0YS0+ dGhyX3VpZDsKLQl1aW50NjRfdCB0aHJfZGlzY3JpbSA9IHRkYXRhLT50aHJfZGlzY3JpbSArIDE7 Ci0JY2hhciAqdGhyZWFkX25hbWUgPSAodGRhdGEtPnRocmVhZF9uYW1lICE9IE5VTEwpID8KLQkg ICAgcHJvZl90aHJlYWRfbmFtZV9hbGxvYyh0c2QsIHRkYXRhLT50aHJlYWRfbmFtZSkgOiBOVUxM OwotCWJvb2wgYWN0aXZlID0gdGRhdGEtPmFjdGl2ZTsKLQotCXByb2ZfdGRhdGFfZGV0YWNoKHRz ZCwgdGRhdGEpOwotCXJldHVybiBwcm9mX3RkYXRhX2luaXRfaW1wbCh0c2QsIHRocl91aWQsIHRo cl9kaXNjcmltLCB0aHJlYWRfbmFtZSwKLQkgICAgYWN0aXZlKTsKLX0KLQotdm9pZAotcHJvZl90 ZGF0YV9jbGVhbnVwKHRzZF90ICp0c2QpIHsKLQlwcm9mX3RkYXRhX3QgKnRkYXRhOwotCi0JaWYg KCFjb25maWdfcHJvZikgewotCQlyZXR1cm47Ci0JfQotCi0JdGRhdGEgPSB0c2RfcHJvZl90ZGF0 YV9nZXQodHNkKTsKLQlpZiAodGRhdGEgIT0gTlVMTCkgewotCQlwcm9mX3RkYXRhX2RldGFjaCh0 c2QsIHRkYXRhKTsKLQl9Ci19Ci0KLWJvb2wKLXByb2ZfYWN0aXZlX2dldCh0c2RuX3QgKnRzZG4p IHsKLQlib29sIHByb2ZfYWN0aXZlX2N1cnJlbnQ7Ci0KLQlwcm9mX2FjdGl2ZV9hc3NlcnQoKTsK LQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmcHJvZl9hY3RpdmVfbXR4KTsKLQlwcm9mX2FjdGl2 ZV9jdXJyZW50ID0gcHJvZl9hY3RpdmVfc3RhdGU7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2Ru LCAmcHJvZl9hY3RpdmVfbXR4KTsKLQlyZXR1cm4gcHJvZl9hY3RpdmVfY3VycmVudDsKLX0KLQot Ym9vbAotcHJvZl9hY3RpdmVfc2V0KHRzZG5fdCAqdHNkbiwgYm9vbCBhY3RpdmUpIHsKLQlib29s IHByb2ZfYWN0aXZlX29sZDsKLQotCXByb2ZfYWN0aXZlX2Fzc2VydCgpOwotCW1hbGxvY19tdXRl eF9sb2NrKHRzZG4sICZwcm9mX2FjdGl2ZV9tdHgpOwotCXByb2ZfYWN0aXZlX29sZCA9IHByb2Zf YWN0aXZlX3N0YXRlOwotCXByb2ZfYWN0aXZlX3N0YXRlID0gYWN0aXZlOwotCW1hbGxvY19tdXRl eF91bmxvY2sodHNkbiwgJnByb2ZfYWN0aXZlX210eCk7Ci0JcHJvZl9hY3RpdmVfYXNzZXJ0KCk7 Ci0JcmV0dXJuIHByb2ZfYWN0aXZlX29sZDsKLX0KLQotY29uc3QgY2hhciAqCi1wcm9mX3RocmVh ZF9uYW1lX2dldCh0c2RfdCAqdHNkKSB7Ci0JYXNzZXJ0KHRzZF9yZWVudHJhbmN5X2xldmVsX2dl dCh0c2QpID09IDApOwotCi0JcHJvZl90ZGF0YV90ICp0ZGF0YTsKLQotCXRkYXRhID0gcHJvZl90 ZGF0YV9nZXQodHNkLCB0cnVlKTsKLQlpZiAodGRhdGEgPT0gTlVMTCkgewotCQlyZXR1cm4gIiI7 Ci0JfQotCXJldHVybiAodGRhdGEtPnRocmVhZF9uYW1lICE9IE5VTEwgPyB0ZGF0YS0+dGhyZWFk X25hbWUgOiAiIik7Ci19Ci0KLWludAotcHJvZl90aHJlYWRfbmFtZV9zZXQodHNkX3QgKnRzZCwg Y29uc3QgY2hhciAqdGhyZWFkX25hbWUpIHsKLQlpZiAob3B0X3Byb2Zfc3lzX3RocmVhZF9uYW1l KSB7Ci0JCXJldHVybiBFTk9FTlQ7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHByb2ZfdGhyZWFkX25h bWVfc2V0X2ltcGwodHNkLCB0aHJlYWRfbmFtZSk7Ci0JfQotfQotCi1ib29sCi1wcm9mX3RocmVh ZF9hY3RpdmVfZ2V0KHRzZF90ICp0c2QpIHsKLQlhc3NlcnQodHNkX3JlZW50cmFuY3lfbGV2ZWxf Z2V0KHRzZCkgPT0gMCk7Ci0KLQlwcm9mX3RkYXRhX3QgKnRkYXRhOwotCi0JdGRhdGEgPSBwcm9m X3RkYXRhX2dldCh0c2QsIHRydWUpOwotCWlmICh0ZGF0YSA9PSBOVUxMKSB7Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0JcmV0dXJuIHRkYXRhLT5hY3RpdmU7Ci19Ci0KLWJvb2wKLXByb2ZfdGhyZWFk X2FjdGl2ZV9zZXQodHNkX3QgKnRzZCwgYm9vbCBhY3RpdmUpIHsKLQlhc3NlcnQodHNkX3JlZW50 cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7Ci0KLQlwcm9mX3RkYXRhX3QgKnRkYXRhOwotCi0J dGRhdGEgPSBwcm9mX3RkYXRhX2dldCh0c2QsIHRydWUpOwotCWlmICh0ZGF0YSA9PSBOVUxMKSB7 Ci0JCXJldHVybiB0cnVlOwotCX0KLQl0ZGF0YS0+YWN0aXZlID0gYWN0aXZlOwotCXJldHVybiBm YWxzZTsKLX0KLQotYm9vbAotcHJvZl90aHJlYWRfYWN0aXZlX2luaXRfZ2V0KHRzZG5fdCAqdHNk bikgewotCWJvb2wgYWN0aXZlX2luaXQ7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmcHJv Zl90aHJlYWRfYWN0aXZlX2luaXRfbXR4KTsKLQlhY3RpdmVfaW5pdCA9IHByb2ZfdGhyZWFkX2Fj dGl2ZV9pbml0OwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnByb2ZfdGhyZWFkX2FjdGl2 ZV9pbml0X210eCk7Ci0JcmV0dXJuIGFjdGl2ZV9pbml0OwotfQotCi1ib29sCi1wcm9mX3RocmVh ZF9hY3RpdmVfaW5pdF9zZXQodHNkbl90ICp0c2RuLCBib29sIGFjdGl2ZV9pbml0KSB7Ci0JYm9v bCBhY3RpdmVfaW5pdF9vbGQ7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmcHJvZl90aHJl YWRfYWN0aXZlX2luaXRfbXR4KTsKLQlhY3RpdmVfaW5pdF9vbGQgPSBwcm9mX3RocmVhZF9hY3Rp dmVfaW5pdDsKLQlwcm9mX3RocmVhZF9hY3RpdmVfaW5pdCA9IGFjdGl2ZV9pbml0OwotCW1hbGxv Y19tdXRleF91bmxvY2sodHNkbiwgJnByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0X210eCk7Ci0JcmV0 dXJuIGFjdGl2ZV9pbml0X29sZDsKLX0KLQotYm9vbAotcHJvZl9nZHVtcF9nZXQodHNkbl90ICp0 c2RuKSB7Ci0JYm9vbCBwcm9mX2dkdW1wX2N1cnJlbnQ7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0 c2RuLCAmcHJvZl9nZHVtcF9tdHgpOwotCXByb2ZfZ2R1bXBfY3VycmVudCA9IHByb2ZfZ2R1bXBf dmFsOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnByb2ZfZ2R1bXBfbXR4KTsKLQlyZXR1 cm4gcHJvZl9nZHVtcF9jdXJyZW50OwotfQotCi1ib29sCi1wcm9mX2dkdW1wX3NldCh0c2RuX3Qg KnRzZG4sIGJvb2wgZ2R1bXApIHsKLQlib29sIHByb2ZfZ2R1bXBfb2xkOwotCi0JbWFsbG9jX211 dGV4X2xvY2sodHNkbiwgJnByb2ZfZ2R1bXBfbXR4KTsKLQlwcm9mX2dkdW1wX29sZCA9IHByb2Zf Z2R1bXBfdmFsOwotCXByb2ZfZ2R1bXBfdmFsID0gZ2R1bXA7Ci0JbWFsbG9jX211dGV4X3VubG9j ayh0c2RuLCAmcHJvZl9nZHVtcF9tdHgpOwotCXJldHVybiBwcm9mX2dkdW1wX29sZDsKLX0KLQot dm9pZAotcHJvZl9iYWNrdHJhY2VfaG9va19zZXQocHJvZl9iYWNrdHJhY2VfaG9va190IGhvb2sp IHsKLQlhdG9taWNfc3RvcmVfcCgmcHJvZl9iYWNrdHJhY2VfaG9vaywgaG9vaywgQVRPTUlDX1JF TEVBU0UpOwotfQotCi1wcm9mX2JhY2t0cmFjZV9ob29rX3QKLXByb2ZfYmFja3RyYWNlX2hvb2tf Z2V0KCkgewotCXJldHVybiAocHJvZl9iYWNrdHJhY2VfaG9va190KWF0b21pY19sb2FkX3AoJnBy b2ZfYmFja3RyYWNlX2hvb2ssCi0JICAgIEFUT01JQ19BQ1FVSVJFKTsKLX0KLQotdm9pZAotcHJv Zl9kdW1wX2hvb2tfc2V0KHByb2ZfZHVtcF9ob29rX3QgaG9vaykgewotCWF0b21pY19zdG9yZV9w KCZwcm9mX2R1bXBfaG9vaywgaG9vaywgQVRPTUlDX1JFTEVBU0UpOwotfQotCi1wcm9mX2R1bXBf aG9va190Ci1wcm9mX2R1bXBfaG9va19nZXQoKSB7Ci0JcmV0dXJuIChwcm9mX2R1bXBfaG9va190 KWF0b21pY19sb2FkX3AoJnByb2ZfZHVtcF9ob29rLAotCSAgICBBVE9NSUNfQUNRVUlSRSk7Ci19 Ci0KLXZvaWQKLXByb2ZfYm9vdDAodm9pZCkgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwotCi0J bWVtY3B5KG9wdF9wcm9mX3ByZWZpeCwgUFJPRl9QUkVGSVhfREVGQVVMVCwKLQkgICAgc2l6ZW9m KFBST0ZfUFJFRklYX0RFRkFVTFQpKTsKLX0KLQotdm9pZAotcHJvZl9ib290MSh2b2lkKSB7Ci0J Y2Fzc2VydChjb25maWdfcHJvZik7Ci0KLQkvKgotCSAqIG9wdF9wcm9mIG11c3QgYmUgaW4gaXRz IGZpbmFsIHN0YXRlIGJlZm9yZSBhbnkgYXJlbmFzIGFyZQotCSAqIGluaXRpYWxpemVkLCBzbyB0 aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhlY3V0ZWQgZWFybHkuCi0JICovCi0JaWYgKG9wdF9wcm9m X2xlYWtfZXJyb3IgJiYgIW9wdF9wcm9mX2xlYWspIHsKLQkJb3B0X3Byb2ZfbGVhayA9IHRydWU7 Ci0JfQotCi0JaWYgKG9wdF9wcm9mX2xlYWsgJiYgIW9wdF9wcm9mKSB7Ci0JCS8qCi0JCSAqIEVu YWJsZSBvcHRfcHJvZiwgYnV0IGluIHN1Y2ggYSB3YXkgdGhhdCBwcm9maWxlcyBhcmUgbmV2ZXIK LQkJICogYXV0b21hdGljYWxseSBkdW1wZWQuCi0JCSAqLwotCQlvcHRfcHJvZiA9IHRydWU7Ci0J CW9wdF9wcm9mX2dkdW1wID0gZmFsc2U7Ci0JfSBlbHNlIGlmIChvcHRfcHJvZikgewotCQlpZiAo b3B0X2xnX3Byb2ZfaW50ZXJ2YWwgPj0gMCkgewotCQkJcHJvZl9pbnRlcnZhbCA9ICgoKHVpbnQ2 NF90KTFVKSA8PAotCQkJICAgIG9wdF9sZ19wcm9mX2ludGVydmFsKTsKLQkJfQotCX0KLX0KLQot Ym9vbAotcHJvZl9ib290Mih0c2RfdCAqdHNkLCBiYXNlX3QgKmJhc2UpIHsKLQljYXNzZXJ0KGNv bmZpZ19wcm9mKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgZ2xvYmFsIG11dGV4ZXMgdW5j b25kaXRpb25hbGx5IHRvIG1haW50YWluIGNvcnJlY3QKLQkgKiBzdGF0cyB3aGVuIG9wdF9wcm9m IGlzIGZhbHNlLgotCSAqLwotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmcHJvZl9hY3RpdmVfbXR4 LCAicHJvZl9hY3RpdmUiLAotCSAgICBXSVRORVNTX1JBTktfUFJPRl9BQ1RJVkUsIG1hbGxvY19t dXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmIChtYWxsb2Nf bXV0ZXhfaW5pdCgmcHJvZl9nZHVtcF9tdHgsICJwcm9mX2dkdW1wIiwKLQkgICAgV0lUTkVTU19S QU5LX1BST0ZfR0RVTVAsIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJu IHRydWU7Ci0JfQotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmcHJvZl90aHJlYWRfYWN0aXZlX2lu aXRfbXR4LAotCSAgICAicHJvZl90aHJlYWRfYWN0aXZlX2luaXQiLCBXSVRORVNTX1JBTktfUFJP Rl9USFJFQURfQUNUSVZFX0lOSVQsCi0JICAgIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkp IHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmYnQyZ2N0eF9t dHgsICJwcm9mX2J0MmdjdHgiLAotCSAgICBXSVRORVNTX1JBTktfUFJPRl9CVDJHQ1RYLCBtYWxs b2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlpZiAobWFs bG9jX211dGV4X2luaXQoJnRkYXRhc19tdHgsICJwcm9mX3RkYXRhcyIsCi0JICAgIFdJVE5FU1Nf UkFOS19QUk9GX1REQVRBUywgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgewotCQlyZXR1 cm4gdHJ1ZTsKLQl9Ci0JaWYgKG1hbGxvY19tdXRleF9pbml0KCZuZXh0X3Rocl91aWRfbXR4LCAi cHJvZl9uZXh0X3Rocl91aWQiLAotCSAgICBXSVRORVNTX1JBTktfUFJPRl9ORVhUX1RIUl9VSUQs IG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlm IChtYWxsb2NfbXV0ZXhfaW5pdCgmcHJvZl9zdGF0c19tdHgsICJwcm9mX3N0YXRzIiwKLQkgICAg V0lUTkVTU19SQU5LX1BST0ZfU1RBVFMsIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsK LQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmcHJvZl9kdW1wX2Zp bGVuYW1lX210eCwKLQkgICAgInByb2ZfZHVtcF9maWxlbmFtZSIsIFdJVE5FU1NfUkFOS19QUk9G X0RVTVBfRklMRU5BTUUsCi0JICAgIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJ cmV0dXJuIHRydWU7Ci0JfQotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmcHJvZl9kdW1wX210eCwg InByb2ZfZHVtcCIsCi0JICAgIFdJVE5FU1NfUkFOS19QUk9GX0RVTVAsIG1hbGxvY19tdXRleF9y YW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JaWYgKG9wdF9wcm9mKSB7 Ci0JCWxnX3Byb2Zfc2FtcGxlID0gb3B0X2xnX3Byb2Zfc2FtcGxlOwotCQlwcm9mX3VuYmlhc19t YXBfaW5pdCgpOwotCQlwcm9mX2FjdGl2ZV9zdGF0ZSA9IG9wdF9wcm9mX2FjdGl2ZTsKLQkJcHJv Zl9nZHVtcF92YWwgPSBvcHRfcHJvZl9nZHVtcDsKLQkJcHJvZl90aHJlYWRfYWN0aXZlX2luaXQg PSBvcHRfcHJvZl90aHJlYWRfYWN0aXZlX2luaXQ7Ci0KLQkJaWYgKHByb2ZfZGF0YV9pbml0KHRz ZCkpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0KLQkJbmV4dF90aHJfdWlkID0gMDsKLQkJaWYg KHByb2ZfaWR1bXBfYWNjdW1faW5pdCgpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCi0JCWlm IChvcHRfcHJvZl9maW5hbCAmJiBvcHRfcHJvZl9wcmVmaXhbMF0gIT0gJ1wwJyAmJgotCQkgICAg YXRleGl0KHByb2ZfZmR1bXApICE9IDApIHsKLQkJCW1hbGxvY193cml0ZSgiPGplbWFsbG9jPjog RXJyb3IgaW4gYXRleGl0KClcbiIpOwotCQkJaWYgKG9wdF9hYm9ydCkgewotCQkJCWFib3J0KCk7 Ci0JCQl9Ci0JCX0KLQotCQlpZiAocHJvZl9sb2dfaW5pdCh0c2QpKSB7Ci0JCQlyZXR1cm4gdHJ1 ZTsKLQkJfQotCi0JCWlmIChwcm9mX3JlY2VudF9pbml0KCkpIHsKLQkJCXJldHVybiB0cnVlOwot CQl9Ci0KLQkJcHJvZl9iYXNlID0gYmFzZTsKLQotCQlnY3R4X2xvY2tzID0gKG1hbGxvY19tdXRl eF90ICopYmFzZV9hbGxvYyh0c2RfdHNkbih0c2QpLCBiYXNlLAotCQkgICAgUFJPRl9OQ1RYX0xP Q0tTICogc2l6ZW9mKG1hbGxvY19tdXRleF90KSwgQ0FDSEVMSU5FKTsKLQkJaWYgKGdjdHhfbG9j a3MgPT0gTlVMTCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IFBST0ZfTkNUWF9MT0NLUzsgaSsrKSB7Ci0JCQlpZiAobWFsbG9jX211dGV4X2luaXQo JmdjdHhfbG9ja3NbaV0sICJwcm9mX2djdHgiLAotCQkJICAgIFdJVE5FU1NfUkFOS19QUk9GX0dD VFgsCi0JCQkgICAgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgewotCQkJCXJldHVybiB0 cnVlOwotCQkJfQotCQl9Ci0KLQkJdGRhdGFfbG9ja3MgPSAobWFsbG9jX211dGV4X3QgKiliYXNl X2FsbG9jKHRzZF90c2RuKHRzZCksIGJhc2UsCi0JCSAgICBQUk9GX05UREFUQV9MT0NLUyAqIHNp emVvZihtYWxsb2NfbXV0ZXhfdCksIENBQ0hFTElORSk7Ci0JCWlmICh0ZGF0YV9sb2NrcyA9PSBO VUxMKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg UFJPRl9OVERBVEFfTE9DS1M7IGkrKykgewotCQkJaWYgKG1hbGxvY19tdXRleF9pbml0KCZ0ZGF0 YV9sb2Nrc1tpXSwgInByb2ZfdGRhdGEiLAotCQkJICAgIFdJVE5FU1NfUkFOS19QUk9GX1REQVRB LAotCQkJICAgIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJCQlyZXR1cm4gdHJ1 ZTsKLQkJCX0KLQkJfQotCi0JCXByb2ZfdW53aW5kX2luaXQoKTsKLQkJcHJvZl9ob29rc19pbml0 KCk7Ci0JfQotCXByb2ZfYm9vdGVkID0gdHJ1ZTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotdm9p ZAotcHJvZl9wcmVmb3JrMCh0c2RuX3QgKnRzZG4pIHsKLQlpZiAoY29uZmlnX3Byb2YgJiYgb3B0 X3Byb2YpIHsKLQkJdW5zaWduZWQgaTsKLQotCQltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAm cHJvZl9kdW1wX210eCk7Ci0JCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZidDJnY3R4X210 eCk7Ci0JCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZ0ZGF0YXNfbXR4KTsKLQkJZm9yIChp ID0gMDsgaSA8IFBST0ZfTlREQVRBX0xPQ0tTOyBpKyspIHsKLQkJCW1hbGxvY19tdXRleF9wcmVm b3JrKHRzZG4sICZ0ZGF0YV9sb2Nrc1tpXSk7Ci0JCX0KLQkJbWFsbG9jX211dGV4X3ByZWZvcmso dHNkbiwgJmxvZ19tdHgpOwotCQlmb3IgKGkgPSAwOyBpIDwgUFJPRl9OQ1RYX0xPQ0tTOyBpKysp IHsKLQkJCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZnY3R4X2xvY2tzW2ldKTsKLQkJfQot CQltYWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RuLCAmcHJvZl9yZWNlbnRfZHVtcF9tdHgpOwotCX0K LX0KLQotdm9pZAotcHJvZl9wcmVmb3JrMSh0c2RuX3QgKnRzZG4pIHsKLQlpZiAoY29uZmlnX3By b2YgJiYgb3B0X3Byb2YpIHsKLQkJY291bnRlcl9wcmVmb3JrKHRzZG4sICZwcm9mX2lkdW1wX2Fj Y3VtdWxhdGVkKTsKLQkJbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnByb2ZfYWN0aXZlX210 eCk7Ci0JCW1hbGxvY19tdXRleF9wcmVmb3JrKHRzZG4sICZwcm9mX2R1bXBfZmlsZW5hbWVfbXR4 KTsKLQkJbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnByb2ZfZ2R1bXBfbXR4KTsKLQkJbWFs bG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7Ci0JCW1hbGxv Y19tdXRleF9wcmVmb3JrKHRzZG4sICZwcm9mX3N0YXRzX210eCk7Ci0JCW1hbGxvY19tdXRleF9w cmVmb3JrKHRzZG4sICZuZXh0X3Rocl91aWRfbXR4KTsKLQkJbWFsbG9jX211dGV4X3ByZWZvcmso dHNkbiwgJnByb2ZfdGhyZWFkX2FjdGl2ZV9pbml0X210eCk7Ci0JfQotfQotCi12b2lkCi1wcm9m X3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4pIHsKLQlpZiAoY29uZmlnX3Byb2YgJiYgb3B0 X3Byb2YpIHsKLQkJdW5zaWduZWQgaTsKLQotCQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50 KHRzZG4sCi0JCSAgICAmcHJvZl90aHJlYWRfYWN0aXZlX2luaXRfbXR4KTsKLQkJbWFsbG9jX211 dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmbmV4dF90aHJfdWlkX210eCk7Ci0JCW1hbGxvY19t dXRleF9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnByb2Zfc3RhdHNfbXR4KTsKLQkJbWFsbG9jX211 dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKLQkJbWFs bG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmcHJvZl9nZHVtcF9tdHgpOwotCQltYWxs b2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZwcm9mX2R1bXBfZmlsZW5hbWVfbXR4KTsK LQkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmcHJvZl9hY3RpdmVfbXR4KTsK LQkJY291bnRlcl9wb3N0Zm9ya19wYXJlbnQodHNkbiwgJnByb2ZfaWR1bXBfYWNjdW11bGF0ZWQp OwotCQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZwcm9mX3JlY2VudF9kdW1w X210eCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBQUk9GX05DVFhfTE9DS1M7IGkrKykgewotCQkJbWFs bG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmZ2N0eF9sb2Nrc1tpXSk7Ci0JCX0KLQkJ bWFsbG9jX211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmbG9nX210eCk7Ci0JCWZvciAoaSA9 IDA7IGkgPCBQUk9GX05UREFUQV9MT0NLUzsgaSsrKSB7Ci0JCQltYWxsb2NfbXV0ZXhfcG9zdGZv cmtfcGFyZW50KHRzZG4sICZ0ZGF0YV9sb2Nrc1tpXSk7Ci0JCX0KLQkJbWFsbG9jX211dGV4X3Bv c3Rmb3JrX3BhcmVudCh0c2RuLCAmdGRhdGFzX210eCk7Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9y a19wYXJlbnQodHNkbiwgJmJ0MmdjdHhfbXR4KTsKLQkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX3Bh cmVudCh0c2RuLCAmcHJvZl9kdW1wX210eCk7Ci0JfQotfQotCi12b2lkCi1wcm9mX3Bvc3Rmb3Jr X2NoaWxkKHRzZG5fdCAqdHNkbikgewotCWlmIChjb25maWdfcHJvZiAmJiBvcHRfcHJvZikgewot CQl1bnNpZ25lZCBpOwotCi0JCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmcHJv Zl90aHJlYWRfYWN0aXZlX2luaXRfbXR4KTsKLQkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxk KHRzZG4sICZuZXh0X3Rocl91aWRfbXR4KTsKLQkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxk KHRzZG4sICZwcm9mX3N0YXRzX210eCk7Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0 c2RuLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKLQkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2No aWxkKHRzZG4sICZwcm9mX2dkdW1wX210eCk7Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGls ZCh0c2RuLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9y a19jaGlsZCh0c2RuLCAmcHJvZl9hY3RpdmVfbXR4KTsKLQkJY291bnRlcl9wb3N0Zm9ya19jaGls ZCh0c2RuLCAmcHJvZl9pZHVtcF9hY2N1bXVsYXRlZCk7Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9y a19jaGlsZCh0c2RuLCAmcHJvZl9yZWNlbnRfZHVtcF9tdHgpOwotCQlmb3IgKGkgPSAwOyBpIDwg UFJPRl9OQ1RYX0xPQ0tTOyBpKyspIHsKLQkJCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0 c2RuLCAmZ2N0eF9sb2Nrc1tpXSk7Ci0JCX0KLQkJbWFsbG9jX211dGV4X3Bvc3Rmb3JrX2NoaWxk KHRzZG4sICZsb2dfbXR4KTsKLQkJZm9yIChpID0gMDsgaSA8IFBST0ZfTlREQVRBX0xPQ0tTOyBp KyspIHsKLQkJCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmdGRhdGFfbG9ja3Nb aV0pOwotCQl9Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmdGRhdGFzX210 eCk7Ci0JCW1hbGxvY19tdXRleF9wb3N0Zm9ya19jaGlsZCh0c2RuLCAmYnQyZ2N0eF9tdHgpOwot CQltYWxsb2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNkbiwgJnByb2ZfZHVtcF9tdHgpOwotCX0K LX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZl9kYXRhLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZl9kYXRhLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGJmYTU1YmUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Byb2ZfZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEs MTQ0NyArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1i bGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNs dWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvYXNzZXJ0LmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvY2toLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv aGFzaC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21hbGxvY19pby5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfZGF0YS5oIgotCi0vKgotICogVGhpcyBmaWxlIGRl ZmluZXMgYW5kIG1hbmFnZXMgdGhlIGNvcmUgcHJvZmlsaW5nIGRhdGEgc3RydWN0dXJlcy4KLSAq Ci0gKiBDb25jZXB0dWFsbHksIHByb2ZpbGluZyBkYXRhIGNhbiBiZSBpbWFnaW5lZCBhcyBhIHRh YmxlIHdpdGggdGhyZWUgY29sdW1uczoKLSAqIHRocmVhZCwgc3RhY2sgdHJhY2UsIGFuZCBjdXJy ZW50IGFsbG9jYXRpb24gc2l6ZS4gIChXaGVuIHByb2ZfYWNjdW0gaXMgb24sCi0gKiB0aGVyZSdz IG9uZSBhZGRpdGlvbmFsIGNvbHVtbiB3aGljaCBpcyB0aGUgY3VtdWxhdGl2ZSBhbGxvY2F0aW9u IHNpemUuKQotICoKLSAqIEltcGxlbWVudGF0aW9uIHdpc2UsIGVhY2ggdGhyZWFkIG1haW50YWlu cyBhIGhhc2ggcmVjb3JkaW5nIHRoZSBzdGFjayB0cmFjZQotICogdG8gYWxsb2NhdGlvbiBzaXpl IGNvcnJlc3BvbmRlbmNlcywgd2hpY2ggYXJlIGJhc2ljYWxseSB0aGUgaW5kaXZpZHVhbCByb3dz Ci0gKiBpbiB0aGUgdGFibGUuICBJbiBhZGRpdGlvbiwgdHdvIGdsb2JhbCAiaW5kaWNlcyIgYXJl IGJ1aWx0IHRvIG1ha2UgZGF0YQotICogYWdncmVnYXRpb24gZWZmaWNpZW50IChmb3IgZHVtcGlu Zyk6IGJ0MmdjdHggYW5kIHRkYXRhcywgd2hpY2ggYXJlIGJhc2ljYWxseQotICogdGhlICJncm91 cGVkIGJ5IHN0YWNrIHRyYWNlIiBhbmQgImdyb3VwZWQgYnkgdGhyZWFkIiB2aWV3cyBvZiB0aGUg c2FtZSB0YWJsZSwKLSAqIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCB0aGUgYWxsb2NhdGlvbiBz aXplIGlzIG9ubHkgYWdncmVnYXRlZCB0byB0aGUgdHdvCi0gKiBpbmRpY2VzIGF0IGR1bXBpbmcg dGltZSwgc28gYXMgdG8gb3B0aW1pemUgZm9yIHBlcmZvcm1hbmNlLgotICovCi0KLS8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0KLW1hbGxvY19tdXRleF90IGJ0MmdjdHhfbXR4OwotbWFsbG9jX211 dGV4X3QgdGRhdGFzX210eDsKLW1hbGxvY19tdXRleF90IHByb2ZfZHVtcF9tdHg7Ci0KLS8qCi0g KiBUYWJsZSBvZiBtdXRleGVzIHRoYXQgYXJlIHNoYXJlZCBhbW9uZyBnY3R4J3MuICBUaGVzZSBh cmUgbGVhZiBsb2Nrcywgc28KLSAqIHRoZXJlIGlzIG5vIHByb2JsZW0gd2l0aCB1c2luZyB0aGVt IGZvciBtb3JlIHRoYW4gb25lIGdjdHggYXQgdGhlIHNhbWUgdGltZS4KLSAqIFRoZSBwcmltYXJ5 IG1vdGl2YXRpb24gZm9yIHRoaXMgc2hhcmluZyB0aG91Z2ggaXMgdGhhdCBnY3R4J3MgYXJlIGVw aGVtZXJhbCwKLSAqIGFuZCBkZXN0cm95aW5nIG11dGV4ZXMgY2F1c2VzIGNvbXBsaWNhdGlvbnMg Zm9yIHN5c3RlbXMgdGhhdCBhbGxvY2F0ZSB3aGVuCi0gKiBjcmVhdGluZy9kZXN0cm95aW5nIG11 dGV4ZXMuCi0gKi8KLW1hbGxvY19tdXRleF90ICpnY3R4X2xvY2tzOwotc3RhdGljIGF0b21pY191 X3QgY3VtX2djdHhzOyAvKiBBdG9taWMgY291bnRlci4gKi8KLQotLyoKLSAqIFRhYmxlIG9mIG11 dGV4ZXMgdGhhdCBhcmUgc2hhcmVkIGFtb25nIHRkYXRhJ3MuICBObyBvcGVyYXRpb25zIHJlcXVp cmUKLSAqIGhvbGRpbmcgbXVsdGlwbGUgdGRhdGEgbG9ja3MsIHNvIHRoZXJlIGlzIG5vIHByb2Js ZW0gd2l0aCB1c2luZyB0aGVtIGZvciBtb3JlCi0gKiB0aGFuIG9uZSB0ZGF0YSBhdCB0aGUgc2Ft ZSB0aW1lLCBldmVuIHRob3VnaCBhIGdjdHggbG9jayBtYXkgYmUgYWNxdWlyZWQKLSAqIHdoaWxl IGhvbGRpbmcgYSB0ZGF0YSBsb2NrLgotICovCi1tYWxsb2NfbXV0ZXhfdCAqdGRhdGFfbG9ja3M7 Ci0KLS8qCi0gKiBHbG9iYWwgaGFzaCBvZiAocHJvZl9idF90ICopLS0+KHByb2ZfZ2N0eF90ICop LiAgVGhpcyBpcyB0aGUgbWFzdGVyIGRhdGEKLSAqIHN0cnVjdHVyZSB0aGF0IGtub3dzIGFib3V0 IGFsbCBiYWNrdHJhY2VzIGN1cnJlbnRseSBjYXB0dXJlZC4KLSAqLwotc3RhdGljIGNraF90IGJ0 MmdjdHg7Ci0KLS8qCi0gKiBUcmVlIG9mIGFsbCBleHRhbnQgcHJvZl90ZGF0YV90IHN0cnVjdHVy ZXMsIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUsCi0gKiB7YXR0YWNoZWQsZGV0YWNoZWQsZXhwaXJlZH0u Ci0gKi8KLXN0YXRpYyBwcm9mX3RkYXRhX3RyZWVfdCB0ZGF0YXM7Ci0KLXNpemVfdCBwcm9mX3Vu Ymlhc2VkX3N6W1BST0ZfU0NfTlNJWkVTXTsKLXNpemVfdCBwcm9mX3NoaWZ0ZWRfdW5iaWFzZWRf Y250W1BST0ZfU0NfTlNJWkVTXTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJlZC1i bGFjayB0cmVlcy4gKi8KLQotc3RhdGljIGludAotcHJvZl90Y3R4X2NvbXAoY29uc3QgcHJvZl90 Y3R4X3QgKmEsIGNvbnN0IHByb2ZfdGN0eF90ICpiKSB7Ci0JdWludDY0X3QgYV90aHJfdWlkID0g YS0+dGhyX3VpZDsKLQl1aW50NjRfdCBiX3Rocl91aWQgPSBiLT50aHJfdWlkOwotCWludCByZXQg PSAoYV90aHJfdWlkID4gYl90aHJfdWlkKSAtIChhX3Rocl91aWQgPCBiX3Rocl91aWQpOwotCWlm IChyZXQgPT0gMCkgewotCQl1aW50NjRfdCBhX3Rocl9kaXNjcmltID0gYS0+dGhyX2Rpc2NyaW07 Ci0JCXVpbnQ2NF90IGJfdGhyX2Rpc2NyaW0gPSBiLT50aHJfZGlzY3JpbTsKLQkJcmV0ID0gKGFf dGhyX2Rpc2NyaW0gPiBiX3Rocl9kaXNjcmltKSAtIChhX3Rocl9kaXNjcmltIDwKLQkJICAgIGJf dGhyX2Rpc2NyaW0pOwotCQlpZiAocmV0ID09IDApIHsKLQkJCXVpbnQ2NF90IGFfdGN0eF91aWQg PSBhLT50Y3R4X3VpZDsKLQkJCXVpbnQ2NF90IGJfdGN0eF91aWQgPSBiLT50Y3R4X3VpZDsKLQkJ CXJldCA9IChhX3RjdHhfdWlkID4gYl90Y3R4X3VpZCkgLSAoYV90Y3R4X3VpZCA8Ci0JCQkgICAg Yl90Y3R4X3VpZCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotcmJfZ2VuKHN0YXRpYyBV TlVTRUQsIHRjdHhfdHJlZV8sIHByb2ZfdGN0eF90cmVlX3QsIHByb2ZfdGN0eF90LAotICAgIHRj dHhfbGluaywgcHJvZl90Y3R4X2NvbXApCi0KLXN0YXRpYyBpbnQKLXByb2ZfZ2N0eF9jb21wKGNv bnN0IHByb2ZfZ2N0eF90ICphLCBjb25zdCBwcm9mX2djdHhfdCAqYikgewotCXVuc2lnbmVkIGFf bGVuID0gYS0+YnQubGVuOwotCXVuc2lnbmVkIGJfbGVuID0gYi0+YnQubGVuOwotCXVuc2lnbmVk IGNvbXBfbGVuID0gKGFfbGVuIDwgYl9sZW4pID8gYV9sZW4gOiBiX2xlbjsKLQlpbnQgcmV0ID0g bWVtY21wKGEtPmJ0LnZlYywgYi0+YnQudmVjLCBjb21wX2xlbiAqIHNpemVvZih2b2lkICopKTsK LQlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gKGFfbGVuID4gYl9sZW4pIC0gKGFfbGVuIDwgYl9s ZW4pOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1yYl9nZW4oc3RhdGljIFVOVVNFRCwgZ2N0eF90 cmVlXywgcHJvZl9nY3R4X3RyZWVfdCwgcHJvZl9nY3R4X3QsIGR1bXBfbGluaywKLSAgICBwcm9m X2djdHhfY29tcCkKLQotc3RhdGljIGludAotcHJvZl90ZGF0YV9jb21wKGNvbnN0IHByb2ZfdGRh dGFfdCAqYSwgY29uc3QgcHJvZl90ZGF0YV90ICpiKSB7Ci0JaW50IHJldDsKLQl1aW50NjRfdCBh X3VpZCA9IGEtPnRocl91aWQ7Ci0JdWludDY0X3QgYl91aWQgPSBiLT50aHJfdWlkOwotCi0JcmV0 ID0gKChhX3VpZCA+IGJfdWlkKSAtIChhX3VpZCA8IGJfdWlkKSk7Ci0JaWYgKHJldCA9PSAwKSB7 Ci0JCXVpbnQ2NF90IGFfZGlzY3JpbSA9IGEtPnRocl9kaXNjcmltOwotCQl1aW50NjRfdCBiX2Rp c2NyaW0gPSBiLT50aHJfZGlzY3JpbTsKLQotCQlyZXQgPSAoKGFfZGlzY3JpbSA+IGJfZGlzY3Jp bSkgLSAoYV9kaXNjcmltIDwgYl9kaXNjcmltKSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXJi X2dlbihzdGF0aWMgVU5VU0VELCB0ZGF0YV90cmVlXywgcHJvZl90ZGF0YV90cmVlX3QsIHByb2Zf dGRhdGFfdCwgdGRhdGFfbGluaywKLSAgICBwcm9mX3RkYXRhX2NvbXApCi0KLS8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0KLXN0YXRpYyBtYWxsb2NfbXV0ZXhfdCAqCi1wcm9mX2djdHhfbXV0ZXhf Y2hvb3NlKHZvaWQpIHsKLQl1bnNpZ25lZCBuZ2N0eHMgPSBhdG9taWNfZmV0Y2hfYWRkX3UoJmN1 bV9nY3R4cywgMSwgQVRPTUlDX1JFTEFYRUQpOwotCi0JcmV0dXJuICZnY3R4X2xvY2tzWyhuZ2N0 eHMgLSAxKSAlIFBST0ZfTkNUWF9MT0NLU107Ci19Ci0KLXN0YXRpYyBtYWxsb2NfbXV0ZXhfdCAq Ci1wcm9mX3RkYXRhX211dGV4X2Nob29zZSh1aW50NjRfdCB0aHJfdWlkKSB7Ci0JcmV0dXJuICZ0 ZGF0YV9sb2Nrc1t0aHJfdWlkICUgUFJPRl9OVERBVEFfTE9DS1NdOwotfQotCi1ib29sCi1wcm9m X2RhdGFfaW5pdCh0c2RfdCAqdHNkKSB7Ci0JdGRhdGFfdHJlZV9uZXcoJnRkYXRhcyk7Ci0JcmV0 dXJuIGNraF9uZXcodHNkLCAmYnQyZ2N0eCwgUFJPRl9DS0hfTUlOSVRFTVMsCi0JICAgIHByb2Zf YnRfaGFzaCwgcHJvZl9idF9rZXljb21wKTsKLX0KLQotc3RhdGljIHZvaWQKLXByb2ZfZW50ZXIo dHNkX3QgKnRzZCwgcHJvZl90ZGF0YV90ICp0ZGF0YSkgewotCWNhc3NlcnQoY29uZmlnX3Byb2Yp OwotCWFzc2VydCh0ZGF0YSA9PSBwcm9mX3RkYXRhX2dldCh0c2QsIGZhbHNlKSk7Ci0KLQlpZiAo dGRhdGEgIT0gTlVMTCkgewotCQlhc3NlcnQoIXRkYXRhLT5lbnEpOwotCQl0ZGF0YS0+ZW5xID0g dHJ1ZTsKLQl9Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmYnQyZ2N0eF9t dHgpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvZl9sZWF2ZSh0c2RfdCAqdHNkLCBwcm9mX3RkYXRh X3QgKnRkYXRhKSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0JYXNzZXJ0KHRkYXRhID09IHBy b2ZfdGRhdGFfZ2V0KHRzZCwgZmFsc2UpKTsKLQotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3Rz ZG4odHNkKSwgJmJ0MmdjdHhfbXR4KTsKLQotCWlmICh0ZGF0YSAhPSBOVUxMKSB7Ci0JCWJvb2wg aWR1bXAsIGdkdW1wOwotCi0JCWFzc2VydCh0ZGF0YS0+ZW5xKTsKLQkJdGRhdGEtPmVucSA9IGZh bHNlOwotCQlpZHVtcCA9IHRkYXRhLT5lbnFfaWR1bXA7Ci0JCXRkYXRhLT5lbnFfaWR1bXAgPSBm YWxzZTsKLQkJZ2R1bXAgPSB0ZGF0YS0+ZW5xX2dkdW1wOwotCQl0ZGF0YS0+ZW5xX2dkdW1wID0g ZmFsc2U7Ci0KLQkJaWYgKGlkdW1wKSB7Ci0JCQlwcm9mX2lkdW1wKHRzZF90c2RuKHRzZCkpOwot CQl9Ci0JCWlmIChnZHVtcCkgewotCQkJcHJvZl9nZHVtcCh0c2RfdHNkbih0c2QpKTsKLQkJfQot CX0KLX0KLQotc3RhdGljIHByb2ZfZ2N0eF90ICoKLXByb2ZfZ2N0eF9jcmVhdGUodHNkbl90ICp0 c2RuLCBwcm9mX2J0X3QgKmJ0KSB7Ci0JLyoKLQkgKiBDcmVhdGUgYSBzaW5nbGUgYWxsb2NhdGlv biB0aGF0IGhhcyBzcGFjZSBmb3IgdmVjIG9mIGxlbmd0aCBidC0+bGVuLgotCSAqLwotCXNpemVf dCBzaXplID0gb2Zmc2V0b2YocHJvZl9nY3R4X3QsIHZlYykgKyAoYnQtPmxlbiAqIHNpemVvZih2 b2lkICopKTsKLQlwcm9mX2djdHhfdCAqZ2N0eCA9IChwcm9mX2djdHhfdCAqKWlhbGxvY3p0bSh0 c2RuLCBzaXplLAotCSAgICBzel9zaXplMmluZGV4KHNpemUpLCBmYWxzZSwgTlVMTCwgdHJ1ZSwg YXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwgdHJ1ZSksCi0JICAgIHRydWUpOwotCWlmIChnY3R4ID09 IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWdjdHgtPmxvY2sgPSBwcm9mX2djdHhfbXV0 ZXhfY2hvb3NlKCk7Ci0JLyoKLQkgKiBTZXQgbmxpbWJvIHRvIDEsIGluIG9yZGVyIHRvIGF2b2lk IGEgcmFjZSBjb25kaXRpb24gd2l0aAotCSAqIHByb2ZfdGN0eF9kZXN0cm95KCkvcHJvZl9nY3R4 X3RyeV9kZXN0cm95KCkuCi0JICovCi0JZ2N0eC0+bmxpbWJvID0gMTsKLQl0Y3R4X3RyZWVfbmV3 KCZnY3R4LT50Y3R4cyk7Ci0JLyogRHVwbGljYXRlIGJ0LiAqLwotCW1lbWNweShnY3R4LT52ZWMs IGJ0LT52ZWMsIGJ0LT5sZW4gKiBzaXplb2Yodm9pZCAqKSk7Ci0JZ2N0eC0+YnQudmVjID0gZ2N0 eC0+dmVjOwotCWdjdHgtPmJ0LmxlbiA9IGJ0LT5sZW47Ci0JcmV0dXJuIGdjdHg7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1wcm9mX2djdHhfdHJ5X2Rlc3Ryb3kodHNkX3QgKnRzZCwgcHJvZl90ZGF0YV90 ICp0ZGF0YV9zZWxmLAotICAgIHByb2ZfZ2N0eF90ICpnY3R4KSB7Ci0JY2Fzc2VydChjb25maWdf cHJvZik7Ci0KLQkvKgotCSAqIENoZWNrIHRoYXQgZ2N0eCBpcyBzdGlsbCB1bnVzZWQgYnkgYW55 IHRocmVhZCBjYWNoZSBiZWZvcmUgZGVzdHJveWluZwotCSAqIGl0LiAgcHJvZl9sb29rdXAoKSBp bmNyZW1lbnRzIGdjdHgtPm5saW1ibyBpbiBvcmRlciB0byBhdm9pZCBhIHJhY2UKLQkgKiBjb25k aXRpb24gd2l0aCB0aGlzIGZ1bmN0aW9uLCBhcyBkb2VzIHByb2ZfdGN0eF9kZXN0cm95KCkgaW4g b3JkZXIgdG8KLQkgKiBhdm9pZCBhIHJhY2UgYmV0d2VlbiB0aGUgbWFpbiBib2R5IG9mIHByb2Zf dGN0eF9kZXN0cm95KCkgYW5kIGVudHJ5Ci0JICogaW50byB0aGlzIGZ1bmN0aW9uLgotCSAqLwot CXByb2ZfZW50ZXIodHNkLCB0ZGF0YV9zZWxmKTsKLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNk bih0c2QpLCBnY3R4LT5sb2NrKTsKLQlhc3NlcnQoZ2N0eC0+bmxpbWJvICE9IDApOwotCWlmICh0 Y3R4X3RyZWVfZW1wdHkoJmdjdHgtPnRjdHhzKSAmJiBnY3R4LT5ubGltYm8gPT0gMSkgewotCQkv KiBSZW1vdmUgZ2N0eCBmcm9tIGJ0MmdjdHguICovCi0JCWlmIChja2hfcmVtb3ZlKHRzZCwgJmJ0 MmdjdHgsICZnY3R4LT5idCwgTlVMTCwgTlVMTCkpIHsKLQkJCW5vdF9yZWFjaGVkKCk7Ci0JCX0K LQkJcHJvZl9sZWF2ZSh0c2QsIHRkYXRhX3NlbGYpOwotCQkvKiBEZXN0cm95IGdjdHguICovCi0J CW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7Ci0JCWlkYWxs b2N0bSh0c2RfdHNkbih0c2QpLCBnY3R4LCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKLQl9IGVs c2UgewotCQkvKgotCQkgKiBDb21wZW5zYXRlIGZvciBpbmNyZW1lbnQgaW4gcHJvZl90Y3R4X2Rl c3Ryb3koKSBvcgotCQkgKiBwcm9mX2xvb2t1cCgpLgotCQkgKi8KLQkJZ2N0eC0+bmxpbWJvLS07 Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7Ci0JCXBy b2ZfbGVhdmUodHNkLCB0ZGF0YV9zZWxmKTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sCi1wcm9mX2dj dHhfc2hvdWxkX2Rlc3Ryb3kocHJvZl9nY3R4X3QgKmdjdHgpIHsKLQlpZiAob3B0X3Byb2ZfYWNj dW0pIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoIXRjdHhfdHJlZV9lbXB0eSgmZ2N0eC0+ dGN0eHMpKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKGdjdHgtPm5saW1ibyAhPSAwKSB7 Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sCi1w cm9mX2xvb2t1cF9nbG9iYWwodHNkX3QgKnRzZCwgcHJvZl9idF90ICpidCwgcHJvZl90ZGF0YV90 ICp0ZGF0YSwKLSAgICB2b2lkICoqcF9idGtleSwgcHJvZl9nY3R4X3QgKipwX2djdHgsIGJvb2wg KnBfbmV3X2djdHgpIHsKLQl1bmlvbiB7Ci0JCXByb2ZfZ2N0eF90CSpwOwotCQl2b2lkCQkqdjsK LQl9IGdjdHgsIHRnY3R4OwotCXVuaW9uIHsKLQkJcHJvZl9idF90CSpwOwotCQl2b2lkCQkqdjsK LQl9IGJ0a2V5OwotCWJvb2wgbmV3X2djdHg7Ci0KLQlwcm9mX2VudGVyKHRzZCwgdGRhdGEpOwot CWlmIChja2hfc2VhcmNoKCZidDJnY3R4LCBidCwgJmJ0a2V5LnYsICZnY3R4LnYpKSB7Ci0JCS8q IGJ0IGhhcyBuZXZlciBiZWVuIHNlZW4gYmVmb3JlLiAgSW5zZXJ0IGl0LiAqLwotCQlwcm9mX2xl YXZlKHRzZCwgdGRhdGEpOwotCQl0Z2N0eC5wID0gcHJvZl9nY3R4X2NyZWF0ZSh0c2RfdHNkbih0 c2QpLCBidCk7Ci0JCWlmICh0Z2N0eC52ID09IE5VTEwpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9 Ci0JCXByb2ZfZW50ZXIodHNkLCB0ZGF0YSk7Ci0JCWlmIChja2hfc2VhcmNoKCZidDJnY3R4LCBi dCwgJmJ0a2V5LnYsICZnY3R4LnYpKSB7Ci0JCQlnY3R4LnAgPSB0Z2N0eC5wOwotCQkJYnRrZXku cCA9ICZnY3R4LnAtPmJ0OwotCQkJaWYgKGNraF9pbnNlcnQodHNkLCAmYnQyZ2N0eCwgYnRrZXku diwgZ2N0eC52KSkgewotCQkJCS8qIE9PTS4gKi8KLQkJCQlwcm9mX2xlYXZlKHRzZCwgdGRhdGEp OwotCQkJCWlkYWxsb2N0bSh0c2RfdHNkbih0c2QpLCBnY3R4LnYsIE5VTEwsIE5VTEwsCi0JCQkJ ICAgIHRydWUsIHRydWUpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJbmV3X2djdHggPSB0 cnVlOwotCQl9IGVsc2UgewotCQkJbmV3X2djdHggPSBmYWxzZTsKLQkJfQotCX0gZWxzZSB7Ci0J CXRnY3R4LnYgPSBOVUxMOwotCQluZXdfZ2N0eCA9IGZhbHNlOwotCX0KLQotCWlmICghbmV3X2dj dHgpIHsKLQkJLyoKLQkJICogSW5jcmVtZW50IG5saW1ibywgaW4gb3JkZXIgdG8gYXZvaWQgYSBy YWNlIGNvbmRpdGlvbiB3aXRoCi0JCSAqIHByb2ZfdGN0eF9kZXN0cm95KCkvcHJvZl9nY3R4X3Ry eV9kZXN0cm95KCkuCi0JCSAqLwotCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCBn Y3R4LnAtPmxvY2spOwotCQlnY3R4LnAtPm5saW1ibysrOwotCQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZF90c2RuKHRzZCksIGdjdHgucC0+bG9jayk7Ci0JCW5ld19nY3R4ID0gZmFsc2U7Ci0KLQkJ aWYgKHRnY3R4LnYgIT0gTlVMTCkgewotCQkJLyogTG9zdCByYWNlIHRvIGluc2VydC4gKi8KLQkJ CWlkYWxsb2N0bSh0c2RfdHNkbih0c2QpLCB0Z2N0eC52LCBOVUxMLCBOVUxMLCB0cnVlLAotCQkJ ICAgIHRydWUpOwotCQl9Ci0JfQotCXByb2ZfbGVhdmUodHNkLCB0ZGF0YSk7Ci0KLQkqcF9idGtl eSA9IGJ0a2V5LnY7Ci0JKnBfZ2N0eCA9IGdjdHgucDsKLQkqcF9uZXdfZ2N0eCA9IG5ld19nY3R4 OwotCXJldHVybiBmYWxzZTsKLX0KLQotcHJvZl90Y3R4X3QgKgotcHJvZl9sb29rdXAodHNkX3Qg KnRzZCwgcHJvZl9idF90ICpidCkgewotCXVuaW9uIHsKLQkJcHJvZl90Y3R4X3QJKnA7Ci0JCXZv aWQJCSp2OwotCX0gcmV0OwotCXByb2ZfdGRhdGFfdCAqdGRhdGE7Ci0JYm9vbCBub3RfZm91bmQ7 Ci0KLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQotCXRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNk LCBmYWxzZSk7Ci0JYXNzZXJ0KHRkYXRhICE9IE5VTEwpOwotCi0JbWFsbG9jX211dGV4X2xvY2so dHNkX3RzZG4odHNkKSwgdGRhdGEtPmxvY2spOwotCW5vdF9mb3VuZCA9IGNraF9zZWFyY2goJnRk YXRhLT5idDJ0Y3R4LCBidCwgTlVMTCwgJnJldC52KTsKLQlpZiAoIW5vdF9mb3VuZCkgeyAvKiBO b3RlIGRvdWJsZSBuZWdhdGl2ZSEgKi8KLQkJcmV0LnAtPnByZXBhcmVkID0gdHJ1ZTsKLQl9Ci0J bWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCB0ZGF0YS0+bG9jayk7Ci0JaWYgKG5v dF9mb3VuZCkgewotCQl2b2lkICpidGtleTsKLQkJcHJvZl9nY3R4X3QgKmdjdHg7Ci0JCWJvb2wg bmV3X2djdHgsIGVycm9yOwotCi0JCS8qCi0JCSAqIFRoaXMgdGhyZWFkJ3MgY2FjaGUgbGFja3Mg YnQuICBMb29rIGZvciBpdCBpbiB0aGUgZ2xvYmFsCi0JCSAqIGNhY2hlLgotCQkgKi8KLQkJaWYg KHByb2ZfbG9va3VwX2dsb2JhbCh0c2QsIGJ0LCB0ZGF0YSwgJmJ0a2V5LCAmZ2N0eCwKLQkJICAg ICZuZXdfZ2N0eCkpIHsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLQkJLyogTGluayBhIHByb2Zf dGN0eF90IGludG8gZ2N0eCBmb3IgdGhpcyB0aHJlYWQuICovCi0JCXJldC52ID0gaWFsbG9jenRt KHRzZF90c2RuKHRzZCksIHNpemVvZihwcm9mX3RjdHhfdCksCi0JCSAgICBzel9zaXplMmluZGV4 KHNpemVvZihwcm9mX3RjdHhfdCkpLCBmYWxzZSwgTlVMTCwgdHJ1ZSwKLQkJICAgIGFyZW5hX2lj aG9vc2UodHNkLCBOVUxMKSwgdHJ1ZSk7Ci0JCWlmIChyZXQucCA9PSBOVUxMKSB7Ci0JCQlpZiAo bmV3X2djdHgpIHsKLQkJCQlwcm9mX2djdHhfdHJ5X2Rlc3Ryb3kodHNkLCB0ZGF0YSwgZ2N0eCk7 Ci0JCQl9Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlyZXQucC0+dGRhdGEgPSB0ZGF0YTsKLQkJ cmV0LnAtPnRocl91aWQgPSB0ZGF0YS0+dGhyX3VpZDsKLQkJcmV0LnAtPnRocl9kaXNjcmltID0g dGRhdGEtPnRocl9kaXNjcmltOwotCQlyZXQucC0+cmVjZW50X2NvdW50ID0gMDsKLQkJbWVtc2V0 KCZyZXQucC0+Y250cywgMCwgc2l6ZW9mKHByb2ZfY250X3QpKTsKLQkJcmV0LnAtPmdjdHggPSBn Y3R4OwotCQlyZXQucC0+dGN0eF91aWQgPSB0ZGF0YS0+dGN0eF91aWRfbmV4dCsrOwotCQlyZXQu cC0+cHJlcGFyZWQgPSB0cnVlOwotCQlyZXQucC0+c3RhdGUgPSBwcm9mX3RjdHhfc3RhdGVfaW5p dGlhbGl6aW5nOwotCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCB0ZGF0YS0+bG9j ayk7Ci0JCWVycm9yID0gY2toX2luc2VydCh0c2QsICZ0ZGF0YS0+YnQydGN0eCwgYnRrZXksIHJl dC52KTsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCB0ZGF0YS0+bG9jayk7 Ci0JCWlmIChlcnJvcikgewotCQkJaWYgKG5ld19nY3R4KSB7Ci0JCQkJcHJvZl9nY3R4X3RyeV9k ZXN0cm95KHRzZCwgdGRhdGEsIGdjdHgpOwotCQkJfQotCQkJaWRhbGxvY3RtKHRzZF90c2RuKHRz ZCksIHJldC52LCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKLQkJCXJldHVybiBOVUxMOwotCQl9 Ci0JCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2spOwotCQlyZXQu cC0+c3RhdGUgPSBwcm9mX3RjdHhfc3RhdGVfbm9taW5hbDsKLQkJdGN0eF90cmVlX2luc2VydCgm Z2N0eC0+dGN0eHMsIHJldC5wKTsKLQkJZ2N0eC0+bmxpbWJvLS07Ci0JCW1hbGxvY19tdXRleF91 bmxvY2sodHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7Ci0JfQotCi0JcmV0dXJuIHJldC5wOwot fQotCi0vKiBVc2VkIGluIHVuaXQgdGVzdHMuICovCi1zdGF0aWMgcHJvZl90ZGF0YV90ICoKLXBy b2ZfdGRhdGFfY291bnRfaXRlcihwcm9mX3RkYXRhX3RyZWVfdCAqdGRhdGFzX3B0ciwgcHJvZl90 ZGF0YV90ICp0ZGF0YSwKLSAgICB2b2lkICphcmcpIHsKLQlzaXplX3QgKnRkYXRhX2NvdW50ID0g KHNpemVfdCAqKWFyZzsKLQotCSgqdGRhdGFfY291bnQpKys7Ci0KLQlyZXR1cm4gTlVMTDsKLX0K LQotLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLwotc2l6ZV90Ci1wcm9mX3RkYXRhX2NvdW50KHZv aWQpIHsKLQlzaXplX3QgdGRhdGFfY291bnQgPSAwOwotCXRzZG5fdCAqdHNkbjsKLQotCXRzZG4g PSB0c2RuX2ZldGNoKCk7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnRkYXRhc19tdHgpOwot CXRkYXRhX3RyZWVfaXRlcigmdGRhdGFzLCBOVUxMLCBwcm9mX3RkYXRhX2NvdW50X2l0ZXIsCi0J ICAgICh2b2lkICopJnRkYXRhX2NvdW50KTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZ0 ZGF0YXNfbXR4KTsKLQotCXJldHVybiB0ZGF0YV9jb3VudDsKLX0KLQotLyogVXNlZCBpbiB1bml0 IHRlc3RzLiAqLwotc2l6ZV90Ci1wcm9mX2J0X2NvdW50KHZvaWQpIHsKLQlzaXplX3QgYnRfY291 bnQ7Ci0JdHNkX3QgKnRzZDsKLQlwcm9mX3RkYXRhX3QgKnRkYXRhOwotCi0JdHNkID0gdHNkX2Zl dGNoKCk7Ci0JdGRhdGEgPSBwcm9mX3RkYXRhX2dldCh0c2QsIGZhbHNlKTsKLQlpZiAodGRhdGEg PT0gTlVMTCkgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNk bih0c2QpLCAmYnQyZ2N0eF9tdHgpOwotCWJ0X2NvdW50ID0gY2toX2NvdW50KCZidDJnY3R4KTsK LQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZidDJnY3R4X210eCk7Ci0KLQly ZXR1cm4gYnRfY291bnQ7Ci19Ci0KLWNoYXIgKgotcHJvZl90aHJlYWRfbmFtZV9hbGxvYyh0c2Rf dCAqdHNkLCBjb25zdCBjaGFyICp0aHJlYWRfbmFtZSkgewotCWNoYXIgKnJldDsKLQlzaXplX3Qg c2l6ZTsKLQotCWlmICh0aHJlYWRfbmFtZSA9PSBOVUxMKSB7Ci0JCXJldHVybiBOVUxMOwotCX0K LQotCXNpemUgPSBzdHJsZW4odGhyZWFkX25hbWUpICsgMTsKLQlpZiAoc2l6ZSA9PSAxKSB7Ci0J CXJldHVybiAiIjsKLQl9Ci0KLQlyZXQgPSBpYWxsb2N6dG0odHNkX3RzZG4odHNkKSwgc2l6ZSwg c3pfc2l6ZTJpbmRleChzaXplKSwgZmFsc2UsIE5VTEwsCi0JICAgIHRydWUsIGFyZW5hX2dldChU U0ROX05VTEwsIDAsIHRydWUpLCB0cnVlKTsKLQlpZiAocmV0ID09IE5VTEwpIHsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCW1lbWNweShyZXQsIHRocmVhZF9uYW1lLCBzaXplKTsKLQlyZXR1cm4gcmV0 OwotfQotCi1pbnQKLXByb2ZfdGhyZWFkX25hbWVfc2V0X2ltcGwodHNkX3QgKnRzZCwgY29uc3Qg Y2hhciAqdGhyZWFkX25hbWUpIHsKLQlhc3NlcnQodHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRz ZCkgPT0gMCk7Ci0KLQlwcm9mX3RkYXRhX3QgKnRkYXRhOwotCXVuc2lnbmVkIGk7Ci0JY2hhciAq czsKLQotCXRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNkLCB0cnVlKTsKLQlpZiAodGRhdGEgPT0g TlVMTCkgewotCQlyZXR1cm4gRUFHQUlOOwotCX0KLQotCS8qIFZhbGlkYXRlIGlucHV0LiAqLwot CWlmICh0aHJlYWRfbmFtZSA9PSBOVUxMKSB7Ci0JCXJldHVybiBFRkFVTFQ7Ci0JfQotCWZvciAo aSA9IDA7IHRocmVhZF9uYW1lW2ldICE9ICdcMCc7IGkrKykgewotCQljaGFyIGMgPSB0aHJlYWRf bmFtZVtpXTsKLQkJaWYgKCFpc2dyYXBoKGMpICYmICFpc2JsYW5rKGMpKSB7Ci0JCQlyZXR1cm4g RUZBVUxUOwotCQl9Ci0JfQotCi0JcyA9IHByb2ZfdGhyZWFkX25hbWVfYWxsb2ModHNkLCB0aHJl YWRfbmFtZSk7Ci0JaWYgKHMgPT0gTlVMTCkgewotCQlyZXR1cm4gRUFHQUlOOwotCX0KLQotCWlm ICh0ZGF0YS0+dGhyZWFkX25hbWUgIT0gTlVMTCkgewotCQlpZGFsbG9jdG0odHNkX3RzZG4odHNk KSwgdGRhdGEtPnRocmVhZF9uYW1lLCBOVUxMLCBOVUxMLCB0cnVlLAotCQkgICAgdHJ1ZSk7Ci0J CXRkYXRhLT50aHJlYWRfbmFtZSA9IE5VTEw7Ci0JfQotCWlmIChzdHJsZW4ocykgPiAwKSB7Ci0J CXRkYXRhLT50aHJlYWRfbmFtZSA9IHM7Ci0JfQotCXJldHVybiAwOwotfQotCi1KRU1BTExPQ19G T1JNQVRfUFJJTlRGKDMsIDQpCi1zdGF0aWMgdm9pZAotcHJvZl9kdW1wX3ByaW50Zih3cml0ZV9j Yl90ICpwcm9mX2R1bXBfd3JpdGUsIHZvaWQgKmNib3BhcXVlLAotICAgIGNvbnN0IGNoYXIgKmZv cm1hdCwgLi4uKSB7Ci0JdmFfbGlzdCBhcDsKLQljaGFyIGJ1ZltQUk9GX1BSSU5URl9CVUZTSVpF XTsKLQotCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOwotCW1hbGxvY192c25wcmludGYoYnVmLCBzaXpl b2YoYnVmKSwgZm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlwcm9mX2R1bXBfd3JpdGUoY2Jv cGFxdWUsIGJ1Zik7Ci19Ci0KLS8qCi0gKiBDYXN0aW5nIGEgZG91YmxlIHRvIGEgdWludDY0X3Qg bWF5IG5vdCBuZWNlc3NhcmlseSBiZSBpbiByYW5nZTsgdGhpcyBjYW4gYmUKLSAqIFVCLiAgSSBk b24ndCB0aGluayB0aGlzIGlzIHByYWN0aWNhbGx5IHBvc3NpYmxlIHdpdGggdGhlIGN1ciBjb3Vu dGVycywgYnV0Ci0gKiBwbGF1c2libHkgY291bGQgYmUgd2l0aCB0aGUgYWNjdW0gY291bnRlcnMu Ci0gKi8KLSNpZmRlZiBKRU1BTExPQ19QUk9GCi1zdGF0aWMgdWludDY0X3QKLXByb2ZfZG91Ymxl X3VpbnQ2NF9jYXN0KGRvdWJsZSBkKSB7Ci0JLyoKLQkgKiBOb3RlOiBVSU5UNjRfTUFYICsgMSBp cyBleGFjdGx5IHJlcHJlc2VudGFibGUgYXMgYSBkb3VibGUgb24gYWxsCi0JICogcmVhc29uYWJs ZSBwbGF0Zm9ybXMgKGNlcnRhaW5seSB0aG9zZSB3ZSdsbCBzdXBwb3J0KS4gIFdyaXRpbmcgdGhp cwotCSAqIGFzICEoYSA8IGIpIGluc3RlYWQgb2YgKGEgPj0gYikgbWVhbnMgdGhhdCB3ZSdyZSBO YU4tc2FmZS4KLQkgKi8KLQlkb3VibGUgcm91bmRlZCA9IHJvdW5kKGQpOwotCWlmICghKHJvdW5k ZWQgPCAoZG91YmxlKVVJTlQ2NF9NQVgpKSB7Ci0JCXJldHVybiBVSU5UNjRfTUFYOwotCX0KLQly ZXR1cm4gKHVpbnQ2NF90KXJvdW5kZWQ7Ci19Ci0jZW5kaWYKLQotdm9pZCBwcm9mX3VuYmlhc19t YXBfaW5pdCgpIHsKLQkvKiBTZWUgdGhlIGNvbW1lbnQgaW4gcHJvZl9zYW1wbGVfbmV3X2V2ZW50 X3dhaXQgKi8KLSNpZmRlZiBKRU1BTExPQ19QUk9GCi0JZm9yIChzemluZF90IGkgPSAwOyBpIDwg U0NfTlNJWkVTOyBpKyspIHsKLQkJZG91YmxlIHN6ID0gKGRvdWJsZSlzel9pbmRleDJzaXplKGkp OwotCQlkb3VibGUgcmF0ZSA9IChkb3VibGUpKFpVKDEpIDw8IGxnX3Byb2Zfc2FtcGxlKTsKLQkJ ZG91YmxlIGRpdl92YWwgPSAxLjAgLSBleHAoLXN6IC8gcmF0ZSk7Ci0JCWRvdWJsZSB1bmJpYXNl ZF9zeiA9IHN6IC8gZGl2X3ZhbDsKLQkJLyoKLQkJICogVGhlICJ0cnVlIiByaWdodCB2YWx1ZSBm b3IgdGhlIHVuYmlhc2VkIGNvdW50IGlzCi0JCSAqIDEuMC8oMSAtIGV4cCgtc3ovcmF0ZSkpLiAg VGhlIHByb2JsZW0gaXMsIHdlIGtlZXAgdGhlIGNvdW50cwotCQkgKiBhcyBpbnRlZ2VycyAoZm9y IGEgdmFyaWV0eSBvZiByZWFzb25zIC0tIHJvdW5kaW5nIGVycm9ycwotCQkgKiBjb3VsZCB0cmln Z2VyIGFzc2VydHMsIGFuZCBub3QgYWxsIGxpYmNzIGNhbiBwcm9wZXJseSBoYW5kbGUKLQkJICog ZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYyBkdXJpbmcgbWFsbG9jIGNhbGxzIGluc2lkZSBsaWJj KS4KLQkJICogUm91bmRpbmcgdG8gYW4gaW50ZWdlciwgdGhvdWdoLCBjYW4gbGVhZCB0byByb3Vu ZGluZyBlcnJvcnMKLQkJICogb2Ygb3ZlciAzMCUgZm9yIHNpemVzIGNsb3NlIHRvIHRoZSBzYW1w bGluZyByYXRlLiAgU28KLQkJICogaW5zdGVhZCwgd2UgbXVsdGlwbHkgYnkgYSBjb25zdGFudCwg ZGl2aWRpbmcgdGhlIG1heGltdW0KLQkJICogcG9zc2libGUgcm91bmRvZmYgZXJyb3IgYnkgdGhh dCBjb25zdGFudC4gIFRvIGF2b2lkIG92ZXJmbG93Ci0JCSAqIGluIHN1bW1pbmcgdXAgc2l6ZV90 IHZhbHVlcywgdGhlIGxhcmdlc3Qgc2FmZSBjb25zdGFudCB3ZSBjYW4KLQkJICogcGljayBpcyB0 aGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgYWxsb2NhdGlvbi4KLQkJICovCi0JCWRvdWJsZSBjbnRf c2hpZnQgPSAoZG91YmxlKShaVSgxKSA8PCBTQ19MR19USU5ZX01JTik7Ci0JCWRvdWJsZSBzaGlm dGVkX3VuYmlhc2VkX2NudCA9IGNudF9zaGlmdCAvIGRpdl92YWw7Ci0JCXByb2ZfdW5iaWFzZWRf c3pbaV0gPSAoc2l6ZV90KXJvdW5kKHVuYmlhc2VkX3N6KTsKLQkJcHJvZl9zaGlmdGVkX3VuYmlh c2VkX2NudFtpXSA9IChzaXplX3Qpcm91bmQoCi0JCSAgICBzaGlmdGVkX3VuYmlhc2VkX2NudCk7 Ci0JfQotI2Vsc2UKLQl1bnJlYWNoYWJsZSgpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBUaGUgdW5i aWFzaW5nIHN0b3J5IGlzIGxvbmcuICBUaGUgamVwcm9mIHVuYmlhc2luZyBsb2dpYyB3YXMgY29w aWVkIGZyb20KLSAqIHBwcm9mLiAgQm90aCBzaGFyZWQgYW4gaXNzdWU6IHRoZXkgdW5iaWFzZWQg dXNpbmcgdGhlIGF2ZXJhZ2Ugc2l6ZSBvZiB0aGUKLSAqIGFsbG9jYXRpb25zIGF0IGEgcGFydGlj dWxhciBzdGFjayB0cmFjZS4gIFRoaXMgY2FuIHdvcmsgb3V0IE9LIGlmIGFsbG9jYXRpb25zCi0g KiBhcmUgbW9zdGx5IG9mIHRoZSBzYW1lIHNpemUgZ2l2ZW4gc29tZSBzdGFjaywgYnV0IG5vdCBv dGhlcndpc2UuICBXZSBub3cKLSAqIGludGVybmFsbHkgdHJhY2sgd2hhdCB0aGUgdW5iaWFzZWQg cmVzdWx0cyBvdWdodCB0byBiZS4gIFdlIGNhbid0IGp1c3QgcmVwb3J0Ci0gKiB0aGVtIGFzIHRo ZXkgYXJlIHRob3VnaDsgdGhleSdsbCBzdGlsbCBnbyB0aHJvdWdoIHRoZSBqZXByb2YgdW5iaWFz aW5nCi0gKiBwcm9jZXNzLiAgSW5zdGVhZCwgd2UgZmlndXJlIG91dCB3aGF0IHZhbHVlcyB3ZSBj YW4gZmVlZCAqaW50byogamVwcm9mJ3MKLSAqIHVuYmlhc2luZyBtZWNoYW5pc20gdGhhdCB3aWxs IGxlYWQgdG8gZ2V0dGluZyB0aGUgcmlnaHQgdmFsdWVzIG91dC4KLSAqCi0gKiBJdCdsbCB1bmJp YXMgY291bnQgYW5kIGFnZ3JlZ2F0ZSBzaXplIGFzOgotICoKLSAqICAgY19vdXQgPSBjX2luICog MS8oMS1leHAoLXNfaW4vY19pbi9SKQotICogICBzX291dCA9IHNfaW4gKiAxLygxLWV4cCgtc19p bi9jX2luL1IpCi0gKgotICogV2Ugd2FudCB0byBzb2x2ZSBmb3IgdGhlIHZhbHVlcyBvZiBjX2lu IGFuZCBzX2luIHRoYXQgd2lsbAotICogZ2l2ZSB0aGUgY19vdXQgYW5kIHNfb3V0IHRoYXQgd2Un dmUgY29tcHV0ZWQgaW50ZXJuYWxseS4KLSAqCi0gKiBMZXQncyBkbyBhIGNoYW5nZSBvZiB2YXJp YWJsZXMgKGJvdGggdG8gbWFrZSB0aGUgbWF0aCBlYXNpZXIgYW5kIHRvIG1ha2UgaXQKLSAqIGVh c2llciB0byB3cml0ZSk6Ci0gKiAgIHggPSBzX2luIC8gY19pbgotICogICB5ID0gc19pbgotICog ICBrID0gMS9SLgotICoKLSAqIFRoZW4KLSAqICAgY19vdXQgPSB5L3ggKiAxLygxLWV4cCgtayp4 KSkKLSAqICAgc19vdXQgPSB5ICogMS8oMS1leHAoLWsqeCkpCi0gKgotICogVGhlIGZpcnN0IGVx dWF0aW9uIGdpdmVzOgotICogICB5ID0geCAqIGNfb3V0ICogKDEtZXhwKC1rKngpKQotICogVGhl IHNlY29uZCBnaXZlczoKLSAqICAgeSA9IHNfb3V0ICogKDEtZXhwKC1rKngpKQotICogU28gd2Ug aGF2ZQotICogICB4ID0gc19vdXQgLyBjX291dC4KLSAqIEFuZCBhbGwgdGhlIG90aGVyIHZhbHVl cyBmYWxsIG91dCBmcm9tIHRoYXQuCi0gKgotICogVGhpcyBpcyBhbGwgYSBmYWlyIGJpdCBvZiB3 b3JrLiAgVGhlIHRoaW5nIHdlIGdldCBvdXQgb2YgaXQgaXMgdGhhdCB3ZSBkb24ndAotICogYnJl YWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBqZXByb2YgKGFuZCB0aGUgdmFyaW91cyB0 b29scyB0aGF0IGhhdmUKLSAqIGNvcGllZCBpdHMgdW5iaWFzaW5nIGxvZ2ljKS4gIEV2ZW50dWFs bHksIHdlIGFudGljaXBhdGUgYSB2MyBoZWFwIHByb2ZpbGUKLSAqIGR1bXAgZm9ybWF0IGJhc2Vk IG9uIEpTT04sIGF0IHdoaWNoIHBvaW50IEkgdGhpbmsgbXVjaCBvZiB0aGlzIGxvZ2ljIGNhbiBn ZXQKLSAqIGNsZWFuZWQgdXAgKHNpbmNlIHdlJ2xsIGJlIHRha2luZyBhIGNvbXBhdGliaWxpdHkg YnJlYWsgdGhlcmUgYW55d2F5cykuCi0gKi8KLXN0YXRpYyB2b2lkCi1wcm9mX2RvX3VuYmlhcyh1 aW50NjRfdCBjX291dF9zaGlmdGVkX2ksIHVpbnQ2NF90IHNfb3V0X2ksIHVpbnQ2NF90ICpyX2Nf aW4sCi0gICAgdWludDY0X3QgKnJfc19pbikgewotI2lmZGVmIEpFTUFMTE9DX1BST0YKLQlpZiAo Y19vdXRfc2hpZnRlZF9pID09IDAgfHwgc19vdXRfaSA9PSAwKSB7Ci0JCSpyX2NfaW4gPSAwOwot CQkqcl9zX2luID0gMDsKLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIFNlZSB0aGUgbm90ZSBpbiBw cm9mX3VuYmlhc19tYXBfaW5pdCgpIHRvIHNlZSB3aHkgd2UgdGFrZSBjX291dCBpbiBhCi0JICog c2hpZnRlZCBmb3JtLgotCSAqLwotCWRvdWJsZSBjX291dCA9IChkb3VibGUpY19vdXRfc2hpZnRl ZF9pCi0JICAgIC8gKGRvdWJsZSkoWlUoMSkgPDwgU0NfTEdfVElOWV9NSU4pOwotCWRvdWJsZSBz X291dCA9IChkb3VibGUpc19vdXRfaTsKLQlkb3VibGUgUiA9IChkb3VibGUpKFpVKDEpIDw8IGxn X3Byb2Zfc2FtcGxlKTsKLQotCWRvdWJsZSB4ID0gc19vdXQgLyBjX291dDsKLQlkb3VibGUgeSA9 IHNfb3V0ICogKDEuMCAtIGV4cCgteCAvIFIpKTsKLQotCWRvdWJsZSBjX2luID0geSAvIHg7Ci0J ZG91YmxlIHNfaW4gPSB5OwotCi0JKnJfY19pbiA9IHByb2ZfZG91YmxlX3VpbnQ2NF9jYXN0KGNf aW4pOwotCSpyX3NfaW4gPSBwcm9mX2RvdWJsZV91aW50NjRfY2FzdChzX2luKTsKLSNlbHNlCi0J dW5yZWFjaGFibGUoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotcHJvZl9kdW1wX3ByaW50 X2NudHMod3JpdGVfY2JfdCAqcHJvZl9kdW1wX3dyaXRlLCB2b2lkICpjYm9wYXF1ZSwKLSAgICBj b25zdCBwcm9mX2NudF90ICpjbnRzKSB7Ci0JdWludDY0X3QgY3Vyb2JqczsKLQl1aW50NjRfdCBj dXJieXRlczsKLQl1aW50NjRfdCBhY2N1bW9ianM7Ci0JdWludDY0X3QgYWNjdW1ieXRlczsKLQlp ZiAob3B0X3Byb2ZfdW5iaWFzKSB7Ci0JCXByb2ZfZG9fdW5iaWFzKGNudHMtPmN1cm9ianNfc2hp ZnRlZF91bmJpYXNlZCwKLQkJICAgIGNudHMtPmN1cmJ5dGVzX3VuYmlhc2VkLCAmY3Vyb2Jqcywg JmN1cmJ5dGVzKTsKLQkJcHJvZl9kb191bmJpYXMoY250cy0+YWNjdW1vYmpzX3NoaWZ0ZWRfdW5i aWFzZWQsCi0JCSAgICBjbnRzLT5hY2N1bWJ5dGVzX3VuYmlhc2VkLCAmYWNjdW1vYmpzLCAmYWNj dW1ieXRlcyk7Ci0JfSBlbHNlIHsKLQkJY3Vyb2JqcyA9IGNudHMtPmN1cm9ianM7Ci0JCWN1cmJ5 dGVzID0gY250cy0+Y3VyYnl0ZXM7Ci0JCWFjY3Vtb2JqcyA9IGNudHMtPmFjY3Vtb2JqczsKLQkJ YWNjdW1ieXRlcyA9IGNudHMtPmFjY3VtYnl0ZXM7Ci0JfQotCXByb2ZfZHVtcF9wcmludGYocHJv Zl9kdW1wX3dyaXRlLCBjYm9wYXF1ZSwKLQkgICAgIiUiRk1UdTY0IjogJSJGTVR1NjQiIFslIkZN VHU2NCI6ICUiRk1UdTY0Il0iLAotCSAgICBjdXJvYmpzLCBjdXJieXRlcywgYWNjdW1vYmpzLCBh Y2N1bWJ5dGVzKTsKLX0KLQotc3RhdGljIHZvaWQKLXByb2ZfdGN0eF9tZXJnZV90ZGF0YSh0c2Ru X3QgKnRzZG4sIHByb2ZfdGN0eF90ICp0Y3R4LCBwcm9mX3RkYXRhX3QgKnRkYXRhKSB7Ci0JbWFs bG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCB0Y3R4LT50ZGF0YS0+bG9jayk7Ci0KLQltYWxs b2NfbXV0ZXhfbG9jayh0c2RuLCB0Y3R4LT5nY3R4LT5sb2NrKTsKLQotCXN3aXRjaCAodGN0eC0+ c3RhdGUpIHsKLQljYXNlIHByb2ZfdGN0eF9zdGF0ZV9pbml0aWFsaXppbmc6Ci0JCW1hbGxvY19t dXRleF91bmxvY2sodHNkbiwgdGN0eC0+Z2N0eC0+bG9jayk7Ci0JCXJldHVybjsKLQljYXNlIHBy b2ZfdGN0eF9zdGF0ZV9ub21pbmFsOgotCQl0Y3R4LT5zdGF0ZSA9IHByb2ZfdGN0eF9zdGF0ZV9k dW1waW5nOwotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sIHRjdHgtPmdjdHgtPmxvY2spOwot Ci0JCW1lbWNweSgmdGN0eC0+ZHVtcF9jbnRzLCAmdGN0eC0+Y250cywgc2l6ZW9mKHByb2ZfY250 X3QpKTsKLQotCQl0ZGF0YS0+Y250X3N1bW1lZC5jdXJvYmpzICs9IHRjdHgtPmR1bXBfY250cy5j dXJvYmpzOwotCQl0ZGF0YS0+Y250X3N1bW1lZC5jdXJvYmpzX3NoaWZ0ZWRfdW5iaWFzZWQKLQkJ ICAgICs9IHRjdHgtPmR1bXBfY250cy5jdXJvYmpzX3NoaWZ0ZWRfdW5iaWFzZWQ7Ci0JCXRkYXRh LT5jbnRfc3VtbWVkLmN1cmJ5dGVzICs9IHRjdHgtPmR1bXBfY250cy5jdXJieXRlczsKLQkJdGRh dGEtPmNudF9zdW1tZWQuY3VyYnl0ZXNfdW5iaWFzZWQKLQkJICAgICs9IHRjdHgtPmR1bXBfY250 cy5jdXJieXRlc191bmJpYXNlZDsKLQkJaWYgKG9wdF9wcm9mX2FjY3VtKSB7Ci0JCQl0ZGF0YS0+ Y250X3N1bW1lZC5hY2N1bW9ianMgKz0KLQkJCSAgICB0Y3R4LT5kdW1wX2NudHMuYWNjdW1vYmpz OwotCQkJdGRhdGEtPmNudF9zdW1tZWQuYWNjdW1vYmpzX3NoaWZ0ZWRfdW5iaWFzZWQgKz0KLQkJ CSAgICB0Y3R4LT5kdW1wX2NudHMuYWNjdW1vYmpzX3NoaWZ0ZWRfdW5iaWFzZWQ7Ci0JCQl0ZGF0 YS0+Y250X3N1bW1lZC5hY2N1bWJ5dGVzICs9Ci0JCQkgICAgdGN0eC0+ZHVtcF9jbnRzLmFjY3Vt Ynl0ZXM7Ci0JCQl0ZGF0YS0+Y250X3N1bW1lZC5hY2N1bWJ5dGVzX3VuYmlhc2VkICs9Ci0JCQkg ICAgdGN0eC0+ZHVtcF9jbnRzLmFjY3VtYnl0ZXNfdW5iaWFzZWQ7Ci0JCX0KLQkJYnJlYWs7Ci0J Y2FzZSBwcm9mX3RjdHhfc3RhdGVfZHVtcGluZzoKLQljYXNlIHByb2ZfdGN0eF9zdGF0ZV9wdXJn YXRvcnk6Ci0JCW5vdF9yZWFjaGVkKCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcHJvZl90Y3R4 X21lcmdlX2djdHgodHNkbl90ICp0c2RuLCBwcm9mX3RjdHhfdCAqdGN0eCwgcHJvZl9nY3R4X3Qg KmdjdHgpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sIGdjdHgtPmxvY2spOwot Ci0JZ2N0eC0+Y250X3N1bW1lZC5jdXJvYmpzICs9IHRjdHgtPmR1bXBfY250cy5jdXJvYmpzOwot CWdjdHgtPmNudF9zdW1tZWQuY3Vyb2Jqc19zaGlmdGVkX3VuYmlhc2VkCi0JICAgICs9IHRjdHgt PmR1bXBfY250cy5jdXJvYmpzX3NoaWZ0ZWRfdW5iaWFzZWQ7Ci0JZ2N0eC0+Y250X3N1bW1lZC5j dXJieXRlcyArPSB0Y3R4LT5kdW1wX2NudHMuY3VyYnl0ZXM7Ci0JZ2N0eC0+Y250X3N1bW1lZC5j dXJieXRlc191bmJpYXNlZCArPSB0Y3R4LT5kdW1wX2NudHMuY3VyYnl0ZXNfdW5iaWFzZWQ7Ci0J aWYgKG9wdF9wcm9mX2FjY3VtKSB7Ci0JCWdjdHgtPmNudF9zdW1tZWQuYWNjdW1vYmpzICs9IHRj dHgtPmR1bXBfY250cy5hY2N1bW9ianM7Ci0JCWdjdHgtPmNudF9zdW1tZWQuYWNjdW1vYmpzX3No aWZ0ZWRfdW5iaWFzZWQKLQkJICAgICs9IHRjdHgtPmR1bXBfY250cy5hY2N1bW9ianNfc2hpZnRl ZF91bmJpYXNlZDsKLQkJZ2N0eC0+Y250X3N1bW1lZC5hY2N1bWJ5dGVzICs9IHRjdHgtPmR1bXBf Y250cy5hY2N1bWJ5dGVzOwotCQlnY3R4LT5jbnRfc3VtbWVkLmFjY3VtYnl0ZXNfdW5iaWFzZWQK LQkJICAgICs9IHRjdHgtPmR1bXBfY250cy5hY2N1bWJ5dGVzX3VuYmlhc2VkOwotCX0KLX0KLQot c3RhdGljIHByb2ZfdGN0eF90ICoKLXByb2ZfdGN0eF9tZXJnZV9pdGVyKHByb2ZfdGN0eF90cmVl X3QgKnRjdHhzLCBwcm9mX3RjdHhfdCAqdGN0eCwgdm9pZCAqYXJnKSB7Ci0JdHNkbl90ICp0c2Ru ID0gKHRzZG5fdCAqKWFyZzsKLQotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgdGN0 eC0+Z2N0eC0+bG9jayk7Ci0KLQlzd2l0Y2ggKHRjdHgtPnN0YXRlKSB7Ci0JY2FzZSBwcm9mX3Rj dHhfc3RhdGVfbm9taW5hbDoKLQkJLyogTmV3IHNpbmNlIGR1bXBpbmcgc3RhcnRlZDsgaWdub3Jl LiAqLwotCQlicmVhazsKLQljYXNlIHByb2ZfdGN0eF9zdGF0ZV9kdW1waW5nOgotCWNhc2UgcHJv Zl90Y3R4X3N0YXRlX3B1cmdhdG9yeToKLQkJcHJvZl90Y3R4X21lcmdlX2djdHgodHNkbiwgdGN0 eCwgdGN0eC0+Z2N0eCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5vdF9yZWFjaGVkKCk7Ci0J fQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IHByb2ZfZHVtcF9pdGVyX2Fy Z19zIHByb2ZfZHVtcF9pdGVyX2FyZ190Owotc3RydWN0IHByb2ZfZHVtcF9pdGVyX2FyZ19zIHsK LQl0c2RuX3QgKnRzZG47Ci0Jd3JpdGVfY2JfdCAqcHJvZl9kdW1wX3dyaXRlOwotCXZvaWQgKmNi b3BhcXVlOwotfTsKLQotc3RhdGljIHByb2ZfdGN0eF90ICoKLXByb2ZfdGN0eF9kdW1wX2l0ZXIo cHJvZl90Y3R4X3RyZWVfdCAqdGN0eHMsIHByb2ZfdGN0eF90ICp0Y3R4LCB2b2lkICpvcGFxdWUp IHsKLQlwcm9mX2R1bXBfaXRlcl9hcmdfdCAqYXJnID0gKHByb2ZfZHVtcF9pdGVyX2FyZ190ICop b3BhcXVlOwotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIoYXJnLT50c2RuLCB0Y3R4LT5nY3R4 LT5sb2NrKTsKLQotCXN3aXRjaCAodGN0eC0+c3RhdGUpIHsKLQljYXNlIHByb2ZfdGN0eF9zdGF0 ZV9pbml0aWFsaXppbmc6Ci0JY2FzZSBwcm9mX3RjdHhfc3RhdGVfbm9taW5hbDoKLQkJLyogTm90 IGNhcHR1cmVkIGJ5IHRoaXMgZHVtcC4gKi8KLQkJYnJlYWs7Ci0JY2FzZSBwcm9mX3RjdHhfc3Rh dGVfZHVtcGluZzoKLQljYXNlIHByb2ZfdGN0eF9zdGF0ZV9wdXJnYXRvcnk6Ci0JCXByb2ZfZHVt cF9wcmludGYoYXJnLT5wcm9mX2R1bXBfd3JpdGUsIGFyZy0+Y2JvcGFxdWUsCi0JCSAgICAiICB0 JSJGTVR1NjQiOiAiLCB0Y3R4LT50aHJfdWlkKTsKLQkJcHJvZl9kdW1wX3ByaW50X2NudHMoYXJn LT5wcm9mX2R1bXBfd3JpdGUsIGFyZy0+Y2JvcGFxdWUsCi0JCSAgICAmdGN0eC0+ZHVtcF9jbnRz KTsKLQkJYXJnLT5wcm9mX2R1bXBfd3JpdGUoYXJnLT5jYm9wYXF1ZSwgIlxuIik7Ci0JCWJyZWFr OwotCWRlZmF1bHQ6Ci0JCW5vdF9yZWFjaGVkKCk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1z dGF0aWMgcHJvZl90Y3R4X3QgKgotcHJvZl90Y3R4X2ZpbmlzaF9pdGVyKHByb2ZfdGN0eF90cmVl X3QgKnRjdHhzLCBwcm9mX3RjdHhfdCAqdGN0eCwgdm9pZCAqYXJnKSB7Ci0JdHNkbl90ICp0c2Ru ID0gKHRzZG5fdCAqKWFyZzsKLQlwcm9mX3RjdHhfdCAqcmV0OwotCi0JbWFsbG9jX211dGV4X2Fz c2VydF9vd25lcih0c2RuLCB0Y3R4LT5nY3R4LT5sb2NrKTsKLQotCXN3aXRjaCAodGN0eC0+c3Rh dGUpIHsKLQljYXNlIHByb2ZfdGN0eF9zdGF0ZV9ub21pbmFsOgotCQkvKiBOZXcgc2luY2UgZHVt cGluZyBzdGFydGVkOyBpZ25vcmUuICovCi0JCWJyZWFrOwotCWNhc2UgcHJvZl90Y3R4X3N0YXRl X2R1bXBpbmc6Ci0JCXRjdHgtPnN0YXRlID0gcHJvZl90Y3R4X3N0YXRlX25vbWluYWw7Ci0JCWJy ZWFrOwotCWNhc2UgcHJvZl90Y3R4X3N0YXRlX3B1cmdhdG9yeToKLQkJcmV0ID0gdGN0eDsKLQkJ Z290byBsYWJlbF9yZXR1cm47Ci0JZGVmYXVsdDoKLQkJbm90X3JlYWNoZWQoKTsKLQl9Ci0KLQly ZXQgPSBOVUxMOwotbGFiZWxfcmV0dXJuOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1wcm9mX2R1bXBfZ2N0eF9wcmVwKHRzZG5fdCAqdHNkbiwgcHJvZl9nY3R4X3QgKmdjdHgsIHBy b2ZfZ2N0eF90cmVlX3QgKmdjdHhzKSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0KLQltYWxs b2NfbXV0ZXhfbG9jayh0c2RuLCBnY3R4LT5sb2NrKTsKLQotCS8qCi0JICogSW5jcmVtZW50IG5s aW1ibyBzbyB0aGF0IGdjdHggd29uJ3QgZ28gYXdheSBiZWZvcmUgZHVtcC4KLQkgKiBBZGRpdGlv bmFsbHksIGxpbmsgZ2N0eCBpbnRvIHRoZSBkdW1wIGxpc3Qgc28gdGhhdCBpdCBpcyBpbmNsdWRl ZCBpbgotCSAqIHByb2ZfZHVtcCgpJ3Mgc2Vjb25kIHBhc3MuCi0JICovCi0JZ2N0eC0+bmxpbWJv Kys7Ci0JZ2N0eF90cmVlX2luc2VydChnY3R4cywgZ2N0eCk7Ci0KLQltZW1zZXQoJmdjdHgtPmNu dF9zdW1tZWQsIDAsIHNpemVvZihwcm9mX2NudF90KSk7Ci0KLQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sIGdjdHgtPmxvY2spOwotfQotCi10eXBlZGVmIHN0cnVjdCBwcm9mX2djdHhfbWVyZ2Vf aXRlcl9hcmdfcyBwcm9mX2djdHhfbWVyZ2VfaXRlcl9hcmdfdDsKLXN0cnVjdCBwcm9mX2djdHhf bWVyZ2VfaXRlcl9hcmdfcyB7Ci0JdHNkbl90ICp0c2RuOwotCXNpemVfdCAqbGVha19uZ2N0eDsK LX07Ci0KLXN0YXRpYyBwcm9mX2djdHhfdCAqCi1wcm9mX2djdHhfbWVyZ2VfaXRlcihwcm9mX2dj dHhfdHJlZV90ICpnY3R4cywgcHJvZl9nY3R4X3QgKmdjdHgsIHZvaWQgKm9wYXF1ZSkgewotCXBy b2ZfZ2N0eF9tZXJnZV9pdGVyX2FyZ190ICphcmcgPSAocHJvZl9nY3R4X21lcmdlX2l0ZXJfYXJn X3QgKilvcGFxdWU7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayhhcmctPnRzZG4sIGdjdHgtPmxvY2sp OwotCXRjdHhfdHJlZV9pdGVyKCZnY3R4LT50Y3R4cywgTlVMTCwgcHJvZl90Y3R4X21lcmdlX2l0 ZXIsCi0JICAgICh2b2lkICopYXJnLT50c2RuKTsKLQlpZiAoZ2N0eC0+Y250X3N1bW1lZC5jdXJv YmpzICE9IDApIHsKLQkJKCphcmctPmxlYWtfbmdjdHgpKys7Ci0JfQotCW1hbGxvY19tdXRleF91 bmxvY2soYXJnLT50c2RuLCBnY3R4LT5sb2NrKTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0 aWMgdm9pZAotcHJvZl9nY3R4X2ZpbmlzaCh0c2RfdCAqdHNkLCBwcm9mX2djdHhfdHJlZV90ICpn Y3R4cykgewotCXByb2ZfdGRhdGFfdCAqdGRhdGEgPSBwcm9mX3RkYXRhX2dldCh0c2QsIGZhbHNl KTsKLQlwcm9mX2djdHhfdCAqZ2N0eDsKLQotCS8qCi0JICogU3RhbmRhcmQgdHJlZSBpdGVyYXRp b24gd29uJ3Qgd29yayBoZXJlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UKLQkgKiBkZWNyZW1lbnQg Z2N0eC0+bmxpbWJvIGFuZCB1bmxvY2sgZ2N0eCwgYW5vdGhlciB0aHJlYWQgY2FuCi0JICogY29u Y3VycmVudGx5IGRlc3Ryb3kgaXQsIHdoaWNoIHdpbGwgY29ycnVwdCB0aGUgdHJlZS4gIFRoZXJl Zm9yZSwKLQkgKiB0ZWFyIGRvd24gdGhlIHRyZWUgb25lIG5vZGUgYXQgYSB0aW1lIGR1cmluZyBp dGVyYXRpb24uCi0JICovCi0Jd2hpbGUgKChnY3R4ID0gZ2N0eF90cmVlX2ZpcnN0KGdjdHhzKSkg IT0gTlVMTCkgewotCQlnY3R4X3RyZWVfcmVtb3ZlKGdjdHhzLCBnY3R4KTsKLQkJbWFsbG9jX211 dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7Ci0JCXsKLQkJCXByb2ZfdGN0eF90 ICpuZXh0OwotCi0JCQluZXh0ID0gTlVMTDsKLQkJCWRvIHsKLQkJCQlwcm9mX3RjdHhfdCAqdG9f ZGVzdHJveSA9Ci0JCQkJICAgIHRjdHhfdHJlZV9pdGVyKCZnY3R4LT50Y3R4cywgbmV4dCwKLQkJ CQkgICAgcHJvZl90Y3R4X2ZpbmlzaF9pdGVyLAotCQkJCSAgICAodm9pZCAqKXRzZF90c2RuKHRz ZCkpOwotCQkJCWlmICh0b19kZXN0cm95ICE9IE5VTEwpIHsKLQkJCQkJbmV4dCA9IHRjdHhfdHJl ZV9uZXh0KCZnY3R4LT50Y3R4cywKLQkJCQkJICAgIHRvX2Rlc3Ryb3kpOwotCQkJCQl0Y3R4X3Ry ZWVfcmVtb3ZlKCZnY3R4LT50Y3R4cywKLQkJCQkJICAgIHRvX2Rlc3Ryb3kpOwotCQkJCQlpZGFs bG9jdG0odHNkX3RzZG4odHNkKSwgdG9fZGVzdHJveSwKLQkJCQkJICAgIE5VTEwsIE5VTEwsIHRy dWUsIHRydWUpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5leHQgPSBOVUxMOwotCQkJCX0KLQkJCX0g d2hpbGUgKG5leHQgIT0gTlVMTCk7Ci0JCX0KLQkJZ2N0eC0+bmxpbWJvLS07Ci0JCWlmIChwcm9m X2djdHhfc2hvdWxkX2Rlc3Ryb3koZ2N0eCkpIHsKLQkJCWdjdHgtPm5saW1ibysrOwotCQkJbWFs bG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCBnY3R4LT5sb2NrKTsKLQkJCXByb2ZfZ2N0 eF90cnlfZGVzdHJveSh0c2QsIHRkYXRhLCBnY3R4KTsKLQkJfSBlbHNlIHsKLQkJCW1hbGxvY19t dXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7Ci0JCX0KLQl9Ci19Ci0KLXR5 cGVkZWYgc3RydWN0IHByb2ZfdGRhdGFfbWVyZ2VfaXRlcl9hcmdfcyBwcm9mX3RkYXRhX21lcmdl X2l0ZXJfYXJnX3Q7Ci1zdHJ1Y3QgcHJvZl90ZGF0YV9tZXJnZV9pdGVyX2FyZ19zIHsKLQl0c2Ru X3QgKnRzZG47Ci0JcHJvZl9jbnRfdCAqY250X2FsbDsKLX07Ci0KLXN0YXRpYyBwcm9mX3RkYXRh X3QgKgotcHJvZl90ZGF0YV9tZXJnZV9pdGVyKHByb2ZfdGRhdGFfdHJlZV90ICp0ZGF0YXNfcHRy LCBwcm9mX3RkYXRhX3QgKnRkYXRhLAotICAgIHZvaWQgKm9wYXF1ZSkgewotCXByb2ZfdGRhdGFf bWVyZ2VfaXRlcl9hcmdfdCAqYXJnID0KLQkgICAgKHByb2ZfdGRhdGFfbWVyZ2VfaXRlcl9hcmdf dCAqKW9wYXF1ZTsKLQotCW1hbGxvY19tdXRleF9sb2NrKGFyZy0+dHNkbiwgdGRhdGEtPmxvY2sp OwotCWlmICghdGRhdGEtPmV4cGlyZWQpIHsKLQkJc2l6ZV90IHRhYmluZDsKLQkJdW5pb24gewot CQkJcHJvZl90Y3R4X3QJKnA7Ci0JCQl2b2lkCQkqdjsKLQkJfSB0Y3R4OwotCi0JCXRkYXRhLT5k dW1waW5nID0gdHJ1ZTsKLQkJbWVtc2V0KCZ0ZGF0YS0+Y250X3N1bW1lZCwgMCwgc2l6ZW9mKHBy b2ZfY250X3QpKTsKLQkJZm9yICh0YWJpbmQgPSAwOyAhY2toX2l0ZXIoJnRkYXRhLT5idDJ0Y3R4 LCAmdGFiaW5kLCBOVUxMLAotCQkgICAgJnRjdHgudik7KSB7Ci0JCQlwcm9mX3RjdHhfbWVyZ2Vf dGRhdGEoYXJnLT50c2RuLCB0Y3R4LnAsIHRkYXRhKTsKLQkJfQotCi0JCWFyZy0+Y250X2FsbC0+ Y3Vyb2JqcyArPSB0ZGF0YS0+Y250X3N1bW1lZC5jdXJvYmpzOwotCQlhcmctPmNudF9hbGwtPmN1 cm9ianNfc2hpZnRlZF91bmJpYXNlZAotCQkgICAgKz0gdGRhdGEtPmNudF9zdW1tZWQuY3Vyb2Jq c19zaGlmdGVkX3VuYmlhc2VkOwotCQlhcmctPmNudF9hbGwtPmN1cmJ5dGVzICs9IHRkYXRhLT5j bnRfc3VtbWVkLmN1cmJ5dGVzOwotCQlhcmctPmNudF9hbGwtPmN1cmJ5dGVzX3VuYmlhc2VkCi0J CSAgICArPSB0ZGF0YS0+Y250X3N1bW1lZC5jdXJieXRlc191bmJpYXNlZDsKLQkJaWYgKG9wdF9w cm9mX2FjY3VtKSB7Ci0JCQlhcmctPmNudF9hbGwtPmFjY3Vtb2JqcyArPSB0ZGF0YS0+Y250X3N1 bW1lZC5hY2N1bW9ianM7Ci0JCQlhcmctPmNudF9hbGwtPmFjY3Vtb2Jqc19zaGlmdGVkX3VuYmlh c2VkCi0JCQkgICAgKz0gdGRhdGEtPmNudF9zdW1tZWQuYWNjdW1vYmpzX3NoaWZ0ZWRfdW5iaWFz ZWQ7Ci0JCQlhcmctPmNudF9hbGwtPmFjY3VtYnl0ZXMgKz0KLQkJCSAgICB0ZGF0YS0+Y250X3N1 bW1lZC5hY2N1bWJ5dGVzOwotCQkJYXJnLT5jbnRfYWxsLT5hY2N1bWJ5dGVzX3VuYmlhc2VkICs9 Ci0JCQkgICAgdGRhdGEtPmNudF9zdW1tZWQuYWNjdW1ieXRlc191bmJpYXNlZDsKLQkJfQotCX0g ZWxzZSB7Ci0JCXRkYXRhLT5kdW1waW5nID0gZmFsc2U7Ci0JfQotCW1hbGxvY19tdXRleF91bmxv Y2soYXJnLT50c2RuLCB0ZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGlj IHByb2ZfdGRhdGFfdCAqCi1wcm9mX3RkYXRhX2R1bXBfaXRlcihwcm9mX3RkYXRhX3RyZWVfdCAq dGRhdGFzX3B0ciwgcHJvZl90ZGF0YV90ICp0ZGF0YSwKLSAgICB2b2lkICpvcGFxdWUpIHsKLQlp ZiAoIXRkYXRhLT5kdW1waW5nKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXByb2ZfZHVtcF9p dGVyX2FyZ190ICphcmcgPSAocHJvZl9kdW1wX2l0ZXJfYXJnX3QgKilvcGFxdWU7Ci0JcHJvZl9k dW1wX3ByaW50ZihhcmctPnByb2ZfZHVtcF93cml0ZSwgYXJnLT5jYm9wYXF1ZSwgIiAgdCUiRk1U dTY0IjogIiwKLQkgICAgdGRhdGEtPnRocl91aWQpOwotCXByb2ZfZHVtcF9wcmludF9jbnRzKGFy Zy0+cHJvZl9kdW1wX3dyaXRlLCBhcmctPmNib3BhcXVlLAotCSAgICAmdGRhdGEtPmNudF9zdW1t ZWQpOwotCWlmICh0ZGF0YS0+dGhyZWFkX25hbWUgIT0gTlVMTCkgewotCQlhcmctPnByb2ZfZHVt cF93cml0ZShhcmctPmNib3BhcXVlLCAiICIpOwotCQlhcmctPnByb2ZfZHVtcF93cml0ZShhcmct PmNib3BhcXVlLCB0ZGF0YS0+dGhyZWFkX25hbWUpOwotCX0KLQlhcmctPnByb2ZfZHVtcF93cml0 ZShhcmctPmNib3BhcXVlLCAiXG4iKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQK LXByb2ZfZHVtcF9oZWFkZXIocHJvZl9kdW1wX2l0ZXJfYXJnX3QgKmFyZywgY29uc3QgcHJvZl9j bnRfdCAqY250X2FsbCkgewotCXByb2ZfZHVtcF9wcmludGYoYXJnLT5wcm9mX2R1bXBfd3JpdGUs IGFyZy0+Y2JvcGFxdWUsCi0JICAgICJoZWFwX3YyLyUiRk1UdTY0IlxuICB0KjogIiwgKCh1aW50 NjRfdCkxVSA8PCBsZ19wcm9mX3NhbXBsZSkpOwotCXByb2ZfZHVtcF9wcmludF9jbnRzKGFyZy0+ cHJvZl9kdW1wX3dyaXRlLCBhcmctPmNib3BhcXVlLCBjbnRfYWxsKTsKLQlhcmctPnByb2ZfZHVt cF93cml0ZShhcmctPmNib3BhcXVlLCAiXG4iKTsKLQotCW1hbGxvY19tdXRleF9sb2NrKGFyZy0+ dHNkbiwgJnRkYXRhc19tdHgpOwotCXRkYXRhX3RyZWVfaXRlcigmdGRhdGFzLCBOVUxMLCBwcm9m X3RkYXRhX2R1bXBfaXRlciwgYXJnKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKGFyZy0+dHNkbiwg JnRkYXRhc19tdHgpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvZl9kdW1wX2djdHgocHJvZl9kdW1w X2l0ZXJfYXJnX3QgKmFyZywgcHJvZl9nY3R4X3QgKmdjdHgsCi0gICAgY29uc3QgcHJvZl9idF90 ICpidCwgcHJvZl9nY3R4X3RyZWVfdCAqZ2N0eHMpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsK LQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKGFyZy0+dHNkbiwgZ2N0eC0+bG9jayk7Ci0KLQkv KiBBdm9pZCBkdW1waW5nIHN1Y2ggZ2N0eCdzIHRoYXQgaGF2ZSBubyB1c2VmdWwgZGF0YS4gKi8K LQlpZiAoKCFvcHRfcHJvZl9hY2N1bSAmJiBnY3R4LT5jbnRfc3VtbWVkLmN1cm9ianMgPT0gMCkg fHwKLQkgICAgKG9wdF9wcm9mX2FjY3VtICYmIGdjdHgtPmNudF9zdW1tZWQuYWNjdW1vYmpzID09 IDApKSB7Ci0JCWFzc2VydChnY3R4LT5jbnRfc3VtbWVkLmN1cm9ianMgPT0gMCk7Ci0JCWFzc2Vy dChnY3R4LT5jbnRfc3VtbWVkLmN1cmJ5dGVzID09IDApOwotCQkvKgotCQkgKiBUaGVzZSBhc3Nl cnRzIHdvdWxkIG5vdCBiZSBjb3JyZWN0IC0tIHNlZSB0aGUgY29tbWVudCBvbiByYWNlcwotCQkg KiBpbiBwcm9mLmMKLQkJICogYXNzZXJ0KGdjdHgtPmNudF9zdW1tZWQuY3Vyb2Jqc191bmJpYXNl ZCA9PSAwKTsKLQkJICogYXNzZXJ0KGdjdHgtPmNudF9zdW1tZWQuY3VyYnl0ZXNfdW5iaWFzZWQg PT0gMCk7Ci0JCSovCi0JCWFzc2VydChnY3R4LT5jbnRfc3VtbWVkLmFjY3Vtb2JqcyA9PSAwKTsK LQkJYXNzZXJ0KGdjdHgtPmNudF9zdW1tZWQuYWNjdW1vYmpzX3NoaWZ0ZWRfdW5iaWFzZWQgPT0g MCk7Ci0JCWFzc2VydChnY3R4LT5jbnRfc3VtbWVkLmFjY3VtYnl0ZXMgPT0gMCk7Ci0JCWFzc2Vy dChnY3R4LT5jbnRfc3VtbWVkLmFjY3VtYnl0ZXNfdW5iaWFzZWQgPT0gMCk7Ci0JCXJldHVybjsK LQl9Ci0KLQlhcmctPnByb2ZfZHVtcF93cml0ZShhcmctPmNib3BhcXVlLCAiQCIpOwotCWZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBidC0+bGVuOyBpKyspIHsKLQkJcHJvZl9kdW1wX3ByaW50Zihh cmctPnByb2ZfZHVtcF93cml0ZSwgYXJnLT5jYm9wYXF1ZSwKLQkJICAgICIgJSMiRk1UeFBUUiwg KHVpbnRwdHJfdClidC0+dmVjW2ldKTsKLQl9Ci0KLQlhcmctPnByb2ZfZHVtcF93cml0ZShhcmct PmNib3BhcXVlLCAiXG4gIHQqOiAiKTsKLQlwcm9mX2R1bXBfcHJpbnRfY250cyhhcmctPnByb2Zf ZHVtcF93cml0ZSwgYXJnLT5jYm9wYXF1ZSwKLQkgICAgJmdjdHgtPmNudF9zdW1tZWQpOwotCWFy Zy0+cHJvZl9kdW1wX3dyaXRlKGFyZy0+Y2JvcGFxdWUsICJcbiIpOwotCi0JdGN0eF90cmVlX2l0 ZXIoJmdjdHgtPnRjdHhzLCBOVUxMLCBwcm9mX3RjdHhfZHVtcF9pdGVyLCBhcmcpOwotfQotCi0v KgotICogU2VlIHByb2Zfc2FtcGxlX25ld19ldmVudF93YWl0KCkgY29tbWVudCBmb3Igd2h5IHRo ZSBib2R5IG9mIHRoaXMgZnVuY3Rpb24KLSAqIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuCi0g Ki8KLXN0YXRpYyB2b2lkCi1wcm9mX2xlYWtjaGVjayhjb25zdCBwcm9mX2NudF90ICpjbnRfYWxs LCBzaXplX3QgbGVha19uZ2N0eCkgewotI2lmZGVmIEpFTUFMTE9DX1BST0YKLQkvKgotCSAqIFNj YWxpbmcgaXMgZXF1aXZhbGVudCBBZGp1c3RTYW1wbGVzKCkgaW4gamVwcm9mLCBidXQgdGhlIHJl c3VsdCBtYXkKLQkgKiBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB3aGF0IGplcHJvZiByZXBvcnRzLCBi ZWNhdXNlIGhlcmUgd2Ugc2NhbGUgdGhlCi0JICogc3VtbWFyeSB2YWx1ZXMsIHdoZXJlYXMgamVw cm9mIHNjYWxlcyBlYWNoIGNvbnRleHQgaW5kaXZpZHVhbGx5IGFuZAotCSAqIHJlcG9ydHMgdGhl IHN1bXMgb2YgdGhlIHNjYWxlZCB2YWx1ZXMuCi0JICovCi0JaWYgKGNudF9hbGwtPmN1cmJ5dGVz ICE9IDApIHsKLQkJZG91YmxlIHNhbXBsZV9wZXJpb2QgPSAoZG91YmxlKSgodWludDY0X3QpMSA8 PCBsZ19wcm9mX3NhbXBsZSk7Ci0JCWRvdWJsZSByYXRpbyA9ICgoKGRvdWJsZSljbnRfYWxsLT5j dXJieXRlcykgLwotCQkgICAgKGRvdWJsZSljbnRfYWxsLT5jdXJvYmpzKSAvIHNhbXBsZV9wZXJp b2Q7Ci0JCWRvdWJsZSBzY2FsZV9mYWN0b3IgPSAxLjAgLyAoMS4wIC0gZXhwKC1yYXRpbykpOwot CQl1aW50NjRfdCBjdXJieXRlcyA9ICh1aW50NjRfdClyb3VuZCgoKGRvdWJsZSljbnRfYWxsLT5j dXJieXRlcykKLQkJICAgICogc2NhbGVfZmFjdG9yKTsKLQkJdWludDY0X3QgY3Vyb2JqcyA9ICh1 aW50NjRfdClyb3VuZCgoKGRvdWJsZSljbnRfYWxsLT5jdXJvYmpzKSAqCi0JCSAgICBzY2FsZV9m YWN0b3IpOwotCi0JCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46IExlYWsgYXBwcm94aW1hdGlv biBzdW1tYXJ5OiB+JSJGTVR1NjQKLQkJICAgICIgYnl0ZSVzLCB+JSJGTVR1NjQiIG9iamVjdCVz LCA+PSAlenUgY29udGV4dCVzXG4iLAotCQkgICAgY3VyYnl0ZXMsIChjdXJieXRlcyAhPSAxKSA/ ICJzIiA6ICIiLCBjdXJvYmpzLCAoY3Vyb2JqcyAhPQotCQkgICAgMSkgPyAicyIgOiAiIiwgbGVh a19uZ2N0eCwgKGxlYWtfbmdjdHggIT0gMSkgPyAicyIgOiAiIik7Ci0JCW1hbGxvY19wcmludGYo Ci0JCSAgICAiPGplbWFsbG9jPjogUnVuIGplcHJvZiBvbiBkdW1wIG91dHB1dCBmb3IgbGVhayBk ZXRhaWxcbiIpOwotCQlpZiAob3B0X3Byb2ZfbGVha19lcnJvcikgewotCQkJbWFsbG9jX3ByaW50 ZigKLQkJCSAgICAiPGplbWFsbG9jPjogRXhpdGluZyB3aXRoIGVycm9yIGNvZGUgYmVjYXVzZSBt ZW1vcnkiCi0JCQkgICAgIiBsZWFrcyB3ZXJlIGRldGVjdGVkXG4iKTsKLQkJCS8qCi0JCQkgKiBV c2UgX2V4aXQoKSB3aXRoIHVuZGVyc2NvcmUgdG8gYXZvaWQgY2FsbGluZyBhdGV4aXQoKQotCQkJ ICogYW5kIGVudGVyaW5nIGVuZGxlc3MgY3ljbGUuCi0JCQkgKi8KLQkJCV9leGl0KDEpOwotCQl9 Ci0JfQotI2VuZGlmCi19Ci0KLXN0YXRpYyBwcm9mX2djdHhfdCAqCi1wcm9mX2djdHhfZHVtcF9p dGVyKHByb2ZfZ2N0eF90cmVlX3QgKmdjdHhzLCBwcm9mX2djdHhfdCAqZ2N0eCwgdm9pZCAqb3Bh cXVlKSB7Ci0JcHJvZl9kdW1wX2l0ZXJfYXJnX3QgKmFyZyA9IChwcm9mX2R1bXBfaXRlcl9hcmdf dCAqKW9wYXF1ZTsKLQltYWxsb2NfbXV0ZXhfbG9jayhhcmctPnRzZG4sIGdjdHgtPmxvY2spOwot CXByb2ZfZHVtcF9nY3R4KGFyZywgZ2N0eCwgJmdjdHgtPmJ0LCBnY3R4cyk7Ci0JbWFsbG9jX211 dGV4X3VubG9jayhhcmctPnRzZG4sIGdjdHgtPmxvY2spOwotCXJldHVybiBOVUxMOwotfQotCi1z dGF0aWMgdm9pZAotcHJvZl9kdW1wX3ByZXAodHNkX3QgKnRzZCwgcHJvZl90ZGF0YV90ICp0ZGF0 YSwgcHJvZl9jbnRfdCAqY250X2FsbCwKLSAgICBzaXplX3QgKmxlYWtfbmdjdHgsIHByb2ZfZ2N0 eF90cmVlX3QgKmdjdHhzKSB7Ci0Jc2l6ZV90IHRhYmluZDsKLQl1bmlvbiB7Ci0JCXByb2ZfZ2N0 eF90CSpwOwotCQl2b2lkCQkqdjsKLQl9IGdjdHg7Ci0KLQlwcm9mX2VudGVyKHRzZCwgdGRhdGEp OwotCi0JLyoKLQkgKiBQdXQgZ2N0eCdzIGluIGxpbWJvIGFuZCBjbGVhciB0aGVpciBjb3VudGVy cyBpbiBwcmVwYXJhdGlvbiBmb3IKLQkgKiBzdW1taW5nLgotCSAqLwotCWdjdHhfdHJlZV9uZXco Z2N0eHMpOwotCWZvciAodGFiaW5kID0gMDsgIWNraF9pdGVyKCZidDJnY3R4LCAmdGFiaW5kLCBO VUxMLCAmZ2N0eC52KTspIHsKLQkJcHJvZl9kdW1wX2djdHhfcHJlcCh0c2RfdHNkbih0c2QpLCBn Y3R4LnAsIGdjdHhzKTsKLQl9Ci0KLQkvKgotCSAqIEl0ZXJhdGUgb3ZlciB0ZGF0YXMsIGFuZCBm b3IgdGhlIG5vbi1leHBpcmVkIG9uZXMgc25hcHNob3QgdGhlaXIgdGN0eAotCSAqIHN0YXRzIGFu ZCBtZXJnZSB0aGVtIGludG8gdGhlIGFzc29jaWF0ZWQgZ2N0eCdzLgotCSAqLwotCW1lbXNldChj bnRfYWxsLCAwLCBzaXplb2YocHJvZl9jbnRfdCkpOwotCXByb2ZfdGRhdGFfbWVyZ2VfaXRlcl9h cmdfdCBwcm9mX3RkYXRhX21lcmdlX2l0ZXJfYXJnID0ge3RzZF90c2RuKHRzZCksCi0JICAgIGNu dF9hbGx9OwotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZ0ZGF0YXNfbXR4KTsK LQl0ZGF0YV90cmVlX2l0ZXIoJnRkYXRhcywgTlVMTCwgcHJvZl90ZGF0YV9tZXJnZV9pdGVyLAot CSAgICAmcHJvZl90ZGF0YV9tZXJnZV9pdGVyX2FyZyk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0 c2RfdHNkbih0c2QpLCAmdGRhdGFzX210eCk7Ci0KLQkvKiBNZXJnZSB0Y3R4IHN0YXRzIGludG8g Z2N0eCdzLiAqLwotCSpsZWFrX25nY3R4ID0gMDsKLQlwcm9mX2djdHhfbWVyZ2VfaXRlcl9hcmdf dCBwcm9mX2djdHhfbWVyZ2VfaXRlcl9hcmcgPSB7dHNkX3RzZG4odHNkKSwKLQkgICAgbGVha19u Z2N0eH07Ci0JZ2N0eF90cmVlX2l0ZXIoZ2N0eHMsIE5VTEwsIHByb2ZfZ2N0eF9tZXJnZV9pdGVy LAotCSAgICAmcHJvZl9nY3R4X21lcmdlX2l0ZXJfYXJnKTsKLQotCXByb2ZfbGVhdmUodHNkLCB0 ZGF0YSk7Ci19Ci0KLXZvaWQKLXByb2ZfZHVtcF9pbXBsKHRzZF90ICp0c2QsIHdyaXRlX2NiX3Qg KnByb2ZfZHVtcF93cml0ZSwgdm9pZCAqY2JvcGFxdWUsCi0gICAgcHJvZl90ZGF0YV90ICp0ZGF0 YSwgYm9vbCBsZWFrY2hlY2spIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2Ru KHRzZCksICZwcm9mX2R1bXBfbXR4KTsKLQlwcm9mX2NudF90IGNudF9hbGw7Ci0Jc2l6ZV90IGxl YWtfbmdjdHg7Ci0JcHJvZl9nY3R4X3RyZWVfdCBnY3R4czsKLQlwcm9mX2R1bXBfcHJlcCh0c2Qs IHRkYXRhLCAmY250X2FsbCwgJmxlYWtfbmdjdHgsICZnY3R4cyk7Ci0JcHJvZl9kdW1wX2l0ZXJf YXJnX3QgcHJvZl9kdW1wX2l0ZXJfYXJnID0ge3RzZF90c2RuKHRzZCksCi0JICAgIHByb2ZfZHVt cF93cml0ZSwgY2JvcGFxdWV9OwotCXByb2ZfZHVtcF9oZWFkZXIoJnByb2ZfZHVtcF9pdGVyX2Fy ZywgJmNudF9hbGwpOwotCWdjdHhfdHJlZV9pdGVyKCZnY3R4cywgTlVMTCwgcHJvZl9nY3R4X2R1 bXBfaXRlciwgJnByb2ZfZHVtcF9pdGVyX2FyZyk7Ci0JcHJvZl9nY3R4X2ZpbmlzaCh0c2QsICZn Y3R4cyk7Ci0JaWYgKGxlYWtjaGVjaykgewotCQlwcm9mX2xlYWtjaGVjaygmY250X2FsbCwgbGVh a19uZ2N0eCk7Ci0JfQotfQotCi0vKiBVc2VkIGluIHVuaXQgdGVzdHMuICovCi12b2lkCi1wcm9m X2NudF9hbGwocHJvZl9jbnRfdCAqY250X2FsbCkgewotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2go KTsKLQlwcm9mX3RkYXRhX3QgKnRkYXRhID0gcHJvZl90ZGF0YV9nZXQodHNkLCBmYWxzZSk7Ci0J aWYgKHRkYXRhID09IE5VTEwpIHsKLQkJbWVtc2V0KGNudF9hbGwsIDAsIHNpemVvZihwcm9mX2Nu dF90KSk7Ci0JfSBlbHNlIHsKLQkJc2l6ZV90IGxlYWtfbmdjdHg7Ci0JCXByb2ZfZ2N0eF90cmVl X3QgZ2N0eHM7Ci0JCXByb2ZfZHVtcF9wcmVwKHRzZCwgdGRhdGEsIGNudF9hbGwsICZsZWFrX25n Y3R4LCAmZ2N0eHMpOwotCQlwcm9mX2djdHhfZmluaXNoKHRzZCwgJmdjdHhzKTsKLQl9Ci19Ci0K LXZvaWQKLXByb2ZfYnRfaGFzaChjb25zdCB2b2lkICprZXksIHNpemVfdCByX2hhc2hbMl0pIHsK LQlwcm9mX2J0X3QgKmJ0ID0gKHByb2ZfYnRfdCAqKWtleTsKLQotCWNhc3NlcnQoY29uZmlnX3By b2YpOwotCi0JaGFzaChidC0+dmVjLCBidC0+bGVuICogc2l6ZW9mKHZvaWQgKiksIDB4OTQxMjJm MzNVLCByX2hhc2gpOwotfQotCi1ib29sCi1wcm9mX2J0X2tleWNvbXAoY29uc3Qgdm9pZCAqazEs IGNvbnN0IHZvaWQgKmsyKSB7Ci0JY29uc3QgcHJvZl9idF90ICpidDEgPSAocHJvZl9idF90ICop azE7Ci0JY29uc3QgcHJvZl9idF90ICpidDIgPSAocHJvZl9idF90ICopazI7Ci0KLQljYXNzZXJ0 KGNvbmZpZ19wcm9mKTsKLQotCWlmIChidDEtPmxlbiAhPSBidDItPmxlbikgewotCQlyZXR1cm4g ZmFsc2U7Ci0JfQotCXJldHVybiAobWVtY21wKGJ0MS0+dmVjLCBidDItPnZlYywgYnQxLT5sZW4g KiBzaXplb2Yodm9pZCAqKSkgPT0gMCk7Ci19Ci0KLXByb2ZfdGRhdGFfdCAqCi1wcm9mX3RkYXRh X2luaXRfaW1wbCh0c2RfdCAqdHNkLCB1aW50NjRfdCB0aHJfdWlkLCB1aW50NjRfdCB0aHJfZGlz Y3JpbSwKLSAgICBjaGFyICp0aHJlYWRfbmFtZSwgYm9vbCBhY3RpdmUpIHsKLQlhc3NlcnQodHNk X3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7Ci0KLQlwcm9mX3RkYXRhX3QgKnRkYXRh OwotCi0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0KLQkvKiBJbml0aWFsaXplIGFuIGVtcHR5IGNh Y2hlIGZvciB0aGlzIHRocmVhZC4gKi8KLQl0ZGF0YSA9IChwcm9mX3RkYXRhX3QgKilpYWxsb2N6 dG0odHNkX3RzZG4odHNkKSwgc2l6ZW9mKHByb2ZfdGRhdGFfdCksCi0JICAgIHN6X3NpemUyaW5k ZXgoc2l6ZW9mKHByb2ZfdGRhdGFfdCkpLCBmYWxzZSwgTlVMTCwgdHJ1ZSwKLQkgICAgYXJlbmFf Z2V0KFRTRE5fTlVMTCwgMCwgdHJ1ZSksIHRydWUpOwotCWlmICh0ZGF0YSA9PSBOVUxMKSB7Ci0J CXJldHVybiBOVUxMOwotCX0KLQotCXRkYXRhLT5sb2NrID0gcHJvZl90ZGF0YV9tdXRleF9jaG9v c2UodGhyX3VpZCk7Ci0JdGRhdGEtPnRocl91aWQgPSB0aHJfdWlkOwotCXRkYXRhLT50aHJfZGlz Y3JpbSA9IHRocl9kaXNjcmltOwotCXRkYXRhLT50aHJlYWRfbmFtZSA9IHRocmVhZF9uYW1lOwot CXRkYXRhLT5hdHRhY2hlZCA9IHRydWU7Ci0JdGRhdGEtPmV4cGlyZWQgPSBmYWxzZTsKLQl0ZGF0 YS0+dGN0eF91aWRfbmV4dCA9IDA7Ci0KLQlpZiAoY2toX25ldyh0c2QsICZ0ZGF0YS0+YnQydGN0 eCwgUFJPRl9DS0hfTUlOSVRFTVMsIHByb2ZfYnRfaGFzaCwKLQkgICAgcHJvZl9idF9rZXljb21w KSkgewotCQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgdGRhdGEsIE5VTEwsIE5VTEwsIHRydWUs IHRydWUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQl0ZGF0YS0+ZW5xID0gZmFsc2U7Ci0JdGRh dGEtPmVucV9pZHVtcCA9IGZhbHNlOwotCXRkYXRhLT5lbnFfZ2R1bXAgPSBmYWxzZTsKLQotCXRk YXRhLT5kdW1waW5nID0gZmFsc2U7Ci0JdGRhdGEtPmFjdGl2ZSA9IGFjdGl2ZTsKLQotCW1hbGxv Y19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZ0ZGF0YXNfbXR4KTsKLQl0ZGF0YV90cmVlX2lu c2VydCgmdGRhdGFzLCB0ZGF0YSk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2Qp LCAmdGRhdGFzX210eCk7Ci0KLQlyZXR1cm4gdGRhdGE7Ci19Ci0KLXN0YXRpYyBib29sCi1wcm9m X3RkYXRhX3Nob3VsZF9kZXN0cm95X3VubG9ja2VkKHByb2ZfdGRhdGFfdCAqdGRhdGEsIGJvb2wg ZXZlbl9pZl9hdHRhY2hlZCkgewotCWlmICh0ZGF0YS0+YXR0YWNoZWQgJiYgIWV2ZW5faWZfYXR0 YWNoZWQpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoY2toX2NvdW50KCZ0ZGF0YS0+YnQy dGN0eCkgIT0gMCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1z dGF0aWMgYm9vbAotcHJvZl90ZGF0YV9zaG91bGRfZGVzdHJveSh0c2RuX3QgKnRzZG4sIHByb2Zf dGRhdGFfdCAqdGRhdGEsCi0gICAgYm9vbCBldmVuX2lmX2F0dGFjaGVkKSB7Ci0JbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RuLCB0ZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gcHJvZl90ZGF0 YV9zaG91bGRfZGVzdHJveV91bmxvY2tlZCh0ZGF0YSwgZXZlbl9pZl9hdHRhY2hlZCk7Ci19Ci0K LXN0YXRpYyB2b2lkCi1wcm9mX3RkYXRhX2Rlc3Ryb3lfbG9ja2VkKHRzZF90ICp0c2QsIHByb2Zf dGRhdGFfdCAqdGRhdGEsCi0gICAgYm9vbCBldmVuX2lmX2F0dGFjaGVkKSB7Ci0JbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmdGRhdGFzX210eCk7Ci0JbWFsbG9jX211 dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNkX3RzZG4odHNkKSwgdGRhdGEtPmxvY2spOwotCi0JdGRh dGFfdHJlZV9yZW1vdmUoJnRkYXRhcywgdGRhdGEpOwotCi0JYXNzZXJ0KHByb2ZfdGRhdGFfc2hv dWxkX2Rlc3Ryb3lfdW5sb2NrZWQodGRhdGEsIGV2ZW5faWZfYXR0YWNoZWQpKTsKLQotCWlmICh0 ZGF0YS0+dGhyZWFkX25hbWUgIT0gTlVMTCkgewotCQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwg dGRhdGEtPnRocmVhZF9uYW1lLCBOVUxMLCBOVUxMLCB0cnVlLAotCQkgICAgdHJ1ZSk7Ci0JfQot CWNraF9kZWxldGUodHNkLCAmdGRhdGEtPmJ0MnRjdHgpOwotCWlkYWxsb2N0bSh0c2RfdHNkbih0 c2QpLCB0ZGF0YSwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1w cm9mX3RkYXRhX2Rlc3Ryb3kodHNkX3QgKnRzZCwgcHJvZl90ZGF0YV90ICp0ZGF0YSwgYm9vbCBl dmVuX2lmX2F0dGFjaGVkKSB7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnRk YXRhc19tdHgpOwotCXByb2ZfdGRhdGFfZGVzdHJveV9sb2NrZWQodHNkLCB0ZGF0YSwgZXZlbl9p Zl9hdHRhY2hlZCk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmdGRhdGFz X210eCk7Ci19Ci0KLXZvaWQKLXByb2ZfdGRhdGFfZGV0YWNoKHRzZF90ICp0c2QsIHByb2ZfdGRh dGFfdCAqdGRhdGEpIHsKLQlib29sIGRlc3Ryb3lfdGRhdGE7Ci0KLQltYWxsb2NfbXV0ZXhfbG9j ayh0c2RfdHNkbih0c2QpLCB0ZGF0YS0+bG9jayk7Ci0JaWYgKHRkYXRhLT5hdHRhY2hlZCkgewot CQlkZXN0cm95X3RkYXRhID0gcHJvZl90ZGF0YV9zaG91bGRfZGVzdHJveSh0c2RfdHNkbih0c2Qp LCB0ZGF0YSwKLQkJICAgIHRydWUpOwotCQkvKgotCQkgKiBPbmx5IGRldGFjaCBpZiAhZGVzdHJv eV90ZGF0YSwgYmVjYXVzZSBkZXRhY2hpbmcgd291bGQgYWxsb3cKLQkJICogYW5vdGhlciB0aHJl YWQgdG8gd2luIHRoZSByYWNlIHRvIGRlc3Ryb3kgdGRhdGEuCi0JCSAqLwotCQlpZiAoIWRlc3Ry b3lfdGRhdGEpIHsKLQkJCXRkYXRhLT5hdHRhY2hlZCA9IGZhbHNlOwotCQl9Ci0JCXRzZF9wcm9m X3RkYXRhX3NldCh0c2QsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCWRlc3Ryb3lfdGRhdGEgPSBmYWxz ZTsKLQl9Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCB0ZGF0YS0+bG9jayk7 Ci0JaWYgKGRlc3Ryb3lfdGRhdGEpIHsKLQkJcHJvZl90ZGF0YV9kZXN0cm95KHRzZCwgdGRhdGEs IHRydWUpOwotCX0KLX0KLQotc3RhdGljIGJvb2wKLXByb2ZfdGRhdGFfZXhwaXJlKHRzZG5fdCAq dHNkbiwgcHJvZl90ZGF0YV90ICp0ZGF0YSkgewotCWJvb2wgZGVzdHJveV90ZGF0YTsKLQotCW1h bGxvY19tdXRleF9sb2NrKHRzZG4sIHRkYXRhLT5sb2NrKTsKLQlpZiAoIXRkYXRhLT5leHBpcmVk KSB7Ci0JCXRkYXRhLT5leHBpcmVkID0gdHJ1ZTsKLQkJZGVzdHJveV90ZGF0YSA9IHByb2ZfdGRh dGFfc2hvdWxkX2Rlc3Ryb3kodHNkbiwgdGRhdGEsIGZhbHNlKTsKLQl9IGVsc2UgewotCQlkZXN0 cm95X3RkYXRhID0gZmFsc2U7Ci0JfQotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgdGRhdGEt PmxvY2spOwotCi0JcmV0dXJuIGRlc3Ryb3lfdGRhdGE7Ci19Ci0KLXN0YXRpYyBwcm9mX3RkYXRh X3QgKgotcHJvZl90ZGF0YV9yZXNldF9pdGVyKHByb2ZfdGRhdGFfdHJlZV90ICp0ZGF0YXNfcHRy LCBwcm9mX3RkYXRhX3QgKnRkYXRhLAotICAgIHZvaWQgKmFyZykgewotCXRzZG5fdCAqdHNkbiA9 ICh0c2RuX3QgKilhcmc7Ci0KLQlyZXR1cm4gKHByb2ZfdGRhdGFfZXhwaXJlKHRzZG4sIHRkYXRh KSA/IHRkYXRhIDogTlVMTCk7Ci19Ci0KLXZvaWQKLXByb2ZfcmVzZXQodHNkX3QgKnRzZCwgc2l6 ZV90IGxnX3NhbXBsZSkgewotCXByb2ZfdGRhdGFfdCAqbmV4dDsKLQotCWFzc2VydChsZ19zYW1w bGUgPCAoc2l6ZW9mKHVpbnQ2NF90KSA8PCAzKSk7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2Rf dHNkbih0c2QpLCAmcHJvZl9kdW1wX210eCk7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4o dHNkKSwgJnRkYXRhc19tdHgpOwotCi0JbGdfcHJvZl9zYW1wbGUgPSBsZ19zYW1wbGU7Ci0JcHJv Zl91bmJpYXNfbWFwX2luaXQoKTsKLQotCW5leHQgPSBOVUxMOwotCWRvIHsKLQkJcHJvZl90ZGF0 YV90ICp0b19kZXN0cm95ID0gdGRhdGFfdHJlZV9pdGVyKCZ0ZGF0YXMsIG5leHQsCi0JCSAgICBw cm9mX3RkYXRhX3Jlc2V0X2l0ZXIsICh2b2lkICopdHNkKTsKLQkJaWYgKHRvX2Rlc3Ryb3kgIT0g TlVMTCkgewotCQkJbmV4dCA9IHRkYXRhX3RyZWVfbmV4dCgmdGRhdGFzLCB0b19kZXN0cm95KTsK LQkJCXByb2ZfdGRhdGFfZGVzdHJveV9sb2NrZWQodHNkLCB0b19kZXN0cm95LCBmYWxzZSk7Ci0J CX0gZWxzZSB7Ci0JCQluZXh0ID0gTlVMTDsKLQkJfQotCX0gd2hpbGUgKG5leHQgIT0gTlVMTCk7 Ci0KLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZ0ZGF0YXNfbXR4KTsKLQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX2R1bXBfbXR4KTsKLX0KLQot c3RhdGljIGJvb2wKLXByb2ZfdGN0eF9zaG91bGRfZGVzdHJveSh0c2RfdCAqdHNkLCBwcm9mX3Rj dHhfdCAqdGN0eCkgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwg dGN0eC0+dGRhdGEtPmxvY2spOwotCi0JaWYgKG9wdF9wcm9mX2FjY3VtKSB7Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0JaWYgKHRjdHgtPmNudHMuY3Vyb2JqcyAhPSAwKSB7Ci0JCXJldHVybiBmYWxz ZTsKLQl9Ci0JaWYgKHRjdHgtPnByZXBhcmVkKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYg KHRjdHgtPnJlY2VudF9jb3VudCAhPSAwKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JcmV0dXJu IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX3RjdHhfZGVzdHJveSh0c2RfdCAqdHNkLCBw cm9mX3RjdHhfdCAqdGN0eCkgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4o dHNkKSwgdGN0eC0+dGRhdGEtPmxvY2spOwotCi0JYXNzZXJ0KHRjdHgtPmNudHMuY3Vyb2JqcyA9 PSAwKTsKLQlhc3NlcnQodGN0eC0+Y250cy5jdXJieXRlcyA9PSAwKTsKLQkvKgotCSAqIFRoZXNl IGFzc2VydHMgYXJlIG5vdCBjb3JyZWN0IC0tIHNlZSB0aGUgY29tbWVudCBhYm91dCByYWNlcyBp bgotCSAqIHByb2YuYwotCSAqCi0JICogYXNzZXJ0KHRjdHgtPmNudHMuY3Vyb2Jqc19zaGlmdGVk X3VuYmlhc2VkID09IDApOwotCSAqIGFzc2VydCh0Y3R4LT5jbnRzLmN1cmJ5dGVzX3VuYmlhc2Vk ID09IDApOwotCSAqLwotCWFzc2VydCghb3B0X3Byb2ZfYWNjdW0pOwotCWFzc2VydCh0Y3R4LT5j bnRzLmFjY3Vtb2JqcyA9PSAwKTsKLQlhc3NlcnQodGN0eC0+Y250cy5hY2N1bWJ5dGVzID09IDAp OwotCS8qCi0JICogVGhlc2Ugb25lcyBhcmUsIHNpbmNlIGFjY3VtYnl0ZSBjb3VudHMgbmV2ZXIg Z28gZG93bi4gIEVpdGhlcgotCSAqIHByb2ZfYWNjdW0gaXMgb2ZmIChpbiB3aGljaCBjYXNlIHRo ZXNlIHNob3VsZCBuZXZlciBoYXZlIGNoYW5nZWQgZnJvbQotCSAqIHRoZWlyIGluaXRpYWwgdmFs dWUgb2YgemVybyksIG9yIGl0J3Mgb24gKGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkbid0Ci0JICog YmUgZGVzdHJveWluZyB0aGlzIHRjdHgpLgotCSAqLwotCWFzc2VydCh0Y3R4LT5jbnRzLmFjY3Vt b2Jqc19zaGlmdGVkX3VuYmlhc2VkID09IDApOwotCWFzc2VydCh0Y3R4LT5jbnRzLmFjY3VtYnl0 ZXNfdW5iaWFzZWQgPT0gMCk7Ci0KLQlwcm9mX2djdHhfdCAqZ2N0eCA9IHRjdHgtPmdjdHg7Ci0K LQl7Ci0JCXByb2ZfdGRhdGFfdCAqdGRhdGEgPSB0Y3R4LT50ZGF0YTsKLQkJdGN0eC0+dGRhdGEg PSBOVUxMOwotCQlja2hfcmVtb3ZlKHRzZCwgJnRkYXRhLT5idDJ0Y3R4LCAmZ2N0eC0+YnQsIE5V TEwsIE5VTEwpOwotCQlib29sIGRlc3Ryb3lfdGRhdGEgPSBwcm9mX3RkYXRhX3Nob3VsZF9kZXN0 cm95KHRzZF90c2RuKHRzZCksCi0JCSAgICB0ZGF0YSwgZmFsc2UpOwotCQltYWxsb2NfbXV0ZXhf dW5sb2NrKHRzZF90c2RuKHRzZCksIHRkYXRhLT5sb2NrKTsKLQkJaWYgKGRlc3Ryb3lfdGRhdGEp IHsKLQkJCXByb2ZfdGRhdGFfZGVzdHJveSh0c2QsIHRkYXRhLCBmYWxzZSk7Ci0JCX0KLQl9Ci0K LQlib29sIGRlc3Ryb3lfdGN0eCwgZGVzdHJveV9nY3R4OwotCi0JbWFsbG9jX211dGV4X2xvY2so dHNkX3RzZG4odHNkKSwgZ2N0eC0+bG9jayk7Ci0Jc3dpdGNoICh0Y3R4LT5zdGF0ZSkgewotCWNh c2UgcHJvZl90Y3R4X3N0YXRlX25vbWluYWw6Ci0JCXRjdHhfdHJlZV9yZW1vdmUoJmdjdHgtPnRj dHhzLCB0Y3R4KTsKLQkJZGVzdHJveV90Y3R4ID0gdHJ1ZTsKLQkJaWYgKHByb2ZfZ2N0eF9zaG91 bGRfZGVzdHJveShnY3R4KSkgewotCQkJLyoKLQkJCSAqIEluY3JlbWVudCBnY3R4LT5ubGltYm8g aW4gb3JkZXIgdG8ga2VlcCBhbm90aGVyCi0JCQkgKiB0aHJlYWQgZnJvbSB3aW5uaW5nIHRoZSBy YWNlIHRvIGRlc3Ryb3kgZ2N0eCB3aGlsZQotCQkJICogdGhpcyBvbmUgaGFzIGdjdHgtPmxvY2sg ZHJvcHBlZC4gIFdpdGhvdXQgdGhpcywgaXQKLQkJCSAqIHdvdWxkIGJlIHBvc3NpYmxlIGZvciBh bm90aGVyIHRocmVhZCB0bzoKLQkJCSAqCi0JCQkgKiAxKSBTYW1wbGUgYW4gYWxsb2NhdGlvbiBh c3NvY2lhdGVkIHdpdGggZ2N0eC4KLQkJCSAqIDIpIERlYWxsb2NhdGUgdGhlIHNhbXBsZWQgb2Jq ZWN0LgotCQkJICogMykgU3VjY2Vzc2Z1bGx5IHByb2ZfZ2N0eF90cnlfZGVzdHJveShnY3R4KS4K LQkJCSAqCi0JCQkgKiBUaGUgcmVzdWx0IHdvdWxkIGJlIHRoYXQgZ2N0eCBubyBsb25nZXIgZXhp c3RzIGJ5IHRoZQotCQkJICogdGltZSB0aGlzIHRocmVhZCBhY2Nlc3NlcyBpdCBpbgotCQkJICog cHJvZl9nY3R4X3RyeV9kZXN0cm95KCkuCi0JCQkgKi8KLQkJCWdjdHgtPm5saW1ibysrOwotCQkJ ZGVzdHJveV9nY3R4ID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWRlc3Ryb3lfZ2N0eCA9IGZhbHNl OwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgcHJvZl90Y3R4X3N0YXRlX2R1bXBpbmc6Ci0JCS8qCi0J CSAqIEEgZHVtcGluZyB0aHJlYWQgbmVlZHMgdGN0eCB0byByZW1haW4gdmFsaWQgdW50aWwgZHVt cGluZwotCQkgKiBoYXMgZmluaXNoZWQuICBDaGFuZ2Ugc3RhdGUgc3VjaCB0aGF0IHRoZSBkdW1w aW5nIHRocmVhZCB3aWxsCi0JCSAqIGNvbXBsZXRlIGRlc3RydWN0aW9uIGR1cmluZyBhIGxhdGUg ZHVtcCBpdGVyYXRpb24gcGhhc2UuCi0JCSAqLwotCQl0Y3R4LT5zdGF0ZSA9IHByb2ZfdGN0eF9z dGF0ZV9wdXJnYXRvcnk7Ci0JCWRlc3Ryb3lfdGN0eCA9IGZhbHNlOwotCQlkZXN0cm95X2djdHgg PSBmYWxzZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbm90X3JlYWNoZWQoKTsKLQkJZGVzdHJv eV90Y3R4ID0gZmFsc2U7Ci0JCWRlc3Ryb3lfZ2N0eCA9IGZhbHNlOwotCX0KLQltYWxsb2NfbXV0 ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksIGdjdHgtPmxvY2spOwotCWlmIChkZXN0cm95X2djdHgp IHsKLQkJcHJvZl9nY3R4X3RyeV9kZXN0cm95KHRzZCwgcHJvZl90ZGF0YV9nZXQodHNkLCBmYWxz ZSksIGdjdHgpOwotCX0KLQlpZiAoZGVzdHJveV90Y3R4KSB7Ci0JCWlkYWxsb2N0bSh0c2RfdHNk bih0c2QpLCB0Y3R4LCBOVUxMLCBOVUxMLCB0cnVlLCB0cnVlKTsKLQl9Ci19Ci0KLXZvaWQKLXBy b2ZfdGN0eF90cnlfZGVzdHJveSh0c2RfdCAqdHNkLCBwcm9mX3RjdHhfdCAqdGN0eCkgewotCW1h bGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgdGN0eC0+dGRhdGEtPmxvY2sp OwotCWlmIChwcm9mX3RjdHhfc2hvdWxkX2Rlc3Ryb3kodHNkLCB0Y3R4KSkgewotCQkvKiB0Y3R4 LT50ZGF0YS0+bG9jayB3aWxsIGJlIHJlbGVhc2VkIGluIHByb2ZfdGN0eF9kZXN0cm95KCkuICov Ci0JCXByb2ZfdGN0eF9kZXN0cm95KHRzZCwgdGN0eCk7Ci0JfSBlbHNlIHsKLQkJbWFsbG9jX211 dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCB0Y3R4LT50ZGF0YS0+bG9jayk7Ci0JfQotfQotCi0v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9mX2xvZy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvc3JjL3Byb2ZfbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDA2MzJjM2IuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvc3JjL3Byb2ZfbG9nLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTcgKzAsMCBA QAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2J1Zl93cml0ZXIuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9ja2gu aCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lbWl0dGVyLmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvaGFzaC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21hbGxv Y19pby5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvcHJvZl9kYXRhLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvcHJvZl9sb2cuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N5cy5oIgot Ci1ib29sIG9wdF9wcm9mX2xvZyA9IGZhbHNlOwotdHlwZWRlZiBlbnVtIHByb2ZfbG9nZ2luZ19z dGF0ZV9lIHByb2ZfbG9nZ2luZ19zdGF0ZV90OwotZW51bSBwcm9mX2xvZ2dpbmdfc3RhdGVfZSB7 Ci0JcHJvZl9sb2dnaW5nX3N0YXRlX3N0b3BwZWQsCi0JcHJvZl9sb2dnaW5nX3N0YXRlX3N0YXJ0 ZWQsCi0JcHJvZl9sb2dnaW5nX3N0YXRlX2R1bXBpbmcKLX07Ci0KLS8qCi0gKiAtIHN0b3BwZWQ6 IGxvZ19zdGFydCBuZXZlciBjYWxsZWQsIG9yIHByZXZpb3VzIGxvZ19zdG9wIGhhcyBjb21wbGV0 ZWQuCi0gKiAtIHN0YXJ0ZWQ6IGxvZ19zdGFydCBjYWxsZWQsIGxvZ19zdG9wIG5vdCBjYWxsZWQg eWV0LiBBbGxvY2F0aW9ucyBhcmUgbG9nZ2VkLgotICogLSBkdW1waW5nOiBsb2dfc3RvcCBjYWxs ZWQgYnV0IG5vdCBmaW5pc2hlZDsgc2FtcGxlcyBhcmUgbm90IGxvZ2dlZCBhbnltb3JlLgotICov Ci1wcm9mX2xvZ2dpbmdfc3RhdGVfdCBwcm9mX2xvZ2dpbmdfc3RhdGUgPSBwcm9mX2xvZ2dpbmdf c3RhdGVfc3RvcHBlZDsKLQotLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLwotc3RhdGljIGJvb2wg cHJvZl9sb2dfZHVtbXkgPSBmYWxzZTsKLQotLyogSW5jcmVtZW50ZWQgZm9yIGV2ZXJ5IGxvZyBm aWxlIHRoYXQgaXMgb3V0cHV0LiAqLwotc3RhdGljIHVpbnQ2NF90IGxvZ19zZXEgPSAwOwotc3Rh dGljIGNoYXIgbG9nX2ZpbGVuYW1lWwotICAgIC8qIE1pbmltaXplIG1lbW9yeSBibG9hdCBmb3Ig bm9uLXByb2YgYnVpbGRzLiAqLwotI2lmZGVmIEpFTUFMTE9DX1BST0YKLSAgICBQQVRIX01BWCAr Ci0jZW5kaWYKLSAgICAxXTsKLQotLyogVGltZXN0YW1wIGZvciBtb3N0IHJlY2VudCBjYWxsIHRv IGxvZ19zdGFydCgpLiAqLwotc3RhdGljIG5zdGltZV90IGxvZ19zdGFydF90aW1lc3RhbXA7Ci0K LS8qIEluY3JlbWVudCB0aGVzZSB3aGVuIGFkZGluZyB0byB0aGUgbG9nX2J0IGFuZCBsb2dfdGhy IGxpbmtlZCBsaXN0cy4gKi8KLXN0YXRpYyBzaXplX3QgbG9nX2J0X2luZGV4ID0gMDsKLXN0YXRp YyBzaXplX3QgbG9nX3Rocl9pbmRleCA9IDA7Ci0KLS8qIExpbmtlZCBsaXN0IG5vZGUgZGVmaW5p dGlvbnMuIFRoZXNlIGFyZSBvbmx5IHVzZWQgaW4gdGhpcyBmaWxlLiAqLwotdHlwZWRlZiBzdHJ1 Y3QgcHJvZl9idF9ub2RlX3MgcHJvZl9idF9ub2RlX3Q7Ci0KLXN0cnVjdCBwcm9mX2J0X25vZGVf cyB7Ci0JcHJvZl9idF9ub2RlX3QgKm5leHQ7Ci0Jc2l6ZV90IGluZGV4OwotCXByb2ZfYnRfdCBi dDsKLQkvKiBWYXJpYWJsZSBzaXplIGJhY2t0cmFjZSB2ZWN0b3IgcG9pbnRlZCB0byBieSBidC4g Ki8KLQl2b2lkICp2ZWNbMV07Ci19OwotCi10eXBlZGVmIHN0cnVjdCBwcm9mX3Rocl9ub2RlX3Mg cHJvZl90aHJfbm9kZV90OwotCi1zdHJ1Y3QgcHJvZl90aHJfbm9kZV9zIHsKLQlwcm9mX3Rocl9u b2RlX3QgKm5leHQ7Ci0Jc2l6ZV90IGluZGV4OwotCXVpbnQ2NF90IHRocl91aWQ7Ci0JLyogVmFy aWFibGUgc2l6ZSBiYXNlZCBvbiB0aHJfbmFtZV9zei4gKi8KLQljaGFyIG5hbWVbMV07Ci19Owot Ci10eXBlZGVmIHN0cnVjdCBwcm9mX2FsbG9jX25vZGVfcyBwcm9mX2FsbG9jX25vZGVfdDsKLQot LyogVGhpcyBpcyBvdXRwdXQgd2hlbiBsb2dnaW5nIHNhbXBsZWQgYWxsb2NhdGlvbnMuICovCi1z dHJ1Y3QgcHJvZl9hbGxvY19ub2RlX3MgewotCXByb2ZfYWxsb2Nfbm9kZV90ICpuZXh0OwotCS8q IEluZGljZXMgaW50byBhbiBhcnJheSBvZiB0aHJlYWQgZGF0YS4gKi8KLQlzaXplX3QgYWxsb2Nf dGhyX2luZDsKLQlzaXplX3QgZnJlZV90aHJfaW5kOwotCi0JLyogSW5kaWNlcyBpbnRvIGFuIGFy cmF5IG9mIGJhY2t0cmFjZXMuICovCi0Jc2l6ZV90IGFsbG9jX2J0X2luZDsKLQlzaXplX3QgZnJl ZV9idF9pbmQ7Ci0KLQl1aW50NjRfdCBhbGxvY190aW1lX25zOwotCXVpbnQ2NF90IGZyZWVfdGlt ZV9uczsKLQotCXNpemVfdCB1c2l6ZTsKLX07Ci0KLS8qCi0gKiBDcmVhdGVkIG9uIHRoZSBmaXJz dCBjYWxsIHRvIHByb2ZfdHJ5X2xvZyBhbmQgZGVsZXRlZCBvbiBwcm9mX2xvZ19zdG9wLgotICog VGhlc2UgYXJlIHRoZSBiYWNrdHJhY2VzIGFuZCB0aHJlYWRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJl ZW4gbG9nZ2VkIGJ5IGFuCi0gKiBhbGxvY2F0aW9uLgotICovCi1zdGF0aWMgYm9vbCBsb2dfdGFi bGVzX2luaXRpYWxpemVkID0gZmFsc2U7Ci1zdGF0aWMgY2toX3QgbG9nX2J0X25vZGVfc2V0Owot c3RhdGljIGNraF90IGxvZ190aHJfbm9kZV9zZXQ7Ci0KLS8qIFN0b3JlIGxpbmtlZCBsaXN0cyBm b3IgbG9nZ2VkIGRhdGEuICovCi1zdGF0aWMgcHJvZl9idF9ub2RlX3QgKmxvZ19idF9maXJzdCA9 IE5VTEw7Ci1zdGF0aWMgcHJvZl9idF9ub2RlX3QgKmxvZ19idF9sYXN0ID0gTlVMTDsKLXN0YXRp YyBwcm9mX3Rocl9ub2RlX3QgKmxvZ190aHJfZmlyc3QgPSBOVUxMOwotc3RhdGljIHByb2ZfdGhy X25vZGVfdCAqbG9nX3Rocl9sYXN0ID0gTlVMTDsKLXN0YXRpYyBwcm9mX2FsbG9jX25vZGVfdCAq bG9nX2FsbG9jX2ZpcnN0ID0gTlVMTDsKLXN0YXRpYyBwcm9mX2FsbG9jX25vZGVfdCAqbG9nX2Fs bG9jX2xhc3QgPSBOVUxMOwotCi0vKiBQcm90ZWN0cyB0aGUgcHJvZl9sb2dnaW5nX3N0YXRlIGFu ZCBhbnkgbG9nX3suLi59IHZhcmlhYmxlLiAqLwotbWFsbG9jX211dGV4X3QgbG9nX210eDsKLQot LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBz dGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlZmVyZW5jZWQgcHJpb3IgdG8KLSAqIGRlZmluaXRp b24uCi0gKi8KLQotLyogSGFzaHRhYmxlIGZ1bmN0aW9ucyBmb3IgbG9nX2J0X25vZGVfc2V0IGFu ZCBsb2dfdGhyX25vZGVfc2V0LiAqLwotc3RhdGljIHZvaWQgcHJvZl90aHJfbm9kZV9oYXNoKGNv bnN0IHZvaWQgKmtleSwgc2l6ZV90IHJfaGFzaFsyXSk7Ci1zdGF0aWMgYm9vbCBwcm9mX3Rocl9u b2RlX2tleWNvbXAoY29uc3Qgdm9pZCAqazEsIGNvbnN0IHZvaWQgKmsyKTsKLXN0YXRpYyB2b2lk IHByb2ZfYnRfbm9kZV9oYXNoKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHJfaGFzaFsyXSk7Ci1z dGF0aWMgYm9vbCBwcm9mX2J0X25vZGVfa2V5Y29tcChjb25zdCB2b2lkICprMSwgY29uc3Qgdm9p ZCAqazIpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgc2l6ZV90Ci1wcm9m X2xvZ19idF9pbmRleCh0c2RfdCAqdHNkLCBwcm9mX2J0X3QgKmJ0KSB7Ci0JYXNzZXJ0KHByb2Zf bG9nZ2luZ19zdGF0ZSA9PSBwcm9mX2xvZ2dpbmdfc3RhdGVfc3RhcnRlZCk7Ci0JbWFsbG9jX211 dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmbG9nX210eCk7Ci0KLQlwcm9mX2J0X25v ZGVfdCBkdW1teV9ub2RlOwotCWR1bW15X25vZGUuYnQgPSAqYnQ7Ci0JcHJvZl9idF9ub2RlX3Qg Km5vZGU7Ci0KLQkvKiBTZWUgaWYgdGhpcyBiYWNrdHJhY2UgaXMgYWxyZWFkeSBjYWNoZWQgaW4g dGhlIHRhYmxlLiAqLwotCWlmIChja2hfc2VhcmNoKCZsb2dfYnRfbm9kZV9zZXQsICh2b2lkICop KCZkdW1teV9ub2RlKSwKLQkgICAgKHZvaWQgKiopKCZub2RlKSwgTlVMTCkpIHsKLQkJc2l6ZV90 IHN6ID0gb2Zmc2V0b2YocHJvZl9idF9ub2RlX3QsIHZlYykgKwotCQkJICAgICAgICAoYnQtPmxl biAqIHNpemVvZih2b2lkICopKTsKLQkJcHJvZl9idF9ub2RlX3QgKm5ld19ub2RlID0gKHByb2Zf YnRfbm9kZV90ICopCi0JCSAgICBpYWxsb2N6dG0odHNkX3RzZG4odHNkKSwgc3osIHN6X3NpemUy aW5kZXgoc3opLCBmYWxzZSwgTlVMTCwKLQkJICAgIHRydWUsIGFyZW5hX2dldChUU0ROX05VTEws IDAsIHRydWUpLCB0cnVlKTsKLQkJaWYgKGxvZ19idF9maXJzdCA9PSBOVUxMKSB7Ci0JCQlsb2df YnRfZmlyc3QgPSBuZXdfbm9kZTsKLQkJCWxvZ19idF9sYXN0ID0gbmV3X25vZGU7Ci0JCX0gZWxz ZSB7Ci0JCQlsb2dfYnRfbGFzdC0+bmV4dCA9IG5ld19ub2RlOwotCQkJbG9nX2J0X2xhc3QgPSBu ZXdfbm9kZTsKLQkJfQotCi0JCW5ld19ub2RlLT5uZXh0ID0gTlVMTDsKLQkJbmV3X25vZGUtPmlu ZGV4ID0gbG9nX2J0X2luZGV4OwotCQkvKgotCQkgKiBDb3B5IHRoZSBiYWNrdHJhY2U6IGJ0IGlz IGluc2lkZSBhIHRkYXRhIG9yIGdjdHgsIHdoaWNoCi0JCSAqIG1pZ2h0IGRpZSBiZWZvcmUgcHJv Zl9sb2dfc3RvcCBpcyBjYWxsZWQuCi0JCSAqLwotCQluZXdfbm9kZS0+YnQubGVuID0gYnQtPmxl bjsKLQkJbWVtY3B5KG5ld19ub2RlLT52ZWMsIGJ0LT52ZWMsIGJ0LT5sZW4gKiBzaXplb2Yodm9p ZCAqKSk7Ci0JCW5ld19ub2RlLT5idC52ZWMgPSBuZXdfbm9kZS0+dmVjOwotCi0JCWxvZ19idF9p bmRleCsrOwotCQlja2hfaW5zZXJ0KHRzZCwgJmxvZ19idF9ub2RlX3NldCwgKHZvaWQgKiluZXdf bm9kZSwgTlVMTCk7Ci0JCXJldHVybiBuZXdfbm9kZS0+aW5kZXg7Ci0JfSBlbHNlIHsKLQkJcmV0 dXJuIG5vZGUtPmluZGV4OwotCX0KLX0KLQotc3RhdGljIHNpemVfdAotcHJvZl9sb2dfdGhyX2lu ZGV4KHRzZF90ICp0c2QsIHVpbnQ2NF90IHRocl91aWQsIGNvbnN0IGNoYXIgKm5hbWUpIHsKLQlh c3NlcnQocHJvZl9sb2dnaW5nX3N0YXRlID09IHByb2ZfbG9nZ2luZ19zdGF0ZV9zdGFydGVkKTsK LQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZsb2dfbXR4KTsKLQot CXByb2ZfdGhyX25vZGVfdCBkdW1teV9ub2RlOwotCWR1bW15X25vZGUudGhyX3VpZCA9IHRocl91 aWQ7Ci0JcHJvZl90aHJfbm9kZV90ICpub2RlOwotCi0JLyogU2VlIGlmIHRoaXMgdGhyZWFkIGlz IGFscmVhZHkgY2FjaGVkIGluIHRoZSB0YWJsZS4gKi8KLQlpZiAoY2toX3NlYXJjaCgmbG9nX3Ro cl9ub2RlX3NldCwgKHZvaWQgKikoJmR1bW15X25vZGUpLAotCSAgICAodm9pZCAqKikoJm5vZGUp LCBOVUxMKSkgewotCQlzaXplX3Qgc3ogPSBvZmZzZXRvZihwcm9mX3Rocl9ub2RlX3QsIG5hbWUp ICsgc3RybGVuKG5hbWUpICsgMTsKLQkJcHJvZl90aHJfbm9kZV90ICpuZXdfbm9kZSA9IChwcm9m X3Rocl9ub2RlX3QgKikKLQkJICAgIGlhbGxvY3p0bSh0c2RfdHNkbih0c2QpLCBzeiwgc3pfc2l6 ZTJpbmRleChzeiksIGZhbHNlLCBOVUxMLAotCQkgICAgdHJ1ZSwgYXJlbmFfZ2V0KFRTRE5fTlVM TCwgMCwgdHJ1ZSksIHRydWUpOwotCQlpZiAobG9nX3Rocl9maXJzdCA9PSBOVUxMKSB7Ci0JCQls b2dfdGhyX2ZpcnN0ID0gbmV3X25vZGU7Ci0JCQlsb2dfdGhyX2xhc3QgPSBuZXdfbm9kZTsKLQkJ fSBlbHNlIHsKLQkJCWxvZ190aHJfbGFzdC0+bmV4dCA9IG5ld19ub2RlOwotCQkJbG9nX3Rocl9s YXN0ID0gbmV3X25vZGU7Ci0JCX0KLQotCQluZXdfbm9kZS0+bmV4dCA9IE5VTEw7Ci0JCW5ld19u b2RlLT5pbmRleCA9IGxvZ190aHJfaW5kZXg7Ci0JCW5ld19ub2RlLT50aHJfdWlkID0gdGhyX3Vp ZDsKLQkJc3RyY3B5KG5ld19ub2RlLT5uYW1lLCBuYW1lKTsKLQotCQlsb2dfdGhyX2luZGV4Kys7 Ci0JCWNraF9pbnNlcnQodHNkLCAmbG9nX3Rocl9ub2RlX3NldCwgKHZvaWQgKiluZXdfbm9kZSwg TlVMTCk7Ci0JCXJldHVybiBuZXdfbm9kZS0+aW5kZXg7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIG5v ZGUtPmluZGV4OwotCX0KLX0KLQotSkVNQUxMT0NfQ09MRAotdm9pZAotcHJvZl90cnlfbG9nKHRz ZF90ICp0c2QsIHNpemVfdCB1c2l6ZSwgcHJvZl9pbmZvX3QgKnByb2ZfaW5mbykgewotCWNhc3Nl cnQoY29uZmlnX3Byb2YpOwotCXByb2ZfdGN0eF90ICp0Y3R4ID0gcHJvZl9pbmZvLT5hbGxvY190 Y3R4OwotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgdGN0eC0+dGRh dGEtPmxvY2spOwotCi0JcHJvZl90ZGF0YV90ICpjb25zX3RkYXRhID0gcHJvZl90ZGF0YV9nZXQo dHNkLCBmYWxzZSk7Ci0JaWYgKGNvbnNfdGRhdGEgPT0gTlVMTCkgewotCQkvKgotCQkgKiBXZSBk ZWNpZGUgbm90IHRvIGxvZyB0aGVzZSBhbGxvY2F0aW9ucy4gY29uc190ZGF0YSB3aWxsIGJlCi0J CSAqIE5VTEwgb25seSB3aGVuIHRoZSBjdXJyZW50IHRocmVhZCBpcyBpbiBhIHdlaXJkIHN0YXRl IChlLmcuCi0JCSAqIGl0J3MgYmVpbmcgZGVzdHJveWVkKS4KLQkJICovCi0JCXJldHVybjsKLQl9 Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmbG9nX210eCk7Ci0KLQlpZiAo cHJvZl9sb2dnaW5nX3N0YXRlICE9IHByb2ZfbG9nZ2luZ19zdGF0ZV9zdGFydGVkKSB7Ci0JCWdv dG8gbGFiZWxfZG9uZTsKLQl9Ci0KLQlpZiAoIWxvZ190YWJsZXNfaW5pdGlhbGl6ZWQpIHsKLQkJ Ym9vbCBlcnIxID0gY2toX25ldyh0c2QsICZsb2dfYnRfbm9kZV9zZXQsIFBST0ZfQ0tIX01JTklU RU1TLAotCQkJCXByb2ZfYnRfbm9kZV9oYXNoLCBwcm9mX2J0X25vZGVfa2V5Y29tcCk7Ci0JCWJv b2wgZXJyMiA9IGNraF9uZXcodHNkLCAmbG9nX3Rocl9ub2RlX3NldCwgUFJPRl9DS0hfTUlOSVRF TVMsCi0JCQkJcHJvZl90aHJfbm9kZV9oYXNoLCBwcm9mX3Rocl9ub2RlX2tleWNvbXApOwotCQlp ZiAoZXJyMSB8fCBlcnIyKSB7Ci0JCQlnb3RvIGxhYmVsX2RvbmU7Ci0JCX0KLQkJbG9nX3RhYmxl c19pbml0aWFsaXplZCA9IHRydWU7Ci0JfQotCi0JbnN0aW1lX3QgYWxsb2NfdGltZSA9IHByb2Zf aW5mby0+YWxsb2NfdGltZTsKLQluc3RpbWVfdCBmcmVlX3RpbWU7Ci0JbnN0aW1lX3Byb2ZfaW5p dF91cGRhdGUoJmZyZWVfdGltZSk7Ci0KLQlzaXplX3Qgc3ogPSBzaXplb2YocHJvZl9hbGxvY19u b2RlX3QpOwotCXByb2ZfYWxsb2Nfbm9kZV90ICpuZXdfbm9kZSA9IChwcm9mX2FsbG9jX25vZGVf dCAqKQotCSAgICBpYWxsb2N6dG0odHNkX3RzZG4odHNkKSwgc3osIHN6X3NpemUyaW5kZXgoc3op LCBmYWxzZSwgTlVMTCwgdHJ1ZSwKLQkgICAgYXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwgdHJ1ZSks IHRydWUpOwotCi0JY29uc3QgY2hhciAqcHJvZF90aHJfbmFtZSA9ICh0Y3R4LT50ZGF0YS0+dGhy ZWFkX25hbWUgPT0gTlVMTCk/Ci0JCQkJICAgICAgICAiIiA6IHRjdHgtPnRkYXRhLT50aHJlYWRf bmFtZTsKLQljb25zdCBjaGFyICpjb25zX3Rocl9uYW1lID0gcHJvZl90aHJlYWRfbmFtZV9nZXQo dHNkKTsKLQotCXByb2ZfYnRfdCBidDsKLQkvKiBJbml0aWFsaXplIHRoZSBiYWNrdHJhY2UsIHVz aW5nIHRoZSBidWZmZXIgaW4gdGRhdGEgdG8gc3RvcmUgaXQuICovCi0JYnRfaW5pdCgmYnQsIGNv bnNfdGRhdGEtPnZlYyk7Ci0JcHJvZl9iYWNrdHJhY2UodHNkLCAmYnQpOwotCXByb2ZfYnRfdCAq Y29uc19idCA9ICZidDsKLQotCS8qIFdlIGhhdmVuJ3QgZGVzdHJveWVkIHRjdHggeWV0LCBzbyBn Y3R4IHNob3VsZCBiZSBnb29kIHRvIHJlYWQuICovCi0JcHJvZl9idF90ICpwcm9kX2J0ID0gJnRj dHgtPmdjdHgtPmJ0OwotCi0JbmV3X25vZGUtPm5leHQgPSBOVUxMOwotCW5ld19ub2RlLT5hbGxv Y190aHJfaW5kID0gcHJvZl9sb2dfdGhyX2luZGV4KHRzZCwgdGN0eC0+dGRhdGEtPnRocl91aWQs Ci0JCQkJICAgICAgcHJvZF90aHJfbmFtZSk7Ci0JbmV3X25vZGUtPmZyZWVfdGhyX2luZCA9IHBy b2ZfbG9nX3Rocl9pbmRleCh0c2QsIGNvbnNfdGRhdGEtPnRocl91aWQsCi0JCQkJICAgICBjb25z X3Rocl9uYW1lKTsKLQluZXdfbm9kZS0+YWxsb2NfYnRfaW5kID0gcHJvZl9sb2dfYnRfaW5kZXgo dHNkLCBwcm9kX2J0KTsKLQluZXdfbm9kZS0+ZnJlZV9idF9pbmQgPSBwcm9mX2xvZ19idF9pbmRl eCh0c2QsIGNvbnNfYnQpOwotCW5ld19ub2RlLT5hbGxvY190aW1lX25zID0gbnN0aW1lX25zKCZh bGxvY190aW1lKTsKLQluZXdfbm9kZS0+ZnJlZV90aW1lX25zID0gbnN0aW1lX25zKCZmcmVlX3Rp bWUpOwotCW5ld19ub2RlLT51c2l6ZSA9IHVzaXplOwotCi0JaWYgKGxvZ19hbGxvY19maXJzdCA9 PSBOVUxMKSB7Ci0JCWxvZ19hbGxvY19maXJzdCA9IG5ld19ub2RlOwotCQlsb2dfYWxsb2NfbGFz dCA9IG5ld19ub2RlOwotCX0gZWxzZSB7Ci0JCWxvZ19hbGxvY19sYXN0LT5uZXh0ID0gbmV3X25v ZGU7Ci0JCWxvZ19hbGxvY19sYXN0ID0gbmV3X25vZGU7Ci0JfQotCi1sYWJlbF9kb25lOgotCW1h bGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJmxvZ19tdHgpOwotfQotCi1zdGF0aWMg dm9pZAotcHJvZl9idF9ub2RlX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgcl9oYXNoWzJd KSB7Ci0JY29uc3QgcHJvZl9idF9ub2RlX3QgKmJ0X25vZGUgPSAocHJvZl9idF9ub2RlX3QgKilr ZXk7Ci0JcHJvZl9idF9oYXNoKCh2b2lkICopKCZidF9ub2RlLT5idCksIHJfaGFzaCk7Ci19Ci0K LXN0YXRpYyBib29sCi1wcm9mX2J0X25vZGVfa2V5Y29tcChjb25zdCB2b2lkICprMSwgY29uc3Qg dm9pZCAqazIpIHsKLQljb25zdCBwcm9mX2J0X25vZGVfdCAqYnRfbm9kZTEgPSAocHJvZl9idF9u b2RlX3QgKilrMTsKLQljb25zdCBwcm9mX2J0X25vZGVfdCAqYnRfbm9kZTIgPSAocHJvZl9idF9u b2RlX3QgKilrMjsKLQlyZXR1cm4gcHJvZl9idF9rZXljb21wKCh2b2lkICopKCZidF9ub2RlMS0+ YnQpLAotCSAgICAodm9pZCAqKSgmYnRfbm9kZTItPmJ0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1w cm9mX3Rocl9ub2RlX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgcl9oYXNoWzJdKSB7Ci0J Y29uc3QgcHJvZl90aHJfbm9kZV90ICp0aHJfbm9kZSA9IChwcm9mX3Rocl9ub2RlX3QgKilrZXk7 Ci0JaGFzaCgmdGhyX25vZGUtPnRocl91aWQsIHNpemVvZih1aW50NjRfdCksIDB4OTQxMjJmMzVV LCByX2hhc2gpOwotfQotCi1zdGF0aWMgYm9vbAotcHJvZl90aHJfbm9kZV9rZXljb21wKGNvbnN0 IHZvaWQgKmsxLCBjb25zdCB2b2lkICprMikgewotCWNvbnN0IHByb2ZfdGhyX25vZGVfdCAqdGhy X25vZGUxID0gKHByb2ZfdGhyX25vZGVfdCAqKWsxOwotCWNvbnN0IHByb2ZfdGhyX25vZGVfdCAq dGhyX25vZGUyID0gKHByb2ZfdGhyX25vZGVfdCAqKWsyOwotCXJldHVybiB0aHJfbm9kZTEtPnRo cl91aWQgPT0gdGhyX25vZGUyLT50aHJfdWlkOwotfQotCi0vKiBVc2VkIGluIHVuaXQgdGVzdHMu ICovCi1zaXplX3QKLXByb2ZfbG9nX2J0X2NvdW50KHZvaWQpIHsKLQljYXNzZXJ0KGNvbmZpZ19w cm9mKTsKLQlzaXplX3QgY250ID0gMDsKLQlwcm9mX2J0X25vZGVfdCAqbm9kZSA9IGxvZ19idF9m aXJzdDsKLQl3aGlsZSAobm9kZSAhPSBOVUxMKSB7Ci0JCWNudCsrOwotCQlub2RlID0gbm9kZS0+ bmV4dDsKLQl9Ci0JcmV0dXJuIGNudDsKLX0KLQotLyogVXNlZCBpbiB1bml0IHRlc3RzLiAqLwot c2l6ZV90Ci1wcm9mX2xvZ19hbGxvY19jb3VudCh2b2lkKSB7Ci0JY2Fzc2VydChjb25maWdfcHJv Zik7Ci0Jc2l6ZV90IGNudCA9IDA7Ci0JcHJvZl9hbGxvY19ub2RlX3QgKm5vZGUgPSBsb2dfYWxs b2NfZmlyc3Q7Ci0Jd2hpbGUgKG5vZGUgIT0gTlVMTCkgewotCQljbnQrKzsKLQkJbm9kZSA9IG5v ZGUtPm5leHQ7Ci0JfQotCXJldHVybiBjbnQ7Ci19Ci0KLS8qIFVzZWQgaW4gdW5pdCB0ZXN0cy4g Ki8KLXNpemVfdAotcHJvZl9sb2dfdGhyX2NvdW50KHZvaWQpIHsKLQljYXNzZXJ0KGNvbmZpZ19w cm9mKTsKLQlzaXplX3QgY250ID0gMDsKLQlwcm9mX3Rocl9ub2RlX3QgKm5vZGUgPSBsb2dfdGhy X2ZpcnN0OwotCXdoaWxlIChub2RlICE9IE5VTEwpIHsKLQkJY250Kys7Ci0JCW5vZGUgPSBub2Rl LT5uZXh0OwotCX0KLQlyZXR1cm4gY250OwotfQotCi0vKiBVc2VkIGluIHVuaXQgdGVzdHMuICov Ci1ib29sCi1wcm9mX2xvZ19pc19sb2dnaW5nKHZvaWQpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9m KTsKLQlyZXR1cm4gcHJvZl9sb2dnaW5nX3N0YXRlID09IHByb2ZfbG9nZ2luZ19zdGF0ZV9zdGFy dGVkOwotfQotCi0vKiBVc2VkIGluIHVuaXQgdGVzdHMuICovCi1ib29sCi1wcm9mX2xvZ19yZXBf Y2hlY2sodm9pZCkgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwotCWlmIChwcm9mX2xvZ2dpbmdf c3RhdGUgPT0gcHJvZl9sb2dnaW5nX3N0YXRlX3N0b3BwZWQKLQkgICAgJiYgbG9nX3RhYmxlc19p bml0aWFsaXplZCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAobG9nX2J0X2xhc3QgIT0g TlVMTCAmJiBsb2dfYnRfbGFzdC0+bmV4dCAhPSBOVUxMKSB7Ci0JCXJldHVybiB0cnVlOwotCX0K LQlpZiAobG9nX3Rocl9sYXN0ICE9IE5VTEwgJiYgbG9nX3Rocl9sYXN0LT5uZXh0ICE9IE5VTEwp IHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWlmIChsb2dfYWxsb2NfbGFzdCAhPSBOVUxMICYmIGxv Z19hbGxvY19sYXN0LT5uZXh0ICE9IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0Jc2l6 ZV90IGJ0X2NvdW50ID0gcHJvZl9sb2dfYnRfY291bnQoKTsKLQlzaXplX3QgdGhyX2NvdW50ID0g cHJvZl9sb2dfdGhyX2NvdW50KCk7Ci0Jc2l6ZV90IGFsbG9jX2NvdW50ID0gcHJvZl9sb2dfYWxs b2NfY291bnQoKTsKLQotCi0JaWYgKHByb2ZfbG9nZ2luZ19zdGF0ZSA9PSBwcm9mX2xvZ2dpbmdf c3RhdGVfc3RvcHBlZCkgewotCQlpZiAoYnRfY291bnQgIT0gMCB8fCB0aHJfY291bnQgIT0gMCB8 fCBhbGxvY19jb3VudCB8fCAwKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCXByb2Zf YWxsb2Nfbm9kZV90ICpub2RlID0gbG9nX2FsbG9jX2ZpcnN0OwotCXdoaWxlIChub2RlICE9IE5V TEwpIHsKLQkJaWYgKG5vZGUtPmFsbG9jX2J0X2luZCA+PSBidF9jb3VudCkgewotCQkJcmV0dXJu IHRydWU7Ci0JCX0KLQkJaWYgKG5vZGUtPmZyZWVfYnRfaW5kID49IGJ0X2NvdW50KSB7Ci0JCQly ZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAobm9kZS0+YWxsb2NfdGhyX2luZCA+PSB0aHJfY291bnQp IHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCWlmIChub2RlLT5mcmVlX3Rocl9pbmQgPj0gdGhy X2NvdW50KSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlpZiAobm9kZS0+YWxsb2NfdGltZV9u cyA+IG5vZGUtPmZyZWVfdGltZV9ucykgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJbm9kZSA9 IG5vZGUtPm5leHQ7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi0vKiBVc2VkIGluIHVuaXQg dGVzdHMuICovCi12b2lkCi1wcm9mX2xvZ19kdW1teV9zZXQoYm9vbCBuZXdfdmFsdWUpIHsKLQlj YXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlwcm9mX2xvZ19kdW1teSA9IG5ld192YWx1ZTsKLX0KLQot LyogVXNlZCBhcyBhbiBhdGV4aXQgZnVuY3Rpb24gdG8gc3RvcCBsb2dnaW5nIG9uIGV4aXQuICov Ci1zdGF0aWMgdm9pZAotcHJvZl9sb2dfc3RvcF9maW5hbCh2b2lkKSB7Ci0JdHNkX3QgKnRzZCA9 IHRzZF9mZXRjaCgpOwotCXByb2ZfbG9nX3N0b3AodHNkX3RzZG4odHNkKSk7Ci19Ci0KLUpFTUFM TE9DX0NPTEQKLWJvb2wKLXByb2ZfbG9nX3N0YXJ0KHRzZG5fdCAqdHNkbiwgY29uc3QgY2hhciAq ZmlsZW5hbWUpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQotCWlmICghb3B0X3Byb2YpIHsK LQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JYm9vbCByZXQgPSBmYWxzZTsKLQotCW1hbGxvY19tdXRl eF9sb2NrKHRzZG4sICZsb2dfbXR4KTsKLQotCXN0YXRpYyBib29sIHByb2ZfbG9nX2F0ZXhpdF9j YWxsZWQgPSBmYWxzZTsKLQlpZiAoIXByb2ZfbG9nX2F0ZXhpdF9jYWxsZWQpIHsKLQkJcHJvZl9s b2dfYXRleGl0X2NhbGxlZCA9IHRydWU7Ci0JCWlmIChhdGV4aXQocHJvZl9sb2dfc3RvcF9maW5h bCkgIT0gMCkgewotCQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBFcnJvciBpbiBhdGV4aXQo KSAiCi0JCQkgICAgImZvciBsb2dnaW5nXG4iKTsKLQkJCWlmIChvcHRfYWJvcnQpIHsKLQkJCQlh Ym9ydCgpOwotCQkJfQotCQkJcmV0ID0gdHJ1ZTsKLQkJCWdvdG8gbGFiZWxfZG9uZTsKLQkJfQot CX0KLQotCWlmIChwcm9mX2xvZ2dpbmdfc3RhdGUgIT0gcHJvZl9sb2dnaW5nX3N0YXRlX3N0b3Bw ZWQpIHsKLQkJcmV0ID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKLQkJ LyogTWFrZSBkZWZhdWx0IG5hbWUuICovCi0JCXByb2ZfZ2V0X2RlZmF1bHRfZmlsZW5hbWUodHNk biwgbG9nX2ZpbGVuYW1lLCBsb2dfc2VxKTsKLQkJbG9nX3NlcSsrOwotCQlwcm9mX2xvZ2dpbmdf c3RhdGUgPSBwcm9mX2xvZ2dpbmdfc3RhdGVfc3RhcnRlZDsKLQl9IGVsc2UgaWYgKHN0cmxlbihm aWxlbmFtZSkgPj0gUFJPRl9EVU1QX0ZJTEVOQU1FX0xFTikgewotCQlyZXQgPSB0cnVlOwotCX0g ZWxzZSB7Ci0JCXN0cmNweShsb2dfZmlsZW5hbWUsIGZpbGVuYW1lKTsKLQkJcHJvZl9sb2dnaW5n X3N0YXRlID0gcHJvZl9sb2dnaW5nX3N0YXRlX3N0YXJ0ZWQ7Ci0JfQotCi0JaWYgKCFyZXQpIHsK LQkJbnN0aW1lX3Byb2ZfaW5pdF91cGRhdGUoJmxvZ19zdGFydF90aW1lc3RhbXApOwotCX0KLWxh YmVsX2RvbmU6Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmbG9nX210eCk7Ci0KLQlyZXR1 cm4gcmV0OwotfQotCi1zdHJ1Y3QgcHJvZl9lbWl0dGVyX2NiX2FyZ19zIHsKLQlpbnQgZmQ7Ci0J c3NpemVfdCByZXQ7Ci19OwotCi1zdGF0aWMgdm9pZAotcHJvZl9lbWl0dGVyX3dyaXRlX2NiKHZv aWQgKm9wYXF1ZSwgY29uc3QgY2hhciAqdG9fd3JpdGUpIHsKLQlzdHJ1Y3QgcHJvZl9lbWl0dGVy X2NiX2FyZ19zICphcmcgPQotCSAgICAoc3RydWN0IHByb2ZfZW1pdHRlcl9jYl9hcmdfcyAqKW9w YXF1ZTsKLQlzaXplX3QgYnl0ZXMgPSBzdHJsZW4odG9fd3JpdGUpOwotCWlmIChwcm9mX2xvZ19k dW1teSkgewotCQlyZXR1cm47Ci0JfQotCWFyZy0+cmV0ID0gbWFsbG9jX3dyaXRlX2ZkKGFyZy0+ ZmQsIHRvX3dyaXRlLCBieXRlcyk7Ci19Ci0KLS8qCi0gKiBwcm9mX2xvZ19lbWl0X3suLi59IGdv ZXMgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgbGlua2VkIGxpc3QsIGVtaXR0aW5nIGVhY2gKLSAq IG5vZGUgdG8gdGhlIGpzb24gYW5kIGRlYWxsb2NhdGluZyBpdC4KLSAqLwotc3RhdGljIHZvaWQK LXByb2ZfbG9nX2VtaXRfdGhyZWFkcyh0c2RfdCAqdHNkLCBlbWl0dGVyX3QgKmVtaXR0ZXIpIHsK LQllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgInRocmVhZHMiKTsKLQlwcm9m X3Rocl9ub2RlX3QgKnRocl9ub2RlID0gbG9nX3Rocl9maXJzdDsKLQlwcm9mX3Rocl9ub2RlX3Qg KnRocl9vbGRfbm9kZTsKLQl3aGlsZSAodGhyX25vZGUgIT0gTlVMTCkgewotCQllbWl0dGVyX2pz b25fb2JqZWN0X2JlZ2luKGVtaXR0ZXIpOwotCi0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi dGhyX3VpZCIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCi0JCSAgICAmdGhyX25vZGUtPnRocl91aWQp OwotCi0JCWNoYXIgKnRocl9uYW1lID0gdGhyX25vZGUtPm5hbWU7Ci0KLQkJZW1pdHRlcl9qc29u X2t2KGVtaXR0ZXIsICJ0aHJfbmFtZSIsIGVtaXR0ZXJfdHlwZV9zdHJpbmcsCi0JCSAgICAmdGhy X25hbWUpOwotCi0JCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOwotCQl0aHJfb2xk X25vZGUgPSB0aHJfbm9kZTsKLQkJdGhyX25vZGUgPSB0aHJfbm9kZS0+bmV4dDsKLQkJaWRhbGxv Y3RtKHRzZF90c2RuKHRzZCksIHRocl9vbGRfbm9kZSwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7 Ci0JfQotCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1wcm9mX2xvZ19lbWl0X3RyYWNlcyh0c2RfdCAqdHNkLCBlbWl0dGVyX3QgKmVtaXR0ZXIpIHsK LQllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgInN0YWNrX3RyYWNlcyIpOwot CXByb2ZfYnRfbm9kZV90ICpidF9ub2RlID0gbG9nX2J0X2ZpcnN0OwotCXByb2ZfYnRfbm9kZV90 ICpidF9vbGRfbm9kZTsKLQkvKgotCSAqIENhbGN1bGF0ZSBob3cgbWFueSBoZXggZGlnaXRzIHdl IG5lZWQ6IHR3aWNlIG51bWJlciBvZiBieXRlcywgdHdvIGZvcgotCSAqICIweCIsIGFuZCB0aGVu IG9uZSBtb3JlIGZvciB0ZXJtaW5hdGluZyAnXDAnLgotCSAqLwotCWNoYXIgYnVmWzIgKiBzaXpl b2YoaW50cHRyX3QpICsgM107Ci0Jc2l6ZV90IGJ1Zl9zeiA9IHNpemVvZihidWYpOwotCXdoaWxl IChidF9ub2RlICE9IE5VTEwpIHsKLQkJZW1pdHRlcl9qc29uX2FycmF5X2JlZ2luKGVtaXR0ZXIp OwotCQlzaXplX3QgaTsKLQkJZm9yIChpID0gMDsgaSA8IGJ0X25vZGUtPmJ0LmxlbjsgaSsrKSB7 Ci0JCQltYWxsb2Nfc25wcmludGYoYnVmLCBidWZfc3osICIlcCIsIGJ0X25vZGUtPmJ0LnZlY1tp XSk7Ci0JCQljaGFyICp0cmFjZV9zdHIgPSBidWY7Ci0JCQllbWl0dGVyX2pzb25fdmFsdWUoZW1p dHRlciwgZW1pdHRlcl90eXBlX3N0cmluZywKLQkJCSAgICAmdHJhY2Vfc3RyKTsKLQkJfQotCQll bWl0dGVyX2pzb25fYXJyYXlfZW5kKGVtaXR0ZXIpOwotCi0JCWJ0X29sZF9ub2RlID0gYnRfbm9k ZTsKLQkJYnRfbm9kZSA9IGJ0X25vZGUtPm5leHQ7Ci0JCWlkYWxsb2N0bSh0c2RfdHNkbih0c2Qp LCBidF9vbGRfbm9kZSwgTlVMTCwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCWVtaXR0ZXJfanNv bl9hcnJheV9lbmQoZW1pdHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX2xvZ19lbWl0X2Fs bG9jcyh0c2RfdCAqdHNkLCBlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKLQllbWl0dGVyX2pzb25fYXJy YXlfa3ZfYmVnaW4oZW1pdHRlciwgImFsbG9jYXRpb25zIik7Ci0JcHJvZl9hbGxvY19ub2RlX3Qg KmFsbG9jX25vZGUgPSBsb2dfYWxsb2NfZmlyc3Q7Ci0JcHJvZl9hbGxvY19ub2RlX3QgKmFsbG9j X29sZF9ub2RlOwotCXdoaWxlIChhbGxvY19ub2RlICE9IE5VTEwpIHsKLQkJZW1pdHRlcl9qc29u X29iamVjdF9iZWdpbihlbWl0dGVyKTsKLQotCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImFs bG9jX3RocmVhZCIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCQkgICAgJmFsbG9jX25vZGUtPmFsbG9j X3Rocl9pbmQpOwotCi0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiZnJlZV90aHJlYWQiLCBl bWl0dGVyX3R5cGVfc2l6ZSwKLQkJICAgICZhbGxvY19ub2RlLT5mcmVlX3Rocl9pbmQpOwotCi0J CWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiYWxsb2NfdHJhY2UiLCBlbWl0dGVyX3R5cGVfc2l6 ZSwKLQkJICAgICZhbGxvY19ub2RlLT5hbGxvY19idF9pbmQpOwotCi0JCWVtaXR0ZXJfanNvbl9r dihlbWl0dGVyLCAiZnJlZV90cmFjZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCQkgICAgJmFsbG9j X25vZGUtPmZyZWVfYnRfaW5kKTsKLQotCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImFsbG9j X3RpbWVzdGFtcCIsCi0JCSAgICBlbWl0dGVyX3R5cGVfdWludDY0LCAmYWxsb2Nfbm9kZS0+YWxs b2NfdGltZV9ucyk7Ci0KLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJmcmVlX3RpbWVzdGFt cCIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCi0JCSAgICAmYWxsb2Nfbm9kZS0+ZnJlZV90aW1lX25z KTsKLQotCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInVzaXplIiwgZW1pdHRlcl90eXBlX3Vp bnQ2NCwKLQkJICAgICZhbGxvY19ub2RlLT51c2l6ZSk7Ci0KLQkJZW1pdHRlcl9qc29uX29iamVj dF9lbmQoZW1pdHRlcik7Ci0KLQkJYWxsb2Nfb2xkX25vZGUgPSBhbGxvY19ub2RlOwotCQlhbGxv Y19ub2RlID0gYWxsb2Nfbm9kZS0+bmV4dDsKLQkJaWRhbGxvY3RtKHRzZF90c2RuKHRzZCksIGFs bG9jX29sZF9ub2RlLCBOVUxMLCBOVUxMLCB0cnVlLAotCQkgICAgdHJ1ZSk7Ci0JfQotCWVtaXR0 ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX2xvZ19l bWl0X21ldGFkYXRhKGVtaXR0ZXJfdCAqZW1pdHRlcikgewotCWVtaXR0ZXJfanNvbl9vYmplY3Rf a3ZfYmVnaW4oZW1pdHRlciwgImluZm8iKTsKLQotCW5zdGltZV90IG5vdzsKLQotCW5zdGltZV9w cm9mX2luaXRfdXBkYXRlKCZub3cpOwotCXVpbnQ2NF90IG5zID0gbnN0aW1lX25zKCZub3cpIC0g bnN0aW1lX25zKCZsb2dfc3RhcnRfdGltZXN0YW1wKTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRl ciwgImR1cmF0aW9uIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwgJm5zKTsKLQotCWNoYXIgKnZlcnMg PSBKRU1BTExPQ19WRVJTSU9OOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAidmVyc2lvbiIs Ci0JICAgIGVtaXR0ZXJfdHlwZV9zdHJpbmcsICZ2ZXJzKTsKLQotCWVtaXR0ZXJfanNvbl9rdihl bWl0dGVyLCAibGdfc2FtcGxlX3JhdGUiLAotCSAgICBlbWl0dGVyX3R5cGVfaW50LCAmbGdfcHJv Zl9zYW1wbGUpOwotCi0JY29uc3QgY2hhciAqcmVzX3R5cGUgPSBwcm9mX3RpbWVfcmVzX21vZGVf bmFtZXNbb3B0X3Byb2ZfdGltZV9yZXNdOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAicHJv Zl90aW1lX3Jlc29sdXRpb24iLCBlbWl0dGVyX3R5cGVfc3RyaW5nLAotCSAgICAmcmVzX3R5cGUp OwotCi0JaW50IHBpZCA9IHByb2ZfZ2V0cGlkKCk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIs ICJwaWQiLCBlbWl0dGVyX3R5cGVfaW50LCAmcGlkKTsKLQotCWVtaXR0ZXJfanNvbl9vYmplY3Rf ZW5kKGVtaXR0ZXIpOwotfQotCi0jZGVmaW5lIFBST0ZfTE9HX1NUT1BfQlVGU0laRSBQUk9GX0RV TVBfQlVGU0laRQotSkVNQUxMT0NfQ09MRAotYm9vbAotcHJvZl9sb2dfc3RvcCh0c2RuX3QgKnRz ZG4pIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlpZiAoIW9wdF9wcm9mIHx8ICFwcm9mX2Jv b3RlZCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQl0c2RfdCAqdHNkID0gdHNkbl90c2QodHNk bik7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmxvZ19tdHgpOwotCi0JaWYgKHByb2ZfbG9n Z2luZ19zdGF0ZSAhPSBwcm9mX2xvZ2dpbmdfc3RhdGVfc3RhcnRlZCkgewotCQltYWxsb2NfbXV0 ZXhfdW5sb2NrKHRzZG4sICZsb2dfbXR4KTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkg KiBTZXQgdGhlIHN0YXRlIHRvIGR1bXBpbmcuIFdlJ2xsIHNldCBpdCB0byBzdG9wcGVkIHdoZW4g d2UncmUgZG9uZS4KLQkgKiBTaW5jZSBvdGhlciB0aHJlYWRzIHdvbid0IGJlIGFibGUgdG8gc3Rh cnQvc3RvcC9sb2cgd2hlbiB0aGUgc3RhdGUgaXMKLQkgKiBkdW1waW5nLCB3ZSBkb24ndCBoYXZl IHRvIGhvbGQgdGhlIGxvY2sgZHVyaW5nIHRoZSB3aG9sZSBtZXRob2QuCi0JICovCi0JcHJvZl9s b2dnaW5nX3N0YXRlID0gcHJvZl9sb2dnaW5nX3N0YXRlX2R1bXBpbmc7Ci0JbWFsbG9jX211dGV4 X3VubG9jayh0c2RuLCAmbG9nX210eCk7Ci0KLQotCWVtaXR0ZXJfdCBlbWl0dGVyOwotCi0JLyog Q3JlYXRlIGEgZmlsZS4gKi8KLQotCWludCBmZDsKLQlpZiAocHJvZl9sb2dfZHVtbXkpIHsKLQkJ ZmQgPSAwOwotCX0gZWxzZSB7Ci0JCWZkID0gY3JlYXQobG9nX2ZpbGVuYW1lLCAwNjQ0KTsKLQl9 Ci0KLQlpZiAoZmQgPT0gLTEpIHsKLQkJbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogY3JlYXQo KSBmb3IgbG9nIGZpbGUgXCIlc1wiICIKLQkJCSAgICAgICIgZmFpbGVkIHdpdGggJWRcbiIsIGxv Z19maWxlbmFtZSwgZXJybm8pOwotCQlpZiAob3B0X2Fib3J0KSB7Ci0JCQlhYm9ydCgpOwotCQl9 Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXN0cnVjdCBwcm9mX2VtaXR0ZXJfY2JfYXJnX3MgYXJn OwotCWFyZy5mZCA9IGZkOwotCi0JYnVmX3dyaXRlcl90IGJ1Zl93cml0ZXI7Ci0JYnVmX3dyaXRl cl9pbml0KHRzZG4sICZidWZfd3JpdGVyLCBwcm9mX2VtaXR0ZXJfd3JpdGVfY2IsICZhcmcsIE5V TEwsCi0JICAgIFBST0ZfTE9HX1NUT1BfQlVGU0laRSk7Ci0JZW1pdHRlcl9pbml0KCZlbWl0dGVy LCBlbWl0dGVyX291dHB1dF9qc29uX2NvbXBhY3QsIGJ1Zl93cml0ZXJfY2IsCi0JICAgICZidWZf d3JpdGVyKTsKLQotCWVtaXR0ZXJfYmVnaW4oJmVtaXR0ZXIpOwotCXByb2ZfbG9nX2VtaXRfbWV0 YWRhdGEoJmVtaXR0ZXIpOwotCXByb2ZfbG9nX2VtaXRfdGhyZWFkcyh0c2QsICZlbWl0dGVyKTsK LQlwcm9mX2xvZ19lbWl0X3RyYWNlcyh0c2QsICZlbWl0dGVyKTsKLQlwcm9mX2xvZ19lbWl0X2Fs bG9jcyh0c2QsICZlbWl0dGVyKTsKLQllbWl0dGVyX2VuZCgmZW1pdHRlcik7Ci0KLQlidWZfd3Jp dGVyX3Rlcm1pbmF0ZSh0c2RuLCAmYnVmX3dyaXRlcik7Ci0KLQkvKiBSZXNldCBnbG9iYWwgc3Rh dGUuICovCi0JaWYgKGxvZ190YWJsZXNfaW5pdGlhbGl6ZWQpIHsKLQkJY2toX2RlbGV0ZSh0c2Qs ICZsb2dfYnRfbm9kZV9zZXQpOwotCQlja2hfZGVsZXRlKHRzZCwgJmxvZ190aHJfbm9kZV9zZXQp OwotCX0KLQlsb2dfdGFibGVzX2luaXRpYWxpemVkID0gZmFsc2U7Ci0JbG9nX2J0X2luZGV4ID0g MDsKLQlsb2dfdGhyX2luZGV4ID0gMDsKLQlsb2dfYnRfZmlyc3QgPSBOVUxMOwotCWxvZ19idF9s YXN0ID0gTlVMTDsKLQlsb2dfdGhyX2ZpcnN0ID0gTlVMTDsKLQlsb2dfdGhyX2xhc3QgPSBOVUxM OwotCWxvZ19hbGxvY19maXJzdCA9IE5VTEw7Ci0JbG9nX2FsbG9jX2xhc3QgPSBOVUxMOwotCi0J bWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmxvZ19tdHgpOwotCXByb2ZfbG9nZ2luZ19zdGF0ZSA9 IHByb2ZfbG9nZ2luZ19zdGF0ZV9zdG9wcGVkOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwg JmxvZ19tdHgpOwotCi0JaWYgKHByb2ZfbG9nX2R1bW15KSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9 Ci0JcmV0dXJuIGNsb3NlKGZkKSB8fCBhcmcucmV0ID09IC0xOwotfQotI3VuZGVmIFBST0ZfTE9H X1NUT1BfQlVGU0laRQotCi1KRU1BTExPQ19DT0xECi1ib29sCi1wcm9mX2xvZ19pbml0KHRzZF90 ICp0c2QpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlpZiAobWFsbG9jX211dGV4X2luaXQo JmxvZ19tdHgsICJwcm9mX2xvZyIsCi0JICAgIFdJVE5FU1NfUkFOS19QUk9GX0xPRywgbWFsbG9j X211dGV4X3JhbmtfZXhjbHVzaXZlKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAob3B0 X3Byb2ZfbG9nKSB7Ci0JCXByb2ZfbG9nX3N0YXJ0KHRzZF90c2RuKHRzZCksIE5VTEwpOwotCX0K LQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJvZl9yZWNl bnQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9mX3Jl Y2VudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRhOTQ0Li4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9mX3JlY2Vu dC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAwICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9hc3NlcnQuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9idWZfd3JpdGVyLmgi Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZW1pdHRlci5oIgotI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3Byb2ZfZGF0YS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3By b2ZfcmVjZW50LmgiCi0KLXNzaXplX3Qgb3B0X3Byb2ZfcmVjZW50X2FsbG9jX21heCA9IFBST0Zf UkVDRU5UX0FMTE9DX01BWF9ERUZBVUxUOwotbWFsbG9jX211dGV4X3QgcHJvZl9yZWNlbnRfYWxs b2NfbXR4OyAvKiBQcm90ZWN0cyB0aGUgZmllbGRzIGJlbG93ICovCi1zdGF0aWMgYXRvbWljX3pk X3QgcHJvZl9yZWNlbnRfYWxsb2NfbWF4Owotc3RhdGljIHNzaXplX3QgcHJvZl9yZWNlbnRfYWxs b2NfY291bnQgPSAwOwotcHJvZl9yZWNlbnRfbGlzdF90IHByb2ZfcmVjZW50X2FsbG9jX2xpc3Q7 Ci0KLW1hbGxvY19tdXRleF90IHByb2ZfcmVjZW50X2R1bXBfbXR4OyAvKiBQcm90ZWN0cyBkdW1w aW5nLiAqLwotCi1zdGF0aWMgdm9pZAotcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2luaXQoKSB7Ci0J YXRvbWljX3N0b3JlX3pkKCZwcm9mX3JlY2VudF9hbGxvY19tYXgsIG9wdF9wcm9mX3JlY2VudF9h bGxvY19tYXgsCi0JICAgIEFUT01JQ19SRUxBWEVEKTsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6 ZV90Ci1wcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0X25vX2xvY2soKSB7Ci0JcmV0dXJuIGF0b21p Y19sb2FkX3pkKCZwcm9mX3JlY2VudF9hbGxvY19tYXgsIEFUT01JQ19SRUxBWEVEKTsKLX0KLQot c3RhdGljIGlubGluZSBzc2l6ZV90Ci1wcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRzZF90ICp0 c2QpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZwcm9mX3Jl Y2VudF9hbGxvY19tdHgpOwotCXJldHVybiBwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0X25vX2xv Y2soKTsKLX0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90Ci1wcm9mX3JlY2VudF9hbGxvY19tYXhf dXBkYXRlKHRzZF90ICp0c2QsIHNzaXplX3QgbWF4KSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9v d25lcih0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKLQlzc2l6ZV90IG9s ZF9tYXggPSBwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRzZCk7Ci0JYXRvbWljX3N0b3JlX3pk KCZwcm9mX3JlY2VudF9hbGxvY19tYXgsIG1heCwgQVRPTUlDX1JFTEFYRUQpOwotCXJldHVybiBv bGRfbWF4OwotfQotCi1zdGF0aWMgcHJvZl9yZWNlbnRfdCAqCi1wcm9mX3JlY2VudF9hbGxvY2F0 ZV9ub2RlKHRzZG5fdCAqdHNkbikgewotCXJldHVybiAocHJvZl9yZWNlbnRfdCAqKWlhbGxvY3p0 bSh0c2RuLCBzaXplb2YocHJvZl9yZWNlbnRfdCksCi0JICAgIHN6X3NpemUyaW5kZXgoc2l6ZW9m KHByb2ZfcmVjZW50X3QpKSwgZmFsc2UsIE5VTEwsIHRydWUsCi0JICAgIGFyZW5hX2dldCh0c2Ru LCAwLCBmYWxzZSksIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvZl9yZWNlbnRfZnJlZV9u b2RlKHRzZG5fdCAqdHNkbiwgcHJvZl9yZWNlbnRfdCAqbm9kZSkgewotCWFzc2VydChub2RlICE9 IE5VTEwpOwotCWFzc2VydChpc2FsbG9jKHRzZG4sIG5vZGUpID09IHN6X3MydShzaXplb2YocHJv Zl9yZWNlbnRfdCkpKTsKLQlpZGFsbG9jdG0odHNkbiwgbm9kZSwgTlVMTCwgTlVMTCwgdHJ1ZSwg dHJ1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaW5jcmVtZW50X3JlY2VudF9jb3VudCh0 c2RfdCAqdHNkLCBwcm9mX3RjdHhfdCAqdGN0eCkgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3du ZXIodHNkX3RzZG4odHNkKSwgdGN0eC0+dGRhdGEtPmxvY2spOwotCSsrdGN0eC0+cmVjZW50X2Nv dW50OwotCWFzc2VydCh0Y3R4LT5yZWNlbnRfY291bnQgPiAwKTsKLX0KLQotYm9vbAotcHJvZl9y ZWNlbnRfYWxsb2NfcHJlcGFyZSh0c2RfdCAqdHNkLCBwcm9mX3RjdHhfdCAqdGN0eCkgewotCWNh c3NlcnQoY29uZmlnX3Byb2YpOwotCWFzc2VydChvcHRfcHJvZiAmJiBwcm9mX2Jvb3RlZCk7Ci0J bWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCB0Y3R4LT50ZGF0YS0+bG9j ayk7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNkX3RzZG4odHNkKSwgJnByb2Zf cmVjZW50X2FsbG9jX210eCk7Ci0KLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgbGFzdC1OIG1vZGUg aXMgdHVybmVkIG9uIHdpdGhvdXQgdHJ5aW5nIHRvIGFjcXVpcmUgdGhlCi0JICogbG9jaywgc28g YXMgdG8gb3B0aW1pemUgZm9yIHRoZSBmb2xsb3dpbmcgdHdvIHNjZW5hcmlvczoKLQkgKiAoMSkg TGFzdC1OIG1vZGUgaXMgc3dpdGNoZWQgb2ZmOwotCSAqICgyKSBEdW1waW5nLCBkdXJpbmcgd2hp Y2ggbGFzdC1OIG1vZGUgaXMgdGVtcG9yYXJpbHkgdHVybmVkIG9mZiBzbwotCSAqICAgICBhcyBu b3QgdG8gYmxvY2sgc2FtcGxlZCBhbGxvY2F0aW9ucy4KLQkgKi8KLQlpZiAocHJvZl9yZWNlbnRf YWxsb2NfbWF4X2dldF9ub19sb2NrKCkgPT0gMCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0J LyoKLQkgKiBJbmNyZW1lbnQgcmVjZW50X2NvdW50IHRvIGhvbGQgdGhlIHRjdHggc28gdGhhdCBp dCB3b24ndCBiZSBnb25lCi0JICogZXZlbiBhZnRlciB0Y3R4LT50ZGF0YS0+bG9jayBpcyByZWxl YXNlZC4gIFRoaXMgYWN0cyBhcyBhCi0JICogInBsYWNlaG9sZGVyIjsgdGhlIHJlYWwgcmVjb3Jk aW5nIG9mIHRoZSBhbGxvY2F0aW9uIHJlcXVpcmVzIGEgbG9jawotCSAqIG9uIHByb2ZfcmVjZW50 X2FsbG9jX210eCBhbmQgaXMgZG9uZSBpbiBwcm9mX3JlY2VudF9hbGxvYyAod2hlbgotCSAqIHRj dHgtPnRkYXRhLT5sb2NrIGhhcyBiZWVuIHJlbGVhc2VkKS4KLQkgKi8KLQlpbmNyZW1lbnRfcmVj ZW50X2NvdW50KHRzZCwgdGN0eCk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1k ZWNyZW1lbnRfcmVjZW50X2NvdW50KHRzZF90ICp0c2QsIHByb2ZfdGN0eF90ICp0Y3R4KSB7Ci0J bWFsbG9jX211dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50 X2FsbG9jX210eCk7Ci0JYXNzZXJ0KHRjdHggIT0gTlVMTCk7Ci0JbWFsbG9jX211dGV4X2xvY2so dHNkX3RzZG4odHNkKSwgdGN0eC0+dGRhdGEtPmxvY2spOwotCWFzc2VydCh0Y3R4LT5yZWNlbnRf Y291bnQgPiAwKTsKLQktLXRjdHgtPnJlY2VudF9jb3VudDsKLQlwcm9mX3RjdHhfdHJ5X2Rlc3Ry b3kodHNkLCB0Y3R4KTsKLX0KLQotc3RhdGljIGlubGluZSBlZGF0YV90ICoKLXByb2ZfcmVjZW50 X2FsbG9jX2VkYXRhX2dldF9ub19sb2NrKGNvbnN0IHByb2ZfcmVjZW50X3QgKm4pIHsKLQlyZXR1 cm4gKGVkYXRhX3QgKilhdG9taWNfbG9hZF9wKCZuLT5hbGxvY19lZGF0YSwgQVRPTUlDX0FDUVVJ UkUpOwotfQotCi1lZGF0YV90ICoKLXByb2ZfcmVjZW50X2FsbG9jX2VkYXRhX2dldF9ub19sb2Nr X3Rlc3QoY29uc3QgcHJvZl9yZWNlbnRfdCAqbikgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwot CXJldHVybiBwcm9mX3JlY2VudF9hbGxvY19lZGF0YV9nZXRfbm9fbG9jayhuKTsKLX0KLQotc3Rh dGljIGlubGluZSBlZGF0YV90ICoKLXByb2ZfcmVjZW50X2FsbG9jX2VkYXRhX2dldCh0c2RfdCAq dHNkLCBjb25zdCBwcm9mX3JlY2VudF90ICpuKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25l cih0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKLQlyZXR1cm4gcHJvZl9y ZWNlbnRfYWxsb2NfZWRhdGFfZ2V0X25vX2xvY2sobik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9m X3JlY2VudF9hbGxvY19lZGF0YV9zZXQodHNkX3QgKnRzZCwgcHJvZl9yZWNlbnRfdCAqbiwgZWRh dGFfdCAqZWRhdGEpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCks ICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOwotCWF0b21pY19zdG9yZV9wKCZuLT5hbGxvY19lZGF0 YSwgZWRhdGEsIEFUT01JQ19SRUxFQVNFKTsKLX0KLQotdm9pZAotZWRhdGFfcHJvZl9yZWNlbnRf YWxsb2NfaW5pdChlZGF0YV90ICplZGF0YSkgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwotCWVk YXRhX3Byb2ZfcmVjZW50X2FsbG9jX3NldF9kb250X2NhbGxfZGlyZWN0bHkoZWRhdGEsIE5VTEwp OwotfQotCi1zdGF0aWMgaW5saW5lIHByb2ZfcmVjZW50X3QgKgotZWRhdGFfcHJvZl9yZWNlbnRf YWxsb2NfZ2V0X25vX2xvY2soY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQljYXNzZXJ0KGNvbmZp Z19wcm9mKTsKLQlyZXR1cm4gZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2NfZ2V0X2RvbnRfY2FsbF9k aXJlY3RseShlZGF0YSk7Ci19Ci0KLXByb2ZfcmVjZW50X3QgKgotZWRhdGFfcHJvZl9yZWNlbnRf YWxsb2NfZ2V0X25vX2xvY2tfdGVzdChjb25zdCBlZGF0YV90ICplZGF0YSkgewotCWNhc3NlcnQo Y29uZmlnX3Byb2YpOwotCXJldHVybiBlZGF0YV9wcm9mX3JlY2VudF9hbGxvY19nZXRfbm9fbG9j ayhlZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHJvZl9yZWNlbnRfdCAqCi1lZGF0YV9wcm9m X3JlY2VudF9hbGxvY19nZXQodHNkX3QgKnRzZCwgY29uc3QgZWRhdGFfdCAqZWRhdGEpIHsKLQlt YWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxv Y19tdHgpOwotCXByb2ZfcmVjZW50X3QgKnJlY2VudF9hbGxvYyA9Ci0JICAgIGVkYXRhX3Byb2Zf cmVjZW50X2FsbG9jX2dldF9ub19sb2NrKGVkYXRhKTsKLQlhc3NlcnQocmVjZW50X2FsbG9jID09 IE5VTEwgfHwKLQkgICAgcHJvZl9yZWNlbnRfYWxsb2NfZWRhdGFfZ2V0KHRzZCwgcmVjZW50X2Fs bG9jKSA9PSBlZGF0YSk7Ci0JcmV0dXJuIHJlY2VudF9hbGxvYzsKLX0KLQotc3RhdGljIHByb2Zf cmVjZW50X3QgKgotZWRhdGFfcHJvZl9yZWNlbnRfYWxsb2NfdXBkYXRlX2ludGVybmFsKHRzZF90 ICp0c2QsIGVkYXRhX3QgKmVkYXRhLAotICAgIHByb2ZfcmVjZW50X3QgKnJlY2VudF9hbGxvYykg ewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50 X2FsbG9jX210eCk7Ci0JcHJvZl9yZWNlbnRfdCAqb2xkX3JlY2VudF9hbGxvYyA9Ci0JICAgIGVk YXRhX3Byb2ZfcmVjZW50X2FsbG9jX2dldCh0c2QsIGVkYXRhKTsKLQllZGF0YV9wcm9mX3JlY2Vu dF9hbGxvY19zZXRfZG9udF9jYWxsX2RpcmVjdGx5KGVkYXRhLCByZWNlbnRfYWxsb2MpOwotCXJl dHVybiBvbGRfcmVjZW50X2FsbG9jOwotfQotCi1zdGF0aWMgdm9pZAotZWRhdGFfcHJvZl9yZWNl bnRfYWxsb2Nfc2V0KHRzZF90ICp0c2QsIGVkYXRhX3QgKmVkYXRhLAotICAgIHByb2ZfcmVjZW50 X3QgKnJlY2VudF9hbGxvYykgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4o dHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7Ci0JYXNzZXJ0KHJlY2VudF9hbGxvYyAhPSBO VUxMKTsKLQlwcm9mX3JlY2VudF90ICpvbGRfcmVjZW50X2FsbG9jID0KLQkgICAgZWRhdGFfcHJv Zl9yZWNlbnRfYWxsb2NfdXBkYXRlX2ludGVybmFsKHRzZCwgZWRhdGEsIHJlY2VudF9hbGxvYyk7 Ci0JYXNzZXJ0KG9sZF9yZWNlbnRfYWxsb2MgPT0gTlVMTCk7Ci0JcHJvZl9yZWNlbnRfYWxsb2Nf ZWRhdGFfc2V0KHRzZCwgcmVjZW50X2FsbG9jLCBlZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1l ZGF0YV9wcm9mX3JlY2VudF9hbGxvY19yZXNldCh0c2RfdCAqdHNkLCBlZGF0YV90ICplZGF0YSwK LSAgICBwcm9mX3JlY2VudF90ICpyZWNlbnRfYWxsb2MpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0 X293bmVyKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOwotCWFzc2VydChy ZWNlbnRfYWxsb2MgIT0gTlVMTCk7Ci0JcHJvZl9yZWNlbnRfdCAqb2xkX3JlY2VudF9hbGxvYyA9 Ci0JICAgIGVkYXRhX3Byb2ZfcmVjZW50X2FsbG9jX3VwZGF0ZV9pbnRlcm5hbCh0c2QsIGVkYXRh LCBOVUxMKTsKLQlhc3NlcnQob2xkX3JlY2VudF9hbGxvYyA9PSByZWNlbnRfYWxsb2MpOwotCWFz c2VydChlZGF0YSA9PSBwcm9mX3JlY2VudF9hbGxvY19lZGF0YV9nZXQodHNkLCByZWNlbnRfYWxs b2MpKTsKLQlwcm9mX3JlY2VudF9hbGxvY19lZGF0YV9zZXQodHNkLCByZWNlbnRfYWxsb2MsIE5V TEwpOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHJpZ2h0IGJl Zm9yZSBhbiBhbGxvY2F0aW9uIGlzIHJlbGVhc2VkLCBzbwotICogdGhhdCB0aGUgYXNzb2NpYXRl ZCByZWNlbnQgYWxsb2NhdGlvbiByZWNvcmQgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZwotICog aW5mb3JtYXRpb246Ci0gKiAoMSkgVGhlIGFsbG9jYXRpb24gaXMgcmVsZWFzZWQ7Ci0gKiAoMikg VGhlIHRpbWUgb2YgdGhlIGRlYWxsb2NhdGlvbjsgYW5kCi0gKiAoMykgVGhlIHByb2ZfdGN0eCBh c3NvY2lhdGVkIHdpdGggdGhlIGRlYWxsb2NhdGlvbi4KLSAqLwotdm9pZAotcHJvZl9yZWNlbnRf YWxsb2NfcmVzZXQodHNkX3QgKnRzZCwgZWRhdGFfdCAqZWRhdGEpIHsKLQljYXNzZXJ0KGNvbmZp Z19wcm9mKTsKLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhlIHJlY2VudCBhbGxvY2F0aW9uIHJl Y29yZCBzdGlsbCBleGlzdHMgd2l0aG91dAotCSAqIHRyeWluZyB0byBhY3F1aXJlIHRoZSBsb2Nr LgotCSAqLwotCWlmIChlZGF0YV9wcm9mX3JlY2VudF9hbGxvY19nZXRfbm9fbG9jayhlZGF0YSkg PT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCi0JcHJvZl90Y3R4X3QgKmRhbGxvY190Y3R4ID0g cHJvZl90Y3R4X2NyZWF0ZSh0c2QpOwotCS8qCi0JICogSW4gY2FzZSBkYWxsb2NfdGN0eCBpcyBO VUxMLCBlLmcuIGR1ZSB0byBPT00sIHdlIHdpbGwgbm90IHJlY29yZCB0aGUKLQkgKiBkZWFsbG9j YXRpb24gdGltZSAvIHRjdHgsIHdoaWNoIGlzIGhhbmRsZWQgbGF0ZXIsIGFmdGVyIHdlIGNoZWNr Ci0JICogYWdhaW4gd2hlbiBob2xkaW5nIHRoZSBsb2NrLgotCSAqLwotCi0JaWYgKGRhbGxvY190 Y3R4ICE9IE5VTEwpIHsKLQkJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgZGFsbG9j X3RjdHgtPnRkYXRhLT5sb2NrKTsKLQkJaW5jcmVtZW50X3JlY2VudF9jb3VudCh0c2QsIGRhbGxv Y190Y3R4KTsKLQkJZGFsbG9jX3RjdHgtPnByZXBhcmVkID0gZmFsc2U7Ci0JCW1hbGxvY19tdXRl eF91bmxvY2sodHNkX3RzZG4odHNkKSwgZGFsbG9jX3RjdHgtPnRkYXRhLT5sb2NrKTsKLQl9Ci0K LQltYWxsb2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4 KTsKLQkvKiBDaGVjayBhZ2FpbiBhZnRlciBhY3F1aXJpbmcgdGhlIGxvY2suICAqLwotCXByb2Zf cmVjZW50X3QgKnJlY2VudCA9IGVkYXRhX3Byb2ZfcmVjZW50X2FsbG9jX2dldCh0c2QsIGVkYXRh KTsKLQlpZiAocmVjZW50ICE9IE5VTEwpIHsKLQkJYXNzZXJ0KG5zdGltZV9lcXVhbHNfemVybygm cmVjZW50LT5kYWxsb2NfdGltZSkpOwotCQlhc3NlcnQocmVjZW50LT5kYWxsb2NfdGN0eCA9PSBO VUxMKTsKLQkJaWYgKGRhbGxvY190Y3R4ICE9IE5VTEwpIHsKLQkJCW5zdGltZV9wcm9mX3VwZGF0 ZSgmcmVjZW50LT5kYWxsb2NfdGltZSk7Ci0JCQlyZWNlbnQtPmRhbGxvY190Y3R4ID0gZGFsbG9j X3RjdHg7Ci0JCQlkYWxsb2NfdGN0eCA9IE5VTEw7Ci0JCX0KLQkJZWRhdGFfcHJvZl9yZWNlbnRf YWxsb2NfcmVzZXQodHNkLCBlZGF0YSwgcmVjZW50KTsKLQl9Ci0JbWFsbG9jX211dGV4X3VubG9j ayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKLQotCWlmIChkYWxsb2Nf dGN0eCAhPSBOVUxMKSB7Ci0JCS8qIFdlIGxvc3QgdGhlIHJhc2UgLSB0aGUgYWxsb2NhdGlvbiBy ZWNvcmQgd2FzIGp1c3QgZ29uZS4gKi8KLQkJZGVjcmVtZW50X3JlY2VudF9jb3VudCh0c2QsIGRh bGxvY190Y3R4KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX3JlY2VudF9hbGxvY19ldmlj dF9lZGF0YSh0c2RfdCAqdHNkLCBwcm9mX3JlY2VudF90ICpyZWNlbnRfYWxsb2MpIHsKLQltYWxs b2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19t dHgpOwotCWVkYXRhX3QgKmVkYXRhID0gcHJvZl9yZWNlbnRfYWxsb2NfZWRhdGFfZ2V0KHRzZCwg cmVjZW50X2FsbG9jKTsKLQlpZiAoZWRhdGEgIT0gTlVMTCkgewotCQllZGF0YV9wcm9mX3JlY2Vu dF9hbGxvY19yZXNldCh0c2QsIGVkYXRhLCByZWNlbnRfYWxsb2MpOwotCX0KLX0KLQotc3RhdGlj IGJvb2wKLXByb2ZfcmVjZW50X2FsbG9jX2lzX2VtcHR5KHRzZF90ICp0c2QpIHsKLQltYWxsb2Nf bXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgp OwotCWlmIChxbF9lbXB0eSgmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCkpIHsKLQkJYXNzZXJ0KHBy b2ZfcmVjZW50X2FsbG9jX2NvdW50ID09IDApOwotCQlyZXR1cm4gdHJ1ZTsKLQl9IGVsc2Ugewot CQlhc3NlcnQocHJvZl9yZWNlbnRfYWxsb2NfY291bnQgPiAwKTsKLQkJcmV0dXJuIGZhbHNlOwot CX0KLX0KLQotc3RhdGljIHZvaWQKLXByb2ZfcmVjZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0c2Rf dCAqdHNkKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmcHJv Zl9yZWNlbnRfYWxsb2NfbXR4KTsKLQlpZiAoIWNvbmZpZ19kZWJ1ZykgewotCQlyZXR1cm47Ci0J fQotCXNzaXplX3QgY291bnQgPSAwOwotCXByb2ZfcmVjZW50X3QgKm47Ci0JcWxfZm9yZWFjaChu LCAmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwgbGluaykgewotCQkrK2NvdW50OwotCX0KLQlhc3Nl cnQoY291bnQgPT0gcHJvZl9yZWNlbnRfYWxsb2NfY291bnQpOwotCWFzc2VydChwcm9mX3JlY2Vu dF9hbGxvY19tYXhfZ2V0KHRzZCkgPT0gLTEgfHwKLQkgICAgY291bnQgPD0gcHJvZl9yZWNlbnRf YWxsb2NfbWF4X2dldCh0c2QpKTsKLX0KLQotdm9pZAotcHJvZl9yZWNlbnRfYWxsb2ModHNkX3Qg KnRzZCwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBzaXplLCBzaXplX3QgdXNpemUpIHsKLQljYXNz ZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQoZWRhdGEgIT0gTlVMTCk7Ci0JcHJvZl90Y3R4X3Qg KnRjdHggPSBlZGF0YV9wcm9mX3RjdHhfZ2V0KGVkYXRhKTsKLQotCW1hbGxvY19tdXRleF9hc3Nl cnRfbm90X293bmVyKHRzZF90c2RuKHRzZCksIHRjdHgtPnRkYXRhLT5sb2NrKTsKLQltYWxsb2Nf bXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKLQlwcm9m X3JlY2VudF9hbGxvY19hc3NlcnRfY291bnQodHNkKTsKLQotCS8qCi0JICogUmVzZXJ2ZSBhIG5l dyBwcm9mX3JlY2VudF90IG5vZGUgaWYgbmVlZGVkLiAgSWYgbmVlZGVkLCB3ZSByZWxlYXNlCi0J ICogdGhlIHByb2ZfcmVjZW50X2FsbG9jX210eCBsb2NrIGFuZCBhbGxvY2F0ZS4gIFRoZW4sIHJh dGhlciB0aGFuCi0JICogaW1tZWRpYXRlbHkgY2hlY2tpbmcgZm9yIE9PTSwgd2UgcmVnYWluIHRo ZSBsb2NrIGFuZCB0cnkgdG8gbWFrZSB1c2UKLQkgKiBvZiB0aGUgcmVzZXJ2ZSBub2RlIGlmIG5l ZWRlZC4gIFRoZXJlIGFyZSBzaXggc2NlbmFyaW9zOgotCSAqCi0JICogICAgICAgICAgXCBub3cg fCBubyBuZWVkIHwgbmVlZCBidXQgT09NZWQgfCBuZWVkIGFuZCBhbGxvY2F0ZWQKLQkgKiAgICAg bGF0ZXIgXCAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICB8Ci0JICogICAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICog ICAgIG5vIG5lZWQgICAgfCAgICgxKSAgIHwgICAgICAoMikgICAgICAgfCAgICAgICAgICgzKQot CSAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotCSAqICAgICBuZWVkICAgICAgIHwgICAoNCkgICB8ICAgICAgKDUpICAgICAg IHwgICAgICAgICAoNikKLQkgKgotCSAqIEZpcnN0LCAiKDQpIiBuZXZlciBoYXBwZW5zLCBiZWNh dXNlIHdlIGRvbid0IHJlbGVhc2UgdGhlIGxvY2sgaW4gdGhlCi0JICogbWlkZGxlIGlmIHRoZXJl J3Mgbm8gbmVlZCBmb3IgYSBuZXcgbm9kZTsgaW4gc3VjaCBjYXNlcyAiKDEpIiBhbHdheXMKLQkg KiB0YWtlcyBwbGFjZSwgd2hpY2ggaXMgdHJpdmlhbC4KLQkgKgotCSAqIE91dCBvZiB0aGUgcmVt YWluaW5nIGZvdXIgc2NlbmFyaW9zLCAiKDYpIiBpcyB0aGUgY29tbW9uIGNhc2UgYW5kIGlzCi0J ICogdHJpdmlhbC4gICIoNSkiIGlzIGFsc28gdHJpdmlhbCwgaW4gd2hpY2ggY2FzZSB3ZSdsbCBy b2xsYmFjayB0aGUKLQkgKiBlZmZlY3Qgb2YgcHJvZl9yZWNlbnRfYWxsb2NfcHJlcGFyZSgpIGFz IGV4cGVjdGVkLgotCSAqCi0JICogIigyKSIgLyAiKDMpIiBvY2N1cnMgd2hlbiB0aGUgbmVlZCBm b3IgYSBuZXcgbm9kZSBpcyBnb25lIGFmdGVyIHdlCi0JICogcmVnYWluIHRoZSBsb2NrLiAgSWYg dGhlIG5ldyBub2RlIGlzIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQsIGkuZS4gaW4KLQkgKiB0aGUg Y2FzZSBvZiAiKDMpIiwgd2UnbGwgcmVsZWFzZSBpdCBpbiB0aGUgZW5kOyBvdGhlcndpc2UsIGku ZS4gaW4KLQkgKiB0aGUgY2FzZSBvZiAiKDIpIiwgd2UgZG8gbm90aGluZyAtIHdlJ3JlIGx1Y2t5 IHRoYXQgdGhlIE9PTSBlbmRzIHVwCi0JICogZG9pbmcgbm8gaGFybSBhdCBhbGwuCi0JICoKLQkg KiBUaGVyZWZvcmUsIHRoZSBvbmx5IHBlcmZvcm1hbmNlIGNvc3Qgb2YgdGhlICJyZWxlYXNlIGxv Y2siIC0+Ci0JICogImFsbG9jYXRlIiAtPiAicmVnYWluIGxvY2siIGRlc2lnbiBpcyB0aGUgIigz KSIgY2FzZSwgYnV0IGl0IGhhcHBlbnMKLQkgKiB2ZXJ5IHJhcmVseSwgc28gdGhlIGNvc3QgaXMg cmVsYXRpdmVseSBzbWFsbCBjb21wYXJlZCB0byB0aGUgZ2FpbiBvZgotCSAqIG5vdCBoYXZpbmcg dG8gaGF2ZSB0aGUgbG9jayBvcmRlciBvZiBwcm9mX3JlY2VudF9hbGxvY19tdHggYWJvdmUgYWxs Ci0JICogdGhlIGFsbG9jYXRpb24gbG9ja3MuCi0JICovCi0JcHJvZl9yZWNlbnRfdCAqcmVzZXJ2 ZSA9IE5VTEw7Ci0JaWYgKHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXQodHNkKSA9PSAtMSB8fAot CSAgICBwcm9mX3JlY2VudF9hbGxvY19jb3VudCA8IHByb2ZfcmVjZW50X2FsbG9jX21heF9nZXQo dHNkKSkgewotCQlhc3NlcnQocHJvZl9yZWNlbnRfYWxsb2NfbWF4X2dldCh0c2QpICE9IDApOwot CQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19t dHgpOwotCQlyZXNlcnZlID0gcHJvZl9yZWNlbnRfYWxsb2NhdGVfbm9kZSh0c2RfdHNkbih0c2Qp KTsKLQkJbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9j X210eCk7Ci0JCXByb2ZfcmVjZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0c2QpOwotCX0KLQotCWlm IChwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRzZCkgPT0gMCkgewotCQlhc3NlcnQocHJvZl9y ZWNlbnRfYWxsb2NfaXNfZW1wdHkodHNkKSk7Ci0JCWdvdG8gbGFiZWxfcm9sbGJhY2s7Ci0JfQot Ci0JcHJvZl90Y3R4X3QgKm9sZF9hbGxvY190Y3R4LCAqb2xkX2RhbGxvY190Y3R4OwotCWlmIChw cm9mX3JlY2VudF9hbGxvY19jb3VudCA9PSBwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRzZCkp IHsKLQkJLyogSWYgdXBwZXIgbGltaXQgaXMgcmVhY2hlZCwgcm90YXRlIHRoZSBoZWFkLiAqLwot CQlhc3NlcnQocHJvZl9yZWNlbnRfYWxsb2NfbWF4X2dldCh0c2QpICE9IC0xKTsKLQkJYXNzZXJ0 KCFwcm9mX3JlY2VudF9hbGxvY19pc19lbXB0eSh0c2QpKTsKLQkJcHJvZl9yZWNlbnRfdCAqaGVh ZCA9IHFsX2ZpcnN0KCZwcm9mX3JlY2VudF9hbGxvY19saXN0KTsKLQkJb2xkX2FsbG9jX3RjdHgg PSBoZWFkLT5hbGxvY190Y3R4OwotCQlhc3NlcnQob2xkX2FsbG9jX3RjdHggIT0gTlVMTCk7Ci0J CW9sZF9kYWxsb2NfdGN0eCA9IGhlYWQtPmRhbGxvY190Y3R4OwotCQlwcm9mX3JlY2VudF9hbGxv Y19ldmljdF9lZGF0YSh0c2QsIGhlYWQpOwotCQlxbF9yb3RhdGUoJnByb2ZfcmVjZW50X2FsbG9j X2xpc3QsIGxpbmspOwotCX0gZWxzZSB7Ci0JCS8qIE90aGVyd2lzZSBtYWtlIHVzZSBvZiB0aGUg bmV3IG5vZGUuICovCi0JCWFzc2VydChwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRzZCkgPT0g LTEgfHwKLQkJICAgIHByb2ZfcmVjZW50X2FsbG9jX2NvdW50IDwgcHJvZl9yZWNlbnRfYWxsb2Nf bWF4X2dldCh0c2QpKTsKLQkJaWYgKHJlc2VydmUgPT0gTlVMTCkgewotCQkJZ290byBsYWJlbF9y b2xsYmFjazsKLQkJfQotCQlxbF9lbG1fbmV3KHJlc2VydmUsIGxpbmspOwotCQlxbF90YWlsX2lu c2VydCgmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwgcmVzZXJ2ZSwgbGluayk7Ci0JCXJlc2VydmUg PSBOVUxMOwotCQlvbGRfYWxsb2NfdGN0eCA9IE5VTEw7Ci0JCW9sZF9kYWxsb2NfdGN0eCA9IE5V TEw7Ci0JCSsrcHJvZl9yZWNlbnRfYWxsb2NfY291bnQ7Ci0JfQotCi0JLyogRmlsbCBjb250ZW50 IGludG8gdGhlIHRhaWwgbm9kZS4gKi8KLQlwcm9mX3JlY2VudF90ICp0YWlsID0gcWxfbGFzdCgm cHJvZl9yZWNlbnRfYWxsb2NfbGlzdCwgbGluayk7Ci0JYXNzZXJ0KHRhaWwgIT0gTlVMTCk7Ci0J dGFpbC0+c2l6ZSA9IHNpemU7Ci0JdGFpbC0+dXNpemUgPSB1c2l6ZTsKLQluc3RpbWVfY29weSgm dGFpbC0+YWxsb2NfdGltZSwgZWRhdGFfcHJvZl9hbGxvY190aW1lX2dldChlZGF0YSkpOwotCXRh aWwtPmFsbG9jX3RjdHggPSB0Y3R4OwotCW5zdGltZV9pbml0X3plcm8oJnRhaWwtPmRhbGxvY190 aW1lKTsKLQl0YWlsLT5kYWxsb2NfdGN0eCA9IE5VTEw7Ci0JZWRhdGFfcHJvZl9yZWNlbnRfYWxs b2Nfc2V0KHRzZCwgZWRhdGEsIHRhaWwpOwotCi0JYXNzZXJ0KCFwcm9mX3JlY2VudF9hbGxvY19p c19lbXB0eSh0c2QpKTsKLQlwcm9mX3JlY2VudF9hbGxvY19hc3NlcnRfY291bnQodHNkKTsKLQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgp OwotCi0JaWYgKHJlc2VydmUgIT0gTlVMTCkgewotCQlwcm9mX3JlY2VudF9mcmVlX25vZGUodHNk X3RzZG4odHNkKSwgcmVzZXJ2ZSk7Ci0JfQotCi0JLyoKLQkgKiBBc3luY2hyb25vdXNseSBoYW5k bGUgdGhlIHRjdHggb2YgdGhlIG9sZCBub2RlLCBzbyB0aGF0IHRoZXJlJ3Mgbm8KLQkgKiBzaW11 bHRhbmVvdXMgaG9sZGluZ3Mgb2YgcHJvZl9yZWNlbnRfYWxsb2NfbXR4IGFuZCB0ZGF0YS0+bG9j ay4KLQkgKiBJbiB0aGUgd29yc3QgY2FzZSB0aGlzIG1heSBkZWxheSB0aGUgdGN0eCByZWxlYXNl IGJ1dCBpdCdzIGJldHRlcgotCSAqIHRoYW4gaG9sZGluZyBwcm9mX3JlY2VudF9hbGxvY19tdHgg Zm9yIGxvbmdlci4KLQkgKi8KLQlpZiAob2xkX2FsbG9jX3RjdHggIT0gTlVMTCkgewotCQlkZWNy ZW1lbnRfcmVjZW50X2NvdW50KHRzZCwgb2xkX2FsbG9jX3RjdHgpOwotCX0KLQlpZiAob2xkX2Rh bGxvY190Y3R4ICE9IE5VTEwpIHsKLQkJZGVjcmVtZW50X3JlY2VudF9jb3VudCh0c2QsIG9sZF9k YWxsb2NfdGN0eCk7Ci0JfQotCXJldHVybjsKLQotbGFiZWxfcm9sbGJhY2s6Ci0JYXNzZXJ0KGVk YXRhX3Byb2ZfcmVjZW50X2FsbG9jX2dldCh0c2QsIGVkYXRhKSA9PSBOVUxMKTsKLQlwcm9mX3Jl Y2VudF9hbGxvY19hc3NlcnRfY291bnQodHNkKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90 c2RuKHRzZCksICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOwotCWlmIChyZXNlcnZlICE9IE5VTEwp IHsKLQkJcHJvZl9yZWNlbnRfZnJlZV9ub2RlKHRzZF90c2RuKHRzZCksIHJlc2VydmUpOwotCX0K LQlkZWNyZW1lbnRfcmVjZW50X2NvdW50KHRzZCwgdGN0eCk7Ci19Ci0KLXNzaXplX3QKLXByb2Zf cmVjZW50X2FsbG9jX21heF9jdGxfcmVhZCgpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQkv KiBEb24ndCBib3RoZXIgdG8gYWNxdWlyZSB0aGUgbG9jay4gKi8KLQlyZXR1cm4gcHJvZl9yZWNl bnRfYWxsb2NfbWF4X2dldF9ub19sb2NrKCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX3JlY2Vu dF9hbGxvY19yZXN0b3JlX2xvY2tlZCh0c2RfdCAqdHNkLCBwcm9mX3JlY2VudF9saXN0X3QgKnRv X2RlbGV0ZSkgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkX3RzZG4odHNkKSwgJnBy b2ZfcmVjZW50X2FsbG9jX210eCk7Ci0Jc3NpemVfdCBtYXggPSBwcm9mX3JlY2VudF9hbGxvY19t YXhfZ2V0KHRzZCk7Ci0JaWYgKG1heCA9PSAtMSB8fCBwcm9mX3JlY2VudF9hbGxvY19jb3VudCA8 PSBtYXgpIHsKLQkJLyogRWFzeSBjYXNlIC0gbm8gbmVlZCB0byBhbHRlciB0aGUgbGlzdC4gKi8K LQkJcWxfbmV3KHRvX2RlbGV0ZSk7Ci0JCXByb2ZfcmVjZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0 c2QpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJvZl9yZWNlbnRfdCAqbm9kZTsKLQlxbF9mb3JlYWNo KG5vZGUsICZwcm9mX3JlY2VudF9hbGxvY19saXN0LCBsaW5rKSB7Ci0JCWlmIChwcm9mX3JlY2Vu dF9hbGxvY19jb3VudCA9PSBtYXgpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCXByb2ZfcmVjZW50X2Fs bG9jX2V2aWN0X2VkYXRhKHRzZCwgbm9kZSk7Ci0JCS0tcHJvZl9yZWNlbnRfYWxsb2NfY291bnQ7 Ci0JfQotCWFzc2VydChwcm9mX3JlY2VudF9hbGxvY19jb3VudCA9PSBtYXgpOwotCi0JcWxfbW92 ZSh0b19kZWxldGUsICZwcm9mX3JlY2VudF9hbGxvY19saXN0KTsKLQlpZiAobWF4ID09IDApIHsK LQkJYXNzZXJ0KG5vZGUgPT0gTlVMTCk7Ci0JfSBlbHNlIHsKLQkJYXNzZXJ0KG5vZGUgIT0gTlVM TCk7Ci0JCXFsX3NwbGl0KHRvX2RlbGV0ZSwgbm9kZSwgJnByb2ZfcmVjZW50X2FsbG9jX2xpc3Qs IGxpbmspOwotCX0KLQlhc3NlcnQoIXFsX2VtcHR5KHRvX2RlbGV0ZSkpOwotCXByb2ZfcmVjZW50 X2FsbG9jX2Fzc2VydF9jb3VudCh0c2QpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvZl9yZWNlbnRf YWxsb2NfYXN5bmNfY2xlYW51cCh0c2RfdCAqdHNkLCBwcm9mX3JlY2VudF9saXN0X3QgKnRvX2Rl bGV0ZSkgewotCW1hbGxvY19tdXRleF9hc3NlcnRfbm90X293bmVyKHRzZF90c2RuKHRzZCksICZw cm9mX3JlY2VudF9kdW1wX210eCk7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9ub3Rfb3duZXIodHNk X3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7Ci0Jd2hpbGUgKCFxbF9lbXB0eSh0 b19kZWxldGUpKSB7Ci0JCXByb2ZfcmVjZW50X3QgKm5vZGUgPSBxbF9maXJzdCh0b19kZWxldGUp OwotCQlxbF9yZW1vdmUodG9fZGVsZXRlLCBub2RlLCBsaW5rKTsKLQkJZGVjcmVtZW50X3JlY2Vu dF9jb3VudCh0c2QsIG5vZGUtPmFsbG9jX3RjdHgpOwotCQlpZiAobm9kZS0+ZGFsbG9jX3RjdHgg IT0gTlVMTCkgewotCQkJZGVjcmVtZW50X3JlY2VudF9jb3VudCh0c2QsIG5vZGUtPmRhbGxvY190 Y3R4KTsKLQkJfQotCQlwcm9mX3JlY2VudF9mcmVlX25vZGUodHNkX3RzZG4odHNkKSwgbm9kZSk7 Ci0JfQotfQotCi1zc2l6ZV90Ci1wcm9mX3JlY2VudF9hbGxvY19tYXhfY3RsX3dyaXRlKHRzZF90 ICp0c2QsIHNzaXplX3QgbWF4KSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0JYXNzZXJ0KG1h eCA+PSAtMSk7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50 X2FsbG9jX210eCk7Ci0JcHJvZl9yZWNlbnRfYWxsb2NfYXNzZXJ0X2NvdW50KHRzZCk7Ci0JY29u c3Qgc3NpemVfdCBvbGRfbWF4ID0gcHJvZl9yZWNlbnRfYWxsb2NfbWF4X3VwZGF0ZSh0c2QsIG1h eCk7Ci0JcHJvZl9yZWNlbnRfbGlzdF90IHRvX2RlbGV0ZTsKLQlwcm9mX3JlY2VudF9hbGxvY19y ZXN0b3JlX2xvY2tlZCh0c2QsICZ0b19kZWxldGUpOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNk X3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210eCk7Ci0JcHJvZl9yZWNlbnRfYWxsb2Nf YXN5bmNfY2xlYW51cCh0c2QsICZ0b19kZWxldGUpOwotCXJldHVybiBvbGRfbWF4OwotfQotCi1z dGF0aWMgdm9pZAotcHJvZl9yZWNlbnRfYWxsb2NfZHVtcF9idChlbWl0dGVyX3QgKmVtaXR0ZXIs IHByb2ZfdGN0eF90ICp0Y3R4KSB7Ci0JY2hhciBidF9idWZbMiAqIHNpemVvZihpbnRwdHJfdCkg KyAzXTsKLQljaGFyICpzID0gYnRfYnVmOwotCWFzc2VydCh0Y3R4ICE9IE5VTEwpOwotCXByb2Zf YnRfdCAqYnQgPSAmdGN0eC0+Z2N0eC0+YnQ7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidC0+ bGVuOyArK2kpIHsKLQkJbWFsbG9jX3NucHJpbnRmKGJ0X2J1Ziwgc2l6ZW9mKGJ0X2J1ZiksICIl cCIsIGJ0LT52ZWNbaV0pOwotCQllbWl0dGVyX2pzb25fdmFsdWUoZW1pdHRlciwgZW1pdHRlcl90 eXBlX3N0cmluZywgJnMpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXByb2ZfcmVjZW50X2FsbG9j X2R1bXBfbm9kZShlbWl0dGVyX3QgKmVtaXR0ZXIsIHByb2ZfcmVjZW50X3QgKm5vZGUpIHsKLQll bWl0dGVyX2pzb25fb2JqZWN0X2JlZ2luKGVtaXR0ZXIpOwotCi0JZW1pdHRlcl9qc29uX2t2KGVt aXR0ZXIsICJzaXplIiwgZW1pdHRlcl90eXBlX3NpemUsICZub2RlLT5zaXplKTsKLQllbWl0dGVy X2pzb25fa3YoZW1pdHRlciwgInVzaXplIiwgZW1pdHRlcl90eXBlX3NpemUsICZub2RlLT51c2l6 ZSk7Ci0JYm9vbCByZWxlYXNlZCA9IHByb2ZfcmVjZW50X2FsbG9jX2VkYXRhX2dldF9ub19sb2Nr KG5vZGUpID09IE5VTEw7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJyZWxlYXNlZCIsIGVt aXR0ZXJfdHlwZV9ib29sLCAmcmVsZWFzZWQpOwotCi0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIs ICJhbGxvY190aHJlYWRfdWlkIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKLQkgICAgJm5vZGUtPmFs bG9jX3RjdHgtPnRocl91aWQpOwotCXByb2ZfdGRhdGFfdCAqYWxsb2NfdGRhdGEgPSBub2RlLT5h bGxvY190Y3R4LT50ZGF0YTsKLQlhc3NlcnQoYWxsb2NfdGRhdGEgIT0gTlVMTCk7Ci0JaWYgKGFs bG9jX3RkYXRhLT50aHJlYWRfbmFtZSAhPSBOVUxMKSB7Ci0JCWVtaXR0ZXJfanNvbl9rdihlbWl0 dGVyLCAiYWxsb2NfdGhyZWFkX25hbWUiLAotCQkgICAgZW1pdHRlcl90eXBlX3N0cmluZywgJmFs bG9jX3RkYXRhLT50aHJlYWRfbmFtZSk7Ci0JfQotCXVpbnQ2NF90IGFsbG9jX3RpbWVfbnMgPSBu c3RpbWVfbnMoJm5vZGUtPmFsbG9jX3RpbWUpOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi YWxsb2NfdGltZSIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCi0JICAgICZhbGxvY190aW1lX25zKTsK LQllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgImFsbG9jX3RyYWNlIik7Ci0J cHJvZl9yZWNlbnRfYWxsb2NfZHVtcF9idChlbWl0dGVyLCBub2RlLT5hbGxvY190Y3R4KTsKLQll bWl0dGVyX2pzb25fYXJyYXlfZW5kKGVtaXR0ZXIpOwotCi0JaWYgKHJlbGVhc2VkICYmIG5vZGUt PmRhbGxvY190Y3R4ICE9IE5VTEwpIHsKLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJkYWxs b2NfdGhyZWFkX3VpZCIsCi0JCSAgICBlbWl0dGVyX3R5cGVfdWludDY0LCAmbm9kZS0+ZGFsbG9j X3RjdHgtPnRocl91aWQpOwotCQlwcm9mX3RkYXRhX3QgKmRhbGxvY190ZGF0YSA9IG5vZGUtPmRh bGxvY190Y3R4LT50ZGF0YTsKLQkJYXNzZXJ0KGRhbGxvY190ZGF0YSAhPSBOVUxMKTsKLQkJaWYg KGRhbGxvY190ZGF0YS0+dGhyZWFkX25hbWUgIT0gTlVMTCkgewotCQkJZW1pdHRlcl9qc29uX2t2 KGVtaXR0ZXIsICJkYWxsb2NfdGhyZWFkX25hbWUiLAotCQkJICAgIGVtaXR0ZXJfdHlwZV9zdHJp bmcsICZkYWxsb2NfdGRhdGEtPnRocmVhZF9uYW1lKTsKLQkJfQotCQlhc3NlcnQoIW5zdGltZV9l cXVhbHNfemVybygmbm9kZS0+ZGFsbG9jX3RpbWUpKTsKLQkJdWludDY0X3QgZGFsbG9jX3RpbWVf bnMgPSBuc3RpbWVfbnMoJm5vZGUtPmRhbGxvY190aW1lKTsKLQkJZW1pdHRlcl9qc29uX2t2KGVt aXR0ZXIsICJkYWxsb2NfdGltZSIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCi0JCSAgICAmZGFsbG9j X3RpbWVfbnMpOwotCQllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgImRhbGxv Y190cmFjZSIpOwotCQlwcm9mX3JlY2VudF9hbGxvY19kdW1wX2J0KGVtaXR0ZXIsIG5vZGUtPmRh bGxvY190Y3R4KTsKLQkJZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsKLQl9Ci0KLQll bWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsKLX0KLQotI2RlZmluZSBQUk9GX1JFQ0VO VF9QUklOVF9CVUZTSVpFIDY1NTM2Ci1KRU1BTExPQ19DT0xECi12b2lkCi1wcm9mX3JlY2VudF9h bGxvY19kdW1wKHRzZF90ICp0c2QsIHdyaXRlX2NiX3QgKndyaXRlX2NiLCB2b2lkICpjYm9wYXF1 ZSkgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2Ru KHRzZCksICZwcm9mX3JlY2VudF9kdW1wX210eCk7Ci0JYnVmX3dyaXRlcl90IGJ1Zl93cml0ZXI7 Ci0JYnVmX3dyaXRlcl9pbml0KHRzZF90c2RuKHRzZCksICZidWZfd3JpdGVyLCB3cml0ZV9jYiwg Y2JvcGFxdWUsIE5VTEwsCi0JICAgIFBST0ZfUkVDRU5UX1BSSU5UX0JVRlNJWkUpOwotCWVtaXR0 ZXJfdCBlbWl0dGVyOwotCWVtaXR0ZXJfaW5pdCgmZW1pdHRlciwgZW1pdHRlcl9vdXRwdXRfanNv bl9jb21wYWN0LCBidWZfd3JpdGVyX2NiLAotCSAgICAmYnVmX3dyaXRlcik7Ci0JcHJvZl9yZWNl bnRfbGlzdF90IHRlbXBfbGlzdDsKLQotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCks ICZwcm9mX3JlY2VudF9hbGxvY19tdHgpOwotCXByb2ZfcmVjZW50X2FsbG9jX2Fzc2VydF9jb3Vu dCh0c2QpOwotCXNzaXplX3QgZHVtcF9tYXggPSBwcm9mX3JlY2VudF9hbGxvY19tYXhfZ2V0KHRz ZCk7Ci0JcWxfbW92ZSgmdGVtcF9saXN0LCAmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCk7Ci0Jc3Np emVfdCBkdW1wX2NvdW50ID0gcHJvZl9yZWNlbnRfYWxsb2NfY291bnQ7Ci0JcHJvZl9yZWNlbnRf YWxsb2NfY291bnQgPSAwOwotCXByb2ZfcmVjZW50X2FsbG9jX2Fzc2VydF9jb3VudCh0c2QpOwot CW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50X2FsbG9jX210 eCk7Ci0KLQllbWl0dGVyX2JlZ2luKCZlbWl0dGVyKTsKLQl1aW50NjRfdCBzYW1wbGVfaW50ZXJ2 YWwgPSAodWludDY0X3QpMVUgPDwgbGdfcHJvZl9zYW1wbGU7Ci0JZW1pdHRlcl9qc29uX2t2KCZl bWl0dGVyLCAic2FtcGxlX2ludGVydmFsIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKLQkgICAgJnNh bXBsZV9pbnRlcnZhbCk7Ci0JZW1pdHRlcl9qc29uX2t2KCZlbWl0dGVyLCAicmVjZW50X2FsbG9j X21heCIsIGVtaXR0ZXJfdHlwZV9zc2l6ZSwKLQkgICAgJmR1bXBfbWF4KTsKLQllbWl0dGVyX2pz b25fYXJyYXlfa3ZfYmVnaW4oJmVtaXR0ZXIsICJyZWNlbnRfYWxsb2MiKTsKLQlwcm9mX3JlY2Vu dF90ICpub2RlOwotCXFsX2ZvcmVhY2gobm9kZSwgJnRlbXBfbGlzdCwgbGluaykgewotCQlwcm9m X3JlY2VudF9hbGxvY19kdW1wX25vZGUoJmVtaXR0ZXIsIG5vZGUpOwotCX0KLQllbWl0dGVyX2pz b25fYXJyYXlfZW5kKCZlbWl0dGVyKTsKLQllbWl0dGVyX2VuZCgmZW1pdHRlcik7Ci0KLQltYWxs b2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9yZWNlbnRfYWxsb2NfbXR4KTsKLQlw cm9mX3JlY2VudF9hbGxvY19hc3NlcnRfY291bnQodHNkKTsKLQlxbF9jb25jYXQoJnRlbXBfbGlz dCwgJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QsIGxpbmspOwotCXFsX21vdmUoJnByb2ZfcmVjZW50 X2FsbG9jX2xpc3QsICZ0ZW1wX2xpc3QpOwotCXByb2ZfcmVjZW50X2FsbG9jX2NvdW50ICs9IGR1 bXBfY291bnQ7Ci0JcHJvZl9yZWNlbnRfYWxsb2NfcmVzdG9yZV9sb2NrZWQodHNkLCAmdGVtcF9s aXN0KTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX3JlY2VudF9h bGxvY19tdHgpOwotCi0JYnVmX3dyaXRlcl90ZXJtaW5hdGUodHNkX3RzZG4odHNkKSwgJmJ1Zl93 cml0ZXIpOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfcmVjZW50 X2R1bXBfbXR4KTsKLQotCXByb2ZfcmVjZW50X2FsbG9jX2FzeW5jX2NsZWFudXAodHNkLCAmdGVt cF9saXN0KTsKLX0KLSN1bmRlZiBQUk9GX1JFQ0VOVF9QUklOVF9CVUZTSVpFCi0KLWJvb2wKLXBy b2ZfcmVjZW50X2luaXQoKSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0JcHJvZl9yZWNlbnRf YWxsb2NfbWF4X2luaXQoKTsKLQotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmcHJvZl9yZWNlbnRf YWxsb2NfbXR4LCAicHJvZl9yZWNlbnRfYWxsb2MiLAotCSAgICBXSVRORVNTX1JBTktfUFJPRl9S RUNFTlRfQUxMT0MsIG1hbGxvY19tdXRleF9yYW5rX2V4Y2x1c2l2ZSkpIHsKLQkJcmV0dXJuIHRy dWU7Ci0JfQotCi0JaWYgKG1hbGxvY19tdXRleF9pbml0KCZwcm9mX3JlY2VudF9kdW1wX210eCwg InByb2ZfcmVjZW50X2R1bXAiLAotCSAgICBXSVRORVNTX1JBTktfUFJPRl9SRUNFTlRfRFVNUCwg bWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlx bF9uZXcoJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QpOwotCi0JcmV0dXJuIGZhbHNlOwotfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9m X3N0YXRzLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvcHJv Zl9zdGF0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDFhNTA2Li4wMDAwMDAw Ci0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9wcm9mX3N0 YXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcHJvZl9zdGF0cy5oIgotCi1ib29sIG9wdF9wcm9mX3N0YXRzID0gZmFsc2U7Ci1tYWxs b2NfbXV0ZXhfdCBwcm9mX3N0YXRzX210eDsKLXN0YXRpYyBwcm9mX3N0YXRzX3QgcHJvZl9zdGF0 c19saXZlW1BST0ZfU0NfTlNJWkVTXTsKLXN0YXRpYyBwcm9mX3N0YXRzX3QgcHJvZl9zdGF0c19h Y2N1bVtQUk9GX1NDX05TSVpFU107Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX3N0YXRzX2VudGVyKHRz ZF90ICp0c2QsIHN6aW5kX3QgaW5kKSB7Ci0JYXNzZXJ0KG9wdF9wcm9mICYmIG9wdF9wcm9mX3N0 YXRzKTsKLQlhc3NlcnQoaW5kIDwgU0NfTlNJWkVTKTsKLQltYWxsb2NfbXV0ZXhfbG9jayh0c2Rf dHNkbih0c2QpLCAmcHJvZl9zdGF0c19tdHgpOwotfQotCi1zdGF0aWMgdm9pZAotcHJvZl9zdGF0 c19sZWF2ZSh0c2RfdCAqdHNkKSB7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNkbih0c2Qp LCAmcHJvZl9zdGF0c19tdHgpOwotfQotCi12b2lkCi1wcm9mX3N0YXRzX2luYyh0c2RfdCAqdHNk LCBzemluZF90IGluZCwgc2l6ZV90IHNpemUpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlw cm9mX3N0YXRzX2VudGVyKHRzZCwgaW5kKTsKLQlwcm9mX3N0YXRzX2xpdmVbaW5kXS5yZXFfc3Vt ICs9IHNpemU7Ci0JcHJvZl9zdGF0c19saXZlW2luZF0uY291bnQrKzsKLQlwcm9mX3N0YXRzX2Fj Y3VtW2luZF0ucmVxX3N1bSArPSBzaXplOwotCXByb2Zfc3RhdHNfYWNjdW1baW5kXS5jb3VudCsr OwotCXByb2Zfc3RhdHNfbGVhdmUodHNkKTsKLX0KLQotdm9pZAotcHJvZl9zdGF0c19kZWModHNk X3QgKnRzZCwgc3ppbmRfdCBpbmQsIHNpemVfdCBzaXplKSB7Ci0JY2Fzc2VydChjb25maWdfcHJv Zik7Ci0JcHJvZl9zdGF0c19lbnRlcih0c2QsIGluZCk7Ci0JcHJvZl9zdGF0c19saXZlW2luZF0u cmVxX3N1bSAtPSBzaXplOwotCXByb2Zfc3RhdHNfbGl2ZVtpbmRdLmNvdW50LS07Ci0JcHJvZl9z dGF0c19sZWF2ZSh0c2QpOwotfQotCi12b2lkCi1wcm9mX3N0YXRzX2dldF9saXZlKHRzZF90ICp0 c2QsIHN6aW5kX3QgaW5kLCBwcm9mX3N0YXRzX3QgKnN0YXRzKSB7Ci0JY2Fzc2VydChjb25maWdf cHJvZik7Ci0JcHJvZl9zdGF0c19lbnRlcih0c2QsIGluZCk7Ci0JbWVtY3B5KHN0YXRzLCAmcHJv Zl9zdGF0c19saXZlW2luZF0sIHNpemVvZihwcm9mX3N0YXRzX3QpKTsKLQlwcm9mX3N0YXRzX2xl YXZlKHRzZCk7Ci19Ci0KLXZvaWQKLXByb2Zfc3RhdHNfZ2V0X2FjY3VtKHRzZF90ICp0c2QsIHN6 aW5kX3QgaW5kLCBwcm9mX3N0YXRzX3QgKnN0YXRzKSB7Ci0JY2Fzc2VydChjb25maWdfcHJvZik7 Ci0JcHJvZl9zdGF0c19lbnRlcih0c2QsIGluZCk7Ci0JbWVtY3B5KHN0YXRzLCAmcHJvZl9zdGF0 c19hY2N1bVtpbmRdLCBzaXplb2YocHJvZl9zdGF0c190KSk7Ci0JcHJvZl9zdGF0c19sZWF2ZSh0 c2QpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3NyYy9wcm9mX3N5cy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL3Byb2Zfc3lzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZjFmNWIu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3Jj L3Byb2Zfc3lzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjkgKzAsMCBAQAotI2RlZmluZSBKRU1B TExPQ19QUk9GX1NZU19DXwotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3By ZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxf aW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2J1Zl93cml0ZXIuaCIK LSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9jdGwuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9p bnRlcm5hbC9wcm9mX2RhdGEuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N5 cy5oIgotCi0jaWZkZWYgSkVNQUxMT0NfUFJPRl9MSUJVTldJTkQKLSNkZWZpbmUgVU5XX0xPQ0FM X09OTFkKLSNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KLSNlbmRpZgotCi0jaWZkZWYgSkVNQUxMT0Nf UFJPRl9MSUJHQ0MKLS8qCi0gKiBXZSBoYXZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSAtLSBqZW1h bGxvY19pbnRlcm5hbC5oIHRlbGxzIHVzIGlmIHdlIHNob3VsZAotICogdXNlIGxpYmdjYydzIHVu d2luZGluZyBmdW5jdGlvbmFsaXR5LCBidXQgYWZ0ZXIgd2UndmUgaW5jbHVkZWQgdGhhdCwgd2Un dmUKLSAqIGFscmVhZHkgaG9va2VkIF9VbndpbmRfQmFja3RyYWNlLiAgV2UnbGwgdGVtcG9yYXJp bHkgZGlzYWJsZSBob29raW5nLgotICovCi0jdW5kZWYgX1Vud2luZF9CYWNrdHJhY2UKLSNpbmNs dWRlIDx1bndpbmQuaD4KLSNkZWZpbmUgX1Vud2luZF9CYWNrdHJhY2UgSkVNQUxMT0NfVEVTVF9I T09LKF9VbndpbmRfQmFja3RyYWNlLCB0ZXN0X2hvb2tzX2xpYmNfaG9vaykKLSNlbmRpZgotCi0v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotCi1tYWxsb2NfbXV0ZXhfdCBwcm9mX2R1bXBfZmlsZW5h bWVfbXR4OwotCi1ib29sIHByb2ZfZG9fbW9jayA9IGZhbHNlOwotCi1zdGF0aWMgdWludDY0X3Qg cHJvZl9kdW1wX3NlcTsKLXN0YXRpYyB1aW50NjRfdCBwcm9mX2R1bXBfaXNlcTsKLXN0YXRpYyB1 aW50NjRfdCBwcm9mX2R1bXBfbXNlcTsKLXN0YXRpYyB1aW50NjRfdCBwcm9mX2R1bXBfdXNlcTsK LQotc3RhdGljIGNoYXIgKnByb2ZfcHJlZml4ID0gTlVMTDsKLQotLyogVGhlIGZhbGxiYWNrIGFs bG9jYXRvciBwcm9maWxpbmcgZnVuY3Rpb25hbGl0eSB3aWxsIHVzZS4gKi8KLWJhc2VfdCAqcHJv Zl9iYXNlOwotCi12b2lkCi1idF9pbml0KHByb2ZfYnRfdCAqYnQsIHZvaWQgKip2ZWMpIHsKLQlj YXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQotCWJ0LT52ZWMgPSB2ZWM7Ci0JYnQtPmxlbiA9IDA7Ci19 Ci0KLSNpZmRlZiBKRU1BTExPQ19QUk9GX0xJQlVOV0lORAotc3RhdGljIHZvaWQKLXByb2ZfYmFj a3RyYWNlX2ltcGwodm9pZCAqKnZlYywgdW5zaWduZWQgKmxlbiwgdW5zaWduZWQgbWF4X2xlbikg ewotCWludCBuZnJhbWVzOwotCi0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0JYXNzZXJ0KCpsZW4g PT0gMCk7Ci0JYXNzZXJ0KHZlYyAhPSBOVUxMKTsKLQlhc3NlcnQobWF4X2xlbiA9PSBQUk9GX0JU X01BWCk7Ci0KLQluZnJhbWVzID0gdW53X2JhY2t0cmFjZSh2ZWMsIFBST0ZfQlRfTUFYKTsKLQlp ZiAobmZyYW1lcyA8PSAwKSB7Ci0JCXJldHVybjsKLQl9Ci0JKmxlbiA9IG5mcmFtZXM7Ci19Ci0j ZWxpZiAoZGVmaW5lZChKRU1BTExPQ19QUk9GX0xJQkdDQykpCi1zdGF0aWMgX1Vud2luZF9SZWFz b25fQ29kZQotcHJvZl91bndpbmRfaW5pdF9jYWxsYmFjayhzdHJ1Y3QgX1Vud2luZF9Db250ZXh0 ICpjb250ZXh0LCB2b2lkICphcmcpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQotCXJldHVy biBfVVJDX05PX1JFQVNPTjsKLX0KLQotc3RhdGljIF9VbndpbmRfUmVhc29uX0NvZGUKLXByb2Zf dW53aW5kX2NhbGxiYWNrKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKmNvbnRleHQsIHZvaWQgKmFy ZykgewotCXByb2ZfdW53aW5kX2RhdGFfdCAqZGF0YSA9IChwcm9mX3Vud2luZF9kYXRhX3QgKilh cmc7Ci0Jdm9pZCAqaXA7Ci0KLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQotCWlwID0gKHZvaWQg KilfVW53aW5kX0dldElQKGNvbnRleHQpOwotCWlmIChpcCA9PSBOVUxMKSB7Ci0JCXJldHVybiBf VVJDX0VORF9PRl9TVEFDSzsKLQl9Ci0JZGF0YS0+dmVjWypkYXRhLT5sZW5dID0gaXA7Ci0JKCpk YXRhLT5sZW4pKys7Ci0JaWYgKCpkYXRhLT5sZW4gPT0gZGF0YS0+bWF4KSB7Ci0JCXJldHVybiBf VVJDX0VORF9PRl9TVEFDSzsKLQl9Ci0KLQlyZXR1cm4gX1VSQ19OT19SRUFTT047Ci19Ci0KLXN0 YXRpYyB2b2lkCi1wcm9mX2JhY2t0cmFjZV9pbXBsKHZvaWQgKip2ZWMsIHVuc2lnbmVkICpsZW4s IHVuc2lnbmVkIG1heF9sZW4pIHsKLQlwcm9mX3Vud2luZF9kYXRhX3QgZGF0YSA9IHt2ZWMsIGxl biwgbWF4X2xlbn07Ci0KLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlhc3NlcnQodmVjICE9IE5V TEwpOwotCWFzc2VydChtYXhfbGVuID09IFBST0ZfQlRfTUFYKTsKLQotCV9VbndpbmRfQmFja3Ry YWNlKHByb2ZfdW53aW5kX2NhbGxiYWNrLCAmZGF0YSk7Ci19Ci0jZWxpZiAoZGVmaW5lZChKRU1B TExPQ19QUk9GX0dDQykpCi1zdGF0aWMgdm9pZAotcHJvZl9iYWNrdHJhY2VfaW1wbCh2b2lkICoq dmVjLCB1bnNpZ25lZCAqbGVuLCB1bnNpZ25lZCBtYXhfbGVuKSB7Ci0jZGVmaW5lIEJUX0ZSQU1F KGkpCQkJCQkJCVwKLQlpZiAoKGkpIDwgbWF4X2xlbikgewkJCQkJCVwKLQkJdm9pZCAqcDsJCQkJ CQlcCi0JCWlmIChfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcyhpKSA9PSAwKSB7CQkJXAotCQkJcmV0 dXJuOwkJCQkJCVwKLQkJfQkJCQkJCQlcCi0JCXAgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3Mo aSk7CQkJXAotCQlpZiAocCA9PSBOVUxMKSB7CQkJCQlcCi0JCQlyZXR1cm47CQkJCQkJXAotCQl9 CQkJCQkJCVwKLQkJdmVjWyhpKV0gPSBwOwkJCQkJCVwKLQkJKmxlbiA9IChpKSArIDE7CQkJCQkJ XAotCX0gZWxzZSB7CQkJCQkJCVwKLQkJcmV0dXJuOwkJCQkJCQlcCi0JfQotCi0JY2Fzc2VydChj b25maWdfcHJvZik7Ci0JYXNzZXJ0KHZlYyAhPSBOVUxMKTsKLQlhc3NlcnQobWF4X2xlbiA9PSBQ Uk9GX0JUX01BWCk7Ci0KLQlCVF9GUkFNRSgwKQotCUJUX0ZSQU1FKDEpCi0JQlRfRlJBTUUoMikK LQlCVF9GUkFNRSgzKQotCUJUX0ZSQU1FKDQpCi0JQlRfRlJBTUUoNSkKLQlCVF9GUkFNRSg2KQot CUJUX0ZSQU1FKDcpCi0JQlRfRlJBTUUoOCkKLQlCVF9GUkFNRSg5KQotCi0JQlRfRlJBTUUoMTAp Ci0JQlRfRlJBTUUoMTEpCi0JQlRfRlJBTUUoMTIpCi0JQlRfRlJBTUUoMTMpCi0JQlRfRlJBTUUo MTQpCi0JQlRfRlJBTUUoMTUpCi0JQlRfRlJBTUUoMTYpCi0JQlRfRlJBTUUoMTcpCi0JQlRfRlJB TUUoMTgpCi0JQlRfRlJBTUUoMTkpCi0KLQlCVF9GUkFNRSgyMCkKLQlCVF9GUkFNRSgyMSkKLQlC VF9GUkFNRSgyMikKLQlCVF9GUkFNRSgyMykKLQlCVF9GUkFNRSgyNCkKLQlCVF9GUkFNRSgyNSkK LQlCVF9GUkFNRSgyNikKLQlCVF9GUkFNRSgyNykKLQlCVF9GUkFNRSgyOCkKLQlCVF9GUkFNRSgy OSkKLQotCUJUX0ZSQU1FKDMwKQotCUJUX0ZSQU1FKDMxKQotCUJUX0ZSQU1FKDMyKQotCUJUX0ZS QU1FKDMzKQotCUJUX0ZSQU1FKDM0KQotCUJUX0ZSQU1FKDM1KQotCUJUX0ZSQU1FKDM2KQotCUJU X0ZSQU1FKDM3KQotCUJUX0ZSQU1FKDM4KQotCUJUX0ZSQU1FKDM5KQotCi0JQlRfRlJBTUUoNDAp Ci0JQlRfRlJBTUUoNDEpCi0JQlRfRlJBTUUoNDIpCi0JQlRfRlJBTUUoNDMpCi0JQlRfRlJBTUUo NDQpCi0JQlRfRlJBTUUoNDUpCi0JQlRfRlJBTUUoNDYpCi0JQlRfRlJBTUUoNDcpCi0JQlRfRlJB TUUoNDgpCi0JQlRfRlJBTUUoNDkpCi0KLQlCVF9GUkFNRSg1MCkKLQlCVF9GUkFNRSg1MSkKLQlC VF9GUkFNRSg1MikKLQlCVF9GUkFNRSg1MykKLQlCVF9GUkFNRSg1NCkKLQlCVF9GUkFNRSg1NSkK LQlCVF9GUkFNRSg1NikKLQlCVF9GUkFNRSg1NykKLQlCVF9GUkFNRSg1OCkKLQlCVF9GUkFNRSg1 OSkKLQotCUJUX0ZSQU1FKDYwKQotCUJUX0ZSQU1FKDYxKQotCUJUX0ZSQU1FKDYyKQotCUJUX0ZS QU1FKDYzKQotCUJUX0ZSQU1FKDY0KQotCUJUX0ZSQU1FKDY1KQotCUJUX0ZSQU1FKDY2KQotCUJU X0ZSQU1FKDY3KQotCUJUX0ZSQU1FKDY4KQotCUJUX0ZSQU1FKDY5KQotCi0JQlRfRlJBTUUoNzAp Ci0JQlRfRlJBTUUoNzEpCi0JQlRfRlJBTUUoNzIpCi0JQlRfRlJBTUUoNzMpCi0JQlRfRlJBTUUo NzQpCi0JQlRfRlJBTUUoNzUpCi0JQlRfRlJBTUUoNzYpCi0JQlRfRlJBTUUoNzcpCi0JQlRfRlJB TUUoNzgpCi0JQlRfRlJBTUUoNzkpCi0KLQlCVF9GUkFNRSg4MCkKLQlCVF9GUkFNRSg4MSkKLQlC VF9GUkFNRSg4MikKLQlCVF9GUkFNRSg4MykKLQlCVF9GUkFNRSg4NCkKLQlCVF9GUkFNRSg4NSkK LQlCVF9GUkFNRSg4NikKLQlCVF9GUkFNRSg4NykKLQlCVF9GUkFNRSg4OCkKLQlCVF9GUkFNRSg4 OSkKLQotCUJUX0ZSQU1FKDkwKQotCUJUX0ZSQU1FKDkxKQotCUJUX0ZSQU1FKDkyKQotCUJUX0ZS QU1FKDkzKQotCUJUX0ZSQU1FKDk0KQotCUJUX0ZSQU1FKDk1KQotCUJUX0ZSQU1FKDk2KQotCUJU X0ZSQU1FKDk3KQotCUJUX0ZSQU1FKDk4KQotCUJUX0ZSQU1FKDk5KQotCi0JQlRfRlJBTUUoMTAw KQotCUJUX0ZSQU1FKDEwMSkKLQlCVF9GUkFNRSgxMDIpCi0JQlRfRlJBTUUoMTAzKQotCUJUX0ZS QU1FKDEwNCkKLQlCVF9GUkFNRSgxMDUpCi0JQlRfRlJBTUUoMTA2KQotCUJUX0ZSQU1FKDEwNykK LQlCVF9GUkFNRSgxMDgpCi0JQlRfRlJBTUUoMTA5KQotCi0JQlRfRlJBTUUoMTEwKQotCUJUX0ZS QU1FKDExMSkKLQlCVF9GUkFNRSgxMTIpCi0JQlRfRlJBTUUoMTEzKQotCUJUX0ZSQU1FKDExNCkK LQlCVF9GUkFNRSgxMTUpCi0JQlRfRlJBTUUoMTE2KQotCUJUX0ZSQU1FKDExNykKLQlCVF9GUkFN RSgxMTgpCi0JQlRfRlJBTUUoMTE5KQotCi0JQlRfRlJBTUUoMTIwKQotCUJUX0ZSQU1FKDEyMSkK LQlCVF9GUkFNRSgxMjIpCi0JQlRfRlJBTUUoMTIzKQotCUJUX0ZSQU1FKDEyNCkKLQlCVF9GUkFN RSgxMjUpCi0JQlRfRlJBTUUoMTI2KQotCUJUX0ZSQU1FKDEyNykKLSN1bmRlZiBCVF9GUkFNRQot fQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1wcm9mX2JhY2t0cmFjZV9pbXBsKHZvaWQgKip2ZWMsIHVu c2lnbmVkICpsZW4sIHVuc2lnbmVkIG1heF9sZW4pIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsK LQlub3RfcmVhY2hlZCgpOwotfQotI2VuZGlmCi0KLXZvaWQKLXByb2ZfYmFja3RyYWNlKHRzZF90 ICp0c2QsIHByb2ZfYnRfdCAqYnQpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlwcm9mX2Jh Y2t0cmFjZV9ob29rX3QgcHJvZl9iYWNrdHJhY2VfaG9vayA9IHByb2ZfYmFja3RyYWNlX2hvb2tf Z2V0KCk7Ci0JYXNzZXJ0KHByb2ZfYmFja3RyYWNlX2hvb2sgIT0gTlVMTCk7Ci0KLQlwcmVfcmVl bnRyYW5jeSh0c2QsIE5VTEwpOwotCXByb2ZfYmFja3RyYWNlX2hvb2soYnQtPnZlYywgJmJ0LT5s ZW4sIFBST0ZfQlRfTUFYKTsKLQlwb3N0X3JlZW50cmFuY3kodHNkKTsKLX0KLQotdm9pZAotcHJv Zl9ob29rc19pbml0KCkgewotCXByb2ZfYmFja3RyYWNlX2hvb2tfc2V0KCZwcm9mX2JhY2t0cmFj ZV9pbXBsKTsKLQlwcm9mX2R1bXBfaG9va19zZXQoTlVMTCk7Ci19Ci0KLXZvaWQKLXByb2ZfdW53 aW5kX2luaXQoKSB7Ci0jaWZkZWYgSkVNQUxMT0NfUFJPRl9MSUJHQ0MKLQkvKgotCSAqIENhdXNl IHRoZSBiYWNrdHJhY2luZyBtYWNoaW5lcnkgdG8gYWxsb2NhdGUgaXRzIGludGVybmFsCi0JICog c3RhdGUgYmVmb3JlIGVuYWJsaW5nIHByb2ZpbGluZy4KLQkgKi8KLQlfVW53aW5kX0JhY2t0cmFj ZShwcm9mX3Vud2luZF9pbml0X2NhbGxiYWNrLCBOVUxMKTsKLSNlbmRpZgotfQotCi1zdGF0aWMg aW50Ci1wcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkX2ltcGwoY2hhciAqYnVmLCBzaXplX3QgbGlt aXQpIHsKLSNpZiBkZWZpbmVkKEpFTUFMTE9DX0hBVkVfUFRIUkVBRF9HRVROQU1FX05QKQotCXJl dHVybiBwdGhyZWFkX2dldG5hbWVfbnAocHRocmVhZF9zZWxmKCksIGJ1ZiwgbGltaXQpOwotI2Vs aWYgZGVmaW5lZChKRU1BTExPQ19IQVZFX1BUSFJFQURfR0VUX05BTUVfTlApCi0JcHRocmVhZF9n ZXRfbmFtZV9ucChwdGhyZWFkX3NlbGYoKSwgYnVmLCBsaW1pdCk7Ci0JcmV0dXJuIDA7Ci0jZWxz ZQotCXJldHVybiBFTk9TWVM7Ci0jZW5kaWYKLX0KLXByb2Zfc3lzX3RocmVhZF9uYW1lX3JlYWRf dCAqSkVUX01VVEFCTEUgcHJvZl9zeXNfdGhyZWFkX25hbWVfcmVhZCA9Ci0gICAgcHJvZl9zeXNf dGhyZWFkX25hbWVfcmVhZF9pbXBsOwotCi12b2lkCi1wcm9mX3N5c190aHJlYWRfbmFtZV9mZXRj aCh0c2RfdCAqdHNkKSB7Ci0jZGVmaW5lIFRIUkVBRF9OQU1FX01BWF9MRU4gMTYKLQljaGFyIGJ1 ZltUSFJFQURfTkFNRV9NQVhfTEVOXTsKLQlpZiAoIXByb2Zfc3lzX3RocmVhZF9uYW1lX3JlYWQo YnVmLCBUSFJFQURfTkFNRV9NQVhfTEVOKSkgewotCQlwcm9mX3RocmVhZF9uYW1lX3NldF9pbXBs KHRzZCwgYnVmKTsKLQl9Ci0jdW5kZWYgVEhSRUFEX05BTUVfTUFYX0xFTgotfQotCi1pbnQKLXBy b2ZfZ2V0cGlkKHZvaWQpIHsKLSNpZmRlZiBfV0lOMzIKLQlyZXR1cm4gR2V0Q3VycmVudFByb2Nl c3NJZCgpOwotI2Vsc2UKLQlyZXR1cm4gZ2V0cGlkKCk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFRo aXMgYnVmZmVyIGlzIHJhdGhlciBsYXJnZSBmb3Igc3RhY2sgYWxsb2NhdGlvbiwgc28gdXNlIGEg c2luZ2xlIGJ1ZmZlciBmb3IKLSAqIGFsbCBwcm9maWxlIGR1bXBzOyBwcm90ZWN0ZWQgYnkgcHJv Zl9kdW1wX210eC4KLSAqLwotc3RhdGljIGNoYXIgcHJvZl9kdW1wX2J1ZltQUk9GX0RVTVBfQlVG U0laRV07Ci0KLXR5cGVkZWYgc3RydWN0IHByb2ZfZHVtcF9hcmdfcyBwcm9mX2R1bXBfYXJnX3Q7 Ci1zdHJ1Y3QgcHJvZl9kdW1wX2FyZ19zIHsKLQkvKgotCSAqIFdoZXRoZXIgZXJyb3Igc2hvdWxk IGJlIGhhbmRsZWQgbG9jYWxseTogaWYgdHJ1ZSwgdGhlbiB3ZSBwcmludCBvdXQKLQkgKiBlcnJv ciBtZXNzYWdlIGFzIHdlbGwgYXMgYWJvcnQgKGlmIG9wdF9hYm9ydCBpcyB0cnVlKSB3aGVuIGFu IGVycm9yCi0JICogb2NjdXJyZWQsIGFuZCB3ZSBhbHNvIHJlcG9ydCB0aGUgZXJyb3IgYmFjayB0 byB0aGUgY2FsbGVyIGluIHRoZSBlbmQ7Ci0JICogaWYgZmFsc2UsIHRoZW4gd2Ugb25seSByZXBv cnQgdGhlIGVycm9yIGJhY2sgdG8gdGhlIGNhbGxlciBpbiB0aGUKLQkgKiBlbmQuCi0JICovCi0J Y29uc3QgYm9vbCBoYW5kbGVfZXJyb3JfbG9jYWxseTsKLQkvKgotCSAqIFdoZXRoZXIgdGhlcmUg aGFzIGJlZW4gYW4gZXJyb3IgaW4gdGhlIGR1bXBpbmcgcHJvY2Vzcywgd2hpY2ggY291bGQKLQkg KiBoYXZlIGhhcHBlbmVkIGVpdGhlciBpbiBmaWxlIG9wZW5pbmcgb3IgaW4gZmlsZSB3cml0aW5n LiAgV2hlbiBhbgotCSAqIGVycm9yIGhhcyBhbHJlYWR5IG9jY3VycmVkLCB3ZSB3aWxsIHN0b3Ag ZnVydGhlciB3cml0aW5nIHRvIHRoZSBmaWxlLgotCSAqLwotCWJvb2wgZXJyb3I7Ci0JLyogRmls ZSBkZXNjcmlwdG9yIG9mIHRoZSBkdW1wIGZpbGUuICovCi0JaW50IHByb2ZfZHVtcF9mZDsKLX07 Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX2R1bXBfY2hlY2tfcG9zc2libGVfZXJyb3IocHJvZl9kdW1w X2FyZ190ICphcmcsIGJvb2wgZXJyX2NvbmQsCi0gICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4p IHsKLQlhc3NlcnQoIWFyZy0+ZXJyb3IpOwotCWlmICghZXJyX2NvbmQpIHsKLQkJcmV0dXJuOwot CX0KLQotCWFyZy0+ZXJyb3IgPSB0cnVlOwotCWlmICghYXJnLT5oYW5kbGVfZXJyb3JfbG9jYWxs eSkgewotCQlyZXR1cm47Ci0JfQotCi0JdmFfbGlzdCBhcDsKLQljaGFyIGJ1ZltQUk9GX1BSSU5U Rl9CVUZTSVpFXTsKLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQltYWxsb2NfdnNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci0JbWFsbG9jX3dyaXRl KGJ1Zik7Ci0KLQlpZiAob3B0X2Fib3J0KSB7Ci0JCWFib3J0KCk7Ci0JfQotfQotCi1zdGF0aWMg aW50Ci1wcm9mX2R1bXBfb3Blbl9maWxlX2ltcGwoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBt b2RlKSB7Ci0JcmV0dXJuIGNyZWF0KGZpbGVuYW1lLCBtb2RlKTsKLX0KLXByb2ZfZHVtcF9vcGVu X2ZpbGVfdCAqSkVUX01VVEFCTEUgcHJvZl9kdW1wX29wZW5fZmlsZSA9Ci0gICAgcHJvZl9kdW1w X29wZW5fZmlsZV9pbXBsOwotCi1zdGF0aWMgdm9pZAotcHJvZl9kdW1wX29wZW4ocHJvZl9kdW1w X2FyZ190ICphcmcsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKSB7Ci0JYXJnLT5wcm9mX2R1bXBfZmQg PSBwcm9mX2R1bXBfb3Blbl9maWxlKGZpbGVuYW1lLCAwNjQ0KTsKLQlwcm9mX2R1bXBfY2hlY2tf cG9zc2libGVfZXJyb3IoYXJnLCBhcmctPnByb2ZfZHVtcF9mZCA9PSAtMSwKLQkgICAgIjxqZW1h bGxvYz46IGZhaWxlZCB0byBvcGVuIFwiJXNcIlxuIiwgZmlsZW5hbWUpOwotfQotCi1wcm9mX2R1 bXBfd3JpdGVfZmlsZV90ICpKRVRfTVVUQUJMRSBwcm9mX2R1bXBfd3JpdGVfZmlsZSA9IG1hbGxv Y193cml0ZV9mZDsKLQotc3RhdGljIHZvaWQKLXByb2ZfZHVtcF9mbHVzaCh2b2lkICpvcGFxdWUs IGNvbnN0IGNoYXIgKnMpIHsKLQljYXNzZXJ0KGNvbmZpZ19wcm9mKTsKLQlwcm9mX2R1bXBfYXJn X3QgKmFyZyA9IChwcm9mX2R1bXBfYXJnX3QgKilvcGFxdWU7Ci0JaWYgKCFhcmctPmVycm9yKSB7 Ci0JCXNzaXplX3QgZXJyID0gcHJvZl9kdW1wX3dyaXRlX2ZpbGUoYXJnLT5wcm9mX2R1bXBfZmQs IHMsCi0JCSAgICBzdHJsZW4ocykpOwotCQlwcm9mX2R1bXBfY2hlY2tfcG9zc2libGVfZXJyb3Io YXJnLCBlcnIgPT0gLTEsCi0JCSAgICAiPGplbWFsbG9jPjogZmFpbGVkIHRvIHdyaXRlIGR1cmlu ZyBoZWFwIHByb2ZpbGUgZmx1c2hcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXByb2ZfZHVt cF9jbG9zZShwcm9mX2R1bXBfYXJnX3QgKmFyZykgewotCWlmIChhcmctPnByb2ZfZHVtcF9mZCAh PSAtMSkgewotCQljbG9zZShhcmctPnByb2ZfZHVtcF9mZCk7Ci0JfQotfQotCi0jaWZuZGVmIF9X SU4zMgotSkVNQUxMT0NfRk9STUFUX1BSSU5URigxLCAyKQotc3RhdGljIGludAotcHJvZl9vcGVu X21hcHNfaW50ZXJuYWwoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHsKLQlpbnQgbWZkOwotCXZh X2xpc3QgYXA7Ci0JY2hhciBmaWxlbmFtZVtQQVRIX01BWCArIDFdOwotCi0JdmFfc3RhcnQoYXAs IGZvcm1hdCk7Ci0JbWFsbG9jX3ZzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwg Zm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQotI2lmIGRlZmluZWQoT19DTE9FWEVDKQotCW1m ZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKLSNlbHNlCi0JbWZkID0g b3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwotCWlmIChtZmQgIT0gLTEpIHsKLQkJZmNudGwobWZk LCBGX1NFVEZELCBmY250bChtZmQsIEZfR0VURkQpIHwgRkRfQ0xPRVhFQyk7Ci0JfQotI2VuZGlm Ci0KLQlyZXR1cm4gbWZkOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQKLXByb2ZfZHVtcF9vcGVu X21hcHNfaW1wbCgpIHsKLQlpbnQgbWZkOwotCi0JY2Fzc2VydChjb25maWdfcHJvZik7Ci0jaWYg ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKQotCW1mZCA9IHBy b2Zfb3Blbl9tYXBzX2ludGVybmFsKCIvcHJvYy9jdXJwcm9jL21hcCIpOwotI2VsaWYgZGVmaW5l ZChfV0lOMzIpCi0JbWZkID0gLTE7IC8vIE5vdCBpbXBsZW1lbnRlZAotI2Vsc2UKLQlpbnQgcGlk ID0gcHJvZl9nZXRwaWQoKTsKLQotCW1mZCA9IHByb2Zfb3Blbl9tYXBzX2ludGVybmFsKCIvcHJv Yy8lZC90YXNrLyVkL21hcHMiLCBwaWQsIHBpZCk7Ci0JaWYgKG1mZCA9PSAtMSkgewotCQltZmQg PSBwcm9mX29wZW5fbWFwc19pbnRlcm5hbCgiL3Byb2MvJWQvbWFwcyIsIHBpZCk7Ci0JfQotI2Vu ZGlmCi0JcmV0dXJuIG1mZDsKLX0KLXByb2ZfZHVtcF9vcGVuX21hcHNfdCAqSkVUX01VVEFCTEUg cHJvZl9kdW1wX29wZW5fbWFwcyA9Ci0gICAgcHJvZl9kdW1wX29wZW5fbWFwc19pbXBsOwotCi1z dGF0aWMgc3NpemVfdAotcHJvZl9kdW1wX3JlYWRfbWFwc19jYih2b2lkICpyZWFkX2Nib3BhcXVl LCB2b2lkICpidWYsIHNpemVfdCBsaW1pdCkgewotCWludCBtZmQgPSAqKGludCAqKXJlYWRfY2Jv cGFxdWU7Ci0JYXNzZXJ0KG1mZCAhPSAtMSk7Ci0JcmV0dXJuIG1hbGxvY19yZWFkX2ZkKG1mZCwg YnVmLCBsaW1pdCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wcm9mX2R1bXBfbWFwcyhidWZfd3JpdGVy X3QgKmJ1Zl93cml0ZXIpIHsKLQlpbnQgbWZkID0gcHJvZl9kdW1wX29wZW5fbWFwcygpOwotCWlm IChtZmQgPT0gLTEpIHsKLQkJcmV0dXJuOwotCX0KLQotCWJ1Zl93cml0ZXJfY2IoYnVmX3dyaXRl ciwgIlxuTUFQUEVEX0xJQlJBUklFUzpcbiIpOwotCWJ1Zl93cml0ZXJfcGlwZShidWZfd3JpdGVy LCBwcm9mX2R1bXBfcmVhZF9tYXBzX2NiLCAmbWZkKTsKLQljbG9zZShtZmQpOwotfQotCi1zdGF0 aWMgYm9vbAotcHJvZl9kdW1wKHRzZF90ICp0c2QsIGJvb2wgcHJvcGFnYXRlX2VyciwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsCi0gICAgYm9vbCBsZWFrY2hlY2spIHsKLQljYXNzZXJ0KGNvbmZpZ19w cm9mKTsKLQlhc3NlcnQodHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRzZCkgPT0gMCk7Ci0KLQlw cm9mX3RkYXRhX3QgKiB0ZGF0YSA9IHByb2ZfdGRhdGFfZ2V0KHRzZCwgdHJ1ZSk7Ci0JaWYgKHRk YXRhID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHJvZl9kdW1wX2FyZ190IGFy ZyA9IHsvKiBoYW5kbGVfZXJyb3JfbG9jYWxseSAqLyAhcHJvcGFnYXRlX2VyciwKLQkgICAgLyog ZXJyb3IgKi8gZmFsc2UsIC8qIHByb2ZfZHVtcF9mZCAqLyAtMX07Ci0KLQlwcmVfcmVlbnRyYW5j eSh0c2QsIE5VTEwpOwotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZwcm9mX2R1 bXBfbXR4KTsKLQotCXByb2ZfZHVtcF9vcGVuKCZhcmcsIGZpbGVuYW1lKTsKLQlidWZfd3JpdGVy X3QgYnVmX3dyaXRlcjsKLQlib29sIGVyciA9IGJ1Zl93cml0ZXJfaW5pdCh0c2RfdHNkbih0c2Qp LCAmYnVmX3dyaXRlciwgcHJvZl9kdW1wX2ZsdXNoLAotCSAgICAmYXJnLCBwcm9mX2R1bXBfYnVm LCBQUk9GX0RVTVBfQlVGU0laRSk7Ci0JYXNzZXJ0KCFlcnIpOwotCXByb2ZfZHVtcF9pbXBsKHRz ZCwgYnVmX3dyaXRlcl9jYiwgJmJ1Zl93cml0ZXIsIHRkYXRhLCBsZWFrY2hlY2spOwotCXByb2Zf ZHVtcF9tYXBzKCZidWZfd3JpdGVyKTsKLQlidWZfd3JpdGVyX3Rlcm1pbmF0ZSh0c2RfdHNkbih0 c2QpLCAmYnVmX3dyaXRlcik7Ci0JcHJvZl9kdW1wX2Nsb3NlKCZhcmcpOwotCi0JcHJvZl9kdW1w X2hvb2tfdCBkdW1wX2hvb2sgPSBwcm9mX2R1bXBfaG9va19nZXQoKTsKLQlpZiAoZHVtcF9ob29r ICE9IE5VTEwpIHsKLQkJZHVtcF9ob29rKGZpbGVuYW1lKTsKLQl9Ci0JbWFsbG9jX211dGV4X3Vu bG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9kdW1wX210eCk7Ci0JcG9zdF9yZWVudHJhbmN5KHRz ZCk7Ci0KLQlyZXR1cm4gYXJnLmVycm9yOwotfQotCi0vKgotICogSWYgcHJvZmlsaW5nIGlzIG9m ZiwgdGhlbiBQUk9GX0RVTVBfRklMRU5BTUVfTEVOIGlzIDEsIHNvIHdlJ2xsIGVuZCB1cAotICog Y2FsbGluZyBzdHJuY3B5IHdpdGggYSBzaXplIG9mIDAsIHdoaWNoIHRyaWdnZXJzIGEgLVdzdHJp bmdvcC10cnVuY2F0aW9uCi0gKiB3YXJuaW5nIChzdHJuY3B5IGNhbiBuZXZlciBhY3R1YWxseSBi ZSBjYWxsZWQgaW4gdGhpcyBjYXNlLCBzaW5jZSB3ZSBiYWlsIG91dAotICogbXVjaCBlYXJsaWVy IHdoZW4gY29uZmlnX3Byb2YgaXMgZmFsc2UpLiAgVGhpcyBmdW5jdGlvbiB3b3JrcyBhcm91bmQg dGhlCi0gKiB3YXJuaW5nIHRvIGxldCB1cyBsZWF2ZSB0aGUgd2FybmluZyBvbi4KLSAqLwotc3Rh dGljIGlubGluZSB2b2lkCi1wcm9mX3N0cm5jcHkoY2hhciAqVU5VU0VEIGRlc3QsIGNvbnN0IGNo YXIgKlVOVVNFRCBzcmMsIHNpemVfdCBVTlVTRUQgc2l6ZSkgewotCWNhc3NlcnQoY29uZmlnX3By b2YpOwotI2lmZGVmIEpFTUFMTE9DX1BST0YKLQlzdHJuY3B5KGRlc3QsIHNyYywgc2l6ZSk7Ci0j ZW5kaWYKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotcHJvZl9wcmVmaXhfZ2V0KHRzZG5fdCog dHNkbikgewotCW1hbGxvY19tdXRleF9hc3NlcnRfb3duZXIodHNkbiwgJnByb2ZfZHVtcF9maWxl bmFtZV9tdHgpOwotCi0JcmV0dXJuIHByb2ZfcHJlZml4ID09IE5VTEwgPyBvcHRfcHJvZl9wcmVm aXggOiBwcm9mX3ByZWZpeDsKLX0KLQotc3RhdGljIGJvb2wKLXByb2ZfcHJlZml4X2lzX2VtcHR5 KHRzZG5fdCAqdHNkbikgewotCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZwcm9mX2R1bXBfZmls ZW5hbWVfbXR4KTsKLQlib29sIHJldCA9IChwcm9mX3ByZWZpeF9nZXQodHNkbilbMF0gPT0gJ1ww Jyk7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7 Ci0JcmV0dXJuIHJldDsKLX0KLQotI2RlZmluZSBEVU1QX0ZJTEVOQU1FX0JVRlNJWkUgKFBBVEhf TUFYICsgMSkKLSNkZWZpbmUgVlNFUV9JTlZBTElEIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZm ZikKLXN0YXRpYyB2b2lkCi1wcm9mX2R1bXBfZmlsZW5hbWUodHNkX3QgKnRzZCwgY2hhciAqZmls ZW5hbWUsIGNoYXIgdiwgdWludDY0X3QgdnNlcSkgewotCWNhc3NlcnQoY29uZmlnX3Byb2YpOwot Ci0JYXNzZXJ0KHRzZF9yZWVudHJhbmN5X2xldmVsX2dldCh0c2QpID09IDApOwotCWNvbnN0IGNo YXIgKnByZWZpeCA9IHByb2ZfcHJlZml4X2dldCh0c2RfdHNkbih0c2QpKTsKLQotCWlmICh2c2Vx ICE9IFZTRVFfSU5WQUxJRCkgewotCSAgICAgICAgLyogIjxwcmVmaXg+LjxwaWQ+LjxzZXE+LnY8 dnNlcT4uaGVhcCIgKi8KLQkJbWFsbG9jX3NucHJpbnRmKGZpbGVuYW1lLCBEVU1QX0ZJTEVOQU1F X0JVRlNJWkUsCi0JCSAgICAiJXMuJWQuJSJGTVR1NjQiLiVjJSJGTVR1NjQiLmhlYXAiLCBwcmVm aXgsIHByb2ZfZ2V0cGlkKCksCi0JCSAgICBwcm9mX2R1bXBfc2VxLCB2LCB2c2VxKTsKLQl9IGVs c2UgewotCSAgICAgICAgLyogIjxwcmVmaXg+LjxwaWQ+LjxzZXE+Ljx2Pi5oZWFwIiAqLwotCQlt YWxsb2Nfc25wcmludGYoZmlsZW5hbWUsIERVTVBfRklMRU5BTUVfQlVGU0laRSwKLQkJICAgICIl cy4lZC4lIkZNVHU2NCIuJWMuaGVhcCIsIHByZWZpeCwgcHJvZl9nZXRwaWQoKSwKLQkJICAgIHBy b2ZfZHVtcF9zZXEsIHYpOwotCX0KLQlwcm9mX2R1bXBfc2VxKys7Ci19Ci0KLXZvaWQKLXByb2Zf Z2V0X2RlZmF1bHRfZmlsZW5hbWUodHNkbl90ICp0c2RuLCBjaGFyICpmaWxlbmFtZSwgdWludDY0 X3QgaW5kKSB7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9t dHgpOwotCW1hbGxvY19zbnByaW50ZihmaWxlbmFtZSwgUFJPRl9EVU1QX0ZJTEVOQU1FX0xFTiwK LQkgICAgIiVzLiVkLiUiRk1UdTY0Ii5qc29uIiwgcHJvZl9wcmVmaXhfZ2V0KHRzZG4pLCBwcm9m X2dldHBpZCgpLCBpbmQpOwotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnByb2ZfZHVtcF9m aWxlbmFtZV9tdHgpOwotfQotCi12b2lkCi1wcm9mX2ZkdW1wX2ltcGwodHNkX3QgKnRzZCkgewot CWNoYXIgZmlsZW5hbWVbRFVNUF9GSUxFTkFNRV9CVUZTSVpFXTsKLQotCWFzc2VydCghcHJvZl9w cmVmaXhfaXNfZW1wdHkodHNkX3RzZG4odHNkKSkpOwotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90 c2RuKHRzZCksICZwcm9mX2R1bXBfZmlsZW5hbWVfbXR4KTsKLQlwcm9mX2R1bXBfZmlsZW5hbWUo dHNkLCBmaWxlbmFtZSwgJ2YnLCBWU0VRX0lOVkFMSUQpOwotCW1hbGxvY19tdXRleF91bmxvY2so dHNkX3RzZG4odHNkKSwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOwotCXByb2ZfZHVtcCh0c2Qs IGZhbHNlLCBmaWxlbmFtZSwgb3B0X3Byb2ZfbGVhayk7Ci19Ci0KLWJvb2wKLXByb2ZfcHJlZml4 X3NldCh0c2RuX3QgKnRzZG4sIGNvbnN0IGNoYXIgKnByZWZpeCkgewotCWNhc3NlcnQoY29uZmln X3Byb2YpOwotCWN0bF9tdHhfYXNzZXJ0X2hlbGQodHNkbik7Ci0JbWFsbG9jX211dGV4X2xvY2so dHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOwotCWlmIChwcm9mX3ByZWZpeCA9PSBOVUxM KSB7Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgp OwotCQkvKiBFdmVyeXRoaW5nIGlzIHN0aWxsIGd1YXJkZWQgYnkgY3RsX210eC4gKi8KLQkJY2hh ciAqYnVmZmVyID0gYmFzZV9hbGxvYyh0c2RuLCBwcm9mX2Jhc2UsCi0JCSAgICBQUk9GX0RVTVBf RklMRU5BTUVfTEVOLCBRVUFOVFVNKTsKLQkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCQlyZXR1 cm4gdHJ1ZTsKLQkJfQotCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmcHJvZl9kdW1wX2ZpbGVu YW1lX210eCk7Ci0JCXByb2ZfcHJlZml4ID0gYnVmZmVyOwotCX0KLQlhc3NlcnQocHJvZl9wcmVm aXggIT0gTlVMTCk7Ci0KLQlwcm9mX3N0cm5jcHkocHJvZl9wcmVmaXgsIHByZWZpeCwgUFJPRl9E VU1QX0ZJTEVOQU1FX0xFTiAtIDEpOwotCXByb2ZfcHJlZml4W1BST0ZfRFVNUF9GSUxFTkFNRV9M RU4gLSAxXSA9ICdcMCc7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9kdW1wX2Zp bGVuYW1lX210eCk7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQKLXByb2ZfaWR1bXBfaW1w bCh0c2RfdCAqdHNkKSB7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnByb2Zf ZHVtcF9maWxlbmFtZV9tdHgpOwotCWlmIChwcm9mX3ByZWZpeF9nZXQodHNkX3RzZG4odHNkKSlb MF0gPT0gJ1wwJykgewotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZwcm9m X2R1bXBfZmlsZW5hbWVfbXR4KTsKLQkJcmV0dXJuOwotCX0KLQljaGFyIGZpbGVuYW1lW1BBVEhf TUFYICsgMV07Ci0JcHJvZl9kdW1wX2ZpbGVuYW1lKHRzZCwgZmlsZW5hbWUsICdpJywgcHJvZl9k dW1wX2lzZXEpOwotCXByb2ZfZHVtcF9pc2VxKys7Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2Rf dHNkbih0c2QpLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7Ci0JcHJvZl9kdW1wKHRzZCwgZmFs c2UsIGZpbGVuYW1lLCBmYWxzZSk7Ci19Ci0KLWJvb2wKLXByb2ZfbWR1bXBfaW1wbCh0c2RfdCAq dHNkLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgewotCWNoYXIgZmlsZW5hbWVfYnVmW0RVTVBfRklM RU5BTUVfQlVGU0laRV07Ci0JaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKLQkJLyogTm8gZmlsZW5h bWUgc3BlY2lmaWVkLCBzbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9uZS4gKi8KLQkJbWFsbG9j X211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOwotCQlp ZiAocHJvZl9wcmVmaXhfZ2V0KHRzZF90c2RuKHRzZCkpWzBdID09ICdcMCcpIHsKLQkJCW1hbGxv Y19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOwot CQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJcHJvZl9kdW1wX2ZpbGVuYW1lKHRzZCwgZmlsZW5hbWVf YnVmLCAnbScsIHByb2ZfZHVtcF9tc2VxKTsKLQkJcHJvZl9kdW1wX21zZXErKzsKLQkJbWFsbG9j X211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmcHJvZl9kdW1wX2ZpbGVuYW1lX210eCk7Ci0J CWZpbGVuYW1lID0gZmlsZW5hbWVfYnVmOwotCX0KLQlyZXR1cm4gcHJvZl9kdW1wKHRzZCwgdHJ1 ZSwgZmlsZW5hbWUsIGZhbHNlKTsKLX0KLQotdm9pZAotcHJvZl9nZHVtcF9pbXBsKHRzZF90ICp0 c2QpIHsKLQl0c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2QpOwotCW1hbGxvY19tdXRleF9sb2Nr KHRzZG4sICZwcm9mX2R1bXBfZmlsZW5hbWVfbXR4KTsKLQlpZiAocHJvZl9wcmVmaXhfZ2V0KHRz ZG4pWzBdID09ICdcMCcpIHsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmcHJvZl9kdW1w X2ZpbGVuYW1lX210eCk7Ci0JCXJldHVybjsKLQl9Ci0JY2hhciBmaWxlbmFtZVtEVU1QX0ZJTEVO QU1FX0JVRlNJWkVdOwotCXByb2ZfZHVtcF9maWxlbmFtZSh0c2QsIGZpbGVuYW1lLCAndScsIHBy b2ZfZHVtcF91c2VxKTsKLQlwcm9mX2R1bXBfdXNlcSsrOwotCW1hbGxvY19tdXRleF91bmxvY2so dHNkbiwgJnByb2ZfZHVtcF9maWxlbmFtZV9tdHgpOwotCXByb2ZfZHVtcCh0c2QsIGZhbHNlLCBm aWxlbmFtZSwgZmFsc2UpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3NyYy9wc3NldC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvc3JjL3Bzc2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlh OGYwNTQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL3Bzc2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3Bzc2V0LmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9m Yi5oIgotCi12b2lkCi1wc3NldF9pbml0KHBzc2V0X3QgKnBzc2V0KSB7Ci0JZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IFBTU0VUX05QU0laRVM7IGkrKykgewotCQlocGRhdGFfYWdlX2hlYXBfbmV3 KCZwc3NldC0+cGFnZXNsYWJzW2ldKTsKLQl9Ci0JZmJfaW5pdChwc3NldC0+cGFnZXNsYWJfYml0 bWFwLCBQU1NFVF9OUFNJWkVTKTsKLQltZW1zZXQoJnBzc2V0LT5tZXJnZWRfc3RhdHMsIDAsIHNp emVvZihwc3NldC0+bWVyZ2VkX3N0YXRzKSk7Ci0JbWVtc2V0KCZwc3NldC0+c3RhdHMsIDAsIHNp emVvZihwc3NldC0+c3RhdHMpKTsKLQlocGRhdGFfZW1wdHlfbGlzdF9pbml0KCZwc3NldC0+ZW1w dHkpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgUFNTRVRfTlBVUkdFX0xJU1RTOyBpKyspIHsKLQkJ aHBkYXRhX3B1cmdlX2xpc3RfaW5pdCgmcHNzZXQtPnRvX3B1cmdlW2ldKTsKLQl9Ci0JZmJfaW5p dChwc3NldC0+cHVyZ2VfYml0bWFwLCBQU1NFVF9OUFVSR0VfTElTVFMpOwotCWhwZGF0YV9odWdp ZnlfbGlzdF9pbml0KCZwc3NldC0+dG9faHVnaWZ5KTsKLX0KLQotc3RhdGljIHZvaWQKLXBzc2V0 X2Jpbl9zdGF0c19hY2N1bShwc3NldF9iaW5fc3RhdHNfdCAqZHN0LCBwc3NldF9iaW5fc3RhdHNf dCAqc3JjKSB7Ci0JZHN0LT5ucGFnZXNsYWJzICs9IHNyYy0+bnBhZ2VzbGFiczsKLQlkc3QtPm5h Y3RpdmUgKz0gc3JjLT5uYWN0aXZlOwotCWRzdC0+bmRpcnR5ICs9IHNyYy0+bmRpcnR5OwotfQot Ci12b2lkCi1wc3NldF9zdGF0c19hY2N1bShwc3NldF9zdGF0c190ICpkc3QsIHBzc2V0X3N0YXRz X3QgKnNyYykgewotCXBzc2V0X2Jpbl9zdGF0c19hY2N1bSgmZHN0LT5mdWxsX3NsYWJzWzBdLCAm c3JjLT5mdWxsX3NsYWJzWzBdKTsKLQlwc3NldF9iaW5fc3RhdHNfYWNjdW0oJmRzdC0+ZnVsbF9z bGFic1sxXSwgJnNyYy0+ZnVsbF9zbGFic1sxXSk7Ci0JcHNzZXRfYmluX3N0YXRzX2FjY3VtKCZk c3QtPmVtcHR5X3NsYWJzWzBdLCAmc3JjLT5lbXB0eV9zbGFic1swXSk7Ci0JcHNzZXRfYmluX3N0 YXRzX2FjY3VtKCZkc3QtPmVtcHR5X3NsYWJzWzFdLCAmc3JjLT5lbXB0eV9zbGFic1sxXSk7Ci0J Zm9yIChwc3ppbmRfdCBpID0gMDsgaSA8IFBTU0VUX05QU0laRVM7IGkrKykgewotCQlwc3NldF9i aW5fc3RhdHNfYWNjdW0oJmRzdC0+bm9uZnVsbF9zbGFic1tpXVswXSwKLQkJICAgICZzcmMtPm5v bmZ1bGxfc2xhYnNbaV1bMF0pOwotCQlwc3NldF9iaW5fc3RhdHNfYWNjdW0oJmRzdC0+bm9uZnVs bF9zbGFic1tpXVsxXSwKLQkJICAgICZzcmMtPm5vbmZ1bGxfc2xhYnNbaV1bMV0pOwotCX0KLX0K LQotLyoKLSAqIFRoZSBzdGF0cyBtYWludGVuYW5jZSBzdHJhdGVneSBpcyB0byByZW1vdmUgYSBw YWdlc2xhYidzIGNvbnRyaWJ1dGlvbiB0byB0aGUKLSAqIHN0YXRzIHdoZW4gd2UgY2FsbCBwc3Nl dF91cGRhdGVfYmVnaW4sIGFuZCByZS1hZGQgaXQgKHRvIGEgcG90ZW50aWFsbHkgbmV3Ci0gKiBi aW4pIHdoZW4gd2UgY2FsbCBwc3NldF91cGRhdGVfZW5kLgotICovCi1KRU1BTExPQ19BTFdBWVNf SU5MSU5FIHZvaWQKLXBzc2V0X2Jpbl9zdGF0c19pbnNlcnRfcmVtb3ZlKHBzc2V0X3QgKnBzc2V0 LCBwc3NldF9iaW5fc3RhdHNfdCAqYmluc3RhdHMsCi0gICAgaHBkYXRhX3QgKnBzLCBib29sIGlu c2VydCkgewotCXNpemVfdCBtdWwgPSBpbnNlcnQgPyAoc2l6ZV90KTEgOiAoc2l6ZV90KS0xOwot CXNpemVfdCBodWdlX2lkeCA9IChzaXplX3QpaHBkYXRhX2h1Z2VfZ2V0KHBzKTsKLQotCWJpbnN0 YXRzW2h1Z2VfaWR4XS5ucGFnZXNsYWJzICs9IG11bCAqIDE7Ci0JYmluc3RhdHNbaHVnZV9pZHhd Lm5hY3RpdmUgKz0gbXVsICogaHBkYXRhX25hY3RpdmVfZ2V0KHBzKTsKLQliaW5zdGF0c1todWdl X2lkeF0ubmRpcnR5ICs9IG11bCAqIGhwZGF0YV9uZGlydHlfZ2V0KHBzKTsKLQotCXBzc2V0LT5t ZXJnZWRfc3RhdHMubnBhZ2VzbGFicyArPSBtdWwgKiAxOwotCXBzc2V0LT5tZXJnZWRfc3RhdHMu bmFjdGl2ZSArPSBtdWwgKiBocGRhdGFfbmFjdGl2ZV9nZXQocHMpOwotCXBzc2V0LT5tZXJnZWRf c3RhdHMubmRpcnR5ICs9IG11bCAqIGhwZGF0YV9uZGlydHlfZ2V0KHBzKTsKLQotCWlmIChjb25m aWdfZGVidWcpIHsKLQkJcHNzZXRfYmluX3N0YXRzX3QgY2hlY2tfc3RhdHMgPSB7MH07Ci0JCWZv ciAoc2l6ZV90IGh1Z2UgPSAwOyBodWdlIDw9IDE7IGh1Z2UrKykgewotCQkJcHNzZXRfYmluX3N0 YXRzX2FjY3VtKCZjaGVja19zdGF0cywKLQkJCSAgICAmcHNzZXQtPnN0YXRzLmZ1bGxfc2xhYnNb aHVnZV0pOwotCQkJcHNzZXRfYmluX3N0YXRzX2FjY3VtKCZjaGVja19zdGF0cywKLQkJCSAgICAm cHNzZXQtPnN0YXRzLmVtcHR5X3NsYWJzW2h1Z2VdKTsKLQkJCWZvciAocHN6aW5kX3QgcGluZCA9 IDA7IHBpbmQgPCBQU1NFVF9OUFNJWkVTOyBwaW5kKyspIHsKLQkJCQlwc3NldF9iaW5fc3RhdHNf YWNjdW0oJmNoZWNrX3N0YXRzLAotCQkJCSAgICAmcHNzZXQtPnN0YXRzLm5vbmZ1bGxfc2xhYnNb cGluZF1baHVnZV0pOwotCQkJfQotCQl9Ci0JCWFzc2VydChwc3NldC0+bWVyZ2VkX3N0YXRzLm5w YWdlc2xhYnMKLQkJICAgID09IGNoZWNrX3N0YXRzLm5wYWdlc2xhYnMpOwotCQlhc3NlcnQocHNz ZXQtPm1lcmdlZF9zdGF0cy5uYWN0aXZlID09IGNoZWNrX3N0YXRzLm5hY3RpdmUpOwotCQlhc3Nl cnQocHNzZXQtPm1lcmdlZF9zdGF0cy5uZGlydHkgPT0gY2hlY2tfc3RhdHMubmRpcnR5KTsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi1wc3NldF9iaW5fc3RhdHNfaW5zZXJ0KHBzc2V0X3QgKnBzc2V0 LCBwc3NldF9iaW5fc3RhdHNfdCAqYmluc3RhdHMsCi0gICAgaHBkYXRhX3QgKnBzKSB7Ci0JcHNz ZXRfYmluX3N0YXRzX2luc2VydF9yZW1vdmUocHNzZXQsIGJpbnN0YXRzLCBwcywgdHJ1ZSk7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1wc3NldF9iaW5fc3RhdHNfcmVtb3ZlKHBzc2V0X3QgKnBzc2V0LCBw c3NldF9iaW5fc3RhdHNfdCAqYmluc3RhdHMsCi0gICAgaHBkYXRhX3QgKnBzKSB7Ci0JcHNzZXRf YmluX3N0YXRzX2luc2VydF9yZW1vdmUocHNzZXQsIGJpbnN0YXRzLCBwcywgZmFsc2UpOwotfQot Ci1zdGF0aWMgdm9pZAotcHNzZXRfaHBkYXRhX2hlYXBfcmVtb3ZlKHBzc2V0X3QgKnBzc2V0LCBw c3ppbmRfdCBwaW5kLCBocGRhdGFfdCAqcHMpIHsKLQlocGRhdGFfYWdlX2hlYXBfcmVtb3ZlKCZw c3NldC0+cGFnZXNsYWJzW3BpbmRdLCBwcyk7Ci0JaWYgKGhwZGF0YV9hZ2VfaGVhcF9lbXB0eSgm cHNzZXQtPnBhZ2VzbGFic1twaW5kXSkpIHsKLQkJZmJfdW5zZXQocHNzZXQtPnBhZ2VzbGFiX2Jp dG1hcCwgUFNTRVRfTlBTSVpFUywgKHNpemVfdClwaW5kKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk Ci1wc3NldF9ocGRhdGFfaGVhcF9pbnNlcnQocHNzZXRfdCAqcHNzZXQsIHBzemluZF90IHBpbmQs IGhwZGF0YV90ICpwcykgewotCWlmIChocGRhdGFfYWdlX2hlYXBfZW1wdHkoJnBzc2V0LT5wYWdl c2xhYnNbcGluZF0pKSB7Ci0JCWZiX3NldChwc3NldC0+cGFnZXNsYWJfYml0bWFwLCBQU1NFVF9O UFNJWkVTLCAoc2l6ZV90KXBpbmQpOwotCX0KLQlocGRhdGFfYWdlX2hlYXBfaW5zZXJ0KCZwc3Nl dC0+cGFnZXNsYWJzW3BpbmRdLCBwcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wc3NldF9zdGF0c19p bnNlcnQocHNzZXRfdCogcHNzZXQsIGhwZGF0YV90ICpwcykgewotCWlmIChocGRhdGFfZW1wdHko cHMpKSB7Ci0JCXBzc2V0X2Jpbl9zdGF0c19pbnNlcnQocHNzZXQsIHBzc2V0LT5zdGF0cy5lbXB0 eV9zbGFicywgcHMpOwotCX0gZWxzZSBpZiAoaHBkYXRhX2Z1bGwocHMpKSB7Ci0JCXBzc2V0X2Jp bl9zdGF0c19pbnNlcnQocHNzZXQsIHBzc2V0LT5zdGF0cy5mdWxsX3NsYWJzLCBwcyk7Ci0JfSBl bHNlIHsKLQkJc2l6ZV90IGxvbmdlc3RfZnJlZV9yYW5nZSA9IGhwZGF0YV9sb25nZXN0X2ZyZWVf cmFuZ2VfZ2V0KHBzKTsKLQotCQlwc3ppbmRfdCBwaW5kID0gc3pfcHN6MmluZChzel9wc3pfcXVh bnRpemVfZmxvb3IoCi0JCSAgICBsb25nZXN0X2ZyZWVfcmFuZ2UgPDwgTEdfUEFHRSkpOwotCQlh c3NlcnQocGluZCA8IFBTU0VUX05QU0laRVMpOwotCi0JCXBzc2V0X2Jpbl9zdGF0c19pbnNlcnQo cHNzZXQsIHBzc2V0LT5zdGF0cy5ub25mdWxsX3NsYWJzW3BpbmRdLAotCQkgICAgcHMpOwotCX0K LX0KLQotc3RhdGljIHZvaWQKLXBzc2V0X3N0YXRzX3JlbW92ZShwc3NldF90ICpwc3NldCwgaHBk YXRhX3QgKnBzKSB7Ci0JaWYgKGhwZGF0YV9lbXB0eShwcykpIHsKLQkJcHNzZXRfYmluX3N0YXRz X3JlbW92ZShwc3NldCwgcHNzZXQtPnN0YXRzLmVtcHR5X3NsYWJzLCBwcyk7Ci0JfSBlbHNlIGlm IChocGRhdGFfZnVsbChwcykpIHsKLQkJcHNzZXRfYmluX3N0YXRzX3JlbW92ZShwc3NldCwgcHNz ZXQtPnN0YXRzLmZ1bGxfc2xhYnMsIHBzKTsKLQl9IGVsc2UgewotCQlzaXplX3QgbG9uZ2VzdF9m cmVlX3JhbmdlID0gaHBkYXRhX2xvbmdlc3RfZnJlZV9yYW5nZV9nZXQocHMpOwotCi0JCXBzemlu ZF90IHBpbmQgPSBzel9wc3oyaW5kKHN6X3Bzel9xdWFudGl6ZV9mbG9vcigKLQkJICAgIGxvbmdl c3RfZnJlZV9yYW5nZSA8PCBMR19QQUdFKSk7Ci0JCWFzc2VydChwaW5kIDwgUFNTRVRfTlBTSVpF Uyk7Ci0KLQkJcHNzZXRfYmluX3N0YXRzX3JlbW92ZShwc3NldCwgcHNzZXQtPnN0YXRzLm5vbmZ1 bGxfc2xhYnNbcGluZF0sCi0JCSAgICBwcyk7Ci0JfQotfQotCi0vKgotICogUHV0IHBzIGludG8g c29tZSBjb250YWluZXIgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgZHVyaW5nIGZ1dHVyZSBhbGxv Y2F0aW9uCi0gKiByZXF1ZXN0cy4KLSAqLwotc3RhdGljIHZvaWQKLXBzc2V0X2FsbG9jX2NvbnRh aW5lcl9pbnNlcnQocHNzZXRfdCAqcHNzZXQsIGhwZGF0YV90ICpwcykgewotCWFzc2VydCghaHBk YXRhX2luX3Bzc2V0X2FsbG9jX2NvbnRhaW5lcl9nZXQocHMpKTsKLQlocGRhdGFfaW5fcHNzZXRf YWxsb2NfY29udGFpbmVyX3NldChwcywgdHJ1ZSk7Ci0JaWYgKGhwZGF0YV9lbXB0eShwcykpIHsK LQkJLyoKLQkJICogVGhpcyBwcmVwZW5kLCBwYWlyZWQgd2l0aCBwb3BwaW5nIHRoZSBoZWFkIGlu IHBzc2V0X2ZpdCwKLQkJICogbWVhbnMgd2UgaW1wbGVtZW50IExJRk8gb3JkZXJpbmcgZm9yIHRo ZSBlbXB0eSBzbGFicyBzZXQsCi0JCSAqIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUuCi0JCSAqLwot CQlocGRhdGFfZW1wdHlfbGlzdF9wcmVwZW5kKCZwc3NldC0+ZW1wdHksIHBzKTsKLQl9IGVsc2Ug aWYgKGhwZGF0YV9mdWxsKHBzKSkgewotCQkvKgotCQkgKiBXZSBkb24ndCBuZWVkIHRvIGtlZXAg dHJhY2sgb2YgdGhlIGZ1bGwgc2xhYnM7IHdlJ3JlIG5ldmVyCi0JCSAqIGdvaW5nIHRvIHJldHVy biB0aGVtIGZyb20gYSBwc3NldF9waWNrX2FsbG9jIGNhbGwuCi0JCSAqLwotCX0gZWxzZSB7Ci0J CXNpemVfdCBsb25nZXN0X2ZyZWVfcmFuZ2UgPSBocGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dl dChwcyk7Ci0KLQkJcHN6aW5kX3QgcGluZCA9IHN6X3BzejJpbmQoc3pfcHN6X3F1YW50aXplX2Zs b29yKAotCQkgICAgbG9uZ2VzdF9mcmVlX3JhbmdlIDw8IExHX1BBR0UpKTsKLQkJYXNzZXJ0KHBp bmQgPCBQU1NFVF9OUFNJWkVTKTsKLQotCQlwc3NldF9ocGRhdGFfaGVhcF9pbnNlcnQocHNzZXQs IHBpbmQsIHBzKTsKLQl9Ci19Ci0KLS8qIFJlbW92ZSBwcyBmcm9tIHRob3NlIGNvbGxlY3Rpb25z LiAqLwotc3RhdGljIHZvaWQKLXBzc2V0X2FsbG9jX2NvbnRhaW5lcl9yZW1vdmUocHNzZXRfdCAq cHNzZXQsIGhwZGF0YV90ICpwcykgewotCWFzc2VydChocGRhdGFfaW5fcHNzZXRfYWxsb2NfY29u dGFpbmVyX2dldChwcykpOwotCWhwZGF0YV9pbl9wc3NldF9hbGxvY19jb250YWluZXJfc2V0KHBz LCBmYWxzZSk7Ci0KLQlpZiAoaHBkYXRhX2VtcHR5KHBzKSkgewotCQlocGRhdGFfZW1wdHlfbGlz dF9yZW1vdmUoJnBzc2V0LT5lbXB0eSwgcHMpOwotCX0gZWxzZSBpZiAoaHBkYXRhX2Z1bGwocHMp KSB7Ci0JCS8qIFNhbWUgYXMgYWJvdmUgLS0gZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuICovCi0J fSBlbHNlIHsKLQkJc2l6ZV90IGxvbmdlc3RfZnJlZV9yYW5nZSA9IGhwZGF0YV9sb25nZXN0X2Zy ZWVfcmFuZ2VfZ2V0KHBzKTsKLQotCQlwc3ppbmRfdCBwaW5kID0gc3pfcHN6MmluZChzel9wc3pf cXVhbnRpemVfZmxvb3IoCi0JCSAgICBsb25nZXN0X2ZyZWVfcmFuZ2UgPDwgTEdfUEFHRSkpOwot CQlhc3NlcnQocGluZCA8IFBTU0VUX05QU0laRVMpOwotCi0JCXBzc2V0X2hwZGF0YV9oZWFwX3Jl bW92ZShwc3NldCwgcGluZCwgcHMpOwotCX0KLX0KLQotc3RhdGljIHNpemVfdAotcHNzZXRfcHVy Z2VfbGlzdF9pbmQoaHBkYXRhX3QgKnBzKSB7Ci0Jc2l6ZV90IG5kaXJ0eSA9IGhwZGF0YV9uZGly dHlfZ2V0KHBzKTsKLQkvKiBTaG91bGRuJ3QgaGF2ZSBzb21ldGhpbmcgd2l0aCBubyBkaXJ0eSBw YWdlcyBwdXJnZWFibGUuICovCi0JYXNzZXJ0KG5kaXJ0eSA+IDApOwotCS8qCi0JICogSGlnaGVy IGluZGljZXMgY29ycmVzcG9uZCB0byBsaXN0cyB3ZSdkIGxpa2UgdG8gcHVyZ2UgZWFybGllcjsg bWFrZQotCSAqIHRoZSB0d28gaGlnaGVzdCBpbmRpY2VzIGNvcnJlc3BvbmQgdG8gZW1wdHkgbGlz dHMsIHdoaWNoIHdlIGF0dGVtcHQKLQkgKiB0byBwdXJnZSBiZWZvcmUgcHVyZ2luZyBhbnkgbm9u LWVtcHR5IGxpc3QuICBUaGlzIGhhcyB0d28gYWR2YW50YWdlczoKLQkgKiAtIEVtcHR5IHBhZ2Ug c2xhYnMgYXJlIHRoZSBsZWFzdCBsaWtlbHkgdG8gZ2V0IHJldXNlZCAod2UnbGwgb25seQotCSAq ICAgcGljayB0aGVtIGZvciBhbiBhbGxvY2F0aW9uIGlmIHdlIGhhdmUgbm8gb3RoZXIgY2hvaWNl KS4KLQkgKiAtIEVtcHR5IHBhZ2Ugc2xhYnMgY2FuIHB1cmdlIGV2ZXJ5IGRpcnR5IHBhZ2UgdGhl eSBjb250YWluIGluIGEKLQkgKiAgIHNpbmdsZSBjYWxsLCB3aGljaCBpcyBub3QgdXN1YWxseSB0 aGUgY2FzZS4KLQkgKgotCSAqIFdlIHB1cmdlIGh1Z2VpZmllZCBlbXB0eSBzbGFicyBiZWZvcmUg bm9uaHVnZWlmaWVkIG9uZXMsIG9uIHRoZSBiYXNpcwotCSAqIHRoYXQgdGhleSBhcmUgZnVsbHkg ZGlydHksIHdoaWxlIG5vbmh1Z2lmaWVkIHNsYWJzIG1pZ2h0IG5vdCBiZSwgc28KLQkgKiB3ZSBm cmVlIHVwIG1vcmUgcGFnZXMgbW9yZSBlYXNpbHkuCi0JICovCi0JaWYgKGhwZGF0YV9uYWN0aXZl X2dldChwcykgPT0gMCkgewotCQlpZiAoaHBkYXRhX2h1Z2VfZ2V0KHBzKSkgewotCQkJcmV0dXJu IFBTU0VUX05QVVJHRV9MSVNUUyAtIDE7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gUFNTRVRfTlBV UkdFX0xJU1RTIC0gMjsKLQkJfQotCX0KLQotCXBzemluZF90IHBpbmQgPSBzel9wc3oyaW5kKHN6 X3Bzel9xdWFudGl6ZV9mbG9vcihuZGlydHkgPDwgTEdfUEFHRSkpOwotCS8qCi0JICogRm9yIG5v bi1lbXB0eSBzbGFicywgd2UgbWF5IHJldXNlIHRoZW0gYWdhaW4uICBQcmVmZXIgcHVyZ2luZwot CSAqIG5vbi1odWdlaWZpZWQgc2xhYnMgYmVmb3JlIGh1Z2VpZmllZCBvbmVzIHRoZW4sIGFtb25n IHBhZ2VzIG9mCi0JICogc2ltaWxhciBkaXJ0aW5lc3MuICBXZSBzdGlsbCBnZXQgc29tZSBiZW5l Zml0IGZyb20gdGhlIGh1Z2lmaWNhdGlvbi4KLQkgKi8KLQlyZXR1cm4gKHNpemVfdClwaW5kICog MiArIChocGRhdGFfaHVnZV9nZXQocHMpID8gMCA6IDEpOwotfQotCi1zdGF0aWMgdm9pZAotcHNz ZXRfbWF5YmVfcmVtb3ZlX3B1cmdlX2xpc3QocHNzZXRfdCAqcHNzZXQsIGhwZGF0YV90ICpwcykg ewotCS8qCi0JICogUmVtb3ZlIHRoZSBocGRhdGEgZnJvbSBpdHMgcHVyZ2UgbGlzdCAoaWYgaXQn cyBpbiBvbmUpLiAgRXZlbiBpZiBpdCdzCi0JICogZ29pbmcgdG8gc3RheSBpbiB0aGUgc2FtZSBv bmUsIGJ5IGFwcGVuZGluZyBpdCBkdXJpbmcKLQkgKiBwc3NldF91cGRhdGVfZW5kLCB3ZSBtb3Zl IGl0IHRvIHRoZSBlbmQgb2YgaXRzIHF1ZXVlLCBzbyB0aGF0IHdlCi0JICogcHVyZ2UgTFJVIHdp dGhpbiBhIGdpdmVuIGRpcnRpbmVzcyBidWNrZXQuCi0JICovCi0JaWYgKGhwZGF0YV9wdXJnZV9h bGxvd2VkX2dldChwcykpIHsKLQkJc2l6ZV90IGluZCA9IHBzc2V0X3B1cmdlX2xpc3RfaW5kKHBz KTsKLQkJaHBkYXRhX3B1cmdlX2xpc3RfdCAqcHVyZ2VfbGlzdCA9ICZwc3NldC0+dG9fcHVyZ2Vb aW5kXTsKLQkJaHBkYXRhX3B1cmdlX2xpc3RfcmVtb3ZlKHB1cmdlX2xpc3QsIHBzKTsKLQkJaWYg KGhwZGF0YV9wdXJnZV9saXN0X2VtcHR5KHB1cmdlX2xpc3QpKSB7Ci0JCQlmYl91bnNldChwc3Nl dC0+cHVyZ2VfYml0bWFwLCBQU1NFVF9OUFVSR0VfTElTVFMsIGluZCk7Ci0JCX0KLQl9Ci19Ci0K LXN0YXRpYyB2b2lkCi1wc3NldF9tYXliZV9pbnNlcnRfcHVyZ2VfbGlzdChwc3NldF90ICpwc3Nl dCwgaHBkYXRhX3QgKnBzKSB7Ci0JaWYgKGhwZGF0YV9wdXJnZV9hbGxvd2VkX2dldChwcykpIHsK LQkJc2l6ZV90IGluZCA9IHBzc2V0X3B1cmdlX2xpc3RfaW5kKHBzKTsKLQkJaHBkYXRhX3B1cmdl X2xpc3RfdCAqcHVyZ2VfbGlzdCA9ICZwc3NldC0+dG9fcHVyZ2VbaW5kXTsKLQkJaWYgKGhwZGF0 YV9wdXJnZV9saXN0X2VtcHR5KHB1cmdlX2xpc3QpKSB7Ci0JCQlmYl9zZXQocHNzZXQtPnB1cmdl X2JpdG1hcCwgUFNTRVRfTlBVUkdFX0xJU1RTLCBpbmQpOwotCQl9Ci0JCWhwZGF0YV9wdXJnZV9s aXN0X2FwcGVuZChwdXJnZV9saXN0LCBwcyk7Ci0JfQotCi19Ci0KLXZvaWQKLXBzc2V0X3VwZGF0 ZV9iZWdpbihwc3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBzKSB7Ci0JaHBkYXRhX2Fzc2VydF9j b25zaXN0ZW50KHBzKTsKLQlhc3NlcnQoaHBkYXRhX2luX3Bzc2V0X2dldChwcykpOwotCWhwZGF0 YV91cGRhdGluZ19zZXQocHMsIHRydWUpOwotCXBzc2V0X3N0YXRzX3JlbW92ZShwc3NldCwgcHMp OwotCWlmIChocGRhdGFfaW5fcHNzZXRfYWxsb2NfY29udGFpbmVyX2dldChwcykpIHsKLQkJLyoK LQkJICogU29tZSBtZXRhZGF0YSB1cGRhdGVzIGNhbiBicmVhayBhbGxvYyBjb250YWluZXIgaW52 YXJpYW50cwotCQkgKiAoZS5nLiB0aGUgbG9uZ2VzdCBmcmVlIHJhbmdlIGRldGVybWluZXMgdGhl IGhwZGF0YV9oZWFwX3QgdGhlCi0JCSAqIHBhZ2VzbGFiIGxpdmVzIGluKS4KLQkJICovCi0JCWFz c2VydChocGRhdGFfYWxsb2NfYWxsb3dlZF9nZXQocHMpKTsKLQkJcHNzZXRfYWxsb2NfY29udGFp bmVyX3JlbW92ZShwc3NldCwgcHMpOwotCX0KLQlwc3NldF9tYXliZV9yZW1vdmVfcHVyZ2VfbGlz dChwc3NldCwgcHMpOwotCS8qCi0JICogV2UgZG9uJ3QgdXBkYXRlIHByZXNlbmNlIGluIHRoZSBo dWdpZnkgbGlzdDsgd2UgdHJ5IHRvIGtlZXAgaXQgRklGTywKLQkgKiBldmVuIGluIHRoZSBwcmVz ZW5jZSBvZiBvdGhlciBtZXRhZGF0YSB1cGRhdGVzLiAgV2UnbGwgdXBkYXRlCi0JICogcHJlc2Vu Y2UgYXQgdGhlIGVuZCBvZiB0aGUgbWV0YWRhdGEgdXBkYXRlIGlmIG5lY2Vzc2FyeS4KLQkgKi8K LX0KLQotdm9pZAotcHNzZXRfdXBkYXRlX2VuZChwc3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBz KSB7Ci0JYXNzZXJ0KGhwZGF0YV9pbl9wc3NldF9nZXQocHMpKTsKLQlocGRhdGFfdXBkYXRpbmdf c2V0KHBzLCBmYWxzZSk7Ci0JcHNzZXRfc3RhdHNfaW5zZXJ0KHBzc2V0LCBwcyk7Ci0KLQkvKgot CSAqIFRoZSB1cGRhdGUgYmVnaW4gc2hvdWxkIGhhdmUgcmVtb3ZlZCBwcyBmcm9tIHdoYXRldmVy IGFsbG9jIGNvbnRhaW5lcgotCSAqIGl0IHdhcyBpbi4KLQkgKi8KLQlhc3NlcnQoIWhwZGF0YV9p bl9wc3NldF9hbGxvY19jb250YWluZXJfZ2V0KHBzKSk7Ci0JaWYgKGhwZGF0YV9hbGxvY19hbGxv d2VkX2dldChwcykpIHsKLQkJcHNzZXRfYWxsb2NfY29udGFpbmVyX2luc2VydChwc3NldCwgcHMp OwotCX0KLQlwc3NldF9tYXliZV9pbnNlcnRfcHVyZ2VfbGlzdChwc3NldCwgcHMpOwotCi0JaWYg KGhwZGF0YV9odWdpZnlfYWxsb3dlZF9nZXQocHMpCi0JICAgICYmICFocGRhdGFfaW5fcHNzZXRf aHVnaWZ5X2NvbnRhaW5lcl9nZXQocHMpKSB7Ci0JCWhwZGF0YV9pbl9wc3NldF9odWdpZnlfY29u dGFpbmVyX3NldChwcywgdHJ1ZSk7Ci0JCWhwZGF0YV9odWdpZnlfbGlzdF9hcHBlbmQoJnBzc2V0 LT50b19odWdpZnksIHBzKTsKLQl9IGVsc2UgaWYgKCFocGRhdGFfaHVnaWZ5X2FsbG93ZWRfZ2V0 KHBzKQotCSAgICAmJiBocGRhdGFfaW5fcHNzZXRfaHVnaWZ5X2NvbnRhaW5lcl9nZXQocHMpKSB7 Ci0JCWhwZGF0YV9pbl9wc3NldF9odWdpZnlfY29udGFpbmVyX3NldChwcywgZmFsc2UpOwotCQlo cGRhdGFfaHVnaWZ5X2xpc3RfcmVtb3ZlKCZwc3NldC0+dG9faHVnaWZ5LCBwcyk7Ci0JfQotCWhw ZGF0YV9hc3NlcnRfY29uc2lzdGVudChwcyk7Ci19Ci0KLWhwZGF0YV90ICoKLXBzc2V0X3BpY2tf YWxsb2MocHNzZXRfdCAqcHNzZXQsIHNpemVfdCBzaXplKSB7Ci0JYXNzZXJ0KChzaXplICYgUEFH RV9NQVNLKSA9PSAwKTsKLQlhc3NlcnQoc2l6ZSA8PSBIVUdFUEFHRSk7Ci0KLQlwc3ppbmRfdCBt aW5fcGluZCA9IHN6X3BzejJpbmQoc3pfcHN6X3F1YW50aXplX2NlaWwoc2l6ZSkpOwotCXBzemlu ZF90IHBpbmQgPSAocHN6aW5kX3QpZmJfZmZzKHBzc2V0LT5wYWdlc2xhYl9iaXRtYXAsIFBTU0VU X05QU0laRVMsCi0JICAgIChzaXplX3QpbWluX3BpbmQpOwotCWlmIChwaW5kID09IFBTU0VUX05Q U0laRVMpIHsKLQkJcmV0dXJuIGhwZGF0YV9lbXB0eV9saXN0X2ZpcnN0KCZwc3NldC0+ZW1wdHkp OwotCX0KLQlocGRhdGFfdCAqcHMgPSBocGRhdGFfYWdlX2hlYXBfZmlyc3QoJnBzc2V0LT5wYWdl c2xhYnNbcGluZF0pOwotCWlmIChwcyA9PSBOVUxMKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQot CWhwZGF0YV9hc3NlcnRfY29uc2lzdGVudChwcyk7Ci0KLQlyZXR1cm4gcHM7Ci19Ci0KLWhwZGF0 YV90ICoKLXBzc2V0X3BpY2tfcHVyZ2UocHNzZXRfdCAqcHNzZXQpIHsKLQlzc2l6ZV90IGluZF9z c3ogPSBmYl9mbHMocHNzZXQtPnB1cmdlX2JpdG1hcCwgUFNTRVRfTlBVUkdFX0xJU1RTLAotCSAg ICBQU1NFVF9OUFVSR0VfTElTVFMgLSAxKTsKLQlpZiAoaW5kX3NzeiA8IDApIHsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCXBzemluZF90IGluZCA9IChwc3ppbmRfdClpbmRfc3N6OwotCWFzc2VydChp bmQgPCBQU1NFVF9OUFVSR0VfTElTVFMpOwotCWhwZGF0YV90ICpwcyA9IGhwZGF0YV9wdXJnZV9s aXN0X2ZpcnN0KCZwc3NldC0+dG9fcHVyZ2VbaW5kXSk7Ci0JYXNzZXJ0KHBzICE9IE5VTEwpOwot CXJldHVybiBwczsKLX0KLQotaHBkYXRhX3QgKgotcHNzZXRfcGlja19odWdpZnkocHNzZXRfdCAq cHNzZXQpIHsKLQlyZXR1cm4gaHBkYXRhX2h1Z2lmeV9saXN0X2ZpcnN0KCZwc3NldC0+dG9faHVn aWZ5KTsKLX0KLQotdm9pZAotcHNzZXRfaW5zZXJ0KHBzc2V0X3QgKnBzc2V0LCBocGRhdGFfdCAq cHMpIHsKLQlocGRhdGFfaW5fcHNzZXRfc2V0KHBzLCB0cnVlKTsKLQotCXBzc2V0X3N0YXRzX2lu c2VydChwc3NldCwgcHMpOwotCWlmIChocGRhdGFfYWxsb2NfYWxsb3dlZF9nZXQocHMpKSB7Ci0J CXBzc2V0X2FsbG9jX2NvbnRhaW5lcl9pbnNlcnQocHNzZXQsIHBzKTsKLQl9Ci0JcHNzZXRfbWF5 YmVfaW5zZXJ0X3B1cmdlX2xpc3QocHNzZXQsIHBzKTsKLQotCWlmIChocGRhdGFfaHVnaWZ5X2Fs bG93ZWRfZ2V0KHBzKSkgewotCQlocGRhdGFfaW5fcHNzZXRfaHVnaWZ5X2NvbnRhaW5lcl9zZXQo cHMsIHRydWUpOwotCQlocGRhdGFfaHVnaWZ5X2xpc3RfYXBwZW5kKCZwc3NldC0+dG9faHVnaWZ5 LCBwcyk7Ci0JfQotfQotCi12b2lkCi1wc3NldF9yZW1vdmUocHNzZXRfdCAqcHNzZXQsIGhwZGF0 YV90ICpwcykgewotCWhwZGF0YV9pbl9wc3NldF9zZXQocHMsIGZhbHNlKTsKLQotCXBzc2V0X3N0 YXRzX3JlbW92ZShwc3NldCwgcHMpOwotCWlmIChocGRhdGFfaW5fcHNzZXRfYWxsb2NfY29udGFp bmVyX2dldChwcykpIHsKLQkJcHNzZXRfYWxsb2NfY29udGFpbmVyX3JlbW92ZShwc3NldCwgcHMp OwotCX0KLQlwc3NldF9tYXliZV9yZW1vdmVfcHVyZ2VfbGlzdChwc3NldCwgcHMpOwotCWlmICho cGRhdGFfaW5fcHNzZXRfaHVnaWZ5X2NvbnRhaW5lcl9nZXQocHMpKSB7Ci0JCWhwZGF0YV9pbl9w c3NldF9odWdpZnlfY29udGFpbmVyX3NldChwcywgZmFsc2UpOwotCQlocGRhdGFfaHVnaWZ5X2xp c3RfcmVtb3ZlKCZwc3NldC0+dG9faHVnaWZ5LCBwcyk7Ci0JfQotfQoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9ydHJlZS5jIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3J0cmVlLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDY0OTZiNWEuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3J0cmVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwy NjEgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxl LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVk ZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0KLS8qCi0gKiBPbmx5IHRoZSBtb3N0IHNpZ25p ZmljYW50IGJpdHMgb2Yga2V5cyBwYXNzZWQgdG8gcnRyZWVfe3JlYWQsd3JpdGV9KCkgYXJlCi0g KiB1c2VkLgotICovCi1ib29sCi1ydHJlZV9uZXcocnRyZWVfdCAqcnRyZWUsIGJhc2VfdCAqYmFz ZSwgYm9vbCB6ZXJvZWQpIHsKLSNpZmRlZiBKRU1BTExPQ19KRVQKLQlpZiAoIXplcm9lZCkgewot CQltZW1zZXQocnRyZWUsIDAsIHNpemVvZihydHJlZV90KSk7IC8qIENsZWFyIHJvb3QuICovCi0J fQotI2Vsc2UKLQlhc3NlcnQoemVyb2VkKTsKLSNlbmRpZgotCXJ0cmVlLT5iYXNlID0gYmFzZTsK LQotCWlmIChtYWxsb2NfbXV0ZXhfaW5pdCgmcnRyZWUtPmluaXRfbG9jaywgInJ0cmVlIiwgV0lU TkVTU19SQU5LX1JUUkVFLAotCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7Ci0J CXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHJ0cmVlX25v ZGVfZWxtX3QgKgotcnRyZWVfbm9kZV9hbGxvYyh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVl LCBzaXplX3QgbmVsbXMpIHsKLQlyZXR1cm4gKHJ0cmVlX25vZGVfZWxtX3QgKiliYXNlX2FsbG9j KHRzZG4sIHJ0cmVlLT5iYXNlLAotCSAgICBuZWxtcyAqIHNpemVvZihydHJlZV9ub2RlX2VsbV90 KSwgQ0FDSEVMSU5FKTsKLX0KLQotc3RhdGljIHJ0cmVlX2xlYWZfZWxtX3QgKgotcnRyZWVfbGVh Zl9hbGxvYyh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBzaXplX3QgbmVsbXMpIHsKLQly ZXR1cm4gKHJ0cmVlX2xlYWZfZWxtX3QgKiliYXNlX2FsbG9jKHRzZG4sIHJ0cmVlLT5iYXNlLAot CSAgICBuZWxtcyAqIHNpemVvZihydHJlZV9sZWFmX2VsbV90KSwgQ0FDSEVMSU5FKTsKLX0KLQot c3RhdGljIHJ0cmVlX25vZGVfZWxtX3QgKgotcnRyZWVfbm9kZV9pbml0KHRzZG5fdCAqdHNkbiwg cnRyZWVfdCAqcnRyZWUsIHVuc2lnbmVkIGxldmVsLAotICAgIGF0b21pY19wX3QgKmVsbXApIHsK LQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmcnRyZWUtPmluaXRfbG9jayk7Ci0JLyoKLQkgKiBJ ZiAqZWxtcCBpcyBub24tbnVsbCwgdGhlbiBpdCB3YXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgaW5p dCBsb2NrCi0JICogaGVsZCwgc28gd2UgY2FuIGdldCBieSB3aXRoICdyZWxheGVkJyBoZXJlLgot CSAqLwotCXJ0cmVlX25vZGVfZWxtX3QgKm5vZGUgPSBhdG9taWNfbG9hZF9wKGVsbXAsIEFUT01J Q19SRUxBWEVEKTsKLQlpZiAobm9kZSA9PSBOVUxMKSB7Ci0JCW5vZGUgPSBydHJlZV9ub2RlX2Fs bG9jKHRzZG4sIHJ0cmVlLCBaVSgxKSA8PAotCQkgICAgcnRyZWVfbGV2ZWxzW2xldmVsXS5iaXRz KTsKLQkJaWYgKG5vZGUgPT0gTlVMTCkgewotCQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAm cnRyZWUtPmluaXRfbG9jayk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQkvKgotCQkgKiBFdmVu IHRob3VnaCB3ZSBob2xkIHRoZSBsb2NrLCBhIGxhdGVyIHJlYWRlciBtaWdodCBub3Q7IHdlCi0J CSAqIG5lZWQgcmVsZWFzZSBzZW1hbnRpY3MuCi0JCSAqLwotCQlhdG9taWNfc3RvcmVfcChlbG1w LCBub2RlLCBBVE9NSUNfUkVMRUFTRSk7Ci0JfQotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwg JnJ0cmVlLT5pbml0X2xvY2spOwotCi0JcmV0dXJuIG5vZGU7Ci19Ci0KLXN0YXRpYyBydHJlZV9s ZWFmX2VsbV90ICoKLXJ0cmVlX2xlYWZfaW5pdCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVl LCBhdG9taWNfcF90ICplbG1wKSB7Ci0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnJ0cmVlLT5p bml0X2xvY2spOwotCS8qCi0JICogSWYgKmVsbXAgaXMgbm9uLW51bGwsIHRoZW4gaXQgd2FzIGlu aXRpYWxpemVkIHdpdGggdGhlIGluaXQgbG9jawotCSAqIGhlbGQsIHNvIHdlIGNhbiBnZXQgYnkg d2l0aCAncmVsYXhlZCcgaGVyZS4KLQkgKi8KLQlydHJlZV9sZWFmX2VsbV90ICpsZWFmID0gYXRv bWljX2xvYWRfcChlbG1wLCBBVE9NSUNfUkVMQVhFRCk7Ci0JaWYgKGxlYWYgPT0gTlVMTCkgewot CQlsZWFmID0gcnRyZWVfbGVhZl9hbGxvYyh0c2RuLCBydHJlZSwgWlUoMSkgPDwKLQkJICAgIHJ0 cmVlX2xldmVsc1tSVFJFRV9IRUlHSFQtMV0uYml0cyk7Ci0JCWlmIChsZWFmID09IE5VTEwpIHsK LQkJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnJ0cmVlLT5pbml0X2xvY2spOwotCQkJcmV0 dXJuIE5VTEw7Ci0JCX0KLQkJLyoKLQkJICogRXZlbiB0aG91Z2ggd2UgaG9sZCB0aGUgbG9jaywg YSBsYXRlciByZWFkZXIgbWlnaHQgbm90OyB3ZQotCQkgKiBuZWVkIHJlbGVhc2Ugc2VtYW50aWNz LgotCQkgKi8KLQkJYXRvbWljX3N0b3JlX3AoZWxtcCwgbGVhZiwgQVRPTUlDX1JFTEVBU0UpOwot CX0KLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZydHJlZS0+aW5pdF9sb2NrKTsKLQotCXJl dHVybiBsZWFmOwotfQotCi1zdGF0aWMgYm9vbAotcnRyZWVfbm9kZV92YWxpZChydHJlZV9ub2Rl X2VsbV90ICpub2RlKSB7Ci0JcmV0dXJuICgodWludHB0cl90KW5vZGUgIT0gKHVpbnRwdHJfdCkw KTsKLX0KLQotc3RhdGljIGJvb2wKLXJ0cmVlX2xlYWZfdmFsaWQocnRyZWVfbGVhZl9lbG1fdCAq bGVhZikgewotCXJldHVybiAoKHVpbnRwdHJfdClsZWFmICE9ICh1aW50cHRyX3QpMCk7Ci19Ci0K LXN0YXRpYyBydHJlZV9ub2RlX2VsbV90ICoKLXJ0cmVlX2NoaWxkX25vZGVfdHJ5cmVhZChydHJl ZV9ub2RlX2VsbV90ICplbG0sIGJvb2wgZGVwZW5kZW50KSB7Ci0JcnRyZWVfbm9kZV9lbG1fdCAq bm9kZTsKLQotCWlmIChkZXBlbmRlbnQpIHsKLQkJbm9kZSA9IChydHJlZV9ub2RlX2VsbV90ICop YXRvbWljX2xvYWRfcCgmZWxtLT5jaGlsZCwKLQkJICAgIEFUT01JQ19SRUxBWEVEKTsKLQl9IGVs c2UgewotCQlub2RlID0gKHJ0cmVlX25vZGVfZWxtX3QgKilhdG9taWNfbG9hZF9wKCZlbG0tPmNo aWxkLAotCQkgICAgQVRPTUlDX0FDUVVJUkUpOwotCX0KLQotCWFzc2VydCghZGVwZW5kZW50IHx8 IG5vZGUgIT0gTlVMTCk7Ci0JcmV0dXJuIG5vZGU7Ci19Ci0KLXN0YXRpYyBydHJlZV9ub2RlX2Vs bV90ICoKLXJ0cmVlX2NoaWxkX25vZGVfcmVhZCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVl LCBydHJlZV9ub2RlX2VsbV90ICplbG0sCi0gICAgdW5zaWduZWQgbGV2ZWwsIGJvb2wgZGVwZW5k ZW50KSB7Ci0JcnRyZWVfbm9kZV9lbG1fdCAqbm9kZTsKLQotCW5vZGUgPSBydHJlZV9jaGlsZF9u b2RlX3RyeXJlYWQoZWxtLCBkZXBlbmRlbnQpOwotCWlmICghZGVwZW5kZW50ICYmIHVubGlrZWx5 KCFydHJlZV9ub2RlX3ZhbGlkKG5vZGUpKSkgewotCQlub2RlID0gcnRyZWVfbm9kZV9pbml0KHRz ZG4sIHJ0cmVlLCBsZXZlbCArIDEsICZlbG0tPmNoaWxkKTsKLQl9Ci0JYXNzZXJ0KCFkZXBlbmRl bnQgfHwgbm9kZSAhPSBOVUxMKTsKLQlyZXR1cm4gbm9kZTsKLX0KLQotc3RhdGljIHJ0cmVlX2xl YWZfZWxtX3QgKgotcnRyZWVfY2hpbGRfbGVhZl90cnlyZWFkKHJ0cmVlX25vZGVfZWxtX3QgKmVs bSwgYm9vbCBkZXBlbmRlbnQpIHsKLQlydHJlZV9sZWFmX2VsbV90ICpsZWFmOwotCi0JaWYgKGRl cGVuZGVudCkgewotCQlsZWFmID0gKHJ0cmVlX2xlYWZfZWxtX3QgKilhdG9taWNfbG9hZF9wKCZl bG0tPmNoaWxkLAotCQkgICAgQVRPTUlDX1JFTEFYRUQpOwotCX0gZWxzZSB7Ci0JCWxlYWYgPSAo cnRyZWVfbGVhZl9lbG1fdCAqKWF0b21pY19sb2FkX3AoJmVsbS0+Y2hpbGQsCi0JCSAgICBBVE9N SUNfQUNRVUlSRSk7Ci0JfQotCi0JYXNzZXJ0KCFkZXBlbmRlbnQgfHwgbGVhZiAhPSBOVUxMKTsK LQlyZXR1cm4gbGVhZjsKLX0KLQotc3RhdGljIHJ0cmVlX2xlYWZfZWxtX3QgKgotcnRyZWVfY2hp bGRfbGVhZl9yZWFkKHRzZG5fdCAqdHNkbiwgcnRyZWVfdCAqcnRyZWUsIHJ0cmVlX25vZGVfZWxt X3QgKmVsbSwKLSAgICB1bnNpZ25lZCBsZXZlbCwgYm9vbCBkZXBlbmRlbnQpIHsKLQlydHJlZV9s ZWFmX2VsbV90ICpsZWFmOwotCi0JbGVhZiA9IHJ0cmVlX2NoaWxkX2xlYWZfdHJ5cmVhZChlbG0s IGRlcGVuZGVudCk7Ci0JaWYgKCFkZXBlbmRlbnQgJiYgdW5saWtlbHkoIXJ0cmVlX2xlYWZfdmFs aWQobGVhZikpKSB7Ci0JCWxlYWYgPSBydHJlZV9sZWFmX2luaXQodHNkbiwgcnRyZWUsICZlbG0t PmNoaWxkKTsKLQl9Ci0JYXNzZXJ0KCFkZXBlbmRlbnQgfHwgbGVhZiAhPSBOVUxMKTsKLQlyZXR1 cm4gbGVhZjsKLX0KLQotcnRyZWVfbGVhZl9lbG1fdCAqCi1ydHJlZV9sZWFmX2VsbV9sb29rdXBf aGFyZCh0c2RuX3QgKnRzZG4sIHJ0cmVlX3QgKnJ0cmVlLCBydHJlZV9jdHhfdCAqcnRyZWVfY3R4 LAotICAgIHVpbnRwdHJfdCBrZXksIGJvb2wgZGVwZW5kZW50LCBib29sIGluaXRfbWlzc2luZykg ewotCXJ0cmVlX25vZGVfZWxtX3QgKm5vZGU7Ci0JcnRyZWVfbGVhZl9lbG1fdCAqbGVhZjsKLSNp ZiBSVFJFRV9IRUlHSFQgPiAxCi0Jbm9kZSA9IHJ0cmVlLT5yb290OwotI2Vsc2UKLQlsZWFmID0g cnRyZWUtPnJvb3Q7Ci0jZW5kaWYKLQotCWlmIChjb25maWdfZGVidWcpIHsKLQkJdWludHB0cl90 IGxlYWZrZXkgPSBydHJlZV9sZWFma2V5KGtleSk7Ci0JCWZvciAodW5zaWduZWQgaSA9IDA7IGkg PCBSVFJFRV9DVFhfTkNBQ0hFOyBpKyspIHsKLQkJCWFzc2VydChydHJlZV9jdHgtPmNhY2hlW2ld LmxlYWZrZXkgIT0gbGVhZmtleSk7Ci0JCX0KLQkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFJU UkVFX0NUWF9OQ0FDSEVfTDI7IGkrKykgewotCQkJYXNzZXJ0KHJ0cmVlX2N0eC0+bDJfY2FjaGVb aV0ubGVhZmtleSAhPSBsZWFma2V5KTsKLQkJfQotCX0KLQotI2RlZmluZSBSVFJFRV9HRVRfQ0hJ TEQobGV2ZWwpIHsJCQkJCVwKLQkJYXNzZXJ0KGxldmVsIDwgUlRSRUVfSEVJR0hULTEpOwkJCQlc Ci0JCWlmIChsZXZlbCAhPSAwICYmICFkZXBlbmRlbnQgJiYJCQkJXAotCQkgICAgdW5saWtlbHko IXJ0cmVlX25vZGVfdmFsaWQobm9kZSkpKSB7CQlcCi0JCQlyZXR1cm4gTlVMTDsJCQkJCVwKLQkJ fQkJCQkJCQlcCi0JCXVpbnRwdHJfdCBzdWJrZXkgPSBydHJlZV9zdWJrZXkoa2V5LCBsZXZlbCk7 CQlcCi0JCWlmIChsZXZlbCArIDIgPCBSVFJFRV9IRUlHSFQpIHsJCQkJXAotCQkJbm9kZSA9IGlu aXRfbWlzc2luZyA/CQkJCVwKLQkJCSAgICBydHJlZV9jaGlsZF9ub2RlX3JlYWQodHNkbiwgcnRy ZWUsCQlcCi0JCQkgICAgJm5vZGVbc3Via2V5XSwgbGV2ZWwsIGRlcGVuZGVudCkgOgkJXAotCQkJ ICAgIHJ0cmVlX2NoaWxkX25vZGVfdHJ5cmVhZCgmbm9kZVtzdWJrZXldLAlcCi0JCQkgICAgZGVw ZW5kZW50KTsJCQkJCVwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCQlsZWFmID0gaW5pdF9taXNzaW5n ID8JCQkJXAotCQkJICAgIHJ0cmVlX2NoaWxkX2xlYWZfcmVhZCh0c2RuLCBydHJlZSwJCVwKLQkJ CSAgICAmbm9kZVtzdWJrZXldLCBsZXZlbCwgZGVwZW5kZW50KSA6CQlcCi0JCQkgICAgcnRyZWVf Y2hpbGRfbGVhZl90cnlyZWFkKCZub2RlW3N1YmtleV0sCVwKLQkJCSAgICBkZXBlbmRlbnQpOwkJ CQkJXAotCQl9CQkJCQkJCVwKLQl9Ci0JLyoKLQkgKiBDYWNoZSByZXBsYWNlbWVudCB1cG9uIGhh cmQgbG9va3VwIChpLmUuIEwxICYgTDIgcnRyZWUgY2FjaGUgbWlzcyk6Ci0JICogKDEpIGV2aWN0 IGxhc3QgZW50cnkgaW4gTDIgY2FjaGU7ICgyKSBtb3ZlIHRoZSBjb2xsaXNpb24gc2xvdCBmcm9t IEwxCi0JICogY2FjaGUgZG93biB0byBMMjsgYW5kIDMpIGZpbGwgTDEuCi0JICovCi0jZGVmaW5l IFJUUkVFX0dFVF9MRUFGKGxldmVsKSB7CQkJCQkJXAotCQlhc3NlcnQobGV2ZWwgPT0gUlRSRUVf SEVJR0hULTEpOwkJCVwKLQkJaWYgKCFkZXBlbmRlbnQgJiYgdW5saWtlbHkoIXJ0cmVlX2xlYWZf dmFsaWQobGVhZikpKSB7CVwKLQkJCXJldHVybiBOVUxMOwkJCQkJXAotCQl9CQkJCQkJCVwKLQkJ aWYgKFJUUkVFX0NUWF9OQ0FDSEVfTDIgPiAxKSB7CQkJCVwKLQkJCW1lbW1vdmUoJnJ0cmVlX2N0 eC0+bDJfY2FjaGVbMV0sCQlcCi0JCQkgICAgJnJ0cmVlX2N0eC0+bDJfY2FjaGVbMF0sCQkJXAot CQkJICAgIHNpemVvZihydHJlZV9jdHhfY2FjaGVfZWxtX3QpICoJCVwKLQkJCSAgICAoUlRSRUVf Q1RYX05DQUNIRV9MMiAtIDEpKTsJCQlcCi0JCX0JCQkJCQkJXAotCQlzaXplX3Qgc2xvdCA9IHJ0 cmVlX2NhY2hlX2RpcmVjdF9tYXAoa2V5KTsJCVwKLQkJcnRyZWVfY3R4LT5sMl9jYWNoZVswXS5s ZWFma2V5ID0JCQlcCi0JCSAgICBydHJlZV9jdHgtPmNhY2hlW3Nsb3RdLmxlYWZrZXk7CQkJXAot CQlydHJlZV9jdHgtPmwyX2NhY2hlWzBdLmxlYWYgPQkJCQlcCi0JCSAgICBydHJlZV9jdHgtPmNh Y2hlW3Nsb3RdLmxlYWY7CQkJXAotCQl1aW50cHRyX3QgbGVhZmtleSA9IHJ0cmVlX2xlYWZrZXko a2V5KTsJCQlcCi0JCXJ0cmVlX2N0eC0+Y2FjaGVbc2xvdF0ubGVhZmtleSA9IGxlYWZrZXk7CQlc Ci0JCXJ0cmVlX2N0eC0+Y2FjaGVbc2xvdF0ubGVhZiA9IGxlYWY7CQkJXAotCQl1aW50cHRyX3Qg c3Via2V5ID0gcnRyZWVfc3Via2V5KGtleSwgbGV2ZWwpOwkJXAotCQlyZXR1cm4gJmxlYWZbc3Vi a2V5XTsJCQkJCVwKLQl9Ci0JaWYgKFJUUkVFX0hFSUdIVCA+IDEpIHsKLQkJUlRSRUVfR0VUX0NI SUxEKDApCi0JfQotCWlmIChSVFJFRV9IRUlHSFQgPiAyKSB7Ci0JCVJUUkVFX0dFVF9DSElMRCgx KQotCX0KLQlpZiAoUlRSRUVfSEVJR0hUID4gMykgewotCQlmb3IgKHVuc2lnbmVkIGkgPSAyOyBp IDwgUlRSRUVfSEVJR0hULTE7IGkrKykgewotCQkJUlRSRUVfR0VUX0NISUxEKGkpCi0JCX0KLQl9 Ci0JUlRSRUVfR0VUX0xFQUYoUlRSRUVfSEVJR0hULTEpCi0jdW5kZWYgUlRSRUVfR0VUX0NISUxE Ci0jdW5kZWYgUlRSRUVfR0VUX0xFQUYKLQlub3RfcmVhY2hlZCgpOwotfQotCi12b2lkCi1ydHJl ZV9jdHhfZGF0YV9pbml0KHJ0cmVlX2N0eF90ICpjdHgpIHsKLQlmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgUlRSRUVfQ1RYX05DQUNIRTsgaSsrKSB7Ci0JCXJ0cmVlX2N0eF9jYWNoZV9lbG1fdCAq Y2FjaGUgPSAmY3R4LT5jYWNoZVtpXTsKLQkJY2FjaGUtPmxlYWZrZXkgPSBSVFJFRV9MRUFGS0VZ X0lOVkFMSUQ7Ci0JCWNhY2hlLT5sZWFmID0gTlVMTDsKLQl9Ci0JZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IFJUUkVFX0NUWF9OQ0FDSEVfTDI7IGkrKykgewotCQlydHJlZV9jdHhfY2FjaGVfZWxt X3QgKmNhY2hlID0gJmN0eC0+bDJfY2FjaGVbaV07Ci0JCWNhY2hlLT5sZWFma2V5ID0gUlRSRUVf TEVBRktFWV9JTlZBTElEOwotCQljYWNoZS0+bGVhZiA9IE5VTEw7Ci0JfQotfQoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYWZldHlfY2hl Y2suYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYWZldHlf Y2hlY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA5ZmRkYS4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc2FmZXR5X2No ZWNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2Mv aW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi1zdGF0aWMgc2FmZXR5X2NoZWNrX2Fi b3J0X2hvb2tfdCBzYWZldHlfY2hlY2tfYWJvcnQ7Ci0KLXZvaWQgc2FmZXR5X2NoZWNrX2ZhaWxf c2l6ZWRfZGVhbGxvYyhib29sIGN1cnJlbnRfZGVhbGxvYywgY29uc3Qgdm9pZCAqcHRyLAotICAg IHNpemVfdCB0cnVlX3NpemUsIHNpemVfdCBpbnB1dF9zaXplKSB7Ci0JY2hhciAqc3JjID0gY3Vy cmVudF9kZWFsbG9jID8gInRoZSBjdXJyZW50IHBvaW50ZXIgYmVpbmcgZnJlZWQiIDoKLQkgICAg ImluIHRocmVhZCBjYWNoZSwgcG9zc2libHkgZnJvbSBwcmV2aW91cyBkZWFsbG9jYXRpb25zIjsK LQotCXNhZmV0eV9jaGVja19mYWlsKCI8amVtYWxsb2M+OiBzaXplIG1pc21hdGNoIGRldGVjdGVk ICh0cnVlIHNpemUgJXp1ICIKLQkgICAgInZzIGlucHV0IHNpemUgJXp1KSwgbGlrZWx5IGNhdXNl ZCBieSBhcHBsaWNhdGlvbiBzaXplZCAiCi0JICAgICJkZWFsbG9jYXRpb24gYnVncyAoc291cmNl IGFkZHJlc3M6ICVwLCAlcykuIFN1Z2dlc3QgYnVpbGRpbmcgd2l0aCAiCi0JICAgICItLWVuYWJs ZS1kZWJ1ZyBvciBhZGRyZXNzIHNhbml0aXplciBmb3IgZGVidWdnaW5nLiBBYm9ydC5cbiIsCi0J ICAgIHRydWVfc2l6ZSwgaW5wdXRfc2l6ZSwgcHRyLCBzcmMpOwotfQotCi12b2lkIHNhZmV0eV9j aGVja19zZXRfYWJvcnQoc2FmZXR5X2NoZWNrX2Fib3J0X2hvb2tfdCBhYm9ydF9mbikgewotCXNh ZmV0eV9jaGVja19hYm9ydCA9IGFib3J0X2ZuOwotfQotCi12b2lkIHNhZmV0eV9jaGVja19mYWls KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7Ci0JY2hhciBidWZbTUFMTE9DX1BSSU5URl9CVUZT SVpFXTsKLQotCXZhX2xpc3QgYXA7Ci0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JbWFsbG9jX3Zz bnByaW50ZihidWYsIE1BTExPQ19QUklOVEZfQlVGU0laRSwgZm9ybWF0LCBhcCk7Ci0JdmFfZW5k KGFwKTsKLQotCWlmIChzYWZldHlfY2hlY2tfYWJvcnQgPT0gTlVMTCkgewotCQltYWxsb2Nfd3Jp dGUoYnVmKTsKLQkJYWJvcnQoKTsKLQl9IGVsc2UgewotCQlzYWZldHlfY2hlY2tfYWJvcnQoYnVm KTsKLQl9Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvc3JjL3Nhbi5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv c3JjL3Nhbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTUxMjkxLi4wMDAwMDAw Ci0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYW4uYwor KysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1h bGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv YXNzZXJ0LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZWhvb2tzLmgiCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv dHNkLmgiCi0KLS8qIFRoZSBzYW5pdGl6ZXIgb3B0aW9ucy4gKi8KLXNpemVfdCBvcHRfc2FuX2d1 YXJkX2xhcmdlID0gU0FOX0dVQVJEX0xBUkdFX0VWRVJZX05fRVhURU5UU19ERUZBVUxUOwotc2l6 ZV90IG9wdF9zYW5fZ3VhcmRfc21hbGwgPSBTQU5fR1VBUkRfU01BTExfRVZFUllfTl9FWFRFTlRT X0RFRkFVTFQ7Ci0KLS8qIEFsaWduZWQgKC0xIGlzIG9mZikgcHRycyB3aWxsIGJlIGp1bmtlZCAm IHN0YXNoZWQgb24gZGVhbGxvYy4gKi8KLXNzaXplX3Qgb3B0X2xnX3Nhbl91YWZfYWxpZ24gPSBT QU5fTEdfVUFGX0FMSUdOX0RFRkFVTFQ7Ci0KLS8qCi0gKiAgSW5pdGlhbGl6ZWQgaW4gc2FuX2lu aXQoKS4gIFdoZW4gZGlzYWJsZWQsIHRoZSBtYXNrIGlzIHNldCB0byAodWludHB0cl90KS0xCi0g KiAgdG8gYWx3YXlzIGZhaWwgdGhlIG5vbmZhc3RfYWxpZ24gY2hlY2suCi0gKi8KLXVpbnRwdHJf dCBzYW5fY2FjaGVfYmluX25vbmZhc3RfbWFzayA9IFNBTl9DQUNIRV9CSU5fTk9ORkFTVF9NQVNL X0RFRkFVTFQ7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotc2FuX2ZpbmRfZ3VhcmRlZF9hZGRyKGVk YXRhX3QgKmVkYXRhLCB1aW50cHRyX3QgKmd1YXJkMSwgdWludHB0cl90ICpndWFyZDIsCi0gICAg dWludHB0cl90ICphZGRyLCBzaXplX3Qgc2l6ZSwgYm9vbCBsZWZ0LCBib29sIHJpZ2h0KSB7Ci0J YXNzZXJ0KCFlZGF0YV9ndWFyZGVkX2dldChlZGF0YSkpOwotCWFzc2VydChzaXplICUgUEFHRSA9 PSAwKTsKLQkqYWRkciA9ICh1aW50cHRyX3QpZWRhdGFfYmFzZV9nZXQoZWRhdGEpOwotCWlmIChs ZWZ0KSB7Ci0JCSpndWFyZDEgPSAqYWRkcjsKLQkJKmFkZHIgKz0gU0FOX1BBR0VfR1VBUkQ7Ci0J fSBlbHNlIHsKLQkJKmd1YXJkMSA9IDA7Ci0JfQotCi0JaWYgKHJpZ2h0KSB7Ci0JCSpndWFyZDIg PSAqYWRkciArIHNpemU7Ci0JfSBlbHNlIHsKLQkJKmd1YXJkMiA9IDA7Ci0JfQotfQotCi1zdGF0 aWMgaW5saW5lIHZvaWQKLXNhbl9maW5kX3VuZ3VhcmRlZF9hZGRyKGVkYXRhX3QgKmVkYXRhLCB1 aW50cHRyX3QgKmd1YXJkMSwgdWludHB0cl90ICpndWFyZDIsCi0gICAgdWludHB0cl90ICphZGRy LCBzaXplX3Qgc2l6ZSwgYm9vbCBsZWZ0LCBib29sIHJpZ2h0KSB7Ci0JYXNzZXJ0KGVkYXRhX2d1 YXJkZWRfZ2V0KGVkYXRhKSk7Ci0JYXNzZXJ0KHNpemUgJSBQQUdFID09IDApOwotCSphZGRyID0g KHVpbnRwdHJfdCllZGF0YV9iYXNlX2dldChlZGF0YSk7Ci0JaWYgKHJpZ2h0KSB7Ci0JCSpndWFy ZDIgPSAqYWRkciArIHNpemU7Ci0JfSBlbHNlIHsKLQkJKmd1YXJkMiA9IDA7Ci0JfQotCi0JaWYg KGxlZnQpIHsKLQkJKmd1YXJkMSA9ICphZGRyIC0gU0FOX1BBR0VfR1VBUkQ7Ci0JCWFzc2VydCgq Z3VhcmQxICE9IDApOwotCQkqYWRkciA9ICpndWFyZDE7Ci0JfSBlbHNlIHsKLQkJKmd1YXJkMSA9 IDA7Ci0JfQotfQotCi12b2lkCi1zYW5fZ3VhcmRfcGFnZXModHNkbl90ICp0c2RuLCBlaG9va3Nf dCAqZWhvb2tzLCBlZGF0YV90ICplZGF0YSwgZW1hcF90ICplbWFwLAotICAgIGJvb2wgbGVmdCwg Ym9vbCByaWdodCwgYm9vbCByZW1hcCkgewotCWFzc2VydChsZWZ0IHx8IHJpZ2h0KTsKLQlpZiAo cmVtYXApIHsKLQkJZW1hcF9kZXJlZ2lzdGVyX2JvdW5kYXJ5KHRzZG4sIGVtYXAsIGVkYXRhKTsK LQl9Ci0KLQlzaXplX3Qgc2l6ZV93aXRoX2d1YXJkcyA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKTsK LQlzaXplX3QgdXNpemUgPSAobGVmdCAmJiByaWdodCkKLQkgICAgPyBzYW5fdHdvX3NpZGVfdW5n dWFyZGVkX3N6KHNpemVfd2l0aF9ndWFyZHMpCi0JICAgIDogc2FuX29uZV9zaWRlX3VuZ3VhcmRl ZF9zeihzaXplX3dpdGhfZ3VhcmRzKTsKLQotCXVpbnRwdHJfdCBndWFyZDEsIGd1YXJkMiwgYWRk cjsKLQlzYW5fZmluZF9ndWFyZGVkX2FkZHIoZWRhdGEsICZndWFyZDEsICZndWFyZDIsICZhZGRy LCB1c2l6ZSwgbGVmdCwKLQkgICAgcmlnaHQpOwotCi0JYXNzZXJ0KGVkYXRhX3N0YXRlX2dldChl ZGF0YSkgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSk7Ci0JZWhvb2tzX2d1YXJkKHRzZG4sIGVob29r cywgKHZvaWQgKilndWFyZDEsICh2b2lkICopZ3VhcmQyKTsKLQotCS8qIFVwZGF0ZSB0aGUgZ3Vh cmRlZCBhZGRyIGFuZCB1c2FibGUgc2l6ZSBvZiB0aGUgZWRhdGEuICovCi0JZWRhdGFfc2l6ZV9z ZXQoZWRhdGEsIHVzaXplKTsKLQllZGF0YV9hZGRyX3NldChlZGF0YSwgKHZvaWQgKilhZGRyKTsK LQllZGF0YV9ndWFyZGVkX3NldChlZGF0YSwgdHJ1ZSk7Ci0KLQlpZiAocmVtYXApIHsKLQkJZW1h cF9yZWdpc3Rlcl9ib3VuZGFyeSh0c2RuLCBlbWFwLCBlZGF0YSwgU0NfTlNJWkVTLAotCQkgICAg Lyogc2xhYiAqLyBmYWxzZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2FuX3VuZ3VhcmRfcGFn ZXNfaW1wbCh0c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAot ICAgIGVtYXBfdCAqZW1hcCwgYm9vbCBsZWZ0LCBib29sIHJpZ2h0LCBib29sIHJlbWFwKSB7Ci0J YXNzZXJ0KGxlZnQgfHwgcmlnaHQpOwotCS8qIFJlbW92ZSB0aGUgaW5uZXIgYm91bmRhcnkgd2hp Y2ggbm8gbG9uZ2VyIGV4aXN0cy4gKi8KLQlpZiAocmVtYXApIHsKLQkJYXNzZXJ0KGVkYXRhX3N0 YXRlX2dldChlZGF0YSkgPT0gZXh0ZW50X3N0YXRlX2FjdGl2ZSk7Ci0JCWVtYXBfZGVyZWdpc3Rl cl9ib3VuZGFyeSh0c2RuLCBlbWFwLCBlZGF0YSk7Ci0JfSBlbHNlIHsKLQkJYXNzZXJ0KGVkYXRh X3N0YXRlX2dldChlZGF0YSkgPT0gZXh0ZW50X3N0YXRlX3JldGFpbmVkKTsKLQl9Ci0KLQlzaXpl X3Qgc2l6ZSA9IGVkYXRhX3NpemVfZ2V0KGVkYXRhKTsKLQlzaXplX3Qgc2l6ZV93aXRoX2d1YXJk cyA9IChsZWZ0ICYmIHJpZ2h0KQotCSAgICA/IHNhbl90d29fc2lkZV9ndWFyZGVkX3N6KHNpemUp Ci0JICAgIDogc2FuX29uZV9zaWRlX2d1YXJkZWRfc3ooc2l6ZSk7Ci0KLQl1aW50cHRyX3QgZ3Vh cmQxLCBndWFyZDIsIGFkZHI7Ci0Jc2FuX2ZpbmRfdW5ndWFyZGVkX2FkZHIoZWRhdGEsICZndWFy ZDEsICZndWFyZDIsICZhZGRyLCBzaXplLCBsZWZ0LAotCSAgICByaWdodCk7Ci0KLQllaG9va3Nf dW5ndWFyZCh0c2RuLCBlaG9va3MsICh2b2lkICopZ3VhcmQxLCAodm9pZCAqKWd1YXJkMik7Ci0K LQkvKiBVcGRhdGUgdGhlIHRydWUgYWRkciBhbmQgdXNhYmxlIHNpemUgb2YgdGhlIGVkYXRhLiAq LwotCWVkYXRhX3NpemVfc2V0KGVkYXRhLCBzaXplX3dpdGhfZ3VhcmRzKTsKLQllZGF0YV9hZGRy X3NldChlZGF0YSwgKHZvaWQgKilhZGRyKTsKLQllZGF0YV9ndWFyZGVkX3NldChlZGF0YSwgZmFs c2UpOwotCi0JLyoKLQkgKiBUaGVuIHJlLXJlZ2lzdGVyIHRoZSBvdXRlciBib3VuZGFyeSBpbmNs dWRpbmcgdGhlIGd1YXJkcywgaWYKLQkgKiByZXF1ZXN0ZWQuCi0JICovCi0JaWYgKHJlbWFwKSB7 Ci0JCWVtYXBfcmVnaXN0ZXJfYm91bmRhcnkodHNkbiwgZW1hcCwgZWRhdGEsIFNDX05TSVpFUywK LQkJICAgIC8qIHNsYWIgKi8gZmFsc2UpOwotCX0KLX0KLQotdm9pZAotc2FuX3VuZ3VhcmRfcGFn ZXModHNkbl90ICp0c2RuLCBlaG9va3NfdCAqZWhvb2tzLCBlZGF0YV90ICplZGF0YSwKLSAgICBl bWFwX3QgKmVtYXAsIGJvb2wgbGVmdCwgYm9vbCByaWdodCkgewotCXNhbl91bmd1YXJkX3BhZ2Vz X2ltcGwodHNkbiwgZWhvb2tzLCBlZGF0YSwgZW1hcCwgbGVmdCwgcmlnaHQsCi0JICAgIC8qIHJl bWFwICovIHRydWUpOwotfQotCi12b2lkCi1zYW5fdW5ndWFyZF9wYWdlc19wcmVfZGVzdHJveSh0 c2RuX3QgKnRzZG4sIGVob29rc190ICplaG9va3MsIGVkYXRhX3QgKmVkYXRhLAotICAgIGVtYXBf dCAqZW1hcCkgewotCWVtYXBfYXNzZXJ0X25vdF9tYXBwZWQodHNkbiwgZW1hcCwgZWRhdGEpOwot CS8qCi0JICogV2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgZW1hcCBvZiBhYm91dCB0byBiZSBk ZXN0cm95ZWQgZXh0ZW50cywgYXMKLQkgKiB0aGV5IGhhdmUgYmVlbiB1bm1hcHBlZCB1cG9uIGV2 aWN0aW9uIGZyb20gdGhlIHJldGFpbmVkIGVjYWNoZS4gQWxzbywKLQkgKiB3ZSB1bmd1YXJkIHRo ZSBleHRlbnRzIHRvIHRoZSByaWdodCwgYmVjYXVzZSByZXRhaW5lZCBleHRlbnRzIG9ubHkKLQkg KiBvd24gdGhlaXIgcmlnaHQgZ3VhcmQgcGFnZSBwZXIgc2FuX2J1bXBfYWxsb2MncyBsb2dpYy4K LQkgKi8KLQkgc2FuX3VuZ3VhcmRfcGFnZXNfaW1wbCh0c2RuLCBlaG9va3MsIGVkYXRhLCBlbWFw LCAvKiBsZWZ0ICovIGZhbHNlLAotCSAgICAvKiByaWdodCAqLyB0cnVlLCAvKiByZW1hcCAqLyBm YWxzZSk7Ci19Ci0KLXN0YXRpYyBib29sCi1zYW5fc3Rhc2hlZF9jb3JydXB0ZWQodm9pZCAqcHRy LCBzaXplX3Qgc2l6ZSkgewotCWlmIChzYW5fanVua19wdHJfc2hvdWxkX3Nsb3coKSkgewotCQlm b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkJaWYgKCgoY2hhciAqKXB0cilb aV0gIT0gKGNoYXIpdWFmX2RldGVjdF9qdW5rKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0J CX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXZvaWQgKmZpcnN0LCAqbWlkLCAqbGFzdDsKLQlz YW5fanVua19wdHJfbG9jYXRpb25zKHB0ciwgc2l6ZSwgJmZpcnN0LCAmbWlkLCAmbGFzdCk7Ci0J aWYgKCoodWludHB0cl90ICopZmlyc3QgIT0gdWFmX2RldGVjdF9qdW5rIHx8Ci0JICAgICoodWlu dHB0cl90ICopbWlkICE9IHVhZl9kZXRlY3RfanVuayB8fAotCSAgICAqKHVpbnRwdHJfdCAqKWxh c3QgIT0gdWFmX2RldGVjdF9qdW5rKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBm YWxzZTsKLX0KLQotdm9pZAotc2FuX2NoZWNrX3N0YXNoZWRfcHRycyh2b2lkICoqcHRycywgc2l6 ZV90IG5zdGFzaGVkLCBzaXplX3QgdXNpemUpIHsKLQkvKgotCSAqIFZlcmlmeSB0aGF0IHRoZSBq dW5rZWQtZmlsbGVkICYgc3Rhc2hlZCBwb2ludGVycyByZW1haW4gdW5jaGFuZ2VkLCB0bwotCSAq IGRldGVjdCB3cml0ZS1hZnRlci1mcmVlLgotCSAqLwotCWZvciAoc2l6ZV90IG4gPSAwOyBuIDwg bnN0YXNoZWQ7IG4rKykgewotCQl2b2lkICpzdGFzaGVkID0gcHRyc1tuXTsKLQkJYXNzZXJ0KHN0 YXNoZWQgIT0gTlVMTCk7Ci0JCWFzc2VydChjYWNoZV9iaW5fbm9uZmFzdF9hbGlnbmVkKHN0YXNo ZWQpKTsKLQkJaWYgKHVubGlrZWx5KHNhbl9zdGFzaGVkX2NvcnJ1cHRlZChzdGFzaGVkLCB1c2l6 ZSkpKSB7Ci0JCQlzYWZldHlfY2hlY2tfZmFpbCgiPGplbWFsbG9jPjogV3JpdGUtYWZ0ZXItZnJl ZSAiCi0JCQkgICAgImRldGVjdGVkIG9uIGRlYWxsb2NhdGVkIHBvaW50ZXIgJXAgKHNpemUgJXp1 KS5cbiIsCi0JCQkgICAgc3Rhc2hlZCwgdXNpemUpOwotCQl9Ci0JfQotfQotCi12b2lkCi10c2Rf c2FuX2luaXQodHNkX3QgKnRzZCkgewotCSp0c2Rfc2FuX2V4dGVudHNfdW50aWxfZ3VhcmRfc21h bGxwX2dldCh0c2QpID0gb3B0X3Nhbl9ndWFyZF9zbWFsbDsKLQkqdHNkX3Nhbl9leHRlbnRzX3Vu dGlsX2d1YXJkX2xhcmdlcF9nZXQodHNkKSA9IG9wdF9zYW5fZ3VhcmRfbGFyZ2U7Ci19Ci0KLXZv aWQKLXNhbl9pbml0KHNzaXplX3QgbGdfc2FuX3VhZl9hbGlnbikgewotCWFzc2VydChsZ19zYW5f dWFmX2FsaWduID09IC0xIHx8IGxnX3Nhbl91YWZfYWxpZ24gPj0gTEdfUEFHRSk7Ci0JaWYgKGxn X3Nhbl91YWZfYWxpZ24gPT0gLTEpIHsKLQkJc2FuX2NhY2hlX2Jpbl9ub25mYXN0X21hc2sgPSAo dWludHB0cl90KS0xOwotCQlyZXR1cm47Ci0JfQotCi0Jc2FuX2NhY2hlX2Jpbl9ub25mYXN0X21h c2sgPSAoKHVpbnRwdHJfdCkxIDw8IGxnX3Nhbl91YWZfYWxpZ24pIC0gMTsKLX0KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc2FuX2J1bXAu YyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYW5fYnVtcC5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODg5NzQ1Li4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy9zYW5fYnVtcC5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9j X2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYW5f YnVtcC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3BhYy5oIgotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3Nhbi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Vob29r cy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2VkYXRhX2NhY2hlLmgiCi0KLXN0YXRp YyBib29sCi1zYW5fYnVtcF9ncm93X2xvY2tlZCh0c2RuX3QgKnRzZG4sIHNhbl9idW1wX2FsbG9j X3QgKnNiYSwgcGFjX3QgKnBhYywKLSAgICBlaG9va3NfdCAqZWhvb2tzLCBzaXplX3Qgc2l6ZSk7 Ci0KLWVkYXRhX3QgKgotc2FuX2J1bXBfYWxsb2ModHNkbl90ICp0c2RuLCBzYW5fYnVtcF9hbGxv Y190KiBzYmEsIHBhY190ICpwYWMsCi0gICAgZWhvb2tzX3QgKmVob29rcywgc2l6ZV90IHNpemUs IGJvb2wgemVybykgewotCWFzc2VydChzYW5fYnVtcF9lbmFibGVkKCkpOwotCi0JZWRhdGFfdCog dG9fZGVzdHJveTsKLQlzaXplX3QgZ3VhcmRlZF9zaXplID0gc2FuX29uZV9zaWRlX2d1YXJkZWRf c3ooc2l6ZSk7Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2JhLT5tdHgpOwotCi0JaWYg KHNiYS0+Y3Vycl9yZWcgPT0gTlVMTCB8fAotCSAgICBlZGF0YV9zaXplX2dldChzYmEtPmN1cnJf cmVnKSA8IGd1YXJkZWRfc2l6ZSkgewotCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCByZWdpb24g Y2FuJ3QgYWNjb21tb2RhdGUgdGhlIGFsbG9jYXRpb24sCi0JCSAqIHRyeSByZXBsYWNpbmcgaXQg d2l0aCBhIGxhcmdlciBvbmUgYW5kIGRlc3Ryb3kgY3VycmVudCBpZiB0aGUKLQkJICogcmVwbGFj ZW1lbnQgc3VjY2VlZHMuCi0JCSAqLwotCQl0b19kZXN0cm95ID0gc2JhLT5jdXJyX3JlZzsKLQkJ Ym9vbCBlcnIgPSBzYW5fYnVtcF9ncm93X2xvY2tlZCh0c2RuLCBzYmEsIHBhYywgZWhvb2tzLAot CQkgICAgZ3VhcmRlZF9zaXplKTsKLQkJaWYgKGVycikgewotCQkJZ290byBsYWJlbF9lcnI7Ci0J CX0KLQl9IGVsc2UgewotCQl0b19kZXN0cm95ID0gTlVMTDsKLQl9Ci0JYXNzZXJ0KGd1YXJkZWRf c2l6ZSA8PSBlZGF0YV9zaXplX2dldChzYmEtPmN1cnJfcmVnKSk7Ci0Jc2l6ZV90IHRyYWlsX3Np emUgPSBlZGF0YV9zaXplX2dldChzYmEtPmN1cnJfcmVnKSAtIGd1YXJkZWRfc2l6ZTsKLQotCWVk YXRhX3QqIGVkYXRhOwotCWlmICh0cmFpbF9zaXplICE9IDApIHsKLQkJZWRhdGFfdCogY3Vycl9y ZWdfdHJhaWwgPSBleHRlbnRfc3BsaXRfd3JhcHBlcih0c2RuLCBwYWMsCi0JCSAgICBlaG9va3Ms IHNiYS0+Y3Vycl9yZWcsIGd1YXJkZWRfc2l6ZSwgdHJhaWxfc2l6ZSwKLQkJICAgIC8qIGhvbGRp bmdfY29yZV9sb2NrcyAqLyB0cnVlKTsKLQkJaWYgKGN1cnJfcmVnX3RyYWlsID09IE5VTEwpIHsK LQkJCWdvdG8gbGFiZWxfZXJyOwotCQl9Ci0JCWVkYXRhID0gc2JhLT5jdXJyX3JlZzsKLQkJc2Jh LT5jdXJyX3JlZyA9IGN1cnJfcmVnX3RyYWlsOwotCX0gZWxzZSB7Ci0JCWVkYXRhID0gc2JhLT5j dXJyX3JlZzsKLQkJc2JhLT5jdXJyX3JlZyA9IE5VTEw7Ci0JfQotCi0JbWFsbG9jX211dGV4X3Vu bG9jayh0c2RuLCAmc2JhLT5tdHgpOwotCi0JYXNzZXJ0KCFlZGF0YV9ndWFyZGVkX2dldChlZGF0 YSkpOwotCWFzc2VydChzYmEtPmN1cnJfcmVnID09IE5VTEwgfHwgIWVkYXRhX2d1YXJkZWRfZ2V0 KHNiYS0+Y3Vycl9yZWcpKTsKLQlhc3NlcnQodG9fZGVzdHJveSA9PSBOVUxMIHx8ICFlZGF0YV9n dWFyZGVkX2dldCh0b19kZXN0cm95KSk7Ci0KLQlpZiAodG9fZGVzdHJveSAhPSBOVUxMKSB7Ci0J CWV4dGVudF9kZXN0cm95X3dyYXBwZXIodHNkbiwgcGFjLCBlaG9va3MsIHRvX2Rlc3Ryb3kpOwot CX0KLQotCXNhbl9ndWFyZF9wYWdlcyh0c2RuLCBlaG9va3MsIGVkYXRhLCBwYWMtPmVtYXAsIC8q IGxlZnQgKi8gZmFsc2UsCi0JICAgIC8qIHJpZ2h0ICovIHRydWUsIC8qIHJlbWFwICovIHRydWUp OwotCi0JaWYgKGV4dGVudF9jb21taXRfemVybyh0c2RuLCBlaG9va3MsIGVkYXRhLCAvKiBjb21t aXQgKi8gdHJ1ZSwgemVybywKLQkgICAgLyogZ3Jvd2luZ19yZXRhaW5lZCAqLyBmYWxzZSkpIHsK LQkJZXh0ZW50X3JlY29yZCh0c2RuLCBwYWMsIGVob29rcywgJnBhYy0+ZWNhY2hlX3JldGFpbmVk LAotCQkgICAgZWRhdGEpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoY29uZmlnX3Byb2Yp IHsKLQkJZXh0ZW50X2dkdW1wX2FkZCh0c2RuLCBlZGF0YSk7Ci0JfQotCi0JcmV0dXJuIGVkYXRh OwotbGFiZWxfZXJyOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNiYS0+bXR4KTsKLQly ZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGJvb2wKLXNhbl9idW1wX2dyb3dfbG9ja2VkKHRzZG5f dCAqdHNkbiwgc2FuX2J1bXBfYWxsb2NfdCAqc2JhLCBwYWNfdCAqcGFjLAotICAgIGVob29rc190 ICplaG9va3MsIHNpemVfdCBzaXplKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2Ru LCAmc2JhLT5tdHgpOwotCi0JYm9vbCBjb21taXR0ZWQgPSBmYWxzZSwgemVyb2VkID0gZmFsc2U7 Ci0Jc2l6ZV90IGFsbG9jX3NpemUgPSBzaXplID4gU0JBX1JFVEFJTkVEX0FMTE9DX1NJWkUgPyBz aXplIDoKLQkgICAgU0JBX1JFVEFJTkVEX0FMTE9DX1NJWkU7Ci0JYXNzZXJ0KChhbGxvY19zaXpl ICYgUEFHRV9NQVNLKSA9PSAwKTsKLQlzYmEtPmN1cnJfcmVnID0gZXh0ZW50X2FsbG9jX3dyYXBw ZXIodHNkbiwgcGFjLCBlaG9va3MsIE5VTEwsCi0JICAgIGFsbG9jX3NpemUsIFBBR0UsIHplcm9l ZCwgJmNvbW1pdHRlZCwKLQkgICAgLyogZ3Jvd2luZ19yZXRhaW5lZCAqLyB0cnVlKTsKLQlpZiAo c2JhLT5jdXJyX3JlZyA9PSBOVUxMKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFs c2U7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL3NjLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv c2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRhOTRkOC4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc2MuYworKysgL2Rl di9udWxsCkBAIC0xLDMwNiArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVt YWxsb2NfcHJlYW1ibGUuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5o IgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2JpdF91dGlsLmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvYml0bWFwLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcGFn ZXMuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zYy5oIgotCi0vKgotICogVGhpcyBt b2R1bGUgY29tcHV0ZXMgdGhlIHNpemUgY2xhc3NlcyB1c2VkIHRvIHNhdGlzZnkgYWxsb2NhdGlv bnMuICBUaGUgbG9naWMKLSAqIGhlcmUgd2FzIHBvcnRlZCBtb3JlIG9yIGxlc3MgbGluZS1ieS1s aW5lIGZyb20gYSBzaGVsbCBzY3JpcHQsIGFuZCBiZWNhdXNlIG9mCi0gKiB0aGF0IGlzIG5vdCB0 aGUgbW9zdCBpZGlvbWF0aWMgQy4gIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIGZpeCB0aGlzLCBidXQg Zm9yIG5vdwotICogYXQgbGVhc3QgdGhlIGRhbWFnZSBpcyBjb21wYXJ0bWVudGFsaXplZCB0byB0 aGlzIGZpbGUuCi0gKi8KLQotc2l6ZV90Ci1yZWdfc2l6ZV9jb21wdXRlKGludCBsZ19iYXNlLCBp bnQgbGdfZGVsdGEsIGludCBuZGVsdGEpIHsKLQlyZXR1cm4gKFpVKDEpIDw8IGxnX2Jhc2UpICsg KFpVKG5kZWx0YSkgPDwgbGdfZGVsdGEpOwotfQotCi0vKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg cGFnZXMgaW4gdGhlIHNsYWIuICovCi1zdGF0aWMgaW50Ci1zbGFiX3NpemUoaW50IGxnX3BhZ2Us IGludCBsZ19iYXNlLCBpbnQgbGdfZGVsdGEsIGludCBuZGVsdGEpIHsKLQlzaXplX3QgcGFnZSA9 IChaVSgxKSA8PCBsZ19wYWdlKTsKLQlzaXplX3QgcmVnX3NpemUgPSByZWdfc2l6ZV9jb21wdXRl KGxnX2Jhc2UsIGxnX2RlbHRhLCBuZGVsdGEpOwotCi0Jc2l6ZV90IHRyeV9zbGFiX3NpemUgPSBw YWdlOwotCXNpemVfdCB0cnlfbnJlZ3MgPSB0cnlfc2xhYl9zaXplIC8gcmVnX3NpemU7Ci0Jc2l6 ZV90IHBlcmZlY3Rfc2xhYl9zaXplID0gMDsKLQlib29sIHBlcmZlY3QgPSBmYWxzZTsKLQkvKgot CSAqIFRoaXMgbG9vcCBjb250aW51ZXMgdW50aWwgd2UgZmluZCB0aGUgbGVhc3QgY29tbW9uIG11 bHRpcGxlIG9mIHRoZQotCSAqIHBhZ2Ugc2l6ZSBhbmQgc2l6ZSBjbGFzcyBzaXplLiAgU2l6ZSBj bGFzc2VzIGFyZSBhbGwgb2YgdGhlIGZvcm0KLQkgKiBiYXNlICsgbmRlbHRhICogZGVsdGEgPT0g KG5kZWx0YSArIGJhc2UvbmRlbHRhKSAqIGRlbHRhLCB3aGljaCBpcwotCSAqIChuZGVsdGEgKyBu Z3JvdXApICogZGVsdGEuICBUaGUgd2F5IHdlIGNob29zZSBzbGFiYmluZyBzdHJhdGVnaWVzCi0J ICogbWVhbnMgdGhhdCBkZWx0YSBpcyBhdCBtb3N0IHRoZSBwYWdlIHNpemUgYW5kIG5kZWx0YSA8 IG5ncm91cC4gIFNvCi0JICogdGhlIGxvb3AgZXhlY3V0ZXMgZm9yIGF0IG1vc3QgMiAqIG5ncm91 cCAtIDEgaXRlcmF0aW9ucywgd2hpY2ggaXMKLQkgKiBhbHNvIHRoZSBib3VuZCBvbiB0aGUgbnVt YmVyIG9mIHBhZ2VzIGluIGEgc2xhYiBjaG9zZW4gYnkgZGVmYXVsdC4KLQkgKiBXaXRoIHRoZSBj dXJyZW50IGRlZmF1bHQgc2V0dGluZ3MsIHRoaXMgaXMgYXQgbW9zdCA3LgotCSAqLwotCXdoaWxl ICghcGVyZmVjdCkgewotCQlwZXJmZWN0X3NsYWJfc2l6ZSA9IHRyeV9zbGFiX3NpemU7Ci0JCXNp emVfdCBwZXJmZWN0X25yZWdzID0gdHJ5X25yZWdzOwotCQl0cnlfc2xhYl9zaXplICs9IHBhZ2U7 Ci0JCXRyeV9ucmVncyA9IHRyeV9zbGFiX3NpemUgLyByZWdfc2l6ZTsKLQkJaWYgKHBlcmZlY3Rf c2xhYl9zaXplID09IHBlcmZlY3RfbnJlZ3MgKiByZWdfc2l6ZSkgewotCQkJcGVyZmVjdCA9IHRy dWU7Ci0JCX0KLQl9Ci0JcmV0dXJuIChpbnQpKHBlcmZlY3Rfc2xhYl9zaXplIC8gcGFnZSk7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1zaXplX2NsYXNzKAotICAgIC8qIE91dHB1dC4gKi8KLSAgICBzY190 ICpzYywKLSAgICAvKiBDb25maWd1cmF0aW9uIGRlY2lzaW9ucy4gKi8KLSAgICBpbnQgbGdfbWF4 X2xvb2t1cCwgaW50IGxnX3BhZ2UsIGludCBsZ19uZ3JvdXAsCi0gICAgLyogSW5wdXRzIHNwZWNp ZmljIHRvIHRoZSBzaXplIGNsYXNzLiAqLwotICAgIGludCBpbmRleCwgaW50IGxnX2Jhc2UsIGlu dCBsZ19kZWx0YSwgaW50IG5kZWx0YSkgewotCXNjLT5pbmRleCA9IGluZGV4OwotCXNjLT5sZ19i YXNlID0gbGdfYmFzZTsKLQlzYy0+bGdfZGVsdGEgPSBsZ19kZWx0YTsKLQlzYy0+bmRlbHRhID0g bmRlbHRhOwotCXNpemVfdCBzaXplID0gcmVnX3NpemVfY29tcHV0ZShsZ19iYXNlLCBsZ19kZWx0 YSwgbmRlbHRhKTsKLQlzYy0+cHN6ID0gKHNpemUgJSAoWlUoMSkgPDwgbGdfcGFnZSkgPT0gMCk7 Ci0JaWYgKGluZGV4ID09IDApIHsKLQkJYXNzZXJ0KCFzYy0+cHN6KTsKLQl9Ci0JaWYgKHNpemUg PCAoWlUoMSkgPDwgKGxnX3BhZ2UgKyBsZ19uZ3JvdXApKSkgewotCQlzYy0+YmluID0gdHJ1ZTsK LQkJc2MtPnBncyA9IHNsYWJfc2l6ZShsZ19wYWdlLCBsZ19iYXNlLCBsZ19kZWx0YSwgbmRlbHRh KTsKLQl9IGVsc2UgewotCQlzYy0+YmluID0gZmFsc2U7Ci0JCXNjLT5wZ3MgPSAwOwotCX0KLQlp ZiAoc2l6ZSA8PSAoWlUoMSkgPDwgbGdfbWF4X2xvb2t1cCkpIHsKLQkJc2MtPmxnX2RlbHRhX2xv b2t1cCA9IGxnX2RlbHRhOwotCX0gZWxzZSB7Ci0JCXNjLT5sZ19kZWx0YV9sb29rdXAgPSAwOwot CX0KLX0KLQotc3RhdGljIHZvaWQKLXNpemVfY2xhc3NlcygKLSAgICAvKiBPdXRwdXQuICovCi0g ICAgc2NfZGF0YV90ICpzY19kYXRhLAotICAgIC8qIERldGVybWluZWQgYnkgdGhlIHN5c3RlbS4g Ki8KLSAgICBzaXplX3QgbGdfcHRyX3NpemUsIGludCBsZ19xdWFudHVtLAotICAgIC8qIENvbmZp Z3VyYXRpb24gZGVjaXNpb25zLiAqLwotICAgIGludCBsZ190aW55X21pbiwgaW50IGxnX21heF9s b29rdXAsIGludCBsZ19wYWdlLCBpbnQgbGdfbmdyb3VwKSB7Ci0JaW50IHB0cl9iaXRzID0gKDEg PDwgbGdfcHRyX3NpemUpICogODsKLQlpbnQgbmdyb3VwID0gKDEgPDwgbGdfbmdyb3VwKTsKLQlp bnQgbnRpbnkgPSAwOwotCWludCBubGJpbnMgPSAwOwotCWludCBsZ190aW55X21heGNsYXNzID0g KHVuc2lnbmVkKS0xOwotCWludCBuYmlucyA9IDA7Ci0JaW50IG5wc2l6ZXMgPSAwOwotCi0JaW50 IGluZGV4ID0gMDsKLQotCWludCBuZGVsdGEgPSAwOwotCWludCBsZ19iYXNlID0gbGdfdGlueV9t aW47Ci0JaW50IGxnX2RlbHRhID0gbGdfYmFzZTsKLQotCS8qIE91dHB1dHMgdGhhdCB3ZSB1cGRh dGUgYXMgd2UgZ28uICovCi0Jc2l6ZV90IGxvb2t1cF9tYXhjbGFzcyA9IDA7Ci0Jc2l6ZV90IHNt YWxsX21heGNsYXNzID0gMDsKLQlpbnQgbGdfbGFyZ2VfbWluY2xhc3MgPSAwOwotCXNpemVfdCBs YXJnZV9tYXhjbGFzcyA9IDA7Ci0KLQkvKiBUaW55IHNpemUgY2xhc3Nlcy4gKi8KLQl3aGlsZSAo bGdfYmFzZSA8IGxnX3F1YW50dW0pIHsKLQkJc2NfdCAqc2MgPSAmc2NfZGF0YS0+c2NbaW5kZXhd OwotCQlzaXplX2NsYXNzKHNjLCBsZ19tYXhfbG9va3VwLCBsZ19wYWdlLCBsZ19uZ3JvdXAsIGlu ZGV4LAotCQkgICAgbGdfYmFzZSwgbGdfZGVsdGEsIG5kZWx0YSk7Ci0JCWlmIChzYy0+bGdfZGVs dGFfbG9va3VwICE9IDApIHsKLQkJCW5sYmlucyA9IGluZGV4ICsgMTsKLQkJfQotCQlpZiAoc2Mt PnBzeikgewotCQkJbnBzaXplcysrOwotCQl9Ci0JCWlmIChzYy0+YmluKSB7Ci0JCQluYmlucysr OwotCQl9Ci0JCW50aW55Kys7Ci0JCS8qIEZpbmFsIHdyaXR0ZW4gdmFsdWUgaXMgY29ycmVjdC4g Ki8KLQkJbGdfdGlueV9tYXhjbGFzcyA9IGxnX2Jhc2U7Ci0JCWluZGV4Kys7Ci0JCWxnX2RlbHRh ID0gbGdfYmFzZTsKLQkJbGdfYmFzZSsrOwotCX0KLQotCS8qIEZpcnN0IG5vbi10aW55IChwc2V1 ZG8pIGdyb3VwLiAqLwotCWlmIChudGlueSAhPSAwKSB7Ci0JCXNjX3QgKnNjID0gJnNjX2RhdGEt PnNjW2luZGV4XTsKLQkJLyoKLQkJICogU2VlIHRoZSBub3RlIGluIHNjLmg7IHRoZSBmaXJzdCBu b24tdGlueSBzaXplIGNsYXNzIGhhcyBhbgotCQkgKiB1bnVzdWFsIGVuY29kaW5nLgotCQkgKi8K LQkJbGdfYmFzZS0tOwotCQluZGVsdGEgPSAxOwotCQlzaXplX2NsYXNzKHNjLCBsZ19tYXhfbG9v a3VwLCBsZ19wYWdlLCBsZ19uZ3JvdXAsIGluZGV4LAotCQkgICAgbGdfYmFzZSwgbGdfZGVsdGEs IG5kZWx0YSk7Ci0JCWluZGV4Kys7Ci0JCWxnX2Jhc2UrKzsKLQkJbGdfZGVsdGErKzsKLQkJaWYg KHNjLT5wc3opIHsKLQkJCW5wc2l6ZXMrKzsKLQkJfQotCQlpZiAoc2MtPmJpbikgewotCQkJbmJp bnMrKzsKLQkJfQotCX0KLQl3aGlsZSAobmRlbHRhIDwgbmdyb3VwKSB7Ci0JCXNjX3QgKnNjID0g JnNjX2RhdGEtPnNjW2luZGV4XTsKLQkJc2l6ZV9jbGFzcyhzYywgbGdfbWF4X2xvb2t1cCwgbGdf cGFnZSwgbGdfbmdyb3VwLCBpbmRleCwKLQkJICAgIGxnX2Jhc2UsIGxnX2RlbHRhLCBuZGVsdGEp OwotCQlpbmRleCsrOwotCQluZGVsdGErKzsKLQkJaWYgKHNjLT5wc3opIHsKLQkJCW5wc2l6ZXMr KzsKLQkJfQotCQlpZiAoc2MtPmJpbikgewotCQkJbmJpbnMrKzsKLQkJfQotCX0KLQotCS8qIEFs bCByZW1haW5pbmcgZ3JvdXBzLiAqLwotCWxnX2Jhc2UgPSBsZ19iYXNlICsgbGdfbmdyb3VwOwot CXdoaWxlIChsZ19iYXNlIDwgcHRyX2JpdHMgLSAxKSB7Ci0JCW5kZWx0YSA9IDE7Ci0JCWludCBu ZGVsdGFfbGltaXQ7Ci0JCWlmIChsZ19iYXNlID09IHB0cl9iaXRzIC0gMikgewotCQkJbmRlbHRh X2xpbWl0ID0gbmdyb3VwIC0gMTsKLQkJfSBlbHNlIHsKLQkJCW5kZWx0YV9saW1pdCA9IG5ncm91 cDsKLQkJfQotCQl3aGlsZSAobmRlbHRhIDw9IG5kZWx0YV9saW1pdCkgewotCQkJc2NfdCAqc2Mg PSAmc2NfZGF0YS0+c2NbaW5kZXhdOwotCQkJc2l6ZV9jbGFzcyhzYywgbGdfbWF4X2xvb2t1cCwg bGdfcGFnZSwgbGdfbmdyb3VwLCBpbmRleCwKLQkJCSAgICBsZ19iYXNlLCBsZ19kZWx0YSwgbmRl bHRhKTsKLQkJCWlmIChzYy0+bGdfZGVsdGFfbG9va3VwICE9IDApIHsKLQkJCQlubGJpbnMgPSBp bmRleCArIDE7Ci0JCQkJLyogRmluYWwgd3JpdHRlbiB2YWx1ZSBpcyBjb3JyZWN0LiAqLwotCQkJ CWxvb2t1cF9tYXhjbGFzcyA9IChaVSgxKSA8PCBsZ19iYXNlKQotCQkJCSAgICArIChaVShuZGVs dGEpIDw8IGxnX2RlbHRhKTsKLQkJCX0KLQkJCWlmIChzYy0+cHN6KSB7Ci0JCQkJbnBzaXplcysr OwotCQkJfQotCQkJaWYgKHNjLT5iaW4pIHsKLQkJCQluYmlucysrOwotCQkJCS8qIEZpbmFsIHdy aXR0ZW4gdmFsdWUgaXMgY29ycmVjdC4gKi8KLQkJCQlzbWFsbF9tYXhjbGFzcyA9IChaVSgxKSA8 PCBsZ19iYXNlKQotCQkJCSAgICArIChaVShuZGVsdGEpIDw8IGxnX2RlbHRhKTsKLQkJCQlpZiAo bGdfbmdyb3VwID4gMCkgewotCQkJCQlsZ19sYXJnZV9taW5jbGFzcyA9IGxnX2Jhc2UgKyAxOwot CQkJCX0gZWxzZSB7Ci0JCQkJCWxnX2xhcmdlX21pbmNsYXNzID0gbGdfYmFzZSArIDI7Ci0JCQkJ fQotCQkJfQotCQkJbGFyZ2VfbWF4Y2xhc3MgPSAoWlUoMSkgPDwgbGdfYmFzZSkKLQkJCSAgICAr IChaVShuZGVsdGEpIDw8IGxnX2RlbHRhKTsKLQkJCWluZGV4Kys7Ci0JCQluZGVsdGErKzsKLQkJ fQotCQlsZ19iYXNlKys7Ci0JCWxnX2RlbHRhKys7Ci0JfQotCS8qIEFkZGl0aW9uYWwgb3V0cHV0 cy4gKi8KLQlpbnQgbnNpemVzID0gaW5kZXg7Ci0JdW5zaWduZWQgbGdfY2VpbF9uc2l6ZXMgPSBs Z19jZWlsKG5zaXplcyk7Ci0KLQkvKiBGaWxsIGluIHRoZSBvdXRwdXQgZGF0YS4gKi8KLQlzY19k YXRhLT5udGlueSA9IG50aW55OwotCXNjX2RhdGEtPm5sYmlucyA9IG5sYmluczsKLQlzY19kYXRh LT5uYmlucyA9IG5iaW5zOwotCXNjX2RhdGEtPm5zaXplcyA9IG5zaXplczsKLQlzY19kYXRhLT5s Z19jZWlsX25zaXplcyA9IGxnX2NlaWxfbnNpemVzOwotCXNjX2RhdGEtPm5wc2l6ZXMgPSBucHNp emVzOwotCXNjX2RhdGEtPmxnX3RpbnlfbWF4Y2xhc3MgPSBsZ190aW55X21heGNsYXNzOwotCXNj X2RhdGEtPmxvb2t1cF9tYXhjbGFzcyA9IGxvb2t1cF9tYXhjbGFzczsKLQlzY19kYXRhLT5zbWFs bF9tYXhjbGFzcyA9IHNtYWxsX21heGNsYXNzOwotCXNjX2RhdGEtPmxnX2xhcmdlX21pbmNsYXNz ID0gbGdfbGFyZ2VfbWluY2xhc3M7Ci0Jc2NfZGF0YS0+bGFyZ2VfbWluY2xhc3MgPSAoWlUoMSkg PDwgbGdfbGFyZ2VfbWluY2xhc3MpOwotCXNjX2RhdGEtPmxhcmdlX21heGNsYXNzID0gbGFyZ2Vf bWF4Y2xhc3M7Ci0KLQkvKgotCSAqIFdlIGNvbXB1dGUgdGhlc2UgdmFsdWVzIGluIHR3byB3YXlz OgotCSAqICAgLSBJbmNyZW1lbnRhbGx5LCBhcyBhYm92ZS4KLQkgKiAgIC0gSW4gbWFjcm9zLCBp biBzYy5oLgotCSAqIFRoZSBjb21wdXRhdGlvbiBpcyBlYXNpZXIgd2hlbiBkb25lIGluY3JlbWVu dGFsbHksIGJ1dCBwdXR0aW5nIGl0IGluCi0JICogYSBjb25zdGFudCBtYWtlcyBpdCBhdmFpbGFi bGUgdG8gdGhlIGZhc3QgcGF0aHMgd2l0aG91dCBoYXZpbmcgdG8KLQkgKiB0b3VjaCB0aGUgZXh0 cmEgZ2xvYmFsIGNhY2hlbGluZS4gIFdlIGFzc2VydCwgaG93ZXZlciwgdGhhdCB0aGUgdHdvCi0J ICogY29tcHV0YXRpb25zIGFyZSBlcXVpdmFsZW50LgotCSAqLwotCWFzc2VydChzY19kYXRhLT5u cHNpemVzID09IFNDX05QU0laRVMpOwotCWFzc2VydChzY19kYXRhLT5sZ190aW55X21heGNsYXNz ID09IFNDX0xHX1RJTllfTUFYQ0xBU1MpOwotCWFzc2VydChzY19kYXRhLT5zbWFsbF9tYXhjbGFz cyA9PSBTQ19TTUFMTF9NQVhDTEFTUyk7Ci0JYXNzZXJ0KHNjX2RhdGEtPmxhcmdlX21pbmNsYXNz ID09IFNDX0xBUkdFX01JTkNMQVNTKTsKLQlhc3NlcnQoc2NfZGF0YS0+bGdfbGFyZ2VfbWluY2xh c3MgPT0gU0NfTEdfTEFSR0VfTUlOQ0xBU1MpOwotCWFzc2VydChzY19kYXRhLT5sYXJnZV9tYXhj bGFzcyA9PSBTQ19MQVJHRV9NQVhDTEFTUyk7Ci0KLQkvKgotCSAqIEluIHRoZSBhbGxvY2F0aW9u IGZhc3RwYXRoLCB3ZSB3YW50IHRvIGFzc3VtZSB0aGF0IHdlIGNhbgotCSAqIHVuY29uZGl0aW9u YWxseSBzdWJ0cmFjdCB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24gc2l6ZSBmcm9tCi0JICogYSBz c2l6ZV90LCBhbmQgZGV0ZWN0IHBhc3NpbmcgdGhyb3VnaCAwIGNvcnJlY3RseS4gIFRoaXMKLQkg KiByZXN1bHRzIGluIG9wdGltYWwgZ2VuZXJhdGVkIGNvZGUuICBGb3IgdGhpcyB0byB3b3JrLCB0 aGUKLQkgKiBtYXhpbXVtIGFsbG9jYXRpb24gc2l6ZSBtdXN0IGJlIGxlc3MgdGhhbiBTU0laRV9N QVguCi0JICovCi0JYXNzZXJ0KFNDX0xBUkdFX01BWENMQVNTIDwgU1NJWkVfTUFYKTsKLX0KLQot dm9pZAotc2NfZGF0YV9pbml0KHNjX2RhdGFfdCAqc2NfZGF0YSkgewotCXNpemVfY2xhc3Nlcyhz Y19kYXRhLCBMR19TSVpFT0ZfUFRSLCBMR19RVUFOVFVNLCBTQ19MR19USU5ZX01JTiwKLQkgICAg U0NfTEdfTUFYX0xPT0tVUCwgTEdfUEFHRSwgU0NfTEdfTkdST1VQKTsKLQotCXNjX2RhdGEtPmlu aXRpYWxpemVkID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQKLXNjX2RhdGFfdXBkYXRlX3NjX3Ns YWJfc2l6ZShzY190ICpzYywgc2l6ZV90IHJlZ19zaXplLCBzaXplX3QgcGdzX2d1ZXNzKSB7Ci0J c2l6ZV90IG1pbl9wZ3MgPSByZWdfc2l6ZSAvIFBBR0U7Ci0JaWYgKHJlZ19zaXplICUgUEFHRSAh PSAwKSB7Ci0JCW1pbl9wZ3MrKzsKLQl9Ci0JLyoKLQkgKiBCSVRNQVBfTUFYQklUUyBpcyBhY3R1 YWxseSBkZXRlcm1pbmVkIGJ5IHB1dHRpbmcgdGhlIHNtYWxsZXN0Ci0JICogcG9zc2libGUgc2l6 ZS1jbGFzcyBvbiBvbmUgcGFnZSwgc28gdGhpcyBjYW4gbmV2ZXIgYmUgMC4KLQkgKi8KLQlzaXpl X3QgbWF4X3BncyA9IEJJVE1BUF9NQVhCSVRTICogcmVnX3NpemUgLyBQQUdFOwotCi0JYXNzZXJ0 KG1pbl9wZ3MgPD0gbWF4X3Bncyk7Ci0JYXNzZXJ0KG1pbl9wZ3MgPiAwKTsKLQlhc3NlcnQobWF4 X3BncyA+PSAxKTsKLQlpZiAocGdzX2d1ZXNzIDwgbWluX3BncykgewotCQlzYy0+cGdzID0gKGlu dCltaW5fcGdzOwotCX0gZWxzZSBpZiAocGdzX2d1ZXNzID4gbWF4X3BncykgewotCQlzYy0+cGdz ID0gKGludCltYXhfcGdzOwotCX0gZWxzZSB7Ci0JCXNjLT5wZ3MgPSAoaW50KXBnc19ndWVzczsK LQl9Ci19Ci0KLXZvaWQKLXNjX2RhdGFfdXBkYXRlX3NsYWJfc2l6ZShzY19kYXRhX3QgKmRhdGEs IHNpemVfdCBiZWdpbiwgc2l6ZV90IGVuZCwgaW50IHBncykgewotCWFzc2VydChkYXRhLT5pbml0 aWFsaXplZCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLT5uc2l6ZXM7IGkrKykgewotCQlz Y190ICpzYyA9ICZkYXRhLT5zY1tpXTsKLQkJaWYgKCFzYy0+YmluKSB7Ci0JCQlicmVhazsKLQkJ fQotCQlzaXplX3QgcmVnX3NpemUgPSByZWdfc2l6ZV9jb21wdXRlKHNjLT5sZ19iYXNlLCBzYy0+ bGdfZGVsdGEsCi0JCSAgICBzYy0+bmRlbHRhKTsKLQkJaWYgKGJlZ2luIDw9IHJlZ19zaXplICYm IHJlZ19zaXplIDw9IGVuZCkgewotCQkJc2NfZGF0YV91cGRhdGVfc2Nfc2xhYl9zaXplKHNjLCBy ZWdfc2l6ZSwgcGdzKTsKLQkJfQotCX0KLX0KLQotdm9pZAotc2NfYm9vdChzY19kYXRhX3QgKmRh dGEpIHsKLQlzY19kYXRhX2luaXQoZGF0YSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3NlYy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3NlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBkZjY3NTU5Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3NyYy9zZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDQyMiArMCwwIEBACi0jaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJq ZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvc2VjLmgiCi0KLXN0YXRpYyBlZGF0YV90ICpzZWNfYWxsb2Mo dHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IGFsaWdu bWVudCwgYm9vbCB6ZXJvLCBib29sIGd1YXJkZWQsIGJvb2wgZnJlcXVlbnRfcmV1c2UsCi0gICAg Ym9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotc3RhdGljIGJvb2wgc2VjX2V4cGFuZCh0 c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2xk X3NpemUsIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCB6ZXJvLCBib29sICpkZWZlcnJlZF93b3JrX2dl bmVyYXRlZCk7Ci1zdGF0aWMgYm9vbCBzZWNfc2hyaW5rKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNl bGYsIGVkYXRhX3QgKmVkYXRhLAotICAgIHNpemVfdCBvbGRfc2l6ZSwgc2l6ZV90IG5ld19zaXpl LCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci1zdGF0aWMgdm9pZCBzZWNfZGFsbG9j KHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3QgKmVkYXRhLAotICAgIGJvb2wgKmRl ZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQotc3RhdGljIHZvaWQKLXNlY19iaW5faW5pdChzZWNf YmluX3QgKmJpbikgewotCWJpbi0+YmVpbmdfYmF0Y2hfZmlsbGVkID0gZmFsc2U7Ci0JYmluLT5i eXRlc19jdXIgPSAwOwotCWVkYXRhX2xpc3RfYWN0aXZlX2luaXQoJmJpbi0+ZnJlZWxpc3QpOwot fQotCi1ib29sCi1zZWNfaW5pdCh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMsIGJhc2VfdCAqYmFz ZSwgcGFpX3QgKmZhbGxiYWNrLAotICAgIGNvbnN0IHNlY19vcHRzX3QgKm9wdHMpIHsKLQlhc3Nl cnQob3B0cy0+bWF4X2FsbG9jID49IFBBR0UpOwotCi0Jc2l6ZV90IG1heF9hbGxvYyA9IFBBR0Vf RkxPT1Iob3B0cy0+bWF4X2FsbG9jKTsKLQlwc3ppbmRfdCBucHNpemVzID0gc3pfcHN6MmluZCht YXhfYWxsb2MpICsgMTsKLQotCXNpemVfdCBzel9zaGFyZHMgPSBvcHRzLT5uc2hhcmRzICogc2l6 ZW9mKHNlY19zaGFyZF90KTsKLQlzaXplX3Qgc3pfYmlucyA9IG9wdHMtPm5zaGFyZHMgKiAoc2l6 ZV90KW5wc2l6ZXMgKiBzaXplb2Yoc2VjX2Jpbl90KTsKLQlzaXplX3Qgc3pfYWxsb2MgPSBzel9z aGFyZHMgKyBzel9iaW5zOwotCXZvaWQgKmR5bmFsbG9jID0gYmFzZV9hbGxvYyh0c2RuLCBiYXNl LCBzel9hbGxvYywgQ0FDSEVMSU5FKTsKLQlpZiAoZHluYWxsb2MgPT0gTlVMTCkgewotCQlyZXR1 cm4gdHJ1ZTsKLQl9Ci0Jc2VjX3NoYXJkX3QgKnNoYXJkX2N1ciA9IChzZWNfc2hhcmRfdCAqKWR5 bmFsbG9jOwotCXNlYy0+c2hhcmRzID0gc2hhcmRfY3VyOwotCXNlY19iaW5fdCAqYmluX2N1ciA9 IChzZWNfYmluX3QgKikmc2hhcmRfY3VyW29wdHMtPm5zaGFyZHNdOwotCS8qIEp1c3QgZm9yIGFz c2VydHMsIGJlbG93LiAqLwotCXNlY19iaW5fdCAqYmluX3N0YXJ0ID0gYmluX2N1cjsKLQotCWZv ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3B0cy0+bnNoYXJkczsgaSsrKSB7Ci0JCXNlY19zaGFyZF90 ICpzaGFyZCA9IHNoYXJkX2N1cjsKLQkJc2hhcmRfY3VyKys7Ci0JCWJvb2wgZXJyID0gbWFsbG9j X211dGV4X2luaXQoJnNoYXJkLT5tdHgsICJzZWNfc2hhcmQiLAotCQkgICAgV0lUTkVTU19SQU5L X1NFQ19TSEFSRCwgbWFsbG9jX211dGV4X3JhbmtfZXhjbHVzaXZlKTsKLQkJaWYgKGVycikgewot CQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJc2hhcmQtPmVuYWJsZWQgPSB0cnVlOwotCQlzaGFyZC0+ YmlucyA9IGJpbl9jdXI7Ci0JCWZvciAocHN6aW5kX3QgaiA9IDA7IGogPCBucHNpemVzOyBqKysp IHsKLQkJCXNlY19iaW5faW5pdCgmc2hhcmQtPmJpbnNbal0pOwotCQkJYmluX2N1cisrOwotCQl9 Ci0JCXNoYXJkLT5ieXRlc19jdXIgPSAwOwotCQlzaGFyZC0+dG9fZmx1c2hfbmV4dCA9IDA7Ci0J fQotCS8qCi0JICogU2hvdWxkIGhhdmUgZXhhY3RseSBtYXRjaGVkIHRoZSBiaW5fc3RhcnQgdG8g dGhlIGZpcnN0IHVudXNlZCBieXRlCi0JICogYWZ0ZXIgdGhlIHNoYXJkcy4KLQkgKi8KLQlhc3Nl cnQoKHZvaWQgKilzaGFyZF9jdXIgPT0gKHZvaWQgKiliaW5fc3RhcnQpOwotCS8qIEFuZCB0aGUg bGFzdCBiaW4gdG8gdXNlIHVwIHRoZSBsYXN0IGJ5dGVzIG9mIHRoZSBhbGxvY2F0aW9uLiAqLwot CWFzc2VydCgoY2hhciAqKWJpbl9jdXIgPT0gKChjaGFyICopZHluYWxsb2MgKyBzel9hbGxvYykp OwotCXNlYy0+ZmFsbGJhY2sgPSBmYWxsYmFjazsKLQotCi0Jc2VjLT5vcHRzID0gKm9wdHM7Ci0J c2VjLT5ucHNpemVzID0gbnBzaXplczsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGVzZSBsYXN0 IHNvIHRoYXQgYW4gaW1wcm9wZXIgdXNlIG9mIGFuIFNFQyB3aG9zZQotCSAqIGluaXRpYWxpemF0 aW9uIGZhaWxlZCB3aWxsIHNlZ2ZhdWx0IGluIGFuIGVhc3ktdG8tc3BvdCB3YXkuCi0JICovCi0J c2VjLT5wYWkuYWxsb2MgPSAmc2VjX2FsbG9jOwotCXNlYy0+cGFpLmFsbG9jX2JhdGNoID0gJnBh aV9hbGxvY19iYXRjaF9kZWZhdWx0OwotCXNlYy0+cGFpLmV4cGFuZCA9ICZzZWNfZXhwYW5kOwot CXNlYy0+cGFpLnNocmluayA9ICZzZWNfc2hyaW5rOwotCXNlYy0+cGFpLmRhbGxvYyA9ICZzZWNf ZGFsbG9jOwotCXNlYy0+cGFpLmRhbGxvY19iYXRjaCA9ICZwYWlfZGFsbG9jX2JhdGNoX2RlZmF1 bHQ7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzZWNfc2hhcmRfdCAqCi1zZWNfc2hh cmRfcGljayh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMpIHsKLQkvKgotCSAqIEV2ZW50dWFsbHks IHdlIHNob3VsZCBpbXBsZW1lbnQgYWZmaW5pdHksIHRyYWNraW5nIHNvdXJjZSBzaGFyZCB1c2lu ZwotCSAqIHRoZSBlZGF0YV90J3MgbmV3bHkgZnJlZWQgdXAgZmllbGRzLiAgRm9yIG5vdywganVz dCByYW5kb21seQotCSAqIGRpc3RyaWJ1dGUgYWNyb3NzIGFsbCBzaGFyZHMuCi0JICovCi0JaWYg KHRzZG5fbnVsbCh0c2RuKSkgewotCQlyZXR1cm4gJnNlYy0+c2hhcmRzWzBdOwotCX0KLQl0c2Rf dCAqdHNkID0gdHNkbl90c2QodHNkbik7Ci0JdWludDhfdCAqaWR4cCA9IHRzZF9zZWNfc2hhcmRw X2dldCh0c2QpOwotCWlmICgqaWR4cCA9PSAodWludDhfdCktMSkgewotCQkvKgotCQkgKiBGaXJz dCB1c2U7IGluaXRpYWxpemUgdXNpbmcgdGhlIHRyaWNrIGZyb20gRGFuaWVsIExlbWlyZSdzCi0J CSAqICJBIGZhc3QgYWx0ZXJuYXRpdmUgdG8gdGhlIG1vZHVsbyByZWR1Y3Rpb24uICBVc2UgYSA2 NCBiaXQKLQkJICogbnVtYmVyIHRvIHN0b3JlIDMyIGJpdHMsIHNpbmNlIHdlJ2xsIGRlbGliZXJh dGVseSBvdmVyZmxvdwotCQkgKiB3aGVuIHdlIG11bHRpcGx5IGJ5IHRoZSBudW1iZXIgb2Ygc2hh cmRzLgotCQkgKi8KLQkJdWludDY0X3QgcmFuZDMyID0gcHJuZ19sZ19yYW5nZV91NjQodHNkX3By bmdfc3RhdGVwX2dldCh0c2QpLCAzMik7Ci0JCXVpbnQzMl90IGlkeCA9Ci0JCSAgICAodWludDMy X3QpKChyYW5kMzIgKiAodWludDY0X3Qpc2VjLT5vcHRzLm5zaGFyZHMpID4+IDMyKTsKLQkJYXNz ZXJ0KGlkeCA8ICh1aW50MzJfdClzZWMtPm9wdHMubnNoYXJkcyk7Ci0JCSppZHhwID0gKHVpbnQ4 X3QpaWR4OwotCX0KLQlyZXR1cm4gJnNlYy0+c2hhcmRzWyppZHhwXTsKLX0KLQotLyoKLSAqIFBl cmhhcHMgc3VycHJpc2luZ2x5LCB0aGlzIGNhbiBiZSBjYWxsZWQgb24gdGhlIGFsbG9jIHBhdGh3 YXlzOyBpZiB3ZSBoaXQgYW4KLSAqIGVtcHR5IGNhY2hlLCB3ZSdsbCB0cnkgdG8gZmlsbCBpdCwg d2hpY2ggY2FuIHB1c2ggdGhlIHNoYXJkIG92ZXIgaXQncyBsaW1pdC4KLSAqLwotc3RhdGljIHZv aWQKLXNlY19mbHVzaF9zb21lX2FuZF91bmxvY2sodHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjLCBz ZWNfc2hhcmRfdCAqc2hhcmQpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZG4sICZz aGFyZC0+bXR4KTsKLQllZGF0YV9saXN0X2FjdGl2ZV90IHRvX2ZsdXNoOwotCWVkYXRhX2xpc3Rf YWN0aXZlX2luaXQoJnRvX2ZsdXNoKTsKLQl3aGlsZSAoc2hhcmQtPmJ5dGVzX2N1ciA+IHNlYy0+ b3B0cy5ieXRlc19hZnRlcl9mbHVzaCkgewotCQkvKiBQaWNrIGEgdmljdGltLiAqLwotCQlzZWNf YmluX3QgKmJpbiA9ICZzaGFyZC0+Ymluc1tzaGFyZC0+dG9fZmx1c2hfbmV4dF07Ci0KLQkJLyog VXBkYXRlIG91ciB2aWN0aW0tcGlja2luZyBzdGF0ZS4gKi8KLQkJc2hhcmQtPnRvX2ZsdXNoX25l eHQrKzsKLQkJaWYgKHNoYXJkLT50b19mbHVzaF9uZXh0ID09IHNlYy0+bnBzaXplcykgewotCQkJ c2hhcmQtPnRvX2ZsdXNoX25leHQgPSAwOwotCQl9Ci0KLQkJYXNzZXJ0KHNoYXJkLT5ieXRlc19j dXIgPj0gYmluLT5ieXRlc19jdXIpOwotCQlpZiAoYmluLT5ieXRlc19jdXIgIT0gMCkgewotCQkJ c2hhcmQtPmJ5dGVzX2N1ciAtPSBiaW4tPmJ5dGVzX2N1cjsKLQkJCWJpbi0+Ynl0ZXNfY3VyID0g MDsKLQkJCWVkYXRhX2xpc3RfYWN0aXZlX2NvbmNhdCgmdG9fZmx1c2gsICZiaW4tPmZyZWVsaXN0 KTsKLQkJfQotCQkvKgotCQkgKiBFaXRoZXIgYmluLT5ieXRlc19jdXIgd2FzIDAsIGluIHdoaWNo IGNhc2Ugd2UgZGlkbid0IHRvdWNoCi0JCSAqIHRoZSBiaW4gbGlzdCBidXQgaXQgc2hvdWxkIGJl IGVtcHR5IGFueXdheXMgKG9yIGVsc2Ugd2UKLQkJICogbWlzc2VkIGEgYnl0ZXNfY3VyIHVwZGF0 ZSBvbiBhIGxpc3QgbW9kaWZpY2F0aW9uKSwgb3IgaXQKLQkJICogKndhcyogMCBhbmQgd2UgZW1w dGllZCBpdCBvdXJzZWx2ZXMuICBFaXRoZXIgd2F5LCBpdCBzaG91bGQKLQkJICogYmUgZW1wdHkg bm93LgotCQkgKi8KLQkJYXNzZXJ0KGVkYXRhX2xpc3RfYWN0aXZlX2VtcHR5KCZiaW4tPmZyZWVs aXN0KSk7Ci0JfQotCi0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0J Ym9vbCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOwotCXBhaV9kYWxsb2NfYmF0Y2go dHNkbiwgc2VjLT5mYWxsYmFjaywgJnRvX2ZsdXNoLAotCSAgICAmZGVmZXJyZWRfd29ya19nZW5l cmF0ZWQpOwotfQotCi1zdGF0aWMgZWRhdGFfdCAqCi1zZWNfc2hhcmRfYWxsb2NfbG9ja2VkKHRz ZG5fdCAqdHNkbiwgc2VjX3QgKnNlYywgc2VjX3NoYXJkX3QgKnNoYXJkLAotICAgIHNlY19iaW5f dCAqYmluKSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RuLCAmc2hhcmQtPm10eCk7 Ci0JaWYgKCFzaGFyZC0+ZW5hYmxlZCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZWRhdGFfdCAq ZWRhdGEgPSBlZGF0YV9saXN0X2FjdGl2ZV9maXJzdCgmYmluLT5mcmVlbGlzdCk7Ci0JaWYgKGVk YXRhICE9IE5VTEwpIHsKLQkJZWRhdGFfbGlzdF9hY3RpdmVfcmVtb3ZlKCZiaW4tPmZyZWVsaXN0 LCBlZGF0YSk7Ci0JCWFzc2VydChlZGF0YV9zaXplX2dldChlZGF0YSkgPD0gYmluLT5ieXRlc19j dXIpOwotCQliaW4tPmJ5dGVzX2N1ciAtPSBlZGF0YV9zaXplX2dldChlZGF0YSk7Ci0JCWFzc2Vy dChlZGF0YV9zaXplX2dldChlZGF0YSkgPD0gc2hhcmQtPmJ5dGVzX2N1cik7Ci0JCXNoYXJkLT5i eXRlc19jdXIgLT0gZWRhdGFfc2l6ZV9nZXQoZWRhdGEpOwotCX0KLQlyZXR1cm4gZWRhdGE7Ci19 Ci0KLXN0YXRpYyBlZGF0YV90ICoKLXNlY19iYXRjaF9maWxsX2FuZF9hbGxvYyh0c2RuX3QgKnRz ZG4sIHNlY190ICpzZWMsIHNlY19zaGFyZF90ICpzaGFyZCwKLSAgICBzZWNfYmluX3QgKmJpbiwg c2l6ZV90IHNpemUpIHsKLQltYWxsb2NfbXV0ZXhfYXNzZXJ0X25vdF9vd25lcih0c2RuLCAmc2hh cmQtPm10eCk7Ci0KLQllZGF0YV9saXN0X2FjdGl2ZV90IHJlc3VsdDsKLQllZGF0YV9saXN0X2Fj dGl2ZV9pbml0KCZyZXN1bHQpOwotCWJvb2wgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxz ZTsKLQlzaXplX3QgbmFsbG9jID0gcGFpX2FsbG9jX2JhdGNoKHRzZG4sIHNlYy0+ZmFsbGJhY2ss IHNpemUsCi0JICAgIDEgKyBzZWMtPm9wdHMuYmF0Y2hfZmlsbF9leHRyYSwgJnJlc3VsdCwgJmRl ZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQotCWVkYXRhX3QgKnJldCA9IGVkYXRhX2xpc3RfYWN0 aXZlX2ZpcnN0KCZyZXN1bHQpOwotCWlmIChyZXQgIT0gTlVMTCkgewotCQllZGF0YV9saXN0X2Fj dGl2ZV9yZW1vdmUoJnJlc3VsdCwgcmV0KTsKLQl9Ci0KLQltYWxsb2NfbXV0ZXhfbG9jayh0c2Ru LCAmc2hhcmQtPm10eCk7Ci0JYmluLT5iZWluZ19iYXRjaF9maWxsZWQgPSBmYWxzZTsKLQkvKgot CSAqIEhhbmRsZSB0aGUgZWFzeSBjYXNlIGZpcnN0OiBub3RoaW5nIHRvIGNhY2hlLiAgTm90ZSB0 aGF0IHRoaXMgY2FuCi0JICogb25seSBoYXBwZW4gaW4gY2FzZSBvZiBPT00sIHNpbmNlIHNlY19h bGxvYyBjaGVja3MgdGhlIGV4cGVjdGVkCi0JICogbnVtYmVyIG9mIGFsbG9jcywgYW5kIGRvZXNu J3QgYm90aGVyIGdvaW5nIGRvd24gdGhlIGJhdGNoX2ZpbGwKLQkgKiBwYXRod2F5IGlmIHRoZXJl IHdvbid0IGJlIGFueXRoaW5nIGxlZnQgdG8gY2FjaGUuICBTbyB0byBiZSBpbiB0aGlzCi0JICog Y29kZSBwYXRoLCB3ZSBtdXN0IGhhdmUgYXNrZWQgZm9yID4gMSBhbGxvYywgYnV0IG9ubHkgZ290 dGVuIDEgYmFjay4KLQkgKi8KLQlpZiAobmFsbG9jIDw9IDEpIHsKLQkJbWFsbG9jX211dGV4X3Vu bG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jc2l6ZV90IG5l d19jYWNoZWRfYnl0ZXMgPSAobmFsbG9jIC0gMSkgKiBzaXplOwotCi0JZWRhdGFfbGlzdF9hY3Rp dmVfY29uY2F0KCZiaW4tPmZyZWVsaXN0LCAmcmVzdWx0KTsKLQliaW4tPmJ5dGVzX2N1ciArPSBu ZXdfY2FjaGVkX2J5dGVzOwotCXNoYXJkLT5ieXRlc19jdXIgKz0gbmV3X2NhY2hlZF9ieXRlczsK LQotCWlmIChzaGFyZC0+Ynl0ZXNfY3VyID4gc2VjLT5vcHRzLm1heF9ieXRlcykgewotCQlzZWNf Zmx1c2hfc29tZV9hbmRfdW5sb2NrKHRzZG4sIHNlYywgc2hhcmQpOwotCX0gZWxzZSB7Ci0JCW1h bGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNoYXJkLT5tdHgpOwotCX0KLQotCXJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyBlZGF0YV90ICoKLXNlY19hbGxvYyh0c2RuX3QgKnRzZG4sIHBhaV90ICpz ZWxmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCwgYm9vbCB6ZXJvLAotICAgIGJvb2wg Z3VhcmRlZCwgYm9vbCBmcmVxdWVudF9yZXVzZSwgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0 ZWQpIHsKLQlhc3NlcnQoKHNpemUgJiBQQUdFX01BU0spID09IDApOwotCWFzc2VydCghZ3VhcmRl ZCk7Ci0KLQlzZWNfdCAqc2VjID0gKHNlY190ICopc2VsZjsKLQotCWlmICh6ZXJvIHx8IGFsaWdu bWVudCA+IFBBR0UgfHwgc2VjLT5vcHRzLm5zaGFyZHMgPT0gMAotCSAgICB8fCBzaXplID4gc2Vj LT5vcHRzLm1heF9hbGxvYykgewotCQlyZXR1cm4gcGFpX2FsbG9jKHRzZG4sIHNlYy0+ZmFsbGJh Y2ssIHNpemUsIGFsaWdubWVudCwgemVybywKLQkJICAgIC8qIGd1YXJkZWQgKi8gZmFsc2UsIGZy ZXF1ZW50X3JldXNlLAotCQkgICAgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCX0KLQlwc3pp bmRfdCBwc3ppbmQgPSBzel9wc3oyaW5kKHNpemUpOwotCWFzc2VydChwc3ppbmQgPCBzZWMtPm5w c2l6ZXMpOwotCi0Jc2VjX3NoYXJkX3QgKnNoYXJkID0gc2VjX3NoYXJkX3BpY2sodHNkbiwgc2Vj KTsKLQlzZWNfYmluX3QgKmJpbiA9ICZzaGFyZC0+Ymluc1twc3ppbmRdOwotCWJvb2wgZG9fYmF0 Y2hfZmlsbCA9IGZhbHNlOwotCi0JbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJnNoYXJkLT5tdHgp OwotCWVkYXRhX3QgKmVkYXRhID0gc2VjX3NoYXJkX2FsbG9jX2xvY2tlZCh0c2RuLCBzZWMsIHNo YXJkLCBiaW4pOwotCWlmIChlZGF0YSA9PSBOVUxMKSB7Ci0JCWlmICghYmluLT5iZWluZ19iYXRj aF9maWxsZWQKLQkJICAgICYmIHNlYy0+b3B0cy5iYXRjaF9maWxsX2V4dHJhID4gMCkgewotCQkJ YmluLT5iZWluZ19iYXRjaF9maWxsZWQgPSB0cnVlOwotCQkJZG9fYmF0Y2hfZmlsbCA9IHRydWU7 Ci0JCX0KLQl9Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0JaWYg KGVkYXRhID09IE5VTEwpIHsKLQkJaWYgKGRvX2JhdGNoX2ZpbGwpIHsKLQkJCWVkYXRhID0gc2Vj X2JhdGNoX2ZpbGxfYW5kX2FsbG9jKHRzZG4sIHNlYywgc2hhcmQsIGJpbiwKLQkJCSAgICBzaXpl KTsKLQkJfSBlbHNlIHsKLQkJCWVkYXRhID0gcGFpX2FsbG9jKHRzZG4sIHNlYy0+ZmFsbGJhY2ss IHNpemUsIGFsaWdubWVudCwKLQkJCSAgICB6ZXJvLCAvKiBndWFyZGVkICovIGZhbHNlLCBmcmVx dWVudF9yZXVzZSwKLQkJCSAgICBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JCX0KLQl9Ci0J cmV0dXJuIGVkYXRhOwotfQotCi1zdGF0aWMgYm9vbAotc2VjX2V4cGFuZCh0c2RuX3QgKnRzZG4s IHBhaV90ICpzZWxmLCBlZGF0YV90ICplZGF0YSwgc2l6ZV90IG9sZF9zaXplLAotICAgIHNpemVf dCBuZXdfc2l6ZSwgYm9vbCB6ZXJvLCBib29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgewot CXNlY190ICpzZWMgPSAoc2VjX3QgKilzZWxmOwotCXJldHVybiBwYWlfZXhwYW5kKHRzZG4sIHNl Yy0+ZmFsbGJhY2ssIGVkYXRhLCBvbGRfc2l6ZSwgbmV3X3NpemUsIHplcm8sCi0JICAgIGRlZmVy cmVkX3dvcmtfZ2VuZXJhdGVkKTsKLX0KLQotc3RhdGljIGJvb2wKLXNlY19zaHJpbmsodHNkbl90 ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsIHNpemVfdCBvbGRfc2l6ZSwKLSAg ICBzaXplX3QgbmV3X3NpemUsIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0Jc2Vj X3QgKnNlYyA9IChzZWNfdCAqKXNlbGY7Ci0JcmV0dXJuIHBhaV9zaHJpbmsodHNkbiwgc2VjLT5m YWxsYmFjaywgZWRhdGEsIG9sZF9zaXplLCBuZXdfc2l6ZSwKLQkgICAgZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQpOwotfQotCi1zdGF0aWMgdm9pZAotc2VjX2ZsdXNoX2FsbF9sb2NrZWQodHNkbl90 ICp0c2RuLCBzZWNfdCAqc2VjLCBzZWNfc2hhcmRfdCAqc2hhcmQpIHsKLQltYWxsb2NfbXV0ZXhf YXNzZXJ0X293bmVyKHRzZG4sICZzaGFyZC0+bXR4KTsKLQlzaGFyZC0+Ynl0ZXNfY3VyID0gMDsK LQllZGF0YV9saXN0X2FjdGl2ZV90IHRvX2ZsdXNoOwotCWVkYXRhX2xpc3RfYWN0aXZlX2luaXQo JnRvX2ZsdXNoKTsKLQlmb3IgKHBzemluZF90IGkgPSAwOyBpIDwgc2VjLT5ucHNpemVzOyBpKysp IHsKLQkJc2VjX2Jpbl90ICpiaW4gPSAmc2hhcmQtPmJpbnNbaV07Ci0JCWJpbi0+Ynl0ZXNfY3Vy ID0gMDsKLQkJZWRhdGFfbGlzdF9hY3RpdmVfY29uY2F0KCZ0b19mbHVzaCwgJmJpbi0+ZnJlZWxp c3QpOwotCX0KLQotCS8qCi0JICogT3JkaW5hcmlseSB3ZSB3b3VsZCB0cnkgdG8gYXZvaWQgZG9p bmcgdGhlIGJhdGNoIGRlYWxsb2NhdGlvbiB3aGlsZQotCSAqIGhvbGRpbmcgdGhlIHNoYXJkIG11 dGV4LCBidXQgdGhlIGZsdXNoX2FsbCBwYXRod2F5cyBvbmx5IGhhcHBlbiB3aGVuCi0JICogd2Un cmUgZGlzYWJsaW5nIHRoZSBIUEEgb3IgcmVzZXR0aW5nIHRoZSBhcmVuYSwgYm90aCBvZiB3aGlj aCBhcmUKLQkgKiByYXJlIHBhdGh3YXlzLgotCSAqLwotCWJvb2wgZGVmZXJyZWRfd29ya19nZW5l cmF0ZWQgPSBmYWxzZTsKLQlwYWlfZGFsbG9jX2JhdGNoKHRzZG4sIHNlYy0+ZmFsbGJhY2ssICZ0 b19mbHVzaCwKLQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLX0KLQotc3RhdGljIHZv aWQKLXNlY19zaGFyZF9kYWxsb2NfYW5kX3VubG9jayh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMs IHNlY19zaGFyZF90ICpzaGFyZCwKLSAgICBlZGF0YV90ICplZGF0YSkgewotCW1hbGxvY19tdXRl eF9hc3NlcnRfb3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOwotCWFzc2VydChzaGFyZC0+Ynl0ZXNf Y3VyIDw9IHNlYy0+b3B0cy5tYXhfYnl0ZXMpOwotCXNpemVfdCBzaXplID0gZWRhdGFfc2l6ZV9n ZXQoZWRhdGEpOwotCXBzemluZF90IHBzemluZCA9IHN6X3BzejJpbmQoc2l6ZSk7Ci0JYXNzZXJ0 KHBzemluZCA8IHNlYy0+bnBzaXplcyk7Ci0JLyoKLQkgKiBQcmVwZW5kaW5nIGhlcmUgcmVzdWx0 cyBpbiBMSUZPIGFsbG9jYXRpb24gcGVyIGJpbiwgd2hpY2ggc2VlbXMKLQkgKiByZWFzb25hYmxl LgotCSAqLwotCXNlY19iaW5fdCAqYmluID0gJnNoYXJkLT5iaW5zW3BzemluZF07Ci0JZWRhdGFf bGlzdF9hY3RpdmVfcHJlcGVuZCgmYmluLT5mcmVlbGlzdCwgZWRhdGEpOwotCWJpbi0+Ynl0ZXNf Y3VyICs9IHNpemU7Ci0Jc2hhcmQtPmJ5dGVzX2N1ciArPSBzaXplOwotCWlmIChzaGFyZC0+Ynl0 ZXNfY3VyID4gc2VjLT5vcHRzLm1heF9ieXRlcykgewotCQkvKgotCQkgKiBXZSd2ZSBleGNlZWRl ZCB0aGUgc2hhcmQgbGltaXQuICBXZSBtYWtlIHR3byBub2RzIGluIHRoZQotCQkgKiBkaXJlY3Rp b24gb2YgZnJhZ21lbnRhdGlvbiBhdm9pZGFuY2U6IHdlIGZsdXNoIGV2ZXJ5dGhpbmcgaW4KLQkJ ICogdGhlIHNoYXJkLCByYXRoZXIgdGhhbiBvbmUgcGFydGljdWxhciBiaW4sIGFuZCB3ZSBob2xk IHRoZQotCQkgKiBsb2NrIHdoaWxlIGZsdXNoaW5nIChpbiBjYXNlIG9uZSBvZiB0aGUgZXh0ZW50 cyB3ZSBmbHVzaCBpcwotCQkgKiBoaWdobHkgcHJlZmVycmVkIGZyb20gYSBmcmFnbWVudGF0aW9u LWF2b2lkYW5jZSBwZXJzcGVjdGl2ZQotCQkgKiBpbiB0aGUgYmFja2luZyBhbGxvY2F0b3IpLiAg VGhpcyBoYXMgdGhlIGV4dHJhIGFkdmFudGFnZSBvZgotCQkgKiBub3QgcmVxdWlyaW5nIGFkdmFu Y2VkIGNhY2hlIGJhbGFuY2luZyBzdHJhdGVnaWVzLgotCQkgKi8KLQkJc2VjX2ZsdXNoX3NvbWVf YW5kX3VubG9jayh0c2RuLCBzZWMsIHNoYXJkKTsKLQkJbWFsbG9jX211dGV4X2Fzc2VydF9ub3Rf b3duZXIodHNkbiwgJnNoYXJkLT5tdHgpOwotCX0gZWxzZSB7Ci0JCW1hbGxvY19tdXRleF91bmxv Y2sodHNkbiwgJnNoYXJkLT5tdHgpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNlY19kYWxsb2Mo dHNkbl90ICp0c2RuLCBwYWlfdCAqc2VsZiwgZWRhdGFfdCAqZWRhdGEsCi0gICAgYm9vbCAqZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlzZWNfdCAqc2VjID0gKHNlY190ICopc2VsZjsKLQlp ZiAoc2VjLT5vcHRzLm5zaGFyZHMgPT0gMAotCSAgICB8fCBlZGF0YV9zaXplX2dldChlZGF0YSkg PiBzZWMtPm9wdHMubWF4X2FsbG9jKSB7Ci0JCXBhaV9kYWxsb2ModHNkbiwgc2VjLT5mYWxsYmFj aywgZWRhdGEsCi0JCSAgICBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JCXJldHVybjsKLQl9 Ci0Jc2VjX3NoYXJkX3QgKnNoYXJkID0gc2VjX3NoYXJkX3BpY2sodHNkbiwgc2VjKTsKLQltYWxs b2NfbXV0ZXhfbG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0JaWYgKHNoYXJkLT5lbmFibGVkKSB7 Ci0JCXNlY19zaGFyZF9kYWxsb2NfYW5kX3VubG9jayh0c2RuLCBzZWMsIHNoYXJkLCBlZGF0YSk7 Ci0JfSBlbHNlIHsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmc2hhcmQtPm10eCk7Ci0J CXBhaV9kYWxsb2ModHNkbiwgc2VjLT5mYWxsYmFjaywgZWRhdGEsCi0JCSAgICBkZWZlcnJlZF93 b3JrX2dlbmVyYXRlZCk7Ci0JfQotfQotCi12b2lkCi1zZWNfZmx1c2godHNkbl90ICp0c2RuLCBz ZWNfdCAqc2VjKSB7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWMtPm9wdHMubnNoYXJkczsg aSsrKSB7Ci0JCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZzZWMtPnNoYXJkc1tpXS5tdHgpOwot CQlzZWNfZmx1c2hfYWxsX2xvY2tlZCh0c2RuLCBzZWMsICZzZWMtPnNoYXJkc1tpXSk7Ci0JCW1h bGxvY19tdXRleF91bmxvY2sodHNkbiwgJnNlYy0+c2hhcmRzW2ldLm10eCk7Ci0JfQotfQotCi12 b2lkCi1zZWNfZGlzYWJsZSh0c2RuX3QgKnRzZG4sIHNlY190ICpzZWMpIHsKLQlmb3IgKHNpemVf dCBpID0gMDsgaSA8IHNlYy0+b3B0cy5uc2hhcmRzOyBpKyspIHsKLQkJbWFsbG9jX211dGV4X2xv Y2sodHNkbiwgJnNlYy0+c2hhcmRzW2ldLm10eCk7Ci0JCXNlYy0+c2hhcmRzW2ldLmVuYWJsZWQg PSBmYWxzZTsKLQkJc2VjX2ZsdXNoX2FsbF9sb2NrZWQodHNkbiwgc2VjLCAmc2VjLT5zaGFyZHNb aV0pOwotCQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzZWMtPnNoYXJkc1tpXS5tdHgpOwot CX0KLX0KLQotdm9pZAotc2VjX3N0YXRzX21lcmdlKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYywg c2VjX3N0YXRzX3QgKnN0YXRzKSB7Ci0Jc2l6ZV90IHN1bSA9IDA7Ci0JZm9yIChzaXplX3QgaSA9 IDA7IGkgPCBzZWMtPm9wdHMubnNoYXJkczsgaSsrKSB7Ci0JCS8qCi0JCSAqIFdlIGNvdWxkIHNh dmUgdGhlc2UgbG9jayBhY3F1aXNpdGlvbnMgYnkgbWFraW5nIGJ5dGVzX2N1cgotCQkgKiBhdG9t aWMsIGJ1dCBzdGF0cyBjb2xsZWN0aW9uIGlzIHJhcmUgYW55d2F5cyBhbmQgd2UgZXhwZWN0Ci0J CSAqIHRoZSBudW1iZXIgYW5kIHR5cGUgb2Ygc3RhdHMgdG8gZ2V0IG1vcmUgaW50ZXJlc3Rpbmcu Ci0JCSAqLwotCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmc2VjLT5zaGFyZHNbaV0ubXR4KTsK LQkJc3VtICs9IHNlYy0+c2hhcmRzW2ldLmJ5dGVzX2N1cjsKLQkJbWFsbG9jX211dGV4X3VubG9j ayh0c2RuLCAmc2VjLT5zaGFyZHNbaV0ubXR4KTsKLQl9Ci0Jc3RhdHMtPmJ5dGVzICs9IHN1bTsK LX0KLQotdm9pZAotc2VjX211dGV4X3N0YXRzX3JlYWQodHNkbl90ICp0c2RuLCBzZWNfdCAqc2Vj LAotICAgIG11dGV4X3Byb2ZfZGF0YV90ICptdXRleF9wcm9mX2RhdGEpIHsKLQlmb3IgKHNpemVf dCBpID0gMDsgaSA8IHNlYy0+b3B0cy5uc2hhcmRzOyBpKyspIHsKLQkJbWFsbG9jX211dGV4X2xv Y2sodHNkbiwgJnNlYy0+c2hhcmRzW2ldLm10eCk7Ci0JCW1hbGxvY19tdXRleF9wcm9mX2FjY3Vt KHRzZG4sIG11dGV4X3Byb2ZfZGF0YSwKLQkJICAgICZzZWMtPnNoYXJkc1tpXS5tdHgpOwotCQlt YWxsb2NfbXV0ZXhfdW5sb2NrKHRzZG4sICZzZWMtPnNoYXJkc1tpXS5tdHgpOwotCX0KLX0KLQot dm9pZAotc2VjX3ByZWZvcmsyKHRzZG5fdCAqdHNkbiwgc2VjX3QgKnNlYykgewotCWZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgc2VjLT5vcHRzLm5zaGFyZHM7IGkrKykgewotCQltYWxsb2NfbXV0ZXhf cHJlZm9yayh0c2RuLCAmc2VjLT5zaGFyZHNbaV0ubXR4KTsKLQl9Ci19Ci0KLXZvaWQKLXNlY19w b3N0Zm9ya19wYXJlbnQodHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjKSB7Ci0JZm9yIChzaXplX3Qg aSA9IDA7IGkgPCBzZWMtPm9wdHMubnNoYXJkczsgaSsrKSB7Ci0JCW1hbGxvY19tdXRleF9wb3N0 Zm9ya19wYXJlbnQodHNkbiwgJnNlYy0+c2hhcmRzW2ldLm10eCk7Ci0JfQotfQotCi12b2lkCi1z ZWNfcG9zdGZvcmtfY2hpbGQodHNkbl90ICp0c2RuLCBzZWNfdCAqc2VjKSB7Ci0JZm9yIChzaXpl X3QgaSA9IDA7IGkgPCBzZWMtPm9wdHMubnNoYXJkczsgaSsrKSB7Ci0JCW1hbGxvY19tdXRleF9w b3N0Zm9ya19jaGlsZCh0c2RuLCAmc2VjLT5zaGFyZHNbaV0ubXR4KTsKLQl9Ci19CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3N0YXRzLmMg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc3RhdHMuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZjNzBmZC4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc3RhdHMuYworKysgL2Rldi9udWxs CkBAIC0xLDE5NzMgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9j X3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJu YWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2N0bC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2VtaXR0ZXIuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9meHAuaCIKLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tdXRleC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL211dGV4X3Byb2YuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N0 YXRzLmgiCi0KLWNvbnN0IGNoYXIgKmdsb2JhbF9tdXRleF9uYW1lc1ttdXRleF9wcm9mX251bV9n bG9iYWxfbXV0ZXhlc10gPSB7Ci0jZGVmaW5lIE9QKG10eCkgI210eCwKLQlNVVRFWF9QUk9GX0dM T0JBTF9NVVRFWEVTCi0jdW5kZWYgT1AKLX07Ci0KLWNvbnN0IGNoYXIgKmFyZW5hX211dGV4X25h bWVzW211dGV4X3Byb2ZfbnVtX2FyZW5hX211dGV4ZXNdID0gewotI2RlZmluZSBPUChtdHgpICNt dHgsCi0JTVVURVhfUFJPRl9BUkVOQV9NVVRFWEVTCi0jdW5kZWYgT1AKLX07Ci0KLSNkZWZpbmUg Q1RMX0dFVChuLCB2LCB0KSBkbyB7CQkJCQkJXAotCXNpemVfdCBzeiA9IHNpemVvZih0KTsJCQkJ CQlcCi0JeG1hbGxjdGwobiwgKHZvaWQgKil2LCAmc3osIE5VTEwsIDApOwkJCQlcCi19IHdoaWxl ICgwKQotCi0jZGVmaW5lIENUTF9MRUFGX1BSRVBBUkUobWliLCBtaWJsZW4sIG5hbWUpIGRvIHsJ CQlcCi0JYXNzZXJ0KG1pYmxlbiA8IENUTF9NQVhfREVQVEgpOwkJCQkJXAotCXNpemVfdCBtaWJs ZW5fbmV3ID0gQ1RMX01BWF9ERVBUSDsJCQkJXAotCXhtYWxsY3RsbWlibmFtZXRvbWliKG1pYiwg bWlibGVuLCBuYW1lLCAmbWlibGVuX25ldyk7CQlcCi0JYXNzZXJ0KG1pYmxlbl9uZXcgPiBtaWJs ZW4pOwkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBDVExfTEVBRihtaWIsIG1pYmxlbiwg bGVhZiwgdiwgdCkgZG8gewkJCVwKLQlhc3NlcnQobWlibGVuIDwgQ1RMX01BWF9ERVBUSCk7CQkJ CQlcCi0Jc2l6ZV90IG1pYmxlbl9uZXcgPSBDVExfTUFYX0RFUFRIOwkJCQlcCi0Jc2l6ZV90IHN6 ID0gc2l6ZW9mKHQpOwkJCQkJCVwKLQl4bWFsbGN0bGJ5bWlibmFtZShtaWIsIG1pYmxlbiwgbGVh ZiwgJm1pYmxlbl9uZXcsICh2b2lkICopdiwJXAotCSAgICAmc3osIE5VTEwsIDApOwkJCQkJCVwK LQlhc3NlcnQobWlibGVuX25ldyA9PSBtaWJsZW4gKyAxKTsJCQkJXAotfSB3aGlsZSAoMCkKLQot I2RlZmluZSBDVExfTTJfR0VUKG4sIGksIHYsIHQpIGRvIHsJCQkJCVwKLQlzaXplX3QgbWliW0NU TF9NQVhfREVQVEhdOwkJCQkJXAotCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVv ZihzaXplX3QpOwkJCVwKLQlzaXplX3Qgc3ogPSBzaXplb2YodCk7CQkJCQkJXAotCXhtYWxsY3Rs bmFtZXRvbWliKG4sIG1pYiwgJm1pYmxlbik7CQkJCVwKLQltaWJbMl0gPSAoaSk7CQkJCQkJCVwK LQl4bWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKXYsICZzeiwgTlVMTCwgMCk7CQlc Ci19IHdoaWxlICgwKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGF0YS4gKi8KLQot Ym9vbCBvcHRfc3RhdHNfcHJpbnQgPSBmYWxzZTsKLWNoYXIgb3B0X3N0YXRzX3ByaW50X29wdHNb c3RhdHNfcHJpbnRfdG90X251bV9vcHRpb25zKzFdID0gIiI7Ci0KLWludDY0X3Qgb3B0X3N0YXRz X2ludGVydmFsID0gU1RBVFNfSU5URVJWQUxfREVGQVVMVDsKLWNoYXIgb3B0X3N0YXRzX2ludGVy dmFsX29wdHNbc3RhdHNfcHJpbnRfdG90X251bV9vcHRpb25zKzFdID0gIiI7Ci0KLXN0YXRpYyBj b3VudGVyX2FjY3VtX3Qgc3RhdHNfaW50ZXJ2YWxfYWNjdW11bGF0ZWQ7Ci0vKiBQZXIgdGhyZWFk IGJhdGNoIGFjY3VtIHNpemUgZm9yIHN0YXRzX2ludGVydmFsLiAqLwotc3RhdGljIHVpbnQ2NF90 IHN0YXRzX2ludGVydmFsX2FjY3VtX2JhdGNoOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot Ci1zdGF0aWMgdWludDY0X3QKLXJhdGVfcGVyX3NlY29uZCh1aW50NjRfdCB2YWx1ZSwgdWludDY0 X3QgdXB0aW1lX25zKSB7Ci0JdWludDY0X3QgYmlsbGlvbiA9IDEwMDAwMDAwMDA7Ci0JaWYgKHVw dGltZV9ucyA9PSAwIHx8IHZhbHVlID09IDApIHsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh1cHRp bWVfbnMgPCBiaWxsaW9uKSB7Ci0JCXJldHVybiB2YWx1ZTsKLQl9IGVsc2UgewotCQl1aW50NjRf dCB1cHRpbWVfcyA9IHVwdGltZV9ucyAvIGJpbGxpb247Ci0JCXJldHVybiB2YWx1ZSAvIHVwdGlt ZV9zOwotCX0KLX0KLQotLyogQ2FsY3VsYXRlIHgueXl5IGFuZCBvdXRwdXQgYSBzdHJpbmcgKHRh a2VzIGEgZml4ZWQgc2l6ZWQgY2hhciBhcnJheSkuICovCi1zdGF0aWMgYm9vbAotZ2V0X3JhdGVf c3RyKHVpbnQ2NF90IGRpdmlkZW5kLCB1aW50NjRfdCBkaXZpc29yLCBjaGFyIHN0cls2XSkgewot CWlmIChkaXZpc29yID09IDAgfHwgZGl2aWRlbmQgPiBkaXZpc29yKSB7Ci0JCS8qIFRoZSByYXRl IGlzIG5vdCBzdXBwb3NlZCB0byBiZSBncmVhdGVyIHRoYW4gMS4gKi8KLQkJcmV0dXJuIHRydWU7 Ci0JfQotCWlmIChkaXZpZGVuZCA+IDApIHsKLQkJYXNzZXJ0KFVJTlQ2NF9NQVggLyBkaXZpZGVu ZCA+PSAxMDAwKTsKLQl9Ci0KLQl1bnNpZ25lZCBuID0gKHVuc2lnbmVkKSgoZGl2aWRlbmQgKiAx MDAwKSAvIGRpdmlzb3IpOwotCWlmIChuIDwgMTApIHsKLQkJbWFsbG9jX3NucHJpbnRmKHN0ciwg NiwgIjAuMDAldSIsIG4pOwotCX0gZWxzZSBpZiAobiA8IDEwMCkgewotCQltYWxsb2Nfc25wcmlu dGYoc3RyLCA2LCAiMC4wJXUiLCBuKTsKLQl9IGVsc2UgaWYgKG4gPCAxMDAwKSB7Ci0JCW1hbGxv Y19zbnByaW50ZihzdHIsIDYsICIwLiV1Iiwgbik7Ci0JfSBlbHNlIHsKLQkJbWFsbG9jX3NucHJp bnRmKHN0ciwgNiwgIjEiKTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1tdXRleF9zdGF0c19pbml0X2NvbHMoZW1pdHRlcl9yb3dfdCAqcm93LCBjb25zdCBjaGFyICp0 YWJsZV9uYW1lLAotICAgIGVtaXR0ZXJfY29sX3QgKm5hbWUsCi0gICAgZW1pdHRlcl9jb2xfdCBj b2xfdWludDY0X3RbbXV0ZXhfcHJvZl9udW1fdWludDY0X3RfY291bnRlcnNdLAotICAgIGVtaXR0 ZXJfY29sX3QgY29sX3VpbnQzMl90W211dGV4X3Byb2ZfbnVtX3VpbnQzMl90X2NvdW50ZXJzXSkg ewotCW11dGV4X3Byb2ZfdWludDY0X3RfY291bnRlcl9pbmRfdCBrX3VpbnQ2NF90ID0gMDsKLQlt dXRleF9wcm9mX3VpbnQzMl90X2NvdW50ZXJfaW5kX3Qga191aW50MzJfdCA9IDA7Ci0KLQllbWl0 dGVyX2NvbF90ICpjb2w7Ci0KLQlpZiAobmFtZSAhPSBOVUxMKSB7Ci0JCWVtaXR0ZXJfY29sX2lu aXQobmFtZSwgcm93KTsKLQkJbmFtZS0+anVzdGlmeSA9IGVtaXR0ZXJfanVzdGlmeV9sZWZ0Owot CQluYW1lLT53aWR0aCA9IDIxOwotCQluYW1lLT50eXBlID0gZW1pdHRlcl90eXBlX3RpdGxlOwot CQluYW1lLT5zdHJfdmFsID0gdGFibGVfbmFtZTsKLQl9Ci0KLSNkZWZpbmUgV0lEVEhfdWludDMy X3QgMTIKLSNkZWZpbmUgV0lEVEhfdWludDY0X3QgMTYKLSNkZWZpbmUgT1AoY291bnRlciwgY291 bnRlcl90eXBlLCBodW1hbiwgZGVyaXZlZCwgYmFzZV9jb3VudGVyKQkJXAotCWNvbCA9ICZjb2xf IyNjb3VudGVyX3R5cGVba18jI2NvdW50ZXJfdHlwZV07CQkJXAotCSsra18jI2NvdW50ZXJfdHlw ZTsJCQkJCQlcCi0JZW1pdHRlcl9jb2xfaW5pdChjb2wsIHJvdyk7CQkJCQlcCi0JY29sLT5qdXN0 aWZ5ID0gZW1pdHRlcl9qdXN0aWZ5X3JpZ2h0OwkJCQlcCi0JY29sLT53aWR0aCA9IGRlcml2ZWQg PyA4IDogV0lEVEhfIyNjb3VudGVyX3R5cGU7CQlcCi0JY29sLT50eXBlID0gZW1pdHRlcl90eXBl X3RpdGxlOwkJCQkJXAotCWNvbC0+c3RyX3ZhbCA9IGh1bWFuOwotCU1VVEVYX1BST0ZfQ09VTlRF UlMKLSN1bmRlZiBPUAotI3VuZGVmIFdJRFRIX3VpbnQzMl90Ci0jdW5kZWYgV0lEVEhfdWludDY0 X3QKLQljb2xfdWludDY0X3RbbXV0ZXhfY291bnRlcl90b3RhbF93YWl0X3RpbWVfcHNdLndpZHRo ID0gMTA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tdXRleF9zdGF0c19yZWFkX2dsb2JhbChzaXplX3Qg bWliW10sIHNpemVfdCBtaWJsZW4sIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgZW1pdHRlcl9jb2xf dCAqY29sX25hbWUsCi0gICAgZW1pdHRlcl9jb2xfdCBjb2xfdWludDY0X3RbbXV0ZXhfcHJvZl9u dW1fdWludDY0X3RfY291bnRlcnNdLAotICAgIGVtaXR0ZXJfY29sX3QgY29sX3VpbnQzMl90W211 dGV4X3Byb2ZfbnVtX3VpbnQzMl90X2NvdW50ZXJzXSwKLSAgICB1aW50NjRfdCB1cHRpbWUpIHsK LQlDVExfTEVBRl9QUkVQQVJFKG1pYiwgbWlibGVuLCBuYW1lKTsKLQlzaXplX3QgbWlibGVuX25h bWUgPSBtaWJsZW4gKyAxOwotCi0JY29sX25hbWUtPnN0cl92YWwgPSBuYW1lOwotCi0JZW1pdHRl cl9jb2xfdCAqZHN0OwotI2RlZmluZSBFTUlUVEVSX1RZUEVfdWludDMyX3QgZW1pdHRlcl90eXBl X3VpbnQzMgotI2RlZmluZSBFTUlUVEVSX1RZUEVfdWludDY0X3QgZW1pdHRlcl90eXBlX3VpbnQ2 NAotI2RlZmluZSBPUChjb3VudGVyLCBjb3VudGVyX3R5cGUsIGh1bWFuLCBkZXJpdmVkLCBiYXNl X2NvdW50ZXIpCQlcCi0JZHN0ID0gJmNvbF8jI2NvdW50ZXJfdHlwZVttdXRleF9jb3VudGVyXyMj Y291bnRlcl07CQlcCi0JZHN0LT50eXBlID0gRU1JVFRFUl9UWVBFXyMjY291bnRlcl90eXBlOwkJ CVwKLQlpZiAoIWRlcml2ZWQpIHsJCQkJCQkJXAotCQlDVExfTEVBRihtaWIsIG1pYmxlbl9uYW1l LCAjY291bnRlciwJCQlcCi0JCSAgICAoY291bnRlcl90eXBlICopJmRzdC0+Ym9vbF92YWwsIGNv dW50ZXJfdHlwZSk7CVwKLQl9IGVsc2UgewkJCQkJCQlcCi0JCWVtaXR0ZXJfY29sX3QgKmJhc2Ug PQkJCQkJXAotCQkgICAgJmNvbF8jI2NvdW50ZXJfdHlwZVttdXRleF9jb3VudGVyXyMjYmFzZV9j b3VudGVyXTsJXAotCQlkc3QtPmNvdW50ZXJfdHlwZSMjX3ZhbCA9CQkJCVwKLQkJICAgIChjb3Vu dGVyX3R5cGUpcmF0ZV9wZXJfc2Vjb25kKAkJCVwKLQkJICAgIGJhc2UtPmNvdW50ZXJfdHlwZSMj X3ZhbCwgdXB0aW1lKTsJCQlcCi0JfQotCU1VVEVYX1BST0ZfQ09VTlRFUlMKLSN1bmRlZiBPUAot I3VuZGVmIEVNSVRURVJfVFlQRV91aW50MzJfdAotI3VuZGVmIEVNSVRURVJfVFlQRV91aW50NjRf dAotfQotCi1zdGF0aWMgdm9pZAotbXV0ZXhfc3RhdHNfcmVhZF9hcmVuYShzaXplX3QgbWliW10s IHNpemVfdCBtaWJsZW4sIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgZW1pdHRlcl9jb2xfdCAqY29s X25hbWUsCi0gICAgZW1pdHRlcl9jb2xfdCBjb2xfdWludDY0X3RbbXV0ZXhfcHJvZl9udW1fdWlu dDY0X3RfY291bnRlcnNdLAotICAgIGVtaXR0ZXJfY29sX3QgY29sX3VpbnQzMl90W211dGV4X3By b2ZfbnVtX3VpbnQzMl90X2NvdW50ZXJzXSwKLSAgICB1aW50NjRfdCB1cHRpbWUpIHsKLQlDVExf TEVBRl9QUkVQQVJFKG1pYiwgbWlibGVuLCBuYW1lKTsKLQlzaXplX3QgbWlibGVuX25hbWUgPSBt aWJsZW4gKyAxOwotCi0JY29sX25hbWUtPnN0cl92YWwgPSBuYW1lOwotCi0JZW1pdHRlcl9jb2xf dCAqZHN0OwotI2RlZmluZSBFTUlUVEVSX1RZUEVfdWludDMyX3QgZW1pdHRlcl90eXBlX3VpbnQz MgotI2RlZmluZSBFTUlUVEVSX1RZUEVfdWludDY0X3QgZW1pdHRlcl90eXBlX3VpbnQ2NAotI2Rl ZmluZSBPUChjb3VudGVyLCBjb3VudGVyX3R5cGUsIGh1bWFuLCBkZXJpdmVkLCBiYXNlX2NvdW50 ZXIpCQlcCi0JZHN0ID0gJmNvbF8jI2NvdW50ZXJfdHlwZVttdXRleF9jb3VudGVyXyMjY291bnRl cl07CQlcCi0JZHN0LT50eXBlID0gRU1JVFRFUl9UWVBFXyMjY291bnRlcl90eXBlOwkJCVwKLQlp ZiAoIWRlcml2ZWQpIHsJCQkJCQkJXAotCQlDVExfTEVBRihtaWIsIG1pYmxlbl9uYW1lLCAjY291 bnRlciwJCQlcCi0JCSAgICAoY291bnRlcl90eXBlICopJmRzdC0+Ym9vbF92YWwsIGNvdW50ZXJf dHlwZSk7CVwKLQl9IGVsc2UgewkJCQkJCQlcCi0JCWVtaXR0ZXJfY29sX3QgKmJhc2UgPQkJCQkJ XAotCQkgICAgJmNvbF8jI2NvdW50ZXJfdHlwZVttdXRleF9jb3VudGVyXyMjYmFzZV9jb3VudGVy XTsJXAotCQlkc3QtPmNvdW50ZXJfdHlwZSMjX3ZhbCA9CQkJCVwKLQkJICAgIChjb3VudGVyX3R5 cGUpcmF0ZV9wZXJfc2Vjb25kKAkJCVwKLQkJICAgIGJhc2UtPmNvdW50ZXJfdHlwZSMjX3ZhbCwg dXB0aW1lKTsJCQlcCi0JfQotCU1VVEVYX1BST0ZfQ09VTlRFUlMKLSN1bmRlZiBPUAotI3VuZGVm IEVNSVRURVJfVFlQRV91aW50MzJfdAotI3VuZGVmIEVNSVRURVJfVFlQRV91aW50NjRfdAotfQot Ci1zdGF0aWMgdm9pZAotbXV0ZXhfc3RhdHNfcmVhZF9hcmVuYV9iaW4oc2l6ZV90IG1pYltdLCBz aXplX3QgbWlibGVuLAotICAgIGVtaXR0ZXJfY29sX3QgY29sX3VpbnQ2NF90W211dGV4X3Byb2Zf bnVtX3VpbnQ2NF90X2NvdW50ZXJzXSwKLSAgICBlbWl0dGVyX2NvbF90IGNvbF91aW50MzJfdFtt dXRleF9wcm9mX251bV91aW50MzJfdF9jb3VudGVyc10sCi0gICAgdWludDY0X3QgdXB0aW1lKSB7 Ci0JQ1RMX0xFQUZfUFJFUEFSRShtaWIsIG1pYmxlbiwgIm11dGV4Iik7Ci0Jc2l6ZV90IG1pYmxl bl9tdXRleCA9IG1pYmxlbiArIDE7Ci0KLQllbWl0dGVyX2NvbF90ICpkc3Q7Ci0KLSNkZWZpbmUg RU1JVFRFUl9UWVBFX3VpbnQzMl90IGVtaXR0ZXJfdHlwZV91aW50MzIKLSNkZWZpbmUgRU1JVFRF Ul9UWVBFX3VpbnQ2NF90IGVtaXR0ZXJfdHlwZV91aW50NjQKLSNkZWZpbmUgT1AoY291bnRlciwg Y291bnRlcl90eXBlLCBodW1hbiwgZGVyaXZlZCwgYmFzZV9jb3VudGVyKQkJXAotCWRzdCA9ICZj b2xfIyNjb3VudGVyX3R5cGVbbXV0ZXhfY291bnRlcl8jI2NvdW50ZXJdOwkJXAotCWRzdC0+dHlw ZSA9IEVNSVRURVJfVFlQRV8jI2NvdW50ZXJfdHlwZTsJCQlcCi0JaWYgKCFkZXJpdmVkKSB7CQkJ CQkJCVwKLQkJQ1RMX0xFQUYobWliLCBtaWJsZW5fbXV0ZXgsICNjb3VudGVyLAkJCVwKLQkJICAg IChjb3VudGVyX3R5cGUgKikmZHN0LT5ib29sX3ZhbCwgY291bnRlcl90eXBlKTsJXAotCX0gZWxz ZSB7CQkJCQkJCVwKLQkJZW1pdHRlcl9jb2xfdCAqYmFzZSA9CQkJCQlcCi0JCSAgICAmY29sXyMj Y291bnRlcl90eXBlW211dGV4X2NvdW50ZXJfIyNiYXNlX2NvdW50ZXJdOwlcCi0JCWRzdC0+Y291 bnRlcl90eXBlIyNfdmFsID0JCQkJXAotCQkgICAgKGNvdW50ZXJfdHlwZSlyYXRlX3Blcl9zZWNv bmQoCQkJXAotCQkgICAgYmFzZS0+Y291bnRlcl90eXBlIyNfdmFsLCB1cHRpbWUpOwkJCVwKLQl9 Ci0JTVVURVhfUFJPRl9DT1VOVEVSUwotI3VuZGVmIE9QCi0jdW5kZWYgRU1JVFRFUl9UWVBFX3Vp bnQzMl90Ci0jdW5kZWYgRU1JVFRFUl9UWVBFX3VpbnQ2NF90Ci19Ci0KLS8qICJyb3ciIGNhbiBi ZSBOVUxMIHRvIGF2b2lkIGVtaXR0aW5nIGluIHRhYmxlIG1vZGUuICovCi1zdGF0aWMgdm9pZAot bXV0ZXhfc3RhdHNfZW1pdChlbWl0dGVyX3QgKmVtaXR0ZXIsIGVtaXR0ZXJfcm93X3QgKnJvdywK LSAgICBlbWl0dGVyX2NvbF90IGNvbF91aW50NjRfdFttdXRleF9wcm9mX251bV91aW50NjRfdF9j b3VudGVyc10sCi0gICAgZW1pdHRlcl9jb2xfdCBjb2xfdWludDMyX3RbbXV0ZXhfcHJvZl9udW1f dWludDMyX3RfY291bnRlcnNdKSB7Ci0JaWYgKHJvdyAhPSBOVUxMKSB7Ci0JCWVtaXR0ZXJfdGFi bGVfcm93KGVtaXR0ZXIsIHJvdyk7Ci0JfQotCi0JbXV0ZXhfcHJvZl91aW50NjRfdF9jb3VudGVy X2luZF90IGtfdWludDY0X3QgPSAwOwotCW11dGV4X3Byb2ZfdWludDMyX3RfY291bnRlcl9pbmRf dCBrX3VpbnQzMl90ID0gMDsKLQotCWVtaXR0ZXJfY29sX3QgKmNvbDsKLQotI2RlZmluZSBFTUlU VEVSX1RZUEVfdWludDMyX3QgZW1pdHRlcl90eXBlX3VpbnQzMgotI2RlZmluZSBFTUlUVEVSX1RZ UEVfdWludDY0X3QgZW1pdHRlcl90eXBlX3VpbnQ2NAotI2RlZmluZSBPUChjb3VudGVyLCB0eXBl LCBodW1hbiwgZGVyaXZlZCwgYmFzZV9jb3VudGVyKQkJXAotCWlmICghZGVyaXZlZCkgeyAgICAg ICAgICAgICAgICAgICAgXAotCQljb2wgPSAmY29sXyMjdHlwZVtrXyMjdHlwZV07ICAgICAgICAg ICAgICAgICAgICAgICAgXAotCQkrK2tfIyN0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAjY291bnRlciwgRU1JVFRFUl9UWVBFXyMj dHlwZSwgICAgICAgIFwKLQkJICAgIChjb25zdCB2b2lkICopJmNvbC0+Ym9vbF92YWwpOyBcCi0J fQotCU1VVEVYX1BST0ZfQ09VTlRFUlM7Ci0jdW5kZWYgT1AKLSN1bmRlZiBFTUlUVEVSX1RZUEVf dWludDMyX3QKLSN1bmRlZiBFTUlUVEVSX1RZUEVfdWludDY0X3QKLX0KLQotI2RlZmluZSBDT0xf REVDTEFSRShjb2x1bW5fbmFtZSkJCQkJCVwKLQllbWl0dGVyX2NvbF90IGNvbF8jI2NvbHVtbl9u YW1lOwotCi0jZGVmaW5lIENPTF9JTklUKHJvd19uYW1lLCBjb2x1bW5fbmFtZSwgbGVmdF9vcl9y aWdodCwgY29sX3dpZHRoLCBldHlwZSlcCi0JZW1pdHRlcl9jb2xfaW5pdCgmY29sXyMjY29sdW1u X25hbWUsICZyb3dfbmFtZSk7CQlcCi0JY29sXyMjY29sdW1uX25hbWUuanVzdGlmeSA9IGVtaXR0 ZXJfanVzdGlmeV8jI2xlZnRfb3JfcmlnaHQ7CVwKLQljb2xfIyNjb2x1bW5fbmFtZS53aWR0aCA9 IGNvbF93aWR0aDsJCQkJXAotCWNvbF8jI2NvbHVtbl9uYW1lLnR5cGUgPSBlbWl0dGVyX3R5cGVf IyNldHlwZTsKLQotI2RlZmluZSBDT0wocm93X25hbWUsIGNvbHVtbl9uYW1lLCBsZWZ0X29yX3Jp Z2h0LCBjb2xfd2lkdGgsIGV0eXBlKQlcCi0JQ09MX0RFQ0xBUkUoY29sdW1uX25hbWUpOwkJCQkJ XAotCUNPTF9JTklUKHJvd19uYW1lLCBjb2x1bW5fbmFtZSwgbGVmdF9vcl9yaWdodCwgY29sX3dp ZHRoLCBldHlwZSkKLQotI2RlZmluZSBDT0xfSERSX0RFQ0xBUkUoY29sdW1uX25hbWUpCQkJCQlc Ci0JQ09MX0RFQ0xBUkUoY29sdW1uX25hbWUpOwkJCQkJXAotCWVtaXR0ZXJfY29sX3QgaGVhZGVy XyMjY29sdW1uX25hbWU7Ci0KLSNkZWZpbmUgQ09MX0hEUl9JTklUKHJvd19uYW1lLCBjb2x1bW5f bmFtZSwgaHVtYW4sIGxlZnRfb3JfcmlnaHQsCVwKLQljb2xfd2lkdGgsIGV0eXBlKQkJCQkJCVwK LQlDT0xfSU5JVChyb3dfbmFtZSwgY29sdW1uX25hbWUsIGxlZnRfb3JfcmlnaHQsIGNvbF93aWR0 aCwgZXR5cGUpXAotCWVtaXR0ZXJfY29sX2luaXQoJmhlYWRlcl8jI2NvbHVtbl9uYW1lLCAmaGVh ZGVyXyMjcm93X25hbWUpOwlcCi0JaGVhZGVyXyMjY29sdW1uX25hbWUuanVzdGlmeSA9IGVtaXR0 ZXJfanVzdGlmeV8jI2xlZnRfb3JfcmlnaHQ7CVwKLQloZWFkZXJfIyNjb2x1bW5fbmFtZS53aWR0 aCA9IGNvbF93aWR0aDsJCQkJXAotCWhlYWRlcl8jI2NvbHVtbl9uYW1lLnR5cGUgPSBlbWl0dGVy X3R5cGVfdGl0bGU7CQkJXAotCWhlYWRlcl8jI2NvbHVtbl9uYW1lLnN0cl92YWwgPSBodW1hbiA/ IGh1bWFuIDogI2NvbHVtbl9uYW1lOwotCi0jZGVmaW5lIENPTF9IRFIocm93X25hbWUsIGNvbHVt bl9uYW1lLCBodW1hbiwgbGVmdF9vcl9yaWdodCwgY29sX3dpZHRoLAlcCi0gICAgZXR5cGUpCQkJ CQkJCQlcCi0JQ09MX0hEUl9ERUNMQVJFKGNvbHVtbl9uYW1lKQkJCQkJXAotCUNPTF9IRFJfSU5J VChyb3dfbmFtZSwgY29sdW1uX25hbWUsIGh1bWFuLCBsZWZ0X29yX3JpZ2h0LAlcCi0JICAgIGNv bF93aWR0aCwgZXR5cGUpCi0KLUpFTUFMTE9DX0NPTEQKLXN0YXRpYyB2b2lkCi1zdGF0c19hcmVu YV9iaW5zX3ByaW50KGVtaXR0ZXJfdCAqZW1pdHRlciwgYm9vbCBtdXRleCwgdW5zaWduZWQgaSwK LSAgICB1aW50NjRfdCB1cHRpbWUpIHsKLQlzaXplX3QgcGFnZTsKLQlib29sIGluX2dhcCwgaW5f Z2FwX3ByZXY7Ci0JdW5zaWduZWQgbmJpbnMsIGo7Ci0KLQlDVExfR0VUKCJhcmVuYXMucGFnZSIs ICZwYWdlLCBzaXplX3QpOwotCi0JQ1RMX0dFVCgiYXJlbmFzLm5iaW5zIiwgJm5iaW5zLCB1bnNp Z25lZCk7Ci0KLQllbWl0dGVyX3Jvd190IGhlYWRlcl9yb3c7Ci0JZW1pdHRlcl9yb3dfaW5pdCgm aGVhZGVyX3Jvdyk7Ci0KLQllbWl0dGVyX3Jvd190IHJvdzsKLQllbWl0dGVyX3Jvd19pbml0KCZy b3cpOwotCi0JYm9vbCBwcm9mX3N0YXRzX29uID0gY29uZmlnX3Byb2YgJiYgb3B0X3Byb2YgJiYg b3B0X3Byb2Zfc3RhdHMKLQkgICAgJiYgaSA9PSBNQUxMQ1RMX0FSRU5BU19BTEw7Ci0KLQlDT0xf SERSKHJvdywgc2l6ZSwgTlVMTCwgcmlnaHQsIDIwLCBzaXplKQotCUNPTF9IRFIocm93LCBpbmQs IE5VTEwsIHJpZ2h0LCA0LCB1bnNpZ25lZCkKLQlDT0xfSERSKHJvdywgYWxsb2NhdGVkLCBOVUxM LCByaWdodCwgMTMsIHVpbnQ2NCkKLQlDT0xfSERSKHJvdywgbm1hbGxvYywgTlVMTCwgcmlnaHQs IDEzLCB1aW50NjQpCi0JQ09MX0hEUihyb3csIG5tYWxsb2NfcHMsICIoIy9zZWMpIiwgcmlnaHQs IDgsIHVpbnQ2NCkKLQlDT0xfSERSKHJvdywgbmRhbGxvYywgTlVMTCwgcmlnaHQsIDEzLCB1aW50 NjQpCi0JQ09MX0hEUihyb3csIG5kYWxsb2NfcHMsICIoIy9zZWMpIiwgcmlnaHQsIDgsIHVpbnQ2 NCkKLQlDT0xfSERSKHJvdywgbnJlcXVlc3RzLCBOVUxMLCByaWdodCwgMTMsIHVpbnQ2NCkKLQlD T0xfSERSKHJvdywgbnJlcXVlc3RzX3BzLCAiKCMvc2VjKSIsIHJpZ2h0LCAxMCwgdWludDY0KQot CUNPTF9IRFJfREVDTEFSRShwcm9mX2xpdmVfcmVxdWVzdGVkKTsKLQlDT0xfSERSX0RFQ0xBUkUo cHJvZl9saXZlX2NvdW50KTsKLQlDT0xfSERSX0RFQ0xBUkUocHJvZl9hY2N1bV9yZXF1ZXN0ZWQp OwotCUNPTF9IRFJfREVDTEFSRShwcm9mX2FjY3VtX2NvdW50KTsKLQlpZiAocHJvZl9zdGF0c19v bikgewotCQlDT0xfSERSX0lOSVQocm93LCBwcm9mX2xpdmVfcmVxdWVzdGVkLCBOVUxMLCByaWdo dCwgMjEsIHVpbnQ2NCkKLQkJQ09MX0hEUl9JTklUKHJvdywgcHJvZl9saXZlX2NvdW50LCBOVUxM LCByaWdodCwgMTcsIHVpbnQ2NCkKLQkJQ09MX0hEUl9JTklUKHJvdywgcHJvZl9hY2N1bV9yZXF1 ZXN0ZWQsIE5VTEwsIHJpZ2h0LCAyMSwgdWludDY0KQotCQlDT0xfSERSX0lOSVQocm93LCBwcm9m X2FjY3VtX2NvdW50LCBOVUxMLCByaWdodCwgMTcsIHVpbnQ2NCkKLQl9Ci0JQ09MX0hEUihyb3cs IG5zaGFyZHMsIE5VTEwsIHJpZ2h0LCA5LCB1bnNpZ25lZCkKLQlDT0xfSERSKHJvdywgY3VycmVn cywgTlVMTCwgcmlnaHQsIDEzLCBzaXplKQotCUNPTF9IRFIocm93LCBjdXJzbGFicywgTlVMTCwg cmlnaHQsIDEzLCBzaXplKQotCUNPTF9IRFIocm93LCBub25mdWxsX3NsYWJzLCBOVUxMLCByaWdo dCwgMTUsIHNpemUpCi0JQ09MX0hEUihyb3csIHJlZ3MsIE5VTEwsIHJpZ2h0LCA1LCB1bnNpZ25l ZCkKLQlDT0xfSERSKHJvdywgcGdzLCBOVUxMLCByaWdodCwgNCwgc2l6ZSkKLQkvKiBUbyBidWZm ZXIgYSByaWdodC0gYW5kIGxlZnQtanVzdGlmaWVkIGNvbHVtbi4gKi8KLQlDT0xfSERSKHJvdywg anVzdGlmeV9zcGFjZXIsIE5VTEwsIHJpZ2h0LCAxLCB0aXRsZSkKLQlDT0xfSERSKHJvdywgdXRp bCwgTlVMTCwgcmlnaHQsIDYsIHRpdGxlKQotCUNPTF9IRFIocm93LCBuZmlsbHMsIE5VTEwsIHJp Z2h0LCAxMywgdWludDY0KQotCUNPTF9IRFIocm93LCBuZmlsbHNfcHMsICIoIy9zZWMpIiwgcmln aHQsIDgsIHVpbnQ2NCkKLQlDT0xfSERSKHJvdywgbmZsdXNoZXMsIE5VTEwsIHJpZ2h0LCAxMywg dWludDY0KQotCUNPTF9IRFIocm93LCBuZmx1c2hlc19wcywgIigjL3NlYykiLCByaWdodCwgOCwg dWludDY0KQotCUNPTF9IRFIocm93LCBuc2xhYnMsIE5VTEwsIHJpZ2h0LCAxMywgdWludDY0KQot CUNPTF9IRFIocm93LCBucmVzbGFicywgTlVMTCwgcmlnaHQsIDEzLCB1aW50NjQpCi0JQ09MX0hE Uihyb3csIG5yZXNsYWJzX3BzLCAiKCMvc2VjKSIsIHJpZ2h0LCA4LCB1aW50NjQpCi0KLQkvKiBE b24ndCB3YW50IHRvIGFjdHVhbGx5IHByaW50IHRoZSBuYW1lLiAqLwotCWhlYWRlcl9qdXN0aWZ5 X3NwYWNlci5zdHJfdmFsID0gIiAiOwotCWNvbF9qdXN0aWZ5X3NwYWNlci5zdHJfdmFsID0gIiAi OwotCi0JZW1pdHRlcl9jb2xfdCBjb2xfbXV0ZXg2NFttdXRleF9wcm9mX251bV91aW50NjRfdF9j b3VudGVyc107Ci0JZW1pdHRlcl9jb2xfdCBjb2xfbXV0ZXgzMlttdXRleF9wcm9mX251bV91aW50 MzJfdF9jb3VudGVyc107Ci0KLQllbWl0dGVyX2NvbF90IGhlYWRlcl9tdXRleDY0W211dGV4X3By b2ZfbnVtX3VpbnQ2NF90X2NvdW50ZXJzXTsKLQllbWl0dGVyX2NvbF90IGhlYWRlcl9tdXRleDMy W211dGV4X3Byb2ZfbnVtX3VpbnQzMl90X2NvdW50ZXJzXTsKLQotCWlmIChtdXRleCkgewotCQlt dXRleF9zdGF0c19pbml0X2NvbHMoJnJvdywgTlVMTCwgTlVMTCwgY29sX211dGV4NjQsCi0JCSAg ICBjb2xfbXV0ZXgzMik7Ci0JCW11dGV4X3N0YXRzX2luaXRfY29scygmaGVhZGVyX3JvdywgTlVM TCwgTlVMTCwgaGVhZGVyX211dGV4NjQsCi0JCSAgICBoZWFkZXJfbXV0ZXgzMik7Ci0JfQotCi0J LyoKLQkgKiBXZSBwcmludCBhICJiaW5zOiIgaGVhZGVyIGFzIHBhcnQgb2YgdGhlIHRhYmxlIHJv dzsgd2UgbmVlZCB0byBhZGp1c3QKLQkgKiB0aGUgaGVhZGVyIHNpemUgY29sdW1uIHRvIGNvbXBl bnNhdGUuCi0JICovCi0JaGVhZGVyX3NpemUud2lkdGggLT01OwotCWVtaXR0ZXJfdGFibGVfcHJp bnRmKGVtaXR0ZXIsICJiaW5zOiIpOwotCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZoZWFk ZXJfcm93KTsKLQllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRlciwgImJpbnMiKTsK LQotCXNpemVfdCBzdGF0c19hcmVuYXNfbWliW0NUTF9NQVhfREVQVEhdOwotCUNUTF9MRUFGX1BS RVBBUkUoc3RhdHNfYXJlbmFzX21pYiwgMCwgInN0YXRzLmFyZW5hcyIpOwotCXN0YXRzX2FyZW5h c19taWJbMl0gPSBpOwotCUNUTF9MRUFGX1BSRVBBUkUoc3RhdHNfYXJlbmFzX21pYiwgMywgImJp bnMiKTsKLQotCXNpemVfdCBhcmVuYXNfYmluX21pYltDVExfTUFYX0RFUFRIXTsKLQlDVExfTEVB Rl9QUkVQQVJFKGFyZW5hc19iaW5fbWliLCAwLCAiYXJlbmFzLmJpbiIpOwotCi0Jc2l6ZV90IHBy b2Zfc3RhdHNfbWliW0NUTF9NQVhfREVQVEhdOwotCWlmIChwcm9mX3N0YXRzX29uKSB7Ci0JCUNU TF9MRUFGX1BSRVBBUkUocHJvZl9zdGF0c19taWIsIDAsICJwcm9mLnN0YXRzLmJpbnMiKTsKLQl9 Ci0KLQlmb3IgKGogPSAwLCBpbl9nYXAgPSBmYWxzZTsgaiA8IG5iaW5zOyBqKyspIHsKLQkJdWlu dDY0X3QgbnNsYWJzOwotCQlzaXplX3QgcmVnX3NpemUsIHNsYWJfc2l6ZSwgY3VycmVnczsKLQkJ c2l6ZV90IGN1cnNsYWJzOwotCQlzaXplX3Qgbm9uZnVsbF9zbGFiczsKLQkJdWludDMyX3QgbnJl Z3MsIG5zaGFyZHM7Ci0JCXVpbnQ2NF90IG5tYWxsb2MsIG5kYWxsb2MsIG5yZXF1ZXN0cywgbmZp bGxzLCBuZmx1c2hlczsKLQkJdWludDY0X3QgbnJlc2xhYnM7Ci0JCXByb2Zfc3RhdHNfdCBwcm9m X2xpdmU7Ci0JCXByb2Zfc3RhdHNfdCBwcm9mX2FjY3VtOwotCi0JCXN0YXRzX2FyZW5hc19taWJb NF0gPSBqOwotCQlhcmVuYXNfYmluX21pYlsyXSA9IGo7Ci0KLQkJQ1RMX0xFQUYoc3RhdHNfYXJl bmFzX21pYiwgNSwgIm5zbGFicyIsICZuc2xhYnMsIHVpbnQ2NF90KTsKLQotCQlpZiAocHJvZl9z dGF0c19vbikgewotCQkJcHJvZl9zdGF0c19taWJbM10gPSBqOwotCQkJQ1RMX0xFQUYocHJvZl9z dGF0c19taWIsIDQsICJsaXZlIiwgJnByb2ZfbGl2ZSwKLQkJCSAgICBwcm9mX3N0YXRzX3QpOwot CQkJQ1RMX0xFQUYocHJvZl9zdGF0c19taWIsIDQsICJhY2N1bSIsICZwcm9mX2FjY3VtLAotCQkJ ICAgIHByb2Zfc3RhdHNfdCk7Ci0JCX0KLQotCQlpbl9nYXBfcHJldiA9IGluX2dhcDsKLQkJaWYg KHByb2Zfc3RhdHNfb24pIHsKLQkJCWluX2dhcCA9IChuc2xhYnMgPT0gMCAmJiBwcm9mX2FjY3Vt LmNvdW50ID09IDApOwotCQl9IGVsc2UgewotCQkJaW5fZ2FwID0gKG5zbGFicyA9PSAwKTsKLQkJ fQotCi0JCWlmIChpbl9nYXBfcHJldiAmJiAhaW5fZ2FwKSB7Ci0JCQllbWl0dGVyX3RhYmxlX3By aW50ZihlbWl0dGVyLAotCQkJICAgICIgICAgICAgICAgICAgICAgICAgICAtLS1cbiIpOwotCQl9 Ci0KLQkJaWYgKGluX2dhcCAmJiAhZW1pdHRlcl9vdXRwdXRzX2pzb24oZW1pdHRlcikpIHsKLQkJ CWNvbnRpbnVlOwotCQl9Ci0KLQkJQ1RMX0xFQUYoYXJlbmFzX2Jpbl9taWIsIDMsICJzaXplIiwg JnJlZ19zaXplLCBzaXplX3QpOwotCQlDVExfTEVBRihhcmVuYXNfYmluX21pYiwgMywgIm5yZWdz IiwgJm5yZWdzLCB1aW50MzJfdCk7Ci0JCUNUTF9MRUFGKGFyZW5hc19iaW5fbWliLCAzLCAic2xh Yl9zaXplIiwgJnNsYWJfc2l6ZSwgc2l6ZV90KTsKLQkJQ1RMX0xFQUYoYXJlbmFzX2Jpbl9taWIs IDMsICJuc2hhcmRzIiwgJm5zaGFyZHMsIHVpbnQzMl90KTsKLQkJQ1RMX0xFQUYoc3RhdHNfYXJl bmFzX21pYiwgNSwgIm5tYWxsb2MiLCAmbm1hbGxvYywgdWludDY0X3QpOwotCQlDVExfTEVBRihz dGF0c19hcmVuYXNfbWliLCA1LCAibmRhbGxvYyIsICZuZGFsbG9jLCB1aW50NjRfdCk7Ci0JCUNU TF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJjdXJyZWdzIiwgJmN1cnJlZ3MsIHNpemVfdCk7 Ci0JCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJucmVxdWVzdHMiLCAmbnJlcXVlc3Rz LAotCQkgICAgdWludDY0X3QpOwotCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAibmZp bGxzIiwgJm5maWxscywgdWludDY0X3QpOwotCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1 LCAibmZsdXNoZXMiLCAmbmZsdXNoZXMsIHVpbnQ2NF90KTsKLQkJQ1RMX0xFQUYoc3RhdHNfYXJl bmFzX21pYiwgNSwgIm5yZXNsYWJzIiwgJm5yZXNsYWJzLCB1aW50NjRfdCk7Ci0JCUNUTF9MRUFG KHN0YXRzX2FyZW5hc19taWIsIDUsICJjdXJzbGFicyIsICZjdXJzbGFicywgc2l6ZV90KTsKLQkJ Q1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNSwgIm5vbmZ1bGxfc2xhYnMiLCAmbm9uZnVsbF9z bGFicywKLQkJICAgIHNpemVfdCk7Ci0KLQkJaWYgKG11dGV4KSB7Ci0JCQltdXRleF9zdGF0c19y ZWFkX2FyZW5hX2JpbihzdGF0c19hcmVuYXNfbWliLCA1LAotCQkJICAgIGNvbF9tdXRleDY0LCBj b2xfbXV0ZXgzMiwgdXB0aW1lKTsKLQkJfQotCi0JCWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4o ZW1pdHRlcik7Ci0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibm1hbGxvYyIsIGVtaXR0ZXJf dHlwZV91aW50NjQsCi0JCSAgICAmbm1hbGxvYyk7Ci0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVy LCAibmRhbGxvYyIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCi0JCSAgICAmbmRhbGxvYyk7Ci0JCWVt aXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiY3VycmVncyIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCQkg ICAgJmN1cnJlZ3MpOwotCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5yZXF1ZXN0cyIsIGVt aXR0ZXJfdHlwZV91aW50NjQsCi0JCSAgICAmbnJlcXVlc3RzKTsKLQkJaWYgKHByb2Zfc3RhdHNf b24pIHsKLQkJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAicHJvZl9saXZlX3JlcXVlc3RlZCIs Ci0JCQkgICAgZW1pdHRlcl90eXBlX3VpbnQ2NCwgJnByb2ZfbGl2ZS5yZXFfc3VtKTsKLQkJCWVt aXR0ZXJfanNvbl9rdihlbWl0dGVyLCAicHJvZl9saXZlX2NvdW50IiwKLQkJCSAgICBlbWl0dGVy X3R5cGVfdWludDY0LCAmcHJvZl9saXZlLmNvdW50KTsKLQkJCWVtaXR0ZXJfanNvbl9rdihlbWl0 dGVyLCAicHJvZl9hY2N1bV9yZXF1ZXN0ZWQiLAotCQkJICAgIGVtaXR0ZXJfdHlwZV91aW50NjQs ICZwcm9mX2FjY3VtLnJlcV9zdW0pOwotCQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJwcm9m X2FjY3VtX2NvdW50IiwKLQkJCSAgICBlbWl0dGVyX3R5cGVfdWludDY0LCAmcHJvZl9hY2N1bS5j b3VudCk7Ci0JCX0KLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJuZmlsbHMiLCBlbWl0dGVy X3R5cGVfdWludDY0LAotCQkgICAgJm5maWxscyk7Ci0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVy LCAibmZsdXNoZXMiLCBlbWl0dGVyX3R5cGVfdWludDY0LAotCQkgICAgJm5mbHVzaGVzKTsKLQkJ ZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJucmVzbGFicyIsIGVtaXR0ZXJfdHlwZV91aW50NjQs Ci0JCSAgICAmbnJlc2xhYnMpOwotCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgImN1cnNsYWJz IiwgZW1pdHRlcl90eXBlX3NpemUsCi0JCSAgICAmY3Vyc2xhYnMpOwotCQllbWl0dGVyX2pzb25f a3YoZW1pdHRlciwgIm5vbmZ1bGxfc2xhYnMiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKLQkJICAgICZu b25mdWxsX3NsYWJzKTsKLQkJaWYgKG11dGV4KSB7Ci0JCQllbWl0dGVyX2pzb25fb2JqZWN0X2t2 X2JlZ2luKGVtaXR0ZXIsICJtdXRleCIpOwotCQkJbXV0ZXhfc3RhdHNfZW1pdChlbWl0dGVyLCBO VUxMLCBjb2xfbXV0ZXg2NCwKLQkJCSAgICBjb2xfbXV0ZXgzMik7Ci0JCQllbWl0dGVyX2pzb25f b2JqZWN0X2VuZChlbWl0dGVyKTsKLQkJfQotCQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0 dGVyKTsKLQotCQlzaXplX3QgYXZhaWxyZWdzID0gbnJlZ3MgKiBjdXJzbGFiczsKLQkJY2hhciB1 dGlsWzZdOwotCQlpZiAoZ2V0X3JhdGVfc3RyKCh1aW50NjRfdCljdXJyZWdzLCAodWludDY0X3Qp YXZhaWxyZWdzLCB1dGlsKSkKLQkJewotCQkJaWYgKGF2YWlscmVncyA9PSAwKSB7Ci0JCQkJbWFs bG9jX3NucHJpbnRmKHV0aWwsIHNpemVvZih1dGlsKSwgIjEiKTsKLQkJCX0gZWxzZSBpZiAoY3Vy cmVncyA+IGF2YWlscmVncykgewotCQkJCS8qCi0JCQkJICogUmFjZSBkZXRlY3RlZDogdGhlIGNv dW50ZXJzIHdlcmUgcmVhZCBpbgotCQkJCSAqIHNlcGFyYXRlIG1hbGxjdGwgY2FsbHMgYW5kIGNv bmN1cnJlbnQKLQkJCQkgKiBvcGVyYXRpb25zIGhhcHBlbmVkIGluIGJldHdlZW4uICBJbiB0aGlz IGNhc2UKLQkJCQkgKiBubyBtZWFuaW5nZnVsIHV0aWxpemF0aW9uIGNhbiBiZSBjb21wdXRlZC4K LQkJCQkgKi8KLQkJCQltYWxsb2Nfc25wcmludGYodXRpbCwgc2l6ZW9mKHV0aWwpLCAiIHJhY2Ui KTsKLQkJCX0gZWxzZSB7Ci0JCQkJbm90X3JlYWNoZWQoKTsKLQkJCX0KLQkJfQotCi0JCWNvbF9z aXplLnNpemVfdmFsID0gcmVnX3NpemU7Ci0JCWNvbF9pbmQudW5zaWduZWRfdmFsID0gajsKLQkJ Y29sX2FsbG9jYXRlZC5zaXplX3ZhbCA9IGN1cnJlZ3MgKiByZWdfc2l6ZTsKLQkJY29sX25tYWxs b2MudWludDY0X3ZhbCA9IG5tYWxsb2M7Ci0JCWNvbF9ubWFsbG9jX3BzLnVpbnQ2NF92YWwgPSBy YXRlX3Blcl9zZWNvbmQobm1hbGxvYywgdXB0aW1lKTsKLQkJY29sX25kYWxsb2MudWludDY0X3Zh bCA9IG5kYWxsb2M7Ci0JCWNvbF9uZGFsbG9jX3BzLnVpbnQ2NF92YWwgPSByYXRlX3Blcl9zZWNv bmQobmRhbGxvYywgdXB0aW1lKTsKLQkJY29sX25yZXF1ZXN0cy51aW50NjRfdmFsID0gbnJlcXVl c3RzOwotCQljb2xfbnJlcXVlc3RzX3BzLnVpbnQ2NF92YWwgPSByYXRlX3Blcl9zZWNvbmQobnJl cXVlc3RzLCB1cHRpbWUpOwotCQlpZiAocHJvZl9zdGF0c19vbikgewotCQkJY29sX3Byb2ZfbGl2 ZV9yZXF1ZXN0ZWQudWludDY0X3ZhbCA9IHByb2ZfbGl2ZS5yZXFfc3VtOwotCQkJY29sX3Byb2Zf bGl2ZV9jb3VudC51aW50NjRfdmFsID0gcHJvZl9saXZlLmNvdW50OwotCQkJY29sX3Byb2ZfYWNj dW1fcmVxdWVzdGVkLnVpbnQ2NF92YWwgPQotCQkJICAgIHByb2ZfYWNjdW0ucmVxX3N1bTsKLQkJ CWNvbF9wcm9mX2FjY3VtX2NvdW50LnVpbnQ2NF92YWwgPSBwcm9mX2FjY3VtLmNvdW50OwotCQl9 Ci0JCWNvbF9uc2hhcmRzLnVuc2lnbmVkX3ZhbCA9IG5zaGFyZHM7Ci0JCWNvbF9jdXJyZWdzLnNp emVfdmFsID0gY3VycmVnczsKLQkJY29sX2N1cnNsYWJzLnNpemVfdmFsID0gY3Vyc2xhYnM7Ci0J CWNvbF9ub25mdWxsX3NsYWJzLnNpemVfdmFsID0gbm9uZnVsbF9zbGFiczsKLQkJY29sX3JlZ3Mu dW5zaWduZWRfdmFsID0gbnJlZ3M7Ci0JCWNvbF9wZ3Muc2l6ZV92YWwgPSBzbGFiX3NpemUgLyBw YWdlOwotCQljb2xfdXRpbC5zdHJfdmFsID0gdXRpbDsKLQkJY29sX25maWxscy51aW50NjRfdmFs ID0gbmZpbGxzOwotCQljb2xfbmZpbGxzX3BzLnVpbnQ2NF92YWwgPSByYXRlX3Blcl9zZWNvbmQo bmZpbGxzLCB1cHRpbWUpOwotCQljb2xfbmZsdXNoZXMudWludDY0X3ZhbCA9IG5mbHVzaGVzOwot CQljb2xfbmZsdXNoZXNfcHMudWludDY0X3ZhbCA9IHJhdGVfcGVyX3NlY29uZChuZmx1c2hlcywg dXB0aW1lKTsKLQkJY29sX25zbGFicy51aW50NjRfdmFsID0gbnNsYWJzOwotCQljb2xfbnJlc2xh YnMudWludDY0X3ZhbCA9IG5yZXNsYWJzOwotCQljb2xfbnJlc2xhYnNfcHMudWludDY0X3ZhbCA9 IHJhdGVfcGVyX3NlY29uZChucmVzbGFicywgdXB0aW1lKTsKLQotCQkvKgotCQkgKiBOb3RlIHRo YXQgbXV0ZXggY29sdW1ucyB3ZXJlIGluaXRpYWxpemVkIGFib3ZlLCBpZiBtdXRleCA9PQotCQkg KiB0cnVlLgotCQkgKi8KLQotCQllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmcm93KTsKLQl9 Ci0JZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgImJpbnMiLiAqLwot Ci0JaWYgKGluX2dhcCkgewotCQllbWl0dGVyX3RhYmxlX3ByaW50ZihlbWl0dGVyLCAiICAgICAg ICAgICAgICAgICAgICAgLS0tXG4iKTsKLQl9Ci19Ci0KLUpFTUFMTE9DX0NPTEQKLXN0YXRpYyB2 b2lkCi1zdGF0c19hcmVuYV9sZXh0ZW50c19wcmludChlbWl0dGVyX3QgKmVtaXR0ZXIsIHVuc2ln bmVkIGksIHVpbnQ2NF90IHVwdGltZSkgewotCXVuc2lnbmVkIG5iaW5zLCBubGV4dGVudHMsIGo7 Ci0JYm9vbCBpbl9nYXAsIGluX2dhcF9wcmV2OwotCi0JQ1RMX0dFVCgiYXJlbmFzLm5iaW5zIiwg Jm5iaW5zLCB1bnNpZ25lZCk7Ci0JQ1RMX0dFVCgiYXJlbmFzLm5sZXh0ZW50cyIsICZubGV4dGVu dHMsIHVuc2lnbmVkKTsKLQotCWVtaXR0ZXJfcm93X3QgaGVhZGVyX3JvdzsKLQllbWl0dGVyX3Jv d19pbml0KCZoZWFkZXJfcm93KTsKLQllbWl0dGVyX3Jvd190IHJvdzsKLQllbWl0dGVyX3Jvd19p bml0KCZyb3cpOwotCi0JYm9vbCBwcm9mX3N0YXRzX29uID0gY29uZmlnX3Byb2YgJiYgb3B0X3By b2YgJiYgb3B0X3Byb2Zfc3RhdHMKLQkgICAgJiYgaSA9PSBNQUxMQ1RMX0FSRU5BU19BTEw7Ci0K LQlDT0xfSERSKHJvdywgc2l6ZSwgTlVMTCwgcmlnaHQsIDIwLCBzaXplKQotCUNPTF9IRFIocm93 LCBpbmQsIE5VTEwsIHJpZ2h0LCA0LCB1bnNpZ25lZCkKLQlDT0xfSERSKHJvdywgYWxsb2NhdGVk LCBOVUxMLCByaWdodCwgMTMsIHNpemUpCi0JQ09MX0hEUihyb3csIG5tYWxsb2MsIE5VTEwsIHJp Z2h0LCAxMywgdWludDY0KQotCUNPTF9IRFIocm93LCBubWFsbG9jX3BzLCAiKCMvc2VjKSIsIHJp Z2h0LCA4LCB1aW50NjQpCi0JQ09MX0hEUihyb3csIG5kYWxsb2MsIE5VTEwsIHJpZ2h0LCAxMywg dWludDY0KQotCUNPTF9IRFIocm93LCBuZGFsbG9jX3BzLCAiKCMvc2VjKSIsIHJpZ2h0LCA4LCB1 aW50NjQpCi0JQ09MX0hEUihyb3csIG5yZXF1ZXN0cywgTlVMTCwgcmlnaHQsIDEzLCB1aW50NjQp Ci0JQ09MX0hEUihyb3csIG5yZXF1ZXN0c19wcywgIigjL3NlYykiLCByaWdodCwgOCwgdWludDY0 KQotCUNPTF9IRFJfREVDTEFSRShwcm9mX2xpdmVfcmVxdWVzdGVkKQotCUNPTF9IRFJfREVDTEFS RShwcm9mX2xpdmVfY291bnQpCi0JQ09MX0hEUl9ERUNMQVJFKHByb2ZfYWNjdW1fcmVxdWVzdGVk KQotCUNPTF9IRFJfREVDTEFSRShwcm9mX2FjY3VtX2NvdW50KQotCWlmIChwcm9mX3N0YXRzX29u KSB7Ci0JCUNPTF9IRFJfSU5JVChyb3csIHByb2ZfbGl2ZV9yZXF1ZXN0ZWQsIE5VTEwsIHJpZ2h0 LCAyMSwgdWludDY0KQotCQlDT0xfSERSX0lOSVQocm93LCBwcm9mX2xpdmVfY291bnQsIE5VTEws IHJpZ2h0LCAxNywgdWludDY0KQotCQlDT0xfSERSX0lOSVQocm93LCBwcm9mX2FjY3VtX3JlcXVl c3RlZCwgTlVMTCwgcmlnaHQsIDIxLCB1aW50NjQpCi0JCUNPTF9IRFJfSU5JVChyb3csIHByb2Zf YWNjdW1fY291bnQsIE5VTEwsIHJpZ2h0LCAxNywgdWludDY0KQotCX0KLQlDT0xfSERSKHJvdywg Y3VybGV4dGVudHMsIE5VTEwsIHJpZ2h0LCAxMywgc2l6ZSkKLQotCS8qIEFzIHdpdGggYmlucywg d2UgbGFiZWwgdGhlIGxhcmdlIGV4dGVudHMgdGFibGUuICovCi0JaGVhZGVyX3NpemUud2lkdGgg LT0gNjsKLQllbWl0dGVyX3RhYmxlX3ByaW50ZihlbWl0dGVyLCAibGFyZ2U6Iik7Ci0JZW1pdHRl cl90YWJsZV9yb3coZW1pdHRlciwgJmhlYWRlcl9yb3cpOwotCWVtaXR0ZXJfanNvbl9hcnJheV9r dl9iZWdpbihlbWl0dGVyLCAibGV4dGVudHMiKTsKLQotCXNpemVfdCBzdGF0c19hcmVuYXNfbWli W0NUTF9NQVhfREVQVEhdOwotCUNUTF9MRUFGX1BSRVBBUkUoc3RhdHNfYXJlbmFzX21pYiwgMCwg InN0YXRzLmFyZW5hcyIpOwotCXN0YXRzX2FyZW5hc19taWJbMl0gPSBpOwotCUNUTF9MRUFGX1BS RVBBUkUoc3RhdHNfYXJlbmFzX21pYiwgMywgImxleHRlbnRzIik7Ci0KLQlzaXplX3QgYXJlbmFz X2xleHRlbnRfbWliW0NUTF9NQVhfREVQVEhdOwotCUNUTF9MRUFGX1BSRVBBUkUoYXJlbmFzX2xl eHRlbnRfbWliLCAwLCAiYXJlbmFzLmxleHRlbnQiKTsKLQotCXNpemVfdCBwcm9mX3N0YXRzX21p YltDVExfTUFYX0RFUFRIXTsKLQlpZiAocHJvZl9zdGF0c19vbikgewotCQlDVExfTEVBRl9QUkVQ QVJFKHByb2Zfc3RhdHNfbWliLCAwLCAicHJvZi5zdGF0cy5sZXh0ZW50cyIpOwotCX0KLQotCWZv ciAoaiA9IDAsIGluX2dhcCA9IGZhbHNlOyBqIDwgbmxleHRlbnRzOyBqKyspIHsKLQkJdWludDY0 X3Qgbm1hbGxvYywgbmRhbGxvYywgbnJlcXVlc3RzOwotCQlzaXplX3QgbGV4dGVudF9zaXplLCBj dXJsZXh0ZW50czsKLQkJcHJvZl9zdGF0c190IHByb2ZfbGl2ZTsKLQkJcHJvZl9zdGF0c190IHBy b2ZfYWNjdW07Ci0KLQkJc3RhdHNfYXJlbmFzX21pYls0XSA9IGo7Ci0JCWFyZW5hc19sZXh0ZW50 X21pYlsyXSA9IGo7Ci0KLQkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNSwgIm5tYWxsb2Mi LCAmbm1hbGxvYywgdWludDY0X3QpOwotCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAi bmRhbGxvYyIsICZuZGFsbG9jLCB1aW50NjRfdCk7Ci0JCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19t aWIsIDUsICJucmVxdWVzdHMiLCAmbnJlcXVlc3RzLAotCQkgICAgdWludDY0X3QpOwotCi0JCWlu X2dhcF9wcmV2ID0gaW5fZ2FwOwotCQlpbl9nYXAgPSAobnJlcXVlc3RzID09IDApOwotCi0JCWlm IChpbl9nYXBfcHJldiAmJiAhaW5fZ2FwKSB7Ci0JCQllbWl0dGVyX3RhYmxlX3ByaW50ZihlbWl0 dGVyLAotCQkJICAgICIgICAgICAgICAgICAgICAgICAgICAtLS1cbiIpOwotCQl9Ci0KLQkJQ1RM X0xFQUYoYXJlbmFzX2xleHRlbnRfbWliLCAzLCAic2l6ZSIsICZsZXh0ZW50X3NpemUsIHNpemVf dCk7Ci0JCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJjdXJsZXh0ZW50cyIsICZjdXJs ZXh0ZW50cywKLQkJICAgIHNpemVfdCk7Ci0KLQkJaWYgKHByb2Zfc3RhdHNfb24pIHsKLQkJCXBy b2Zfc3RhdHNfbWliWzNdID0gajsKLQkJCUNUTF9MRUFGKHByb2Zfc3RhdHNfbWliLCA0LCAibGl2 ZSIsICZwcm9mX2xpdmUsCi0JCQkgICAgcHJvZl9zdGF0c190KTsKLQkJCUNUTF9MRUFGKHByb2Zf c3RhdHNfbWliLCA0LCAiYWNjdW0iLCAmcHJvZl9hY2N1bSwKLQkJCSAgICBwcm9mX3N0YXRzX3Qp OwotCQl9Ci0KLQkJZW1pdHRlcl9qc29uX29iamVjdF9iZWdpbihlbWl0dGVyKTsKLQkJaWYgKHBy b2Zfc3RhdHNfb24pIHsKLQkJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAicHJvZl9saXZlX3Jl cXVlc3RlZCIsCi0JCQkgICAgZW1pdHRlcl90eXBlX3VpbnQ2NCwgJnByb2ZfbGl2ZS5yZXFfc3Vt KTsKLQkJCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAicHJvZl9saXZlX2NvdW50IiwKLQkJCSAg ICBlbWl0dGVyX3R5cGVfdWludDY0LCAmcHJvZl9saXZlLmNvdW50KTsKLQkJCWVtaXR0ZXJfanNv bl9rdihlbWl0dGVyLCAicHJvZl9hY2N1bV9yZXF1ZXN0ZWQiLAotCQkJICAgIGVtaXR0ZXJfdHlw ZV91aW50NjQsICZwcm9mX2FjY3VtLnJlcV9zdW0pOwotCQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0 ZXIsICJwcm9mX2FjY3VtX2NvdW50IiwKLQkJCSAgICBlbWl0dGVyX3R5cGVfdWludDY0LCAmcHJv Zl9hY2N1bS5jb3VudCk7Ci0JCX0KLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJjdXJsZXh0 ZW50cyIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCQkgICAgJmN1cmxleHRlbnRzKTsKLQkJZW1pdHRl cl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7Ci0KLQkJY29sX3NpemUuc2l6ZV92YWwgPSBsZXh0 ZW50X3NpemU7Ci0JCWNvbF9pbmQudW5zaWduZWRfdmFsID0gbmJpbnMgKyBqOwotCQljb2xfYWxs b2NhdGVkLnNpemVfdmFsID0gY3VybGV4dGVudHMgKiBsZXh0ZW50X3NpemU7Ci0JCWNvbF9ubWFs bG9jLnVpbnQ2NF92YWwgPSBubWFsbG9jOwotCQljb2xfbm1hbGxvY19wcy51aW50NjRfdmFsID0g cmF0ZV9wZXJfc2Vjb25kKG5tYWxsb2MsIHVwdGltZSk7Ci0JCWNvbF9uZGFsbG9jLnVpbnQ2NF92 YWwgPSBuZGFsbG9jOwotCQljb2xfbmRhbGxvY19wcy51aW50NjRfdmFsID0gcmF0ZV9wZXJfc2Vj b25kKG5kYWxsb2MsIHVwdGltZSk7Ci0JCWNvbF9ucmVxdWVzdHMudWludDY0X3ZhbCA9IG5yZXF1 ZXN0czsKLQkJY29sX25yZXF1ZXN0c19wcy51aW50NjRfdmFsID0gcmF0ZV9wZXJfc2Vjb25kKG5y ZXF1ZXN0cywgdXB0aW1lKTsKLQkJaWYgKHByb2Zfc3RhdHNfb24pIHsKLQkJCWNvbF9wcm9mX2xp dmVfcmVxdWVzdGVkLnVpbnQ2NF92YWwgPSBwcm9mX2xpdmUucmVxX3N1bTsKLQkJCWNvbF9wcm9m X2xpdmVfY291bnQudWludDY0X3ZhbCA9IHByb2ZfbGl2ZS5jb3VudDsKLQkJCWNvbF9wcm9mX2Fj Y3VtX3JlcXVlc3RlZC51aW50NjRfdmFsID0KLQkJCSAgICBwcm9mX2FjY3VtLnJlcV9zdW07Ci0J CQljb2xfcHJvZl9hY2N1bV9jb3VudC51aW50NjRfdmFsID0gcHJvZl9hY2N1bS5jb3VudDsKLQkJ fQotCQljb2xfY3VybGV4dGVudHMuc2l6ZV92YWwgPSBjdXJsZXh0ZW50czsKLQotCQlpZiAoIWlu X2dhcCkgewotCQkJZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7Ci0JCX0KLQl9Ci0J ZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgImxleHRlbnRzIi4gKi8K LQlpZiAoaW5fZ2FwKSB7Ci0JCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsICIgICAgICAg ICAgICAgICAgICAgICAtLS1cbiIpOwotCX0KLX0KLQotSkVNQUxMT0NfQ09MRAotc3RhdGljIHZv aWQKLXN0YXRzX2FyZW5hX2V4dGVudHNfcHJpbnQoZW1pdHRlcl90ICplbWl0dGVyLCB1bnNpZ25l ZCBpKSB7Ci0JdW5zaWduZWQgajsKLQlib29sIGluX2dhcCwgaW5fZ2FwX3ByZXY7Ci0JZW1pdHRl cl9yb3dfdCBoZWFkZXJfcm93OwotCWVtaXR0ZXJfcm93X2luaXQoJmhlYWRlcl9yb3cpOwotCWVt aXR0ZXJfcm93X3Qgcm93OwotCWVtaXR0ZXJfcm93X2luaXQoJnJvdyk7Ci0KLQlDT0xfSERSKHJv dywgc2l6ZSwgTlVMTCwgcmlnaHQsIDIwLCBzaXplKQotCUNPTF9IRFIocm93LCBpbmQsIE5VTEws IHJpZ2h0LCA0LCB1bnNpZ25lZCkKLQlDT0xfSERSKHJvdywgbmRpcnR5LCBOVUxMLCByaWdodCwg MTMsIHNpemUpCi0JQ09MX0hEUihyb3csIGRpcnR5LCBOVUxMLCByaWdodCwgMTMsIHNpemUpCi0J Q09MX0hEUihyb3csIG5tdXp6eSwgTlVMTCwgcmlnaHQsIDEzLCBzaXplKQotCUNPTF9IRFIocm93 LCBtdXp6eSwgTlVMTCwgcmlnaHQsIDEzLCBzaXplKQotCUNPTF9IRFIocm93LCBucmV0YWluZWQs IE5VTEwsIHJpZ2h0LCAxMywgc2l6ZSkKLQlDT0xfSERSKHJvdywgcmV0YWluZWQsIE5VTEwsIHJp Z2h0LCAxMywgc2l6ZSkKLQlDT0xfSERSKHJvdywgbnRvdGFsLCBOVUxMLCByaWdodCwgMTMsIHNp emUpCi0JQ09MX0hEUihyb3csIHRvdGFsLCBOVUxMLCByaWdodCwgMTMsIHNpemUpCi0KLQkvKiBM YWJlbCB0aGlzIHNlY3Rpb24uICovCi0JaGVhZGVyX3NpemUud2lkdGggLT0gODsKLQllbWl0dGVy X3RhYmxlX3ByaW50ZihlbWl0dGVyLCAiZXh0ZW50czoiKTsKLQllbWl0dGVyX3RhYmxlX3Jvdyhl bWl0dGVyLCAmaGVhZGVyX3Jvdyk7Ci0JZW1pdHRlcl9qc29uX2FycmF5X2t2X2JlZ2luKGVtaXR0 ZXIsICJleHRlbnRzIik7Ci0KLQlzaXplX3Qgc3RhdHNfYXJlbmFzX21pYltDVExfTUFYX0RFUFRI XTsKLQlDVExfTEVBRl9QUkVQQVJFKHN0YXRzX2FyZW5hc19taWIsIDAsICJzdGF0cy5hcmVuYXMi KTsKLQlzdGF0c19hcmVuYXNfbWliWzJdID0gaTsKLQlDVExfTEVBRl9QUkVQQVJFKHN0YXRzX2Fy ZW5hc19taWIsIDMsICJleHRlbnRzIik7Ci0KLQlpbl9nYXAgPSBmYWxzZTsKLQlmb3IgKGogPSAw OyBqIDwgU0NfTlBTSVpFUzsgaisrKSB7Ci0JCXNpemVfdCBuZGlydHksIG5tdXp6eSwgbnJldGFp bmVkLCB0b3RhbCwgZGlydHlfYnl0ZXMsCi0JCSAgICBtdXp6eV9ieXRlcywgcmV0YWluZWRfYnl0 ZXMsIHRvdGFsX2J5dGVzOwotCQlzdGF0c19hcmVuYXNfbWliWzRdID0gajsKLQotCQlDVExfTEVB RihzdGF0c19hcmVuYXNfbWliLCA1LCAibmRpcnR5IiwgJm5kaXJ0eSwgc2l6ZV90KTsKLQkJQ1RM X0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNSwgIm5tdXp6eSIsICZubXV6enksIHNpemVfdCk7Ci0J CUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDUsICJucmV0YWluZWQiLCAmbnJldGFpbmVkLCBz aXplX3QpOwotCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAiZGlydHlfYnl0ZXMiLCAm ZGlydHlfYnl0ZXMsCi0JCSAgICBzaXplX3QpOwotCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWli LCA1LCAibXV6enlfYnl0ZXMiLCAmbXV6enlfYnl0ZXMsCi0JCSAgICBzaXplX3QpOwotCQlDVExf TEVBRihzdGF0c19hcmVuYXNfbWliLCA1LCAicmV0YWluZWRfYnl0ZXMiLAotCQkgICAgJnJldGFp bmVkX2J5dGVzLCBzaXplX3QpOwotCi0JCXRvdGFsID0gbmRpcnR5ICsgbm11enp5ICsgbnJldGFp bmVkOwotCQl0b3RhbF9ieXRlcyA9IGRpcnR5X2J5dGVzICsgbXV6enlfYnl0ZXMgKyByZXRhaW5l ZF9ieXRlczsKLQotCQlpbl9nYXBfcHJldiA9IGluX2dhcDsKLQkJaW5fZ2FwID0gKHRvdGFsID09 IDApOwotCi0JCWlmIChpbl9nYXBfcHJldiAmJiAhaW5fZ2FwKSB7Ci0JCQllbWl0dGVyX3RhYmxl X3ByaW50ZihlbWl0dGVyLAotCQkJICAgICIgICAgICAgICAgICAgICAgICAgICAtLS1cbiIpOwot CQl9Ci0KLQkJZW1pdHRlcl9qc29uX29iamVjdF9iZWdpbihlbWl0dGVyKTsKLQkJZW1pdHRlcl9q c29uX2t2KGVtaXR0ZXIsICJuZGlydHkiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJm5kaXJ0eSk7Ci0J CWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibm11enp5IiwgZW1pdHRlcl90eXBlX3NpemUsICZu bXV6enkpOwotCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5yZXRhaW5lZCIsIGVtaXR0ZXJf dHlwZV9zaXplLAotCQkgICAgJm5yZXRhaW5lZCk7Ci0KLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0 ZXIsICJkaXJ0eV9ieXRlcyIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCQkgICAgJmRpcnR5X2J5dGVz KTsKLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJtdXp6eV9ieXRlcyIsIGVtaXR0ZXJfdHlw ZV9zaXplLAotCQkgICAgJm11enp5X2J5dGVzKTsKLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIs ICJyZXRhaW5lZF9ieXRlcyIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCQkgICAgJnJldGFpbmVkX2J5 dGVzKTsKLQkJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7Ci0KLQkJY29sX3NpemUu c2l6ZV92YWwgPSBzel9waW5kMnN6KGopOwotCQljb2xfaW5kLnNpemVfdmFsID0gajsKLQkJY29s X25kaXJ0eS5zaXplX3ZhbCA9IG5kaXJ0eTsKLQkJY29sX2RpcnR5LnNpemVfdmFsID0gZGlydHlf Ynl0ZXM7Ci0JCWNvbF9ubXV6enkuc2l6ZV92YWwgPSBubXV6enk7Ci0JCWNvbF9tdXp6eS5zaXpl X3ZhbCA9IG11enp5X2J5dGVzOwotCQljb2xfbnJldGFpbmVkLnNpemVfdmFsID0gbnJldGFpbmVk OwotCQljb2xfcmV0YWluZWQuc2l6ZV92YWwgPSByZXRhaW5lZF9ieXRlczsKLQkJY29sX250b3Rh bC5zaXplX3ZhbCA9IHRvdGFsOwotCQljb2xfdG90YWwuc2l6ZV92YWwgPSB0b3RhbF9ieXRlczsK LQotCQlpZiAoIWluX2dhcCkgewotCQkJZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7 Ci0JCX0KLQl9Ci0JZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgImV4 dGVudHMiLiAqLwotCWlmIChpbl9nYXApIHsKLQkJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRl ciwgIiAgICAgICAgICAgICAgICAgICAgIC0tLVxuIik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAot c3RhdHNfYXJlbmFfaHBhX3NoYXJkX3ByaW50KGVtaXR0ZXJfdCAqZW1pdHRlciwgdW5zaWduZWQg aSwgdWludDY0X3QgdXB0aW1lKSB7Ci0JZW1pdHRlcl9yb3dfdCBoZWFkZXJfcm93OwotCWVtaXR0 ZXJfcm93X2luaXQoJmhlYWRlcl9yb3cpOwotCWVtaXR0ZXJfcm93X3Qgcm93OwotCWVtaXR0ZXJf cm93X2luaXQoJnJvdyk7Ci0KLQl1aW50NjRfdCBucHVyZ2VfcGFzc2VzOwotCXVpbnQ2NF90IG5w dXJnZXM7Ci0JdWludDY0X3Qgbmh1Z2lmaWVzOwotCXVpbnQ2NF90IG5kZWh1Z2lmaWVzOwotCi0J Q1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLm5wdXJnZV9wYXNzZXMiLAotCSAg ICBpLCAmbnB1cmdlX3Bhc3NlcywgdWludDY0X3QpOwotCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5h cy4wLmhwYV9zaGFyZC5ucHVyZ2VzIiwKLQkgICAgaSwgJm5wdXJnZXMsIHVpbnQ2NF90KTsKLQlD VExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQubmh1Z2lmaWVzIiwKLQkgICAgaSwg Jm5odWdpZmllcywgdWludDY0X3QpOwotCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4wLmhwYV9z aGFyZC5uZGVodWdpZmllcyIsCi0JICAgIGksICZuZGVodWdpZmllcywgdWludDY0X3QpOwotCi0J c2l6ZV90IG5wYWdlc2xhYnNfaHVnZTsKLQlzaXplX3QgbmFjdGl2ZV9odWdlOwotCXNpemVfdCBu ZGlydHlfaHVnZTsKLQotCXNpemVfdCBucGFnZXNsYWJzX25vbmh1Z2U7Ci0Jc2l6ZV90IG5hY3Rp dmVfbm9uaHVnZTsKLQlzaXplX3QgbmRpcnR5X25vbmh1Z2U7Ci0Jc2l6ZV90IG5yZXRhaW5lZF9u b25odWdlOwotCi0Jc2l6ZV90IHNlY19ieXRlczsKLQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMu MC5ocGFfc2VjX2J5dGVzIiwgaSwgJnNlY19ieXRlcywgc2l6ZV90KTsKLQllbWl0dGVyX2t2KGVt aXR0ZXIsICJzZWNfYnl0ZXMiLCAiQnl0ZXMgaW4gc21hbGwgZXh0ZW50IGNhY2hlIiwKLQkgICAg ZW1pdHRlcl90eXBlX3NpemUsICZzZWNfYnl0ZXMpOwotCi0JLyogRmlyc3QsIGdsb2JhbCBzdGF0 cy4gKi8KLQllbWl0dGVyX3RhYmxlX3ByaW50ZihlbWl0dGVyLAotCSAgICAiSFBBIHNoYXJkIHN0 YXRzOlxuIgotCSAgICAiICBQdXJnZSBwYXNzZXM6ICUiIEZNVHU2NCAiICglIiBGTVR1NjQgIiAv IHNlYylcbiIKLQkgICAgIiAgUHVyZ2VzOiAlIiBGTVR1NjQgIiAoJSIgRk1UdTY0ICIgLyBzZWMp XG4iCi0JICAgICIgIEh1Z2VpZmllczogJSIgRk1UdTY0ICIgKCUiIEZNVHU2NCAiIC8gc2VjKVxu IgotCSAgICAiICBEZWh1Z2lmaWVzOiAlIiBGTVR1NjQgIiAoJSIgRk1UdTY0ICIgLyBzZWMpXG4i Ci0JICAgICJcbiIsCi0JICAgIG5wdXJnZV9wYXNzZXMsIHJhdGVfcGVyX3NlY29uZChucHVyZ2Vf cGFzc2VzLCB1cHRpbWUpLAotCSAgICBucHVyZ2VzLCByYXRlX3Blcl9zZWNvbmQobnB1cmdlcywg dXB0aW1lKSwKLQkgICAgbmh1Z2lmaWVzLCByYXRlX3Blcl9zZWNvbmQobmh1Z2lmaWVzLCB1cHRp bWUpLAotCSAgICBuZGVodWdpZmllcywgcmF0ZV9wZXJfc2Vjb25kKG5kZWh1Z2lmaWVzLCB1cHRp bWUpKTsKLQotCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgImhwYV9zaGFy ZCIpOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibnB1cmdlX3Bhc3NlcyIsIGVtaXR0ZXJf dHlwZV91aW50NjQsCi0JICAgICZucHVyZ2VfcGFzc2VzKTsKLQllbWl0dGVyX2pzb25fa3YoZW1p dHRlciwgIm5wdXJnZXMiLCBlbWl0dGVyX3R5cGVfdWludDY0LAotCSAgICAmbnB1cmdlcyk7Ci0J ZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJuaHVnaWZpZXMiLCBlbWl0dGVyX3R5cGVfdWludDY0 LAotCSAgICAmbmh1Z2lmaWVzKTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5kZWh1Z2lm aWVzIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKLQkgICAgJm5kZWh1Z2lmaWVzKTsKLQotCS8qIE5l eHQsIGZ1bGwgc2xhYiBzdGF0cy4gKi8KLQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFf c2hhcmQuZnVsbF9zbGFicy5ucGFnZXNsYWJzX2h1Z2UiLAotCSAgICBpLCAmbnBhZ2VzbGFic19o dWdlLCBzaXplX3QpOwotCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4wLmhwYV9zaGFyZC5mdWxs X3NsYWJzLm5hY3RpdmVfaHVnZSIsCi0JICAgIGksICZuYWN0aXZlX2h1Z2UsIHNpemVfdCk7Ci0J Q1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBhX3NoYXJkLmZ1bGxfc2xhYnMubmRpcnR5X2h1 Z2UiLAotCSAgICBpLCAmbmRpcnR5X2h1Z2UsIHNpemVfdCk7Ci0KLQlDVExfTTJfR0VUKCJzdGF0 cy5hcmVuYXMuMC5ocGFfc2hhcmQuZnVsbF9zbGFicy5ucGFnZXNsYWJzX25vbmh1Z2UiLAotCSAg ICBpLCAmbnBhZ2VzbGFic19ub25odWdlLCBzaXplX3QpOwotCUNUTF9NMl9HRVQoInN0YXRzLmFy ZW5hcy4wLmhwYV9zaGFyZC5mdWxsX3NsYWJzLm5hY3RpdmVfbm9uaHVnZSIsCi0JICAgIGksICZu YWN0aXZlX25vbmh1Z2UsIHNpemVfdCk7Ci0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAuaHBh X3NoYXJkLmZ1bGxfc2xhYnMubmRpcnR5X25vbmh1Z2UiLAotCSAgICBpLCAmbmRpcnR5X25vbmh1 Z2UsIHNpemVfdCk7Ci0JbnJldGFpbmVkX25vbmh1Z2UgPSBucGFnZXNsYWJzX25vbmh1Z2UgKiBI VUdFUEFHRV9QQUdFUwotCSAgICAtIG5hY3RpdmVfbm9uaHVnZSAtIG5kaXJ0eV9ub25odWdlOwot Ci0JZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwKLQkgICAgIiAgSW4gZnVsbCBzbGFiczpc biIKLQkgICAgIiAgICAgIG5wYWdlc2xhYnM6ICV6dSBodWdlLCAlenUgbm9uaHVnZVxuIgotCSAg ICAiICAgICAgbmFjdGl2ZTogJXp1IGh1Z2UsICV6dSBub25odWdlIFxuIgotCSAgICAiICAgICAg bmRpcnR5OiAlenUgaHVnZSwgJXp1IG5vbmh1Z2UgXG4iCi0JICAgICIgICAgICBucmV0YWluZWQ6 IDAgaHVnZSwgJXp1IG5vbmh1Z2UgXG4iLAotCSAgICBucGFnZXNsYWJzX2h1Z2UsIG5wYWdlc2xh YnNfbm9uaHVnZSwKLQkgICAgbmFjdGl2ZV9odWdlLCBuYWN0aXZlX25vbmh1Z2UsCi0JICAgIG5k aXJ0eV9odWdlLCBuZGlydHlfbm9uaHVnZSwKLQkgICAgbnJldGFpbmVkX25vbmh1Z2UpOwotCi0J ZW1pdHRlcl9qc29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVyLCAiZnVsbF9zbGFicyIpOwotCWVt aXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibnBhZ2VzbGFic19odWdlIiwgZW1pdHRlcl90eXBlX3Np emUsCi0JICAgICZucGFnZXNsYWJzX2h1Z2UpOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi bmFjdGl2ZV9odWdlIiwgZW1pdHRlcl90eXBlX3NpemUsCi0JICAgICZuYWN0aXZlX2h1Z2UpOwot CWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibmFjdGl2ZV9odWdlIiwgZW1pdHRlcl90eXBlX3Np emUsCi0JICAgICZuYWN0aXZlX2h1Z2UpOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibnBh Z2VzbGFic19ub25odWdlIiwgZW1pdHRlcl90eXBlX3NpemUsCi0JICAgICZucGFnZXNsYWJzX25v bmh1Z2UpOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibmFjdGl2ZV9ub25odWdlIiwgZW1p dHRlcl90eXBlX3NpemUsCi0JICAgICZuYWN0aXZlX25vbmh1Z2UpOwotCWVtaXR0ZXJfanNvbl9r dihlbWl0dGVyLCAibmRpcnR5X25vbmh1Z2UiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKLQkgICAgJm5k aXJ0eV9ub25odWdlKTsKLQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsgLyogRW5k ICJmdWxsX3NsYWJzIiAqLwotCi0JLyogTmV4dCwgZW1wdHkgc2xhYiBzdGF0cy4gKi8KLQlDVExf TTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQuZW1wdHlfc2xhYnMubnBhZ2VzbGFic19o dWdlIiwKLQkgICAgaSwgJm5wYWdlc2xhYnNfaHVnZSwgc2l6ZV90KTsKLQlDVExfTTJfR0VUKCJz dGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQuZW1wdHlfc2xhYnMubmFjdGl2ZV9odWdlIiwKLQkgICAg aSwgJm5hY3RpdmVfaHVnZSwgc2l6ZV90KTsKLQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5o cGFfc2hhcmQuZW1wdHlfc2xhYnMubmRpcnR5X2h1Z2UiLAotCSAgICBpLCAmbmRpcnR5X2h1Z2Us IHNpemVfdCk7Ci0KLQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQuZW1wdHlf c2xhYnMubnBhZ2VzbGFic19ub25odWdlIiwKLQkgICAgaSwgJm5wYWdlc2xhYnNfbm9uaHVnZSwg c2l6ZV90KTsKLQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQuZW1wdHlfc2xh YnMubmFjdGl2ZV9ub25odWdlIiwKLQkgICAgaSwgJm5hY3RpdmVfbm9uaHVnZSwgc2l6ZV90KTsK LQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5ocGFfc2hhcmQuZW1wdHlfc2xhYnMubmRpcnR5 X25vbmh1Z2UiLAotCSAgICBpLCAmbmRpcnR5X25vbmh1Z2UsIHNpemVfdCk7Ci0JbnJldGFpbmVk X25vbmh1Z2UgPSBucGFnZXNsYWJzX25vbmh1Z2UgKiBIVUdFUEFHRV9QQUdFUwotCSAgICAtIG5h Y3RpdmVfbm9uaHVnZSAtIG5kaXJ0eV9ub25odWdlOwotCi0JZW1pdHRlcl90YWJsZV9wcmludGYo ZW1pdHRlciwKLQkgICAgIiAgSW4gZW1wdHkgc2xhYnM6XG4iCi0JICAgICIgICAgICBucGFnZXNs YWJzOiAlenUgaHVnZSwgJXp1IG5vbmh1Z2VcbiIKLQkgICAgIiAgICAgIG5hY3RpdmU6ICV6dSBo dWdlLCAlenUgbm9uaHVnZSBcbiIKLQkgICAgIiAgICAgIG5kaXJ0eTogJXp1IGh1Z2UsICV6dSBu b25odWdlIFxuIgotCSAgICAiICAgICAgbnJldGFpbmVkOiAwIGh1Z2UsICV6dSBub25odWdlIFxu IgotCSAgICAiXG4iLAotCSAgICBucGFnZXNsYWJzX2h1Z2UsIG5wYWdlc2xhYnNfbm9uaHVnZSwK LQkgICAgbmFjdGl2ZV9odWdlLCBuYWN0aXZlX25vbmh1Z2UsCi0JICAgIG5kaXJ0eV9odWdlLCBu ZGlydHlfbm9uaHVnZSwKLQkgICAgbnJldGFpbmVkX25vbmh1Z2UpOwotCi0JZW1pdHRlcl9qc29u X29iamVjdF9rdl9iZWdpbihlbWl0dGVyLCAiZW1wdHlfc2xhYnMiKTsKLQllbWl0dGVyX2pzb25f a3YoZW1pdHRlciwgIm5wYWdlc2xhYnNfaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCSAgICAm bnBhZ2VzbGFic19odWdlKTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5hY3RpdmVfaHVn ZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCSAgICAmbmFjdGl2ZV9odWdlKTsKLQllbWl0dGVyX2pz b25fa3YoZW1pdHRlciwgIm5hY3RpdmVfaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCSAgICAm bmFjdGl2ZV9odWdlKTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5wYWdlc2xhYnNfbm9u aHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCSAgICAmbnBhZ2VzbGFic19ub25odWdlKTsKLQll bWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5hY3RpdmVfbm9uaHVnZSIsIGVtaXR0ZXJfdHlwZV9z aXplLAotCSAgICAmbmFjdGl2ZV9ub25odWdlKTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwg Im5kaXJ0eV9ub25odWdlIiwgZW1pdHRlcl90eXBlX3NpemUsCi0JICAgICZuZGlydHlfbm9uaHVn ZSk7Ci0JZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7IC8qIEVuZCAiZW1wdHlfc2xh YnMiICovCi0KLQlDT0xfSERSKHJvdywgc2l6ZSwgTlVMTCwgcmlnaHQsIDIwLCBzaXplKQotCUNP TF9IRFIocm93LCBpbmQsIE5VTEwsIHJpZ2h0LCA0LCB1bnNpZ25lZCkKLQlDT0xfSERSKHJvdywg bnBhZ2VzbGFic19odWdlLCBOVUxMLCByaWdodCwgMTYsIHNpemUpCi0JQ09MX0hEUihyb3csIG5h Y3RpdmVfaHVnZSwgTlVMTCwgcmlnaHQsIDE2LCBzaXplKQotCUNPTF9IRFIocm93LCBuZGlydHlf aHVnZSwgTlVMTCwgcmlnaHQsIDE2LCBzaXplKQotCUNPTF9IRFIocm93LCBucGFnZXNsYWJzX25v bmh1Z2UsIE5VTEwsIHJpZ2h0LCAyMCwgc2l6ZSkKLQlDT0xfSERSKHJvdywgbmFjdGl2ZV9ub25o dWdlLCBOVUxMLCByaWdodCwgMjAsIHNpemUpCi0JQ09MX0hEUihyb3csIG5kaXJ0eV9ub25odWdl LCBOVUxMLCByaWdodCwgMjAsIHNpemUpCi0JQ09MX0hEUihyb3csIG5yZXRhaW5lZF9ub25odWdl LCBOVUxMLCByaWdodCwgMjAsIHNpemUpCi0KLQlzaXplX3Qgc3RhdHNfYXJlbmFzX21pYltDVExf TUFYX0RFUFRIXTsKLQlDVExfTEVBRl9QUkVQQVJFKHN0YXRzX2FyZW5hc19taWIsIDAsICJzdGF0 cy5hcmVuYXMiKTsKLQlzdGF0c19hcmVuYXNfbWliWzJdID0gaTsKLQlDVExfTEVBRl9QUkVQQVJF KHN0YXRzX2FyZW5hc19taWIsIDMsICJocGFfc2hhcmQubm9uZnVsbF9zbGFicyIpOwotCi0JZW1p dHRlcl90YWJsZV9yb3coZW1pdHRlciwgJmhlYWRlcl9yb3cpOwotCWVtaXR0ZXJfanNvbl9hcnJh eV9rdl9iZWdpbihlbWl0dGVyLCAibm9uZnVsbF9zbGFicyIpOwotCWJvb2wgaW5fZ2FwID0gZmFs c2U7Ci0JZm9yIChwc3ppbmRfdCBqID0gMDsgaiA8IFBTU0VUX05QU0laRVMgJiYgaiA8IFNDX05Q U0laRVM7IGorKykgewotCQlzdGF0c19hcmVuYXNfbWliWzVdID0gajsKLQotCQlDVExfTEVBRihz dGF0c19hcmVuYXNfbWliLCA2LCAibnBhZ2VzbGFic19odWdlIiwKLQkJICAgICZucGFnZXNsYWJz X2h1Z2UsIHNpemVfdCk7Ci0JCUNUTF9MRUFGKHN0YXRzX2FyZW5hc19taWIsIDYsICJuYWN0aXZl X2h1Z2UiLAotCQkgICAgJm5hY3RpdmVfaHVnZSwgc2l6ZV90KTsKLQkJQ1RMX0xFQUYoc3RhdHNf YXJlbmFzX21pYiwgNiwgIm5kaXJ0eV9odWdlIiwKLQkJICAgICZuZGlydHlfaHVnZSwgc2l6ZV90 KTsKLQotCQlDVExfTEVBRihzdGF0c19hcmVuYXNfbWliLCA2LCAibnBhZ2VzbGFic19ub25odWdl IiwKLQkJICAgICZucGFnZXNsYWJzX25vbmh1Z2UsIHNpemVfdCk7Ci0JCUNUTF9MRUFGKHN0YXRz X2FyZW5hc19taWIsIDYsICJuYWN0aXZlX25vbmh1Z2UiLAotCQkgICAgJm5hY3RpdmVfbm9uaHVn ZSwgc2l6ZV90KTsKLQkJQ1RMX0xFQUYoc3RhdHNfYXJlbmFzX21pYiwgNiwgIm5kaXJ0eV9ub25o dWdlIiwKLQkJICAgICZuZGlydHlfbm9uaHVnZSwgc2l6ZV90KTsKLQkJbnJldGFpbmVkX25vbmh1 Z2UgPSBucGFnZXNsYWJzX25vbmh1Z2UgKiBIVUdFUEFHRV9QQUdFUwotCQkgICAgLSBuYWN0aXZl X25vbmh1Z2UgLSBuZGlydHlfbm9uaHVnZTsKLQotCQlib29sIGluX2dhcF9wcmV2ID0gaW5fZ2Fw OwotCQlpbl9nYXAgPSAobnBhZ2VzbGFic19odWdlID09IDAgJiYgbnBhZ2VzbGFic19ub25odWdl ID09IDApOwotCQlpZiAoaW5fZ2FwX3ByZXYgJiYgIWluX2dhcCkgewotCQkJZW1pdHRlcl90YWJs ZV9wcmludGYoZW1pdHRlciwKLQkJCSAgICAiICAgICAgICAgICAgICAgICAgICAgLS0tXG4iKTsK LQkJfQotCi0JCWNvbF9zaXplLnNpemVfdmFsID0gc3pfcGluZDJzeihqKTsKLQkJY29sX2luZC5z aXplX3ZhbCA9IGo7Ci0JCWNvbF9ucGFnZXNsYWJzX2h1Z2Uuc2l6ZV92YWwgPSBucGFnZXNsYWJz X2h1Z2U7Ci0JCWNvbF9uYWN0aXZlX2h1Z2Uuc2l6ZV92YWwgPSBuYWN0aXZlX2h1Z2U7Ci0JCWNv bF9uZGlydHlfaHVnZS5zaXplX3ZhbCA9IG5kaXJ0eV9odWdlOwotCQljb2xfbnBhZ2VzbGFic19u b25odWdlLnNpemVfdmFsID0gbnBhZ2VzbGFic19ub25odWdlOwotCQljb2xfbmFjdGl2ZV9ub25o dWdlLnNpemVfdmFsID0gbmFjdGl2ZV9ub25odWdlOwotCQljb2xfbmRpcnR5X25vbmh1Z2Uuc2l6 ZV92YWwgPSBuZGlydHlfbm9uaHVnZTsKLQkJY29sX25yZXRhaW5lZF9ub25odWdlLnNpemVfdmFs ID0gbnJldGFpbmVkX25vbmh1Z2U7Ci0JCWlmICghaW5fZ2FwKSB7Ci0JCQllbWl0dGVyX3RhYmxl X3JvdyhlbWl0dGVyLCAmcm93KTsKLQkJfQotCi0JCWVtaXR0ZXJfanNvbl9vYmplY3RfYmVnaW4o ZW1pdHRlcik7Ci0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibnBhZ2VzbGFic19odWdlIiwg ZW1pdHRlcl90eXBlX3NpemUsCi0JCSAgICAmbnBhZ2VzbGFic19odWdlKTsKLQkJZW1pdHRlcl9q c29uX2t2KGVtaXR0ZXIsICJuYWN0aXZlX2h1Z2UiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKLQkJICAg ICZuYWN0aXZlX2h1Z2UpOwotCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5kaXJ0eV9odWdl IiwgZW1pdHRlcl90eXBlX3NpemUsCi0JCSAgICAmbmRpcnR5X2h1Z2UpOwotCQllbWl0dGVyX2pz b25fa3YoZW1pdHRlciwgIm5wYWdlc2xhYnNfbm9uaHVnZSIsIGVtaXR0ZXJfdHlwZV9zaXplLAot CQkgICAgJm5wYWdlc2xhYnNfbm9uaHVnZSk7Ci0JCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi bmFjdGl2ZV9ub25odWdlIiwgZW1pdHRlcl90eXBlX3NpemUsCi0JCSAgICAmbmFjdGl2ZV9ub25o dWdlKTsKLQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJuZGlydHlfbm9uaHVnZSIsIGVtaXR0 ZXJfdHlwZV9zaXplLAotCQkgICAgJm5kaXJ0eV9ub25odWdlKTsKLQkJZW1pdHRlcl9qc29uX29i amVjdF9lbmQoZW1pdHRlcik7Ci0JfQotCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7 IC8qIEVuZCAibm9uZnVsbF9zbGFicyIgKi8KLQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0 dGVyKTsgLyogRW5kICJocGFfc2hhcmQiICovCi0JaWYgKGluX2dhcCkgewotCQllbWl0dGVyX3Rh YmxlX3ByaW50ZihlbWl0dGVyLCAiICAgICAgICAgICAgICAgICAgICAgLS0tXG4iKTsKLQl9Ci19 Ci0KLXN0YXRpYyB2b2lkCi1zdGF0c19hcmVuYV9tdXRleGVzX3ByaW50KGVtaXR0ZXJfdCAqZW1p dHRlciwgdW5zaWduZWQgYXJlbmFfaW5kLCB1aW50NjRfdCB1cHRpbWUpIHsKLQllbWl0dGVyX3Jv d190IHJvdzsKLQllbWl0dGVyX2NvbF90IGNvbF9uYW1lOwotCWVtaXR0ZXJfY29sX3QgY29sNjRb bXV0ZXhfcHJvZl9udW1fdWludDY0X3RfY291bnRlcnNdOwotCWVtaXR0ZXJfY29sX3QgY29sMzJb bXV0ZXhfcHJvZl9udW1fdWludDMyX3RfY291bnRlcnNdOwotCi0JZW1pdHRlcl9yb3dfaW5pdCgm cm93KTsKLQltdXRleF9zdGF0c19pbml0X2NvbHMoJnJvdywgIiIsICZjb2xfbmFtZSwgY29sNjQs IGNvbDMyKTsKLQotCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgIm11dGV4 ZXMiKTsKLQllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmcm93KTsKLQotCXNpemVfdCBzdGF0 c19hcmVuYXNfbWliW0NUTF9NQVhfREVQVEhdOwotCUNUTF9MRUFGX1BSRVBBUkUoc3RhdHNfYXJl bmFzX21pYiwgMCwgInN0YXRzLmFyZW5hcyIpOwotCXN0YXRzX2FyZW5hc19taWJbMl0gPSBhcmVu YV9pbmQ7Ci0JQ1RMX0xFQUZfUFJFUEFSRShzdGF0c19hcmVuYXNfbWliLCAzLCAibXV0ZXhlcyIp OwotCi0JZm9yIChtdXRleF9wcm9mX2FyZW5hX2luZF90IGkgPSAwOyBpIDwgbXV0ZXhfcHJvZl9u dW1fYXJlbmFfbXV0ZXhlczsKLQkgICAgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKm5hbWUgPSBhcmVu YV9tdXRleF9uYW1lc1tpXTsKLQkJZW1pdHRlcl9qc29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVy LCBuYW1lKTsKLQkJbXV0ZXhfc3RhdHNfcmVhZF9hcmVuYShzdGF0c19hcmVuYXNfbWliLCA0LCBu YW1lLCAmY29sX25hbWUsCi0JCSAgICBjb2w2NCwgY29sMzIsIHVwdGltZSk7Ci0JCW11dGV4X3N0 YXRzX2VtaXQoZW1pdHRlciwgJnJvdywgY29sNjQsIGNvbDMyKTsKLQkJZW1pdHRlcl9qc29uX29i amVjdF9lbmQoZW1pdHRlcik7IC8qIENsb3NlIHRoZSBtdXRleCBkaWN0LiAqLwotCX0KLQllbWl0 dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsgLyogRW5kICJtdXRleGVzIi4gKi8KLX0KLQot SkVNQUxMT0NfQ09MRAotc3RhdGljIHZvaWQKLXN0YXRzX2FyZW5hX3ByaW50KGVtaXR0ZXJfdCAq ZW1pdHRlciwgdW5zaWduZWQgaSwgYm9vbCBiaW5zLCBib29sIGxhcmdlLAotICAgIGJvb2wgbXV0 ZXgsIGJvb2wgZXh0ZW50cywgYm9vbCBocGEpIHsKLQl1bnNpZ25lZCBudGhyZWFkczsKLQljb25z dCBjaGFyICpkc3M7Ci0Jc3NpemVfdCBkaXJ0eV9kZWNheV9tcywgbXV6enlfZGVjYXlfbXM7Ci0J c2l6ZV90IHBhZ2UsIHBhY3RpdmUsIHBkaXJ0eSwgcG11enp5LCBtYXBwZWQsIHJldGFpbmVkOwot CXNpemVfdCBiYXNlLCBpbnRlcm5hbCwgcmVzaWRlbnQsIG1ldGFkYXRhX3RocCwgZXh0ZW50X2F2 YWlsOwotCXVpbnQ2NF90IGRpcnR5X25wdXJnZSwgZGlydHlfbm1hZHZpc2UsIGRpcnR5X3B1cmdl ZDsKLQl1aW50NjRfdCBtdXp6eV9ucHVyZ2UsIG11enp5X25tYWR2aXNlLCBtdXp6eV9wdXJnZWQ7 Ci0Jc2l6ZV90IHNtYWxsX2FsbG9jYXRlZDsKLQl1aW50NjRfdCBzbWFsbF9ubWFsbG9jLCBzbWFs bF9uZGFsbG9jLCBzbWFsbF9ucmVxdWVzdHMsIHNtYWxsX25maWxscywKLQkgICAgc21hbGxfbmZs dXNoZXM7Ci0Jc2l6ZV90IGxhcmdlX2FsbG9jYXRlZDsKLQl1aW50NjRfdCBsYXJnZV9ubWFsbG9j LCBsYXJnZV9uZGFsbG9jLCBsYXJnZV9ucmVxdWVzdHMsIGxhcmdlX25maWxscywKLQkgICAgbGFy Z2VfbmZsdXNoZXM7Ci0Jc2l6ZV90IHRjYWNoZV9ieXRlcywgdGNhY2hlX3N0YXNoZWRfYnl0ZXMs IGFiYW5kb25lZF92bTsKLQl1aW50NjRfdCB1cHRpbWU7Ci0KLQlDVExfR0VUKCJhcmVuYXMucGFn ZSIsICZwYWdlLCBzaXplX3QpOwotCi0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAubnRocmVh ZHMiLCBpLCAmbnRocmVhZHMsIHVuc2lnbmVkKTsKLQllbWl0dGVyX2t2KGVtaXR0ZXIsICJudGhy ZWFkcyIsICJhc3NpZ25lZCB0aHJlYWRzIiwKLQkgICAgZW1pdHRlcl90eXBlX3Vuc2lnbmVkLCAm bnRocmVhZHMpOwotCi0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAudXB0aW1lIiwgaSwgJnVw dGltZSwgdWludDY0X3QpOwotCWVtaXR0ZXJfa3YoZW1pdHRlciwgInVwdGltZV9ucyIsICJ1cHRp bWUiLCBlbWl0dGVyX3R5cGVfdWludDY0LAotCSAgICAmdXB0aW1lKTsKLQotCUNUTF9NMl9HRVQo InN0YXRzLmFyZW5hcy4wLmRzcyIsIGksICZkc3MsIGNvbnN0IGNoYXIgKik7Ci0JZW1pdHRlcl9r dihlbWl0dGVyLCAiZHNzIiwgImRzcyBhbGxvY2F0aW9uIHByZWNlZGVuY2UiLAotCSAgICBlbWl0 dGVyX3R5cGVfc3RyaW5nLCAmZHNzKTsKLQotCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4wLmRp cnR5X2RlY2F5X21zIiwgaSwgJmRpcnR5X2RlY2F5X21zLAotCSAgICBzc2l6ZV90KTsKLQlDVExf TTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5tdXp6eV9kZWNheV9tcyIsIGksICZtdXp6eV9kZWNheV9t cywKLQkgICAgc3NpemVfdCk7Ci0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAucGFjdGl2ZSIs IGksICZwYWN0aXZlLCBzaXplX3QpOwotCUNUTF9NMl9HRVQoInN0YXRzLmFyZW5hcy4wLnBkaXJ0 eSIsIGksICZwZGlydHksIHNpemVfdCk7Ci0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAucG11 enp5IiwgaSwgJnBtdXp6eSwgc2l6ZV90KTsKLQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5k aXJ0eV9ucHVyZ2UiLCBpLCAmZGlydHlfbnB1cmdlLCB1aW50NjRfdCk7Ci0JQ1RMX00yX0dFVCgi c3RhdHMuYXJlbmFzLjAuZGlydHlfbm1hZHZpc2UiLCBpLCAmZGlydHlfbm1hZHZpc2UsCi0JICAg IHVpbnQ2NF90KTsKLQlDVExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC5kaXJ0eV9wdXJnZWQiLCBp LCAmZGlydHlfcHVyZ2VkLCB1aW50NjRfdCk7Ci0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAu bXV6enlfbnB1cmdlIiwgaSwgJm11enp5X25wdXJnZSwgdWludDY0X3QpOwotCUNUTF9NMl9HRVQo InN0YXRzLmFyZW5hcy4wLm11enp5X25tYWR2aXNlIiwgaSwgJm11enp5X25tYWR2aXNlLAotCSAg ICB1aW50NjRfdCk7Ci0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAubXV6enlfcHVyZ2VkIiwg aSwgJm11enp5X3B1cmdlZCwgdWludDY0X3QpOwotCi0JZW1pdHRlcl9yb3dfdCBkZWNheV9yb3c7 Ci0JZW1pdHRlcl9yb3dfaW5pdCgmZGVjYXlfcm93KTsKLQotCS8qIEpTT04tc3R5bGUgZW1pc3Np b24uICovCi0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJkaXJ0eV9kZWNheV9tcyIsIGVtaXR0 ZXJfdHlwZV9zc2l6ZSwKLQkgICAgJmRpcnR5X2RlY2F5X21zKTsKLQllbWl0dGVyX2pzb25fa3Yo ZW1pdHRlciwgIm11enp5X2RlY2F5X21zIiwgZW1pdHRlcl90eXBlX3NzaXplLAotCSAgICAmbXV6 enlfZGVjYXlfbXMpOwotCi0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJwYWN0aXZlIiwgZW1p dHRlcl90eXBlX3NpemUsICZwYWN0aXZlKTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgInBk aXJ0eSIsIGVtaXR0ZXJfdHlwZV9zaXplLCAmcGRpcnR5KTsKLQllbWl0dGVyX2pzb25fa3YoZW1p dHRlciwgInBtdXp6eSIsIGVtaXR0ZXJfdHlwZV9zaXplLCAmcG11enp5KTsKLQotCWVtaXR0ZXJf anNvbl9rdihlbWl0dGVyLCAiZGlydHlfbnB1cmdlIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKLQkg ICAgJmRpcnR5X25wdXJnZSk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJkaXJ0eV9ubWFk dmlzZSIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCi0JICAgICZkaXJ0eV9ubWFkdmlzZSk7Ci0JZW1p dHRlcl9qc29uX2t2KGVtaXR0ZXIsICJkaXJ0eV9wdXJnZWQiLCBlbWl0dGVyX3R5cGVfdWludDY0 LAotCSAgICAmZGlydHlfcHVyZ2VkKTsKLQotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibXV6 enlfbnB1cmdlIiwgZW1pdHRlcl90eXBlX3VpbnQ2NCwKLQkgICAgJm11enp5X25wdXJnZSk7Ci0J ZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJtdXp6eV9ubWFkdmlzZSIsIGVtaXR0ZXJfdHlwZV91 aW50NjQsCi0JICAgICZtdXp6eV9ubWFkdmlzZSk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIs ICJtdXp6eV9wdXJnZWQiLCBlbWl0dGVyX3R5cGVfdWludDY0LAotCSAgICAmbXV6enlfcHVyZ2Vk KTsKLQotCS8qIFRhYmxlLXN0eWxlIGVtaXNzaW9uLiAqLwotCUNPTChkZWNheV9yb3csIGRlY2F5 X3R5cGUsIHJpZ2h0LCA5LCB0aXRsZSk7Ci0JY29sX2RlY2F5X3R5cGUuc3RyX3ZhbCA9ICJkZWNh eWluZzoiOwotCi0JQ09MKGRlY2F5X3JvdywgZGVjYXlfdGltZSwgcmlnaHQsIDYsIHRpdGxlKTsK LQljb2xfZGVjYXlfdGltZS5zdHJfdmFsID0gInRpbWUiOwotCi0JQ09MKGRlY2F5X3JvdywgZGVj YXlfbnBhZ2VzLCByaWdodCwgMTMsIHRpdGxlKTsKLQljb2xfZGVjYXlfbnBhZ2VzLnN0cl92YWwg PSAibnBhZ2VzIjsKLQotCUNPTChkZWNheV9yb3csIGRlY2F5X3N3ZWVwcywgcmlnaHQsIDEzLCB0 aXRsZSk7Ci0JY29sX2RlY2F5X3N3ZWVwcy5zdHJfdmFsID0gInN3ZWVwcyI7Ci0KLQlDT0woZGVj YXlfcm93LCBkZWNheV9tYWR2aXNlcywgcmlnaHQsIDEzLCB0aXRsZSk7Ci0JY29sX2RlY2F5X21h ZHZpc2VzLnN0cl92YWwgPSAibWFkdmlzZXMiOwotCi0JQ09MKGRlY2F5X3JvdywgZGVjYXlfcHVy Z2VkLCByaWdodCwgMTMsIHRpdGxlKTsKLQljb2xfZGVjYXlfcHVyZ2VkLnN0cl92YWwgPSAicHVy Z2VkIjsKLQotCS8qIFRpdGxlIHJvdy4gKi8KLQllbWl0dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAm ZGVjYXlfcm93KTsKLQotCS8qIERpcnR5IHJvdy4gKi8KLQljb2xfZGVjYXlfdHlwZS5zdHJfdmFs ID0gImRpcnR5OiI7Ci0KLQlpZiAoZGlydHlfZGVjYXlfbXMgPj0gMCkgewotCQljb2xfZGVjYXlf dGltZS50eXBlID0gZW1pdHRlcl90eXBlX3NzaXplOwotCQljb2xfZGVjYXlfdGltZS5zc2l6ZV92 YWwgPSBkaXJ0eV9kZWNheV9tczsKLQl9IGVsc2UgewotCQljb2xfZGVjYXlfdGltZS50eXBlID0g ZW1pdHRlcl90eXBlX3RpdGxlOwotCQljb2xfZGVjYXlfdGltZS5zdHJfdmFsID0gIk4vQSI7Ci0J fQotCi0JY29sX2RlY2F5X25wYWdlcy50eXBlID0gZW1pdHRlcl90eXBlX3NpemU7Ci0JY29sX2Rl Y2F5X25wYWdlcy5zaXplX3ZhbCA9IHBkaXJ0eTsKLQotCWNvbF9kZWNheV9zd2VlcHMudHlwZSA9 IGVtaXR0ZXJfdHlwZV91aW50NjQ7Ci0JY29sX2RlY2F5X3N3ZWVwcy51aW50NjRfdmFsID0gZGly dHlfbnB1cmdlOwotCi0JY29sX2RlY2F5X21hZHZpc2VzLnR5cGUgPSBlbWl0dGVyX3R5cGVfdWlu dDY0OwotCWNvbF9kZWNheV9tYWR2aXNlcy51aW50NjRfdmFsID0gZGlydHlfbm1hZHZpc2U7Ci0K LQljb2xfZGVjYXlfcHVyZ2VkLnR5cGUgPSBlbWl0dGVyX3R5cGVfdWludDY0OwotCWNvbF9kZWNh eV9wdXJnZWQudWludDY0X3ZhbCA9IGRpcnR5X3B1cmdlZDsKLQotCWVtaXR0ZXJfdGFibGVfcm93 KGVtaXR0ZXIsICZkZWNheV9yb3cpOwotCi0JLyogTXV6enkgcm93LiAqLwotCWNvbF9kZWNheV90 eXBlLnN0cl92YWwgPSAibXV6enk6IjsKLQotCWlmIChtdXp6eV9kZWNheV9tcyA+PSAwKSB7Ci0J CWNvbF9kZWNheV90aW1lLnR5cGUgPSBlbWl0dGVyX3R5cGVfc3NpemU7Ci0JCWNvbF9kZWNheV90 aW1lLnNzaXplX3ZhbCA9IG11enp5X2RlY2F5X21zOwotCX0gZWxzZSB7Ci0JCWNvbF9kZWNheV90 aW1lLnR5cGUgPSBlbWl0dGVyX3R5cGVfdGl0bGU7Ci0JCWNvbF9kZWNheV90aW1lLnN0cl92YWwg PSAiTi9BIjsKLQl9Ci0KLQljb2xfZGVjYXlfbnBhZ2VzLnR5cGUgPSBlbWl0dGVyX3R5cGVfc2l6 ZTsKLQljb2xfZGVjYXlfbnBhZ2VzLnNpemVfdmFsID0gcG11enp5OwotCi0JY29sX2RlY2F5X3N3 ZWVwcy50eXBlID0gZW1pdHRlcl90eXBlX3VpbnQ2NDsKLQljb2xfZGVjYXlfc3dlZXBzLnVpbnQ2 NF92YWwgPSBtdXp6eV9ucHVyZ2U7Ci0KLQljb2xfZGVjYXlfbWFkdmlzZXMudHlwZSA9IGVtaXR0 ZXJfdHlwZV91aW50NjQ7Ci0JY29sX2RlY2F5X21hZHZpc2VzLnVpbnQ2NF92YWwgPSBtdXp6eV9u bWFkdmlzZTsKLQotCWNvbF9kZWNheV9wdXJnZWQudHlwZSA9IGVtaXR0ZXJfdHlwZV91aW50NjQ7 Ci0JY29sX2RlY2F5X3B1cmdlZC51aW50NjRfdmFsID0gbXV6enlfcHVyZ2VkOwotCi0JZW1pdHRl cl90YWJsZV9yb3coZW1pdHRlciwgJmRlY2F5X3Jvdyk7Ci0KLQkvKiBTbWFsbCAvIGxhcmdlIC8g dG90YWwgYWxsb2NhdGlvbiBjb3VudHMuICovCi0JZW1pdHRlcl9yb3dfdCBhbGxvY19jb3VudF9y b3c7Ci0JZW1pdHRlcl9yb3dfaW5pdCgmYWxsb2NfY291bnRfcm93KTsKLQotCUNPTChhbGxvY19j b3VudF9yb3csIGNvdW50X3RpdGxlLCBsZWZ0LCAyMSwgdGl0bGUpOwotCWNvbF9jb3VudF90aXRs ZS5zdHJfdmFsID0gIiI7Ci0KLQlDT0woYWxsb2NfY291bnRfcm93LCBjb3VudF9hbGxvY2F0ZWQs IHJpZ2h0LCAxNiwgdGl0bGUpOwotCWNvbF9jb3VudF9hbGxvY2F0ZWQuc3RyX3ZhbCA9ICJhbGxv Y2F0ZWQiOwotCi0JQ09MKGFsbG9jX2NvdW50X3JvdywgY291bnRfbm1hbGxvYywgcmlnaHQsIDE2 LCB0aXRsZSk7Ci0JY29sX2NvdW50X25tYWxsb2Muc3RyX3ZhbCA9ICJubWFsbG9jIjsKLQlDT0wo YWxsb2NfY291bnRfcm93LCBjb3VudF9ubWFsbG9jX3BzLCByaWdodCwgMTAsIHRpdGxlKTsKLQlj b2xfY291bnRfbm1hbGxvY19wcy5zdHJfdmFsID0gIigjL3NlYykiOwotCi0JQ09MKGFsbG9jX2Nv dW50X3JvdywgY291bnRfbmRhbGxvYywgcmlnaHQsIDE2LCB0aXRsZSk7Ci0JY29sX2NvdW50X25k YWxsb2Muc3RyX3ZhbCA9ICJuZGFsbG9jIjsKLQlDT0woYWxsb2NfY291bnRfcm93LCBjb3VudF9u ZGFsbG9jX3BzLCByaWdodCwgMTAsIHRpdGxlKTsKLQljb2xfY291bnRfbmRhbGxvY19wcy5zdHJf dmFsID0gIigjL3NlYykiOwotCi0JQ09MKGFsbG9jX2NvdW50X3JvdywgY291bnRfbnJlcXVlc3Rz LCByaWdodCwgMTYsIHRpdGxlKTsKLQljb2xfY291bnRfbnJlcXVlc3RzLnN0cl92YWwgPSAibnJl cXVlc3RzIjsKLQlDT0woYWxsb2NfY291bnRfcm93LCBjb3VudF9ucmVxdWVzdHNfcHMsIHJpZ2h0 LCAxMCwgdGl0bGUpOwotCWNvbF9jb3VudF9ucmVxdWVzdHNfcHMuc3RyX3ZhbCA9ICIoIy9zZWMp IjsKLQotCUNPTChhbGxvY19jb3VudF9yb3csIGNvdW50X25maWxscywgcmlnaHQsIDE2LCB0aXRs ZSk7Ci0JY29sX2NvdW50X25maWxscy5zdHJfdmFsID0gIm5maWxsIjsKLQlDT0woYWxsb2NfY291 bnRfcm93LCBjb3VudF9uZmlsbHNfcHMsIHJpZ2h0LCAxMCwgdGl0bGUpOwotCWNvbF9jb3VudF9u ZmlsbHNfcHMuc3RyX3ZhbCA9ICIoIy9zZWMpIjsKLQotCUNPTChhbGxvY19jb3VudF9yb3csIGNv dW50X25mbHVzaGVzLCByaWdodCwgMTYsIHRpdGxlKTsKLQljb2xfY291bnRfbmZsdXNoZXMuc3Ry X3ZhbCA9ICJuZmx1c2giOwotCUNPTChhbGxvY19jb3VudF9yb3csIGNvdW50X25mbHVzaGVzX3Bz LCByaWdodCwgMTAsIHRpdGxlKTsKLQljb2xfY291bnRfbmZsdXNoZXNfcHMuc3RyX3ZhbCA9ICIo Iy9zZWMpIjsKLQotCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZhbGxvY19jb3VudF9yb3cp OwotCi0JY29sX2NvdW50X25tYWxsb2NfcHMudHlwZSA9IGVtaXR0ZXJfdHlwZV91aW50NjQ7Ci0J Y29sX2NvdW50X25kYWxsb2NfcHMudHlwZSA9IGVtaXR0ZXJfdHlwZV91aW50NjQ7Ci0JY29sX2Nv dW50X25yZXF1ZXN0c19wcy50eXBlID0gZW1pdHRlcl90eXBlX3VpbnQ2NDsKLQljb2xfY291bnRf bmZpbGxzX3BzLnR5cGUgPSBlbWl0dGVyX3R5cGVfdWludDY0OwotCWNvbF9jb3VudF9uZmx1c2hl c19wcy50eXBlID0gZW1pdHRlcl90eXBlX3VpbnQ2NDsKLQotI2RlZmluZSBHRVRfQU5EX0VNSVRf QUxMT0NfU1RBVChzbWFsbF9vcl9sYXJnZSwgbmFtZSwgdmFsdHlwZSkJCVwKLQlDVExfTTJfR0VU KCJzdGF0cy5hcmVuYXMuMC4iICNzbWFsbF9vcl9sYXJnZSAiLiIgI25hbWUsIGksCVwKLQkgICAg JnNtYWxsX29yX2xhcmdlIyNfIyNuYW1lLCB2YWx0eXBlIyNfdCk7CQkJXAotCWVtaXR0ZXJfanNv bl9rdihlbWl0dGVyLCAjbmFtZSwgZW1pdHRlcl90eXBlXyMjdmFsdHlwZSwJCVwKLQkgICAgJnNt YWxsX29yX2xhcmdlIyNfIyNuYW1lKTsJCQkJCVwKLQljb2xfY291bnRfIyNuYW1lLnR5cGUgPSBl bWl0dGVyX3R5cGVfIyN2YWx0eXBlOwkJXAotCWNvbF9jb3VudF8jI25hbWUudmFsdHlwZSMjX3Zh bCA9IHNtYWxsX29yX2xhcmdlIyNfIyNuYW1lOwotCi0JZW1pdHRlcl9qc29uX29iamVjdF9rdl9i ZWdpbihlbWl0dGVyLCAic21hbGwiKTsKLQljb2xfY291bnRfdGl0bGUuc3RyX3ZhbCA9ICJzbWFs bDoiOwotCi0JR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQoc21hbGwsIGFsbG9jYXRlZCwgc2l6ZSkK LQlHRVRfQU5EX0VNSVRfQUxMT0NfU1RBVChzbWFsbCwgbm1hbGxvYywgdWludDY0KQotCWNvbF9j b3VudF9ubWFsbG9jX3BzLnVpbnQ2NF92YWwgPQotCSAgICByYXRlX3Blcl9zZWNvbmQoY29sX2Nv dW50X25tYWxsb2MudWludDY0X3ZhbCwgdXB0aW1lKTsKLQlHRVRfQU5EX0VNSVRfQUxMT0NfU1RB VChzbWFsbCwgbmRhbGxvYywgdWludDY0KQotCWNvbF9jb3VudF9uZGFsbG9jX3BzLnVpbnQ2NF92 YWwgPQotCSAgICByYXRlX3Blcl9zZWNvbmQoY29sX2NvdW50X25kYWxsb2MudWludDY0X3ZhbCwg dXB0aW1lKTsKLQlHRVRfQU5EX0VNSVRfQUxMT0NfU1RBVChzbWFsbCwgbnJlcXVlc3RzLCB1aW50 NjQpCi0JY29sX2NvdW50X25yZXF1ZXN0c19wcy51aW50NjRfdmFsID0KLQkgICAgcmF0ZV9wZXJf c2Vjb25kKGNvbF9jb3VudF9ucmVxdWVzdHMudWludDY0X3ZhbCwgdXB0aW1lKTsKLQlHRVRfQU5E X0VNSVRfQUxMT0NfU1RBVChzbWFsbCwgbmZpbGxzLCB1aW50NjQpCi0JY29sX2NvdW50X25maWxs c19wcy51aW50NjRfdmFsID0KLQkgICAgcmF0ZV9wZXJfc2Vjb25kKGNvbF9jb3VudF9uZmlsbHMu dWludDY0X3ZhbCwgdXB0aW1lKTsKLQlHRVRfQU5EX0VNSVRfQUxMT0NfU1RBVChzbWFsbCwgbmZs dXNoZXMsIHVpbnQ2NCkKLQljb2xfY291bnRfbmZsdXNoZXNfcHMudWludDY0X3ZhbCA9Ci0JICAg IHJhdGVfcGVyX3NlY29uZChjb2xfY291bnRfbmZsdXNoZXMudWludDY0X3ZhbCwgdXB0aW1lKTsK LQotCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZhbGxvY19jb3VudF9yb3cpOwotCWVtaXR0 ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSAic21hbGwiLiAqLwotCi0JZW1p dHRlcl9qc29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVyLCAibGFyZ2UiKTsKLQljb2xfY291bnRf dGl0bGUuc3RyX3ZhbCA9ICJsYXJnZToiOwotCi0JR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQobGFy Z2UsIGFsbG9jYXRlZCwgc2l6ZSkKLQlHRVRfQU5EX0VNSVRfQUxMT0NfU1RBVChsYXJnZSwgbm1h bGxvYywgdWludDY0KQotCWNvbF9jb3VudF9ubWFsbG9jX3BzLnVpbnQ2NF92YWwgPQotCSAgICBy YXRlX3Blcl9zZWNvbmQoY29sX2NvdW50X25tYWxsb2MudWludDY0X3ZhbCwgdXB0aW1lKTsKLQlH RVRfQU5EX0VNSVRfQUxMT0NfU1RBVChsYXJnZSwgbmRhbGxvYywgdWludDY0KQotCWNvbF9jb3Vu dF9uZGFsbG9jX3BzLnVpbnQ2NF92YWwgPQotCSAgICByYXRlX3Blcl9zZWNvbmQoY29sX2NvdW50 X25kYWxsb2MudWludDY0X3ZhbCwgdXB0aW1lKTsKLQlHRVRfQU5EX0VNSVRfQUxMT0NfU1RBVChs YXJnZSwgbnJlcXVlc3RzLCB1aW50NjQpCi0JY29sX2NvdW50X25yZXF1ZXN0c19wcy51aW50NjRf dmFsID0KLQkgICAgcmF0ZV9wZXJfc2Vjb25kKGNvbF9jb3VudF9ucmVxdWVzdHMudWludDY0X3Zh bCwgdXB0aW1lKTsKLQlHRVRfQU5EX0VNSVRfQUxMT0NfU1RBVChsYXJnZSwgbmZpbGxzLCB1aW50 NjQpCi0JY29sX2NvdW50X25maWxsc19wcy51aW50NjRfdmFsID0KLQkgICAgcmF0ZV9wZXJfc2Vj b25kKGNvbF9jb3VudF9uZmlsbHMudWludDY0X3ZhbCwgdXB0aW1lKTsKLQlHRVRfQU5EX0VNSVRf QUxMT0NfU1RBVChsYXJnZSwgbmZsdXNoZXMsIHVpbnQ2NCkKLQljb2xfY291bnRfbmZsdXNoZXNf cHMudWludDY0X3ZhbCA9Ci0JICAgIHJhdGVfcGVyX3NlY29uZChjb2xfY291bnRfbmZsdXNoZXMu dWludDY0X3ZhbCwgdXB0aW1lKTsKLQotCWVtaXR0ZXJfdGFibGVfcm93KGVtaXR0ZXIsICZhbGxv Y19jb3VudF9yb3cpOwotCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9z ZSAibGFyZ2UiLiAqLwotCi0jdW5kZWYgR0VUX0FORF9FTUlUX0FMTE9DX1NUQVQKLQotCS8qIEFn Z3JlZ2F0ZWQgc21hbGwgKyBsYXJnZSBzdGF0cyBhcmUgZW1pdHRlciBvbmx5IGluIHRhYmxlIG1v ZGUuICovCi0JY29sX2NvdW50X3RpdGxlLnN0cl92YWwgPSAidG90YWw6IjsKLQljb2xfY291bnRf YWxsb2NhdGVkLnNpemVfdmFsID0gc21hbGxfYWxsb2NhdGVkICsgbGFyZ2VfYWxsb2NhdGVkOwot CWNvbF9jb3VudF9ubWFsbG9jLnVpbnQ2NF92YWwgPSBzbWFsbF9ubWFsbG9jICsgbGFyZ2Vfbm1h bGxvYzsKLQljb2xfY291bnRfbmRhbGxvYy51aW50NjRfdmFsID0gc21hbGxfbmRhbGxvYyArIGxh cmdlX25kYWxsb2M7Ci0JY29sX2NvdW50X25yZXF1ZXN0cy51aW50NjRfdmFsID0gc21hbGxfbnJl cXVlc3RzICsgbGFyZ2VfbnJlcXVlc3RzOwotCWNvbF9jb3VudF9uZmlsbHMudWludDY0X3ZhbCA9 IHNtYWxsX25maWxscyArIGxhcmdlX25maWxsczsKLQljb2xfY291bnRfbmZsdXNoZXMudWludDY0 X3ZhbCA9IHNtYWxsX25mbHVzaGVzICsgbGFyZ2VfbmZsdXNoZXM7Ci0JY29sX2NvdW50X25tYWxs b2NfcHMudWludDY0X3ZhbCA9Ci0JICAgIHJhdGVfcGVyX3NlY29uZChjb2xfY291bnRfbm1hbGxv Yy51aW50NjRfdmFsLCB1cHRpbWUpOwotCWNvbF9jb3VudF9uZGFsbG9jX3BzLnVpbnQ2NF92YWwg PQotCSAgICByYXRlX3Blcl9zZWNvbmQoY29sX2NvdW50X25kYWxsb2MudWludDY0X3ZhbCwgdXB0 aW1lKTsKLQljb2xfY291bnRfbnJlcXVlc3RzX3BzLnVpbnQ2NF92YWwgPQotCSAgICByYXRlX3Bl cl9zZWNvbmQoY29sX2NvdW50X25yZXF1ZXN0cy51aW50NjRfdmFsLCB1cHRpbWUpOwotCWNvbF9j b3VudF9uZmlsbHNfcHMudWludDY0X3ZhbCA9Ci0JICAgIHJhdGVfcGVyX3NlY29uZChjb2xfY291 bnRfbmZpbGxzLnVpbnQ2NF92YWwsIHVwdGltZSk7Ci0JY29sX2NvdW50X25mbHVzaGVzX3BzLnVp bnQ2NF92YWwgPQotCSAgICByYXRlX3Blcl9zZWNvbmQoY29sX2NvdW50X25mbHVzaGVzLnVpbnQ2 NF92YWwsIHVwdGltZSk7Ci0JZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJmFsbG9jX2NvdW50 X3Jvdyk7Ci0KLQllbWl0dGVyX3Jvd190IG1lbV9jb3VudF9yb3c7Ci0JZW1pdHRlcl9yb3dfaW5p dCgmbWVtX2NvdW50X3Jvdyk7Ci0KLQllbWl0dGVyX2NvbF90IG1lbV9jb3VudF90aXRsZTsKLQll bWl0dGVyX2NvbF9pbml0KCZtZW1fY291bnRfdGl0bGUsICZtZW1fY291bnRfcm93KTsKLQltZW1f Y291bnRfdGl0bGUuanVzdGlmeSA9IGVtaXR0ZXJfanVzdGlmeV9sZWZ0OwotCW1lbV9jb3VudF90 aXRsZS53aWR0aCA9IDIxOwotCW1lbV9jb3VudF90aXRsZS50eXBlID0gZW1pdHRlcl90eXBlX3Rp dGxlOwotCW1lbV9jb3VudF90aXRsZS5zdHJfdmFsID0gIiI7Ci0KLQllbWl0dGVyX2NvbF90IG1l bV9jb3VudF92YWw7Ci0JZW1pdHRlcl9jb2xfaW5pdCgmbWVtX2NvdW50X3ZhbCwgJm1lbV9jb3Vu dF9yb3cpOwotCW1lbV9jb3VudF92YWwuanVzdGlmeSA9IGVtaXR0ZXJfanVzdGlmeV9yaWdodDsK LQltZW1fY291bnRfdmFsLndpZHRoID0gMTY7Ci0JbWVtX2NvdW50X3ZhbC50eXBlID0gZW1pdHRl cl90eXBlX3RpdGxlOwotCW1lbV9jb3VudF92YWwuc3RyX3ZhbCA9ICIiOwotCi0JZW1pdHRlcl90 YWJsZV9yb3coZW1pdHRlciwgJm1lbV9jb3VudF9yb3cpOwotCW1lbV9jb3VudF92YWwudHlwZSA9 IGVtaXR0ZXJfdHlwZV9zaXplOwotCi0JLyogQWN0aXZlIGNvdW50IGluIGJ5dGVzIGlzIGVtaXR0 ZWQgb25seSBpbiB0YWJsZSBtb2RlLiAqLwotCW1lbV9jb3VudF90aXRsZS5zdHJfdmFsID0gImFj dGl2ZToiOwotCW1lbV9jb3VudF92YWwuc2l6ZV92YWwgPSBwYWN0aXZlICogcGFnZTsKLQllbWl0 dGVyX3RhYmxlX3JvdyhlbWl0dGVyLCAmbWVtX2NvdW50X3Jvdyk7Ci0KLSNkZWZpbmUgR0VUX0FO RF9FTUlUX01FTV9TVEFUKHN0YXQpCQkJCQlcCi0JQ1RMX00yX0dFVCgic3RhdHMuYXJlbmFzLjAu IiNzdGF0LCBpLCAmc3RhdCwgc2l6ZV90KTsJCVwKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwg I3N0YXQsIGVtaXR0ZXJfdHlwZV9zaXplLCAmc3RhdCk7CVwKLQltZW1fY291bnRfdGl0bGUuc3Ry X3ZhbCA9ICNzdGF0IjoiOwkJCQlcCi0JbWVtX2NvdW50X3ZhbC5zaXplX3ZhbCA9IHN0YXQ7CQkJ CQlcCi0JZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJm1lbV9jb3VudF9yb3cpOwotCi0JR0VU X0FORF9FTUlUX01FTV9TVEFUKG1hcHBlZCkKLQlHRVRfQU5EX0VNSVRfTUVNX1NUQVQocmV0YWlu ZWQpCi0JR0VUX0FORF9FTUlUX01FTV9TVEFUKGJhc2UpCi0JR0VUX0FORF9FTUlUX01FTV9TVEFU KGludGVybmFsKQotCUdFVF9BTkRfRU1JVF9NRU1fU1RBVChtZXRhZGF0YV90aHApCi0JR0VUX0FO RF9FTUlUX01FTV9TVEFUKHRjYWNoZV9ieXRlcykKLQlHRVRfQU5EX0VNSVRfTUVNX1NUQVQodGNh Y2hlX3N0YXNoZWRfYnl0ZXMpCi0JR0VUX0FORF9FTUlUX01FTV9TVEFUKHJlc2lkZW50KQotCUdF VF9BTkRfRU1JVF9NRU1fU1RBVChhYmFuZG9uZWRfdm0pCi0JR0VUX0FORF9FTUlUX01FTV9TVEFU KGV4dGVudF9hdmFpbCkKLSN1bmRlZiBHRVRfQU5EX0VNSVRfTUVNX1NUQVQKLQotCWlmIChtdXRl eCkgewotCQlzdGF0c19hcmVuYV9tdXRleGVzX3ByaW50KGVtaXR0ZXIsIGksIHVwdGltZSk7Ci0J fQotCWlmIChiaW5zKSB7Ci0JCXN0YXRzX2FyZW5hX2JpbnNfcHJpbnQoZW1pdHRlciwgbXV0ZXgs IGksIHVwdGltZSk7Ci0JfQotCWlmIChsYXJnZSkgewotCQlzdGF0c19hcmVuYV9sZXh0ZW50c19w cmludChlbWl0dGVyLCBpLCB1cHRpbWUpOwotCX0KLQlpZiAoZXh0ZW50cykgewotCQlzdGF0c19h cmVuYV9leHRlbnRzX3ByaW50KGVtaXR0ZXIsIGkpOwotCX0KLQlpZiAoaHBhKSB7Ci0JCXN0YXRz X2FyZW5hX2hwYV9zaGFyZF9wcmludChlbWl0dGVyLCBpLCB1cHRpbWUpOwotCX0KLX0KLQotSkVN QUxMT0NfQ09MRAotc3RhdGljIHZvaWQKLXN0YXRzX2dlbmVyYWxfcHJpbnQoZW1pdHRlcl90ICpl bWl0dGVyKSB7Ci0JY29uc3QgY2hhciAqY3B2OwotCWJvb2wgYnYsIGJ2MjsKLQl1bnNpZ25lZCB1 djsKLQl1aW50MzJfdCB1MzJ2OwotCXVpbnQ2NF90IHU2NHY7Ci0JaW50NjRfdCBpNjR2OwotCXNz aXplX3Qgc3N2LCBzc3YyOwotCXNpemVfdCBzdiwgYnN6LCB1c3osIHUzMnN6LCB1NjRzeiwgaTY0 c3osIHNzeiwgc3NzeiwgY3BzejsKLQotCWJzeiA9IHNpemVvZihib29sKTsKLQl1c3ogPSBzaXpl b2YodW5zaWduZWQpOwotCXNzeiA9IHNpemVvZihzaXplX3QpOwotCXNzc3ogPSBzaXplb2Yoc3Np emVfdCk7Ci0JY3BzeiA9IHNpemVvZihjb25zdCBjaGFyICopOwotCXUzMnN6ID0gc2l6ZW9mKHVp bnQzMl90KTsKLQlpNjRzeiA9IHNpemVvZihpbnQ2NF90KTsKLQl1NjRzeiA9IHNpemVvZih1aW50 NjRfdCk7Ci0KLQlDVExfR0VUKCJ2ZXJzaW9uIiwgJmNwdiwgY29uc3QgY2hhciAqKTsKLQllbWl0 dGVyX2t2KGVtaXR0ZXIsICJ2ZXJzaW9uIiwgIlZlcnNpb24iLCBlbWl0dGVyX3R5cGVfc3RyaW5n LCAmY3B2KTsKLQotCS8qIGNvbmZpZy4gKi8KLQllbWl0dGVyX2RpY3RfYmVnaW4oZW1pdHRlciwg ImNvbmZpZyIsICJCdWlsZC10aW1lIG9wdGlvbiBzZXR0aW5ncyIpOwotI2RlZmluZSBDT05GSUdf V1JJVEVfQk9PTChuYW1lKQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCUNUTF9HRVQoImNvbmZp Zy4iI25hbWUsICZidiwgYm9vbCk7CQkJXAotCQllbWl0dGVyX2t2KGVtaXR0ZXIsICNuYW1lLCAi Y29uZmlnLiIjbmFtZSwJCVwKLQkJICAgIGVtaXR0ZXJfdHlwZV9ib29sLCAmYnYpOwkJCQlcCi0J fSB3aGlsZSAoMCkKLQotCUNPTkZJR19XUklURV9CT09MKGNhY2hlX29ibGl2aW91cyk7Ci0JQ09O RklHX1dSSVRFX0JPT0woZGVidWcpOwotCUNPTkZJR19XUklURV9CT09MKGZpbGwpOwotCUNPTkZJ R19XUklURV9CT09MKGxhenlfbG9jayk7Ci0JZW1pdHRlcl9rdihlbWl0dGVyLCAibWFsbG9jX2Nv bmYiLCAiY29uZmlnLm1hbGxvY19jb25mIiwKLQkgICAgZW1pdHRlcl90eXBlX3N0cmluZywgJmNv bmZpZ19tYWxsb2NfY29uZik7Ci0KLQlDT05GSUdfV1JJVEVfQk9PTChvcHRfc2FmZXR5X2NoZWNr cyk7Ci0JQ09ORklHX1dSSVRFX0JPT0wocHJvZik7Ci0JQ09ORklHX1dSSVRFX0JPT0wocHJvZl9s aWJnY2MpOwotCUNPTkZJR19XUklURV9CT09MKHByb2ZfbGlidW53aW5kKTsKLQlDT05GSUdfV1JJ VEVfQk9PTChzdGF0cyk7Ci0JQ09ORklHX1dSSVRFX0JPT0wodXRyYWNlKTsKLQlDT05GSUdfV1JJ VEVfQk9PTCh4bWFsbG9jKTsKLSN1bmRlZiBDT05GSUdfV1JJVEVfQk9PTAotCWVtaXR0ZXJfZGlj dF9lbmQoZW1pdHRlcik7IC8qIENsb3NlICJjb25maWciIGRpY3QuICovCi0KLQkvKiBvcHQuICov Ci0jZGVmaW5lIE9QVF9XUklURShuYW1lLCB2YXIsIHNpemUsIGVtaXR0ZXJfdHlwZSkJCQlcCi0J aWYgKGplX21hbGxjdGwoIm9wdC4ibmFtZSwgKHZvaWQgKikmdmFyLCAmc2l6ZSwgTlVMTCwgMCkg PT0JXAotCSAgICAwKSB7CQkJCQkJCVwKLQkJZW1pdHRlcl9rdihlbWl0dGVyLCBuYW1lLCAib3B0 LiJuYW1lLCBlbWl0dGVyX3R5cGUsCVwKLQkJICAgICZ2YXIpOwkJCQkJCVwKLQl9Ci0KLSNkZWZp bmUgT1BUX1dSSVRFX01VVEFCTEUobmFtZSwgdmFyMSwgdmFyMiwgc2l6ZSwgZW1pdHRlcl90eXBl LAkJXAotICAgIGFsdG5hbWUpCQkJCQkJCQlcCi0JaWYgKGplX21hbGxjdGwoIm9wdC4ibmFtZSwg KHZvaWQgKikmdmFyMSwgJnNpemUsIE5VTEwsIDApID09CVwKLQkgICAgMCAmJiBqZV9tYWxsY3Rs KGFsdG5hbWUsICh2b2lkICopJnZhcjIsICZzaXplLCBOVUxMLCAwKQlcCi0JICAgID09IDApIHsJ CQkJCQkJXAotCQllbWl0dGVyX2t2X25vdGUoZW1pdHRlciwgbmFtZSwgIm9wdC4ibmFtZSwJCVwK LQkJICAgIGVtaXR0ZXJfdHlwZSwgJnZhcjEsIGFsdG5hbWUsIGVtaXR0ZXJfdHlwZSwJCVwKLQkJ ICAgICZ2YXIyKTsJCQkJCQlcCi0JfQotCi0jZGVmaW5lIE9QVF9XUklURV9CT09MKG5hbWUpIE9Q VF9XUklURShuYW1lLCBidiwgYnN6LCBlbWl0dGVyX3R5cGVfYm9vbCkKLSNkZWZpbmUgT1BUX1dS SVRFX0JPT0xfTVVUQUJMRShuYW1lLCBhbHRuYW1lKQkJCQlcCi0JT1BUX1dSSVRFX01VVEFCTEUo bmFtZSwgYnYsIGJ2MiwgYnN6LCBlbWl0dGVyX3R5cGVfYm9vbCwgYWx0bmFtZSkKLQotI2RlZmlu ZSBPUFRfV1JJVEVfVU5TSUdORUQobmFtZSkJCQkJCVwKLQlPUFRfV1JJVEUobmFtZSwgdXYsIHVz eiwgZW1pdHRlcl90eXBlX3Vuc2lnbmVkKQotCi0jZGVmaW5lIE9QVF9XUklURV9JTlQ2NChuYW1l KQkJCQkJCVwKLQlPUFRfV1JJVEUobmFtZSwgaTY0diwgaTY0c3osIGVtaXR0ZXJfdHlwZV9pbnQ2 NCkKLSNkZWZpbmUgT1BUX1dSSVRFX1VJTlQ2NChuYW1lKQkJCQkJCVwKLQlPUFRfV1JJVEUobmFt ZSwgdTY0diwgdTY0c3osIGVtaXR0ZXJfdHlwZV91aW50NjQpCi0KLSNkZWZpbmUgT1BUX1dSSVRF X1NJWkVfVChuYW1lKQkJCQkJCVwKLQlPUFRfV1JJVEUobmFtZSwgc3YsIHNzeiwgZW1pdHRlcl90 eXBlX3NpemUpCi0jZGVmaW5lIE9QVF9XUklURV9TU0laRV9UKG5hbWUpCQkJCQkJXAotCU9QVF9X UklURShuYW1lLCBzc3YsIHNzc3osIGVtaXR0ZXJfdHlwZV9zc2l6ZSkKLSNkZWZpbmUgT1BUX1dS SVRFX1NTSVpFX1RfTVVUQUJMRShuYW1lLCBhbHRuYW1lKQkJCVwKLQlPUFRfV1JJVEVfTVVUQUJM RShuYW1lLCBzc3YsIHNzdjIsIHNzc3osIGVtaXR0ZXJfdHlwZV9zc2l6ZSwJXAotCSAgICBhbHRu YW1lKQotCi0jZGVmaW5lIE9QVF9XUklURV9DSEFSX1AobmFtZSkJCQkJCQlcCi0JT1BUX1dSSVRF KG5hbWUsIGNwdiwgY3BzeiwgZW1pdHRlcl90eXBlX3N0cmluZykKLQotCWVtaXR0ZXJfZGljdF9i ZWdpbihlbWl0dGVyLCAib3B0IiwgIlJ1bi10aW1lIG9wdGlvbiBzZXR0aW5ncyIpOwotCi0JT1BU X1dSSVRFX0JPT0woImFib3J0IikKLQlPUFRfV1JJVEVfQk9PTCgiYWJvcnRfY29uZiIpCi0JT1BU X1dSSVRFX0JPT0woImNhY2hlX29ibGl2aW91cyIpCi0JT1BUX1dSSVRFX0JPT0woImNvbmZpcm1f Y29uZiIpCi0JT1BUX1dSSVRFX0JPT0woInJldGFpbiIpCi0JT1BUX1dSSVRFX0NIQVJfUCgiZHNz IikKLQlPUFRfV1JJVEVfVU5TSUdORUQoIm5hcmVuYXMiKQotCU9QVF9XUklURV9DSEFSX1AoInBl cmNwdV9hcmVuYSIpCi0JT1BUX1dSSVRFX1NJWkVfVCgib3ZlcnNpemVfdGhyZXNob2xkIikKLQlP UFRfV1JJVEVfQk9PTCgiaHBhIikKLQlPUFRfV1JJVEVfU0laRV9UKCJocGFfc2xhYl9tYXhfYWxs b2MiKQotCU9QVF9XUklURV9TSVpFX1QoImhwYV9odWdpZmljYXRpb25fdGhyZXNob2xkIikKLQlP UFRfV1JJVEVfVUlOVDY0KCJocGFfaHVnaWZ5X2RlbGF5X21zIikKLQlPUFRfV1JJVEVfVUlOVDY0 KCJocGFfbWluX3B1cmdlX2ludGVydmFsX21zIikKLQlpZiAoamVfbWFsbGN0bCgib3B0LmhwYV9k aXJ0eV9tdWx0IiwgKHZvaWQgKikmdTMydiwgJnUzMnN6LCBOVUxMLCAwKQotCSAgICA9PSAwKSB7 Ci0JCS8qCi0JCSAqIFdlIGNoZWF0IGEgbGl0dGxlIGFuZCAia25vdyIgdGhlIHNlY3JldCBtZWFu aW5nIG9mIHRoaXMKLQkJICogcmVwcmVzZW50YXRpb24uCi0JCSAqLwotCQlpZiAodTMydiA9PSAo dWludDMyX3QpLTEpIHsKLQkJCWNvbnN0IGNoYXIgKm5lZzEgPSAiLTEiOwotCQkJZW1pdHRlcl9r dihlbWl0dGVyLCAiaHBhX2RpcnR5X211bHQiLAotCQkJICAgICJvcHQuaHBhX2RpcnR5X211bHQi LCBlbWl0dGVyX3R5cGVfc3RyaW5nLCAmbmVnMSk7Ci0JCX0gZWxzZSB7Ci0JCQljaGFyIGJ1ZltG WFBfQlVGX1NJWkVdOwotCQkJZnhwX3ByaW50KHUzMnYsIGJ1Zik7Ci0JCQljb25zdCBjaGFyICpi dWZwID0gYnVmOwotCQkJZW1pdHRlcl9rdihlbWl0dGVyLCAiaHBhX2RpcnR5X211bHQiLAotCQkJ ICAgICJvcHQuaHBhX2RpcnR5X211bHQiLCBlbWl0dGVyX3R5cGVfc3RyaW5nLCAmYnVmcCk7Ci0J CX0KLQl9Ci0JT1BUX1dSSVRFX1NJWkVfVCgiaHBhX3NlY19uc2hhcmRzIikKLQlPUFRfV1JJVEVf U0laRV9UKCJocGFfc2VjX21heF9hbGxvYyIpCi0JT1BUX1dSSVRFX1NJWkVfVCgiaHBhX3NlY19t YXhfYnl0ZXMiKQotCU9QVF9XUklURV9TSVpFX1QoImhwYV9zZWNfYnl0ZXNfYWZ0ZXJfZmx1c2gi KQotCU9QVF9XUklURV9TSVpFX1QoImhwYV9zZWNfYmF0Y2hfZmlsbF9leHRyYSIpCi0JT1BUX1dS SVRFX0NIQVJfUCgibWV0YWRhdGFfdGhwIikKLQlPUFRfV1JJVEVfSU5UNjQoIm11dGV4X21heF9z cGluIikKLQlPUFRfV1JJVEVfQk9PTF9NVVRBQkxFKCJiYWNrZ3JvdW5kX3RocmVhZCIsICJiYWNr Z3JvdW5kX3RocmVhZCIpCi0JT1BUX1dSSVRFX1NTSVpFX1RfTVVUQUJMRSgiZGlydHlfZGVjYXlf bXMiLCAiYXJlbmFzLmRpcnR5X2RlY2F5X21zIikKLQlPUFRfV1JJVEVfU1NJWkVfVF9NVVRBQkxF KCJtdXp6eV9kZWNheV9tcyIsICJhcmVuYXMubXV6enlfZGVjYXlfbXMiKQotCU9QVF9XUklURV9T SVpFX1QoImxnX2V4dGVudF9tYXhfYWN0aXZlX2ZpdCIpCi0JT1BUX1dSSVRFX0NIQVJfUCgianVu ayIpCi0JT1BUX1dSSVRFX0JPT0woInplcm8iKQotCU9QVF9XUklURV9CT09MKCJ1dHJhY2UiKQot CU9QVF9XUklURV9CT09MKCJ4bWFsbG9jIikKLQlPUFRfV1JJVEVfQk9PTCgiZXhwZXJpbWVudGFs X2luZmFsbGlibGVfbmV3IikKLQlPUFRfV1JJVEVfQk9PTCgidGNhY2hlIikKLQlPUFRfV1JJVEVf U0laRV9UKCJ0Y2FjaGVfbWF4IikKLQlPUFRfV1JJVEVfVU5TSUdORUQoInRjYWNoZV9uc2xvdHNf c21hbGxfbWluIikKLQlPUFRfV1JJVEVfVU5TSUdORUQoInRjYWNoZV9uc2xvdHNfc21hbGxfbWF4 IikKLQlPUFRfV1JJVEVfVU5TSUdORUQoInRjYWNoZV9uc2xvdHNfbGFyZ2UiKQotCU9QVF9XUklU RV9TU0laRV9UKCJsZ190Y2FjaGVfbnNsb3RzX211bCIpCi0JT1BUX1dSSVRFX1NJWkVfVCgidGNh Y2hlX2djX2luY3JfYnl0ZXMiKQotCU9QVF9XUklURV9TSVpFX1QoInRjYWNoZV9nY19kZWxheV9i eXRlcyIpCi0JT1BUX1dSSVRFX1VOU0lHTkVEKCJsZ190Y2FjaGVfZmx1c2hfc21hbGxfZGl2IikK LQlPUFRfV1JJVEVfVU5TSUdORUQoImxnX3RjYWNoZV9mbHVzaF9sYXJnZV9kaXYiKQotCU9QVF9X UklURV9DSEFSX1AoInRocCIpCi0JT1BUX1dSSVRFX0JPT0woInByb2YiKQotCU9QVF9XUklURV9D SEFSX1AoInByb2ZfcHJlZml4IikKLQlPUFRfV1JJVEVfQk9PTF9NVVRBQkxFKCJwcm9mX2FjdGl2 ZSIsICJwcm9mLmFjdGl2ZSIpCi0JT1BUX1dSSVRFX0JPT0xfTVVUQUJMRSgicHJvZl90aHJlYWRf YWN0aXZlX2luaXQiLAotCSAgICAicHJvZi50aHJlYWRfYWN0aXZlX2luaXQiKQotCU9QVF9XUklU RV9TU0laRV9UX01VVEFCTEUoImxnX3Byb2Zfc2FtcGxlIiwgInByb2YubGdfc2FtcGxlIikKLQlP UFRfV1JJVEVfQk9PTCgicHJvZl9hY2N1bSIpCi0JT1BUX1dSSVRFX1NTSVpFX1QoImxnX3Byb2Zf aW50ZXJ2YWwiKQotCU9QVF9XUklURV9CT09MKCJwcm9mX2dkdW1wIikKLQlPUFRfV1JJVEVfQk9P TCgicHJvZl9maW5hbCIpCi0JT1BUX1dSSVRFX0JPT0woInByb2ZfbGVhayIpCi0JT1BUX1dSSVRF X0JPT0woInByb2ZfbGVha19lcnJvciIpCi0JT1BUX1dSSVRFX0JPT0woInN0YXRzX3ByaW50IikK LQlPUFRfV1JJVEVfQ0hBUl9QKCJzdGF0c19wcmludF9vcHRzIikKLQlPUFRfV1JJVEVfQk9PTCgi c3RhdHNfcHJpbnQiKQotCU9QVF9XUklURV9DSEFSX1AoInN0YXRzX3ByaW50X29wdHMiKQotCU9Q VF9XUklURV9JTlQ2NCgic3RhdHNfaW50ZXJ2YWwiKQotCU9QVF9XUklURV9DSEFSX1AoInN0YXRz X2ludGVydmFsX29wdHMiKQotCU9QVF9XUklURV9DSEFSX1AoInplcm9fcmVhbGxvYyIpCi0KLQll bWl0dGVyX2RpY3RfZW5kKGVtaXR0ZXIpOwotCi0jdW5kZWYgT1BUX1dSSVRFCi0jdW5kZWYgT1BU X1dSSVRFX01VVEFCTEUKLSN1bmRlZiBPUFRfV1JJVEVfQk9PTAotI3VuZGVmIE9QVF9XUklURV9C T09MX01VVEFCTEUKLSN1bmRlZiBPUFRfV1JJVEVfVU5TSUdORUQKLSN1bmRlZiBPUFRfV1JJVEVf U1NJWkVfVAotI3VuZGVmIE9QVF9XUklURV9TU0laRV9UX01VVEFCTEUKLSN1bmRlZiBPUFRfV1JJ VEVfQ0hBUl9QCi0KLQkvKiBwcm9mLiAqLwotCWlmIChjb25maWdfcHJvZikgewotCQllbWl0dGVy X2RpY3RfYmVnaW4oZW1pdHRlciwgInByb2YiLCAiUHJvZmlsaW5nIHNldHRpbmdzIik7Ci0KLQkJ Q1RMX0dFVCgicHJvZi50aHJlYWRfYWN0aXZlX2luaXQiLCAmYnYsIGJvb2wpOwotCQllbWl0dGVy X2t2KGVtaXR0ZXIsICJ0aHJlYWRfYWN0aXZlX2luaXQiLAotCQkgICAgInByb2YudGhyZWFkX2Fj dGl2ZV9pbml0IiwgZW1pdHRlcl90eXBlX2Jvb2wsICZidik7Ci0KLQkJQ1RMX0dFVCgicHJvZi5h Y3RpdmUiLCAmYnYsIGJvb2wpOwotCQllbWl0dGVyX2t2KGVtaXR0ZXIsICJhY3RpdmUiLCAicHJv Zi5hY3RpdmUiLCBlbWl0dGVyX3R5cGVfYm9vbCwKLQkJICAgICZidik7Ci0KLQkJQ1RMX0dFVCgi cHJvZi5nZHVtcCIsICZidiwgYm9vbCk7Ci0JCWVtaXR0ZXJfa3YoZW1pdHRlciwgImdkdW1wIiwg InByb2YuZ2R1bXAiLCBlbWl0dGVyX3R5cGVfYm9vbCwKLQkJICAgICZidik7Ci0KLQkJQ1RMX0dF VCgicHJvZi5pbnRlcnZhbCIsICZ1NjR2LCB1aW50NjRfdCk7Ci0JCWVtaXR0ZXJfa3YoZW1pdHRl ciwgImludGVydmFsIiwgInByb2YuaW50ZXJ2YWwiLAotCQkgICAgZW1pdHRlcl90eXBlX3VpbnQ2 NCwgJnU2NHYpOwotCi0JCUNUTF9HRVQoInByb2YubGdfc2FtcGxlIiwgJnNzdiwgc3NpemVfdCk7 Ci0JCWVtaXR0ZXJfa3YoZW1pdHRlciwgImxnX3NhbXBsZSIsICJwcm9mLmxnX3NhbXBsZSIsCi0J CSAgICBlbWl0dGVyX3R5cGVfc3NpemUsICZzc3YpOwotCi0JCWVtaXR0ZXJfZGljdF9lbmQoZW1p dHRlcik7IC8qIENsb3NlICJwcm9mIi4gKi8KLQl9Ci0KLQkvKiBhcmVuYXMuICovCi0JLyoKLQkg KiBUaGUganNvbiBvdXRwdXQgc3RpY2tzIGFyZW5hIGluZm8gaW50byBhbiAiYXJlbmFzIiBkaWN0 OyB0aGUgdGFibGUKLQkgKiBvdXRwdXQgcHV0cyB0aGVtIGF0IHRoZSB0b3AtbGV2ZWwuCi0JICov Ci0JZW1pdHRlcl9qc29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVyLCAiYXJlbmFzIik7Ci0KLQlD VExfR0VUKCJhcmVuYXMubmFyZW5hcyIsICZ1diwgdW5zaWduZWQpOwotCWVtaXR0ZXJfa3YoZW1p dHRlciwgIm5hcmVuYXMiLCAiQXJlbmFzIiwgZW1pdHRlcl90eXBlX3Vuc2lnbmVkLCAmdXYpOwot Ci0JLyoKLQkgKiBEZWNheSBzZXR0aW5ncyBhcmUgZW1pdHRlZCBvbmx5IGluIGpzb24gbW9kZTsg aW4gdGFibGUgbW9kZSwgdGhleSdyZQotCSAqIGVtaXR0ZWQgYXMgbm90ZXMgd2l0aCB0aGUgb3B0 IG91dHB1dCwgYWJvdmUuCi0JICovCi0JQ1RMX0dFVCgiYXJlbmFzLmRpcnR5X2RlY2F5X21zIiwg JnNzdiwgc3NpemVfdCk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJkaXJ0eV9kZWNheV9t cyIsIGVtaXR0ZXJfdHlwZV9zc2l6ZSwgJnNzdik7Ci0KLQlDVExfR0VUKCJhcmVuYXMubXV6enlf ZGVjYXlfbXMiLCAmc3N2LCBzc2l6ZV90KTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm11 enp5X2RlY2F5X21zIiwgZW1pdHRlcl90eXBlX3NzaXplLCAmc3N2KTsKLQotCUNUTF9HRVQoImFy ZW5hcy5xdWFudHVtIiwgJnN2LCBzaXplX3QpOwotCWVtaXR0ZXJfa3YoZW1pdHRlciwgInF1YW50 dW0iLCAiUXVhbnR1bSBzaXplIiwgZW1pdHRlcl90eXBlX3NpemUsICZzdik7Ci0KLQlDVExfR0VU KCJhcmVuYXMucGFnZSIsICZzdiwgc2l6ZV90KTsKLQllbWl0dGVyX2t2KGVtaXR0ZXIsICJwYWdl IiwgIlBhZ2Ugc2l6ZSIsIGVtaXR0ZXJfdHlwZV9zaXplLCAmc3YpOwotCi0JaWYgKGplX21hbGxj dGwoImFyZW5hcy50Y2FjaGVfbWF4IiwgKHZvaWQgKikmc3YsICZzc3osIE5VTEwsIDApID09IDAp IHsKLQkJZW1pdHRlcl9rdihlbWl0dGVyLCAidGNhY2hlX21heCIsCi0JCSAgICAiTWF4aW11bSB0 aHJlYWQtY2FjaGVkIHNpemUgY2xhc3MiLCBlbWl0dGVyX3R5cGVfc2l6ZSwgJnN2KTsKLQl9Ci0K LQl1bnNpZ25lZCBhcmVuYXNfbmJpbnM7Ci0JQ1RMX0dFVCgiYXJlbmFzLm5iaW5zIiwgJmFyZW5h c19uYmlucywgdW5zaWduZWQpOwotCWVtaXR0ZXJfa3YoZW1pdHRlciwgIm5iaW5zIiwgIk51bWJl ciBvZiBiaW4gc2l6ZSBjbGFzc2VzIiwKLQkgICAgZW1pdHRlcl90eXBlX3Vuc2lnbmVkLCAmYXJl bmFzX25iaW5zKTsKLQotCXVuc2lnbmVkIGFyZW5hc19uaGJpbnM7Ci0JQ1RMX0dFVCgiYXJlbmFz Lm5oYmlucyIsICZhcmVuYXNfbmhiaW5zLCB1bnNpZ25lZCk7Ci0JZW1pdHRlcl9rdihlbWl0dGVy LCAibmhiaW5zIiwgIk51bWJlciBvZiB0aHJlYWQtY2FjaGUgYmluIHNpemUgY2xhc3NlcyIsCi0J ICAgIGVtaXR0ZXJfdHlwZV91bnNpZ25lZCwgJmFyZW5hc19uaGJpbnMpOwotCi0JLyoKLQkgKiBX ZSBkbyBlbm91Z2ggbWFsbGN0bHMgaW4gYSBsb29wIHRoYXQgd2UgYWN0dWFsbHkgd2FudCB0byBv bWl0IHRoZW0KLQkgKiAobm90IGp1c3Qgb21pdCB0aGUgcHJpbnRpbmcpLgotCSAqLwotCWlmIChl bWl0dGVyX291dHB1dHNfanNvbihlbWl0dGVyKSkgewotCQllbWl0dGVyX2pzb25fYXJyYXlfa3Zf YmVnaW4oZW1pdHRlciwgImJpbiIpOwotCQlzaXplX3QgYXJlbmFzX2Jpbl9taWJbQ1RMX01BWF9E RVBUSF07Ci0JCUNUTF9MRUFGX1BSRVBBUkUoYXJlbmFzX2Jpbl9taWIsIDAsICJhcmVuYXMuYmlu Iik7Ci0JCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmVuYXNfbmJpbnM7IGkrKykgewotCQkJ YXJlbmFzX2Jpbl9taWJbMl0gPSBpOwotCQkJZW1pdHRlcl9qc29uX29iamVjdF9iZWdpbihlbWl0 dGVyKTsKLQotCQkJQ1RMX0xFQUYoYXJlbmFzX2Jpbl9taWIsIDMsICJzaXplIiwgJnN2LCBzaXpl X3QpOwotCQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJzaXplIiwgZW1pdHRlcl90eXBlX3Np emUsCi0JCQkgICAgJnN2KTsKLQotCQkJQ1RMX0xFQUYoYXJlbmFzX2Jpbl9taWIsIDMsICJucmVn cyIsICZ1MzJ2LCB1aW50MzJfdCk7Ci0JCQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm5yZWdz IiwgZW1pdHRlcl90eXBlX3VpbnQzMiwKLQkJCSAgICAmdTMydik7Ci0KLQkJCUNUTF9MRUFGKGFy ZW5hc19iaW5fbWliLCAzLCAic2xhYl9zaXplIiwgJnN2LCBzaXplX3QpOwotCQkJZW1pdHRlcl9q c29uX2t2KGVtaXR0ZXIsICJzbGFiX3NpemUiLCBlbWl0dGVyX3R5cGVfc2l6ZSwKLQkJCSAgICAm c3YpOwotCi0JCQlDVExfTEVBRihhcmVuYXNfYmluX21pYiwgMywgIm5zaGFyZHMiLCAmdTMydiwg dWludDMyX3QpOwotCQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJuc2hhcmRzIiwgZW1pdHRl cl90eXBlX3VpbnQzMiwKLQkJCSAgICAmdTMydik7Ci0KLQkJCWVtaXR0ZXJfanNvbl9vYmplY3Rf ZW5kKGVtaXR0ZXIpOwotCQl9Ci0JCWVtaXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7IC8q IENsb3NlICJiaW4iLiAqLwotCX0KLQotCXVuc2lnbmVkIG5sZXh0ZW50czsKLQlDVExfR0VUKCJh cmVuYXMubmxleHRlbnRzIiwgJm5sZXh0ZW50cywgdW5zaWduZWQpOwotCWVtaXR0ZXJfa3YoZW1p dHRlciwgIm5sZXh0ZW50cyIsICJOdW1iZXIgb2YgbGFyZ2Ugc2l6ZSBjbGFzc2VzIiwKLQkgICAg ZW1pdHRlcl90eXBlX3Vuc2lnbmVkLCAmbmxleHRlbnRzKTsKLQotCWlmIChlbWl0dGVyX291dHB1 dHNfanNvbihlbWl0dGVyKSkgewotCQllbWl0dGVyX2pzb25fYXJyYXlfa3ZfYmVnaW4oZW1pdHRl ciwgImxleHRlbnQiKTsKLQkJc2l6ZV90IGFyZW5hc19sZXh0ZW50X21pYltDVExfTUFYX0RFUFRI XTsKLQkJQ1RMX0xFQUZfUFJFUEFSRShhcmVuYXNfbGV4dGVudF9taWIsIDAsICJhcmVuYXMubGV4 dGVudCIpOwotCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmxleHRlbnRzOyBpKyspIHsKLQkJ CWFyZW5hc19sZXh0ZW50X21pYlsyXSA9IGk7Ci0JCQllbWl0dGVyX2pzb25fb2JqZWN0X2JlZ2lu KGVtaXR0ZXIpOwotCi0JCQlDVExfTEVBRihhcmVuYXNfbGV4dGVudF9taWIsIDMsICJzaXplIiwg JnN2LCBzaXplX3QpOwotCQkJZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJzaXplIiwgZW1pdHRl cl90eXBlX3NpemUsCi0JCQkgICAgJnN2KTsKLQotCQkJZW1pdHRlcl9qc29uX29iamVjdF9lbmQo ZW1pdHRlcik7Ci0JCX0KLQkJZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsgLyogQ2xv c2UgImxleHRlbnQiLiAqLwotCX0KLQotCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIp OyAvKiBDbG9zZSAiYXJlbmFzIiAqLwotfQotCi1KRU1BTExPQ19DT0xECi1zdGF0aWMgdm9pZAot c3RhdHNfcHJpbnRfaGVscGVyKGVtaXR0ZXJfdCAqZW1pdHRlciwgYm9vbCBtZXJnZWQsIGJvb2wg ZGVzdHJveWVkLAotICAgIGJvb2wgdW5tZXJnZWQsIGJvb2wgYmlucywgYm9vbCBsYXJnZSwgYm9v bCBtdXRleCwgYm9vbCBleHRlbnRzLCBib29sIGhwYSkgewotCS8qCi0JICogVGhlc2Ugc2hvdWxk IGJlIGRlbGV0ZWQuICBXZSBrZWVwIHRoZW0gYXJvdW5kIGZvciBhIHdoaWxlLCB0byBhaWQgaW4K LQkgKiB0aGUgdHJhbnNpdGlvbiB0byB0aGUgZW1pdHRlciBjb2RlLgotCSAqLwotCXNpemVfdCBh bGxvY2F0ZWQsIGFjdGl2ZSwgbWV0YWRhdGEsIG1ldGFkYXRhX3RocCwgcmVzaWRlbnQsIG1hcHBl ZCwKLQkgICAgcmV0YWluZWQ7Ci0Jc2l6ZV90IG51bV9iYWNrZ3JvdW5kX3RocmVhZHM7Ci0Jc2l6 ZV90IHplcm9fcmVhbGxvY3M7Ci0JdWludDY0X3QgYmFja2dyb3VuZF90aHJlYWRfbnVtX3J1bnMs IGJhY2tncm91bmRfdGhyZWFkX3J1bl9pbnRlcnZhbDsKLQotCUNUTF9HRVQoInN0YXRzLmFsbG9j YXRlZCIsICZhbGxvY2F0ZWQsIHNpemVfdCk7Ci0JQ1RMX0dFVCgic3RhdHMuYWN0aXZlIiwgJmFj dGl2ZSwgc2l6ZV90KTsKLQlDVExfR0VUKCJzdGF0cy5tZXRhZGF0YSIsICZtZXRhZGF0YSwgc2l6 ZV90KTsKLQlDVExfR0VUKCJzdGF0cy5tZXRhZGF0YV90aHAiLCAmbWV0YWRhdGFfdGhwLCBzaXpl X3QpOwotCUNUTF9HRVQoInN0YXRzLnJlc2lkZW50IiwgJnJlc2lkZW50LCBzaXplX3QpOwotCUNU TF9HRVQoInN0YXRzLm1hcHBlZCIsICZtYXBwZWQsIHNpemVfdCk7Ci0JQ1RMX0dFVCgic3RhdHMu cmV0YWluZWQiLCAmcmV0YWluZWQsIHNpemVfdCk7Ci0KLQlDVExfR0VUKCJzdGF0cy56ZXJvX3Jl YWxsb2NzIiwgJnplcm9fcmVhbGxvY3MsIHNpemVfdCk7Ci0KLQlpZiAoaGF2ZV9iYWNrZ3JvdW5k X3RocmVhZCkgewotCQlDVExfR0VUKCJzdGF0cy5iYWNrZ3JvdW5kX3RocmVhZC5udW1fdGhyZWFk cyIsCi0JCSAgICAmbnVtX2JhY2tncm91bmRfdGhyZWFkcywgc2l6ZV90KTsKLQkJQ1RMX0dFVCgi c3RhdHMuYmFja2dyb3VuZF90aHJlYWQubnVtX3J1bnMiLAotCQkgICAgJmJhY2tncm91bmRfdGhy ZWFkX251bV9ydW5zLCB1aW50NjRfdCk7Ci0JCUNUTF9HRVQoInN0YXRzLmJhY2tncm91bmRfdGhy ZWFkLnJ1bl9pbnRlcnZhbCIsCi0JCSAgICAmYmFja2dyb3VuZF90aHJlYWRfcnVuX2ludGVydmFs LCB1aW50NjRfdCk7Ci0JfSBlbHNlIHsKLQkJbnVtX2JhY2tncm91bmRfdGhyZWFkcyA9IDA7Ci0J CWJhY2tncm91bmRfdGhyZWFkX251bV9ydW5zID0gMDsKLQkJYmFja2dyb3VuZF90aHJlYWRfcnVu X2ludGVydmFsID0gMDsKLQl9Ci0KLQkvKiBHZW5lcmljIGdsb2JhbCBzdGF0cy4gKi8KLQllbWl0 dGVyX2pzb25fb2JqZWN0X2t2X2JlZ2luKGVtaXR0ZXIsICJzdGF0cyIpOwotCWVtaXR0ZXJfanNv bl9rdihlbWl0dGVyLCAiYWxsb2NhdGVkIiwgZW1pdHRlcl90eXBlX3NpemUsICZhbGxvY2F0ZWQp OwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAiYWN0aXZlIiwgZW1pdHRlcl90eXBlX3NpemUs ICZhY3RpdmUpOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAibWV0YWRhdGEiLCBlbWl0dGVy X3R5cGVfc2l6ZSwgJm1ldGFkYXRhKTsKLQllbWl0dGVyX2pzb25fa3YoZW1pdHRlciwgIm1ldGFk YXRhX3RocCIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCSAgICAmbWV0YWRhdGFfdGhwKTsKLQllbWl0 dGVyX2pzb25fa3YoZW1pdHRlciwgInJlc2lkZW50IiwgZW1pdHRlcl90eXBlX3NpemUsICZyZXNp ZGVudCk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJtYXBwZWQiLCBlbWl0dGVyX3R5cGVf c2l6ZSwgJm1hcHBlZCk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJyZXRhaW5lZCIsIGVt aXR0ZXJfdHlwZV9zaXplLCAmcmV0YWluZWQpOwotCWVtaXR0ZXJfanNvbl9rdihlbWl0dGVyLCAi emVyb19yZWFsbG9jcyIsIGVtaXR0ZXJfdHlwZV9zaXplLAotCSAgICAmemVyb19yZWFsbG9jcyk7 Ci0KLQllbWl0dGVyX3RhYmxlX3ByaW50ZihlbWl0dGVyLCAiQWxsb2NhdGVkOiAlenUsIGFjdGl2 ZTogJXp1LCAiCi0JICAgICJtZXRhZGF0YTogJXp1IChuX3RocCAlenUpLCByZXNpZGVudDogJXp1 LCBtYXBwZWQ6ICV6dSwgIgotCSAgICAicmV0YWluZWQ6ICV6dVxuIiwgYWxsb2NhdGVkLCBhY3Rp dmUsIG1ldGFkYXRhLCBtZXRhZGF0YV90aHAsCi0JICAgIHJlc2lkZW50LCBtYXBwZWQsIHJldGFp bmVkKTsKLQotCS8qIFN0cmFuZ2UgYmVoYXZpb3JzICovCi0JZW1pdHRlcl90YWJsZV9wcmludGYo ZW1pdHRlciwKLQkgICAgIkNvdW50IG9mIHJlYWxsb2Mobm9uLW51bGwtcHRyLCAwKSBjYWxsczog JXp1XG4iLCB6ZXJvX3JlYWxsb2NzKTsKLQotCS8qIEJhY2tncm91bmQgdGhyZWFkIHN0YXRzLiAq LwotCWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgImJhY2tncm91bmRfdGhy ZWFkIik7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJudW1fdGhyZWFkcyIsIGVtaXR0ZXJf dHlwZV9zaXplLAotCSAgICAmbnVtX2JhY2tncm91bmRfdGhyZWFkcyk7Ci0JZW1pdHRlcl9qc29u X2t2KGVtaXR0ZXIsICJudW1fcnVucyIsIGVtaXR0ZXJfdHlwZV91aW50NjQsCi0JICAgICZiYWNr Z3JvdW5kX3RocmVhZF9udW1fcnVucyk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJydW5f aW50ZXJ2YWwiLCBlbWl0dGVyX3R5cGVfdWludDY0LAotCSAgICAmYmFja2dyb3VuZF90aHJlYWRf cnVuX2ludGVydmFsKTsKLQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsgLyogQ2xv c2UgImJhY2tncm91bmRfdGhyZWFkIi4gKi8KLQotCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0 ZXIsICJCYWNrZ3JvdW5kIHRocmVhZHM6ICV6dSwgIgotCSAgICAibnVtX3J1bnM6ICUiRk1UdTY0 IiwgcnVuX2ludGVydmFsOiAlIkZNVHU2NCIgbnNcbiIsCi0JICAgIG51bV9iYWNrZ3JvdW5kX3Ro cmVhZHMsIGJhY2tncm91bmRfdGhyZWFkX251bV9ydW5zLAotCSAgICBiYWNrZ3JvdW5kX3RocmVh ZF9ydW5faW50ZXJ2YWwpOwotCi0JaWYgKG11dGV4KSB7Ci0JCWVtaXR0ZXJfcm93X3Qgcm93Owot CQllbWl0dGVyX2NvbF90IG5hbWU7Ci0JCWVtaXR0ZXJfY29sX3QgY29sNjRbbXV0ZXhfcHJvZl9u dW1fdWludDY0X3RfY291bnRlcnNdOwotCQllbWl0dGVyX2NvbF90IGNvbDMyW211dGV4X3Byb2Zf bnVtX3VpbnQzMl90X2NvdW50ZXJzXTsKLQkJdWludDY0X3QgdXB0aW1lOwotCi0JCWVtaXR0ZXJf cm93X2luaXQoJnJvdyk7Ci0JCW11dGV4X3N0YXRzX2luaXRfY29scygmcm93LCAiIiwgJm5hbWUs IGNvbDY0LCBjb2wzMik7Ci0KLQkJZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7Ci0J CWVtaXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgIm11dGV4ZXMiKTsKLQotCQlD VExfTTJfR0VUKCJzdGF0cy5hcmVuYXMuMC51cHRpbWUiLCAwLCAmdXB0aW1lLCB1aW50NjRfdCk7 Ci0KLQkJc2l6ZV90IHN0YXRzX211dGV4ZXNfbWliW0NUTF9NQVhfREVQVEhdOwotCQlDVExfTEVB Rl9QUkVQQVJFKHN0YXRzX211dGV4ZXNfbWliLCAwLCAic3RhdHMubXV0ZXhlcyIpOwotCQlmb3Ig KGludCBpID0gMDsgaSA8IG11dGV4X3Byb2ZfbnVtX2dsb2JhbF9tdXRleGVzOyBpKyspIHsKLQkJ CW11dGV4X3N0YXRzX3JlYWRfZ2xvYmFsKHN0YXRzX211dGV4ZXNfbWliLCAyLAotCQkJICAgIGds b2JhbF9tdXRleF9uYW1lc1tpXSwgJm5hbWUsIGNvbDY0LCBjb2wzMiwgdXB0aW1lKTsKLQkJCWVt aXR0ZXJfanNvbl9vYmplY3Rfa3ZfYmVnaW4oZW1pdHRlciwgZ2xvYmFsX211dGV4X25hbWVzW2ld KTsKLQkJCW11dGV4X3N0YXRzX2VtaXQoZW1pdHRlciwgJnJvdywgY29sNjQsIGNvbDMyKTsKLQkJ CWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOwotCQl9Ci0KLQkJZW1pdHRlcl9qc29u X29iamVjdF9lbmQoZW1pdHRlcik7IC8qIENsb3NlICJtdXRleGVzIi4gKi8KLQl9Ci0KLQllbWl0 dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgInN0YXRzIi4gKi8KLQotCWlm IChtZXJnZWQgfHwgZGVzdHJveWVkIHx8IHVubWVyZ2VkKSB7Ci0JCXVuc2lnbmVkIG5hcmVuYXM7 Ci0KLQkJZW1pdHRlcl9qc29uX29iamVjdF9rdl9iZWdpbihlbWl0dGVyLCAic3RhdHMuYXJlbmFz Iik7Ci0KLQkJQ1RMX0dFVCgiYXJlbmFzLm5hcmVuYXMiLCAmbmFyZW5hcywgdW5zaWduZWQpOwot CQlzaXplX3QgbWliWzNdOwotCQlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYikgLyBzaXplb2Yo c2l6ZV90KTsKLQkJc2l6ZV90IHN6OwotCQlWQVJJQUJMRV9BUlJBWShib29sLCBpbml0aWFsaXpl ZCwgbmFyZW5hcyk7Ci0JCWJvb2wgZGVzdHJveWVkX2luaXRpYWxpemVkOwotCQl1bnNpZ25lZCBp LCBqLCBuaW5pdGlhbGl6ZWQ7Ci0KLQkJeG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAuaW5pdGlh bGl6ZWQiLCBtaWIsICZtaWJsZW4pOwotCQlmb3IgKGkgPSBuaW5pdGlhbGl6ZWQgPSAwOyBpIDwg bmFyZW5hczsgaSsrKSB7Ci0JCQltaWJbMV0gPSBpOwotCQkJc3ogPSBzaXplb2YoYm9vbCk7Ci0J CQl4bWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmaW5pdGlhbGl6ZWRbaV0sICZzeiwKLQkJCSAg ICBOVUxMLCAwKTsKLQkJCWlmIChpbml0aWFsaXplZFtpXSkgewotCQkJCW5pbml0aWFsaXplZCsr OwotCQkJfQotCQl9Ci0JCW1pYlsxXSA9IE1BTExDVExfQVJFTkFTX0RFU1RST1lFRDsKLQkJc3og PSBzaXplb2YoYm9vbCk7Ci0JCXhtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZkZXN0cm95ZWRf aW5pdGlhbGl6ZWQsICZzeiwKLQkJICAgIE5VTEwsIDApOwotCi0JCS8qIE1lcmdlZCBzdGF0cy4g Ki8KLQkJaWYgKG1lcmdlZCAmJiAobmluaXRpYWxpemVkID4gMSB8fCAhdW5tZXJnZWQpKSB7Ci0J CQkvKiBQcmludCBtZXJnZWQgYXJlbmEgc3RhdHMuICovCi0JCQllbWl0dGVyX3RhYmxlX3ByaW50 ZihlbWl0dGVyLCAiTWVyZ2VkIGFyZW5hcyBzdGF0czpcbiIpOwotCQkJZW1pdHRlcl9qc29uX29i amVjdF9rdl9iZWdpbihlbWl0dGVyLCAibWVyZ2VkIik7Ci0JCQlzdGF0c19hcmVuYV9wcmludChl bWl0dGVyLCBNQUxMQ1RMX0FSRU5BU19BTEwsIGJpbnMsCi0JCQkgICAgbGFyZ2UsIG11dGV4LCBl eHRlbnRzLCBocGEpOwotCQkJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7IC8qIENs b3NlICJtZXJnZWQiLiAqLwotCQl9Ci0KLQkJLyogRGVzdHJveWVkIHN0YXRzLiAqLwotCQlpZiAo ZGVzdHJveWVkX2luaXRpYWxpemVkICYmIGRlc3Ryb3llZCkgewotCQkJLyogUHJpbnQgZGVzdHJv eWVkIGFyZW5hIHN0YXRzLiAqLwotCQkJZW1pdHRlcl90YWJsZV9wcmludGYoZW1pdHRlciwKLQkJ CSAgICAiRGVzdHJveWVkIGFyZW5hcyBzdGF0czpcbiIpOwotCQkJZW1pdHRlcl9qc29uX29iamVj dF9rdl9iZWdpbihlbWl0dGVyLCAiZGVzdHJveWVkIik7Ci0JCQlzdGF0c19hcmVuYV9wcmludChl bWl0dGVyLCBNQUxMQ1RMX0FSRU5BU19ERVNUUk9ZRUQsCi0JCQkgICAgYmlucywgbGFyZ2UsIG11 dGV4LCBleHRlbnRzLCBocGEpOwotCQkJZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7 IC8qIENsb3NlICJkZXN0cm95ZWQiLiAqLwotCQl9Ci0KLQkJLyogVW5tZXJnZWQgc3RhdHMuICov Ci0JCWlmICh1bm1lcmdlZCkgewotCQkJZm9yIChpID0gaiA9IDA7IGkgPCBuYXJlbmFzOyBpKysp IHsKLQkJCQlpZiAoaW5pdGlhbGl6ZWRbaV0pIHsKLQkJCQkJY2hhciBhcmVuYV9pbmRfc3RyWzIw XTsKLQkJCQkJbWFsbG9jX3NucHJpbnRmKGFyZW5hX2luZF9zdHIsCi0JCQkJCSAgICBzaXplb2Yo YXJlbmFfaW5kX3N0ciksICIldSIsIGkpOwotCQkJCQllbWl0dGVyX2pzb25fb2JqZWN0X2t2X2Jl Z2luKGVtaXR0ZXIsCi0JCQkJCSAgICBhcmVuYV9pbmRfc3RyKTsKLQkJCQkJZW1pdHRlcl90YWJs ZV9wcmludGYoZW1pdHRlciwKLQkJCQkJICAgICJhcmVuYXNbJXNdOlxuIiwgYXJlbmFfaW5kX3N0 cik7Ci0JCQkJCXN0YXRzX2FyZW5hX3ByaW50KGVtaXR0ZXIsIGksIGJpbnMsCi0JCQkJCSAgICBs YXJnZSwgbXV0ZXgsIGV4dGVudHMsIGhwYSk7Ci0JCQkJCS8qIENsb3NlICI8YXJlbmEtaW5kPiIu ICovCi0JCQkJCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOwotCQkJCX0KLQkJCX0K LQkJfQotCQllbWl0dGVyX2pzb25fb2JqZWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgInN0YXRz LmFyZW5hcyIuICovCi0JfQotfQotCi12b2lkCi1zdGF0c19wcmludCh3cml0ZV9jYl90ICp3cml0 ZV9jYiwgdm9pZCAqY2JvcGFxdWUsIGNvbnN0IGNoYXIgKm9wdHMpIHsKLQlpbnQgZXJyOwotCXVp bnQ2NF90IGVwb2NoOwotCXNpemVfdCB1NjRzejsKLSNkZWZpbmUgT1BUSU9OKG8sIHYsIGQsIHMp IGJvb2wgdiA9IGQ7Ci0JU1RBVFNfUFJJTlRfT1BUSU9OUwotI3VuZGVmIE9QVElPTgotCi0JLyoK LQkgKiBSZWZyZXNoIHN0YXRzLCBpbiBjYXNlIG1hbGxjdGwoKSB3YXMgY2FsbGVkIGJ5IHRoZSBh cHBsaWNhdGlvbi4KLQkgKgotCSAqIENoZWNrIGZvciBPT00gaGVyZSwgc2luY2UgcmVmcmVzaGlu ZyB0aGUgY3RsIGNhY2hlIGNhbiB0cmlnZ2VyCi0JICogYWxsb2NhdGlvbi4gIEluIHByYWN0aWNl LCBub25lIG9mIHRoZSBzdWJzZXF1ZW50IG1hbGxjdGwoKS1yZWxhdGVkCi0JICogY2FsbHMgaW4g dGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIE9PTSBpZiB0aGlzIG9uZSBzdWNjZWVkcy4KLQkgKiAq LwotCWVwb2NoID0gMTsKLQl1NjRzeiA9IHNpemVvZih1aW50NjRfdCk7Ci0JZXJyID0gamVfbWFs bGN0bCgiZXBvY2giLCAodm9pZCAqKSZlcG9jaCwgJnU2NHN6LCAodm9pZCAqKSZlcG9jaCwKLQkg ICAgc2l6ZW9mKHVpbnQ2NF90KSk7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCWlmIChlcnIgPT0gRUFH QUlOKSB7Ci0JCQltYWxsb2Nfd3JpdGUoIjxqZW1hbGxvYz46IE1lbW9yeSBhbGxvY2F0aW9uIGZh aWx1cmUgaW4gIgotCQkJICAgICJtYWxsY3RsKFwiZXBvY2hcIiwgLi4uKVxuIik7Ci0JCQlyZXR1 cm47Ci0JCX0KLQkJbWFsbG9jX3dyaXRlKCI8amVtYWxsb2M+OiBGYWlsdXJlIGluIG1hbGxjdGwo XCJlcG9jaFwiLCAiCi0JCSAgICAiLi4uKVxuIik7Ci0JCWFib3J0KCk7Ci0JfQotCi0JaWYgKG9w dHMgIT0gTlVMTCkgewotCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBvcHRzW2ldICE9ICdcMCc7IGkr KykgewotCQkJc3dpdGNoIChvcHRzW2ldKSB7Ci0jZGVmaW5lIE9QVElPTihvLCB2LCBkLCBzKSBj YXNlIG86IHYgPSBzOyBicmVhazsKLQkJCQlTVEFUU19QUklOVF9PUFRJT05TCi0jdW5kZWYgT1BU SU9OCi0JCQlkZWZhdWx0OjsKLQkJCX0KLQkJfQotCX0KLQotCWVtaXR0ZXJfdCBlbWl0dGVyOwot CWVtaXR0ZXJfaW5pdCgmZW1pdHRlciwKLQkgICAganNvbiA/IGVtaXR0ZXJfb3V0cHV0X2pzb25f Y29tcGFjdCA6IGVtaXR0ZXJfb3V0cHV0X3RhYmxlLAotCSAgICB3cml0ZV9jYiwgY2JvcGFxdWUp OwotCWVtaXR0ZXJfYmVnaW4oJmVtaXR0ZXIpOwotCWVtaXR0ZXJfdGFibGVfcHJpbnRmKCZlbWl0 dGVyLCAiX19fIEJlZ2luIGplbWFsbG9jIHN0YXRpc3RpY3MgX19fXG4iKTsKLQllbWl0dGVyX2pz b25fb2JqZWN0X2t2X2JlZ2luKCZlbWl0dGVyLCAiamVtYWxsb2MiKTsKLQotCWlmIChnZW5lcmFs KSB7Ci0JCXN0YXRzX2dlbmVyYWxfcHJpbnQoJmVtaXR0ZXIpOwotCX0KLQlpZiAoY29uZmlnX3N0 YXRzKSB7Ci0JCXN0YXRzX3ByaW50X2hlbHBlcigmZW1pdHRlciwgbWVyZ2VkLCBkZXN0cm95ZWQs IHVubWVyZ2VkLAotCQkgICAgYmlucywgbGFyZ2UsIG11dGV4LCBleHRlbnRzLCBocGEpOwotCX0K LQotCWVtaXR0ZXJfanNvbl9vYmplY3RfZW5kKCZlbWl0dGVyKTsgLyogQ2xvc2VzIHRoZSAiamVt YWxsb2MiIGRpY3QuICovCi0JZW1pdHRlcl90YWJsZV9wcmludGYoJmVtaXR0ZXIsICItLS0gRW5k IGplbWFsbG9jIHN0YXRpc3RpY3MgLS0tXG4iKTsKLQllbWl0dGVyX2VuZCgmZW1pdHRlcik7Ci19 Ci0KLXVpbnQ2NF90Ci1zdGF0c19pbnRlcnZhbF9uZXdfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7 Ci0JcmV0dXJuIHN0YXRzX2ludGVydmFsX2FjY3VtX2JhdGNoOwotfQotCi11aW50NjRfdAotc3Rh dHNfaW50ZXJ2YWxfcG9zdHBvbmVkX2V2ZW50X3dhaXQodHNkX3QgKnRzZCkgewotCXJldHVybiBU RV9NSU5fU1RBUlRfV0FJVDsKLX0KLQotdm9pZAotc3RhdHNfaW50ZXJ2YWxfZXZlbnRfaGFuZGxl cih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKSB7Ci0JYXNzZXJ0KGVsYXBzZWQgPiAwICYm IGVsYXBzZWQgIT0gVEVfSU5WQUxJRF9FTEFQU0VEKTsKLQlpZiAoY291bnRlcl9hY2N1bSh0c2Rf dHNkbih0c2QpLCAmc3RhdHNfaW50ZXJ2YWxfYWNjdW11bGF0ZWQsCi0JICAgIGVsYXBzZWQpKSB7 Ci0JCWplX21hbGxvY19zdGF0c19wcmludChOVUxMLCBOVUxMLCBvcHRfc3RhdHNfaW50ZXJ2YWxf b3B0cyk7Ci0JfQotfQotCi1ib29sCi1zdGF0c19ib290KHZvaWQpIHsKLQl1aW50NjRfdCBzdGF0 c19pbnRlcnZhbDsKLQlpZiAob3B0X3N0YXRzX2ludGVydmFsIDwgMCkgewotCQlhc3NlcnQob3B0 X3N0YXRzX2ludGVydmFsID09IC0xKTsKLQkJc3RhdHNfaW50ZXJ2YWwgPSAwOwotCQlzdGF0c19p bnRlcnZhbF9hY2N1bV9iYXRjaCA9IDA7Ci0JfSBlbHNlewotCQkvKiBTZWUgY29tbWVudHMgaW4g c3RhdHMuaCAqLwotCQlzdGF0c19pbnRlcnZhbCA9IChvcHRfc3RhdHNfaW50ZXJ2YWwgPiAwKSA/ Ci0JCSAgICBvcHRfc3RhdHNfaW50ZXJ2YWwgOiAxOwotCQl1aW50NjRfdCBiYXRjaCA9IHN0YXRz X2ludGVydmFsID4+Ci0JCSAgICBTVEFUU19JTlRFUlZBTF9BQ0NVTV9MR19CQVRDSF9TSVpFOwot CQlpZiAoYmF0Y2ggPiBTVEFUU19JTlRFUlZBTF9BQ0NVTV9CQVRDSF9NQVgpIHsKLQkJCWJhdGNo ID0gU1RBVFNfSU5URVJWQUxfQUNDVU1fQkFUQ0hfTUFYOwotCQl9IGVsc2UgaWYgKGJhdGNoID09 IDApIHsKLQkJCWJhdGNoID0gMTsKLQkJfQotCQlzdGF0c19pbnRlcnZhbF9hY2N1bV9iYXRjaCA9 IGJhdGNoOwotCX0KLQotCXJldHVybiBjb3VudGVyX2FjY3VtX2luaXQoJnN0YXRzX2ludGVydmFs X2FjY3VtdWxhdGVkLCBzdGF0c19pbnRlcnZhbCk7Ci19Ci0KLXZvaWQKLXN0YXRzX3ByZWZvcmso dHNkbl90ICp0c2RuKSB7Ci0JY291bnRlcl9wcmVmb3JrKHRzZG4sICZzdGF0c19pbnRlcnZhbF9h Y2N1bXVsYXRlZCk7Ci19Ci0KLXZvaWQKLXN0YXRzX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRz ZG4pIHsKLQljb3VudGVyX3Bvc3Rmb3JrX3BhcmVudCh0c2RuLCAmc3RhdHNfaW50ZXJ2YWxfYWNj dW11bGF0ZWQpOwotfQotCi12b2lkCi1zdGF0c19wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4p IHsKLQljb3VudGVyX3Bvc3Rmb3JrX2NoaWxkKHRzZG4sICZzdGF0c19pbnRlcnZhbF9hY2N1bXVs YXRlZCk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvc3JjL3N6LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9z cmMvc3ouYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMxMTVkZC4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvc3ouYworKysg L2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv amVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxv Y19pbnRlcm5hbF9pbmNsdWRlcy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3N6Lmgi Ci0KLUpFTUFMTE9DX0FMSUdORUQoQ0FDSEVMSU5FKQotc2l6ZV90IHN6X3BpbmQyc3pfdGFiW1ND X05QU0laRVMrMV07Ci1zaXplX3Qgc3pfbGFyZ2VfcGFkOwotCi1zaXplX3QKLXN6X3Bzel9xdWFu dGl6ZV9mbG9vcihzaXplX3Qgc2l6ZSkgewotCXNpemVfdCByZXQ7Ci0JcHN6aW5kX3QgcGluZDsK LQotCWFzc2VydChzaXplID4gMCk7Ci0JYXNzZXJ0KChzaXplICYgUEFHRV9NQVNLKSA9PSAwKTsK LQotCXBpbmQgPSBzel9wc3oyaW5kKHNpemUgLSBzel9sYXJnZV9wYWQgKyAxKTsKLQlpZiAocGlu ZCA9PSAwKSB7Ci0JCS8qCi0JCSAqIEF2b2lkIHVuZGVyZmxvdy4gIFRoaXMgc2hvcnQtY2lyY3Vp dCB3b3VsZCBhbHNvIGRvIHRoZSByaWdodAotCQkgKiB0aGluZyBmb3IgYWxsIHNpemVzIGluIHRo ZSByYW5nZSBmb3Igd2hpY2ggdGhlcmUgYXJlCi0JCSAqIFBBR0Utc3BhY2VkIHNpemUgY2xhc3Nl cywgYnV0IGl0J3Mgc2ltcGxlc3QgdG8ganVzdCBoYW5kbGUKLQkJICogdGhlIG9uZSBjYXNlIHRo YXQgd291bGQgY2F1c2UgZXJyb25lb3VzIHJlc3VsdHMuCi0JCSAqLwotCQlyZXR1cm4gc2l6ZTsK LQl9Ci0JcmV0ID0gc3pfcGluZDJzeihwaW5kIC0gMSkgKyBzel9sYXJnZV9wYWQ7Ci0JYXNzZXJ0 KHJldCA8PSBzaXplKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zaXplX3QKLXN6X3Bzel9xdWFudGl6 ZV9jZWlsKHNpemVfdCBzaXplKSB7Ci0Jc2l6ZV90IHJldDsKLQotCWFzc2VydChzaXplID4gMCk7 Ci0JYXNzZXJ0KHNpemUgLSBzel9sYXJnZV9wYWQgPD0gU0NfTEFSR0VfTUFYQ0xBU1MpOwotCWFz c2VydCgoc2l6ZSAmIFBBR0VfTUFTSykgPT0gMCk7Ci0KLQlyZXQgPSBzel9wc3pfcXVhbnRpemVf Zmxvb3Ioc2l6ZSk7Ci0JaWYgKHJldCA8IHNpemUpIHsKLQkJLyoKLQkJICogU2tpcCBhIHF1YW50 aXphdGlvbiB0aGF0IG1heSBoYXZlIGFuIGFkZXF1YXRlbHkgbGFyZ2UgZXh0ZW50LAotCQkgKiBi ZWNhdXNlIHVuZGVyLXNpemVkIGV4dGVudHMgbWF5IGJlIG1peGVkIGluLiAgVGhpcyBvbmx5Ci0J CSAqIGhhcHBlbnMgd2hlbiBhbiB1bnVzdWFsIHNpemUgaXMgcmVxdWVzdGVkLCBpLmUuIGZvciBh bGlnbmVkCi0JCSAqIGFsbG9jYXRpb24sIGFuZCBpcyBqdXN0IG9uZSBvZiBzZXZlcmFsIHBsYWNl cyB3aGVyZSBsaW5lYXIKLQkJICogc2VhcmNoIHdvdWxkIHBvdGVudGlhbGx5IGZpbmQgc3VmZmlj aWVudGx5IGFsaWduZWQgYXZhaWxhYmxlCi0JCSAqIG1lbW9yeSBzb21ld2hlcmUgbG93ZXIuCi0J CSAqLwotCQlyZXQgPSBzel9waW5kMnN6KHN6X3BzejJpbmQocmV0IC0gc3pfbGFyZ2VfcGFkICsg MSkpICsKLQkJICAgIHN6X2xhcmdlX3BhZDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IHZvaWQKLXN6X2Jvb3RfcGluZDJzel90YWIoY29uc3Qgc2NfZGF0YV90ICpzY19kYXRhKSB7Ci0J aW50IHBpbmQgPSAwOwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBTQ19OU0laRVM7IGkrKykg ewotCQljb25zdCBzY190ICpzYyA9ICZzY19kYXRhLT5zY1tpXTsKLQkJaWYgKHNjLT5wc3opIHsK LQkJCXN6X3BpbmQyc3pfdGFiW3BpbmRdID0gKFpVKDEpIDw8IHNjLT5sZ19iYXNlKQotCQkJICAg ICsgKFpVKHNjLT5uZGVsdGEpIDw8IHNjLT5sZ19kZWx0YSk7Ci0JCQlwaW5kKys7Ci0JCX0KLQl9 Ci0JZm9yIChpbnQgaSA9IHBpbmQ7IGkgPD0gKGludClTQ19OUFNJWkVTOyBpKyspIHsKLQkJc3pf cGluZDJzel90YWJbcGluZF0gPSBzY19kYXRhLT5sYXJnZV9tYXhjbGFzcyArIFBBR0U7Ci0JfQot fQotCi1KRU1BTExPQ19BTElHTkVEKENBQ0hFTElORSkKLXNpemVfdCBzel9pbmRleDJzaXplX3Rh YltTQ19OU0laRVNdOwotCi1zdGF0aWMgdm9pZAotc3pfYm9vdF9pbmRleDJzaXplX3RhYihjb25z dCBzY19kYXRhX3QgKnNjX2RhdGEpIHsKLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgU0NfTlNJ WkVTOyBpKyspIHsKLQkJY29uc3Qgc2NfdCAqc2MgPSAmc2NfZGF0YS0+c2NbaV07Ci0JCXN6X2lu ZGV4MnNpemVfdGFiW2ldID0gKFpVKDEpIDw8IHNjLT5sZ19iYXNlKQotCQkgICAgKyAoWlUoc2Mt Pm5kZWx0YSkgPDwgKHNjLT5sZ19kZWx0YSkpOwotCX0KLX0KLQotLyoKLSAqIFRvIGtlZXAgdGhp cyB0YWJsZSBzbWFsbCwgd2UgZGl2aWRlIHNpemVzIGJ5IHRoZSB0aW55IG1pbiBzaXplLCB3aGlj aCBnaXZlcwotICogdGhlIHNtYWxsZXN0IGludGVydmFsIGZvciB3aGljaCB0aGUgcmVzdWx0IGNh biBjaGFuZ2UuCi0gKi8KLUpFTUFMTE9DX0FMSUdORUQoQ0FDSEVMSU5FKQotdWludDhfdCBzel9z aXplMmluZGV4X3RhYlsoU0NfTE9PS1VQX01BWENMQVNTID4+IFNDX0xHX1RJTllfTUlOKSArIDFd OwotCi1zdGF0aWMgdm9pZAotc3pfYm9vdF9zaXplMmluZGV4X3RhYihjb25zdCBzY19kYXRhX3Qg KnNjX2RhdGEpIHsKLQlzaXplX3QgZHN0X21heCA9IChTQ19MT09LVVBfTUFYQ0xBU1MgPj4gU0Nf TEdfVElOWV9NSU4pICsgMTsKLQlzaXplX3QgZHN0X2luZCA9IDA7Ci0JZm9yICh1bnNpZ25lZCBz Y19pbmQgPSAwOyBzY19pbmQgPCBTQ19OU0laRVMgJiYgZHN0X2luZCA8IGRzdF9tYXg7Ci0JICAg IHNjX2luZCsrKSB7Ci0JCWNvbnN0IHNjX3QgKnNjID0gJnNjX2RhdGEtPnNjW3NjX2luZF07Ci0J CXNpemVfdCBzeiA9IChaVSgxKSA8PCBzYy0+bGdfYmFzZSkKLQkJICAgICsgKFpVKHNjLT5uZGVs dGEpIDw8IHNjLT5sZ19kZWx0YSk7Ci0JCXNpemVfdCBtYXhfaW5kID0gKChzeiArIChaVSgxKSA8 PCBTQ19MR19USU5ZX01JTikgLSAxKQotCQkJCSAgID4+IFNDX0xHX1RJTllfTUlOKTsKLQkJZm9y ICg7IGRzdF9pbmQgPD0gbWF4X2luZCAmJiBkc3RfaW5kIDwgZHN0X21heDsgZHN0X2luZCsrKSB7 Ci0JCQlzel9zaXplMmluZGV4X3RhYltkc3RfaW5kXSA9IHNjX2luZDsKLQkJfQotCX0KLX0KLQot dm9pZAotc3pfYm9vdChjb25zdCBzY19kYXRhX3QgKnNjX2RhdGEsIGJvb2wgY2FjaGVfb2JsaXZp b3VzKSB7Ci0Jc3pfbGFyZ2VfcGFkID0gY2FjaGVfb2JsaXZpb3VzID8gUEFHRSA6IDA7Ci0Jc3pf Ym9vdF9waW5kMnN6X3RhYihzY19kYXRhKTsKLQlzel9ib290X2luZGV4MnNpemVfdGFiKHNjX2Rh dGEpOwotCXN6X2Jvb3Rfc2l6ZTJpbmRleF90YWIoc2NfZGF0YSk7Ci19CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RjYWNoZS5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RjYWNoZS5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTE2NzMyLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90Y2FjaGUuYworKysgL2Rldi9udWxsCkBA IC0xLDExMDEgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3By ZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxf aW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgotI2lu Y2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvc2FmZXR5X2NoZWNrLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuLmgi Ci0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2MuaCIKLQotLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KLS8qIERhdGEuICovCi0KLWJvb2wgb3B0X3RjYWNoZSA9IHRydWU7Ci0KLS8qIHRjYWNo ZV9tYXhjbGFzcyBpcyBzZXQgdG8gMzJLQiBieSBkZWZhdWx0LiAgKi8KLXNpemVfdCBvcHRfdGNh Y2hlX21heCA9ICgoc2l6ZV90KTEpIDw8IDE1OwotCi0vKiBSZWFzb25hYmxlIGRlZmF1bHRzIGZv ciBtaW4gYW5kIG1heCB2YWx1ZXMuICovCi11bnNpZ25lZCBvcHRfdGNhY2hlX25zbG90c19zbWFs bF9taW4gPSAyMDsKLXVuc2lnbmVkIG9wdF90Y2FjaGVfbnNsb3RzX3NtYWxsX21heCA9IDIwMDsK LXVuc2lnbmVkIG9wdF90Y2FjaGVfbnNsb3RzX2xhcmdlID0gMjA7Ci0KLS8qCi0gKiBXZSBhdHRl bXB0IHRvIG1ha2UgdGhlIG51bWJlciBvZiBzbG90cyBpbiBhIHRjYWNoZSBiaW4gZm9yIGEgZ2l2 ZW4gc2l6ZSBjbGFzcwotICogZXF1YWwgdG8gdGhlIG51bWJlciBvZiBvYmplY3RzIGluIGEgc2xh YiB0aW1lcyBzb21lIG11bHRpcGxpZXIuICBCeSBkZWZhdWx0LAotICogdGhlIG11bHRpcGxpZXIg aXMgMiAoaS5lLiB3ZSBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHRj YWNoZQotICogdG8gdHdpY2UgdGhlIG51bWJlciBvZiBvYmplY3RzIGluIGEgc2xhYikuCi0gKiBU aGlzIGlzIGJvdW5kZWQgYnkgc29tZSBvdGhlciBjb25zdHJhaW50cyBhcyB3ZWxsLCBsaWtlIHRo ZSBmYWN0IHRoYXQgaXQKLSAqIG11c3QgYmUgZXZlbiwgbXVzdCBiZSBsZXNzIHRoYW4gb3B0X3Rj YWNoZV9uc2xvdHNfc21hbGxfbWF4LCBldGMuLgotICovCi1zc2l6ZV90CW9wdF9sZ190Y2FjaGVf bnNsb3RzX211bCA9IDE7Ci0KLS8qCi0gKiBOdW1iZXIgb2YgYWxsb2NhdGlvbiBieXRlcyBiZXR3 ZWVuIHRjYWNoZSBpbmNyZW1lbnRhbCBHQ3MuICBBZ2FpbiwgdGhpcwotICogZGVmYXVsdCBqdXN0 IHNlZW1zIHRvIHdvcmsgd2VsbDsgbW9yZSB0dW5pbmcgaXMgcG9zc2libGUuCi0gKi8KLXNpemVf dCBvcHRfdGNhY2hlX2djX2luY3JfYnl0ZXMgPSA2NTUzNjsKLQotLyoKLSAqIFdpdGggZGVmYXVs dCBzZXR0aW5ncywgd2UgbWF5IGVuZCB1cCBmbHVzaGluZyBzbWFsbCBiaW5zIGZyZXF1ZW50bHkg d2l0aAotICogc21hbGwgZmx1c2ggYW1vdW50cy4gIFRvIGxpbWl0IHRoaXMgdGVuZGVuY3ksIHdl IGNhbiBzZXQgYSBudW1iZXIgb2YgYnl0ZXMgdG8KLSAqICJkZWxheSIgYnkuICBJZiB3ZSB0cnkg dG8gZmx1c2ggTiBNLWJ5dGUgaXRlbXMsIHdlIGRlY3JlYXNlIHRoYXQgc2l6ZS1jbGFzcydzCi0g KiBkZWxheSBieSBOICogTS4gIFNvLCBpZiBkZWxheSBpcyAxMDI0IGFuZCB3ZSdyZSBsb29raW5n IGF0IHRoZSA2NC1ieXRlIHNpemUKLSAqIGNsYXNzLCB3ZSB3b24ndCBkbyBhbnkgZmx1c2hpbmcg dW50aWwgd2UndmUgYmVlbiBhc2tlZCB0byBmbHVzaCAxMDI0LzY0ID09IDE2Ci0gKiBpdGVtcy4g IFRoaXMgY2FuIGhhcHBlbiBpbiBhbnkgY29uZmlndXJhdGlvbiAoaS5lLiBiZWluZyBhc2tlZCB0 byBmbHVzaCAxNgotICogaXRlbXMgb25jZSwgb3IgNCBpdGVtcyA0IHRpbWVzKS4KLSAqCi0gKiBQ cmFjdGljYWxseSwgdGhpcyBpcyBzdG9yZWQgYXMgYSBjb3VudCBvZiBpdGVtcyBpbiBhIHVpbnQ4 X3QsIHNvIHRoZQotICogZWZmZWN0aXZlIG1heGltdW0gdmFsdWUgZm9yIGEgc2l6ZSBjbGFzcyBp cyAyNTUgKiBzei4KLSAqLwotc2l6ZV90IG9wdF90Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMgPSAwOwot Ci0vKgotICogV2hlbiBhIGNhY2hlIGJpbiBpcyBmbHVzaGVkIGJlY2F1c2UgaXQncyBmdWxsLCBo b3cgbXVjaCBvZiBpdCBkbyB3ZSBmbHVzaD8KLSAqIEJ5IGRlZmF1bHQsIHdlIGZsdXNoIGhhbGYg dGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLgotICovCi11bnNpZ25lZCBvcHRfbGdfdGNhY2hl X2ZsdXNoX3NtYWxsX2RpdiA9IDE7Ci11bnNpZ25lZCBvcHRfbGdfdGNhY2hlX2ZsdXNoX2xhcmdl X2RpdiA9IDE7Ci0KLWNhY2hlX2Jpbl9pbmZvX3QJKnRjYWNoZV9iaW5faW5mbzsKLQotLyogVG90 YWwgc3RhY2sgc2l6ZSByZXF1aXJlZCAocGVyIHRjYWNoZSkuICBJbmNsdWRlIHRoZSBwYWRkaW5n IGFib3ZlLiAqLwotc3RhdGljIHNpemVfdCB0Y2FjaGVfYmluX2FsbG9jX3NpemU7Ci1zdGF0aWMg c2l6ZV90IHRjYWNoZV9iaW5fYWxsb2NfYWxpZ25tZW50OwotCi0vKiBOdW1iZXIgb2YgY2FjaGUg YmlucyBlbmFibGVkLCBpbmNsdWRpbmcgYm90aCBsYXJnZSBhbmQgc21hbGwuICovCi11bnNpZ25l ZAkJbmhiaW5zOwotLyogTWF4IHNpemUgY2xhc3MgdG8gYmUgY2FjaGVkIChjYW4gYmUgc21hbGwg b3IgbGFyZ2UpLiAqLwotc2l6ZV90CQkJdGNhY2hlX21heGNsYXNzOwotCi10Y2FjaGVzX3QJCSp0 Y2FjaGVzOwotCi0vKiBJbmRleCBvZiBmaXJzdCBlbGVtZW50IHdpdGhpbiB0Y2FjaGVzIHRoYXQg aGFzIG5ldmVyIGJlZW4gdXNlZC4gKi8KLXN0YXRpYyB1bnNpZ25lZAkJdGNhY2hlc19wYXN0Owot Ci0vKiBIZWFkIG9mIHNpbmdseSBsaW5rZWQgbGlzdCB0cmFja2luZyBhdmFpbGFibGUgdGNhY2hl cyBlbGVtZW50cy4gKi8KLXN0YXRpYyB0Y2FjaGVzX3QJKnRjYWNoZXNfYXZhaWw7Ci0KLS8qIFBy b3RlY3RzIHRjYWNoZXN7LF9wYXN0LF9hdmFpbH0uICovCi1zdGF0aWMgbWFsbG9jX211dGV4X3QJ dGNhY2hlc19tdHg7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXNpemVfdAotdGNhY2hl X3NhbGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0cikgewotCXJldHVybiBhcmVuYV9z YWxsb2ModHNkbiwgcHRyKTsKLX0KLQotdWludDY0X3QKLXRjYWNoZV9nY19uZXdfZXZlbnRfd2Fp dCh0c2RfdCAqdHNkKSB7Ci0JcmV0dXJuIG9wdF90Y2FjaGVfZ2NfaW5jcl9ieXRlczsKLX0KLQot dWludDY0X3QKLXRjYWNoZV9nY19wb3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7Ci0J cmV0dXJuIFRFX01JTl9TVEFSVF9XQUlUOwotfQotCi11aW50NjRfdAotdGNhY2hlX2djX2RhbGxv Y19uZXdfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKSB7Ci0JcmV0dXJuIG9wdF90Y2FjaGVfZ2NfaW5j cl9ieXRlczsKLX0KLQotdWludDY0X3QKLXRjYWNoZV9nY19kYWxsb2NfcG9zdHBvbmVkX2V2ZW50 X3dhaXQodHNkX3QgKnRzZCkgewotCXJldHVybiBURV9NSU5fU1RBUlRfV0FJVDsKLX0KLQotc3Rh dGljIHVpbnQ4X3QKLXRjYWNoZV9nY19pdGVtX2RlbGF5X2NvbXB1dGUoc3ppbmRfdCBzemluZCkg ewotCWFzc2VydChzemluZCA8IFNDX05CSU5TKTsKLQlzaXplX3Qgc3ogPSBzel9pbmRleDJzaXpl KHN6aW5kKTsKLQlzaXplX3QgaXRlbV9kZWxheSA9IG9wdF90Y2FjaGVfZ2NfZGVsYXlfYnl0ZXMg LyBzejsKLQlzaXplX3QgZGVsYXlfbWF4ID0gWlUoMSkKLQkgICAgPDwgKHNpemVvZigoKHRjYWNo ZV9zbG93X3QgKilOVUxMKS0+YmluX2ZsdXNoX2RlbGF5X2l0ZW1zWzBdKSAqIDgpOwotCWlmIChp dGVtX2RlbGF5ID49IGRlbGF5X21heCkgewotCQlpdGVtX2RlbGF5ID0gZGVsYXlfbWF4IC0gMTsK LQl9Ci0JcmV0dXJuICh1aW50OF90KWl0ZW1fZGVsYXk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10Y2Fj aGVfZ2Nfc21hbGwodHNkX3QgKnRzZCwgdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Nsb3csIHRjYWNo ZV90ICp0Y2FjaGUsCi0gICAgc3ppbmRfdCBzemluZCkgewotCS8qIEFpbSB0byBmbHVzaCAzLzQg b2YgaXRlbXMgYmVsb3cgbG93LXdhdGVyLiAqLwotCWFzc2VydChzemluZCA8IFNDX05CSU5TKTsK LQotCWNhY2hlX2Jpbl90ICpjYWNoZV9iaW4gPSAmdGNhY2hlLT5iaW5zW3N6aW5kXTsKLQljYWNo ZV9iaW5fc3pfdCBuY2FjaGVkID0gY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGNhY2hlX2Jp biwKLQkgICAgJnRjYWNoZV9iaW5faW5mb1tzemluZF0pOwotCWNhY2hlX2Jpbl9zel90IGxvd193 YXRlciA9IGNhY2hlX2Jpbl9sb3dfd2F0ZXJfZ2V0KGNhY2hlX2JpbiwKLQkgICAgJnRjYWNoZV9i aW5faW5mb1tzemluZF0pOwotCWFzc2VydCghdGNhY2hlX3Nsb3ctPmJpbl9yZWZpbGxlZFtzemlu ZF0pOwotCi0Jc2l6ZV90IG5mbHVzaCA9IGxvd193YXRlciAtIChsb3dfd2F0ZXIgPj4gMik7Ci0J aWYgKG5mbHVzaCA8IHRjYWNoZV9zbG93LT5iaW5fZmx1c2hfZGVsYXlfaXRlbXNbc3ppbmRdKSB7 Ci0JCS8qIFdvcmthcm91bmQgZm9yIGEgY29udmVyc2lvbiB3YXJuaW5nLiAqLwotCQl1aW50OF90 IG5mbHVzaF91aW50OCA9ICh1aW50OF90KW5mbHVzaDsKLQkJYXNzZXJ0KHNpemVvZih0Y2FjaGVf c2xvdy0+YmluX2ZsdXNoX2RlbGF5X2l0ZW1zWzBdKSA9PQotCQkgICAgc2l6ZW9mKG5mbHVzaF91 aW50OCkpOwotCQl0Y2FjaGVfc2xvdy0+YmluX2ZsdXNoX2RlbGF5X2l0ZW1zW3N6aW5kXSAtPSBu Zmx1c2hfdWludDg7Ci0JCXJldHVybjsKLQl9IGVsc2UgewotCQl0Y2FjaGVfc2xvdy0+YmluX2Zs dXNoX2RlbGF5X2l0ZW1zW3N6aW5kXQotCQkgICAgPSB0Y2FjaGVfZ2NfaXRlbV9kZWxheV9jb21w dXRlKHN6aW5kKTsKLQl9Ci0KLQl0Y2FjaGVfYmluX2ZsdXNoX3NtYWxsKHRzZCwgdGNhY2hlLCBj YWNoZV9iaW4sIHN6aW5kLAotCSAgICAodW5zaWduZWQpKG5jYWNoZWQgLSBuZmx1c2gpKTsKLQot CS8qCi0JICogUmVkdWNlIGZpbGwgY291bnQgYnkgMlguICBMaW1pdCBsZ19maWxsX2RpdiBzdWNo IHRoYXQKLQkgKiB0aGUgZmlsbCBjb3VudCBpcyBhbHdheXMgYXQgbGVhc3QgMS4KLQkgKi8KLQlp ZiAoKGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KCZ0Y2FjaGVfYmluX2luZm9bc3ppbmRdKQot CSAgICA+PiAodGNhY2hlX3Nsb3ctPmxnX2ZpbGxfZGl2W3N6aW5kXSArIDEpKSA+PSAxKSB7Ci0J CXRjYWNoZV9zbG93LT5sZ19maWxsX2RpdltzemluZF0rKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk Ci10Y2FjaGVfZ2NfbGFyZ2UodHNkX3QgKnRzZCwgdGNhY2hlX3Nsb3dfdCAqdGNhY2hlX3Nsb3cs IHRjYWNoZV90ICp0Y2FjaGUsCi0gICAgc3ppbmRfdCBzemluZCkgewotCS8qIExpa2UgdGhlIHNt YWxsIEdDOyBmbHVzaCAzLzQgb2YgdW50b3VjaGVkIGl0ZW1zLiAqLwotCWFzc2VydChzemluZCA+ PSBTQ19OQklOUyk7Ci0JY2FjaGVfYmluX3QgKmNhY2hlX2JpbiA9ICZ0Y2FjaGUtPmJpbnNbc3pp bmRdOwotCWNhY2hlX2Jpbl9zel90IG5jYWNoZWQgPSBjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9j YWwoY2FjaGVfYmluLAotCSAgICAmdGNhY2hlX2Jpbl9pbmZvW3N6aW5kXSk7Ci0JY2FjaGVfYmlu X3N6X3QgbG93X3dhdGVyID0gY2FjaGVfYmluX2xvd193YXRlcl9nZXQoY2FjaGVfYmluLAotCSAg ICAmdGNhY2hlX2Jpbl9pbmZvW3N6aW5kXSk7Ci0JdGNhY2hlX2Jpbl9mbHVzaF9sYXJnZSh0c2Qs IHRjYWNoZSwgY2FjaGVfYmluLCBzemluZCwKLQkgICAgKHVuc2lnbmVkKShuY2FjaGVkIC0gbG93 X3dhdGVyICsgKGxvd193YXRlciA+PiAyKSkpOwotfQotCi1zdGF0aWMgdm9pZAotdGNhY2hlX2V2 ZW50KHRzZF90ICp0c2QpIHsKLQl0Y2FjaGVfdCAqdGNhY2hlID0gdGNhY2hlX2dldCh0c2QpOwot CWlmICh0Y2FjaGUgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCi0JdGNhY2hlX3Nsb3dfdCAq dGNhY2hlX3Nsb3cgPSB0c2RfdGNhY2hlX3Nsb3dwX2dldCh0c2QpOwotCXN6aW5kX3Qgc3ppbmQg PSB0Y2FjaGVfc2xvdy0+bmV4dF9nY19iaW47Ci0JYm9vbCBpc19zbWFsbCA9IChzemluZCA8IFND X05CSU5TKTsKLQljYWNoZV9iaW5fdCAqY2FjaGVfYmluID0gJnRjYWNoZS0+Ymluc1tzemluZF07 Ci0KLQl0Y2FjaGVfYmluX2ZsdXNoX3N0YXNoZWQodHNkLCB0Y2FjaGUsIGNhY2hlX2Jpbiwgc3pp bmQsIGlzX3NtYWxsKTsKLQotCWNhY2hlX2Jpbl9zel90IGxvd193YXRlciA9IGNhY2hlX2Jpbl9s b3dfd2F0ZXJfZ2V0KGNhY2hlX2JpbiwKLQkgICAgJnRjYWNoZV9iaW5faW5mb1tzemluZF0pOwot CWlmIChsb3dfd2F0ZXIgPiAwKSB7Ci0JCWlmIChpc19zbWFsbCkgewotCQkJdGNhY2hlX2djX3Nt YWxsKHRzZCwgdGNhY2hlX3Nsb3csIHRjYWNoZSwgc3ppbmQpOwotCQl9IGVsc2UgewotCQkJdGNh Y2hlX2djX2xhcmdlKHRzZCwgdGNhY2hlX3Nsb3csIHRjYWNoZSwgc3ppbmQpOwotCQl9Ci0JfSBl bHNlIGlmIChpc19zbWFsbCAmJiB0Y2FjaGVfc2xvdy0+YmluX3JlZmlsbGVkW3N6aW5kXSkgewot CQlhc3NlcnQobG93X3dhdGVyID09IDApOwotCQkvKgotCQkgKiBJbmNyZWFzZSBmaWxsIGNvdW50 IGJ5IDJYIGZvciBzbWFsbCBiaW5zLiAgTWFrZSBzdXJlCi0JCSAqIGxnX2ZpbGxfZGl2IHN0YXlz IGdyZWF0ZXIgdGhhbiAwLgotCQkgKi8KLQkJaWYgKHRjYWNoZV9zbG93LT5sZ19maWxsX2Rpdltz emluZF0gPiAxKSB7Ci0JCQl0Y2FjaGVfc2xvdy0+bGdfZmlsbF9kaXZbc3ppbmRdLS07Ci0JCX0K LQkJdGNhY2hlX3Nsb3ctPmJpbl9yZWZpbGxlZFtzemluZF0gPSBmYWxzZTsKLQl9Ci0JY2FjaGVf YmluX2xvd193YXRlcl9zZXQoY2FjaGVfYmluKTsKLQotCXRjYWNoZV9zbG93LT5uZXh0X2djX2Jp bisrOwotCWlmICh0Y2FjaGVfc2xvdy0+bmV4dF9nY19iaW4gPT0gbmhiaW5zKSB7Ci0JCXRjYWNo ZV9zbG93LT5uZXh0X2djX2JpbiA9IDA7Ci0JfQotfQotCi12b2lkCi10Y2FjaGVfZ2NfZXZlbnRf aGFuZGxlcih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKSB7Ci0JYXNzZXJ0KGVsYXBzZWQg PT0gVEVfSU5WQUxJRF9FTEFQU0VEKTsKLQl0Y2FjaGVfZXZlbnQodHNkKTsKLX0KLQotdm9pZAot dGNhY2hlX2djX2RhbGxvY19ldmVudF9oYW5kbGVyKHRzZF90ICp0c2QsIHVpbnQ2NF90IGVsYXBz ZWQpIHsKLQlhc3NlcnQoZWxhcHNlZCA9PSBURV9JTlZBTElEX0VMQVBTRUQpOwotCXRjYWNoZV9l dmVudCh0c2QpOwotfQotCi12b2lkICoKLXRjYWNoZV9hbGxvY19zbWFsbF9oYXJkKHRzZG5fdCAq dHNkbiwgYXJlbmFfdCAqYXJlbmEsCi0gICAgdGNhY2hlX3QgKnRjYWNoZSwgY2FjaGVfYmluX3Qg KmNhY2hlX2Jpbiwgc3ppbmRfdCBiaW5pbmQsCi0gICAgYm9vbCAqdGNhY2hlX3N1Y2Nlc3MpIHsK LQl0Y2FjaGVfc2xvd190ICp0Y2FjaGVfc2xvdyA9IHRjYWNoZS0+dGNhY2hlX3Nsb3c7Ci0Jdm9p ZCAqcmV0OwotCi0JYXNzZXJ0KHRjYWNoZV9zbG93LT5hcmVuYSAhPSBOVUxMKTsKLQl1bnNpZ25l ZCBuZmlsbCA9IGNhY2hlX2Jpbl9pbmZvX25jYWNoZWRfbWF4KCZ0Y2FjaGVfYmluX2luZm9bYmlu aW5kXSkKLQkgICAgPj4gdGNhY2hlX3Nsb3ctPmxnX2ZpbGxfZGl2W2JpbmluZF07Ci0JYXJlbmFf Y2FjaGVfYmluX2ZpbGxfc21hbGwodHNkbiwgYXJlbmEsIGNhY2hlX2JpbiwKLQkgICAgJnRjYWNo ZV9iaW5faW5mb1tiaW5pbmRdLCBiaW5pbmQsIG5maWxsKTsKLQl0Y2FjaGVfc2xvdy0+YmluX3Jl ZmlsbGVkW2JpbmluZF0gPSB0cnVlOwotCXJldCA9IGNhY2hlX2Jpbl9hbGxvYyhjYWNoZV9iaW4s IHRjYWNoZV9zdWNjZXNzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCB2b2lk ICoKLXRjYWNoZV9iaW5fZmx1c2hfcHRyX2dldHRlcih2b2lkICphcnJfY3R4LCBzaXplX3QgaW5k KSB7Ci0JY2FjaGVfYmluX3B0cl9hcnJheV90ICphcnIgPSAoY2FjaGVfYmluX3B0cl9hcnJheV90 ICopYXJyX2N0eDsKLQlyZXR1cm4gYXJyLT5wdHJbaW5kXTsKLX0KLQotc3RhdGljIHZvaWQKLXRj YWNoZV9iaW5fZmx1c2hfbWV0YWRhdGFfdmlzaXRvcih2b2lkICpzemluZF9zdW1fY3R4LAotICAg IGVtYXBfZnVsbF9hbGxvY19jdHhfdCAqYWxsb2NfY3R4KSB7Ci0Jc2l6ZV90ICpzemluZF9zdW0g PSAoc2l6ZV90ICopc3ppbmRfc3VtX2N0eDsKLQkqc3ppbmRfc3VtIC09IGFsbG9jX2N0eC0+c3pp bmQ7Ci0JdXRpbF9wcmVmZXRjaF93cml0ZV9yYW5nZShhbGxvY19jdHgtPmVkYXRhLCBzaXplb2Yo ZWRhdGFfdCkpOwotfQotCi1KRU1BTExPQ19OT0lOTElORSBzdGF0aWMgdm9pZAotdGNhY2hlX2Jp bl9mbHVzaF9zaXplX2NoZWNrX2ZhaWwoY2FjaGVfYmluX3B0cl9hcnJheV90ICphcnIsIHN6aW5k X3Qgc3ppbmQsCi0gICAgc2l6ZV90IG5wdHJzLCBlbWFwX2JhdGNoX2xvb2t1cF9yZXN1bHRfdCAq ZWRhdGFzKSB7Ci0JYm9vbCBmb3VuZF9taXNtYXRjaCA9IGZhbHNlOwotCWZvciAoc2l6ZV90IGkg PSAwOyBpIDwgbnB0cnM7IGkrKykgewotCQlzemluZF90IHRydWVfc3ppbmQgPSBlZGF0YV9zemlu ZF9nZXQoZWRhdGFzW2ldLmVkYXRhKTsKLQkJaWYgKHRydWVfc3ppbmQgIT0gc3ppbmQpIHsKLQkJ CWZvdW5kX21pc21hdGNoID0gdHJ1ZTsKLQkJCXNhZmV0eV9jaGVja19mYWlsX3NpemVkX2RlYWxs b2MoCi0JCQkgICAgLyogY3VycmVudF9kZWFsbG9jICovIGZhbHNlLAotCQkJICAgIC8qIHB0ciAq LyB0Y2FjaGVfYmluX2ZsdXNoX3B0cl9nZXR0ZXIoYXJyLCBpKSwKLQkJCSAgICAvKiB0cnVlX3Np emUgKi8gc3pfaW5kZXgyc2l6ZSh0cnVlX3N6aW5kKSwKLQkJCSAgICAvKiBpbnB1dF9zaXplICov IHN6X2luZGV4MnNpemUoc3ppbmQpKTsKLQkJfQotCX0KLQlhc3NlcnQoZm91bmRfbWlzbWF0Y2gp OwotfQotCi1zdGF0aWMgdm9pZAotdGNhY2hlX2Jpbl9mbHVzaF9lZGF0YXNfbG9va3VwKHRzZF90 ICp0c2QsIGNhY2hlX2Jpbl9wdHJfYXJyYXlfdCAqYXJyLAotICAgIHN6aW5kX3QgYmluaW5kLCBz aXplX3QgbmZsdXNoLCBlbWFwX2JhdGNoX2xvb2t1cF9yZXN1bHRfdCAqZWRhdGFzKSB7Ci0KLQkv KgotCSAqIFRoaXMgZ2V0cyBjb21waWxlZCBhd2F5IHdoZW4gY29uZmlnX29wdF9zYWZldHlfY2hl Y2tzIGlzIGZhbHNlLgotCSAqIENoZWNrcyBmb3Igc2l6ZWQgZGVhbGxvY2F0aW9uIGJ1Z3MsIGZh aWxpbmcgZWFybHkgcmF0aGVyIHRoYW4KLQkgKiBjb3JydXB0aW5nIG1ldGFkYXRhLgotCSAqLwot CXNpemVfdCBzemluZF9zdW0gPSBiaW5pbmQgKiBuZmx1c2g7Ci0JZW1hcF9lZGF0YV9sb29rdXBf YmF0Y2godHNkLCAmYXJlbmFfZW1hcF9nbG9iYWwsIG5mbHVzaCwKLQkgICAgJnRjYWNoZV9iaW5f Zmx1c2hfcHRyX2dldHRlciwgKHZvaWQgKilhcnIsCi0JICAgICZ0Y2FjaGVfYmluX2ZsdXNoX21l dGFkYXRhX3Zpc2l0b3IsICh2b2lkICopJnN6aW5kX3N1bSwKLQkgICAgZWRhdGFzKTsKLQlpZiAo Y29uZmlnX29wdF9zYWZldHlfY2hlY2tzICYmIHVubGlrZWx5KHN6aW5kX3N1bSAhPSAwKSkgewot CQl0Y2FjaGVfYmluX2ZsdXNoX3NpemVfY2hlY2tfZmFpbChhcnIsIGJpbmluZCwgbmZsdXNoLCBl ZGF0YXMpOwotCX0KLX0KLQotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBib29sCi10Y2FjaGVfYmlu X2ZsdXNoX21hdGNoKGVkYXRhX3QgKmVkYXRhLCB1bnNpZ25lZCBjdXJfYXJlbmFfaW5kLAotICAg IHVuc2lnbmVkIGN1cl9iaW5zaGFyZCwgYm9vbCBzbWFsbCkgewotCWlmIChzbWFsbCkgewotCQly ZXR1cm4gZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSkgPT0gY3VyX2FyZW5hX2luZAotCQkgICAg JiYgZWRhdGFfYmluc2hhcmRfZ2V0KGVkYXRhKSA9PSBjdXJfYmluc2hhcmQ7Ci0JfSBlbHNlIHsK LQkJcmV0dXJuIGVkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpID09IGN1cl9hcmVuYV9pbmQ7Ci0J fQotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXRjYWNoZV9iaW5fZmx1c2hfaW1w bCh0c2RfdCAqdHNkLCB0Y2FjaGVfdCAqdGNhY2hlLCBjYWNoZV9iaW5fdCAqY2FjaGVfYmluLAot ICAgIHN6aW5kX3QgYmluaW5kLCBjYWNoZV9iaW5fcHRyX2FycmF5X3QgKnB0cnMsIHVuc2lnbmVk IG5mbHVzaCwgYm9vbCBzbWFsbCkgewotCXRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93ID0gdGNh Y2hlLT50Y2FjaGVfc2xvdzsKLQkvKgotCSAqIEEgY291cGxlIGxvb2t1cCBjYWxscyB0YWtlIHRz ZG47IGRlY2xhcmUgaXQgb25jZSBmb3IgY29udmVuaWVuY2UKLQkgKiBpbnN0ZWFkIG9mIGNhbGxp bmcgdHNkX3RzZG4odHNkKSBhbGwgdGhlIHRpbWUuCi0JICovCi0JdHNkbl90ICp0c2RuID0gdHNk X3RzZG4odHNkKTsKLQotCWlmIChzbWFsbCkgewotCQlhc3NlcnQoYmluaW5kIDwgU0NfTkJJTlMp OwotCX0gZWxzZSB7Ci0JCWFzc2VydChiaW5pbmQgPCBuaGJpbnMpOwotCX0KLQlhcmVuYV90ICp0 Y2FjaGVfYXJlbmEgPSB0Y2FjaGVfc2xvdy0+YXJlbmE7Ci0JYXNzZXJ0KHRjYWNoZV9hcmVuYSAh PSBOVUxMKTsKLQotCS8qCi0JICogVmFyaWFibGUgbGVuZ3RoIGFycmF5IG11c3QgaGF2ZSA+IDAg bGVuZ3RoOyB0aGUgbGFzdCBlbGVtZW50IGlzIG5ldmVyCi0JICogdG91Y2hlZCAoaXQncyBqdXN0 IGluY2x1ZGVkIHRvIHNhdGlzZnkgdGhlIG5vLXplcm8tbGVuZ3RoIHJ1bGUpLgotCSAqLwotCVZB UklBQkxFX0FSUkFZKGVtYXBfYmF0Y2hfbG9va3VwX3Jlc3VsdF90LCBpdGVtX2VkYXRhLCBuZmx1 c2ggKyAxKTsKLQl0Y2FjaGVfYmluX2ZsdXNoX2VkYXRhc19sb29rdXAodHNkLCBwdHJzLCBiaW5p bmQsIG5mbHVzaCwgaXRlbV9lZGF0YSk7Ci0KLQkvKgotCSAqIFRoZSBzbGFicyB3aGVyZSB3ZSBm cmVlZCB0aGUgbGFzdCByZW1haW5pbmcgb2JqZWN0IGluIHRoZSBzbGFiIChhbmQKLQkgKiBzbyBu ZWVkIHRvIGZyZWUgdGhlIHNsYWIgaXRzZWxmKS4KLQkgKiBVc2VkIG9ubHkgaWYgc21hbGwgPT0g dHJ1ZS4KLQkgKi8KLQl1bnNpZ25lZCBkYWxsb2NfY291bnQgPSAwOwotCVZBUklBQkxFX0FSUkFZ KGVkYXRhX3QgKiwgZGFsbG9jX3NsYWJzLCBuZmx1c2ggKyAxKTsKLQotCS8qCi0JICogV2UncmUg YWJvdXQgdG8gZ3JhYiBhIGJ1bmNoIG9mIGxvY2tzLiAgSWYgb25lIG9mIHRoZW0gaGFwcGVucyB0 byBiZQotCSAqIHRoZSBvbmUgZ3VhcmRpbmcgdGhlIGFyZW5hLWxldmVsIHN0YXRzIGNvdW50ZXJz IHdlIGZsdXNoIG91cgotCSAqIHRocmVhZC1sb2NhbCBvbmVzIHRvLCB3ZSBkbyBzbyB1bmRlciBv bmUgY3JpdGljYWwgc2VjdGlvbi4KLQkgKi8KLQlib29sIG1lcmdlZF9zdGF0cyA9IGZhbHNlOwot CXdoaWxlIChuZmx1c2ggPiAwKSB7Ci0JCS8qIExvY2sgdGhlIGFyZW5hLCBvciBiaW4sIGFzc29j aWF0ZWQgd2l0aCB0aGUgZmlyc3Qgb2JqZWN0LiAqLwotCQllZGF0YV90ICplZGF0YSA9IGl0ZW1f ZWRhdGFbMF0uZWRhdGE7Ci0JCXVuc2lnbmVkIGN1cl9hcmVuYV9pbmQgPSBlZGF0YV9hcmVuYV9p bmRfZ2V0KGVkYXRhKTsKLQkJYXJlbmFfdCAqY3VyX2FyZW5hID0gYXJlbmFfZ2V0KHRzZG4sIGN1 cl9hcmVuYV9pbmQsIGZhbHNlKTsKLQotCQkvKgotCQkgKiBUaGVzZSBhc3NpZ25tZW50cyBhcmUg YWx3YXlzIG92ZXJ3cml0dGVuIHdoZW4gc21hbGwgaXMgdHJ1ZSwKLQkJICogYW5kIHRoZWlyIHZh bHVlcyBhcmUgYWx3YXlzIGlnbm9yZWQgd2hlbiBzbWFsbCBpcyBmYWxzZSwgYnV0Ci0JCSAqIHRv IGF2b2lkIHRoZSB0ZWNobmljYWwgVUIgd2hlbiB3ZSBwYXNzIHRoZW0gYXMgcGFyYW1ldGVycywg d2UKLQkJICogbmVlZCB0byBpbnRpYWxpemUgdGhlbS4KLQkJICovCi0JCXVuc2lnbmVkIGN1cl9i aW5zaGFyZCA9IDA7Ci0JCWJpbl90ICpjdXJfYmluID0gTlVMTDsKLQkJaWYgKHNtYWxsKSB7Ci0J CQljdXJfYmluc2hhcmQgPSBlZGF0YV9iaW5zaGFyZF9nZXQoZWRhdGEpOwotCQkJY3VyX2JpbiA9 IGFyZW5hX2dldF9iaW4oY3VyX2FyZW5hLCBiaW5pbmQsCi0JCQkgICAgY3VyX2JpbnNoYXJkKTsK LQkJCWFzc2VydChjdXJfYmluc2hhcmQgPCBiaW5faW5mb3NbYmluaW5kXS5uX3NoYXJkcyk7Ci0J CQkvKgotCQkJICogSWYgeW91J3JlIGxvb2tpbmcgYXQgcHJvZmlsZXMsIHlvdSBtaWdodCB0aGlu ayB0aGlzCi0JCQkgKiBpcyBhIGdvb2QgcGxhY2UgdG8gcHJlZmV0Y2ggdGhlIGJpbiBzdGF0cywg d2hpY2ggYXJlCi0JCQkgKiBvZnRlbiBhIGNhY2hlIG1pc3MuICBUaGlzIHR1cm5zIG91dCBub3Qg dG8gYmUKLQkJCSAqIGhlbHBmdWwgb24gdGhlIHdvcmtsb2FkcyB3ZSd2ZSBsb29rZWQgYXQsIHdp dGggbW92aW5nCi0JCQkgKiB0aGUgYmluIHN0YXRzIG5leHQgdG8gdGhlIGxvY2sgc2VlbWluZyB0 byBkbyBiZXR0ZXIuCi0JCQkgKi8KLQkJfQotCi0JCWlmIChzbWFsbCkgewotCQkJbWFsbG9jX211 dGV4X2xvY2sodHNkbiwgJmN1cl9iaW4tPmxvY2spOwotCQl9Ci0JCWlmICghc21hbGwgJiYgIWFy ZW5hX2lzX2F1dG8oY3VyX2FyZW5hKSkgewotCQkJbWFsbG9jX211dGV4X2xvY2sodHNkbiwgJmN1 cl9hcmVuYS0+bGFyZ2VfbXR4KTsKLQkJfQotCi0JCS8qCi0JCSAqIElmIHdlIGFjcXVpcmVkIHRo ZSByaWdodCBsb2NrIGFuZCBoYXZlIHNvbWUgc3RhdHMgdG8gZmx1c2gsCi0JCSAqIGZsdXNoIHRo ZW0uCi0JCSAqLwotCQlpZiAoY29uZmlnX3N0YXRzICYmIHRjYWNoZV9hcmVuYSA9PSBjdXJfYXJl bmEKLQkJICAgICYmICFtZXJnZWRfc3RhdHMpIHsKLQkJCW1lcmdlZF9zdGF0cyA9IHRydWU7Ci0J CQlpZiAoc21hbGwpIHsKLQkJCQljdXJfYmluLT5zdGF0cy5uZmx1c2hlcysrOwotCQkJCWN1cl9i aW4tPnN0YXRzLm5yZXF1ZXN0cyArPQotCQkJCSAgICBjYWNoZV9iaW4tPnRzdGF0cy5ucmVxdWVz dHM7Ci0JCQkJY2FjaGVfYmluLT50c3RhdHMubnJlcXVlc3RzID0gMDsKLQkJCX0gZWxzZSB7Ci0J CQkJYXJlbmFfc3RhdHNfbGFyZ2VfZmx1c2hfbnJlcXVlc3RzX2FkZCh0c2RuLAotCQkJCSAgICAm dGNhY2hlX2FyZW5hLT5zdGF0cywgYmluaW5kLAotCQkJCSAgICBjYWNoZV9iaW4tPnRzdGF0cy5u cmVxdWVzdHMpOwotCQkJCWNhY2hlX2Jpbi0+dHN0YXRzLm5yZXF1ZXN0cyA9IDA7Ci0JCQl9Ci0J CX0KLQotCQkvKgotCQkgKiBMYXJnZSBhbGxvY2F0aW9ucyBuZWVkIHNwZWNpYWwgcHJlcCBkb25l LiAgQWZ0ZXJ3YXJkcywgd2UgY2FuCi0JCSAqIGRyb3AgdGhlIGxhcmdlIGxvY2suCi0JCSAqLwot CQlpZiAoIXNtYWxsKSB7Ci0JCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmZsdXNoOyBpKysp IHsKLQkJCQl2b2lkICpwdHIgPSBwdHJzLT5wdHJbaV07Ci0JCQkJZWRhdGEgPSBpdGVtX2VkYXRh W2ldLmVkYXRhOwotCQkJCWFzc2VydChwdHIgIT0gTlVMTCAmJiBlZGF0YSAhPSBOVUxMKTsKLQot CQkJCWlmICh0Y2FjaGVfYmluX2ZsdXNoX21hdGNoKGVkYXRhLCBjdXJfYXJlbmFfaW5kLAotCQkJ CSAgICBjdXJfYmluc2hhcmQsIHNtYWxsKSkgewotCQkJCQlsYXJnZV9kYWxsb2NfcHJlcF9sb2Nr ZWQodHNkbiwKLQkJCQkJICAgIGVkYXRhKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKCFzbWFs bCAmJiAhYXJlbmFfaXNfYXV0byhjdXJfYXJlbmEpKSB7Ci0JCQltYWxsb2NfbXV0ZXhfdW5sb2Nr KHRzZG4sICZjdXJfYXJlbmEtPmxhcmdlX210eCk7Ci0JCX0KLQotCQkvKiBEZWFsbG9jYXRlIHdo YXRldmVyIHdlIGNhbi4gKi8KLQkJdW5zaWduZWQgbmRlZmVycmVkID0gMDsKLQkJLyogSW5pdCBv bmx5IHRvIGF2b2lkIHVzZWQtdW5pbml0aWFsaXplZCB3YXJuaW5nLiAqLwotCQlhcmVuYV9kYWxs b2NfYmluX2xvY2tlZF9pbmZvX3QgZGFsbG9jX2Jpbl9pbmZvID0gezB9OwotCQlpZiAoc21hbGwp IHsKLQkJCWFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2JlZ2luKCZkYWxsb2NfYmluX2luZm8sIGJp bmluZCk7Ci0JCX0KLQkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5mbHVzaDsgaSsrKSB7Ci0J CQl2b2lkICpwdHIgPSBwdHJzLT5wdHJbaV07Ci0JCQllZGF0YSA9IGl0ZW1fZWRhdGFbaV0uZWRh dGE7Ci0JCQlhc3NlcnQocHRyICE9IE5VTEwgJiYgZWRhdGEgIT0gTlVMTCk7Ci0JCQlpZiAoIXRj YWNoZV9iaW5fZmx1c2hfbWF0Y2goZWRhdGEsIGN1cl9hcmVuYV9pbmQsCi0JCQkgICAgY3VyX2Jp bnNoYXJkLCBzbWFsbCkpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBvYmplY3Qgd2FzIGFsbG9jYXRl ZCBlaXRoZXIgdmlhIGEKLQkJCQkgKiBkaWZmZXJlbnQgYXJlbmEsIG9yIGEgZGlmZmVyZW50IGJp biBpbiB0aGlzCi0JCQkJICogYXJlbmEuICBFaXRoZXIgd2F5LCBzdGFzaCB0aGUgb2JqZWN0IHNv IHRoYXQKLQkJCQkgKiBpdCBjYW4gYmUgaGFuZGxlZCBpbiBhIGZ1dHVyZSBwYXNzLgotCQkJCSAq LwotCQkJCXB0cnMtPnB0cltuZGVmZXJyZWRdID0gcHRyOwotCQkJCWl0ZW1fZWRhdGFbbmRlZmVy cmVkXS5lZGF0YSA9IGVkYXRhOwotCQkJCW5kZWZlcnJlZCsrOwotCQkJCWNvbnRpbnVlOwotCQkJ fQotCQkJaWYgKHNtYWxsKSB7Ci0JCQkJaWYgKGFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX3N0ZXAo dHNkbiwKLQkJCQkgICAgY3VyX2FyZW5hLCBjdXJfYmluLCAmZGFsbG9jX2Jpbl9pbmZvLAotCQkJ CSAgICBiaW5pbmQsIGVkYXRhLCBwdHIpKSB7Ci0JCQkJCWRhbGxvY19zbGFic1tkYWxsb2NfY291 bnRdID0gZWRhdGE7Ci0JCQkJCWRhbGxvY19jb3VudCsrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0J CQkJaWYgKGxhcmdlX2RhbGxvY19zYWZldHlfY2hlY2tzKGVkYXRhLCBwdHIsCi0JCQkJICAgIGJp bmluZCkpIHsKLQkJCQkJLyogU2VlIHRoZSBjb21tZW50IGluIGlzZnJlZS4gKi8KLQkJCQkJY29u dGludWU7Ci0JCQkJfQotCQkJCWxhcmdlX2RhbGxvY19maW5pc2godHNkbiwgZWRhdGEpOwotCQkJ fQotCQl9Ci0KLQkJaWYgKHNtYWxsKSB7Ci0JCQlhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9maW5p c2godHNkbiwgY3VyX2FyZW5hLCBjdXJfYmluLAotCQkJICAgICZkYWxsb2NfYmluX2luZm8pOwot CQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLCAmY3VyX2Jpbi0+bG9jayk7Ci0JCX0KLQkJYXJl bmFfZGVjYXlfdGlja3ModHNkbiwgY3VyX2FyZW5hLCBuZmx1c2ggLSBuZGVmZXJyZWQpOwotCQlu Zmx1c2ggPSBuZGVmZXJyZWQ7Ci0JfQotCi0JLyogSGFuZGxlIGFsbCBkZWZlcnJlZCBzbGFiIGRh bGxvYy4gKi8KLQlhc3NlcnQoc21hbGwgfHwgZGFsbG9jX2NvdW50ID09IDApOwotCWZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBkYWxsb2NfY291bnQ7IGkrKykgewotCQllZGF0YV90ICpzbGFiID0g ZGFsbG9jX3NsYWJzW2ldOwotCQlhcmVuYV9zbGFiX2RhbGxvYyh0c2RuLCBhcmVuYV9nZXRfZnJv bV9lZGF0YShzbGFiKSwgc2xhYik7Ci0KLQl9Ci0KLQlpZiAoY29uZmlnX3N0YXRzICYmICFtZXJn ZWRfc3RhdHMpIHsKLQkJaWYgKHNtYWxsKSB7Ci0JCQkvKgotCQkJICogVGhlIGZsdXNoIGxvb3Ag ZGlkbid0IGhhcHBlbiB0byBmbHVzaCB0byB0aGlzCi0JCQkgKiB0aHJlYWQncyBhcmVuYSwgc28g dGhlIHN0YXRzIGRpZG4ndCBnZXQgbWVyZ2VkLgotCQkJICogTWFudWFsbHkgZG8gc28gbm93Lgot CQkJICovCi0JCQliaW5fdCAqYmluID0gYXJlbmFfYmluX2Nob29zZSh0c2RuLCB0Y2FjaGVfYXJl bmEsCi0JCQkgICAgYmluaW5kLCBOVUxMKTsKLQkJCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sICZi aW4tPmxvY2spOwotCQkJYmluLT5zdGF0cy5uZmx1c2hlcysrOwotCQkJYmluLT5zdGF0cy5ucmVx dWVzdHMgKz0gY2FjaGVfYmluLT50c3RhdHMubnJlcXVlc3RzOwotCQkJY2FjaGVfYmluLT50c3Rh dHMubnJlcXVlc3RzID0gMDsKLQkJCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmJpbi0+bG9j ayk7Ci0JCX0gZWxzZSB7Ci0JCQlhcmVuYV9zdGF0c19sYXJnZV9mbHVzaF9ucmVxdWVzdHNfYWRk KHRzZG4sCi0JCQkgICAgJnRjYWNoZV9hcmVuYS0+c3RhdHMsIGJpbmluZCwKLQkJCSAgICBjYWNo ZV9iaW4tPnRzdGF0cy5ucmVxdWVzdHMpOwotCQkJY2FjaGVfYmluLT50c3RhdHMubnJlcXVlc3Rz ID0gMDsKLQkJfQotCX0KLQotfQotCi1KRU1BTExPQ19BTFdBWVNfSU5MSU5FIHZvaWQKLXRjYWNo ZV9iaW5fZmx1c2hfYm90dG9tKHRzZF90ICp0c2QsIHRjYWNoZV90ICp0Y2FjaGUsIGNhY2hlX2Jp bl90ICpjYWNoZV9iaW4sCi0gICAgc3ppbmRfdCBiaW5pbmQsIHVuc2lnbmVkIHJlbSwgYm9vbCBz bWFsbCkgewotCXRjYWNoZV9iaW5fZmx1c2hfc3Rhc2hlZCh0c2QsIHRjYWNoZSwgY2FjaGVfYmlu LCBiaW5pbmQsIHNtYWxsKTsKLQotCWNhY2hlX2Jpbl9zel90IG5jYWNoZWQgPSBjYWNoZV9iaW5f bmNhY2hlZF9nZXRfbG9jYWwoY2FjaGVfYmluLAotCSAgICAmdGNhY2hlX2Jpbl9pbmZvW2Jpbmlu ZF0pOwotCWFzc2VydCgoY2FjaGVfYmluX3N6X3QpcmVtIDw9IG5jYWNoZWQpOwotCXVuc2lnbmVk IG5mbHVzaCA9IG5jYWNoZWQgLSByZW07Ci0KLQlDQUNIRV9CSU5fUFRSX0FSUkFZX0RFQ0xBUkUo cHRycywgbmZsdXNoKTsKLQljYWNoZV9iaW5faW5pdF9wdHJfYXJyYXlfZm9yX2ZsdXNoKGNhY2hl X2JpbiwgJnRjYWNoZV9iaW5faW5mb1tiaW5pbmRdLAotCSAgICAmcHRycywgbmZsdXNoKTsKLQot CXRjYWNoZV9iaW5fZmx1c2hfaW1wbCh0c2QsIHRjYWNoZSwgY2FjaGVfYmluLCBiaW5pbmQsICZw dHJzLCBuZmx1c2gsCi0JICAgIHNtYWxsKTsKLQotCWNhY2hlX2Jpbl9maW5pc2hfZmx1c2goY2Fj aGVfYmluLCAmdGNhY2hlX2Jpbl9pbmZvW2JpbmluZF0sICZwdHJzLAotCSAgICBuY2FjaGVkIC0g cmVtKTsKLX0KLQotdm9pZAotdGNhY2hlX2Jpbl9mbHVzaF9zbWFsbCh0c2RfdCAqdHNkLCB0Y2Fj aGVfdCAqdGNhY2hlLCBjYWNoZV9iaW5fdCAqY2FjaGVfYmluLAotICAgIHN6aW5kX3QgYmluaW5k LCB1bnNpZ25lZCByZW0pIHsKLQl0Y2FjaGVfYmluX2ZsdXNoX2JvdHRvbSh0c2QsIHRjYWNoZSwg Y2FjaGVfYmluLCBiaW5pbmQsIHJlbSwgdHJ1ZSk7Ci19Ci0KLXZvaWQKLXRjYWNoZV9iaW5fZmx1 c2hfbGFyZ2UodHNkX3QgKnRzZCwgdGNhY2hlX3QgKnRjYWNoZSwgY2FjaGVfYmluX3QgKmNhY2hl X2JpbiwKLSAgICBzemluZF90IGJpbmluZCwgdW5zaWduZWQgcmVtKSB7Ci0JdGNhY2hlX2Jpbl9m bHVzaF9ib3R0b20odHNkLCB0Y2FjaGUsIGNhY2hlX2JpbiwgYmluaW5kLCByZW0sIGZhbHNlKTsK LX0KLQotLyoKLSAqIEZsdXNoaW5nIHN0YXNoZWQgaGFwcGVucyB3aGVuIDEpIHRjYWNoZSBmaWxs LCAyKSB0Y2FjaGUgZmx1c2gsIG9yIDMpIHRjYWNoZQotICogR0MgZXZlbnQuICBUaGlzIG1ha2Vz IHN1cmUgdGhhdCB0aGUgc3Rhc2hlZCBpdGVtcyBkbyBub3QgaG9sZCBtZW1vcnkgZm9yIHRvbwot ICogbG9uZywgYW5kIG5ldyBidWZmZXJzIGNhbiBvbmx5IGJlIGFsbG9jYXRlZCB3aGVuIG5vdGhp bmcgaXMgc3Rhc2hlZC4KLSAqCi0gKiBUaGUgZG93bnNpZGUgaXMsIHRoZSB0aW1lIGJldHdlZW4g c3Rhc2ggYW5kIGZsdXNoIG1heSBiZSByZWxhdGl2ZWx5IHNob3J0LAotICogZXNwZWNpYWxseSB3 aGVuIHRoZSByZXF1ZXN0IHJhdGUgaXMgaGlnaC4gIEl0IGxvd2VycyB0aGUgY2hhbmNlIG9mIGRl dGVjdGluZwotICogd3JpdGUtYWZ0ZXItZnJlZSAtLSBob3dldmVyIHRoYXQgaXMgYSBkZWxheWVk IGRldGVjdGlvbiBhbnl3YXksIGFuZCBpcyBsZXNzCi0gKiBvZiBhIGZvY3VzIHRoYW4gdGhlIG1l bW9yeSBvdmVyaGVhZC4KLSAqLwotdm9pZAotdGNhY2hlX2Jpbl9mbHVzaF9zdGFzaGVkKHRzZF90 ICp0c2QsIHRjYWNoZV90ICp0Y2FjaGUsIGNhY2hlX2Jpbl90ICpjYWNoZV9iaW4sCi0gICAgc3pp bmRfdCBiaW5pbmQsIGJvb2wgaXNfc21hbGwpIHsKLQljYWNoZV9iaW5faW5mb190ICppbmZvID0g JnRjYWNoZV9iaW5faW5mb1tiaW5pbmRdOwotCS8qCi0JICogVGhlIHR3byBiZWxvdyBhcmUgZm9y IGFzc2VydGlvbiBvbmx5LiAgVGhlIGNvbnRlbnQgb2Ygb3JpZ2luYWwgY2FjaGVkCi0JICogaXRl bXMgcmVtYWluIHVuY2hhbmdlZCAtLSB0aGUgc3Rhc2hlZCBpdGVtcyByZXNpZGUgb24gdGhlIG90 aGVyIGVuZAotCSAqIG9mIHRoZSBzdGFjay4gIENoZWNraW5nIHRoZSBzdGFjayBoZWFkIGFuZCBu Y2FjaGVkIHRvIHZlcmlmeS4KLQkgKi8KLQl2b2lkICpoZWFkX2NvbnRlbnQgPSAqY2FjaGVfYmlu LT5zdGFja19oZWFkOwotCWNhY2hlX2Jpbl9zel90IG9yaWdfY2FjaGVkID0gY2FjaGVfYmluX25j YWNoZWRfZ2V0X2xvY2FsKGNhY2hlX2JpbiwKLQkgICAgaW5mbyk7Ci0KLQljYWNoZV9iaW5fc3pf dCBuc3Rhc2hlZCA9IGNhY2hlX2Jpbl9uc3Rhc2hlZF9nZXRfbG9jYWwoY2FjaGVfYmluLCBpbmZv KTsKLQlhc3NlcnQob3JpZ19jYWNoZWQgKyBuc3Rhc2hlZCA8PSBjYWNoZV9iaW5faW5mb19uY2Fj aGVkX21heChpbmZvKSk7Ci0JaWYgKG5zdGFzaGVkID09IDApIHsKLQkJcmV0dXJuOwotCX0KLQot CUNBQ0hFX0JJTl9QVFJfQVJSQVlfREVDTEFSRShwdHJzLCBuc3Rhc2hlZCk7Ci0JY2FjaGVfYmlu X2luaXRfcHRyX2FycmF5X2Zvcl9zdGFzaGVkKGNhY2hlX2JpbiwgYmluaW5kLCBpbmZvLCAmcHRy cywKLQkgICAgbnN0YXNoZWQpOwotCXNhbl9jaGVja19zdGFzaGVkX3B0cnMocHRycy5wdHIsIG5z dGFzaGVkLCBzel9pbmRleDJzaXplKGJpbmluZCkpOwotCXRjYWNoZV9iaW5fZmx1c2hfaW1wbCh0 c2QsIHRjYWNoZSwgY2FjaGVfYmluLCBiaW5pbmQsICZwdHJzLCBuc3Rhc2hlZCwKLQkgICAgaXNf c21hbGwpOwotCWNhY2hlX2Jpbl9maW5pc2hfZmx1c2hfc3Rhc2hlZChjYWNoZV9iaW4sIGluZm8p OwotCi0JYXNzZXJ0KGNhY2hlX2Jpbl9uc3Rhc2hlZF9nZXRfbG9jYWwoY2FjaGVfYmluLCBpbmZv KSA9PSAwKTsKLQlhc3NlcnQoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGNhY2hlX2Jpbiwg aW5mbykgPT0gb3JpZ19jYWNoZWQpOwotCWFzc2VydChoZWFkX2NvbnRlbnQgPT0gKmNhY2hlX2Jp bi0+c3RhY2tfaGVhZCk7Ci19Ci0KLXZvaWQKLXRjYWNoZV9hcmVuYV9hc3NvY2lhdGUodHNkbl90 ICp0c2RuLCB0Y2FjaGVfc2xvd190ICp0Y2FjaGVfc2xvdywKLSAgICB0Y2FjaGVfdCAqdGNhY2hl LCBhcmVuYV90ICphcmVuYSkgewotCWFzc2VydCh0Y2FjaGVfc2xvdy0+YXJlbmEgPT0gTlVMTCk7 Ci0JdGNhY2hlX3Nsb3ctPmFyZW5hID0gYXJlbmE7Ci0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0J CS8qIExpbmsgaW50byBsaXN0IG9mIGV4dGFudCB0Y2FjaGVzLiAqLwotCQltYWxsb2NfbXV0ZXhf bG9jayh0c2RuLCAmYXJlbmEtPnRjYWNoZV9xbF9tdHgpOwotCi0JCXFsX2VsbV9uZXcodGNhY2hl X3Nsb3csIGxpbmspOwotCQlxbF90YWlsX2luc2VydCgmYXJlbmEtPnRjYWNoZV9xbCwgdGNhY2hl X3Nsb3csIGxpbmspOwotCQljYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9pbml0KAotCQkgICAg JnRjYWNoZV9zbG93LT5jYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvciwgdGNhY2hlLT5iaW5zKTsK LQkJcWxfdGFpbF9pbnNlcnQoJmFyZW5hLT5jYWNoZV9iaW5fYXJyYXlfZGVzY3JpcHRvcl9xbCwK LQkJICAgICZ0Y2FjaGVfc2xvdy0+Y2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3IsIGxpbmspOwot Ci0JCW1hbGxvY19tdXRleF91bmxvY2sodHNkbiwgJmFyZW5hLT50Y2FjaGVfcWxfbXR4KTsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi10Y2FjaGVfYXJlbmFfZGlzc29jaWF0ZSh0c2RuX3QgKnRzZG4s IHRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93LAotICAgIHRjYWNoZV90ICp0Y2FjaGUpIHsKLQlh cmVuYV90ICphcmVuYSA9IHRjYWNoZV9zbG93LT5hcmVuYTsKLQlhc3NlcnQoYXJlbmEgIT0gTlVM TCk7Ci0JaWYgKGNvbmZpZ19zdGF0cykgewotCQkvKiBVbmxpbmsgZnJvbSBsaXN0IG9mIGV4dGFu dCB0Y2FjaGVzLiAqLwotCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYXJlbmEtPnRjYWNoZV9x bF9tdHgpOwotCQlpZiAoY29uZmlnX2RlYnVnKSB7Ci0JCQlib29sIGluX3FsID0gZmFsc2U7Ci0J CQl0Y2FjaGVfc2xvd190ICppdGVyOwotCQkJcWxfZm9yZWFjaChpdGVyLCAmYXJlbmEtPnRjYWNo ZV9xbCwgbGluaykgewotCQkJCWlmIChpdGVyID09IHRjYWNoZV9zbG93KSB7Ci0JCQkJCWluX3Fs ID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0KGluX3FsKTsKLQkJ fQotCQlxbF9yZW1vdmUoJmFyZW5hLT50Y2FjaGVfcWwsIHRjYWNoZV9zbG93LCBsaW5rKTsKLQkJ cWxfcmVtb3ZlKCZhcmVuYS0+Y2FjaGVfYmluX2FycmF5X2Rlc2NyaXB0b3JfcWwsCi0JCSAgICAm dGNhY2hlX3Nsb3ctPmNhY2hlX2Jpbl9hcnJheV9kZXNjcmlwdG9yLCBsaW5rKTsKLQkJdGNhY2hl X3N0YXRzX21lcmdlKHRzZG4sIHRjYWNoZV9zbG93LT50Y2FjaGUsIGFyZW5hKTsKLQkJbWFsbG9j X211dGV4X3VubG9jayh0c2RuLCAmYXJlbmEtPnRjYWNoZV9xbF9tdHgpOwotCX0KLQl0Y2FjaGVf c2xvdy0+YXJlbmEgPSBOVUxMOwotfQotCi12b2lkCi10Y2FjaGVfYXJlbmFfcmVhc3NvY2lhdGUo dHNkbl90ICp0c2RuLCB0Y2FjaGVfc2xvd190ICp0Y2FjaGVfc2xvdywKLSAgICB0Y2FjaGVfdCAq dGNhY2hlLCBhcmVuYV90ICphcmVuYSkgewotCXRjYWNoZV9hcmVuYV9kaXNzb2NpYXRlKHRzZG4s IHRjYWNoZV9zbG93LCB0Y2FjaGUpOwotCXRjYWNoZV9hcmVuYV9hc3NvY2lhdGUodHNkbiwgdGNh Y2hlX3Nsb3csIHRjYWNoZSwgYXJlbmEpOwotfQotCi1ib29sCi10c2RfdGNhY2hlX2VuYWJsZWRf ZGF0YV9pbml0KHRzZF90ICp0c2QpIHsKLQkvKiBDYWxsZWQgdXBvbiB0c2QgaW5pdGlhbGl6YXRp b24uICovCi0JdHNkX3RjYWNoZV9lbmFibGVkX3NldCh0c2QsIG9wdF90Y2FjaGUpOwotCXRzZF9z bG93X3VwZGF0ZSh0c2QpOwotCi0JaWYgKG9wdF90Y2FjaGUpIHsKLQkJLyogVHJpZ2dlciB0Y2Fj aGUgaW5pdC4gKi8KLQkJdHNkX3RjYWNoZV9kYXRhX2luaXQodHNkKTsKLQl9Ci0KLQlyZXR1cm4g ZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi10Y2FjaGVfaW5pdCh0c2RfdCAqdHNkLCB0Y2FjaGVf c2xvd190ICp0Y2FjaGVfc2xvdywgdGNhY2hlX3QgKnRjYWNoZSwKLSAgICB2b2lkICptZW0pIHsK LQl0Y2FjaGUtPnRjYWNoZV9zbG93ID0gdGNhY2hlX3Nsb3c7Ci0JdGNhY2hlX3Nsb3ctPnRjYWNo ZSA9IHRjYWNoZTsKLQotCW1lbXNldCgmdGNhY2hlX3Nsb3ctPmxpbmssIDAsIHNpemVvZihxbF9l bG0odGNhY2hlX3QpKSk7Ci0JdGNhY2hlX3Nsb3ctPm5leHRfZ2NfYmluID0gMDsKLQl0Y2FjaGVf c2xvdy0+YXJlbmEgPSBOVUxMOwotCXRjYWNoZV9zbG93LT5keW5fYWxsb2MgPSBtZW07Ci0KLQkv KgotCSAqIFdlIHJlc2VydmUgY2FjaGUgYmlucyBmb3IgYWxsIHNtYWxsIHNpemUgY2xhc3Nlcywg ZXZlbiBpZiBzb21lIG1heQotCSAqIG5vdCBnZXQgdXNlZCAoaS5lLiBiaW5zIGhpZ2hlciB0aGFu IG5oYmlucykuICBUaGlzIGFsbG93cyB0aGUgZmFzdAotCSAqIGFuZCBjb21tb24gcGF0aHMgdG8g YWNjZXNzIGNhY2hlIGJpbiBtZXRhZGF0YSBzYWZlbHkgdy9vIHdvcnJ5aW5nCi0JICogYWJvdXQg d2hpY2ggb25lcyBhcmUgZGlzYWJsZWQuCi0JICovCi0JdW5zaWduZWQgbl9yZXNlcnZlZF9iaW5z ID0gbmhiaW5zIDwgU0NfTkJJTlMgPyBTQ19OQklOUyA6IG5oYmluczsKLQltZW1zZXQodGNhY2hl LT5iaW5zLCAwLCBzaXplb2YoY2FjaGVfYmluX3QpICogbl9yZXNlcnZlZF9iaW5zKTsKLQotCXNp emVfdCBjdXJfb2Zmc2V0ID0gMDsKLQljYWNoZV9iaW5fcHJlaW5jcmVtZW50KHRjYWNoZV9iaW5f aW5mbywgbmhiaW5zLCBtZW0sCi0JICAgICZjdXJfb2Zmc2V0KTsKLQlmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgbmhiaW5zOyBpKyspIHsKLQkJaWYgKGkgPCBTQ19OQklOUykgewotCQkJdGNhY2hl X3Nsb3ctPmxnX2ZpbGxfZGl2W2ldID0gMTsKLQkJCXRjYWNoZV9zbG93LT5iaW5fcmVmaWxsZWRb aV0gPSBmYWxzZTsKLQkJCXRjYWNoZV9zbG93LT5iaW5fZmx1c2hfZGVsYXlfaXRlbXNbaV0KLQkJ CSAgICA9IHRjYWNoZV9nY19pdGVtX2RlbGF5X2NvbXB1dGUoaSk7Ci0JCX0KLQkJY2FjaGVfYmlu X3QgKmNhY2hlX2JpbiA9ICZ0Y2FjaGUtPmJpbnNbaV07Ci0JCWNhY2hlX2Jpbl9pbml0KGNhY2hl X2JpbiwgJnRjYWNoZV9iaW5faW5mb1tpXSwgbWVtLAotCQkgICAgJmN1cl9vZmZzZXQpOwotCX0K LQkvKgotCSAqIEZvciBzbWFsbCBzaXplIGNsYXNzZXMgYmV5b25kIHRjYWNoZV9tYXhjbGFzcyAo aS5lLiBuaGJpbnMgPCBOQklOUyksCi0JICogdGhlaXIgY2FjaGUgYmlucyBhcmUgaW5pdGlhbGl6 ZWQgdG8gYSBzdGF0ZSB0byBzYWZlbHkgYW5kIGVmZmljaWVudGx5Ci0JICogZmFpbCBhbGwgZmFz dHBhdGggYWxsb2MgLyBmcmVlLCBzbyB0aGF0IG5vIGFkZGl0aW9uYWwgY2hlY2sgYXJvdW5kCi0J ICogbmhiaW5zIGlzIG5lZWRlZCBvbiBmYXN0cGF0aC4KLQkgKi8KLQlmb3IgKHVuc2lnbmVkIGkg PSBuaGJpbnM7IGkgPCBTQ19OQklOUzsgaSsrKSB7Ci0JCS8qIERpc2FibGVkIHNtYWxsIGJpbnMu ICovCi0JCWNhY2hlX2Jpbl90ICpjYWNoZV9iaW4gPSAmdGNhY2hlLT5iaW5zW2ldOwotCQl2b2lk ICpmYWtlX3N0YWNrID0gbWVtOwotCQlzaXplX3QgZmFrZV9vZmZzZXQgPSAwOwotCi0JCWNhY2hl X2Jpbl9pbml0KGNhY2hlX2JpbiwgJnRjYWNoZV9iaW5faW5mb1tpXSwgZmFrZV9zdGFjaywKLQkJ ICAgICZmYWtlX29mZnNldCk7Ci0JCWFzc2VydCh0Y2FjaGVfc21hbGxfYmluX2Rpc2FibGVkKGks IGNhY2hlX2JpbikpOwotCX0KLQotCWNhY2hlX2Jpbl9wb3N0aW5jcmVtZW50KHRjYWNoZV9iaW5f aW5mbywgbmhiaW5zLCBtZW0sCi0JICAgICZjdXJfb2Zmc2V0KTsKLQkvKiBTYW5pdHkgY2hlY2sg dGhhdCB0aGUgd2hvbGUgc3RhY2sgaXMgdXNlZC4gKi8KLQlhc3NlcnQoY3VyX29mZnNldCA9PSB0 Y2FjaGVfYmluX2FsbG9jX3NpemUpOwotfQotCi0vKiBJbml0aWFsaXplIGF1dG8gdGNhY2hlIChl bWJlZGRlZCBpbiBUU0QpLiAqLwotYm9vbAotdHNkX3RjYWNoZV9kYXRhX2luaXQodHNkX3QgKnRz ZCkgewotCXRjYWNoZV9zbG93X3QgKnRjYWNoZV9zbG93ID0gdHNkX3RjYWNoZV9zbG93cF9nZXRf dW5zYWZlKHRzZCk7Ci0JdGNhY2hlX3QgKnRjYWNoZSA9IHRzZF90Y2FjaGVwX2dldF91bnNhZmUo dHNkKTsKLQotCWFzc2VydChjYWNoZV9iaW5fc3RpbGxfemVyb19pbml0aWFsaXplZCgmdGNhY2hl LT5iaW5zWzBdKSk7Ci0Jc2l6ZV90IGFsaWdubWVudCA9IHRjYWNoZV9iaW5fYWxsb2NfYWxpZ25t ZW50OwotCXNpemVfdCBzaXplID0gc3pfc2EydSh0Y2FjaGVfYmluX2FsbG9jX3NpemUsIGFsaWdu bWVudCk7Ci0KLQl2b2lkICptZW0gPSBpcGFsbG9jenRtKHRzZF90c2RuKHRzZCksIHNpemUsIGFs aWdubWVudCwgdHJ1ZSwgTlVMTCwKLQkgICAgdHJ1ZSwgYXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwg dHJ1ZSkpOwotCWlmIChtZW0gPT0gTlVMTCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQl0Y2Fj aGVfaW5pdCh0c2QsIHRjYWNoZV9zbG93LCB0Y2FjaGUsIG1lbSk7Ci0JLyoKLQkgKiBJbml0aWFs aXphdGlvbiBpcyBhIGJpdCB0cmlja3kgaGVyZS4gIEFmdGVyIG1hbGxvYyBpbml0IGlzIGRvbmUs IGFsbAotCSAqIHRocmVhZHMgY2FuIHJlbHkgb24gYXJlbmFfY2hvb3NlIGFuZCBhc3NvY2lhdGUg dGNhY2hlIGFjY29yZGluZ2x5LgotCSAqIEhvd2V2ZXIsIHRoZSB0aHJlYWQgdGhhdCBkb2VzIGFj dHVhbCBtYWxsb2MgYm9vdHN0cmFwcGluZyByZWxpZXMgb24KLQkgKiBmdW5jdGlvbmFsIHRzZCwg YW5kIGl0IGNhbiBvbmx5IHJlbHkgb24gYTAuICBJbiB0aGF0IGNhc2UsIHdlCi0JICogYXNzb2Np YXRlIGl0cyB0Y2FjaGUgdG8gYTAgdGVtcG9yYXJpbHksIGFuZCBsYXRlciBvbgotCSAqIGFyZW5h X2Nob29zZV9oYXJkKCkgd2lsbCByZS1hc3NvY2lhdGUgcHJvcGVybHkuCi0JICovCi0JdGNhY2hl X3Nsb3ctPmFyZW5hID0gTlVMTDsKLQlhcmVuYV90ICphcmVuYTsKLQlpZiAoIW1hbGxvY19pbml0 aWFsaXplZCgpKSB7Ci0JCS8qIElmIGluIGluaXRpYWxpemF0aW9uLCBhc3NpZ24gdG8gYTAuICov Ci0JCWFyZW5hID0gYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIDAsIGZhbHNlKTsKLQkJdGNhY2hl X2FyZW5hX2Fzc29jaWF0ZSh0c2RfdHNkbih0c2QpLCB0Y2FjaGVfc2xvdywgdGNhY2hlLAotCQkg ICAgYXJlbmEpOwotCX0gZWxzZSB7Ci0JCWFyZW5hID0gYXJlbmFfY2hvb3NlKHRzZCwgTlVMTCk7 Ci0JCS8qIFRoaXMgbWF5IGhhcHBlbiBpZiB0aHJlYWQudGNhY2hlLmVuYWJsZWQgaXMgdXNlZC4g Ki8KLQkJaWYgKHRjYWNoZV9zbG93LT5hcmVuYSA9PSBOVUxMKSB7Ci0JCQl0Y2FjaGVfYXJlbmFf YXNzb2NpYXRlKHRzZF90c2RuKHRzZCksIHRjYWNoZV9zbG93LAotCQkJICAgIHRjYWNoZSwgYXJl bmEpOwotCQl9Ci0JfQotCWFzc2VydChhcmVuYSA9PSB0Y2FjaGVfc2xvdy0+YXJlbmEpOwotCi0J cmV0dXJuIGZhbHNlOwotfQotCi0vKiBDcmVhdGVkIG1hbnVhbCB0Y2FjaGUgZm9yIHRjYWNoZS5j cmVhdGUgbWFsbGN0bC4gKi8KLXRjYWNoZV90ICoKLXRjYWNoZV9jcmVhdGVfZXhwbGljaXQodHNk X3QgKnRzZCkgewotCS8qCi0JICogV2UgcGxhY2UgdGhlIGNhY2hlIGJpbiBzdGFja3MsIHRoZW4g dGhlIHRjYWNoZV90LCB0aGVuIGEgcG9pbnRlciB0bwotCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhl IHdob2xlIGFsbG9jYXRpb24gKGZvciBmcmVlaW5nKS4gIFRoZSBtYWtlcyBzdXJlCi0JICogdGhl IGNhY2hlIGJpbnMgaGF2ZSB0aGUgcmVxdWVzdGVkIGFsaWdubWVudC4KLQkgKi8KLQlzaXplX3Qg c2l6ZSA9IHRjYWNoZV9iaW5fYWxsb2Nfc2l6ZSArIHNpemVvZih0Y2FjaGVfdCkKLQkgICAgKyBz aXplb2YodGNhY2hlX3Nsb3dfdCk7Ci0JLyogTmF0dXJhbGx5IGFsaWduIHRoZSBwb2ludGVyIHN0 YWNrcy4gKi8KLQlzaXplID0gUFRSX0NFSUxJTkcoc2l6ZSk7Ci0Jc2l6ZSA9IHN6X3NhMnUoc2l6 ZSwgdGNhY2hlX2Jpbl9hbGxvY19hbGlnbm1lbnQpOwotCi0Jdm9pZCAqbWVtID0gaXBhbGxvY3p0 bSh0c2RfdHNkbih0c2QpLCBzaXplLCB0Y2FjaGVfYmluX2FsbG9jX2FsaWdubWVudCwKLQkgICAg dHJ1ZSwgTlVMTCwgdHJ1ZSwgYXJlbmFfZ2V0KFRTRE5fTlVMTCwgMCwgdHJ1ZSkpOwotCWlmICht ZW0gPT0gTlVMTCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JdGNhY2hlX3QgKnRjYWNoZSA9ICh2 b2lkICopKCh1aW50cHRyX3QpbWVtICsgdGNhY2hlX2Jpbl9hbGxvY19zaXplKTsKLQl0Y2FjaGVf c2xvd190ICp0Y2FjaGVfc2xvdyA9Ci0JICAgICh2b2lkICopKCh1aW50cHRyX3QpbWVtICsgdGNh Y2hlX2Jpbl9hbGxvY19zaXplICsgc2l6ZW9mKHRjYWNoZV90KSk7Ci0JdGNhY2hlX2luaXQodHNk LCB0Y2FjaGVfc2xvdywgdGNhY2hlLCBtZW0pOwotCi0JdGNhY2hlX2FyZW5hX2Fzc29jaWF0ZSh0 c2RfdHNkbih0c2QpLCB0Y2FjaGVfc2xvdywgdGNhY2hlLAotCSAgICBhcmVuYV9pY2hvb3NlKHRz ZCwgTlVMTCkpOwotCi0JcmV0dXJuIHRjYWNoZTsKLX0KLQotc3RhdGljIHZvaWQKLXRjYWNoZV9m bHVzaF9jYWNoZSh0c2RfdCAqdHNkLCB0Y2FjaGVfdCAqdGNhY2hlKSB7Ci0JdGNhY2hlX3Nsb3df dCAqdGNhY2hlX3Nsb3cgPSB0Y2FjaGUtPnRjYWNoZV9zbG93OwotCWFzc2VydCh0Y2FjaGVfc2xv dy0+YXJlbmEgIT0gTlVMTCk7Ci0KLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmhiaW5zOyBp KyspIHsKLQkJY2FjaGVfYmluX3QgKmNhY2hlX2JpbiA9ICZ0Y2FjaGUtPmJpbnNbaV07Ci0JCWlm IChpIDwgU0NfTkJJTlMpIHsKLQkJCXRjYWNoZV9iaW5fZmx1c2hfc21hbGwodHNkLCB0Y2FjaGUs IGNhY2hlX2JpbiwgaSwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQl0Y2FjaGVfYmluX2ZsdXNoX2xhcmdl KHRzZCwgdGNhY2hlLCBjYWNoZV9iaW4sIGksIDApOwotCQl9Ci0JCWlmIChjb25maWdfc3RhdHMp IHsKLQkJCWFzc2VydChjYWNoZV9iaW4tPnRzdGF0cy5ucmVxdWVzdHMgPT0gMCk7Ci0JCX0KLQl9 Ci19Ci0KLXZvaWQKLXRjYWNoZV9mbHVzaCh0c2RfdCAqdHNkKSB7Ci0JYXNzZXJ0KHRjYWNoZV9h dmFpbGFibGUodHNkKSk7Ci0JdGNhY2hlX2ZsdXNoX2NhY2hlKHRzZCwgdHNkX3RjYWNoZXBfZ2V0 KHRzZCkpOwotfQotCi1zdGF0aWMgdm9pZAotdGNhY2hlX2Rlc3Ryb3kodHNkX3QgKnRzZCwgdGNh Y2hlX3QgKnRjYWNoZSwgYm9vbCB0c2RfdGNhY2hlKSB7Ci0JdGNhY2hlX3Nsb3dfdCAqdGNhY2hl X3Nsb3cgPSB0Y2FjaGUtPnRjYWNoZV9zbG93OwotCXRjYWNoZV9mbHVzaF9jYWNoZSh0c2QsIHRj YWNoZSk7Ci0JYXJlbmFfdCAqYXJlbmEgPSB0Y2FjaGVfc2xvdy0+YXJlbmE7Ci0JdGNhY2hlX2Fy ZW5hX2Rpc3NvY2lhdGUodHNkX3RzZG4odHNkKSwgdGNhY2hlX3Nsb3csIHRjYWNoZSk7Ci0KLQlp ZiAodHNkX3RjYWNoZSkgewotCQljYWNoZV9iaW5fdCAqY2FjaGVfYmluID0gJnRjYWNoZS0+Ymlu c1swXTsKLQkJY2FjaGVfYmluX2Fzc2VydF9lbXB0eShjYWNoZV9iaW4sICZ0Y2FjaGVfYmluX2lu Zm9bMF0pOwotCX0KLQlpZGFsbG9jdG0odHNkX3RzZG4odHNkKSwgdGNhY2hlX3Nsb3ctPmR5bl9h bGxvYywgTlVMTCwgTlVMTCwgdHJ1ZSwKLQkgICAgdHJ1ZSk7Ci0KLQkvKgotCSAqIFRoZSBkZWFs bG9jYXRpb24gYW5kIHRjYWNoZSBmbHVzaCBhYm92ZSBtYXkgbm90IHRyaWdnZXIgZGVjYXkgc2lu Y2UKLQkgKiB3ZSBhcmUgb24gdGhlIHRjYWNoZSBzaHV0ZG93biBwYXRoIChwb3RlbnRpYWxseSB3 aXRoIG5vbi1ub21pbmFsCi0JICogdHNkKS4gIE1hbnVhbGx5IHRyaWdnZXIgZGVjYXkgdG8gYXZv aWQgcGF0aG9sb2dpY2FsIGNhc2VzLiAgQWxzbwotCSAqIGluY2x1ZGUgYXJlbmEgMCBiZWNhdXNl IHRoZSB0Y2FjaGUgYXJyYXkgaXMgYWxsb2NhdGVkIGZyb20gaXQuCi0JICovCi0JYXJlbmFfZGVj YXkodHNkX3RzZG4odHNkKSwgYXJlbmFfZ2V0KHRzZF90c2RuKHRzZCksIDAsIGZhbHNlKSwKLQkg ICAgZmFsc2UsIGZhbHNlKTsKLQotCWlmIChhcmVuYV9udGhyZWFkc19nZXQoYXJlbmEsIGZhbHNl KSA9PSAwICYmCi0JICAgICFiYWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkKCkpIHsKLQkJLyogRm9y Y2UgcHVyZ2luZyB3aGVuIG5vIHRocmVhZHMgYXNzaWduZWQgdG8gdGhlIGFyZW5hIGFueW1vcmUu ICovCi0JCWFyZW5hX2RlY2F5KHRzZF90c2RuKHRzZCksIGFyZW5hLAotCQkgICAgLyogaXNfYmFj a2dyb3VuZF90aHJlYWQgKi8gZmFsc2UsIC8qIGFsbCAqLyB0cnVlKTsKLQl9IGVsc2UgewotCQlh cmVuYV9kZWNheSh0c2RfdHNkbih0c2QpLCBhcmVuYSwKLQkJICAgIC8qIGlzX2JhY2tncm91bmRf dGhyZWFkICovIGZhbHNlLCAvKiBhbGwgKi8gZmFsc2UpOwotCX0KLX0KLQotLyogRm9yIGF1dG8g dGNhY2hlIChlbWJlZGRlZCBpbiBUU0QpIG9ubHkuICovCi12b2lkCi10Y2FjaGVfY2xlYW51cCh0 c2RfdCAqdHNkKSB7Ci0JdGNhY2hlX3QgKnRjYWNoZSA9IHRzZF90Y2FjaGVwX2dldCh0c2QpOwot CWlmICghdGNhY2hlX2F2YWlsYWJsZSh0c2QpKSB7Ci0JCWFzc2VydCh0c2RfdGNhY2hlX2VuYWJs ZWRfZ2V0KHRzZCkgPT0gZmFsc2UpOwotCQlhc3NlcnQoY2FjaGVfYmluX3N0aWxsX3plcm9faW5p dGlhbGl6ZWQoJnRjYWNoZS0+Ymluc1swXSkpOwotCQlyZXR1cm47Ci0JfQotCWFzc2VydCh0c2Rf dGNhY2hlX2VuYWJsZWRfZ2V0KHRzZCkpOwotCWFzc2VydCghY2FjaGVfYmluX3N0aWxsX3plcm9f aW5pdGlhbGl6ZWQoJnRjYWNoZS0+Ymluc1swXSkpOwotCi0JdGNhY2hlX2Rlc3Ryb3kodHNkLCB0 Y2FjaGUsIHRydWUpOwotCWlmIChjb25maWdfZGVidWcpIHsKLQkJLyoKLQkJICogRm9yIGRlYnVn IHRlc3Rpbmcgb25seSwgd2Ugd2FudCB0byBwcmV0ZW5kIHdlJ3JlIHN0aWxsIGluIHRoZQotCQkg KiB6ZXJvLWluaXRpYWxpemVkIHN0YXRlLgotCQkgKi8KLQkJbWVtc2V0KHRjYWNoZS0+Ymlucywg MCwgc2l6ZW9mKGNhY2hlX2Jpbl90KSAqIG5oYmlucyk7Ci0JfQotfQotCi12b2lkCi10Y2FjaGVf c3RhdHNfbWVyZ2UodHNkbl90ICp0c2RuLCB0Y2FjaGVfdCAqdGNhY2hlLCBhcmVuYV90ICphcmVu YSkgewotCWNhc3NlcnQoY29uZmlnX3N0YXRzKTsKLQotCS8qIE1lcmdlIGFuZCByZXNldCB0Y2Fj aGUgc3RhdHMuICovCi0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5oYmluczsgaSsrKSB7Ci0J CWNhY2hlX2Jpbl90ICpjYWNoZV9iaW4gPSAmdGNhY2hlLT5iaW5zW2ldOwotCQlpZiAoaSA8IFND X05CSU5TKSB7Ci0JCQliaW5fdCAqYmluID0gYXJlbmFfYmluX2Nob29zZSh0c2RuLCBhcmVuYSwg aSwgTlVMTCk7Ci0JCQltYWxsb2NfbXV0ZXhfbG9jayh0c2RuLCAmYmluLT5sb2NrKTsKLQkJCWJp bi0+c3RhdHMubnJlcXVlc3RzICs9IGNhY2hlX2Jpbi0+dHN0YXRzLm5yZXF1ZXN0czsKLQkJCW1h bGxvY19tdXRleF91bmxvY2sodHNkbiwgJmJpbi0+bG9jayk7Ci0JCX0gZWxzZSB7Ci0JCQlhcmVu YV9zdGF0c19sYXJnZV9mbHVzaF9ucmVxdWVzdHNfYWRkKHRzZG4sCi0JCQkgICAgJmFyZW5hLT5z dGF0cywgaSwgY2FjaGVfYmluLT50c3RhdHMubnJlcXVlc3RzKTsKLQkJfQotCQljYWNoZV9iaW4t PnRzdGF0cy5ucmVxdWVzdHMgPSAwOwotCX0KLX0KLQotc3RhdGljIGJvb2wKLXRjYWNoZXNfY3Jl YXRlX3ByZXAodHNkX3QgKnRzZCwgYmFzZV90ICpiYXNlKSB7Ci0JYm9vbCBlcnI7Ci0KLQltYWxs b2NfbXV0ZXhfYXNzZXJ0X293bmVyKHRzZF90c2RuKHRzZCksICZ0Y2FjaGVzX210eCk7Ci0KLQlp ZiAodGNhY2hlcyA9PSBOVUxMKSB7Ci0JCXRjYWNoZXMgPSBiYXNlX2FsbG9jKHRzZF90c2RuKHRz ZCksIGJhc2UsCi0JCSAgICBzaXplb2YodGNhY2hlX3QgKikgKiAoTUFMTE9DWF9UQ0FDSEVfTUFY KzEpLCBDQUNIRUxJTkUpOwotCQlpZiAodGNhY2hlcyA9PSBOVUxMKSB7Ci0JCQllcnIgPSB0cnVl OwotCQkJZ290byBsYWJlbF9yZXR1cm47Ci0JCX0KLQl9Ci0KLQlpZiAodGNhY2hlc19hdmFpbCA9 PSBOVUxMICYmIHRjYWNoZXNfcGFzdCA+IE1BTExPQ1hfVENBQ0hFX01BWCkgewotCQllcnIgPSB0 cnVlOwotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQllcnIgPSBmYWxzZTsKLWxhYmVsX3Jl dHVybjoKLQlyZXR1cm4gZXJyOwotfQotCi1ib29sCi10Y2FjaGVzX2NyZWF0ZSh0c2RfdCAqdHNk LCBiYXNlX3QgKmJhc2UsIHVuc2lnbmVkICpyX2luZCkgewotCXdpdG5lc3NfYXNzZXJ0X2RlcHRo KHRzZG5fd2l0bmVzc190c2RwX2dldCh0c2RfdHNkbih0c2QpKSwgMCk7Ci0KLQlib29sIGVycjsK LQotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZ0Y2FjaGVzX210eCk7Ci0KLQlp ZiAodGNhY2hlc19jcmVhdGVfcHJlcCh0c2QsIGJhc2UpKSB7Ci0JCWVyciA9IHRydWU7Ci0JCWdv dG8gbGFiZWxfcmV0dXJuOwotCX0KLQotCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2FjaGVfY3JlYXRl X2V4cGxpY2l0KHRzZCk7Ci0JaWYgKHRjYWNoZSA9PSBOVUxMKSB7Ci0JCWVyciA9IHRydWU7Ci0J CWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQotCXRjYWNoZXNfdCAqZWxtOwotCWlmICh0Y2FjaGVz X2F2YWlsICE9IE5VTEwpIHsKLQkJZWxtID0gdGNhY2hlc19hdmFpbDsKLQkJdGNhY2hlc19hdmFp bCA9IHRjYWNoZXNfYXZhaWwtPm5leHQ7Ci0JCWVsbS0+dGNhY2hlID0gdGNhY2hlOwotCQkqcl9p bmQgPSAodW5zaWduZWQpKGVsbSAtIHRjYWNoZXMpOwotCX0gZWxzZSB7Ci0JCWVsbSA9ICZ0Y2Fj aGVzW3RjYWNoZXNfcGFzdF07Ci0JCWVsbS0+dGNhY2hlID0gdGNhY2hlOwotCQkqcl9pbmQgPSB0 Y2FjaGVzX3Bhc3Q7Ci0JCXRjYWNoZXNfcGFzdCsrOwotCX0KLQotCWVyciA9IGZhbHNlOwotbGFi ZWxfcmV0dXJuOgotCW1hbGxvY19tdXRleF91bmxvY2sodHNkX3RzZG4odHNkKSwgJnRjYWNoZXNf bXR4KTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aCh0c2RuX3dpdG5lc3NfdHNkcF9nZXQodHNkX3Rz ZG4odHNkKSksIDApOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB0Y2FjaGVfdCAqCi10Y2Fj aGVzX2VsbV9yZW1vdmUodHNkX3QgKnRzZCwgdGNhY2hlc190ICplbG0sIGJvb2wgYWxsb3dfcmVp bml0KSB7Ci0JbWFsbG9jX211dGV4X2Fzc2VydF9vd25lcih0c2RfdHNkbih0c2QpLCAmdGNhY2hl c19tdHgpOwotCi0JaWYgKGVsbS0+dGNhY2hlID09IE5VTEwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0J fQotCXRjYWNoZV90ICp0Y2FjaGUgPSBlbG0tPnRjYWNoZTsKLQlpZiAoYWxsb3dfcmVpbml0KSB7 Ci0JCWVsbS0+dGNhY2hlID0gVENBQ0hFU19FTE1fTkVFRF9SRUlOSVQ7Ci0JfSBlbHNlIHsKLQkJ ZWxtLT50Y2FjaGUgPSBOVUxMOwotCX0KLQotCWlmICh0Y2FjaGUgPT0gVENBQ0hFU19FTE1fTkVF RF9SRUlOSVQpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiB0Y2FjaGU7Ci19Ci0KLXZv aWQKLXRjYWNoZXNfZmx1c2godHNkX3QgKnRzZCwgdW5zaWduZWQgaW5kKSB7Ci0JbWFsbG9jX211 dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnRjYWNoZXNfbXR4KTsKLQl0Y2FjaGVfdCAqdGNhY2hl ID0gdGNhY2hlc19lbG1fcmVtb3ZlKHRzZCwgJnRjYWNoZXNbaW5kXSwgdHJ1ZSk7Ci0JbWFsbG9j X211dGV4X3VubG9jayh0c2RfdHNkbih0c2QpLCAmdGNhY2hlc19tdHgpOwotCWlmICh0Y2FjaGUg IT0gTlVMTCkgewotCQkvKiBEZXN0cm95IHRoZSB0Y2FjaGU7IHJlY3JlYXRlIGluIHRjYWNoZXNf Z2V0KCkgaWYgbmVlZGVkLiAqLwotCQl0Y2FjaGVfZGVzdHJveSh0c2QsIHRjYWNoZSwgZmFsc2Up OwotCX0KLX0KLQotdm9pZAotdGNhY2hlc19kZXN0cm95KHRzZF90ICp0c2QsIHVuc2lnbmVkIGlu ZCkgewotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZ0Y2FjaGVzX210eCk7Ci0J dGNhY2hlc190ICplbG0gPSAmdGNhY2hlc1tpbmRdOwotCXRjYWNoZV90ICp0Y2FjaGUgPSB0Y2Fj aGVzX2VsbV9yZW1vdmUodHNkLCBlbG0sIGZhbHNlKTsKLQllbG0tPm5leHQgPSB0Y2FjaGVzX2F2 YWlsOwotCXRjYWNoZXNfYXZhaWwgPSBlbG07Ci0JbWFsbG9jX211dGV4X3VubG9jayh0c2RfdHNk bih0c2QpLCAmdGNhY2hlc19tdHgpOwotCWlmICh0Y2FjaGUgIT0gTlVMTCkgewotCQl0Y2FjaGVf ZGVzdHJveSh0c2QsIHRjYWNoZSwgZmFsc2UpOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkCi10 Y2FjaGVfbmNhY2hlZF9tYXhfY29tcHV0ZShzemluZF90IHN6aW5kKSB7Ci0JaWYgKHN6aW5kID49 IFNDX05CSU5TKSB7Ci0JCWFzc2VydChzemluZCA8IG5oYmlucyk7Ci0JCXJldHVybiBvcHRfdGNh Y2hlX25zbG90c19sYXJnZTsKLQl9Ci0JdW5zaWduZWQgc2xhYl9ucmVncyA9IGJpbl9pbmZvc1tz emluZF0ubnJlZ3M7Ci0KLQkvKiBXZSBtYXkgbW9kaWZ5IHRoZXNlIHZhbHVlczsgc3RhcnQgd2l0 aCB0aGUgb3B0IHZlcnNpb25zLiAqLwotCXVuc2lnbmVkIG5zbG90c19zbWFsbF9taW4gPSBvcHRf dGNhY2hlX25zbG90c19zbWFsbF9taW47Ci0JdW5zaWduZWQgbnNsb3RzX3NtYWxsX21heCA9IG9w dF90Y2FjaGVfbnNsb3RzX3NtYWxsX21heDsKLQotCS8qCi0JICogQ2xhbXAgdmFsdWVzIHRvIG1l ZXQgb3VyIGNvbnN0cmFpbnRzIC0tIGV2ZW4sIG5vbnplcm8sIG1pbiA8IG1heCwgYW5kCi0JICog c3VpdGFibGUgZm9yIGEgY2FjaGUgYmluIHNpemUuCi0JICovCi0JaWYgKG9wdF90Y2FjaGVfbnNs b3RzX3NtYWxsX21heCA+IENBQ0hFX0JJTl9OQ0FDSEVEX01BWCkgewotCQluc2xvdHNfc21hbGxf bWF4ID0gQ0FDSEVfQklOX05DQUNIRURfTUFYOwotCX0KLQlpZiAobnNsb3RzX3NtYWxsX21pbiAl IDIgIT0gMCkgewotCQluc2xvdHNfc21hbGxfbWluKys7Ci0JfQotCWlmIChuc2xvdHNfc21hbGxf bWF4ICUgMiAhPSAwKSB7Ci0JCW5zbG90c19zbWFsbF9tYXgtLTsKLQl9Ci0JaWYgKG5zbG90c19z bWFsbF9taW4gPCAyKSB7Ci0JCW5zbG90c19zbWFsbF9taW4gPSAyOwotCX0KLQlpZiAobnNsb3Rz X3NtYWxsX21heCA8IDIpIHsKLQkJbnNsb3RzX3NtYWxsX21heCA9IDI7Ci0JfQotCWlmIChuc2xv dHNfc21hbGxfbWluID4gbnNsb3RzX3NtYWxsX21heCkgewotCQluc2xvdHNfc21hbGxfbWluID0g bnNsb3RzX3NtYWxsX21heDsKLQl9Ci0KLQl1bnNpZ25lZCBjYW5kaWRhdGU7Ci0JaWYgKG9wdF9s Z190Y2FjaGVfbnNsb3RzX211bCA8IDApIHsKLQkJY2FuZGlkYXRlID0gc2xhYl9ucmVncyA+PiAo LW9wdF9sZ190Y2FjaGVfbnNsb3RzX211bCk7Ci0JfSBlbHNlIHsKLQkJY2FuZGlkYXRlID0gc2xh Yl9ucmVncyA8PCBvcHRfbGdfdGNhY2hlX25zbG90c19tdWw7Ci0JfQotCWlmIChjYW5kaWRhdGUg JSAyICE9IDApIHsKLQkJLyoKLQkJICogV2UgbmVlZCB0aGUgY2FuZGlkYXRlIHNpemUgdG8gYmUg ZXZlbiAtLSB3ZSBhc3N1bWUgdGhhdCB3ZQotCQkgKiBjYW4gZGl2aWRlIGJ5IHR3byBhbmQgZ2V0 IGEgcG9zaXRpdmUgbnVtYmVyIChlLmcuIHdoZW4KLQkJICogZmx1c2hpbmcpLgotCQkgKi8KLQkJ KytjYW5kaWRhdGU7Ci0JfQotCWlmIChjYW5kaWRhdGUgPD0gbnNsb3RzX3NtYWxsX21pbikgewot CQlyZXR1cm4gbnNsb3RzX3NtYWxsX21pbjsKLQl9IGVsc2UgaWYgKGNhbmRpZGF0ZSA8PSBuc2xv dHNfc21hbGxfbWF4KSB7Ci0JCXJldHVybiBjYW5kaWRhdGU7Ci0JfSBlbHNlIHsKLQkJcmV0dXJu IG5zbG90c19zbWFsbF9tYXg7Ci0JfQotfQotCi1ib29sCi10Y2FjaGVfYm9vdCh0c2RuX3QgKnRz ZG4sIGJhc2VfdCAqYmFzZSkgewotCXRjYWNoZV9tYXhjbGFzcyA9IHN6X3MydShvcHRfdGNhY2hl X21heCk7Ci0JYXNzZXJ0KHRjYWNoZV9tYXhjbGFzcyA8PSBUQ0FDSEVfTUFYQ0xBU1NfTElNSVQp OwotCW5oYmlucyA9IHN6X3NpemUyaW5kZXgodGNhY2hlX21heGNsYXNzKSArIDE7Ci0KLQlpZiAo bWFsbG9jX211dGV4X2luaXQoJnRjYWNoZXNfbXR4LCAidGNhY2hlcyIsIFdJVE5FU1NfUkFOS19U Q0FDSEVTLAotCSAgICBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7Ci0JCXJldHVybiB0 cnVlOwotCX0KLQotCS8qIEluaXRpYWxpemUgdGNhY2hlX2Jpbl9pbmZvLiAgU2VlIGNvbW1lbnRz IGluIHRjYWNoZV9pbml0KCkuICovCi0JdW5zaWduZWQgbl9yZXNlcnZlZF9iaW5zID0gbmhiaW5z IDwgU0NfTkJJTlMgPyBTQ19OQklOUyA6IG5oYmluczsKLQlzaXplX3Qgc2l6ZSA9IG5fcmVzZXJ2 ZWRfYmlucyAqIHNpemVvZihjYWNoZV9iaW5faW5mb190KTsKLQl0Y2FjaGVfYmluX2luZm8gPSAo Y2FjaGVfYmluX2luZm9fdCAqKWJhc2VfYWxsb2ModHNkbiwgYmFzZSwgc2l6ZSwKLQkgICAgQ0FD SEVMSU5FKTsKLQlpZiAodGNhY2hlX2Jpbl9pbmZvID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7 Ci0JfQotCi0JZm9yIChzemluZF90IGkgPSAwOyBpIDwgbmhiaW5zOyBpKyspIHsKLQkJdW5zaWdu ZWQgbmNhY2hlZF9tYXggPSB0Y2FjaGVfbmNhY2hlZF9tYXhfY29tcHV0ZShpKTsKLQkJY2FjaGVf YmluX2luZm9faW5pdCgmdGNhY2hlX2Jpbl9pbmZvW2ldLCBuY2FjaGVkX21heCk7Ci0JfQotCWZv ciAoc3ppbmRfdCBpID0gbmhiaW5zOyBpIDwgU0NfTkJJTlM7IGkrKykgewotCQkvKiBEaXNhYmxl ZCBzbWFsbCBiaW5zLiAqLwotCQljYWNoZV9iaW5faW5mb19pbml0KCZ0Y2FjaGVfYmluX2luZm9b aV0sIDApOwotCQlhc3NlcnQodGNhY2hlX3NtYWxsX2Jpbl9kaXNhYmxlZChpLCBOVUxMKSk7Ci0J fQotCi0JY2FjaGVfYmluX2luZm9fY29tcHV0ZV9hbGxvYyh0Y2FjaGVfYmluX2luZm8sIG5oYmlu cywKLQkgICAgJnRjYWNoZV9iaW5fYWxsb2Nfc2l6ZSwgJnRjYWNoZV9iaW5fYWxsb2NfYWxpZ25t ZW50KTsKLQotCXJldHVybiBmYWxzZTsKLX0KLQotdm9pZAotdGNhY2hlX3ByZWZvcmsodHNkbl90 ICp0c2RuKSB7Ci0JbWFsbG9jX211dGV4X3ByZWZvcmsodHNkbiwgJnRjYWNoZXNfbXR4KTsKLX0K LQotdm9pZAotdGNhY2hlX3Bvc3Rmb3JrX3BhcmVudCh0c2RuX3QgKnRzZG4pIHsKLQltYWxsb2Nf bXV0ZXhfcG9zdGZvcmtfcGFyZW50KHRzZG4sICZ0Y2FjaGVzX210eCk7Ci19Ci0KLXZvaWQKLXRj YWNoZV9wb3N0Zm9ya19jaGlsZCh0c2RuX3QgKnRzZG4pIHsKLQltYWxsb2NfbXV0ZXhfcG9zdGZv cmtfY2hpbGQodHNkbiwgJnRjYWNoZXNfbXR4KTsKLX0KLQotdm9pZCB0Y2FjaGVfYXNzZXJ0X2lu aXRpYWxpemVkKHRjYWNoZV90ICp0Y2FjaGUpIHsKLQlhc3NlcnQoIWNhY2hlX2Jpbl9zdGlsbF96 ZXJvX2luaXRpYWxpemVkKCZ0Y2FjaGUtPmJpbnNbMF0pKTsKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGVzdF9ob29rcy5jIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3Rlc3RfaG9va3MuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlMDBkOS4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGVzdF9ob29rcy5jCisrKyAvZGV2 L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFs bG9jX3ByZWFtYmxlLmgiCi0KLS8qCi0gKiBUaGUgaG9va3MgYXJlIGEgbGl0dGxlIGJpdCBzY3Jl d3kgLS0gdGhleSdyZSBub3QgZ2VudWluZWx5IGV4cG9ydGVkIGluIHRoZQotICogc2Vuc2UgdGhh dCB3ZSB3YW50IHRoZW0gYXZhaWxhYmxlIHRvIGVuZC11c2VycywgYnV0IHdlIGRvIHdhbnQgdGhl bSB2aXNpYmxlCi0gKiBmcm9tIG91dHNpZGUgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5LCBzbyB0aGF0 IHdlIGNhbiB1c2UgdGhlbSBpbiB0ZXN0IGNvZGUuCi0gKi8KLUpFTUFMTE9DX0VYUE9SVAotdm9p ZCAoKnRlc3RfaG9va3NfYXJlbmFfbmV3X2hvb2spKCkgPSBOVUxMOwotCi1KRU1BTExPQ19FWFBP UlQKLXZvaWQgKCp0ZXN0X2hvb2tzX2xpYmNfaG9vaykoKSA9IE5VTEw7CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RocmVhZF9ldmVudC5j IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RocmVhZF9ldmVu dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2ViNTgyLi4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90aHJlYWRfZXZlbnQu YworKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9q ZW1hbGxvY19pbnRlcm5hbF9pbmNsdWRlcy5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvdGhyZWFkX2V2ZW50LmgiCi0KLS8qCi0gKiBTaWduYXR1cmVzIGZvciBldmVudCBzcGVjaWZp YyBmdW5jdGlvbnMuICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGRlZmluZWQKLSAqIGJ5IHRo ZSBtb2R1bGVzIG93bmluZyBlYWNoIGV2ZW50LiAgVGhlIHNpZ25hdHVyZXMgaGVyZSB2ZXJpZnkg dGhhdCB0aGUKLSAqIGRlZmluaXRpb25zIGZvbGxvdyB0aGUgcmlnaHQgZm9ybWF0LgotICoKLSAq IFRoZSBmaXJzdCB0d28gYXJlIGZ1bmN0aW9ucyBjb21wdXRpbmcgbmV3IC8gcG9zdHBvbmVkIGV2 ZW50IHdhaXQgdGltZS4gIE5ldwotICogZXZlbnQgd2FpdCB0aW1lIGlzIHRoZSB0aW1lIHRpbGwg dGhlIG5leHQgZXZlbnQgaWYgYW4gZXZlbnQgaXMgY3VycmVudGx5Ci0gKiBiZWluZyB0cmlnZ2Vy ZWQ7IHBvc3Rwb25lZCBldmVudCB3YWl0IHRpbWUgaXMgdGhlIHRpbWUgdGlsbCB0aGUgbmV4dCBl dmVudAotICogaWYgYW4gZXZlbnQgc2hvdWxkIGJlIHRyaWdnZXJlZCBidXQgbmVlZHMgdG8gYmUg cG9zdHBvbmVkLCBlLmcuIHdoZW4gdGhlIFRTRAotICogaXMgbm90IG5vbWluYWwgb3IgZHVyaW5n IHJlZW50cmFuY3kuCi0gKgotICogVGhlIHRoaXJkIGlzIHRoZSBldmVudCBoYW5kbGVyIGZ1bmN0 aW9uLCB3aGljaCBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gZXZlbnQKLSAqIGlzIHRyaWdnZXJlZC4g IFRoZSBwYXJhbWV0ZXIgaXMgdGhlIGVsYXBzZWQgdGltZSBzaW5jZSB0aGUgbGFzdCB0aW1lIGFu Ci0gKiBldmVudCBvZiB0aGUgc2FtZSB0eXBlIHdhcyB0cmlnZ2VyZWQuCi0gKi8KLSNkZWZpbmUg RShldmVudCwgY29uZGl0aW9uX3VudXNlZCwgaXNfYWxsb2NfZXZlbnRfdW51c2VkKQkJXAotdWlu dDY0X3QgZXZlbnQjI19uZXdfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsJCQkJXAotdWludDY0X3Qg ZXZlbnQjI19wb3N0cG9uZWRfZXZlbnRfd2FpdCh0c2RfdCAqdHNkKTsJCQlcCi12b2lkIGV2ZW50 IyNfZXZlbnRfaGFuZGxlcih0c2RfdCAqdHNkLCB1aW50NjRfdCBlbGFwc2VkKTsKLQotSVRFUkFU RV9PVkVSX0FMTF9FVkVOVFMKLSN1bmRlZiBFCi0KLS8qIFNpZ25hdHVyZXMgZm9yIGludGVybmFs IGZ1bmN0aW9ucyBmZXRjaGluZyBlbGFwc2VkIHRpbWUuICovCi0jZGVmaW5lIEUoZXZlbnQsIGNv bmRpdGlvbl91bnVzZWQsIGlzX2FsbG9jX2V2ZW50X3VudXNlZCkJCVwKLXN0YXRpYyB1aW50NjRf dCBldmVudCMjX2ZldGNoX2VsYXBzZWQodHNkX3QgKnRzZCk7Ci0KLUlURVJBVEVfT1ZFUl9BTExf RVZFTlRTCi0jdW5kZWYgRQotCi1zdGF0aWMgdWludDY0X3QKLXRjYWNoZV9nY19mZXRjaF9lbGFw c2VkKHRzZF90ICp0c2QpIHsKLQlyZXR1cm4gVEVfSU5WQUxJRF9FTEFQU0VEOwotfQotCi1zdGF0 aWMgdWludDY0X3QKLXRjYWNoZV9nY19kYWxsb2NfZmV0Y2hfZWxhcHNlZCh0c2RfdCAqdHNkKSB7 Ci0JcmV0dXJuIFRFX0lOVkFMSURfRUxBUFNFRDsKLX0KLQotc3RhdGljIHVpbnQ2NF90Ci1wcm9m X3NhbXBsZV9mZXRjaF9lbGFwc2VkKHRzZF90ICp0c2QpIHsKLQl1aW50NjRfdCBsYXN0X2V2ZW50 ID0gdGhyZWFkX2FsbG9jYXRlZF9sYXN0X2V2ZW50X2dldCh0c2QpOwotCXVpbnQ2NF90IGxhc3Rf c2FtcGxlX2V2ZW50ID0gcHJvZl9zYW1wbGVfbGFzdF9ldmVudF9nZXQodHNkKTsKLQlwcm9mX3Nh bXBsZV9sYXN0X2V2ZW50X3NldCh0c2QsIGxhc3RfZXZlbnQpOwotCXJldHVybiBsYXN0X2V2ZW50 IC0gbGFzdF9zYW1wbGVfZXZlbnQ7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdAotc3RhdHNfaW50ZXJ2 YWxfZmV0Y2hfZWxhcHNlZCh0c2RfdCAqdHNkKSB7Ci0JdWludDY0X3QgbGFzdF9ldmVudCA9IHRo cmVhZF9hbGxvY2F0ZWRfbGFzdF9ldmVudF9nZXQodHNkKTsKLQl1aW50NjRfdCBsYXN0X3N0YXRz X2V2ZW50ID0gc3RhdHNfaW50ZXJ2YWxfbGFzdF9ldmVudF9nZXQodHNkKTsKLQlzdGF0c19pbnRl cnZhbF9sYXN0X2V2ZW50X3NldCh0c2QsIGxhc3RfZXZlbnQpOwotCXJldHVybiBsYXN0X2V2ZW50 IC0gbGFzdF9zdGF0c19ldmVudDsKLX0KLQotc3RhdGljIHVpbnQ2NF90Ci1wZWFrX2FsbG9jX2Zl dGNoX2VsYXBzZWQodHNkX3QgKnRzZCkgewotCXJldHVybiBURV9JTlZBTElEX0VMQVBTRUQ7Ci19 Ci0KLXN0YXRpYyB1aW50NjRfdAotcGVha19kYWxsb2NfZmV0Y2hfZWxhcHNlZCh0c2RfdCAqdHNk KSB7Ci0JcmV0dXJuIFRFX0lOVkFMSURfRUxBUFNFRDsKLX0KLQotLyogUGVyIGV2ZW50IGZhY2ls aXRpZXMgZG9uZS4gKi8KLQotc3RhdGljIGJvb2wKLXRlX2N0eF9oYXNfYWN0aXZlX2V2ZW50cyh0 ZV9jdHhfdCAqY3R4KSB7Ci0JYXNzZXJ0KGNvbmZpZ19kZWJ1Zyk7Ci0jZGVmaW5lIEUoZXZlbnQs IGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJICAgICAgIFwKLQlpZiAoY29uZGl0aW9uICYmIGFs bG9jX2V2ZW50ID09IGN0eC0+aXNfYWxsb2MpIHsJICAgICAgIFwKLQkJcmV0dXJuIHRydWU7CQkJ CQkgICAgICAgXAotCX0KLQlJVEVSQVRFX09WRVJfQUxMX0VWRU5UUwotI3VuZGVmIEUKLQlyZXR1 cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdAotdGVfbmV4dF9ldmVudF9jb21wdXRlKHRz ZF90ICp0c2QsIGJvb2wgaXNfYWxsb2MpIHsKLQl1aW50NjRfdCB3YWl0ID0gVEVfTUFYX1NUQVJU X1dBSVQ7Ci0jZGVmaW5lIEUoZXZlbnQsIGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJCVwKLQlp ZiAoaXNfYWxsb2MgPT0gYWxsb2NfZXZlbnQgJiYgY29uZGl0aW9uKSB7CQkJXAotCQl1aW50NjRf dCBldmVudF93YWl0ID0JCQkJCVwKLQkJICAgIGV2ZW50IyNfZXZlbnRfd2FpdF9nZXQodHNkKTsJ CQlcCi0JCWFzc2VydChldmVudF93YWl0IDw9IFRFX01BWF9TVEFSVF9XQUlUKTsJCVwKLQkJaWYg KGV2ZW50X3dhaXQgPiAwVSAmJiBldmVudF93YWl0IDwgd2FpdCkgewkJXAotCQkJd2FpdCA9IGV2 ZW50X3dhaXQ7CQkJCVwKLQkJfQkJCQkJCQlcCi0JfQotCi0JSVRFUkFURV9PVkVSX0FMTF9FVkVO VFMKLSN1bmRlZiBFCi0JYXNzZXJ0KHdhaXQgPD0gVEVfTUFYX1NUQVJUX1dBSVQpOwotCXJldHVy biB3YWl0OwotfQotCi1zdGF0aWMgdm9pZAotdGVfYXNzZXJ0X2ludmFyaWFudHNfaW1wbCh0c2Rf dCAqdHNkLCB0ZV9jdHhfdCAqY3R4KSB7Ci0JdWludDY0X3QgY3VycmVudF9ieXRlcyA9IHRlX2N0 eF9jdXJyZW50X2J5dGVzX2dldChjdHgpOwotCXVpbnQ2NF90IGxhc3RfZXZlbnQgPSB0ZV9jdHhf bGFzdF9ldmVudF9nZXQoY3R4KTsKLQl1aW50NjRfdCBuZXh0X2V2ZW50ID0gdGVfY3R4X25leHRf ZXZlbnRfZ2V0KGN0eCk7Ci0JdWludDY0X3QgbmV4dF9ldmVudF9mYXN0ID0gdGVfY3R4X25leHRf ZXZlbnRfZmFzdF9nZXQoY3R4KTsKLQotCWFzc2VydChsYXN0X2V2ZW50ICE9IG5leHRfZXZlbnQp OwotCWlmIChuZXh0X2V2ZW50ID4gVEVfTkVYVF9FVkVOVF9GQVNUX01BWCB8fCAhdHNkX2Zhc3Qo dHNkKSkgewotCQlhc3NlcnQobmV4dF9ldmVudF9mYXN0ID09IDBVKTsKLQl9IGVsc2UgewotCQlh c3NlcnQobmV4dF9ldmVudF9mYXN0ID09IG5leHRfZXZlbnQpOwotCX0KLQotCS8qIFRoZSBzdWJ0 cmFjdGlvbiBpcyBpbnRlbnRpb25hbGx5IHN1c2NlcHRpYmxlIHRvIHVuZGVyZmxvdy4gKi8KLQl1 aW50NjRfdCBpbnRlcnZhbCA9IG5leHRfZXZlbnQgLSBsYXN0X2V2ZW50OwotCi0JLyogVGhlIHN1 YnRyYWN0aW9uIGlzIGludGVudGlvbmFsbHkgc3VzY2VwdGlibGUgdG8gdW5kZXJmbG93LiAqLwot CWFzc2VydChjdXJyZW50X2J5dGVzIC0gbGFzdF9ldmVudCA8IGludGVydmFsKTsKLQl1aW50NjRf dCBtaW5fd2FpdCA9IHRlX25leHRfZXZlbnRfY29tcHV0ZSh0c2QsIHRlX2N0eF9pc19hbGxvYyhj dHgpKTsKLQkvKgotCSAqIG5leHRfZXZlbnQgc2hvdWxkIGhhdmUgYmVlbiBwdXNoZWQgdXAgb25s eSBleGNlcHQgd2hlbiBubyBldmVudCBpcwotCSAqIG9uIGFuZCB0aGUgVFNEIGlzIGp1c3QgaW5p dGlhbGl6ZWQuICBUaGUgbGFzdF9ldmVudCA9PSAwVSBndWFyZAotCSAqIGJlbG93IGlzIHN0cm9u Z2VyIHRoYW4gbmVlZGVkLCBidXQgaGF2aW5nIGFuIGV4YWN0bHkgYWNjdXJhdGUgZ3VhcmQKLQkg KiBpcyBtb3JlIGNvbXBsaWNhdGVkIHRvIGltcGxlbWVudC4KLQkgKi8KLQlhc3NlcnQoKCF0ZV9j dHhfaGFzX2FjdGl2ZV9ldmVudHMoY3R4KSAmJiBsYXN0X2V2ZW50ID09IDBVKSB8fAotCSAgICBp bnRlcnZhbCA9PSBtaW5fd2FpdCB8fAotCSAgICAoaW50ZXJ2YWwgPCBtaW5fd2FpdCAmJiBpbnRl cnZhbCA9PSBURV9NQVhfSU5URVJWQUwpKTsKLX0KLQotdm9pZAotdGVfYXNzZXJ0X2ludmFyaWFu dHNfZGVidWcodHNkX3QgKnRzZCkgewotCXRlX2N0eF90IGN0eDsKLQl0ZV9jdHhfZ2V0KHRzZCwg JmN0eCwgdHJ1ZSk7Ci0JdGVfYXNzZXJ0X2ludmFyaWFudHNfaW1wbCh0c2QsICZjdHgpOwotCi0J dGVfY3R4X2dldCh0c2QsICZjdHgsIGZhbHNlKTsKLQl0ZV9hc3NlcnRfaW52YXJpYW50c19pbXBs KHRzZCwgJmN0eCk7Ci19Ci0KLS8qCi0gKiBTeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBmYXN0 IHRocmVzaG9sZCBpbiB0c2QgLS0KLSAqIFRoZXJlIGFyZSB0d28gdGhyZWFkcyB0byBjb25zaWRl ciBpbiB0aGUgc3luY2hyb25pemF0aW9uIGhlcmU6Ci0gKiAtIFRoZSBvd25lciBvZiB0aGUgdHNk IGJlaW5nIHVwZGF0ZWQgYnkgYSBzbG93IHBhdGggY2hhbmdlCi0gKiAtIFRoZSByZW1vdGUgdGhy ZWFkLCBkb2luZyB0aGF0IHNsb3cgcGF0aCBjaGFuZ2UuCi0gKgotICogQXMgYSBkZXNpZ24gY29u c3RyYWludCwgd2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIHNsb3ctcGF0aCB0cmFuc2l0aW9uIGNh bm5vdAotICogYmUgaWdub3JlZCBmb3IgYXJiaXRyYXJpbHkgbG9uZywgYW5kIHRoYXQgaWYgdGhl IHJlbW90ZSB0aHJlYWQgY2F1c2VzIGEKLSAqIHNsb3ctcGF0aCB0cmFuc2l0aW9uIGFuZCB0aGVu IGNvbW11bmljYXRlcyB3aXRoIHRoZSBvd25lciB0aHJlYWQgdGhhdCBpdCBoYXMKLSAqIG9jY3Vy cmVkLCB0aGVuIHRoZSBvd25lciB3aWxsIGdvIGRvd24gdGhlIHNsb3cgcGF0aCBvbiB0aGUgbmV4 dCBhbGxvY2F0b3IKLSAqIG9wZXJhdGlvbiAoc28gdGhhdCB3ZSBkb24ndCB3YW50IHRvIGp1c3Qg d2FpdCB1bnRpbCB0aGUgb3duZXIgaGl0cyBpdHMgc2xvdwotICogcGF0aCByZXNldCBjb25kaXRp b24gb24gaXRzIG93bikuCi0gKgotICogSGVyZSdzIG91ciBzdHJhdGVneSB0byBkbyB0aGF0Ogot ICoKLSAqIFRoZSByZW1vdGUgdGhyZWFkIHdpbGwgdXBkYXRlIHRoZSBzbG93LXBhdGggc3RvcmVz IHRvIFRTRCB2YXJpYWJsZXMsIGlzc3VlIGEKLSAqIFNFUV9DU1QgZmVuY2UsIGFuZCB0aGVuIHVw ZGF0ZSB0aGUgVFNEIG5leHRfZXZlbnRfZmFzdCBjb3VudGVyLiBUaGUgb3duZXIKLSAqIHRocmVh ZCB3aWxsIHVwZGF0ZSBuZXh0X2V2ZW50X2Zhc3QsIGlzc3VlIGFuIFNFUV9DU1QgZmVuY2UsIGFu ZCB0aGVuIGNoZWNrCi0gKiBpdHMgVFNEIHRvIHNlZSBpZiBpdCdzIG9uIHRoZSBzbG93IHBhdGgu Ci0KLSAqIFRoaXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB3aGVuIDY0LWJpdCBhdG9taWNz IGFyZSBzdXBwb3J0ZWQuIEFzc3VtZSB0aGF0Ci0gKiB0aGUgcmVtb3RlIGZlbmNlIGlzIHNhbmR3 aWNoZWQgYmV0d2VlbiB0d28gb3duZXIgZmVuY2VzIGluIHRoZSByZXNldCBwYXRod2F5LgotICog VGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gcHJlY2VkaW5nIG9yIHRyYWlsaW5nIG93bmVyIGZl bmNlIChpLmUuIGJlY2F1c2UKLSAqIHRoZSBvd25lciB0aHJlYWQgaXMgbmVhciB0aGUgYmVnaW5u aW5nIG9yIGVuZCBvZiBpdHMgbGlmZSkgY2FuIGJlIGFuYWx5emVkCi0gKiBzaW1pbGFybHkuIFRo ZSBvd25lciBzdG9yZSB0byBuZXh0X2V2ZW50X2Zhc3QgcHJlY2VkaW5nIHRoZSBlYXJsaWVyIG93 bmVyCi0gKiBmZW5jZSB3aWxsIGJlIGVhcmxpZXIgaW4gY29oZXJlbmNlIG9yZGVyIHRoYW4gdGhl IHJlbW90ZSBzdG9yZSB0byBpdCwgc28gdGhhdAotICogdGhlIG93bmVyIHRocmVhZCB3aWxsIGdv IGRvd24gdGhlIHNsb3cgcGF0aCBvbmNlIHRoZSBzdG9yZSBiZWNvbWVzIHZpc2libGUgdG8KLSAq IGl0LCB3aGljaCBpcyBubyBsYXRlciB0aGFuIHRoZSB0aW1lIG9mIHRoZSBzZWNvbmQgZmVuY2Uu Ci0KLSAqIFRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IHN1cHBvcnQgNjQtYml0IGF0b21pY3MgaXMg dHJpY2tpZXIsIHNpbmNlIHdvcmQKLSAqIHRlYXJpbmcgaXMgcG9zc2libGUuIFdlJ2xsIHJlcGVh dCB0aGUgc2FtZSBhbmFseXNpcywgYW5kIGxvb2sgYXQgdGhlIHR3bwotICogb3duZXIgZmVuY2Vz IHNhbmR3aWNoaW5nIHRoZSByZW1vdGUgZmVuY2UuIFRoZSBuZXh0X2V2ZW50X2Zhc3Qgc3RvcmVz IGRvbmUKLSAqIGFsb25nc2lkZSB0aGUgZWFybGllciBvd25lciBmZW5jZSBjYW5ub3Qgb3Zlcndy aXRlIGFueSBvZiB0aGUgcmVtb3RlIHN0b3JlcwotICogKHNpbmNlIHRoZXkgcHJlY2VkZSB0aGUg ZWFybGllciBvd25lciBmZW5jZSBpbiBzYiwgd2hpY2ggcHJlY2VkZXMgdGhlIHJlbW90ZQotICog ZmVuY2UgaW4gc2MsIHdoaWNoIHByZWNlZGVzIHRoZSByZW1vdGUgc3RvcmVzIGluIHNiKS4gQWZ0 ZXIgdGhlIHNlY29uZCBvd25lcgotICogZmVuY2UgdGhlcmUgd2lsbCBiZSBhIHJlLWNoZWNrIG9m IHRoZSBzbG93LXBhdGggdmFyaWFibGVzIGFueXdheXMsIHNvIHRoZQotICogIm93bmVyIHdpbGwg bm90aWNlIHRoYXQgaXQncyBvbiB0aGUgc2xvdyBwYXRoIGV2ZW50dWFsbHkiIGd1YXJhbnRlZSBp cwotICogc2F0aXNmaWVkLiBUbyBtYWtlIHN1cmUgdGhhdCB0aGUgb3V0LW9mLWJhbmQtbWVzc2Fn aW5nIGNvbnN0cmFpbnQgaXMgYXMgd2VsbCwKLSAqIG5vdGUgdGhhdCBlaXRoZXIgdGhlIG1lc3Nh Z2UgcGFzc2luZyBpcyBzZXF1ZW5jZWQgYmVmb3JlIHRoZSBzZWNvbmQgb3duZXIKLSAqIGZlbmNl IChpbiB3aGljaCBjYXNlIHRoZSByZW1vdGUgc3RvcmVzIGhhcHBlbiBiZWZvcmUgdGhlIHNlY29u ZCBzZXQgb2Ygb3duZXIKLSAqIHN0b3Jlcywgc28gbWFsbG9jIHNlZXMgYSB2YWx1ZSBvZiB6ZXJv IGZvciBuZXh0X2V2ZW50X2Zhc3QgYW5kIGdvZXMgZG93biB0aGUKLSAqIHNsb3cgcGF0aCksIG9y IGl0IGlzIG5vdCAoaW4gd2hpY2ggY2FzZSB0aGUgb3duZXIgc2VlcyB0aGUgdHNkIHNsb3ctcGF0 aAotICogd3JpdGVzIG9uIGl0cyBwcmV2aW91cyB1cGRhdGUpLiBUaGlzIGxlYXZlcyBvcGVuIHRo ZSBwb3NzaWJpbGl0eSB0aGF0IHRoZQotICogcmVtb3RlIHRocmVhZCB3aWxsIChhdCBzb21lIGFy Yml0cmFyeSBwb2ludCBpbiB0aGUgZnV0dXJlKSB6ZXJvIG91dCBvbmUgaGFsZgotICogb2YgdGhl IG93bmVyIHRocmVhZCdzIG5leHRfZXZlbnRfZmFzdCwgYnV0IHRoYXQncyBhbHdheXMgc2FmZSAo aXQganVzdCBzZW5kcwotICogaXQgZG93biB0aGUgc2xvdyBwYXRoIGVhcmxpZXIpLgotICovCi1z dGF0aWMgdm9pZAotdGVfY3R4X25leHRfZXZlbnRfZmFzdF91cGRhdGUodGVfY3R4X3QgKmN0eCkg ewotCXVpbnQ2NF90IG5leHRfZXZlbnQgPSB0ZV9jdHhfbmV4dF9ldmVudF9nZXQoY3R4KTsKLQl1 aW50NjRfdCBuZXh0X2V2ZW50X2Zhc3QgPSAobmV4dF9ldmVudCA8PSBURV9ORVhUX0VWRU5UX0ZB U1RfTUFYKSA/Ci0JICAgIG5leHRfZXZlbnQgOiAwVTsKLQl0ZV9jdHhfbmV4dF9ldmVudF9mYXN0 X3NldChjdHgsIG5leHRfZXZlbnRfZmFzdCk7Ci19Ci0KLXZvaWQKLXRlX3JlY29tcHV0ZV9mYXN0 X3RocmVzaG9sZCh0c2RfdCAqdHNkKSB7Ci0JaWYgKHRzZF9zdGF0ZV9nZXQodHNkKSAhPSB0c2Rf c3RhdGVfbm9taW5hbCkgewotCQkvKiBDaGVjayBmaXJzdCBiZWNhdXNlIHRoaXMgaXMgYWxzbyBj YWxsZWQgb24gcHVyZ2F0b3J5LiAqLwotCQl0ZV9uZXh0X2V2ZW50X2Zhc3Rfc2V0X25vbl9ub21p bmFsKHRzZCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl0ZV9jdHhfdCBjdHg7Ci0JdGVfY3R4X2dldCh0 c2QsICZjdHgsIHRydWUpOwotCXRlX2N0eF9uZXh0X2V2ZW50X2Zhc3RfdXBkYXRlKCZjdHgpOwot CXRlX2N0eF9nZXQodHNkLCAmY3R4LCBmYWxzZSk7Ci0JdGVfY3R4X25leHRfZXZlbnRfZmFzdF91 cGRhdGUoJmN0eCk7Ci0KLQlhdG9taWNfZmVuY2UoQVRPTUlDX1NFUV9DU1QpOwotCWlmICh0c2Rf c3RhdGVfZ2V0KHRzZCkgIT0gdHNkX3N0YXRlX25vbWluYWwpIHsKLQkJdGVfbmV4dF9ldmVudF9m YXN0X3NldF9ub25fbm9taW5hbCh0c2QpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXRlX2FkanVz dF90aHJlc2hvbGRzX2hlbHBlcih0c2RfdCAqdHNkLCB0ZV9jdHhfdCAqY3R4LAotICAgIHVpbnQ2 NF90IHdhaXQpIHsKLQkvKgotCSAqIFRoZSBuZXh0IHRocmVzaG9sZCBiYXNlZCBvbiBmdXR1cmUg ZXZlbnRzIGNhbiBvbmx5IGJlIGFkanVzdGVkIGFmdGVyCi0JICogcHJvZ3Jlc3NpbmcgdGhlIGxh c3RfZXZlbnQgY291bnRlciAod2hpY2ggaXMgc2V0IHRvIGN1cnJlbnQpLgotCSAqLwotCWFzc2Vy dCh0ZV9jdHhfY3VycmVudF9ieXRlc19nZXQoY3R4KSA9PSB0ZV9jdHhfbGFzdF9ldmVudF9nZXQo Y3R4KSk7Ci0JYXNzZXJ0KHdhaXQgPD0gVEVfTUFYX1NUQVJUX1dBSVQpOwotCi0JdWludDY0X3Qg bmV4dF9ldmVudCA9IHRlX2N0eF9sYXN0X2V2ZW50X2dldChjdHgpICsgKHdhaXQgPD0KLQkgICAg VEVfTUFYX0lOVEVSVkFMID8gd2FpdCA6IFRFX01BWF9JTlRFUlZBTCk7Ci0JdGVfY3R4X25leHRf ZXZlbnRfc2V0KHRzZCwgY3R4LCBuZXh0X2V2ZW50KTsKLX0KLQotc3RhdGljIHVpbnQ2NF90Ci10 ZV9jbGlwX2V2ZW50X3dhaXQodWludDY0X3QgZXZlbnRfd2FpdCkgewotCWFzc2VydChldmVudF93 YWl0ID4gMFUpOwotCWlmIChURV9NSU5fU1RBUlRfV0FJVCA+IDFVICYmCi0JICAgIHVubGlrZWx5 KGV2ZW50X3dhaXQgPCBURV9NSU5fU1RBUlRfV0FJVCkpIHsKLQkJZXZlbnRfd2FpdCA9IFRFX01J Tl9TVEFSVF9XQUlUOwotCX0KLQlpZiAoVEVfTUFYX1NUQVJUX1dBSVQgPCBVSU5UNjRfTUFYICYm Ci0JICAgIHVubGlrZWx5KGV2ZW50X3dhaXQgPiBURV9NQVhfU1RBUlRfV0FJVCkpIHsKLQkJZXZl bnRfd2FpdCA9IFRFX01BWF9TVEFSVF9XQUlUOwotCX0KLQlyZXR1cm4gZXZlbnRfd2FpdDsKLX0K LQotdm9pZAotdGVfZXZlbnRfdHJpZ2dlcih0c2RfdCAqdHNkLCB0ZV9jdHhfdCAqY3R4KSB7Ci0J LyogdXNpemUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aHJlYWRfYWxsb2NhdGVkLiAqLwot CXVpbnQ2NF90IGJ5dGVzX2FmdGVyID0gdGVfY3R4X2N1cnJlbnRfYnl0ZXNfZ2V0KGN0eCk7Ci0J LyogVGhlIHN1YnRyYWN0aW9uIGlzIGludGVudGlvbmFsbHkgc3VzY2VwdGlibGUgdG8gdW5kZXJm bG93LiAqLwotCXVpbnQ2NF90IGFjY3VtYnl0ZXMgPSBieXRlc19hZnRlciAtIHRlX2N0eF9sYXN0 X2V2ZW50X2dldChjdHgpOwotCi0JdGVfY3R4X2xhc3RfZXZlbnRfc2V0KGN0eCwgYnl0ZXNfYWZ0 ZXIpOwotCi0JYm9vbCBhbGxvd19ldmVudF90cmlnZ2VyID0gdHNkX25vbWluYWwodHNkKSAmJgot CSAgICB0c2RfcmVlbnRyYW5jeV9sZXZlbF9nZXQodHNkKSA9PSAwOwotCWJvb2wgaXNfYWxsb2Mg PSBjdHgtPmlzX2FsbG9jOwotCXVpbnQ2NF90IHdhaXQgPSBURV9NQVhfU1RBUlRfV0FJVDsKLQot I2RlZmluZSBFKGV2ZW50LCBjb25kaXRpb24sIGFsbG9jX2V2ZW50KQkJCQlcCi0JYm9vbCBpc18j I2V2ZW50IyNfdHJpZ2dlcmVkID0gZmFsc2U7CQkJCVwKLQlpZiAoaXNfYWxsb2MgPT0gYWxsb2Nf ZXZlbnQgJiYgY29uZGl0aW9uKSB7CQkJXAotCQl1aW50NjRfdCBldmVudF93YWl0ID0gZXZlbnQj I19ldmVudF93YWl0X2dldCh0c2QpOwlcCi0JCWFzc2VydChldmVudF93YWl0IDw9IFRFX01BWF9T VEFSVF9XQUlUKTsJCVwKLQkJaWYgKGV2ZW50X3dhaXQgPiBhY2N1bWJ5dGVzKSB7CQkJCVwKLQkJ CWV2ZW50X3dhaXQgLT0gYWNjdW1ieXRlczsJCQlcCi0JCX0gZWxzZSBpZiAoIWFsbG93X2V2ZW50 X3RyaWdnZXIpIHsJCQlcCi0JCQlldmVudF93YWl0ID0gZXZlbnQjI19wb3N0cG9uZWRfZXZlbnRf d2FpdCh0c2QpOwlcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkJaXNfIyNldmVudCMjX3RyaWdnZXJl ZCA9IHRydWU7CQkJXAotCQkJZXZlbnRfd2FpdCA9IGV2ZW50IyNfbmV3X2V2ZW50X3dhaXQodHNk KTsJXAotCQl9CQkJCQkJCVwKLQkJZXZlbnRfd2FpdCA9IHRlX2NsaXBfZXZlbnRfd2FpdChldmVu dF93YWl0KTsJCVwKLQkJZXZlbnQjI19ldmVudF93YWl0X3NldCh0c2QsIGV2ZW50X3dhaXQpOwkJ XAotCQlpZiAoZXZlbnRfd2FpdCA8IHdhaXQpIHsJCQkJXAotCQkJd2FpdCA9IGV2ZW50X3dhaXQ7 CQkJCVwKLQkJfQkJCQkJCQlcCi0JfQotCi0JSVRFUkFURV9PVkVSX0FMTF9FVkVOVFMKLSN1bmRl ZiBFCi0KLQlhc3NlcnQod2FpdCA8PSBURV9NQVhfU1RBUlRfV0FJVCk7Ci0JdGVfYWRqdXN0X3Ro cmVzaG9sZHNfaGVscGVyKHRzZCwgY3R4LCB3YWl0KTsKLQl0ZV9hc3NlcnRfaW52YXJpYW50cyh0 c2QpOwotCi0jZGVmaW5lIEUoZXZlbnQsIGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJCVwKLQlp ZiAoaXNfYWxsb2MgPT0gYWxsb2NfZXZlbnQgJiYgY29uZGl0aW9uICYmCQkJXAotCSAgICBpc18j I2V2ZW50IyNfdHJpZ2dlcmVkKSB7CQkJCQlcCi0JCWFzc2VydChhbGxvd19ldmVudF90cmlnZ2Vy KTsJCQkJXAotCQl1aW50NjRfdCBlbGFwc2VkID0gZXZlbnQjI19mZXRjaF9lbGFwc2VkKHRzZCk7 CQlcCi0JCWV2ZW50IyNfZXZlbnRfaGFuZGxlcih0c2QsIGVsYXBzZWQpOwkJCVwKLQl9Ci0KLQlJ VEVSQVRFX09WRVJfQUxMX0VWRU5UUwotI3VuZGVmIEUKLQotCXRlX2Fzc2VydF9pbnZhcmlhbnRz KHRzZCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZV9pbml0KHRzZF90ICp0c2QsIGJvb2wgaXNfYWxs b2MpIHsKLQl0ZV9jdHhfdCBjdHg7Ci0JdGVfY3R4X2dldCh0c2QsICZjdHgsIGlzX2FsbG9jKTsK LQkvKgotCSAqIFJlc2V0IHRoZSBsYXN0IGV2ZW50IHRvIGN1cnJlbnQsIHdoaWNoIHN0YXJ0cyB0 aGUgZXZlbnRzIGZyb20gYSBjbGVhbgotCSAqIHN0YXRlLiAgVGhpcyBpcyBuZWNlc3Nhcnkgd2hl biByZS1pbml0IHRoZSB0c2QgZXZlbnQgY291bnRlcnMuCi0JICoKLQkgKiBUaGUgZXZlbnQgY291 bnRlcnMgbWFpbnRhaW4gYSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY3VycmVudCBieXRlczoKLQkg KiBsYXN0X2V2ZW50IDw9IGN1cnJlbnQgPCBuZXh0X2V2ZW50LiAgV2hlbiBhIHJlaW5pdCBoYXBw ZW5zIChlLmcuCi0JICogcmVpbmNhcm5hdGVkIHRzZCksIHRoZSBsYXN0IGV2ZW50IG5lZWRzIHBy b2dyZXNzaW5nIGJlY2F1c2UgYWxsCi0JICogZXZlbnRzIHN0YXJ0IGZyZXNoIGZyb20gdGhlIGN1 cnJlbnQgYnl0ZXMuCi0JICovCi0JdGVfY3R4X2xhc3RfZXZlbnRfc2V0KCZjdHgsIHRlX2N0eF9j dXJyZW50X2J5dGVzX2dldCgmY3R4KSk7Ci0KLQl1aW50NjRfdCB3YWl0ID0gVEVfTUFYX1NUQVJU X1dBSVQ7Ci0jZGVmaW5lIEUoZXZlbnQsIGNvbmRpdGlvbiwgYWxsb2NfZXZlbnQpCQkJCVwKLQlp ZiAoaXNfYWxsb2MgPT0gYWxsb2NfZXZlbnQgJiYgY29uZGl0aW9uKSB7CQkJXAotCQl1aW50NjRf dCBldmVudF93YWl0ID0gZXZlbnQjI19uZXdfZXZlbnRfd2FpdCh0c2QpOwlcCi0JCWV2ZW50X3dh aXQgPSB0ZV9jbGlwX2V2ZW50X3dhaXQoZXZlbnRfd2FpdCk7CQlcCi0JCWV2ZW50IyNfZXZlbnRf d2FpdF9zZXQodHNkLCBldmVudF93YWl0KTsJCVwKLQkJaWYgKGV2ZW50X3dhaXQgPCB3YWl0KSB7 CQkJCVwKLQkJCXdhaXQgPSBldmVudF93YWl0OwkJCQlcCi0JCX0JCQkJCQkJXAotCX0KLQotCUlU RVJBVEVfT1ZFUl9BTExfRVZFTlRTCi0jdW5kZWYgRQotCXRlX2FkanVzdF90aHJlc2hvbGRzX2hl bHBlcih0c2QsICZjdHgsIHdhaXQpOwotfQotCi12b2lkCi10c2RfdGVfaW5pdCh0c2RfdCAqdHNk KSB7Ci0JLyogTWFrZSBzdXJlIG5vIG92ZXJmbG93IGZvciB0aGUgYnl0ZXMgYWNjdW11bGF0ZWQg b24gZXZlbnRfdHJpZ2dlci4gKi8KLQlhc3NlcnQoVEVfTUFYX0lOVEVSVkFMIDw9IFVJTlQ2NF9N QVggLSBTQ19MQVJHRV9NQVhDTEFTUyArIDEpOwotCXRlX2luaXQodHNkLCB0cnVlKTsKLQl0ZV9p bml0KHRzZCwgZmFsc2UpOwotCXRlX2Fzc2VydF9pbnZhcmlhbnRzKHRzZCk7Ci19CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RpY2tlci5j IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RpY2tlci5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTBiNWMyLi4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90aWNrZXIuYworKysgL2Rldi9u dWxsCkBAIC0xLDMyICswLDAgQEAKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9qZW1hbGxv Y19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVy bmFsX2luY2x1ZGVzLmgiCi0KLS8qCi0gKiBUbyBhdm9pZCB1c2luZyBmbG9hdGluZyBwb2ludCBt YXRoIGRvd24gY29yZSBwYXRocyAoc3RpbGwgbmVjZXNzYXJ5IGJlY2F1c2UKLSAqIHZlcnNpb25z IG9mIHRoZSBnbGliYyBkeW5hbWljIGxvYWRlciB0aGF0IGRpZCBub3QgcHJlc2VydmUgeG1tIHJl Z2lzdGVycyBhcmUKLSAqIHN0aWxsIHNvbWV3aGF0IGNvbW1vbiwgcmVxdWlyaW5nIHVzIHRvIGJl IGNvbXBpbGFibGUgd2l0aCAtbW5vLXNzZSksIGFuZCBhbHNvCi0gKiB0byBhdm9pZCBnZW5lcmFs bHkgZXhwZW5zaXZlIGxpYnJhcnkgY2FsbHMsIHdlIHVzZSBhIHByZWNvbXB1dGVkIHRhYmxlIG9m Ci0gKiB2YWx1ZXMuICBXZSB3YW50IHRvIHNhbXBsZSBVIHVuaWZvcm1seSBvbiBbMCwgMV0sIGFu ZCB0aGVuIGNvbXB1dGUKLSAqIGNlaWwobG9nKHUpL2xvZygxLTEvbnRpY2tzKSkuICBXZSdyZSBt b3N0bHkgaW50ZXJlc3RlZCBpbiB0aGUgY2FzZSB3aGVyZQotICogbnRpY2tzIGlzIHJlYXNvbmFi bHkgYmlnLCBzbyAxL2xvZygxLTEvbnRpY2tzKSBpcyB3ZWxsLWFwcHJveGltYXRlZCBieQotICog LW50aWNrcy4KLSAqCi0gKiBUbyBjb21wdXRlIGxvZyh1KSwgd2Ugc2FtcGxlIGFuIGludGVnZXIg aW4gWzEsIDY0XSBhbmQgZGl2aWRlLCB0aGVuIGp1c3QgbG9vawotICogdXAgcmVzdWx0cyBpbiBh IHRhYmxlLiAgQXMgYSBzcGFjZS1jb21wcmVzc2lvbiBtZWNoYW5pc20sIHdlIHN0b3JlIHRoZXNl IGFzCi0gKiB1aW50OF90IGJ5IGRpdmlkaW5nIHRoZSByYW5nZSAoMjU1KSBieSB0aGUgaGlnaGVz dC1tYWduaXR1ZGUgdmFsdWUgdGhlIGxvZwotICogY2FuIHRha2Ugb24sIGFuZCB1c2luZyB0aGF0 IGFzIGEgbXVsdGlwbGllci4gIFdlIHRoZW4gaGF2ZSB0byBkaXZpZGUgYnkgdGhhdAotICogbXVs dGlwbGllciBhdCB0aGUgZW5kIG9mIHRoZSBjb21wdXRhdGlvbi4KLSAqCi0gKiBUaGUgdmFsdWVz IGhlcmUgYXJlIGNvbXB1dGVkIGluIHNyYy90aWNrZXIucHkKLSAqLwotCi1jb25zdCB1aW50OF90 IHRpY2tlcl9nZW9tX3RhYmxlWzEgPDwgVElDS0VSX0dFT01fTkJJVFNdID0gewotCTI1NCwgMjEx LCAxODcsIDE2OSwgMTU2LCAxNDQsIDEzNSwgMTI3LAotCTEyMCwgMTEzLCAxMDcsIDEwMiwgOTcs IDkzLCA4OSwgODUsCi0JODEsIDc3LCA3NCwgNzEsIDY4LCA2NSwgNjIsIDYwLAotCTU3LCA1NSwg NTMsIDUwLCA0OCwgNDYsIDQ0LCA0MiwKLQk0MCwgMzksIDM3LCAzNSwgMzMsIDMyLCAzMCwgMjks Ci0JMjcsIDI2LCAyNCwgMjMsIDIxLCAyMCwgMTksIDE4LAotCTE2LCAxNSwgMTQsIDEzLCAxMiwg MTAsIDksIDgsCi0JNywgNiwgNSwgNCwgMywgMiwgMSwgMAotfTsKCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGlja2VyLnB5IGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvc3JjL3RpY2tlci5weQpkZWxldGVkIGZp bGUgbW9kZSAxMDA3NTUKaW5kZXggMzgwNzc0MC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMvdGlja2VyLnB5CisrKyAvZGV2L251bGwKQEAg LTEsMTUgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwotCi1pbXBvcnQgbWF0aAotCi0j IE11c3QgbWF0Y2ggVElDS0VSX0dFT01fTkJJVFMKLWxnX3RhYmxlX3NpemUgPSA2Ci10YWJsZV9z aXplID0gMioqbGdfdGFibGVfc2l6ZQotYnl0ZV9tYXggPSAyNTUKLW11bCA9IG1hdGguZmxvb3Io LWJ5dGVfbWF4L21hdGgubG9nKDEgLyB0YWJsZV9zaXplKSkKLXZhbHVlcyA9IFtyb3VuZCgtbXVs ICogbWF0aC5sb2coaSAvIHRhYmxlX3NpemUpKQotCWZvciBpIGluIHJhbmdlKDEsIHRhYmxlX3Np emUrMSldCi1wcmludCgibXVsID0iLCBtdWwpCi1wcmludCgidmFsdWVzOiIpCi1mb3IgaSBpbiBy YW5nZSh0YWJsZV9zaXplIC8vIDgpOgotCXByaW50KCIsICIuam9pbigoc3RyKHgpIGZvciB4IGlu IHZhbHVlc1tpKjggOiBpKjggKyA4XSkpKQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy90c2QuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3NyYy90c2QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZThlNGYzYS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvdHNkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NDkgKzAsMCBAQAotI2luY2x1ZGUg ImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2Fzc2VydC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nh bi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL211dGV4LmgiCi0jaW5jbHVkZSAiamVt YWxsb2MvaW50ZXJuYWwvcnRyZWUuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERh dGEuICovCi0KLS8qIFRTRF9JTklUSUFMSVpFUiB0cmlnZ2VycyAiLVdtaXNzaW5nLWZpZWxkLWlu aXRpYWxpemVyIiAqLwotSkVNQUxMT0NfRElBR05PU1RJQ19QVVNICi1KRU1BTExPQ19ESUFHTk9T VElDX0lHTk9SRV9NSVNTSU5HX1NUUlVDVF9GSUVMRF9JTklUSUFMSVpFUlMKLQotI2lmZGVmIEpF TUFMTE9DX01BTExPQ19USFJFQURfQ0xFQU5VUAotSkVNQUxMT0NfVFNEX1RZUEVfQVRUUih0c2Rf dCkgdHNkX3RscyA9IFRTRF9JTklUSUFMSVpFUjsKLUpFTUFMTE9DX1RTRF9UWVBFX0FUVFIoYm9v bCkgSkVNQUxMT0NfVExTX01PREVMIHRzZF9pbml0aWFsaXplZCA9IGZhbHNlOwotYm9vbCB0c2Rf Ym9vdGVkID0gZmFsc2U7Ci0jZWxpZiAoZGVmaW5lZChKRU1BTExPQ19UTFMpKQotSkVNQUxMT0Nf VFNEX1RZUEVfQVRUUih0c2RfdCkgdHNkX3RscyA9IFRTRF9JTklUSUFMSVpFUjsKLXB0aHJlYWRf a2V5X3QgdHNkX3RzZDsKLWJvb2wgdHNkX2Jvb3RlZCA9IGZhbHNlOwotI2VsaWYgKGRlZmluZWQo X1dJTjMyKSkKLURXT1JEIHRzZF90c2Q7Ci10c2Rfd3JhcHBlcl90IHRzZF9ib290X3dyYXBwZXIg PSB7ZmFsc2UsIFRTRF9JTklUSUFMSVpFUn07Ci1ib29sIHRzZF9ib290ZWQgPSBmYWxzZTsKLSNl bHNlCi0KLS8qCi0gKiBUaGlzIGNvbnRhaW5zIGEgbXV0ZXgsIGJ1dCBpdCdzIHByZXR0eSBjb252 ZW5pZW50IHRvIGFsbG93IHRoZSBtdXRleCBjb2RlIHRvCi0gKiBoYXZlIGEgZGVwZW5kZW5jeSBv biB0c2QuICBTbyB3ZSBkZWZpbmUgdGhlIHN0cnVjdCBoZXJlLCBhbmQgb25seSByZWZlciB0byBp dAotICogYnkgcG9pbnRlciBpbiB0aGUgaGVhZGVyLgotICovCi1zdHJ1Y3QgdHNkX2luaXRfaGVh ZF9zIHsKLQlxbF9oZWFkKHRzZF9pbml0X2Jsb2NrX3QpIGJsb2NrczsKLQltYWxsb2NfbXV0ZXhf dCBsb2NrOwotfTsKLQotcHRocmVhZF9rZXlfdCB0c2RfdHNkOwotdHNkX2luaXRfaGVhZF90CXRz ZF9pbml0X2hlYWQgPSB7Ci0JcWxfaGVhZF9pbml0aWFsaXplcihibG9ja3MpLAotCU1BTExPQ19N VVRFWF9JTklUSUFMSVpFUgotfTsKLQotdHNkX3dyYXBwZXJfdCB0c2RfYm9vdF93cmFwcGVyID0g ewotCWZhbHNlLAotCVRTRF9JTklUSUFMSVpFUgotfTsKLWJvb2wgdHNkX2Jvb3RlZCA9IGZhbHNl OwotI2VuZGlmCi0KLUpFTUFMTE9DX0RJQUdOT1NUSUNfUE9QCi0KLS8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCi0KLS8qIEEgbGlzdCBvZiBhbGwgdGhlIHRzZHMgaW4gdGhlIG5vbWluYWwgc3RhdGUu ICovCi10eXBlZGVmIHFsX2hlYWQodHNkX3QpIHRzZF9saXN0X3Q7Ci1zdGF0aWMgdHNkX2xpc3Rf dCB0c2Rfbm9taW5hbF90c2RzID0gcWxfaGVhZF9pbml0aWFsaXplcih0c2Rfbm9taW5hbF90c2Rz KTsKLXN0YXRpYyBtYWxsb2NfbXV0ZXhfdCB0c2Rfbm9taW5hbF90c2RzX2xvY2s7Ci0KLS8qIEhv dyBtYW55IHNsb3ctcGF0aC1lbmFibGluZyBmZWF0dXJlcyBhcmUgdHVybmVkIG9uLiAqLwotc3Rh dGljIGF0b21pY191MzJfdCB0c2RfZ2xvYmFsX3Nsb3dfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsK LQotc3RhdGljIGJvb2wKLXRzZF9pbl9ub21pbmFsX2xpc3QodHNkX3QgKnRzZCkgewotCXRzZF90 ICp0c2RfbGlzdDsKLQlib29sIGZvdW5kID0gZmFsc2U7Ci0JLyoKLQkgKiBXZSBkb24ndCBrbm93 IHRoYXQgdHNkIGlzIG5vbWluYWw7IGl0IG1pZ2h0IG5vdCBiZSBzYWZlIHRvIGdldCBkYXRhCi0J ICogb3V0IG9mIGl0IGhlcmUuCi0JICovCi0JbWFsbG9jX211dGV4X2xvY2soVFNETl9OVUxMLCAm dHNkX25vbWluYWxfdHNkc19sb2NrKTsKLQlxbF9mb3JlYWNoKHRzZF9saXN0LCAmdHNkX25vbWlu YWxfdHNkcywgVFNEX01BTkdMRSh0c2RfbGluaykpIHsKLQkJaWYgKHRzZCA9PSB0c2RfbGlzdCkg ewotCQkJZm91bmQgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbWFsbG9jX211dGV4X3Vu bG9jayhUU0ROX05VTEwsICZ0c2Rfbm9taW5hbF90c2RzX2xvY2spOwotCXJldHVybiBmb3VuZDsK LX0KLQotc3RhdGljIHZvaWQKLXRzZF9hZGRfbm9taW5hbCh0c2RfdCAqdHNkKSB7Ci0JYXNzZXJ0 KCF0c2RfaW5fbm9taW5hbF9saXN0KHRzZCkpOwotCWFzc2VydCh0c2Rfc3RhdGVfZ2V0KHRzZCkg PD0gdHNkX3N0YXRlX25vbWluYWxfbWF4KTsKLQlxbF9lbG1fbmV3KHRzZCwgVFNEX01BTkdMRSh0 c2RfbGluaykpOwotCW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZ0c2Rfbm9taW5h bF90c2RzX2xvY2spOwotCXFsX3RhaWxfaW5zZXJ0KCZ0c2Rfbm9taW5hbF90c2RzLCB0c2QsIFRT RF9NQU5HTEUodHNkX2xpbmspKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCks ICZ0c2Rfbm9taW5hbF90c2RzX2xvY2spOwotfQotCi1zdGF0aWMgdm9pZAotdHNkX3JlbW92ZV9u b21pbmFsKHRzZF90ICp0c2QpIHsKLQlhc3NlcnQodHNkX2luX25vbWluYWxfbGlzdCh0c2QpKTsK LQlhc3NlcnQodHNkX3N0YXRlX2dldCh0c2QpIDw9IHRzZF9zdGF0ZV9ub21pbmFsX21heCk7Ci0J bWFsbG9jX211dGV4X2xvY2sodHNkX3RzZG4odHNkKSwgJnRzZF9ub21pbmFsX3RzZHNfbG9jayk7 Ci0JcWxfcmVtb3ZlKCZ0c2Rfbm9taW5hbF90c2RzLCB0c2QsIFRTRF9NQU5HTEUodHNkX2xpbmsp KTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZ0c2Rfbm9taW5hbF90c2Rz X2xvY2spOwotfQotCi1zdGF0aWMgdm9pZAotdHNkX2ZvcmNlX3JlY29tcHV0ZSh0c2RuX3QgKnRz ZG4pIHsKLQkvKgotCSAqIFRoZSBzdG9yZXMgdG8gdHNkLT5zdGF0ZSBoZXJlIG5lZWQgdG8gc3lu Y2hyb25pemUgd2l0aCB0aGUgZXhjaGFuZ2UKLQkgKiBpbiB0c2Rfc2xvd191cGRhdGUuCi0JICov Ci0JYXRvbWljX2ZlbmNlKEFUT01JQ19SRUxFQVNFKTsKLQltYWxsb2NfbXV0ZXhfbG9jayh0c2Ru LCAmdHNkX25vbWluYWxfdHNkc19sb2NrKTsKLQl0c2RfdCAqcmVtb3RlX3RzZDsKLQlxbF9mb3Jl YWNoKHJlbW90ZV90c2QsICZ0c2Rfbm9taW5hbF90c2RzLCBUU0RfTUFOR0xFKHRzZF9saW5rKSkg ewotCQlhc3NlcnQodHNkX2F0b21pY19sb2FkKCZyZW1vdGVfdHNkLT5zdGF0ZSwgQVRPTUlDX1JF TEFYRUQpCi0JCSAgICA8PSB0c2Rfc3RhdGVfbm9taW5hbF9tYXgpOwotCQl0c2RfYXRvbWljX3N0 b3JlKCZyZW1vdGVfdHNkLT5zdGF0ZSwKLQkJICAgIHRzZF9zdGF0ZV9ub21pbmFsX3JlY29tcHV0 ZSwgQVRPTUlDX1JFTEFYRUQpOwotCQkvKiBTZWUgY29tbWVudHMgaW4gdGVfcmVjb21wdXRlX2Zh c3RfdGhyZXNob2xkKCkuICovCi0JCWF0b21pY19mZW5jZShBVE9NSUNfU0VRX0NTVCk7Ci0JCXRl X25leHRfZXZlbnRfZmFzdF9zZXRfbm9uX25vbWluYWwocmVtb3RlX3RzZCk7Ci0JfQotCW1hbGxv Y19tdXRleF91bmxvY2sodHNkbiwgJnRzZF9ub21pbmFsX3RzZHNfbG9jayk7Ci19Ci0KLXZvaWQK LXRzZF9nbG9iYWxfc2xvd19pbmModHNkbl90ICp0c2RuKSB7Ci0JYXRvbWljX2ZldGNoX2FkZF91 MzIoJnRzZF9nbG9iYWxfc2xvd19jb3VudCwgMSwgQVRPTUlDX1JFTEFYRUQpOwotCS8qCi0JICog V2UgdW5jb25kaXRpb25hbGx5IGZvcmNlIGEgcmVjb21wdXRlLCBldmVuIGlmIHRoZSBnbG9iYWwg c2xvdyBjb3VudAotCSAqIHdhcyBhbHJlYWR5IHBvc2l0aXZlLiAgSWYgd2UgZGlkbid0LCB0aGVu IGl0IHdvdWxkIGJlIHBvc3NpYmxlIGZvciB1cwotCSAqIHRvIHJldHVybiB0byB0aGUgdXNlciwg aGF2ZSB0aGUgdXNlciBzeW5jaHJvbml6ZSBleHRlcm5hbGx5IHdpdGggc29tZQotCSAqIG90aGVy IHRocmVhZCwgYW5kIHRoZW4gaGF2ZSB0aGF0IG90aGVyIHRocmVhZCBub3QgaGF2ZSBwaWNrZWQg dXAgdGhlCi0JICogdXBkYXRlIHlldCAoc2luY2UgdGhlIG9yaWdpbmFsIGluY3JlbWVudGluZyB0 aHJlYWQgbWlnaHQgc3RpbGwgYmUKLQkgKiBtYWtpbmcgaXRzIHdheSB0aHJvdWdoIHRoZSB0c2Qg bGlzdCkuCi0JICovCi0JdHNkX2ZvcmNlX3JlY29tcHV0ZSh0c2RuKTsKLX0KLQotdm9pZCB0c2Rf Z2xvYmFsX3Nsb3dfZGVjKHRzZG5fdCAqdHNkbikgewotCWF0b21pY19mZXRjaF9zdWJfdTMyKCZ0 c2RfZ2xvYmFsX3Nsb3dfY291bnQsIDEsIEFUT01JQ19SRUxBWEVEKTsKLQkvKiBTZWUgdGhlIG5v dGUgaW4gLi4uX2luYygpLiAqLwotCXRzZF9mb3JjZV9yZWNvbXB1dGUodHNkbik7Ci19Ci0KLXN0 YXRpYyBib29sCi10c2RfbG9jYWxfc2xvdyh0c2RfdCAqdHNkKSB7Ci0JcmV0dXJuICF0c2RfdGNh Y2hlX2VuYWJsZWRfZ2V0KHRzZCkKLQkgICAgfHwgdHNkX3JlZW50cmFuY3lfbGV2ZWxfZ2V0KHRz ZCkgPiAwOwotfQotCi1ib29sCi10c2RfZ2xvYmFsX3Nsb3coKSB7Ci0JcmV0dXJuIGF0b21pY19s b2FkX3UzMigmdHNkX2dsb2JhbF9zbG93X2NvdW50LCBBVE9NSUNfUkVMQVhFRCkgPiAwOwotfQot Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdWludDhfdAotdHNkX3N0YXRlX2Nv bXB1dGUodHNkX3QgKnRzZCkgewotCWlmICghdHNkX25vbWluYWwodHNkKSkgewotCQlyZXR1cm4g dHNkX3N0YXRlX2dldCh0c2QpOwotCX0KLQkvKiBXZSdyZSBpbiAqYSogbm9taW5hbCBzdGF0ZTsg YnV0IHdoaWNoIG9uZT8gKi8KLQlpZiAobWFsbG9jX3Nsb3cgfHwgdHNkX2xvY2FsX3Nsb3codHNk KSB8fCB0c2RfZ2xvYmFsX3Nsb3coKSkgewotCQlyZXR1cm4gdHNkX3N0YXRlX25vbWluYWxfc2xv dzsKLQl9IGVsc2UgewotCQlyZXR1cm4gdHNkX3N0YXRlX25vbWluYWw7Ci0JfQotfQotCi12b2lk Ci10c2Rfc2xvd191cGRhdGUodHNkX3QgKnRzZCkgewotCXVpbnQ4X3Qgb2xkX3N0YXRlOwotCWRv IHsKLQkJdWludDhfdCBuZXdfc3RhdGUgPSB0c2Rfc3RhdGVfY29tcHV0ZSh0c2QpOwotCQlvbGRf c3RhdGUgPSB0c2RfYXRvbWljX2V4Y2hhbmdlKCZ0c2QtPnN0YXRlLCBuZXdfc3RhdGUsCi0JCSAg ICBBVE9NSUNfQUNRVUlSRSk7Ci0JfSB3aGlsZSAob2xkX3N0YXRlID09IHRzZF9zdGF0ZV9ub21p bmFsX3JlY29tcHV0ZSk7Ci0KLQl0ZV9yZWNvbXB1dGVfZmFzdF90aHJlc2hvbGQodHNkKTsKLX0K LQotdm9pZAotdHNkX3N0YXRlX3NldCh0c2RfdCAqdHNkLCB1aW50OF90IG5ld19zdGF0ZSkgewot CS8qIE9ubHkgdGhlIHRzZCBtb2R1bGUgY2FuIGNoYW5nZSB0aGUgc3RhdGUgKnRvKiByZWNvbXB1 dGUuICovCi0JYXNzZXJ0KG5ld19zdGF0ZSAhPSB0c2Rfc3RhdGVfbm9taW5hbF9yZWNvbXB1dGUp OwotCXVpbnQ4X3Qgb2xkX3N0YXRlID0gdHNkX2F0b21pY19sb2FkKCZ0c2QtPnN0YXRlLCBBVE9N SUNfUkVMQVhFRCk7Ci0JaWYgKG9sZF9zdGF0ZSA+IHRzZF9zdGF0ZV9ub21pbmFsX21heCkgewot CQkvKgotCQkgKiBOb3QgY3VycmVudGx5IGluIHRoZSBub21pbmFsIGxpc3QsIGJ1dCBpdCBtaWdo dCBuZWVkIHRvIGJlCi0JCSAqIGluc2VydGVkIHRoZXJlLgotCQkgKi8KLQkJYXNzZXJ0KCF0c2Rf aW5fbm9taW5hbF9saXN0KHRzZCkpOwotCQl0c2RfYXRvbWljX3N0b3JlKCZ0c2QtPnN0YXRlLCBu ZXdfc3RhdGUsIEFUT01JQ19SRUxBWEVEKTsKLQkJaWYgKG5ld19zdGF0ZSA8PSB0c2Rfc3RhdGVf bm9taW5hbF9tYXgpIHsKLQkJCXRzZF9hZGRfbm9taW5hbCh0c2QpOwotCQl9Ci0JfSBlbHNlIHsK LQkJLyoKLQkJICogV2UncmUgY3VycmVudGx5IG5vbWluYWwuICBJZiB0aGUgbmV3IHN0YXRlIGlz IG5vbi1ub21pbmFsLAotCQkgKiBncmVhdDsgd2UgdGFrZSBvdXJzZWx2ZXMgb2ZmIHRoZSBsaXN0 IGFuZCBqdXN0IGVudGVyIHRoZSBuZXcKLQkJICogc3RhdGUuCi0JCSAqLwotCQlhc3NlcnQodHNk X2luX25vbWluYWxfbGlzdCh0c2QpKTsKLQkJaWYgKG5ld19zdGF0ZSA+IHRzZF9zdGF0ZV9ub21p bmFsX21heCkgewotCQkJdHNkX3JlbW92ZV9ub21pbmFsKHRzZCk7Ci0JCQl0c2RfYXRvbWljX3N0 b3JlKCZ0c2QtPnN0YXRlLCBuZXdfc3RhdGUsCi0JCQkgICAgQVRPTUlDX1JFTEFYRUQpOwotCQl9 IGVsc2UgewotCQkJLyoKLQkJCSAqIFRoaXMgaXMgdGhlIHRyaWNreSBjYXNlLiAgV2UncmUgdHJh bnNpdGlvbmluZyBmcm9tCi0JCQkgKiBvbmUgbm9taW5hbCBzdGF0ZSB0byBhbm90aGVyLiAgVGhl IGNhbGxlciBjYW4ndCBrbm93Ci0JCQkgKiBhYm91dCBhbnkgcmFjZXMgdGhhdCBhcmUgb2NjdXJy aW5nIGF0IHRoZSBzYW1lIHRpbWUsCi0JCQkgKiBzbyB3ZSBhbHdheXMgaGF2ZSB0byByZWNvbXB1 dGUgbm8gbWF0dGVyIHdoYXQuCi0JCQkgKi8KLQkJCXRzZF9zbG93X3VwZGF0ZSh0c2QpOwotCQl9 Ci0JfQotCXRlX3JlY29tcHV0ZV9mYXN0X3RocmVzaG9sZCh0c2QpOwotfQotCi1zdGF0aWMgdm9p ZAotdHNkX3Bybmdfc3RhdGVfaW5pdCh0c2RfdCAqdHNkKSB7Ci0JLyoKLQkgKiBBIG5vbmRldGVy bWluaXN0aWMgc2VlZCBiYXNlZCBvbiB0aGUgYWRkcmVzcyBvZiB0c2QgcmVkdWNlcwotCSAqIHRo ZSBsaWtlbGlob29kIG9mIGxvY2tzdGVwIG5vbi11bmlmb3JtIGNhY2hlIGluZGV4Ci0JICogdXRp bGl6YXRpb24gYW1vbmcgaWRlbnRpY2FsIGNvbmN1cnJlbnQgcHJvY2Vzc2VzLCBidXQgYXQgdGhl Ci0JICogY29zdCBvZiB0ZXN0IHJlcGVhdGFiaWxpdHkuICBGb3IgZGVidWcgYnVpbGRzLCBpbnN0 ZWFkIHVzZSBhCi0JICogZGV0ZXJtaW5pc3RpYyBzZWVkLgotCSAqLwotCSp0c2RfcHJuZ19zdGF0 ZXBfZ2V0KHRzZCkgPSBjb25maWdfZGVidWcgPyAwIDoKLQkgICAgKHVpbnQ2NF90KSh1aW50cHRy X3QpdHNkOwotfQotCi1zdGF0aWMgYm9vbAotdHNkX2RhdGFfaW5pdCh0c2RfdCAqdHNkKSB7Ci0J LyoKLQkgKiBXZSBpbml0aWFsaXplIHRoZSBydHJlZSBjb250ZXh0IGZpcnN0IChiZWZvcmUgdGhl IHRjYWNoZSksIHNpbmNlIHRoZQotCSAqIHRjYWNoZSBpbml0aWFsaXphdGlvbiBkZXBlbmRzIG9u IGl0LgotCSAqLwotCXJ0cmVlX2N0eF9kYXRhX2luaXQodHNkX3J0cmVlX2N0eHBfZ2V0X3Vuc2Fm ZSh0c2QpKTsKLQl0c2RfcHJuZ19zdGF0ZV9pbml0KHRzZCk7Ci0JdHNkX3RlX2luaXQodHNkKTsg LyogZXZlbnRfaW5pdCBtYXkgdXNlIHRoZSBwcm5nIHN0YXRlIGFib3ZlLiAqLwotCXRzZF9zYW5f aW5pdCh0c2QpOwotCXJldHVybiB0c2RfdGNhY2hlX2VuYWJsZWRfZGF0YV9pbml0KHRzZCk7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1hc3NlcnRfdHNkX2RhdGFfY2xlYW51cF9kb25lKHRzZF90ICp0c2Qp IHsKLQlhc3NlcnQoIXRzZF9ub21pbmFsKHRzZCkpOwotCWFzc2VydCghdHNkX2luX25vbWluYWxf bGlzdCh0c2QpKTsKLQlhc3NlcnQoKnRzZF9hcmVuYXBfZ2V0X3Vuc2FmZSh0c2QpID09IE5VTEwp OwotCWFzc2VydCgqdHNkX2lhcmVuYXBfZ2V0X3Vuc2FmZSh0c2QpID09IE5VTEwpOwotCWFzc2Vy dCgqdHNkX3RjYWNoZV9lbmFibGVkcF9nZXRfdW5zYWZlKHRzZCkgPT0gZmFsc2UpOwotCWFzc2Vy dCgqdHNkX3Byb2ZfdGRhdGFwX2dldF91bnNhZmUodHNkKSA9PSBOVUxMKTsKLX0KLQotc3RhdGlj IGJvb2wKLXRzZF9kYXRhX2luaXRfbm9jbGVhbnVwKHRzZF90ICp0c2QpIHsKLQlhc3NlcnQodHNk X3N0YXRlX2dldCh0c2QpID09IHRzZF9zdGF0ZV9yZWluY2FybmF0ZWQgfHwKLQkgICAgdHNkX3N0 YXRlX2dldCh0c2QpID09IHRzZF9zdGF0ZV9taW5pbWFsX2luaXRpYWxpemVkKTsKLQkvKgotCSAq IER1cmluZyByZWluY2FybmF0aW9uLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgY2xl YW51cCBmdW5jdGlvbgotCSAqIHdpbGwgYmUgY2FsbGVkIChkZWFsbG9jYXRpb24gbWF5IGhhcHBl biBhZnRlciBhbGwgdHNkIGRlc3RydWN0b3JzKS4KLQkgKiBXZSBzZXQgdXAgdHNkIGluIGEgd2F5 IHRoYXQgbm8gY2xlYW51cCBpcyBuZWVkZWQuCi0JICovCi0JcnRyZWVfY3R4X2RhdGFfaW5pdCh0 c2RfcnRyZWVfY3R4cF9nZXRfdW5zYWZlKHRzZCkpOwotCSp0c2RfdGNhY2hlX2VuYWJsZWRwX2dl dF91bnNhZmUodHNkKSA9IGZhbHNlOwotCSp0c2RfcmVlbnRyYW5jeV9sZXZlbHBfZ2V0KHRzZCkg PSAxOwotCXRzZF9wcm5nX3N0YXRlX2luaXQodHNkKTsKLQl0c2RfdGVfaW5pdCh0c2QpOyAvKiBl dmVudF9pbml0IG1heSB1c2UgdGhlIHBybmcgc3RhdGUgYWJvdmUuICovCi0JdHNkX3Nhbl9pbml0 KHRzZCk7Ci0JYXNzZXJ0X3RzZF9kYXRhX2NsZWFudXBfZG9uZSh0c2QpOwotCi0JcmV0dXJuIGZh bHNlOwotfQotCi10c2RfdCAqCi10c2RfZmV0Y2hfc2xvdyh0c2RfdCAqdHNkLCBib29sIG1pbmlt YWwpIHsKLQlhc3NlcnQoIXRzZF9mYXN0KHRzZCkpOwotCi0JaWYgKHRzZF9zdGF0ZV9nZXQodHNk KSA9PSB0c2Rfc3RhdGVfbm9taW5hbF9zbG93KSB7Ci0JCS8qCi0JCSAqIE9uIHNsb3cgcGF0aCBi dXQgbm8gd29yayBuZWVkZWQuICBOb3RlIHRoYXQgd2UgY2FuJ3QKLQkJICogbmVjZXNzYXJpbHkg KmFzc2VydCogdGhhdCB3ZSdyZSBzbG93LCBiZWNhdXNlIHdlIG1pZ2h0IGJlCi0JCSAqIHNsb3cg YmVjYXVzZSBvZiBhbiBhc3luY2hyb25vdXMgbW9kaWZpY2F0aW9uIHRvIGdsb2JhbCBzdGF0ZSwK LQkJICogd2hpY2ggbWlnaHQgYmUgYXN5bmNocm9ub3VzbHkgbW9kaWZpZWQgKmJhY2sqLgotCQkg Ki8KLQl9IGVsc2UgaWYgKHRzZF9zdGF0ZV9nZXQodHNkKSA9PSB0c2Rfc3RhdGVfbm9taW5hbF9y ZWNvbXB1dGUpIHsKLQkJdHNkX3Nsb3dfdXBkYXRlKHRzZCk7Ci0JfSBlbHNlIGlmICh0c2Rfc3Rh dGVfZ2V0KHRzZCkgPT0gdHNkX3N0YXRlX3VuaW5pdGlhbGl6ZWQpIHsKLQkJaWYgKCFtaW5pbWFs KSB7Ci0JCQlpZiAodHNkX2Jvb3RlZCkgewotCQkJCXRzZF9zdGF0ZV9zZXQodHNkLCB0c2Rfc3Rh dGVfbm9taW5hbCk7Ci0JCQkJdHNkX3Nsb3dfdXBkYXRlKHRzZCk7Ci0JCQkJLyogVHJpZ2dlciBj bGVhbnVwIGhhbmRsZXIgcmVnaXN0cmF0aW9uLiAqLwotCQkJCXRzZF9zZXQodHNkKTsKLQkJCQl0 c2RfZGF0YV9pbml0KHRzZCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl0c2Rfc3RhdGVfc2V0KHRz ZCwgdHNkX3N0YXRlX21pbmltYWxfaW5pdGlhbGl6ZWQpOwotCQkJdHNkX3NldCh0c2QpOwotCQkJ dHNkX2RhdGFfaW5pdF9ub2NsZWFudXAodHNkKTsKLQkJfQotCX0gZWxzZSBpZiAodHNkX3N0YXRl X2dldCh0c2QpID09IHRzZF9zdGF0ZV9taW5pbWFsX2luaXRpYWxpemVkKSB7Ci0JCWlmICghbWlu aW1hbCkgewotCQkJLyogU3dpdGNoIHRvIGZ1bGx5IGluaXRpYWxpemVkLiAqLwotCQkJdHNkX3N0 YXRlX3NldCh0c2QsIHRzZF9zdGF0ZV9ub21pbmFsKTsKLQkJCWFzc2VydCgqdHNkX3JlZW50cmFu Y3lfbGV2ZWxwX2dldCh0c2QpID49IDEpOwotCQkJKCp0c2RfcmVlbnRyYW5jeV9sZXZlbHBfZ2V0 KHRzZCkpLS07Ci0JCQl0c2Rfc2xvd191cGRhdGUodHNkKTsKLQkJCXRzZF9kYXRhX2luaXQodHNk KTsKLQkJfSBlbHNlIHsKLQkJCWFzc2VydF90c2RfZGF0YV9jbGVhbnVwX2RvbmUodHNkKTsKLQkJ fQotCX0gZWxzZSBpZiAodHNkX3N0YXRlX2dldCh0c2QpID09IHRzZF9zdGF0ZV9wdXJnYXRvcnkp IHsKLQkJdHNkX3N0YXRlX3NldCh0c2QsIHRzZF9zdGF0ZV9yZWluY2FybmF0ZWQpOwotCQl0c2Rf c2V0KHRzZCk7Ci0JCXRzZF9kYXRhX2luaXRfbm9jbGVhbnVwKHRzZCk7Ci0JfSBlbHNlIHsKLQkJ YXNzZXJ0KHRzZF9zdGF0ZV9nZXQodHNkKSA9PSB0c2Rfc3RhdGVfcmVpbmNhcm5hdGVkKTsKLQl9 Ci0KLQlyZXR1cm4gdHNkOwotfQotCi12b2lkICoKLW1hbGxvY190c2RfbWFsbG9jKHNpemVfdCBz aXplKSB7Ci0JcmV0dXJuIGEwbWFsbG9jKENBQ0hFTElORV9DRUlMSU5HKHNpemUpKTsKLX0KLQot dm9pZAotbWFsbG9jX3RzZF9kYWxsb2Modm9pZCAqd3JhcHBlcikgewotCWEwZGFsbG9jKHdyYXBw ZXIpOwotfQotCi0jaWYgZGVmaW5lZChKRU1BTExPQ19NQUxMT0NfVEhSRUFEX0NMRUFOVVApIHx8 IGRlZmluZWQoX1dJTjMyKQotc3RhdGljIHVuc2lnbmVkIG5jbGVhbnVwczsKLXN0YXRpYyBtYWxs b2NfdHNkX2NsZWFudXBfdCBjbGVhbnVwc1tNQUxMT0NfVFNEX0NMRUFOVVBTX01BWF07Ci0KLSNp Zm5kZWYgX1dJTjMyCi1KRU1BTExPQ19FWFBPUlQKLSNlbmRpZgotdm9pZAotX21hbGxvY190aHJl YWRfY2xlYW51cCh2b2lkKSB7Ci0JYm9vbCBwZW5kaW5nW01BTExPQ19UU0RfQ0xFQU5VUFNfTUFY XSwgYWdhaW47Ci0JdW5zaWduZWQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBuY2xlYW51cHM7IGkr KykgewotCQlwZW5kaW5nW2ldID0gdHJ1ZTsKLQl9Ci0KLQlkbyB7Ci0JCWFnYWluID0gZmFsc2U7 Ci0JCWZvciAoaSA9IDA7IGkgPCBuY2xlYW51cHM7IGkrKykgewotCQkJaWYgKHBlbmRpbmdbaV0p IHsKLQkJCQlwZW5kaW5nW2ldID0gY2xlYW51cHNbaV0oKTsKLQkJCQlpZiAocGVuZGluZ1tpXSkg ewotCQkJCQlhZ2FpbiA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSB3aGlsZSAoYWdhaW4p OwotfQotCi0jaWZuZGVmIF9XSU4zMgotSkVNQUxMT0NfRVhQT1JUCi0jZW5kaWYKLXZvaWQKLV9t YWxsb2NfdHNkX2NsZWFudXBfcmVnaXN0ZXIoYm9vbCAoKmYpKHZvaWQpKSB7Ci0JYXNzZXJ0KG5j bGVhbnVwcyA8IE1BTExPQ19UU0RfQ0xFQU5VUFNfTUFYKTsKLQljbGVhbnVwc1tuY2xlYW51cHNd ID0gZjsKLQluY2xlYW51cHMrKzsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi10c2RfZG9f ZGF0YV9jbGVhbnVwKHRzZF90ICp0c2QpIHsKLQlwcm9mX3RkYXRhX2NsZWFudXAodHNkKTsKLQlp YXJlbmFfY2xlYW51cCh0c2QpOwotCWFyZW5hX2NsZWFudXAodHNkKTsKLQl0Y2FjaGVfY2xlYW51 cCh0c2QpOwotCXdpdG5lc3Nlc19jbGVhbnVwKHRzZF93aXRuZXNzX3RzZHBfZ2V0X3Vuc2FmZSh0 c2QpKTsKLQkqdHNkX3JlZW50cmFuY3lfbGV2ZWxwX2dldCh0c2QpID0gMTsKLX0KLQotdm9pZAot dHNkX2NsZWFudXAodm9pZCAqYXJnKSB7Ci0JdHNkX3QgKnRzZCA9ICh0c2RfdCAqKWFyZzsKLQot CXN3aXRjaCAodHNkX3N0YXRlX2dldCh0c2QpKSB7Ci0JY2FzZSB0c2Rfc3RhdGVfdW5pbml0aWFs aXplZDoKLQkJLyogRG8gbm90aGluZy4gKi8KLQkJYnJlYWs7Ci0JY2FzZSB0c2Rfc3RhdGVfbWlu aW1hbF9pbml0aWFsaXplZDoKLQkJLyogVGhpcyBpbXBsaWVzIHRoZSB0aHJlYWQgb25seSBkaWQg ZnJlZSgpIGluIGl0cyBsaWZlIHRpbWUuICovCi0JCS8qIEZhbGwgdGhyb3VnaC4gKi8KLQljYXNl IHRzZF9zdGF0ZV9yZWluY2FybmF0ZWQ6Ci0JCS8qCi0JCSAqIFJlaW5jYXJuYXRlZCBtZWFucyBh bm90aGVyIGRlc3RydWN0b3IgZGVhbGxvY2F0ZWQgbWVtb3J5Ci0JCSAqIGFmdGVyIHRoZSBkZXN0 cnVjdG9yIHdhcyBjYWxsZWQuICBDbGVhbnVwIGlzbid0IHJlcXVpcmVkIGJ1dAotCQkgKiBpcyBz dGlsbCBjYWxsZWQgZm9yIHRlc3RpbmcgYW5kIGNvbXBsZXRlbmVzcy4KLQkJICovCi0JCWFzc2Vy dF90c2RfZGF0YV9jbGVhbnVwX2RvbmUodHNkKTsKLQkJSkVNQUxMT0NfRkFMTFRIUk9VR0g7Ci0J Y2FzZSB0c2Rfc3RhdGVfbm9taW5hbDoKLQljYXNlIHRzZF9zdGF0ZV9ub21pbmFsX3Nsb3c6Ci0J CXRzZF9kb19kYXRhX2NsZWFudXAodHNkKTsKLQkJdHNkX3N0YXRlX3NldCh0c2QsIHRzZF9zdGF0 ZV9wdXJnYXRvcnkpOwotCQl0c2Rfc2V0KHRzZCk7Ci0JCWJyZWFrOwotCWNhc2UgdHNkX3N0YXRl X3B1cmdhdG9yeToKLQkJLyoKLQkJICogVGhlIHByZXZpb3VzIHRpbWUgdGhpcyBkZXN0cnVjdG9y IHdhcyBjYWxsZWQsIHdlIHNldCB0aGUKLQkJICogc3RhdGUgdG8gdHNkX3N0YXRlX3B1cmdhdG9y eSBzbyB0aGF0IG90aGVyIGRlc3RydWN0b3JzCi0JCSAqIHdvdWxkbid0IGNhdXNlIHJlLWNyZWF0 aW9uIG9mIHRoZSB0c2QuICBUaGlzIHRpbWUsIGRvCi0JCSAqIG5vdGhpbmcsIGFuZCBkbyBub3Qg cmVxdWVzdCBhbm90aGVyIGNhbGxiYWNrLgotCQkgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ bm90X3JlYWNoZWQoKTsKLQl9Ci0jaWZkZWYgSkVNQUxMT0NfSkVUCi0JdGVzdF9jYWxsYmFja190 IHRlc3RfY2FsbGJhY2sgPSAqdHNkX3Rlc3RfY2FsbGJhY2twX2dldF91bnNhZmUodHNkKTsKLQlp bnQgKmRhdGEgPSB0c2RfdGVzdF9kYXRhcF9nZXRfdW5zYWZlKHRzZCk7Ci0JaWYgKHRlc3RfY2Fs bGJhY2sgIT0gTlVMTCkgewotCQl0ZXN0X2NhbGxiYWNrKGRhdGEpOwotCX0KLSNlbmRpZgotfQot Ci10c2RfdCAqCi1tYWxsb2NfdHNkX2Jvb3QwKHZvaWQpIHsKLQl0c2RfdCAqdHNkOwotCi0jaWYg ZGVmaW5lZChKRU1BTExPQ19NQUxMT0NfVEhSRUFEX0NMRUFOVVApIHx8IGRlZmluZWQoX1dJTjMy KQotCW5jbGVhbnVwcyA9IDA7Ci0jZW5kaWYKLQlpZiAobWFsbG9jX211dGV4X2luaXQoJnRzZF9u b21pbmFsX3RzZHNfbG9jaywgInRzZF9ub21pbmFsX3RzZHNfbG9jayIsCi0JICAgIFdJVE5FU1Nf UkFOS19PTUlULCBtYWxsb2NfbXV0ZXhfcmFua19leGNsdXNpdmUpKSB7Ci0JCXJldHVybiBOVUxM OwotCX0KLQlpZiAodHNkX2Jvb3QwKCkpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXRzZCA9IHRz ZF9mZXRjaCgpOwotCXJldHVybiB0c2Q7Ci19Ci0KLXZvaWQKLW1hbGxvY190c2RfYm9vdDEodm9p ZCkgewotCXRzZF9ib290MSgpOwotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKLQkvKiBtYWxs b2Nfc2xvdyBoYXMgYmVlbiBzZXQgcHJvcGVybHkuICBVcGRhdGUgdHNkX3Nsb3cuICovCi0JdHNk X3Nsb3dfdXBkYXRlKHRzZCk7Ci19Ci0KLSNpZmRlZiBfV0lOMzIKLXN0YXRpYyBCT09MIFdJTkFQ SQotX3Rsc19jYWxsYmFjayhISU5TVEFOQ0UgaGluc3RETEwsIERXT1JEIGZkd1JlYXNvbiwgTFBW T0lEIGxwdlJlc2VydmVkKSB7Ci0Jc3dpdGNoIChmZHdSZWFzb24pIHsKLSNpZmRlZiBKRU1BTExP Q19MQVpZX0xPQ0sKLQljYXNlIERMTF9USFJFQURfQVRUQUNIOgotCQlpc3RocmVhZGVkID0gdHJ1 ZTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIERMTF9USFJFQURfREVUQUNIOgotCQlfbWFsbG9j X3RocmVhZF9jbGVhbnVwKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQly ZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBzYXkgInJlYWQi IGhlcmUgKGluIHRoZSAicHJhZ21hIHNlY3Rpb24iKSwgYnV0IGhhdmUKLSAqIGhvb2tlZCAicmVh ZCIuIFdlIHdvbid0IHJlYWQgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWxlLCBzbyB3ZSBjYW4gZ2V0 IGF3YXkKLSAqIHdpdGggdW5ob29raW5nLgotICovCi0jaWZkZWYgcmVhZAotIyAgdW5kZWYgcmVh ZAotI2VuZGlmCi0KLSNpZmRlZiBfTVNDX1ZFUgotIyAgaWZkZWYgX01fSVg4NgotIyAgICBwcmFn bWEgY29tbWVudChsaW5rZXIsICIvSU5DTFVERTpfX3Rsc191c2VkIikKLSMgICAgcHJhZ21hIGNv bW1lbnQobGlua2VyLCAiL0lOQ0xVREU6X3Rsc19jYWxsYmFjayIpCi0jICBlbHNlCi0jICAgIHBy YWdtYSBjb21tZW50KGxpbmtlciwgIi9JTkNMVURFOl90bHNfdXNlZCIpCi0jICAgIHByYWdtYSBj b21tZW50KGxpbmtlciwgIi9JTkNMVURFOiIgU1RSSU5HSUZZKHRsc19jYWxsYmFjaykgKQotIyAg ZW5kaWYKLSMgIHByYWdtYSBzZWN0aW9uKCIuQ1JUJFhMWSIsbG9uZyxyZWFkKQotI2VuZGlmCi1K RU1BTExPQ19TRUNUSU9OKCIuQ1JUJFhMWSIpIEpFTUFMTE9DX0FUVFIodXNlZCkKLUJPT0wJKFdJ TkFQSSAqY29uc3QgdGxzX2NhbGxiYWNrKShISU5TVEFOQ0UgaGluc3RETEwsCi0gICAgRFdPUkQg ZmR3UmVhc29uLCBMUFZPSUQgbHB2UmVzZXJ2ZWQpID0gX3Rsc19jYWxsYmFjazsKLSNlbmRpZgot Ci0jaWYgKCFkZWZpbmVkKEpFTUFMTE9DX01BTExPQ19USFJFQURfQ0xFQU5VUCkgJiYgIWRlZmlu ZWQoSkVNQUxMT0NfVExTKSAmJiBcCi0gICAgIWRlZmluZWQoX1dJTjMyKSkKLXZvaWQgKgotdHNk X2luaXRfY2hlY2tfcmVjdXJzaW9uKHRzZF9pbml0X2hlYWRfdCAqaGVhZCwgdHNkX2luaXRfYmxv Y2tfdCAqYmxvY2spIHsKLQlwdGhyZWFkX3Qgc2VsZiA9IHB0aHJlYWRfc2VsZigpOwotCXRzZF9p bml0X2Jsb2NrX3QgKml0ZXI7Ci0KLQkvKiBDaGVjayB3aGV0aGVyIHRoaXMgdGhyZWFkIGhhcyBh bHJlYWR5IGluc2VydGVkIGludG8gdGhlIGxpc3QuICovCi0JbWFsbG9jX211dGV4X2xvY2soVFNE Tl9OVUxMLCAmaGVhZC0+bG9jayk7Ci0JcWxfZm9yZWFjaChpdGVyLCAmaGVhZC0+YmxvY2tzLCBs aW5rKSB7Ci0JCWlmIChpdGVyLT50aHJlYWQgPT0gc2VsZikgewotCQkJbWFsbG9jX211dGV4X3Vu bG9jayhUU0ROX05VTEwsICZoZWFkLT5sb2NrKTsKLQkJCXJldHVybiBpdGVyLT5kYXRhOwotCQl9 Ci0JfQotCS8qIEluc2VydCBibG9jayBpbnRvIGxpc3QuICovCi0JcWxfZWxtX25ldyhibG9jaywg bGluayk7Ci0JYmxvY2stPnRocmVhZCA9IHNlbGY7Ci0JcWxfdGFpbF9pbnNlcnQoJmhlYWQtPmJs b2NrcywgYmxvY2ssIGxpbmspOwotCW1hbGxvY19tdXRleF91bmxvY2soVFNETl9OVUxMLCAmaGVh ZC0+bG9jayk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQKLXRzZF9pbml0X2ZpbmlzaCh0c2Rf aW5pdF9oZWFkX3QgKmhlYWQsIHRzZF9pbml0X2Jsb2NrX3QgKmJsb2NrKSB7Ci0JbWFsbG9jX211 dGV4X2xvY2soVFNETl9OVUxMLCAmaGVhZC0+bG9jayk7Ci0JcWxfcmVtb3ZlKCZoZWFkLT5ibG9j a3MsIGJsb2NrLCBsaW5rKTsKLQltYWxsb2NfbXV0ZXhfdW5sb2NrKFRTRE5fTlVMTCwgJmhlYWQt PmxvY2spOwotfQotI2VuZGlmCi0KLXZvaWQKLXRzZF9wcmVmb3JrKHRzZF90ICp0c2QpIHsKLQlt YWxsb2NfbXV0ZXhfcHJlZm9yayh0c2RfdHNkbih0c2QpLCAmdHNkX25vbWluYWxfdHNkc19sb2Nr KTsKLX0KLQotdm9pZAotdHNkX3Bvc3Rmb3JrX3BhcmVudCh0c2RfdCAqdHNkKSB7Ci0JbWFsbG9j X211dGV4X3Bvc3Rmb3JrX3BhcmVudCh0c2RfdHNkbih0c2QpLCAmdHNkX25vbWluYWxfdHNkc19s b2NrKTsKLX0KLQotdm9pZAotdHNkX3Bvc3Rmb3JrX2NoaWxkKHRzZF90ICp0c2QpIHsKLQltYWxs b2NfbXV0ZXhfcG9zdGZvcmtfY2hpbGQodHNkX3RzZG4odHNkKSwgJnRzZF9ub21pbmFsX3RzZHNf bG9jayk7Ci0JcWxfbmV3KCZ0c2Rfbm9taW5hbF90c2RzKTsKLQotCWlmICh0c2Rfc3RhdGVfZ2V0 KHRzZCkgPD0gdHNkX3N0YXRlX25vbWluYWxfbWF4KSB7Ci0JCXRzZF9hZGRfbm9taW5hbCh0c2Qp OwotCX0KLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC9zcmMvd2l0bmVzcy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvc3JjL3dpdG5lc3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ3NGFmMC4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv d2l0bmVzcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLSNpbmNsdWRlICJqZW1h bGxvYy9pbnRlcm5hbC9qZW1hbGxvY19wcmVhbWJsZS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9hc3NlcnQuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9tYWxsb2Nf aW8uaCIKLQotdm9pZAotd2l0bmVzc19pbml0KHdpdG5lc3NfdCAqd2l0bmVzcywgY29uc3QgY2hh ciAqbmFtZSwgd2l0bmVzc19yYW5rX3QgcmFuaywKLSAgICB3aXRuZXNzX2NvbXBfdCAqY29tcCwg dm9pZCAqb3BhcXVlKSB7Ci0Jd2l0bmVzcy0+bmFtZSA9IG5hbWU7Ci0Jd2l0bmVzcy0+cmFuayA9 IHJhbms7Ci0Jd2l0bmVzcy0+Y29tcCA9IGNvbXA7Ci0Jd2l0bmVzcy0+b3BhcXVlID0gb3BhcXVl OwotfQotCi1zdGF0aWMgdm9pZAotd2l0bmVzc19wcmludF93aXRuZXNzKHdpdG5lc3NfdCAqdywg dW5zaWduZWQgbikgewotCWFzc2VydChuID4gMCk7Ci0JaWYgKG4gPT0gMSkgewotCQltYWxsb2Nf cHJpbnRmKCIgJXMoJXUpIiwgdy0+bmFtZSwgdy0+cmFuayk7Ci0JfSBlbHNlIHsKLQkJbWFsbG9j X3ByaW50ZigiICVzKCV1KVgldSIsIHctPm5hbWUsIHctPnJhbmssIG4pOwotCX0KLX0KLQotc3Rh dGljIHZvaWQKLXdpdG5lc3NfcHJpbnRfd2l0bmVzc2VzKGNvbnN0IHdpdG5lc3NfbGlzdF90ICp3 aXRuZXNzZXMpIHsKLQl3aXRuZXNzX3QgKncsICpsYXN0ID0gTlVMTDsKLQl1bnNpZ25lZCBuID0g MDsKLQlxbF9mb3JlYWNoKHcsIHdpdG5lc3NlcywgbGluaykgewotCQlpZiAobGFzdCAhPSBOVUxM ICYmIHctPnJhbmsgPiBsYXN0LT5yYW5rKSB7Ci0JCQlhc3NlcnQody0+bmFtZSAhPSBsYXN0LT5u YW1lKTsKLQkJCXdpdG5lc3NfcHJpbnRfd2l0bmVzcyhsYXN0LCBuKTsKLQkJCW4gPSAwOwotCQl9 IGVsc2UgaWYgKGxhc3QgIT0gTlVMTCkgewotCQkJYXNzZXJ0KHctPnJhbmsgPT0gbGFzdC0+cmFu ayk7Ci0JCQlhc3NlcnQody0+bmFtZSA9PSBsYXN0LT5uYW1lKTsKLQkJfQotCQlsYXN0ID0gdzsK LQkJKytuOwotCX0KLQlpZiAobGFzdCAhPSBOVUxMKSB7Ci0JCXdpdG5lc3NfcHJpbnRfd2l0bmVz cyhsYXN0LCBuKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi13aXRuZXNzX2xvY2tfZXJyb3JfaW1w bChjb25zdCB3aXRuZXNzX2xpc3RfdCAqd2l0bmVzc2VzLAotICAgIGNvbnN0IHdpdG5lc3NfdCAq d2l0bmVzcykgewotCW1hbGxvY19wcmludGYoIjxqZW1hbGxvYz46IExvY2sgcmFuayBvcmRlciBy ZXZlcnNhbDoiKTsKLQl3aXRuZXNzX3ByaW50X3dpdG5lc3Nlcyh3aXRuZXNzZXMpOwotCW1hbGxv Y19wcmludGYoIiAlcygldSlcbiIsIHdpdG5lc3MtPm5hbWUsIHdpdG5lc3MtPnJhbmspOwotCWFi b3J0KCk7Ci19Ci13aXRuZXNzX2xvY2tfZXJyb3JfdCAqSkVUX01VVEFCTEUgd2l0bmVzc19sb2Nr X2Vycm9yID0gd2l0bmVzc19sb2NrX2Vycm9yX2ltcGw7Ci0KLXN0YXRpYyB2b2lkCi13aXRuZXNz X293bmVyX2Vycm9yX2ltcGwoY29uc3Qgd2l0bmVzc190ICp3aXRuZXNzKSB7Ci0JbWFsbG9jX3By aW50ZigiPGplbWFsbG9jPjogU2hvdWxkIG93biAlcygldSlcbiIsIHdpdG5lc3MtPm5hbWUsCi0J ICAgIHdpdG5lc3MtPnJhbmspOwotCWFib3J0KCk7Ci19Ci13aXRuZXNzX293bmVyX2Vycm9yX3Qg KkpFVF9NVVRBQkxFIHdpdG5lc3Nfb3duZXJfZXJyb3IgPQotICAgIHdpdG5lc3Nfb3duZXJfZXJy b3JfaW1wbDsKLQotc3RhdGljIHZvaWQKLXdpdG5lc3Nfbm90X293bmVyX2Vycm9yX2ltcGwoY29u c3Qgd2l0bmVzc190ICp3aXRuZXNzKSB7Ci0JbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogU2hv dWxkIG5vdCBvd24gJXMoJXUpXG4iLCB3aXRuZXNzLT5uYW1lLAotCSAgICB3aXRuZXNzLT5yYW5r KTsKLQlhYm9ydCgpOwotfQotd2l0bmVzc19ub3Rfb3duZXJfZXJyb3JfdCAqSkVUX01VVEFCTEUg d2l0bmVzc19ub3Rfb3duZXJfZXJyb3IgPQotICAgIHdpdG5lc3Nfbm90X293bmVyX2Vycm9yX2lt cGw7Ci0KLXN0YXRpYyB2b2lkCi13aXRuZXNzX2RlcHRoX2Vycm9yX2ltcGwoY29uc3Qgd2l0bmVz c19saXN0X3QgKndpdG5lc3NlcywKLSAgICB3aXRuZXNzX3JhbmtfdCByYW5rX2luY2x1c2l2ZSwg dW5zaWduZWQgZGVwdGgpIHsKLQltYWxsb2NfcHJpbnRmKCI8amVtYWxsb2M+OiBTaG91bGQgb3du ICV1IGxvY2slcyBvZiByYW5rID49ICV1OiIsIGRlcHRoLAotCSAgICAoZGVwdGggIT0gMSkgPyAg InMiIDogIiIsIHJhbmtfaW5jbHVzaXZlKTsKLQl3aXRuZXNzX3ByaW50X3dpdG5lc3Nlcyh3aXRu ZXNzZXMpOwotCW1hbGxvY19wcmludGYoIlxuIik7Ci0JYWJvcnQoKTsKLX0KLXdpdG5lc3NfZGVw dGhfZXJyb3JfdCAqSkVUX01VVEFCTEUgd2l0bmVzc19kZXB0aF9lcnJvciA9Ci0gICAgd2l0bmVz c19kZXB0aF9lcnJvcl9pbXBsOwotCi12b2lkCi13aXRuZXNzZXNfY2xlYW51cCh3aXRuZXNzX3Rz ZF90ICp3aXRuZXNzX3RzZCkgewotCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKHdpdG5lc3NfdHNk X3RzZG4od2l0bmVzc190c2QpKTsKLQotCS8qIERvIG5vdGhpbmcuICovCi19Ci0KLXZvaWQKLXdp dG5lc3NfcHJlZm9yayh3aXRuZXNzX3RzZF90ICp3aXRuZXNzX3RzZCkgewotCWlmICghY29uZmln X2RlYnVnKSB7Ci0JCXJldHVybjsKLQl9Ci0Jd2l0bmVzc190c2QtPmZvcmtpbmcgPSB0cnVlOwot fQotCi12b2lkCi13aXRuZXNzX3Bvc3Rmb3JrX3BhcmVudCh3aXRuZXNzX3RzZF90ICp3aXRuZXNz X3RzZCkgewotCWlmICghY29uZmlnX2RlYnVnKSB7Ci0JCXJldHVybjsKLQl9Ci0Jd2l0bmVzc190 c2QtPmZvcmtpbmcgPSBmYWxzZTsKLX0KLQotdm9pZAotd2l0bmVzc19wb3N0Zm9ya19jaGlsZCh3 aXRuZXNzX3RzZF90ICp3aXRuZXNzX3RzZCkgewotCWlmICghY29uZmlnX2RlYnVnKSB7Ci0JCXJl dHVybjsKLQl9Ci0jaWZuZGVmIEpFTUFMTE9DX01VVEVYX0lOSVRfQ0IKLQl3aXRuZXNzX2xpc3Rf dCAqd2l0bmVzc2VzOwotCi0Jd2l0bmVzc2VzID0gJndpdG5lc3NfdHNkLT53aXRuZXNzZXM7Ci0J cWxfbmV3KHdpdG5lc3Nlcyk7Ci0jZW5kaWYKLQl3aXRuZXNzX3RzZC0+Zm9ya2luZyA9IGZhbHNl OwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3NyYy96b25lLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC9zcmMv em9uZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2RmZGQwLi4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3NyYy96b25lLmMKKysr IC9kZXYvbnVsbApAQCAtMSw0NjkgKzAsMCBAQAotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2plbWFsbG9jX3ByZWFtYmxlLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxs b2NfaW50ZXJuYWxfaW5jbHVkZXMuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2Fz c2VydC5oIgotCi0jaWZuZGVmIEpFTUFMTE9DX1pPTkUKLSMgIGVycm9yICJUaGlzIHNvdXJjZSBm aWxlIGlzIGZvciB6b25lcyBvbiBEYXJ3aW4gKE9TIFgpLiIKLSNlbmRpZgotCi0vKiBEZWZpbml0 aW9ucyBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHMgaW4gbWFsbG9jL21hbGxvYy5oIG1pZ2h0IGJl IHRvbyBvbGQKLSAqIGZvciB0aGUgYnVpbHQgYmluYXJ5IHRvIHJ1biBvbiBuZXdlciB2ZXJzaW9u cyBvZiBPU1guIFNvIHVzZSB0aGUgbmV3ZXN0Ci0gKiBwb3NzaWJsZSB2ZXJzaW9uIG9mIHRob3Nl IHN0cnVjdHMuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9tYWxsb2Nfem9uZV90IHsKLQl2b2lkICpy ZXNlcnZlZDE7Ci0Jdm9pZCAqcmVzZXJ2ZWQyOwotCXNpemVfdCAoKnNpemUpKHN0cnVjdCBfbWFs bG9jX3pvbmVfdCAqLCBjb25zdCB2b2lkICopOwotCXZvaWQgKigqbWFsbG9jKShzdHJ1Y3QgX21h bGxvY196b25lX3QgKiwgc2l6ZV90KTsKLQl2b2lkICooKmNhbGxvYykoc3RydWN0IF9tYWxsb2Nf em9uZV90ICosIHNpemVfdCwgc2l6ZV90KTsKLQl2b2lkICooKnZhbGxvYykoc3RydWN0IF9tYWxs b2Nfem9uZV90ICosIHNpemVfdCk7Ci0Jdm9pZCAoKmZyZWUpKHN0cnVjdCBfbWFsbG9jX3pvbmVf dCAqLCB2b2lkICopOwotCXZvaWQgKigqcmVhbGxvYykoc3RydWN0IF9tYWxsb2Nfem9uZV90ICos IHZvaWQgKiwgc2l6ZV90KTsKLQl2b2lkICgqZGVzdHJveSkoc3RydWN0IF9tYWxsb2Nfem9uZV90 ICopOwotCWNvbnN0IGNoYXIgKnpvbmVfbmFtZTsKLQl1bnNpZ25lZCAoKmJhdGNoX21hbGxvYyko c3RydWN0IF9tYWxsb2Nfem9uZV90ICosIHNpemVfdCwgdm9pZCAqKiwgdW5zaWduZWQpOwotCXZv aWQgKCpiYXRjaF9mcmVlKShzdHJ1Y3QgX21hbGxvY196b25lX3QgKiwgdm9pZCAqKiwgdW5zaWdu ZWQpOwotCXN0cnVjdCBtYWxsb2NfaW50cm9zcGVjdGlvbl90ICppbnRyb3NwZWN0OwotCXVuc2ln bmVkIHZlcnNpb247Ci0Jdm9pZCAqKCptZW1hbGlnbikoc3RydWN0IF9tYWxsb2Nfem9uZV90ICos IHNpemVfdCwgc2l6ZV90KTsKLQl2b2lkICgqZnJlZV9kZWZpbml0ZV9zaXplKShzdHJ1Y3QgX21h bGxvY196b25lX3QgKiwgdm9pZCAqLCBzaXplX3QpOwotCXNpemVfdCAoKnByZXNzdXJlX3JlbGll Zikoc3RydWN0IF9tYWxsb2Nfem9uZV90ICosIHNpemVfdCk7Ci19IG1hbGxvY196b25lX3Q7Ci0K LXR5cGVkZWYgc3RydWN0IHsKLQl2bV9hZGRyZXNzX3QgYWRkcmVzczsKLQl2bV9zaXplX3Qgc2l6 ZTsKLX0gdm1fcmFuZ2VfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRpc3RpY3NfdCB7 Ci0JdW5zaWduZWQgYmxvY2tzX2luX3VzZTsKLQlzaXplX3Qgc2l6ZV9pbl91c2U7Ci0Jc2l6ZV90 IG1heF9zaXplX2luX3VzZTsKLQlzaXplX3Qgc2l6ZV9hbGxvY2F0ZWQ7Ci19IG1hbGxvY19zdGF0 aXN0aWNzX3Q7Ci0KLXR5cGVkZWYga2Vybl9yZXR1cm5fdCBtZW1vcnlfcmVhZGVyX3QodGFza190 LCB2bV9hZGRyZXNzX3QsIHZtX3NpemVfdCwgdm9pZCAqKik7Ci0KLXR5cGVkZWYgdm9pZCB2bV9y YW5nZV9yZWNvcmRlcl90KHRhc2tfdCwgdm9pZCAqLCB1bnNpZ25lZCB0eXBlLCB2bV9yYW5nZV90 ICosIHVuc2lnbmVkKTsKLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2ludHJvc3BlY3Rpb25fdCB7 Ci0Ja2Vybl9yZXR1cm5fdCAoKmVudW1lcmF0b3IpKHRhc2tfdCwgdm9pZCAqLCB1bnNpZ25lZCwg dm1fYWRkcmVzc190LCBtZW1vcnlfcmVhZGVyX3QsIHZtX3JhbmdlX3JlY29yZGVyX3QpOwotCXNp emVfdCAoKmdvb2Rfc2l6ZSkobWFsbG9jX3pvbmVfdCAqLCBzaXplX3QpOwotCWJvb2xlYW5fdCAo KmNoZWNrKShtYWxsb2Nfem9uZV90ICopOwotCXZvaWQgKCpwcmludCkobWFsbG9jX3pvbmVfdCAq LCBib29sZWFuX3QpOwotCXZvaWQgKCpsb2cpKG1hbGxvY196b25lX3QgKiwgdm9pZCAqKTsKLQl2 b2lkICgqZm9yY2VfbG9jaykobWFsbG9jX3pvbmVfdCAqKTsKLQl2b2lkICgqZm9yY2VfdW5sb2Nr KShtYWxsb2Nfem9uZV90ICopOwotCXZvaWQgKCpzdGF0aXN0aWNzKShtYWxsb2Nfem9uZV90ICos IG1hbGxvY19zdGF0aXN0aWNzX3QgKik7Ci0JYm9vbGVhbl90ICgqem9uZV9sb2NrZWQpKG1hbGxv Y196b25lX3QgKik7Ci0JYm9vbGVhbl90ICgqZW5hYmxlX2Rpc2NoYXJnZV9jaGVja2luZykobWFs bG9jX3pvbmVfdCAqKTsKLQlib29sZWFuX3QgKCpkaXNhYmxlX2Rpc2NoYXJnZV9jaGVja2luZyko bWFsbG9jX3pvbmVfdCAqKTsKLQl2b2lkICgqZGlzY2hhcmdlKShtYWxsb2Nfem9uZV90ICosIHZv aWQgKik7Ci0jaWZkZWYgX19CTE9DS1NfXwotCXZvaWQgKCplbnVtZXJhdGVfZGlzY2hhcmdlZF9w b2ludGVycykobWFsbG9jX3pvbmVfdCAqLCB2b2lkICheKSh2b2lkICosIHZvaWQgKikpOwotI2Vs c2UKLQl2b2lkICplbnVtZXJhdGVfdW5hdmFpbGFibGVfd2l0aG91dF9ibG9ja3M7Ci0jZW5kaWYK LQl2b2lkICgqcmVpbml0X2xvY2spKG1hbGxvY196b25lX3QgKik7Ci19IG1hbGxvY19pbnRyb3Nw ZWN0aW9uX3Q7Ci0KLWV4dGVybiBrZXJuX3JldHVybl90IG1hbGxvY19nZXRfYWxsX3pvbmVzKHRh c2tfdCwgbWVtb3J5X3JlYWRlcl90LCB2bV9hZGRyZXNzX3QgKiosIHVuc2lnbmVkICopOwotCi1l eHRlcm4gbWFsbG9jX3pvbmVfdCAqbWFsbG9jX2RlZmF1bHRfem9uZSh2b2lkKTsKLQotZXh0ZXJu IHZvaWQgbWFsbG9jX3pvbmVfcmVnaXN0ZXIobWFsbG9jX3pvbmVfdCAqem9uZSk7Ci0KLWV4dGVy biB2b2lkIG1hbGxvY196b25lX3VucmVnaXN0ZXIobWFsbG9jX3pvbmVfdCAqem9uZSk7Ci0KLS8q Ci0gKiBUaGUgbWFsbG9jX2RlZmF1bHRfcHVyZ2VhYmxlX3pvbmUoKSBmdW5jdGlvbiBpcyBvbmx5 IGF2YWlsYWJsZSBvbiA+PSAxMC42LgotICogV2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGlz IHByZXNlbnQgYXQgcnVudGltZSwgdGh1cyB0aGUgd2Vha19pbXBvcnQuCi0gKi8KLWV4dGVybiBt YWxsb2Nfem9uZV90ICptYWxsb2NfZGVmYXVsdF9wdXJnZWFibGVfem9uZSh2b2lkKQotSkVNQUxM T0NfQVRUUih3ZWFrX2ltcG9ydCk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEYXRh LiAqLwotCi1zdGF0aWMgbWFsbG9jX3pvbmVfdCAqZGVmYXVsdF96b25lLCAqcHVyZ2VhYmxlX3pv bmU7Ci1zdGF0aWMgbWFsbG9jX3pvbmVfdCBqZW1hbGxvY196b25lOwotc3RhdGljIHN0cnVjdCBt YWxsb2NfaW50cm9zcGVjdGlvbl90IGplbWFsbG9jX3pvbmVfaW50cm9zcGVjdDsKLXN0YXRpYyBw aWRfdCB6b25lX2ZvcmNlX2xvY2tfcGlkID0gLTE7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov Ci0vKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBub24taW5saW5lIHN0YXRpYyBmdW5jdGlvbnMu ICovCi0KLXN0YXRpYyBzaXplX3QJem9uZV9zaXplKG1hbGxvY196b25lX3QgKnpvbmUsIGNvbnN0 IHZvaWQgKnB0cik7Ci1zdGF0aWMgdm9pZAkqem9uZV9tYWxsb2MobWFsbG9jX3pvbmVfdCAqem9u ZSwgc2l6ZV90IHNpemUpOwotc3RhdGljIHZvaWQJKnpvbmVfY2FsbG9jKG1hbGxvY196b25lX3Qg KnpvbmUsIHNpemVfdCBudW0sIHNpemVfdCBzaXplKTsKLXN0YXRpYyB2b2lkCSp6b25lX3ZhbGxv YyhtYWxsb2Nfem9uZV90ICp6b25lLCBzaXplX3Qgc2l6ZSk7Ci1zdGF0aWMgdm9pZAl6b25lX2Zy ZWUobWFsbG9jX3pvbmVfdCAqem9uZSwgdm9pZCAqcHRyKTsKLXN0YXRpYyB2b2lkCSp6b25lX3Jl YWxsb2MobWFsbG9jX3pvbmVfdCAqem9uZSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7Ci1zdGF0 aWMgdm9pZAkqem9uZV9tZW1hbGlnbihtYWxsb2Nfem9uZV90ICp6b25lLCBzaXplX3QgYWxpZ25t ZW50LAotICAgIHNpemVfdCBzaXplKTsKLXN0YXRpYyB2b2lkCXpvbmVfZnJlZV9kZWZpbml0ZV9z aXplKG1hbGxvY196b25lX3QgKnpvbmUsIHZvaWQgKnB0ciwKLSAgICBzaXplX3Qgc2l6ZSk7Ci1z dGF0aWMgdm9pZAl6b25lX2Rlc3Ryb3kobWFsbG9jX3pvbmVfdCAqem9uZSk7Ci1zdGF0aWMgdW5z aWduZWQJem9uZV9iYXRjaF9tYWxsb2Moc3RydWN0IF9tYWxsb2Nfem9uZV90ICp6b25lLCBzaXpl X3Qgc2l6ZSwKLSAgICB2b2lkICoqcmVzdWx0cywgdW5zaWduZWQgbnVtX3JlcXVlc3RlZCk7Ci1z dGF0aWMgdm9pZAl6b25lX2JhdGNoX2ZyZWUoc3RydWN0IF9tYWxsb2Nfem9uZV90ICp6b25lLAot ICAgIHZvaWQgKip0b19iZV9mcmVlZCwgdW5zaWduZWQgbnVtX3RvX2JlX2ZyZWVkKTsKLXN0YXRp YyBzaXplX3QJem9uZV9wcmVzc3VyZV9yZWxpZWYoc3RydWN0IF9tYWxsb2Nfem9uZV90ICp6b25l LCBzaXplX3QgZ29hbCk7Ci1zdGF0aWMgc2l6ZV90CXpvbmVfZ29vZF9zaXplKG1hbGxvY196b25l X3QgKnpvbmUsIHNpemVfdCBzaXplKTsKLXN0YXRpYyBrZXJuX3JldHVybl90CXpvbmVfZW51bWVy YXRvcih0YXNrX3QgdGFzaywgdm9pZCAqZGF0YSwgdW5zaWduZWQgdHlwZV9tYXNrLAotICAgIHZt X2FkZHJlc3NfdCB6b25lX2FkZHJlc3MsIG1lbW9yeV9yZWFkZXJfdCByZWFkZXIsCi0gICAgdm1f cmFuZ2VfcmVjb3JkZXJfdCByZWNvcmRlcik7Ci1zdGF0aWMgYm9vbGVhbl90CXpvbmVfY2hlY2so bWFsbG9jX3pvbmVfdCAqem9uZSk7Ci1zdGF0aWMgdm9pZAl6b25lX3ByaW50KG1hbGxvY196b25l X3QgKnpvbmUsIGJvb2xlYW5fdCB2ZXJib3NlKTsKLXN0YXRpYyB2b2lkCXpvbmVfbG9nKG1hbGxv Y196b25lX3QgKnpvbmUsIHZvaWQgKmFkZHJlc3MpOwotc3RhdGljIHZvaWQJem9uZV9mb3JjZV9s b2NrKG1hbGxvY196b25lX3QgKnpvbmUpOwotc3RhdGljIHZvaWQJem9uZV9mb3JjZV91bmxvY2so bWFsbG9jX3pvbmVfdCAqem9uZSk7Ci1zdGF0aWMgdm9pZAl6b25lX3N0YXRpc3RpY3MobWFsbG9j X3pvbmVfdCAqem9uZSwKLSAgICBtYWxsb2Nfc3RhdGlzdGljc190ICpzdGF0cyk7Ci1zdGF0aWMg Ym9vbGVhbl90CXpvbmVfbG9ja2VkKG1hbGxvY196b25lX3QgKnpvbmUpOwotc3RhdGljIHZvaWQJ em9uZV9yZWluaXRfbG9jayhtYWxsb2Nfem9uZV90ICp6b25lKTsKLQotLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KLS8qCi0gKiBGdW5jdGlvbnMuCi0gKi8KLQotc3RhdGljIHNpemVfdAotem9uZV9z aXplKG1hbGxvY196b25lX3QgKnpvbmUsIGNvbnN0IHZvaWQgKnB0cikgewotCS8qCi0JICogVGhl cmUgYXBwZWFyIHRvIGJlIHBsYWNlcyB3aXRoaW4gRGFyd2luIChzdWNoIGFzIHNldGVudigzKSkg dGhhdAotCSAqIGNhdXNlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2l0aCBwb2ludGVycyB0aGF0 ICpubyogem9uZSBvd25zLiAgSWYKLQkgKiB3ZSBrbmV3IHRoYXQgYWxsIHBvaW50ZXJzIHdlcmUg b3duZWQgYnkgKnNvbWUqIHpvbmUsIHdlIGNvdWxkIHNwbGl0Ci0JICogb3VyIHpvbmUgaW50byB0 d28gcGFydHMsIGFuZCB1c2Ugb25lIGFzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciBhbmQKLQkgKiB0 aGUgb3RoZXIgYXMgdGhlIGRlZmF1bHQgZGVhbGxvY2F0b3IvcmVhbGxvY2F0b3IuICBTaW5jZSB0 aGF0IHdpbGwKLQkgKiBub3Qgd29yayBpbiBwcmFjdGljZSwgd2UgbXVzdCBjaGVjayBhbGwgcG9p bnRlcnMgdG8gYXNzdXJlIHRoYXQgdGhleQotCSAqIHJlc2lkZSB3aXRoaW4gYSBtYXBwZWQgZXh0 ZW50IGJlZm9yZSBkZXRlcm1pbmluZyBzaXplLgotCSAqLwotCXJldHVybiBpdnNhbGxvYyh0c2Ru X2ZldGNoKCksIHB0cik7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXpvbmVfbWFsbG9jKG1hbGxvY196 b25lX3QgKnpvbmUsIHNpemVfdCBzaXplKSB7Ci0JcmV0dXJuIGplX21hbGxvYyhzaXplKTsKLX0K LQotc3RhdGljIHZvaWQgKgotem9uZV9jYWxsb2MobWFsbG9jX3pvbmVfdCAqem9uZSwgc2l6ZV90 IG51bSwgc2l6ZV90IHNpemUpIHsKLQlyZXR1cm4gamVfY2FsbG9jKG51bSwgc2l6ZSk7Ci19Ci0K LXN0YXRpYyB2b2lkICoKLXpvbmVfdmFsbG9jKG1hbGxvY196b25lX3QgKnpvbmUsIHNpemVfdCBz aXplKSB7Ci0Jdm9pZCAqcmV0ID0gTlVMTDsgLyogQXNzaWdubWVudCBhdm9pZHMgdXNlbGVzcyBj b21waWxlciB3YXJuaW5nLiAqLwotCi0JamVfcG9zaXhfbWVtYWxpZ24oJnJldCwgUEFHRSwgc2l6 ZSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotem9uZV9mcmVlKG1hbGxvY196 b25lX3QgKnpvbmUsIHZvaWQgKnB0cikgewotCWlmIChpdnNhbGxvYyh0c2RuX2ZldGNoKCksIHB0 cikgIT0gMCkgewotCQlqZV9mcmVlKHB0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmcmVlKHB0cik7 Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXpvbmVfcmVhbGxvYyhtYWxsb2Nfem9uZV90ICp6b25lLCB2 b2lkICpwdHIsIHNpemVfdCBzaXplKSB7Ci0JaWYgKGl2c2FsbG9jKHRzZG5fZmV0Y2goKSwgcHRy KSAhPSAwKSB7Ci0JCXJldHVybiBqZV9yZWFsbG9jKHB0ciwgc2l6ZSk7Ci0JfQotCi0JcmV0dXJu IHJlYWxsb2MocHRyLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQgKgotem9uZV9tZW1hbGlnbiht YWxsb2Nfem9uZV90ICp6b25lLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgewotCXZv aWQgKnJldCA9IE5VTEw7IC8qIEFzc2lnbm1lbnQgYXZvaWRzIHVzZWxlc3MgY29tcGlsZXIgd2Fy bmluZy4gKi8KLQotCWplX3Bvc2l4X21lbWFsaWduKCZyZXQsIGFsaWdubWVudCwgc2l6ZSk7Ci0K LQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotem9uZV9mcmVlX2RlZmluaXRlX3NpemUo bWFsbG9jX3pvbmVfdCAqem9uZSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgewotCXNpemVfdCBh bGxvY19zaXplOwotCi0JYWxsb2Nfc2l6ZSA9IGl2c2FsbG9jKHRzZG5fZmV0Y2goKSwgcHRyKTsK LQlpZiAoYWxsb2Nfc2l6ZSAhPSAwKSB7Ci0JCWFzc2VydChhbGxvY19zaXplID09IHNpemUpOwot CQlqZV9mcmVlKHB0cik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmcmVlKHB0cik7Ci19Ci0KLXN0YXRp YyB2b2lkCi16b25lX2Rlc3Ryb3kobWFsbG9jX3pvbmVfdCAqem9uZSkgewotCS8qIFRoaXMgZnVu Y3Rpb24gc2hvdWxkIG5ldmVyIGJlIGNhbGxlZC4gKi8KLQlub3RfcmVhY2hlZCgpOwotfQotCi1z dGF0aWMgdW5zaWduZWQKLXpvbmVfYmF0Y2hfbWFsbG9jKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAq em9uZSwgc2l6ZV90IHNpemUsIHZvaWQgKipyZXN1bHRzLAotICAgIHVuc2lnbmVkIG51bV9yZXF1 ZXN0ZWQpIHsKLQl1bnNpZ25lZCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9yZXF1ZXN0ZWQ7 IGkrKykgewotCQlyZXN1bHRzW2ldID0gamVfbWFsbG9jKHNpemUpOwotCQlpZiAoIXJlc3VsdHNb aV0pCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIHZvaWQKLXpvbmVf YmF0Y2hfZnJlZShzdHJ1Y3QgX21hbGxvY196b25lX3QgKnpvbmUsIHZvaWQgKip0b19iZV9mcmVl ZCwKLSAgICB1bnNpZ25lZCBudW1fdG9fYmVfZnJlZWQpIHsKLQl1bnNpZ25lZCBpOwotCi0JZm9y IChpID0gMDsgaSA8IG51bV90b19iZV9mcmVlZDsgaSsrKSB7Ci0JCXpvbmVfZnJlZSh6b25lLCB0 b19iZV9mcmVlZFtpXSk7Ci0JCXRvX2JlX2ZyZWVkW2ldID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRp YyBzaXplX3QKLXpvbmVfcHJlc3N1cmVfcmVsaWVmKHN0cnVjdCBfbWFsbG9jX3pvbmVfdCAqem9u ZSwgc2l6ZV90IGdvYWwpIHsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNpemVfdAotem9uZV9n b29kX3NpemUobWFsbG9jX3pvbmVfdCAqem9uZSwgc2l6ZV90IHNpemUpIHsKLQlpZiAoc2l6ZSA9 PSAwKSB7Ci0JCXNpemUgPSAxOwotCX0KLQlyZXR1cm4gc3pfczJ1KHNpemUpOwotfQotCi1zdGF0 aWMga2Vybl9yZXR1cm5fdAotem9uZV9lbnVtZXJhdG9yKHRhc2tfdCB0YXNrLCB2b2lkICpkYXRh LCB1bnNpZ25lZCB0eXBlX21hc2ssCi0gICAgdm1fYWRkcmVzc190IHpvbmVfYWRkcmVzcywgbWVt b3J5X3JlYWRlcl90IHJlYWRlciwKLSAgICB2bV9yYW5nZV9yZWNvcmRlcl90IHJlY29yZGVyKSB7 Ci0JcmV0dXJuIEtFUk5fU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJvb2xlYW5fdAotem9uZV9jaGVj ayhtYWxsb2Nfem9uZV90ICp6b25lKSB7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lk Ci16b25lX3ByaW50KG1hbGxvY196b25lX3QgKnpvbmUsIGJvb2xlYW5fdCB2ZXJib3NlKSB7Ci19 Ci0KLXN0YXRpYyB2b2lkCi16b25lX2xvZyhtYWxsb2Nfem9uZV90ICp6b25lLCB2b2lkICphZGRy ZXNzKSB7Ci19Ci0KLXN0YXRpYyB2b2lkCi16b25lX2ZvcmNlX2xvY2sobWFsbG9jX3pvbmVfdCAq em9uZSkgewotCWlmIChpc3RocmVhZGVkKSB7Ci0JCS8qCi0JCSAqIFNlZSB0aGUgbm90ZSBpbiB6 b25lX2ZvcmNlX3VubG9jaywgYmVsb3csIHRvIHNlZSB3aHkgd2UgbmVlZAotCQkgKiB0aGlzLgot CQkgKi8KLQkJYXNzZXJ0KHpvbmVfZm9yY2VfbG9ja19waWQgPT0gLTEpOwotCQl6b25lX2ZvcmNl X2xvY2tfcGlkID0gZ2V0cGlkKCk7Ci0JCWplbWFsbG9jX3ByZWZvcmsoKTsKLQl9Ci19Ci0KLXN0 YXRpYyB2b2lkCi16b25lX2ZvcmNlX3VubG9jayhtYWxsb2Nfem9uZV90ICp6b25lKSB7Ci0JLyoK LQkgKiB6b25lX2ZvcmNlX2xvY2sgYW5kIHpvbmVfZm9yY2VfdW5sb2NrIGFyZSB0aGUgZW50cnkg cG9pbnRzIHRvIHRoZQotCSAqIGZvcmtpbmcgbWFjaGluZXJ5IG9uIE9TIFguICBUaGUgdHJpY2t5 IHRoaW5nIGlzLCB0aGUgY2hpbGQgaXMgbm90Ci0JICogYWxsb3dlZCB0byB1bmxvY2sgbXV0ZXhl cyBsb2NrZWQgaW4gdGhlIHBhcmVudCwgZXZlbiBpZiBvd25lZCBieSB0aGUKLQkgKiBmb3JraW5n IHRocmVhZCAoYW5kIHRoZSBtdXRleCB0eXBlIHdlIHVzZSBpbiBPUyBYIHdpbGwgZmFpbCBhbiBh c3NlcnQKLQkgKiBpZiB3ZSB0cnkpLiAgSW4gdGhlIGNoaWxkLCB3ZSBjYW4gZ2V0IGF3YXkgd2l0 aCByZWluaXRpYWxpemluZyBhbGwKLQkgKiB0aGUgbXV0ZXhlcywgd2hpY2ggaGFzIHRoZSBlZmZl Y3Qgb2YgdW5sb2NraW5nIHRoZW0uICBJbiB0aGUgcGFyZW50LAotCSAqIGRvaW5nIHRoaXMgd291 bGQgbWVhbiB3ZSB3b3VsZG4ndCB3YWtlIGFueSB3YWl0ZXJzIGJsb2NrZWQgb24gdGhlCi0JICog bXV0ZXhlcyB3ZSB1bmxvY2suICBTbywgd2UgcmVjb3JkIHRoZSBwaWQgb2YgdGhlIGN1cnJlbnQg dGhyZWFkIGluCi0JICogem9uZV9mb3JjZV9sb2NrLCBhbmQgdXNlIHRoYXQgdG8gZGV0ZWN0IGlm IHdlJ3JlIGluIHRoZSBwYXJlbnQgb3IKLQkgKiBjaGlsZCBoZXJlLCB0byBkZWNpZGUgd2hpY2gg dW5sb2NrIGxvZ2ljIHdlIG5lZWQuCi0JICovCi0JaWYgKGlzdGhyZWFkZWQpIHsKLQkJYXNzZXJ0 KHpvbmVfZm9yY2VfbG9ja19waWQgIT0gLTEpOwotCQlpZiAoZ2V0cGlkKCkgPT0gem9uZV9mb3Jj ZV9sb2NrX3BpZCkgewotCQkJamVtYWxsb2NfcG9zdGZvcmtfcGFyZW50KCk7Ci0JCX0gZWxzZSB7 Ci0JCQlqZW1hbGxvY19wb3N0Zm9ya19jaGlsZCgpOwotCQl9Ci0JCXpvbmVfZm9yY2VfbG9ja19w aWQgPSAtMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi16b25lX3N0YXRpc3RpY3MobWFsbG9jX3pv bmVfdCAqem9uZSwgbWFsbG9jX3N0YXRpc3RpY3NfdCAqc3RhdHMpIHsKLQkvKiBXZSBtYWtlIG5v IGVmZm9ydCB0byBhY3R1YWxseSBmaWxsIHRoZSB2YWx1ZXMgKi8KLQlzdGF0cy0+YmxvY2tzX2lu X3VzZSA9IDA7Ci0Jc3RhdHMtPnNpemVfaW5fdXNlID0gMDsKLQlzdGF0cy0+bWF4X3NpemVfaW5f dXNlID0gMDsKLQlzdGF0cy0+c2l6ZV9hbGxvY2F0ZWQgPSAwOwotfQotCi1zdGF0aWMgYm9vbGVh bl90Ci16b25lX2xvY2tlZChtYWxsb2Nfem9uZV90ICp6b25lKSB7Ci0JLyogUHJldGVuZCBubyBs b2NrIGlzIGJlaW5nIGhlbGQgKi8KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi16 b25lX3JlaW5pdF9sb2NrKG1hbGxvY196b25lX3QgKnpvbmUpIHsKLQkvKiBBcyBvZiBPU1ggMTAu MTIsIHRoaXMgZnVuY3Rpb24gaXMgb25seSB1c2VkIHdoZW4gZm9yY2VfdW5sb2NrIHdvdWxkCi0J ICogYmUgdXNlZCBpZiB0aGUgem9uZSB2ZXJzaW9uIHdlcmUgPCA5LiBTbyBqdXN0IHVzZSBmb3Jj ZV91bmxvY2suICovCi0Jem9uZV9mb3JjZV91bmxvY2soem9uZSk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci16b25lX2luaXQodm9pZCkgewotCWplbWFsbG9jX3pvbmUuc2l6ZSA9IHpvbmVfc2l6ZTsKLQlq ZW1hbGxvY196b25lLm1hbGxvYyA9IHpvbmVfbWFsbG9jOwotCWplbWFsbG9jX3pvbmUuY2FsbG9j ID0gem9uZV9jYWxsb2M7Ci0JamVtYWxsb2Nfem9uZS52YWxsb2MgPSB6b25lX3ZhbGxvYzsKLQlq ZW1hbGxvY196b25lLmZyZWUgPSB6b25lX2ZyZWU7Ci0JamVtYWxsb2Nfem9uZS5yZWFsbG9jID0g em9uZV9yZWFsbG9jOwotCWplbWFsbG9jX3pvbmUuZGVzdHJveSA9IHpvbmVfZGVzdHJveTsKLQlq ZW1hbGxvY196b25lLnpvbmVfbmFtZSA9ICJqZW1hbGxvY196b25lIjsKLQlqZW1hbGxvY196b25l LmJhdGNoX21hbGxvYyA9IHpvbmVfYmF0Y2hfbWFsbG9jOwotCWplbWFsbG9jX3pvbmUuYmF0Y2hf ZnJlZSA9IHpvbmVfYmF0Y2hfZnJlZTsKLQlqZW1hbGxvY196b25lLmludHJvc3BlY3QgPSAmamVt YWxsb2Nfem9uZV9pbnRyb3NwZWN0OwotCWplbWFsbG9jX3pvbmUudmVyc2lvbiA9IDk7Ci0JamVt YWxsb2Nfem9uZS5tZW1hbGlnbiA9IHpvbmVfbWVtYWxpZ247Ci0JamVtYWxsb2Nfem9uZS5mcmVl X2RlZmluaXRlX3NpemUgPSB6b25lX2ZyZWVfZGVmaW5pdGVfc2l6ZTsKLQlqZW1hbGxvY196b25l LnByZXNzdXJlX3JlbGllZiA9IHpvbmVfcHJlc3N1cmVfcmVsaWVmOwotCi0JamVtYWxsb2Nfem9u ZV9pbnRyb3NwZWN0LmVudW1lcmF0b3IgPSB6b25lX2VudW1lcmF0b3I7Ci0JamVtYWxsb2Nfem9u ZV9pbnRyb3NwZWN0Lmdvb2Rfc2l6ZSA9IHpvbmVfZ29vZF9zaXplOwotCWplbWFsbG9jX3pvbmVf aW50cm9zcGVjdC5jaGVjayA9IHpvbmVfY2hlY2s7Ci0JamVtYWxsb2Nfem9uZV9pbnRyb3NwZWN0 LnByaW50ID0gem9uZV9wcmludDsKLQlqZW1hbGxvY196b25lX2ludHJvc3BlY3QubG9nID0gem9u ZV9sb2c7Ci0JamVtYWxsb2Nfem9uZV9pbnRyb3NwZWN0LmZvcmNlX2xvY2sgPSB6b25lX2ZvcmNl X2xvY2s7Ci0JamVtYWxsb2Nfem9uZV9pbnRyb3NwZWN0LmZvcmNlX3VubG9jayA9IHpvbmVfZm9y Y2VfdW5sb2NrOwotCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC5zdGF0aXN0aWNzID0gem9uZV9z dGF0aXN0aWNzOwotCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC56b25lX2xvY2tlZCA9IHpvbmVf bG9ja2VkOwotCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC5lbmFibGVfZGlzY2hhcmdlX2NoZWNr aW5nID0gTlVMTDsKLQlqZW1hbGxvY196b25lX2ludHJvc3BlY3QuZGlzYWJsZV9kaXNjaGFyZ2Vf Y2hlY2tpbmcgPSBOVUxMOwotCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC5kaXNjaGFyZ2UgPSBO VUxMOwotI2lmZGVmIF9fQkxPQ0tTX18KLQlqZW1hbGxvY196b25lX2ludHJvc3BlY3QuZW51bWVy YXRlX2Rpc2NoYXJnZWRfcG9pbnRlcnMgPSBOVUxMOwotI2Vsc2UKLQlqZW1hbGxvY196b25lX2lu dHJvc3BlY3QuZW51bWVyYXRlX3VuYXZhaWxhYmxlX3dpdGhvdXRfYmxvY2tzID0gTlVMTDsKLSNl bmRpZgotCWplbWFsbG9jX3pvbmVfaW50cm9zcGVjdC5yZWluaXRfbG9jayA9IHpvbmVfcmVpbml0 X2xvY2s7Ci19Ci0KLXN0YXRpYyBtYWxsb2Nfem9uZV90ICoKLXpvbmVfZGVmYXVsdF9nZXQodm9p ZCkgewotCW1hbGxvY196b25lX3QgKip6b25lcyA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IG51bV96 b25lcyA9IDA7Ci0KLQkvKgotCSAqIE9uIE9TWCAxMC4xMiwgbWFsbG9jX2RlZmF1bHRfem9uZSBy ZXR1cm5zIGEgc3BlY2lhbCB6b25lIHRoYXQgaXMgbm90Ci0JICogcHJlc2VudCBpbiB0aGUgbGlz dCBvZiByZWdpc3RlcmVkIHpvbmVzLiBUaGF0IHpvbmUgdXNlcyBhICJsaXRlIHpvbmUiCi0JICog aWYgb25lIGlzIHByZXNlbnQgKGFwcGFyZW50bHkgZW5hYmxlZCB3aGVuIG1hbGxvYyBzdGFjayBs b2dnaW5nIGlzCi0JICogZW5hYmxlZCksIG9yIHRoZSBmaXJzdCByZWdpc3RlcmVkIHpvbmUgb3Ro ZXJ3aXNlLiBJbiBwcmFjdGljZSB0aGlzCi0JICogbWVhbnMgdW5sZXNzIG1hbGxvYyBzdGFjayBs b2dnaW5nIGlzIGVuYWJsZWQsIHRoZSBmaXJzdCByZWdpc3RlcmVkCi0JICogem9uZSBpcyB0aGUg ZGVmYXVsdC4gIFNvIGdldCB0aGUgbGlzdCBvZiB6b25lcyB0byBnZXQgdGhlIGZpcnN0IG9uZSwK LQkgKiBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWFsbG9jX2RlZmF1bHRfem9uZS4KLQkgKi8KLQlp ZiAoS0VSTl9TVUNDRVNTICE9IG1hbGxvY19nZXRfYWxsX3pvbmVzKDAsIE5VTEwsCi0JICAgICh2 bV9hZGRyZXNzX3QqKikmem9uZXMsICZudW1fem9uZXMpKSB7Ci0JCS8qCi0JCSAqIFJlc2V0IHRo ZSB2YWx1ZSBpbiBjYXNlIHRoZSBmYWlsdXJlIGhhcHBlbmVkIGFmdGVyIGl0IHdhcwotCQkgKiBz ZXQuCi0JCSAqLwotCQludW1fem9uZXMgPSAwOwotCX0KLQotCWlmIChudW1fem9uZXMpIHsKLQkJ cmV0dXJuIHpvbmVzWzBdOwotCX0KLQotCXJldHVybiBtYWxsb2NfZGVmYXVsdF96b25lKCk7Ci19 Ci0KLS8qIEFzIHdyaXR0ZW4sIHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgcHJvbW90ZSBqZW1hbGxv Y196b25lLiAqLwotc3RhdGljIHZvaWQKLXpvbmVfcHJvbW90ZSh2b2lkKSB7Ci0JbWFsbG9jX3pv bmVfdCAqem9uZTsKLQotCWRvIHsKLQkJLyoKLQkJICogVW5yZWdpc3RlciBhbmQgcmVyZWdpc3Rl ciB0aGUgZGVmYXVsdCB6b25lLiAgT24gT1NYID49IDEwLjYsCi0JCSAqIHVucmVnaXN0ZXJpbmcg dGFrZXMgdGhlIGxhc3QgcmVnaXN0ZXJlZCB6b25lIGFuZCBwbGFjZXMgaXQKLQkJICogYXQgdGhl IGxvY2F0aW9uIG9mIHRoZSBzcGVjaWZpZWQgem9uZS4gIFVucmVnaXN0ZXJpbmcgdGhlCi0JCSAq IGRlZmF1bHQgem9uZSB0aHVzIG1ha2VzIHRoZSBsYXN0IHJlZ2lzdGVyZWQgb25lIHRoZSBkZWZh dWx0LgotCQkgKiBPbiBPU1ggPCAxMC42LCB1bnJlZ2lzdGVyaW5nIHNoaWZ0cyBhbGwgcmVnaXN0 ZXJlZCB6b25lcy4KLQkJICogVGhlIGZpcnN0IHJlZ2lzdGVyZWQgem9uZSB0aGVuIGJlY29tZXMg dGhlIGRlZmF1bHQuCi0JCSAqLwotCQltYWxsb2Nfem9uZV91bnJlZ2lzdGVyKGRlZmF1bHRfem9u ZSk7Ci0JCW1hbGxvY196b25lX3JlZ2lzdGVyKGRlZmF1bHRfem9uZSk7Ci0KLQkJLyoKLQkJICog T24gT1NYIDEwLjYsIGhhdmluZyB0aGUgZGVmYXVsdCBwdXJnZWFibGUgem9uZSBhcHBlYXIgYmVm b3JlCi0JCSAqIHRoZSBkZWZhdWx0IHpvbmUgbWFrZXMgc29tZSB0aGluZ3MgY3Jhc2ggYmVjYXVz ZSBpdCB0aGlua3MgaXQKLQkJICogb3ducyB0aGUgZGVmYXVsdCB6b25lIGFsbG9jYXRlZCBwb2lu dGVycy4gIFdlIHRodXMKLQkJICogdW5yZWdpc3Rlci9yZS1yZWdpc3RlciBpdCBpbiBvcmRlciB0 byBlbnN1cmUgaXQncyBhbHdheXMKLQkJICogYWZ0ZXIgdGhlIGRlZmF1bHQgem9uZS4gIE9uIE9T WCA8IDEwLjYsIHRoZXJlIGlzIG5vIHB1cmdlYWJsZQotCQkgKiB6b25lLCBzbyB0aGlzIGRvZXMg bm90aGluZy4gIE9uIE9TWCA+PSAxMC42LCB1bnJlZ2lzdGVyaW5nCi0JCSAqIHJlcGxhY2VzIHRo ZSBwdXJnZWFibGUgem9uZSB3aXRoIHRoZSBsYXN0IHJlZ2lzdGVyZWQgem9uZQotCQkgKiBhYm92 ZSwgaS5lLiB0aGUgZGVmYXVsdCB6b25lLiAgUmVnaXN0ZXJpbmcgaXQgYWdhaW4gdGhlbiBwdXRz Ci0JCSAqIGl0IGF0IHRoZSBlbmQsIG9idmlvdXNseSBhZnRlciB0aGUgZGVmYXVsdCB6b25lLgot CQkgKi8KLQkJaWYgKHB1cmdlYWJsZV96b25lICE9IE5VTEwpIHsKLQkJCW1hbGxvY196b25lX3Vu cmVnaXN0ZXIocHVyZ2VhYmxlX3pvbmUpOwotCQkJbWFsbG9jX3pvbmVfcmVnaXN0ZXIocHVyZ2Vh YmxlX3pvbmUpOwotCQl9Ci0KLQkJem9uZSA9IHpvbmVfZGVmYXVsdF9nZXQoKTsKLQl9IHdoaWxl ICh6b25lICE9ICZqZW1hbGxvY196b25lKTsKLX0KLQotSkVNQUxMT0NfQVRUUihjb25zdHJ1Y3Rv cikKLXZvaWQKLXpvbmVfcmVnaXN0ZXIodm9pZCkgewotCS8qCi0JICogSWYgc29tZXRoaW5nIGVs c2UgcmVwbGFjZWQgdGhlIHN5c3RlbSBkZWZhdWx0IHpvbmUgYWxsb2NhdG9yLCBkb24ndAotCSAq IHJlZ2lzdGVyIGplbWFsbG9jJ3MuCi0JICovCi0JZGVmYXVsdF96b25lID0gem9uZV9kZWZhdWx0 X2dldCgpOwotCWlmICghZGVmYXVsdF96b25lLT56b25lX25hbWUgfHwgc3RyY21wKGRlZmF1bHRf em9uZS0+em9uZV9uYW1lLAotCSAgICAiRGVmYXVsdE1hbGxvY1pvbmUiKSAhPSAwKSB7Ci0JCXJl dHVybjsKLQl9Ci0KLQkvKgotCSAqIFRoZSBkZWZhdWx0IHB1cmdlYWJsZSB6b25lIGlzIGNyZWF0 ZWQgbGF6aWx5IGJ5IE9TWCdzIGxpYmMuICBJdCB1c2VzCi0JICogdGhlIGRlZmF1bHQgem9uZSB3 aGVuIGl0IGlzIGNyZWF0ZWQgZm9yICJzbWFsbCIgYWxsb2NhdGlvbnMKLQkgKiAoPCAxNSBLaUIp LCBidXQgYXNzdW1lcyB0aGUgZGVmYXVsdCB6b25lIGlzIGEgc2NhbGFibGVfem9uZS4gIFRoaXMK LQkgKiBvYnZpb3VzbHkgZmFpbHMgd2hlbiB0aGUgZGVmYXVsdCB6b25lIGlzIHRoZSBqZW1hbGxv YyB6b25lLCBzbwotCSAqIG1hbGxvY19kZWZhdWx0X3B1cmdlYWJsZV96b25lKCkgaXMgY2FsbGVk IGJlZm9yZWhhbmQgc28gdGhhdCB0aGUKLQkgKiBkZWZhdWx0IHB1cmdlYWJsZSB6b25lIGlzIGNy ZWF0ZWQgd2hlbiB0aGUgZGVmYXVsdCB6b25lIGlzIHN0aWxsCi0JICogYSBzY2FsYWJsZV96b25l LiAgQXMgcHVyZ2VhYmxlIHpvbmVzIG9ubHkgZXhpc3Qgb24gPj0gMTAuNiwgd2UgbmVlZAotCSAq IHRvIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIG1hbGxvY19kZWZhdWx0X3B1cmdlYWJsZV96 b25lKCkgYXQKLQkgKiBydW4gdGltZS4KLQkgKi8KLQlwdXJnZWFibGVfem9uZSA9IChtYWxsb2Nf ZGVmYXVsdF9wdXJnZWFibGVfem9uZSA9PSBOVUxMKSA/IE5VTEwgOgotCSAgICBtYWxsb2NfZGVm YXVsdF9wdXJnZWFibGVfem9uZSgpOwotCi0JLyogUmVnaXN0ZXIgdGhlIGN1c3RvbSB6b25lLiAg QXQgdGhpcyBwb2ludCBpdCB3b24ndCBiZSB0aGUgZGVmYXVsdC4gKi8KLQl6b25lX2luaXQoKTsK LQltYWxsb2Nfem9uZV9yZWdpc3RlcigmamVtYWxsb2Nfem9uZSk7Ci0KLQkvKiBQcm9tb3RlIHRo ZSBjdXN0b20gem9uZSB0byBiZSBkZWZhdWx0LiAqLwotCXpvbmVfcHJvbW90ZSgpOwotfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvYW5h bHl6ZS9wcm9mX2JpYXMuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvYW5hbHl6ZS9wcm9mX2JpYXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg YTk2Y2E5NC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L2FuYWx5emUvcHJvZl9iaWFzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCww IEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLS8qCi0gKiBUaGlzIGlzIGEg aGVscGVyIHV0aWxpdHksIG9ubHkgbWVhbnQgdG8gYmUgcnVuIG1hbnVhbGx5IChhbmQsIGZvciBl eGFtcGxlLAotICogZG9lc24ndCBjaGVjayBmb3IgZmFpbHVyZXMsIHRyeSB0byBza2lwIGV4ZWN1 dGlvbiBpbiBub24tcHJvZiBtb2RlcywgZXRjLikuCi0gKiBJdCBydW5zLCBhbGxvY2F0ZXMgb2Jq ZWN0cyBvZiB0d28gZGlmZmVyZW50IHNpemVzIGZyb20gdGhlIHNhbWUgc3RhY2sgdHJhY2UsCi0g KiBhbmQgZXhpdHMuCi0gKgotICogVGhlIGlkZWEgaXMgdGhhdCBzb21lIGh1bWFuIG9wZXJhdG9y IHdpbGwgcnVuIGl0IGxpa2U6Ci0gKiAgICAgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9mX2Zp bmFsOnRydWUiIHRlc3QvYW5hbHl6ZS9wcm9mX2JpYXMKLSAqIGFuZCBtYW51YWxseSBpbnNwZWN0 IHRoZSByZXN1bHRzLgotICoKLSAqIFRoZSByZXN1bHRzIHNob3VsZCBiZToKLSAqIGplcHJvZiAt LXRleHQgdGVzdC9hbmFseXplL3Byb2ZfYmlhcyAtLWludXNlX3NwYWNlIGplcHJvZi48cGlkPi4w LmYuaGVhcDoKLSAqIAlhcm91bmQgMTAyNCBNQgotICogamVwcm9mIC0tdGV4dCB0ZXN0L2FuYWx5 emUvcHJvZl9iaWFzIC0taW51c2Vfb2JqZWN0cyBqZXByb2YuPHBpZD4uMC5mLmhlYXA6Ci0gKiAJ YXJvdW5kIDMzNTU0NDQ4ID0gMTYgKyAzMiAqIDEwMjQgKiAxMDI0Ci0gKgotICogQW5kLCBpZiBw cm9mX2FjY3VtIGlzIG9uOgotICogamVwcm9mIC0tdGV4dCB0ZXN0L2FuYWx5emUvcHJvZl9iaWFz IC0tYWxsb2Nfc3BhY2UgamVwcm9mLjxwaWQ+LjAuZi5oZWFwOgotICogICAgIGFyb3VuZCAyMDQ4 IE1CCi0gKiBqZXByb2YgLS10ZXh0IHRlc3QvYW5hbHl6ZS9wcm9mX2JpYXMgLS1hbGxvY19vYmpl Y3RzIGplcHJvZi48cGlkPi4wLmYuaGVhcDoKLSAqIAlhcm91bmQgNjcxMDg4OTYgPSAyICogKDE2 ICsgMzIgKiAxMDI0ICogMTAyNCkKLSAqLwotCi1zdGF0aWMgdm9pZAotbW9ja19iYWNrdHJhY2Uo dm9pZCAqKnZlYywgdW5zaWduZWQgKmxlbiwgdW5zaWduZWQgbWF4X2xlbikgewotCSpsZW4gPSA0 OwotCXZlY1swXSA9ICh2b2lkICopMHgxMTE7Ci0JdmVjWzFdID0gKHZvaWQgKikweDIyMjsKLQl2 ZWNbMl0gPSAodm9pZCAqKTB4MzMzOwotCXZlY1szXSA9ICh2b2lkICopMHg0NDQ7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1kb19hbGxvY3Moc2l6ZV90IHN6LCBzaXplX3QgY250LCBib29sIGRvX2ZyZWVz KSB7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQl2b2lkICpwdHIgPSBt YWxsb2N4KHN6LCAwKTsKLQkJYXNzZXJ0X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1h bGxvY3ggZmFpbHVyZSIpOwotCQlpZiAoZG9fZnJlZXMpIHsKLQkJCWRhbGxvY3gocHRyLCAwKTsK LQkJfQotCX0KLX0KLQotaW50Ci1tYWluKHZvaWQpIHsKLQlzaXplX3QgbGdfcHJvZl9zYW1wbGVf bG9jYWwgPSAxOTsKLQlpbnQgZXJyID0gbWFsbGN0bCgicHJvZi5yZXNldCIsIE5VTEwsIE5VTEws Ci0JICAgICh2b2lkICopJmxnX3Byb2Zfc2FtcGxlX2xvY2FsLCBzaXplb2YobGdfcHJvZl9zYW1w bGVfbG9jYWwpKTsKLQlhc3NlcnQoZXJyID09IDApOwotCi0JcHJvZl9iYWNrdHJhY2VfaG9va19z ZXQobW9ja19iYWNrdHJhY2UpOwotCWRvX2FsbG9jcygxNiwgMzIgKiAxMDI0ICogMTAyNCwgLyog ZG9fZnJlZXMgKi8gdHJ1ZSk7Ci0JZG9fYWxsb2NzKDMyICogMTAyNCogMTAyNCwgMTYsIC8qIGRv X2ZyZWVzICovIHRydWUpOwotCWRvX2FsbG9jcygxNiwgMzIgKiAxMDI0ICogMTAyNCwgLyogZG9f ZnJlZXMgKi8gZmFsc2UpOwotCWRvX2FsbG9jcygzMiAqIDEwMjQqIDEwMjQsIDE2LCAvKiBkb19m cmVlcyAqLyBmYWxzZSk7Ci0KLQlyZXR1cm4gMDsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2FuYWx5emUvcmFuZC5jIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9hbmFseXplL3JhbmQuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIyMGIwNi4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2FuYWx5emUvcmFuZC5jCisrKyAv ZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3Qu aCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEdlbmVyYWwgcHVycG9zZSB0 b29sIGZvciBleGFtaW5pbmcgcmFuZG9tIG51bWJlciBkaXN0cmlidXRpb25zLgotICoKLSAqIElu cHV0IC0KLSAqIChhKSBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLCBhbmQKLSAqIChiKSB0aGUg YnVja2V0czoKLSAqICAgICAoMSkgbnVtYmVyIG9mIGJ1Y2tldHMsCi0gKiAgICAgKDIpIHdpZHRo IG9mIGVhY2ggYnVja2V0LCBpbiBsb2cgc2NhbGUsCi0gKiAgICAgKDMpIGV4cGVjdGVkIG1lYW4g YW5kIHN0ZGRldiBvZiB0aGUgY291bnQgb2YgcmFuZG9tIG51bWJlcnMgaW4gZWFjaAotICogICAg ICAgICBidWNrZXQsIGFuZAotICogKGMpIG51bWJlciBvZiBpdGVyYXRpb25zIHRvIGludm9rZSB0 aGUgZ2VuZXJhdG9yLgotICoKLSAqIFRoZSBwcm9ncmFtIGdlbmVyYXRlcyB0aGUgc3BlY2lmaWVk IGFtb3VudCBvZiByYW5kb20gbnVtYmVycywgYW5kIGFzc2VzcyBob3cKLSAqIHdlbGwgdGhleSBj b25mb3JtIHRvIHRoZSBleHBlY3RhdGlvbnM6IGZvciBlYWNoIGJ1Y2tldCwgb3V0cHV0IC0KLSAq IChhKSB0aGUgKGdpdmVuKSBleHBlY3RlZCBtZWFuIGFuZCBzdGRkZXYsCi0gKiAoYikgdGhlIGFj dHVhbCBjb3VudCBhbmQgYW55IGludGVyZXN0aW5nIGxldmVsIG9mIGRldmlhdGlvbjoKLSAqICAg ICAoMSkgfjY4JSBidWNrZXRzIHNob3VsZCBzaG93IG5vIGludGVyZXN0aW5nIGRldmlhdGlvbiwg bWVhbmluZyBhCi0gKiAgICAgICAgIGRldmlhdGlvbiBsZXNzIHRoYW4gc3RkZGV2IGZyb20gdGhl IGV4cGVjdGF0aW9uOwotICogICAgICgyKSB+MjclIGJ1Y2tldHMgc2hvdWxkIHNob3cgJysnIC8g Jy0nLCBtZWFuaW5nIGEgZGV2aWF0aW9uIGluIHRoZSByYW5nZQotICogICAgICAgICBvZiBbc3Rk ZGV2LCAyICogc3RkZGV2KSBmcm9tIHRoZSBleHBlY3RhdGlvbjsKLSAqICAgICAoMykgfjQlIGJ1 Y2tldHMgc2hvdWxkIHNob3cgJysrJyAvICctLScsIG1lYW5pbmcgYSBkZXZpYXRpb24gaW4gdGhl Ci0gKiAgICAgICAgIHJhbmdlIG9mIFsyICogc3RkZGV2LCAzICogc3RkZGV2KSBmcm9tIHRoZSBl eHBlY3RhdGlvbjsgYW5kCi0gKiAgICAgKDQpIGxlc3MgdGhhbiAwLjMlIGJ1Y2tldHMgc2hvdWxk IHNob3cgbW9yZSB0aGFuIHR3byAnKydzIC8gJy0ncy4KLSAqCi0gKiBUZWNobmljYWwgcmVtYXJr czoKLSAqIChhKSBUaGUgZ2VuZXJhdG9yIGlzIGV4cGVjdGVkIHRvIG91dHB1dCB1aW50NjRfdCBu dW1iZXJzLCBzbyB5b3UgbWlnaHQgbmVlZAotICogICAgIHRvIGRlZmluZSBhIHdyYXBwZXIuCi0g KiAoYikgVGhlIGJ1Y2tldHMgbXVzdCBiZSBvZiBlcXVhbCB3aWR0aCBhbmQgdGhlIGxvd2VzdCBi dWNrZXQgc3RhcnRzIGF0Ci0gKiAgICAgWzAsIDJebGdfYnVja2V0X3dpZHRoIC0gMSkuCi0gKiAo YykgQW55IGdlbmVyYXRlZCBudW1iZXIgPj0gbl9idWNrZXQgKiAyXmxnX2J1Y2tldF93aWR0aCB3 aWxsIGJlIGNvdW50ZWQKLSAqICAgICB0b3dhcmRzIHRoZSBsYXN0IGJ1Y2tldDsgdGhlIGV4cGVj dGVkIG1lYW4gYW5kIHN0ZGRldiBwcm92aWRlZCBzaG91bGQKLSAqICAgICBhbHNvIHJlZmxlY3Qg dGhhdC4KLSAqIChkKSBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgYWR2aXNlZCB0byBiZSBk ZXRlcm1pbmVkIHNvIHRoYXQgdGhlIGJ1Y2tldAotICogICAgIHdpdGggdGhlIG1pbmltYWwgZXhw ZWN0ZWQgcHJvcG9ydGlvbiBnZXRzIGEgc3VmZmljaWVudCBjb3VudC4KLSAqLwotCi1zdGF0aWMg dm9pZAotZmlsbChzaXplX3QgYVtdLCBjb25zdCBzaXplX3QgbiwgY29uc3Qgc2l6ZV90IGspIHsK LQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewotCQlhW2ldID0gazsKLQl9Ci19Ci0K LXN0YXRpYyB2b2lkCi1jb2xsZWN0X2J1Y2tldHModWludDY0X3QgKCpnZW4pKHZvaWQgKiksIHZv aWQgKm9wYXF1ZSwgc2l6ZV90IGJ1Y2tldHNbXSwKLSAgICBjb25zdCBzaXplX3Qgbl9idWNrZXQs IGNvbnN0IHNpemVfdCBsZ19idWNrZXRfd2lkdGgsIGNvbnN0IHNpemVfdCBuX2l0ZXIpIHsKLQlm b3IgKHNpemVfdCBpID0gMDsgaSA8IG5faXRlcjsgKytpKSB7Ci0JCXVpbnQ2NF90IG51bSA9IGdl bihvcGFxdWUpOwotCQl1aW50NjRfdCBidWNrZXRfaWQgPSBudW0gPj4gbGdfYnVja2V0X3dpZHRo OwotCQlpZiAoYnVja2V0X2lkID49IG5fYnVja2V0KSB7Ci0JCQlidWNrZXRfaWQgPSBuX2J1Y2tl dCAtIDE7Ci0JCX0KLQkJKytidWNrZXRzW2J1Y2tldF9pZF07Ci0JfQotfQotCi1zdGF0aWMgdm9p ZAotcHJpbnRfYnVja2V0cyhjb25zdCBzaXplX3QgYnVja2V0c1tdLCBjb25zdCBzaXplX3QgbWVh bnNbXSwKLSAgICBjb25zdCBzaXplX3Qgc3RkZGV2c1tdLCBjb25zdCBzaXplX3Qgbl9idWNrZXQp IHsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5fYnVja2V0OyArK2kpIHsKLQkJbWFsbG9jX3By aW50ZigiJXp1Olx0bWVhbiA9ICV6dSxcdHN0ZGRldiA9ICV6dSxcdGJ1Y2tldCA9ICV6dSIsCi0J CSAgICBpLCBtZWFuc1tpXSwgc3RkZGV2c1tpXSwgYnVja2V0c1tpXSk7Ci0KLQkJLyogTWFrZSBz dXJlIHRoZXJlJ3Mgbm8gb3ZlcmZsb3cuICovCi0JCWFzc2VydChidWNrZXRzW2ldICsgc3RkZGV2 c1tpXSA+PSBzdGRkZXZzW2ldKTsKLQkJYXNzZXJ0KG1lYW5zW2ldICsgc3RkZGV2c1tpXSA+PSBz dGRkZXZzW2ldKTsKLQotCQlpZiAoYnVja2V0c1tpXSArIHN0ZGRldnNbaV0gPD0gbWVhbnNbaV0p IHsKLQkJCW1hbGxvY193cml0ZSgiICIpOwotCQkJZm9yIChzaXplX3QgdCA9IG1lYW5zW2ldIC0g YnVja2V0c1tpXTsgdCA+PSBzdGRkZXZzW2ldOwotCQkJICAgIHQgLT0gc3RkZGV2c1tpXSkgewot CQkJCW1hbGxvY193cml0ZSgiLSIpOwotCQkJfQotCQl9IGVsc2UgaWYgKGJ1Y2tldHNbaV0gPj0g bWVhbnNbaV0gKyBzdGRkZXZzW2ldKSB7Ci0JCQltYWxsb2Nfd3JpdGUoIiAiKTsKLQkJCWZvciAo c2l6ZV90IHQgPSBidWNrZXRzW2ldIC0gbWVhbnNbaV07IHQgPj0gc3RkZGV2c1tpXTsKLQkJCSAg ICB0IC09IHN0ZGRldnNbaV0pIHsKLQkJCQltYWxsb2Nfd3JpdGUoIisiKTsKLQkJCX0KLQkJfQot CQltYWxsb2Nfd3JpdGUoIlxuIik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYnVja2V0X2FuYWx5 c2lzKHVpbnQ2NF90ICgqZ2VuKSh2b2lkICopLCB2b2lkICpvcGFxdWUsIHNpemVfdCBidWNrZXRz W10sCi0gICAgY29uc3Qgc2l6ZV90IG1lYW5zW10sIGNvbnN0IHNpemVfdCBzdGRkZXZzW10sIGNv bnN0IHNpemVfdCBuX2J1Y2tldCwKLSAgICBjb25zdCBzaXplX3QgbGdfYnVja2V0X3dpZHRoLCBj b25zdCBzaXplX3Qgbl9pdGVyKSB7Ci0JZm9yIChzaXplX3QgaSA9IDE7IGkgPD0gMzsgKytpKSB7 Ci0JCW1hbGxvY19wcmludGYoInJvdW5kICV6dVxuIiwgaSk7Ci0JCWZpbGwoYnVja2V0cywgbl9i dWNrZXQsIDApOwotCQljb2xsZWN0X2J1Y2tldHMoZ2VuLCBvcGFxdWUsIGJ1Y2tldHMsIG5fYnVj a2V0LAotCQkgICAgbGdfYnVja2V0X3dpZHRoLCBuX2l0ZXIpOwotCQlwcmludF9idWNrZXRzKGJ1 Y2tldHMsIG1lYW5zLCBzdGRkZXZzLCBuX2J1Y2tldCk7Ci0JfQotfQotCi0vKiAoUmVjb21tZW5k ZWQpIG1pbmltYWwgYnVja2V0IG1lYW4uICovCi0jZGVmaW5lIE1JTl9CVUNLRVRfTUVBTiAxMDAw MAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBVbmlmb3JtIHJhbmRvbSBudW1iZXIg Z2VuZXJhdG9yLiAqLwotCi10eXBlZGVmIHN0cnVjdCB1bmlmb3JtX2dlbl9hcmdfcyB1bmlmb3Jt X2dlbl9hcmdfdDsKLXN0cnVjdCB1bmlmb3JtX2dlbl9hcmdfcyB7Ci0JdWludDY0X3Qgc3RhdGU7 Ci0JY29uc3QgdW5zaWduZWQgbGdfcmFuZ2U7Ci19OwotCi1zdGF0aWMgdWludDY0X3QKLXVuaWZv cm1fZ2VuKHZvaWQgKm9wYXF1ZSkgewotCXVuaWZvcm1fZ2VuX2FyZ190ICphcmcgPSAodW5pZm9y bV9nZW5fYXJnX3QgKilvcGFxdWU7Ci0JcmV0dXJuIHBybmdfbGdfcmFuZ2VfdTY0KCZhcmctPnN0 YXRlLCBhcmctPmxnX3JhbmdlKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3VuaWZvcm0pIHsKLSNk ZWZpbmUgTEdfTl9CVUNLRVQgNQotI2RlZmluZSBOX0JVQ0tFVCAoMSA8PCBMR19OX0JVQ0tFVCkK LQotI2RlZmluZSBRVU9USUVOVF9DRUlMKG4sIGQpICgoKG4pIC0gMSkgLyAoZCkgKyAxKQotCi0J Y29uc3QgdW5zaWduZWQgbGdfcmFuZ2VfdGVzdCA9IDI1OwotCi0JLyoKLQkgKiBNYXRoZW1hdGlj YWwgdHJpY2tzIHRvIGd1YXJhbnRlZSB0aGF0IGJvdGggbWVhbiBhbmQgc3RkZGV2IGFyZQotCSAq IGludGVnZXJzLCBhbmQgdGhhdCB0aGUgbWluaW1hbCBidWNrZXQgbWVhbiBpcyBhdCBsZWFzdAot CSAqIE1JTl9CVUNLRVRfTUVBTi4KLQkgKi8KLQljb25zdCBzaXplX3QgcSA9IDEgPDwgUVVPVElF TlRfQ0VJTChMR19DRUlMKFFVT1RJRU5UX0NFSUwoCi0JICAgIE1JTl9CVUNLRVRfTUVBTiwgTl9C VUNLRVQgKiAoTl9CVUNLRVQgLSAxKSkpLCAyKTsKLQljb25zdCBzaXplX3Qgc3RkZGV2ID0gKE5f QlVDS0VUIC0gMSkgKiBxOwotCWNvbnN0IHNpemVfdCBtZWFuID0gTl9CVUNLRVQgKiBzdGRkZXYg KiBxOwotCWNvbnN0IHNpemVfdCBuX2l0ZXIgPSBOX0JVQ0tFVCAqIG1lYW47Ci0KLQlzaXplX3Qg bWVhbnNbTl9CVUNLRVRdOwotCWZpbGwobWVhbnMsIE5fQlVDS0VULCBtZWFuKTsKLQlzaXplX3Qg c3RkZGV2c1tOX0JVQ0tFVF07Ci0JZmlsbChzdGRkZXZzLCBOX0JVQ0tFVCwgc3RkZGV2KTsKLQot CXVuaWZvcm1fZ2VuX2FyZ190IGFyZyA9IHsodWludDY0X3QpKHVpbnRwdHJfdCkmbGdfcmFuZ2Vf dGVzdCwKLQkgICAgbGdfcmFuZ2VfdGVzdH07Ci0Jc2l6ZV90IGJ1Y2tldHNbTl9CVUNLRVRdOwot CWFzc2VydF96dV9nZShsZ19yYW5nZV90ZXN0LCBMR19OX0JVQ0tFVCwgIiIpOwotCWNvbnN0IHNp emVfdCBsZ19idWNrZXRfd2lkdGggPSBsZ19yYW5nZV90ZXN0IC0gTEdfTl9CVUNLRVQ7Ci0KLQli dWNrZXRfYW5hbHlzaXModW5pZm9ybV9nZW4sICZhcmcsIGJ1Y2tldHMsIG1lYW5zLCBzdGRkZXZz LAotCSAgICBOX0JVQ0tFVCwgbGdfYnVja2V0X3dpZHRoLCBuX2l0ZXIpOwotCi0jdW5kZWYgTEdf Tl9CVUNLRVQKLSN1bmRlZiBOX0JVQ0tFVAotI3VuZGVmIFFVT1RJRU5UX0NFSUwKLX0KLVRFU1Rf RU5ECi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEdlb21ldHJpYyByYW5kb20gbnVt YmVyIGdlbmVyYXRvcjsgY29tcGlsZWQgb25seSB3aGVuIHByb2YgaXMgb24uICovCi0KLSNpZmRl ZiBKRU1BTExPQ19QUk9GCi0KLS8qCi0gKiBGaWxscyBnZW9tZXRyaWMgcHJvcG9ydGlvbnMgYW5k IHJldHVybnMgdGhlIG1pbmltYWwgcHJvcG9ydGlvbi4gIFNlZQotICogY29tbWVudHMgaW4gdGVz dF9wcm9mX3NhbXBsZSBmb3IgZXhwbGFuYXRpb25zIGZvciBuX2RpdmlkZS4KLSAqLwotc3RhdGlj IGRvdWJsZQotZmlsbF9nZW9tZXRyaWNfcHJvcG9ydGlvbnMoZG91YmxlIHByb3BvcnRpb25zW10s IGNvbnN0IHNpemVfdCBuX2J1Y2tldCwKLSAgICBjb25zdCBzaXplX3Qgbl9kaXZpZGUpIHsKLQlh c3NlcnQobl9idWNrZXQgPiAwKTsKLQlhc3NlcnQobl9kaXZpZGUgPiAwKTsKLQlkb3VibGUgeCA9 IDEuOwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbl9idWNrZXQ7ICsraSkgewotCQlpZiAoaSA9 PSBuX2J1Y2tldCAtIDEpIHsKLQkJCXByb3BvcnRpb25zW2ldID0geDsKLQkJfSBlbHNlIHsKLQkJ CWRvdWJsZSB5ID0geCAqIGV4cCgtMS4gLyBuX2RpdmlkZSk7Ci0JCQlwcm9wb3J0aW9uc1tpXSA9 IHggLSB5OwotCQkJeCA9IHk7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBUaGUgbWluaW1hbCBwcm9wb3J0 aW9uIGlzIHRoZSBzbWFsbGVyIG9uZSBvZiB0aGUgbGFzdCB0d28KLQkgKiBwcm9wb3J0aW9ucyBm b3IgZ2VvbWV0cmljIGRpc3RyaWJ1dGlvbi4KLQkgKi8KLQlkb3VibGUgbWluX3Byb3BvcnRpb24g PSBwcm9wb3J0aW9uc1tuX2J1Y2tldCAtIDFdOwotCWlmIChuX2J1Y2tldCA+PSAyICYmIHByb3Bv cnRpb25zW25fYnVja2V0IC0gMl0gPCBtaW5fcHJvcG9ydGlvbikgewotCQltaW5fcHJvcG9ydGlv biA9IHByb3BvcnRpb25zW25fYnVja2V0IC0gMl07Ci0JfQotCXJldHVybiBtaW5fcHJvcG9ydGlv bjsKLX0KLQotc3RhdGljIHNpemVfdAotcm91bmRfdG9fbmVhcmVzdChjb25zdCBkb3VibGUgeCkg ewotCXJldHVybiAoc2l6ZV90KSh4ICsgLjUpOwotfQotCi1zdGF0aWMgdm9pZAotZmlsbF9yZWZl cmVuY2VzKHNpemVfdCBtZWFuc1tdLCBzaXplX3Qgc3RkZGV2c1tdLCBjb25zdCBkb3VibGUgcHJv cG9ydGlvbnNbXSwKLSAgICBjb25zdCBzaXplX3Qgbl9idWNrZXQsIGNvbnN0IHNpemVfdCBuX2l0 ZXIpIHsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5fYnVja2V0OyArK2kpIHsKLQkJZG91Ymxl IHggPSBuX2l0ZXIgKiBwcm9wb3J0aW9uc1tpXTsKLQkJbWVhbnNbaV0gPSByb3VuZF90b19uZWFy ZXN0KHgpOwotCQlzdGRkZXZzW2ldID0gcm91bmRfdG9fbmVhcmVzdChzcXJ0KHggKiAoMS4gLSBw cm9wb3J0aW9uc1tpXSkpKTsKLQl9Ci19Ci0KLXN0YXRpYyB1aW50NjRfdAotcHJvZl9zYW1wbGVf Z2VuKHZvaWQgKm9wYXF1ZSkgewotCXJldHVybiBwcm9mX3NhbXBsZV9uZXdfZXZlbnRfd2FpdCgo dHNkX3QgKilvcGFxdWUpIC0gMTsKLX0KLQotI2VuZGlmIC8qIEpFTUFMTE9DX1BST0YgKi8KLQot VEVTVF9CRUdJTih0ZXN0X3Byb2Zfc2FtcGxlKSB7Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfcHJv Zik7Ci0jaWZkZWYgSkVNQUxMT0NfUFJPRgotCi0vKiBOdW1iZXIgb2YgZGl2aXNpb25zIHdpdGhp biBbMCwgbWVhbikuICovCi0jZGVmaW5lIExHX05fRElWSURFIDMKLSNkZWZpbmUgTl9ESVZJREUg KDEgPDwgTEdfTl9ESVZJREUpCi0KLS8qIENvdmVyYWdlIG9mIGJ1Y2tldHMgaW4gdGVybXMgb2Yg bXVsdGlwbGVzIG9mIG1lYW4uICovCi0jZGVmaW5lIExHX05fTVVMVElQTFkgMgotI2RlZmluZSBO X0dFT19CVUNLRVQgKE5fRElWSURFIDw8IExHX05fTVVMVElQTFkpCi0KLQl0ZXN0X3NraXBfaWYo IW9wdF9wcm9mKTsKLQotCXNpemVfdCBsZ19wcm9mX3NhbXBsZV90ZXN0ID0gMjU7Ci0KLQlzaXpl X3QgbGdfcHJvZl9zYW1wbGVfb3JpZyA9IGxnX3Byb2Zfc2FtcGxlOwotCWFzc2VydF9kX2VxKG1h bGxjdGwoInByb2YucmVzZXQiLCBOVUxMLCBOVUxMLCAmbGdfcHJvZl9zYW1wbGVfdGVzdCwKLQkg ICAgc2l6ZW9mKHNpemVfdCkpLCAwLCAiIik7Ci0JbWFsbG9jX3ByaW50ZigibGdfcHJvZl9zYW1w bGUgPSAlenVcbiIsIGxnX3Byb2Zfc2FtcGxlX3Rlc3QpOwotCi0JZG91YmxlIHByb3BvcnRpb25z W05fR0VPX0JVQ0tFVCArIDFdOwotCWNvbnN0IGRvdWJsZSBtaW5fcHJvcG9ydGlvbiA9IGZpbGxf Z2VvbWV0cmljX3Byb3BvcnRpb25zKHByb3BvcnRpb25zLAotCSAgICBOX0dFT19CVUNLRVQgKyAx LCBOX0RJVklERSk7Ci0JY29uc3Qgc2l6ZV90IG5faXRlciA9IHJvdW5kX3RvX25lYXJlc3QoTUlO X0JVQ0tFVF9NRUFOIC8KLQkgICAgbWluX3Byb3BvcnRpb24pOwotCXNpemVfdCBtZWFuc1tOX0dF T19CVUNLRVQgKyAxXTsKLQlzaXplX3Qgc3RkZGV2c1tOX0dFT19CVUNLRVQgKyAxXTsKLQlmaWxs X3JlZmVyZW5jZXMobWVhbnMsIHN0ZGRldnMsIHByb3BvcnRpb25zLCBOX0dFT19CVUNLRVQgKyAx LCBuX2l0ZXIpOwotCi0JdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOwotCWFzc2VydF9wdHJfbm90 X251bGwodHNkLCAiIik7Ci0Jc2l6ZV90IGJ1Y2tldHNbTl9HRU9fQlVDS0VUICsgMV07Ci0JYXNz ZXJ0X3p1X2dlKGxnX3Byb2Zfc2FtcGxlLCBMR19OX0RJVklERSwgIiIpOwotCWNvbnN0IHNpemVf dCBsZ19idWNrZXRfd2lkdGggPSBsZ19wcm9mX3NhbXBsZSAtIExHX05fRElWSURFOwotCi0JYnVj a2V0X2FuYWx5c2lzKHByb2Zfc2FtcGxlX2dlbiwgdHNkLCBidWNrZXRzLCBtZWFucywgc3RkZGV2 cywKLQkgICAgTl9HRU9fQlVDS0VUICsgMSwgbGdfYnVja2V0X3dpZHRoLCBuX2l0ZXIpOwotCi0J YXNzZXJ0X2RfZXEobWFsbGN0bCgicHJvZi5yZXNldCIsIE5VTEwsIE5VTEwsICZsZ19wcm9mX3Nh bXBsZV9vcmlnLAotCSAgICBzaXplb2Yoc2l6ZV90KSksIDAsICIiKTsKLQotI3VuZGVmIExHX05f RElWSURFCi0jdW5kZWYgTl9ESVZJREUKLSN1bmRlZiBMR19OX01VTFRJUExZCi0jdW5kZWYgTl9H RU9fQlVDS0VUCi0KLSNlbmRpZiAvKiBKRU1BTExPQ19QUk9GICovCi19Ci1URVNUX0VORAotCi0v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0 X25vX3JlZW50cmFuY3koCi0JICAgIHRlc3RfdW5pZm9ybSwKLQkgICAgdGVzdF9wcm9mX3NhbXBs ZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC9hbmFseXplL3NpemVzLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L2FuYWx5emUvc2l6ZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggNDRjOWRlNS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L2FuYWx5emUvc2l6ZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAg QEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0KLS8qCi0gKiBQcmludCB0aGUgc2l6ZXMgb2YgdmFyaW91cyBpbXBvcnRhbnQgY29yZSBkYXRh IHN0cnVjdHVyZXMuICBPSywgSSBndWVzcyB0aGlzCi0gKiBpc24ndCByZWFsbHkgYSAic3RyZXNz IiB0ZXN0LCBidXQgaXQgZG9lcyBnaXZlIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dAotICogbG93 LWxldmVsIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgYXMgdGhlIG90aGVyIHRoaW5ncyBp biB0aGlzIGRpcmVjdG9yeQotICogZG8uCi0gKi8KLQotc3RhdGljIHZvaWQKLWRvX3ByaW50KGNv bnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzel9ieXRlcykgewotCWNvbnN0IGNoYXIgKnNpemVzW10g PSB7ImJ5dGVzIiwgIktCIiwgIk1CIiwgIkdCIiwgIlRCIiwgIlBCIiwgIkVCIiwKLQkJIlpCIn07 Ci0Jc2l6ZV90IHNpemVzX21heCA9IHNpemVvZihzaXplcykvc2l6ZW9mKHNpemVzWzBdKTsKLQot CXNpemVfdCBpbmQgPSAwOwotCWRvdWJsZSBzeiA9IHN6X2J5dGVzOwotCXdoaWxlIChzeiA+PSAx MDI0ICYmIGluZCA8IHNpemVzX21heCAtIDEpIHsKLQkJc3ogLz0gMTAyNDsKLQkJaW5kKys7Ci0J fQotCWlmIChpbmQgPT0gMCkgewotCQlwcmludGYoIiUtMjBzOiAlenUgYnl0ZXNcbiIsIG5hbWUs IHN6X2J5dGVzKTsKLQl9IGVsc2UgewotCQlwcmludGYoIiUtMjBzOiAlZiAlc1xuIiwgbmFtZSwg c3osIHNpemVzW2luZF0pOwotCX0KLX0KLQotaW50Ci1tYWluKCkgewotI2RlZmluZSBQKHR5cGUp CQkJCQkJCQlcCi0JZG9fcHJpbnQoI3R5cGUsIHNpemVvZih0eXBlKSkKLQlQKGFyZW5hX3QpOwot CVAoYXJlbmFfc3RhdHNfdCk7Ci0JUChiYXNlX3QpOwotCVAoZGVjYXlfdCk7Ci0JUChlZGF0YV90 KTsKLQlQKGVjYWNoZV90KTsKLQlQKGVzZXRfdCk7Ci0JUChtYWxsb2NfbXV0ZXhfdCk7Ci0JUChw cm9mX3RjdHhfdCk7Ci0JUChwcm9mX2djdHhfdCk7Ci0JUChwcm9mX3RkYXRhX3QpOwotCVAocnRy ZWVfdCk7Ci0JUChydHJlZV9sZWFmX2VsbV90KTsKLQlQKHNsYWJfZGF0YV90KTsKLQlQKHRjYWNo ZV90KTsKLQlQKHRjYWNoZV9zbG93X3QpOwotCVAodHNkX3QpOwotI3VuZGVmIFAKLX0KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1 ZGUvdGVzdC9TRk1ULWFsdGkuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtYWx0aS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBhMTg4NWRiLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtYWx0aS5oCisrKyAvZGV2L251bGwK QEAgLTEsMTg2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4z LjMKLSAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9T Rk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKLSAqIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0gKgotICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAw NyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQotICogICBVbml2 ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICAgUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiAgIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUKLSAqICAgbWV0OgotICoKLSAqICAgICAgICogUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlCi0gKiAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgIGRpc2NsYWltZXIgaW4g dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAg ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUg b2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICAgICAg aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMKLSAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp YyBwcmlvciB3cml0dGVuCi0gKiAgICAgICAgIHBlcm1pc3Npb24uCi0gKgotICogICBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU T1JTCi0gKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogICBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot ICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogICBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqICAg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZCi0gKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiAgIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0gKi8KLS8qKgotICogQGZpbGUgU0ZNVC1hbHRpLmgKLSAqCi0gKiBAYnJpZWYg U0lNRCBvcmllbnRlZCBGYXN0IE1lcnNlbm5lIFR3aXN0ZXIoU0ZNVCkKLSAqIHBzZXVkb3JhbmRv bSBudW1iZXIgZ2VuZXJhdG9yCi0gKgotICogQGF1dGhvciBNdXRzdW8gU2FpdG8gKEhpcm9zaGlt YSBVbml2ZXJzaXR5KQotICogQGF1dGhvciBNYWtvdG8gTWF0c3Vtb3RvIChIaXJvc2hpbWEgVW5p dmVyc2l0eSkKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8g TWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAqIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0gKgotICogVGhlIG5ldyBCU0QgTGljZW5zZSBpcyBhcHBsaWVkIHRvIHRoaXMgc29mdHdh cmUuCi0gKiBzZWUgTElDRU5TRS50eHQKLSAqLwotCi0jaWZuZGVmIFNGTVRfQUxUSV9ICi0jZGVm aW5lIFNGTVRfQUxUSV9ICi0KLS8qKgotICogVGhpcyBmdW5jdGlvbiByZXByZXNlbnRzIHRoZSBy ZWN1cnNpb24gZm9ybXVsYSBpbiBBbHRpVmVjIGFuZCBCSUcgRU5ESUFOLgotICogQHBhcmFtIGEg YSAxMjgtYml0IHBhcnQgb2YgdGhlIGludGVyYWwgc3RhdGUgYXJyYXkKLSAqIEBwYXJhbSBiIGEg MTI4LWJpdCBwYXJ0IG9mIHRoZSBpbnRlcmFsIHN0YXRlIGFycmF5Ci0gKiBAcGFyYW0gYyBhIDEy OC1iaXQgcGFydCBvZiB0aGUgaW50ZXJhbCBzdGF0ZSBhcnJheQotICogQHBhcmFtIGQgYSAxMjgt Yml0IHBhcnQgb2YgdGhlIGludGVyYWwgc3RhdGUgYXJyYXkKLSAqIEByZXR1cm4gb3V0cHV0Ci0g Ki8KLUpFTUFMTE9DX0FMV0FZU19JTkxJTkUKLXZlY3RvciB1bnNpZ25lZCBpbnQgdmVjX3JlY3Vy c2lvbih2ZWN0b3IgdW5zaWduZWQgaW50IGEsCi0JCQkJCQl2ZWN0b3IgdW5zaWduZWQgaW50IGIs Ci0JCQkJCQl2ZWN0b3IgdW5zaWduZWQgaW50IGMsCi0JCQkJCQl2ZWN0b3IgdW5zaWduZWQgaW50 IGQpIHsKLQotICAgIGNvbnN0IHZlY3RvciB1bnNpZ25lZCBpbnQgc2wxID0gQUxUSV9TTDE7Ci0g ICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCBzcjEgPSBBTFRJX1NSMTsKLSNpZmRlZiBPTkxZ NjQKLSAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgaW50IG1hc2sgPSBBTFRJX01TSzY0OwotICAg IGNvbnN0IHZlY3RvciB1bnNpZ25lZCBjaGFyIHBlcm1fc2wgPSBBTFRJX1NMMl9QRVJNNjQ7Ci0g ICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybV9zciA9IEFMVElfU1IyX1BFUk02NDsK LSNlbHNlCi0gICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGludCBtYXNrID0gQUxUSV9NU0s7Ci0g ICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybV9zbCA9IEFMVElfU0wyX1BFUk07Ci0g ICAgY29uc3QgdmVjdG9yIHVuc2lnbmVkIGNoYXIgcGVybV9zciA9IEFMVElfU1IyX1BFUk07Ci0j ZW5kaWYKLSAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHYsIHcsIHgsIHksIHo7Ci0gICAgeCA9IHZl Y19wZXJtKGEsICh2ZWN0b3IgdW5zaWduZWQgaW50KXBlcm1fc2wsIHBlcm1fc2wpOwotICAgIHYg PSBhOwotICAgIHkgPSB2ZWNfc3IoYiwgc3IxKTsKLSAgICB6ID0gdmVjX3Blcm0oYywgKHZlY3Rv ciB1bnNpZ25lZCBpbnQpcGVybV9zciwgcGVybV9zcik7Ci0gICAgdyA9IHZlY19zbChkLCBzbDEp OwotICAgIHogPSB2ZWNfeG9yKHosIHcpOwotICAgIHkgPSB2ZWNfYW5kKHksIG1hc2spOwotICAg IHYgPSB2ZWNfeG9yKHYsIHgpOwotICAgIHogPSB2ZWNfeG9yKHosIHkpOwotICAgIHogPSB2ZWNf eG9yKHosIHYpOwotICAgIHJldHVybiB6OwotfQotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gZmls bHMgdGhlIGludGVybmFsIHN0YXRlIGFycmF5IHdpdGggcHNldWRvcmFuZG9tCi0gKiBpbnRlZ2Vy cy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGdlbl9yYW5kX2FsbChzZm10X3QgKmN0eCkgewot ICAgIGludCBpOwotICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgciwgcjEsIHIyOwotCi0gICAgcjEg PSBjdHgtPnNmbXRbTiAtIDJdLnM7Ci0gICAgcjIgPSBjdHgtPnNmbXRbTiAtIDFdLnM7Ci0gICAg Zm9yIChpID0gMDsgaSA8IE4gLSBQT1MxOyBpKyspIHsKLQlyID0gdmVjX3JlY3Vyc2lvbihjdHgt PnNmbXRbaV0ucywgY3R4LT5zZm10W2kgKyBQT1MxXS5zLCByMSwgcjIpOwotCWN0eC0+c2ZtdFtp XS5zID0gcjsKLQlyMSA9IHIyOwotCXIyID0gcjsKLSAgICB9Ci0gICAgZm9yICg7IGkgPCBOOyBp KyspIHsKLQlyID0gdmVjX3JlY3Vyc2lvbihjdHgtPnNmbXRbaV0ucywgY3R4LT5zZm10W2kgKyBQ T1MxIC0gTl0ucywgcjEsIHIyKTsKLQljdHgtPnNmbXRbaV0ucyA9IHI7Ci0JcjEgPSByMjsKLQly MiA9IHI7Ci0gICAgfQotfQotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgdGhlIHVzZXIt c3BlY2lmaWVkIGFycmF5IHdpdGggcHNldWRvcmFuZG9tCi0gKiBpbnRlZ2Vycy4KLSAqCi0gKiBA cGFyYW0gYXJyYXkgYW4gMTI4LWJpdCBhcnJheSB0byBiZSBmaWxsZWQgYnkgcHNldWRvcmFuZG9t IG51bWJlcnMuCi0gKiBAcGFyYW0gc2l6ZSBudW1iZXIgb2YgMTI4LWJpdCBwZXN1ZG9yYW5kb20g bnVtYmVycyB0byBiZSBnZW5lcmF0ZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fcmFu ZF9hcnJheShzZm10X3QgKmN0eCwgdzEyOF90ICphcnJheSwgaW50IHNpemUpIHsKLSAgICBpbnQg aSwgajsKLSAgICB2ZWN0b3IgdW5zaWduZWQgaW50IHIsIHIxLCByMjsKLQotICAgIHIxID0gY3R4 LT5zZm10W04gLSAyXS5zOwotICAgIHIyID0gY3R4LT5zZm10W04gLSAxXS5zOwotICAgIGZvciAo aSA9IDA7IGkgPCBOIC0gUE9TMTsgaSsrKSB7Ci0JciA9IHZlY19yZWN1cnNpb24oY3R4LT5zZm10 W2ldLnMsIGN0eC0+c2ZtdFtpICsgUE9TMV0ucywgcjEsIHIyKTsKLQlhcnJheVtpXS5zID0gcjsK LQlyMSA9IHIyOwotCXIyID0gcjsKLSAgICB9Ci0gICAgZm9yICg7IGkgPCBOOyBpKyspIHsKLQly ID0gdmVjX3JlY3Vyc2lvbihjdHgtPnNmbXRbaV0ucywgYXJyYXlbaSArIFBPUzEgLSBOXS5zLCBy MSwgcjIpOwotCWFycmF5W2ldLnMgPSByOwotCXIxID0gcjI7Ci0JcjIgPSByOwotICAgIH0KLSAg ICAvKiBtYWluIGxvb3AgKi8KLSAgICBmb3IgKDsgaSA8IHNpemUgLSBOOyBpKyspIHsKLQlyID0g dmVjX3JlY3Vyc2lvbihhcnJheVtpIC0gTl0ucywgYXJyYXlbaSArIFBPUzEgLSBOXS5zLCByMSwg cjIpOwotCWFycmF5W2ldLnMgPSByOwotCXIxID0gcjI7Ci0JcjIgPSByOwotICAgIH0KLSAgICBm b3IgKGogPSAwOyBqIDwgMiAqIE4gLSBzaXplOyBqKyspIHsKLQljdHgtPnNmbXRbal0ucyA9IGFy cmF5W2ogKyBzaXplIC0gTl0uczsKLSAgICB9Ci0gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHsK LQlyID0gdmVjX3JlY3Vyc2lvbihhcnJheVtpIC0gTl0ucywgYXJyYXlbaSArIFBPUzEgLSBOXS5z LCByMSwgcjIpOwotCWFycmF5W2ldLnMgPSByOwotCWN0eC0+c2ZtdFtqKytdLnMgPSByOwotCXIx ID0gcjI7Ci0JcjIgPSByOwotICAgIH0KLX0KLQotI2lmbmRlZiBPTkxZNjQKLSNpZiBkZWZpbmVk KF9fQVBQTEVfXykKLSNkZWZpbmUgQUxUSV9TV0FQICh2ZWN0b3IgdW5zaWduZWQgY2hhcikgXAot CSg0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMsIDE0LCAxNSwgOCwgOSwgMTAsIDExKQot I2Vsc2UKLSNkZWZpbmUgQUxUSV9TV0FQIHs0LCA1LCA2LCA3LCAwLCAxLCAyLCAzLCAxMiwgMTMs IDE0LCAxNSwgOCwgOSwgMTAsIDExfQotI2VuZGlmCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gc3dh cHMgaGlnaCBhbmQgbG93IDMyLWJpdCBvZiA2NC1iaXQgaW50ZWdlcnMgaW4gdXNlcgotICogc3Bl Y2lmaWVkIGFycmF5LgotICoKLSAqIEBwYXJhbSBhcnJheSBhbiAxMjgtYml0IGFycmF5IHRvIGJl IHN3YXBlZC4KLSAqIEBwYXJhbSBzaXplIHNpemUgb2YgMTI4LWJpdCBhcnJheS4KLSAqLwotc3Rh dGljIGlubGluZSB2b2lkIHN3YXAodzEyOF90ICphcnJheSwgaW50IHNpemUpIHsKLSAgICBpbnQg aTsKLSAgICBjb25zdCB2ZWN0b3IgdW5zaWduZWQgY2hhciBwZXJtID0gQUxUSV9TV0FQOwotCi0g ICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCWFycmF5W2ldLnMgPSB2ZWNfcGVybShh cnJheVtpXS5zLCAodmVjdG9yIHVuc2lnbmVkIGludClwZXJtLCBwZXJtKTsKLSAgICB9Ci19Ci0j ZW5kaWYKLQotI2VuZGlmCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMuaCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1z LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZTY2MjIuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3Qv U0ZNVC1wYXJhbXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogVGhp cyBmaWxlIGRlcml2ZXMgZnJvbSBTRk1UIDEuMy4zCi0gKiAoaHR0cDovL3d3dy5tYXRoLnNjaS5o aXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5odG1sKSwgd2hpY2ggd2FzCi0g KiByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgotICoK LSAqICAgQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vt b3RvIGFuZCBIaXJvc2hpbWEKLSAqICAgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSAqCi0gKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiAgIG1ldDoKLSAqCi0g KiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAgICogUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgICBj b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZwotICogICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot ICogICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBIaXJvc2hpbWEgVW5pdmVyc2l0eSBu b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICAgICAgIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgotICogICAgICAgICBw ZXJtaXNzaW9uLgotICoKLSAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogICAiQVMgSVMiIEFORCBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogICBMSU1J VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IKLSAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiAgIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QKLSAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogICBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU Ci0gKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRQotICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFNGTVRf UEFSQU1TX0gKLSNkZWZpbmUgU0ZNVF9QQVJBTVNfSAotCi0jaWYgIWRlZmluZWQoTUVYUCkKLSNp ZmRlZiBfX0dOVUNfXwotICAjd2FybmluZyAiTUVYUCBpcyBub3QgZGVmaW5lZC4gSSBhc3N1bWUg TUVYUCBpcyAxOTkzNy4iCi0jZW5kaWYKLSAgI2RlZmluZSBNRVhQIDE5OTM3Ci0jZW5kaWYKLS8q LS0tLS0tLS0tLS0tLS0tLS0KLSAgQkFTSUMgREVGSU5JVElPTlMKLSAgLS0tLS0tLS0tLS0tLS0t LS0qLwotLyoqIE1lcnNlbm5lIEV4cG9uZW50LiBUaGUgcGVyaW9kIG9mIHRoZSBzZXF1ZW5jZSAK LSAqICBpcyBhIG11bHRpcGxlIG9mIDJeTUVYUC0xLgotICogI2RlZmluZSBNRVhQIDE5OTM3ICov Ci0vKiogU0ZNVCBnZW5lcmF0b3IgaGFzIGFuIGludGVybmFsIHN0YXRlIGFycmF5IG9mIDEyOC1i aXQgaW50ZWdlcnMsCi0gKiBhbmQgTiBpcyBpdHMgc2l6ZS4gKi8KLSNkZWZpbmUgTiAoTUVYUCAv IDEyOCArIDEpCi0vKiogTjMyIGlzIHRoZSBzaXplIG9mIGludGVybmFsIHN0YXRlIGFycmF5IHdo ZW4gcmVnYXJkZWQgYXMgYW4gYXJyYXkKLSAqIG9mIDMyLWJpdCBpbnRlZ2Vycy4qLwotI2RlZmlu ZSBOMzIgKE4gKiA0KQotLyoqIE42NCBpcyB0aGUgc2l6ZSBvZiBpbnRlcm5hbCBzdGF0ZSBhcnJh eSB3aGVuIHJlZ2FyZGVkIGFzIGFuIGFycmF5Ci0gKiBvZiA2NC1iaXQgaW50ZWdlcnMuKi8KLSNk ZWZpbmUgTjY0IChOICogMikKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIHRoZSBwYXJh bWV0ZXJzIG9mIFNGTVQKLSAgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBpbiBwYXJhbXNYWFhY LmggZmlsZS4KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogdGhlIHBpY2sgdXAgcG9z aXRpb24gb2YgdGhlIGFycmF5LgotI2RlZmluZSBQT1MxIDEyMiAKLSovCi0KLS8qKiB0aGUgcGFy YW1ldGVyIG9mIHNoaWZ0IGxlZnQgYXMgZm91ciAzMi1iaXQgcmVnaXN0ZXJzLgotI2RlZmluZSBT TDEgMTgKLSAqLwotCi0vKiogdGhlIHBhcmFtZXRlciBvZiBzaGlmdCBsZWZ0IGFzIG9uZSAxMjgt Yml0IHJlZ2lzdGVyLiAKLSAqIFRoZSAxMjgtYml0IGludGVnZXIgaXMgc2hpZnRlZCBieSAoU0wy ICogOCkgYml0cy4gCi0jZGVmaW5lIFNMMiAxIAotKi8KLQotLyoqIHRoZSBwYXJhbWV0ZXIgb2Yg c2hpZnQgcmlnaHQgYXMgZm91ciAzMi1iaXQgcmVnaXN0ZXJzLgotI2RlZmluZSBTUjEgMTEKLSov Ci0KLS8qKiB0aGUgcGFyYW1ldGVyIG9mIHNoaWZ0IHJpZ2h0IGFzIG9uZSAxMjgtYml0IHJlZ2lz dGVyLiAKLSAqIFRoZSAxMjgtYml0IGludGVnZXIgaXMgc2hpZnRlZCBieSAoU0wyICogOCkgYml0 cy4gCi0jZGVmaW5lIFNSMiAxIAotKi8KLQotLyoqIEEgYml0bWFzaywgdXNlZCBpbiB0aGUgcmVj dXJzaW9uLiAgVGhlc2UgcGFyYW1ldGVycyBhcmUgaW50cm9kdWNlZAotICogdG8gYnJlYWsgc3lt bWV0cnkgb2YgU0lNRC4KLSNkZWZpbmUgTVNLMSAweGRmZmZmZmVmVQotI2RlZmluZSBNU0syIDB4 ZGRmZWNiN2ZVCi0jZGVmaW5lIE1TSzMgMHhiZmZhZmZmZlUKLSNkZWZpbmUgTVNLNCAweGJmZmZm ZmY2VSAKLSovCi0KLS8qKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgcGFydCBvZiBhIDEyOC1iaXQg cGVyaW9kIGNlcnRpZmljYXRpb24gdmVjdG9yLgotI2RlZmluZSBQQVJJVFkxCTB4MDAwMDAwMDFV Ci0jZGVmaW5lIFBBUklUWTIJMHgwMDAwMDAwMFUKLSNkZWZpbmUgUEFSSVRZMwkweDAwMDAwMDAw VQotI2RlZmluZSBQQVJJVFk0CTB4Yzk4ZTEyNmFVCi0qLwotCi0jaWYgTUVYUCA9PSA2MDcKLSAg I2luY2x1ZGUgInRlc3QvU0ZNVC1wYXJhbXM2MDcuaCIKLSNlbGlmIE1FWFAgPT0gMTI3OQotICAj aW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczEyNzkuaCIKLSNlbGlmIE1FWFAgPT0gMjI4MQotICAj aW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczIyODEuaCIKLSNlbGlmIE1FWFAgPT0gNDI1MwotICAj aW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczQyNTMuaCIKLSNlbGlmIE1FWFAgPT0gMTEyMTMKLSAg I2luY2x1ZGUgInRlc3QvU0ZNVC1wYXJhbXMxMTIxMy5oIgotI2VsaWYgTUVYUCA9PSAxOTkzNwot ICAjaW5jbHVkZSAidGVzdC9TRk1ULXBhcmFtczE5OTM3LmgiCi0jZWxpZiBNRVhQID09IDQ0NDk3 Ci0gICNpbmNsdWRlICJ0ZXN0L1NGTVQtcGFyYW1zNDQ0OTcuaCIKLSNlbGlmIE1FWFAgPT0gODYy NDMKLSAgI2luY2x1ZGUgInRlc3QvU0ZNVC1wYXJhbXM4NjI0My5oIgotI2VsaWYgTUVYUCA9PSAx MzIwNDkKLSAgI2luY2x1ZGUgInRlc3QvU0ZNVC1wYXJhbXMxMzIwNDkuaCIKLSNlbGlmIE1FWFAg PT0gMjE2MDkxCi0gICNpbmNsdWRlICJ0ZXN0L1NGTVQtcGFyYW1zMjE2MDkxLmgiCi0jZWxzZQot I2lmZGVmIF9fR05VQ19fCi0gICNlcnJvciAiTUVYUCBpcyBub3QgdmFsaWQuIgotICAjdW5kZWYg TUVYUAotI2Vsc2UKLSAgI3VuZGVmIE1FWFAKLSNlbmRpZgotCi0jZW5kaWYKLQotI2VuZGlmIC8q IFNGTVRfUEFSQU1TX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczExMjEzLmggYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1U LXBhcmFtczExMjEzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OTRiZDIuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMxMTIxMy5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAs MCBAQAotLyoKLSAqIFRoaXMgZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMuMwotICogKGh0dHA6 Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvaW5kZXguaHRt bCksIHdoaWNoIHdhcwotICogcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBmb2xsb3dp bmcgbGljZW5zZToKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IE11dHN1byBTYWl0 bywgTWFrb3RvIE1hdHN1bW90byBhbmQgSGlyb3NoaW1hCi0gKiAgIFVuaXZlcnNpdHkuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICAgbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot ICogICBtZXQ6Ci0gKgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUKLSAqICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgICAgIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSGlyb3No aW1hIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZgotICogICAgICAgICBpdHMgY29udHJpYnV0 b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgICAg ICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4KLSAqICAgICAgICAgcGVybWlzc2lvbi4KLSAqCi0gKiAgIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICAgIkFT IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QKLSAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiAgIE9XTkVSIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogICBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK LSAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVAotICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICAgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq LwotI2lmbmRlZiBTRk1UX1BBUkFNUzExMjEzX0gKLSNkZWZpbmUgU0ZNVF9QQVJBTVMxMTIxM19I Ci0KLSNkZWZpbmUgUE9TMQk2OAotI2RlZmluZSBTTDEJMTQKLSNkZWZpbmUgU0wyCTMKLSNkZWZp bmUgU1IxCTcKLSNkZWZpbmUgU1IyCTMKLSNkZWZpbmUgTVNLMQkweGVmZmZmN2ZiVQotI2RlZmlu ZSBNU0syCTB4ZmZmZmZmZWZVCi0jZGVmaW5lIE1TSzMJMHhkZmRmYmZmZlUKLSNkZWZpbmUgTVNL NAkweDdmZmZkYmZkVQotI2RlZmluZSBQQVJJVFkxCTB4MDAwMDAwMDFVCi0jZGVmaW5lIFBBUklU WTIJMHgwMDAwMDAwMFUKLSNkZWZpbmUgUEFSSVRZMwkweGU4MTQ4MDAwVQotI2RlZmluZSBQQVJJ VFk0CTB4ZDBjN2FmYTNVCi0KLQotLyogUEFSQU1FVEVSUyBGT1IgQUxUSVZFQyAqLwotI2lmIGRl ZmluZWQoX19BUFBMRV9fKQkvKiBGb3IgT1NYICovCi0gICAgI2RlZmluZSBBTFRJX1NMMQkodmVj dG9yIHVuc2lnbmVkIGludCkoU0wxLCBTTDEsIFNMMSwgU0wxKQotICAgICNkZWZpbmUgQUxUSV9T UjEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNSMSwgU1IxLCBTUjEsIFNSMSkKLSAgICAjZGVmaW5l IEFMVElfTVNLCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0sxLCBNU0syLCBNU0szLCBNU0s0KQot ICAgICNkZWZpbmUgQUxUSV9NU0s2NCBcCi0JKHZlY3RvciB1bnNpZ25lZCBpbnQpKE1TSzIsIE1T SzEsIE1TSzQsIE1TSzMpCi0gICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNIFwKLQkodmVjdG9yIHVu c2lnbmVkIGNoYXIpKDMsMjEsMjEsMjEsNywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTApCi0gICAg I2RlZmluZSBBTFRJX1NMMl9QRVJNNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMyw0LDUs Niw3LDI5LDI5LDI5LDExLDEyLDEzLDE0LDE1LDAsMSwyKQotICAgICNkZWZpbmUgQUxUSV9TUjJf UEVSTSBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg1LDYsNywwLDksMTAsMTEsNCwxMywxNCwx NSw4LDE5LDE5LDE5LDEyKQotICAgICNkZWZpbmUgQUxUSV9TUjJfUEVSTTY0IFwKLQkodmVjdG9y IHVuc2lnbmVkIGNoYXIpKDEzLDE0LDE1LDAsMSwyLDMsNCwxOSwxOSwxOSw4LDksMTAsMTEsMTIp Ci0jZWxzZQkvKiBGb3IgT1RIRVIgT1NzKExpbnV4PykgKi8KLSAgICAjZGVmaW5lIEFMVElfU0wx CXtTTDEsIFNMMSwgU0wxLCBTTDF9Ci0gICAgI2RlZmluZSBBTFRJX1NSMQl7U1IxLCBTUjEsIFNS MSwgU1IxfQotICAgICNkZWZpbmUgQUxUSV9NU0sJe01TSzEsIE1TSzIsIE1TSzMsIE1TSzR9Ci0g ICAgI2RlZmluZSBBTFRJX01TSzY0CXtNU0syLCBNU0sxLCBNU0s0LCBNU0szfQotICAgICNkZWZp bmUgQUxUSV9TTDJfUEVSTQl7MywyMSwyMSwyMSw3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMH0K LSAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk02NAl7Myw0LDUsNiw3LDI5LDI5LDI5LDExLDEyLDEz LDE0LDE1LDAsMSwyfQotICAgICNkZWZpbmUgQUxUSV9TUjJfUEVSTQl7NSw2LDcsMCw5LDEwLDEx LDQsMTMsMTQsMTUsOCwxOSwxOSwxOSwxMn0KLSAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk02NAl7 MTMsMTQsMTUsMCwxLDIsMyw0LDE5LDE5LDE5LDgsOSwxMCwxMSwxMn0KLSNlbmRpZgkvKiBGb3Ig T1NYICovCi0jZGVmaW5lIElEU1RSCSJTRk1ULTExMjEzOjY4LTE0LTMtNy0zOmVmZmZmN2ZiLWZm ZmZmZmVmLWRmZGZiZmZmLTdmZmZkYmZkIgotCi0jZW5kaWYgLyogU0ZNVF9QQVJBTVMxMTIxM19I ICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMxMjc5LmggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczEyNzkuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc5NTlmOS4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1U LXBhcmFtczEyNzkuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBUaGlz IGZpbGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4zLjMKLSAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhp cm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9TRk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKLSAq IHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0gKgot ICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1v dG8gYW5kIEhpcm9zaGltYQotICogICBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgot ICoKLSAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0gKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqICAgbWV0OgotICoKLSAq ICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSAqICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICAgICAgIGNv cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n Ci0gKiAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZAotICogICAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g KiAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5v ciB0aGUgbmFtZXMgb2YKLSAqICAgICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi0gKiAgICAgICAgIHBl cm1pc3Npb24uCi0gKgotICogICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlU RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUgotICogICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqICAgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VAotICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiAgIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK LSAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgU0ZNVF9Q QVJBTVMxMjc5X0gKLSNkZWZpbmUgU0ZNVF9QQVJBTVMxMjc5X0gKLQotI2RlZmluZSBQT1MxCTcK LSNkZWZpbmUgU0wxCTE0Ci0jZGVmaW5lIFNMMgkzCi0jZGVmaW5lIFNSMQk1Ci0jZGVmaW5lIFNS MgkxCi0jZGVmaW5lIE1TSzEJMHhmN2ZlZmZmZFUKLSNkZWZpbmUgTVNLMgkweDdmZWZjZmZmVQot I2RlZmluZSBNU0szCTB4YWZmM2VmM2ZVCi0jZGVmaW5lIE1TSzQJMHhiNWZmZmY3ZlUKLSNkZWZp bmUgUEFSSVRZMQkweDAwMDAwMDAxVQotI2RlZmluZSBQQVJJVFkyCTB4MDAwMDAwMDBVCi0jZGVm aW5lIFBBUklUWTMJMHgwMDAwMDAwMFUKLSNkZWZpbmUgUEFSSVRZNAkweDIwMDAwMDAwVQotCi0K LS8qIFBBUkFNRVRFUlMgRk9SIEFMVElWRUMgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykJLyog Rm9yIE9TWCAqLwotICAgICNkZWZpbmUgQUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNM MSwgU0wxLCBTTDEsIFNMMSkKLSAgICAjZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5zaWduZWQg aW50KShTUjEsIFNSMSwgU1IxLCBTUjEpCi0gICAgI2RlZmluZSBBTFRJX01TSwkodmVjdG9yIHVu c2lnbmVkIGludCkoTVNLMSwgTVNLMiwgTVNLMywgTVNLNCkKLSAgICAjZGVmaW5lIEFMVElfTVNL NjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0szKQotICAg ICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgzLDIxLDIx LDIxLDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwKQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVS TTY0IFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDMsNCw1LDYsNywyOSwyOSwyOSwxMSwxMiwx MywxNCwxNSwwLDEsMikKLSAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0gXAotCSh2ZWN0b3IgdW5z aWduZWQgY2hhcikoNywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMsMTQpCi0gICAg I2RlZmluZSBBTFRJX1NSMl9QRVJNNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTUsMCwx LDIsMyw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTQpCi0jZWxzZQkvKiBGb3IgT1RIRVIgT1Nz KExpbnV4PykgKi8KLSAgICAjZGVmaW5lIEFMVElfU0wxCXtTTDEsIFNMMSwgU0wxLCBTTDF9Ci0g ICAgI2RlZmluZSBBTFRJX1NSMQl7U1IxLCBTUjEsIFNSMSwgU1IxfQotICAgICNkZWZpbmUgQUxU SV9NU0sJe01TSzEsIE1TSzIsIE1TSzMsIE1TSzR9Ci0gICAgI2RlZmluZSBBTFRJX01TSzY0CXtN U0syLCBNU0sxLCBNU0s0LCBNU0szfQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTQl7MywyMSwy MSwyMSw3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMH0KLSAgICAjZGVmaW5lIEFMVElfU0wyX1BF Uk02NAl7Myw0LDUsNiw3LDI5LDI5LDI5LDExLDEyLDEzLDE0LDE1LDAsMSwyfQotICAgICNkZWZp bmUgQUxUSV9TUjJfUEVSTQl7NywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMsMTR9 Ci0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQJezE1LDAsMSwyLDMsNCw1LDYsMTcsOCw5LDEw LDExLDEyLDEzLDE0fQotI2VuZGlmCS8qIEZvciBPU1ggKi8KLSNkZWZpbmUgSURTVFIJIlNGTVQt MTI3OTo3LTE0LTMtNS0xOmY3ZmVmZmZkLTdmZWZjZmZmLWFmZjNlZjNmLWI1ZmZmZjdmIgotCi0j ZW5kaWYgLyogU0ZNVF9QQVJBTVMxMjc5X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczEz MjA0OS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNs dWRlL3Rlc3QvU0ZNVC1wYXJhbXMxMzIwNDkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggYTFkY2VjMy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczEzMjA0OS5oCisrKyAvZGV2L251 bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAx LjMuMwotICogKGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01U L1NGTVQvaW5kZXguaHRtbCksIHdoaWNoIHdhcwotICogcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgMjAwNiwy MDA3IE11dHN1byBTYWl0bywgTWFrb3RvIE1hdHN1bW90byBhbmQgSGlyb3NoaW1hCi0gKiAgIFVu aXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogICBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICAg bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zIGFyZQotICogICBtZXQ6Ci0gKgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCi0gKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgICAgZGlzY2xhaW1lciBp biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAg ICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAgICogTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgSGlyb3NoaW1hIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZgotICogICAgICAg ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cwotICogICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp ZmljIHByaW9yIHdyaXR0ZW4KLSAqICAgICAgICAgcGVybWlzc2lvbi4KLSAqCi0gKiAgIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC VVRPUlMKLSAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiAgIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU Ci0gKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAotICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog ICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkKLSAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogICAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICAg T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBTRk1UX1BBUkFNUzEzMjA0OV9ICi0jZGVmaW5lIFNG TVRfUEFSQU1TMTMyMDQ5X0gKLQotI2RlZmluZSBQT1MxCTExMAotI2RlZmluZSBTTDEJMTkKLSNk ZWZpbmUgU0wyCTEKLSNkZWZpbmUgU1IxCTIxCi0jZGVmaW5lIFNSMgkxCi0jZGVmaW5lIE1TSzEJ MHhmZmZmYmI1ZlUKLSNkZWZpbmUgTVNLMgkweGZiNmViZjk1VQotI2RlZmluZSBNU0szCTB4ZmZm ZWZmZmFVCi0jZGVmaW5lIE1TSzQJMHhjZmY3N2ZmZlUKLSNkZWZpbmUgUEFSSVRZMQkweDAwMDAw MDAxVQotI2RlZmluZSBQQVJJVFkyCTB4MDAwMDAwMDBVCi0jZGVmaW5lIFBBUklUWTMJMHhjYjUy MDAwMFUKLSNkZWZpbmUgUEFSSVRZNAkweGM3ZTkxYzdkVQotCi0KLS8qIFBBUkFNRVRFUlMgRk9S IEFMVElWRUMgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykJLyogRm9yIE9TWCAqLwotICAgICNk ZWZpbmUgQUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBpbnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkK LSAgICAjZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTUjEsIFNSMSwgU1Ix LCBTUjEpCi0gICAgI2RlZmluZSBBTFRJX01TSwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMSwg TVNLMiwgTVNLMywgTVNLNCkKLSAgICAjZGVmaW5lIEFMVElfTVNLNjQgXAotCSh2ZWN0b3IgdW5z aWduZWQgaW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0szKQotICAgICNkZWZpbmUgQUxUSV9TTDJf UEVSTSBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxLDIsMywyMyw1LDYsNywwLDksMTAsMTEs NCwxMywxNCwxNSw4KQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0IFwKLQkodmVjdG9yIHVu c2lnbmVkIGNoYXIpKDEsMiwzLDQsNSw2LDcsMzEsOSwxMCwxMSwxMiwxMywxNCwxNSwwKQotICAg ICNkZWZpbmUgQUxUSV9TUjJfUEVSTSBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg3LDAsMSwy LDExLDQsNSw2LDE1LDgsOSwxMCwxNywxMiwxMywxNCkKLSAgICAjZGVmaW5lIEFMVElfU1IyX1BF Uk02NCBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwx MCwxMSwxMiwxMywxNCkKLSNlbHNlCS8qIEZvciBPVEhFUiBPU3MoTGludXg/KSAqLwotICAgICNk ZWZpbmUgQUxUSV9TTDEJe1NMMSwgU0wxLCBTTDEsIFNMMX0KLSAgICAjZGVmaW5lIEFMVElfU1Ix CXtTUjEsIFNSMSwgU1IxLCBTUjF9Ci0gICAgI2RlZmluZSBBTFRJX01TSwl7TVNLMSwgTVNLMiwg TVNLMywgTVNLNH0KLSAgICAjZGVmaW5lIEFMVElfTVNLNjQJe01TSzIsIE1TSzEsIE1TSzQsIE1T SzN9Ci0gICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNCXsxLDIsMywyMyw1LDYsNywwLDksMTAsMTEs NCwxMywxNCwxNSw4fQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0CXsxLDIsMyw0LDUsNiw3 LDMxLDksMTAsMTEsMTIsMTMsMTQsMTUsMH0KLSAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0Jezcs MCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwLDE3LDEyLDEzLDE0fQotICAgICNkZWZpbmUgQUxUSV9T UjJfUEVSTTY0CXsxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwxMCwxMSwxMiwxMywxNH0KLSNlbmRp ZgkvKiBGb3IgT1NYICovCi0jZGVmaW5lIElEU1RSCSJTRk1ULTEzMjA0OToxMTAtMTktMS0yMS0x OmZmZmZiYjVmLWZiNmViZjk1LWZmZmVmZmZhLWNmZjc3ZmZmIgotCi0jZW5kaWYgLyogU0ZNVF9Q QVJBTVMxMzIwNDlfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zMTk5MzcuaCBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQt cGFyYW1zMTk5MzcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5MmI0Yy4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2lu Y2x1ZGUvdGVzdC9TRk1ULXBhcmFtczE5OTM3LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCww IEBACi0vKgotICogVGhpcyBmaWxlIGRlcml2ZXMgZnJvbSBTRk1UIDEuMy4zCi0gKiAoaHR0cDov L3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5odG1s KSwgd2hpY2ggd2FzCi0gKiByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGZvbGxvd2lu ZyBsaWNlbnNlOgotICoKLSAqICAgQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgTXV0c3VvIFNhaXRv LCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAqICAgVW5pdmVyc2l0eS4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogICBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g KiAgIG1ldDoKLSAqCi0gKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAg ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZQotICogICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZwotICogICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgICAgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgotICogICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBIaXJvc2hp bWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgICAgIGl0cyBjb250cmlidXRv cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICAgICAg IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl bgotICogICAgICAgICBwZXJtaXNzaW9uLgotICoKLSAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogICAiQVMg SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVAotICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqICAgT1dORVIgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0gKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QKLSAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiAgIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot ICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUCi0gKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogICBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov Ci0jaWZuZGVmIFNGTVRfUEFSQU1TMTk5MzdfSAotI2RlZmluZSBTRk1UX1BBUkFNUzE5OTM3X0gK LQotI2RlZmluZSBQT1MxCTEyMgotI2RlZmluZSBTTDEJMTgKLSNkZWZpbmUgU0wyCTEKLSNkZWZp bmUgU1IxCTExCi0jZGVmaW5lIFNSMgkxCi0jZGVmaW5lIE1TSzEJMHhkZmZmZmZlZlUKLSNkZWZp bmUgTVNLMgkweGRkZmVjYjdmVQotI2RlZmluZSBNU0szCTB4YmZmYWZmZmZVCi0jZGVmaW5lIE1T SzQJMHhiZmZmZmZmNlUKLSNkZWZpbmUgUEFSSVRZMQkweDAwMDAwMDAxVQotI2RlZmluZSBQQVJJ VFkyCTB4MDAwMDAwMDBVCi0jZGVmaW5lIFBBUklUWTMJMHgwMDAwMDAwMFUKLSNkZWZpbmUgUEFS SVRZNAkweDEzYzllNjg0VQotCi0KLS8qIFBBUkFNRVRFUlMgRk9SIEFMVElWRUMgKi8KLSNpZiBk ZWZpbmVkKF9fQVBQTEVfXykJLyogRm9yIE9TWCAqLwotICAgICNkZWZpbmUgQUxUSV9TTDEJKHZl Y3RvciB1bnNpZ25lZCBpbnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkKLSAgICAjZGVmaW5lIEFMVElf U1IxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEpCi0gICAgI2RlZmlu ZSBBTFRJX01TSwkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwgTVNLMywgTVNLNCkK LSAgICAjZGVmaW5lIEFMVElfTVNLNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0syLCBN U0sxLCBNU0s0LCBNU0szKQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBcCi0JKHZlY3RvciB1 bnNpZ25lZCBjaGFyKSgxLDIsMywyMyw1LDYsNywwLDksMTAsMTEsNCwxMywxNCwxNSw4KQotICAg ICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0IFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDEsMiwz LDQsNSw2LDcsMzEsOSwxMCwxMSwxMiwxMywxNCwxNSwwKQotICAgICNkZWZpbmUgQUxUSV9TUjJf UEVSTSBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwx MCwxNywxMiwxMywxNCkKLSAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk02NCBcCi0JKHZlY3RvciB1 bnNpZ25lZCBjaGFyKSgxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwxMCwxMSwxMiwxMywxNCkKLSNl bHNlCS8qIEZvciBPVEhFUiBPU3MoTGludXg/KSAqLwotICAgICNkZWZpbmUgQUxUSV9TTDEJe1NM MSwgU0wxLCBTTDEsIFNMMX0KLSAgICAjZGVmaW5lIEFMVElfU1IxCXtTUjEsIFNSMSwgU1IxLCBT UjF9Ci0gICAgI2RlZmluZSBBTFRJX01TSwl7TVNLMSwgTVNLMiwgTVNLMywgTVNLNH0KLSAgICAj ZGVmaW5lIEFMVElfTVNLNjQJe01TSzIsIE1TSzEsIE1TSzQsIE1TSzN9Ci0gICAgI2RlZmluZSBB TFRJX1NMMl9QRVJNCXsxLDIsMywyMyw1LDYsNywwLDksMTAsMTEsNCwxMywxNCwxNSw4fQotICAg ICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0CXsxLDIsMyw0LDUsNiw3LDMxLDksMTAsMTEsMTIsMTMs MTQsMTUsMH0KLSAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0JezcsMCwxLDIsMTEsNCw1LDYsMTUs OCw5LDEwLDE3LDEyLDEzLDE0fQotICAgICNkZWZpbmUgQUxUSV9TUjJfUEVSTTY0CXsxNSwwLDEs MiwzLDQsNSw2LDE3LDgsOSwxMCwxMSwxMiwxMywxNH0KLSNlbmRpZgkvKiBGb3IgT1NYICovCi0j ZGVmaW5lIElEU1RSCSJTRk1ULTE5OTM3OjEyMi0xOC0xLTExLTE6ZGZmZmZmZWYtZGRmZWNiN2Yt YmZmYWZmZmYtYmZmZmZmZjYiCi0KLSNlbmRpZiAvKiBTRk1UX1BBUkFNUzE5OTM3X0ggKi8KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2lu Y2x1ZGUvdGVzdC9TRk1ULXBhcmFtczIxNjA5MS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1wYXJhbXMyMTYwOTEuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI1Y2UyOC4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBh cmFtczIxNjA5MS5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIFRoaXMg ZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMuMwotICogKGh0dHA6Ly93d3cubWF0aC5zY2kuaGly b3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvaW5kZXguaHRtbCksIHdoaWNoIHdhcwotICog cmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKLSAqCi0g KiAgIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IE11dHN1byBTYWl0bywgTWFrb3RvIE1hdHN1bW90 byBhbmQgSGlyb3NoaW1hCi0gKiAgIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g KgotICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKLSAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogICBtZXQ6Ci0gKgotICog ICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotICogICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgICAqIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgICAgY29w eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK LSAqICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq ICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSGlyb3NoaW1hIFVuaXZlcnNpdHkgbm9y IHRoZSBuYW1lcyBvZgotICogICAgICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgICAgICBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLSAqICAgICAgICAgcGVy bWlzc2lvbi4KLSAqCi0gKiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqICAgTElNSVRF RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SCi0gKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiAgIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogICBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U Ci0gKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLAotICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqICAgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot ICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UKLSAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBTRk1UX1BB UkFNUzIxNjA5MV9ICi0jZGVmaW5lIFNGTVRfUEFSQU1TMjE2MDkxX0gKLQotI2RlZmluZSBQT1Mx CTYyNwotI2RlZmluZSBTTDEJMTEKLSNkZWZpbmUgU0wyCTMKLSNkZWZpbmUgU1IxCTEwCi0jZGVm aW5lIFNSMgkxCi0jZGVmaW5lIE1TSzEJMHhiZmY3YmZmN1UKLSNkZWZpbmUgTVNLMgkweGJmZmZm ZmZmVQotI2RlZmluZSBNU0szCTB4YmZmZmZhN2ZVCi0jZGVmaW5lIE1TSzQJMHhmZmRkZmJmYlUK LSNkZWZpbmUgUEFSSVRZMQkweGY4MDAwMDAxVQotI2RlZmluZSBQQVJJVFkyCTB4ODllODA3MDlV Ci0jZGVmaW5lIFBBUklUWTMJMHgzYmQyYjY0YlUKLSNkZWZpbmUgUEFSSVRZNAkweDBjNjRiMWU0 VQotCi0KLS8qIFBBUkFNRVRFUlMgRk9SIEFMVElWRUMgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVf XykJLyogRm9yIE9TWCAqLwotICAgICNkZWZpbmUgQUxUSV9TTDEJKHZlY3RvciB1bnNpZ25lZCBp bnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkKLSAgICAjZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3IgdW5z aWduZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEpCi0gICAgI2RlZmluZSBBTFRJX01TSwkodmVj dG9yIHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwgTVNLMywgTVNLNCkKLSAgICAjZGVmaW5lIEFM VElfTVNLNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0syLCBNU0sxLCBNU0s0LCBNU0sz KQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgz LDIxLDIxLDIxLDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwKQotICAgICNkZWZpbmUgQUxUSV9T TDJfUEVSTTY0IFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDMsNCw1LDYsNywyOSwyOSwyOSwx MSwxMiwxMywxNCwxNSwwLDEsMikKLSAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk0gXAotCSh2ZWN0 b3IgdW5zaWduZWQgY2hhcikoNywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMsMTQp Ci0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhciko MTUsMCwxLDIsMyw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTQpCi0jZWxzZQkvKiBGb3IgT1RI RVIgT1NzKExpbnV4PykgKi8KLSAgICAjZGVmaW5lIEFMVElfU0wxCXtTTDEsIFNMMSwgU0wxLCBT TDF9Ci0gICAgI2RlZmluZSBBTFRJX1NSMQl7U1IxLCBTUjEsIFNSMSwgU1IxfQotICAgICNkZWZp bmUgQUxUSV9NU0sJe01TSzEsIE1TSzIsIE1TSzMsIE1TSzR9Ci0gICAgI2RlZmluZSBBTFRJX01T SzY0CXtNU0syLCBNU0sxLCBNU0s0LCBNU0szfQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTQl7 MywyMSwyMSwyMSw3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMH0KLSAgICAjZGVmaW5lIEFMVElf U0wyX1BFUk02NAl7Myw0LDUsNiw3LDI5LDI5LDI5LDExLDEyLDEzLDE0LDE1LDAsMSwyfQotICAg ICNkZWZpbmUgQUxUSV9TUjJfUEVSTQl7NywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIs MTMsMTR9Ci0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQJezE1LDAsMSwyLDMsNCw1LDYsMTcs OCw5LDEwLDExLDEyLDEzLDE0fQotI2VuZGlmCS8qIEZvciBPU1ggKi8KLSNkZWZpbmUgSURTVFIJ IlNGTVQtMjE2MDkxOjYyNy0xMS0zLTEwLTE6YmZmN2JmZjctYmZmZmZmZmYtYmZmZmZhN2YtZmZk ZGZiZmIiCi0KLSNlbmRpZiAvKiBTRk1UX1BBUkFNUzIxNjA5MV9IICovCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3Qv U0ZNVC1wYXJhbXMyMjgxLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczIyODEuaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMGVmODVjNC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczIyODEuaAorKysg L2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgZGVyaXZlcyBmcm9t IFNGTVQgMS4zLjMKLSAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35t LW1hdC9NVC9TRk1UL2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKLSAqIHJlbGVhc2VkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0gKgotICogICBDb3B5cmlnaHQgKGMp IDIwMDYsMjAwNyBNdXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQot ICogICBVbml2ZXJzaXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICAgUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0gKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqICAgbWV0OgotICoKLSAqICAgICAgICogUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq ICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgIGRpc2Ns YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZAotICogICAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgICAqIE5laXRoZXIg dGhlIG5hbWUgb2YgdGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YKLSAq ICAgICAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMKLSAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi0gKiAgICAgICAgIHBlcm1pc3Npb24uCi0gKgotICog ICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg Q09OVFJJQlVUT1JTCi0gKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogICBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP UFlSSUdIVAotICogICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogICBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT RSwKLSAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF Ci0gKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgU0ZNVF9QQVJBTVMyMjgxX0gKLSNkZWZp bmUgU0ZNVF9QQVJBTVMyMjgxX0gKLQotI2RlZmluZSBQT1MxCTEyCi0jZGVmaW5lIFNMMQkxOQot I2RlZmluZSBTTDIJMQotI2RlZmluZSBTUjEJNQotI2RlZmluZSBTUjIJMQotI2RlZmluZSBNU0sx CTB4YmZmN2ZmYmZVCi0jZGVmaW5lIE1TSzIJMHhmZGZmZmZmZVUKLSNkZWZpbmUgTVNLMwkweGY3 ZmZlZjdmVQotI2RlZmluZSBNU0s0CTB4ZjJmN2NiYmZVCi0jZGVmaW5lIFBBUklUWTEJMHgwMDAw MDAwMVUKLSNkZWZpbmUgUEFSSVRZMgkweDAwMDAwMDAwVQotI2RlZmluZSBQQVJJVFkzCTB4MDAw MDAwMDBVCi0jZGVmaW5lIFBBUklUWTQJMHg0MWRmYTYwMFUKLQotCi0vKiBQQVJBTUVURVJTIEZP UiBBTFRJVkVDICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCS8qIEZvciBPU1ggKi8KLSAgICAj ZGVmaW5lIEFMVElfU0wxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTTDEsIFNMMSwgU0wxLCBTTDEp Ci0gICAgI2RlZmluZSBBTFRJX1NSMQkodmVjdG9yIHVuc2lnbmVkIGludCkoU1IxLCBTUjEsIFNS MSwgU1IxKQotICAgICNkZWZpbmUgQUxUSV9NU0sJKHZlY3RvciB1bnNpZ25lZCBpbnQpKE1TSzEs IE1TSzIsIE1TSzMsIE1TSzQpCi0gICAgI2RlZmluZSBBTFRJX01TSzY0IFwKLQkodmVjdG9yIHVu c2lnbmVkIGludCkoTVNLMiwgTVNLMSwgTVNLNCwgTVNLMykKLSAgICAjZGVmaW5lIEFMVElfU0wy X1BFUk0gXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMSwyLDMsMjMsNSw2LDcsMCw5LDEwLDEx LDQsMTMsMTQsMTUsOCkKLSAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk02NCBcCi0JKHZlY3RvciB1 bnNpZ25lZCBjaGFyKSgxLDIsMyw0LDUsNiw3LDMxLDksMTAsMTEsMTIsMTMsMTQsMTUsMCkKLSAg ICAjZGVmaW5lIEFMVElfU1IyX1BFUk0gXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoNywwLDEs MiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMsMTQpCi0gICAgI2RlZmluZSBBTFRJX1NSMl9Q RVJNNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTUsMCwxLDIsMyw0LDUsNiwxNyw4LDks MTAsMTEsMTIsMTMsMTQpCi0jZWxzZQkvKiBGb3IgT1RIRVIgT1NzKExpbnV4PykgKi8KLSAgICAj ZGVmaW5lIEFMVElfU0wxCXtTTDEsIFNMMSwgU0wxLCBTTDF9Ci0gICAgI2RlZmluZSBBTFRJX1NS MQl7U1IxLCBTUjEsIFNSMSwgU1IxfQotICAgICNkZWZpbmUgQUxUSV9NU0sJe01TSzEsIE1TSzIs IE1TSzMsIE1TSzR9Ci0gICAgI2RlZmluZSBBTFRJX01TSzY0CXtNU0syLCBNU0sxLCBNU0s0LCBN U0szfQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTQl7MSwyLDMsMjMsNSw2LDcsMCw5LDEwLDEx LDQsMTMsMTQsMTUsOH0KLSAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk02NAl7MSwyLDMsNCw1LDYs NywzMSw5LDEwLDExLDEyLDEzLDE0LDE1LDB9Ci0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNCXs3 LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMCwxNywxMiwxMywxNH0KLSAgICAjZGVmaW5lIEFMVElf U1IyX1BFUk02NAl7MTUsMCwxLDIsMyw0LDUsNiwxNyw4LDksMTAsMTEsMTIsMTMsMTR9Ci0jZW5k aWYJLyogRm9yIE9TWCAqLwotI2RlZmluZSBJRFNUUgkiU0ZNVC0yMjgxOjEyLTE5LTEtNS0xOmJm ZjdmZmJmLWZkZmZmZmZlLWY3ZmZlZjdmLWYyZjdjYmJmIgotCi0jZW5kaWYgLyogU0ZNVF9QQVJB TVMyMjgxX0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczQyNTMuaCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1z NDI1My5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjA3YmM2Li4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90 ZXN0L1NGTVQtcGFyYW1zNDI1My5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoK LSAqIFRoaXMgZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMuMwotICogKGh0dHA6Ly93d3cubWF0 aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvaW5kZXguaHRtbCksIHdoaWNo IHdhcwotICogcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5z ZToKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IE11dHN1byBTYWl0bywgTWFrb3Rv IE1hdHN1bW90byBhbmQgSGlyb3NoaW1hCi0gKiAgIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogICBtZXQ6 Ci0gKgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgICAqIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAg ICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcKLSAqICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KLSAqICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSGlyb3NoaW1hIFVuaXZl cnNpdHkgbm9yIHRoZSBuYW1lcyBvZgotICogICAgICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgICAgICBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLSAqICAg ICAgICAgcGVybWlzc2lvbi4KLSAqCi0gKiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICAgIkFTIElTIiBBTkQg QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq ICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SCi0gKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiAgIE9XTkVSIE9SIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog ICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqICAgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVAotICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRl ZiBTRk1UX1BBUkFNUzQyNTNfSAotI2RlZmluZSBTRk1UX1BBUkFNUzQyNTNfSAotCi0jZGVmaW5l IFBPUzEJMTcKLSNkZWZpbmUgU0wxCTIwCi0jZGVmaW5lIFNMMgkxCi0jZGVmaW5lIFNSMQk3Ci0j ZGVmaW5lIFNSMgkxCi0jZGVmaW5lIE1TSzEJMHg5ZjdiZmZmZlUKLSNkZWZpbmUgTVNLMgkweDlm ZmZmZjVmVQotI2RlZmluZSBNU0szCTB4M2VmZmZmZmJVCi0jZGVmaW5lIE1TSzQJMHhmZmZmZjdi YlUKLSNkZWZpbmUgUEFSSVRZMQkweGE4MDAwMDAxVQotI2RlZmluZSBQQVJJVFkyCTB4YWY1Mzkw YTNVCi0jZGVmaW5lIFBBUklUWTMJMHhiNzQwYjNmOFUKLSNkZWZpbmUgUEFSSVRZNAkweDZjMTE0 ODZkVQotCi0KLS8qIFBBUkFNRVRFUlMgRk9SIEFMVElWRUMgKi8KLSNpZiBkZWZpbmVkKF9fQVBQ TEVfXykJLyogRm9yIE9TWCAqLwotICAgICNkZWZpbmUgQUxUSV9TTDEJKHZlY3RvciB1bnNpZ25l ZCBpbnQpKFNMMSwgU0wxLCBTTDEsIFNMMSkKLSAgICAjZGVmaW5lIEFMVElfU1IxCSh2ZWN0b3Ig dW5zaWduZWQgaW50KShTUjEsIFNSMSwgU1IxLCBTUjEpCi0gICAgI2RlZmluZSBBTFRJX01TSwko dmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMSwgTVNLMiwgTVNLMywgTVNLNCkKLSAgICAjZGVmaW5l IEFMVElfTVNLNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgaW50KShNU0syLCBNU0sxLCBNU0s0LCBN U0szKQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTSBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFy KSgxLDIsMywyMyw1LDYsNywwLDksMTAsMTEsNCwxMywxNCwxNSw4KQotICAgICNkZWZpbmUgQUxU SV9TTDJfUEVSTTY0IFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDEsMiwzLDQsNSw2LDcsMzEs OSwxMCwxMSwxMiwxMywxNCwxNSwwKQotICAgICNkZWZpbmUgQUxUSV9TUjJfUEVSTSBcCi0JKHZl Y3RvciB1bnNpZ25lZCBjaGFyKSg3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMCwxNywxMiwxMywx NCkKLSAgICAjZGVmaW5lIEFMVElfU1IyX1BFUk02NCBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFy KSgxNSwwLDEsMiwzLDQsNSw2LDE3LDgsOSwxMCwxMSwxMiwxMywxNCkKLSNlbHNlCS8qIEZvciBP VEhFUiBPU3MoTGludXg/KSAqLwotICAgICNkZWZpbmUgQUxUSV9TTDEJe1NMMSwgU0wxLCBTTDEs IFNMMX0KLSAgICAjZGVmaW5lIEFMVElfU1IxCXtTUjEsIFNSMSwgU1IxLCBTUjF9Ci0gICAgI2Rl ZmluZSBBTFRJX01TSwl7TVNLMSwgTVNLMiwgTVNLMywgTVNLNH0KLSAgICAjZGVmaW5lIEFMVElf TVNLNjQJe01TSzIsIE1TSzEsIE1TSzQsIE1TSzN9Ci0gICAgI2RlZmluZSBBTFRJX1NMMl9QRVJN CXsxLDIsMywyMyw1LDYsNywwLDksMTAsMTEsNCwxMywxNCwxNSw4fQotICAgICNkZWZpbmUgQUxU SV9TTDJfUEVSTTY0CXsxLDIsMyw0LDUsNiw3LDMxLDksMTAsMTEsMTIsMTMsMTQsMTUsMH0KLSAg ICAjZGVmaW5lIEFMVElfU1IyX1BFUk0JezcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwLDE3LDEy LDEzLDE0fQotICAgICNkZWZpbmUgQUxUSV9TUjJfUEVSTTY0CXsxNSwwLDEsMiwzLDQsNSw2LDE3 LDgsOSwxMCwxMSwxMiwxMywxNH0KLSNlbmRpZgkvKiBGb3IgT1NYICovCi0jZGVmaW5lIElEU1RS CSJTRk1ULTQyNTM6MTctMjAtMS03LTE6OWY3YmZmZmYtOWZmZmZmNWYtM2VmZmZmZmItZmZmZmY3 YmIiCi0KLSNlbmRpZiAvKiBTRk1UX1BBUkFNUzQyNTNfSCAqLwoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQt cGFyYW1zNDQ0OTcuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zNDQ0OTcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggODU1OThmZS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczQ0NDk3LmgKKysrIC9k ZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGRlcml2ZXMgZnJvbSBT Rk1UIDEuMy4zCi0gKiAoaHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1t YXQvTVQvU0ZNVC9pbmRleC5odG1sKSwgd2hpY2ggd2FzCi0gKiByZWxlYXNlZCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgotICoKLSAqICAgQ29weXJpZ2h0IChjKSAy MDA2LDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAq ICAgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot ICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiAgIG1ldDoKLSAqCi0gKiAgICAgICAqIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KLSAqICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICAgICBkaXNjbGFp bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQK LSAqICAgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAgICAgKiBOZWl0aGVyIHRo ZSBuYW1lIG9mIHRoZSBIaXJvc2hpbWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg ICAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzCi0gKiAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg c3BlY2lmaWMgcHJpb3Igd3JpdHRlbgotICogICAgICAgICBwZXJtaXNzaW9uLgotICoKLSAqICAg VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP TlRSSUJVVE9SUwotICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqICAgQSBQQVJU SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ UklHSFQKLSAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqICAgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us Ci0gKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWQotICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot ICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFNGTVRfUEFSQU1TNDQ0OTdfSAotI2RlZmlu ZSBTRk1UX1BBUkFNUzQ0NDk3X0gKLQotI2RlZmluZSBQT1MxCTMzMAotI2RlZmluZSBTTDEJNQot I2RlZmluZSBTTDIJMwotI2RlZmluZSBTUjEJOQotI2RlZmluZSBTUjIJMwotI2RlZmluZSBNU0sx CTB4ZWZmZmZmZmJVCi0jZGVmaW5lIE1TSzIJMHhkZmJlYmZmZlUKLSNkZWZpbmUgTVNLMwkweGJm YmY3YmVmVQotI2RlZmluZSBNU0s0CTB4OWZmZDdiZmZVCi0jZGVmaW5lIFBBUklUWTEJMHgwMDAw MDAwMVUKLSNkZWZpbmUgUEFSSVRZMgkweDAwMDAwMDAwVQotI2RlZmluZSBQQVJJVFkzCTB4YTNh YzQwMDBVCi0jZGVmaW5lIFBBUklUWTQJMHhlY2MxMzI3YVUKLQotCi0vKiBQQVJBTUVURVJTIEZP UiBBTFRJVkVDICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCS8qIEZvciBPU1ggKi8KLSAgICAj ZGVmaW5lIEFMVElfU0wxCSh2ZWN0b3IgdW5zaWduZWQgaW50KShTTDEsIFNMMSwgU0wxLCBTTDEp Ci0gICAgI2RlZmluZSBBTFRJX1NSMQkodmVjdG9yIHVuc2lnbmVkIGludCkoU1IxLCBTUjEsIFNS MSwgU1IxKQotICAgICNkZWZpbmUgQUxUSV9NU0sJKHZlY3RvciB1bnNpZ25lZCBpbnQpKE1TSzEs IE1TSzIsIE1TSzMsIE1TSzQpCi0gICAgI2RlZmluZSBBTFRJX01TSzY0IFwKLQkodmVjdG9yIHVu c2lnbmVkIGludCkoTVNLMiwgTVNLMSwgTVNLNCwgTVNLMykKLSAgICAjZGVmaW5lIEFMVElfU0wy X1BFUk0gXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMywyMSwyMSwyMSw3LDAsMSwyLDExLDQs NSw2LDE1LDgsOSwxMCkKLSAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk02NCBcCi0JKHZlY3RvciB1 bnNpZ25lZCBjaGFyKSgzLDQsNSw2LDcsMjksMjksMjksMTEsMTIsMTMsMTQsMTUsMCwxLDIpCi0g ICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNIFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDUsNiw3 LDAsOSwxMCwxMSw0LDEzLDE0LDE1LDgsMTksMTksMTksMTIpCi0gICAgI2RlZmluZSBBTFRJX1NS Ml9QRVJNNjQgXAotCSh2ZWN0b3IgdW5zaWduZWQgY2hhcikoMTMsMTQsMTUsMCwxLDIsMyw0LDE5 LDE5LDE5LDgsOSwxMCwxMSwxMikKLSNlbHNlCS8qIEZvciBPVEhFUiBPU3MoTGludXg/KSAqLwot ICAgICNkZWZpbmUgQUxUSV9TTDEJe1NMMSwgU0wxLCBTTDEsIFNMMX0KLSAgICAjZGVmaW5lIEFM VElfU1IxCXtTUjEsIFNSMSwgU1IxLCBTUjF9Ci0gICAgI2RlZmluZSBBTFRJX01TSwl7TVNLMSwg TVNLMiwgTVNLMywgTVNLNH0KLSAgICAjZGVmaW5lIEFMVElfTVNLNjQJe01TSzIsIE1TSzEsIE1T SzQsIE1TSzN9Ci0gICAgI2RlZmluZSBBTFRJX1NMMl9QRVJNCXszLDIxLDIxLDIxLDcsMCwxLDIs MTEsNCw1LDYsMTUsOCw5LDEwfQotICAgICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0CXszLDQsNSw2 LDcsMjksMjksMjksMTEsMTIsMTMsMTQsMTUsMCwxLDJ9Ci0gICAgI2RlZmluZSBBTFRJX1NSMl9Q RVJNCXs1LDYsNywwLDksMTAsMTEsNCwxMywxNCwxNSw4LDE5LDE5LDE5LDEyfQotICAgICNkZWZp bmUgQUxUSV9TUjJfUEVSTTY0CXsxMywxNCwxNSwwLDEsMiwzLDQsMTksMTksMTksOCw5LDEwLDEx LDEyfQotI2VuZGlmCS8qIEZvciBPU1ggKi8KLSNkZWZpbmUgSURTVFIJIlNGTVQtNDQ0OTc6MzMw LTUtMy05LTM6ZWZmZmZmZmItZGZiZWJmZmYtYmZiZjdiZWYtOWZmZDdiZmYiCi0KLSNlbmRpZiAv KiBTRk1UX1BBUkFNUzQ0NDk3X0ggKi8KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczYwNy5oIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3Qv U0ZNVC1wYXJhbXM2MDcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM3NjQ4NS4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFtczYwNy5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAs MCBAQAotLyoKLSAqIFRoaXMgZmlsZSBkZXJpdmVzIGZyb20gU0ZNVCAxLjMuMwotICogKGh0dHA6 Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL1NGTVQvaW5kZXguaHRt bCksIHdoaWNoIHdhcwotICogcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBmb2xsb3dp bmcgbGljZW5zZToKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IE11dHN1byBTYWl0 bywgTWFrb3RvIE1hdHN1bW90byBhbmQgSGlyb3NoaW1hCi0gKiAgIFVuaXZlcnNpdHkuIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqICAgbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot ICogICBtZXQ6Ci0gKgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUKLSAqICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgICAgIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSGlyb3No aW1hIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZgotICogICAgICAgICBpdHMgY29udHJpYnV0 b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgICAg ICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4KLSAqICAgICAgICAgcGVybWlzc2lvbi4KLSAqCi0gKiAgIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICAgIkFT IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QKLSAqICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiAgIE9XTkVSIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogICBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK LSAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVAotICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqICAgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq LwotI2lmbmRlZiBTRk1UX1BBUkFNUzYwN19ICi0jZGVmaW5lIFNGTVRfUEFSQU1TNjA3X0gKLQot I2RlZmluZSBQT1MxCTIKLSNkZWZpbmUgU0wxCTE1Ci0jZGVmaW5lIFNMMgkzCi0jZGVmaW5lIFNS MQkxMwotI2RlZmluZSBTUjIJMwotI2RlZmluZSBNU0sxCTB4ZmRmZjM3ZmZVCi0jZGVmaW5lIE1T SzIJMHhlZjdmM2Y3ZFUKLSNkZWZpbmUgTVNLMwkweGZmNzc3YjdkVQotI2RlZmluZSBNU0s0CTB4 N2ZmN2ZiMmZVCi0jZGVmaW5lIFBBUklUWTEJMHgwMDAwMDAwMVUKLSNkZWZpbmUgUEFSSVRZMgkw eDAwMDAwMDAwVQotI2RlZmluZSBQQVJJVFkzCTB4MDAwMDAwMDBVCi0jZGVmaW5lIFBBUklUWTQJ MHg1OTg2ZjA1NFUKLQotCi0vKiBQQVJBTUVURVJTIEZPUiBBTFRJVkVDICovCi0jaWYgZGVmaW5l ZChfX0FQUExFX18pCS8qIEZvciBPU1ggKi8KLSAgICAjZGVmaW5lIEFMVElfU0wxCSh2ZWN0b3Ig dW5zaWduZWQgaW50KShTTDEsIFNMMSwgU0wxLCBTTDEpCi0gICAgI2RlZmluZSBBTFRJX1NSMQko dmVjdG9yIHVuc2lnbmVkIGludCkoU1IxLCBTUjEsIFNSMSwgU1IxKQotICAgICNkZWZpbmUgQUxU SV9NU0sJKHZlY3RvciB1bnNpZ25lZCBpbnQpKE1TSzEsIE1TSzIsIE1TSzMsIE1TSzQpCi0gICAg I2RlZmluZSBBTFRJX01TSzY0IFwKLQkodmVjdG9yIHVuc2lnbmVkIGludCkoTVNLMiwgTVNLMSwg TVNLNCwgTVNLMykKLSAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk0gXAotCSh2ZWN0b3IgdW5zaWdu ZWQgY2hhcikoMywyMSwyMSwyMSw3LDAsMSwyLDExLDQsNSw2LDE1LDgsOSwxMCkKLSAgICAjZGVm aW5lIEFMVElfU0wyX1BFUk02NCBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSgzLDQsNSw2LDcs MjksMjksMjksMTEsMTIsMTMsMTQsMTUsMCwxLDIpCi0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJN IFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDUsNiw3LDAsOSwxMCwxMSw0LDEzLDE0LDE1LDgs MTksMTksMTksMTIpCi0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQgXAotCSh2ZWN0b3IgdW5z aWduZWQgY2hhcikoMTMsMTQsMTUsMCwxLDIsMyw0LDE5LDE5LDE5LDgsOSwxMCwxMSwxMikKLSNl bHNlCS8qIEZvciBPVEhFUiBPU3MoTGludXg/KSAqLwotICAgICNkZWZpbmUgQUxUSV9TTDEJe1NM MSwgU0wxLCBTTDEsIFNMMX0KLSAgICAjZGVmaW5lIEFMVElfU1IxCXtTUjEsIFNSMSwgU1IxLCBT UjF9Ci0gICAgI2RlZmluZSBBTFRJX01TSwl7TVNLMSwgTVNLMiwgTVNLMywgTVNLNH0KLSAgICAj ZGVmaW5lIEFMVElfTVNLNjQJe01TSzIsIE1TSzEsIE1TSzQsIE1TSzN9Ci0gICAgI2RlZmluZSBB TFRJX1NMMl9QRVJNCXszLDIxLDIxLDIxLDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwfQotICAg ICNkZWZpbmUgQUxUSV9TTDJfUEVSTTY0CXszLDQsNSw2LDcsMjksMjksMjksMTEsMTIsMTMsMTQs MTUsMCwxLDJ9Ci0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNCXs1LDYsNywwLDksMTAsMTEsNCwx MywxNCwxNSw4LDE5LDE5LDE5LDEyfQotICAgICNkZWZpbmUgQUxUSV9TUjJfUEVSTTY0CXsxMywx NCwxNSwwLDEsMiwzLDQsMTksMTksMTksOCw5LDEwLDExLDEyfQotI2VuZGlmCS8qIEZvciBPU1gg Ki8KLSNkZWZpbmUgSURTVFIJIlNGTVQtNjA3OjItMTUtMy0xMy0zOmZkZmYzN2ZmLWVmN2YzZjdk LWZmNzc3YjdkLTdmZjdmYjJmIgotCi0jZW5kaWYgLyogU0ZNVF9QQVJBTVM2MDdfSCAqLwoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5j bHVkZS90ZXN0L1NGTVQtcGFyYW1zODYyNDMuaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L1NGTVQtcGFyYW1zODYyNDMuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU0ZDc4My4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXBhcmFt czg2MjQzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotICogVGhpcyBmaWxl IGRlcml2ZXMgZnJvbSBTRk1UIDEuMy4zCi0gKiAoaHR0cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hp bWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5odG1sKSwgd2hpY2ggd2FzCi0gKiByZWxl YXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgotICoKLSAqICAg Q29weXJpZ2h0IChjKSAyMDA2LDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFu ZCBIaXJvc2hpbWEKLSAqICAgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g KiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotICogICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiAgIG1ldDoKLSAqCi0gKiAgICAg ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0gKiAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAgICogUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgICBjb3B5cmln aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICog ICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQKLSAqICAgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAg ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBIaXJvc2hpbWEgVW5pdmVyc2l0eSBub3IgdGhl IG5hbWVzIG9mCi0gKiAgICAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgotICogICAgICAgICBwZXJtaXNz aW9uLgotICoKLSAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogICBMSU1JVEVEIFRP LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IKLSAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiAgIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq ICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsCi0gKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogICBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAg IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRQotICogICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFNGTVRfUEFSQU1T ODYyNDNfSAotI2RlZmluZSBTRk1UX1BBUkFNUzg2MjQzX0gKLQotI2RlZmluZSBQT1MxCTM2Ngot I2RlZmluZSBTTDEJNgotI2RlZmluZSBTTDIJNwotI2RlZmluZSBTUjEJMTkKLSNkZWZpbmUgU1Iy CTEKLSNkZWZpbmUgTVNLMQkweGZkYmZmYmZmVQotI2RlZmluZSBNU0syCTB4YmZmN2ZmM2ZVCi0j ZGVmaW5lIE1TSzMJMHhmZDc3ZWZmZlUKLSNkZWZpbmUgTVNLNAkweGJmOWZmM2ZmVQotI2RlZmlu ZSBQQVJJVFkxCTB4MDAwMDAwMDFVCi0jZGVmaW5lIFBBUklUWTIJMHgwMDAwMDAwMFUKLSNkZWZp bmUgUEFSSVRZMwkweDAwMDAwMDAwVQotI2RlZmluZSBQQVJJVFk0CTB4ZTk1MjhkODVVCi0KLQot LyogUEFSQU1FVEVSUyBGT1IgQUxUSVZFQyAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQkvKiBG b3IgT1NYICovCi0gICAgI2RlZmluZSBBTFRJX1NMMQkodmVjdG9yIHVuc2lnbmVkIGludCkoU0wx LCBTTDEsIFNMMSwgU0wxKQotICAgICNkZWZpbmUgQUxUSV9TUjEJKHZlY3RvciB1bnNpZ25lZCBp bnQpKFNSMSwgU1IxLCBTUjEsIFNSMSkKLSAgICAjZGVmaW5lIEFMVElfTVNLCSh2ZWN0b3IgdW5z aWduZWQgaW50KShNU0sxLCBNU0syLCBNU0szLCBNU0s0KQotICAgICNkZWZpbmUgQUxUSV9NU0s2 NCBcCi0JKHZlY3RvciB1bnNpZ25lZCBpbnQpKE1TSzIsIE1TSzEsIE1TSzQsIE1TSzMpCi0gICAg I2RlZmluZSBBTFRJX1NMMl9QRVJNIFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDI1LDI1LDI1 LDI1LDMsMjUsMjUsMjUsNywwLDEsMiwxMSw0LDUsNikKLSAgICAjZGVmaW5lIEFMVElfU0wyX1BF Uk02NCBcCi0JKHZlY3RvciB1bnNpZ25lZCBjaGFyKSg3LDI1LDI1LDI1LDI1LDI1LDI1LDI1LDE1 LDAsMSwyLDMsNCw1LDYpCi0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNIFwKLQkodmVjdG9yIHVu c2lnbmVkIGNoYXIpKDcsMCwxLDIsMTEsNCw1LDYsMTUsOCw5LDEwLDE3LDEyLDEzLDE0KQotICAg ICNkZWZpbmUgQUxUSV9TUjJfUEVSTTY0IFwKLQkodmVjdG9yIHVuc2lnbmVkIGNoYXIpKDE1LDAs MSwyLDMsNCw1LDYsMTcsOCw5LDEwLDExLDEyLDEzLDE0KQotI2Vsc2UJLyogRm9yIE9USEVSIE9T cyhMaW51eD8pICovCi0gICAgI2RlZmluZSBBTFRJX1NMMQl7U0wxLCBTTDEsIFNMMSwgU0wxfQot ICAgICNkZWZpbmUgQUxUSV9TUjEJe1NSMSwgU1IxLCBTUjEsIFNSMX0KLSAgICAjZGVmaW5lIEFM VElfTVNLCXtNU0sxLCBNU0syLCBNU0szLCBNU0s0fQotICAgICNkZWZpbmUgQUxUSV9NU0s2NAl7 TVNLMiwgTVNLMSwgTVNLNCwgTVNLM30KLSAgICAjZGVmaW5lIEFMVElfU0wyX1BFUk0JezI1LDI1 LDI1LDI1LDMsMjUsMjUsMjUsNywwLDEsMiwxMSw0LDUsNn0KLSAgICAjZGVmaW5lIEFMVElfU0wy X1BFUk02NAl7NywyNSwyNSwyNSwyNSwyNSwyNSwyNSwxNSwwLDEsMiwzLDQsNSw2fQotICAgICNk ZWZpbmUgQUxUSV9TUjJfUEVSTQl7NywwLDEsMiwxMSw0LDUsNiwxNSw4LDksMTAsMTcsMTIsMTMs MTR9Ci0gICAgI2RlZmluZSBBTFRJX1NSMl9QRVJNNjQJezE1LDAsMSwyLDMsNCw1LDYsMTcsOCw5 LDEwLDExLDEyLDEzLDE0fQotI2VuZGlmCS8qIEZvciBPU1ggKi8KLSNkZWZpbmUgSURTVFIJIlNG TVQtODYyNDM6MzY2LTYtNy0xOS0xOmZkYmZmYmZmLWJmZjdmZjNmLWZkNzdlZmZmLWJmOWZmM2Zm IgotCi0jZW5kaWYgLyogU0ZNVF9QQVJBTVM4NjI0M19IICovCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC1z c2UyLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1 ZGUvdGVzdC9TRk1ULXNzZTIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY5YWQ1 NS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULXNzZTIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCww IEBACi0vKgotICogVGhpcyBmaWxlIGRlcml2ZXMgZnJvbSBTRk1UIDEuMy4zCi0gKiAoaHR0cDov L3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5odG1s KSwgd2hpY2ggd2FzCi0gKiByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGZvbGxvd2lu ZyBsaWNlbnNlOgotICoKLSAqICAgQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgTXV0c3VvIFNhaXRv LCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAqICAgVW5pdmVyc2l0eS4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogICBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g KiAgIG1ldDoKLSAqCi0gKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAg ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZQotICogICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZwotICogICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgICAgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgotICogICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBIaXJvc2hp bWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgICAgIGl0cyBjb250cmlidXRv cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICAgICAg IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl bgotICogICAgICAgICBwZXJtaXNzaW9uLgotICoKLSAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogICAiQVMg SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVAotICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqICAgT1dORVIgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0gKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QKLSAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiAgIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot ICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUCi0gKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogICBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov Ci0vKioKLSAqIEBmaWxlICBTRk1ULXNzZTIuaAotICogQGJyaWVmIFNJTUQgb3JpZW50ZWQgRmFz dCBNZXJzZW5uZSBUd2lzdGVyKFNGTVQpIGZvciBJbnRlbCBTU0UyCi0gKgotICogQGF1dGhvciBN dXRzdW8gU2FpdG8gKEhpcm9zaGltYSBVbml2ZXJzaXR5KQotICogQGF1dGhvciBNYWtvdG8gTWF0 c3Vtb3RvIChIaXJvc2hpbWEgVW5pdmVyc2l0eSkKLSAqCi0gKiBAbm90ZSBXZSBhc3N1bWUgTElU VExFIEVORElBTiBpbiB0aGlzIGZpbGUKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg TXV0c3VvIFNhaXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAqIFVuaXZlcnNp dHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhlIG5ldyBCU0QgTGljZW5zZSBpcyBh cHBsaWVkIHRvIHRoaXMgc29mdHdhcmUsIHNlZSBMSUNFTlNFLnR4dAotICovCi0KLSNpZm5kZWYg U0ZNVF9TU0UyX0gKLSNkZWZpbmUgU0ZNVF9TU0UyX0gKLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9u IHJlcHJlc2VudHMgdGhlIHJlY3Vyc2lvbiBmb3JtdWxhLgotICogQHBhcmFtIGEgYSAxMjgtYml0 IHBhcnQgb2YgdGhlIGludGVyYWwgc3RhdGUgYXJyYXkKLSAqIEBwYXJhbSBiIGEgMTI4LWJpdCBw YXJ0IG9mIHRoZSBpbnRlcmFsIHN0YXRlIGFycmF5Ci0gKiBAcGFyYW0gYyBhIDEyOC1iaXQgcGFy dCBvZiB0aGUgaW50ZXJhbCBzdGF0ZSBhcnJheQotICogQHBhcmFtIGQgYSAxMjgtYml0IHBhcnQg b2YgdGhlIGludGVyYWwgc3RhdGUgYXJyYXkKLSAqIEBwYXJhbSBtYXNrIDEyOC1iaXQgbWFzawot ICogQHJldHVybiBvdXRwdXQKLSAqLwotSkVNQUxMT0NfQUxXQVlTX0lOTElORSBfX20xMjhpIG1t X3JlY3Vyc2lvbihfX20xMjhpICphLCBfX20xMjhpICpiLAotCQkJCSAgIF9fbTEyOGkgYywgX19t MTI4aSBkLCBfX20xMjhpIG1hc2spIHsKLSAgICBfX20xMjhpIHYsIHgsIHksIHo7Ci0KLSAgICB4 ID0gX21tX2xvYWRfc2kxMjgoYSk7Ci0gICAgeSA9IF9tbV9zcmxpX2VwaTMyKCpiLCBTUjEpOwot ICAgIHogPSBfbW1fc3JsaV9zaTEyOChjLCBTUjIpOwotICAgIHYgPSBfbW1fc2xsaV9lcGkzMihk LCBTTDEpOwotICAgIHogPSBfbW1feG9yX3NpMTI4KHosIHgpOwotICAgIHogPSBfbW1feG9yX3Np MTI4KHosIHYpOwotICAgIHggPSBfbW1fc2xsaV9zaTEyOCh4LCBTTDIpOwotICAgIHkgPSBfbW1f YW5kX3NpMTI4KHksIG1hc2spOwotICAgIHogPSBfbW1feG9yX3NpMTI4KHosIHgpOwotICAgIHog PSBfbW1feG9yX3NpMTI4KHosIHkpOwotICAgIHJldHVybiB6OwotfQotCi0vKioKLSAqIFRoaXMg ZnVuY3Rpb24gZmlsbHMgdGhlIGludGVybmFsIHN0YXRlIGFycmF5IHdpdGggcHNldWRvcmFuZG9t Ci0gKiBpbnRlZ2Vycy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGdlbl9yYW5kX2FsbChzZm10 X3QgKmN0eCkgewotICAgIGludCBpOwotICAgIF9fbTEyOGkgciwgcjEsIHIyLCBtYXNrOwotICAg IG1hc2sgPSBfbW1fc2V0X2VwaTMyKE1TSzQsIE1TSzMsIE1TSzIsIE1TSzEpOwotCi0gICAgcjEg PSBfbW1fbG9hZF9zaTEyOCgmY3R4LT5zZm10W04gLSAyXS5zaSk7Ci0gICAgcjIgPSBfbW1fbG9h ZF9zaTEyOCgmY3R4LT5zZm10W04gLSAxXS5zaSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IE4gLSBQ T1MxOyBpKyspIHsKLQlyID0gbW1fcmVjdXJzaW9uKCZjdHgtPnNmbXRbaV0uc2ksICZjdHgtPnNm bXRbaSArIFBPUzFdLnNpLCByMSwgcjIsCi0JICBtYXNrKTsKLQlfbW1fc3RvcmVfc2kxMjgoJmN0 eC0+c2ZtdFtpXS5zaSwgcik7Ci0JcjEgPSByMjsKLQlyMiA9IHI7Ci0gICAgfQotICAgIGZvciAo OyBpIDwgTjsgaSsrKSB7Ci0JciA9IG1tX3JlY3Vyc2lvbigmY3R4LT5zZm10W2ldLnNpLCAmY3R4 LT5zZm10W2kgKyBQT1MxIC0gTl0uc2ksIHIxLCByMiwKLQkgIG1hc2spOwotCV9tbV9zdG9yZV9z aTEyOCgmY3R4LT5zZm10W2ldLnNpLCByKTsKLQlyMSA9IHIyOwotCXIyID0gcjsKLSAgICB9Ci19 Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBmaWxscyB0aGUgdXNlci1zcGVjaWZpZWQgYXJyYXkg d2l0aCBwc2V1ZG9yYW5kb20KLSAqIGludGVnZXJzLgotICoKLSAqIEBwYXJhbSBhcnJheSBhbiAx MjgtYml0IGFycmF5IHRvIGJlIGZpbGxlZCBieSBwc2V1ZG9yYW5kb20gbnVtYmVycy4KLSAqIEBw YXJhbSBzaXplIG51bWJlciBvZiAxMjgtYml0IHBlc3Vkb3JhbmRvbSBudW1iZXJzIHRvIGJlIGdl bmVyYXRlZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGdlbl9yYW5kX2FycmF5KHNmbXRfdCAq Y3R4LCB3MTI4X3QgKmFycmF5LCBpbnQgc2l6ZSkgewotICAgIGludCBpLCBqOwotICAgIF9fbTEy OGkgciwgcjEsIHIyLCBtYXNrOwotICAgIG1hc2sgPSBfbW1fc2V0X2VwaTMyKE1TSzQsIE1TSzMs IE1TSzIsIE1TSzEpOwotCi0gICAgcjEgPSBfbW1fbG9hZF9zaTEyOCgmY3R4LT5zZm10W04gLSAy XS5zaSk7Ci0gICAgcjIgPSBfbW1fbG9hZF9zaTEyOCgmY3R4LT5zZm10W04gLSAxXS5zaSk7Ci0g ICAgZm9yIChpID0gMDsgaSA8IE4gLSBQT1MxOyBpKyspIHsKLQlyID0gbW1fcmVjdXJzaW9uKCZj dHgtPnNmbXRbaV0uc2ksICZjdHgtPnNmbXRbaSArIFBPUzFdLnNpLCByMSwgcjIsCi0JICBtYXNr KTsKLQlfbW1fc3RvcmVfc2kxMjgoJmFycmF5W2ldLnNpLCByKTsKLQlyMSA9IHIyOwotCXIyID0g cjsKLSAgICB9Ci0gICAgZm9yICg7IGkgPCBOOyBpKyspIHsKLQlyID0gbW1fcmVjdXJzaW9uKCZj dHgtPnNmbXRbaV0uc2ksICZhcnJheVtpICsgUE9TMSAtIE5dLnNpLCByMSwgcjIsCi0JICBtYXNr KTsKLQlfbW1fc3RvcmVfc2kxMjgoJmFycmF5W2ldLnNpLCByKTsKLQlyMSA9IHIyOwotCXIyID0g cjsKLSAgICB9Ci0gICAgLyogbWFpbiBsb29wICovCi0gICAgZm9yICg7IGkgPCBzaXplIC0gTjsg aSsrKSB7Ci0JciA9IG1tX3JlY3Vyc2lvbigmYXJyYXlbaSAtIE5dLnNpLCAmYXJyYXlbaSArIFBP UzEgLSBOXS5zaSwgcjEsIHIyLAotCQkJIG1hc2spOwotCV9tbV9zdG9yZV9zaTEyOCgmYXJyYXlb aV0uc2ksIHIpOwotCXIxID0gcjI7Ci0JcjIgPSByOwotICAgIH0KLSAgICBmb3IgKGogPSAwOyBq IDwgMiAqIE4gLSBzaXplOyBqKyspIHsKLQlyID0gX21tX2xvYWRfc2kxMjgoJmFycmF5W2ogKyBz aXplIC0gTl0uc2kpOwotCV9tbV9zdG9yZV9zaTEyOCgmY3R4LT5zZm10W2pdLnNpLCByKTsKLSAg ICB9Ci0gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHsKLQlyID0gbW1fcmVjdXJzaW9uKCZhcnJh eVtpIC0gTl0uc2ksICZhcnJheVtpICsgUE9TMSAtIE5dLnNpLCByMSwgcjIsCi0JCQkgbWFzayk7 Ci0JX21tX3N0b3JlX3NpMTI4KCZhcnJheVtpXS5zaSwgcik7Ci0JX21tX3N0b3JlX3NpMTI4KCZj dHgtPnNmbXRbaisrXS5zaSwgcik7Ci0JcjEgPSByMjsKLQlyMiA9IHI7Ci0gICAgfQotfQotCi0j ZW5kaWYKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9TRk1ULmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDg2M2ZjNTUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvU0ZNVC5oCisrKyAvZGV2L251bGwKQEAg LTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4zLjMK LSAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9TRk1U L2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKLSAqIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0gKgotICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBN dXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQotICogICBVbml2ZXJz aXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiAgIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcmUKLSAqICAgbWV0OgotICoKLSAqICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlCi0gKiAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgICAg ICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg dGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICAgICAgaXRz IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMK LSAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuCi0gKiAgICAgICAgIHBlcm1pc3Npb24uCi0gKgotICogICBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT Ci0gKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogICBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog ICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqICAgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZCi0gKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiAgIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0gKi8KLS8qKiAKLSAqIEBmaWxlIFNGTVQuaCAKLSAqCi0gKiBAYnJpZWYgU0lNRCBv cmllbnRlZCBGYXN0IE1lcnNlbm5lIFR3aXN0ZXIoU0ZNVCkgcHNldWRvcmFuZG9tCi0gKiBudW1i ZXIgZ2VuZXJhdG9yCi0gKgotICogQGF1dGhvciBNdXRzdW8gU2FpdG8gKEhpcm9zaGltYSBVbml2 ZXJzaXR5KQotICogQGF1dGhvciBNYWtvdG8gTWF0c3Vtb3RvIChIaXJvc2hpbWEgVW5pdmVyc2l0 eSkKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgTXV0c3VvIFNhaXRvLCBNYWtvdG8g TWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAqIFVuaXZlcnNpdHkuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0gKgotICogVGhlIG5ldyBCU0QgTGljZW5zZSBpcyBhcHBsaWVkIHRvIHRoaXMgc29mdHdh cmUuCi0gKiBzZWUgTElDRU5TRS50eHQKLSAqCi0gKiBAbm90ZSBXZSBhc3N1bWUgdGhhdCB5b3Vy IHN5c3RlbSBoYXMgaW50dHlwZXMuaC4gIElmIHlvdXIgc3lzdGVtCi0gKiBkb2Vzbid0IGhhdmUg aW50dHlwZXMuaCwgeW91IGhhdmUgdG8gdHlwZWRlZiB1aW50MzJfdCBhbmQgdWludDY0X3QsCi0g KiBhbmQgeW91IGhhdmUgdG8gZGVmaW5lIFBSSXU2NCBhbmQgUFJJeDY0IGluIHRoaXMgZmlsZSBh cyBmb2xsb3dzOgotICogQHZlcmJhdGltCi0gdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3QK LSB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdCAgCi0gI2RlZmluZSBQUkl1NjQg ImxsdSIKLSAjZGVmaW5lIFBSSXg2NCAibGx4IgotQGVuZHZlcmJhdGltCi0gKiB1aW50MzJfdCBt dXN0IGJlIGV4YWN0bHkgMzItYml0IHVuc2lnbmVkIGludGVnZXIgdHlwZSAobm8gbW9yZSwgbm8K LSAqIGxlc3MpLCBhbmQgdWludDY0X3QgbXVzdCBiZSBleGFjdGx5IDY0LWJpdCB1bnNpZ25lZCBp bnRlZ2VyIHR5cGUuCi0gKiBQUkl1NjQgYW5kIFBSSXg2NCBhcmUgdXNlZCBmb3IgcHJpbnRmIGZ1 bmN0aW9uIHRvIHByaW50IDY0LWJpdAotICogdW5zaWduZWQgaW50IGFuZCA2NC1iaXQgdW5zaWdu ZWQgaW50IGluIGhleGFkZWNpbWFsIGZvcm1hdC4KLSAqLwotCi0jaWZuZGVmIFNGTVRfSAotI2Rl ZmluZSBTRk1UX0gKLQotdHlwZWRlZiBzdHJ1Y3Qgc2ZtdF9zIHNmbXRfdDsKLQotdWludDMyX3Qg Z2VuX3JhbmQzMihzZm10X3QgKmN0eCk7Ci11aW50MzJfdCBnZW5fcmFuZDMyX3JhbmdlKHNmbXRf dCAqY3R4LCB1aW50MzJfdCBsaW1pdCk7Ci11aW50NjRfdCBnZW5fcmFuZDY0KHNmbXRfdCAqY3R4 KTsKLXVpbnQ2NF90IGdlbl9yYW5kNjRfcmFuZ2Uoc2ZtdF90ICpjdHgsIHVpbnQ2NF90IGxpbWl0 KTsKLXZvaWQgZmlsbF9hcnJheTMyKHNmbXRfdCAqY3R4LCB1aW50MzJfdCAqYXJyYXksIGludCBz aXplKTsKLXZvaWQgZmlsbF9hcnJheTY0KHNmbXRfdCAqY3R4LCB1aW50NjRfdCAqYXJyYXksIGlu dCBzaXplKTsKLXNmbXRfdCAqaW5pdF9nZW5fcmFuZCh1aW50MzJfdCBzZWVkKTsKLXNmbXRfdCAq aW5pdF9ieV9hcnJheSh1aW50MzJfdCAqaW5pdF9rZXksIGludCBrZXlfbGVuZ3RoKTsKLXZvaWQg ZmluaV9nZW5fcmFuZChzZm10X3QgKmN0eCk7Ci1jb25zdCBjaGFyICpnZXRfaWRzdHJpbmcodm9p ZCk7Ci1pbnQgZ2V0X21pbl9hcnJheV9zaXplMzIodm9pZCk7Ci1pbnQgZ2V0X21pbl9hcnJheV9z aXplNjQodm9pZCk7Ci0KLS8qIFRoZXNlIHJlYWwgdmVyc2lvbnMgYXJlIGR1ZSB0byBJc2FrdSBX YWRhICovCi0vKiogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWludGVy dmFsICovCi1zdGF0aWMgaW5saW5lIGRvdWJsZSB0b19yZWFsMSh1aW50MzJfdCB2KSB7Ci0gICAg cmV0dXJuIHYgKiAoMS4wLzQyOTQ5NjcyOTUuMCk7IAotICAgIC8qIGRpdmlkZWQgYnkgMl4zMi0x ICovIAotfQotCi0vKiogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWlu dGVydmFsICovCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBnZW5yYW5kX3JlYWwxKHNmbXRfdCAqY3R4 KSB7Ci0gICAgcmV0dXJuIHRvX3JlYWwxKGdlbl9yYW5kMzIoY3R4KSk7Ci19Ci0KLS8qKiBnZW5l cmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpLXJlYWwtaW50ZXJ2YWwgKi8KLXN0YXRpYyBp bmxpbmUgZG91YmxlIHRvX3JlYWwyKHVpbnQzMl90IHYpIHsKLSAgICByZXR1cm4gdiAqICgxLjAv NDI5NDk2NzI5Ni4wKTsgCi0gICAgLyogZGl2aWRlZCBieSAyXjMyICovCi19Ci0KLS8qKiBnZW5l cmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpLXJlYWwtaW50ZXJ2YWwgKi8KLXN0YXRpYyBp bmxpbmUgZG91YmxlIGdlbnJhbmRfcmVhbDIoc2ZtdF90ICpjdHgpIHsKLSAgICByZXR1cm4gdG9f cmVhbDIoZ2VuX3JhbmQzMihjdHgpKTsKLX0KLQotLyoqIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1i ZXIgb24gKDAsMSktcmVhbC1pbnRlcnZhbCAqLwotc3RhdGljIGlubGluZSBkb3VibGUgdG9fcmVh bDModWludDMyX3QgdikgewotICAgIHJldHVybiAoKChkb3VibGUpdikgKyAwLjUpKigxLjAvNDI5 NDk2NzI5Ni4wKTsgCi0gICAgLyogZGl2aWRlZCBieSAyXjMyICovCi19Ci0KLS8qKiBnZW5lcmF0 ZXMgYSByYW5kb20gbnVtYmVyIG9uICgwLDEpLXJlYWwtaW50ZXJ2YWwgKi8KLXN0YXRpYyBpbmxp bmUgZG91YmxlIGdlbnJhbmRfcmVhbDMoc2ZtdF90ICpjdHgpIHsKLSAgICByZXR1cm4gdG9fcmVh bDMoZ2VuX3JhbmQzMihjdHgpKTsKLX0KLS8qKiBUaGVzZSByZWFsIHZlcnNpb25zIGFyZSBkdWUg dG8gSXNha3UgV2FkYSAqLwotCi0vKiogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwx KSB3aXRoIDUzLWJpdCByZXNvbHV0aW9uKi8KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHRvX3JlczUz KHVpbnQ2NF90IHYpIHsKLSAgICByZXR1cm4gdiAqICgxLjAvMTg0NDY3NDQwNzM3MDk1NTE2MTYu MEwpOwotfQotCi0vKiogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKSB3aXRoIDUz LWJpdCByZXNvbHV0aW9uIGZyb20gdHdvCi0gKiAzMiBiaXQgaW50ZWdlcnMgKi8KLXN0YXRpYyBp bmxpbmUgZG91YmxlIHRvX3JlczUzX21peCh1aW50MzJfdCB4LCB1aW50MzJfdCB5KSB7Ci0gICAg cmV0dXJuIHRvX3JlczUzKHggfCAoKHVpbnQ2NF90KXkgPDwgMzIpKTsKLX0KLQotLyoqIGdlbmVy YXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSkgd2l0aCA1My1iaXQgcmVzb2x1dGlvbgotICov Ci1zdGF0aWMgaW5saW5lIGRvdWJsZSBnZW5yYW5kX3JlczUzKHNmbXRfdCAqY3R4KSB7Ci0gICAg cmV0dXJuIHRvX3JlczUzKGdlbl9yYW5kNjQoY3R4KSk7Ci19Ci0KLS8qKiBnZW5lcmF0ZXMgYSBy YW5kb20gbnVtYmVyIG9uIFswLDEpIHdpdGggNTMtYml0IHJlc29sdXRpb24KLSAgICB1c2luZyAz MmJpdCBpbnRlZ2VyLgotICovCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBnZW5yYW5kX3JlczUzX21p eChzZm10X3QgKmN0eCkgewotICAgIHVpbnQzMl90IHgsIHk7Ci0KLSAgICB4ID0gZ2VuX3JhbmQz MihjdHgpOwotICAgIHkgPSBnZW5fcmFuZDMyKGN0eCk7Ci0gICAgcmV0dXJuIHRvX3JlczUzX21p eCh4LCB5KTsKLX0KLSNlbmRpZgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2FyZW5hX3V0aWwuaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2FyZW5hX3V0 aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0MWRhYy4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVz dC9hcmVuYV91dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotc3RhdGljIGlu bGluZSB1bnNpZ25lZAotZG9fYXJlbmFfY3JlYXRlKHNzaXplX3QgZGlydHlfZGVjYXlfbXMsIHNz aXplX3QgbXV6enlfZGVjYXlfbXMpIHsKLQl1bnNpZ25lZCBhcmVuYV9pbmQ7Ci0Jc2l6ZV90IHN6 ID0gc2l6ZW9mKHVuc2lnbmVkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuY3JlYXRl IiwgKHZvaWQgKikmYXJlbmFfaW5kLCAmc3osIE5VTEwsIDApLAotCSAgICAwLCAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCXNpemVfdCBtaWJbM107Ci0Jc2l6ZV90IG1pYmxlbiA9 IHNpemVvZihtaWIpL3NpemVvZihzaXplX3QpOwotCi0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0 b21pYigiYXJlbmEuMC5kaXJ0eV9kZWNheV9tcyIsIG1pYiwgJm1pYmxlbiksCi0JICAgIDAsICJV bmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7Ci0JbWliWzFdID0gKHNpemVf dClhcmVuYV9pbmQ7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxM LCBOVUxMLAotCSAgICAodm9pZCAqKSZkaXJ0eV9kZWNheV9tcywgc2l6ZW9mKGRpcnR5X2RlY2F5 X21zKSksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZhaWx1cmUiKTsKLQot CWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAubXV6enlfZGVjYXlfbXMiLCBt aWIsICZtaWJsZW4pLAotCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFp bHVyZSIpOwotCW1pYlsxXSA9IChzaXplX3QpYXJlbmFfaW5kOwotCWV4cGVjdF9kX2VxKG1hbGxj dGxieW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwKLQkgICAgKHZvaWQgKikmbXV6enlfZGVj YXlfbXMsIHNpemVvZihtdXp6eV9kZWNheV9tcykpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxs Y3RsYnltaWIoKSBmYWlsdXJlIik7Ci0KLQlyZXR1cm4gYXJlbmFfaW5kOwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQKLWRvX2FyZW5hX2Rlc3Ryb3kodW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JLyog Ci0JICogRm9yIGNvbnZlbmllbmNlLCBmbHVzaCB0Y2FjaGUgaW4gY2FzZSB0aGVyZSBhcmUgY2Fj aGVkIGl0ZW1zLgotCSAqIEhvd2V2ZXIgbm90IGFzc2VydCBzdWNjZXNzIHNpbmNlIHRoZSB0Y2Fj aGUgbWF5IGJlIGRpc2FibGVkLgotCSAqLwotCW1hbGxjdGwoInRocmVhZC50Y2FjaGUuZmx1c2gi LCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKLQotCXNpemVfdCBtaWJbM107Ci0Jc2l6ZV90IG1pYmxl biA9IHNpemVvZihtaWIpL3NpemVvZihzaXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1l dG9taWIoImFyZW5hLjAuZGVzdHJveSIsIG1pYiwgJm1pYmxlbiksIDAsCi0JICAgICJVbmV4cGVj dGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7Ci0JbWliWzFdID0gKHNpemVfdClhcmVu YV9pbmQ7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxM LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIp OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRvX2Vwb2NoKHZvaWQpIHsKLQl1aW50NjRfdCBl cG9jaCA9IDE7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAodm9p ZCAqKSZlcG9jaCwgc2l6ZW9mKGVwb2NoKSksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwo KSBmYWlsdXJlIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG9fcHVyZ2UodW5zaWduZWQg YXJlbmFfaW5kKSB7Ci0Jc2l6ZV90IG1pYlszXTsKLQlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1p Yikvc2l6ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmEu MC5wdXJnZSIsIG1pYiwgJm1pYmxlbiksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1l dG9taWIoKSBmYWlsdXJlIik7Ci0JbWliWzFdID0gKHNpemVfdClhcmVuYV9pbmQ7Ci0JZXhwZWN0 X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwK LQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIpOwotfQotCi1zdGF0aWMg aW5saW5lIHZvaWQKLWRvX2RlY2F5KHVuc2lnbmVkIGFyZW5hX2luZCkgewotCXNpemVfdCBtaWJb M107Ci0Jc2l6ZV90IG1pYmxlbiA9IHNpemVvZihtaWIpL3NpemVvZihzaXplX3QpOwotCWV4cGVj dF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAuZGVjYXkiLCBtaWIsICZtaWJsZW4pLCAw LAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwotCW1pYlsx XSA9IChzaXplX3QpYXJlbmFfaW5kOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1p YmxlbiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxi eW1pYigpIGZhaWx1cmUiKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjRfdAotZ2V0X2FyZW5h X25wdXJnZV9pbXBsKGNvbnN0IGNoYXIgKm1pYm5hbWUsIHVuc2lnbmVkIGFyZW5hX2luZCkgewot CXNpemVfdCBtaWJbNF07Ci0Jc2l6ZV90IG1pYmxlbiA9IHNpemVvZihtaWIpL3NpemVvZihzaXpl X3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIobWlibmFtZSwgbWliLCAmbWlibGVu KSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKLQlt aWJbMl0gPSAoc2l6ZV90KWFyZW5hX2luZDsKLQl1aW50NjRfdCBucHVyZ2UgPSAwOwotCXNpemVf dCBzeiA9IHNpemVvZihucHVyZ2UpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1p YmxlbiwgKHZvaWQgKikmbnB1cmdlLCAmc3osIE5VTEwsIDApLAotCSAgICBjb25maWdfc3RhdHMg PyAwIDogRU5PRU5ULCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7Ci0JcmV0 dXJuIG5wdXJnZTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50NjRfdAotZ2V0X2FyZW5hX2RpcnR5 X25wdXJnZSh1bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQlkb19lcG9jaCgpOwotCXJldHVybiBnZXRf YXJlbmFfbnB1cmdlX2ltcGwoInN0YXRzLmFyZW5hcy4wLmRpcnR5X25wdXJnZSIsIGFyZW5hX2lu ZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWludDY0X3QKLWdldF9hcmVuYV9kaXJ0eV9wdXJnZWQo dW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JZG9fZXBvY2goKTsKLQlyZXR1cm4gZ2V0X2FyZW5hX25w dXJnZV9pbXBsKCJzdGF0cy5hcmVuYXMuMC5kaXJ0eV9wdXJnZWQiLCBhcmVuYV9pbmQpOwotfQot Ci1zdGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1nZXRfYXJlbmFfbXV6enlfbnB1cmdlKHVuc2lnbmVk IGFyZW5hX2luZCkgewotCWRvX2Vwb2NoKCk7Ci0JcmV0dXJuIGdldF9hcmVuYV9ucHVyZ2VfaW1w bCgic3RhdHMuYXJlbmFzLjAubXV6enlfbnB1cmdlIiwgYXJlbmFfaW5kKTsKLX0KLQotc3RhdGlj IGlubGluZSB1aW50NjRfdAotZ2V0X2FyZW5hX25wdXJnZSh1bnNpZ25lZCBhcmVuYV9pbmQpIHsK LQlkb19lcG9jaCgpOwotCXJldHVybiBnZXRfYXJlbmFfbnB1cmdlX2ltcGwoInN0YXRzLmFyZW5h cy4wLmRpcnR5X25wdXJnZSIsIGFyZW5hX2luZCkgKwotCSAgICBnZXRfYXJlbmFfbnB1cmdlX2lt cGwoInN0YXRzLmFyZW5hcy4wLm11enp5X25wdXJnZSIsIGFyZW5hX2luZCk7Ci19Ci0KLXN0YXRp YyBpbmxpbmUgc2l6ZV90Ci1nZXRfYXJlbmFfcGRpcnR5KHVuc2lnbmVkIGFyZW5hX2luZCkgewot CWRvX2Vwb2NoKCk7Ci0Jc2l6ZV90IG1pYls0XTsKLQlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1p Yikvc2l6ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigic3RhdHMu YXJlbmFzLjAucGRpcnR5IiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFs bGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKLQltaWJbMl0gPSAoc2l6ZV90KWFyZW5hX2luZDsK LQlzaXplX3QgcGRpcnR5OwotCXNpemVfdCBzeiA9IHNpemVvZihwZGlydHkpOwotCWV4cGVjdF9k X2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmcGRpcnR5LCAmc3osIE5VTEws IDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7Ci0JcmV0 dXJuIHBkaXJ0eTsKLX0KLQotc3RhdGljIGlubGluZSBzaXplX3QKLWdldF9hcmVuYV9wbXV6enko dW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JZG9fZXBvY2goKTsKLQlzaXplX3QgbWliWzRdOwotCXNp emVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcSht YWxsY3RsbmFtZXRvbWliKCJzdGF0cy5hcmVuYXMuMC5wbXV6enkiLCBtaWIsICZtaWJsZW4pLCAw LAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwotCW1pYlsy XSA9IChzaXplX3QpYXJlbmFfaW5kOwotCXNpemVfdCBwbXV6enk7Ci0Jc2l6ZV90IHN6ID0gc2l6 ZW9mKHBtdXp6eSk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9p ZCAqKSZwbXV6enksICZzeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxi eW1pYigpIGZhaWx1cmUiKTsKLQlyZXR1cm4gcG11enp5OwotfQotCi1zdGF0aWMgaW5saW5lIHZv aWQgKgotZG9fbWFsbG9jeChzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKSB7Ci0Jdm9pZCAqcCA9IG1h bGxvY3goc2l6ZSwgZmxhZ3MpOwotCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQg bWFsbG9jeCgpIGZhaWx1cmUiKTsKLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk Ci1nZW5lcmF0ZV9kaXJ0eSh1bnNpZ25lZCBhcmVuYV9pbmQsIHNpemVfdCBzaXplKSB7Ci0JaW50 IGZsYWdzID0gTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORTsK LQl2b2lkICpwID0gZG9fbWFsbG9jeChzaXplLCBmbGFncyk7Ci0JZGFsbG9jeChwLCBmbGFncyk7 Ci19Ci0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L2luY2x1ZGUvdGVzdC9iZW5jaC5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvYmVuY2guaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDM5N2M5NC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9iZW5jaC5oCisrKyAvZGV2L251bGwK QEAgLTEsNjAgKzAsMCBAQAotc3RhdGljIGlubGluZSB2b2lkCi10aW1lX2Z1bmModGltZWRlbHRh X3QgKnRpbWVyLCB1aW50NjRfdCBud2FybXVwLCB1aW50NjRfdCBuaXRlciwKLSAgICB2b2lkICgq ZnVuYykodm9pZCkpIHsKLQl1aW50NjRfdCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG53YXJtdXA7 IGkrKykgewotCQlmdW5jKCk7Ci0JfQotCXRpbWVyX3N0YXJ0KHRpbWVyKTsKLQlmb3IgKGkgPSAw OyBpIDwgbml0ZXI7IGkrKykgewotCQlmdW5jKCk7Ci0JfQotCXRpbWVyX3N0b3AodGltZXIpOwot fQotCi0jZGVmaW5lIEZNVF9OU0VDU19CVUZfU0laRSAxMDAKLS8qIFByaW50IG5hbm9zZWNvbmRz IC8gaXRlciBpbnRvIHRoZSBidWZmZXIgImJ1ZiIuICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZt dF9uc2Vjcyh1aW50NjRfdCB1c2VjLCB1aW50NjRfdCBpdGVycywgY2hhciAqYnVmKSB7Ci0JdWlu dDY0X3QgbnNlYyA9IHVzZWMgKiAxMDAwOwotCS8qIFdlJ2xsIGRpc3BsYXkgMyBkaWdpdHMgYWZ0 ZXIgdGhlIGRlY2ltYWwgcG9pbnQuICovCi0JdWludDY0X3QgbnNlYzEwMDAgPSBuc2VjICogMTAw MDsKLQl1aW50NjRfdCBuc2Vjc19wZXJfaXRlcjEwMDAgPSBuc2VjMTAwMCAvIGl0ZXJzOwotCXVp bnQ2NF90IGludHBhcnQgPSBuc2Vjc19wZXJfaXRlcjEwMDAgLyAxMDAwOwotCXVpbnQ2NF90IGZy YWNwYXJ0ID0gbnNlY3NfcGVyX2l0ZXIxMDAwICUgMTAwMDsKLQltYWxsb2Nfc25wcmludGYoYnVm LCBGTVRfTlNFQ1NfQlVGX1NJWkUsICIlIkZNVHU2NCIuJTAzIkZNVHU2NCwgaW50cGFydCwKLQkg ICAgZnJhY3BhcnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNvbXBhcmVfZnVuY3ModWlu dDY0X3Qgbndhcm11cCwgdWludDY0X3Qgbml0ZXIsIGNvbnN0IGNoYXIgKm5hbWVfYSwKLSAgICB2 b2lkICgqZnVuY19hKSwgY29uc3QgY2hhciAqbmFtZV9iLCB2b2lkICgqZnVuY19iKSkgewotCXRp bWVkZWx0YV90IHRpbWVyX2EsIHRpbWVyX2I7Ci0JY2hhciByYXRpb19idWZbNl07Ci0Jdm9pZCAq cDsKLQotCXAgPSBtYWxsb2N4KDEsIDApOwotCWlmIChwID09IE5VTEwpIHsKLQkJdGVzdF9mYWls KCJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7Ci0JCXJldHVybjsKLQl9Ci0KLQl0aW1l X2Z1bmMoJnRpbWVyX2EsIG53YXJtdXAsIG5pdGVyLCBmdW5jX2EpOwotCXRpbWVfZnVuYygmdGlt ZXJfYiwgbndhcm11cCwgbml0ZXIsIGZ1bmNfYik7Ci0KLQl1aW50NjRfdCB1c2VjX2EgPSB0aW1l cl91c2VjKCZ0aW1lcl9hKTsKLQljaGFyIGJ1Zl9hW0ZNVF9OU0VDU19CVUZfU0laRV07Ci0JZm10 X25zZWNzKHVzZWNfYSwgbml0ZXIsIGJ1Zl9hKTsKLQotCXVpbnQ2NF90IHVzZWNfYiA9IHRpbWVy X3VzZWMoJnRpbWVyX2IpOwotCWNoYXIgYnVmX2JbRk1UX05TRUNTX0JVRl9TSVpFXTsKLQlmbXRf bnNlY3ModXNlY19iLCBuaXRlciwgYnVmX2IpOwotCi0JdGltZXJfcmF0aW8oJnRpbWVyX2EsICZ0 aW1lcl9iLCByYXRpb19idWYsIHNpemVvZihyYXRpb19idWYpKTsKLQltYWxsb2NfcHJpbnRmKCIl IkZNVHU2NCIgaXRlcmF0aW9ucywgJXM9JSJGTVR1NjQidXMgKCVzIG5zL2l0ZXIpLCAiCi0JICAg ICIlcz0lIkZNVHU2NCJ1cyAoJXMgbnMvaXRlciksIHJhdGlvPTE6JXNcbiIsCi0JICAgIG5pdGVy LCBuYW1lX2EsIHVzZWNfYSwgYnVmX2EsIG5hbWVfYiwgdXNlY19iLCBidWZfYiwgcmF0aW9fYnVm KTsKLQotCWRhbGxvY3gocCwgMCk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvYmd0aGQuaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2JndGhkLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYTIzOTUuLjAwMDAwMDAKLS0tIGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvYmd0 aGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0gKiBTaGFyZWQgdXRpbGl0 eSBmb3IgY2hlY2tpbmcgaWYgYmFja2dyb3VuZF90aHJlYWQgaXMgZW5hYmxlZCwgd2hpY2ggYWZm ZWN0cwotICogdGhlIHB1cmdpbmcgYmVoYXZpb3IgYW5kIGFzc3VtcHRpb25zIGluIHNvbWUgdGVz dHMuCi0gKi8KLQotc3RhdGljIGlubGluZSBib29sCi1pc19iYWNrZ3JvdW5kX3RocmVhZF9lbmFi bGVkKHZvaWQpIHsKLQlib29sIGVuYWJsZWQ7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKGJvb2wpOwot CWludCByZXQgPSBtYWxsY3RsKCJiYWNrZ3JvdW5kX3RocmVhZCIsICh2b2lkICopJmVuYWJsZWQs ICZzeiwgTlVMTCwwKTsKLQlpZiAocmV0ID09IEVOT0VOVCkgewotCQlyZXR1cm4gZmFsc2U7Ci0J fQotCWFzc2VydF9kX2VxKHJldCwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBlcnJvciIpOwotCi0J cmV0dXJuIGVuYWJsZWQ7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvYnRhbGxvYy5oIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvYnRhbGxvYy5oCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjM0NTk5Li4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2J0YWxs b2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qIGJ0YWxsb2MoKSBwcm92aWRl cyBhIG1lY2hhbmlzbSBmb3IgYWxsb2NhdGluZyB2aWEgcGVybXV0ZWQgYmFja3RyYWNlcy4gKi8K LXZvaWQJKmJ0YWxsb2Moc2l6ZV90IHNpemUsIHVuc2lnbmVkIGJpdHMpOwotCi0jZGVmaW5lIGJ0 YWxsb2Nfbl9wcm90byhuKQkJCQkJCVwKLXZvaWQJKmJ0YWxsb2NfIyNuKHNpemVfdCBzaXplLCB1 bnNpZ25lZCBiaXRzKTsKLWJ0YWxsb2Nfbl9wcm90bygwKQotYnRhbGxvY19uX3Byb3RvKDEpCi0K LSNkZWZpbmUgYnRhbGxvY19uX2dlbihuKQkJCQkJCVwKLXZvaWQgKgkJCQkJCQkJCVwKLWJ0YWxs b2NfIyNuKHNpemVfdCBzaXplLCB1bnNpZ25lZCBiaXRzKSB7CQkJCVwKLQl2b2lkICpwOwkJCQkJ CQlcCi0JCQkJCQkJCQlcCi0JaWYgKGJpdHMgPT0gMCkgewkJCQkJCVwKLQkJcCA9IG1hbGxvY3go c2l6ZSwgMCk7CQkJCQlcCi0JfSBlbHNlIHsJCQkJCQkJXAotCQlzd2l0Y2ggKGJpdHMgJiAweDFV KSB7CQkJCQlcCi0JCWNhc2UgMDoJCQkJCQkJXAotCQkJcCA9IChidGFsbG9jXzAoc2l6ZSwgYml0 cyA+PiAxKSk7CQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgMToJCQkJCQkJXAotCQkJcCA9 IChidGFsbG9jXzEoc2l6ZSwgYml0cyA+PiAxKSk7CQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWRl ZmF1bHQ6IG5vdF9yZWFjaGVkKCk7CQkJCQlcCi0JCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLQkv KiBJbnRlbnRpb25hbGx5IHNhYm90YWdlIHRhaWwgY2FsbCBvcHRpbWl6YXRpb24uICovCQlcCi0J ZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwkJ XAotCXJldHVybiBwOwkJCQkJCQlcCi19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvZXh0ZW50X2hvb2tzLmggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9l eHRlbnRfaG9va3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFkMGE0Ni4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2lu Y2x1ZGUvdGVzdC9leHRlbnRfaG9va3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBA Ci0vKgotICogQm9pbGVycGxhdGUgY29kZSB1c2VkIGZvciB0ZXN0aW5nIGV4dGVudCBob29rcyB2 aWEgaW50ZXJjZXB0aW9uIGFuZAotICogcGFzc3Rocm91Z2guCi0gKi8KLQotc3RhdGljIHZvaWQJ KmV4dGVudF9hbGxvY19ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKm5l d19hZGRyLAotICAgIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50LCBib29sICp6ZXJvLCBi b29sICpjb21taXQsCi0gICAgdW5zaWduZWQgYXJlbmFfaW5kKTsKLXN0YXRpYyBib29sCWV4dGVu dF9kYWxsb2NfaG9vayhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyLAot ICAgIHNpemVfdCBzaXplLCBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKLXN0 YXRpYyB2b2lkCWV4dGVudF9kZXN0cm95X2hvb2soZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29r cywgdm9pZCAqYWRkciwKLSAgICBzaXplX3Qgc2l6ZSwgYm9vbCBjb21taXR0ZWQsIHVuc2lnbmVk IGFyZW5hX2luZCk7Ci1zdGF0aWMgYm9vbAlleHRlbnRfY29tbWl0X2hvb2soZXh0ZW50X2hvb2tz X3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwKLSAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9m ZnNldCwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKLXN0YXRpYyBib29sCWV4 dGVudF9kZWNvbW1pdF9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFk ZHIsCi0gICAgc2l6ZV90IHNpemUsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2ln bmVkIGFyZW5hX2luZCk7Ci1zdGF0aWMgYm9vbAlleHRlbnRfcHVyZ2VfbGF6eV9ob29rKGV4dGVu dF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsCi0gICAgc2l6ZV90IHNpemUsIHNp emVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGFyZW5hX2luZCk7Ci1zdGF0aWMg Ym9vbAlleHRlbnRfcHVyZ2VfZm9yY2VkX2hvb2soZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29r cywKLSAgICB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxl bmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKTsKLXN0YXRpYyBib29sCWV4dGVudF9zcGxpdF9ob29r KGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsCi0gICAgc2l6ZV90IHNp emUsIHNpemVfdCBzaXplX2EsIHNpemVfdCBzaXplX2IsIGJvb2wgY29tbWl0dGVkLAotICAgIHVu c2lnbmVkIGFyZW5hX2luZCk7Ci1zdGF0aWMgYm9vbAlleHRlbnRfbWVyZ2VfaG9vayhleHRlbnRf aG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyX2EsCi0gICAgc2l6ZV90IHNpemVfYSwg dm9pZCAqYWRkcl9iLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwKLSAgICB1bnNpZ25l ZCBhcmVuYV9pbmQpOwotCi1zdGF0aWMgZXh0ZW50X2hvb2tzX3QgKmRlZmF1bHRfaG9va3M7Ci1z dGF0aWMgZXh0ZW50X2hvb2tzX3QgaG9va3MgPSB7Ci0JZXh0ZW50X2FsbG9jX2hvb2ssCi0JZXh0 ZW50X2RhbGxvY19ob29rLAotCWV4dGVudF9kZXN0cm95X2hvb2ssCi0JZXh0ZW50X2NvbW1pdF9o b29rLAotCWV4dGVudF9kZWNvbW1pdF9ob29rLAotCWV4dGVudF9wdXJnZV9sYXp5X2hvb2ssCi0J ZXh0ZW50X3B1cmdlX2ZvcmNlZF9ob29rLAotCWV4dGVudF9zcGxpdF9ob29rLAotCWV4dGVudF9t ZXJnZV9ob29rCi19OwotCi0vKiBDb250cm9sIHdoZXRoZXIgaG9vayBmdW5jdGlvbnMgcGFzcyBj YWxscyB0aHJvdWdoIHRvIGRlZmF1bHQgaG9va3MuICovCi1zdGF0aWMgYm9vbCB0cnlfYWxsb2Mg PSB0cnVlOwotc3RhdGljIGJvb2wgdHJ5X2RhbGxvYyA9IHRydWU7Ci1zdGF0aWMgYm9vbCB0cnlf ZGVzdHJveSA9IHRydWU7Ci1zdGF0aWMgYm9vbCB0cnlfY29tbWl0ID0gdHJ1ZTsKLXN0YXRpYyBi b29sIHRyeV9kZWNvbW1pdCA9IHRydWU7Ci1zdGF0aWMgYm9vbCB0cnlfcHVyZ2VfbGF6eSA9IHRy dWU7Ci1zdGF0aWMgYm9vbCB0cnlfcHVyZ2VfZm9yY2VkID0gdHJ1ZTsKLXN0YXRpYyBib29sIHRy eV9zcGxpdCA9IHRydWU7Ci1zdGF0aWMgYm9vbCB0cnlfbWVyZ2UgPSB0cnVlOwotCi0vKiBTZXQg dG8gZmFsc2UgcHJpb3IgdG8gb3BlcmF0aW9ucywgdGhlbiBpbnRyb3NwZWN0IGFmdGVyIG9wZXJh dGlvbnMuICovCi1zdGF0aWMgYm9vbCBjYWxsZWRfYWxsb2M7Ci1zdGF0aWMgYm9vbCBjYWxsZWRf ZGFsbG9jOwotc3RhdGljIGJvb2wgY2FsbGVkX2Rlc3Ryb3k7Ci1zdGF0aWMgYm9vbCBjYWxsZWRf Y29tbWl0Owotc3RhdGljIGJvb2wgY2FsbGVkX2RlY29tbWl0Owotc3RhdGljIGJvb2wgY2FsbGVk X3B1cmdlX2xhenk7Ci1zdGF0aWMgYm9vbCBjYWxsZWRfcHVyZ2VfZm9yY2VkOwotc3RhdGljIGJv b2wgY2FsbGVkX3NwbGl0Owotc3RhdGljIGJvb2wgY2FsbGVkX21lcmdlOwotCi0vKiBTZXQgdG8g ZmFsc2UgcHJpb3IgdG8gb3BlcmF0aW9ucywgdGhlbiBpbnRyb3NwZWN0IGFmdGVyIG9wZXJhdGlv bnMuICovCi1zdGF0aWMgYm9vbCBkaWRfYWxsb2M7Ci1zdGF0aWMgYm9vbCBkaWRfZGFsbG9jOwot c3RhdGljIGJvb2wgZGlkX2Rlc3Ryb3k7Ci1zdGF0aWMgYm9vbCBkaWRfY29tbWl0Owotc3RhdGlj IGJvb2wgZGlkX2RlY29tbWl0Owotc3RhdGljIGJvb2wgZGlkX3B1cmdlX2xhenk7Ci1zdGF0aWMg Ym9vbCBkaWRfcHVyZ2VfZm9yY2VkOwotc3RhdGljIGJvb2wgZGlkX3NwbGl0Owotc3RhdGljIGJv b2wgZGlkX21lcmdlOwotCi0jaWYgMAotIyAgZGVmaW5lIFRSQUNFX0hPT0soZm10LCAuLi4pIG1h bGxvY19wcmludGYoZm10LCBfX1ZBX0FSR1NfXykKLSNlbHNlCi0jICBkZWZpbmUgVFJBQ0VfSE9P SyhmbXQsIC4uLikKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCAqCi1leHRlbnRfYWxsb2NfaG9vayhl eHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICpuZXdfYWRkciwgc2l6ZV90IHNpemUs Ci0gICAgc2l6ZV90IGFsaWdubWVudCwgYm9vbCAqemVybywgYm9vbCAqY29tbWl0LCB1bnNpZ25l ZCBhcmVuYV9pbmQpIHsKLQl2b2lkICpyZXQ7Ci0KLQlUUkFDRV9IT09LKCIlcyhleHRlbnRfaG9v a3M9JXAsIG5ld19hZGRyPSVwLCBzaXplPSV6dSwgYWxpZ25tZW50PSV6dSwgIgotCSAgICAiKnpl cm89JXMsICpjb21taXQ9JXMsIGFyZW5hX2luZD0ldSlcbiIsIF9fZnVuY19fLCBleHRlbnRfaG9v a3MsCi0JICAgIG5ld19hZGRyLCBzaXplLCBhbGlnbm1lbnQsICp6ZXJvID8gICJ0cnVlIiA6ICJm YWxzZSIsICpjb21taXQgPwotCSAgICAidHJ1ZSIgOiAiZmFsc2UiLCBhcmVuYV9pbmQpOwotCWV4 cGVjdF9wdHJfZXEoZXh0ZW50X2hvb2tzLCAmaG9va3MsCi0JICAgICJleHRlbnRfaG9va3Mgc2hv dWxkIGJlIHNhbWUgYXMgcG9pbnRlciB1c2VkIHRvIHNldCBob29rcyIpOwotCWV4cGVjdF9wdHJf ZXEoZXh0ZW50X2hvb2tzLT5hbGxvYywgZXh0ZW50X2FsbG9jX2hvb2ssCi0JICAgICJXcm9uZyBo b29rIGZ1bmN0aW9uIik7Ci0JY2FsbGVkX2FsbG9jID0gdHJ1ZTsKLQlpZiAoIXRyeV9hbGxvYykg ewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0ID0gZGVmYXVsdF9ob29rcy0+YWxsb2MoZGVmYXVs dF9ob29rcywgbmV3X2FkZHIsIHNpemUsIGFsaWdubWVudCwKLQkgICAgemVybywgY29tbWl0LCAw KTsKLQlkaWRfYWxsb2MgPSAocmV0ICE9IE5VTEwpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBib29sCi1leHRlbnRfZGFsbG9jX2hvb2soZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywg dm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gICAgYm9vbCBjb21taXR0ZWQsIHVuc2lnbmVkIGFy ZW5hX2luZCkgewotCWJvb2wgZXJyOwotCi0JVFJBQ0VfSE9PSygiJXMoZXh0ZW50X2hvb2tzPSVw LCBhZGRyPSVwLCBzaXplPSV6dSwgY29tbWl0dGVkPSVzLCAiCi0JICAgICJhcmVuYV9pbmQ9JXUp XG4iLCBfX2Z1bmNfXywgZXh0ZW50X2hvb2tzLCBhZGRyLCBzaXplLCBjb21taXR0ZWQgPwotCSAg ICAidHJ1ZSIgOiAiZmFsc2UiLCBhcmVuYV9pbmQpOwotCWV4cGVjdF9wdHJfZXEoZXh0ZW50X2hv b2tzLCAmaG9va3MsCi0JICAgICJleHRlbnRfaG9va3Mgc2hvdWxkIGJlIHNhbWUgYXMgcG9pbnRl ciB1c2VkIHRvIHNldCBob29rcyIpOwotCWV4cGVjdF9wdHJfZXEoZXh0ZW50X2hvb2tzLT5kYWxs b2MsIGV4dGVudF9kYWxsb2NfaG9vaywKLQkgICAgIldyb25nIGhvb2sgZnVuY3Rpb24iKTsKLQlj YWxsZWRfZGFsbG9jID0gdHJ1ZTsKLQlpZiAoIXRyeV9kYWxsb2MpIHsKLQkJcmV0dXJuIHRydWU7 Ci0JfQotCWVyciA9IGRlZmF1bHRfaG9va3MtPmRhbGxvYyhkZWZhdWx0X2hvb2tzLCBhZGRyLCBz aXplLCBjb21taXR0ZWQsIDApOwotCWRpZF9kYWxsb2MgPSAhZXJyOwotCXJldHVybiBlcnI7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1leHRlbnRfZGVzdHJveV9ob29rKGV4dGVudF9ob29rc190ICpleHRl bnRfaG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotICAgIGJvb2wgY29tbWl0dGVkLCB1 bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQlUUkFDRV9IT09LKCIlcyhleHRlbnRfaG9va3M9JXAsIGFk ZHI9JXAsIHNpemU9JXp1LCBjb21taXR0ZWQ9JXMsICIKLQkgICAgImFyZW5hX2luZD0ldSlcbiIs IF9fZnVuY19fLCBleHRlbnRfaG9va3MsIGFkZHIsIHNpemUsIGNvbW1pdHRlZCA/Ci0JICAgICJ0 cnVlIiA6ICJmYWxzZSIsIGFyZW5hX2luZCk7Ci0JZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3Ms ICZob29rcywKLQkgICAgImV4dGVudF9ob29rcyBzaG91bGQgYmUgc2FtZSBhcyBwb2ludGVyIHVz ZWQgdG8gc2V0IGhvb2tzIik7Ci0JZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MtPmRlc3Ryb3ks IGV4dGVudF9kZXN0cm95X2hvb2ssCi0JICAgICJXcm9uZyBob29rIGZ1bmN0aW9uIik7Ci0JY2Fs bGVkX2Rlc3Ryb3kgPSB0cnVlOwotCWlmICghdHJ5X2Rlc3Ryb3kpIHsKLQkJcmV0dXJuOwotCX0K LQlkZWZhdWx0X2hvb2tzLT5kZXN0cm95KGRlZmF1bHRfaG9va3MsIGFkZHIsIHNpemUsIGNvbW1p dHRlZCwgMCk7Ci0JZGlkX2Rlc3Ryb3kgPSB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotZXh0ZW50 X2NvbW1pdF9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHIsIHNp emVfdCBzaXplLAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVuc2lnbmVkIGFy ZW5hX2luZCkgewotCWJvb2wgZXJyOwotCi0JVFJBQ0VfSE9PSygiJXMoZXh0ZW50X2hvb2tzPSVw LCBhZGRyPSVwLCBzaXplPSV6dSwgb2Zmc2V0PSV6dSwgIgotCSAgICAibGVuZ3RoPSV6dSwgYXJl bmFfaW5kPSV1KVxuIiwgX19mdW5jX18sIGV4dGVudF9ob29rcywgYWRkciwgc2l6ZSwKLQkgICAg b2Zmc2V0LCBsZW5ndGgsIGFyZW5hX2luZCk7Ci0JZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3Ms ICZob29rcywKLQkgICAgImV4dGVudF9ob29rcyBzaG91bGQgYmUgc2FtZSBhcyBwb2ludGVyIHVz ZWQgdG8gc2V0IGhvb2tzIik7Ci0JZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MtPmNvbW1pdCwg ZXh0ZW50X2NvbW1pdF9ob29rLAotCSAgICAiV3JvbmcgaG9vayBmdW5jdGlvbiIpOwotCWNhbGxl ZF9jb21taXQgPSB0cnVlOwotCWlmICghdHJ5X2NvbW1pdCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9 Ci0JZXJyID0gZGVmYXVsdF9ob29rcy0+Y29tbWl0KGRlZmF1bHRfaG9va3MsIGFkZHIsIHNpemUs IG9mZnNldCwgbGVuZ3RoLAotCSAgICAwKTsKLQlkaWRfY29tbWl0ID0gIWVycjsKLQlyZXR1cm4g ZXJyOwotfQotCi1zdGF0aWMgYm9vbAotZXh0ZW50X2RlY29tbWl0X2hvb2soZXh0ZW50X2hvb2tz X3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IG9m ZnNldCwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JYm9vbCBlcnI7Ci0K LQlUUkFDRV9IT09LKCIlcyhleHRlbnRfaG9va3M9JXAsIGFkZHI9JXAsIHNpemU9JXp1LCBvZmZz ZXQ9JXp1LCAiCi0JICAgICJsZW5ndGg9JXp1LCBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywg ZXh0ZW50X2hvb2tzLCBhZGRyLCBzaXplLAotCSAgICBvZmZzZXQsIGxlbmd0aCwgYXJlbmFfaW5k KTsKLQlleHBlY3RfcHRyX2VxKGV4dGVudF9ob29rcywgJmhvb2tzLAotCSAgICAiZXh0ZW50X2hv b2tzIHNob3VsZCBiZSBzYW1lIGFzIHBvaW50ZXIgdXNlZCB0byBzZXQgaG9va3MiKTsKLQlleHBl Y3RfcHRyX2VxKGV4dGVudF9ob29rcy0+ZGVjb21taXQsIGV4dGVudF9kZWNvbW1pdF9ob29rLAot CSAgICAiV3JvbmcgaG9vayBmdW5jdGlvbiIpOwotCWNhbGxlZF9kZWNvbW1pdCA9IHRydWU7Ci0J aWYgKCF0cnlfZGVjb21taXQpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCWVyciA9IGRlZmF1bHRf aG9va3MtPmRlY29tbWl0KGRlZmF1bHRfaG9va3MsIGFkZHIsIHNpemUsIG9mZnNldCwgbGVuZ3Ro LAotCSAgICAwKTsKLQlkaWRfZGVjb21taXQgPSAhZXJyOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0 YXRpYyBib29sCi1leHRlbnRfcHVyZ2VfbGF6eV9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRf aG9va3MsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVf dCBsZW5ndGgsIHVuc2lnbmVkIGFyZW5hX2luZCkgewotCWJvb2wgZXJyOwotCi0JVFJBQ0VfSE9P SygiJXMoZXh0ZW50X2hvb2tzPSVwLCBhZGRyPSVwLCBzaXplPSV6dSwgb2Zmc2V0PSV6dSwgIgot CSAgICAibGVuZ3RoPSV6dSBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywgZXh0ZW50X2hvb2tz LCBhZGRyLCBzaXplLAotCSAgICBvZmZzZXQsIGxlbmd0aCwgYXJlbmFfaW5kKTsKLQlleHBlY3Rf cHRyX2VxKGV4dGVudF9ob29rcywgJmhvb2tzLAotCSAgICAiZXh0ZW50X2hvb2tzIHNob3VsZCBi ZSBzYW1lIGFzIHBvaW50ZXIgdXNlZCB0byBzZXQgaG9va3MiKTsKLQlleHBlY3RfcHRyX2VxKGV4 dGVudF9ob29rcy0+cHVyZ2VfbGF6eSwgZXh0ZW50X3B1cmdlX2xhenlfaG9vaywKLQkgICAgIldy b25nIGhvb2sgZnVuY3Rpb24iKTsKLQljYWxsZWRfcHVyZ2VfbGF6eSA9IHRydWU7Ci0JaWYgKCF0 cnlfcHVyZ2VfbGF6eSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JZXJyID0gZGVmYXVsdF9ob29r cy0+cHVyZ2VfbGF6eSA9PSBOVUxMIHx8Ci0JICAgIGRlZmF1bHRfaG9va3MtPnB1cmdlX2xhenko ZGVmYXVsdF9ob29rcywgYWRkciwgc2l6ZSwgb2Zmc2V0LCBsZW5ndGgsCi0JICAgIDApOwotCWRp ZF9wdXJnZV9sYXp5ID0gIWVycjsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgYm9vbAotZXh0 ZW50X3B1cmdlX2ZvcmNlZF9ob29rKGV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MsIHZvaWQg KmFkZHIsIHNpemVfdCBzaXplLAotICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgsIHVu c2lnbmVkIGFyZW5hX2luZCkgewotCWJvb2wgZXJyOwotCi0JVFJBQ0VfSE9PSygiJXMoZXh0ZW50 X2hvb2tzPSVwLCBhZGRyPSVwLCBzaXplPSV6dSwgb2Zmc2V0PSV6dSwgIgotCSAgICAibGVuZ3Ro PSV6dSBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywgZXh0ZW50X2hvb2tzLCBhZGRyLCBzaXpl LAotCSAgICBvZmZzZXQsIGxlbmd0aCwgYXJlbmFfaW5kKTsKLQlleHBlY3RfcHRyX2VxKGV4dGVu dF9ob29rcywgJmhvb2tzLAotCSAgICAiZXh0ZW50X2hvb2tzIHNob3VsZCBiZSBzYW1lIGFzIHBv aW50ZXIgdXNlZCB0byBzZXQgaG9va3MiKTsKLQlleHBlY3RfcHRyX2VxKGV4dGVudF9ob29rcy0+ cHVyZ2VfZm9yY2VkLCBleHRlbnRfcHVyZ2VfZm9yY2VkX2hvb2ssCi0JICAgICJXcm9uZyBob29r IGZ1bmN0aW9uIik7Ci0JY2FsbGVkX3B1cmdlX2ZvcmNlZCA9IHRydWU7Ci0JaWYgKCF0cnlfcHVy Z2VfZm9yY2VkKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQllcnIgPSBkZWZhdWx0X2hvb2tzLT5w dXJnZV9mb3JjZWQgPT0gTlVMTCB8fAotCSAgICBkZWZhdWx0X2hvb2tzLT5wdXJnZV9mb3JjZWQo ZGVmYXVsdF9ob29rcywgYWRkciwgc2l6ZSwgb2Zmc2V0LAotCSAgICBsZW5ndGgsIDApOwotCWRp ZF9wdXJnZV9mb3JjZWQgPSAhZXJyOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBib29sCi1l eHRlbnRfc3BsaXRfaG9vayhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRy LCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3Qgc2l6ZV9hLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNv bW1pdHRlZCwgdW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0JYm9vbCBlcnI7Ci0KLQlUUkFDRV9IT09L KCIlcyhleHRlbnRfaG9va3M9JXAsIGFkZHI9JXAsIHNpemU9JXp1LCBzaXplX2E9JXp1LCAiCi0J ICAgICJzaXplX2I9JXp1LCBjb21taXR0ZWQ9JXMsIGFyZW5hX2luZD0ldSlcbiIsIF9fZnVuY19f LCBleHRlbnRfaG9va3MsCi0JICAgIGFkZHIsIHNpemUsIHNpemVfYSwgc2l6ZV9iLCBjb21taXR0 ZWQgPyAidHJ1ZSIgOiAiZmFsc2UiLAotCSAgICBhcmVuYV9pbmQpOwotCWV4cGVjdF9wdHJfZXEo ZXh0ZW50X2hvb2tzLCAmaG9va3MsCi0JICAgICJleHRlbnRfaG9va3Mgc2hvdWxkIGJlIHNhbWUg YXMgcG9pbnRlciB1c2VkIHRvIHNldCBob29rcyIpOwotCWV4cGVjdF9wdHJfZXEoZXh0ZW50X2hv b2tzLT5zcGxpdCwgZXh0ZW50X3NwbGl0X2hvb2ssCi0JICAgICJXcm9uZyBob29rIGZ1bmN0aW9u Iik7Ci0JY2FsbGVkX3NwbGl0ID0gdHJ1ZTsKLQlpZiAoIXRyeV9zcGxpdCkgewotCQlyZXR1cm4g dHJ1ZTsKLQl9Ci0JZXJyID0gKGRlZmF1bHRfaG9va3MtPnNwbGl0ID09IE5VTEwgfHwKLQkgICAg ZGVmYXVsdF9ob29rcy0+c3BsaXQoZGVmYXVsdF9ob29rcywgYWRkciwgc2l6ZSwgc2l6ZV9hLCBz aXplX2IsCi0JICAgIGNvbW1pdHRlZCwgMCkpOwotCWRpZF9zcGxpdCA9ICFlcnI7Ci0JcmV0dXJu IGVycjsKLX0KLQotc3RhdGljIGJvb2wKLWV4dGVudF9tZXJnZV9ob29rKGV4dGVudF9ob29rc190 ICpleHRlbnRfaG9va3MsIHZvaWQgKmFkZHJfYSwgc2l6ZV90IHNpemVfYSwKLSAgICB2b2lkICph ZGRyX2IsIHNpemVfdCBzaXplX2IsIGJvb2wgY29tbWl0dGVkLCB1bnNpZ25lZCBhcmVuYV9pbmQp IHsKLQlib29sIGVycjsKLQotCVRSQUNFX0hPT0soIiVzKGV4dGVudF9ob29rcz0lcCwgYWRkcl9h PSVwLCBzaXplX2E9JXp1LCBhZGRyX2I9JXAgIgotCSAgICAic2l6ZV9iPSV6dSwgY29tbWl0dGVk PSVzLCBhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywgZXh0ZW50X2hvb2tzLAotCSAgICBhZGRy X2EsIHNpemVfYSwgYWRkcl9iLCBzaXplX2IsIGNvbW1pdHRlZCA/ICJ0cnVlIiA6ICJmYWxzZSIs Ci0JICAgIGFyZW5hX2luZCk7Ci0JZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MsICZob29rcywK LQkgICAgImV4dGVudF9ob29rcyBzaG91bGQgYmUgc2FtZSBhcyBwb2ludGVyIHVzZWQgdG8gc2V0 IGhvb2tzIik7Ci0JZXhwZWN0X3B0cl9lcShleHRlbnRfaG9va3MtPm1lcmdlLCBleHRlbnRfbWVy Z2VfaG9vaywKLQkgICAgIldyb25nIGhvb2sgZnVuY3Rpb24iKTsKLQlleHBlY3RfcHRyX2VxKCh2 b2lkICopKCh1aW50cHRyX3QpYWRkcl9hICsgc2l6ZV9hKSwgYWRkcl9iLAotCSAgICAiRXh0ZW50 cyBub3QgbWVyZ2VhYmxlIik7Ci0JY2FsbGVkX21lcmdlID0gdHJ1ZTsKLQlpZiAoIXRyeV9tZXJn ZSkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JZXJyID0gKGRlZmF1bHRfaG9va3MtPm1lcmdlID09 IE5VTEwgfHwKLQkgICAgZGVmYXVsdF9ob29rcy0+bWVyZ2UoZGVmYXVsdF9ob29rcywgYWRkcl9h LCBzaXplX2EsIGFkZHJfYiwgc2l6ZV9iLAotCSAgICBjb21taXR0ZWQsIDApKTsKLQlkaWRfbWVy Z2UgPSAhZXJyOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1leHRlbnRfaG9va3Nf cHJlcCh2b2lkKSB7Ci0Jc2l6ZV90IHN6OwotCi0Jc3ogPSBzaXplb2YoZGVmYXVsdF9ob29rcyk7 Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5leHRlbnRfaG9va3MiLCAodm9pZCAqKSZk ZWZhdWx0X2hvb2tzLCAmc3osCi0JICAgIE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3Rs KCkgZXJyb3IiKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0LmguaW4gYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxv Y190ZXN0LmguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmOGMwZGEuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNs dWRlL3Rlc3QvamVtYWxsb2NfdGVzdC5oLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAg QEAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2luY2x1ZGUg PGxpbWl0cy5oPgotI2lmbmRlZiBTSVpFX1RfTUFYCi0jICBkZWZpbmUgU0laRV9UX01BWAlTSVpF X01BWAotI2VuZGlmCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0j aW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bWF0aC5o PgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmZGVmIF9XSU4zMgotIyAgaW5jbHVkZSAibXN2Y19j b21wYXQvc3RyaW5ncy5oIgotI2VuZGlmCi0KLSNpZmRlZiBfV0lOMzIKLSMgIGluY2x1ZGUgPHdp bmRvd3MuaD4KLSMgIGluY2x1ZGUgIm1zdmNfY29tcGF0L3dpbmRvd3NfZXh0cmEuaCIKLSNlbHNl Ci0jICBpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgInRlc3QvamVtYWxs b2NfdGVzdF9kZWZzLmgiCi0KLSNpZiBkZWZpbmVkKEpFTUFMTE9DX09TQVRPTUlDKQotIyAgaW5j bHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfQUxU SVZFQykgJiYgIWRlZmluZWQoX19BUFBMRV9fKQotIyAgaW5jbHVkZSA8YWx0aXZlYy5oPgotI2Vu ZGlmCi0jaWZkZWYgSEFWRV9TU0UyCi0jICBpbmNsdWRlIDxlbW1pbnRyaW4uaD4KLSNlbmRpZgot Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIEZvciB1bml0IHRlc3RzIGFuZCBhbmFs eXRpY3MgdGVzdHMsIGV4cG9zZSBhbGwgcHVibGljIGFuZCBwcml2YXRlIGludGVyZmFjZXMuCi0g Ki8KLSNpZiBkZWZpbmVkKEpFTUFMTE9DX1VOSVRfVEVTVCkgfHwgZGVmaW5lZCAoSkVNQUxMT0Nf QU5BTFlaRV9URVNUKQotIyAgZGVmaW5lIEpFTUFMTE9DX0pFVAotIyAgZGVmaW5lIEpFTUFMTE9D X01BTkdMRQotIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUu aCIKLSMgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1 ZGVzLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogRm9yIGludGVncmF0aW9u IHRlc3RzLCBleHBvc2UgdGhlIHB1YmxpYyBqZW1hbGxvYyBpbnRlcmZhY2VzLCBidXQgb25seQot ICogZXhwb3NlIHRoZSBtaW5pbXVtIG5lY2Vzc2FyeSBpbnRlcm5hbCB1dGlsaXR5IGNvZGUgKHRv IGF2b2lkIHJlLWltcGxlbWVudGluZwotICogZXNzZW50aWFsbHkgaWRlbnRpY2FsIGNvZGUgd2l0 aGluIHRoZSB0ZXN0IGluZnJhc3RydWN0dXJlKS4KLSAqLwotI2VsaWYgZGVmaW5lZChKRU1BTExP Q19JTlRFR1JBVElPTl9URVNUKSB8fCBcCi0gICAgZGVmaW5lZChKRU1BTExPQ19JTlRFR1JBVElP Tl9DUFBfVEVTVCkKLSMgIGRlZmluZSBKRU1BTExPQ19NQU5HTEUKLSMgIGluY2x1ZGUgImplbWFs bG9jL2plbWFsbG9jQGluc3RhbGxfc3VmZml4QC5oIgotIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfZGVmcy5oIgotIyAgaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfbWFjcm9zLmgiCi0KLXN0YXRpYyBjb25zdCBib29sIGNv bmZpZ19kZWJ1ZyA9Ci0jaWZkZWYgSkVNQUxMT0NfREVCVUcKLSAgICB0cnVlCi0jZWxzZQotICAg IGZhbHNlCi0jZW5kaWYKLSAgICA7Ci0KLSMgIGRlZmluZSBKRU1BTExPQ19OKG4pIEBwcml2YXRl X25hbWVzcGFjZUAjI24KLSMgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3ByaXZhdGVfbmFt ZXNwYWNlLmgiCi0jICBpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC90ZXN0X2hvb2tzLmgiCi0K LS8qIEhlcm1ldGljIGhlYWRlcnMuICovCi0jICBpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9h c3NlcnQuaCIKLSMgIGluY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL21hbGxvY19pby5oIgotIyAg aW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvbnN0aW1lLmgiCi0jICBpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC91dGlsLmgiCi0KLS8qIE5vbi1oZXJtZXRpYyBoZWFkZXJzLiAqLwotIyAgaW5j bHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcXIuaCIKLSMgIGluY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL3FsLmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogRm9yIHN0cmVzcyB0 ZXN0cywgZXhwb3NlIHRoZSBwdWJsaWMgamVtYWxsb2MgaW50ZXJmYWNlcyB3aXRoIG5hbWUgbWFu Z2xpbmcKLSAqIHNvIHRoYXQgdGhleSBjYW4gYmUgdGVzdGVkIGFzIGUuZy4gbWFsbG9jKCkgYW5k IGZyZWUoKS4gIEFsc28gZXhwb3NlIHRoZQotICogcHVibGljIGplbWFsbG9jIGludGVyZmFjZXMg d2l0aCBqZXRfIHByZWZpeGVzLCBzbyB0aGF0IHN0cmVzcyB0ZXN0cyBjYW4gdXNlCi0gKiBhIHNl cGFyYXRlIGFsbG9jYXRvciBmb3IgdGhlaXIgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgotICov Ci0jZWxpZiBkZWZpbmVkKEpFTUFMTE9DX1NUUkVTU19URVNUKQotIyAgaW5jbHVkZSAiamVtYWxs b2MvamVtYWxsb2NAaW5zdGFsbF9zdWZmaXhALmgiCi0KLSMgIGluY2x1ZGUgImplbWFsbG9jL2pl bWFsbG9jX3Byb3Rvc19qZXQuaCIKLQotIyAgZGVmaW5lIEpFTUFMTE9DX0pFVAotIyAgaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfcHJlYW1ibGUuaCIKLSMgIGluY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2luY2x1ZGVzLmgiCi0jICBpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9wdWJsaWNfdW5uYW1lc3BhY2UuaCIKLSMgIHVuZGVmIEpFTUFM TE9DX0pFVAotCi0jICBpbmNsdWRlICJqZW1hbGxvYy9qZW1hbGxvY19yZW5hbWUuaCIKLSMgIGRl ZmluZSBKRU1BTExPQ19NQU5HTEUKLSMgIGlmZGVmIEpFTUFMTE9DX1NUUkVTU19URVNUTElCCi0j ICAgIGluY2x1ZGUgImplbWFsbG9jL2plbWFsbG9jX21hbmdsZV9qZXQuaCIKLSMgIGVsc2UKLSMg ICAgaW5jbHVkZSAiamVtYWxsb2MvamVtYWxsb2NfbWFuZ2xlLmgiCi0jICBlbmRpZgotCi0vKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwotLyoKLSAqIFRoaXMgaGVhZGVyIGRvZXMgZGFuZ2Vyb3VzIHRo aW5ncywgdGhlIGVmZmVjdHMgb2Ygd2hpY2ggb25seSB0ZXN0IGNvZGUKLSAqIHNob3VsZCBiZSBz dWJqZWN0IHRvLgotICovCi0jZWxzZQotIyAgZXJyb3IgIlRoaXMgaGVhZGVyIGNhbm5vdCBiZSBp bmNsdWRlZCBvdXRzaWRlIGEgdGVzdGluZyBjb250ZXh0IgotI2VuZGlmCi0KLS8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCi0vKgotICogQ29tbW9uIHRlc3QgdXRpbGl0aWVzLgotICovCi0jaW5jbHVk ZSAidGVzdC9idGFsbG9jLmgiCi0jaW5jbHVkZSAidGVzdC9tYXRoLmgiCi0jaW5jbHVkZSAidGVz dC9tdHguaCIKLSNpbmNsdWRlICJ0ZXN0L21xLmgiCi0jaW5jbHVkZSAidGVzdC9zbGVlcC5oIgot I2luY2x1ZGUgInRlc3QvdGVzdC5oIgotI2luY2x1ZGUgInRlc3QvdGltZXIuaCIKLSNpbmNsdWRl ICJ0ZXN0L3RoZC5oIgotI2luY2x1ZGUgInRlc3QvYmd0aGQuaCIKLSNkZWZpbmUgTUVYUCAxOTkz NwotI2luY2x1ZGUgInRlc3QvU0ZNVC5oIgotCi0jaWZuZGVmIEpFTUFMTE9DX0hBVkVfTUFMTE9D X1NJWkUKLSNkZWZpbmUgVEVTVF9NQUxMT0NfU0laRSBtYWxsb2NfdXNhYmxlX3NpemUKLSNlbHNl Ci0jZGVmaW5lIFRFU1RfTUFMTE9DX1NJWkUgbWFsbG9jX3NpemUKLSNlbmRpZgotLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KLS8qCi0gKiBEZWZpbmUgYWx3YXlzLWVuYWJsZWQgYXNzZXJ0aW9uIG1h Y3Jvcywgc28gdGhhdCB0ZXN0IGFzc2VydGlvbnMgZXhlY3V0ZSBldmVuCi0gKiBpZiBhc3NlcnRp b25zIGFyZSBkaXNhYmxlZCBpbiB0aGUgbGlicmFyeSBjb2RlLgotICovCi0jdW5kZWYgYXNzZXJ0 Ci0jdW5kZWYgbm90X3JlYWNoZWQKLSN1bmRlZiBub3RfaW1wbGVtZW50ZWQKLSN1bmRlZiBleHBl Y3Rfbm90X2ltcGxlbWVudGVkCi0KLSNkZWZpbmUgYXNzZXJ0KGUpIGRvIHsJCQkJCQkJXAotCWlm ICghKGUpKSB7CQkJCQkJCVwKLQkJbWFsbG9jX3ByaW50ZigJCQkJCQlcCi0JCSAgICAiPGplbWFs bG9jPjogJXM6JWQ6IEZhaWxlZCBhc3NlcnRpb246IFwiJXNcIlxuIiwJXAotCQkgICAgX19GSUxF X18sIF9fTElORV9fLCAjZSk7CQkJCVwKLQkJYWJvcnQoKTsJCQkJCQlcCi0JfQkJCQkJCQkJXAot fSB3aGlsZSAoMCkKLQotI2RlZmluZSBub3RfcmVhY2hlZCgpIGRvIHsJCQkJCQlcCi0JbWFsbG9j X3ByaW50ZigJCQkJCQkJXAotCSAgICAiPGplbWFsbG9jPjogJXM6JWQ6IFVucmVhY2hhYmxlIGNv ZGUgcmVhY2hlZFxuIiwJCVwKLQkgICAgX19GSUxFX18sIF9fTElORV9fKTsJCQkJCVwKLQlhYm9y dCgpOwkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIG5vdF9pbXBsZW1lbnRlZCgpIGRv IHsJCQkJCQlcCi0JbWFsbG9jX3ByaW50ZigiPGplbWFsbG9jPjogJXM6JWQ6IE5vdCBpbXBsZW1l bnRlZFxuIiwJCVwKLQkgICAgX19GSUxFX18sIF9fTElORV9fKTsJCQkJCVwKLQlhYm9ydCgpOwkJ CQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIGV4cGVjdF9ub3RfaW1wbGVtZW50ZWQoZSkg ZG8gewkJCQkJXAotCWlmICghKGUpKSB7CQkJCQkJCVwKLQkJbm90X2ltcGxlbWVudGVkKCk7CQkJ CQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0j ZW5kaWYKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L2luY2x1ZGUvdGVzdC9qZW1hbGxvY190ZXN0X2RlZnMuaC5pbiBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L2plbWFsbG9jX3Rl c3RfZGVmcy5oLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2M4NTMyLi4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5j bHVkZS90ZXN0L2plbWFsbG9jX3Rlc3RfZGVmcy5oLmluCisrKyAvZGV2L251bGwKQEAgLTEsOSAr MCwwIEBACi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvamVtYWxsb2NfaW50ZXJuYWxfZGVm cy5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2plbWFsbG9jX2ludGVybmFsX2RlY2xz LmgiCi0KLS8qCi0gKiBGb3IgdXNlIGJ5IFNGTVQuICBjb25maWd1cmUuYWMgZG9lc24ndCBhY3R1 YWxseSBkZWZpbmUgSEFWRV9TU0UyIGJlY2F1c2UgaXRzCi0gKiBkZXBlbmRlbmNpZXMgYXJlIG5v dG9yaW91c2x5IHVucG9ydGFibGUgaW4gcHJhY3RpY2UuCi0gKi8KLSN1bmRlZiBIQVZFX1NTRTIK LSN1bmRlZiBIQVZFX0FMVElWRUMKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9tYXRoLmggYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9tYXRoLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYmEwODYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvbWF0aC5oCisr KyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLS8qCi0gKiBDb21wdXRlIHRoZSBuYXR1cmFs IGxvZyBvZiBHYW1tYSh4KSwgYWNjdXJhdGUgdG8gMTAgZGVjaW1hbCBwbGFjZXMuCi0gKgotICog VGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbjoKLSAqCi0gKiAgIFBpa2UsIE0uQy4sIEku RC4gSGlsbCAoMTk2NikgQWxnb3JpdGhtIDI5MTogTG9nYXJpdGhtIG9mIEdhbW1hIGZ1bmN0aW9u Ci0gKiAgIFtTMTRdLiAgQ29tbXVuaWNhdGlvbnMgb2YgdGhlIEFDTSA5KDkpOjY4NC4KLSAqLwot c3RhdGljIGlubGluZSBkb3VibGUKLWxuX2dhbW1hKGRvdWJsZSB4KSB7Ci0JZG91YmxlIGYsIHo7 Ci0KLQlhc3NlcnQoeCA+IDAuMCk7Ci0KLQlpZiAoeCA8IDcuMCkgewotCQlmID0gMS4wOwotCQl6 ID0geDsKLQkJd2hpbGUgKHogPCA3LjApIHsKLQkJCWYgKj0gejsKLQkJCXogKz0gMS4wOwotCQl9 Ci0JCXggPSB6OwotCQlmID0gLWxvZyhmKTsKLQl9IGVsc2UgewotCQlmID0gMC4wOwotCX0KLQot CXogPSAxLjAgLyAoeCAqIHgpOwotCi0JcmV0dXJuIGYgKyAoeC0wLjUpICogbG9nKHgpIC0geCAr IDAuOTE4OTM4NTMzMjA0NjczICsKLQkgICAgKCgoLTAuMDAwNTk1MjM4MDk1MjM4ICogeiArIDAu MDAwNzkzNjUwNzkzNjUxKSAqIHogLQotCSAgICAwLjAwMjc3Nzc3Nzc3Nzc3OCkgKiB6ICsgMC4w ODMzMzMzMzMzMzMzMzMpIC8geDsKLX0KLQotLyoKLSAqIENvbXB1dGUgdGhlIGluY29tcGxldGUg R2FtbWEgcmF0aW8gZm9yIFswLi54XSwgd2hlcmUgcCBpcyB0aGUgc2hhcGUKLSAqIHBhcmFtZXRl ciwgYW5kIGxuX2dhbW1hX3AgaXMgbG5fZ2FtbWEocCkuCi0gKgotICogVGhpcyBpbXBsZW1lbnRh dGlvbiBpcyBiYXNlZCBvbjoKLSAqCi0gKiAgIEJoYXR0YWNoYXJqZWUsIEcuUC4gKDE5NzApIEFs Z29yaXRobSBBUyAzMjogVGhlIGluY29tcGxldGUgR2FtbWEgaW50ZWdyYWwuCi0gKiAgIEFwcGxp ZWQgU3RhdGlzdGljcyAxOToyODUtMjg3LgotICovCi1zdGF0aWMgaW5saW5lIGRvdWJsZQotaV9n YW1tYShkb3VibGUgeCwgZG91YmxlIHAsIGRvdWJsZSBsbl9nYW1tYV9wKSB7Ci0JZG91YmxlIGFj dSwgZmFjdG9yLCBvZmxvLCBnaW4sIHRlcm0sIHJuLCBhLCBiLCBhbiwgZGlmOwotCWRvdWJsZSBw bls2XTsKLQl1bnNpZ25lZCBpOwotCi0JYXNzZXJ0KHAgPiAwLjApOwotCWFzc2VydCh4ID49IDAu MCk7Ci0KLQlpZiAoeCA9PSAwLjApIHsKLQkJcmV0dXJuIDAuMDsKLQl9Ci0KLQlhY3UgPSAxLjBl LTEwOwotCW9mbG8gPSAxLjBlMzA7Ci0JZ2luID0gMC4wOwotCWZhY3RvciA9IGV4cChwICogbG9n KHgpIC0geCAtIGxuX2dhbW1hX3ApOwotCi0JaWYgKHggPD0gMS4wIHx8IHggPCBwKSB7Ci0JCS8q IENhbGN1bGF0aW9uIGJ5IHNlcmllcyBleHBhbnNpb24uICovCi0JCWdpbiA9IDEuMDsKLQkJdGVy bSA9IDEuMDsKLQkJcm4gPSBwOwotCi0JCXdoaWxlICh0cnVlKSB7Ci0JCQlybiArPSAxLjA7Ci0J CQl0ZXJtICo9IHggLyBybjsKLQkJCWdpbiArPSB0ZXJtOwotCQkJaWYgKHRlcm0gPD0gYWN1KSB7 Ci0JCQkJZ2luICo9IGZhY3RvciAvIHA7Ci0JCQkJcmV0dXJuIGdpbjsKLQkJCX0KLQkJfQotCX0g ZWxzZSB7Ci0JCS8qIENhbGN1bGF0aW9uIGJ5IGNvbnRpbnVlZCBmcmFjdGlvbi4gKi8KLQkJYSA9 IDEuMCAtIHA7Ci0JCWIgPSBhICsgeCArIDEuMDsKLQkJdGVybSA9IDAuMDsKLQkJcG5bMF0gPSAx LjA7Ci0JCXBuWzFdID0geDsKLQkJcG5bMl0gPSB4ICsgMS4wOwotCQlwblszXSA9IHggKiBiOwot CQlnaW4gPSBwblsyXSAvIHBuWzNdOwotCi0JCXdoaWxlICh0cnVlKSB7Ci0JCQlhICs9IDEuMDsK LQkJCWIgKz0gMi4wOwotCQkJdGVybSArPSAxLjA7Ci0JCQlhbiA9IGEgKiB0ZXJtOwotCQkJZm9y IChpID0gMDsgaSA8IDI7IGkrKykgewotCQkJCXBuW2krNF0gPSBiICogcG5baSsyXSAtIGFuICog cG5baV07Ci0JCQl9Ci0JCQlpZiAocG5bNV0gIT0gMC4wKSB7Ci0JCQkJcm4gPSBwbls0XSAvIHBu WzVdOwotCQkJCWRpZiA9IGZhYnMoZ2luIC0gcm4pOwotCQkJCWlmIChkaWYgPD0gYWN1ICYmIGRp ZiA8PSBhY3UgKiBybikgewotCQkJCQlnaW4gPSAxLjAgLSBmYWN0b3IgKiBnaW47Ci0JCQkJCXJl dHVybiBnaW47Ci0JCQkJfQotCQkJCWdpbiA9IHJuOwotCQkJfQotCQkJZm9yIChpID0gMDsgaSA8 IDQ7IGkrKykgewotCQkJCXBuW2ldID0gcG5baSsyXTsKLQkJCX0KLQotCQkJaWYgKGZhYnMocG5b NF0pID49IG9mbG8pIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCXBuW2ld IC89IG9mbG87Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQotCi0vKgotICogR2l2ZW4gYSB2YWx1 ZSBwIGluIFswLi4xXSBvZiB0aGUgbG93ZXIgdGFpbCBhcmVhIG9mIHRoZSBub3JtYWwgZGlzdHJp YnV0aW9uLAotICogY29tcHV0ZSB0aGUgbGltaXQgb24gdGhlIGRlZmluaXRlIGludGVncmFsIGZy b20gWy1pbmYuLnpdIHRoYXQgc2F0aXNmaWVzIHAsCi0gKiBhY2N1cmF0ZSB0byAxNiBkZWNpbWFs IHBsYWNlcy4KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uOgotICoKLSAq ICAgV2ljaHVyYSwgTS5KLiAoMTk4OCkgQWxnb3JpdGhtIEFTIDI0MTogVGhlIHBlcmNlbnRhZ2Ug cG9pbnRzIG9mIHRoZSBub3JtYWwKLSAqICAgZGlzdHJpYnV0aW9uLiAgQXBwbGllZCBTdGF0aXN0 aWNzIDM3KDMpOjQ3Ny00ODQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZG91YmxlCi1wdF9ub3JtKGRv dWJsZSBwKSB7Ci0JZG91YmxlIHEsIHIsIHJldDsKLQotCWFzc2VydChwID4gMC4wICYmIHAgPCAx LjApOwotCi0JcSA9IHAgLSAwLjU7Ci0JaWYgKGZhYnMocSkgPD0gMC40MjUpIHsKLQkJLyogcCBj bG9zZSB0byAxLzIuICovCi0JCXIgPSAwLjE4MDYyNSAtIHEgKiBxOwotCQlyZXR1cm4gcSAqICgo KCgoKCgyLjUwOTA4MDkyODczMDEyMjY3MjdlMyAqIHIgKwotCQkgICAgMy4zNDMwNTc1NTgzNTg4 MTI4MTA1ZTQpICogciArIDYuNzI2NTc3MDkyNzAwODcwMDg1M2U0KSAqIHIKLQkJICAgICsgNC41 OTIxOTUzOTMxNTQ5ODcxNDU3ZTQpICogciArIDEuMzczMTY5Mzc2NTUwOTQ2MTEyNWU0KSAqCi0J CSAgICByICsgMS45NzE1OTA5NTAzMDY1NTE0NDI3ZTMpICogciArIDEuMzMxNDE2Njc4OTE3ODQz Nzc0NWUyKQotCQkgICAgKiByICsgMy4zODcxMzI4NzI3OTYzNjY2MDgwZTApIC8KLQkJICAgICgo KCgoKCg1LjIyNjQ5NTI3ODg1Mjg1NDU2MTBlMyAqIHIgKwotCQkgICAgMi44NzI5MDg1NzM1NzIx OTQyNjc0ZTQpICogciArIDMuOTMwNzg5NTgwMDA5MjcxMDYxMGU0KSAqIHIKLQkJICAgICsgMi4x MjEzNzk0MzAxNTg2NTk1ODY3ZTQpICogciArIDUuMzk0MTk2MDIxNDI0NzUxMTA3N2UzKSAqCi0J CSAgICByICsgNi44NzE4NzAwNzQ5MjA1NzkwODMwZTIpICogciArIDQuMjMxMzMzMDcwMTYwMDkx MTI1MmUxKQotCQkgICAgKiByICsgMS4wKTsKLQl9IGVsc2UgewotCQlpZiAocSA8IDAuMCkgewot CQkJciA9IHA7Ci0JCX0gZWxzZSB7Ci0JCQlyID0gMS4wIC0gcDsKLQkJfQotCQlhc3NlcnQociA+ IDAuMCk7Ci0KLQkJciA9IHNxcnQoLWxvZyhyKSk7Ci0JCWlmIChyIDw9IDUuMCkgewotCQkJLyog cCBuZWl0aGVyIGNsb3NlIHRvIDEvMiBub3IgMCBvciAxLiAqLwotCQkJciAtPSAxLjY7Ci0JCQly ZXQgPSAoKCgoKCgoKDcuNzQ1NDUwMTQyNzgzNDE0MDc2NDBlLTQgKiByICsKLQkJCSAgICAyLjI3 MjM4NDQ5ODkyNjkxODQ1ODMzZS0yKSAqIHIgKwotCQkJICAgIDIuNDE3ODA3MjUxNzc0NTA2MTE3 NzBlLTEpICogciArCi0JCQkgICAgMS4yNzA0NTgyNTI0NTIzNjgzODI1OGUwKSAqIHIgKwotCQkJ ICAgIDMuNjQ3ODQ4MzI0NzYzMjA0NjA1MDRlMCkgKiByICsKLQkJCSAgICA1Ljc2OTQ5NzIyMTQ2 MDY5MTQwNTUwZTApICogciArCi0JCQkgICAgNC42MzAzMzc4NDYxNTY1NDUyOTU5MGUwKSAqIHIg KwotCQkJICAgIDEuNDIzNDM3MTEwNzQ5NjgzNTc3MzRlMCkgLwotCQkJICAgICgoKCgoKCgxLjA1 MDc1MDA3MTY0NDQxNjg0MzI0ZS05ICogciArCi0JCQkgICAgNS40NzU5MzgwODQ5OTUzNDQ5NDYw MGUtNCkgKiByICsKLQkJCSAgICAxLjUxOTg2NjY1NjM2MTY0NTcxOTY2ZS0yKQotCQkJICAgICog ciArIDEuNDgxMDM5NzY0Mjc0ODAwNzQ1OTBlLTEpICogciArCi0JCQkgICAgNi44OTc2NzMzNDk4 NTEwMDAwNDU1MGUtMSkgKiByICsKLQkJCSAgICAxLjY3NjM4NDgzMDE4MzgwMzg0OTQwZTApICog ciArCi0JCQkgICAgMi4wNTMxOTE2MjY2Mzc3NTg4MjE4N2UwKSAqIHIgKyAxLjApKTsKLQkJfSBl bHNlIHsKLQkJCS8qIHAgbmVhciAwIG9yIDEuICovCi0JCQlyIC09IDUuMDsKLQkJCXJldCA9ICgo KCgoKCgoMi4wMTAzMzQzOTkyOTIyODgxMzI2NWUtNyAqIHIgKwotCQkJICAgIDIuNzExNTU1NTY4 NzQzNDg3NTc4MTVlLTUpICogciArCi0JCQkgICAgMS4yNDI2NjA5NDczODgwNzg0Mzg2MGUtMykg KiByICsKLQkJCSAgICAyLjY1MzIxODk1MjY1NzYxMjMwOTMwZS0yKSAqIHIgKwotCQkJICAgIDIu OTY1NjA1NzE4Mjg1MDQ4OTEyMzBlLTEpICogciArCi0JCQkgICAgMS43ODQ4MjY1Mzk5MTcyOTEz MzU4MGUwKSAqIHIgKwotCQkJICAgIDUuNDYzNzg0OTExMTY0MTE0MzY5OTBlMCkgKiByICsKLQkJ CSAgICA2LjY1NzkwNDY0MzUwMTEwMzc3NzIwZTApIC8KLQkJCSAgICAoKCgoKCgoMi4wNDQyNjMx MDMzODk5Mzk3ODU2NGUtMTUgKiByICsKLQkJCSAgICAxLjQyMTUxMTc1ODMxNjQ0NTg4ODcwZS03 KSAqIHIgKwotCQkJICAgIDEuODQ2MzE4MzE3NTEwMDU0NjgxODBlLTUpICogciArCi0JCQkgICAg Ny44Njg2OTEzMTE0NTYxMzI1OTEwMGUtNCkgKiByICsKLQkJCSAgICAxLjQ4NzUzNjEyOTA4NTA2 MTQ4NTI1ZS0yKSAqIHIgKwotCQkJICAgIDEuMzY5Mjk4ODA5MjI3MzU4MDUzMTBlLTEpICogciAr Ci0JCQkgICAgNS45OTgzMjIwNjU1NTg4NzkzNzY5MGUtMSkKLQkJCSAgICAqIHIgKyAxLjApKTsK LQkJfQotCQlpZiAocSA8IDAuMCkgewotCQkJcmV0ID0gLXJldDsKLQkJfQotCQlyZXR1cm4gcmV0 OwotCX0KLX0KLQotLyoKLSAqIEdpdmVuIGEgdmFsdWUgcCBpbiBbMC4uMV0gb2YgdGhlIGxvd2Vy IHRhaWwgYXJlYSBvZiB0aGUgQ2hpXjIgZGlzdHJpYnV0aW9uCi0gKiB3aXRoIGRmIGRlZ3JlZXMg b2YgZnJlZWRvbSwgd2hlcmUgbG5fZ2FtbWFfZGZfMiBpcyBsbl9nYW1tYShkZi8yLjApLCBjb21w dXRlCi0gKiB0aGUgdXBwZXIgbGltaXQgb24gdGhlIGRlZmluaXRlIGludGVncmFsIGZyb20gWzAu LnpdIHRoYXQgc2F0aXNmaWVzIHAsCi0gKiBhY2N1cmF0ZSB0byAxMiBkZWNpbWFsIHBsYWNlcy4K LSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uOgotICoKLSAqICAgQmVzdCwg RC5KLiwgRC5FLiBSb2JlcnRzICgxOTc1KSBBbGdvcml0aG0gQVMgOTE6IFRoZSBwZXJjZW50YWdl IHBvaW50cyBvZgotICogICB0aGUgQ2hpXjIgZGlzdHJpYnV0aW9uLiAgQXBwbGllZCBTdGF0aXN0 aWNzIDI0KDMpOjM4NS0zODguCi0gKgotICogICBTaGVhLCBCLkwuICgxOTkxKSBBbGdvcml0aG0g QVMgUjg1OiBBIHJlbWFyayBvbiBBUyA5MTogVGhlIHBlcmNlbnRhZ2UKLSAqICAgcG9pbnRzIG9m IHRoZSBDaGleMiBkaXN0cmlidXRpb24uICBBcHBsaWVkIFN0YXRpc3RpY3MgNDAoMSk6MjMzLTIz NS4KLSAqLwotc3RhdGljIGlubGluZSBkb3VibGUKLXB0X2NoaTIoZG91YmxlIHAsIGRvdWJsZSBk ZiwgZG91YmxlIGxuX2dhbW1hX2RmXzIpIHsKLQlkb3VibGUgZSwgYWEsIHh4LCBjLCBjaCwgYSwg cSwgcDEsIHAyLCB0LCB4LCBiLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2OwotCXVuc2lnbmVkIGk7 Ci0KLQlhc3NlcnQocCA+PSAwLjAgJiYgcCA8IDEuMCk7Ci0JYXNzZXJ0KGRmID4gMC4wKTsKLQot CWUgPSA1LjBlLTc7Ci0JYWEgPSAwLjY5MzE0NzE4MDU7Ci0KLQl4eCA9IDAuNSAqIGRmOwotCWMg PSB4eCAtIDEuMDsKLQotCWlmIChkZiA8IC0xLjI0ICogbG9nKHApKSB7Ci0JCS8qIFN0YXJ0aW5n IGFwcHJveGltYXRpb24gZm9yIHNtYWxsIENoaV4yLiAqLwotCQljaCA9IHBvdyhwICogeHggKiBl eHAobG5fZ2FtbWFfZGZfMiArIHh4ICogYWEpLCAxLjAgLyB4eCk7Ci0JCWlmIChjaCAtIGUgPCAw LjApIHsKLQkJCXJldHVybiBjaDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChkZiA+IDAuMzIpIHsK LQkJCXggPSBwdF9ub3JtKHApOwotCQkJLyoKLQkJCSAqIFN0YXJ0aW5nIGFwcHJveGltYXRpb24g dXNpbmcgV2lsc29uIGFuZCBIaWxmZXJ0eQotCQkJICogZXN0aW1hdGUuCi0JCQkgKi8KLQkJCXAx ID0gMC4yMjIyMjIgLyBkZjsKLQkJCWNoID0gZGYgKiBwb3coeCAqIHNxcnQocDEpICsgMS4wIC0g cDEsIDMuMCk7Ci0JCQkvKiBTdGFydGluZyBhcHByb3hpbWF0aW9uIGZvciBwIHRlbmRpbmcgdG8g MS4gKi8KLQkJCWlmIChjaCA+IDIuMiAqIGRmICsgNi4wKSB7Ci0JCQkJY2ggPSAtMi4wICogKGxv ZygxLjAgLSBwKSAtIGMgKiBsb2coMC41ICogY2gpICsKLQkJCQkgICAgbG5fZ2FtbWFfZGZfMik7 Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQljaCA9IDAuNDsKLQkJCWEgPSBsb2coMS4wIC0gcCk7Ci0J CQl3aGlsZSAodHJ1ZSkgewotCQkJCXEgPSBjaDsKLQkJCQlwMSA9IDEuMCArIGNoICogKDQuNjcg KyBjaCk7Ci0JCQkJcDIgPSBjaCAqICg2LjczICsgY2ggKiAoNi42NiArIGNoKSk7Ci0JCQkJdCA9 IC0wLjUgKyAoNC42NyArIDIuMCAqIGNoKSAvIHAxIC0gKDYuNzMgKyBjaAotCQkJCSAgICAqICgx My4zMiArIDMuMCAqIGNoKSkgLyBwMjsKLQkJCQljaCAtPSAoMS4wIC0gZXhwKGEgKyBsbl9nYW1t YV9kZl8yICsgMC41ICogY2ggKwotCQkJCSAgICBjICogYWEpICogcDIgLyBwMSkgLyB0OwotCQkJ CWlmIChmYWJzKHEgLyBjaCAtIDEuMCkgLSAwLjAxIDw9IDAuMCkgewotCQkJCQlicmVhazsKLQkJ CQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotCQkvKiBD YWxjdWxhdGlvbiBvZiBzZXZlbi10ZXJtIFRheWxvciBzZXJpZXMuICovCi0JCXEgPSBjaDsKLQkJ cDEgPSAwLjUgKiBjaDsKLQkJaWYgKHAxIDwgMC4wKSB7Ci0JCQlyZXR1cm4gLTEuMDsKLQkJfQot CQlwMiA9IHAgLSBpX2dhbW1hKHAxLCB4eCwgbG5fZ2FtbWFfZGZfMik7Ci0JCXQgPSBwMiAqIGV4 cCh4eCAqIGFhICsgbG5fZ2FtbWFfZGZfMiArIHAxIC0gYyAqIGxvZyhjaCkpOwotCQliID0gdCAv IGNoOwotCQlhID0gMC41ICogdCAtIGIgKiBjOwotCQlzMSA9ICgyMTAuMCArIGEgKiAoMTQwLjAg KyBhICogKDEwNS4wICsgYSAqICg4NC4wICsgYSAqICg3MC4wICsKLQkJICAgIDYwLjAgKiBhKSkp KSkgLyA0MjAuMDsKLQkJczIgPSAoNDIwLjAgKyBhICogKDczNS4wICsgYSAqICg5NjYuMCArIGEg KiAoMTE0MS4wICsgMTI3OC4wICoKLQkJICAgIGEpKSkpIC8gMjUyMC4wOwotCQlzMyA9ICgyMTAu MCArIGEgKiAoNDYyLjAgKyBhICogKDcwNy4wICsgOTMyLjAgKiBhKSkpIC8gMjUyMC4wOwotCQlz NCA9ICgyNTIuMCArIGEgKiAoNjcyLjAgKyAxMTgyLjAgKiBhKSArIGMgKiAoMjk0LjAgKyBhICoK LQkJICAgICg4ODkuMCArIDE3NDAuMCAqIGEpKSkgLyA1MDQwLjA7Ci0JCXM1ID0gKDg0LjAgKyAy NjQuMCAqIGEgKyBjICogKDE3NS4wICsgNjA2LjAgKiBhKSkgLyAyNTIwLjA7Ci0JCXM2ID0gKDEy MC4wICsgYyAqICgzNDYuMCArIDEyNy4wICogYykpIC8gNTA0MC4wOwotCQljaCArPSB0ICogKDEu MCArIDAuNSAqIHQgKiBzMSAtIGIgKiBjICogKHMxIC0gYiAqIChzMiAtIGIgKiAoczMKLQkJICAg IC0gYiAqIChzNCAtIGIgKiAoczUgLSBiICogczYpKSkpKSk7Ci0JCWlmIChmYWJzKHEgLyBjaCAt IDEuMCkgPD0gZSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gY2g7Ci19Ci0KLS8q Ci0gKiBHaXZlbiBhIHZhbHVlIHAgaW4gWzAuLjFdIGFuZCBHYW1tYSBkaXN0cmlidXRpb24gc2hh cGUgYW5kIHNjYWxlIHBhcmFtZXRlcnMsCi0gKiBjb21wdXRlIHRoZSB1cHBlciBsaW1pdCBvbiB0 aGUgZGVmaW5pdGUgaW50ZWdyYWwgZnJvbSBbMC4uel0gdGhhdCBzYXRpc2ZpZXMKLSAqIHAuCi0g Ki8KLXN0YXRpYyBpbmxpbmUgZG91YmxlCi1wdF9nYW1tYShkb3VibGUgcCwgZG91YmxlIHNoYXBl LCBkb3VibGUgc2NhbGUsIGRvdWJsZSBsbl9nYW1tYV9zaGFwZSkgewotCXJldHVybiBwdF9jaGky KHAsIHNoYXBlICogMi4wLCBsbl9nYW1tYV9zaGFwZSkgKiAwLjUgKiBzY2FsZTsKLX0KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1 ZGUvdGVzdC9tcS5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC9pbmNsdWRlL3Rlc3QvbXEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRjNjQ4 Ni4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L2luY2x1ZGUvdGVzdC9tcS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSNp bmNsdWRlICJ0ZXN0L3NsZWVwLmgiCi0KLS8qCi0gKiBTaW1wbGUgdGVtcGxhdGVkIG1lc3NhZ2Ug cXVldWUgaW1wbGVtZW50YXRpb24gdGhhdCByZWxpZXMgb24gb25seSBtdXRleGVzIGZvcgotICog c3luY2hyb25pemF0aW9uICh3aGljaCByZWR1Y2VzIHBvcnRhYmlsaXR5IGlzc3VlcykuICBHaXZl biB0aGUgZm9sbG93aW5nCi0gKiBzZXR1cDoKLSAqCi0gKiAgIHR5cGVkZWYgc3RydWN0IG1xX21z Z19zIG1xX21zZ190OwotICogICBzdHJ1Y3QgbXFfbXNnX3MgewotICogICAgICAgICAgIG1xX21z ZyhtcV9tc2dfdCkgbGluazsKLSAqICAgICAgICAgICBbbWVzc2FnZSBkYXRhXQotICogICB9Owot ICogICBtcV9nZW4oLCBtcV8sIG1xX3QsIG1xX21zZ190LCBsaW5rKQotICoKLSAqIFRoZSBBUEkg aXMgYXMgZm9sbG93czoKLSAqCi0gKiAgIGJvb2wgbXFfaW5pdChtcV90ICptcSk7Ci0gKiAgIHZv aWQgbXFfZmluaShtcV90ICptcSk7Ci0gKiAgIHVuc2lnbmVkIG1xX2NvdW50KG1xX3QgKm1xKTsK LSAqICAgbXFfbXNnX3QgKm1xX3RyeWdldChtcV90ICptcSk7Ci0gKiAgIG1xX21zZ190ICptcV9n ZXQobXFfdCAqbXEpOwotICogICB2b2lkIG1xX3B1dChtcV90ICptcSwgbXFfbXNnX3QgKm1zZyk7 Ci0gKgotICogVGhlIG1lc3NhZ2UgcXVldWUgbGlua2FnZSBlbWJlZGRlZCBpbiBlYWNoIG1lc3Nh Z2UgaXMgdG8gYmUgdHJlYXRlZCBhcwotICogZXh0ZXJuYWxseSBvcGFxdWUgKG5vIG5lZWQgdG8g aW5pdGlhbGl6ZSBvciBjbGVhbiB1cCBleHRlcm5hbGx5KS4gIG1xX2ZpbmkoKQotICogZG9lcyBu b3QgcGVyZm9ybSBhbnkgY2xlYW51cCBvZiBtZXNzYWdlcywgc2luY2UgaXQga25vd3Mgbm90aGlu ZyBvZiB0aGVpcgotICogcGF5bG9hZHMuCi0gKi8KLSNkZWZpbmUgbXFfbXNnKGFfbXFfbXNnX3R5 cGUpCXFsX2VsbShhX21xX21zZ190eXBlKQotCi0jZGVmaW5lIG1xX2dlbihhX2F0dHIsIGFfcHJl Zml4LCBhX21xX3R5cGUsIGFfbXFfbXNnX3R5cGUsIGFfZmllbGQpCVwKLXR5cGVkZWYgc3RydWN0 IHsJCQkJCQkJXAotCW10eF90CQkJbG9jazsJCQkJCVwKLQlxbF9oZWFkKGFfbXFfbXNnX3R5cGUp CW1zZ3M7CQkJCQlcCi0JdW5zaWduZWQJCWNvdW50OwkJCQkJXAotfSBhX21xX3R5cGU7CQkJCQkJ CQlcCi1hX2F0dHIgYm9vbAkJCQkJCQkJXAotYV9wcmVmaXgjI2luaXQoYV9tcV90eXBlICptcSkg ewkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAobXR4X2luaXQoJm1xLT5sb2NrKSkgewkJCQkJXAot CQlyZXR1cm4gdHJ1ZTsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCXFsX25ldygmbXEtPm1zZ3MpOwkJ CQkJCVwKLQltcS0+Y291bnQgPSAwOwkJCQkJCQlcCi0JcmV0dXJuIGZhbHNlOwkJCQkJCQlcCi19 CQkJCQkJCQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJCVwKLWFfcHJlZml4IyNmaW5pKGFfbXFfdHlw ZSAqbXEpIHsJCQkJCQlcCi0JbXR4X2ZpbmkoJm1xLT5sb2NrKTsJCQkJCQlcCi19CQkJCQkJCQkJ XAotYV9hdHRyIHVuc2lnbmVkCQkJCQkJCQlcCi1hX3ByZWZpeCMjY291bnQoYV9tcV90eXBlICpt cSkgewkJCQkJXAotCXVuc2lnbmVkIGNvdW50OwkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JbXR4X2xv Y2soJm1xLT5sb2NrKTsJCQkJCQlcCi0JY291bnQgPSBtcS0+Y291bnQ7CQkJCQkJXAotCW10eF91 bmxvY2soJm1xLT5sb2NrKTsJCQkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJ CQkJXAotYV9hdHRyIGFfbXFfbXNnX3R5cGUgKgkJCQkJCQlcCi1hX3ByZWZpeCMjdHJ5Z2V0KGFf bXFfdHlwZSAqbXEpIHsJCQkJCVwKLQlhX21xX21zZ190eXBlICptc2c7CQkJCQkJXAotCQkJCQkJ CQkJXAotCW10eF9sb2NrKCZtcS0+bG9jayk7CQkJCQkJXAotCW1zZyA9IHFsX2ZpcnN0KCZtcS0+ bXNncyk7CQkJCQlcCi0JaWYgKG1zZyAhPSBOVUxMKSB7CQkJCQkJXAotCQlxbF9oZWFkX3JlbW92 ZSgmbXEtPm1zZ3MsIGFfbXFfbXNnX3R5cGUsIGFfZmllbGQpOwlcCi0JCW1xLT5jb3VudC0tOwkJ CQkJCVwKLQl9CQkJCQkJCQlcCi0JbXR4X3VubG9jaygmbXEtPmxvY2spOwkJCQkJCVwKLQlyZXR1 cm4gbXNnOwkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIGFfbXFfbXNnX3R5cGUgKgkJCQkJ CQlcCi1hX3ByZWZpeCMjZ2V0KGFfbXFfdHlwZSAqbXEpIHsJCQkJCQlcCi0JYV9tcV9tc2dfdHlw ZSAqbXNnOwkJCQkJCVwKLQl1bnNpZ25lZCBuczsJCQkJCQkJXAotCQkJCQkJCQkJXAotCW1zZyA9 IGFfcHJlZml4IyN0cnlnZXQobXEpOwkJCQkJXAotCWlmIChtc2cgIT0gTlVMTCkgewkJCQkJCVwK LQkJcmV0dXJuIG1zZzsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCW5zID0gMTsJ CQkJCQkJCVwKLQl3aGlsZSAodHJ1ZSkgewkJCQkJCQlcCi0JCXNsZWVwX25zKG5zKTsJCQkJCQlc Ci0JCW1zZyA9IGFfcHJlZml4IyN0cnlnZXQobXEpOwkJCQlcCi0JCWlmIChtc2cgIT0gTlVMTCkg ewkJCQkJXAotCQkJcmV0dXJuIG1zZzsJCQkJCVwKLQkJfQkJCQkJCQlcCi0JCWlmIChucyA8IDEw MDAqMTAwMCoxMDAwKSB7CQkJCVwKLQkJCS8qIERvdWJsZSBzbGVlcCB0aW1lLCB1cCB0byBtYXgg MSBzZWNvbmQuICovCVwKLQkJCW5zIDw8PSAxOwkJCQkJXAotCQkJaWYgKG5zID4gMTAwMCoxMDAw KjEwMDApIHsJCQlcCi0JCQkJbnMgPSAxMDAwKjEwMDAqMTAwMDsJCQlcCi0JCQl9CQkJCQkJXAot CQl9CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi19CQkJCQkJCQkJXAotYV9hdHRyIHZvaWQJCQkJCQkJ CVwKLWFfcHJlZml4IyNwdXQoYV9tcV90eXBlICptcSwgYV9tcV9tc2dfdHlwZSAqbXNnKSB7CQkJ XAotCQkJCQkJCQkJXAotCW10eF9sb2NrKCZtcS0+bG9jayk7CQkJCQkJXAotCXFsX2VsbV9uZXco bXNnLCBhX2ZpZWxkKTsJCQkJCVwKLQlxbF90YWlsX2luc2VydCgmbXEtPm1zZ3MsIG1zZywgYV9m aWVsZCk7CQkJXAotCW1xLT5jb3VudCsrOwkJCQkJCQlcCi0JbXR4X3VubG9jaygmbXEtPmxvY2sp OwkJCQkJCVwKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9tdHguaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L210eC5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwNjZhMjEzLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L210eC5oCisrKyAvZGV2L251bGwK QEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqIG10eCBpcyBhIHNsaWdodGx5IHNpbXBsaWZpZWQgdmVy c2lvbiBvZiBtYWxsb2NfbXV0ZXguICBUaGlzIGNvZGUgZHVwbGljYXRpb24KLSAqIGlzIHVuZm9y dHVuYXRlLCBidXQgdGhlcmUgYXJlIGFsbG9jYXRvciBib290c3RyYXBwaW5nIGNvbnNpZGVyYXRp b25zIHRoYXQKLSAqIHdvdWxkIGxlYWsgaW50byB0aGUgdGVzdCBpbmZyYXN0cnVjdHVyZSBpZiBt YWxsb2NfbXV0ZXggd2VyZSB1c2VkIGRpcmVjdGx5Ci0gKiBpbiB0ZXN0cy4KLSAqLwotCi10eXBl ZGVmIHN0cnVjdCB7Ci0jaWZkZWYgX1dJTjMyCi0JQ1JJVElDQUxfU0VDVElPTglsb2NrOwotI2Vs aWYgKGRlZmluZWQoSkVNQUxMT0NfT1NfVU5GQUlSX0xPQ0spKQotCW9zX3VuZmFpcl9sb2NrCQls b2NrOwotI2Vsc2UKLQlwdGhyZWFkX211dGV4X3QJCWxvY2s7Ci0jZW5kaWYKLX0gbXR4X3Q7Ci0K LWJvb2wJbXR4X2luaXQobXR4X3QgKm10eCk7Ci12b2lkCW10eF9maW5pKG10eF90ICptdHgpOwot dm9pZAltdHhfbG9jayhtdHhfdCAqbXR4KTsKLXZvaWQJbXR4X3VubG9jayhtdHhfdCAqbXR4KTsK CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L2luY2x1ZGUvdGVzdC9uYml0cy5oIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvbmJpdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYzA2Y2YxYi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9uYml0cy5oCisrKyAvZGV2L251bGwKQEAgLTEs MTExICswLDAgQEAKLSNpZm5kZWYgVEVTVF9OQklUU19ICi0jZGVmaW5lIFRFU1RfTkJJVFNfSAot Ci0vKiBJbnRlcmVzdGluZyBiaXRtYXAgY291bnRzIHRvIHRlc3QuICovCi0KLSNkZWZpbmUgTkJJ VFNfVEFCIFwKLSAgICBOQiggMSkgXAotICAgIE5CKCAyKSBcCi0gICAgTkIoIDMpIFwKLSAgICBO QiggNCkgXAotICAgIE5CKCA1KSBcCi0gICAgTkIoIDYpIFwKLSAgICBOQiggNykgXAotICAgIE5C KCA4KSBcCi0gICAgTkIoIDkpIFwKLSAgICBOQigxMCkgXAotICAgIE5CKDExKSBcCi0gICAgTkIo MTIpIFwKLSAgICBOQigxMykgXAotICAgIE5CKDE0KSBcCi0gICAgTkIoMTUpIFwKLSAgICBOQigx NikgXAotICAgIE5CKDE3KSBcCi0gICAgTkIoMTgpIFwKLSAgICBOQigxOSkgXAotICAgIE5CKDIw KSBcCi0gICAgTkIoMjEpIFwKLSAgICBOQigyMikgXAotICAgIE5CKDIzKSBcCi0gICAgTkIoMjQp IFwKLSAgICBOQigyNSkgXAotICAgIE5CKDI2KSBcCi0gICAgTkIoMjcpIFwKLSAgICBOQigyOCkg XAotICAgIE5CKDI5KSBcCi0gICAgTkIoMzApIFwKLSAgICBOQigzMSkgXAotICAgIE5CKDMyKSBc Ci0gICAgXAotICAgIE5CKDMzKSBcCi0gICAgTkIoMzQpIFwKLSAgICBOQigzNSkgXAotICAgIE5C KDM2KSBcCi0gICAgTkIoMzcpIFwKLSAgICBOQigzOCkgXAotICAgIE5CKDM5KSBcCi0gICAgTkIo NDApIFwKLSAgICBOQig0MSkgXAotICAgIE5CKDQyKSBcCi0gICAgTkIoNDMpIFwKLSAgICBOQig0 NCkgXAotICAgIE5CKDQ1KSBcCi0gICAgTkIoNDYpIFwKLSAgICBOQig0NykgXAotICAgIE5CKDQ4 KSBcCi0gICAgTkIoNDkpIFwKLSAgICBOQig1MCkgXAotICAgIE5CKDUxKSBcCi0gICAgTkIoNTIp IFwKLSAgICBOQig1MykgXAotICAgIE5CKDU0KSBcCi0gICAgTkIoNTUpIFwKLSAgICBOQig1Nikg XAotICAgIE5CKDU3KSBcCi0gICAgTkIoNTgpIFwKLSAgICBOQig1OSkgXAotICAgIE5CKDYwKSBc Ci0gICAgTkIoNjEpIFwKLSAgICBOQig2MikgXAotICAgIE5CKDYzKSBcCi0gICAgTkIoNjQpIFwK LSAgICBOQig2NSkgXAotICAgIE5CKDY2KSBcCi0gICAgTkIoNjcpIFwKLSAgICBcCi0gICAgTkIo MTI2KSBcCi0gICAgTkIoMTI3KSBcCi0gICAgTkIoMTI4KSBcCi0gICAgTkIoMTI5KSBcCi0gICAg TkIoMTMwKSBcCi0gICAgXAotICAgIE5CKDI1NCkgXAotICAgIE5CKDI1NSkgXAotICAgIE5CKDI1 NikgXAotICAgIE5CKDI1NykgXAotICAgIE5CKDI1OCkgXAotICAgIFwKLSAgICBOQig1MTApIFwK LSAgICBOQig1MTEpIFwKLSAgICBOQig1MTIpIFwKLSAgICBOQig1MTMpIFwKLSAgICBOQig1MTQp IFwKLSAgICBcCi0gICAgTkIoMTAyMikgXAotICAgIE5CKDEwMjMpIFwKLSAgICBOQigxMDI0KSBc Ci0gICAgTkIoMTAyNSkgXAotICAgIE5CKDEwMjYpIFwKLSAgICBcCi0gICAgTkIoMjA0OCkgXAot ICAgIFwKLSAgICBOQig0MDk0KSBcCi0gICAgTkIoNDA5NSkgXAotICAgIE5CKDQwOTYpIFwKLSAg ICBOQig0MDk3KSBcCi0gICAgTkIoNDA5OCkgXAotICAgIFwKLSAgICBOQig4MTkyKSBcCi0gICAg TkIoMTYzODQpCi0KLSNlbmRpZiAvKiBURVNUX05CSVRTX0ggKi8KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC9zYW4u aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90 ZXN0L3Nhbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTA3ODY1Li4wMDAwMDAw Ci0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVk ZS90ZXN0L3Nhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmIGRlZmluZWQo SkVNQUxMT0NfVUFGX0RFVEVDVElPTikgfHwgZGVmaW5lZChKRU1BTExPQ19ERUJVRykKLSMgIGRl ZmluZSBURVNUX1NBTl9VQUZfQUxJR05fRU5BQkxFICJsZ19zYW5fdWFmX2FsaWduOjEyIgotIyAg ZGVmaW5lIFRFU1RfU0FOX1VBRl9BTElHTl9ESVNBQkxFICJsZ19zYW5fdWFmX2FsaWduOi0xIgot I2Vsc2UKLSMgIGRlZmluZSBURVNUX1NBTl9VQUZfQUxJR05fRU5BQkxFICIiCi0jICBkZWZpbmUg VEVTVF9TQU5fVUFGX0FMSUdOX0RJU0FCTEUgIiIKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGJv b2wKLWV4dGVudF9pc19ndWFyZGVkKHRzZG5fdCAqdHNkbiwgdm9pZCAqcHRyKSB7Ci0JZWRhdGFf dCAqZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1cCh0c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0 cik7Ci0JcmV0dXJuIGVkYXRhX2d1YXJkZWRfZ2V0KGVkYXRhKTsKLX0KLQoKZGlmZiAtLWdpdCBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0 L3NsZWVwLmggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2lu Y2x1ZGUvdGVzdC9zbGVlcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjMyZjYz Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW5jbHVkZS90ZXN0L3NsZWVwLmgKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi12b2lk IHNsZWVwX25zKHVuc2lnbmVkIG5zKTsKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90ZXN0LmggYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90ZXN0LmgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YjY1OTEuLjAwMDAwMDAKLS0tIGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvdGVzdC5o CisrKyAvZGV2L251bGwKQEAgLTEsNTgzICswLDAgQEAKLSNkZWZpbmUgQVNTRVJUX0JVRlNJWkUJ MjU2Ci0KLSNkZWZpbmUgdmVyaWZ5X2NtcChtYXlfYWJvcnQsIHQsIGEsIGIsIGNtcCwgbmVnX2Nt cCwgcHJpLCAuLi4pIGRvIHsJXAotCWNvbnN0IHQgYV8gPSAoYSk7CQkJCQkJXAotCWNvbnN0IHQg Yl8gPSAoYik7CQkJCQkJXAotCWlmICghKGFfIGNtcCBiXykpIHsJCQkJCQlcCi0JCWNoYXIgcHJl Zml4W0FTU0VSVF9CVUZTSVpFXTsJCQkJXAotCQljaGFyIG1lc3NhZ2VbQVNTRVJUX0JVRlNJWkVd OwkJCQlcCi0JCW1hbGxvY19zbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLAkJCVwKLQkJ ICAgICIlczolczolZDogRmFpbGVkIGFzc2VydGlvbjogIgkJCVwKLQkJICAgICIoJXMpICIgI2Nt cCAiICglcykgLS0+ICIJCQkJXAotCQkgICAgIiUiIHByaSAiICIgI25lZ19jbXAgIiAlIiBwcmkg IjogIiwJCQlcCi0JCSAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fLAkJCVwKLQkJICAg ICNhLCAjYiwgYV8sIGJfKTsJCQkJCVwKLQkJbWFsbG9jX3NucHJpbnRmKG1lc3NhZ2UsIHNpemVv ZihtZXNzYWdlKSwgX19WQV9BUkdTX18pOwlcCi0JCWlmIChtYXlfYWJvcnQpIHsJCQkJCVwKLQkJ CWFib3J0KCk7CQkJCQlcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkJcF90ZXN0X2ZhaWwocHJlZml4 LCBtZXNzYWdlKTsJCQlcCi0JCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0K LSNkZWZpbmUgZXhwZWN0X2NtcCh0LCBhLCBiLCBjbXAsIG5lZ19jbXAsIHByaSwgLi4uKSB2ZXJp ZnlfY21wKGZhbHNlLAlcCi0gICAgdCwgYSwgYiwgY21wLCBuZWdfY21wLCBwcmksIF9fVkFfQVJH U19fKQotCi0jZGVmaW5lIGV4cGVjdF9wdHJfZXEoYSwgYiwgLi4uKQlleHBlY3RfY21wKHZvaWQg KiwgYSwgYiwgPT0sCVwKLSAgICAhPSwgInAiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0 X3B0cl9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodm9pZCAqLCBhLCBiLCAhPSwJXAotICAgID09 LCAicCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfcHRyX251bGwoYSwgLi4uKQkJZXhw ZWN0X2NtcCh2b2lkICosIGEsIE5VTEwsID09LAlcCi0gICAgIT0sICJwIiwgX19WQV9BUkdTX18p Ci0jZGVmaW5lIGV4cGVjdF9wdHJfbm90X251bGwoYSwgLi4uKQlleHBlY3RfY21wKHZvaWQgKiwg YSwgTlVMTCwgIT0sCVwKLSAgICA9PSwgInAiLCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBleHBl Y3RfY19lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoY2hhciwgYSwgYiwgPT0sICE9LCAiYyIsIF9f VkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfY19uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoY2hh ciwgYSwgYiwgIT0sID09LCAiYyIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfY19sdChh LCBiLCAuLi4pCWV4cGVjdF9jbXAoY2hhciwgYSwgYiwgPCwgPj0sICJjIiwgX19WQV9BUkdTX18p Ci0jZGVmaW5lIGV4cGVjdF9jX2xlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChjaGFyLCBhLCBiLCA8 PSwgPiwgImMiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2NfZ2UoYSwgYiwgLi4uKQll eHBlY3RfY21wKGNoYXIsIGEsIGIsID49LCA8LCAiYyIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBl eHBlY3RfY19ndChhLCBiLCAuLi4pCWV4cGVjdF9jbXAoY2hhciwgYSwgYiwgPiwgPD0sICJjIiwg X19WQV9BUkdTX18pCi0KLSNkZWZpbmUgZXhwZWN0X3hfZXEoYSwgYiwgLi4uKQlleHBlY3RfY21w KGludCwgYSwgYiwgPT0sICE9LCAiI3giLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3hf bmUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgIT0sID09LCAiI3giLCBfX1ZBX0FS R1NfXykKLSNkZWZpbmUgZXhwZWN0X3hfbHQoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwg YiwgPCwgPj0sICIjeCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfeF9sZShhLCBiLCAu Li4pCWV4cGVjdF9jbXAoaW50LCBhLCBiLCA8PSwgPiwgIiN4IiwgX19WQV9BUkdTX18pCi0jZGVm aW5lIGV4cGVjdF94X2dlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQsIGEsIGIsID49LCA8LCAi I3giLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3hfZ3QoYSwgYiwgLi4uKQlleHBlY3Rf Y21wKGludCwgYSwgYiwgPiwgPD0sICIjeCIsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGV4cGVj dF9kX2VxKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQsIGEsIGIsID09LCAhPSwgImQiLCBfX1ZB X0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2RfbmUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwg YSwgYiwgIT0sID09LCAiZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfZF9sdChhLCBi LCAuLi4pCWV4cGVjdF9jbXAoaW50LCBhLCBiLCA8LCA+PSwgImQiLCBfX1ZBX0FSR1NfXykKLSNk ZWZpbmUgZXhwZWN0X2RfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgPD0sID4s ICJkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9kX2dlKGEsIGIsIC4uLikJZXhwZWN0 X2NtcChpbnQsIGEsIGIsID49LCA8LCAiZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3Rf ZF9ndChhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50LCBhLCBiLCA+LCA8PSwgImQiLCBfX1ZBX0FS R1NfXykKLQotI2RlZmluZSBleHBlY3RfdV9lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50LCBh LCBiLCA9PSwgIT0sICJ1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF91X25lKGEsIGIs IC4uLikJZXhwZWN0X2NtcChpbnQsIGEsIGIsICE9LCA9PSwgInUiLCBfX1ZBX0FSR1NfXykKLSNk ZWZpbmUgZXhwZWN0X3VfbHQoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwgYiwgPCwgPj0s ICJ1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF91X2xlKGEsIGIsIC4uLikJZXhwZWN0 X2NtcChpbnQsIGEsIGIsIDw9LCA+LCAidSIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3Rf dV9nZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50LCBhLCBiLCA+PSwgPCwgInUiLCBfX1ZBX0FS R1NfXykKLSNkZWZpbmUgZXhwZWN0X3VfZ3QoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludCwgYSwg YiwgPiwgPD0sICJ1IiwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgZXhwZWN0X2xkX2VxKGEsIGIs IC4uLikJZXhwZWN0X2NtcChsb25nLCBhLCBiLCA9PSwJXAotICAgICE9LCAibGQiLCBfX1ZBX0FS R1NfXykKLSNkZWZpbmUgZXhwZWN0X2xkX25lKGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25nLCBh LCBiLCAhPSwJXAotICAgID09LCAibGQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2xk X2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25nLCBhLCBiLCA8LAlcCi0gICAgPj0sICJsZCIs IF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfbGRfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21w KGxvbmcsIGEsIGIsIDw9LAlcCi0gICAgPiwgImxkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4 cGVjdF9sZF9nZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAobG9uZywgYSwgYiwgPj0sCVwKLSAgICA8 LCAibGQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2xkX2d0KGEsIGIsIC4uLikJZXhw ZWN0X2NtcChsb25nLCBhLCBiLCA+LAlcCi0gICAgPD0sICJsZCIsIF9fVkFfQVJHU19fKQotCi0j ZGVmaW5lIGV4cGVjdF9sdV9lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZywJ XAotICAgIGEsIGIsID09LCAhPSwgImx1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9s dV9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZywJXAotICAgIGEsIGIsICE9 LCA9PSwgImx1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9sdV9sdChhLCBiLCAuLi4p CWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZywJXAotICAgIGEsIGIsIDwsID49LCAibHUiLCBfX1ZB X0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2x1X2xlKGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1bnNp Z25lZCBsb25nLAlcCi0gICAgYSwgYiwgPD0sID4sICJsdSIsIF9fVkFfQVJHU19fKQotI2RlZmlu ZSBleHBlY3RfbHVfZ2UoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVuc2lnbmVkIGxvbmcsCVwKLSAg ICBhLCBiLCA+PSwgPCwgImx1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9sdV9ndChh LCBiLCAuLi4pCWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZywJXAotICAgIGEsIGIsID4sIDw9LCAi bHUiLCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBleHBlY3RfcWRfZXEoYSwgYiwgLi4uKQlleHBl Y3RfY21wKGxvbmcgbG9uZywgYSwgYiwgPT0sCVwKLSAgICAhPSwgInFkIiwgX19WQV9BUkdTX18p Ci0jZGVmaW5lIGV4cGVjdF9xZF9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAobG9uZyBsb25nLCBh LCBiLCAhPSwJXAotICAgID09LCAicWQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3Fk X2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25nIGxvbmcsIGEsIGIsIDwsCVwKLSAgICA+PSwg InFkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9xZF9sZShhLCBiLCAuLi4pCWV4cGVj dF9jbXAobG9uZyBsb25nLCBhLCBiLCA8PSwJXAotICAgID4sICJxZCIsIF9fVkFfQVJHU19fKQot I2RlZmluZSBleHBlY3RfcWRfZ2UoYSwgYiwgLi4uKQlleHBlY3RfY21wKGxvbmcgbG9uZywgYSwg YiwgPj0sCVwKLSAgICA8LCAicWQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3FkX2d0 KGEsIGIsIC4uLikJZXhwZWN0X2NtcChsb25nIGxvbmcsIGEsIGIsID4sCVwKLSAgICA8PSwgInFk IiwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgZXhwZWN0X3F1X2VxKGEsIGIsIC4uLikJZXhwZWN0 X2NtcCh1bnNpZ25lZCBsb25nIGxvbmcsCVwKLSAgICBhLCBiLCA9PSwgIT0sICJxdSIsIF9fVkFf QVJHU19fKQotI2RlZmluZSBleHBlY3RfcXVfbmUoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVuc2ln bmVkIGxvbmcgbG9uZywJXAotICAgIGEsIGIsICE9LCA9PSwgInF1IiwgX19WQV9BUkdTX18pCi0j ZGVmaW5lIGV4cGVjdF9xdV9sdChhLCBiLCAuLi4pCWV4cGVjdF9jbXAodW5zaWduZWQgbG9uZyBs b25nLAlcCi0gICAgYSwgYiwgPCwgPj0sICJxdSIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBl Y3RfcXVfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVuc2lnbmVkIGxvbmcgbG9uZywJXAotICAg IGEsIGIsIDw9LCA+LCAicXUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3F1X2dlKGEs IGIsIC4uLikJZXhwZWN0X2NtcCh1bnNpZ25lZCBsb25nIGxvbmcsCVwKLSAgICBhLCBiLCA+PSwg PCwgInF1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9xdV9ndChhLCBiLCAuLi4pCWV4 cGVjdF9jbXAodW5zaWduZWQgbG9uZyBsb25nLAlcCi0gICAgYSwgYiwgPiwgPD0sICJxdSIsIF9f VkFfQVJHU19fKQotCi0jZGVmaW5lIGV4cGVjdF9qZF9lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAo aW50bWF4X3QsIGEsIGIsID09LAlcCi0gICAgIT0sICJqZCIsIF9fVkFfQVJHU19fKQotI2RlZmlu ZSBleHBlY3RfamRfbmUoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludG1heF90LCBhLCBiLCAhPSwJ XAotICAgID09LCAiamQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2pkX2x0KGEsIGIs IC4uLikJZXhwZWN0X2NtcChpbnRtYXhfdCwgYSwgYiwgPCwJXAotICAgID49LCAiamQiLCBfX1ZB X0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2pkX2xlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnRt YXhfdCwgYSwgYiwgPD0sCVwKLSAgICA+LCAiamQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhw ZWN0X2pkX2dlKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnRtYXhfdCwgYSwgYiwgPj0sCVwKLSAg ICA8LCAiamQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2pkX2d0KGEsIGIsIC4uLikJ ZXhwZWN0X2NtcChpbnRtYXhfdCwgYSwgYiwgPiwJXAotICAgIDw9LCAiamQiLCBfX1ZBX0FSR1Nf XykKLQotI2RlZmluZSBleHBlY3RfanVfZXEoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVpbnRtYXhf dCwgYSwgYiwgPT0sCVwKLSAgICAhPSwgImp1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVj dF9qdV9uZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodWludG1heF90LCBhLCBiLCAhPSwJXAotICAg ID09LCAianUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2p1X2x0KGEsIGIsIC4uLikJ ZXhwZWN0X2NtcCh1aW50bWF4X3QsIGEsIGIsIDwsCVwKLSAgICA+PSwgImp1IiwgX19WQV9BUkdT X18pCi0jZGVmaW5lIGV4cGVjdF9qdV9sZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAodWludG1heF90 LCBhLCBiLCA8PSwJXAotICAgID4sICJqdSIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3Rf anVfZ2UoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVpbnRtYXhfdCwgYSwgYiwgPj0sCVwKLSAgICA8 LCAianUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2p1X2d0KGEsIGIsIC4uLikJZXhw ZWN0X2NtcCh1aW50bWF4X3QsIGEsIGIsID4sCVwKLSAgICA8PSwgImp1IiwgX19WQV9BUkdTX18p Ci0KLSNkZWZpbmUgZXhwZWN0X3pkX2VxKGEsIGIsIC4uLikJZXhwZWN0X2NtcChzc2l6ZV90LCBh LCBiLCA9PSwJXAotICAgICE9LCAiemQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3pk X25lKGEsIGIsIC4uLikJZXhwZWN0X2NtcChzc2l6ZV90LCBhLCBiLCAhPSwJXAotICAgID09LCAi emQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3pkX2x0KGEsIGIsIC4uLikJZXhwZWN0 X2NtcChzc2l6ZV90LCBhLCBiLCA8LAlcCi0gICAgPj0sICJ6ZCIsIF9fVkFfQVJHU19fKQotI2Rl ZmluZSBleHBlY3RfemRfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21wKHNzaXplX3QsIGEsIGIsIDw9 LAlcCi0gICAgPiwgInpkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF96ZF9nZShhLCBi LCAuLi4pCWV4cGVjdF9jbXAoc3NpemVfdCwgYSwgYiwgPj0sCVwKLSAgICA8LCAiemQiLCBfX1ZB X0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3pkX2d0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChzc2l6 ZV90LCBhLCBiLCA+LAlcCi0gICAgPD0sICJ6ZCIsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGV4 cGVjdF96dV9lcShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoc2l6ZV90LCBhLCBiLCA9PSwJXAotICAg ICE9LCAienUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3p1X25lKGEsIGIsIC4uLikJ ZXhwZWN0X2NtcChzaXplX3QsIGEsIGIsICE9LAlcCi0gICAgPT0sICJ6dSIsIF9fVkFfQVJHU19f KQotI2RlZmluZSBleHBlY3RfenVfbHQoYSwgYiwgLi4uKQlleHBlY3RfY21wKHNpemVfdCwgYSwg YiwgPCwJXAotICAgID49LCAienUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3p1X2xl KGEsIGIsIC4uLikJZXhwZWN0X2NtcChzaXplX3QsIGEsIGIsIDw9LAlcCi0gICAgPiwgInp1Iiwg X19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF96dV9nZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAo c2l6ZV90LCBhLCBiLCA+PSwJXAotICAgIDwsICJ6dSIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBl eHBlY3RfenVfZ3QoYSwgYiwgLi4uKQlleHBlY3RfY21wKHNpemVfdCwgYSwgYiwgPiwJXAotICAg IDw9LCAienUiLCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBleHBlY3RfZDMyX2VxKGEsIGIsIC4u LikJZXhwZWN0X2NtcChpbnQzMl90LCBhLCBiLCA9PSwJXAotICAgICE9LCBGTVRkMzIsIF9fVkFf QVJHU19fKQotI2RlZmluZSBleHBlY3RfZDMyX25lKGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQz Ml90LCBhLCBiLCAhPSwJXAotICAgID09LCBGTVRkMzIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBl eHBlY3RfZDMyX2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQzMl90LCBhLCBiLCA8LAlcCi0g ICAgPj0sIEZNVGQzMiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9kMzJfbGUoYSwgYiwg Li4uKQlleHBlY3RfY21wKGludDMyX3QsIGEsIGIsIDw9LAlcCi0gICAgPiwgRk1UZDMyLCBfX1ZB X0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X2QzMl9nZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50 MzJfdCwgYSwgYiwgPj0sCVwKLSAgICA8LCBGTVRkMzIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBl eHBlY3RfZDMyX2d0KGEsIGIsIC4uLikJZXhwZWN0X2NtcChpbnQzMl90LCBhLCBiLCA+LAlcCi0g ICAgPD0sIEZNVGQzMiwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgZXhwZWN0X3UzMl9lcShhLCBi LCAuLi4pCWV4cGVjdF9jbXAodWludDMyX3QsIGEsIGIsID09LAlcCi0gICAgIT0sIEZNVHUzMiwg X19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF91MzJfbmUoYSwgYiwgLi4uKQlleHBlY3RfY21w KHVpbnQzMl90LCBhLCBiLCAhPSwJXAotICAgID09LCBGTVR1MzIsIF9fVkFfQVJHU19fKQotI2Rl ZmluZSBleHBlY3RfdTMyX2x0KGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50MzJfdCwgYSwgYiwg PCwJXAotICAgID49LCBGTVR1MzIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfdTMyX2xl KGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50MzJfdCwgYSwgYiwgPD0sCVwKLSAgICA+LCBGTVR1 MzIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfdTMyX2dlKGEsIGIsIC4uLikJZXhwZWN0 X2NtcCh1aW50MzJfdCwgYSwgYiwgPj0sCVwKLSAgICA8LCBGTVR1MzIsIF9fVkFfQVJHU19fKQot I2RlZmluZSBleHBlY3RfdTMyX2d0KGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50MzJfdCwgYSwg YiwgPiwJXAotICAgIDw9LCBGTVR1MzIsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGV4cGVjdF9k NjRfZXEoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludDY0X3QsIGEsIGIsID09LAlcCi0gICAgIT0s IEZNVGQ2NCwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9kNjRfbmUoYSwgYiwgLi4uKQll eHBlY3RfY21wKGludDY0X3QsIGEsIGIsICE9LAlcCi0gICAgPT0sIEZNVGQ2NCwgX19WQV9BUkdT X18pCi0jZGVmaW5lIGV4cGVjdF9kNjRfbHQoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludDY0X3Qs IGEsIGIsIDwsCVwKLSAgICA+PSwgRk1UZDY0LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0 X2Q2NF9sZShhLCBiLCAuLi4pCWV4cGVjdF9jbXAoaW50NjRfdCwgYSwgYiwgPD0sCVwKLSAgICA+ LCBGTVRkNjQsIF9fVkFfQVJHU19fKQotI2RlZmluZSBleHBlY3RfZDY0X2dlKGEsIGIsIC4uLikJ ZXhwZWN0X2NtcChpbnQ2NF90LCBhLCBiLCA+PSwJXAotICAgIDwsIEZNVGQ2NCwgX19WQV9BUkdT X18pCi0jZGVmaW5lIGV4cGVjdF9kNjRfZ3QoYSwgYiwgLi4uKQlleHBlY3RfY21wKGludDY0X3Qs IGEsIGIsID4sCVwKLSAgICA8PSwgRk1UZDY0LCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBleHBl Y3RfdTY0X2VxKGEsIGIsIC4uLikJZXhwZWN0X2NtcCh1aW50NjRfdCwgYSwgYiwgPT0sCVwKLSAg ICAhPSwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgZXhwZWN0X3U2NF9uZShhLCBiLCAu Li4pCWV4cGVjdF9jbXAodWludDY0X3QsIGEsIGIsICE9LAlcCi0gICAgPT0sIEZNVHU2NCwgX19W QV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF91NjRfbHQoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVp bnQ2NF90LCBhLCBiLCA8LAlcCi0gICAgPj0sIEZNVHU2NCwgX19WQV9BUkdTX18pCi0jZGVmaW5l IGV4cGVjdF91NjRfbGUoYSwgYiwgLi4uKQlleHBlY3RfY21wKHVpbnQ2NF90LCBhLCBiLCA8PSwJ XAotICAgID4sIEZNVHU2NCwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF91NjRfZ2UoYSwg YiwgLi4uKQlleHBlY3RfY21wKHVpbnQ2NF90LCBhLCBiLCA+PSwJXAotICAgIDwsIEZNVHU2NCwg X19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF91NjRfZ3QoYSwgYiwgLi4uKQlleHBlY3RfY21w KHVpbnQ2NF90LCBhLCBiLCA+LAlcCi0gICAgPD0sIEZNVHU2NCwgX19WQV9BUkdTX18pCi0KLSNk ZWZpbmUgdmVyaWZ5X2JfZXEobWF5X2Fib3J0LCBhLCBiLCAuLi4pIGRvIHsJCQkJXAotCWJvb2wg YV8gPSAoYSk7CQkJCQkJCVwKLQlib29sIGJfID0gKGIpOwkJCQkJCQlcCi0JaWYgKCEoYV8gPT0g Yl8pKSB7CQkJCQkJXAotCQljaGFyIHByZWZpeFtBU1NFUlRfQlVGU0laRV07CQkJCVwKLQkJY2hh ciBtZXNzYWdlW0FTU0VSVF9CVUZTSVpFXTsJCQkJXAotCQltYWxsb2Nfc25wcmludGYocHJlZml4 LCBzaXplb2YocHJlZml4KSwJCQlcCi0JCSAgICAiJXM6JXM6JWQ6IEZhaWxlZCBhc3NlcnRpb246 ICIJCQlcCi0JCSAgICAiKCVzKSA9PSAoJXMpIC0tPiAlcyAhPSAlczogIiwJCQlcCi0JCSAgICBf X2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fLAkJCVwKLQkJICAgICNhLCAjYiwgYV8gPyAidHJ1 ZSIgOiAiZmFsc2UiLAkJCVwKLQkJICAgIGJfID8gInRydWUiIDogImZhbHNlIik7CQkJCVwKLQkJ bWFsbG9jX3NucHJpbnRmKG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgX19WQV9BUkdTX18pOwlc Ci0JCWlmIChtYXlfYWJvcnQpIHsJCQkJCVwKLQkJCWFib3J0KCk7CQkJCQlcCi0JCX0gZWxzZSB7 CQkJCQkJXAotCQkJcF90ZXN0X2ZhaWwocHJlZml4LCBtZXNzYWdlKTsJCQlcCi0JCX0JCQkJCQkJ XAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgdmVyaWZ5X2JfbmUobWF5X2Fi b3J0LCBhLCBiLCAuLi4pIGRvIHsJCQkJXAotCWJvb2wgYV8gPSAoYSk7CQkJCQkJCVwKLQlib29s IGJfID0gKGIpOwkJCQkJCQlcCi0JaWYgKCEoYV8gIT0gYl8pKSB7CQkJCQkJXAotCQljaGFyIHBy ZWZpeFtBU1NFUlRfQlVGU0laRV07CQkJCVwKLQkJY2hhciBtZXNzYWdlW0FTU0VSVF9CVUZTSVpF XTsJCQkJXAotCQltYWxsb2Nfc25wcmludGYocHJlZml4LCBzaXplb2YocHJlZml4KSwJCQlcCi0J CSAgICAiJXM6JXM6JWQ6IEZhaWxlZCBhc3NlcnRpb246ICIJCQlcCi0JCSAgICAiKCVzKSAhPSAo JXMpIC0tPiAlcyA9PSAlczogIiwJCQlcCi0JCSAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElO RV9fLAkJCVwKLQkJICAgICNhLCAjYiwgYV8gPyAidHJ1ZSIgOiAiZmFsc2UiLAkJCVwKLQkJICAg IGJfID8gInRydWUiIDogImZhbHNlIik7CQkJCVwKLQkJbWFsbG9jX3NucHJpbnRmKG1lc3NhZ2Us IHNpemVvZihtZXNzYWdlKSwgX19WQV9BUkdTX18pOwlcCi0JCWlmIChtYXlfYWJvcnQpIHsJCQkJ CVwKLQkJCWFib3J0KCk7CQkJCQlcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkJcF90ZXN0X2ZhaWwo cHJlZml4LCBtZXNzYWdlKTsJCQlcCi0JCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUg KDApCi0KLSNkZWZpbmUgZXhwZWN0X2JfZXEoYSwgYiwgLi4uKQl2ZXJpZnlfYl9lcShmYWxzZSwg YSwgYiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9iX25lKGEsIGIsIC4uLikJdmVyaWZ5 X2JfbmUoZmFsc2UsIGEsIGIsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGV4cGVjdF90cnVlKGEs IC4uLikJZXhwZWN0X2JfZXEoYSwgdHJ1ZSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGV4cGVjdF9m YWxzZShhLCAuLi4pCWV4cGVjdF9iX2VxKGEsIGZhbHNlLCBfX1ZBX0FSR1NfXykKLQotI2RlZmlu ZSB2ZXJpZnlfc3RyX2VxKG1heV9hYm9ydCwgYSwgYiwgLi4uKSBkbyB7CQkJXAotCWlmIChzdHJj bXAoKGEpLCAoYikpKSB7CQkJCQkJXAotCQljaGFyIHByZWZpeFtBU1NFUlRfQlVGU0laRV07CQkJ CVwKLQkJY2hhciBtZXNzYWdlW0FTU0VSVF9CVUZTSVpFXTsJCQkJXAotCQltYWxsb2Nfc25wcmlu dGYocHJlZml4LCBzaXplb2YocHJlZml4KSwJCQlcCi0JCSAgICAiJXM6JXM6JWQ6IEZhaWxlZCBh c3NlcnRpb246ICIJCQlcCi0JCSAgICAiKCVzKSBzYW1lIGFzICglcykgLS0+ICIJCQkJXAotCQkg ICAgIlwiJXNcIiBkaWZmZXJzIGZyb20gXCIlc1wiOiAiLAkJCVwKLQkJICAgIF9fZnVuY19fLCBf X0ZJTEVfXywgX19MSU5FX18sICNhLCAjYiwgYSwgYik7CVwKLQkJbWFsbG9jX3NucHJpbnRmKG1l c3NhZ2UsIHNpemVvZihtZXNzYWdlKSwgX19WQV9BUkdTX18pOwlcCi0JCWlmIChtYXlfYWJvcnQp IHsJCQkJCVwKLQkJCWFib3J0KCk7CQkJCQlcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkJcF90ZXN0 X2ZhaWwocHJlZml4LCBtZXNzYWdlKTsJCQlcCi0JCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLX0g d2hpbGUgKDApCi0KLSNkZWZpbmUgdmVyaWZ5X3N0cl9uZShtYXlfYWJvcnQsIGEsIGIsIC4uLikg ZG8gewkJCVwKLQlpZiAoIXN0cmNtcCgoYSksIChiKSkpIHsJCQkJCVwKLQkJY2hhciBwcmVmaXhb QVNTRVJUX0JVRlNJWkVdOwkJCQlcCi0JCWNoYXIgbWVzc2FnZVtBU1NFUlRfQlVGU0laRV07CQkJ CVwKLQkJbWFsbG9jX3NucHJpbnRmKHByZWZpeCwgc2l6ZW9mKHByZWZpeCksCQkJXAotCQkgICAg IiVzOiVzOiVkOiBGYWlsZWQgYXNzZXJ0aW9uOiAiCQkJXAotCQkgICAgIiglcykgZGlmZmVycyBm cm9tICglcykgLS0+ICIJCQlcCi0JCSAgICAiXCIlc1wiIHNhbWUgYXMgXCIlc1wiOiAiLAkJCQlc Ci0JCSAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fLCAjYSwgI2IsIGEsIGIpOwlcCi0J CW1hbGxvY19zbnByaW50ZihtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksIF9fVkFfQVJHU19fKTsJ XAotCQlpZiAobWF5X2Fib3J0KSB7CQkJCQlcCi0JCQlhYm9ydCgpOwkJCQkJXAotCQl9IGVsc2Ug ewkJCQkJCVwKLQkJCXBfdGVzdF9mYWlsKHByZWZpeCwgbWVzc2FnZSk7CQkJXAotCQl9CQkJCQkJ CVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIGV4cGVjdF9zdHJfZXEoYSwg YiwgLi4uKSB2ZXJpZnlfc3RyX2VxKGZhbHNlLCBhLCBiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUg ZXhwZWN0X3N0cl9uZShhLCBiLCAuLi4pIHZlcmlmeV9zdHJfbmUoZmFsc2UsIGEsIGIsIF9fVkFf QVJHU19fKQotCi0jZGVmaW5lIHZlcmlmeV9ub3RfcmVhY2hlZChtYXlfYWJvcnQsIC4uLikgZG8g ewkJCQlcCi0JY2hhciBwcmVmaXhbQVNTRVJUX0JVRlNJWkVdOwkJCQkJXAotCWNoYXIgbWVzc2Fn ZVtBU1NFUlRfQlVGU0laRV07CQkJCQlcCi0JbWFsbG9jX3NucHJpbnRmKHByZWZpeCwgc2l6ZW9m KHByZWZpeCksCQkJCVwKLQkgICAgIiVzOiVzOiVkOiBVbnJlYWNoYWJsZSBjb2RlIHJlYWNoZWQ6 ICIsCQkJXAotCSAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCQkJXAotCW1hbGxv Y19zbnByaW50ZihtZXNzYWdlLCBzaXplb2YobWVzc2FnZSksIF9fVkFfQVJHU19fKTsJCVwKLQlp ZiAobWF5X2Fib3J0KSB7CQkJCQkJXAotCQlhYm9ydCgpOwkJCQkJCVwKLQl9IGVsc2UgewkJCQkJ CQlcCi0JCXBfdGVzdF9mYWlsKHByZWZpeCwgbWVzc2FnZSk7CQkJCVwKLQl9CQkJCQkJCQlcCi19 IHdoaWxlICgwKQotCi0jZGVmaW5lIGV4cGVjdF9ub3RfcmVhY2hlZCguLi4pIHZlcmlmeV9ub3Rf cmVhY2hlZChmYWxzZSwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXNzZXJ0X2NtcCh0LCBhLCBi LCBjbXAsIG5lZ19jbXAsIHByaSwgLi4uKSB2ZXJpZnlfY21wKHRydWUsCVwKLSAgICB0LCBhLCBi LCBjbXAsIG5lZ19jbXAsIHByaSwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXNzZXJ0X3B0cl9l cShhLCBiLCAuLi4pCWFzc2VydF9jbXAodm9pZCAqLCBhLCBiLCA9PSwJXAotICAgICE9LCAicCIs IF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfcHRyX25lKGEsIGIsIC4uLikJYXNzZXJ0X2Nt cCh2b2lkICosIGEsIGIsICE9LAlcCi0gICAgPT0sICJwIiwgX19WQV9BUkdTX18pCi0jZGVmaW5l IGFzc2VydF9wdHJfbnVsbChhLCAuLi4pCQlhc3NlcnRfY21wKHZvaWQgKiwgYSwgTlVMTCwgPT0s CVwKLSAgICAhPSwgInAiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X3B0cl9ub3RfbnVs bChhLCAuLi4pCWFzc2VydF9jbXAodm9pZCAqLCBhLCBOVUxMLCAhPSwJXAotICAgID09LCAicCIs IF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGFzc2VydF9jX2VxKGEsIGIsIC4uLikJYXNzZXJ0X2Nt cChjaGFyLCBhLCBiLCA9PSwgIT0sICJjIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9j X25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChjaGFyLCBhLCBiLCAhPSwgPT0sICJjIiwgX19WQV9B UkdTX18pCi0jZGVmaW5lIGFzc2VydF9jX2x0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcChjaGFyLCBh LCBiLCA8LCA+PSwgImMiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X2NfbGUoYSwgYiwg Li4uKQlhc3NlcnRfY21wKGNoYXIsIGEsIGIsIDw9LCA+LCAiYyIsIF9fVkFfQVJHU19fKQotI2Rl ZmluZSBhc3NlcnRfY19nZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoY2hhciwgYSwgYiwgPj0sIDws ICJjIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9jX2d0KGEsIGIsIC4uLikJYXNzZXJ0 X2NtcChjaGFyLCBhLCBiLCA+LCA8PSwgImMiLCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBhc3Nl cnRfeF9lcShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCA9PSwgIT0sICIjeCIsIF9f VkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfeF9uZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50 LCBhLCBiLCAhPSwgPT0sICIjeCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfeF9sdChh LCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCA8LCA+PSwgIiN4IiwgX19WQV9BUkdTX18p Ci0jZGVmaW5lIGFzc2VydF94X2xlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQsIGEsIGIsIDw9 LCA+LCAiI3giLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X3hfZ2UoYSwgYiwgLi4uKQlh c3NlcnRfY21wKGludCwgYSwgYiwgPj0sIDwsICIjeCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBh c3NlcnRfeF9ndChhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCA+LCA8PSwgIiN4Iiwg X19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXNzZXJ0X2RfZXEoYSwgYiwgLi4uKQlhc3NlcnRfY21w KGludCwgYSwgYiwgPT0sICE9LCAiZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfZF9u ZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCAhPSwgPT0sICJkIiwgX19WQV9BUkdT X18pCi0jZGVmaW5lIGFzc2VydF9kX2x0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQsIGEsIGIs IDwsID49LCAiZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfZF9sZShhLCBiLCAuLi4p CWFzc2VydF9jbXAoaW50LCBhLCBiLCA8PSwgPiwgImQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUg YXNzZXJ0X2RfZ2UoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludCwgYSwgYiwgPj0sIDwsICJkIiwg X19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9kX2d0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcChp bnQsIGEsIGIsID4sIDw9LCAiZCIsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGFzc2VydF91X2Vx KGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQsIGEsIGIsID09LCAhPSwgInUiLCBfX1ZBX0FSR1Nf XykKLSNkZWZpbmUgYXNzZXJ0X3VfbmUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludCwgYSwgYiwg IT0sID09LCAidSIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfdV9sdChhLCBiLCAuLi4p CWFzc2VydF9jbXAoaW50LCBhLCBiLCA8LCA+PSwgInUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUg YXNzZXJ0X3VfbGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludCwgYSwgYiwgPD0sID4sICJ1Iiwg X19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF91X2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChp bnQsIGEsIGIsID49LCA8LCAidSIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfdV9ndChh LCBiLCAuLi4pCWFzc2VydF9jbXAoaW50LCBhLCBiLCA+LCA8PSwgInUiLCBfX1ZBX0FSR1NfXykK LQotI2RlZmluZSBhc3NlcnRfbGRfZXEoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcsIGEsIGIs ID09LAlcCi0gICAgIT0sICJsZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfbGRfbmUo YSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcsIGEsIGIsICE9LAlcCi0gICAgPT0sICJsZCIsIF9f VkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfbGRfbHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxv bmcsIGEsIGIsIDwsCVwKLSAgICA+PSwgImxkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2Vy dF9sZF9sZShhLCBiLCAuLi4pCWFzc2VydF9jbXAobG9uZywgYSwgYiwgPD0sCVwKLSAgICA+LCAi bGQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X2xkX2dlKGEsIGIsIC4uLikJYXNzZXJ0 X2NtcChsb25nLCBhLCBiLCA+PSwJXAotICAgIDwsICJsZCIsIF9fVkFfQVJHU19fKQotI2RlZmlu ZSBhc3NlcnRfbGRfZ3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcsIGEsIGIsID4sCVwKLSAg ICA8PSwgImxkIiwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXNzZXJ0X2x1X2VxKGEsIGIsIC4u LikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nLAlcCi0gICAgYSwgYiwgPT0sICE9LCAibHUiLCBf X1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X2x1X25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1 bnNpZ25lZCBsb25nLAlcCi0gICAgYSwgYiwgIT0sID09LCAibHUiLCBfX1ZBX0FSR1NfXykKLSNk ZWZpbmUgYXNzZXJ0X2x1X2x0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nLAlc Ci0gICAgYSwgYiwgPCwgPj0sICJsdSIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfbHVf bGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVuc2lnbmVkIGxvbmcsCVwKLSAgICBhLCBiLCA8PSwg PiwgImx1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9sdV9nZShhLCBiLCAuLi4pCWFz c2VydF9jbXAodW5zaWduZWQgbG9uZywJXAotICAgIGEsIGIsID49LCA8LCAibHUiLCBfX1ZBX0FS R1NfXykKLSNkZWZpbmUgYXNzZXJ0X2x1X2d0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1bnNpZ25l ZCBsb25nLAlcCi0gICAgYSwgYiwgPiwgPD0sICJsdSIsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5l IGFzc2VydF9xZF9lcShhLCBiLCAuLi4pCWFzc2VydF9jbXAobG9uZyBsb25nLCBhLCBiLCA9PSwJ XAotICAgICE9LCAicWQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X3FkX25lKGEsIGIs IC4uLikJYXNzZXJ0X2NtcChsb25nIGxvbmcsIGEsIGIsICE9LAlcCi0gICAgPT0sICJxZCIsIF9f VkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfcWRfbHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxv bmcgbG9uZywgYSwgYiwgPCwJXAotICAgID49LCAicWQiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUg YXNzZXJ0X3FkX2xlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChsb25nIGxvbmcsIGEsIGIsIDw9LAlc Ci0gICAgPiwgInFkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9xZF9nZShhLCBiLCAu Li4pCWFzc2VydF9jbXAobG9uZyBsb25nLCBhLCBiLCA+PSwJXAotICAgIDwsICJxZCIsIF9fVkFf QVJHU19fKQotI2RlZmluZSBhc3NlcnRfcWRfZ3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGxvbmcg bG9uZywgYSwgYiwgPiwJXAotICAgIDw9LCAicWQiLCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBh c3NlcnRfcXVfZXEoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVuc2lnbmVkIGxvbmcgbG9uZywJXAot ICAgIGEsIGIsID09LCAhPSwgInF1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9xdV9u ZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodW5zaWduZWQgbG9uZyBsb25nLAlcCi0gICAgYSwgYiwg IT0sID09LCAicXUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X3F1X2x0KGEsIGIsIC4u LikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nIGxvbmcsCVwKLSAgICBhLCBiLCA8LCA+PSwgInF1 IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9xdV9sZShhLCBiLCAuLi4pCWFzc2VydF9j bXAodW5zaWduZWQgbG9uZyBsb25nLAlcCi0gICAgYSwgYiwgPD0sID4sICJxdSIsIF9fVkFfQVJH U19fKQotI2RlZmluZSBhc3NlcnRfcXVfZ2UoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVuc2lnbmVk IGxvbmcgbG9uZywJXAotICAgIGEsIGIsID49LCA8LCAicXUiLCBfX1ZBX0FSR1NfXykKLSNkZWZp bmUgYXNzZXJ0X3F1X2d0KGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1bnNpZ25lZCBsb25nIGxvbmcs CVwKLSAgICBhLCBiLCA+LCA8PSwgInF1IiwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXNzZXJ0 X2pkX2VxKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnRtYXhfdCwgYSwgYiwgPT0sCVwKLSAgICAh PSwgImpkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9qZF9uZShhLCBiLCAuLi4pCWFz c2VydF9jbXAoaW50bWF4X3QsIGEsIGIsICE9LAlcCi0gICAgPT0sICJqZCIsIF9fVkFfQVJHU19f KQotI2RlZmluZSBhc3NlcnRfamRfbHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludG1heF90LCBh LCBiLCA8LAlcCi0gICAgPj0sICJqZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfamRf bGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludG1heF90LCBhLCBiLCA8PSwJXAotICAgID4sICJq ZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfamRfZ2UoYSwgYiwgLi4uKQlhc3NlcnRf Y21wKGludG1heF90LCBhLCBiLCA+PSwJXAotICAgIDwsICJqZCIsIF9fVkFfQVJHU19fKQotI2Rl ZmluZSBhc3NlcnRfamRfZ3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludG1heF90LCBhLCBiLCA+ LAlcCi0gICAgPD0sICJqZCIsIF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGFzc2VydF9qdV9lcShh LCBiLCAuLi4pCWFzc2VydF9jbXAodWludG1heF90LCBhLCBiLCA9PSwJXAotICAgICE9LCAianUi LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X2p1X25lKGEsIGIsIC4uLikJYXNzZXJ0X2Nt cCh1aW50bWF4X3QsIGEsIGIsICE9LAlcCi0gICAgPT0sICJqdSIsIF9fVkFfQVJHU19fKQotI2Rl ZmluZSBhc3NlcnRfanVfbHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnRtYXhfdCwgYSwgYiwg PCwJXAotICAgID49LCAianUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X2p1X2xlKGEs IGIsIC4uLikJYXNzZXJ0X2NtcCh1aW50bWF4X3QsIGEsIGIsIDw9LAlcCi0gICAgPiwgImp1Iiwg X19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9qdV9nZShhLCBiLCAuLi4pCWFzc2VydF9jbXAo dWludG1heF90LCBhLCBiLCA+PSwJXAotICAgIDwsICJqdSIsIF9fVkFfQVJHU19fKQotI2RlZmlu ZSBhc3NlcnRfanVfZ3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnRtYXhfdCwgYSwgYiwgPiwJ XAotICAgIDw9LCAianUiLCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBhc3NlcnRfemRfZXEoYSwg YiwgLi4uKQlhc3NlcnRfY21wKHNzaXplX3QsIGEsIGIsID09LAlcCi0gICAgIT0sICJ6ZCIsIF9f VkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfemRfbmUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNz aXplX3QsIGEsIGIsICE9LAlcCi0gICAgPT0sICJ6ZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBh c3NlcnRfemRfbHQoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNzaXplX3QsIGEsIGIsIDwsCVwKLSAg ICA+PSwgInpkIiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF96ZF9sZShhLCBiLCAuLi4p CWFzc2VydF9jbXAoc3NpemVfdCwgYSwgYiwgPD0sCVwKLSAgICA+LCAiemQiLCBfX1ZBX0FSR1Nf XykKLSNkZWZpbmUgYXNzZXJ0X3pkX2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChzc2l6ZV90LCBh LCBiLCA+PSwJXAotICAgIDwsICJ6ZCIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfemRf Z3QoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNzaXplX3QsIGEsIGIsID4sCVwKLSAgICA8PSwgInpk IiwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXNzZXJ0X3p1X2VxKGEsIGIsIC4uLikJYXNzZXJ0 X2NtcChzaXplX3QsIGEsIGIsID09LAlcCi0gICAgIT0sICJ6dSIsIF9fVkFfQVJHU19fKQotI2Rl ZmluZSBhc3NlcnRfenVfbmUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNpemVfdCwgYSwgYiwgIT0s CVwKLSAgICA9PSwgInp1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF96dV9sdChhLCBi LCAuLi4pCWFzc2VydF9jbXAoc2l6ZV90LCBhLCBiLCA8LAlcCi0gICAgPj0sICJ6dSIsIF9fVkFf QVJHU19fKQotI2RlZmluZSBhc3NlcnRfenVfbGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHNpemVf dCwgYSwgYiwgPD0sCVwKLSAgICA+LCAienUiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0 X3p1X2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChzaXplX3QsIGEsIGIsID49LAlcCi0gICAgPCwg Inp1IiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF96dV9ndChhLCBiLCAuLi4pCWFzc2Vy dF9jbXAoc2l6ZV90LCBhLCBiLCA+LAlcCi0gICAgPD0sICJ6dSIsIF9fVkFfQVJHU19fKQotCi0j ZGVmaW5lIGFzc2VydF9kMzJfZXEoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludDMyX3QsIGEsIGIs ID09LAlcCi0gICAgIT0sIEZNVGQzMiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9kMzJf bmUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludDMyX3QsIGEsIGIsICE9LAlcCi0gICAgPT0sIEZN VGQzMiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9kMzJfbHQoYSwgYiwgLi4uKQlhc3Nl cnRfY21wKGludDMyX3QsIGEsIGIsIDwsCVwKLSAgICA+PSwgRk1UZDMyLCBfX1ZBX0FSR1NfXykK LSNkZWZpbmUgYXNzZXJ0X2QzMl9sZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50MzJfdCwgYSwg YiwgPD0sCVwKLSAgICA+LCBGTVRkMzIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfZDMy X2dlKGEsIGIsIC4uLikJYXNzZXJ0X2NtcChpbnQzMl90LCBhLCBiLCA+PSwJXAotICAgIDwsIEZN VGQzMiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF9kMzJfZ3QoYSwgYiwgLi4uKQlhc3Nl cnRfY21wKGludDMyX3QsIGEsIGIsID4sCVwKLSAgICA8PSwgRk1UZDMyLCBfX1ZBX0FSR1NfXykK LQotI2RlZmluZSBhc3NlcnRfdTMyX2VxKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1aW50MzJfdCwg YSwgYiwgPT0sCVwKLSAgICAhPSwgRk1UdTMyLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0 X3UzMl9uZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodWludDMyX3QsIGEsIGIsICE9LAlcCi0gICAg PT0sIEZNVHUzMiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF91MzJfbHQoYSwgYiwgLi4u KQlhc3NlcnRfY21wKHVpbnQzMl90LCBhLCBiLCA8LAlcCi0gICAgPj0sIEZNVHUzMiwgX19WQV9B UkdTX18pCi0jZGVmaW5lIGFzc2VydF91MzJfbGUoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnQz Ml90LCBhLCBiLCA8PSwJXAotICAgID4sIEZNVHUzMiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFz c2VydF91MzJfZ2UoYSwgYiwgLi4uKQlhc3NlcnRfY21wKHVpbnQzMl90LCBhLCBiLCA+PSwJXAot ICAgIDwsIEZNVHUzMiwgX19WQV9BUkdTX18pCi0jZGVmaW5lIGFzc2VydF91MzJfZ3QoYSwgYiwg Li4uKQlhc3NlcnRfY21wKHVpbnQzMl90LCBhLCBiLCA+LAlcCi0gICAgPD0sIEZNVHUzMiwgX19W QV9BUkdTX18pCi0KLSNkZWZpbmUgYXNzZXJ0X2Q2NF9lcShhLCBiLCAuLi4pCWFzc2VydF9jbXAo aW50NjRfdCwgYSwgYiwgPT0sCVwKLSAgICAhPSwgRk1UZDY0LCBfX1ZBX0FSR1NfXykKLSNkZWZp bmUgYXNzZXJ0X2Q2NF9uZShhLCBiLCAuLi4pCWFzc2VydF9jbXAoaW50NjRfdCwgYSwgYiwgIT0s CVwKLSAgICA9PSwgRk1UZDY0LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X2Q2NF9sdChh LCBiLCAuLi4pCWFzc2VydF9jbXAoaW50NjRfdCwgYSwgYiwgPCwJXAotICAgID49LCBGTVRkNjQs IF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfZDY0X2xlKGEsIGIsIC4uLikJYXNzZXJ0X2Nt cChpbnQ2NF90LCBhLCBiLCA8PSwJXAotICAgID4sIEZNVGQ2NCwgX19WQV9BUkdTX18pCi0jZGVm aW5lIGFzc2VydF9kNjRfZ2UoYSwgYiwgLi4uKQlhc3NlcnRfY21wKGludDY0X3QsIGEsIGIsID49 LAlcCi0gICAgPCwgRk1UZDY0LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X2Q2NF9ndChh LCBiLCAuLi4pCWFzc2VydF9jbXAoaW50NjRfdCwgYSwgYiwgPiwJXAotICAgIDw9LCBGTVRkNjQs IF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIGFzc2VydF91NjRfZXEoYSwgYiwgLi4uKQlhc3NlcnRf Y21wKHVpbnQ2NF90LCBhLCBiLCA9PSwJXAotICAgICE9LCBGTVR1NjQsIF9fVkFfQVJHU19fKQot I2RlZmluZSBhc3NlcnRfdTY0X25lKGEsIGIsIC4uLikJYXNzZXJ0X2NtcCh1aW50NjRfdCwgYSwg YiwgIT0sCVwKLSAgICA9PSwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X3U2 NF9sdChhLCBiLCAuLi4pCWFzc2VydF9jbXAodWludDY0X3QsIGEsIGIsIDwsCVwKLSAgICA+PSwg Rk1UdTY0LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X3U2NF9sZShhLCBiLCAuLi4pCWFz c2VydF9jbXAodWludDY0X3QsIGEsIGIsIDw9LAlcCi0gICAgPiwgRk1UdTY0LCBfX1ZBX0FSR1Nf XykKLSNkZWZpbmUgYXNzZXJ0X3U2NF9nZShhLCBiLCAuLi4pCWFzc2VydF9jbXAodWludDY0X3Qs IGEsIGIsID49LAlcCi0gICAgPCwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0 X3U2NF9ndChhLCBiLCAuLi4pCWFzc2VydF9jbXAodWludDY0X3QsIGEsIGIsID4sCVwKLSAgICA8 PSwgRk1UdTY0LCBfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBhc3NlcnRfYl9lcShhLCBiLCAuLi4p CXZlcmlmeV9iX2VxKHRydWUsIGEsIGIsIF9fVkFfQVJHU19fKQotI2RlZmluZSBhc3NlcnRfYl9u ZShhLCBiLCAuLi4pCXZlcmlmeV9iX25lKHRydWUsIGEsIGIsIF9fVkFfQVJHU19fKQotCi0jZGVm aW5lIGFzc2VydF90cnVlKGEsIC4uLikJYXNzZXJ0X2JfZXEoYSwgdHJ1ZSwgX19WQV9BUkdTX18p Ci0jZGVmaW5lIGFzc2VydF9mYWxzZShhLCAuLi4pCWFzc2VydF9iX2VxKGEsIGZhbHNlLCBfX1ZB X0FSR1NfXykKLQotI2RlZmluZSBhc3NlcnRfc3RyX2VxKGEsIGIsIC4uLikgdmVyaWZ5X3N0cl9l cSh0cnVlLCBhLCBiLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgYXNzZXJ0X3N0cl9uZShhLCBiLCAu Li4pIHZlcmlmeV9zdHJfbmUodHJ1ZSwgYSwgYiwgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgYXNz ZXJ0X25vdF9yZWFjaGVkKC4uLikgdmVyaWZ5X25vdF9yZWFjaGVkKHRydWUsIF9fVkFfQVJHU19f KQotCi0vKgotICogSWYgdGhpcyBlbnVtIGNoYW5nZXMsIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyBp biB0ZXN0L3Rlc3Quc2guaW4gYXJlIGFsc28KLSAqIG5lY2Vzc2FyeS4KLSAqLwotdHlwZWRlZiBl bnVtIHsKLQl0ZXN0X3N0YXR1c19wYXNzID0gMCwKLQl0ZXN0X3N0YXR1c19za2lwID0gMSwKLQl0 ZXN0X3N0YXR1c19mYWlsID0gMiwKLQotCXRlc3Rfc3RhdHVzX2NvdW50ID0gMwotfSB0ZXN0X3N0 YXR1c190OwotCi10eXBlZGVmIHZvaWQgKHRlc3RfdCkodm9pZCk7Ci0KLSNkZWZpbmUgVEVTVF9C RUdJTihmKQkJCQkJCQlcCi1zdGF0aWMgdm9pZAkJCQkJCQkJXAotZih2b2lkKSB7CQkJCQkJCQlc Ci0JcF90ZXN0X2luaXQoI2YpOwotCi0jZGVmaW5lIFRFU1RfRU5ECQkJCQkJCVwKLQlnb3RvIGxh YmVsX3Rlc3RfZW5kOwkJCQkJCVwKLWxhYmVsX3Rlc3RfZW5kOgkJCQkJCQkJXAotCXBfdGVzdF9m aW5pKCk7CQkJCQkJCVwKLX0KLQotI2RlZmluZSB0ZXN0KC4uLikJCQkJCQkJXAotCXBfdGVzdChf X1ZBX0FSR1NfXywgTlVMTCkKLQotI2RlZmluZSB0ZXN0X25vX3JlZW50cmFuY3koLi4uKQkJCQkJ CQlcCi0JcF90ZXN0X25vX3JlZW50cmFuY3koX19WQV9BUkdTX18sIE5VTEwpCi0KLSNkZWZpbmUg dGVzdF9ub19tYWxsb2NfaW5pdCguLi4pCQkJCQlcCi0JcF90ZXN0X25vX21hbGxvY19pbml0KF9f VkFfQVJHU19fLCBOVUxMKQotCi0jZGVmaW5lIHRlc3Rfc2tpcF9pZihlKSBkbyB7CQkJCQkJXAot CWlmIChlKSB7CQkJCQkJCVwKLQkJdGVzdF9za2lwKCIlczolczolZDogVGVzdCBza2lwcGVkOiAo JXMpIiwJCVwKLQkJICAgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18sICNlKTsJCQlcCi0J CWdvdG8gbGFiZWxfdGVzdF9lbmQ7CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQot Ym9vbCB0ZXN0X2lzX3JlZW50cmFudCgpOwotCi12b2lkCXRlc3Rfc2tpcChjb25zdCBjaGFyICpm b3JtYXQsIC4uLikgSkVNQUxMT0NfRk9STUFUX1BSSU5URigxLCAyKTsKLXZvaWQJdGVzdF9mYWls KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBKRU1BTExPQ19GT1JNQVRfUFJJTlRGKDEsIDIpOwot Ci0vKiBGb3IgcHJpdmF0ZSB1c2UgYnkgbWFjcm9zLiAqLwotdGVzdF9zdGF0dXNfdAlwX3Rlc3Qo dGVzdF90ICp0LCAuLi4pOwotdGVzdF9zdGF0dXNfdAlwX3Rlc3Rfbm9fcmVlbnRyYW5jeSh0ZXN0 X3QgKnQsIC4uLik7Ci10ZXN0X3N0YXR1c190CXBfdGVzdF9ub19tYWxsb2NfaW5pdCh0ZXN0X3Qg KnQsIC4uLik7Ci12b2lkCXBfdGVzdF9pbml0KGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZAlwX3Rl c3RfZmluaSh2b2lkKTsKLXZvaWQJcF90ZXN0X2ZhaWwoY29uc3QgY2hhciAqcHJlZml4LCBjb25z dCBjaGFyICptZXNzYWdlKTsKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90aGQuaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L3RoZC5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA0N2E1MTI2Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW5jbHVkZS90ZXN0L3RoZC5oCisrKyAvZGV2 L251bGwKQEAgLTEsOSArMCwwIEBACi0vKiBBYnN0cmFjdGlvbiBsYXllciBmb3IgdGhyZWFkaW5n IGluIHRlc3RzLiAqLwotI2lmZGVmIF9XSU4zMgotdHlwZWRlZiBIQU5ETEUgdGhkX3Q7Ci0jZWxz ZQotdHlwZWRlZiBwdGhyZWFkX3QgdGhkX3Q7Ci0jZW5kaWYKLQotdm9pZAl0aGRfY3JlYXRlKHRo ZF90ICp0aGQsIHZvaWQgKigqcHJvYykodm9pZCAqKSwgdm9pZCAqYXJnKTsKLXZvaWQJdGhkX2pv aW4odGhkX3QgdGhkLCB2b2lkICoqcmV0KTsKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90aW1lci5oIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbmNsdWRlL3Rlc3QvdGltZXIu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlNjE5MS4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2luY2x1ZGUvdGVzdC90 aW1lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLyogU2ltcGxlIHRpbWVyLCBm b3IgdXNlIGluIGJlbmNobWFyayByZXBvcnRpbmcuICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlu c3RpbWVfdCB0MDsKLQluc3RpbWVfdCB0MTsKLX0gdGltZWRlbHRhX3Q7Ci0KLXZvaWQJdGltZXJf c3RhcnQodGltZWRlbHRhX3QgKnRpbWVyKTsKLXZvaWQJdGltZXJfc3RvcCh0aW1lZGVsdGFfdCAq dGltZXIpOwotdWludDY0X3QJdGltZXJfdXNlYyhjb25zdCB0aW1lZGVsdGFfdCAqdGltZXIpOwot dm9pZAl0aW1lcl9yYXRpbyh0aW1lZGVsdGFfdCAqYSwgdGltZWRlbHRhX3QgKmIsIGNoYXIgKmJ1 Ziwgc2l6ZV90IGJ1Zmxlbik7CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9NQUxMT0NYX0FSRU5BLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL01BTExPQ1hf QVJFTkEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U2MWRmMC4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0 aW9uL01BTExPQ1hfQVJFTkEuYworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLSNpbmNs dWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2RlZmluZSBOVEhSRUFEUyAxMAotCi1zdGF0 aWMgYm9vbCBoYXZlX2RzcyA9Ci0jaWZkZWYgSkVNQUxMT0NfRFNTCi0gICAgdHJ1ZQotI2Vsc2UK LSAgICBmYWxzZQotI2VuZGlmCi0gICAgOwotCi12b2lkICoKLXRoZF9zdGFydCh2b2lkICphcmcp IHsKLQl1bnNpZ25lZCB0aHJlYWRfaW5kID0gKHVuc2lnbmVkKSh1aW50cHRyX3QpYXJnOwotCXVu c2lnbmVkIGFyZW5hX2luZDsKLQl2b2lkICpwOwotCXNpemVfdCBzejsKLQotCXN6ID0gc2l6ZW9m KGFyZW5hX2luZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lk ICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAwKSwKLQkgICAgMCwgIkVycm9yIGluIGFyZW5hcy5j cmVhdGUiKTsKLQotCWlmICh0aHJlYWRfaW5kICUgNCAhPSAzKSB7Ci0JCXNpemVfdCBtaWJbM107 Ci0JCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVvZihzaXplX3QpOwotCQljb25z dCBjaGFyICpkc3NfcHJlY3NbXSA9IHsiZGlzYWJsZWQiLCAicHJpbWFyeSIsICJzZWNvbmRhcnki fTsKLQkJdW5zaWduZWQgcHJlY19pbmQgPSB0aHJlYWRfaW5kICUKLQkJICAgIChzaXplb2YoZHNz X3ByZWNzKS9zaXplb2YoY2hhciopKTsKLQkJY29uc3QgY2hhciAqZHNzID0gZHNzX3ByZWNzW3By ZWNfaW5kXTsKLQkJaW50IGV4cGVjdGVkX2VyciA9IChoYXZlX2RzcyB8fCBwcmVjX2luZCA9PSAw KSA/IDAgOiBFRkFVTFQ7Ci0JCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAu ZHNzIiwgbWliLCAmbWlibGVuKSwgMCwKLQkJICAgICJFcnJvciBpbiBtYWxsY3RsbmFtZXRvbWli KCkiKTsKLQkJbWliWzFdID0gYXJlbmFfaW5kOwotCQlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIo bWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsICh2b2lkICopJmRzcywKLQkJICAgIHNpemVvZihjb25z dCBjaGFyICopKSwgZXhwZWN0ZWRfZXJyLAotCQkgICAgIkVycm9yIGluIG1hbGxjdGxieW1pYigp Iik7Ci0JfQotCi0JcCA9IG1hbGxvY3goMSwgTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpKTsKLQll eHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBlcnJvciIpOwotCWRh bGxvY3gocCwgMCk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X01BTExP Q1hfQVJFTkEpIHsKLQl0aGRfdCB0aGRzW05USFJFQURTXTsKLQl1bnNpZ25lZCBpOwotCi0JZm9y IChpID0gMDsgaSA8IE5USFJFQURTOyBpKyspIHsKLQkJdGhkX2NyZWF0ZSgmdGhkc1tpXSwgdGhk X3N0YXJ0LAotCQkgICAgKHZvaWQgKikodWludHB0cl90KWkpOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBOVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9qb2luKHRoZHNbaV0sIE5VTEwpOwotCX0KLX0K LVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3Rf TUFMTE9DWF9BUkVOQSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9hbGlnbmVkX2FsbG9jLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2FsaWduZWRf YWxsb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM3ZDViYS4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0 aW9uL2FsaWduZWRfYWxsb2MuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0jaW5j bHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNkZWZpbmUgTUFYQUxJR04gKCgoc2l6ZV90 KTEpIDw8IDIzKQotCi0vKgotICogT24gc3lzdGVtcyB3aGljaCBjYW4ndCBtZXJnZSBleHRlbnRz LCB0ZXN0cyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBnZW5lcmF0ZQotICogYSBsb3Qgb2YgZGly dHkgbWVtb3J5IHZlcnkgcXVpY2tseS4gIFB1cmdpbmcgYmV0d2VlbiBjeWNsZXMgbWl0aWdhdGVz Ci0gKiBwb3RlbnRpYWwgT09NIG9uIGUuZy4gMzItYml0IFdpbmRvd3MuCi0gKi8KLXN0YXRpYyB2 b2lkCi1wdXJnZSh2b2lkKSB7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5wdXJnZSIs IE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGVycm9y Iik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9hbGlnbm1lbnRfZXJyb3JzKSB7Ci0Jc2l6ZV90IGFs aWdubWVudDsKLQl2b2lkICpwOwotCi0JYWxpZ25tZW50ID0gMDsKLQlzZXRfZXJybm8oMCk7Ci0J cCA9IGFsaWduZWRfYWxsb2MoYWxpZ25tZW50LCAxKTsKLQlleHBlY3RfZmFsc2UocCAhPSBOVUxM IHx8IGdldF9lcnJubygpICE9IEVJTlZBTCwKLQkgICAgIkV4cGVjdGVkIGVycm9yIGZvciBpbnZh bGlkIGFsaWdubWVudCAlenUiLCBhbGlnbm1lbnQpOwotCi0JZm9yIChhbGlnbm1lbnQgPSBzaXpl b2Yoc2l6ZV90KTsgYWxpZ25tZW50IDwgTUFYQUxJR047Ci0JICAgIGFsaWdubWVudCA8PD0gMSkg ewotCQlzZXRfZXJybm8oMCk7Ci0JCXAgPSBhbGlnbmVkX2FsbG9jKGFsaWdubWVudCArIDEsIDEp OwotCQlleHBlY3RfZmFsc2UocCAhPSBOVUxMIHx8IGdldF9lcnJubygpICE9IEVJTlZBTCwKLQkJ ICAgICJFeHBlY3RlZCBlcnJvciBmb3IgaW52YWxpZCBhbGlnbm1lbnQgJXp1IiwKLQkJICAgIGFs aWdubWVudCArIDEpOwotCX0KLX0KLVRFU1RfRU5ECi0KLQotLyoKLSAqIEdDQyAiLVdhbGxvYy1z aXplLWxhcmdlci10aGFuIiB3YXJuaW5nIGRldGVjdHMgd2hlbiBvbmUgb2YgdGhlIG1lbW9yeQot ICogYWxsb2NhdGlvbiBmdW5jdGlvbnMgaXMgY2FsbGVkIHdpdGggYSBzaXplIGxhcmdlciB0aGFu IHRoZSBtYXhpbXVtIHNpemUgdGhhdAotICogdGhleSBzdXBwb3J0LiBIZXJlIHdlIHdhbnQgdG8g ZXhwbGljaXRseSB0ZXN0IHRoYXQgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb25zCi0gKiBkbyBpbmRl ZWQgZmFpbCBwcm9wZXJseSB3aGVuIHRoaXMgaXMgdGhlIGNhc2UsIHdoaWNoIHRyaWdnZXJzIHRo ZSB3YXJuaW5nLgotICogVGhlcmVmb3JlIHdlIGRpc2FibGUgdGhlIHdhcm5pbmcgZm9yIHRoZXNl IHRlc3RzLgotICovCi1KRU1BTExPQ19ESUFHTk9TVElDX1BVU0gKLUpFTUFMTE9DX0RJQUdOT1NU SUNfSUdOT1JFX0FMTE9DX1NJWkVfTEFSR0VSX1RIQU4KLQotVEVTVF9CRUdJTih0ZXN0X29vbV9l cnJvcnMpIHsKLQlzaXplX3QgYWxpZ25tZW50LCBzaXplOwotCXZvaWQgKnA7Ci0KLSNpZiBMR19T SVpFT0ZfUFRSID09IDMKLQlhbGlnbm1lbnQgPSBVSU5UNjRfQygweDgwMDAwMDAwMDAwMDAwMDAp OwotCXNpemUgICAgICA9IFVJTlQ2NF9DKDB4ODAwMDAwMDAwMDAwMDAwMCk7Ci0jZWxzZQotCWFs aWdubWVudCA9IDB4ODAwMDAwMDBMVTsKLQlzaXplICAgICAgPSAweDgwMDAwMDAwTFU7Ci0jZW5k aWYKLQlzZXRfZXJybm8oMCk7Ci0JcCA9IGFsaWduZWRfYWxsb2MoYWxpZ25tZW50LCBzaXplKTsK LQlleHBlY3RfZmFsc2UocCAhPSBOVUxMIHx8IGdldF9lcnJubygpICE9IEVOT01FTSwKLQkgICAg IkV4cGVjdGVkIGVycm9yIGZvciBhbGlnbmVkX2FsbG9jKCV6dSwgJXp1KSIsCi0JICAgIGFsaWdu bWVudCwgc2l6ZSk7Ci0KLSNpZiBMR19TSVpFT0ZfUFRSID09IDMKLQlhbGlnbm1lbnQgPSBVSU5U NjRfQygweDQwMDAwMDAwMDAwMDAwMDApOwotCXNpemUgICAgICA9IFVJTlQ2NF9DKDB4YzAwMDAw MDAwMDAwMDAwMSk7Ci0jZWxzZQotCWFsaWdubWVudCA9IDB4NDAwMDAwMDBMVTsKLQlzaXplICAg ICAgPSAweGMwMDAwMDAxTFU7Ci0jZW5kaWYKLQlzZXRfZXJybm8oMCk7Ci0JcCA9IGFsaWduZWRf YWxsb2MoYWxpZ25tZW50LCBzaXplKTsKLQlleHBlY3RfZmFsc2UocCAhPSBOVUxMIHx8IGdldF9l cnJubygpICE9IEVOT01FTSwKLQkgICAgIkV4cGVjdGVkIGVycm9yIGZvciBhbGlnbmVkX2FsbG9j KCV6dSwgJXp1KSIsCi0JICAgIGFsaWdubWVudCwgc2l6ZSk7Ci0KLQlhbGlnbm1lbnQgPSAweDEw TFU7Ci0jaWYgTEdfU0laRU9GX1BUUiA9PSAzCi0Jc2l6ZSA9IFVJTlQ2NF9DKDB4ZmZmZmZmZmZm ZmZmZmZmMCk7Ci0jZWxzZQotCXNpemUgPSAweGZmZmZmZmYwTFU7Ci0jZW5kaWYKLQlzZXRfZXJy bm8oMCk7Ci0JcCA9IGFsaWduZWRfYWxsb2MoYWxpZ25tZW50LCBzaXplKTsKLQlleHBlY3RfZmFs c2UocCAhPSBOVUxMIHx8IGdldF9lcnJubygpICE9IEVOT01FTSwKLQkgICAgIkV4cGVjdGVkIGVy cm9yIGZvciBhbGlnbmVkX2FsbG9jKCZwLCAlenUsICV6dSkiLAotCSAgICBhbGlnbm1lbnQsIHNp emUpOwotfQotVEVTVF9FTkQKLQotLyogUmUtZW5hYmxlIHRoZSAiLVdhbGxvYy1zaXplLWxhcmdl ci10aGFuPSIgd2FybmluZyAqLwotSkVNQUxMT0NfRElBR05PU1RJQ19QT1AKLQotVEVTVF9CRUdJ Tih0ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSkgewotI2RlZmluZSBOSVRFUiA0Ci0Jc2l6ZV90IGFs aWdubWVudCwgc2l6ZSwgdG90YWw7Ci0JdW5zaWduZWQgaTsKLQl2b2lkICpwc1tOSVRFUl07Ci0K LQlmb3IgKGkgPSAwOyBpIDwgTklURVI7IGkrKykgewotCQlwc1tpXSA9IE5VTEw7Ci0JfQotCi0J Zm9yIChhbGlnbm1lbnQgPSA4OwotCSAgICBhbGlnbm1lbnQgPD0gTUFYQUxJR047Ci0JICAgIGFs aWdubWVudCA8PD0gMSkgewotCQl0b3RhbCA9IDA7Ci0JCWZvciAoc2l6ZSA9IDE7Ci0JCSAgICBz aXplIDwgMyAqIGFsaWdubWVudCAmJiBzaXplIDwgKDFVIDw8IDMxKTsKLQkJICAgIHNpemUgKz0g KGFsaWdubWVudCA+PiAoTEdfU0laRU9GX1BUUi0xKSkgLSAxKSB7Ci0JCQlmb3IgKGkgPSAwOyBp IDwgTklURVI7IGkrKykgewotCQkJCXBzW2ldID0gYWxpZ25lZF9hbGxvYyhhbGlnbm1lbnQsIHNp emUpOwotCQkJCWlmIChwc1tpXSA9PSBOVUxMKSB7Ci0JCQkJCWNoYXIgYnVmW0JVRkVSUk9SX0JV Rl07Ci0KLQkJCQkJYnVmZXJyb3IoZ2V0X2Vycm5vKCksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQkJ CQl0ZXN0X2ZhaWwoCi0JCQkJCSAgICAiRXJyb3IgZm9yIGFsaWdubWVudD0lenUsICIKLQkJCQkJ ICAgICJzaXplPSV6dSAoJSN6eCk6ICVzIiwKLQkJCQkJICAgIGFsaWdubWVudCwgc2l6ZSwgc2l6 ZSwgYnVmKTsKLQkJCQl9Ci0JCQkJdG90YWwgKz0gVEVTVF9NQUxMT0NfU0laRShwc1tpXSk7Ci0J CQkJaWYgKHRvdGFsID49IChNQVhBTElHTiA8PCAxKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0J CQl9Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTklURVI7IGkrKykgewotCQkJCWlmIChwc1tpXSAhPSBO VUxMKSB7Ci0JCQkJCWZyZWUocHNbaV0pOwotCQkJCQlwc1tpXSA9IE5VTEw7Ci0JCQkJfQotCQkJ fQotCQl9Ci0JCXB1cmdlKCk7Ci0JfQotI3VuZGVmIE5JVEVSCi19Ci1URVNUX0VORAotCi1URVNU X0JFR0lOKHRlc3RfemVyb19hbGxvYykgewotCXZvaWQgKnJlcyA9IGFsaWduZWRfYWxsb2MoOCwg MCk7Ci0JYXNzZXJ0KHJlcyk7Ci0Jc2l6ZV90IHVzYWJsZSA9IFRFU1RfTUFMTE9DX1NJWkUocmVz KTsKLQlhc3NlcnQodXNhYmxlID4gMCk7Ci0JZnJlZShyZXMpOwotfQotVEVTVF9FTkQKLQotaW50 Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9hbGlnbm1lbnRfZXJyb3Jz LAotCSAgICB0ZXN0X29vbV9lcnJvcnMsCi0JICAgIHRlc3RfYWxpZ25tZW50X2FuZF9zaXplLAot CSAgICB0ZXN0X3plcm9fYWxsb2MpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vYWxsb2NhdGVkLmMgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2FsbG9j YXRlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzY0MjcyLi4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRp b24vYWxsb2NhdGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotI2luY2x1ZGUg InRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi1zdGF0aWMgY29uc3QgYm9vbCBjb25maWdfc3RhdHMg PQotI2lmZGVmIEpFTUFMTE9DX1NUQVRTCi0gICAgdHJ1ZQotI2Vsc2UKLSAgICBmYWxzZQotI2Vu ZGlmCi0gICAgOwotCi12b2lkICoKLXRoZF9zdGFydCh2b2lkICphcmcpIHsKLQlpbnQgZXJyOwot CXZvaWQgKnA7Ci0JdWludDY0X3QgYTAsIGExLCBkMCwgZDE7Ci0JdWludDY0X3QgKmFwMCwgKmFw MSwgKmRwMCwgKmRwMTsKLQlzaXplX3Qgc3osIHVzaXplOwotCi0Jc3ogPSBzaXplb2YoYTApOwot CWlmICgoZXJyID0gbWFsbGN0bCgidGhyZWFkLmFsbG9jYXRlZCIsICh2b2lkICopJmEwLCAmc3os IE5VTEwsIDApKSkgewotCQlpZiAoZXJyID09IEVOT0VOVCkgewotCQkJZ290byBsYWJlbF9FTk9F TlQ7Ci0JCX0KLQkJdGVzdF9mYWlsKCIlcygpOiBFcnJvciBpbiBtYWxsY3RsKCk6ICVzIiwgX19m dW5jX18sCi0JCSAgICBzdHJlcnJvcihlcnIpKTsKLQl9Ci0Jc3ogPSBzaXplb2YoYXAwKTsKLQlp ZiAoKGVyciA9IG1hbGxjdGwoInRocmVhZC5hbGxvY2F0ZWRwIiwgKHZvaWQgKikmYXAwLCAmc3os IE5VTEwsIDApKSkgewotCQlpZiAoZXJyID09IEVOT0VOVCkgewotCQkJZ290byBsYWJlbF9FTk9F TlQ7Ci0JCX0KLQkJdGVzdF9mYWlsKCIlcygpOiBFcnJvciBpbiBtYWxsY3RsKCk6ICVzIiwgX19m dW5jX18sCi0JCSAgICBzdHJlcnJvcihlcnIpKTsKLQl9Ci0JZXhwZWN0X3U2NF9lcSgqYXAwLCBh MCwKLQkgICAgIlwidGhyZWFkLmFsbG9jYXRlZHBcIiBzaG91bGQgcHJvdmlkZSBhIHBvaW50ZXIg dG8gaW50ZXJuYWwgIgotCSAgICAic3RvcmFnZSIpOwotCi0Jc3ogPSBzaXplb2YoZDApOwotCWlm ICgoZXJyID0gbWFsbGN0bCgidGhyZWFkLmRlYWxsb2NhdGVkIiwgKHZvaWQgKikmZDAsICZzeiwg TlVMTCwgMCkpKSB7Ci0JCWlmIChlcnIgPT0gRU5PRU5UKSB7Ci0JCQlnb3RvIGxhYmVsX0VOT0VO VDsKLQkJfQotCQl0ZXN0X2ZhaWwoIiVzKCk6IEVycm9yIGluIG1hbGxjdGwoKTogJXMiLCBfX2Z1 bmNfXywKLQkJICAgIHN0cmVycm9yKGVycikpOwotCX0KLQlzeiA9IHNpemVvZihkcDApOwotCWlm ICgoZXJyID0gbWFsbGN0bCgidGhyZWFkLmRlYWxsb2NhdGVkcCIsICh2b2lkICopJmRwMCwgJnN6 LCBOVUxMLAotCSAgICAwKSkpIHsKLQkJaWYgKGVyciA9PSBFTk9FTlQpIHsKLQkJCWdvdG8gbGFi ZWxfRU5PRU5UOwotCQl9Ci0JCXRlc3RfZmFpbCgiJXMoKTogRXJyb3IgaW4gbWFsbGN0bCgpOiAl cyIsIF9fZnVuY19fLAotCQkgICAgc3RyZXJyb3IoZXJyKSk7Ci0JfQotCWV4cGVjdF91NjRfZXEo KmRwMCwgZDAsCi0JICAgICJcInRocmVhZC5kZWFsbG9jYXRlZHBcIiBzaG91bGQgcHJvdmlkZSBh IHBvaW50ZXIgdG8gaW50ZXJuYWwgIgotCSAgICAic3RvcmFnZSIpOwotCi0JcCA9IG1hbGxvYygx KTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvYygpIGVycm9yIik7 Ci0KLQlzeiA9IHNpemVvZihhMSk7Ci0JbWFsbGN0bCgidGhyZWFkLmFsbG9jYXRlZCIsICh2b2lk ICopJmExLCAmc3osIE5VTEwsIDApOwotCXN6ID0gc2l6ZW9mKGFwMSk7Ci0JbWFsbGN0bCgidGhy ZWFkLmFsbG9jYXRlZHAiLCAodm9pZCAqKSZhcDEsICZzeiwgTlVMTCwgMCk7Ci0JZXhwZWN0X3U2 NF9lcSgqYXAxLCBhMSwKLQkgICAgIkRlcmVmZXJlbmNlZCBcInRocmVhZC5hbGxvY2F0ZWRwXCIg dmFsdWUgc2hvdWxkIGVxdWFsICIKLQkgICAgIlwidGhyZWFkLmFsbG9jYXRlZFwiIHZhbHVlIik7 Ci0JZXhwZWN0X3B0cl9lcShhcDAsIGFwMSwKLQkgICAgIlBvaW50ZXIgcmV0dXJuZWQgYnkgXCJ0 aHJlYWQuYWxsb2NhdGVkcFwiIHNob3VsZCBub3QgY2hhbmdlIik7Ci0KLQl1c2l6ZSA9IFRFU1Rf TUFMTE9DX1NJWkUocCk7Ci0JZXhwZWN0X3U2NF9sZShhMCArIHVzaXplLCBhMSwKLQkgICAgIkFs bG9jYXRlZCBtZW1vcnkgY291bnRlciBzaG91bGQgaW5jcmVhc2UgYnkgYXQgbGVhc3QgdGhlIGFt b3VudCAiCi0JICAgICJleHBsaWNpdGx5IGFsbG9jYXRlZCIpOwotCi0JZnJlZShwKTsKLQotCXN6 ID0gc2l6ZW9mKGQxKTsKLQltYWxsY3RsKCJ0aHJlYWQuZGVhbGxvY2F0ZWQiLCAodm9pZCAqKSZk MSwgJnN6LCBOVUxMLCAwKTsKLQlzeiA9IHNpemVvZihkcDEpOwotCW1hbGxjdGwoInRocmVhZC5k ZWFsbG9jYXRlZHAiLCAodm9pZCAqKSZkcDEsICZzeiwgTlVMTCwgMCk7Ci0JZXhwZWN0X3U2NF9l cSgqZHAxLCBkMSwKLQkgICAgIkRlcmVmZXJlbmNlZCBcInRocmVhZC5kZWFsbG9jYXRlZHBcIiB2 YWx1ZSBzaG91bGQgZXF1YWwgIgotCSAgICAiXCJ0aHJlYWQuZGVhbGxvY2F0ZWRcIiB2YWx1ZSIp OwotCWV4cGVjdF9wdHJfZXEoZHAwLCBkcDEsCi0JICAgICJQb2ludGVyIHJldHVybmVkIGJ5IFwi dGhyZWFkLmRlYWxsb2NhdGVkcFwiIHNob3VsZCBub3QgY2hhbmdlIik7Ci0KLQlleHBlY3RfdTY0 X2xlKGQwICsgdXNpemUsIGQxLAotCSAgICAiRGVhbGxvY2F0ZWQgbWVtb3J5IGNvdW50ZXIgc2hv dWxkIGluY3JlYXNlIGJ5IGF0IGxlYXN0IHRoZSBhbW91bnQgIgotCSAgICAiZXhwbGljaXRseSBk ZWFsbG9jYXRlZCIpOwotCi0JcmV0dXJuIE5VTEw7Ci1sYWJlbF9FTk9FTlQ6Ci0JZXhwZWN0X2Zh bHNlKGNvbmZpZ19zdGF0cywKLQkgICAgIkVOT0VOVCBzaG91bGQgb25seSBiZSByZXR1cm5lZCBp ZiBzdGF0cyBhcmUgZGlzYWJsZWQiKTsKLQl0ZXN0X3NraXAoIlwidGhyZWFkLmFsbG9jYXRlZFwi IG1hbGxjdGwgbm90IGF2YWlsYWJsZSIpOwotCXJldHVybiBOVUxMOwotfQotCi1URVNUX0JFR0lO KHRlc3RfbWFpbl90aHJlYWQpIHsKLQl0aGRfc3RhcnQoTlVMTCk7Ci19Ci1URVNUX0VORAotCi1U RVNUX0JFR0lOKHRlc3Rfc3VidGhyZWFkKSB7Ci0JdGhkX3QgdGhkOwotCi0JdGhkX2NyZWF0ZSgm dGhkLCB0aGRfc3RhcnQsIE5VTEwpOwotCXRoZF9qb2luKHRoZCwgTlVMTCk7Ci19Ci1URVNUX0VO RAotCi1pbnQKLW1haW4odm9pZCkgewotCS8qIFJ1biB0ZXN0cyBtdWx0aXBsZSB0aW1lcyB0byBj aGVjayBmb3IgYmFkIGludGVyYWN0aW9ucy4gKi8KLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9t YWluX3RocmVhZCwKLQkgICAgdGVzdF9zdWJ0aHJlYWQsCi0JICAgIHRlc3RfbWFpbl90aHJlYWQs Ci0JICAgIHRlc3Rfc3VidGhyZWFkLAotCSAgICB0ZXN0X21haW5fdGhyZWFkKTsKLX0KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVn cmF0aW9uL2NwcC9iYXNpYy5jcHAgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L2ludGVncmF0aW9uL2NwcC9iYXNpYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGMxY2Y2Y2QuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9jcHAvYmFzaWMuY3BwCisrKyAvZGV2L251 bGwKQEAgLTEsMjQgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi1U RVNUX0JFR0lOKHRlc3RfYmFzaWMpIHsKLQlhdXRvIGZvbyA9IG5ldyBsb25nKDQpOwotCWV4cGVj dF9wdHJfbm90X251bGwoZm9vLCAiVW5leHBlY3RlZCBuZXdbXSBmYWlsdXJlIik7Ci0JZGVsZXRl IGZvbzsKLQkvLyBUZXN0IG51bGxwdHIgaGFuZGxpbmcuCi0JZm9vID0gbnVsbHB0cjsKLQlkZWxl dGUgZm9vOwotCi0JYXV0byBiYXIgPSBuZXcgbG9uZzsKLQlleHBlY3RfcHRyX25vdF9udWxsKGJh ciwgIlVuZXhwZWN0ZWQgbmV3IGZhaWx1cmUiKTsKLQlkZWxldGUgYmFyOwotCS8vIFRlc3QgbnVs bHB0ciBoYW5kbGluZy4KLQliYXIgPSBudWxscHRyOwotCWRlbGV0ZSBiYXI7Ci19Ci1URVNUX0VO RAotCi1pbnQKLW1haW4oKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfYmFzaWMpOwotfQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv aW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X2ZhbHNlLmNwcCBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVf bmV3X2ZhbHNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxOTZkNi4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2lu dGVncmF0aW9uL2NwcC9pbmZhbGxpYmxlX25ld19mYWxzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAt MSwyMyArMCwwIEBACi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAidGVzdC9qZW1hbGxv Y190ZXN0LmgiCi0KLVRFU1RfQkVHSU4odGVzdF9mYWlsaW5nX2FsbG9jKSB7Ci0JYm9vbCBzYXdf ZXhjZXB0aW9uID0gZmFsc2U7Ci0JdHJ5IHsKLQkJLyogVG9vIGJpZyBvZiBhbiBhbGxvY2F0aW9u IHRvIHN1Y2NlZWQuICovCi0JCXZvaWQgKnZvbGF0aWxlIHB0ciA9IDo6b3BlcmF0b3IgbmV3KChz aXplX3QpLTEpOwotCQkodm9pZClwdHI7Ci0JfSBjYXRjaCAoLi4uKSB7Ci0JCXNhd19leGNlcHRp b24gPSB0cnVlOwotCX0KLQlleHBlY3RfdHJ1ZShzYXdfZXhjZXB0aW9uLCAiRGlkbid0IGdldCBh IGZhaWx1cmUiKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRl c3QoCi0JICAgIHRlc3RfZmFpbGluZ19hbGxvYyk7Ci19Ci0KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2NwcC9pbmZh bGxpYmxlX25ld19mYWxzZS5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X2ZhbHNlLnNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDQxODEyLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGli bGVfbmV3X2ZhbHNlLnNoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jIS9iaW4vc2gK LQotWE1BTExPQ19TVFI9IiIKLWlmIFsgIngke2VuYWJsZV94bWFsbG9jfSIgPSAieDEiIF0gOyB0 aGVuCi0gIFhNQUxMT0NfU1RSPSJ4bWFsbG9jOmZhbHNlLCIKLWZpCi0KLWV4cG9ydCBNQUxMT0Nf Q09ORj0iJHtYTUFMTE9DX1NUUn1leHBlcmltZW50YWxfaW5mYWxsaWJsZV9uZXc6ZmFsc2UiCgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bnRlZ3JhdGlvbi9jcHAvaW5mYWxsaWJsZV9uZXdfdHJ1ZS5jcHAgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2NwcC9pbmZhbGxpYmxlX25l d190cnVlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY3NTQxMi4uMDAwMDAw MAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVn cmF0aW9uL2NwcC9pbmZhbGxpYmxlX25ld190cnVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3 ICswLDAgQEAKLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190 ZXN0LmgiCi0KLS8qCi0gKiBXZSBjYW4ndCB0ZXN0IEMrKyBpbiB1bml0IHRlc3RzLiAgSW4gb3Jk ZXIgdG8gaW50ZXJjZXB0IGFib3J0LCB1c2UgYSBzZWNyZXQKLSAqIHNhZmV0eSBjaGVjayBhYm9y dCBob29rIGluIGludGVncmF0aW9uIHRlc3RzLgotICovCi10eXBlZGVmIHZvaWQgKCphYm9ydF9o b29rX3QpKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwotYm9vbCBmYWtlX2Fib3J0X2NhbGxlZDsKLXZv aWQgZmFrZV9hYm9ydChjb25zdCBjaGFyICptZXNzYWdlKSB7Ci0JaWYgKHN0cmNtcChtZXNzYWdl LCAiPGplbWFsbG9jPjogQWxsb2NhdGlvbiBmYWlsZWQgYW5kICIKLQkgICAgIm9wdC5leHBlcmlt ZW50YWxfaW5mYWxsaWJsZV9uZXcgaXMgdHJ1ZS4gQWJvcnRpbmcuXG4iKSAhPSAwKSB7Ci0JCWFi b3J0KCk7Ci0JfQotCWZha2VfYWJvcnRfY2FsbGVkID0gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wK LW93bl9vcGVyYXRvcl9uZXcodm9pZCkgewotCXVpbnQ2NF90IGJlZm9yZSwgYWZ0ZXI7Ci0Jc2l6 ZV90IHN6ID0gc2l6ZW9mKGJlZm9yZSk7Ci0KLQkvKiB0aHJlYWQuYWxsb2NhdGVkIGlzIGFsd2F5 cyBhdmFpbGFibGUsIGV2ZW4gdy9vIGNvbmZpZ19zdGF0cy4gKi8KLQlleHBlY3RfZF9lcShtYWxs Y3RsKCJ0aHJlYWQuYWxsb2NhdGVkIiwgKHZvaWQgKikmYmVmb3JlLCAmc3osIE5VTEwsIDApLAot CSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgcmVhZGluZyBzdGF0cyIpOwotCXZv aWQgKnZvbGF0aWxlIHB0ciA9IDo6b3BlcmF0b3IgbmV3KChzaXplX3QpOCk7Ci0JZXhwZWN0X3B0 cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZSIpOwotCWV4cGVj dF9kX2VxKG1hbGxjdGwoInRocmVhZC5hbGxvY2F0ZWQiLCAodm9pZCAqKSZhZnRlciwgJnN6LCBO VUxMLCAwKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHJlYWRpbmcgc3Rh dHMiKTsKLQotCXJldHVybiAoYWZ0ZXIgIT0gYmVmb3JlKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0 X2ZhaWxpbmdfYWxsb2MpIHsKLQlhYm9ydF9ob29rX3QgYWJvcnRfaG9vayA9ICZmYWtlX2Fib3J0 OwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5zYWZldHlfY2hlY2tf YWJvcnQiLCBOVUxMLCBOVUxMLAotCSAgICAodm9pZCAqKSZhYm9ydF9ob29rLCBzaXplb2YoYWJv cnRfaG9vaykpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgc2V0dGluZyBh Ym9ydCBob29rIik7Ci0KLQkvKgotCSAqIE5vdCBvd25pbmcgb3BlcmF0b3IgbmV3IGlzIG9ubHkg ZXhwZWN0ZWQgdG8gaGFwcGVuIG9uIE1pbkdXIHdoaWNoCi0JICogZG9lcyBub3Qgc3VwcG9ydCBv cGVyYXRvciBuZXcgLyBkZWxldGUgcmVwbGFjZW1lbnQuCi0JICovCi0jaWZkZWYgX1dJTjMyCi0J dGVzdF9za2lwX2lmKCFvd25fb3BlcmF0b3JfbmV3KCkpOwotI2Vsc2UKLQlleHBlY3RfdHJ1ZShv d25fb3BlcmF0b3JfbmV3KCksICJObyBvcGVyYXRvciBuZXcgb3ZlcmxvYWQiKTsKLSNlbmRpZgot CXZvaWQgKnZvbGF0aWxlIHB0ciA9ICh2b2lkICopMTsKLQl0cnkgewotCQkvKiBUb28gYmlnIG9m IGFuIGFsbG9jYXRpb24gdG8gc3VjY2VlZC4gKi8KLQkJcHRyID0gOjpvcGVyYXRvciBuZXcoKHNp emVfdCktMSk7Ci0JfSBjYXRjaCAoLi4uKSB7Ci0JCWFib3J0KCk7Ci0JfQotCWV4cGVjdF9wdHJf bnVsbChwdHIsICJBbGxvY2F0aW9uIHNob3VsZCBoYXZlIGZhaWxlZCIpOwotCWV4cGVjdF9iX2Vx KGZha2VfYWJvcnRfY2FsbGVkLCB0cnVlLCAiQWJvcnQgaG9vayBub3QgaW52b2tlZCIpOwotfQot VEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9m YWlsaW5nX2FsbG9jKTsKLX0KLQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X3RydWUu c2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0 aW9uL2NwcC9pbmZhbGxpYmxlX25ld190cnVlLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA0YTBmZjU0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vY3BwL2luZmFsbGlibGVfbmV3X3RydWUuc2gKKysr IC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1YTUFMTE9DX1NUUj0iIgot aWYgWyAieCR7ZW5hYmxlX3htYWxsb2N9IiA9ICJ4MSIgXSA7IHRoZW4KLSAgWE1BTExPQ19TVFI9 InhtYWxsb2M6ZmFsc2UsIgotZmkKLQotZXhwb3J0IE1BTExPQ19DT05GPSIke1hNQUxMT0NfU1RS fWV4cGVyaW1lbnRhbF9pbmZhbGxpYmxlX25ldzp0cnVlIgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vZXh0ZW50LmMg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9u L2V4dGVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTAyOGYxLi4wMDAwMDAw Ci0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdy YXRpb24vZXh0ZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotI2luY2x1ZGUg InRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAidGVzdC9leHRlbnRfaG9va3MuaCIK LQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2FyZW5hX3R5cGVzLmgiCi0KLXN0YXRpYyB2 b2lkCi10ZXN0X2V4dGVudF9ib2R5KHVuc2lnbmVkIGFyZW5hX2luZCkgewotCXZvaWQgKnA7Ci0J c2l6ZV90IGxhcmdlMCwgbGFyZ2UxLCBsYXJnZTIsIHN6OwotCXNpemVfdCBwdXJnZV9taWJbM107 Ci0Jc2l6ZV90IHB1cmdlX21pYmxlbjsKLQlpbnQgZmxhZ3M7Ci0JYm9vbCB4YWxsb2N4X3N1Y2Nl c3NfYSwgeGFsbG9jeF9zdWNjZXNzX2IsIHhhbGxvY3hfc3VjY2Vzc19jOwotCi0JZmxhZ3MgPSBN QUxMT0NYX0FSRU5BKGFyZW5hX2luZCkgfCBNQUxMT0NYX1RDQUNIRV9OT05FOwotCi0JLyogR2V0 IGxhcmdlIHNpemUgY2xhc3Nlcy4gKi8KLQlzeiA9IHNpemVvZihzaXplX3QpOwotCWV4cGVjdF9k X2VxKG1hbGxjdGwoImFyZW5hcy5sZXh0ZW50LjAuc2l6ZSIsICh2b2lkICopJmxhcmdlMCwgJnN6 LCBOVUxMLAotCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgYXJlbmFzLmxleHRlbnQuMC5zaXplIGZh aWx1cmUiKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubGV4dGVudC4xLnNpemUiLCAo dm9pZCAqKSZsYXJnZTEsICZzeiwgTlVMTCwKLQkgICAgMCksIDAsICJVbmV4cGVjdGVkIGFyZW5h cy5sZXh0ZW50LjEuc2l6ZSBmYWlsdXJlIik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFz LmxleHRlbnQuMi5zaXplIiwgKHZvaWQgKikmbGFyZ2UyLCAmc3osIE5VTEwsCi0JICAgIDApLCAw LCAiVW5leHBlY3RlZCBhcmVuYXMubGV4dGVudC4yLnNpemUgZmFpbHVyZSIpOwotCi0JLyogVGVz dCBkYWxsb2MvZGVjb21taXQvcHVyZ2UgY2FzY2FkZS4gKi8KLQlwdXJnZV9taWJsZW4gPSBzaXpl b2YocHVyZ2VfbWliKS9zaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRv bWliKCJhcmVuYS4wLnB1cmdlIiwgcHVyZ2VfbWliLCAmcHVyZ2VfbWlibGVuKSwKLQkgICAgMCwg IlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKLQlwdXJnZV9taWJbMV0g PSAoc2l6ZV90KWFyZW5hX2luZDsKLQljYWxsZWRfYWxsb2MgPSBmYWxzZTsKLQl0cnlfYWxsb2Mg PSB0cnVlOwotCXRyeV9kYWxsb2MgPSBmYWxzZTsKLQl0cnlfZGVjb21taXQgPSBmYWxzZTsKLQlw ID0gbWFsbG9jeChsYXJnZTAgKiAyLCBmbGFncyk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAi VW5leHBlY3RlZCBtYWxsb2N4KCkgZXJyb3IiKTsKLQlleHBlY3RfdHJ1ZShjYWxsZWRfYWxsb2Ms ICJFeHBlY3RlZCBhbGxvYyBjYWxsIik7Ci0JY2FsbGVkX2RhbGxvYyA9IGZhbHNlOwotCWNhbGxl ZF9kZWNvbW1pdCA9IGZhbHNlOwotCWRpZF9wdXJnZV9sYXp5ID0gZmFsc2U7Ci0JZGlkX3B1cmdl X2ZvcmNlZCA9IGZhbHNlOwotCWNhbGxlZF9zcGxpdCA9IGZhbHNlOwotCXhhbGxvY3hfc3VjY2Vz c19hID0gKHhhbGxvY3gocCwgbGFyZ2UwLCAwLCBmbGFncykgPT0gbGFyZ2UwKTsKLQlleHBlY3Rf ZF9lcShtYWxsY3RsYnltaWIocHVyZ2VfbWliLCBwdXJnZV9taWJsZW4sIE5VTEwsIE5VTEwsIE5V TEwsIDApLAotCSAgICAwLCAiVW5leHBlY3RlZCBhcmVuYS4ldS5wdXJnZSBlcnJvciIsIGFyZW5h X2luZCk7Ci0JaWYgKHhhbGxvY3hfc3VjY2Vzc19hKSB7Ci0JCWV4cGVjdF90cnVlKGNhbGxlZF9k YWxsb2MsICJFeHBlY3RlZCBkYWxsb2MgY2FsbCIpOwotCQlleHBlY3RfdHJ1ZShjYWxsZWRfZGVj b21taXQsICJFeHBlY3RlZCBkZWNvbW1pdCBjYWxsIik7Ci0JCWV4cGVjdF90cnVlKGRpZF9wdXJn ZV9sYXp5IHx8IGRpZF9wdXJnZV9mb3JjZWQsCi0JCSAgICAiRXhwZWN0ZWQgcHVyZ2UiKTsKLQkJ ZXhwZWN0X3RydWUoY2FsbGVkX3NwbGl0LCAiRXhwZWN0ZWQgc3BsaXQgY2FsbCIpOwotCX0KLQlk YWxsb2N4KHAsIGZsYWdzKTsKLQl0cnlfZGFsbG9jID0gdHJ1ZTsKLQotCS8qIFRlc3QgZGVjb21t aXQvY29tbWl0IGFuZCBvYnNlcnZlIHNwbGl0L21lcmdlLiAqLwotCXRyeV9kYWxsb2MgPSBmYWxz ZTsKLQl0cnlfZGVjb21taXQgPSB0cnVlOwotCXAgPSBtYWxsb2N4KGxhcmdlMCAqIDIsIGZsYWdz KTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBlcnJvciIp OwotCWRpZF9kZWNvbW1pdCA9IGZhbHNlOwotCWRpZF9jb21taXQgPSBmYWxzZTsKLQljYWxsZWRf c3BsaXQgPSBmYWxzZTsKLQlkaWRfc3BsaXQgPSBmYWxzZTsKLQlkaWRfbWVyZ2UgPSBmYWxzZTsK LQl4YWxsb2N4X3N1Y2Nlc3NfYiA9ICh4YWxsb2N4KHAsIGxhcmdlMCwgMCwgZmxhZ3MpID09IGxh cmdlMCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKHB1cmdlX21pYiwgcHVyZ2VfbWlibGVu LCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgYXJlbmEuJXUucHVy Z2UgZXJyb3IiLCBhcmVuYV9pbmQpOwotCWlmICh4YWxsb2N4X3N1Y2Nlc3NfYikgewotCQlleHBl Y3RfdHJ1ZShkaWRfc3BsaXQsICJFeHBlY3RlZCBzcGxpdCIpOwotCX0KLQl4YWxsb2N4X3N1Y2Nl c3NfYyA9ICh4YWxsb2N4KHAsIGxhcmdlMCAqIDIsIDAsIGZsYWdzKSA9PSBsYXJnZTAgKiAyKTsK LQlpZiAoZGlkX3NwbGl0KSB7Ci0JCWV4cGVjdF9iX2VxKGRpZF9kZWNvbW1pdCwgZGlkX2NvbW1p dCwKLQkJICAgICJFeHBlY3RlZCBkZWNvbW1pdC9jb21taXQgbWF0Y2giKTsKLQl9Ci0JaWYgKHhh bGxvY3hfc3VjY2Vzc19iICYmIHhhbGxvY3hfc3VjY2Vzc19jKSB7Ci0JCWV4cGVjdF90cnVlKGRp ZF9tZXJnZSwgIkV4cGVjdGVkIG1lcmdlIik7Ci0JfQotCWRhbGxvY3gocCwgZmxhZ3MpOwotCXRy eV9kYWxsb2MgPSB0cnVlOwotCXRyeV9kZWNvbW1pdCA9IGZhbHNlOwotCi0JLyogTWFrZSBzdXJl IG5vbi1sYXJnZSBhbGxvY2F0aW9uIHN1Y2NlZWRzLiAqLwotCXAgPSBtYWxsb2N4KDQyLCBmbGFn cyk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZXJyb3Ii KTsKLQlkYWxsb2N4KHAsIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfbWFudWFsX2hv b2tfYXV0b19hcmVuYSh2b2lkKSB7Ci0JdW5zaWduZWQgbmFyZW5hczsKLQlzaXplX3Qgb2xkX3Np emUsIG5ld19zaXplLCBzejsKLQlzaXplX3QgaG9va3NfbWliWzNdOwotCXNpemVfdCBob29rc19t aWJsZW47Ci0JZXh0ZW50X2hvb2tzX3QgKm5ld19ob29rcywgKm9sZF9ob29rczsKLQotCWV4dGVu dF9ob29rc19wcmVwKCk7Ci0KLQlzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JLyogR2V0IG51bWJl ciBvZiBhdXRvIGFyZW5hcy4gKi8KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJvcHQubmFyZW5hcyIs ICh2b2lkICopJm5hcmVuYXMsICZzeiwgTlVMTCwgMCksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1h bGxjdGwoKSBmYWlsdXJlIik7Ci0JaWYgKG5hcmVuYXMgPT0gMSkgewotCQlyZXR1cm47Ci0JfQot Ci0JLyogSW5zdGFsbCBjdXN0b20gZXh0ZW50IGhvb2tzIG9uIGFyZW5hIDEgKG1pZ2h0IG5vdCBi ZSBpbml0aWFsaXplZCkuICovCi0JaG9va3NfbWlibGVuID0gc2l6ZW9mKGhvb2tzX21pYikvc2l6 ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmEuMC5leHRl bnRfaG9va3MiLCBob29rc19taWIsCi0JICAgICZob29rc19taWJsZW4pLCAwLCAiVW5leHBlY3Rl ZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwotCWhvb2tzX21pYlsxXSA9IDE7Ci0Jb2xk X3NpemUgPSBzaXplb2YoZXh0ZW50X2hvb2tzX3QgKik7Ci0JbmV3X2hvb2tzID0gJmhvb2tzOwot CW5ld19zaXplID0gc2l6ZW9mKGV4dGVudF9ob29rc190ICopOwotCWV4cGVjdF9kX2VxKG1hbGxj dGxieW1pYihob29rc19taWIsIGhvb2tzX21pYmxlbiwgKHZvaWQgKikmb2xkX2hvb2tzLAotCSAg ICAmb2xkX3NpemUsICh2b2lkICopJm5ld19ob29rcywgbmV3X3NpemUpLCAwLAotCSAgICAiVW5l eHBlY3RlZCBleHRlbnRfaG9va3MgZXJyb3IiKTsKLQlzdGF0aWMgYm9vbCBhdXRvX2FyZW5hX2Ny ZWF0ZWQgPSBmYWxzZTsKLQlpZiAob2xkX2hvb2tzICE9ICZob29rcykgewotCQlleHBlY3RfYl9l cShhdXRvX2FyZW5hX2NyZWF0ZWQsIGZhbHNlLAotCQkgICAgIkV4cGVjdGVkIGF1dG8gYXJlbmEg MSBjcmVhdGVkIG9ubHkgb25jZS4iKTsKLQkJYXV0b19hcmVuYV9jcmVhdGVkID0gdHJ1ZTsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X21hbnVhbF9ob29rX2JvZHkodm9pZCkgewotCXVuc2ln bmVkIGFyZW5hX2luZDsKLQlzaXplX3Qgb2xkX3NpemUsIG5ld19zaXplLCBzejsKLQlzaXplX3Qg aG9va3NfbWliWzNdOwotCXNpemVfdCBob29rc19taWJsZW47Ci0JZXh0ZW50X2hvb2tzX3QgKm5l d19ob29rcywgKm9sZF9ob29rczsKLQotCWV4dGVudF9ob29rc19wcmVwKCk7Ci0KLQlzeiA9IHNp emVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2 b2lkICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAwKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIGZhaWx1cmUiKTsKLQotCS8qIEluc3RhbGwgY3VzdG9tIGV4dGVudCBob29rcy4gKi8K LQlob29rc19taWJsZW4gPSBzaXplb2YoaG9va3NfbWliKS9zaXplb2Yoc2l6ZV90KTsKLQlleHBl Y3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYS4wLmV4dGVudF9ob29rcyIsIGhvb2tzX21p YiwKLQkgICAgJmhvb2tzX21pYmxlbiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIo KSBmYWlsdXJlIik7Ci0JaG9va3NfbWliWzFdID0gKHNpemVfdClhcmVuYV9pbmQ7Ci0Jb2xkX3Np emUgPSBzaXplb2YoZXh0ZW50X2hvb2tzX3QgKik7Ci0JbmV3X2hvb2tzID0gJmhvb2tzOwotCW5l d19zaXplID0gc2l6ZW9mKGV4dGVudF9ob29rc190ICopOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxi eW1pYihob29rc19taWIsIGhvb2tzX21pYmxlbiwgKHZvaWQgKikmb2xkX2hvb2tzLAotCSAgICAm b2xkX3NpemUsICh2b2lkICopJm5ld19ob29rcywgbmV3X3NpemUpLCAwLAotCSAgICAiVW5leHBl Y3RlZCBleHRlbnRfaG9va3MgZXJyb3IiKTsKLQlleHBlY3RfcHRyX25lKG9sZF9ob29rcy0+YWxs b2MsIGV4dGVudF9hbGxvY19ob29rLAotCSAgICAiVW5leHBlY3RlZCBleHRlbnRfaG9va3MgZXJy b3IiKTsKLQlleHBlY3RfcHRyX25lKG9sZF9ob29rcy0+ZGFsbG9jLCBleHRlbnRfZGFsbG9jX2hv b2ssCi0JICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOwotCWV4cGVjdF9wdHJf bmUob2xkX2hvb2tzLT5jb21taXQsIGV4dGVudF9jb21taXRfaG9vaywKLQkgICAgIlVuZXhwZWN0 ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7Ci0JZXhwZWN0X3B0cl9uZShvbGRfaG9va3MtPmRlY29t bWl0LCBleHRlbnRfZGVjb21taXRfaG9vaywKLQkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tz IGVycm9yIik7Ci0JZXhwZWN0X3B0cl9uZShvbGRfaG9va3MtPnB1cmdlX2xhenksIGV4dGVudF9w dXJnZV9sYXp5X2hvb2ssCi0JICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOwot CWV4cGVjdF9wdHJfbmUob2xkX2hvb2tzLT5wdXJnZV9mb3JjZWQsIGV4dGVudF9wdXJnZV9mb3Jj ZWRfaG9vaywKLQkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7Ci0JZXhwZWN0 X3B0cl9uZShvbGRfaG9va3MtPnNwbGl0LCBleHRlbnRfc3BsaXRfaG9vaywKLQkgICAgIlVuZXhw ZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7Ci0JZXhwZWN0X3B0cl9uZShvbGRfaG9va3MtPm1l cmdlLCBleHRlbnRfbWVyZ2VfaG9vaywKLQkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVy cm9yIik7Ci0KLQlpZiAoIWlzX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSkgewotCQl0ZXN0 X2V4dGVudF9ib2R5KGFyZW5hX2luZCk7Ci0JfQotCi0JLyogUmVzdG9yZSBleHRlbnQgaG9va3Mu ICovCi0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKGhvb2tzX21pYiwgaG9va3NfbWlibGVuLCBO VUxMLCBOVUxMLAotCSAgICAodm9pZCAqKSZvbGRfaG9va3MsIG5ld19zaXplKSwgMCwgIlVuZXhw ZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKGhv b2tzX21pYiwgaG9va3NfbWlibGVuLCAodm9pZCAqKSZvbGRfaG9va3MsCi0JICAgICZvbGRfc2l6 ZSwgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOwotCWV4cGVj dF9wdHJfZXEob2xkX2hvb2tzLCBkZWZhdWx0X2hvb2tzLCAiVW5leHBlY3RlZCBleHRlbnRfaG9v a3MgZXJyb3IiKTsKLQlleHBlY3RfcHRyX2VxKG9sZF9ob29rcy0+YWxsb2MsIGRlZmF1bHRfaG9v a3MtPmFsbG9jLAotCSAgICAiVW5leHBlY3RlZCBleHRlbnRfaG9va3MgZXJyb3IiKTsKLQlleHBl Y3RfcHRyX2VxKG9sZF9ob29rcy0+ZGFsbG9jLCBkZWZhdWx0X2hvb2tzLT5kYWxsb2MsCi0JICAg ICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOwotCWV4cGVjdF9wdHJfZXEob2xkX2hv b2tzLT5jb21taXQsIGRlZmF1bHRfaG9va3MtPmNvbW1pdCwKLQkgICAgIlVuZXhwZWN0ZWQgZXh0 ZW50X2hvb2tzIGVycm9yIik7Ci0JZXhwZWN0X3B0cl9lcShvbGRfaG9va3MtPmRlY29tbWl0LCBk ZWZhdWx0X2hvb2tzLT5kZWNvbW1pdCwKLQkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVy cm9yIik7Ci0JZXhwZWN0X3B0cl9lcShvbGRfaG9va3MtPnB1cmdlX2xhenksIGRlZmF1bHRfaG9v a3MtPnB1cmdlX2xhenksCi0JICAgICJVbmV4cGVjdGVkIGV4dGVudF9ob29rcyBlcnJvciIpOwot CWV4cGVjdF9wdHJfZXEob2xkX2hvb2tzLT5wdXJnZV9mb3JjZWQsIGRlZmF1bHRfaG9va3MtPnB1 cmdlX2ZvcmNlZCwKLQkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7Ci0JZXhw ZWN0X3B0cl9lcShvbGRfaG9va3MtPnNwbGl0LCBkZWZhdWx0X2hvb2tzLT5zcGxpdCwKLQkgICAg IlVuZXhwZWN0ZWQgZXh0ZW50X2hvb2tzIGVycm9yIik7Ci0JZXhwZWN0X3B0cl9lcShvbGRfaG9v a3MtPm1lcmdlLCBkZWZhdWx0X2hvb2tzLT5tZXJnZSwKLQkgICAgIlVuZXhwZWN0ZWQgZXh0ZW50 X2hvb2tzIGVycm9yIik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9leHRlbnRfbWFudWFsX2hvb2sp IHsKLQl0ZXN0X21hbnVhbF9ob29rX2F1dG9fYXJlbmEoKTsKLQl0ZXN0X21hbnVhbF9ob29rX2Jv ZHkoKTsKLQotCS8qIFRlc3QgZmFpbHVyZSBwYXRocy4gKi8KLQl0cnlfc3BsaXQgPSBmYWxzZTsK LQl0ZXN0X21hbnVhbF9ob29rX2JvZHkoKTsKLQl0cnlfbWVyZ2UgPSBmYWxzZTsKLQl0ZXN0X21h bnVhbF9ob29rX2JvZHkoKTsKLQl0cnlfcHVyZ2VfbGF6eSA9IGZhbHNlOwotCXRyeV9wdXJnZV9m b3JjZWQgPSBmYWxzZTsKLQl0ZXN0X21hbnVhbF9ob29rX2JvZHkoKTsKLQotCXRyeV9zcGxpdCA9 IHRyeV9tZXJnZSA9IHRyeV9wdXJnZV9sYXp5ID0gdHJ5X3B1cmdlX2ZvcmNlZCA9IHRydWU7Ci19 Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfZXh0ZW50X2F1dG9faG9vaykgewotCXVuc2ln bmVkIGFyZW5hX2luZDsKLQlzaXplX3QgbmV3X3NpemUsIHN6OwotCWV4dGVudF9ob29rc190ICpu ZXdfaG9va3M7Ci0KLQlleHRlbnRfaG9va3NfcHJlcCgpOwotCi0Jc3ogPSBzaXplb2YodW5zaWdu ZWQpOwotCW5ld19ob29rcyA9ICZob29rczsKLQluZXdfc2l6ZSA9IHNpemVvZihleHRlbnRfaG9v a3NfdCAqKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgKHZvaWQgKikm YXJlbmFfaW5kLCAmc3osCi0JICAgICh2b2lkICopJm5ld19ob29rcywgbmV3X3NpemUpLCAwLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCi0JdGVzdF9za2lwX2lmKGlzX2JhY2tn cm91bmRfdGhyZWFkX2VuYWJsZWQoKSk7Ci0JdGVzdF9leHRlbnRfYm9keShhcmVuYV9pbmQpOwot fQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLXRlc3RfYXJlbmFzX2NyZWF0ZV9leHRfYmFzZShh cmVuYV9jb25maWdfdCBjb25maWcsCi0JYm9vbCBleHBlY3RfaG9va19kYXRhLCBib29sIGV4cGVj dF9ob29rX21ldGFkYXRhKQotewotCXVuc2lnbmVkIGFyZW5hLCBhcmVuYTE7Ci0Jdm9pZCAqcHRy OwotCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0KLQlleHRlbnRfaG9va3NfcHJlcCgp OwotCi0JY2FsbGVkX2FsbG9jID0gZmFsc2U7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiZXhwZXJp bWVudGFsLmFyZW5hc19jcmVhdGVfZXh0IiwKLQkgICAgKHZvaWQgKikmYXJlbmEsICZzeiwgJmNv bmZpZywgc2l6ZW9mKGFyZW5hX2NvbmZpZ190KSksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlIik7Ci0JZXhwZWN0X2JfZXEoY2FsbGVkX2FsbG9jLCBleHBlY3RfaG9va19t ZXRhZGF0YSwKLQkgICAgImV4cGVjdGVkIGhvb2sgbWV0YWRhdGEgYWxsb2MgbWlzbWF0Y2giKTsK LQotCWNhbGxlZF9hbGxvYyA9IGZhbHNlOwotCXB0ciA9IG1hbGxvY3goNDIsIE1BTExPQ1hfQVJF TkEoYXJlbmEpIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JZXhwZWN0X2JfZXEoY2FsbGVkX2Fs bG9jLCBleHBlY3RfaG9va19kYXRhLAotCSAgICAiZXhwZWN0ZWQgaG9vayBkYXRhIGFsbG9jIG1p c21hdGNoIik7Ci0KLQlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIlVuZXhwZWN0ZWQgbWFsbG9j eCgpIGZhaWx1cmUiKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubG9va3VwIiwgJmFy ZW5hMSwgJnN6LCAmcHRyLCBzaXplb2YocHRyKSksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlIik7Ci0JZXhwZWN0X3VfZXEoYXJlbmEsIGFyZW5hMSwgIlVuZXhwZWN0ZWQg YXJlbmEgaW5kZXgiKTsKLQlkYWxsb2N4KHB0ciwgMCk7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9h cmVuYXNfY3JlYXRlX2V4dF93aXRoX2Vob29rc19ub19tZXRhZGF0YSkgewotCWFyZW5hX2NvbmZp Z190IGNvbmZpZzsKLQljb25maWcuZXh0ZW50X2hvb2tzID0gJmhvb2tzOwotCWNvbmZpZy5tZXRh ZGF0YV91c2VfaG9va3MgPSBmYWxzZTsKLQotCXRlc3RfYXJlbmFzX2NyZWF0ZV9leHRfYmFzZShj b25maWcsIHRydWUsIGZhbHNlKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9hcmVu YXNfY3JlYXRlX2V4dF93aXRoX2Vob29rc193aXRoX21ldGFkYXRhKSB7Ci0JYXJlbmFfY29uZmln X3QgY29uZmlnOwotCWNvbmZpZy5leHRlbnRfaG9va3MgPSAmaG9va3M7Ci0JY29uZmlnLm1ldGFk YXRhX3VzZV9ob29rcyA9IHRydWU7Ci0KLQl0ZXN0X2FyZW5hc19jcmVhdGVfZXh0X2Jhc2UoY29u ZmlnLCB0cnVlLCB0cnVlKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0 dXJuIHRlc3QoCi0JICAgIHRlc3RfZXh0ZW50X21hbnVhbF9ob29rLAotCSAgICB0ZXN0X2V4dGVu dF9hdXRvX2hvb2ssCi0JICAgIHRlc3RfYXJlbmFzX2NyZWF0ZV9leHRfd2l0aF9laG9va3Nfbm9f bWV0YWRhdGEsCi0JICAgIHRlc3RfYXJlbmFzX2NyZWF0ZV9leHRfd2l0aF9laG9va3Nfd2l0aF9t ZXRhZGF0YSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9leHRlbnQuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2V4dGVudC5zaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjMjE4Ny4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL2V4dGVudC5zaAorKysg L2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyEvYmluL3NoCi0KLWlmIFsgIngke2VuYWJsZV9m aWxsfSIgPSAieDEiIF0gOyB0aGVuCi0gIGV4cG9ydCBNQUxMT0NfQ09ORj0ianVuazpmYWxzZSIK LWZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC9pbnRlZ3JhdGlvbi9tYWxsb2MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vbWFsbG9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGVmNDQ5MTYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9tYWxsb2MuYworKysgL2Rldi9udWxsCkBA IC0xLDE2ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotVEVTVF9C RUdJTih0ZXN0X3plcm9fYWxsb2MpIHsKLQl2b2lkICpyZXMgPSBtYWxsb2MoMCk7Ci0JYXNzZXJ0 KHJlcyk7Ci0Jc2l6ZV90IHVzYWJsZSA9IFRFU1RfTUFMTE9DX1NJWkUocmVzKTsKLQlhc3NlcnQo dXNhYmxlID4gMCk7Ci0JZnJlZShyZXMpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQp IHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF96ZXJvX2FsbG9jKTsKLX0KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9u L21hbGxvY3guYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv aW50ZWdyYXRpb24vbWFsbG9jeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGYx ZTNmLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvaW50ZWdyYXRpb24vbWFsbG9jeC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc0ICswLDAg QEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotc3RhdGljIHVuc2lnbmVkCi1n ZXRfbnNpemVzX2ltcGwoY29uc3QgY2hhciAqY21kKSB7Ci0JdW5zaWduZWQgcmV0OwotCXNpemVf dCB6OwotCi0JeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bChjbWQs ICh2b2lkICopJnJldCwgJnosIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3Rs KFwiJXNcIiwgLi4uKSBmYWlsdXJlIiwgY21kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyB1bnNpZ25lZAotZ2V0X25sYXJnZSh2b2lkKSB7Ci0JcmV0dXJuIGdldF9uc2l6ZXNfaW1wbCgi YXJlbmFzLm5sZXh0ZW50cyIpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1nZXRfc2l6ZV9pbXBsKGNv bnN0IGNoYXIgKmNtZCwgc2l6ZV90IGluZCkgewotCXNpemVfdCByZXQ7Ci0Jc2l6ZV90IHo7Ci0J c2l6ZV90IG1pYls0XTsKLQlzaXplX3QgbWlibGVuID0gNDsKLQotCXogPSBzaXplb2Yoc2l6ZV90 KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKGNtZCwgbWliLCAmbWlibGVuKSwKLQkg ICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYihcIiVzXCIsIC4uLikgZmFpbHVyZSIs IGNtZCk7Ci0JbWliWzJdID0gaW5kOwotCXogPSBzaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9l cShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJnJldCwgJnosIE5VTEwsIDApLAot CSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoW1wiJXNcIiwgJXp1XSwgLi4uKSBmYWls dXJlIiwgY21kLCBpbmQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNpemVfdAotZ2V0 X2xhcmdlX3NpemUoc2l6ZV90IGluZCkgewotCXJldHVybiBnZXRfc2l6ZV9pbXBsKCJhcmVuYXMu bGV4dGVudC4wLnNpemUiLCBpbmQpOwotfQotCi0vKgotICogT24gc3lzdGVtcyB3aGljaCBjYW4n dCBtZXJnZSBleHRlbnRzLCB0ZXN0cyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBnZW5lcmF0ZQot ICogYSBsb3Qgb2YgZGlydHkgbWVtb3J5IHZlcnkgcXVpY2tseS4gIFB1cmdpbmcgYmV0d2VlbiBj eWNsZXMgbWl0aWdhdGVzCi0gKiBwb3RlbnRpYWwgT09NIG9uIGUuZy4gMzItYml0IFdpbmRvd3Mu Ci0gKi8KLXN0YXRpYyB2b2lkCi1wdXJnZSh2b2lkKSB7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgi YXJlbmEuMC5wdXJnZSIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsIGVycm9yIik7Ci19Ci0KLS8qCi0gKiBHQ0MgIi1XYWxsb2Mtc2l6ZS1sYXJnZXIt dGhhbiIgd2FybmluZyBkZXRlY3RzIHdoZW4gb25lIG9mIHRoZSBtZW1vcnkKLSAqIGFsbG9jYXRp b24gZnVuY3Rpb25zIGlzIGNhbGxlZCB3aXRoIGEgc2l6ZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11 bSBzaXplIHRoYXQKLSAqIHRoZXkgc3VwcG9ydC4gSGVyZSB3ZSB3YW50IHRvIGV4cGxpY2l0bHkg dGVzdCB0aGF0IHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICogZG8gaW5kZWVkIGZhaWwgcHJv cGVybHkgd2hlbiB0aGlzIGlzIHRoZSBjYXNlLCB3aGljaCB0cmlnZ2VycyB0aGUgd2FybmluZy4K LSAqIFRoZXJlZm9yZSB3ZSBkaXNhYmxlIHRoZSB3YXJuaW5nIGZvciB0aGVzZSB0ZXN0cy4KLSAq LwotSkVNQUxMT0NfRElBR05PU1RJQ19QVVNICi1KRU1BTExPQ19ESUFHTk9TVElDX0lHTk9SRV9B TExPQ19TSVpFX0xBUkdFUl9USEFOCi0KLVRFU1RfQkVHSU4odGVzdF9vdmVyZmxvdykgewotCXNp emVfdCBsYXJnZW1heDsKLQotCWxhcmdlbWF4ID0gZ2V0X2xhcmdlX3NpemUoZ2V0X25sYXJnZSgp LTEpOwotCi0JZXhwZWN0X3B0cl9udWxsKG1hbGxvY3gobGFyZ2VtYXgrMSwgMCksCi0JICAgICJF eHBlY3RlZCBPT00gZm9yIG1hbGxvY3goc2l6ZT0lI3p4LCAwKSIsIGxhcmdlbWF4KzEpOwotCi0J ZXhwZWN0X3B0cl9udWxsKG1hbGxvY3goWlUoUFRSRElGRl9NQVgpKzEsIDApLAotCSAgICAiRXhw ZWN0ZWQgT09NIGZvciBtYWxsb2N4KHNpemU9JSN6eCwgMCkiLCBaVShQVFJESUZGX01BWCkrMSk7 Ci0KLQlleHBlY3RfcHRyX251bGwobWFsbG9jeChTSVpFX1RfTUFYLCAwKSwKLQkgICAgIkV4cGVj dGVkIE9PTSBmb3IgbWFsbG9jeChzaXplPSUjengsIDApIiwgU0laRV9UX01BWCk7Ci0KLQlleHBl Y3RfcHRyX251bGwobWFsbG9jeCgxLCBNQUxMT0NYX0FMSUdOKFpVKFBUUkRJRkZfTUFYKSsxKSks Ci0JICAgICJFeHBlY3RlZCBPT00gZm9yIG1hbGxvY3goc2l6ZT0xLCBNQUxMT0NYX0FMSUdOKCUj engpKSIsCi0JICAgIFpVKFBUUkRJRkZfTUFYKSsxKTsKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2 b2lkICoKLXJlbW90ZV9hbGxvYyh2b2lkICphcmcpIHsKLQl1bnNpZ25lZCBhcmVuYTsKLQlzaXpl X3Qgc3ogPSBzaXplb2YodW5zaWduZWQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5j cmVhdGUiLCAodm9pZCAqKSZhcmVuYSwgJnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlzaXplX3QgbGFyZ2Vfc3o7Ci0Jc3ogPSBzaXplb2Yo c2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCAo dm9pZCAqKSZsYXJnZV9zeiwgJnN6LAotCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFs bGN0bCBmYWlsdXJlIik7Ci0KLQl2b2lkICpwdHIgPSBtYWxsb2N4KGxhcmdlX3N6LCBNQUxMT0NY X0FSRU5BKGFyZW5hKQotCSAgICB8IE1BTExPQ1hfVENBQ0hFX05PTkUpOwotCXZvaWQgKipyZXQg PSAodm9pZCAqKilhcmc7Ci0JKnJldCA9IHB0cjsKLQotCXJldHVybiBOVUxMOwotfQotCi1URVNU X0JFR0lOKHRlc3RfcmVtb3RlX2ZyZWUpIHsKLQl0aGRfdCB0aGQ7Ci0Jdm9pZCAqcmV0OwotCXRo ZF9jcmVhdGUoJnRoZCwgcmVtb3RlX2FsbG9jLCAodm9pZCAqKSZyZXQpOwotCXRoZF9qb2luKHRo ZCwgTlVMTCk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChyZXQsICJVbmV4cGVjdGVkIG1hbGxvY3gg ZmFpbHVyZSIpOwotCi0JLyogQXZvaWQgVENBQ0hFX05PTkUgdG8gZXhwbGljaXRseSB0ZXN0IHRj YWNoZV9mbHVzaCgpLiAqLwotCWRhbGxvY3gocmV0LCAwKTsKLQltYWxsY3RsKCJ0aHJlYWQudGNh Y2hlLmZsdXNoIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JF R0lOKHRlc3Rfb29tKSB7Ci0Jc2l6ZV90IGxhcmdlbWF4OwotCWJvb2wgb29tOwotCXZvaWQgKnB0 cnNbM107Ci0JdW5zaWduZWQgaTsKLQotCS8qCi0JICogSXQgc2hvdWxkIGJlIGltcG9zc2libGUg dG8gYWxsb2NhdGUgdGhyZWUgb2JqZWN0cyB0aGF0IGVhY2ggY29uc3VtZQotCSAqIG5lYXJseSBo YWxmIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCi0JICovCi0JbGFyZ2VtYXggPSBnZXRfbGFy Z2Vfc2l6ZShnZXRfbmxhcmdlKCktMSk7Ci0Jb29tID0gZmFsc2U7Ci0JZm9yIChpID0gMDsgaSA8 IHNpemVvZihwdHJzKSAvIHNpemVvZih2b2lkICopOyBpKyspIHsKLQkJcHRyc1tpXSA9IG1hbGxv Y3gobGFyZ2VtYXgsIE1BTExPQ1hfQVJFTkEoMCkpOwotCQlpZiAocHRyc1tpXSA9PSBOVUxMKSB7 Ci0JCQlvb20gPSB0cnVlOwotCQl9Ci0JfQotCWV4cGVjdF90cnVlKG9vbSwKLQkgICAgIkV4cGVj dGVkIE9PTSBkdXJpbmcgc2VyaWVzIG9mIGNhbGxzIHRvIG1hbGxvY3goc2l6ZT0lenUsIDApIiwK LQkgICAgbGFyZ2VtYXgpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHRycykgLyBzaXplb2Yo dm9pZCAqKTsgaSsrKSB7Ci0JCWlmIChwdHJzW2ldICE9IE5VTEwpIHsKLQkJCWRhbGxvY3gocHRy c1tpXSwgMCk7Ci0JCX0KLQl9Ci0JcHVyZ2UoKTsKLQotI2lmIExHX1NJWkVPRl9QVFIgPT0gMwot CWV4cGVjdF9wdHJfbnVsbChtYWxsb2N4KDB4ODAwMDAwMDAwMDAwMDAwMFVMTCwKLQkgICAgTUFM TE9DWF9BTElHTigweDgwMDAwMDAwMDAwMDAwMDBVTEwpKSwKLQkgICAgIkV4cGVjdGVkIE9PTSBm b3IgbWFsbG9jeCgpIik7Ci0JZXhwZWN0X3B0cl9udWxsKG1hbGxvY3goMHg4MDAwMDAwMDAwMDAw MDAwVUxMLAotCSAgICBNQUxMT0NYX0FMSUdOKDB4ODAwMDAwMDApKSwKLQkgICAgIkV4cGVjdGVk IE9PTSBmb3IgbWFsbG9jeCgpIik7Ci0jZWxzZQotCWV4cGVjdF9wdHJfbnVsbChtYWxsb2N4KDB4 ODAwMDAwMDBVTCwgTUFMTE9DWF9BTElHTigweDgwMDAwMDAwVUwpKSwKLQkgICAgIkV4cGVjdGVk IE9PTSBmb3IgbWFsbG9jeCgpIik7Ci0jZW5kaWYKLX0KLVRFU1RfRU5ECi0KLS8qIFJlLWVuYWJs ZSB0aGUgIi1XYWxsb2Mtc2l6ZS1sYXJnZXItdGhhbj0iIHdhcm5pbmcgKi8KLUpFTUFMTE9DX0RJ QUdOT1NUSUNfUE9QCi0KLVRFU1RfQkVHSU4odGVzdF9iYXNpYykgewotI2RlZmluZSBNQVhTWiAo KChzaXplX3QpMSkgPDwgMjMpCi0Jc2l6ZV90IHN6OwotCi0JZm9yIChzeiA9IDE7IHN6IDwgTUFY U1o7IHN6ID0gbmFsbG9jeChzeiwgMCkgKyAxKSB7Ci0JCXNpemVfdCBuc3osIHJzejsKLQkJdm9p ZCAqcDsKLQkJbnN6ID0gbmFsbG9jeChzeiwgMCk7Ci0JCWV4cGVjdF96dV9uZShuc3osIDAsICJV bmV4cGVjdGVkIG5hbGxvY3goKSBlcnJvciIpOwotCQlwID0gbWFsbG9jeChzeiwgMCk7Ci0JCWV4 cGVjdF9wdHJfbm90X251bGwocCwKLQkJICAgICJVbmV4cGVjdGVkIG1hbGxvY3goc2l6ZT0lengs IGZsYWdzPTApIGVycm9yIiwgc3opOwotCQlyc3ogPSBzYWxsb2N4KHAsIDApOwotCQlleHBlY3Rf enVfZ2UocnN6LCBzeiwgIlJlYWwgc2l6ZSBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQiKTsKLQkJZXhw ZWN0X3p1X2VxKG5zeiwgcnN6LCAibmFsbG9jeCgpL3NhbGxvY3goKSBzaXplIG1pc21hdGNoIik7 Ci0JCWRhbGxvY3gocCwgMCk7Ci0KLQkJcCA9IG1hbGxvY3goc3osIDApOwotCQlleHBlY3RfcHRy X25vdF9udWxsKHAsCi0JCSAgICAiVW5leHBlY3RlZCBtYWxsb2N4KHNpemU9JXp4LCBmbGFncz0w KSBlcnJvciIsIHN6KTsKLQkJZGFsbG9jeChwLCAwKTsKLQotCQluc3ogPSBuYWxsb2N4KHN6LCBN QUxMT0NYX1pFUk8pOwotCQlleHBlY3RfenVfbmUobnN6LCAwLCAiVW5leHBlY3RlZCBuYWxsb2N4 KCkgZXJyb3IiKTsKLQkJcCA9IG1hbGxvY3goc3osIE1BTExPQ1hfWkVSTyk7Ci0JCWV4cGVjdF9w dHJfbm90X251bGwocCwKLQkJICAgICJVbmV4cGVjdGVkIG1hbGxvY3goc2l6ZT0lengsIGZsYWdz PU1BTExPQ1hfWkVSTykgZXJyb3IiLAotCQkgICAgbnN6KTsKLQkJcnN6ID0gc2FsbG9jeChwLCAw KTsKLQkJZXhwZWN0X3p1X2VxKG5zeiwgcnN6LCAibmFsbG9jeCgpL3NhbGxvY3goKSByc2l6ZSBt aXNtYXRjaCIpOwotCQlkYWxsb2N4KHAsIDApOwotCQlwdXJnZSgpOwotCX0KLSN1bmRlZiBNQVhT WgotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSkgewot CWNvbnN0IGNoYXIgKnBlcmNwdV9hcmVuYTsKLQlzaXplX3Qgc3ogPSBzaXplb2YocGVyY3B1X2Fy ZW5hKTsKLQotCWlmKG1hbGxjdGwoIm9wdC5wZXJjcHVfYXJlbmEiLCAodm9pZCAqKSZwZXJjcHVf YXJlbmEsICZzeiwgTlVMTCwgMCkgfHwKLQkgICAgc3RyY21wKHBlcmNwdV9hcmVuYSwgImRpc2Fi bGVkIikgIT0gMCkgewotCQl0ZXN0X3NraXAoInRlc3RfYWxpZ25tZW50X2FuZF9zaXplIHNraXBw ZWQ6ICIKLQkJICAgICJub3Qgd29ya2luZyB3aXRoIHBlcmNwdSBhcmVuYS4iKTsKLQl9OwotI2Rl ZmluZSBNQVhBTElHTiAoKChzaXplX3QpMSkgPDwgMjMpCi0jZGVmaW5lIE5JVEVSIDQKLQlzaXpl X3QgbnN6LCByc3osIGFsaWdubWVudCwgdG90YWw7Ci0JdW5zaWduZWQgaTsKLQl2b2lkICpwc1tO SVRFUl07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTklURVI7IGkrKykgewotCQlwc1tpXSA9IE5VTEw7 Ci0JfQotCi0JZm9yIChhbGlnbm1lbnQgPSA4OwotCSAgICBhbGlnbm1lbnQgPD0gTUFYQUxJR047 Ci0JICAgIGFsaWdubWVudCA8PD0gMSkgewotCQl0b3RhbCA9IDA7Ci0JCWZvciAoc3ogPSAxOwot CQkgICAgc3ogPCAzICogYWxpZ25tZW50ICYmIHN6IDwgKDFVIDw8IDMxKTsKLQkJICAgIHN6ICs9 IChhbGlnbm1lbnQgPj4gKExHX1NJWkVPRl9QVFItMSkpIC0gMSkgewotCQkJZm9yIChpID0gMDsg aSA8IE5JVEVSOyBpKyspIHsKLQkJCQluc3ogPSBuYWxsb2N4KHN6LCBNQUxMT0NYX0FMSUdOKGFs aWdubWVudCkgfAotCQkJCSAgICBNQUxMT0NYX1pFUk8gfCBNQUxMT0NYX0FSRU5BKDApKTsKLQkJ CQlleHBlY3RfenVfbmUobnN6LCAwLAotCQkJCSAgICAibmFsbG9jeCgpIGVycm9yIGZvciBhbGln bm1lbnQ9JXp1LCAiCi0JCQkJICAgICJzaXplPSV6dSAoJSN6eCkiLCBhbGlnbm1lbnQsIHN6LCBz eik7Ci0JCQkJcHNbaV0gPSBtYWxsb2N4KHN6LCBNQUxMT0NYX0FMSUdOKGFsaWdubWVudCkgfAot CQkJCSAgICBNQUxMT0NYX1pFUk8gfCBNQUxMT0NYX0FSRU5BKDApKTsKLQkJCQlleHBlY3RfcHRy X25vdF9udWxsKHBzW2ldLAotCQkJCSAgICAibWFsbG9jeCgpIGVycm9yIGZvciBhbGlnbm1lbnQ9 JXp1LCAiCi0JCQkJICAgICJzaXplPSV6dSAoJSN6eCkiLCBhbGlnbm1lbnQsIHN6LCBzeik7Ci0J CQkJcnN6ID0gc2FsbG9jeChwc1tpXSwgMCk7Ci0JCQkJZXhwZWN0X3p1X2dlKHJzeiwgc3osCi0J CQkJICAgICJSZWFsIHNpemUgc21hbGxlciB0aGFuIGV4cGVjdGVkIGZvciAiCi0JCQkJICAgICJh bGlnbm1lbnQ9JXp1LCBzaXplPSV6dSIsIGFsaWdubWVudCwgc3opOwotCQkJCWV4cGVjdF96dV9l cShuc3osIHJzeiwKLQkJCQkgICAgIm5hbGxvY3goKS9zYWxsb2N4KCkgc2l6ZSBtaXNtYXRjaCBm b3IgIgotCQkJCSAgICAiYWxpZ25tZW50PSV6dSwgc2l6ZT0lenUiLCBhbGlnbm1lbnQsIHN6KTsK LQkJCQlleHBlY3RfcHRyX251bGwoCi0JCQkJICAgICh2b2lkICopKCh1aW50cHRyX3QpcHNbaV0g JiAoYWxpZ25tZW50LTEpKSwKLQkJCQkgICAgIiVwIGluYWRlcXVhdGVseSBhbGlnbmVkIGZvciIK LQkJCQkgICAgIiBhbGlnbm1lbnQ9JXp1LCBzaXplPSV6dSIsIHBzW2ldLAotCQkJCSAgICBhbGln bm1lbnQsIHN6KTsKLQkJCQl0b3RhbCArPSByc3o7Ci0JCQkJaWYgKHRvdGFsID49IChNQVhBTElH TiA8PCAxKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGkgPSAwOyBpIDwg TklURVI7IGkrKykgewotCQkJCWlmIChwc1tpXSAhPSBOVUxMKSB7Ci0JCQkJCWRhbGxvY3gocHNb aV0sIDApOwotCQkJCQlwc1tpXSA9IE5VTEw7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXB1cmdlKCk7 Ci0JfQotI3VuZGVmIE1BWEFMSUdOCi0jdW5kZWYgTklURVIKLX0KLVRFU1RfRU5ECi0KLWludAot bWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3Rfb3ZlcmZsb3csCi0JICAgIHRl c3Rfb29tLAotCSAgICB0ZXN0X3JlbW90ZV9mcmVlLAotCSAgICB0ZXN0X2Jhc2ljLAotCSAgICB0 ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9tYWxsb2N4LnNoIGIvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9tYWxs b2N4LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2MyMTg3Li4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRp b24vbWFsbG9jeC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyEvYmluL3NoCi0K LWlmIFsgIngke2VuYWJsZV9maWxsfSIgPSAieDEiIF0gOyB0aGVuCi0gIGV4cG9ydCBNQUxMT0Nf Q09ORj0ianVuazpmYWxzZSIKLWZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9vdmVyZmxvdy5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9vdmVyZmxvdy5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTYzMzI3Li4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vb3Zl cmZsb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2pl bWFsbG9jX3Rlc3QuaCIKLQotLyoKLSAqIEdDQyAiLVdhbGxvYy1zaXplLWxhcmdlci10aGFuIiB3 YXJuaW5nIGRldGVjdHMgd2hlbiBvbmUgb2YgdGhlIG1lbW9yeQotICogYWxsb2NhdGlvbiBmdW5j dGlvbnMgaXMgY2FsbGVkIHdpdGggYSBzaXplIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHNpemUg dGhhdAotICogdGhleSBzdXBwb3J0LiBIZXJlIHdlIHdhbnQgdG8gZXhwbGljaXRseSB0ZXN0IHRo YXQgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb25zCi0gKiBkbyBpbmRlZWQgZmFpbCBwcm9wZXJseSB3 aGVuIHRoaXMgaXMgdGhlIGNhc2UsIHdoaWNoIHRyaWdnZXJzIHRoZSB3YXJuaW5nLgotICogVGhl cmVmb3JlIHdlIGRpc2FibGUgdGhlIHdhcm5pbmcgZm9yIHRoZXNlIHRlc3RzLgotICovCi1KRU1B TExPQ19ESUFHTk9TVElDX1BVU0gKLUpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX0FMTE9DX1NJ WkVfTEFSR0VSX1RIQU4KLQotVEVTVF9CRUdJTih0ZXN0X292ZXJmbG93KSB7Ci0JdW5zaWduZWQg bmxleHRlbnRzOwotCXNpemVfdCBtaWJbNF07Ci0Jc2l6ZV90IHN6LCBtaWJsZW4sIG1heF9zaXpl X2NsYXNzOwotCXZvaWQgKnA7Ci0KLQlzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2Rf ZXEobWFsbGN0bCgiYXJlbmFzLm5sZXh0ZW50cyIsICh2b2lkICopJm5sZXh0ZW50cywgJnN6LCBO VUxMLAotCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGVycm9yIik7Ci0KLQltaWJs ZW4gPSBzaXplb2YobWliKSAvIHNpemVvZihzaXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxu YW1ldG9taWIoImFyZW5hcy5sZXh0ZW50LjAuc2l6ZSIsIG1pYiwgJm1pYmxlbiksIDAsCi0JICAg ICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBlcnJvciIpOwotCW1pYlsyXSA9IG5sZXh0 ZW50cyAtIDE7Ci0KLQlzeiA9IHNpemVvZihzaXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxi eW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmbWF4X3NpemVfY2xhc3MsICZzeiwKLQkgICAgTlVM TCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGVycm9yIik7Ci0KLQlleHBlY3Rf cHRyX251bGwobWFsbG9jKG1heF9zaXplX2NsYXNzICsgMSksCi0JICAgICJFeHBlY3RlZCBPT00g ZHVlIHRvIG92ZXItc2l6ZWQgYWxsb2NhdGlvbiByZXF1ZXN0Iik7Ci0JZXhwZWN0X3B0cl9udWxs KG1hbGxvYyhTSVpFX1RfTUFYKSwKLQkgICAgIkV4cGVjdGVkIE9PTSBkdWUgdG8gb3Zlci1zaXpl ZCBhbGxvY2F0aW9uIHJlcXVlc3QiKTsKLQotCWV4cGVjdF9wdHJfbnVsbChjYWxsb2MoMSwgbWF4 X3NpemVfY2xhc3MgKyAxKSwKLQkgICAgIkV4cGVjdGVkIE9PTSBkdWUgdG8gb3Zlci1zaXplZCBh bGxvY2F0aW9uIHJlcXVlc3QiKTsKLQlleHBlY3RfcHRyX251bGwoY2FsbG9jKDEsIFNJWkVfVF9N QVgpLAotCSAgICAiRXhwZWN0ZWQgT09NIGR1ZSB0byBvdmVyLXNpemVkIGFsbG9jYXRpb24gcmVx dWVzdCIpOwotCi0JcCA9IG1hbGxvYygxKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4 cGVjdGVkIG1hbGxvYygpIE9PTSIpOwotCWV4cGVjdF9wdHJfbnVsbChyZWFsbG9jKHAsIG1heF9z aXplX2NsYXNzICsgMSksCi0JICAgICJFeHBlY3RlZCBPT00gZHVlIHRvIG92ZXItc2l6ZWQgYWxs b2NhdGlvbiByZXF1ZXN0Iik7Ci0JZXhwZWN0X3B0cl9udWxsKHJlYWxsb2MocCwgU0laRV9UX01B WCksCi0JICAgICJFeHBlY3RlZCBPT00gZHVlIHRvIG92ZXItc2l6ZWQgYWxsb2NhdGlvbiByZXF1 ZXN0Iik7Ci0JZnJlZShwKTsKLX0KLVRFU1RfRU5ECi0KLS8qIFJlLWVuYWJsZSB0aGUgIi1XYWxs b2Mtc2l6ZS1sYXJnZXItdGhhbj0iIHdhcm5pbmcgKi8KLUpFTUFMTE9DX0RJQUdOT1NUSUNfUE9Q Ci0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3Rfb3ZlcmZsb3cp OwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvaW50ZWdyYXRpb24vcG9zaXhfbWVtYWxpZ24uYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vcG9zaXhfbWVtYWxpZ24uYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRhMDU0OS4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3Bvc2l4X21l bWFsaWduLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotI2luY2x1ZGUgInRlc3Qv amVtYWxsb2NfdGVzdC5oIgotCi0jZGVmaW5lIE1BWEFMSUdOICgoKHNpemVfdCkxKSA8PCAyMykK LQotLyoKLSAqIE9uIHN5c3RlbXMgd2hpY2ggY2FuJ3QgbWVyZ2UgZXh0ZW50cywgdGVzdHMgdGhh dCBjYWxsIHRoaXMgZnVuY3Rpb24gZ2VuZXJhdGUKLSAqIGEgbG90IG9mIGRpcnR5IG1lbW9yeSB2 ZXJ5IHF1aWNrbHkuICBQdXJnaW5nIGJldHdlZW4gY3ljbGVzIG1pdGlnYXRlcwotICogcG90ZW50 aWFsIE9PTSBvbiBlLmcuIDMyLWJpdCBXaW5kb3dzLgotICovCi1zdGF0aWMgdm9pZAotcHVyZ2Uo dm9pZCkgewotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hLjAucHVyZ2UiLCBOVUxMLCBOVUxM LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBlcnJvciIpOwotfQotCi1U RVNUX0JFR0lOKHRlc3RfYWxpZ25tZW50X2Vycm9ycykgewotCXNpemVfdCBhbGlnbm1lbnQ7Ci0J dm9pZCAqcDsKLQotCWZvciAoYWxpZ25tZW50ID0gMDsgYWxpZ25tZW50IDwgc2l6ZW9mKHZvaWQg Kik7IGFsaWdubWVudCsrKSB7Ci0JCWV4cGVjdF9kX2VxKHBvc2l4X21lbWFsaWduKCZwLCBhbGln bm1lbnQsIDEpLCBFSU5WQUwsCi0JCSAgICAiRXhwZWN0ZWQgZXJyb3IgZm9yIGludmFsaWQgYWxp Z25tZW50ICV6dSIsCi0JCSAgICBhbGlnbm1lbnQpOwotCX0KLQotCWZvciAoYWxpZ25tZW50ID0g c2l6ZW9mKHNpemVfdCk7IGFsaWdubWVudCA8IE1BWEFMSUdOOwotCSAgICBhbGlnbm1lbnQgPDw9 IDEpIHsKLQkJZXhwZWN0X2RfbmUocG9zaXhfbWVtYWxpZ24oJnAsIGFsaWdubWVudCArIDEsIDEp LCAwLAotCQkgICAgIkV4cGVjdGVkIGVycm9yIGZvciBpbnZhbGlkIGFsaWdubWVudCAlenUiLAot CQkgICAgYWxpZ25tZW50ICsgMSk7Ci0JfQotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0 X29vbV9lcnJvcnMpIHsKLQlzaXplX3QgYWxpZ25tZW50LCBzaXplOwotCXZvaWQgKnA7Ci0KLSNp ZiBMR19TSVpFT0ZfUFRSID09IDMKLQlhbGlnbm1lbnQgPSBVSU5UNjRfQygweDgwMDAwMDAwMDAw MDAwMDApOwotCXNpemUgICAgICA9IFVJTlQ2NF9DKDB4ODAwMDAwMDAwMDAwMDAwMCk7Ci0jZWxz ZQotCWFsaWdubWVudCA9IDB4ODAwMDAwMDBMVTsKLQlzaXplICAgICAgPSAweDgwMDAwMDAwTFU7 Ci0jZW5kaWYKLQlleHBlY3RfZF9uZShwb3NpeF9tZW1hbGlnbigmcCwgYWxpZ25tZW50LCBzaXpl KSwgMCwKLQkgICAgIkV4cGVjdGVkIGVycm9yIGZvciBwb3NpeF9tZW1hbGlnbigmcCwgJXp1LCAl enUpIiwKLQkgICAgYWxpZ25tZW50LCBzaXplKTsKLQotI2lmIExHX1NJWkVPRl9QVFIgPT0gMwot CWFsaWdubWVudCA9IFVJTlQ2NF9DKDB4NDAwMDAwMDAwMDAwMDAwMCk7Ci0Jc2l6ZSAgICAgID0g VUlOVDY0X0MoMHhjMDAwMDAwMDAwMDAwMDAxKTsKLSNlbHNlCi0JYWxpZ25tZW50ID0gMHg0MDAw MDAwMExVOwotCXNpemUgICAgICA9IDB4YzAwMDAwMDFMVTsKLSNlbmRpZgotCWV4cGVjdF9kX25l KHBvc2l4X21lbWFsaWduKCZwLCBhbGlnbm1lbnQsIHNpemUpLCAwLAotCSAgICAiRXhwZWN0ZWQg ZXJyb3IgZm9yIHBvc2l4X21lbWFsaWduKCZwLCAlenUsICV6dSkiLAotCSAgICBhbGlnbm1lbnQs IHNpemUpOwotCi0JYWxpZ25tZW50ID0gMHgxMExVOwotI2lmIExHX1NJWkVPRl9QVFIgPT0gMwot CXNpemUgPSBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZjApOwotI2Vsc2UKLQlzaXplID0gMHhm ZmZmZmZmMExVOwotI2VuZGlmCi0JZXhwZWN0X2RfbmUocG9zaXhfbWVtYWxpZ24oJnAsIGFsaWdu bWVudCwgc2l6ZSksIDAsCi0JICAgICJFeHBlY3RlZCBlcnJvciBmb3IgcG9zaXhfbWVtYWxpZ24o JnAsICV6dSwgJXp1KSIsCi0JICAgIGFsaWdubWVudCwgc2l6ZSk7Ci19Ci1URVNUX0VORAotCi1U RVNUX0JFR0lOKHRlc3RfYWxpZ25tZW50X2FuZF9zaXplKSB7Ci0jZGVmaW5lIE5JVEVSIDQKLQlz aXplX3QgYWxpZ25tZW50LCBzaXplLCB0b3RhbDsKLQl1bnNpZ25lZCBpOwotCWludCBlcnI7Ci0J dm9pZCAqcHNbTklURVJdOwotCi0JZm9yIChpID0gMDsgaSA8IE5JVEVSOyBpKyspIHsKLQkJcHNb aV0gPSBOVUxMOwotCX0KLQotCWZvciAoYWxpZ25tZW50ID0gODsKLQkgICAgYWxpZ25tZW50IDw9 IE1BWEFMSUdOOwotCSAgICBhbGlnbm1lbnQgPDw9IDEpIHsKLQkJdG90YWwgPSAwOwotCQlmb3Ig KHNpemUgPSAwOwotCQkgICAgc2l6ZSA8IDMgKiBhbGlnbm1lbnQgJiYgc2l6ZSA8ICgxVSA8PCAz MSk7Ci0JCSAgICBzaXplICs9ICgoc2l6ZSA9PSAwKSA/IDEgOgotCQkgICAgKGFsaWdubWVudCA+ PiAoTEdfU0laRU9GX1BUUi0xKSkgLSAxKSkgewotCQkJZm9yIChpID0gMDsgaSA8IE5JVEVSOyBp KyspIHsKLQkJCQllcnIgPSBwb3NpeF9tZW1hbGlnbigmcHNbaV0sCi0JCQkJICAgIGFsaWdubWVu dCwgc2l6ZSk7Ci0JCQkJaWYgKGVycikgewotCQkJCQljaGFyIGJ1ZltCVUZFUlJPUl9CVUZdOwot Ci0JCQkJCWJ1ZmVycm9yKGdldF9lcnJubygpLCBidWYsIHNpemVvZihidWYpKTsKLQkJCQkJdGVz dF9mYWlsKAotCQkJCQkgICAgIkVycm9yIGZvciBhbGlnbm1lbnQ9JXp1LCAiCi0JCQkJCSAgICAi c2l6ZT0lenUgKCUjengpOiAlcyIsCi0JCQkJCSAgICBhbGlnbm1lbnQsIHNpemUsIHNpemUsIGJ1 Zik7Ci0JCQkJfQotCQkJCXRvdGFsICs9IFRFU1RfTUFMTE9DX1NJWkUocHNbaV0pOwotCQkJCWlm ICh0b3RhbCA+PSAoTUFYQUxJR04gPDwgMSkpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQot CQkJZm9yIChpID0gMDsgaSA8IE5JVEVSOyBpKyspIHsKLQkJCQlpZiAocHNbaV0gIT0gTlVMTCkg ewotCQkJCQlmcmVlKHBzW2ldKTsKLQkJCQkJcHNbaV0gPSBOVUxMOwotCQkJCX0KLQkJCX0KLQkJ fQotCQlwdXJnZSgpOwotCX0KLSN1bmRlZiBOSVRFUgotfQotVEVTVF9FTkQKLQotaW50Ci1tYWlu KHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9hbGlnbm1lbnRfZXJyb3JzLAotCSAg ICB0ZXN0X29vbV9lcnJvcnMsCi0JICAgIHRlc3RfYWxpZ25tZW50X2FuZF9zaXplKTsKLX0KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2lu dGVncmF0aW9uL3JhbGxvY3guYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW50ZWdyYXRpb24vcmFsbG9jeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA2OGI4ZjM4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vcmFsbG9jeC5jCisrKyAvZGV2L251bGwKQEAgLTEs MzA4ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotc3RhdGljIHVu c2lnbmVkCi1nZXRfbnNpemVzX2ltcGwoY29uc3QgY2hhciAqY21kKSB7Ci0JdW5zaWduZWQgcmV0 OwotCXNpemVfdCB6OwotCi0JeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFs bGN0bChjbWQsICh2b2lkICopJnJldCwgJnosIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsKFwiJXNcIiwgLi4uKSBmYWlsdXJlIiwgY21kKTsKLQotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyB1bnNpZ25lZAotZ2V0X25sYXJnZSh2b2lkKSB7Ci0JcmV0dXJuIGdldF9uc2l6 ZXNfaW1wbCgiYXJlbmFzLm5sZXh0ZW50cyIpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1nZXRfc2l6 ZV9pbXBsKGNvbnN0IGNoYXIgKmNtZCwgc2l6ZV90IGluZCkgewotCXNpemVfdCByZXQ7Ci0Jc2l6 ZV90IHo7Ci0Jc2l6ZV90IG1pYls0XTsKLQlzaXplX3QgbWlibGVuID0gNDsKLQotCXogPSBzaXpl b2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKGNtZCwgbWliLCAmbWli bGVuKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYihcIiVzXCIsIC4uLikg ZmFpbHVyZSIsIGNtZCk7Ci0JbWliWzJdID0gaW5kOwotCXogPSBzaXplb2Yoc2l6ZV90KTsKLQll eHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJnJldCwgJnosIE5V TEwsIDApLAotCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoW1wiJXNcIiwgJXp1XSwg Li4uKSBmYWlsdXJlIiwgY21kLCBpbmQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNp emVfdAotZ2V0X2xhcmdlX3NpemUoc2l6ZV90IGluZCkgewotCXJldHVybiBnZXRfc2l6ZV9pbXBs KCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCBpbmQpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfZ3Jv d19hbmRfc2hyaW5rKSB7Ci0JLyoKLQkgKiBVc2Ugdm9sYXRpbGUgdG8gd29ya2Fyb3VuZCBidWZm ZXIgb3ZlcmZsb3cgZmFsc2UgcG9zaXRpdmVzCi0JICogKC1EX0ZPUlRJRllfU09VUkNFPTMpLgot CSAqLwotCXZvaWQgKnZvbGF0aWxlIHAsICp2b2xhdGlsZSBxOwotCXNpemVfdCB0c3o7Ci0jZGVm aW5lIE5DWUNMRVMgMwotCXVuc2lnbmVkIGksIGo7Ci0jZGVmaW5lIE5TWlMgMTAyNAotCXNpemVf dCBzenNbTlNaU107Ci0jZGVmaW5lIE1BWFNaIFpVKDEyICogMTAyNCAqIDEwMjQpCi0KLQlwID0g bWFsbG9jeCgxLCAwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxv Y3goKSBlcnJvciIpOwotCXN6c1swXSA9IHNhbGxvY3gocCwgMCk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgTkNZQ0xFUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDE7IGogPCBOU1pTICYmIHN6c1tqLTFdIDwg TUFYU1o7IGorKykgewotCQkJcSA9IHJhbGxvY3gocCwgc3pzW2otMV0rMSwgMCk7Ci0JCQlleHBl Y3RfcHRyX25vdF9udWxsKHEsCi0JCQkgICAgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGVycm9yIGZv ciBzaXplPSV6dS0tPiV6dSIsCi0JCQkgICAgc3pzW2otMV0sIHN6c1tqLTFdKzEpOwotCQkJc3pz W2pdID0gc2FsbG9jeChxLCAwKTsKLQkJCWV4cGVjdF96dV9uZShzenNbal0sIHN6c1tqLTFdKzEs Ci0JCQkgICAgIkV4cGVjdGVkIHNpemUgdG8gYmUgYXQgbGVhc3Q6ICV6dSIsIHN6c1tqLTFdKzEp OwotCQkJcCA9IHE7Ci0JCX0KLQotCQlmb3IgKGotLTsgaiA+IDA7IGotLSkgewotCQkJcSA9IHJh bGxvY3gocCwgc3pzW2otMV0sIDApOwotCQkJZXhwZWN0X3B0cl9ub3RfbnVsbChxLAotCQkJICAg ICJVbmV4cGVjdGVkIHJhbGxvY3goKSBlcnJvciBmb3Igc2l6ZT0lenUtLT4lenUiLAotCQkJICAg IHN6c1tqXSwgc3pzW2otMV0pOwotCQkJdHN6ID0gc2FsbG9jeChxLCAwKTsKLQkJCWV4cGVjdF96 dV9lcSh0c3osIHN6c1tqLTFdLAotCQkJICAgICJFeHBlY3RlZCBzaXplPSV6dSwgZ290IHNpemU9 JXp1Iiwgc3pzW2otMV0sIHRzeik7Ci0JCQlwID0gcTsKLQkJfQotCX0KLQotCWRhbGxvY3gocCwg MCk7Ci0jdW5kZWYgTUFYU1oKLSN1bmRlZiBOU1pTCi0jdW5kZWYgTkNZQ0xFUwotfQotVEVTVF9F TkQKLQotc3RhdGljIGJvb2wKLXZhbGlkYXRlX2ZpbGwodm9pZCAqcCwgdWludDhfdCBjLCBzaXpl X3Qgb2Zmc2V0LCBzaXplX3QgbGVuKSB7Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQkvKgotCSAqIFVz ZSB2b2xhdGlsZSB0byB3b3JrYXJvdW5kIGJ1ZmZlciBvdmVyZmxvdyBmYWxzZSBwb3NpdGl2ZXMK LQkgKiAoLURfRk9SVElGWV9TT1VSQ0U9MykuCi0JICovCi0JdWludDhfdCAqdm9sYXRpbGUgYnVm ID0gKHVpbnQ4X3QgKilwOwotCXNpemVfdCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KSB7Ci0JCXVpbnQ4X3QgYiA9IGJ1ZltvZmZzZXQraV07Ci0JCWlmIChiICE9IGMpIHsKLQkJCXRl c3RfZmFpbCgiQWxsb2NhdGlvbiBhdCAlcCAobGVuPSV6dSkgY29udGFpbnMgJSN4ICIKLQkJCSAg ICAicmF0aGVyIHRoYW4gJSN4IGF0IG9mZnNldCAlenUiLCBwLCBsZW4sIGIsIGMsCi0JCQkgICAg b2Zmc2V0K2kpOwotCQkJcmV0ID0gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0K LVRFU1RfQkVHSU4odGVzdF96ZXJvKSB7Ci0JLyoKLQkgKiBVc2Ugdm9sYXRpbGUgdG8gd29ya2Fy b3VuZCBidWZmZXIgb3ZlcmZsb3cgZmFsc2UgcG9zaXRpdmVzCi0JICogKC1EX0ZPUlRJRllfU09V UkNFPTMpLgotCSAqLwotCXZvaWQgKnZvbGF0aWxlIHAsICp2b2xhdGlsZSBxOwotCXNpemVfdCBw c3osIHFzeiwgaSwgajsKLQlzaXplX3Qgc3RhcnRfc2l6ZXNbXSA9IHsxLCAzKjEwMjQsIDYzKjEw MjQsIDQwOTUqMTAyNH07Ci0jZGVmaW5lIEZJTExfQllURSAweGFhVQotI2RlZmluZSBSQU5HRSAy MDQ4Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0YXJ0X3NpemVzKS9zaXplb2Yoc2l6ZV90 KTsgaSsrKSB7Ci0JCXNpemVfdCBzdGFydF9zaXplID0gc3RhcnRfc2l6ZXNbaV07Ci0JCXAgPSBt YWxsb2N4KHN0YXJ0X3NpemUsIE1BTExPQ1hfWkVSTyk7Ci0JCWV4cGVjdF9wdHJfbm90X251bGwo cCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7Ci0JCXBzeiA9IHNhbGxvY3gocCwgMCk7 Ci0KLQkJZXhwZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocCwgMCwgMCwgcHN6KSwKLQkJICAgICJF eHBlY3RlZCB6ZXJvZWQgbWVtb3J5Iik7Ci0JCW1lbXNldChwLCBGSUxMX0JZVEUsIHBzeik7Ci0J CWV4cGVjdF9mYWxzZSh2YWxpZGF0ZV9maWxsKHAsIEZJTExfQllURSwgMCwgcHN6KSwKLQkJICAg ICJFeHBlY3RlZCBmaWxsZWQgbWVtb3J5Iik7Ci0KLQkJZm9yIChqID0gMTsgaiA8IFJBTkdFOyBq KyspIHsKLQkJCXEgPSByYWxsb2N4KHAsIHN0YXJ0X3NpemUraiwgTUFMTE9DWF9aRVJPKTsKLQkJ CWV4cGVjdF9wdHJfbm90X251bGwocSwgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGVycm9yIik7Ci0J CQlxc3ogPSBzYWxsb2N4KHEsIDApOwotCQkJaWYgKHEgIT0gcCB8fCBxc3ogIT0gcHN6KSB7Ci0J CQkJZXhwZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocSwgRklMTF9CWVRFLCAwLAotCQkJCSAgICBw c3opLCAiRXhwZWN0ZWQgZmlsbGVkIG1lbW9yeSIpOwotCQkJCWV4cGVjdF9mYWxzZSh2YWxpZGF0 ZV9maWxsKHEsIDAsIHBzeiwgcXN6LXBzeiksCi0JCQkJICAgICJFeHBlY3RlZCB6ZXJvZWQgbWVt b3J5Iik7Ci0JCQl9Ci0JCQlpZiAocHN6ICE9IHFzeikgewotCQkJCW1lbXNldCgodm9pZCAqKSgo dWludHB0cl90KXErcHN6KSwgRklMTF9CWVRFLAotCQkJCSAgICBxc3otcHN6KTsKLQkJCQlwc3og PSBxc3o7Ci0JCQl9Ci0JCQlwID0gcTsKLQkJfQotCQlleHBlY3RfZmFsc2UodmFsaWRhdGVfZmls bChwLCBGSUxMX0JZVEUsIDAsIHBzeiksCi0JCSAgICAiRXhwZWN0ZWQgZmlsbGVkIG1lbW9yeSIp OwotCQlkYWxsb2N4KHAsIDApOwotCX0KLSN1bmRlZiBGSUxMX0JZVEUKLX0KLVRFU1RfRU5ECi0K LVRFU1RfQkVHSU4odGVzdF9hbGlnbikgewotCXZvaWQgKnAsICpxOwotCXNpemVfdCBhbGlnbjsK LSNkZWZpbmUgTUFYX0FMSUdOIChaVSgxKSA8PCAyNSkKLQotCWFsaWduID0gWlUoMSk7Ci0JcCA9 IG1hbGxvY3goMSwgTUFMTE9DWF9BTElHTihhbGlnbikpOwotCWV4cGVjdF9wdHJfbm90X251bGwo cCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7Ci0KLQlmb3IgKGFsaWduIDw8PSAxOyBh bGlnbiA8PSBNQVhfQUxJR047IGFsaWduIDw8PSAxKSB7Ci0JCXEgPSByYWxsb2N4KHAsIDEsIE1B TExPQ1hfQUxJR04oYWxpZ24pKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChxLAotCQkgICAgIlVu ZXhwZWN0ZWQgcmFsbG9jeCgpIGVycm9yIGZvciBhbGlnbj0lenUiLCBhbGlnbik7Ci0JCWV4cGVj dF9wdHJfbnVsbCgKLQkJICAgICh2b2lkICopKCh1aW50cHRyX3QpcSAmIChhbGlnbi0xKSksCi0J CSAgICAiJXAgaW5hZGVxdWF0ZWx5IGFsaWduZWQgZm9yIGFsaWduPSV6dSIsCi0JCSAgICBxLCBh bGlnbik7Ci0JCXAgPSBxOwotCX0KLQlkYWxsb2N4KHAsIDApOwotI3VuZGVmIE1BWF9BTElHTgot fQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2FsaWduX2VudW0pIHsKLS8qIFNwYW4gYm90 aCBzbWFsbCBzaXplcyBhbmQgbGFyZ2Ugc2l6ZXMuICovCi0jZGVmaW5lIExHX01JTiAxMgotI2Rl ZmluZSBMR19NQVggMTUKLQlmb3IgKHNpemVfdCBsZ19hbGlnbiA9IExHX01JTjsgbGdfYWxpZ24g PD0gTEdfTUFYOyArK2xnX2FsaWduKSB7Ci0JCWZvciAoc2l6ZV90IGxnX3NpemUgPSBMR19NSU47 IGxnX3NpemUgPD0gTEdfTUFYOyArK2xnX3NpemUpIHsKLQkJCXNpemVfdCBzaXplID0gMSA8PCBs Z19zaXplOwotCQkJZm9yIChzaXplX3QgbGdfYWxpZ25fbmV4dCA9IExHX01JTjsKLQkJCSAgICBs Z19hbGlnbl9uZXh0IDw9IExHX01BWDsgKytsZ19hbGlnbl9uZXh0KSB7Ci0JCQkJaW50IGZsYWdz ID0gTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbik7Ci0JCQkJdm9pZCAqcCA9IG1hbGxvY3goMSwg ZmxhZ3MpOwotCQkJCWFzc2VydF9wdHJfbm90X251bGwocCwKLQkJCQkgICAgIlVuZXhwZWN0ZWQg bWFsbG9jeCgpIGVycm9yIik7Ci0JCQkJYXNzZXJ0X3p1X2VxKG5hbGxvY3goMSwgZmxhZ3MpLAot CQkJCSAgICBURVNUX01BTExPQ19TSVpFKHApLAotCQkJCSAgICAiV3JvbmcgbWFsbG9jeCgpIHVz YWJsZSBzaXplIik7Ci0JCQkJaW50IGZsYWdzX25leHQgPQotCQkJCSAgICBNQUxMT0NYX0xHX0FM SUdOKGxnX2FsaWduX25leHQpOwotCQkJCXAgPSByYWxsb2N4KHAsIHNpemUsIGZsYWdzX25leHQp OwotCQkJCWFzc2VydF9wdHJfbm90X251bGwocCwKLQkJCQkgICAgIlVuZXhwZWN0ZWQgcmFsbG9j eCgpIGVycm9yIik7Ci0JCQkJZXhwZWN0X3p1X2VxKG5hbGxvY3goc2l6ZSwgZmxhZ3NfbmV4dCks Ci0JCQkJICAgIFRFU1RfTUFMTE9DX1NJWkUocCksCi0JCQkJICAgICJXcm9uZyByYWxsb2N4KCkg dXNhYmxlIHNpemUiKTsKLQkJCQlmcmVlKHApOwotCQkJfQotCQl9Ci0JfQotI3VuZGVmIExHX01B WAotI3VuZGVmIExHX01JTgotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2xnX2FsaWdu X2FuZF96ZXJvKSB7Ci0JLyoKLQkgKiBVc2Ugdm9sYXRpbGUgdG8gd29ya2Fyb3VuZCBidWZmZXIg b3ZlcmZsb3cgZmFsc2UgcG9zaXRpdmVzCi0JICogKC1EX0ZPUlRJRllfU09VUkNFPTMpLgotCSAq LwotCXZvaWQgKnZvbGF0aWxlIHAsICp2b2xhdGlsZSBxOwotCXVuc2lnbmVkIGxnX2FsaWduOwot CXNpemVfdCBzejsKLSNkZWZpbmUgTUFYX0xHX0FMSUdOIDI1Ci0jZGVmaW5lIE1BWF9WQUxJREFU RSAoWlUoMSkgPDwgMjIpCi0KLQlsZ19hbGlnbiA9IDA7Ci0JcCA9IG1hbGxvY3goMSwgTUFMTE9D WF9MR19BTElHTihsZ19hbGlnbil8TUFMTE9DWF9aRVJPKTsKLQlleHBlY3RfcHRyX25vdF9udWxs KHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBlcnJvciIpOwotCi0JZm9yIChsZ19hbGlnbisrOyBs Z19hbGlnbiA8PSBNQVhfTEdfQUxJR047IGxnX2FsaWduKyspIHsKLQkJcSA9IHJhbGxvY3gocCwg MSwgTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbil8TUFMTE9DWF9aRVJPKTsKLQkJZXhwZWN0X3B0 cl9ub3RfbnVsbChxLAotCQkgICAgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGVycm9yIGZvciBsZ19h bGlnbj0ldSIsIGxnX2FsaWduKTsKLQkJZXhwZWN0X3B0cl9udWxsKAotCQkgICAgKHZvaWQgKiko KHVpbnRwdHJfdClxICYgKChaVSgxKSA8PCBsZ19hbGlnbiktMSkpLAotCQkgICAgIiVwIGluYWRl cXVhdGVseSBhbGlnbmVkIGZvciBsZ19hbGlnbj0ldSIsIHEsIGxnX2FsaWduKTsKLQkJc3ogPSBz YWxsb2N4KHEsIDApOwotCQlpZiAoKHN6IDw8IDEpIDw9IE1BWF9WQUxJREFURSkgewotCQkJZXhw ZWN0X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocSwgMCwgMCwgc3opLAotCQkJICAgICJFeHBlY3RlZCB6 ZXJvZWQgbWVtb3J5Iik7Ci0JCX0gZWxzZSB7Ci0JCQlleHBlY3RfZmFsc2UodmFsaWRhdGVfZmls bChxLCAwLCAwLCBNQVhfVkFMSURBVEUpLAotCQkJICAgICJFeHBlY3RlZCB6ZXJvZWQgbWVtb3J5 Iik7Ci0JCQlleHBlY3RfZmFsc2UodmFsaWRhdGVfZmlsbCgKLQkJCSAgICAodm9pZCAqKSgodWlu dHB0cl90KXErc3otTUFYX1ZBTElEQVRFKSwKLQkJCSAgICAwLCAwLCBNQVhfVkFMSURBVEUpLCAi RXhwZWN0ZWQgemVyb2VkIG1lbW9yeSIpOwotCQl9Ci0JCXAgPSBxOwotCX0KLQlkYWxsb2N4KHAs IDApOwotI3VuZGVmIE1BWF9WQUxJREFURQotI3VuZGVmIE1BWF9MR19BTElHTgotfQotVEVTVF9F TkQKLQotLyoKLSAqIEdDQyAiLVdhbGxvYy1zaXplLWxhcmdlci10aGFuIiB3YXJuaW5nIGRldGVj dHMgd2hlbiBvbmUgb2YgdGhlIG1lbW9yeQotICogYWxsb2NhdGlvbiBmdW5jdGlvbnMgaXMgY2Fs bGVkIHdpdGggYSBzaXplIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHNpemUgdGhhdAotICogdGhl eSBzdXBwb3J0LiBIZXJlIHdlIHdhbnQgdG8gZXhwbGljaXRseSB0ZXN0IHRoYXQgdGhlIGFsbG9j YXRpb24gZnVuY3Rpb25zCi0gKiBkbyBpbmRlZWQgZmFpbCBwcm9wZXJseSB3aGVuIHRoaXMgaXMg dGhlIGNhc2UsIHdoaWNoIHRyaWdnZXJzIHRoZSB3YXJuaW5nLgotICogVGhlcmVmb3JlIHdlIGRp c2FibGUgdGhlIHdhcm5pbmcgZm9yIHRoZXNlIHRlc3RzLgotICovCi1KRU1BTExPQ19ESUFHTk9T VElDX1BVU0gKLUpFTUFMTE9DX0RJQUdOT1NUSUNfSUdOT1JFX0FMTE9DX1NJWkVfTEFSR0VSX1RI QU4KLQotVEVTVF9CRUdJTih0ZXN0X292ZXJmbG93KSB7Ci0Jc2l6ZV90IGxhcmdlbWF4OwotCXZv aWQgKnA7Ci0KLQlsYXJnZW1heCA9IGdldF9sYXJnZV9zaXplKGdldF9ubGFyZ2UoKS0xKTsKLQot CXAgPSBtYWxsb2N4KDEsIDApOwotCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQg bWFsbG9jeCgpIGZhaWx1cmUiKTsKLQotCWV4cGVjdF9wdHJfbnVsbChyYWxsb2N4KHAsIGxhcmdl bWF4KzEsIDApLAotCSAgICAiRXhwZWN0ZWQgT09NIGZvciByYWxsb2N4KHAsIHNpemU9JSN6eCwg MCkiLCBsYXJnZW1heCsxKTsKLQotCWV4cGVjdF9wdHJfbnVsbChyYWxsb2N4KHAsIFpVKFBUUkRJ RkZfTUFYKSsxLCAwKSwKLQkgICAgIkV4cGVjdGVkIE9PTSBmb3IgcmFsbG9jeChwLCBzaXplPSUj engsIDApIiwgWlUoUFRSRElGRl9NQVgpKzEpOwotCi0JZXhwZWN0X3B0cl9udWxsKHJhbGxvY3go cCwgU0laRV9UX01BWCwgMCksCi0JICAgICJFeHBlY3RlZCBPT00gZm9yIHJhbGxvY3gocCwgc2l6 ZT0lI3p4LCAwKSIsIFNJWkVfVF9NQVgpOwotCi0JZXhwZWN0X3B0cl9udWxsKHJhbGxvY3gocCwg MSwgTUFMTE9DWF9BTElHTihaVShQVFJESUZGX01BWCkrMSkpLAotCSAgICAiRXhwZWN0ZWQgT09N IGZvciByYWxsb2N4KHAsIHNpemU9MSwgTUFMTE9DWF9BTElHTiglI3p4KSkiLAotCSAgICBaVShQ VFJESUZGX01BWCkrMSk7Ci0KLQlkYWxsb2N4KHAsIDApOwotfQotVEVTVF9FTkQKLQotLyogUmUt ZW5hYmxlIHRoZSAiLVdhbGxvYy1zaXplLWxhcmdlci10aGFuPSIgd2FybmluZyAqLwotSkVNQUxM T0NfRElBR05PU1RJQ19QT1AKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkg ICAgdGVzdF9ncm93X2FuZF9zaHJpbmssCi0JICAgIHRlc3RfemVybywKLQkgICAgdGVzdF9hbGln biwKLQkgICAgdGVzdF9hbGlnbl9lbnVtLAotCSAgICB0ZXN0X2xnX2FsaWduX2FuZF96ZXJvLAot CSAgICB0ZXN0X292ZXJmbG93KTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3NkYWxsb2N4LmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3NkYWxsb2N4 LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMDE0NDguLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9z ZGFsbG9jeC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2luY2x1ZGUgInRlc3Qv amVtYWxsb2NfdGVzdC5oIgotCi0jZGVmaW5lIE1BWEFMSUdOICgoKHNpemVfdCkxKSA8PCAyMikK LSNkZWZpbmUgTklURVIgMwotCi1URVNUX0JFR0lOKHRlc3RfYmFzaWMpIHsKLQl2b2lkICpwdHIg PSBtYWxsb2N4KDY0LCAwKTsKLQlzZGFsbG9jeChwdHIsIDY0LCAwKTsKLX0KLVRFU1RfRU5ECi0K LVRFU1RfQkVHSU4odGVzdF9hbGlnbm1lbnRfYW5kX3NpemUpIHsKLQlzaXplX3QgbnN6LCBzeiwg YWxpZ25tZW50LCB0b3RhbDsKLQl1bnNpZ25lZCBpOwotCXZvaWQgKnBzW05JVEVSXTsKLQotCWZv ciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7Ci0JCXBzW2ldID0gTlVMTDsKLQl9Ci0KLQlmb3Ig KGFsaWdubWVudCA9IDg7Ci0JICAgIGFsaWdubWVudCA8PSBNQVhBTElHTjsKLQkgICAgYWxpZ25t ZW50IDw8PSAxKSB7Ci0JCXRvdGFsID0gMDsKLQkJZm9yIChzeiA9IDE7Ci0JCSAgICBzeiA8IDMg KiBhbGlnbm1lbnQgJiYgc3ogPCAoMVUgPDwgMzEpOwotCQkgICAgc3ogKz0gKGFsaWdubWVudCA+ PiAoTEdfU0laRU9GX1BUUi0xKSkgLSAxKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTklURVI7IGkr KykgewotCQkJCW5zeiA9IG5hbGxvY3goc3osIE1BTExPQ1hfQUxJR04oYWxpZ25tZW50KSB8Ci0J CQkJICAgIE1BTExPQ1hfWkVSTyk7Ci0JCQkJcHNbaV0gPSBtYWxsb2N4KHN6LCBNQUxMT0NYX0FM SUdOKGFsaWdubWVudCkgfAotCQkJCSAgICBNQUxMT0NYX1pFUk8pOwotCQkJCXRvdGFsICs9IG5z ejsKLQkJCQlpZiAodG90YWwgPj0gKE1BWEFMSUdOIDw8IDEpKSB7Ci0JCQkJCWJyZWFrOwotCQkJ CX0KLQkJCX0KLQkJCWZvciAoaSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7Ci0JCQkJaWYgKHBzW2ld ICE9IE5VTEwpIHsKLQkJCQkJc2RhbGxvY3gocHNbaV0sIHN6LAotCQkJCQkgICAgTUFMTE9DWF9B TElHTihhbGlnbm1lbnQpKTsKLQkJCQkJcHNbaV0gPSBOVUxMOwotCQkJCX0KLQkJCX0KLQkJfQot CX0KLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVl bnRyYW5jeSgKLQkgICAgdGVzdF9iYXNpYywKLQkgICAgdGVzdF9hbGlnbm1lbnRfYW5kX3NpemUp OwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvaW50ZWdyYXRpb24vc2xhYl9zaXplcy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbGFiX3NpemVzLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGY2YTY2ZjIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbGFiX3NpemVzLmMKKysr IC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0 LmgiCi0KLS8qIE5vdGUgdGhhdCB0aGlzIHRlc3QgcmVsaWVzIG9uIHRoZSB1bnVzdWFsIHNsYWIg c2l6ZXMgc2V0IGluIHNsYWJfc2l6ZXMuc2guICovCi0KLVRFU1RfQkVHSU4odGVzdF9zbGFiX3Np emVzKSB7Ci0JdW5zaWduZWQgbmJpbnM7Ci0Jc2l6ZV90IHBhZ2U7Ci0Jc2l6ZV90IHNpemVtaWJb NF07Ci0Jc2l6ZV90IHNsYWJtaWJbNF07Ci0Jc2l6ZV90IGxlbjsKLQotCWxlbiA9IHNpemVvZihu Ymlucyk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLm5iaW5zIiwgJm5iaW5zLCAmbGVu LCBOVUxMLCAwKSwgMCwKLQkgICAgIm5iaW5zIG1hbGxjdGwgZmFpbHVyZSIpOwotCi0JbGVuID0g c2l6ZW9mKHBhZ2UpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5wYWdlIiwgJnBhZ2Us ICZsZW4sIE5VTEwsIDApLCAwLAotCSAgICAicGFnZSBtYWxsY3RsIGZhaWx1cmUiKTsKLQotCWxl biA9IDQ7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmFzLmJpbi4wLnNpemUi LCBzaXplbWliLCAmbGVuKSwgMCwKLQkgICAgImJpbiBzaXplIG1hbGxjdGxuYW1ldG9taWIgZmFp bHVyZSIpOwotCi0JbGVuID0gNDsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVu YXMuYmluLjAuc2xhYl9zaXplIiwgc2xhYm1pYiwgJmxlbiksCi0JICAgIDAsICJzbGFiIHNpemUg bWFsbGN0bG5hbWV0b21pYiBmYWlsdXJlIik7Ci0KLQlzaXplX3QgYmlnZ2VzdF9zbGFiX3NlZW4g PSAwOwotCi0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5iaW5zOyBpKyspIHsKLQkJc2l6ZV90 IGJpbl9zaXplOwotCQlzaXplX3Qgc2xhYl9zaXplOwotCQlsZW4gPSBzaXplb2Yoc2l6ZV90KTsK LQkJc2l6ZW1pYlsyXSA9IGk7Ci0JCXNsYWJtaWJbMl0gPSBpOwotCQlleHBlY3RfZF9lcShtYWxs Y3RsYnltaWIoc2l6ZW1pYiwgNCwgKHZvaWQgKikmYmluX3NpemUsICZsZW4sCi0JCSAgICBOVUxM LCAwKSwgMCwgImJpbiBzaXplIG1hbGxjdGxieW1pYiBmYWlsdXJlIik7Ci0KLQkJbGVuID0gc2l6 ZW9mKHNpemVfdCk7Ci0JCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihzbGFibWliLCA0LCAodm9p ZCAqKSZzbGFiX3NpemUsICZsZW4sCi0JCSAgICBOVUxMLCAwKSwgMCwgInNsYWIgc2l6ZSBtYWxs Y3RsYnltaWIgZmFpbHVyZSIpOwotCi0JCWlmIChiaW5fc2l6ZSA8IDEwMCkgewotCQkJLyoKLQkJ CSAqIFRoZW4gd2Ugc2hvdWxkIGJlIGFzIGNsb3NlIHRvIDE3IGFzIHBvc3NpYmxlLiAgU2luY2UK LQkJCSAqIG5vdCBhbGwgcGFnZSBzaXplcyBhcmUgdmFsaWQgKGJlY2F1c2Ugb2YgYml0bWFwCi0J CQkgKiBsaW1pdGF0aW9ucyBvbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2xhYiksIHdlCi0J CQkgKiBzaG91bGQgYXQgbGVhc3QgbWFrZSBzdXJlIHRoYXQgdGhlIG51bWJlciBvZiBwYWdlcwot CQkJICogZ29lcyB1cC4KLQkJCSAqLwotCQkJZXhwZWN0X3p1X2dlKHNsYWJfc2l6ZSwgYmlnZ2Vz dF9zbGFiX3NlZW4sCi0JCQkgICAgIlNsYWIgc2l6ZXMgc2hvdWxkIGdvIHVwIik7Ci0JCQliaWdn ZXN0X3NsYWJfc2VlbiA9IHNsYWJfc2l6ZTsKLQkJfSBlbHNlIGlmICgKLQkJICAgICgxMDAgPD0g YmluX3NpemUgJiYgYmluX3NpemUgPCAxMjgpCi0JCSAgICB8fCAoMTI4IDwgYmluX3NpemUgJiYg YmluX3NpemUgPD0gMjAwKSkgewotCQkJZXhwZWN0X3p1X2VxKHNsYWJfc2l6ZSwgcGFnZSwKLQkJ CSAgICAiRm9yY2VkLXNtYWxsIHNsYWJzIHNob3VsZCBiZSBzbWFsbCIpOwotCQl9IGVsc2UgaWYg KGJpbl9zaXplID09IDEyOCkgewotCQkJZXhwZWN0X3p1X2VxKHNsYWJfc2l6ZSwgMiAqIHBhZ2Us Ci0JCQkgICAgIkZvcmNlZC0yLXBhZ2Ugc2xhYiBzaG91bGQgYmUgMiBwYWdlcyIpOwotCQl9IGVs c2UgaWYgKDIwMCA8IGJpbl9zaXplICYmIGJpbl9zaXplIDw9IDQwOTYpIHsKLQkJCWV4cGVjdF96 dV9nZShzbGFiX3NpemUsIGJpZ2dlc3Rfc2xhYl9zZWVuLAotCQkJICAgICJTbGFiIHNpemVzIHNo b3VsZCBnbyB1cCIpOwotCQkJYmlnZ2VzdF9zbGFiX3NlZW4gPSBzbGFiX3NpemU7Ci0JCX0KLQl9 Ci0JLyoKLQkgKiBGb3IgYW55IHJlYXNvbmFibGUgY29uZmlndXJhdGlvbiwgMTcgcGFnZXMgc2hv dWxkIGJlIGEgdmFsaWQgc2xhYgotCSAqIHNpemUgZm9yIDQwOTYtYnl0ZSBpdGVtcy4KLQkgKi8K LQlleHBlY3RfenVfZXEoYmlnZ2VzdF9zbGFiX3NlZW4sIDE3ICogcGFnZSwgIkRpZG4ndCBoaXQg cGFnZSB0YXJnZXQiKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJu IHRlc3QoCi0JICAgIHRlc3Rfc2xhYl9zaXplcyk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbGFiX3NpemVz LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3Jh dGlvbi9zbGFiX3NpemVzLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2UzZGI4 Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW50ZWdyYXRpb24vc2xhYl9zaXplcy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBA QAotIyEvYmluL3NoCi0KLSMgU29tZSBzY3Jld3ktbG9va2luZyBzbGFiIHNpemVzLgotZXhwb3J0 IE1BTExPQ19DT05GPSJzbGFiX3NpemVzOjEtNDA5NjoxN3wxMDAtMjAwOjF8MTI4LTEyODoyIgoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv aW50ZWdyYXRpb24vc21hbGxvY3guYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vc21hbGxvY3guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMzg5MzE5Yi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3NtYWxsb2N4LmMKKysrIC9kZXYvbnVsbApA QCAtMSwzMTIgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2plbWFsbG9jX21hY3Jvcy5oIgotCi0jZGVmaW5lIFNUUl9IRUxQRVIoeCkg I3gKLSNkZWZpbmUgU1RSKHgpIFNUUl9IRUxQRVIoeCkKLQotI2lmbmRlZiBKRU1BTExPQ19WRVJT SU9OX0dJRF9JREVOVAotICAjZXJyb3IgIkpFTUFMTE9DX1ZFUlNJT05fR0lEX0lERU5UIG5vdCBk ZWZpbmVkIgotI2VuZGlmCi0KLSNkZWZpbmUgSk9JTih4LCB5KSB4ICMjIHkKLSNkZWZpbmUgSk9J TjIoeCwgeSkgSk9JTih4LCB5KQotI2RlZmluZSBzbWFsbG9jeCBKT0lOMihzbWFsbG9jeF8sIEpF TUFMTE9DX1ZFUlNJT05fR0lEX0lERU5UKQotCi10eXBlZGVmIHN0cnVjdCB7Ci0Jdm9pZCAqcHRy OwotCXNpemVfdCBzaXplOwotfSBzbWFsbG9jeF9yZXR1cm5fdDsKLQotZXh0ZXJuIHNtYWxsb2N4 X3JldHVybl90Ci1zbWFsbG9jeChzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLQotc3RhdGljIHVu c2lnbmVkCi1nZXRfbnNpemVzX2ltcGwoY29uc3QgY2hhciAqY21kKSB7Ci0JdW5zaWduZWQgcmV0 OwotCXNpemVfdCB6OwotCi0JeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFs bGN0bChjbWQsICh2b2lkICopJnJldCwgJnosIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsKFwiJXNcIiwgLi4uKSBmYWlsdXJlIiwgY21kKTsKLQotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyB1bnNpZ25lZAotZ2V0X25sYXJnZSh2b2lkKSB7Ci0JcmV0dXJuIGdldF9uc2l6 ZXNfaW1wbCgiYXJlbmFzLm5sZXh0ZW50cyIpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1nZXRfc2l6 ZV9pbXBsKGNvbnN0IGNoYXIgKmNtZCwgc2l6ZV90IGluZCkgewotCXNpemVfdCByZXQ7Ci0Jc2l6 ZV90IHo7Ci0Jc2l6ZV90IG1pYls0XTsKLQlzaXplX3QgbWlibGVuID0gNDsKLQotCXogPSBzaXpl b2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKGNtZCwgbWliLCAmbWli bGVuKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYihcIiVzXCIsIC4uLikg ZmFpbHVyZSIsIGNtZCk7Ci0JbWliWzJdID0gaW5kOwotCXogPSBzaXplb2Yoc2l6ZV90KTsKLQll eHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJnJldCwgJnosIE5V TEwsIDApLAotCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoW1wiJXNcIiwgJXp1XSwg Li4uKSBmYWlsdXJlIiwgY21kLCBpbmQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNp emVfdAotZ2V0X2xhcmdlX3NpemUoc2l6ZV90IGluZCkgewotCXJldHVybiBnZXRfc2l6ZV9pbXBs KCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCBpbmQpOwotfQotCi0vKgotICogT24gc3lzdGVtcyB3 aGljaCBjYW4ndCBtZXJnZSBleHRlbnRzLCB0ZXN0cyB0aGF0IGNhbGwgdGhpcyBmdW5jdGlvbiBn ZW5lcmF0ZQotICogYSBsb3Qgb2YgZGlydHkgbWVtb3J5IHZlcnkgcXVpY2tseS4gIFB1cmdpbmcg YmV0d2VlbiBjeWNsZXMgbWl0aWdhdGVzCi0gKiBwb3RlbnRpYWwgT09NIG9uIGUuZy4gMzItYml0 IFdpbmRvd3MuCi0gKi8KLXN0YXRpYyB2b2lkCi1wdXJnZSh2b2lkKSB7Ci0JZXhwZWN0X2RfZXEo bWFsbGN0bCgiYXJlbmEuMC5wdXJnZSIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAotCSAgICAi VW5leHBlY3RlZCBtYWxsY3RsIGVycm9yIik7Ci19Ci0KLS8qCi0gKiBHQ0MgIi1XYWxsb2Mtc2l6 ZS1sYXJnZXItdGhhbiIgd2FybmluZyBkZXRlY3RzIHdoZW4gb25lIG9mIHRoZSBtZW1vcnkKLSAq IGFsbG9jYXRpb24gZnVuY3Rpb25zIGlzIGNhbGxlZCB3aXRoIGEgc2l6ZSBsYXJnZXIgdGhhbiB0 aGUgbWF4aW11bSBzaXplIHRoYXQKLSAqIHRoZXkgc3VwcG9ydC4gSGVyZSB3ZSB3YW50IHRvIGV4 cGxpY2l0bHkgdGVzdCB0aGF0IHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICogZG8gaW5kZWVk IGZhaWwgcHJvcGVybHkgd2hlbiB0aGlzIGlzIHRoZSBjYXNlLCB3aGljaCB0cmlnZ2VycyB0aGUg d2FybmluZy4KLSAqIFRoZXJlZm9yZSB3ZSBkaXNhYmxlIHRoZSB3YXJuaW5nIGZvciB0aGVzZSB0 ZXN0cy4KLSAqLwotSkVNQUxMT0NfRElBR05PU1RJQ19QVVNICi1KRU1BTExPQ19ESUFHTk9TVElD X0lHTk9SRV9BTExPQ19TSVpFX0xBUkdFUl9USEFOCi0KLVRFU1RfQkVHSU4odGVzdF9vdmVyZmxv dykgewotCXNpemVfdCBsYXJnZW1heDsKLQotCWxhcmdlbWF4ID0gZ2V0X2xhcmdlX3NpemUoZ2V0 X25sYXJnZSgpLTEpOwotCi0JZXhwZWN0X3B0cl9udWxsKHNtYWxsb2N4KGxhcmdlbWF4KzEsIDAp LnB0ciwKLQkgICAgIkV4cGVjdGVkIE9PTSBmb3Igc21hbGxvY3goc2l6ZT0lI3p4LCAwKSIsIGxh cmdlbWF4KzEpOwotCi0JZXhwZWN0X3B0cl9udWxsKHNtYWxsb2N4KFpVKFBUUkRJRkZfTUFYKSsx LCAwKS5wdHIsCi0JICAgICJFeHBlY3RlZCBPT00gZm9yIHNtYWxsb2N4KHNpemU9JSN6eCwgMCki LCBaVShQVFJESUZGX01BWCkrMSk7Ci0KLQlleHBlY3RfcHRyX251bGwoc21hbGxvY3goU0laRV9U X01BWCwgMCkucHRyLAotCSAgICAiRXhwZWN0ZWQgT09NIGZvciBzbWFsbG9jeChzaXplPSUjengs IDApIiwgU0laRV9UX01BWCk7Ci0KLQlleHBlY3RfcHRyX251bGwoc21hbGxvY3goMSwgTUFMTE9D WF9BTElHTihaVShQVFJESUZGX01BWCkrMSkpLnB0ciwKLQkgICAgIkV4cGVjdGVkIE9PTSBmb3Ig c21hbGxvY3goc2l6ZT0xLCBNQUxMT0NYX0FMSUdOKCUjengpKSIsCi0JICAgIFpVKFBUUkRJRkZf TUFYKSsxKTsKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkICoKLXJlbW90ZV9hbGxvYyh2b2lk ICphcmcpIHsKLQl1bnNpZ25lZCBhcmVuYTsKLQlzaXplX3Qgc3ogPSBzaXplb2YodW5zaWduZWQp OwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAodm9pZCAqKSZhcmVuYSwg JnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsK LQlzaXplX3QgbGFyZ2Vfc3o7Ci0Jc3ogPSBzaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcSht YWxsY3RsKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCAodm9pZCAqKSZsYXJnZV9zeiwgJnN6LAot CSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci0KLQlzbWFs bG9jeF9yZXR1cm5fdCByCi0JICAgID0gc21hbGxvY3gobGFyZ2Vfc3osIE1BTExPQ1hfQVJFTkEo YXJlbmEpIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0Jdm9pZCAqcHRyID0gci5wdHI7Ci0JZXhw ZWN0X3p1X2VxKHIuc2l6ZSwKLQkgICAgbmFsbG9jeChsYXJnZV9zeiwgTUFMTE9DWF9BUkVOQShh cmVuYSkgfCBNQUxMT0NYX1RDQUNIRV9OT05FKSwKLQkgICAgIkV4cGVjdGVkIHNtYWxsb2Moc2l6 ZSxmbGFncykuc2l6ZSA9PSBuYWxsb2N4KHNpemUsZmxhZ3MpIik7Ci0Jdm9pZCAqKnJldCA9ICh2 b2lkICoqKWFyZzsKLQkqcmV0ID0gcHRyOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLVRFU1RfQkVH SU4odGVzdF9yZW1vdGVfZnJlZSkgewotCXRoZF90IHRoZDsKLQl2b2lkICpyZXQ7Ci0JdGhkX2Ny ZWF0ZSgmdGhkLCByZW1vdGVfYWxsb2MsICh2b2lkICopJnJldCk7Ci0JdGhkX2pvaW4odGhkLCBO VUxMKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHJldCwgIlVuZXhwZWN0ZWQgc21hbGxvY3ggZmFp bHVyZSIpOwotCi0JLyogQXZvaWQgVENBQ0hFX05PTkUgdG8gZXhwbGljaXRseSB0ZXN0IHRjYWNo ZV9mbHVzaCgpLiAqLwotCWRhbGxvY3gocmV0LCAwKTsKLQltYWxsY3RsKCJ0aHJlYWQudGNhY2hl LmZsdXNoIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lO KHRlc3Rfb29tKSB7Ci0Jc2l6ZV90IGxhcmdlbWF4OwotCWJvb2wgb29tOwotCXZvaWQgKnB0cnNb M107Ci0JdW5zaWduZWQgaTsKLQotCS8qCi0JICogSXQgc2hvdWxkIGJlIGltcG9zc2libGUgdG8g YWxsb2NhdGUgdGhyZWUgb2JqZWN0cyB0aGF0IGVhY2ggY29uc3VtZQotCSAqIG5lYXJseSBoYWxm IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuCi0JICovCi0JbGFyZ2VtYXggPSBnZXRfbGFyZ2Vf c2l6ZShnZXRfbmxhcmdlKCktMSk7Ci0Jb29tID0gZmFsc2U7Ci0JZm9yIChpID0gMDsgaSA8IHNp emVvZihwdHJzKSAvIHNpemVvZih2b2lkICopOyBpKyspIHsKLQkJcHRyc1tpXSA9IHNtYWxsb2N4 KGxhcmdlbWF4LCAwKS5wdHI7Ci0JCWlmIChwdHJzW2ldID09IE5VTEwpIHsKLQkJCW9vbSA9IHRy dWU7Ci0JCX0KLQl9Ci0JZXhwZWN0X3RydWUob29tLAotCSAgICAiRXhwZWN0ZWQgT09NIGR1cmlu ZyBzZXJpZXMgb2YgY2FsbHMgdG8gc21hbGxvY3goc2l6ZT0lenUsIDApIiwKLQkgICAgbGFyZ2Vt YXgpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHRycykgLyBzaXplb2Yodm9pZCAqKTsgaSsr KSB7Ci0JCWlmIChwdHJzW2ldICE9IE5VTEwpIHsKLQkJCWRhbGxvY3gocHRyc1tpXSwgMCk7Ci0J CX0KLQl9Ci0JcHVyZ2UoKTsKLQotI2lmIExHX1NJWkVPRl9QVFIgPT0gMwotCWV4cGVjdF9wdHJf bnVsbChzbWFsbG9jeCgweDgwMDAwMDAwMDAwMDAwMDBVTEwsCi0JICAgIE1BTExPQ1hfQUxJR04o MHg4MDAwMDAwMDAwMDAwMDAwVUxMKSkucHRyLAotCSAgICAiRXhwZWN0ZWQgT09NIGZvciBzbWFs bG9jeCgpIik7Ci0JZXhwZWN0X3B0cl9udWxsKHNtYWxsb2N4KDB4ODAwMDAwMDAwMDAwMDAwMFVM TCwKLQkgICAgTUFMTE9DWF9BTElHTigweDgwMDAwMDAwKSkucHRyLAotCSAgICAiRXhwZWN0ZWQg T09NIGZvciBzbWFsbG9jeCgpIik7Ci0jZWxzZQotCWV4cGVjdF9wdHJfbnVsbChzbWFsbG9jeCgw eDgwMDAwMDAwVUwsIE1BTExPQ1hfQUxJR04oMHg4MDAwMDAwMFVMKSkucHRyLAotCSAgICAiRXhw ZWN0ZWQgT09NIGZvciBzbWFsbG9jeCgpIik7Ci0jZW5kaWYKLX0KLVRFU1RfRU5ECi0KLS8qIFJl LWVuYWJsZSB0aGUgIi1XYWxsb2Mtc2l6ZS1sYXJnZXItdGhhbj0iIHdhcm5pbmcgKi8KLUpFTUFM TE9DX0RJQUdOT1NUSUNfUE9QCi0KLVRFU1RfQkVHSU4odGVzdF9iYXNpYykgewotI2RlZmluZSBN QVhTWiAoKChzaXplX3QpMSkgPDwgMjMpCi0Jc2l6ZV90IHN6OwotCi0JZm9yIChzeiA9IDE7IHN6 IDwgTUFYU1o7IHN6ID0gbmFsbG9jeChzeiwgMCkgKyAxKSB7Ci0JCXNtYWxsb2N4X3JldHVybl90 IHJldDsKLQkJc2l6ZV90IG5zeiwgcnN6LCBzbXo7Ci0JCXZvaWQgKnA7Ci0JCW5zeiA9IG5hbGxv Y3goc3osIDApOwotCQlleHBlY3RfenVfbmUobnN6LCAwLCAiVW5leHBlY3RlZCBuYWxsb2N4KCkg ZXJyb3IiKTsKLQkJcmV0ID0gc21hbGxvY3goc3osIDApOwotCQlwID0gcmV0LnB0cjsKLQkJc216 ID0gcmV0LnNpemU7Ci0JCWV4cGVjdF9wdHJfbm90X251bGwocCwKLQkJICAgICJVbmV4cGVjdGVk IHNtYWxsb2N4KHNpemU9JXp4LCBmbGFncz0wKSBlcnJvciIsIHN6KTsKLQkJcnN6ID0gc2FsbG9j eChwLCAwKTsKLQkJZXhwZWN0X3p1X2dlKHJzeiwgc3osICJSZWFsIHNpemUgc21hbGxlciB0aGFu IGV4cGVjdGVkIik7Ci0JCWV4cGVjdF96dV9lcShuc3osIHJzeiwgIm5hbGxvY3goKS9zYWxsb2N4 KCkgc2l6ZSBtaXNtYXRjaCIpOwotCQlleHBlY3RfenVfZXEobnN6LCBzbXosICJuYWxsb2N4KCkv c21hbGxvY3goKSBzaXplIG1pc21hdGNoIik7Ci0JCWRhbGxvY3gocCwgMCk7Ci0KLQkJcmV0ID0g c21hbGxvY3goc3osIDApOwotCQlwID0gcmV0LnB0cjsKLQkJc216ID0gcmV0LnNpemU7Ci0JCWV4 cGVjdF9wdHJfbm90X251bGwocCwKLQkJICAgICJVbmV4cGVjdGVkIHNtYWxsb2N4KHNpemU9JXp4 LCBmbGFncz0wKSBlcnJvciIsIHN6KTsKLQkJZGFsbG9jeChwLCAwKTsKLQotCQluc3ogPSBuYWxs b2N4KHN6LCBNQUxMT0NYX1pFUk8pOwotCQlleHBlY3RfenVfbmUobnN6LCAwLCAiVW5leHBlY3Rl ZCBuYWxsb2N4KCkgZXJyb3IiKTsKLQkJZXhwZWN0X3p1X25lKHNteiwgMCwgIlVuZXhwZWN0ZWQg c21hbGxvY3goKSBlcnJvciIpOwotCQlyZXQgPSBzbWFsbG9jeChzeiwgTUFMTE9DWF9aRVJPKTsK LQkJcCA9IHJldC5wdHI7Ci0JCWV4cGVjdF9wdHJfbm90X251bGwocCwKLQkJICAgICJVbmV4cGVj dGVkIHNtYWxsb2N4KHNpemU9JXp4LCBmbGFncz1NQUxMT0NYX1pFUk8pIGVycm9yIiwKLQkJICAg IG5zeik7Ci0JCXJzeiA9IHNhbGxvY3gocCwgMCk7Ci0JCWV4cGVjdF96dV9lcShuc3osIHJzeiwg Im5hbGxvY3goKS9zYWxsb2N4KCkgcnNpemUgbWlzbWF0Y2giKTsKLQkJZXhwZWN0X3p1X2VxKG5z eiwgc216LCAibmFsbG9jeCgpL3NtYWxsb2N4KCkgc2l6ZSBtaXNtYXRjaCIpOwotCQlkYWxsb2N4 KHAsIDApOwotCQlwdXJnZSgpOwotCX0KLSN1bmRlZiBNQVhTWgotfQotVEVTVF9FTkQKLQotVEVT VF9CRUdJTih0ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSkgewotCWNvbnN0IGNoYXIgKnBlcmNwdV9h cmVuYTsKLQlzaXplX3Qgc3ogPSBzaXplb2YocGVyY3B1X2FyZW5hKTsKLQotCWlmKG1hbGxjdGwo Im9wdC5wZXJjcHVfYXJlbmEiLCAodm9pZCAqKSZwZXJjcHVfYXJlbmEsICZzeiwgTlVMTCwgMCkg fHwKLQkgICAgc3RyY21wKHBlcmNwdV9hcmVuYSwgImRpc2FibGVkIikgIT0gMCkgewotCQl0ZXN0 X3NraXAoInRlc3RfYWxpZ25tZW50X2FuZF9zaXplIHNraXBwZWQ6ICIKLQkJICAgICJub3Qgd29y a2luZyB3aXRoIHBlcmNwdSBhcmVuYS4iKTsKLQl9OwotI2RlZmluZSBNQVhBTElHTiAoKChzaXpl X3QpMSkgPDwgMjMpCi0jZGVmaW5lIE5JVEVSIDQKLQlzaXplX3QgbnN6LCByc3osIHNteiwgYWxp Z25tZW50LCB0b3RhbDsKLQl1bnNpZ25lZCBpOwotCXZvaWQgKnBzW05JVEVSXTsKLQotCWZvciAo aSA9IDA7IGkgPCBOSVRFUjsgaSsrKSB7Ci0JCXBzW2ldID0gTlVMTDsKLQl9Ci0KLQlmb3IgKGFs aWdubWVudCA9IDg7Ci0JICAgIGFsaWdubWVudCA8PSBNQVhBTElHTjsKLQkgICAgYWxpZ25tZW50 IDw8PSAxKSB7Ci0JCXRvdGFsID0gMDsKLQkJZm9yIChzeiA9IDE7Ci0JCSAgICBzeiA8IDMgKiBh bGlnbm1lbnQgJiYgc3ogPCAoMVUgPDwgMzEpOwotCQkgICAgc3ogKz0gKGFsaWdubWVudCA+PiAo TEdfU0laRU9GX1BUUi0xKSkgLSAxKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTklURVI7IGkrKykg ewotCQkJCW5zeiA9IG5hbGxvY3goc3osIE1BTExPQ1hfQUxJR04oYWxpZ25tZW50KSB8Ci0JCQkJ ICAgIE1BTExPQ1hfWkVSTyk7Ci0JCQkJZXhwZWN0X3p1X25lKG5zeiwgMCwKLQkJCQkgICAgIm5h bGxvY3goKSBlcnJvciBmb3IgYWxpZ25tZW50PSV6dSwgIgotCQkJCSAgICAic2l6ZT0lenUgKCUj engpIiwgYWxpZ25tZW50LCBzeiwgc3opOwotCQkJCXNtYWxsb2N4X3JldHVybl90IHJldAotCQkJ CSAgICA9IHNtYWxsb2N4KHN6LCBNQUxMT0NYX0FMSUdOKGFsaWdubWVudCkgfCBNQUxMT0NYX1pF Uk8pOwotCQkJCXBzW2ldID0gcmV0LnB0cjsKLQkJCQlleHBlY3RfcHRyX25vdF9udWxsKHBzW2ld LAotCQkJCSAgICAic21hbGxvY3goKSBlcnJvciBmb3IgYWxpZ25tZW50PSV6dSwgIgotCQkJCSAg ICAic2l6ZT0lenUgKCUjengpIiwgYWxpZ25tZW50LCBzeiwgc3opOwotCQkJCXJzeiA9IHNhbGxv Y3gocHNbaV0sIDApOwotCQkJCXNteiA9IHJldC5zaXplOwotCQkJCWV4cGVjdF96dV9nZShyc3os IHN6LAotCQkJCSAgICAiUmVhbCBzaXplIHNtYWxsZXIgdGhhbiBleHBlY3RlZCBmb3IgIgotCQkJ CSAgICAiYWxpZ25tZW50PSV6dSwgc2l6ZT0lenUiLCBhbGlnbm1lbnQsIHN6KTsKLQkJCQlleHBl Y3RfenVfZXEobnN6LCByc3osCi0JCQkJICAgICJuYWxsb2N4KCkvc2FsbG9jeCgpIHNpemUgbWlz bWF0Y2ggZm9yICIKLQkJCQkgICAgImFsaWdubWVudD0lenUsIHNpemU9JXp1IiwgYWxpZ25tZW50 LCBzeik7Ci0JCQkJZXhwZWN0X3p1X2VxKG5zeiwgc216LAotCQkJCSAgICAibmFsbG9jeCgpL3Nt YWxsb2N4KCkgc2l6ZSBtaXNtYXRjaCBmb3IgIgotCQkJCSAgICAiYWxpZ25tZW50PSV6dSwgc2l6 ZT0lenUiLCBhbGlnbm1lbnQsIHN6KTsKLQkJCQlleHBlY3RfcHRyX251bGwoCi0JCQkJICAgICh2 b2lkICopKCh1aW50cHRyX3QpcHNbaV0gJiAoYWxpZ25tZW50LTEpKSwKLQkJCQkgICAgIiVwIGlu YWRlcXVhdGVseSBhbGlnbmVkIGZvciIKLQkJCQkgICAgIiBhbGlnbm1lbnQ9JXp1LCBzaXplPSV6 dSIsIHBzW2ldLAotCQkJCSAgICBhbGlnbm1lbnQsIHN6KTsKLQkJCQl0b3RhbCArPSByc3o7Ci0J CQkJaWYgKHRvdGFsID49IChNQVhBTElHTiA8PCAxKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0J CQl9Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTklURVI7IGkrKykgewotCQkJCWlmIChwc1tpXSAhPSBO VUxMKSB7Ci0JCQkJCWRhbGxvY3gocHNbaV0sIDApOwotCQkJCQlwc1tpXSA9IE5VTEw7Ci0JCQkJ fQotCQkJfQotCQl9Ci0JCXB1cmdlKCk7Ci0JfQotI3VuZGVmIE1BWEFMSUdOCi0jdW5kZWYgTklU RVIKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAg IHRlc3Rfb3ZlcmZsb3csCi0JICAgIHRlc3Rfb29tLAotCSAgICB0ZXN0X3JlbW90ZV9mcmVlLAot CSAgICB0ZXN0X2Jhc2ljLAotCSAgICB0ZXN0X2FsaWdubWVudF9hbmRfc2l6ZSk7Ci19CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRl Z3JhdGlvbi9zbWFsbG9jeC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvaW50ZWdyYXRpb24vc21hbGxvY3guc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGQwN2YxMGYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi9zbWFsbG9jeC5zaAorKysgL2Rldi9udWxsCkBA IC0xLDUgKzAsMCBAQAotIyEvYmluL3NoCi0KLWlmIFsgIngke2VuYWJsZV9maWxsfSIgPSAieDEi IF0gOyB0aGVuCi0gICAgZXhwb3J0IE1BTExPQ19DT05GPSJqdW5rOmZhbHNlIgotZmkKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVn cmF0aW9uL3RocmVhZF9hcmVuYS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi90aHJlYWRfYXJlbmEuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNGE2YWJmNi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L2ludGVncmF0aW9uL3RocmVhZF9hcmVuYS5jCisrKyAvZGV2 L251bGwKQEAgLTEsODYgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgot Ci0jZGVmaW5lIE5USFJFQURTIDEwCi0KLXZvaWQgKgotdGhkX3N0YXJ0KHZvaWQgKmFyZykgewot CXVuc2lnbmVkIG1haW5fYXJlbmFfaW5kID0gKih1bnNpZ25lZCAqKWFyZzsKLQl2b2lkICpwOwot CXVuc2lnbmVkIGFyZW5hX2luZDsKLQlzaXplX3Qgc2l6ZTsKLQlpbnQgZXJyOwotCi0JcCA9IG1h bGxvYygxKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJFcnJvciBpbiBtYWxsb2MoKSIpOwot CWZyZWUocCk7Ci0KLQlzaXplID0gc2l6ZW9mKGFyZW5hX2luZCk7Ci0JaWYgKChlcnIgPSBtYWxs Y3RsKCJ0aHJlYWQuYXJlbmEiLCAodm9pZCAqKSZhcmVuYV9pbmQsICZzaXplLAotCSAgICAodm9p ZCAqKSZtYWluX2FyZW5hX2luZCwgc2l6ZW9mKG1haW5fYXJlbmFfaW5kKSkpKSB7Ci0JCWNoYXIg YnVmW0JVRkVSUk9SX0JVRl07Ci0KLQkJYnVmZXJyb3IoZXJyLCBidWYsIHNpemVvZihidWYpKTsK LQkJdGVzdF9mYWlsKCJFcnJvciBpbiBtYWxsY3RsKCk6ICVzIiwgYnVmKTsKLQl9Ci0KLQlzaXpl ID0gc2l6ZW9mKGFyZW5hX2luZCk7Ci0JaWYgKChlcnIgPSBtYWxsY3RsKCJ0aHJlYWQuYXJlbmEi LCAodm9pZCAqKSZhcmVuYV9pbmQsICZzaXplLCBOVUxMLAotCSAgICAwKSkpIHsKLQkJY2hhciBi dWZbQlVGRVJST1JfQlVGXTsKLQotCQlidWZlcnJvcihlcnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwot CQl0ZXN0X2ZhaWwoIkVycm9yIGluIG1hbGxjdGwoKTogJXMiLCBidWYpOwotCX0KLQlleHBlY3Rf dV9lcShhcmVuYV9pbmQsIG1haW5fYXJlbmFfaW5kLAotCSAgICAiQXJlbmEgaW5kZXggc2hvdWxk IGJlIHNhbWUgYXMgZm9yIG1haW4gdGhyZWFkIik7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3Rh dGljIHZvaWQKLW1hbGxjdGxfZmFpbHVyZShpbnQgZXJyKSB7Ci0JY2hhciBidWZbQlVGRVJST1Jf QlVGXTsKLQotCWJ1ZmVycm9yKGVyciwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JdGVzdF9mYWlsKCJF cnJvciBpbiBtYWxsY3RsKCk6ICVzIiwgYnVmKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3RocmVh ZF9hcmVuYSkgewotCXZvaWQgKnA7Ci0JaW50IGVycjsKLQl0aGRfdCB0aGRzW05USFJFQURTXTsK LQl1bnNpZ25lZCBpOwotCi0JcCA9IG1hbGxvYygxKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAs ICJFcnJvciBpbiBtYWxsb2MoKSIpOwotCi0JdW5zaWduZWQgYXJlbmFfaW5kLCBvbGRfYXJlbmFf aW5kOwotCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0 bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAwKSwKLQkg ICAgMCwgIkFyZW5hIGNyZWF0aW9uIGZhaWx1cmUiKTsKLQotCXNpemVfdCBzaXplID0gc2l6ZW9m KGFyZW5hX2luZCk7Ci0JaWYgKChlcnIgPSBtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAodm9pZCAq KSZvbGRfYXJlbmFfaW5kLCAmc2l6ZSwKLQkgICAgKHZvaWQgKikmYXJlbmFfaW5kLCBzaXplb2Yo YXJlbmFfaW5kKSkpICE9IDApIHsKLQkJbWFsbGN0bF9mYWlsdXJlKGVycik7Ci0JfQotCi0JZm9y IChpID0gMDsgaSA8IE5USFJFQURTOyBpKyspIHsKLQkJdGhkX2NyZWF0ZSgmdGhkc1tpXSwgdGhk X3N0YXJ0LAotCQkgICAgKHZvaWQgKikmYXJlbmFfaW5kKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBp IDwgTlRIUkVBRFM7IGkrKykgewotCQlpbnRwdHJfdCBqb2luX3JldDsKLQkJdGhkX2pvaW4odGhk c1tpXSwgKHZvaWQgKikmam9pbl9yZXQpOwotCQlleHBlY3RfemRfZXEoam9pbl9yZXQsIDAsICJV bmV4cGVjdGVkIHRocmVhZCBqb2luIGVycm9yIik7Ci0JfQotCWZyZWUocCk7Ci19Ci1URVNUX0VO RAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X3RocmVhZF9h cmVuYSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi90aHJlYWRfdGNhY2hlX2VuYWJsZWQuYyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdyYXRpb24vdGhyZWFkX3Rj YWNoZV9lbmFibGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0NGRiZTkuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9p bnRlZ3JhdGlvbi90aHJlYWRfdGNhY2hlX2VuYWJsZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDg3 ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotdm9pZCAqCi10aGRf c3RhcnQodm9pZCAqYXJnKSB7Ci0JYm9vbCBlMCwgZTE7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKGJv b2wpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZW5hYmxlZCIsICh2b2lk ICopJmUwLCAmc3osIE5VTEwsCi0JICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1 cmUiKTsKLQotCWlmIChlMCkgewotCQllMSA9IGZhbHNlOwotCQlleHBlY3RfZF9lcShtYWxsY3Rs KCJ0aHJlYWQudGNhY2hlLmVuYWJsZWQiLCAodm9pZCAqKSZlMCwgJnN6LAotCQkgICAgKHZvaWQg KikmZTEsIHN6KSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGVycm9yIik7Ci0JCWV4cGVjdF90 cnVlKGUwLCAidGNhY2hlIHNob3VsZCBiZSBlbmFibGVkIik7Ci0JfQotCi0JZTEgPSB0cnVlOwot CWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZW5hYmxlZCIsICh2b2lkICopJmUw LCAmc3osCi0JICAgICh2b2lkICopJmUxLCBzeiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBl cnJvciIpOwotCWV4cGVjdF9mYWxzZShlMCwgInRjYWNoZSBzaG91bGQgYmUgZGlzYWJsZWQiKTsK LQotCWUxID0gdHJ1ZTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmVuYWJs ZWQiLCAodm9pZCAqKSZlMCwgJnN6LAotCSAgICAodm9pZCAqKSZlMSwgc3opLCAwLCAiVW5leHBl Y3RlZCBtYWxsY3RsKCkgZXJyb3IiKTsKLQlleHBlY3RfdHJ1ZShlMCwgInRjYWNoZSBzaG91bGQg YmUgZW5hYmxlZCIpOwotCi0JZTEgPSBmYWxzZTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJl YWQudGNhY2hlLmVuYWJsZWQiLCAodm9pZCAqKSZlMCwgJnN6LAotCSAgICAodm9pZCAqKSZlMSwg c3opLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZXJyb3IiKTsKLQlleHBlY3RfdHJ1ZShlMCwg InRjYWNoZSBzaG91bGQgYmUgZW5hYmxlZCIpOwotCi0JZTEgPSBmYWxzZTsKLQlleHBlY3RfZF9l cShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmVuYWJsZWQiLCAodm9pZCAqKSZlMCwgJnN6LAotCSAg ICAodm9pZCAqKSZlMSwgc3opLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZXJyb3IiKTsKLQll eHBlY3RfZmFsc2UoZTAsICJ0Y2FjaGUgc2hvdWxkIGJlIGRpc2FibGVkIik7Ci0KLQlmcmVlKG1h bGxvYygxKSk7Ci0JZTEgPSB0cnVlOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2Fj aGUuZW5hYmxlZCIsICh2b2lkICopJmUwLCAmc3osCi0JICAgICh2b2lkICopJmUxLCBzeiksIDAs ICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBlcnJvciIpOwotCWV4cGVjdF9mYWxzZShlMCwgInRjYWNo ZSBzaG91bGQgYmUgZGlzYWJsZWQiKTsKLQotCWZyZWUobWFsbG9jKDEpKTsKLQllMSA9IHRydWU7 Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLnRjYWNoZS5lbmFibGVkIiwgKHZvaWQgKikm ZTAsICZzeiwKLQkgICAgKHZvaWQgKikmZTEsIHN6KSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgp IGVycm9yIik7Ci0JZXhwZWN0X3RydWUoZTAsICJ0Y2FjaGUgc2hvdWxkIGJlIGVuYWJsZWQiKTsK LQotCWZyZWUobWFsbG9jKDEpKTsKLQllMSA9IGZhbHNlOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwo InRocmVhZC50Y2FjaGUuZW5hYmxlZCIsICh2b2lkICopJmUwLCAmc3osCi0JICAgICh2b2lkICop JmUxLCBzeiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBlcnJvciIpOwotCWV4cGVjdF90cnVl KGUwLCAidGNhY2hlIHNob3VsZCBiZSBlbmFibGVkIik7Ci0KLQlmcmVlKG1hbGxvYygxKSk7Ci0J ZTEgPSBmYWxzZTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmVuYWJsZWQi LCAodm9pZCAqKSZlMCwgJnN6LAotCSAgICAodm9pZCAqKSZlMSwgc3opLCAwLCAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgZXJyb3IiKTsKLQlleHBlY3RfZmFsc2UoZTAsICJ0Y2FjaGUgc2hvdWxkIGJl IGRpc2FibGVkIik7Ci0KLQlmcmVlKG1hbGxvYygxKSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLVRF U1RfQkVHSU4odGVzdF9tYWluX3RocmVhZCkgewotCXRoZF9zdGFydChOVUxMKTsKLX0KLVRFU1Rf RU5ECi0KLVRFU1RfQkVHSU4odGVzdF9zdWJ0aHJlYWQpIHsKLQl0aGRfdCB0aGQ7Ci0KLQl0aGRf Y3JlYXRlKCZ0aGQsIHRoZF9zdGFydCwgTlVMTCk7Ci0JdGhkX2pvaW4odGhkLCBOVUxMKTsKLX0K LVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JLyogUnVuIHRlc3RzIG11bHRpcGxlIHRp bWVzIHRvIGNoZWNrIGZvciBiYWQgaW50ZXJhY3Rpb25zLiAqLwotCXJldHVybiB0ZXN0KAotCSAg ICB0ZXN0X21haW5fdGhyZWFkLAotCSAgICB0ZXN0X3N1YnRocmVhZCwKLQkgICAgdGVzdF9tYWlu X3RocmVhZCwKLQkgICAgdGVzdF9zdWJ0aHJlYWQsCi0JICAgIHRlc3RfbWFpbl90aHJlYWQpOwot fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvaW50ZWdyYXRpb24veGFsbG9jeC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi94YWxsb2N4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDEzNzA4NTQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi94YWxsb2N4LmMKKysrIC9kZXYvbnVsbApA QCAtMSwzODQgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0vKgot ICogVXNlIGEgc2VwYXJhdGUgYXJlbmEgZm9yIHhhbGxvY3goKSBleHRlbnNpb24vY29udHJhY3Rp b24gdGVzdHMgc28gdGhhdAotICogaW50ZXJuYWwgYWxsb2NhdGlvbiBlLmcuIGJ5IGhlYXAgcHJv ZmlsaW5nIGNhbid0IGludGVycG9zZSBhbGxvY2F0aW9ucyB3aGVyZQotICogeGFsbG9jeCgpIHdv dWxkIG9yZGluYXJpbHkgYmUgYWJsZSB0byBleHRlbmQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZAot YXJlbmFfaW5kKHZvaWQpIHsKLQlzdGF0aWMgdW5zaWduZWQgaW5kID0gMDsKLQotCWlmIChpbmQg PT0gMCkgewotCQlzaXplX3Qgc3ogPSBzaXplb2YoaW5kKTsKLQkJZXhwZWN0X2RfZXEobWFsbGN0 bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmluZCwgJnN6LCBOVUxMLAotCQkgICAgMCksIDAs ICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSBjcmVhdGluZyBhcmVuYSIpOwotCX0KLQotCXJl dHVybiBpbmQ7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9zYW1lX3NpemUpIHsKLQl2b2lkICpwOwot CXNpemVfdCBzeiwgdHN6OwotCi0JcCA9IG1hbGxvY3goNDIsIDApOwotCWV4cGVjdF9wdHJfbm90 X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7Ci0Jc3ogPSBzYWxsb2N4KHAs IDApOwotCi0JdHN6ID0geGFsbG9jeChwLCBzeiwgMCwgMCk7Ci0JZXhwZWN0X3p1X2VxKHRzeiwg c3osICJVbmV4cGVjdGVkIHNpemUgY2hhbmdlOiAlenUgLS0+ICV6dSIsIHN6LCB0c3opOwotCi0J ZGFsbG9jeChwLCAwKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9leHRyYV9ub19t b3ZlKSB7Ci0Jdm9pZCAqcDsKLQlzaXplX3Qgc3osIHRzejsKLQotCXAgPSBtYWxsb2N4KDQyLCAw KTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBlcnJvciIp OwotCXN6ID0gc2FsbG9jeChwLCAwKTsKLQotCXRzeiA9IHhhbGxvY3gocCwgc3osIHN6LTQyLCAw KTsKLQlleHBlY3RfenVfZXEodHN6LCBzeiwgIlVuZXhwZWN0ZWQgc2l6ZSBjaGFuZ2U6ICV6dSAt LT4gJXp1Iiwgc3osIHRzeik7Ci0KLQlkYWxsb2N4KHAsIDApOwotfQotVEVTVF9FTkQKLQotVEVT VF9CRUdJTih0ZXN0X25vX21vdmVfZmFpbCkgewotCXZvaWQgKnA7Ci0Jc2l6ZV90IHN6LCB0c3o7 Ci0KLQlwID0gbWFsbG9jeCg0MiwgMCk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBl Y3RlZCBtYWxsb2N4KCkgZXJyb3IiKTsKLQlzeiA9IHNhbGxvY3gocCwgMCk7Ci0KLQl0c3ogPSB4 YWxsb2N4KHAsIHN6ICsgNSwgMCwgMCk7Ci0JZXhwZWN0X3p1X2VxKHRzeiwgc3osICJVbmV4cGVj dGVkIHNpemUgY2hhbmdlOiAlenUgLS0+ICV6dSIsIHN6LCB0c3opOwotCi0JZGFsbG9jeChwLCAw KTsKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB1bnNpZ25lZAotZ2V0X25zaXplc19pbXBsKGNvbnN0 IGNoYXIgKmNtZCkgewotCXVuc2lnbmVkIHJldDsKLQlzaXplX3QgejsKLQotCXogPSBzaXplb2Yo dW5zaWduZWQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAodm9pZCAqKSZyZXQsICZ6LCBO VUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bChcIiVzXCIsIC4uLikgZmFpbHVy ZSIsIGNtZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdW5zaWduZWQKLWdldF9uc21h bGwodm9pZCkgewotCXJldHVybiBnZXRfbnNpemVzX2ltcGwoImFyZW5hcy5uYmlucyIpOwotfQot Ci1zdGF0aWMgdW5zaWduZWQKLWdldF9ubGFyZ2Uodm9pZCkgewotCXJldHVybiBnZXRfbnNpemVz X2ltcGwoImFyZW5hcy5ubGV4dGVudHMiKTsKLX0KLQotc3RhdGljIHNpemVfdAotZ2V0X3NpemVf aW1wbChjb25zdCBjaGFyICpjbWQsIHNpemVfdCBpbmQpIHsKLQlzaXplX3QgcmV0OwotCXNpemVf dCB6OwotCXNpemVfdCBtaWJbNF07Ci0Jc2l6ZV90IG1pYmxlbiA9IDQ7Ci0KLQl6ID0gc2l6ZW9m KHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYihjbWQsIG1pYiwgJm1pYmxl biksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoXCIlc1wiLCAuLi4pIGZh aWx1cmUiLCBjbWQpOwotCW1pYlsyXSA9IGluZDsKLQl6ID0gc2l6ZW9mKHNpemVfdCk7Ci0JZXhw ZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZyZXQsICZ6LCBOVUxM LCAwKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKFtcIiVzXCIsICV6dV0sIC4u LikgZmFpbHVyZSIsIGNtZCwgaW5kKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzaXpl X3QKLWdldF9zbWFsbF9zaXplKHNpemVfdCBpbmQpIHsKLQlyZXR1cm4gZ2V0X3NpemVfaW1wbCgi YXJlbmFzLmJpbi4wLnNpemUiLCBpbmQpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1nZXRfbGFyZ2Vf c2l6ZShzaXplX3QgaW5kKSB7Ci0JcmV0dXJuIGdldF9zaXplX2ltcGwoImFyZW5hcy5sZXh0ZW50 LjAuc2l6ZSIsIGluZCk7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9zaXplKSB7Ci0Jc2l6ZV90IHNt YWxsMCwgbGFyZ2VtYXg7Ci0Jdm9pZCAqcDsKLQotCS8qIEdldCBzaXplIGNsYXNzZXMuICovCi0J c21hbGwwID0gZ2V0X3NtYWxsX3NpemUoMCk7Ci0JbGFyZ2VtYXggPSBnZXRfbGFyZ2Vfc2l6ZShn ZXRfbmxhcmdlKCktMSk7Ci0KLQlwID0gbWFsbG9jeChzbWFsbDAsIDApOwotCWV4cGVjdF9wdHJf bm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7Ci0KLQkvKiBUZXN0IHNt YWxsZXN0IHN1cHBvcnRlZCBzaXplLiAqLwotCWV4cGVjdF96dV9lcSh4YWxsb2N4KHAsIDEsIDAs IDApLCBzbWFsbDAsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOwotCi0J LyogVGVzdCBsYXJnZXN0IHN1cHBvcnRlZCBzaXplLiAqLwotCWV4cGVjdF96dV9sZSh4YWxsb2N4 KHAsIGxhcmdlbWF4LCAwLCAwKSwgbGFyZ2VtYXgsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3go KSBiZWhhdmlvciIpOwotCi0JLyogVGVzdCBzaXplIG92ZXJmbG93LiAqLwotCWV4cGVjdF96dV9s ZSh4YWxsb2N4KHAsIGxhcmdlbWF4KzEsIDAsIDApLCBsYXJnZW1heCwKLQkgICAgIlVuZXhwZWN0 ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0JZXhwZWN0X3p1X2xlKHhhbGxvY3gocCwgU0laRV9U X01BWCwgMCwgMCksIGxhcmdlbWF4LAotCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZp b3IiKTsKLQotCWRhbGxvY3gocCwgMCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3Rf c2l6ZV9leHRyYV9vdmVyZmxvdykgewotCXNpemVfdCBzbWFsbDAsIGxhcmdlbWF4OwotCXZvaWQg KnA7Ci0KLQkvKiBHZXQgc2l6ZSBjbGFzc2VzLiAqLwotCXNtYWxsMCA9IGdldF9zbWFsbF9zaXpl KDApOwotCWxhcmdlbWF4ID0gZ2V0X2xhcmdlX3NpemUoZ2V0X25sYXJnZSgpLTEpOwotCi0JcCA9 IG1hbGxvY3goc21hbGwwLCAwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVk IG1hbGxvY3goKSBlcnJvciIpOwotCi0JLyogVGVzdCBvdmVyZmxvd3MgdGhhdCBjYW4gYmUgcmVz b2x2ZWQgYnkgY2xhbXBpbmcgZXh0cmEuICovCi0JZXhwZWN0X3p1X2xlKHhhbGxvY3gocCwgbGFy Z2VtYXgtMSwgMiwgMCksIGxhcmdlbWF4LAotCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVo YXZpb3IiKTsKLQlleHBlY3RfenVfbGUoeGFsbG9jeChwLCBsYXJnZW1heCwgMSwgMCksIGxhcmdl bWF4LAotCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKLQotCS8qIFRlc3Qg b3ZlcmZsb3cgc3VjaCB0aGF0IGxhcmdlbWF4LXNpemUgdW5kZXJmbG93cy4gKi8KLQlleHBlY3Rf enVfbGUoeGFsbG9jeChwLCBsYXJnZW1heCsxLCAyLCAwKSwgbGFyZ2VtYXgsCi0JICAgICJVbmV4 cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOwotCWV4cGVjdF96dV9sZSh4YWxsb2N4KHAsIGxh cmdlbWF4KzIsIDMsIDApLCBsYXJnZW1heCwKLQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJl aGF2aW9yIik7Ci0JZXhwZWN0X3p1X2xlKHhhbGxvY3gocCwgU0laRV9UX01BWC0yLCAyLCAwKSwg bGFyZ2VtYXgsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOwotCWV4cGVj dF96dV9sZSh4YWxsb2N4KHAsIFNJWkVfVF9NQVgtMSwgMSwgMCksIGxhcmdlbWF4LAotCSAgICAi VW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKLQotCWRhbGxvY3gocCwgMCk7Ci19Ci1U RVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfZXh0cmFfc21hbGwpIHsKLQlzaXplX3Qgc21hbGww LCBzbWFsbDEsIGxhcmdlbWF4OwotCXZvaWQgKnA7Ci0KLQkvKiBHZXQgc2l6ZSBjbGFzc2VzLiAq LwotCXNtYWxsMCA9IGdldF9zbWFsbF9zaXplKDApOwotCXNtYWxsMSA9IGdldF9zbWFsbF9zaXpl KDEpOwotCWxhcmdlbWF4ID0gZ2V0X2xhcmdlX3NpemUoZ2V0X25sYXJnZSgpLTEpOwotCi0JcCA9 IG1hbGxvY3goc21hbGwwLCAwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVk IG1hbGxvY3goKSBlcnJvciIpOwotCi0JZXhwZWN0X3p1X2VxKHhhbGxvY3gocCwgc21hbGwxLCAw LCAwKSwgc21hbGwwLAotCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKLQot CWV4cGVjdF96dV9lcSh4YWxsb2N4KHAsIHNtYWxsMSwgMCwgMCksIHNtYWxsMCwKLQkgICAgIlVu ZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0KLQlleHBlY3RfenVfZXEoeGFsbG9jeChw LCBzbWFsbDAsIHNtYWxsMSAtIHNtYWxsMCwgMCksIHNtYWxsMCwKLQkgICAgIlVuZXhwZWN0ZWQg eGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0KLQkvKiBUZXN0IHNpemUrZXh0cmEgb3ZlcmZsb3cuICov Ci0JZXhwZWN0X3p1X2VxKHhhbGxvY3gocCwgc21hbGwwLCBsYXJnZW1heCAtIHNtYWxsMCArIDEs IDApLCBzbWFsbDAsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOwotCWV4 cGVjdF96dV9lcSh4YWxsb2N4KHAsIHNtYWxsMCwgU0laRV9UX01BWCAtIHNtYWxsMCwgMCksIHNt YWxsMCwKLQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0KLQlkYWxsb2N4 KHAsIDApOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2V4dHJhX2xhcmdlKSB7Ci0J aW50IGZsYWdzID0gTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQoKSk7Ci0Jc2l6ZV90IHNtYWxsbWF4 LCBsYXJnZTEsIGxhcmdlMiwgbGFyZ2UzLCBsYXJnZW1heDsKLQl2b2lkICpwOwotCi0JLyogR2V0 IHNpemUgY2xhc3Nlcy4gKi8KLQlzbWFsbG1heCA9IGdldF9zbWFsbF9zaXplKGdldF9uc21hbGwo KS0xKTsKLQlsYXJnZTEgPSBnZXRfbGFyZ2Vfc2l6ZSgxKTsKLQlsYXJnZTIgPSBnZXRfbGFyZ2Vf c2l6ZSgyKTsKLQlsYXJnZTMgPSBnZXRfbGFyZ2Vfc2l6ZSgzKTsKLQlsYXJnZW1heCA9IGdldF9s YXJnZV9zaXplKGdldF9ubGFyZ2UoKS0xKTsKLQotCXAgPSBtYWxsb2N4KGxhcmdlMywgZmxhZ3Mp OwotCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGVycm9yIik7 Ci0KLQlleHBlY3RfenVfZXEoeGFsbG9jeChwLCBsYXJnZTMsIDAsIGZsYWdzKSwgbGFyZ2UzLAot CSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKLQkvKiBUZXN0IHNpemUgZGVj cmVhc2Ugd2l0aCB6ZXJvIGV4dHJhLiAqLwotCWV4cGVjdF96dV9nZSh4YWxsb2N4KHAsIGxhcmdl MSwgMCwgZmxhZ3MpLCBsYXJnZTEsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlv ciIpOwotCWV4cGVjdF96dV9nZSh4YWxsb2N4KHAsIHNtYWxsbWF4LCAwLCBmbGFncyksIGxhcmdl MSwKLQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0KLQlpZiAoeGFsbG9j eChwLCBsYXJnZTMsIDAsIGZsYWdzKSAhPSBsYXJnZTMpIHsKLQkJcCA9IHJhbGxvY3gocCwgbGFy Z2UzLCBmbGFncyk7Ci0JCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgcmFsbG9j eCgpIGZhaWx1cmUiKTsKLQl9Ci0JLyogVGVzdCBzaXplIGRlY3JlYXNlIHdpdGggbm9uLXplcm8g ZXh0cmEuICovCi0JZXhwZWN0X3p1X2VxKHhhbGxvY3gocCwgbGFyZ2UxLCBsYXJnZTMgLSBsYXJn ZTEsIGZsYWdzKSwgbGFyZ2UzLAotCSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3Ii KTsKLQlleHBlY3RfenVfZXEoeGFsbG9jeChwLCBsYXJnZTIsIGxhcmdlMyAtIGxhcmdlMiwgZmxh Z3MpLCBsYXJnZTMsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOwotCWV4 cGVjdF96dV9nZSh4YWxsb2N4KHAsIGxhcmdlMSwgbGFyZ2UyIC0gbGFyZ2UxLCBmbGFncyksIGxh cmdlMiwKLQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0JZXhwZWN0X3p1 X2dlKHhhbGxvY3gocCwgc21hbGxtYXgsIGxhcmdlMSAtIHNtYWxsbWF4LCBmbGFncyksIGxhcmdl MSwKLQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0KLQlleHBlY3RfenVf Z2UoeGFsbG9jeChwLCBsYXJnZTEsIDAsIGZsYWdzKSwgbGFyZ2UxLAotCSAgICAiVW5leHBlY3Rl ZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKLQkvKiBUZXN0IHNpemUgaW5jcmVhc2Ugd2l0aCB6ZXJv IGV4dHJhLiAqLwotCWV4cGVjdF96dV9sZSh4YWxsb2N4KHAsIGxhcmdlMywgMCwgZmxhZ3MpLCBs YXJnZTMsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBiZWhhdmlvciIpOwotCWV4cGVjdF96 dV9sZSh4YWxsb2N4KHAsIGxhcmdlbWF4KzEsIDAsIGZsYWdzKSwgbGFyZ2UzLAotCSAgICAiVW5l eHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKLQotCWV4cGVjdF96dV9nZSh4YWxsb2N4KHAs IGxhcmdlMSwgMCwgZmxhZ3MpLCBsYXJnZTEsCi0JICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBi ZWhhdmlvciIpOwotCS8qIFRlc3Qgc2l6ZSBpbmNyZWFzZSB3aXRoIG5vbi16ZXJvIGV4dHJhLiAq LwotCWV4cGVjdF96dV9sZSh4YWxsb2N4KHAsIGxhcmdlMSwgU0laRV9UX01BWCAtIGxhcmdlMSwg ZmxhZ3MpLCBsYXJnZW1heCwKLQkgICAgIlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7 Ci0KLQlleHBlY3RfenVfZ2UoeGFsbG9jeChwLCBsYXJnZTEsIDAsIGZsYWdzKSwgbGFyZ2UxLAot CSAgICAiVW5leHBlY3RlZCB4YWxsb2N4KCkgYmVoYXZpb3IiKTsKLQkvKiBUZXN0IHNpemUgaW5j cmVhc2Ugd2l0aCBub24temVybyBleHRyYS4gKi8KLQlleHBlY3RfenVfbGUoeGFsbG9jeChwLCBs YXJnZTEsIGxhcmdlMyAtIGxhcmdlMSwgZmxhZ3MpLCBsYXJnZTMsCi0JICAgICJVbmV4cGVjdGVk IHhhbGxvY3goKSBiZWhhdmlvciIpOwotCi0JaWYgKHhhbGxvY3gocCwgbGFyZ2UzLCAwLCBmbGFn cykgIT0gbGFyZ2UzKSB7Ci0JCXAgPSByYWxsb2N4KHAsIGxhcmdlMywgZmxhZ3MpOwotCQlleHBl Y3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIHJhbGxvY3goKSBmYWlsdXJlIik7Ci0JfQot CS8qIFRlc3Qgc2l6ZStleHRyYSBvdmVyZmxvdy4gKi8KLQlleHBlY3RfenVfbGUoeGFsbG9jeChw LCBsYXJnZTMsIGxhcmdlbWF4IC0gbGFyZ2UzICsgMSwgZmxhZ3MpLCBsYXJnZW1heCwKLQkgICAg IlVuZXhwZWN0ZWQgeGFsbG9jeCgpIGJlaGF2aW9yIik7Ci0KLQlkYWxsb2N4KHAsIGZsYWdzKTsK LX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1wcmludF9maWxsZWRfZXh0ZW50cyhjb25zdCB2 b2lkICpwLCB1aW50OF90IGMsIHNpemVfdCBsZW4pIHsKLQljb25zdCB1aW50OF90ICpwYyA9IChj b25zdCB1aW50OF90ICopcDsKLQlzaXplX3QgaSwgcmFuZ2UwOwotCXVpbnQ4X3QgYzA7Ci0KLQlt YWxsb2NfcHJpbnRmKCIgIHA9JXAsIGM9JSN4LCBsZW49JXp1OiIsIHAsIGMsIGxlbik7Ci0JcmFu Z2UwID0gMDsKLQljMCA9IHBjWzBdOwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlp ZiAocGNbaV0gIT0gYzApIHsKLQkJCW1hbGxvY19wcmludGYoIiAlI3hbJXp1Li4lenUpIiwgYzAs IHJhbmdlMCwgaSk7Ci0JCQlyYW5nZTAgPSBpOwotCQkJYzAgPSBwY1tpXTsKLQkJfQotCX0KLQlt YWxsb2NfcHJpbnRmKCIgJSN4WyV6dS4uJXp1KVxuIiwgYzAsIHJhbmdlMCwgaSk7Ci19Ci0KLXN0 YXRpYyBib29sCi12YWxpZGF0ZV9maWxsKGNvbnN0IHZvaWQgKnAsIHVpbnQ4X3QgYywgc2l6ZV90 IG9mZnNldCwgc2l6ZV90IGxlbikgewotCWNvbnN0IHVpbnQ4X3QgKnBjID0gKGNvbnN0IHVpbnQ4 X3QgKilwOwotCWJvb2wgZXJyOwotCXNpemVfdCBpOwotCi0JZm9yIChpID0gb2Zmc2V0LCBlcnIg PSBmYWxzZTsgaSA8IG9mZnNldCtsZW47IGkrKykgewotCQlpZiAocGNbaV0gIT0gYykgewotCQkJ ZXJyID0gdHJ1ZTsKLQkJfQotCX0KLQotCWlmIChlcnIpIHsKLQkJcHJpbnRfZmlsbGVkX2V4dGVu dHMocCwgYywgb2Zmc2V0ICsgbGVuKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMg dm9pZAotdGVzdF96ZXJvKHNpemVfdCBzem1pbiwgc2l6ZV90IHN6bWF4KSB7Ci0JaW50IGZsYWdz ID0gTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQoKSkgfCBNQUxMT0NYX1pFUk87Ci0Jc2l6ZV90IHN6 LCBuc3o7Ci0Jdm9pZCAqcDsKLSNkZWZpbmUgRklMTF9CWVRFIDB4N2FVCi0KLQlzeiA9IHN6bWF4 OwotCXAgPSBtYWxsb2N4KHN6LCBmbGFncyk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5l eHBlY3RlZCBtYWxsb2N4KCkgZXJyb3IiKTsKLQlleHBlY3RfZmFsc2UodmFsaWRhdGVfZmlsbChw LCAweDAwLCAwLCBzeiksICJNZW1vcnkgbm90IGZpbGxlZDogc3o9JXp1IiwKLQkgICAgc3opOwot Ci0JLyoKLQkgKiBGaWxsIHdpdGggbm9uLXplcm8gc28gdGhhdCBub24tZGVidWcgYnVpbGRzIGFy ZSBtb3JlIGxpa2VseSB0byBkZXRlY3QKLQkgKiBlcnJvcnMuCi0JICovCi0JbWVtc2V0KHAsIEZJ TExfQllURSwgc3opOwotCWV4cGVjdF9mYWxzZSh2YWxpZGF0ZV9maWxsKHAsIEZJTExfQllURSwg MCwgc3opLAotCSAgICAiTWVtb3J5IG5vdCBmaWxsZWQ6IHN6PSV6dSIsIHN6KTsKLQotCS8qIFNo cmluayBpbiBwbGFjZSBzbyB0aGF0IHdlIGNhbiBleHBlY3QgZ3Jvd2luZyBpbiBwbGFjZSB0byBz dWNjZWVkLiAqLwotCXN6ID0gc3ptaW47Ci0JaWYgKHhhbGxvY3gocCwgc3osIDAsIGZsYWdzKSAh PSBzeikgewotCQlwID0gcmFsbG9jeChwLCBzeiwgZmxhZ3MpOwotCQlleHBlY3RfcHRyX25vdF9u dWxsKHAsICJVbmV4cGVjdGVkIHJhbGxvY3goKSBmYWlsdXJlIik7Ci0JfQotCWV4cGVjdF9mYWxz ZSh2YWxpZGF0ZV9maWxsKHAsIEZJTExfQllURSwgMCwgc3opLAotCSAgICAiTWVtb3J5IG5vdCBm aWxsZWQ6IHN6PSV6dSIsIHN6KTsKLQotCWZvciAoc3ogPSBzem1pbjsgc3ogPCBzem1heDsgc3og PSBuc3opIHsKLQkJbnN6ID0gbmFsbG9jeChzeisxLCBmbGFncyk7Ci0JCWlmICh4YWxsb2N4KHAs IHN6KzEsIDAsIGZsYWdzKSAhPSBuc3opIHsKLQkJCXAgPSByYWxsb2N4KHAsIHN6KzEsIGZsYWdz KTsKLQkJCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgcmFsbG9jeCgpIGZhaWx1 cmUiKTsKLQkJfQotCQlleHBlY3RfZmFsc2UodmFsaWRhdGVfZmlsbChwLCBGSUxMX0JZVEUsIDAs IHN6KSwKLQkJICAgICJNZW1vcnkgbm90IGZpbGxlZDogc3o9JXp1Iiwgc3opOwotCQlleHBlY3Rf ZmFsc2UodmFsaWRhdGVfZmlsbChwLCAweDAwLCBzeiwgbnN6LXN6KSwKLQkJICAgICJNZW1vcnkg bm90IGZpbGxlZDogc3o9JXp1LCBuc3otc3o9JXp1Iiwgc3osIG5zei1zeik7Ci0JCW1lbXNldCgo dm9pZCAqKSgodWludHB0cl90KXAgKyBzeiksIEZJTExfQllURSwgbnN6LXN6KTsKLQkJZXhwZWN0 X2ZhbHNlKHZhbGlkYXRlX2ZpbGwocCwgRklMTF9CWVRFLCAwLCBuc3opLAotCQkgICAgIk1lbW9y eSBub3QgZmlsbGVkOiBuc3o9JXp1IiwgbnN6KTsKLQl9Ci0KLQlkYWxsb2N4KHAsIGZsYWdzKTsK LX0KLQotVEVTVF9CRUdJTih0ZXN0X3plcm9fbGFyZ2UpIHsKLQlzaXplX3QgbGFyZ2UwLCBsYXJn ZTE7Ci0KLQkvKiBHZXQgc2l6ZSBjbGFzc2VzLiAqLwotCWxhcmdlMCA9IGdldF9sYXJnZV9zaXpl KDApOwotCWxhcmdlMSA9IGdldF9sYXJnZV9zaXplKDEpOwotCi0JdGVzdF96ZXJvKGxhcmdlMSwg bGFyZ2UwICogMik7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0 ZXN0KAotCSAgICB0ZXN0X3NhbWVfc2l6ZSwKLQkgICAgdGVzdF9leHRyYV9ub19tb3ZlLAotCSAg ICB0ZXN0X25vX21vdmVfZmFpbCwKLQkgICAgdGVzdF9zaXplLAotCSAgICB0ZXN0X3NpemVfZXh0 cmFfb3ZlcmZsb3csCi0JICAgIHRlc3RfZXh0cmFfc21hbGwsCi0JICAgIHRlc3RfZXh0cmFfbGFy Z2UsCi0JICAgIHRlc3RfemVyb19sYXJnZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi94YWxsb2N4LnNoIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9pbnRlZ3JhdGlvbi94 YWxsb2N4LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2MyMTg3Li4wMDAwMDAw Ci0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvaW50ZWdy YXRpb24veGFsbG9jeC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyEvYmluL3No Ci0KLWlmIFsgIngke2VuYWJsZV9maWxsfSIgPSAieDEiIF0gOyB0aGVuCi0gIGV4cG9ydCBNQUxM T0NfQ09ORj0ianVuazpmYWxzZSIKLWZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvU0ZNVC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvU0ZNVC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBjMDVlMjE4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL1NGTVQuYworKysgL2Rldi9udWxsCkBAIC0xLDcxOSAr MCwwIEBACi0vKgotICogVGhpcyBmaWxlIGRlcml2ZXMgZnJvbSBTRk1UIDEuMy4zCi0gKiAoaHR0 cDovL3d3dy5tYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcC9+bS1tYXQvTVQvU0ZNVC9pbmRleC5o dG1sKSwgd2hpY2ggd2FzCi0gKiByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGZvbGxv d2luZyBsaWNlbnNlOgotICoKLSAqICAgQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgTXV0c3VvIFNh aXRvLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAqICAgVW5pdmVyc2l0eS4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogICBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl Ci0gKiAgIG1ldDoKLSAqCi0gKiAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZQotICogICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgICAgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgotICogICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBIaXJv c2hpbWEgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgICAgIGl0cyBjb250cmli dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICAg ICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp dHRlbgotICogICAgICAgICBwZXJtaXNzaW9uLgotICoKLSAqICAgVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogICAi QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVAotICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqICAgT1dORVIg T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0gKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiAgIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WQotICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUCi0gKiAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogICBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot ICovCi0vKioKLSAqIEBmaWxlICBTRk1ULmMKLSAqIEBicmllZiBTSU1EIG9yaWVudGVkIEZhc3Qg TWVyc2VubmUgVHdpc3RlcihTRk1UKQotICoKLSAqIEBhdXRob3IgTXV0c3VvIFNhaXRvIChIaXJv c2hpbWEgVW5pdmVyc2l0eSkKLSAqIEBhdXRob3IgTWFrb3RvIE1hdHN1bW90byAoSGlyb3NoaW1h IFVuaXZlcnNpdHkpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgTXV0c3VvIFNhaXRv LCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBIaXJvc2hpbWEKLSAqIFVuaXZlcnNpdHkuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhlIG5ldyBCU0QgTGljZW5zZSBpcyBhcHBsaWVkIHRvIHRo aXMgc29mdHdhcmUsIHNlZSBMSUNFTlNFLnR4dAotICovCi0jZGVmaW5lIFNGTVRfQ18KLSNpbmNs dWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLSNpbmNsdWRlICJ0ZXN0L1NGTVQtcGFyYW1zLmgi Ci0KLSNpZiBkZWZpbmVkKEpFTUFMTE9DX0JJR19FTkRJQU4pICYmICFkZWZpbmVkKEJJR19FTkRJ QU42NCkKLSNkZWZpbmUgQklHX0VORElBTjY0IDEKLSNlbmRpZgotI2lmIGRlZmluZWQoX19CSUdf RU5ESUFOX18pICYmICFkZWZpbmVkKF9fYW1kNjQpICYmICFkZWZpbmVkKEJJR19FTkRJQU42NCkK LSNkZWZpbmUgQklHX0VORElBTjY0IDEKLSNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9BTFRJVkVD KSAmJiAhZGVmaW5lZChCSUdfRU5ESUFONjQpCi0jZGVmaW5lIEJJR19FTkRJQU42NCAxCi0jZW5k aWYKLSNpZiBkZWZpbmVkKE9OTFk2NCkgJiYgIWRlZmluZWQoQklHX0VORElBTjY0KQotICAjaWYg ZGVmaW5lZChfX0dOVUNfXykKLSAgICAjZXJyb3IgIi1ET05MWTY0IG11c3QgYmUgc3BlY2lmaWVk IHdpdGggLURCSUdfRU5ESUFONjQiCi0gICNlbmRpZgotI3VuZGVmIE9OTFk2NAotI2VuZGlmCi0v Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot ICAxMjgtYml0IFNJTUQgZGF0YSB0eXBlIGZvciBBbHRpdmVjLCBTU0UyIG9yIHN0YW5kYXJkIEMK LSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KLSNpZiBkZWZpbmVkKEhBVkVfQUxUSVZFQykKLS8qKiAxMjgtYml0IGRhdGEgc3RydWN0dXJl ICovCi11bmlvbiBXMTI4X1QgewotICAgIHZlY3RvciB1bnNpZ25lZCBpbnQgczsKLSAgICB1aW50 MzJfdCB1WzRdOwotfTsKLS8qKiAxMjgtYml0IGRhdGEgdHlwZSAqLwotdHlwZWRlZiB1bmlvbiBX MTI4X1QgdzEyOF90OwotCi0jZWxpZiBkZWZpbmVkKEhBVkVfU1NFMikKLS8qKiAxMjgtYml0IGRh dGEgc3RydWN0dXJlICovCi11bmlvbiBXMTI4X1QgewotICAgIF9fbTEyOGkgc2k7Ci0gICAgdWlu dDMyX3QgdVs0XTsKLX07Ci0vKiogMTI4LWJpdCBkYXRhIHR5cGUgKi8KLXR5cGVkZWYgdW5pb24g VzEyOF9UIHcxMjhfdDsKLQotI2Vsc2UKLQotLyoqIDEyOC1iaXQgZGF0YSBzdHJ1Y3R1cmUgKi8K LXN0cnVjdCBXMTI4X1QgewotICAgIHVpbnQzMl90IHVbNF07Ci19OwotLyoqIDEyOC1iaXQgZGF0 YSB0eXBlICovCi10eXBlZGVmIHN0cnVjdCBXMTI4X1QgdzEyOF90OwotCi0jZW5kaWYKLQotc3Ry dWN0IHNmbXRfcyB7Ci0gICAgLyoqIHRoZSAxMjgtYml0IGludGVybmFsIHN0YXRlIGFycmF5ICov Ci0gICAgdzEyOF90IHNmbXRbTl07Ci0gICAgLyoqIGluZGV4IGNvdW50ZXIgdG8gdGhlIDMyLWJp dCBpbnRlcm5hbCBzdGF0ZSBhcnJheSAqLwotICAgIGludCBpZHg7Ci0gICAgLyoqIGEgZmxhZzog aXQgaXMgMCBpZiBhbmQgb25seSBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgaXMgbm90IHlldAotICAg ICAqIGluaXRpYWxpemVkLiAqLwotICAgIGludCBpbml0aWFsaXplZDsKLX07Ci0KLS8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgRklMRSBHTE9CQUwgVkFSSUFCTEVT Ci0gIGludGVybmFsIHN0YXRlLCBpbmRleCBjb3VudGVyIGFuZCBmbGFnCi0gIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyoqIGEgcGFyaXR5IGNoZWNrIHZlY3Rv ciB3aGljaCBjZXJ0aWZpY2F0ZSB0aGUgcGVyaW9kIG9mIDJee01FWFB9ICovCi1zdGF0aWMgdWlu dDMyX3QgcGFyaXR5WzRdID0ge1BBUklUWTEsIFBBUklUWTIsIFBBUklUWTMsIFBBUklUWTR9Owot Ci0vKi0tLS0tLS0tLS0tLS0tLS0KLSAgU1RBVElDIEZVTkNUSU9OUwotICAtLS0tLS0tLS0tLS0t LS0tKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlkeG9mKGludCBpKTsKLSNpZiAoIWRlZmluZWQoSEFW RV9BTFRJVkVDKSkgJiYgKCFkZWZpbmVkKEhBVkVfU1NFMikpCi1zdGF0aWMgaW5saW5lIHZvaWQg cnNoaWZ0MTI4KHcxMjhfdCAqb3V0LCAgdzEyOF90IGNvbnN0ICppbiwgaW50IHNoaWZ0KTsKLXN0 YXRpYyBpbmxpbmUgdm9pZCBsc2hpZnQxMjgodzEyOF90ICpvdXQsICB3MTI4X3QgY29uc3QgKmlu LCBpbnQgc2hpZnQpOwotI2VuZGlmCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuX3JhbmRfYWxsKHNm bXRfdCAqY3R4KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fcmFuZF9hcnJheShzZm10X3QgKmN0 eCwgdzEyOF90ICphcnJheSwgaW50IHNpemUpOwotc3RhdGljIGlubGluZSB1aW50MzJfdCBmdW5j MSh1aW50MzJfdCB4KTsKLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgZnVuYzIodWludDMyX3QgeCk7 Ci1zdGF0aWMgdm9pZCBwZXJpb2RfY2VydGlmaWNhdGlvbihzZm10X3QgKmN0eCk7Ci0jaWYgZGVm aW5lZChCSUdfRU5ESUFONjQpICYmICFkZWZpbmVkKE9OTFk2NCkKLXN0YXRpYyBpbmxpbmUgdm9p ZCBzd2FwKHcxMjhfdCAqYXJyYXksIGludCBzaXplKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChI QVZFX0FMVElWRUMpCi0gICNpbmNsdWRlICJ0ZXN0L1NGTVQtYWx0aS5oIgotI2VsaWYgZGVmaW5l ZChIQVZFX1NTRTIpCi0gICNpbmNsdWRlICJ0ZXN0L1NGTVQtc3NlMi5oIgotI2VuZGlmCi0KLS8q KgotICogVGhpcyBmdW5jdGlvbiBzaW11bGF0ZSBhIDY0LWJpdCBpbmRleCBvZiBMSVRUTEUgRU5E SUFOCi0gKiBpbiBCSUcgRU5ESUFOIG1hY2hpbmUuCi0gKi8KLSNpZmRlZiBPTkxZNjQKLXN0YXRp YyBpbmxpbmUgaW50IGlkeG9mKGludCBpKSB7Ci0gICAgcmV0dXJuIGkgXiAxOwotfQotI2Vsc2UK LXN0YXRpYyBpbmxpbmUgaW50IGlkeG9mKGludCBpKSB7Ci0gICAgcmV0dXJuIGk7Ci19Ci0jZW5k aWYKLS8qKgotICogVGhpcyBmdW5jdGlvbiBzaW11bGF0ZXMgU0lNRCAxMjgtYml0IHJpZ2h0IHNo aWZ0IGJ5IHRoZSBzdGFuZGFyZCBDLgotICogVGhlIDEyOC1iaXQgaW50ZWdlciBnaXZlbiBpbiBp biBpcyBzaGlmdGVkIGJ5IChzaGlmdCAqIDgpIGJpdHMuCi0gKiBUaGlzIGZ1bmN0aW9uIHNpbXVs YXRlcyB0aGUgTElUVExFIEVORElBTiBTSU1ELgotICogQHBhcmFtIG91dCB0aGUgb3V0cHV0IG9m IHRoaXMgZnVuY3Rpb24KLSAqIEBwYXJhbSBpbiB0aGUgMTI4LWJpdCBkYXRhIHRvIGJlIHNoaWZ0 ZWQKLSAqIEBwYXJhbSBzaGlmdCB0aGUgc2hpZnQgdmFsdWUKLSAqLwotI2lmICghZGVmaW5lZChI QVZFX0FMVElWRUMpKSAmJiAoIWRlZmluZWQoSEFWRV9TU0UyKSkKLSNpZmRlZiBPTkxZNjQKLXN0 YXRpYyBpbmxpbmUgdm9pZCByc2hpZnQxMjgodzEyOF90ICpvdXQsIHcxMjhfdCBjb25zdCAqaW4s IGludCBzaGlmdCkgewotICAgIHVpbnQ2NF90IHRoLCB0bCwgb2gsIG9sOwotCi0gICAgdGggPSAo KHVpbnQ2NF90KWluLT51WzJdIDw8IDMyKSB8ICgodWludDY0X3QpaW4tPnVbM10pOwotICAgIHRs ID0gKCh1aW50NjRfdClpbi0+dVswXSA8PCAzMikgfCAoKHVpbnQ2NF90KWluLT51WzFdKTsKLQot ICAgIG9oID0gdGggPj4gKHNoaWZ0ICogOCk7Ci0gICAgb2wgPSB0bCA+PiAoc2hpZnQgKiA4KTsK LSAgICBvbCB8PSB0aCA8PCAoNjQgLSBzaGlmdCAqIDgpOwotICAgIG91dC0+dVswXSA9ICh1aW50 MzJfdCkob2wgPj4gMzIpOwotICAgIG91dC0+dVsxXSA9ICh1aW50MzJfdClvbDsKLSAgICBvdXQt PnVbMl0gPSAodWludDMyX3QpKG9oID4+IDMyKTsKLSAgICBvdXQtPnVbM10gPSAodWludDMyX3Qp b2g7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJzaGlmdDEyOCh3MTI4X3QgKm91dCwg dzEyOF90IGNvbnN0ICppbiwgaW50IHNoaWZ0KSB7Ci0gICAgdWludDY0X3QgdGgsIHRsLCBvaCwg b2w7Ci0KLSAgICB0aCA9ICgodWludDY0X3QpaW4tPnVbM10gPDwgMzIpIHwgKCh1aW50NjRfdClp bi0+dVsyXSk7Ci0gICAgdGwgPSAoKHVpbnQ2NF90KWluLT51WzFdIDw8IDMyKSB8ICgodWludDY0 X3QpaW4tPnVbMF0pOwotCi0gICAgb2ggPSB0aCA+PiAoc2hpZnQgKiA4KTsKLSAgICBvbCA9IHRs ID4+IChzaGlmdCAqIDgpOwotICAgIG9sIHw9IHRoIDw8ICg2NCAtIHNoaWZ0ICogOCk7Ci0gICAg b3V0LT51WzFdID0gKHVpbnQzMl90KShvbCA+PiAzMik7Ci0gICAgb3V0LT51WzBdID0gKHVpbnQz Ml90KW9sOwotICAgIG91dC0+dVszXSA9ICh1aW50MzJfdCkob2ggPj4gMzIpOwotICAgIG91dC0+ dVsyXSA9ICh1aW50MzJfdClvaDsKLX0KLSNlbmRpZgotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIHNp bXVsYXRlcyBTSU1EIDEyOC1iaXQgbGVmdCBzaGlmdCBieSB0aGUgc3RhbmRhcmQgQy4KLSAqIFRo ZSAxMjgtYml0IGludGVnZXIgZ2l2ZW4gaW4gaW4gaXMgc2hpZnRlZCBieSAoc2hpZnQgKiA4KSBi aXRzLgotICogVGhpcyBmdW5jdGlvbiBzaW11bGF0ZXMgdGhlIExJVFRMRSBFTkRJQU4gU0lNRC4K LSAqIEBwYXJhbSBvdXQgdGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uCi0gKiBAcGFyYW0gaW4g dGhlIDEyOC1iaXQgZGF0YSB0byBiZSBzaGlmdGVkCi0gKiBAcGFyYW0gc2hpZnQgdGhlIHNoaWZ0 IHZhbHVlCi0gKi8KLSNpZmRlZiBPTkxZNjQKLXN0YXRpYyBpbmxpbmUgdm9pZCBsc2hpZnQxMjgo dzEyOF90ICpvdXQsIHcxMjhfdCBjb25zdCAqaW4sIGludCBzaGlmdCkgewotICAgIHVpbnQ2NF90 IHRoLCB0bCwgb2gsIG9sOwotCi0gICAgdGggPSAoKHVpbnQ2NF90KWluLT51WzJdIDw8IDMyKSB8 ICgodWludDY0X3QpaW4tPnVbM10pOwotICAgIHRsID0gKCh1aW50NjRfdClpbi0+dVswXSA8PCAz MikgfCAoKHVpbnQ2NF90KWluLT51WzFdKTsKLQotICAgIG9oID0gdGggPDwgKHNoaWZ0ICogOCk7 Ci0gICAgb2wgPSB0bCA8PCAoc2hpZnQgKiA4KTsKLSAgICBvaCB8PSB0bCA+PiAoNjQgLSBzaGlm dCAqIDgpOwotICAgIG91dC0+dVswXSA9ICh1aW50MzJfdCkob2wgPj4gMzIpOwotICAgIG91dC0+ dVsxXSA9ICh1aW50MzJfdClvbDsKLSAgICBvdXQtPnVbMl0gPSAodWludDMyX3QpKG9oID4+IDMy KTsKLSAgICBvdXQtPnVbM10gPSAodWludDMyX3Qpb2g7Ci19Ci0jZWxzZQotc3RhdGljIGlubGlu ZSB2b2lkIGxzaGlmdDEyOCh3MTI4X3QgKm91dCwgdzEyOF90IGNvbnN0ICppbiwgaW50IHNoaWZ0 KSB7Ci0gICAgdWludDY0X3QgdGgsIHRsLCBvaCwgb2w7Ci0KLSAgICB0aCA9ICgodWludDY0X3Qp aW4tPnVbM10gPDwgMzIpIHwgKCh1aW50NjRfdClpbi0+dVsyXSk7Ci0gICAgdGwgPSAoKHVpbnQ2 NF90KWluLT51WzFdIDw8IDMyKSB8ICgodWludDY0X3QpaW4tPnVbMF0pOwotCi0gICAgb2ggPSB0 aCA8PCAoc2hpZnQgKiA4KTsKLSAgICBvbCA9IHRsIDw8IChzaGlmdCAqIDgpOwotICAgIG9oIHw9 IHRsID4+ICg2NCAtIHNoaWZ0ICogOCk7Ci0gICAgb3V0LT51WzFdID0gKHVpbnQzMl90KShvbCA+ PiAzMik7Ci0gICAgb3V0LT51WzBdID0gKHVpbnQzMl90KW9sOwotICAgIG91dC0+dVszXSA9ICh1 aW50MzJfdCkob2ggPj4gMzIpOwotICAgIG91dC0+dVsyXSA9ICh1aW50MzJfdClvaDsKLX0KLSNl bmRpZgotI2VuZGlmCi0KLS8qKgotICogVGhpcyBmdW5jdGlvbiByZXByZXNlbnRzIHRoZSByZWN1 cnNpb24gZm9ybXVsYS4KLSAqIEBwYXJhbSByIG91dHB1dAotICogQHBhcmFtIGEgYSAxMjgtYml0 IHBhcnQgb2YgdGhlIGludGVybmFsIHN0YXRlIGFycmF5Ci0gKiBAcGFyYW0gYiBhIDEyOC1iaXQg cGFydCBvZiB0aGUgaW50ZXJuYWwgc3RhdGUgYXJyYXkKLSAqIEBwYXJhbSBjIGEgMTI4LWJpdCBw YXJ0IG9mIHRoZSBpbnRlcm5hbCBzdGF0ZSBhcnJheQotICogQHBhcmFtIGQgYSAxMjgtYml0IHBh cnQgb2YgdGhlIGludGVybmFsIHN0YXRlIGFycmF5Ci0gKi8KLSNpZiAoIWRlZmluZWQoSEFWRV9B TFRJVkVDKSkgJiYgKCFkZWZpbmVkKEhBVkVfU1NFMikpCi0jaWZkZWYgT05MWTY0Ci1zdGF0aWMg aW5saW5lIHZvaWQgZG9fcmVjdXJzaW9uKHcxMjhfdCAqciwgdzEyOF90ICphLCB3MTI4X3QgKmIs IHcxMjhfdCAqYywKLQkJCQl3MTI4X3QgKmQpIHsKLSAgICB3MTI4X3QgeDsKLSAgICB3MTI4X3Qg eTsKLQotICAgIGxzaGlmdDEyOCgmeCwgYSwgU0wyKTsKLSAgICByc2hpZnQxMjgoJnksIGMsIFNS Mik7Ci0gICAgci0+dVswXSA9IGEtPnVbMF0gXiB4LnVbMF0gXiAoKGItPnVbMF0gPj4gU1IxKSAm IE1TSzIpIF4geS51WzBdCi0JXiAoZC0+dVswXSA8PCBTTDEpOwotICAgIHItPnVbMV0gPSBhLT51 WzFdIF4geC51WzFdIF4gKChiLT51WzFdID4+IFNSMSkgJiBNU0sxKSBeIHkudVsxXQotCV4gKGQt PnVbMV0gPDwgU0wxKTsKLSAgICByLT51WzJdID0gYS0+dVsyXSBeIHgudVsyXSBeICgoYi0+dVsy XSA+PiBTUjEpICYgTVNLNCkgXiB5LnVbMl0KLQleIChkLT51WzJdIDw8IFNMMSk7Ci0gICAgci0+ dVszXSA9IGEtPnVbM10gXiB4LnVbM10gXiAoKGItPnVbM10gPj4gU1IxKSAmIE1TSzMpIF4geS51 WzNdCi0JXiAoZC0+dVszXSA8PCBTTDEpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBk b19yZWN1cnNpb24odzEyOF90ICpyLCB3MTI4X3QgKmEsIHcxMjhfdCAqYiwgdzEyOF90ICpjLAot CQkJCXcxMjhfdCAqZCkgewotICAgIHcxMjhfdCB4OwotICAgIHcxMjhfdCB5OwotCi0gICAgbHNo aWZ0MTI4KCZ4LCBhLCBTTDIpOwotICAgIHJzaGlmdDEyOCgmeSwgYywgU1IyKTsKLSAgICByLT51 WzBdID0gYS0+dVswXSBeIHgudVswXSBeICgoYi0+dVswXSA+PiBTUjEpICYgTVNLMSkgXiB5LnVb MF0KLQleIChkLT51WzBdIDw8IFNMMSk7Ci0gICAgci0+dVsxXSA9IGEtPnVbMV0gXiB4LnVbMV0g XiAoKGItPnVbMV0gPj4gU1IxKSAmIE1TSzIpIF4geS51WzFdCi0JXiAoZC0+dVsxXSA8PCBTTDEp OwotICAgIHItPnVbMl0gPSBhLT51WzJdIF4geC51WzJdIF4gKChiLT51WzJdID4+IFNSMSkgJiBN U0szKSBeIHkudVsyXQotCV4gKGQtPnVbMl0gPDwgU0wxKTsKLSAgICByLT51WzNdID0gYS0+dVsz XSBeIHgudVszXSBeICgoYi0+dVszXSA+PiBTUjEpICYgTVNLNCkgXiB5LnVbM10KLQleIChkLT51 WzNdIDw8IFNMMSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgKCFkZWZpbmVkKEhBVkVfQUxU SVZFQykpICYmICghZGVmaW5lZChIQVZFX1NTRTIpKQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGZp bGxzIHRoZSBpbnRlcm5hbCBzdGF0ZSBhcnJheSB3aXRoIHBzZXVkb3JhbmRvbQotICogaW50ZWdl cnMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW5fcmFuZF9hbGwoc2ZtdF90ICpjdHgpIHsK LSAgICBpbnQgaTsKLSAgICB3MTI4X3QgKnIxLCAqcjI7Ci0KLSAgICByMSA9ICZjdHgtPnNmbXRb TiAtIDJdOwotICAgIHIyID0gJmN0eC0+c2ZtdFtOIC0gMV07Ci0gICAgZm9yIChpID0gMDsgaSA8 IE4gLSBQT1MxOyBpKyspIHsKLQlkb19yZWN1cnNpb24oJmN0eC0+c2ZtdFtpXSwgJmN0eC0+c2Zt dFtpXSwgJmN0eC0+c2ZtdFtpICsgUE9TMV0sIHIxLAotCSAgcjIpOwotCXIxID0gcjI7Ci0JcjIg PSAmY3R4LT5zZm10W2ldOwotICAgIH0KLSAgICBmb3IgKDsgaSA8IE47IGkrKykgewotCWRvX3Jl Y3Vyc2lvbigmY3R4LT5zZm10W2ldLCAmY3R4LT5zZm10W2ldLCAmY3R4LT5zZm10W2kgKyBQT1Mx IC0gTl0sIHIxLAotCSAgcjIpOwotCXIxID0gcjI7Ci0JcjIgPSAmY3R4LT5zZm10W2ldOwotICAg IH0KLX0KLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSB1c2VyLXNwZWNpZmllZCBh cnJheSB3aXRoIHBzZXVkb3JhbmRvbQotICogaW50ZWdlcnMuCi0gKgotICogQHBhcmFtIGFycmF5 IGFuIDEyOC1iaXQgYXJyYXkgdG8gYmUgZmlsbGVkIGJ5IHBzZXVkb3JhbmRvbSBudW1iZXJzLgot ICogQHBhcmFtIHNpemUgbnVtYmVyIG9mIDEyOC1iaXQgcHNldWRvcmFuZG9tIG51bWJlcnMgdG8g YmUgZ2VuZXJhdGVkLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuX3JhbmRfYXJyYXkoc2Zt dF90ICpjdHgsIHcxMjhfdCAqYXJyYXksIGludCBzaXplKSB7Ci0gICAgaW50IGksIGo7Ci0gICAg dzEyOF90ICpyMSwgKnIyOwotCi0gICAgcjEgPSAmY3R4LT5zZm10W04gLSAyXTsKLSAgICByMiA9 ICZjdHgtPnNmbXRbTiAtIDFdOwotICAgIGZvciAoaSA9IDA7IGkgPCBOIC0gUE9TMTsgaSsrKSB7 Ci0JZG9fcmVjdXJzaW9uKCZhcnJheVtpXSwgJmN0eC0+c2ZtdFtpXSwgJmN0eC0+c2ZtdFtpICsg UE9TMV0sIHIxLCByMik7Ci0JcjEgPSByMjsKLQlyMiA9ICZhcnJheVtpXTsKLSAgICB9Ci0gICAg Zm9yICg7IGkgPCBOOyBpKyspIHsKLQlkb19yZWN1cnNpb24oJmFycmF5W2ldLCAmY3R4LT5zZm10 W2ldLCAmYXJyYXlbaSArIFBPUzEgLSBOXSwgcjEsIHIyKTsKLQlyMSA9IHIyOwotCXIyID0gJmFy cmF5W2ldOwotICAgIH0KLSAgICBmb3IgKDsgaSA8IHNpemUgLSBOOyBpKyspIHsKLQlkb19yZWN1 cnNpb24oJmFycmF5W2ldLCAmYXJyYXlbaSAtIE5dLCAmYXJyYXlbaSArIFBPUzEgLSBOXSwgcjEs IHIyKTsKLQlyMSA9IHIyOwotCXIyID0gJmFycmF5W2ldOwotICAgIH0KLSAgICBmb3IgKGogPSAw OyBqIDwgMiAqIE4gLSBzaXplOyBqKyspIHsKLQljdHgtPnNmbXRbal0gPSBhcnJheVtqICsgc2l6 ZSAtIE5dOwotICAgIH0KLSAgICBmb3IgKDsgaSA8IHNpemU7IGkrKywgaisrKSB7Ci0JZG9fcmVj dXJzaW9uKCZhcnJheVtpXSwgJmFycmF5W2kgLSBOXSwgJmFycmF5W2kgKyBQT1MxIC0gTl0sIHIx LCByMik7Ci0JcjEgPSByMjsKLQlyMiA9ICZhcnJheVtpXTsKLQljdHgtPnNmbXRbal0gPSBhcnJh eVtpXTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQklHX0VORElBTjY0KSAmJiAh ZGVmaW5lZChPTkxZNjQpICYmICFkZWZpbmVkKEhBVkVfQUxUSVZFQykKLXN0YXRpYyBpbmxpbmUg dm9pZCBzd2FwKHcxMjhfdCAqYXJyYXksIGludCBzaXplKSB7Ci0gICAgaW50IGk7Ci0gICAgdWlu dDMyX3QgeCwgeTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQl4ID0gYXJy YXlbaV0udVswXTsKLQl5ID0gYXJyYXlbaV0udVsyXTsKLQlhcnJheVtpXS51WzBdID0gYXJyYXlb aV0udVsxXTsKLQlhcnJheVtpXS51WzJdID0gYXJyYXlbaV0udVszXTsKLQlhcnJheVtpXS51WzFd ID0geDsKLQlhcnJheVtpXS51WzNdID0geTsKLSAgICB9Ci19Ci0jZW5kaWYKLS8qKgotICogVGhp cyBmdW5jdGlvbiByZXByZXNlbnRzIGEgZnVuY3Rpb24gdXNlZCBpbiB0aGUgaW5pdGlhbGl6YXRp b24KLSAqIGJ5IGluaXRfYnlfYXJyYXkKLSAqIEBwYXJhbSB4IDMyLWJpdCBpbnRlZ2VyCi0gKiBA cmV0dXJuIDMyLWJpdCBpbnRlZ2VyCi0gKi8KLXN0YXRpYyB1aW50MzJfdCBmdW5jMSh1aW50MzJf dCB4KSB7Ci0gICAgcmV0dXJuICh4IF4gKHggPj4gMjcpKSAqICh1aW50MzJfdCkxNjY0NTI1VUw7 Ci19Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiByZXByZXNlbnRzIGEgZnVuY3Rpb24gdXNlZCBp biB0aGUgaW5pdGlhbGl6YXRpb24KLSAqIGJ5IGluaXRfYnlfYXJyYXkKLSAqIEBwYXJhbSB4IDMy LWJpdCBpbnRlZ2VyCi0gKiBAcmV0dXJuIDMyLWJpdCBpbnRlZ2VyCi0gKi8KLXN0YXRpYyB1aW50 MzJfdCBmdW5jMih1aW50MzJfdCB4KSB7Ci0gICAgcmV0dXJuICh4IF4gKHggPj4gMjcpKSAqICh1 aW50MzJfdCkxNTY2MDgzOTQxVUw7Ci19Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBjZXJ0aWZp Y2F0ZSB0aGUgcGVyaW9kIG9mIDJee01FWFB9Ci0gKi8KLXN0YXRpYyB2b2lkIHBlcmlvZF9jZXJ0 aWZpY2F0aW9uKHNmbXRfdCAqY3R4KSB7Ci0gICAgaW50IGlubmVyID0gMDsKLSAgICBpbnQgaSwg ajsKLSAgICB1aW50MzJfdCB3b3JrOwotICAgIHVpbnQzMl90ICpwc2ZtdDMyID0gJmN0eC0+c2Zt dFswXS51WzBdOwotCi0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLQlpbm5lciBePSBwc2Zt dDMyW2lkeG9mKGkpXSAmIHBhcml0eVtpXTsKLSAgICBmb3IgKGkgPSAxNjsgaSA+IDA7IGkgPj49 IDEpCi0JaW5uZXIgXj0gaW5uZXIgPj4gaTsKLSAgICBpbm5lciAmPSAxOwotICAgIC8qIGNoZWNr IE9LICovCi0gICAgaWYgKGlubmVyID09IDEpIHsKLQlyZXR1cm47Ci0gICAgfQotICAgIC8qIGNo ZWNrIE5HLCBhbmQgbW9kaWZpY2F0aW9uICovCi0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ewotCXdvcmsgPSAxOwotCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JICAgIGlmICgod29y ayAmIHBhcml0eVtpXSkgIT0gMCkgewotCQlwc2ZtdDMyW2lkeG9mKGkpXSBePSB3b3JrOwotCQly ZXR1cm47Ci0JICAgIH0KLQkgICAgd29yayA9IHdvcmsgPDwgMTsKLQl9Ci0gICAgfQotfQotCi0v Ki0tLS0tLS0tLS0tLS0tLS0KLSAgUFVCTElDIEZVTkNUSU9OUwotICAtLS0tLS0tLS0tLS0tLS0t Ki8KLS8qKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpZGVudGlmaWNhdGlvbiBzdHJp bmcuCi0gKiBUaGUgc3RyaW5nIHNob3dzIHRoZSB3b3JkIHNpemUsIHRoZSBNZXJzZW5uZSBleHBv bmVudCwKLSAqIGFuZCBhbGwgcGFyYW1ldGVycyBvZiB0aGlzIGdlbmVyYXRvci4KLSAqLwotY29u c3QgY2hhciAqZ2V0X2lkc3RyaW5nKHZvaWQpIHsKLSAgICByZXR1cm4gSURTVFI7Ci19Ci0KLS8q KgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtaW5pbXVtIHNpemUgb2YgYXJyYXkgdXNl ZCBmb3IgXGIKLSAqIGZpbGxfYXJyYXkzMigpIGZ1bmN0aW9uLgotICogQHJldHVybiBtaW5pbXVt IHNpemUgb2YgYXJyYXkgdXNlZCBmb3IgZmlsbF9hcnJheTMyKCkgZnVuY3Rpb24uCi0gKi8KLWlu dCBnZXRfbWluX2FycmF5X3NpemUzMih2b2lkKSB7Ci0gICAgcmV0dXJuIE4zMjsKLX0KLQotLyoq Ci0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1pbmltdW0gc2l6ZSBvZiBhcnJheSB1c2Vk IGZvciBcYgotICogZmlsbF9hcnJheTY0KCkgZnVuY3Rpb24uCi0gKiBAcmV0dXJuIG1pbmltdW0g c2l6ZSBvZiBhcnJheSB1c2VkIGZvciBmaWxsX2FycmF5NjQoKSBmdW5jdGlvbi4KLSAqLwotaW50 IGdldF9taW5fYXJyYXlfc2l6ZTY0KHZvaWQpIHsKLSAgICByZXR1cm4gTjY0OwotfQotCi0jaWZu ZGVmIE9OTFk2NAotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbmQgcmV0dXJucyAz Mi1iaXQgcHNldWRvcmFuZG9tIG51bWJlci4KLSAqIGluaXRfZ2VuX3JhbmQgb3IgaW5pdF9ieV9h cnJheSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4KLSAqIEByZXR1cm4gMzIt Yml0IHBzZXVkb3JhbmRvbSBudW1iZXIKLSAqLwotdWludDMyX3QgZ2VuX3JhbmQzMihzZm10X3Qg KmN0eCkgewotICAgIHVpbnQzMl90IHI7Ci0gICAgdWludDMyX3QgKnBzZm10MzIgPSAmY3R4LT5z Zm10WzBdLnVbMF07Ci0KLSAgICBhc3NlcnQoY3R4LT5pbml0aWFsaXplZCk7Ci0gICAgaWYgKGN0 eC0+aWR4ID49IE4zMikgewotCWdlbl9yYW5kX2FsbChjdHgpOwotCWN0eC0+aWR4ID0gMDsKLSAg ICB9Ci0gICAgciA9IHBzZm10MzJbY3R4LT5pZHgrK107Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLS8q IEdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIgaW4gWzAuLmxpbWl0KS4gKi8KLXVpbnQzMl90IGdl bl9yYW5kMzJfcmFuZ2Uoc2ZtdF90ICpjdHgsIHVpbnQzMl90IGxpbWl0KSB7Ci0gICAgdWludDMy X3QgcmV0LCBhYm92ZTsKLQotICAgIGFib3ZlID0gMHhmZmZmZmZmZlUgLSAoMHhmZmZmZmZmZlUg JSBsaW1pdCk7Ci0gICAgd2hpbGUgKDEpIHsKLQlyZXQgPSBnZW5fcmFuZDMyKGN0eCk7Ci0JaWYg KHJldCA8IGFib3ZlKSB7Ci0JICAgIHJldCAlPSBsaW1pdDsKLQkgICAgYnJlYWs7Ci0JfQotICAg IH0KLSAgICByZXR1cm4gcmV0OwotfQotI2VuZGlmCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gZ2Vu ZXJhdGVzIGFuZCByZXR1cm5zIDY0LWJpdCBwc2V1ZG9yYW5kb20gbnVtYmVyLgotICogaW5pdF9n ZW5fcmFuZCBvciBpbml0X2J5X2FycmF5IG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0 aW9uLgotICogVGhlIGZ1bmN0aW9uIGdlbl9yYW5kNjQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYWZ0 ZXIgZ2VuX3JhbmQzMiwKLSAqIHVubGVzcyBhbiBpbml0aWFsaXphdGlvbiBpcyBhZ2FpbiBleGVj dXRlZC4KLSAqIEByZXR1cm4gNjQtYml0IHBzZXVkb3JhbmRvbSBudW1iZXIKLSAqLwotdWludDY0 X3QgZ2VuX3JhbmQ2NChzZm10X3QgKmN0eCkgewotI2lmIGRlZmluZWQoQklHX0VORElBTjY0KSAm JiAhZGVmaW5lZChPTkxZNjQpCi0gICAgdWludDMyX3QgcjEsIHIyOwotICAgIHVpbnQzMl90ICpw c2ZtdDMyID0gJmN0eC0+c2ZtdFswXS51WzBdOwotI2Vsc2UKLSAgICB1aW50NjRfdCByOwotICAg IHVpbnQ2NF90ICpwc2ZtdDY0ID0gKHVpbnQ2NF90ICopJmN0eC0+c2ZtdFswXS51WzBdOwotI2Vu ZGlmCi0KLSAgICBhc3NlcnQoY3R4LT5pbml0aWFsaXplZCk7Ci0gICAgYXNzZXJ0KGN0eC0+aWR4 ICUgMiA9PSAwKTsKLQotICAgIGlmIChjdHgtPmlkeCA+PSBOMzIpIHsKLQlnZW5fcmFuZF9hbGwo Y3R4KTsKLQljdHgtPmlkeCA9IDA7Ci0gICAgfQotI2lmIGRlZmluZWQoQklHX0VORElBTjY0KSAm JiAhZGVmaW5lZChPTkxZNjQpCi0gICAgcjEgPSBwc2ZtdDMyW2N0eC0+aWR4XTsKLSAgICByMiA9 IHBzZm10MzJbY3R4LT5pZHggKyAxXTsKLSAgICBjdHgtPmlkeCArPSAyOwotICAgIHJldHVybiAo KHVpbnQ2NF90KXIyIDw8IDMyKSB8IHIxOwotI2Vsc2UKLSAgICByID0gcHNmbXQ2NFtjdHgtPmlk eCAvIDJdOwotICAgIGN0eC0+aWR4ICs9IDI7Ci0gICAgcmV0dXJuIHI7Ci0jZW5kaWYKLX0KLQot LyogR2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBpbiBbMC4ubGltaXQpLiAqLwotdWludDY0X3Qg Z2VuX3JhbmQ2NF9yYW5nZShzZm10X3QgKmN0eCwgdWludDY0X3QgbGltaXQpIHsKLSAgICB1aW50 NjRfdCByZXQsIGFib3ZlOwotCi0gICAgYWJvdmUgPSBLUVUoMHhmZmZmZmZmZmZmZmZmZmZmKSAt IChLUVUoMHhmZmZmZmZmZmZmZmZmZmZmKSAlIGxpbWl0KTsKLSAgICB3aGlsZSAoMSkgewotCXJl dCA9IGdlbl9yYW5kNjQoY3R4KTsKLQlpZiAocmV0IDwgYWJvdmUpIHsKLQkgICAgcmV0ICU9IGxp bWl0OwotCSAgICBicmVhazsKLQl9Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLSNpZm5k ZWYgT05MWTY0Ci0vKioKLSAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHBzZXVkb3JhbmRvbSAz Mi1iaXQgaW50ZWdlcnMgaW4gdGhlCi0gKiBzcGVjaWZpZWQgYXJyYXlbXSBieSBvbmUgY2FsbC4g VGhlIG51bWJlciBvZiBwc2V1ZG9yYW5kb20gaW50ZWdlcnMKLSAqIGlzIHNwZWNpZmllZCBieSB0 aGUgYXJndW1lbnQgc2l6ZSwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCA2MjQgYW5kIGEKLSAqIG11 bHRpcGxlIG9mIGZvdXIuICBUaGUgZ2VuZXJhdGlvbiBieSB0aGlzIGZ1bmN0aW9uIGlzIG11Y2gg ZmFzdGVyCi0gKiB0aGFuIHRoZSBmb2xsb3dpbmcgZ2VuX3JhbmQgZnVuY3Rpb24uCi0gKgotICog Rm9yIGluaXRpYWxpemF0aW9uLCBpbml0X2dlbl9yYW5kIG9yIGluaXRfYnlfYXJyYXkgbXVzdCBi ZSBjYWxsZWQKLSAqIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLiBUaGlz IGZ1bmN0aW9uIGNhbiBub3QgYmUKLSAqIHVzZWQgYWZ0ZXIgY2FsbGluZyBnZW5fcmFuZCBmdW5j dGlvbiwgd2l0aG91dCBpbml0aWFsaXphdGlvbi4KLSAqCi0gKiBAcGFyYW0gYXJyYXkgYW4gYXJy YXkgd2hlcmUgcHNldWRvcmFuZG9tIDMyLWJpdCBpbnRlZ2VycyBhcmUgZmlsbGVkCi0gKiBieSB0 aGlzIGZ1bmN0aW9uLiAgVGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IG11c3QgYmUgXGIgImFsaWdu ZWQiCi0gKiAobmFtZWx5LCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYpIGluIHRoZSBTSU1EIHZl cnNpb24sIHNpbmNlIGl0Ci0gKiByZWZlcnMgdG8gdGhlIGFkZHJlc3Mgb2YgYSAxMjgtYml0IGlu dGVnZXIuICBJbiB0aGUgc3RhbmRhcmQgQwotICogdmVyc2lvbiwgdGhlIHBvaW50ZXIgaXMgYXJi aXRyYXJ5LgotICoKLSAqIEBwYXJhbSBzaXplIHRoZSBudW1iZXIgb2YgMzItYml0IHBzZXVkb3Jh bmRvbSBpbnRlZ2VycyB0byBiZQotICogZ2VuZXJhdGVkLiAgc2l6ZSBtdXN0IGJlIGEgbXVsdGlw bGUgb2YgNCwgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbAotICogdG8gKE1FWFAgLyAxMjggKyAx KSAqIDQuCi0gKgotICogQG5vdGUgXGIgbWVtYWxpZ24gb3IgXGIgcG9zaXhfbWVtYWxpZ24gaXMg YXZhaWxhYmxlIHRvIGdldCBhbGlnbmVkCi0gKiBtZW1vcnkuIE1hYyBPU1ggZG9lc24ndCBoYXZl IHRoZXNlIGZ1bmN0aW9ucywgYnV0IFxiIG1hbGxvYyBvZiBPU1gKLSAqIHJldHVybnMgdGhlIHBv aW50ZXIgdG8gdGhlIGFsaWduZWQgbWVtb3J5IGJsb2NrLgotICovCi12b2lkIGZpbGxfYXJyYXkz MihzZm10X3QgKmN0eCwgdWludDMyX3QgKmFycmF5LCBpbnQgc2l6ZSkgewotICAgIGFzc2VydChj dHgtPmluaXRpYWxpemVkKTsKLSAgICBhc3NlcnQoY3R4LT5pZHggPT0gTjMyKTsKLSAgICBhc3Nl cnQoc2l6ZSAlIDQgPT0gMCk7Ci0gICAgYXNzZXJ0KHNpemUgPj0gTjMyKTsKLQotICAgIGdlbl9y YW5kX2FycmF5KGN0eCwgKHcxMjhfdCAqKWFycmF5LCBzaXplIC8gNCk7Ci0gICAgY3R4LT5pZHgg PSBOMzI7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBwc2V1 ZG9yYW5kb20gNjQtYml0IGludGVnZXJzIGluIHRoZQotICogc3BlY2lmaWVkIGFycmF5W10gYnkg b25lIGNhbGwuIFRoZSBudW1iZXIgb2YgcHNldWRvcmFuZG9tIGludGVnZXJzCi0gKiBpcyBzcGVj aWZpZWQgYnkgdGhlIGFyZ3VtZW50IHNpemUsIHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgMzEyIGFu ZCBhCi0gKiBtdWx0aXBsZSBvZiB0d28uICBUaGUgZ2VuZXJhdGlvbiBieSB0aGlzIGZ1bmN0aW9u IGlzIG11Y2ggZmFzdGVyCi0gKiB0aGFuIHRoZSBmb2xsb3dpbmcgZ2VuX3JhbmQgZnVuY3Rpb24u Ci0gKgotICogRm9yIGluaXRpYWxpemF0aW9uLCBpbml0X2dlbl9yYW5kIG9yIGluaXRfYnlfYXJy YXkgbXVzdCBiZSBjYWxsZWQKLSAqIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCBvZiB0aGlzIGZ1bmN0 aW9uLiBUaGlzIGZ1bmN0aW9uIGNhbiBub3QgYmUKLSAqIHVzZWQgYWZ0ZXIgY2FsbGluZyBnZW5f cmFuZCBmdW5jdGlvbiwgd2l0aG91dCBpbml0aWFsaXphdGlvbi4KLSAqCi0gKiBAcGFyYW0gYXJy YXkgYW4gYXJyYXkgd2hlcmUgcHNldWRvcmFuZG9tIDY0LWJpdCBpbnRlZ2VycyBhcmUgZmlsbGVk Ci0gKiBieSB0aGlzIGZ1bmN0aW9uLiAgVGhlIHBvaW50ZXIgdG8gdGhlIGFycmF5IG11c3QgYmUg ImFsaWduZWQiCi0gKiAobmFtZWx5LCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYpIGluIHRoZSBT SU1EIHZlcnNpb24sIHNpbmNlIGl0Ci0gKiByZWZlcnMgdG8gdGhlIGFkZHJlc3Mgb2YgYSAxMjgt Yml0IGludGVnZXIuICBJbiB0aGUgc3RhbmRhcmQgQwotICogdmVyc2lvbiwgdGhlIHBvaW50ZXIg aXMgYXJiaXRyYXJ5LgotICoKLSAqIEBwYXJhbSBzaXplIHRoZSBudW1iZXIgb2YgNjQtYml0IHBz ZXVkb3JhbmRvbSBpbnRlZ2VycyB0byBiZQotICogZ2VuZXJhdGVkLiAgc2l6ZSBtdXN0IGJlIGEg bXVsdGlwbGUgb2YgMiwgYW5kIGdyZWF0ZXIgdGhhbiBvciBlcXVhbAotICogdG8gKE1FWFAgLyAx MjggKyAxKSAqIDIKLSAqCi0gKiBAbm90ZSBcYiBtZW1hbGlnbiBvciBcYiBwb3NpeF9tZW1hbGln biBpcyBhdmFpbGFibGUgdG8gZ2V0IGFsaWduZWQKLSAqIG1lbW9yeS4gTWFjIE9TWCBkb2Vzbid0 IGhhdmUgdGhlc2UgZnVuY3Rpb25zLCBidXQgXGIgbWFsbG9jIG9mIE9TWAotICogcmV0dXJucyB0 aGUgcG9pbnRlciB0byB0aGUgYWxpZ25lZCBtZW1vcnkgYmxvY2suCi0gKi8KLXZvaWQgZmlsbF9h cnJheTY0KHNmbXRfdCAqY3R4LCB1aW50NjRfdCAqYXJyYXksIGludCBzaXplKSB7Ci0gICAgYXNz ZXJ0KGN0eC0+aW5pdGlhbGl6ZWQpOwotICAgIGFzc2VydChjdHgtPmlkeCA9PSBOMzIpOwotICAg IGFzc2VydChzaXplICUgMiA9PSAwKTsKLSAgICBhc3NlcnQoc2l6ZSA+PSBONjQpOwotCi0gICAg Z2VuX3JhbmRfYXJyYXkoY3R4LCAodzEyOF90ICopYXJyYXksIHNpemUgLyAyKTsKLSAgICBjdHgt PmlkeCA9IE4zMjsKLQotI2lmIGRlZmluZWQoQklHX0VORElBTjY0KSAmJiAhZGVmaW5lZChPTkxZ NjQpCi0gICAgc3dhcCgodzEyOF90ICopYXJyYXksIHNpemUgLzIpOwotI2VuZGlmCi19Ci0KLS8q KgotICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RhdGUgYXJyYXkg d2l0aCBhIDMyLWJpdAotICogaW50ZWdlciBzZWVkLgotICoKLSAqIEBwYXJhbSBzZWVkIGEgMzIt Yml0IGludGVnZXIgdXNlZCBhcyB0aGUgc2VlZC4KLSAqLwotc2ZtdF90ICppbml0X2dlbl9yYW5k KHVpbnQzMl90IHNlZWQpIHsKLSAgICB2b2lkICpwOwotICAgIHNmbXRfdCAqY3R4OwotICAgIGlu dCBpOwotICAgIHVpbnQzMl90ICpwc2ZtdDMyOwotCi0gICAgaWYgKHBvc2l4X21lbWFsaWduKCZw LCBzaXplb2YodzEyOF90KSwgc2l6ZW9mKHNmbXRfdCkpICE9IDApIHsKLQlyZXR1cm4gTlVMTDsK LSAgICB9Ci0gICAgY3R4ID0gKHNmbXRfdCAqKXA7Ci0gICAgcHNmbXQzMiA9ICZjdHgtPnNmbXRb MF0udVswXTsKLQotICAgIHBzZm10MzJbaWR4b2YoMCldID0gc2VlZDsKLSAgICBmb3IgKGkgPSAx OyBpIDwgTjMyOyBpKyspIHsKLQlwc2ZtdDMyW2lkeG9mKGkpXSA9IDE4MTI0MzMyNTNVTCAqIChw c2ZtdDMyW2lkeG9mKGkgLSAxKV0KLQkJCQkJICAgIF4gKHBzZm10MzJbaWR4b2YoaSAtIDEpXSA+ PiAzMCkpCi0JICAgICsgaTsKLSAgICB9Ci0gICAgY3R4LT5pZHggPSBOMzI7Ci0gICAgcGVyaW9k X2NlcnRpZmljYXRpb24oY3R4KTsKLSAgICBjdHgtPmluaXRpYWxpemVkID0gMTsKLQotICAgIHJl dHVybiBjdHg7Ci19Ci0KLS8qKgotICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgaW50 ZXJuYWwgc3RhdGUgYXJyYXksCi0gKiB3aXRoIGFuIGFycmF5IG9mIDMyLWJpdCBpbnRlZ2VycyB1 c2VkIGFzIHRoZSBzZWVkcwotICogQHBhcmFtIGluaXRfa2V5IHRoZSBhcnJheSBvZiAzMi1iaXQg aW50ZWdlcnMsIHVzZWQgYXMgYSBzZWVkLgotICogQHBhcmFtIGtleV9sZW5ndGggdGhlIGxlbmd0 aCBvZiBpbml0X2tleS4KLSAqLwotc2ZtdF90ICppbml0X2J5X2FycmF5KHVpbnQzMl90ICppbml0 X2tleSwgaW50IGtleV9sZW5ndGgpIHsKLSAgICB2b2lkICpwOwotICAgIHNmbXRfdCAqY3R4Owot ICAgIGludCBpLCBqLCBjb3VudDsKLSAgICB1aW50MzJfdCByOwotICAgIGludCBsYWc7Ci0gICAg aW50IG1pZDsKLSAgICBpbnQgc2l6ZSA9IE4gKiA0OwotICAgIHVpbnQzMl90ICpwc2ZtdDMyOwot Ci0gICAgaWYgKHBvc2l4X21lbWFsaWduKCZwLCBzaXplb2YodzEyOF90KSwgc2l6ZW9mKHNmbXRf dCkpICE9IDApIHsKLQlyZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgY3R4ID0gKHNmbXRfdCAqKXA7 Ci0gICAgcHNmbXQzMiA9ICZjdHgtPnNmbXRbMF0udVswXTsKLQotICAgIGlmIChzaXplID49IDYy MykgewotCWxhZyA9IDExOwotICAgIH0gZWxzZSBpZiAoc2l6ZSA+PSA2OCkgewotCWxhZyA9IDc7 Ci0gICAgfSBlbHNlIGlmIChzaXplID49IDM5KSB7Ci0JbGFnID0gNTsKLSAgICB9IGVsc2Ugewot CWxhZyA9IDM7Ci0gICAgfQotICAgIG1pZCA9IChzaXplIC0gbGFnKSAvIDI7Ci0KLSAgICBtZW1z ZXQoY3R4LT5zZm10LCAweDhiLCBzaXplb2YoY3R4LT5zZm10KSk7Ci0gICAgaWYgKGtleV9sZW5n dGggKyAxID4gTjMyKSB7Ci0JY291bnQgPSBrZXlfbGVuZ3RoICsgMTsKLSAgICB9IGVsc2Ugewot CWNvdW50ID0gTjMyOwotICAgIH0KLSAgICByID0gZnVuYzEocHNmbXQzMltpZHhvZigwKV0gXiBw c2ZtdDMyW2lkeG9mKG1pZCldCi0JICAgICAgXiBwc2ZtdDMyW2lkeG9mKE4zMiAtIDEpXSk7Ci0g ICAgcHNmbXQzMltpZHhvZihtaWQpXSArPSByOwotICAgIHIgKz0ga2V5X2xlbmd0aDsKLSAgICBw c2ZtdDMyW2lkeG9mKG1pZCArIGxhZyldICs9IHI7Ci0gICAgcHNmbXQzMltpZHhvZigwKV0gPSBy OwotCi0gICAgY291bnQtLTsKLSAgICBmb3IgKGkgPSAxLCBqID0gMDsgKGogPCBjb3VudCkgJiYg KGogPCBrZXlfbGVuZ3RoKTsgaisrKSB7Ci0JciA9IGZ1bmMxKHBzZm10MzJbaWR4b2YoaSldIF4g cHNmbXQzMltpZHhvZigoaSArIG1pZCkgJSBOMzIpXQotCQkgIF4gcHNmbXQzMltpZHhvZigoaSAr IE4zMiAtIDEpICUgTjMyKV0pOwotCXBzZm10MzJbaWR4b2YoKGkgKyBtaWQpICUgTjMyKV0gKz0g cjsKLQlyICs9IGluaXRfa2V5W2pdICsgaTsKLQlwc2ZtdDMyW2lkeG9mKChpICsgbWlkICsgbGFn KSAlIE4zMildICs9IHI7Ci0JcHNmbXQzMltpZHhvZihpKV0gPSByOwotCWkgPSAoaSArIDEpICUg TjMyOwotICAgIH0KLSAgICBmb3IgKDsgaiA8IGNvdW50OyBqKyspIHsKLQlyID0gZnVuYzEocHNm bXQzMltpZHhvZihpKV0gXiBwc2ZtdDMyW2lkeG9mKChpICsgbWlkKSAlIE4zMildCi0JCSAgXiBw c2ZtdDMyW2lkeG9mKChpICsgTjMyIC0gMSkgJSBOMzIpXSk7Ci0JcHNmbXQzMltpZHhvZigoaSAr IG1pZCkgJSBOMzIpXSArPSByOwotCXIgKz0gaTsKLQlwc2ZtdDMyW2lkeG9mKChpICsgbWlkICsg bGFnKSAlIE4zMildICs9IHI7Ci0JcHNmbXQzMltpZHhvZihpKV0gPSByOwotCWkgPSAoaSArIDEp ICUgTjMyOwotICAgIH0KLSAgICBmb3IgKGogPSAwOyBqIDwgTjMyOyBqKyspIHsKLQlyID0gZnVu YzIocHNmbXQzMltpZHhvZihpKV0gKyBwc2ZtdDMyW2lkeG9mKChpICsgbWlkKSAlIE4zMildCi0J CSAgKyBwc2ZtdDMyW2lkeG9mKChpICsgTjMyIC0gMSkgJSBOMzIpXSk7Ci0JcHNmbXQzMltpZHhv ZigoaSArIG1pZCkgJSBOMzIpXSBePSByOwotCXIgLT0gaTsKLQlwc2ZtdDMyW2lkeG9mKChpICsg bWlkICsgbGFnKSAlIE4zMildIF49IHI7Ci0JcHNmbXQzMltpZHhvZihpKV0gPSByOwotCWkgPSAo aSArIDEpICUgTjMyOwotICAgIH0KLQotICAgIGN0eC0+aWR4ID0gTjMyOwotICAgIHBlcmlvZF9j ZXJ0aWZpY2F0aW9uKGN0eCk7Ci0gICAgY3R4LT5pbml0aWFsaXplZCA9IDE7Ci0KLSAgICByZXR1 cm4gY3R4OwotfQotCi12b2lkIGZpbmlfZ2VuX3JhbmQoc2ZtdF90ICpjdHgpIHsKLSAgICBhc3Nl cnQoY3R4ICE9IE5VTEwpOwotCi0gICAgY3R4LT5pbml0aWFsaXplZCA9IDA7Ci0gICAgZnJlZShj dHgpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3Qvc3JjL2J0YWxsb2MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3Qvc3JjL2J0YWxsb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ZDU3MDk1Mi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3NyYy9idGFsbG9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotdm9pZCAqCi1idGFsbG9jKHNpemVfdCBz aXplLCB1bnNpZ25lZCBiaXRzKSB7Ci0JcmV0dXJuIGJ0YWxsb2NfMChzaXplLCBiaXRzKTsKLX0K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3NyYy9idGFsbG9jXzAuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3Qvc3JjL2J0YWxsb2NfMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2Q4 OTA0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3Qvc3JjL2J0YWxsb2NfMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jaW5j bHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLWJ0YWxsb2Nfbl9nZW4oMCkKCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9idGFs bG9jXzEuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3Jj L2J0YWxsb2NfMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzEyNmMzLi4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3Jj L2J0YWxsb2NfMS5jCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jaW5jbHVkZSAidGVz dC9qZW1hbGxvY190ZXN0LmgiCi0KLWJ0YWxsb2Nfbl9nZW4oMSkKCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9tYXRoLmMgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9tYXRoLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NThjNjcuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvbWF0aC5jCisrKyAvZGV2L251 bGwKQEAgLTEsMiArMCwwIEBACi0jZGVmaW5lIE1BVEhfQ18KLSNpbmNsdWRlICJ0ZXN0L2plbWFs bG9jX3Rlc3QuaCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3NyYy9tdHguYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3Qvc3JjL210eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWNl Mzc1Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3Qvc3JjL210eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotI2luY2x1ZGUg InRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaWZuZGVmIF9DUlRfU1BJTkNPVU5UCi0jZGVmaW5l IF9DUlRfU1BJTkNPVU5UIDQwMDAKLSNlbmRpZgotCi1ib29sCi1tdHhfaW5pdChtdHhfdCAqbXR4 KSB7Ci0jaWZkZWYgX1dJTjMyCi0JaWYgKCFJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uQW5kU3Bp bkNvdW50KCZtdHgtPmxvY2ssCi0JICAgIF9DUlRfU1BJTkNPVU5UKSkgewotCQlyZXR1cm4gdHJ1 ZTsKLQl9Ci0jZWxpZiAoZGVmaW5lZChKRU1BTExPQ19PU19VTkZBSVJfTE9DSykpCi0JbXR4LT5s b2NrID0gT1NfVU5GQUlSX0xPQ0tfSU5JVDsKLSNlbHNlCi0JcHRocmVhZF9tdXRleGF0dHJfdCBh dHRyOwotCi0JaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpICE9IDApIHsKLQkJcmV0 dXJuIHRydWU7Ci0JfQotCXB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURf TVVURVhfREVGQVVMVCk7Ci0JaWYgKHB0aHJlYWRfbXV0ZXhfaW5pdCgmbXR4LT5sb2NrLCAmYXR0 cikgIT0gMCkgewotCQlwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhdHRyKTsKLQkJcmV0dXJu IHRydWU7Ci0JfQotCXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpOwotI2VuZGlmCi0J cmV0dXJuIGZhbHNlOwotfQotCi12b2lkCi1tdHhfZmluaShtdHhfdCAqbXR4KSB7Ci0jaWZkZWYg X1dJTjMyCi0jZWxpZiAoZGVmaW5lZChKRU1BTExPQ19PU19VTkZBSVJfTE9DSykpCi0jZWxzZQot CXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbXR4LT5sb2NrKTsKLSNlbmRpZgotfQotCi12b2lkCi1t dHhfbG9jayhtdHhfdCAqbXR4KSB7Ci0jaWZkZWYgX1dJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rp b24oJm10eC0+bG9jayk7Ci0jZWxpZiAoZGVmaW5lZChKRU1BTExPQ19PU19VTkZBSVJfTE9DSykp Ci0Jb3NfdW5mYWlyX2xvY2tfbG9jaygmbXR4LT5sb2NrKTsKLSNlbHNlCi0JcHRocmVhZF9tdXRl eF9sb2NrKCZtdHgtPmxvY2spOwotI2VuZGlmCi19Ci0KLXZvaWQKLW10eF91bmxvY2sobXR4X3Qg Km10eCkgewotI2lmZGVmIF9XSU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZtdHgtPmxvY2sp OwotI2VsaWYgKGRlZmluZWQoSkVNQUxMT0NfT1NfVU5GQUlSX0xPQ0spKQotCW9zX3VuZmFpcl9s b2NrX3VubG9jaygmbXR4LT5sb2NrKTsKLSNlbHNlCi0JcHRocmVhZF9tdXRleF91bmxvY2soJm10 eC0+bG9jayk7Ci0jZW5kaWYKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9zbGVlcC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvc2xlZXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMjIzNGI0Yi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L3NyYy9zbGVlcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAs MCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0vKgotICogU2xlZXAgZm9y IGFwcHJveGltYXRlbHkgbnMgbmFub3NlY29uZHMuICBObyBsb3dlciAqbm9yKiB1cHBlciBib3Vu ZCBvbiBzbGVlcAotICogdGltZSBpcyBndWFyYW50ZWVkLgotICovCi12b2lkCi1zbGVlcF9ucyh1 bnNpZ25lZCBucykgewotCWFzc2VydChucyA8PSAxMDAwKjEwMDAqMTAwMCk7Ci0KLSNpZmRlZiBf V0lOMzIKLQlTbGVlcChucyAvIDEwMDAgLyAxMDAwKTsKLSNlbHNlCi0JewotCQlzdHJ1Y3QgdGlt ZXNwZWMgdGltZW91dDsKLQotCQlpZiAobnMgPCAxMDAwKjEwMDAqMTAwMCkgewotCQkJdGltZW91 dC50dl9zZWMgPSAwOwotCQkJdGltZW91dC50dl9uc2VjID0gbnM7Ci0JCX0gZWxzZSB7Ci0JCQl0 aW1lb3V0LnR2X3NlYyA9IDE7Ci0JCQl0aW1lb3V0LnR2X25zZWMgPSAwOwotCQl9Ci0JCW5hbm9z bGVlcCgmdGltZW91dCwgTlVMTCk7Ci0JfQotI2VuZGlmCi19CgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvdGVzdC5jIGIvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvdGVzdC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Q4MDNlLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL3Rlc3QuYworKysgL2Rldi9udWxs CkBAIC0xLDIzNCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLS8q IFRlc3Qgc3RhdHVzIHN0YXRlLiAqLwotCi1zdGF0aWMgdW5zaWduZWQJCXRlc3RfY291bnQgPSAw Owotc3RhdGljIHRlc3Rfc3RhdHVzX3QJdGVzdF9jb3VudHNbdGVzdF9zdGF0dXNfY291bnRdID0g ezAsIDAsIDB9Owotc3RhdGljIHRlc3Rfc3RhdHVzX3QJdGVzdF9zdGF0dXMgPSB0ZXN0X3N0YXR1 c19wYXNzOwotc3RhdGljIGNvbnN0IGNoYXIgKgl0ZXN0X25hbWUgPSAiIjsKLQotLyogUmVlbnRy YW5jeSB0ZXN0aW5nIGhlbHBlcnMuICovCi0KLSNkZWZpbmUgTlVNX1JFRU5UUkFOVF9BTExPQ1Mg MjAKLXR5cGVkZWYgZW51bSB7Ci0Jbm9uX3JlZW50cmFudCA9IDAsCi0JbGliY19yZWVudHJhbnQg PSAxLAotCWFyZW5hX25ld19yZWVudHJhbnQgPSAyCi19IHJlZW50cmFuY3lfdDsKLXN0YXRpYyBy ZWVudHJhbmN5X3QgcmVlbnRyYW5jeTsKLQotc3RhdGljIGJvb2wgbGliY19ob29rX3JhbiA9IGZh bHNlOwotc3RhdGljIGJvb2wgYXJlbmFfbmV3X2hvb2tfcmFuID0gZmFsc2U7Ci0KLXN0YXRpYyBj b25zdCBjaGFyICoKLXJlZW50cmFuY3lfdF9zdHIocmVlbnRyYW5jeV90IHIpIHsKLQlzd2l0Y2gg KHIpIHsKLQljYXNlIG5vbl9yZWVudHJhbnQ6Ci0JCXJldHVybiAibm9uLXJlZW50cmFudCI7Ci0J Y2FzZSBsaWJjX3JlZW50cmFudDoKLQkJcmV0dXJuICJsaWJjLXJlZW50cmFudCI7Ci0JY2FzZSBh cmVuYV9uZXdfcmVlbnRyYW50OgotCQlyZXR1cm4gImFyZW5hX25ldy1yZWVudHJhbnQiOwotCWRl ZmF1bHQ6Ci0JCXVucmVhY2hhYmxlKCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZG9faG9vayhi b29sICpob29rX3Jhbiwgdm9pZCAoKipob29rKSgpKSB7Ci0JKmhvb2tfcmFuID0gdHJ1ZTsKLQkq aG9vayA9IE5VTEw7Ci0KLQlzaXplX3QgYWxsb2Nfc2l6ZSA9IDE7Ci0JZm9yIChpbnQgaSA9IDA7 IGkgPCBOVU1fUkVFTlRSQU5UX0FMTE9DUzsgaSsrKSB7Ci0JCWZyZWUobWFsbG9jKGFsbG9jX3Np emUpKTsKLQkJYWxsb2Nfc2l6ZSAqPSAyOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWxpYmNfcmVl bnRyYW5jeV9ob29rKCkgewotCWRvX2hvb2soJmxpYmNfaG9va19yYW4sICZ0ZXN0X2hvb2tzX2xp YmNfaG9vayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hcmVuYV9uZXdfcmVlbnRyYW5jeV9ob29rKCkg ewotCWRvX2hvb2soJmFyZW5hX25ld19ob29rX3JhbiwgJnRlc3RfaG9va3NfYXJlbmFfbmV3X2hv b2spOwotfQotCi0vKiBBY3R1YWwgdGVzdCBpbmZyYXN0cnVjdHVyZS4gKi8KLWJvb2wKLXRlc3Rf aXNfcmVlbnRyYW50KCkgewotCXJldHVybiByZWVudHJhbmN5ICE9IG5vbl9yZWVudHJhbnQ7Ci19 Ci0KLUpFTUFMTE9DX0ZPUk1BVF9QUklOVEYoMSwgMikKLXZvaWQKLXRlc3Rfc2tpcChjb25zdCBj aGFyICpmb3JtYXQsIC4uLikgewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0 KTsKLQltYWxsb2NfdmNwcmludGYoTlVMTCwgTlVMTCwgZm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFw KTsKLQltYWxsb2NfcHJpbnRmKCJcbiIpOwotCXRlc3Rfc3RhdHVzID0gdGVzdF9zdGF0dXNfc2tp cDsKLX0KLQotSkVNQUxMT0NfRk9STUFUX1BSSU5URigxLCAyKQotdm9pZAotdGVzdF9mYWlsKGNv bnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBm b3JtYXQpOwotCW1hbGxvY192Y3ByaW50ZihOVUxMLCBOVUxMLCBmb3JtYXQsIGFwKTsKLQl2YV9l bmQoYXApOwotCW1hbGxvY19wcmludGYoIlxuIik7Ci0JdGVzdF9zdGF0dXMgPSB0ZXN0X3N0YXR1 c19mYWlsOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi10ZXN0X3N0YXR1c19zdHJpbmcodGVz dF9zdGF0dXNfdCBjdXJyZW50X3N0YXR1cykgewotCXN3aXRjaCAoY3VycmVudF9zdGF0dXMpIHsK LQljYXNlIHRlc3Rfc3RhdHVzX3Bhc3M6IHJldHVybiAicGFzcyI7Ci0JY2FzZSB0ZXN0X3N0YXR1 c19za2lwOiByZXR1cm4gInNraXAiOwotCWNhc2UgdGVzdF9zdGF0dXNfZmFpbDogcmV0dXJuICJm YWlsIjsKLQlkZWZhdWx0OiBub3RfcmVhY2hlZCgpOwotCX0KLX0KLQotdm9pZAotcF90ZXN0X2lu aXQoY29uc3QgY2hhciAqbmFtZSkgewotCXRlc3RfY291bnQrKzsKLQl0ZXN0X3N0YXR1cyA9IHRl c3Rfc3RhdHVzX3Bhc3M7Ci0JdGVzdF9uYW1lID0gbmFtZTsKLX0KLQotdm9pZAotcF90ZXN0X2Zp bmkodm9pZCkgewotCXRlc3RfY291bnRzW3Rlc3Rfc3RhdHVzXSsrOwotCW1hbGxvY19wcmludGYo IiVzICglcyk6ICVzXG4iLCB0ZXN0X25hbWUsIHJlZW50cmFuY3lfdF9zdHIocmVlbnRyYW5jeSks Ci0JICAgIHRlc3Rfc3RhdHVzX3N0cmluZyh0ZXN0X3N0YXR1cykpOwotfQotCi1zdGF0aWMgdm9p ZAotY2hlY2tfZ2xvYmFsX3Nsb3codGVzdF9zdGF0dXNfdCAqc3RhdHVzKSB7Ci0jaWZkZWYgSkVN QUxMT0NfVU5JVF9URVNUCi0JLyoKLQkgKiBUaGlzIGNoZWNrIG5lZWRzIHRvIHBlZWsgaW50byB0 c2QgaW50ZXJuYWxzLCB3aGljaCBpcyB3aHkgaXQncyBvbmx5Ci0JICogZXhwb3NlZCBpbiB1bml0 IHRlc3RzLgotCSAqLwotCWlmICh0c2RfZ2xvYmFsX3Nsb3coKSkgewotCQltYWxsb2NfcHJpbnRm KCJUZXN0aW5nIGluY3JlYXNlZCBnbG9iYWwgc2xvdyBjb3VudFxuIik7Ci0JCSpzdGF0dXMgPSB0 ZXN0X3N0YXR1c19mYWlsOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgdGVzdF9zdGF0dXNfdAot cF90ZXN0X2ltcGwoYm9vbCBkb19tYWxsb2NfaW5pdCwgYm9vbCBkb19yZWVudHJhbnQsIHRlc3Rf dCAqdCwgdmFfbGlzdCBhcCkgewotCXRlc3Rfc3RhdHVzX3QgcmV0OwotCi0JaWYgKGRvX21hbGxv Y19pbml0KSB7Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSBpbml0aWFsaXphdGlvbiBvY2N1cnMgcHJp b3IgdG8gcnVubmluZyB0ZXN0cy4KLQkJICogVGVzdHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB0aGV5 IG1heSB1c2UgaW50ZXJuYWwgZmFjaWxpdGllcwotCQkgKiBwcmlvciB0byB0cmlnZ2VyaW5nIGlu aXRpYWxpemF0aW9uIGFzIGEgc2lkZSBlZmZlY3Qgb2YKLQkJICogY2FsbGluZyBpbnRvIHRoZSBw dWJsaWMgQVBJLgotCQkgKi8KLQkJaWYgKG5hbGxvY3goMSwgMCkgPT0gMCkgewotCQkJbWFsbG9j X3ByaW50ZigiSW5pdGlhbGl6YXRpb24gZXJyb3IiKTsKLQkJCXJldHVybiB0ZXN0X3N0YXR1c19m YWlsOwotCQl9Ci0JfQotCi0JcmV0ID0gdGVzdF9zdGF0dXNfcGFzczsKLQlmb3IgKDsgdCAhPSBO VUxMOyB0ID0gdmFfYXJnKGFwLCB0ZXN0X3QgKikpIHsKLQkJLyogTm9uLXJlZW50cmFudCBydW4u ICovCi0JCXJlZW50cmFuY3kgPSBub25fcmVlbnRyYW50OwotCQl0ZXN0X2hvb2tzX2FyZW5hX25l d19ob29rID0gdGVzdF9ob29rc19saWJjX2hvb2sgPSBOVUxMOwotCQl0KCk7Ci0JCWlmICh0ZXN0 X3N0YXR1cyA+IHJldCkgewotCQkJcmV0ID0gdGVzdF9zdGF0dXM7Ci0JCX0KLQkJY2hlY2tfZ2xv YmFsX3Nsb3coJnJldCk7Ci0JCS8qIFJlZW50cmFudCBydW4uICovCi0JCWlmIChkb19yZWVudHJh bnQpIHsKLQkJCXJlZW50cmFuY3kgPSBsaWJjX3JlZW50cmFudDsKLQkJCXRlc3RfaG9va3NfYXJl bmFfbmV3X2hvb2sgPSBOVUxMOwotCQkJdGVzdF9ob29rc19saWJjX2hvb2sgPSAmbGliY19yZWVu dHJhbmN5X2hvb2s7Ci0JCQl0KCk7Ci0JCQlpZiAodGVzdF9zdGF0dXMgPiByZXQpIHsKLQkJCQly ZXQgPSB0ZXN0X3N0YXR1czsKLQkJCX0KLQkJCWNoZWNrX2dsb2JhbF9zbG93KCZyZXQpOwotCi0J CQlyZWVudHJhbmN5ID0gYXJlbmFfbmV3X3JlZW50cmFudDsKLQkJCXRlc3RfaG9va3NfbGliY19o b29rID0gTlVMTDsKLQkJCXRlc3RfaG9va3NfYXJlbmFfbmV3X2hvb2sgPSAmYXJlbmFfbmV3X3Jl ZW50cmFuY3lfaG9vazsKLQkJCXQoKTsKLQkJCWlmICh0ZXN0X3N0YXR1cyA+IHJldCkgewotCQkJ CXJldCA9IHRlc3Rfc3RhdHVzOwotCQkJfQotCQkJY2hlY2tfZ2xvYmFsX3Nsb3coJnJldCk7Ci0J CX0KLQl9Ci0KLQltYWxsb2NfcHJpbnRmKCItLS0gJXM6ICV1LyV1LCAlczogJXUvJXUsICVzOiAl dS8ldSAtLS1cbiIsCi0JICAgIHRlc3Rfc3RhdHVzX3N0cmluZyh0ZXN0X3N0YXR1c19wYXNzKSwK LQkgICAgdGVzdF9jb3VudHNbdGVzdF9zdGF0dXNfcGFzc10sIHRlc3RfY291bnQsCi0JICAgIHRl c3Rfc3RhdHVzX3N0cmluZyh0ZXN0X3N0YXR1c19za2lwKSwKLQkgICAgdGVzdF9jb3VudHNbdGVz dF9zdGF0dXNfc2tpcF0sIHRlc3RfY291bnQsCi0JICAgIHRlc3Rfc3RhdHVzX3N0cmluZyh0ZXN0 X3N0YXR1c19mYWlsKSwKLQkgICAgdGVzdF9jb3VudHNbdGVzdF9zdGF0dXNfZmFpbF0sIHRlc3Rf Y291bnQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdGVzdF9zdGF0dXNfdAotcF90ZXN0KHRlc3Rf dCAqdCwgLi4uKSB7Ci0JdGVzdF9zdGF0dXNfdCByZXQ7Ci0JdmFfbGlzdCBhcDsKLQotCXJldCA9 IHRlc3Rfc3RhdHVzX3Bhc3M7Ci0JdmFfc3RhcnQoYXAsIHQpOwotCXJldCA9IHBfdGVzdF9pbXBs KHRydWUsIHRydWUsIHQsIGFwKTsKLQl2YV9lbmQoYXApOwotCi0JcmV0dXJuIHJldDsKLX0KLQot dGVzdF9zdGF0dXNfdAotcF90ZXN0X25vX3JlZW50cmFuY3kodGVzdF90ICp0LCAuLi4pIHsKLQl0 ZXN0X3N0YXR1c190IHJldDsKLQl2YV9saXN0IGFwOwotCi0JcmV0ID0gdGVzdF9zdGF0dXNfcGFz czsKLQl2YV9zdGFydChhcCwgdCk7Ci0JcmV0ID0gcF90ZXN0X2ltcGwodHJ1ZSwgZmFsc2UsIHQs IGFwKTsKLQl2YV9lbmQoYXApOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdGVzdF9zdGF0dXNfdAot cF90ZXN0X25vX21hbGxvY19pbml0KHRlc3RfdCAqdCwgLi4uKSB7Ci0JdGVzdF9zdGF0dXNfdCBy ZXQ7Ci0JdmFfbGlzdCBhcDsKLQotCXJldCA9IHRlc3Rfc3RhdHVzX3Bhc3M7Ci0JdmFfc3RhcnQo YXAsIHQpOwotCS8qCi0JICogV2UgYWxzbyBvbWl0IHJlZW50cmFuY3kgZnJvbSBib290c3RyYXBw aW5nIHRlc3RzLCBzaW5jZSB3ZSBkb24ndAotCSAqICh5ZXQpIGNhcmUgYWJvdXQgZ2VuZXJhbCBy ZWVudHJhbmN5IGR1cmluZyBib290c3RyYXBwaW5nLgotCSAqLwotCXJldCA9IHBfdGVzdF9pbXBs KGZhbHNlLCBmYWxzZSwgdCwgYXApOwotCXZhX2VuZChhcCk7Ci0KLQlyZXR1cm4gcmV0OwotfQot Ci12b2lkCi1wX3Rlc3RfZmFpbChjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpIHsKLQltYWxsb2NfY3ByaW50ZihOVUxMLCBOVUxMLCAiJXMlc1xuIiwgcHJlZml4LCBtZXNz YWdlKTsKLQl0ZXN0X3N0YXR1cyA9IHRlc3Rfc3RhdHVzX2ZhaWw7Ci19CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zcmMvdGhkLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy90aGQuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWExNWVhYi4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3NyYy90aGQuYworKysgL2Rldi9u dWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQot I2lmZGVmIF9XSU4zMgotdm9pZAotdGhkX2NyZWF0ZSh0aGRfdCAqdGhkLCB2b2lkICooKnByb2Mp KHZvaWQgKiksIHZvaWQgKmFyZykgewotCUxQVEhSRUFEX1NUQVJUX1JPVVRJTkUgcm91dGluZSA9 IChMUFRIUkVBRF9TVEFSVF9ST1VUSU5FKXByb2M7Ci0JKnRoZCA9IENyZWF0ZVRocmVhZChOVUxM LCAwLCByb3V0aW5lLCBhcmcsIDAsIE5VTEwpOwotCWlmICgqdGhkID09IE5VTEwpIHsKLQkJdGVz dF9mYWlsKCJFcnJvciBpbiBDcmVhdGVUaHJlYWQoKVxuIik7Ci0JfQotfQotCi12b2lkCi10aGRf am9pbih0aGRfdCB0aGQsIHZvaWQgKipyZXQpIHsKLQlpZiAoV2FpdEZvclNpbmdsZU9iamVjdCh0 aGQsIElORklOSVRFKSA9PSBXQUlUX09CSkVDVF8wICYmIHJldCkgewotCQlEV09SRCBleGl0X2Nv ZGU7Ci0JCUdldEV4aXRDb2RlVGhyZWFkKHRoZCwgKExQRFdPUkQpICZleGl0X2NvZGUpOwotCQkq cmV0ID0gKHZvaWQgKikodWludHB0cl90KWV4aXRfY29kZTsKLQl9Ci19Ci0KLSNlbHNlCi12b2lk Ci10aGRfY3JlYXRlKHRoZF90ICp0aGQsIHZvaWQgKigqcHJvYykodm9pZCAqKSwgdm9pZCAqYXJn KSB7Ci0JaWYgKHB0aHJlYWRfY3JlYXRlKHRoZCwgTlVMTCwgcHJvYywgYXJnKSAhPSAwKSB7Ci0J CXRlc3RfZmFpbCgiRXJyb3IgaW4gcHRocmVhZF9jcmVhdGUoKVxuIik7Ci0JfQotfQotCi12b2lk Ci10aGRfam9pbih0aGRfdCB0aGQsIHZvaWQgKipyZXQpIHsKLQlwdGhyZWFkX2pvaW4odGhkLCBy ZXQpOwotfQotI2VuZGlmCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC9zcmMvdGltZXIuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3Qvc3JjL3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDZlOGI4ZWQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC9zcmMvdGltZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAK LSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotdm9pZAotdGltZXJfc3RhcnQodGlt ZWRlbHRhX3QgKnRpbWVyKSB7Ci0JbnN0aW1lX2luaXRfdXBkYXRlKCZ0aW1lci0+dDApOwotfQot Ci12b2lkCi10aW1lcl9zdG9wKHRpbWVkZWx0YV90ICp0aW1lcikgewotCW5zdGltZV9jb3B5KCZ0 aW1lci0+dDEsICZ0aW1lci0+dDApOwotCW5zdGltZV91cGRhdGUoJnRpbWVyLT50MSk7Ci19Ci0K LXVpbnQ2NF90Ci10aW1lcl91c2VjKGNvbnN0IHRpbWVkZWx0YV90ICp0aW1lcikgewotCW5zdGlt ZV90IGRlbHRhOwotCi0JbnN0aW1lX2NvcHkoJmRlbHRhLCAmdGltZXItPnQxKTsKLQluc3RpbWVf c3VidHJhY3QoJmRlbHRhLCAmdGltZXItPnQwKTsKLQlyZXR1cm4gbnN0aW1lX25zKCZkZWx0YSkg LyAxMDAwOwotfQotCi12b2lkCi10aW1lcl9yYXRpbyh0aW1lZGVsdGFfdCAqYSwgdGltZWRlbHRh X3QgKmIsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikgewotCXVpbnQ2NF90IHQwID0gdGltZXJf dXNlYyhhKTsKLQl1aW50NjRfdCB0MSA9IHRpbWVyX3VzZWMoYik7Ci0JdWludDY0X3QgbXVsdDsK LQlzaXplX3QgaSA9IDA7Ci0Jc2l6ZV90IGosIG47Ci0KLQkvKiBXaG9sZS4gKi8KLQluID0gbWFs bG9jX3NucHJpbnRmKCZidWZbaV0sIGJ1Zmxlbi1pLCAiJSJGTVR1NjQsIHQwIC8gdDEpOwotCWkg Kz0gbjsKLQlpZiAoaSA+PSBidWZsZW4pIHsKLQkJcmV0dXJuOwotCX0KLQltdWx0ID0gMTsKLQlm b3IgKGogPSAwOyBqIDwgbjsgaisrKSB7Ci0JCW11bHQgKj0gMTA7Ci0JfQotCi0JLyogRGVjaW1h bC4gKi8KLQluID0gbWFsbG9jX3NucHJpbnRmKCZidWZbaV0sIGJ1Zmxlbi1pLCAiLiIpOwotCWkg Kz0gbjsKLQotCS8qIEZyYWN0aW9uLiAqLwotCXdoaWxlIChpIDwgYnVmbGVuLTEpIHsKLQkJdWlu dDY0X3Qgcm91bmQgPSAoaSsxID09IGJ1Zmxlbi0xICYmICgodDAgKiBtdWx0ICogMTAgLyB0MSkg JSAxMAotCQkgICAgPj0gNSkpID8gMSA6IDA7Ci0JCW4gPSBtYWxsb2Nfc25wcmludGYoJmJ1Zltp XSwgYnVmbGVuLWksCi0JCSAgICAiJSJGTVR1NjQsICh0MCAqIG11bHQgLyB0MSkgJSAxMCArIHJv dW5kKTsKLQkJaSArPSBuOwotCQltdWx0ICo9IDEwOwotCX0KLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0cmVzcy9iYXRjaF9hbGxv Yy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3Mv YmF0Y2hfYWxsb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI3ZTFjYi4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0 cmVzcy9iYXRjaF9hbGxvYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk4ICswLDAgQEAKLSNpbmNs dWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLSNpbmNsdWRlICJ0ZXN0L2JlbmNoLmgiCi0KLSNk ZWZpbmUgTUlCTEVOIDgKLXN0YXRpYyBzaXplX3QgbWliW01JQkxFTl07Ci1zdGF0aWMgc2l6ZV90 IG1pYmxlbiA9IE1JQkxFTjsKLQotI2RlZmluZSBUSU5ZX0JBVENIIDEwCi0jZGVmaW5lIFRJTllf QkFUQ0hfSVRFUiAoMTAgKiAxMDAwICogMTAwMCkKLSNkZWZpbmUgSFVHRV9CQVRDSCAoMTAwMCAq IDEwMDApCi0jZGVmaW5lIEhVR0VfQkFUQ0hfSVRFUiAxMDAKLSNkZWZpbmUgTEVOICgxMDAgKiAx MDAwICogMTAwMCkKLXN0YXRpYyB2b2lkICpiYXRjaF9wdHJzW0xFTl07Ci1zdGF0aWMgc2l6ZV90 IGJhdGNoX3B0cnNfbmV4dCA9IDA7Ci1zdGF0aWMgdm9pZCAqaXRlbV9wdHJzW0xFTl07Ci1zdGF0 aWMgc2l6ZV90IGl0ZW1fcHRyc19uZXh0ID0gMDsKLQotI2RlZmluZSBTSVpFIDcKLQotdHlwZWRl ZiBzdHJ1Y3QgYmF0Y2hfYWxsb2NfcGFja2V0X3MgYmF0Y2hfYWxsb2NfcGFja2V0X3Q7Ci1zdHJ1 Y3QgYmF0Y2hfYWxsb2NfcGFja2V0X3MgewotCXZvaWQgKipwdHJzOwotCXNpemVfdCBudW07Ci0J c2l6ZV90IHNpemU7Ci0JaW50IGZsYWdzOwotfTsKLQotc3RhdGljIHZvaWQKLWJhdGNoX2FsbG9j X3dyYXBwZXIoc2l6ZV90IGJhdGNoKSB7Ci0JYmF0Y2hfYWxsb2NfcGFja2V0X3QgYmF0Y2hfYWxs b2NfcGFja2V0ID0KLQkgICAge2JhdGNoX3B0cnMgKyBiYXRjaF9wdHJzX25leHQsIGJhdGNoLCBT SVpFLCAwfTsKLQlzaXplX3QgZmlsbGVkOwotCXNpemVfdCBsZW4gPSBzaXplb2Yoc2l6ZV90KTsK LQlhc3NlcnRfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZmaWxsZWQsICZsZW4sCi0J ICAgICZiYXRjaF9hbGxvY19wYWNrZXQsIHNpemVvZihiYXRjaF9hbGxvY19wYWNrZXQpKSwgMCwg IiIpOwotCWFzc2VydF96dV9lcShmaWxsZWQsIGJhdGNoLCAiIik7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1pdGVtX2FsbG9jX3dyYXBwZXIoc2l6ZV90IGJhdGNoKSB7Ci0JZm9yIChzaXplX3QgaSA9IGl0 ZW1fcHRyc19uZXh0LCBlbmQgPSBpICsgYmF0Y2g7IGkgPCBlbmQ7ICsraSkgewotCQlpdGVtX3B0 cnNbaV0gPSBtYWxsb2MoU0laRSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcmVsZWFzZV9hbmRf Y2xlYXIodm9pZCAqKnB0cnMsIHNpemVfdCBsZW4pIHsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8 IGxlbjsgKytpKSB7Ci0JCXZvaWQgKnAgPSBwdHJzW2ldOwotCQlhc3NlcnRfcHRyX25vdF9udWxs KHAsICJhbGxvY2F0aW9uIGZhaWxlZCIpOwotCQlzZGFsbG9jeChwLCBTSVpFLCAwKTsKLQkJcHRy c1tpXSA9IE5VTEw7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotYmF0Y2hfYWxsb2Nfd2l0aG91dF9m cmVlKHNpemVfdCBiYXRjaCkgewotCWJhdGNoX2FsbG9jX3dyYXBwZXIoYmF0Y2gpOwotCWJhdGNo X3B0cnNfbmV4dCArPSBiYXRjaDsKLX0KLQotc3RhdGljIHZvaWQKLWl0ZW1fYWxsb2Nfd2l0aG91 dF9mcmVlKHNpemVfdCBiYXRjaCkgewotCWl0ZW1fYWxsb2Nfd3JhcHBlcihiYXRjaCk7Ci0JaXRl bV9wdHJzX25leHQgKz0gYmF0Y2g7Ci19Ci0KLXN0YXRpYyB2b2lkCi1iYXRjaF9hbGxvY193aXRo X2ZyZWUoc2l6ZV90IGJhdGNoKSB7Ci0JYmF0Y2hfYWxsb2Nfd3JhcHBlcihiYXRjaCk7Ci0JcmVs ZWFzZV9hbmRfY2xlYXIoYmF0Y2hfcHRycyArIGJhdGNoX3B0cnNfbmV4dCwgYmF0Y2gpOwotCWJh dGNoX3B0cnNfbmV4dCArPSBiYXRjaDsKLX0KLQotc3RhdGljIHZvaWQKLWl0ZW1fYWxsb2Nfd2l0 aF9mcmVlKHNpemVfdCBiYXRjaCkgewotCWl0ZW1fYWxsb2Nfd3JhcHBlcihiYXRjaCk7Ci0JcmVs ZWFzZV9hbmRfY2xlYXIoaXRlbV9wdHJzICsgaXRlbV9wdHJzX25leHQsIGJhdGNoKTsKLQlpdGVt X3B0cnNfbmV4dCArPSBiYXRjaDsKLX0KLQotc3RhdGljIHZvaWQKLWNvbXBhcmVfd2l0aG91dF9m cmVlKHNpemVfdCBiYXRjaCwgc2l6ZV90IGl0ZXIsCi0gICAgdm9pZCAoKmJhdGNoX2FsbG9jX3dp dGhvdXRfZnJlZV9mdW5jKSh2b2lkKSwKLSAgICB2b2lkICgqaXRlbV9hbGxvY193aXRob3V0X2Zy ZWVfZnVuYykodm9pZCkpIHsKLQlhc3NlcnQoYmF0Y2hfcHRyc19uZXh0ID09IDApOwotCWFzc2Vy dChpdGVtX3B0cnNfbmV4dCA9PSAwKTsKLQlhc3NlcnQoYmF0Y2ggKiBpdGVyIDw9IExFTik7Ci0J Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVyOyArK2kpIHsKLQkJYmF0Y2hfYWxsb2Nfd2l0aG91 dF9mcmVlX2Z1bmMoKTsKLQkJaXRlbV9hbGxvY193aXRob3V0X2ZyZWVfZnVuYygpOwotCX0KLQly ZWxlYXNlX2FuZF9jbGVhcihiYXRjaF9wdHJzLCBiYXRjaF9wdHJzX25leHQpOwotCWJhdGNoX3B0 cnNfbmV4dCA9IDA7Ci0JcmVsZWFzZV9hbmRfY2xlYXIoaXRlbV9wdHJzLCBpdGVtX3B0cnNfbmV4 dCk7Ci0JaXRlbV9wdHJzX25leHQgPSAwOwotCWNvbXBhcmVfZnVuY3MoMCwgaXRlciwKLQkgICAg ImJhdGNoIGFsbG9jYXRpb24iLCBiYXRjaF9hbGxvY193aXRob3V0X2ZyZWVfZnVuYywKLQkgICAg Iml0ZW0gYWxsb2NhdGlvbiIsIGl0ZW1fYWxsb2Nfd2l0aG91dF9mcmVlX2Z1bmMpOwotCXJlbGVh c2VfYW5kX2NsZWFyKGJhdGNoX3B0cnMsIGJhdGNoX3B0cnNfbmV4dCk7Ci0JYmF0Y2hfcHRyc19u ZXh0ID0gMDsKLQlyZWxlYXNlX2FuZF9jbGVhcihpdGVtX3B0cnMsIGl0ZW1fcHRyc19uZXh0KTsK LQlpdGVtX3B0cnNfbmV4dCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb21wYXJlX3dpdGhfZnJl ZShzaXplX3QgYmF0Y2gsIHNpemVfdCBpdGVyLAotICAgIHZvaWQgKCpiYXRjaF9hbGxvY193aXRo X2ZyZWVfZnVuYykodm9pZCksCi0gICAgdm9pZCAoKml0ZW1fYWxsb2Nfd2l0aF9mcmVlX2Z1bmMp KHZvaWQpKSB7Ci0JYXNzZXJ0KGJhdGNoX3B0cnNfbmV4dCA9PSAwKTsKLQlhc3NlcnQoaXRlbV9w dHJzX25leHQgPT0gMCk7Ci0JYXNzZXJ0KGJhdGNoICogaXRlciA8PSBMRU4pOwotCWZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgaXRlcjsgKytpKSB7Ci0JCWJhdGNoX2FsbG9jX3dpdGhfZnJlZV9mdW5j KCk7Ci0JCWl0ZW1fYWxsb2Nfd2l0aF9mcmVlX2Z1bmMoKTsKLQl9Ci0JYmF0Y2hfcHRyc19uZXh0 ID0gMDsKLQlpdGVtX3B0cnNfbmV4dCA9IDA7Ci0JY29tcGFyZV9mdW5jcygwLCBpdGVyLAotCSAg ICAiYmF0Y2ggYWxsb2NhdGlvbiIsIGJhdGNoX2FsbG9jX3dpdGhfZnJlZV9mdW5jLAotCSAgICAi aXRlbSBhbGxvY2F0aW9uIiwgaXRlbV9hbGxvY193aXRoX2ZyZWVfZnVuYyk7Ci0JYmF0Y2hfcHRy c19uZXh0ID0gMDsKLQlpdGVtX3B0cnNfbmV4dCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1iYXRj aF9hbGxvY193aXRob3V0X2ZyZWVfdGlueSgpIHsKLQliYXRjaF9hbGxvY193aXRob3V0X2ZyZWUo VElOWV9CQVRDSCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pdGVtX2FsbG9jX3dpdGhvdXRfZnJlZV90 aW55KCkgewotCWl0ZW1fYWxsb2Nfd2l0aG91dF9mcmVlKFRJTllfQkFUQ0gpOwotfQotCi1URVNU X0JFR0lOKHRlc3RfdGlueV9iYXRjaF93aXRob3V0X2ZyZWUpIHsKLQljb21wYXJlX3dpdGhvdXRf ZnJlZShUSU5ZX0JBVENILCBUSU5ZX0JBVENIX0lURVIsCi0JICAgIGJhdGNoX2FsbG9jX3dpdGhv dXRfZnJlZV90aW55LCBpdGVtX2FsbG9jX3dpdGhvdXRfZnJlZV90aW55KTsKLX0KLVRFU1RfRU5E Ci0KLXN0YXRpYyB2b2lkCi1iYXRjaF9hbGxvY193aXRoX2ZyZWVfdGlueSgpIHsKLQliYXRjaF9h bGxvY193aXRoX2ZyZWUoVElOWV9CQVRDSCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pdGVtX2FsbG9j X3dpdGhfZnJlZV90aW55KCkgewotCWl0ZW1fYWxsb2Nfd2l0aF9mcmVlKFRJTllfQkFUQ0gpOwot fQotCi1URVNUX0JFR0lOKHRlc3RfdGlueV9iYXRjaF93aXRoX2ZyZWUpIHsKLQljb21wYXJlX3dp dGhfZnJlZShUSU5ZX0JBVENILCBUSU5ZX0JBVENIX0lURVIsCi0JICAgIGJhdGNoX2FsbG9jX3dp dGhfZnJlZV90aW55LCBpdGVtX2FsbG9jX3dpdGhfZnJlZV90aW55KTsKLX0KLVRFU1RfRU5ECi0K LXN0YXRpYyB2b2lkCi1iYXRjaF9hbGxvY193aXRob3V0X2ZyZWVfaHVnZSgpIHsKLQliYXRjaF9h bGxvY193aXRob3V0X2ZyZWUoSFVHRV9CQVRDSCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pdGVtX2Fs bG9jX3dpdGhvdXRfZnJlZV9odWdlKCkgewotCWl0ZW1fYWxsb2Nfd2l0aG91dF9mcmVlKEhVR0Vf QkFUQ0gpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfaHVnZV9iYXRjaF93aXRob3V0X2ZyZWUpIHsK LQljb21wYXJlX3dpdGhvdXRfZnJlZShIVUdFX0JBVENILCBIVUdFX0JBVENIX0lURVIsCi0JICAg IGJhdGNoX2FsbG9jX3dpdGhvdXRfZnJlZV9odWdlLCBpdGVtX2FsbG9jX3dpdGhvdXRfZnJlZV9o dWdlKTsKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1iYXRjaF9hbGxvY193aXRoX2ZyZWVf aHVnZSgpIHsKLQliYXRjaF9hbGxvY193aXRoX2ZyZWUoSFVHRV9CQVRDSCk7Ci19Ci0KLXN0YXRp YyB2b2lkCi1pdGVtX2FsbG9jX3dpdGhfZnJlZV9odWdlKCkgewotCWl0ZW1fYWxsb2Nfd2l0aF9m cmVlKEhVR0VfQkFUQ0gpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfaHVnZV9iYXRjaF93aXRoX2Zy ZWUpIHsKLQljb21wYXJlX3dpdGhfZnJlZShIVUdFX0JBVENILCBIVUdFX0JBVENIX0lURVIsCi0J ICAgIGJhdGNoX2FsbG9jX3dpdGhfZnJlZV9odWdlLCBpdGVtX2FsbG9jX3dpdGhfZnJlZV9odWdl KTsKLX0KLVRFU1RfRU5ECi0KLWludCBtYWluKHZvaWQpIHsKLQlhc3NlcnRfZF9lcShtYWxsY3Rs bmFtZXRvbWliKCJleHBlcmltZW50YWwuYmF0Y2hfYWxsb2MiLCBtaWIsICZtaWJsZW4pLAotCSAg ICAwLCAiIik7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF90aW55X2Jh dGNoX3dpdGhvdXRfZnJlZSwKLQkgICAgdGVzdF90aW55X2JhdGNoX3dpdGhfZnJlZSwKLQkgICAg dGVzdF9odWdlX2JhdGNoX3dpdGhvdXRfZnJlZSwKLQkgICAgdGVzdF9odWdlX2JhdGNoX3dpdGhf ZnJlZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC9zdHJlc3MvZmlsbF9mbHVzaC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3MvZmlsbF9mbHVzaC5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBhMmRiMDQ0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3RyZXNzL2ZpbGxfZmx1c2guYworKysgL2Rldi9udWxs CkBAIC0xLDc2ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLSNpbmNs dWRlICJ0ZXN0L2JlbmNoLmgiCi0KLSNkZWZpbmUgU01BTExfQUxMT0NfU0laRSAxMjgKLSNkZWZp bmUgTEFSR0VfQUxMT0NfU0laRSBTQ19MQVJHRV9NSU5DTEFTUwotI2RlZmluZSBOQUxMT0NTIDEw MDAKLQotLyoKLSAqIFdlIG1ha2UgdGhpcyB2b2xhdGlsZSBzbyB0aGUgMS1hdC1hLXRpbWUgdmFy aWFudHMgY2FuJ3QgbGVhdmUgdGhlIGFsbG9jYXRpb24KLSAqIGluIGEgcmVnaXN0ZXIsIGp1c3Qg dG8gdHJ5IHRvIGdldCB0aGUgY2FjaGUgYmVoYXZpb3IgY2xvc2VyLgotICovCi12b2lkICp2b2xh dGlsZSBhbGxvY3NbTkFMTE9DU107Ci0KLXN0YXRpYyB2b2lkCi1hcnJheV9hbGxvY19kYWxsb2Nf c21hbGwodm9pZCkgewotCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsrKSB7Ci0JCXZv aWQgKnAgPSBtYWxsb2N4KFNNQUxMX0FMTE9DX1NJWkUsIDApOwotCQlhc3NlcnRfcHRyX25vdF9u dWxsKHAsICJtYWxsb2N4IHNob3VsZG4ndCBmYWlsIik7Ci0JCWFsbG9jc1tpXSA9IHA7Ci0JfQot CWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsrKSB7Ci0JCXNkYWxsb2N4KGFsbG9jc1tp XSwgU01BTExfQUxMT0NfU0laRSwgMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaXRlbV9hbGxv Y19kYWxsb2Nfc21hbGwodm9pZCkgewotCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsr KSB7Ci0JCXZvaWQgKnAgPSBtYWxsb2N4KFNNQUxMX0FMTE9DX1NJWkUsIDApOwotCQlhc3NlcnRf cHRyX25vdF9udWxsKHAsICJtYWxsb2N4IHNob3VsZG4ndCBmYWlsIik7Ci0JCWFsbG9jc1tpXSA9 IHA7Ci0JCXNkYWxsb2N4KGFsbG9jc1tpXSwgU01BTExfQUxMT0NfU0laRSwgMCk7Ci0JfQotfQot Ci1URVNUX0JFR0lOKHRlc3RfYXJyYXlfdnNfaXRlbV9zbWFsbCkgewotCWNvbXBhcmVfZnVuY3Mo MSAqIDEwMDAsIDEwICogMTAwMCwKLQkgICAgImFycmF5IG9mIHNtYWxsIGFsbG9jYXRpb25zIiwg YXJyYXlfYWxsb2NfZGFsbG9jX3NtYWxsLAotCSAgICAic21hbGwgaXRlbSBhbGxvY2F0aW9uIiwg aXRlbV9hbGxvY19kYWxsb2Nfc21hbGwpOwotfQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLWFy cmF5X2FsbG9jX2RhbGxvY19sYXJnZSh2b2lkKSB7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxM T0NTOyBpKyspIHsKLQkJdm9pZCAqcCA9IG1hbGxvY3goTEFSR0VfQUxMT0NfU0laRSwgMCk7Ci0J CWFzc2VydF9wdHJfbm90X251bGwocCwgIm1hbGxvY3ggc2hvdWxkbid0IGZhaWwiKTsKLQkJYWxs b2NzW2ldID0gcDsKLQl9Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NTOyBpKyspIHsKLQkJ c2RhbGxvY3goYWxsb2NzW2ldLCBMQVJHRV9BTExPQ19TSVpFLCAwKTsKLQl9Ci19Ci0KLXN0YXRp YyB2b2lkCi1pdGVtX2FsbG9jX2RhbGxvY19sYXJnZSh2b2lkKSB7Ci0JZm9yIChpbnQgaSA9IDA7 IGkgPCBOQUxMT0NTOyBpKyspIHsKLQkJdm9pZCAqcCA9IG1hbGxvY3goTEFSR0VfQUxMT0NfU0la RSwgMCk7Ci0JCWFzc2VydF9wdHJfbm90X251bGwocCwgIm1hbGxvY3ggc2hvdWxkbid0IGZhaWwi KTsKLQkJYWxsb2NzW2ldID0gcDsKLQkJc2RhbGxvY3goYWxsb2NzW2ldLCBMQVJHRV9BTExPQ19T SVpFLCAwKTsKLQl9Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9hcnJheV92c19pdGVtX2xhcmdlKSB7 Ci0JY29tcGFyZV9mdW5jcygxMDAsIDEwMDAsCi0JICAgICJhcnJheSBvZiBsYXJnZSBhbGxvY2F0 aW9ucyIsIGFycmF5X2FsbG9jX2RhbGxvY19sYXJnZSwKLQkgICAgImxhcmdlIGl0ZW0gYWxsb2Nh dGlvbiIsIGl0ZW1fYWxsb2NfZGFsbG9jX2xhcmdlKTsKLX0KLVRFU1RfRU5ECi0KLWludCBtYWlu KHZvaWQpIHsKLQlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0X2FycmF5X3Zz X2l0ZW1fc21hbGwsCi0JICAgIHRlc3RfYXJyYXlfdnNfaXRlbV9sYXJnZSk7Ci19CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9zdHJlc3Mv aG9va2JlbmNoLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3N0cmVzcy9ob29rYmVuY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdlOTBi MC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3N0cmVzcy9ob29rYmVuY2guYworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLSNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotc3RhdGljIHZvaWQKLW5vb3BfYWxsb2Nf aG9vayh2b2lkICpleHRyYSwgaG9va19hbGxvY190IHR5cGUsIHZvaWQgKnJlc3VsdCwKLSAgICB1 aW50cHRyX3QgcmVzdWx0X3JhdywgdWludHB0cl90IGFyZ3NfcmF3WzNdKSB7Ci19Ci0KLXN0YXRp YyB2b2lkCi1ub29wX2RhbGxvY19ob29rKHZvaWQgKmV4dHJhLCBob29rX2RhbGxvY190IHR5cGUs IHZvaWQgKmFkZHJlc3MsCi0gICAgdWludHB0cl90IGFyZ3NfcmF3WzNdKSB7Ci19Ci0KLXN0YXRp YyB2b2lkCi1ub29wX2V4cGFuZF9ob29rKHZvaWQgKmV4dHJhLCBob29rX2V4cGFuZF90IHR5cGUs IHZvaWQgKmFkZHJlc3MsCi0gICAgc2l6ZV90IG9sZF91c2l6ZSwgc2l6ZV90IG5ld191c2l6ZSwg dWludHB0cl90IHJlc3VsdF9yYXcsCi0gICAgdWludHB0cl90IGFyZ3NfcmF3WzRdKSB7Ci19Ci0K LXN0YXRpYyB2b2lkCi1tYWxsb2NfZnJlZV9sb29wKGludCBpdGVycykgewotCWZvciAoaW50IGkg PSAwOyBpIDwgaXRlcnM7IGkrKykgewotCQl2b2lkICpwID0gbWFsbG9jeCgxLCAwKTsKLQkJZnJl ZShwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X2hvb2tlZChpbnQgaXRlcnMpIHsKLQlo b29rc190IGhvb2tzID0geyZub29wX2FsbG9jX2hvb2ssICZub29wX2RhbGxvY19ob29rLCAmbm9v cF9leHBhbmRfaG9vaywKLQkJTlVMTH07Ci0KLQlpbnQgZXJyOwotCXZvaWQgKmhhbmRsZXNbSE9P S19NQVhdOwotCXNpemVfdCBzeiA9IHNpemVvZihoYW5kbGVzWzBdKTsKLQotCWZvciAoaW50IGkg PSAwOyBpIDwgSE9PS19NQVg7IGkrKykgewotCQllcnIgPSBtYWxsY3RsKCJleHBlcmltZW50YWwu aG9va3MuaW5zdGFsbCIsICZoYW5kbGVzW2ldLAotCQkgICAgJnN6LCAmaG9va3MsIHNpemVvZiho b29rcykpOwotCQlhc3NlcnQoZXJyID09IDApOwotCi0JCXRpbWVkZWx0YV90IHRpbWVyOwotCQl0 aW1lcl9zdGFydCgmdGltZXIpOwotCQltYWxsb2NfZnJlZV9sb29wKGl0ZXJzKTsKLQkJdGltZXJf c3RvcCgmdGltZXIpOwotCQltYWxsb2NfcHJpbnRmKCJXaXRoICVkIGhvb2slczogJSJGTVR1NjQi dXNcbiIsIGkgKyAxLAotCQkgICAgaSArIDEgPT0gMSA/ICIiIDogInMiLCB0aW1lcl91c2VjKCZ0 aW1lcikpOwotCX0KLQlmb3IgKGludCBpID0gMDsgaSA8IEhPT0tfTUFYOyBpKyspIHsKLQkJZXJy ID0gbWFsbGN0bCgiZXhwZXJpbWVudGFsLmhvb2tzLnJlbW92ZSIsIE5VTEwsIE5VTEwsCi0JCSAg ICAmaGFuZGxlc1tpXSwgc2l6ZW9mKGhhbmRsZXNbaV0pKTsKLQkJYXNzZXJ0KGVyciA9PSAwKTsK LQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3VuaG9va2VkKGludCBpdGVycykgewotCXRpbWVk ZWx0YV90IHRpbWVyOwotCXRpbWVyX3N0YXJ0KCZ0aW1lcik7Ci0JbWFsbG9jX2ZyZWVfbG9vcChp dGVycyk7Ci0JdGltZXJfc3RvcCgmdGltZXIpOwotCi0JbWFsbG9jX3ByaW50ZigiV2l0aG91dCBo b29rczogJSJGTVR1NjQidXNcbiIsIHRpbWVyX3VzZWMoJnRpbWVyKSk7Ci19Ci0KLWludAotbWFp bih2b2lkKSB7Ci0JLyogSW5pdGlhbGl6ZSAqLwotCWZyZWUobWFsbG9jeCgxLCAwKSk7Ci0JaW50 IGl0ZXJzID0gMTAgKiAxMDAwICogMTAwMDsKLQltYWxsb2NfcHJpbnRmKCJCZW5jaG1hcmtpbmcg aG9va3Mgd2l0aCAlZCBpdGVyYXRpb25zOlxuIiwgaXRlcnMpOwotCXRlc3RfaG9va2VkKGl0ZXJz KTsKLQl0ZXN0X3VuaG9va2VkKGl0ZXJzKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0cmVzcy9sYXJnZV9taWNyb2JlbmNoLmMg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0cmVzcy9sYXJn ZV9taWNyb2JlbmNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmIzM2EuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC9z dHJlc3MvbGFyZ2VfbWljcm9iZW5jaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotI2luY2x1ZGUgInRlc3QvYmVuY2guaCIK LQotc3RhdGljIHZvaWQKLWxhcmdlX21hbGxvY3hfZnJlZSh2b2lkKSB7Ci0JLyoKLQkgKiBXZSBn byBhIGJpdCBsYXJnZXIgdGhhbiB0aGUgbGFyZ2UgbWluY2xhc3Mgb24gaXRzIG93biB0byBiZXR0 ZXIKLQkgKiBleHBvc2UgY29zdHMgZnJvbSB0aGluZ3MgbGlrZSB6ZXJvaW5nLgotCSAqLwotCXZv aWQgKnAgPSBtYWxsb2N4KFNDX0xBUkdFX01JTkNMQVNTLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsK LQlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJtYWxsb2N4IHNob3VsZG4ndCBmYWlsIik7Ci0JZnJl ZShwKTsKLX0KLQotc3RhdGljIHZvaWQKLXNtYWxsX21hbGxvY3hfZnJlZSh2b2lkKSB7Ci0Jdm9p ZCAqcCA9IG1hbGxvY3goMTYsIDApOwotCWFzc2VydF9wdHJfbm90X251bGwocCwgIm1hbGxvY3gg c2hvdWxkbid0IGZhaWwiKTsKLQlmcmVlKHApOwotfQotCi1URVNUX0JFR0lOKHRlc3RfbGFyZ2Vf dnNfc21hbGwpIHsKLQljb21wYXJlX2Z1bmNzKDEwMCoxMDAwLCAxKjEwMDAqMTAwMCwgImxhcmdl IG1hbGxvY3giLAotCSAgICBsYXJnZV9tYWxsb2N4X2ZyZWUsICJzbWFsbCBtYWxsb2N4Iiwgc21h bGxfbWFsbG9jeF9mcmVlKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0 dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF9sYXJnZV92c19zbWFsbCk7Ci19Ci0K CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3N0cmVzcy9tYWxsY3RsLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3N0cmVzcy9tYWxsY3RsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQy OWIzMTEuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC9zdHJlc3MvbWFsbGN0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAot I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotI2luY2x1ZGUgInRlc3QvYmVuY2guaCIK LQotc3RhdGljIHZvaWQKLW1hbGxjdGxfc2hvcnQodm9pZCkgewotCWNvbnN0IGNoYXIgKnZlcnNp b247Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHZlcnNpb24pOwotCWludCBlcnIgPSBtYWxsY3RsKCJ2 ZXJzaW9uIiwgJnZlcnNpb24sICZzeiwgTlVMTCwgMCk7Ci0JYXNzZXJ0X2RfZXEoZXJyLCAwLCAi bWFsbGN0bCBmYWlsdXJlIik7Ci19Ci0KLXNpemVfdCBtaWJfc2hvcnRbMV07Ci0KLXN0YXRpYyB2 b2lkCi1tYWxsY3RsYnltaWJfc2hvcnQodm9pZCkgewotCXNpemVfdCBtaWJsZW4gPSBzaXplb2Yo bWliX3Nob3J0KS9zaXplb2YobWliX3Nob3J0WzBdKTsKLQljb25zdCBjaGFyICp2ZXJzaW9uOwot CXNpemVfdCBzeiA9IHNpemVvZih2ZXJzaW9uKTsKLQlpbnQgZXJyID0gbWFsbGN0bGJ5bWliKG1p Yl9zaG9ydCwgbWlibGVuLCAmdmVyc2lvbiwgJnN6LCBOVUxMLCAwKTsKLQlhc3NlcnRfZF9lcShl cnIsIDAsICJtYWxsY3RsYnltaWIgZmFpbHVyZSIpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfbWFs bGN0bF92c19tYWxsY3RsYnltaWJfc2hvcnQpIHsKLQlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1p Yl9zaG9ydCkvc2l6ZW9mKG1pYl9zaG9ydFswXSk7Ci0KLQlpbnQgZXJyID0gbWFsbGN0bG5hbWV0 b21pYigidmVyc2lvbiIsIG1pYl9zaG9ydCwgJm1pYmxlbik7Ci0JYXNzZXJ0X2RfZXEoZXJyLCAw LCAibWFsbGN0bG5hbWV0b21pYiBmYWlsdXJlIik7Ci0JY29tcGFyZV9mdW5jcygxMCoxMDAwKjEw MDAsIDEwKjEwMDAqMTAwMCwgIm1hbGxjdGxfc2hvcnQiLAotCSAgICBtYWxsY3RsX3Nob3J0LCAi bWFsbGN0bGJ5bWliX3Nob3J0IiwgbWFsbGN0bGJ5bWliX3Nob3J0KTsKLX0KLVRFU1RfRU5ECi0K LXN0YXRpYyB2b2lkCi1tYWxsY3RsX2xvbmcodm9pZCkgewotCXVpbnQ2NF90IG5tYWxsb2M7Ci0J c2l6ZV90IHN6ID0gc2l6ZW9mKG5tYWxsb2MpOwotCWludCBlcnIgPSBtYWxsY3RsKCJzdGF0cy5h cmVuYXMuMC5iaW5zLjAubm1hbGxvYyIsICZubWFsbG9jLCAmc3osIE5VTEwsCi0JICAgIDApOwot CWFzc2VydF9kX2VxKGVyciwgMCwgIm1hbGxjdGwgZmFpbHVyZSIpOwotfQotCi1zaXplX3QgbWli X2xvbmdbNl07Ci0KLXN0YXRpYyB2b2lkCi1tYWxsY3RsYnltaWJfbG9uZyh2b2lkKSB7Ci0Jc2l6 ZV90IG1pYmxlbiA9IHNpemVvZihtaWJfbG9uZykvc2l6ZW9mKG1pYl9sb25nWzBdKTsKLQl1aW50 NjRfdCBubWFsbG9jOwotCXNpemVfdCBzeiA9IHNpemVvZihubWFsbG9jKTsKLQlpbnQgZXJyID0g bWFsbGN0bGJ5bWliKG1pYl9sb25nLCBtaWJsZW4sICZubWFsbG9jLCAmc3osIE5VTEwsIDApOwot CWFzc2VydF9kX2VxKGVyciwgMCwgIm1hbGxjdGxieW1pYiBmYWlsdXJlIik7Ci19Ci0KLVRFU1Rf QkVHSU4odGVzdF9tYWxsY3RsX3ZzX21hbGxjdGxieW1pYl9sb25nKSB7Ci0JLyoKLQkgKiBXZSB3 YW50IHRvIHVzZSB0aGUgbG9uZ2VzdCBtYWxsY3RsIHdlIGhhdmU7IHRoYXQgbmVlZHMgc3RhdHMg c3VwcG9ydAotCSAqIHRvIGJlIGFsbG93ZWQuCi0JICovCi0JdGVzdF9za2lwX2lmKCFjb25maWdf c3RhdHMpOwotCi0Jc2l6ZV90IG1pYmxlbiA9IHNpemVvZihtaWJfbG9uZykvc2l6ZW9mKG1pYl9s b25nWzBdKTsKLQlpbnQgZXJyID0gbWFsbGN0bG5hbWV0b21pYigic3RhdHMuYXJlbmFzLjAuYmlu cy4wLm5tYWxsb2MiLCBtaWJfbG9uZywKLQkgICAgJm1pYmxlbik7Ci0JYXNzZXJ0X2RfZXEoZXJy LCAwLCAibWFsbGN0bG5hbWV0b21pYiBmYWlsdXJlIik7Ci0JY29tcGFyZV9mdW5jcygxMCoxMDAw KjEwMDAsIDEwKjEwMDAqMTAwMCwgIm1hbGxjdGxfbG9uZyIsCi0JICAgIG1hbGxjdGxfbG9uZywg Im1hbGxjdGxieW1pYl9sb25nIiwgbWFsbGN0bGJ5bWliX2xvbmcpOwotfQotVEVTVF9FTkQKLQot aW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0 X21hbGxjdGxfdnNfbWFsbGN0bGJ5bWliX3Nob3J0LAotCSAgICB0ZXN0X21hbGxjdGxfdnNfbWFs bGN0bGJ5bWliX2xvbmcpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3RyZXNzL21pY3JvYmVuY2guYyBiLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qvc3RyZXNzL21pY3JvYmVuY2guYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYyZTMyZi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3N0cmVzcy9taWNyb2JlbmNoLmMKKysr IC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVz dC5oIgotI2luY2x1ZGUgInRlc3QvYmVuY2guaCIKLQotc3RhdGljIHZvaWQKLW1hbGxvY19mcmVl KHZvaWQpIHsKLQkvKiBUaGUgY29tcGlsZXIgY2FuIG9wdGltaXplIGF3YXkgZnJlZShtYWxsb2Mo MSkpISAqLwotCXZvaWQgKnAgPSBtYWxsb2MoMSk7Ci0JaWYgKHAgPT0gTlVMTCkgewotCQl0ZXN0 X2ZhaWwoIlVuZXhwZWN0ZWQgbWFsbG9jKCkgZmFpbHVyZSIpOwotCQlyZXR1cm47Ci0JfQotCWZy ZWUocCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1tYWxsb2N4X2ZyZWUodm9pZCkgewotCXZvaWQgKnAg PSBtYWxsb2N4KDEsIDApOwotCWlmIChwID09IE5VTEwpIHsKLQkJdGVzdF9mYWlsKCJVbmV4cGVj dGVkIG1hbGxvY3goKSBmYWlsdXJlIik7Ci0JCXJldHVybjsKLQl9Ci0JZnJlZShwKTsKLX0KLQot VEVTVF9CRUdJTih0ZXN0X21hbGxvY192c19tYWxsb2N4KSB7Ci0JY29tcGFyZV9mdW5jcygxMCox MDAwKjEwMDAsIDEwMCoxMDAwKjEwMDAsICJtYWxsb2MiLAotCSAgICBtYWxsb2NfZnJlZSwgIm1h bGxvY3giLCBtYWxsb2N4X2ZyZWUpOwotfQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLW1hbGxv Y19kYWxsb2N4KHZvaWQpIHsKLQl2b2lkICpwID0gbWFsbG9jKDEpOwotCWlmIChwID09IE5VTEwp IHsKLQkJdGVzdF9mYWlsKCJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKLQkJcmV0dXJu OwotCX0KLQlkYWxsb2N4KHAsIDApOwotfQotCi1zdGF0aWMgdm9pZAotbWFsbG9jX3NkYWxsb2N4 KHZvaWQpIHsKLQl2b2lkICpwID0gbWFsbG9jKDEpOwotCWlmIChwID09IE5VTEwpIHsKLQkJdGVz dF9mYWlsKCJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKLQkJcmV0dXJuOwotCX0KLQlz ZGFsbG9jeChwLCAxLCAwKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2ZyZWVfdnNfZGFsbG9jeCkg ewotCWNvbXBhcmVfZnVuY3MoMTAqMTAwMCoxMDAwLCAxMDAqMTAwMCoxMDAwLCAiZnJlZSIsIG1h bGxvY19mcmVlLAotCSAgICAiZGFsbG9jeCIsIG1hbGxvY19kYWxsb2N4KTsKLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9kYWxsb2N4X3ZzX3NkYWxsb2N4KSB7Ci0JY29tcGFyZV9mdW5j cygxMCoxMDAwKjEwMDAsIDEwMCoxMDAwKjEwMDAsICJkYWxsb2N4IiwgbWFsbG9jX2RhbGxvY3gs Ci0JICAgICJzZGFsbG9jeCIsIG1hbGxvY19zZGFsbG9jeCk7Ci19Ci1URVNUX0VORAotCi1zdGF0 aWMgdm9pZAotbWFsbG9jX211c19mcmVlKHZvaWQpIHsKLQl2b2lkICpwOwotCi0JcCA9IG1hbGxv YygxKTsKLQlpZiAocCA9PSBOVUxMKSB7Ci0JCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBtYWxsb2Mo KSBmYWlsdXJlIik7Ci0JCXJldHVybjsKLQl9Ci0JVEVTVF9NQUxMT0NfU0laRShwKTsKLQlmcmVl KHApOwotfQotCi1zdGF0aWMgdm9pZAotbWFsbG9jX3NhbGxvY3hfZnJlZSh2b2lkKSB7Ci0Jdm9p ZCAqcDsKLQotCXAgPSBtYWxsb2MoMSk7Ci0JaWYgKHAgPT0gTlVMTCkgewotCQl0ZXN0X2ZhaWwo IlVuZXhwZWN0ZWQgbWFsbG9jKCkgZmFpbHVyZSIpOwotCQlyZXR1cm47Ci0JfQotCWlmIChzYWxs b2N4KHAsIDApIDwgMSkgewotCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgc2FsbG9jeCgpIGZhaWx1 cmUiKTsKLQl9Ci0JZnJlZShwKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X211c192c19zYWxsb2N4 KSB7Ci0JY29tcGFyZV9mdW5jcygxMCoxMDAwKjEwMDAsIDEwMCoxMDAwKjEwMDAsICJtYWxsb2Nf dXNhYmxlX3NpemUiLAotCSAgICBtYWxsb2NfbXVzX2ZyZWUsICJzYWxsb2N4IiwgbWFsbG9jX3Nh bGxvY3hfZnJlZSk7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAotbWFsbG9jX25hbGxvY3hf ZnJlZSh2b2lkKSB7Ci0Jdm9pZCAqcDsKLQotCXAgPSBtYWxsb2MoMSk7Ci0JaWYgKHAgPT0gTlVM TCkgewotCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgbWFsbG9jKCkgZmFpbHVyZSIpOwotCQlyZXR1 cm47Ci0JfQotCWlmIChuYWxsb2N4KDEsIDApIDwgMSkgewotCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0 ZWQgbmFsbG9jeCgpIGZhaWx1cmUiKTsKLQl9Ci0JZnJlZShwKTsKLX0KLQotVEVTVF9CRUdJTih0 ZXN0X3NhbGxvY3hfdnNfbmFsbG9jeCkgewotCWNvbXBhcmVfZnVuY3MoMTAqMTAwMCoxMDAwLCAx MDAqMTAwMCoxMDAwLCAic2FsbG9jeCIsCi0JICAgIG1hbGxvY19zYWxsb2N4X2ZyZWUsICJuYWxs b2N4IiwgbWFsbG9jX25hbGxvY3hfZnJlZSk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9p ZCkgewotCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCi0JICAgIHRlc3RfbWFsbG9jX3ZzX21h bGxvY3gsCi0JICAgIHRlc3RfZnJlZV92c19kYWxsb2N4LAotCSAgICB0ZXN0X2RhbGxvY3hfdnNf c2RhbGxvY3gsCi0JICAgIHRlc3RfbXVzX3ZzX3NhbGxvY3gsCi0JICAgIHRlc3Rfc2FsbG9jeF92 c19uYWxsb2N4KTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3Rlc3Quc2guaW4gYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3Rlc3Quc2guaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDM5MzAyZmYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC90ZXN0LnNoLmluCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotIyEv YmluL3NoCi0KLWNhc2UgQGFiaUAgaW4KLSAgbWFjaG8pCi0gICAgZXhwb3J0IERZTERfRkFMTEJB Q0tfTElCUkFSWV9QQVRIPSJAb2Jqcm9vdEBsaWIiCi0gICAgOzsKLSAgcGVjb2ZmKQotICAgIGV4 cG9ydCBQQVRIPSIke1BBVEh9OkBvYmpyb290QGxpYiIKLSAgICA7OwotICAqKQotICAgIDs7Ci1l c2FjCi0KLSMgTWFrZSBhIGNvcHkgb2YgdGhlIEBKRU1BTExPQ19DUFJFRklYQE1BTExPQ19DT05G IHBhc3NlZCBpbiB0byB0aGlzIHNjcmlwdCwgc28KLSMgaXQgY2FuIGJlIHJlcGVhdGVkbHkgY29u Y2F0ZW5hdGVkIHdpdGggcGVyIHRlc3Qgc2V0dGluZ3MuCi1leHBvcnQgTUFMTE9DX0NPTkZfQUxM PSR7QEpFTUFMTE9DX0NQUkVGSVhATUFMTE9DX0NPTkZ9Ci0jIENvbmNhdGVuYXRlIHRoZSBpbmRp dmlkdWFsIHRlc3QncyBNQUxMT0NfQ09ORiBhbmQgTUFMTE9DX0NPTkZfQUxMLgotZXhwb3J0X21h bGxvY19jb25mKCkgewotICBpZiBbICJ4JHtNQUxMT0NfQ09ORn0iICE9ICJ4IiAtYSAieCR7TUFM TE9DX0NPTkZfQUxMfSIgIT0gIngiIF0gOyB0aGVuCi0gICAgZXhwb3J0IEBKRU1BTExPQ19DUFJF RklYQE1BTExPQ19DT05GPSIke01BTExPQ19DT05GfSwke01BTExPQ19DT05GX0FMTH0iCi0gIGVs c2UKLSAgICBleHBvcnQgQEpFTUFMTE9DX0NQUkVGSVhATUFMTE9DX0NPTkY9IiR7TUFMTE9DX0NP TkZ9JHtNQUxMT0NfQ09ORl9BTEx9IgotICBmaQotfQotCi0jIENvcnJlc3BvbmRzIHRvIHRlc3Rf c3RhdHVzX3QuCi1wYXNzX2NvZGU9MAotc2tpcF9jb2RlPTEKLWZhaWxfY29kZT0yCi0KLXBhc3Nf Y291bnQ9MAotc2tpcF9jb3VudD0wCi1mYWlsX2NvdW50PTAKLWZvciB0IGluICRAOyBkbwotICBp ZiBbICRwYXNzX2NvdW50IC1uZSAwIC1vICRza2lwX2NvdW50IC1uZSAwIC1vICRmYWlsX2NvdW50 ICE9IDAgXSA7IHRoZW4KLSAgICBlY2hvCi0gIGZpCi0gIGVjaG8gIj09PSAke3R9ID09PSIKLSAg aWYgWyAtZSAiQHNyY3Jvb3RAJHt0fS5zaCIgXSA7IHRoZW4KLSAgICAjIFNvdXJjZSB0aGUgc2hl bGwgc2NyaXB0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRlc3QgaW4gYSBzdWJzaGVsbCBhbmQKLSAg ICAjIGV4ZWN1dGUgdGhlIHRlc3QuICBUaGlzIGFsbG93cyB0aGUgc2hlbGwgc2NyaXB0IHRvIHNl dCBNQUxMT0NfQ09ORiwgd2hpY2gKLSAgICAjIGlzIHRoZW4gdXNlZCB0byBzZXQgQEpFTUFMTE9D X0NQUkVGSVhATUFMTE9DX0NPTkYgKHRodXMgYWxsb3dpbmcgdGhlCi0gICAgIyBwZXIgdGVzdCBz aGVsbCBzY3JpcHQgdG8gaWdub3JlIHRoZSBASkVNQUxMT0NfQ1BSRUZJWEAgZGV0YWlsKS4KLSAg ICBlbmFibGVfZmlsbD1AZW5hYmxlX2ZpbGxAIFwKLSAgICBlbmFibGVfcHJvZj1AZW5hYmxlX3By b2ZAIFwKLSAgICAuIEBzcmNyb290QCR7dH0uc2ggJiYgXAotICAgIGV4cG9ydF9tYWxsb2NfY29u ZiAmJiBcCi0gICAgJEpFTUFMTE9DX1RFU1RfUFJFRklYICR7dH1AZXhlQCBAYWJzX3NyY3Jvb3RA IEBhYnNfb2Jqcm9vdEAKLSAgZWxzZQotICAgIGV4cG9ydCBNQUxMT0NfQ09ORj0gJiYgXAotICAg IGV4cG9ydF9tYWxsb2NfY29uZiAmJiBcCi0gICAgJEpFTUFMTE9DX1RFU1RfUFJFRklYICR7dH1A ZXhlQCBAYWJzX3NyY3Jvb3RAIEBhYnNfb2Jqcm9vdEAKLSAgZmkKLSAgcmVzdWx0X2NvZGU9JD8K LSAgY2FzZSAke3Jlc3VsdF9jb2RlfSBpbgotICAgICR7cGFzc19jb2RlfSkKLSAgICAgIHBhc3Nf Y291bnQ9JCgocGFzc19jb3VudCsxKSkKLSAgICAgIDs7Ci0gICAgJHtza2lwX2NvZGV9KQotICAg ICAgc2tpcF9jb3VudD0kKChza2lwX2NvdW50KzEpKQotICAgICAgOzsKLSAgICAke2ZhaWxfY29k ZX0pCi0gICAgICBmYWlsX2NvdW50PSQoKGZhaWxfY291bnQrMSkpCi0gICAgICA7OwotICAgICop Ci0gICAgICBlY2hvICJUZXN0IGhhcm5lc3MgZXJyb3I6ICR7dH0gdy8gTUFMTE9DX0NPTkY9XCIk e01BTExPQ19DT05GfVwiIiAxPiYyCi0gICAgICBlY2hvICJVc2UgcHJlZml4IHRvIGRlYnVnLCBl LmcuIEpFTUFMTE9DX1RFU1RfUFJFRklYPVwiZ2RiIC0tYXJnc1wiIHNoIHRlc3QvdGVzdC5zaCAk e3R9IiAxPiYyCi0gICAgICBleGl0IDEKLSAgZXNhYwotZG9uZQotCi10b3RhbF9jb3VudD1gZXhw ciAke3Bhc3NfY291bnR9ICsgJHtza2lwX2NvdW50fSArICR7ZmFpbF9jb3VudH1gCi1lY2hvCi1l Y2hvICJUZXN0IHN1aXRlIHN1bW1hcnk6IHBhc3M6ICR7cGFzc19jb3VudH0vJHt0b3RhbF9jb3Vu dH0sIHNraXA6ICR7c2tpcF9jb3VudH0vJHt0b3RhbF9jb3VudH0sIGZhaWw6ICR7ZmFpbF9jb3Vu dH0vJHt0b3RhbF9jb3VudH0iCi0KLWlmIFsgJHtmYWlsX2NvdW50fSAtZXEgMCBdIDsgdGhlbgot ICBleGl0IDAKLWVsc2UKLSAgZXhpdCAxCi1maQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9TRk1ULmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvU0ZNVC5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBiOWY4NWRkLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9TRk1ULmMKKysrIC9kZXYvbnVsbApAQCAt MSwxNTk5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgZGVyaXZlcyBmcm9tIFNGTVQgMS4zLjMK LSAqIChodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9TRk1U L2luZGV4Lmh0bWwpLCB3aGljaCB3YXMKLSAqIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0gKgotICogICBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwNyBN dXRzdW8gU2FpdG8sIE1ha290byBNYXRzdW1vdG8gYW5kIEhpcm9zaGltYQotICogICBVbml2ZXJz aXR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICAgUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiAgIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcmUKLSAqICAgbWV0OgotICoKLSAqICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgotICogICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlCi0gKiAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgICAg ICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg dGhlIEhpcm9zaGltYSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICAgICAgaXRz IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMK LSAqICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuCi0gKiAgICAgICAgIHBlcm1pc3Npb24uCi0gKgotICogICBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT Ci0gKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UCi0gKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogICBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog ICBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqICAgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZCi0gKiAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiAgIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0gKi8KLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2RlZmluZSBC TE9DS19TSVpFIDEwMDAwCi0jZGVmaW5lIEJMT0NLX1NJWkU2NCAoQkxPQ0tfU0laRSAvIDIpCi0j ZGVmaW5lIENPVU5UXzEgMTAwMAotI2RlZmluZSBDT1VOVF8yIDcwMAotCi1zdGF0aWMgY29uc3Qg dWludDMyX3QgaW5pdF9nZW5fcmFuZF8zMl9leHBlY3RlZFtdID0gewotCTM0NDAxODEyOThVLCAx NTY0OTk3MDc5VSwgMTUxMDY2OTMwMlUsIDI5MzAyNzcxNTZVLCAxNDUyNDM5OTQwVSwKLQkzNzk2 MjY4NDUzVSwgIDQyMzEyNDIwOFUsIDIxNDM4MTg1ODlVLCAzODI3MjE5NDA4VSwgMjk4NzAzNjAw M1UsCi0JMjY3NDk3ODYxMFUsIDE1MzY4NDI1MTRVLCAyMDI3MDM1NTM3VSwgMjUzNDg5NzU2M1Us IDE2ODY1Mjc3MjVVLAotCSA1NDUzNjgyOTJVLCAxNDg5MDEzMzIxVSwgMTM3MDUzNDI1MlUsIDQy MzEwMTI3OTZVLCAzOTk0ODAzMDE5VSwKLQkxNzY0ODY5MDQ1VSwgIDgyNDU5NzUwNVUsICA4NjI1 ODE5MDBVLCAyNDY5NzY0MjQ5VSwgIDgxMjg2MjUxNFUsCi0JIDM1OTMxODY3M1UsICAxMTY5NTc5 MzZVLCAzMzY3Mzg5NjcyVSwgMjMyNzE3ODM1NFUsIDE4OTgyNDUyMDBVLAotCTMyMDY1MDc4NzlV LCAyMzc4OTI1MDMzVSwgMTA0MDIxNDc4N1UsIDI1MjQ3Nzg2MDVVLCAzMDg4NDI4NzAwVSwKLQkx NDE3NjY1ODk2VSwgIDk2NDMyNDE0N1UsIDIyODI3OTc3MDhVLCAyNDU2MjY5Mjk5VSwgIDMxMzQw MDM3NlUsCi0JMjI0NTA5MzI3MVUsIDEwMTU3Mjk0MjdVLCAyNjk0NDY1MDExVSwgMzI0Njk3NTE4 NFUsIDE5OTI3OTM2MzVVLAotCSA0NjM2NzkzNDZVLCAzNzIxMTA0NTkxVSwgMzQ3NTA2NDE5NlUs ICA4NTYxNDEyMzZVLCAxNDk5NTU5NzE5VSwKLQkzNTIyODE4OTQxVSwgMzcyMTUzMzEwOVUsIDE5 NTQ4MjY2MTdVLCAxMjgyMDQ0MDI0VSwgMTU0MzI3OTEzNlUsCi0JMTMwMTg2MzA4NVUsIDI2Njkx NDUwNTFVLCA0MjIxNDc3MzU0VSwgMzg5NjAxNjg0MVUsIDMzOTI3NDAyNjJVLAotCSA0NjI0NjY4 NjNVLCAxMDM3Njc5NDQ5VSwgMTIyODE0MDMwNlUsICA5MjIyOTgxOTdVLCAxMjA1MTA5ODUzVSwK LQkxODcyOTM4MDYxVSwgMzEwMjU0NzYwOFUsIDI3NDI3NjY4MDhVLCAxODg4NjI2MDg4VSwgNDAy ODAzOTQxNFUsCi0JIDE1NzU5Mzg3OVUsIDExMzY5MDE2OTVVLCA0MDM4Mzc3Njg2VSwgMzU3MjUx NzIzNlUsIDQyMzE3MDY3MjhVLAotCTI5OTczMTE5NjFVLCAxMTg5OTMxNjUyVSwgMzk4MTU0Mzc2 NVUsIDI4MjYxNjY3MDNVLCAgIDg3MTU5MjQ1VSwKLQkxNzIxMzc5MDcyVSwgMzg5NzkyNjk0MlUs IDE3OTAzOTU0OThVLCAyNTY5MTc4OTM5VSwgMTA0NzM2ODcyOVUsCi0JMjM0MDI1OTEzMVUsIDMx NDQyMTI5MDZVLCAyMzAxMTY5Nzg5VSwgMjQ0Mjg4NTQ2NFUsIDMwMzQwNDY3NzFVLAotCTM2Njc4 ODA1OTNVLCAzOTM1OTI4NDAwVSwgMjM3MjgwNTIzN1UsIDE2NjYzOTcxMTVVLCAyNDYwNTg0NTA0 VSwKLQkgNTEzODY2NzcwVSwgMzgxMDg2OTc0M1UsIDIxNDc0MDAwMzdVLCAyNzkyMDc4MDI1VSwg Mjk0MTc2MTgxMFUsCi0JMzIxMjI2NTgxMFUsICA5ODQ2OTIyNTlVLCAgMzQ2NTkwMjUzVSwgMTgw NDE3OTE5OVUsIDMyOTg1NDM0NDNVLAotCSA3NTAxMDgxNDFVLCAyODgwMjU3MDIyVSwgIDI0MzMx MDU0MlUsIDE4NjkwMzY0NjVVLCAxNTg4MDYyNTEzVSwKLQkyOTgzOTQ5NTUxVSwgMTkzMTQ1MDM2 NFUsIDQwMzQ1MDU4NDdVLCAyNzM1MDMwMTk5VSwgMTYyODQ2MTA2MVUsCi0JMjUzOTUyMjg0MVUs ICAxMjc5NjU1ODVVLCAzOTkyNDQ4ODcxVSwgIDkxMzM4ODIzN1UsICA1NTkxMzAwNzZVLAotCTEy MDI5MzMxOTNVLCA0MDg3NjQzMTY3VSwgMjU5MDAyMTA2N1UsIDIyNTYyNDAxOTZVLCAxNzQ2Njk3 MjkzVSwKLQkxMDEzOTEzNzgzVSwgMTE1NTg2NDkyMVUsIDI3MTU3NzM3MzBVLCAgOTE1MDYxODYy VSwgMTk0ODc2NjU3M1UsCi0JMjMyMjg4Mjg1NFUsIDM3NjExMTkxMDJVLCAxMzQzNDA1Njg0VSwg MzA3ODcxMTk0M1UsIDMwNjc0MzE2NTFVLAotCTMyNDUxNTYzMTZVLCAzNTg4MzU0NTg0VSwgMzQ4 NDYyMzMwNlUsIDM4OTk2MjE1NjNVLCA0MTU2Njg5NzQxVSwKLQkzMjM3MDkwMDU4VSwgMzg4MDA2 Mzg0NFUsICA4NjI0MTYzMThVLCA0MDM5OTIzODY5VSwgMjMwMzc4ODMxN1UsCi0JMzA3MzU5MDUz NlUsICA3MDE2NTM2NjdVLCAyMTMxNTMwODg0VSwgMzE2OTMwOTk1MFUsIDIwMjg0ODY5ODBVLAot CSA3NDcxOTY3NzdVLCAzNjIwMjE4MjI1VSwgIDQzMjAxNjAzNVUsIDE0NDk1ODA1OTVVLCAyNzcy MjY2MzkyVSwKLQkgNDQ0MjI0OTQ4VSwgMTY2MjgzMjA1N1UsIDMxODQwNTU1ODJVLCAzMDI4MzMx NzkyVSwgMTg2MTY4NjI1NFUsCi0JMTEwNDg2NDE3OVUsICAzNDI0MzAzMDdVLCAxMzUwNTEwOTIz VSwgMzAyNDY1NjIzN1UsIDEwMjg0MTc0OTJVLAotCTI4NzA3NzI5NTBVLCAgMjkwODQ3NTU4VSwg MzY3NTY2MzUwMFUsICA1MDg0MzE1MjlVLCA0MjY0MzQwMzkwVSwKLQkyMjYzNTY5OTEzVSwgMTY2 OTMwMjk3NlUsICA1MTk1MTEzODNVLCAyNzA2NDExMjExVSwgMzc2NDYxNTgyOFUsCi0JMzg4MzE2 MjQ5NVUsIDQwNTE0NDUzMDVVLCAyNDEyNzI5Nzk4VSwgMzI5OTQwNTE2NFUsIDM5OTE5MTExNjZV LAotCTIzNDg3NjczMDRVLCAyNjY0MDU0OTA2VSwgMzc2MzYwOTI4MlUsICA1OTM5NDM1ODFVLCAz NzU3MDkwMDQ2VSwKLQkyMDc1MzM4ODk0VSwgMjAyMDU1MDgxNFUsIDQyODc0NTI5MjBVLCA0Mjkw MTQwMDAzVSwgMTQyMjk1NzMxN1UsCi0JMjUxMjcxNjY2N1UsIDIwMDM0ODUwNDVVLCAyMzA3NTIw MTAzVSwgMjI4ODQ3MjE2OVUsIDM5NDA3NTE2NjNVLAotCTQyMDQ2Mzg2NjRVLCAyODkyNTgzNDIz VSwgMTcxMDA2ODMwMFUsIDM5MDQ3NTU5OTNVLCAyMzYzMjQzOTUxVSwKLQkzMDM4MzM0MTIwVSwg IDU0NzA5OTQ2NVUsICA3NzExMDU4NjBVLCAzMTk5OTgzNzM0VSwgNDI4MjA0NjQ2MVUsCi0JMjI5 ODM4ODM2M1UsICA5MzQ4MTAyMThVLCAyODM3ODI3OTAxVSwgMzk1MjUwMDcwOFUsIDIwOTUxMzAy NDhVLAotCTMwODMzMzUyOTdVLCAgIDI2ODg1MjgxVSwgMzkzMjE1NTI4M1UsIDE1MzE3NTExMTZV LCAxNDI1MjI3MTMzVSwKLQkgNDk1NjU0MTU5VSwgMzI3OTYzNDE3NlUsIDM4NTU1NjIyMDdVLCAz OTU3MTk1MzM4VSwgNDE1OTk4NTUyN1UsCi0JIDg5MzM3NTA2MlUsIDE4NzU1MTU1MzZVLCAxMzI3 MjQ3NDIyVSwgMzc1NDE0MDY5M1UsIDEwMjg5MjMxOTdVLAotCTE3Mjk4ODA0NDBVLCAgODA1NTcx Mjk4VSwgIDQ0ODk3MTA5OVUsIDI3MjY3NTcxMDZVLCAyNzQ5NDM2NDYxVSwKLQkyNDg1OTg3MTA0 VSwgIDE3NTMzNzA0MlUsIDMyMzU0Nzc5MjJVLCAzODgyMTE0MzAyVSwgMjAyMDk3MDk3MlUsCi0J IDk0MzkyNjEwOVUsIDI3NjI1ODcxOTVVLCAxOTA0MTk1NTU4VSwgMzQ1MjY1MDU2NFUsICAxMDg0 MzIyODFVLAotCTM4OTM0NjM1NzNVLCAzOTc3NTgzMDgxVSwgMjYzNjUwNDM0OFUsIDExMTA2NzM1 MjVVLCAzNTQ4NDc5ODQxVSwKLQk0MjU4ODU0NzQ0VSwgIDk4MDA0NzcwM1UsIDQwNTcxNzU0MThV LCAzODkwMDA4MjkyVSwgIDE0NTY1MzY0NlUsCi0JMzE0MTg2ODk4OVUsIDMyOTMyMTYyMjhVLCAx MTk0MzMxODM3VSwgMTI1NDU3MDY0MlUsIDMwNDk5MzQ1MjFVLAotCTI4NjgzMTMzNjBVLCAyODg2 MDMyNzUwVSwgMTExMDg3MzgyMFUsICAyNzk1NTM1MjRVLCAzMDA3MjU4NTY1VSwKLQkxMTA0ODA3 ODIyVSwgMzE4Njk2MTA5OFUsICAzMTU3NjQ2NDZVLCAyMTYzNjgwODM4VSwgMzU3NDUwODk5NFUs Ci0JMzA5OTc1NTY1NVUsICAxOTE5NTc2ODRVLCAzNjQyNjU2NzM3VSwgMzMxNzk0NjE0OVUsIDM1 MjIwODc2MzZVLAotCSA0NDQ1MjY0MTBVLCAgNzc5MTU3NjI0VSwgMTA4ODIyOTYyN1UsIDEwOTI0 NjAyMjNVLCAxODU2MDEzNzY1VSwKLQkzNjU5ODc3MzY3VSwgIDM2ODI3MDQ1MVUsICA1MDM1NzA3 MTZVLCAzMDAwOTg0NjcxVSwgMjc0Mjc4OTY0N1UsCi0JIDkyODA5NzcwOVUsIDI5MTQxMDk1MzlV LCAgMzA4ODQzNTY2VSwgMjgxNjE2MTI1M1UsIDM2NjcxOTIwNzlVLAotCTI3NjI2NzkwNTdVLCAz Mzk1MjQwOTg5VSwgMjkyODkyNTAzOFUsIDE0OTE0NjU5MTRVLCAzNDU4NzAyODM0VSwKLQkzNzg3 NzgyNTc2VSwgMjg5NDEwNDgyM1UsIDEyOTY4ODA0NTVVLCAxMjUzNjM2NTAzVSwgIDk4OTk1OTQw N1UsCi0JMjI5MTU2MDM2MVUsIDI3NzY3OTA0MzZVLCAxOTEzMTc4MDQyVSwgMTU4NDY3NzgyOVUs ICA2ODk2Mzc1MjBVLAotCTE4OTg0MDY4NzhVLCAgNjg4MzkxNTA4VSwgMzM4NTIzNDk5OFUsICA4 NDU0OTMyODRVLCAxOTQzNTkxODU2VSwKLQkyNzIwNDcyMDUwVSwgIDIyMjY5NTEwMVUsIDE2NTMz MjA4NjhVLCAyOTA0NjMyMTIwVSwgNDA4NDkzNjAwOFUsCi0JMTA4MDcyMDY4OFUsIDM5MzgwMzI1 NTZVLCAgMzg3ODk2NDI3VSwgMjY1MDgzOTYzMlUsICAgOTkwNDI5OTFVLAotCTE3MjA5MTM3OTRV LCAxMDQ3MTg2MDAzVSwgMTg3NzA0ODA0MFUsIDIwOTA0NTc2NTlVLCAgNTE3MDg3NTAxVSwKLQk0 MTcyMDE0NjY1VSwgMjEyOTcxMzE2M1UsIDI0MTM1MzMxMzJVLCAyNzYwMjg1MDU0VSwgNDEyOTI3 MjQ5NlUsCi0JMTMxNzczNzE3NVUsIDIzMDk1NjY0MTRVLCAyMjI4ODczMzMyVSwgMzg4OTY3MTI4 MFUsIDExMTA4NjQ2MzBVLAotCTM1NzY3OTc3NzZVLCAyMDc0NTUyNzcyVSwgIDgzMjAwMjY0NFUs IDMwOTcxMjI2MjNVLCAyNDY0ODU5Mjk4VSwKLQkyNjc5NjAzODIyVSwgMTY2NzQ4OTg4NVUsIDMy Mzc2NTI3MTZVLCAxNDc4NDEzOTM4VSwgMTcxOTM0MDMzNVUsCi0JMjMwNjYzMTExOVUsICA2Mzk3 MjczNThVLCAzMzY5Njk4MjcwVSwgIDIyNjkwMjc5NlUsIDIwOTk5MjA3NTFVLAotCTE4OTIyODk5 NTdVLCAyMjAxNTk0MDk3VSwgMzUwODE5NzAxM1UsIDM0OTU4MTE4NTZVLCAzOTAwMzgxNDkzVSwK LQkgODQxNjYwMzIwVSwgMzk3NDUwMTQ1MVUsIDMzNjA5NDkwNTZVLCAxNjc2ODI5MzQwVSwgIDcy ODg5OTI1NFUsCi0JMjA0NzgwOTYyN1UsIDIzOTA5NDg5NjJVLCAgNjcwMTY1OTQzVSwgMzQxMjk1 MTgzMVUsIDQxODkzMjAwNDlVLAotCTE5MTE1OTUyNTVVLCAyMDU1MzYzMDg2VSwgIDUwNzE3MDU3 NVUsICA0MTgyMTk1OTRVLCA0MTQxNDk1MjgwVSwKLQkyNjkyMDg4NjkyVSwgNDIwMzYzMDY1NFUs IDM1NDAwOTM5MzJVLCAgNzkxOTg2NTMzVSwgMjIzNzkyMTA1MVUsCi0JMjUyNjg2NDMyNFUsIDI5 NTY2MTY2NDJVLCAxMzk0OTU4NzAwVSwgMTk4Mzc2ODIyM1UsIDE4OTMzNzMyNjZVLAotCSA1OTE2 NTM2NDZVLCAgMjI4NDMyNDM3VSwgMTYxMTA0NjU5OFUsIDMwMDc3MzYzNTdVLCAxMDQwMDQwNzI1 VSwKLQkyNzI2MTgwNzMzVSwgMjc4OTgwNDM2MFUsIDQyNjM1Njg0MDVVLCAgODI5MDk4MTU4VSwg Mzg0NzcyMjgwNVUsCi0JMTEyMzU3ODAyOVUsIDE4MDQyNzYzNDdVLCAgOTk3OTcxMzE5VSwgNDIw Mzc5NzA3NlUsIDQxODUxOTk3MTNVLAotCTI4MTE3MzM2MjZVLCAyMzQzNjQyMTk0VSwgMjk4NTI2 MjMxM1UsIDE0MTc5MzA4MjdVLCAzNzU5NTg3NzI0VSwKLQkxOTY3MDc3OTgyVSwgMTU4NTIyMzIw NFUsIDEwOTc0NzU1MTZVLCAxOTAzOTQ0OTQ4VSwgIDc0MDM4MjQ0NFUsCi0JMTExNDE0MjA2NVUs IDE1NDE3OTYwNjVVLCAxNzE4Mzg0MTcyVSwgMTU0NDA3NjE5MVUsIDExMzQ2ODIyNTRVLAotCTM1 MTk3NTQ0NTVVLCAyODY2MjQzOTIzVSwgIDM0MTg2NTQzN1UsICA2NDU0OTg1NzZVLCAyNjkwNzM1 ODUzVSwKLQkxMDQ2OTYzMDMzVSwgMjQ5MzE3ODQ2MFUsIDExODc2MDQ2OTZVLCAxNjE5NTc3ODIx VSwgIDQ4ODUwMzYzNFUsCi0JMzI1NTc2ODE2MVUsIDIzMDY2NjYxNDlVLCAxNjMwNTE0MDQ0VSwg MjM3NzY5ODM2N1UsIDI3NTE1MDM3NDZVLAotCTM3OTQ0NjcwODhVLCAxNzk2NDE1OTgxVSwgMzY1 NzE3Mzc0NlUsICA0MDkxMzYyOTZVLCAxMzg3MTIyMzQyVSwKLQkxMjk3NzI2NTE5VSwgIDIxOTU0 NDg1NVUsIDQyNzAyODU1NThVLCAgNDM3NTc4ODI3VSwgMTQ0NDY5ODY3OVUsCi0JMjI1ODUxOTQ5 MVUsICA5NjMxMDk4OTJVLCAzOTgyMjQ0MDczVSwgMzM1MTUzNTI3NVUsICAzODUzMjg0OTZVLAot CTE4MDQ3ODQwMTNVLCAgNjk4MDU5MzQ2VSwgMzkyMDUzNTE0N1UsICA3MDgzMzEyMTJVLCAgNzg0 MzM4MTYzVSwKLQkgNzg1Njc4MTQ3VSwgMTIzODM3NjE1OFUsIDE1NTcyOTg4NDZVLCAyMDM3ODA5 MzIxVSwgIDI3MTU3NjIxOFUsCi0JNDE0NTE1NTI2OVUsIDE5MTM0ODE2MDJVLCAyNzYzNjkxOTMx VSwgIDU4ODk4MTA4MFUsIDEyMDEwOTgwNTFVLAotCTM3MTc2NDAyMzJVLCAxNTA5MjA2MjM5VSwg IDY2MjUzNjk2N1UsIDMxODA1MjM2MTZVLCAxMTMzMTA1NDM1VSwKLQkyOTYzNTAwODM3VSwgMjI1 Mzk3MTIxNVUsIDMxNTM2NDI2MjNVLCAxMDY2OTI1NzA5VSwgMjU4Mjc4MTk1OFUsCi0JMzAzNDcy MDIyMlUsIDEwOTA3OTg1NDRVLCAyOTQyMTcwMDA0VSwgNDAzNjE4NzUyMFUsICA2ODY5NzI1MzFV LAotCTI2MTA5OTAzMDJVLCAyNjQxNDM3MDI2VSwgMTgzNzU2MjQyMFUsICA3MjIwOTYyNDdVLCAx MzE1MzMzMDMzVSwKLQkyMTAyMjMxMjAzVSwgMzQwMjM4OTIwOFUsIDM0MDM2OTgxNDBVLCAxMzEy NDAyODMxVSwgMjg5ODQyNjU1OFUsCi0JIDgxNDM4NDU5NlUsICAzODU2NDk1ODJVLCAxOTE2NjQz Mjg1VSwgMTkyNDYyNTEwNlUsIDI1MTI5MDU1ODJVLAotCTI1MDExNzAzMDRVLCA0Mjc1MjIzMzY2 VSwgMjg0MTIyNTI0NlUsIDE0Njc2NjM2ODhVLCAzNTYzNTY3ODQ3VSwKLQkyOTY5MjA4NTUyVSwg IDg4NDc1MDkwMVUsICAxMDI5OTI1NzZVLCAgMjI3ODQ0MzAxVSwgMzY4MTQ0Mjk5NFUsCi0JMzUw Mjg4MTg5NFUsIDQwMzQ2OTMyOTlVLCAxMTY2NzI3MDE4VSwgMTY5NzQ2MDY4N1UsIDE3Mzc3Nzgz MzJVLAotCTE3ODcxNjExMzlVLCAxMDUzMDAzNjU1VSwgMTIxNTAyNDQ3OFUsIDI3OTE2MTY3NjZV LCAyNTI1ODQxMjA0VSwKLQkxNjI5MzIzNDQzVSwgICAgMzIzMzgxNVUsIDIwMDM4MjMwMzJVLCAz MDgzODM0MjYzVSwgMjM3OTI2NDg3MlUsCi0JMzc1MjM5MjMxMlUsIDEyODc0NzU1NTBVLCAzNzcw OTA0MTcxVSwgMzAwNDI0NDYxN1UsIDE1MDIxMTc3ODRVLAotCSA5MTg2OTg0MjNVLCAyNDE5ODU3 NTM4VSwgMzg2NDUwMjA2MlUsIDE3NTEzMjIxMDdVLCAyMTg4Nzc1MDU2VSwKLQk0MDE4NzI4MzI0 VSwgIDk4MzcxMjk1NVUsICA0NDAwNzE5MjhVLCAzNzEwODM4Njc3VSwgMjAwMTAyNzY5OFUsCi0J Mzk5NDcwMjE1MVUsICAgMjI0OTMxMTlVLCAzNTg0NDAwOTE4VSwgMzQ0NjI1MzY3MFUsIDQyNTQ3 ODkwODVVLAotCTE0MDU0NDc4NjBVLCAxMjQwMjQ1NTc5VSwgMTgwMDY0NDE1OVUsIDE2NjEzNjM0 MjRVLCAzMjc4MzI2MTMyVSwKLQkzNDAzNjIzNDUxVSwgICA2NzA5MjgwMlUsIDI2MDkzNTIxOTNV LCAzOTE0MTUwMzQwVSwgMTgxNDg0Mjc2MVUsCi0JMzYxMDgzMDg0N1UsICA1OTE1MzE0MTJVLCAz ODgwMjMyODA3VSwgMTY3MzUwNTg5MFUsIDI1ODUzMjY5OTFVLAotCTE2Nzg1NDQ0NzRVLCAzMTQ4 NDM1ODg3VSwgMzQ1NzIxNzM1OVUsIDExOTMyMjYzMzBVLCAyODE2NTc2OTA4VSwKLQkgMTU0MDI1 MzI5VSwgIDEyMTY3ODg2MFUsIDExNjQ5MTU3MzhVLCAgOTczODczNzYxVSwgIDI2OTExNjEwMFUs Ci0JICA1MjA4Nzk3MFUsICA3NDQwMTUzNjJVLCAgNDk4NTU2MDU3VSwgICA5NDI5ODg4MlUsIDE1 NjMyNzE2MjFVLAotCTIzODMwNTk2MjhVLCA0MTk3MzY3MjkwVSwgMzk1ODQ3Mjk5MFUsIDI1OTIw ODM2MzZVLCAyOTA2NDA4NDM5VSwKLQkxMDk3NzQyNDMzVSwgMzkyNDg0MDUxN1UsICAyNjQ1NTcy NzJVLCAyMjkyMjg3MDAzVSwgMzIwMzMwNzk4NFUsCi0JNDA0NzAzODg1N1UsIDM4MjA2MDk3MDVV LCAyMzMzNDE2MDY3VSwgMTgzOTIwNjA0NlUsIDM2MDA5NDQyNTJVLAotCTM0MTIyNTQ5MDRVLCAg NTgzNTM4MjIyVSwgMjM5MDU1NzE2NlUsIDQxNDA0NTk0MjdVLCAyODEwMzU3NDQ1VSwKLQkgMjI2 Nzc3NDk5VSwgMjQ5NjE1MTI5NVUsIDIyMDczMDE3MTJVLCAzMjgzNjgzMTEyVSwgIDYxMTYzMDI4 MVUsCi0JMTkzMzIxODIxNVUsIDMzMTU2MTA5NTRVLCAzODg5NDQxOTg3VSwgMzcxOTQ1NDI1NlUs IDM5NTcxOTA1MjFVLAotCTEzMTM5OTgxNjFVLCAyMzY1MzgzMDE2VSwgMzE0Njk0MTA2MFUsIDE4 MDEyMDYyNjBVLCAgNzk2MTI0MDgwVSwKLQkyMDc2MjQ4NTgxVSwgMTc0NzQ3MjQ2NFUsIDMyNTQz NjUxNDVVLCAgNTk1NTQzMTMwVSwgMzU3MzkwOTUwM1UsCi0JMzc1ODI1MDIwNFUsIDIwMjA3Njg1 NDBVLCAyNDM5MjU0MjEwVSwgICA5MzM2ODk1MVUsIDMxNTU3OTIyNTBVLAotCTI2MDAyMzI5ODBV LCAzNzA5MTk4Mjk1VSwgMzg5NDkwMDQ0MFUsIDI5NzE4NTA4MzZVLCAxNTc4OTA5NjQ0VSwKLQkx NDQzNDkzMzk1VSwgMjU4MTYyMTY2NVUsIDMwODY1MDYyOTdVLCAyNDQzNDY1ODYxVSwgIDU1ODEw NzIxMVUsCi0JMTUxOTM2NzgzNVUsICAyNDkxNDk2ODZVLCAgOTA4MTAyMjY0VSwgMjU4ODc2NTY3 NVUsIDEyMzI3NDM5NjVVLAotCTEwMDEzMzAzNzNVLCAzNTYxMzMxNjU0VSwgMjI1OTMwMTI4OVUs IDE1NjQ5Nzc2MjRVLCAzODM1MDc3MDkzVSwKLQkgNzI3MjQ0OTA2VSwgNDI1NTczODA2N1UsIDEy MTQxMzM1MTNVLCAyNTcwNzg2MDIxVSwgMzg5OTcwNDYyMVUsCi0JMTYzMzg2MTk4NlUsIDE2MzY5 Nzk1MDlVLCAxNDM4NTAwNDMxVSwgICA1ODQ2MzI3OFUsIDI4MjM0ODU2MjlVLAotCTIyOTc0MzAx ODdVLCAyOTI2NzgxOTI0VSwgMzM3MTM1Mjk0OFUsIDE4NjQwMDkwMjNVLCAyNzIyMjY3OTczVSwK LQkxNDQ0MjkyMDc1VSwgIDQzNzcwMzk3M1UsIDEwNjA0MTQ1MTJVLCAgMTg5NzA1ODYzVSwgIDkx MDAxODEzNVUsCi0JNDA3NzM1Nzk2NFUsICA4ODQyMTM0MjNVLCAyNjQ0OTg2MDUyVSwgMzk3MzQ4 ODM3NFUsIDExODc5MDYxMTZVLAotCTIzMzEyMDc4NzVVLCAgNzgwNDYzNzAwVSwgMzcxMzM1MTY2 MlUsIDM4NTQ2MTEyOTBVLCAgNDEyODA1NTc0VSwKLQkyOTc4NDYyNTcyVSwgMjE3NjIyMjgyMFUs ICA4Mjk0MjQ2OTZVLCAyNzkwNzg4MzMyVSwgMjc1MDgxOTEwOFUsCi0JMTU5NDYxMTY1N1UsIDM4 OTk4NzgzOTRVLCAzMDMyODcwMzY0VSwgMTcwMjg4NzY4MlUsIDE5NDgxNjc3NzhVLAotCSAgMTQx MzAwNDJVLCAgMTkyMjkyNTAwVSwgIDk0NzIyNzA3NlUsICAgOTA3MTk0OTdVLCAzODU0MjMwMzIw VSwKLQkgNzg0MDI4NDM0VSwgMjE0MjM5OTc4N1UsIDE1NjM0NDk2NDZVLCAyODQ0NDAwMjE3VSwg IDgxOTE0MzE3MlUsCi0JMjg4MzMwMjM1NlUsIDIzMjgwNTUzMDRVLCAxMzI4NTMyMjQ2VSwgMjYw Mzg4NTM2M1UsIDMzNzUxODg5MjRVLAotCSA5MzM5NDEyOTFVLCAzNjI3MDM5NzE0VSwgMjEyOTY5 NzI4NFUsIDIxNjcyNTM5NTNVLCAyNTA2OTA1NDM4VSwKLQkxNDEyNDI0NDk3VSwgMjk4MTM5NTk4 NVUsIDE0MTgzNTk2NjBVLCAyOTI1OTAyNDU2VSwgICA1Mjc1Mjc4NFUsCi0JMzcxMzY2Nzk4OFUs IDM5MjQ2Njk0MDVVLCAgNjQ4OTc1NzA3VSwgMTE0NTUyMDIxM1UsIDQwMTg2NTA2NjRVLAotCTM4 MDU5MTU0NDBVLCAyMzgwNTQyMDg4VSwgMjAxMzI2MDk1OFUsIDMyNjI1NzIxOTdVLCAyNDY1MDc4 MTAxVSwKLQkxMTE0NTQwMDY3VSwgMzcyODc2ODA4MVUsIDIzOTY5NTg3NjhVLCAgNTkwNjcyMjcx VSwgIDkwNDgxODcyNVUsCi0JNDI2MzY2MDcxNVUsICA3MDA3NTQ0MDhVLCAxMDQyNjAxODI5VSwg NDA5NDExMTgyM1UsIDQyNzQ4Mzg5MDlVLAotCTI1MTI2OTI2MTdVLCAyNzc0MzAwMjA3VSwgMjA1 NzMwNjkxNVUsIDM0NzA5NDI0NTNVLCAgIDk5MzMzMDg4VSwKLQkxMTQyNjYxMDI2VSwgMjg4OTkz MTM4MFUsICAgMTQzMTY2NzRVLCAyMjAxMTc5MTY3VSwgIDQxNTI4OTQ1OVUsCi0JIDQ0ODI2NTc1 OVUsIDM1MTUxNDI3NDNVLCAzMjU0OTAzNjgzVSwgIDI0NjYzMzI4MVUsIDExODQzMDcyMjRVLAot CTI0MTgzNDc4MzBVLCAyMDkyOTY3MzE0VSwgMjY4MjA3MjMxNFUsIDI1NTg3NTAyMzRVLCAyMDAw MzUyMjYzVSwKLQkxNTQ0MTUwNTMxVSwgIDM5OTAxMDQwNVUsIDE1MTM5NDYwOTdVLCAgNDk5Njgy OTM3VSwgIDQ2MTE2NzQ2MFUsCi0JMzA0NTU3MDYzOFUsIDE2MzM2Njk3MDVVLCAgODUxNDkyMzYy VSwgNDA1MjgwMTkyMlUsIDIwNTUyNjY3NjVVLAotCSA2MzU1NTY5OTZVLCAgMzY4MjY2MzU2VSwg MjM4NTczNzM4M1UsIDMyMTgyMDIzNTJVLCAyNjAzNzcyNDA4VSwKLQkgMzQ5MTc4NzkyVSwgIDIy NjQ4MjU2N1UsIDMxMDI0MjYwNjBVLCAzNTc1OTk4MjY4VSwgMjEwMzAwMTg3MVUsCi0JMzI0MzEz NzA3MVUsICAyMjU1MDA2ODhVLCAxNjM0NzE4NTkzVSwgNDI4MzMxMTQzMVUsIDQyOTIxMjI5MjNV LAotCTM4NDI4MDI3ODdVLCAgODExNzM1NTIzVSwgIDEwNTcxMjUxOFUsICA2NjM0MzQwNTNVLCAx ODU1ODg5MjczVSwKLQkyODQ3OTcyNTk1VSwgMTE5NjM1NTQyMVUsIDI1NTIxNTAxMTVVLCA0MjU0 NTEwNjE0VSwgMzc1MjE4MTI2NVUsCi0JMzQzMDcyMTgxOVUsIDM4Mjg3MDUzOTZVLCAzNDM2Mjg3 OTA1VSwgMzQ0MTk2NDkzN1UsIDQxMjM2NzA2MzFVLAotCSAzNTMwMDE1MzlVLCAgNDU5NDk2NDM5 VSwgMzc5OTY5MDg2OFUsIDEyOTM3Nzc2NjBVLCAyNzYxMDc5NzM3VSwKLQkgNDk4MDk2MzM5VSwg MzM5ODQzMzM3NFUsIDQwODAzNzgzODBVLCAyMzA0NjkxNTk2VSwgMjk5NTcyOTA1NVUsCi0JNDEz NDY2MDQxOVUsIDM5MDM0NDQwMjRVLCAzNTc2NDk0OTkzVSwgIDIwMzY4MjE3NVUsIDMzMjExNjQ4 NTdVLAotCTI3NDc5NjM2MTFVLCAgIDc5NzQ5MDg1VSwgMjk5Mjg5MDM3MFUsIDEyNDAyNzg1NDlV LCAxNzcyMTc1NzEzVSwKLQkyMTExMzMxOTcyVSwgMjY1NTAyMzQ0OVUsIDE2ODM4OTYzNDVVLCAy ODM2MDI3MjEyVSwgMzQ4Mjg2ODAyMVUsCi0JMjQ4OTg4NDg3NFUsICA3NTY4NTM5NjFVLCAyMjk4 ODc0NTAxVSwgNDAxMzQ0ODY2N1UsIDQxNDM5OTYwMjJVLAotCTI5NDgzMDY4NThVLCA0MTMyOTIw MDM1VSwgMTI4MzI5OTI3MlUsICA5OTU1OTIyMjhVLCAzNDUwNTA4NTk1VSwKLQkxMDI3ODQ1NzU5 VSwgMTc2Njk0MjcyMFUsIDM4NjE0MTE4MjZVLCAxNDQ2ODYxMjMxVSwgICA5NTk3NDk5M1UsCi0J MzUwMjI2MzU1NFUsIDE0ODc1MzIxOTRVLCAgNjAxNTAyNDcyVSwgNDEyOTYxOTEyOVUsICAyNTAx MzE3NzNVLAotCTIwNTAwNzk1NDdVLCAzMTk4OTAzOTQ3VSwgMzEwNTU4OTc3OFUsIDQwNjY0ODEz MTZVLCAzMDI2MzgzOTc4VSwKLQkyMjc2OTAxNzEzVSwgIDM2NTYzNzc1MVUsIDIyNjA3MTg0MjZV LCAxMzk0Nzc1NjM0VSwgMTc5MTE3MjMzOFUsCi0JMjY5MDUwMzE2M1UsIDI5NTI3Mzc4NDZVLCAx NTY4NzEwNDYyVSwgIDczMjYyMzE5MFUsIDI5ODAzNTgwMDBVLAotCTEwNTM2MzE4MzJVLCAxNDMy NDI2OTUxVSwgMzIyOTE0OTYzNVUsIDE4NTQxMTM5ODVVLCAzNzE5NzMzNTMyVSwKLQkzMjA0MDMx OTM0VSwgIDczNTc3NTUzMVUsICAxMDc0Njg2MjBVLCAzNzM0NjExOTg0VSwgIDYzMTAwOTQwMlUs Ci0JMzA4MzYyMjQ1N1UsIDQxMDk1ODA2MjZVLCAgMTU5MzczNDU4VSwgMTMwMTk3MDIwMVUsIDQx MzIzODkzMDJVLAotCTEyOTMyNTUwMDRVLCAgODQ3MTgyNzUyVSwgNDE3MDAyMjczN1UsICAgOTY3 MTI5MDBVLCAyNjQxNDA2NzU1VSwKLQkxMzgxNzI3NzU1VSwgIDQwNTYwODI4N1UsIDQyODc5MTk2 MjVVLCAxNzAzNTU0MjkwVSwgMzU4OTU4MDI0NFUsCi0JMjkxMTQwMzQ4OFUsICAgIDIxNjY1NjVV LCAyNjQ3MzA2NDUxVSwgMjMzMDUzNTExN1UsIDEyMDA4MTUzNThVLAotCTExNjU5MTY3NTRVLCAg MjQ1MDYwOTExVSwgNDA0MDY3OTA3MVUsIDM2ODQ5MDg3NzFVLCAyNDUyODM0MTI2VSwKLQkyNDg2 ODcyNzczVSwgMjMxODY3ODM2NVUsIDI5NDA2Mjc5MDhVLCAxODM3ODM3MjQwVSwgMzQ0Nzg5NzQw OVUsCi0JNDI3MDQ4NDY3NlUsIDE0OTUzODg3MjhVLCAzNzU0Mjg4NDc3VSwgNDIwNDE2Nzg4NFUs IDEzODY5Nzc3MDVVLAotCTI2OTIyMjQ3MzNVLCAzMDc2MjQ5Njg5VSwgNDEwOTU2ODA0OFUsIDQx NzA5NTUxMTVVLCA0MTY3NTMxMzU2VSwKLQk0MDIwMTg5OTUwVSwgNDI2MTg1NTAzOFUsIDMwMzY5 MDc1NzVVLCAzNDEwMzk5ODg1VSwgMzA3NjM5NTczN1UsCi0JMTA0NjE3ODYzOFUsICAxNDQ0OTY3 NzBVLCAgMjMwNzI1ODQ2VSwgMzM0OTYzNzE0OVUsICAgMTcwNjU3MTdVLAotCTI4MDk5MzIwNDhV LCAyMDU0NTgxNzg1VSwgMzYwODQyNDk2NFUsIDMyNTk2Mjg4MDhVLCAgMTM0ODk3Mzg4VSwKLQkz NzQzMDY3NDYzVSwgIDI1NzY4NTkwNFUsIDM3OTU2NTY1OTBVLCAxNTYyNDY4NzE5VSwgMzU4OTEw MzkwNFUsCi0JMzEyMDQwNDcxMFUsICAyNTQ2ODQ1NDdVLCAyNjUzNjYxNTgwVSwgMzY2MzkwNDc5 NVUsIDI2MzE5NDI3NThVLAotCTEwNjMyMzQzNDdVLCAyNjA5NzMyOTAwVSwgMjMzMjA4MDcxNVUs IDM1MjExMjUyMzNVLCAxMTgwNTk5NTk5VSwKLQkxOTM1ODY4NTg2VSwgNDExMDk3MDQ0MFUsICAy OTY3MDYzNzFVLCAyMTI4NjY2MzY4VSwgMTMxOTg3NTc5MVUsCi0JMTU3MDkwMDE5N1UsIDMwOTYw MjU0ODNVLCAxNzk5ODgyNTE3VSwgMTkyODMwMjAwN1UsIDExNjM3MDc3NThVLAotCTEyNDQ0OTE0 ODlVLCAzNTMzNzcwMjAzVSwgIDU2NzQ5NjA1M1UsIDI3NTc5MjQzMDVVLCAyNzgxNjM5MzQzVSwK LQkyODE4NDIwMTA3VSwgIDU2MDQwNDg4OVUsIDI2MTk2MDk3MjRVLCA0MTc2MDM1NDMwVSwgMjUx MTI4OTc1M1UsCi0JMjUyMTg0MjAxOVUsIDM5MTA1NTM1MDJVLCAyOTI2MTQ5Mzg3VSwgMzMwMjA3 ODE3MlUsIDQyMzcxMTg4NjdVLAotCSAzMzA3MjUxMjZVLCAgMzY3NDAwNjc3VSwgIDg4ODIzOTg1 NFUsICA1NDU1NzA0NTRVLCA0MjU5NTkwNTI1VSwKLQkgMTM0MzQzNjE3VSwgMTEwMjE2OTc4NFUs IDE2NDc0NjM3MTlVLCAzMjYwOTc5Nzg0VSwgMTUxODg0MDg4M1UsCi0JMzYzMTUzNzk2M1UsIDMz NDI2NzE0NTdVLCAxMzAxNTQ5MTQ3VSwgMjA4MzczOTM1NlUsICAxNDY1OTM3OTJVLAotCTMyMTc5 NTkwODBVLCAgNjUyNzU1NzQzVSwgMjAzMjE4NzE5M1UsIDM4OTg3NTg0MTRVLCAxMDIxMzU4MDkz VSwKLQk0MDM3NDA5MjMwVSwgMjE3NjQwNzkzMVUsIDM0MjczOTE5NTBVLCAyODgzNTUzNjAzVSwg IDk4NTYxMzgyN1UsCi0JMzEwNTI2NTA5MlUsIDM0MjMxNjg0MjdVLCAzMzg3NTA3NjcyVSwgIDQ2 NzE3MDI4OFUsIDIxNDEyNjYxNjNVLAotCTM3MjM4NzAyMDhVLCAgOTE2NDEwOTE0VSwgMTI5Mzk4 Nzc5OVUsIDI2NTI1ODQ5NTBVLCAgNzY5MTYwMTM3VSwKLQkzMjA1MjkyODk2VSwgMTU2MTI4NzM1 OVUsIDE2ODQ1MTAwODRVLCAzMTM2MDU1NjIxVSwgMzc2NTE3MTM5MVUsCi0JIDYzOTY4MzIzMlUs IDI2Mzk1NjkzMjdVLCAxMjE4NTQ2OTQ4VSwgNDI2MzU4NjY4NVUsIDMwNTgyMTU3NzNVLAotCTIz NTIyNzk4MjBVLCAgNDAxODcwMjE3VSwgMjYyNTgyMjQ2M1UsIDE1MjkxMjUyOTZVLCAyOTgxODAx ODk1VSwKLQkxMTkxMjg1MjI2VSwgNDAyNzcyNTQzN1UsIDM0MzI3MDAyMTdVLCA0MDk4ODM1NjYx VSwgIDk3MTE4Mjc4M1UsCi0JMjQ0Mzg2MTE3M1UsIDM4ODE0NTcxMjNVLCAzODc0Mzg2NjUxVSwg IDQ1NzI3NjE5OVUsIDI2MzgyOTQxNjBVLAotCTQwMDI4MDkzNjhVLCAgNDIxMTY5MDQ0VSwgMTEx MjY0MjU4OVUsIDMwNzYyMTM3NzlVLCAzMzg3MDMzOTcxVSwKLQkyNDk5NjEwOTUwVSwgMzA1NzI0 MDkxNFUsIDE2NjI2Nzk3ODNVLCAgNDYxMjI0NDMxVSwgMTE2ODM5NTkzM1UKLX07Ci1zdGF0aWMg Y29uc3QgdWludDMyX3QgaW5pdF9ieV9hcnJheV8zMl9leHBlY3RlZFtdID0gewotCTI5MjA3MTEx ODNVLCAzODg1NzQ1NzM3VSwgMzUwMTg5MzY4MFUsICA4NTY0NzA5MzRVLCAxNDIxODY0MDY4VSwK LQkgMjc3MzYxMDM2VSwgMTUxODYzODAwNFUsIDIzMjg0MDQzNTNVLCAzMzU1NTEzNjM0VSwgICA2 NDMyOTE4OVUsCi0JMTYyNDU4NzY3M1UsIDM1MDg0NjcxODJVLCAyNDgxNzkyMTQxVSwgMzcwNjQ4 MDc5OVUsIDE5MjU4NTkwMzdVLAotCTI5MTMyNzU2OTlVLCAgODgyNjU4NDEyVSwgIDM4NDY0MTIx OVUsICA0MjIyMDIwMDJVLCAxODczMzg0ODkxVSwKLQkyMDA2MDg0MzgzVSwgMzkyNDkyOTkxMlUs IDE2MzY3MTgxMDZVLCAzMTA4ODM4NzQyVSwgMTI0NTQ2NTcyNFUsCi0JNDE5NTQ3MDUzNVUsICA3 NzkyMDcxOTFVLCAxNTc3NzIxMzczVSwgMTM5MDQ2OTU1NFUsIDI5Mjg2NDgxNTBVLAotCSAxMjEz OTk3MDlVLCAzMTcwODM5MDE5VSwgNDA0NDM0NzUwMVUsICA5NTM5NTM4MTRVLCAzODIxNzEwODUw VSwKLQkzMDg1NTkxMzIzVSwgMzY2NjUzNTU3OVUsIDM1Nzc4Mzc3MzdVLCAyMDEyMDA4NDEwVSwg MzU2NTQxNzQ3MVUsCi0JNDA0NDQwODAxN1UsICA0MzM2MDA5NjVVLCAxNjM3Nzg1NjA4VSwgMTc5 ODUwOTc2NFUsICA4NjA3NzA1ODlVLAotCTMwODE0NjYyNzNVLCAzOTgyMzkzNDA5VSwgMjQ1MTky ODMyNVUsIDM0MzcxMjQ3NDJVLCA0MDkzODI4NzM5VSwKLQkzMzU3Mzg5Mzg2VSwgMjE1NDU5NjEy M1UsICA0OTY1NjgxNzZVLCAyNjUwMDM1MTY0VSwgMjQ3MjM2MTg1MFUsCi0JICAgMzQzODI5OVUs IDIxNTAzNjYxMDFVLCAxNTc3MjU2Njc2VSwgMzgwMjU0NjQxM1UsIDE3ODc3NzQ2MjZVLAotCTQw NzgzMzE1ODhVLCAzNzA2MTAzMTQxVSwgIDE3MDM5MTEzOFUsIDM4MDYwODUxNTRVLCAxNjgwOTcw MTAwVSwKLQkxOTYxNjM3NTIxVSwgMzMxNjAyOTc2NlUsICA4OTA2MTAyNzJVLCAxNDUzNzUxNTgx VSwgMTQzMDI4MzY2NFUsCi0JMzA1MTA1NzQxMVUsIDM1OTcwMDMxODZVLCAgNTQyNTYzOTU0VSwg Mzc5NjQ5MDI0NFUsIDE2OTAwMTY2ODhVLAotCTM0NDg3NTIyMzhVLCAgNDQwNzAyMTczVSwgIDM0 NzI5MDQ5N1UsIDExMjEzMzY2NDdVLCAyNTQwNTg4NjIwVSwKLQkgMjgwODgxODk2VSwgMjQ5NTEz NjQyOFUsICAyMTM3MDczOTZVLCAgIDE1MTA0ODI0VSwgMjk0NjE4MDM1OFUsCi0JIDY1OTAwMDAx NlUsICA1NjYzNzkzODVVLCAyNjE0MDMwOTc5VSwgMjg1NTc2MDE3MFUsICAzMzQ1MjY1NDhVLAot CTIzMTU1Njk0OTVVLCAyNzI5NTE4NjE1VSwgIDU2NDc0NTg3N1UsIDEyNjM1MTc2MzhVLCAzMTU3 MTg1Nzk4VSwKLQkxNjA0ODUyMDU2VSwgMTAxMTYzOTg4NVUsIDI5NTA1Nzk1MzVVLCAyNTI0MjE5 MTg4VSwgIDMxMjk1MTAxMlUsCi0JMTUyODg5NjY1MlUsIDEzMjc4NjEwNTRVLCAyODQ2OTEwMTM4 VSwgMzk2Njg1NTkwNVUsIDI1MzY3MjE1ODJVLAotCSA4NTUzNTM5MTFVLCAxNjg1NDM0NzI5VSwg MzMwMzk3ODkyOVUsIDE2MjQ4NzIwNTVVLCA0MDIwMzI5NjQ5VSwKLQkzMTY0ODAyMTQzVSwgMTY0 MjgwMjcwMFUsIDE5NTc3Mjc4NjlVLCAxNzkyMzUyNDI2VSwgMzMzNDYxODkyOVUsCi0JMjYzMTU3 NzkyM1UsIDMwMjcxNTYxNjRVLCAgODQyMzM0MjU5VSwgMzM1MzQ0Njg0M1UsIDEyMjY0MzIxMDRV LAotCTE3NDI4MDEzNjlVLCAzNTUyODUyNTM1VSwgMzQ3MTY5ODgyOFUsIDE2NTM5MTAxODZVLCAz MzgwMzMwOTM5VSwKLQkyMzEzNzgyNzAxVSwgMzM1MTAwNzE5NlUsIDIxMjk4Mzk5OTVVLCAxODAw NjgyNDE4VSwgNDA4NTg4NDQyMFUsCi0JMTYyNTE1NjYyOVUsIDM2Njk3MDE5ODdVLCAgNjE1MjEx ODEwVSwgMzI5NDc5MTY0OVUsIDQxMzExNDM3ODRVLAotCTI1OTA4NDM1ODhVLCAzMjA3NDIyODA4 VSwgMzI3NTA2NjQ2NFUsICA1NjE1OTI4NzJVLCAzOTU3MjA1NzM4VSwKLQkzMzk2NTc4MDk4VSwg ICA0ODQxMDY3OFUsIDM1MDU1NTY0NDVVLCAxMDA1NzY0ODU1VSwgMzkyMDYwNjUyOFUsCi0JMjkz Njk4MDQ3M1UsIDIzNzg5MTg2MDBVLCAyNDA0NDQ5ODQ1VSwgMTY0OTUxNTE2M1UsICA3MDEyMDM1 NjNVLAotCTM3MDUyNTYzNDlVLCAgIDgzNzE0MTk5VSwgMzU4Njg1NDEzMlUsICA5MjI5Nzg0NDZV LCAyODYzNDA2MzA0VSwKLQkzNTIzMzk4OTA3VSwgMjYwNjg2NDgzMlUsIDIzODUzOTkzNjFVLCAz MTcxNzU3ODE2VSwgNDI2Mjg0MTAwOVUsCi0JMzY0NTgzNzcyMVUsIDExNjk1Nzk0ODZVLCAzNjY2 NDMzODk3VSwgMzE3NDY4OTQ3OVUsIDE0NTc4NjY5NzZVLAotCTM4MDM4OTUxMTBVLCAzMzQ2NjM5 MTQ1VSwgMTkwNzIyNDQwOVUsIDE5Nzg0NzM3MTJVLCAxMDM2NzEyNzk0VSwKLQkgOTgwNzU0ODg4 VSwgMTMwMjc4MjM1OVUsIDE3NjUyNTI0NjhVLCAgNDU5MjQ1NzU1VSwgMzcyODkyMzg2MFUsCi0J MTUxMjg5NDIwOVUsIDIwNDY0OTE5MTRVLCAgMjA3ODYwNTI3VSwgIDUxNDE4ODY4NFUsIDIyODg3 MTM2MTVVLAotCTE1OTczNTQ2NzJVLCAzMzQ5NjM2MTE3VSwgMjM1NzI5MTExNFUsIDM5OTU3OTYy MjFVLCAgOTQ1MzY0MjEzVSwKLQkxODkzMzI2NTE4VSwgMzc3MDgxNDAxNlUsIDE2OTE1NTI3MTRV LCAyMzk3NTI3NDEwVSwgIDk2NzQ4NjM2MVUsCi0JIDc3NjQxNjQ3MlUsIDQxOTc2NjE0MjFVLCAg OTUxMTUwODE5VSwgMTg1Mjc3MDk4M1UsIDQwNDQ2MjQxODFVLAotCTEzOTk0Mzk3MzhVLCA0MTk0 NDU1Mjc1VSwgMjI4NDAzNzY2OVUsIDE1NTA3MzQ5NThVLCAzMzIxMDc4MTA4VSwKLQkxODY1MjM1 OTI2VSwgMjkxMjEyOTk2MVUsIDI2NjQ5ODA4NzdVLCAxMzU3NTcyMDMzVSwgMjYwMDE5NjQzNlUs Ci0JMjQ4NjcyODIwMFUsIDIzNzI2Njg3MjRVLCAxNTY3MzE2OTY2VSwgMjM3NDExMTQ5MVUsIDE4 Mzk4NDM1NzBVLAotCSAgMjA4MTU2MTJVLCAzNzI3MDA4NjA4VSwgMzg3MTk5NjIyOVUsICA4MjQw NjEyNDlVLCAxOTMyNTAzOTc4VSwKLQkzNDA0NTQxNzI2VSwgIDc1ODQyODkyNFUsIDI2MDkzMzEz NjRVLCAxMjIzOTY2MDI2VSwgMTI5OTE3OTgwOFUsCi0JIDY0ODQ5OTM1MlUsIDIxODAxMzQ0MDFV LCAgODgwODIxMTcwVSwgMzc4MTEzMDk1MFUsICAxMTM0OTEyNzBVLAotCTEwMzI0MTM3NjRVLCA0 MTg1ODg0Njk1VSwgMjQ5MDM5NjAzN1UsIDEyMDE5MzI4MTdVLCA0MDYwOTUxNDQ2VSwKLQk0MTY1 NTg2ODk4VSwgMTYyOTgxMzIxMlUsIDI4ODc4MjExNThVLCAgNDE1MDQ1MzMzVSwgIDYyODkyNjg1 NlUsCi0JMjE5MzQ2NjA3OVUsIDMzOTE4NDM0NDVVLCAyMjI3NTQwNjgxVSwgMTkwNzA5OTg0NlUs IDI4NDg0NDgzOTVVLAotCTE3MTc4MjgyMjFVLCAxMzcyNzA0NTM3VSwgMTcwNzU0OTg0MVUsIDIy OTQwNTg4MTNVLCAyMTAxMjE0NDM3VSwKLQkyMDUyNDc5NTMxVSwgMTY5NTgwOTE2NFUsIDMxNzY1 ODczMDZVLCAyNjMyNzcwNDY1VSwgICA4MTYzNDQwNFUsCi0JMTYwMzIyMDU2M1UsICA2NDQyMzg0 ODdVLCAgMzAyODU3NzYzVSwgIDg5NzM1Mjk2OFUsIDI2MTMxNDY2NTNVLAotCTEzOTE3MzAxNDlV LCA0MjQ1NzE3MzEyVSwgNDE5MTgyODc0OVUsIDE5NDg0OTI1MjZVLCAyNjE4MTc0MjMwVSwKLQkz OTkyOTg0NTIyVSwgMjE3ODg1Mjc4N1UsIDM1OTYwNDQ1MDlVLCAzNDQ1NTczNTAzVSwgMjAyNjYx NDYxNlUsCi0JIDkxNTc2MzU2NFUsIDM0MTU2ODkzMzRVLCAyNTMyMTUzNDAzVSwgMzg3OTY2MTU2 MlUsIDIyMTUwMjc0MTdVLAotCTMxMTExNTQ5ODZVLCAyOTI5NDc4MzcxVSwgIDY2ODM0NjM5MVUs IDExNTIyNDEzODFVLCAyNjMyMDI5NzExVSwKLQkzMDA0MTUwNjU5VSwgMjEzNTAyNTkyNlUsICA5 NDg2OTA1MDFVLCAyNzk5MTE5MTE2VSwgNDIyODgyOTQwNlUsCi0JMTk4MTE5NzQ4OVUsIDQyMDkw NjQxMzhVLCAgNjg0MzE4NzUxVSwgMzQ1OTM5Nzg0NVUsICAyMDE3OTA4NDNVLAotCTQwMjI1NDEx MzZVLCAzMDQzNjM1ODc3VSwgIDQ5MjUwOTYyNFUsIDMyNjM0NjY3NzJVLCAxNTA5MTQ4MDg2VSwK LQkgOTIxNDU5MDI5VSwgMzE5ODg1NzE0NlUsICA3MDU0Nzk3MjFVLCAzODM1OTY2OTEwVSwgMzYw MzM1NjQ2NVUsCi0JIDU3NjE1OTc0MVUsIDE3NDI4NDk0MzFVLCAgNTk0MjE0ODgyVSwgMjA1NTI5 NDM0M1UsIDM2MzQ4NjE4NjFVLAotCSA0NDk1NzE3OTNVLCAzMjQ2MzkwNjQ2VSwgMzg2ODIzMjE1 MVUsIDE0NzkxNTY1ODVVLCAyOTAwMTI1NjU2VSwKLQkyNDY0ODE1MzE4VSwgMzk2MDE3ODEwNFUs IDE3ODQyNjE5MjBVLCAgIDE4MzExNDc2VSwgMzYyNzEzNTA1MFUsCi0JIDY0NDYwOTY5N1UsICA0 MjQ5Njg5OTZVLCAgOTE5ODkwNzAwVSwgMjk4NjgyNDExMFUsICA4MTY0MjMyMTRVLAotCTQwMDM1 NjI4NDRVLCAxMzkyNzE0MzA1VSwgMTc1NzM4NDQyOFUsIDI1NjkwMzA1OThVLCAgOTk1OTQ5NTU5 VSwKLQkzODc1NjU5ODgwVSwgMjkzMzgwNzgyM1UsIDI3NTI1MzY4NjBVLCAyOTkzODU4NDY2VSwg NDAzMDU1ODg5OVUsCi0JMjc3MDc4MzQyN1UsIDI3NzU0MDYwMDVVLCAyNzc3NzgxNzQyVSwgMTkz MTI5MjY1NVUsICA0NzIxNDc5MzNVLAotCTM4NjU4NTM4MjdVLCAyNzI2NDcwNTQ1VSwgMjY2ODQx Mjg2MFUsIDI4ODcwMDgyNDlVLCAgNDA4OTc5MTkwVSwKLQkzNTc4MDYzMzIzVSwgMzI0MjA4MjA0 OVUsIDE3NzgxOTM1MzBVLCAgIDI3OTgxOTA5VSwgMjM2MjgyNjUxNVUsCi0JIDM4OTg3NTY3N1Us IDEwNDM4NzgxNTZVLCAgNTgxNjUzOTAzVSwgMzgzMDU2ODk1MlUsICAzODk1MzU5NDJVLAotCTM3 MTM1MjMxODVVLCAyNzY4MzczMzU5VSwgMjUyNjEwMTU4MlUsIDE5OTg2MTgxOTdVLCAxMTYwODU5 NzA0VSwKLQkzOTUxMTcyNDg4VSwgMTA5ODAwNTAwM1UsICA5MDYyNzU2OTlVLCAzNDQ2MjI4MDAy VSwgMjIyMDY3Nzk2M1UsCi0JMjA1OTMwNjQ0NVUsICAxMzIxOTk1NzFVLCAgNDc2ODM4NzkwVSwg MTg2ODAzOTM5OVUsIDMwOTczNDQ4MDdVLAotCSA4NTczMDA5NDVVLCAgMzk2MzQ1MDUwVSwgMjgz NTkxOTkxNlUsIDE3ODIxNjg4MjhVLCAxNDE5NTE5NDcwVSwKLQk0Mjg4MTM3NTIxVSwgIDgxOTA4 NzIzMlUsICA1OTYzMDE0OTRVLCAgODcyODIzMTcyVSwgMTUyNjg4ODIxN1UsCi0JIDgwNTE2MTQ2 NVUsIDExMTYxODYyMDVVLCAyODI5MDAyNzU0VSwgMjM1MjYyMDEyMFUsICA2MjAxMjE1MTZVLAot CSAzNTQxNTkyNjhVLCAzNjAxOTQ5Nzg1VSwgIDIwOTU2ODEzOFUsIDEzNTIzNzE3MzJVLCAyMTQ1 OTc3MzQ5VSwKLQk0MjM2ODcxODM0VSwgMTUzOTQxNDA3OFUsIDM1NTgxMjYyMDZVLCAzMjI0ODU3 MDkzVSwgNDE2NDE2NjY4MlUsCi0JMzgxNzU1MzQ0MFUsIDMzMDE3ODAyNzhVLCAyNjgyNjk2ODM3 VSwgMzczNDk5NDc2OFUsIDEzNzA5NTAyNjBVLAotCTE0Nzc0MjEyMDJVLCAyNTIxMzE1NzQ5VSwg MTMzMDE0ODEyNVUsIDEyNjE1NTQ3MzFVLCAyNzY5MTQzNjg4VSwKLQkzNTU0NzU2MjkzVSwgNDIz NTg4MjY3OFUsIDMyNTQ2ODYwNTlVLCAzNTMwNTc5OTUzVSwgMTIxNTQ1MjYxNVUsCi0JMzU3NDk3 MDkyM1UsIDQwNTcxMzE0MjFVLCAgNTg5MjI0MTc4VSwgMTAwMDA5ODE5M1UsICAxNzExOTA3MThV LAotCTI1MjE4NTIwNDVVLCAyMzUxNDQ3NDk0VSwgMjI4NDQ0MTU4MFUsIDI2NDY2ODU1MTNVLCAz NDg2OTMzNTYzVSwKLQkzNzg5ODY0OTYwVSwgMTE5MDUyODE2MFUsIDE3MDI1MzY3ODJVLCAxNTM0 MTA1NTg5VSwgNDI2Mjk0NjgyN1UsCi0JMjcyNjY4NjgyNlUsIDM1ODQ1NDQ4NDFVLCAyMzQ4Mjcw MTI4VSwgMjE0NTA5MjI4MVUsIDI1MDI3MTg1MDlVLAotCTEwMjc4MzI0MTFVLCAzNTcxMTcxMTUz VSwgMTI4NzM2MTE2MVUsIDQwMTE0NzQ0MTFVLCAzMjQxMjE1MzUxVSwKLQkyNDE5NzAwODE4VSwg IDk3MTI0MjcwOVUsIDEzNjE5NzU3NjNVLCAxMDk2ODQyNDgyVSwgMzI3MTA0NTUzN1UsCi0JICA4 MTE2NTQ0OVUsICA2MTI0MzgwMjVVLCAzOTEyOTY2Njc4VSwgMTM1NjkyOTgxMFUsICA3MzM1NDU3 MzVVLAotCSA1MzcwMDM4NDNVLCAxMjgyOTUzMDg0VSwgIDg4NDQ1ODI0MVUsICA1ODg5MzAwOTBV LCAzOTMwMjY5ODAxVSwKLQkyOTYxNDcyNDUwVSwgMTIxOTUzNTUzNFUsIDM2MzIyNTE5NDNVLCAg MjY4MTgzOTAzVSwgMTQ0MTI0MDUzM1UsCi0JMzY1MzkwMzM2MFUsIDM4NTQ0NzMzMTlVLCAyMjU5 MDg3MzkwVSwgMjU0ODI5MzA0OFUsIDIwMjI2NDExOTVVLAotCTIxMDU1NDM5MTFVLCAxNzY0MDg1 MjE3VSwgMzI0NjE4MzE4NlUsICA0ODI0Mzg4MDVVLCAgODg4MzE3ODk1VSwKLQkyNjI4MzE0NzY1 VSwgMjQ2NjIxOTg1NFUsICA3MTc1NDYwMDRVLCAyMzIyMjM3MDM5VSwgIDQxNjcyNTIzNFUsCi0J MTU0NDA0OTkyM1UsIDE3OTc5NDQ5NzNVLCAzMzk4NjUyMzY0VSwgMzExMTkwOTQ1NlUsICA0ODU3 NDI5MDhVLAotCTIyNzc0OTEwNzJVLCAxMDU2MzU1MDg4VSwgMzE4MTAwMTI3OFUsICAxMjk2OTUw NzlVLCAyNjkzNjI0NTUwVSwKLQkxNzY0NDM4NTY0VSwgMzc5Nzc4NTQ3MFUsICAxOTU1MDM3MTNV LCAzMjY2NTE5NzI1VSwgMjA1MzM4OTQ0NFUsCi0JMTk2MTUyNzgxOFUsIDM0MDAyMjY1MjNVLCAz Nzc3OTAzMDM4VSwgMjU5NzI3NDMwN1UsIDQyMzU4NTEwOTFVLAotCTQwOTQ0MDY2NDhVLCAyMTcx NDEwNzg1VSwgMTc4MTE1MTM4NlUsIDEzNzg1NzcxMTdVLCAgNjU0NjQzMjY2VSwKLQkzNDI0MDI0 MTczVSwgMzM4NTgxMzMyMlUsICA2NzkzODU3OTlVLCAgNDc5MzgwOTEzVSwgIDY4MTcxNTQ0MVUs Ci0JMzA5NjIyNTkwNVUsICAyNzY4MTM0MDlVLCAzODU0Mzk4MDcwVSwgMjcyMTEwNTM1MFUsICA4 MzEyNjMzMTVVLAotCTMyNzYyODAzMzdVLCAyNjI4MzAxNTIyVSwgMzk4NDg2ODQ5NFUsIDE0NjYw OTk4MzRVLCAyMTA0OTIyMTE0VSwKLQkxNDEyNjcyNzQzVSwgIDgyMDMzMDQwNFUsIDM0OTE1MDEw MTBVLCAgOTQyNzM1ODMyVSwgIDcxMDY1MjgwN1UsCi0JMzk3MjY1MjA5MFUsICA2Nzk4ODEwODhV LCAgIDQwNTc3MDA5VSwgMzcwNTI4NjM5N1UsIDI4MTU0MjM0ODBVLAotCTM1NjYyNjI0MjlVLCAg NjYzMzk2NTEzVSwgMzc3Nzg4NzQyOVUsIDQwMTY2NzA2NzhVLCAgNDA0NTM5MzcwVSwKLQkxMTQy NzEyOTI1VSwgMTE0MDE3MzQwOFUsIDI5MTMyNDgzNTJVLCAyODcyMzIxMjg2VSwgIDI2Mzc1MTg0 MVUsCi0JMzE3NTE5NjA3M1UsIDMxNjI1NTc1ODFVLCAyODc4OTk2NjE5VSwgICA3NTQ5ODU0OFUs IDM4MzY4MzMxNDBVLAotCTMyODQ2NjQ5NTlVLCAxMTU3NTIzODA1VSwgIDExMjg0NzM3NlUsICAy MDc4NTU2MDlVLCAxMzM3OTc5Njk4VSwKLQkxMjIyNTc4NDUxVSwgIDE1NzEwNzE3NFUsICA5MDEx NzQzNzhVLCAzODgzNzE3MDYzVSwgMTYxODYzMjYzOVUsCi0JMTc2Nzg4OTQ0MFUsIDQyNjQ2OTg4 MjRVLCAxNTgyOTk5MzEzVSwgIDg4NDQ3MTk5N1UsIDI1MDg4MjUwOThVLAotCTM3NTYzNzA3NzFV LCAyNDU3MjEzNTUzVSwgMzU2NTc3Njg4MVUsIDM3MDk1ODMyMTRVLCAgOTE1NjA5NjAxVSwKLQkg NDYwODMzNTI0VSwgMTA5MTA0OTU3NlUsICAgODU1MjI4ODBVLCAgICAyNTUzMjUxVSwgIDEzMjEw MjgwOVUsCi0JMjQyOTg4MjQ0MlUsIDI1NjIwODQ2MTBVLCAxMzg2NTA3NjMzVSwgNDExMjQ3MTIy OVUsICAgMjE5NjUyMTNVLAotCTE5ODE1MTYwMDZVLCAyNDE4NDM1NjE3VSwgMzA1NDg3MjA5MVUs IDQyNTE1MTEyMjRVLCAyMDI1NzgzNTQzVSwKLQkxOTE2OTExNTEyVSwgMjQ1NDQ5MTEzNlUsIDM5 Mzg0NDA4OTFVLCAzODI1ODY5MTE1VSwgMTEyMTY5ODYwNVUsCi0JMzQ2MzA1MjI2NVUsICA4MDIz NDAxMDFVLCAxOTEyODg2ODAwVSwgNDAzMTk5NzM2N1UsIDM1NTA2NDA0MDZVLAotCTE1OTYwOTY5 MjNVLCAgNjEwMTUwNjAwVSwgIDQzMTQ2NDQ1N1UsIDI1NDEzMjUwNDZVLCAgNDg2NDc4MDAzVSwK LQkgNzM5NzA0OTM2VSwgMjg2MjY5NjQzMFUsIDMwMzc5MDMxNjZVLCAxMTI5NzQ5Njk0VSwgMjYx MTQ4MTI2MVUsCi0JMTIyODk5MzQ5OFUsICA1MTAwNzU1NDhVLCAzNDI0OTYyNTg3VSwgMjQ1ODY4 OTY4MVUsICA4MTg5MzQ4MzNVLAotCTQyMzMzMDkxMjVVLCAxNjA4MTk2MjUxVSwgMzQxOTQ3NjAx NlUsIDE4NTg1NDM5MzlVLCAyNjgyMTY2NTI0VSwKLQkzMzE3ODU0Mjg1VSwgIDYzMTk4NjE4OFUs IDMwMDgyMTQ3NjRVLCAgNjEzODI2NDEyVSwgMzU2NzM1ODIyMVUsCi0JMzUxMjM0Mzg4MlUsIDE1 NTI0Njc0NzRVLCAzMzE2MTYyNjcwVSwgMTI3NTg0MTAyNFUsIDQxNDIxNzM0NTRVLAotCSA1NjUy Njc4ODFVLCAgNzY4NjQ0ODIxVSwgIDE5ODMxMDEwNVUsIDIzOTY2ODg2MTZVLCAxODM3NjU5MDEx VSwKLQkgMjAzNDI5MzM0VSwgIDg1NDUzOTAwNFUsIDQyMzU4MTE1MThVLCAzMzM4MzA0OTI2VSwg MzczMDQxODY5MlUsCi0JMzg1MjI1NDk4MVUsIDMwMzIwNDY0NTJVLCAyMzI5ODExODYwVSwgMjMw MzU5MDU2NlUsIDI2OTYwOTIyMTJVLAotCTM4OTQ2NjU5MzJVLCAgMTQ1ODM1NjY3VSwgIDI0OTU2 MzY1NVUsIDE5MzIyMTA4NDBVLCAyNDMxNjk2NDA3VSwKLQkzMzEyNjM2NzU5VSwgIDIxNDk2MjYy OVUsIDIwOTIwMjY5MTRVLCAzMDIwMTQ1NTI3VSwgNDA3MzAzOTg3M1UsCi0JMjczOTEwNTcwNVUs IDEzMDgzMzY3NTJVLCAgODU1MTA0NTIyVSwgMjM5MTcxNTMyMVUsICAgNjc0NDg3ODVVLAotCSA1 NDc5ODk0ODJVLCAgODU0NDExODAyVSwgMzYwODYzMzc0MFUsICA0MzE3MzE1MzBVLCAgNTM3Mzc1 NTg5VSwKLQkzODg4MDA1NzYwVSwgIDY5NjA5OTE0MVUsICAzOTczNDMyMzZVLCAxODY0NTExNzgw VSwgICA0NDAyOTczOVUsCi0JMTcyOTUyNjg5MVUsIDE5OTMzOTg2NTVVLCAyMDEwMTczNDI2VSwg MjU5MTU0Njc1NlUsICAyNzUyMjMyOTFVLAotCTE1MDM5MDAyOTlVLCA0MjE3NzY1MDgxVSwgMjE4 NTYzNTI1MlUsIDExMjI0MzYwMTVVLCAzNTUwMTU1MzY0VSwKLQkgNjgxNzA3MTk0VSwgMzI2MDQ3 OTMzOFUsICA5MzM1NzkzOTdVLCAyOTgzMDI5MjgyVSwgMjUwNTUwNDU4N1UsCi0JMjY2NzQxMDM5 M1UsIDI5NjI2ODQ0OTBVLCA0MTM5NzIxNzA4VSwgMjY1ODE3MjI4NFUsIDI0NTI2MDIzODNVLAot CTI2MDc2MzE2MTJVLCAxMzQ0Mjk2MjE3VSwgMzA3NTM5ODcwOVUsIDI5NDk3ODUyOTVVLCAxMDQ5 OTU2MTY4VSwKLQkzOTE3MTg1MTI5VSwgMjE1NTY2MDE3NFUsIDMyODA1MjQ0NzVVLCAxNTAzODI3 ODY3VSwgIDY3NDM4MDc2NVUsCi0JMTkxODQ2ODE5M1UsIDM4NDM5ODM2NzZVLCAgNjM0MzU4MjIx VSwgMjUzODMzNTY0M1UsIDE4NzMzNTEyOThVLAotCTMzNjg3MjM3NjNVLCAyMTI5MTQ0MTMwVSwg MzIwMzUyODYzM1UsIDMwODcxNzQ5ODZVLCAyNjkxNjk4ODcxVSwKLQkyNTE2Mjg0Mjg3VSwgICAy NDQzNzc0NVUsIDExMTgzODE0NzRVLCAyODE2MzE0ODY3VSwgMjQ0ODU3NjAzNVUsCi0JNDI4MTk4 OTY1NFUsICAyMTcyODc4MjVVLCAgMTY1ODcyODg4VSwgMjYyODk5NTcyMlUsIDM1MzM1MjUxMTZV LAotCTI3MjE2NjkxMDZVLCAgODcyMzQwNTY4VSwgMzQyOTkzMDY1NVUsIDMzMDkwNDczMDRVLCAz OTE2NzA0OTY3VSwKLQkzMjcwMTYwMzU1VSwgMTM0ODg4NDI1NVUsIDE2MzQ3OTc2NzBVLCAgODgx MjE0OTY3VSwgNDI1OTYzMzU1NFUsCi0JIDE3NDYxMzAyN1UsIDExMDM5NzQzMTRVLCAxNjI1MjI0 MjMyVSwgMjY3ODM2ODI5MVUsIDExMzM4NjY3MDdVLAotCTM4NTMwODI2MTlVLCA0MDczMTk2NTQ5 VSwgMTE4OTYyMDc3N1UsICA2MzcyMzg2NTZVLCAgOTMwMjQxNTM3VSwKLQk0MDQyNzUwNzkyVSwg Mzg0MjEzNjA0MlUsIDI0MTcwMDcyMTJVLCAyNTI0OTA3NTEwVSwgMTI0MzAzNjgyN1UsCi0JMTI4 MjA1OTQ0MVUsIDM3NjQ1ODg3NzRVLCAxMzk0NDU5NjE1VSwgMjMyMzYyMDAxNVUsIDExNjYxNTIy MzFVLAotCTMzMDc0Nzk2MDlVLCAzODQ5MzIyMjU3VSwgMzUwNzQ0NTY5OVUsIDQyNDc2OTY2MzZV LCAgNzU4MzkzNzIwVSwKLQkgOTY3NjY1MTQxVSwgMTA5NTI0NDU3MVUsIDEzMTk4MTIxNTJVLCAg NDA3Njc4NzYyVSwgMjY0MDYwNTIwOFUsCi0JMjE3MDc2NjEzNFUsIDM2NjM1OTQyNzVVLCA0MDM5 MzI5MzY0VSwgMjUxMjE3NTUyMFUsICA3MjU1MjMxNTRVLAotCTIyNDk4MDcwMDRVLCAzMzEyNjE3 OTc5VSwgMjQxNDYzNDE3MlUsIDEyNzg0ODIyMTVVLCAgMzQ5MjA2NDg0VSwKLQkxNTczMDYzMzA4 VSwgMTE5NjQyOTEyNFUsIDM4NzMyNjQxMTZVLCAyNDAwMDY3ODAxVSwgIDI2ODc5NTE2N1UsCi0J IDIyNjE3NTQ4OVUsIDI5NjEzNjcyNjNVLCAxOTY4NzE5NjY1VSwgICA0MjY1NjM3MFUsIDEwMTA3 OTA2OTlVLAotCSA1NjE2MDA2MTVVLCAyNDIyNDUzOTkyVSwgMzA4MjE5NzczNVUsIDE2MzY3MDA0 ODRVLCAzOTc3NzE1Mjk2VSwKLQkzMTI1MzUwNDgyVSwgMzQ3ODAyMTUxNFUsIDIyMjc4MTk0NDZV LCAxNTQwODY4MDQ1VSwgMzA2MTkwODk4MFUsCi0JMTA4NzM2MjQwN1UsIDM2MjUyMDAyOTFVLCAg MzYxOTM3NTM3VSwgIDU4MDQ0MTg5N1UsIDE1MjAwNDM2NjZVLAotCTIyNzA4NzU0MDJVLCAxMDA5 MTYxMjYwVSwgMjUwMjM1NTg0MlUsIDQyNzg3Njk3ODVVLCAgNDczOTAyNDEyVSwKLQkxMDU3MjM5 MDgzVSwgMTkwNTgyOTAzOVUsIDE0ODM3ODExNzdVLCAyMDgwMDExNDE3VSwgMTIwNzQ5NDI0NlUs Ci0JMTgwNjk5MTk1NFUsIDIxOTQ2NzQ0MDNVLCAzNDU1OTcyMjA1VSwgIDgwNzIwNzY3OFUsIDM2 NTU2NTU2ODdVLAotCSA2NzQxMTI5MThVLCAgMTk1NDI1NzUyVSwgMzkxNzg5MDA5NVUsIDE4NzQz NjQyMzRVLCAxODM3ODkyNzE1VSwKLQkzNjYzNDc4MTY2VSwgMTU0ODg5MjAxNFUsIDI1NzA3NDg3 MTRVLCAyMDQ5OTI5ODM2VSwgMjE2NzAyOTcwNFUsCi0JIDY5NzU0Mzc2N1UsIDM0OTk1NDUwMjNV LCAzMzQyNDk2MzE1VSwgMTcyNTI1MTE5MFUsIDM1NjEzODc0NjlVLAotCTI5MDU2MDY2MTZVLCAx NTgwMTgyNDQ3VSwgMzkzNDUyNTkyN1UsIDQxMDMxNzI3OTJVLCAxMzY1NjcyNTIyVSwKLQkxNTM0 Nzk1NzM3VSwgMzMwODY2NzQxNlUsIDI4NDE5MTE0MDVVLCAzOTQzMTgyNzMwVSwgNDA3MjAyMDMx M1UsCi0JMzQ5NDc3MDQ1MlUsIDMzMzI2MjY2NzFVLCAgIDU1MzI3MjY3VSwgIDQ3ODAzMDYwM1Us ICA0MTEwODA2MjVVLAotCTM0MTk1MjkwMTBVLCAxNjA0NzY3ODIzVSwgMzUxMzQ2ODAxNFUsICA1 NzA2Njg1MTBVLCAgOTEzNzkwODI0VSwKLQkyMjgzOTY3OTk1VSwgIDY5NTE1OTQ2MlUsIDM4MjU1 NDI5MzJVLCA0MTUwNjk4MTQ0VSwgMTgyOTc1ODY5OVUsCi0JIDIwMjg5NTU5MFUsIDE2MDkxMjI2 NDVVLCAxMjY3NjUxMDA4VSwgMjkxMDMxNTUwOVUsIDI1MTE0NzU0NDVVLAotCTI0Nzc0MjM4MTlV LCAzOTMyMDgxNTc5VSwgIDkwMDg3OTk3OVUsIDIxNDU1ODgzOTBVLCAyNjcwMDA3NTA0VSwKLQkg NTgwODE5NDQ0VSwgMTg2NDk5NjgyOFUsIDI1MjYzMjU5NzlVLCAxMDE5MTI0MjU4VSwgIDgxNTUw ODYyOFUsCi0JMjc2NTkzMzk4OVUsIDEyNzczMDEzNDFVLCAzMDA2MDIxNzg2VSwgIDg1NTU0MDk1 NlUsICAyODgwMjU3MTBVLAotCTE5MTk1OTQyMzdVLCAyMzMxMjIzODY0VSwgIDE3NzQ1MjQxMlUs IDI0NzU4NzAzNjlVLCAyNjg5MjkxNzQ5VSwKLQkgODY1MTk0Mjg0VSwgIDI1MzQzMjE1MlUsIDI2 Mjg1MzE4MDRVLCAyODYxMjA4NTU1VSwgMjM2MTU5NzU3M1UsCi0JMTY1Mzk1MjEyMFUsIDEwMzk2 NjEwMjRVLCAyMTU5OTU5MDc4VSwgMzcwOTA0MDQ0MFUsIDM1NjQ3MTg1MzNVLAotCTI1OTY4Nzg2 NzJVLCAyMDQxNDQyMTYxVSwgICAzMTE2NDY5NlUsIDI2NjI5NjI0ODVVLCAzNjY1NjM3MzM5VSwK LQkxNjc4MTE1MjQ0VSwgMjY5OTgzOTgzMlUsIDM2NTE5Njg1MjBVLCAzNTIxNTk1NTQxVSwgIDQ1 ODQzMzMwM1UsCi0JMjQyMzA5NjgyNFUsICAgMjE4MzE3NDFVLCAgMzgwMDExNzAzVSwgMjQ5ODE2 ODcxNlUsICA4NjE4MDYwODdVLAotCTE2NzM1NzQ4NDNVLCA0MTg4Nzk0NDA1VSwgMjUyMDU2MzY1 MVUsIDI2MzIyNzkxNTNVLCAyMTcwNDY1NTI1VSwKLQk0MTcxOTQ5ODk4VSwgMzg4NjAzOTYyMVUs IDE2NjEzNDQwMDVVLCAzNDI0Mjg1MjQzVSwgIDk5MjU4ODM3MlUsCi0JMjUwMDk4NDE0NFUsIDI5 OTMyNDg0OTdVLCAzNTkwMTkzODk1VSwgMTUzNTMyNzM2NVUsICA1MTU2NDU2MzZVLAotCSAxMzE2 MzM0NTBVLCAzNzI5NzYwMjYxVSwgMTYxMzA0NTEwMVUsIDMyNTQxOTQyNzhVLCAgIDE1ODg5Njc4 VSwKLQkxNDkzNTkwNjg5VSwgIDI0NDE0ODcxOFUsIDI5OTE0NzI2NjJVLCAxNDAxNjI5MzMzVSwg IDc3NzM0OTg3OFUsCi0JMjUwMTQwMTcwM1UsIDQyODU1MTgzMTdVLCAzNzk0NjU2MTc4VSwgIDk1 NTUyNjUyNlUsIDM0NDIxNDI4MjBVLAotCTM5NzAyOTgzNzRVLCAgNzM2MDI1NDE3VSwgMjczNzM3 MDc2NFUsIDEyNzE1MDk3NDRVLCAgNDQwNTcwNzMxVSwKLQkgMTM2MTQxODI2VSwgMTU5NjE4OTUx OFUsICA5MjMzOTkxNzVVLCAgMjU3NTQxNTE5VSwgMzUwNTc3NDI4MVUsCi0JMjE5NDM1ODQzMlUs IDI1MTgxNjI5OTFVLCAxMzc5ODkzNjM3VSwgMjY2Nzc2NzA2MlUsIDM3NDgxNDYyNDdVLAotCTE4 MjE3MTI2MjBVLCAzOTIzMTYxMzg0VSwgMTk0NzgxMTQ0NFUsIDIzOTI1MjcxOTdVLCA0MTI3NDE5 Njg1VSwKLQkxNDIzNjk0OTk4VSwgNDE1NjU3Njg3MVUsIDEzODI4ODU1ODJVLCAzNDIwMTI3Mjc5 VSwgMzYxNzQ5OTUzNFUsCi0JMjk5NDM3NzQ5M1UsIDQwMzgwNjM5ODZVLCAxOTE4NDU4NjcyVSwg Mjk4MzE2Njc5NFUsIDQyMDA0NDkwMzNVLAotCSAzNTMyOTQ1NDBVLCAxNjA5MjMyNTg4VSwgIDI0 MzkyNjY0OFUsIDIzMzI4MDMyOTFVLCAgNTA3OTk2ODMyVSwKLQkyMzkyODM4NzkzVSwgNDA3NTE0 NTE5NlUsIDIwNjA5ODQzNDBVLCA0Mjg3NDc1MTM2VSwgICA4ODIzMjYwMlUsCi0JMjQ5MTUzMTE0 MFUsIDQxNTk3MjU2MzNVLCAyMjcyMDc1NDU1VSwgIDc1OTI5ODYxOFUsICAyMDEzODQ1NTRVLAot CSA4MzgzNTYyNTBVLCAxNDE2MjY4MzI0VSwgIDY3NDQ3NjkzNFUsICAgOTA3OTUzNjRVLCAgMTQx NjcyMjI5VSwKLQkzNjYwMzk5NTg4VSwgNDE5NjQxNzI1MVUsIDMyNDkyNzAyNDRVLCAzNzc0NTMw MjQ3VSwgICA1OTU4NzI2NVUsCi0JMzY4MzE2NDIwOFUsICAgMTkzOTI1NzVVLCAxNDYzMTIzNjk3 VSwgMTg4MjIwNTM3OVUsICAyOTM3ODA0ODlVLAotCTI1NTMxNjA2MjJVLCAyOTMzOTA0Njk0VSwg IDY3NTYzODIzOVUsIDI4NTEzMzY5NDRVLCAxNDM1MjM4NzQzVSwKLQkyNDQ4NzMwMTgzVSwgIDgw NDQzNjMwMlUsIDIxMTk4NDU5NzJVLCAgMzIyNTYwNjA4VSwgNDA5NzczMjcwNFUsCi0JMjk4Nzgw MjU0MFUsICA2NDE0OTI2MTdVLCAyNTc1NDQyNzEwVSwgNDIxNzgyMjcwM1UsIDMyNzE4MzUzMDBV LAotCTI4MzY0MTgzMDBVLCAzNzM5OTIxNjIwVSwgMjEzODM3ODc2OFUsIDI4Nzk3NzE4NTVVLCA0 Mjk0OTAzNDIzVSwKLQkzMTIxMDk3OTQ2VSwgMjYwMzQ0MDQ4NlUsIDI1NjA4MjAzOTFVLCAxMDEy OTMwOTQ0VSwgMjMxMzQ5OTk2N1UsCi0JIDU4NDQ4OTM2OFUsIDM0MzExNjU3NjZVLCAgODk3Mzg0 ODY5VSwgMjA2MjUzNzczN1UsIDI4NDc4ODkyMzRVLAotCTM3NDIzNjI0NTBVLCAyOTUxMTc0NTg1 VSwgNDIwNDYyMTA4NFUsIDExMDkzNzM4OTNVLCAzNjY4MDc1Nzc1VSwKLQkyNzUwMTM4ODM5VSwg MzUxODA1NTcwMlUsICA3MzMwNzI1NThVLCA0MTY5MzI1NDAwVSwgIDc4ODQ5MzYyNVUKLX07Ci1z dGF0aWMgY29uc3QgdWludDY0X3QgaW5pdF9nZW5fcmFuZF82NF9leHBlY3RlZFtdID0gewotCUtR VSgxNjkyNDc2NjI0Njg2OTAzOTI2MCksIEtRVSggODIwMTQzODY4NzMzMzM1MjcxNCksCi0JS1FV KCAyMjY1MjkwMjg3MDE1MDAxNzUwKSwgS1FVKDE4Mzk3MjY0NjExODA1NDczODMyKSwKLQlLUVUo IDMzNzUyNTUyMjMzMDIzODQzNTgpLCBLUVUoIDYzNDU1NTk5NzU0MTY4Mjg3OTYpLAotCUtRVSgx ODIyOTczOTI0Mjc5MDMyODA3MyksIEtRVSggNzU5Njc5Mjc0MjA5ODgwMDkwNSksCi0JS1FVKCAg MjU1MzM4NjQ3MTY5Njg1OTgxKSwgS1FVKCAyMDUyNzQ3MjQwMDQ4NjEwMzAwKSwKLQlLUVUoMTgz MjgxNTE1NzYwOTcyOTkzNDMpLCBLUVUoMTI0NzI5MDU0MjExMzM3OTY1NjcpLAotCUtRVSgxMTMx NTI0NTM0OTcxNzYwMDg2MyksIEtRVSgxNjU5NDExMDE5Nzc3NTg3MTIwOSksCi0JS1FVKDE1NzA4 NzUxOTY0NjMyNDU2NDUwKSwgS1FVKDEwNDUyMDMxMjcyMDU0NjMyNTM1KSwKLQlLUVUoMTEwOTc2 NDY3MjA4MTE0NTQzODYpLCBLUVUoIDQ1NTYwOTA2Njg0NDU3NDU0NDEpLAotCUtRVSgxNzExNjE4 NzY5MzA5MDY2MzEwNiksIEtRVSgxNDkzMTUyNjgzNjE0NDUxMDY0NSksCi0JS1FVKCA5MTkwNzUy MjE4MDIwNTUyNTkxKSwgS1FVKCA5NjI1ODAwMjg1NzcxOTAxNDAxKSwKLQlLUVUoMTM5OTUxNDEw Nzc2NTk5NzI4MzIpLCBLUVUoIDUxOTQyMDkwOTQ5Mjc4Mjk2MjUpLAotCUtRVSggNDE1Njc4ODM3 OTE1MTA2MzMwMyksIEtRVSggODUyMzQ1MjU5Mzc3MDEzOTQ5NCksCi0JS1FVKDE0MDgyMzgyMTAz MDQ5Mjk2NzI3KSwgS1FVKCAyNDYyNjAxODYzOTg2MDg4NDgzKSwKLQlLUVUoIDMwMzA1ODM0NjE1 OTI4NDA2NzgpLCBLUVUoIDUyMjE2MjIwNzc4NzI4Mjc2ODEpLAotCUtRVSggMzA4NDIxMDY3MTIy ODk4MTIzNiksIEtRVSgxMzk1Njc1ODM4MTM4OTk1MzgyMyksCi0JS1FVKDEzNTAzODg5ODU2MjEz NDIzODMxKSwgS1FVKDE1Njk2OTA0MDI0MTg5ODM2MTcwKSwKLQlLUVUoIDQ2MTI1ODQxNTI4Nzcw MzYyMDYpLCBLUVUoIDYyMzExMzU1Mzg0NDc4Njc4ODEpLAotCUtRVSgxMDE3MjQ1NzI5NDE1ODg2 OTQ2OCksIEtRVSggNjQ1MjI1ODYyODQ2NjcwODE1MCksCi0JS1FVKDE0MDQ0NDMyODI0OTE3MzMw MjIxKSwgS1FVKCAgMzcwMTY4MzY0NDgwMDQ0Mjc5KSwKLQlLUVUoMTAxMDIxNDQ2ODY0MjcxOTMz NTkpLCBLUVUoICA2Njc4NzA0ODk5OTQ3NzYwNzYpLAotCUtRVSggMjczMjI3MTk1NjkyNTg4NTg1 OCksIEtRVSgxODAyNzc4ODkwNTk3NzI4NDE1MSksCi0JS1FVKDE1MDA5ODQyNzg4NTgyOTIzODU5 KSwgS1FVKCA3MTM2MzU3OTYwMTgwMTk5NTQyKSwKLQlLUVUoMTU5MDE3MzYyNDM0NzU1NzgxMjcp LCBLUVUoMTY5NTEyOTM3ODUzNTI2MTU3MDEpLAotCUtRVSgxMDU1MTQ5MjEyNTI0MzY5MTYzMiks IEtRVSgxNzY2ODg2OTk2OTE0NjQzNDgwNCksCi0JS1FVKDEzNjQ2MDAyOTcxMTc0MzkwNDQ1KSwg S1FVKCA5ODA0NDcxMDUwNzU5NjEzMjQ4KSwKLQlLUVUoIDU1MTE2NzA0Mzk2NTU5MzU0OTMpLCBL UVUoMTgxMDMzNDIwOTEwNzA0MDA5MjYpLAotCUtRVSgxNzIyNDUxMjc0NzY2NTEzNzUzMyksIEtR VSgxNTUzNDYyNzQ4Mjk5MjYxODE2OCksCi0JS1FVKCAxNDIzODEzMjY2MTg2NTgyNjQ3KSwgS1FV KDE1ODIxMTc2ODA3OTMyOTMwMDI0KSwKLQlLUVUoICAgMzAzMjMzNjk3MzM2MDcxNTYpLCBLUVUo MTE1OTkzODI0OTQ3MjM0Nzk0MDMpLAotCUtRVSggIDY1Mzg1NjA3NjU4NjgxMDA2MiksIEtRVSgg MzE3NjQzNzM5NTE0NDg5OTY1OSksCi0JS1FVKDE0MDI4MDc2MjY4MTQ3OTYzOTE3KSwgS1FVKDE2 MTU2Mzk4MjcxODA5NjY2MTk1KSwKLQlLUVUoIDMxNjY5NTU0ODQ4NDgyMDE2NzYpLCBLUVUoIDU3 NDY4MDU2MjAxMzY5MTkzOTApLAotCUtRVSgxNzI5Nzg0NTIwODg5MTI1NjU5MyksIEtRVSgxMTY5 MTY1MzE4MzIyNjQyODQ4MyksCi0JS1FVKDE3OTAwMDI2MTQ2NTA2OTgxNTc3KSwgS1FVKDE1Mzg3 MzgyMTE1NzU1OTcxMDQyKSwKLQlLUVUoMTY5MjM1Njc2ODEwNDA4NDU5NDMpLCBLUVUoIDgwMzkw NTc1MTcxOTkzODg2MDYpLAotCUtRVSgxMTc0ODQwOTI0MTQ2ODYyOTI2MyksIEtRVSggIDc5NDM1 ODI0NTUzOTA3NjA5NSksCi0JS1FVKDEzNDM4NTAxOTY0NjkzNDAxMjQyKSwgS1FVKDE0MDM2ODAz MjM2NTE1NjE4OTYyKSwKLQlLUVUoIDUyNTIzMTEyMTUyMDU0MjQ3MjEpLCBLUVUoMTc4MDY1ODk2 MTI5MTU1MDkwODEpLAotCUtRVSggNjgwMjc2NzA5MjM5NzU5NjAwNiksIEtRVSgxNDIxMjEyMDQz MTE4NDU1NzE0MCksCi0JS1FVKCAxMDcyOTUxMzY2NzYxMzg1NzEyKSwgS1FVKDEzMDk4NDkxNzgw NzIyODM2Mjk2KSwKLQlLUVUoIDk0NjY2NzY4Mjg3MTA3OTczNTMpLCBLUVUoMTI2NzMwNTY4NDkw NDI4MzAwODEpLAotCUtRVSgxMjc2MzcyNjYyMzY0NTM1NzU4MCksIEtRVSgxNjQ2ODk2MTY1Mjk5 OTMwOTQ5MyksCi0JS1FVKDE1MzA1OTc5ODc1NjM2NDM4OTI2KSwgS1FVKDE3NDQ0NzEzMTUxMjIz NDQ5NzM0KSwKLQlLUVUoIDU2OTIyMTQyNjc2Mjc4ODM2NzQpLCBLUVUoMTMwNDk1ODkxMzkxOTYx NTE1MDUpLAotCUtRVSggIDg4MDExNTIwNzgzMTY3MDc0NSksIEtRVSggMTc3NjUyOTA3NTc4OTY5 NTQ5OCksCi0JS1FVKDE2Njk1MjI1ODk3ODAxNDY2NDg1KSwgS1FVKDEwNjY2OTAxNzc4Nzk1MzQ2 ODQ1KSwKLQlLUVUoIDYxNjQzODkzNDY3MjI4MzM4NjkpLCBLUVUoIDI4NjM4MTc3OTMyNjQzMDA0 NzUpLAotCUtRVSggOTQ2NDA0OTkyMTg4NjMwNDc1NCksIEtRVSggMzk5MzU2NjYzNjc0MDAxNTQ2 OCksCi0JS1FVKCA5OTgzNzQ5NjkyNTI4NTE0MTM2KSwgS1FVKDE2Mzc1Mjg2MDc1MDU3NzU1MjEx KSwKLQlLUVUoMTYwNDI2NDM0MTcwMDU0NDA4MjApLCBLUVUoMTE0NDU0MTk2NjI5MjM0ODk4Nzcp LAotCUtRVSggNzk5OTAzODg0Njg4NTE1ODgzNiksIEtRVSggNjcyMTkxMzY2MTcyMTUxMTUzNSks Ci0JS1FVKCA1MzYzMDUyNjU0MTM5MzU3MzIwKSwgS1FVKCAxODE3Nzg4NzYxMTczNTg0MjA1KSwK LQlLUVUoMTMyOTA5NzQzODY0NDU4NTY0NDQpLCBLUVUoIDQ2NTAzNTA4MTg5Mzc5ODQ2ODApLAot CUtRVSggODIxOTE4MzUyODEwMjQ4NDgzNiksIEtRVSggMTU2OTg2MjkyMzUwMDgxOTg5OSksCi0J S1FVKCA0MTg5MzU5NzMyMTM2NjQxODYwKSwgS1FVKDE0MjAyODIyOTYxNjgzMTQ4NTgzKSwKLQlL UVUoIDQ0NTc0OTgzMTUzMDk0MjkwNTgpLCBLUVUoMTMwODkwNjczODcwMTkwNzQ4MzQpLAotCUtR VSgxMTA3NTUxNzE1MzMyODkyNzI5MyksIEtRVSgxMDI3NzAxNjI0ODMzNjY2ODM4OSksCi0JS1FV KCA3MDcwNTA5NzI1MzI0NDAxMTIyKSwgS1FVKDE3ODA4ODkyMDE3NzgwMjg5MzgwKSwKLQlLUVUo MTMxNDMzNjczMzk5MDkyODczNDkpLCBLUVUoIDEzNzc3NDM3NDUzNjAwODUxNTEpLAotCUtRVSgg NTc0OTM0MTgwNzQyMTI4NjQ4NSksIEtRVSgxNDgzMjgxNDYxNjc3MDkzMTMyNSksCi0JS1FVKCA3 Njg4ODIwNjM1MzI0MzU5NDkyKSwgS1FVKDEwOTYwNDc0MDExNTM5NzcwMDQ1KSwKLQlLUVUoICAg ODE5NzAwNjY2NTMxNzk3OTApLCBLUVUoMTI2MTk0NzYwNzI2MDc4NzgwMjIpLAotCUtRVSggNDQx OTU2NjYxNjI3MTIwMTc0NCksIEtRVSgxNTE0NzkxNzMxMTc1MDU2ODUwMyksCi0JS1FVKCA1NTQ5 NzM5MTgyODUyNzA2MzQ1KSwgS1FVKCA3MzA4MTk4Mzk3OTc1MjA0NzcwKSwKLQlLUVUoMTM1ODA0 MjU0OTY2NzEyODkyNzgpLCBLUVUoMTcwNzA3NjQ3ODUyMTAxMzAzMDEpLAotCUtRVSggODIwMjgz Mjg0NjI4NTYwNDQwNSksIEtRVSggNjg3MzA0NjI4NzY0MDg4NzI0OSksCi0JS1FVKCA2OTI3NDI0 NDM0MzA4MjA2MTE0KSwgS1FVKCA2MTM5MDE0NjQ1OTM3MjI0ODc0KSwKLQlLUVUoMTAyOTAzNzM2 NDU5Nzg0ODc2MzkpLCBLUVUoMTU5MDQyNjEyOTE3MDE1MjM4MDQpLAotCUtRVSggOTYyODc0MzQ0 MjA1NzgyNjg4MyksIEtRVSgxODM4MzQyOTA5NjI1NTU0NjcxNCksCi0JS1FVKCA0OTc3NDEzMjY1 NzUzNjg2OTY3KSwgS1FVKCA3NzE0MzE3NDkyNDI1MDEyODY5KSwKLQlLUVUoIDkwMjUyMzI1ODYz MDk5MjYxOTMpLCBLUVUoMTQ2MjczMzgzNTk3NzY3MDkxMDcpLAotCUtRVSgxNDc1OTg0OTg5NjQ2 Nzc5MDc2MyksIEtRVSgxMDkzMTEyOTQzNTg2NDQyMzI1MiksCi0JS1FVKCA0NTg4NDU2OTg4Nzc1 MDE0MzU5KSwgS1FVKDEwNjk5Mzg4NTMxNzk3MDU2NzI0KSwKLQlLUVUoICA0Njg2NTIyNjg4Njky Mzg3OTIpLCBLUVUoIDU3NTU5NDMwMzUzMjgwNzgwODYpLAotCUtRVSggMjEwMjQzNzM3OTk4ODU4 MDIxNiksIEtRVSggOTk4NjMxMjc4NjUwNjY3NDAyOCksCi0JS1FVKCAyNjU0MjA3MTgwMDQwOTQ1 NjA0KSwgS1FVKCA4NzI2NjM0NzkwNTU5OTYwMDYyKSwKLQlLUVUoICAxMDA0OTcyMzQ4NzE4MDgx MzcpLCBLUVUoIDI4MDAxMzcxNzY5NTE0MjU4MTkpLAotCUtRVSggNjA3NjYyNzYxMjkxODU1MzQ4 NyksIEtRVSggNTc4MDE4NjkxOTE4NjE1Mjc5NiksCi0JS1FVKCA4MTc5MTgzNTk1NzY5OTI5MDk4 KSwgS1FVKCA2MDA5NDI2MjgzNzE2MjIxMTY5KSwKLQlLUVUoIDI3OTY2NjI1NTEzOTc0NDkzNTgp LCBLUVUoIDE3NTY5NjEzNjcwNDE5ODY3NjQpLAotCUtRVSggNjk3Mjg5NzkxNzM1NTYwNjIwNSks IEtRVSgxNDUyNDc3NDM0NTM2ODk2ODI0MyksCi0JS1FVKCAyNzczNTI5Njg0NzQ1NzA2OTQwKSwg S1FVKCA0ODUzNjMyMzc2MjEzMDc1OTU5KSwKLQlLUVUoIDQxOTgxNzc5MjM3MzEzNTgxMDIpLCBL UVUoIDgyNzEyMjQ5MTMwODQxMzk3NzYpLAotCUtRVSggMjc0MTc1MzEyMTYxMTA5MjIyNiksIEtR VSgxNjc4MjM2NjE0NTk5NjczMTE4MSksCi0JS1FVKDE1NDI2MTI1MjM4OTcyNjQwNzkwKSwgS1FV KDEzNTk1NDk3MTAwNjcxMjYwMzQyKSwKLQlLUVUoIDMxNzM1MzEwMjI4MzYyNTk4OTgpLCBLUVUo IDY1NzMyNjQ1NjAzMTk1MTE2NjIpLAotCUtRVSgxODA0MTExMTk1MTUxMTE1NzQ0MSksIEtRVSgg MjM1MTQzMzU4MTgzMzEzNTk1MiksCi0JS1FVKCAzMTEzMjU1NTc4OTA4MTczNDg3KSwgS1FVKCAx NzM5MzcxMzMwODc3ODU4Nzg0KSwKLQlLUVUoMTYwNDYxMjY1NjI3ODkxNjU0ODApLCBLUVUoIDgw NzIxMDE2NTIyMTQxOTI5MjUpLAotCUtRVSgxNTI2NzA5MTU4NDA5MDY2NDkxMCksIEtRVSggOTMw OTU3OTIwMDQwMzY0ODk0MCksCi0JS1FVKCA1MjE4ODkyNDM5NzUyNDA4NzIyKSwgS1FVKDE0NDky NDc3MjQ2MDA0MzM3MTE1KSwKLQlLUVUoMTc0MzEwMzc1ODY2Nzk3NzA2MTkpLCBLUVUoIDczODUy NDgxMzU5NjMyNTA0ODApLAotCUtRVSggOTU4MDE0NDk1NjU2NTU2MDY2MCksIEtRVSggNDkxOTU0 NjIyODA0MDAwODcyMCksCi0JS1FVKDE1MjYxNTQyNDY5MTQ1MDM1NTg0KSwgS1FVKDE4MjMzMjk3 MjcwODIyMjUzMTAyKSwKLQlLUVUoIDU0NTMyNDg0MTc5OTIzMDI4NTcpLCBLUVUoIDkzMDk1MTkx NTU5MzE0NjAyODUpLAotCUtRVSgxMDM0MjgxMzAxMjM0NTI5MTc1NiksIEtRVSgxNTY3NjA4NTE4 Njc4NDc2MjM4MSksCi0JS1FVKDE1OTEyMDkyOTUwNjkxMzAwNjQ1KSwgS1FVKCA5MzcxMDUzMTIx NDk5MDAzMTk1KSwKLQlLUVUoIDk4OTcxODY0NzgyMjY4NjY3NDYpLCBLUVUoMTQwNjE4NTgyODcx ODgxOTYzMjcpLAotCUtRVSggIDEyMjU3NTk3MTYyMDc4ODExOSksIEtRVSgxMjE0Njc1MDk2OTEx NjMxNzc1NCksCi0JS1FVKCA0NDM4MzE3MjcyODEzMjQ1MjAxKSwgS1FVKCA4MzMyNTc2NzkxMDA5 NTI3MTE5KSwKLQlLUVUoMTM5MDc3ODU2OTE3ODY1NDIwNTcpLCBLUVUoMTAzNzQxOTQ4ODcyODMy ODc0NjcpLAotCUtRVSggMjA5ODc5ODc1NTY0OTA1OTU2NiksIEtRVSggMzQxNjIzNTE5Nzc0ODI4 ODg5NCksCi0JS1FVKCA4Njg4MjY5OTU3MzIwNzczNDg0KSwgS1FVKCA3NTAzOTY0NjAyMzk3Mzcx NTcxKSwKLQlLUVUoMTY3MjQ5NzcwMTUxNDc0NzgyMzYpLCBLUVUoIDk0NjE1MTI4NTU0Mzk4NTgx ODQpLAotCUtRVSgxMzI1OTA0OTc0NDUzNDUzNDcyNyksIEtRVSggMzU4MzA5NDk1MjU0Mjg5OTI5 NCksCi0JS1FVKCA4NzY0MjQ1NzMxMzA1NTI4MjkyKSwgS1FVKDEzMjQwODIzNTk1NDYyMDg4OTg1 KSwKLQlLUVUoMTM3MTYxNDE2MTc2MTc5MTA0NDgpLCBLUVUoMTgxMTQ5Njk1MTk5MzU5NjA5NTUp LAotCUtRVSggMjI5NzU1MzYxNTc5ODMwMjIwNiksIEtRVSggNDU4NTUyMTQ0Mjk0NDY2MzM2Miks Ci0JS1FVKDE3Nzc2ODU4NjgwNjMwMTk4Njg2KSwgS1FVKCA0Njg1ODczMjI5MTkyMTYzMzYzKSwK LQlLUVUoICAxNTI1NTgwODA2NzExMzU2MjcpLCBLUVUoMTU0MjQ5MDA1NDA4NDI2NzAwODgpLAot CUtRVSgxMzIyOTYzMDI5NzEzMDAyNDEwOCksIEtRVSgxNzUzMDI2ODc4ODI0NTcxODcxNyksCi0J S1FVKDE2Njc1NjMzOTEzMDY1NzE0MTQ0KSwgS1FVKCAzMTU4OTEyNzE3ODk3NTY4MDY4KSwKLQlL UVUoMTUzOTkxMzIxODUzODAwODcyODgpLCBLUVUoIDc0MDE0MTg3NDQ1MTU2Nzc4NzIpLAotCUtR VSgxMzEzNTQxMjkyMjM0NDM5ODUzNSksIEtRVSggNjM4NTMxNDM0NjEwMDUwOTUxMSksCi0JS1FV KDEzOTYyODY3MDAxMTM0MTYxMTM5KSwgS1FVKDEwMjcyNzgwMTU1NDQyNjcxOTk5KSwKLQlLUVUo MTI4OTQ4NTYwODY1OTc3NjkxNDIpLCBLUVUoMTMzNDA4Nzc3OTUyODc1NTQ5OTQpLAotCUtRVSgx MjkxMzYzMDYwMjA5NDYwNzM5NiksIEtRVSgxMjU0MzE2NzkxMTExOTc5Mzg1NyksCi0JS1FVKDE3 MzQzNTcwMzcyMjUxODczMDk2KSwgS1FVKDEwOTU5NDg3NzY0NDk0MTUwNTQ1KSwKLQlLUVUoIDY5 NjY3Mzc5NTMwOTM4MjExMjgpLCBLUVUoMTM3ODA2OTkxMzU0OTY5ODg2MDEpLAotCUtRVSggNDQw NTA3MDcxOTM4MDE0MjA0NiksIEtRVSgxNDkyMzc4ODM2NTYwNzI4NDk4MiksCi0JS1FVKCAyODY5 NDg3Njc4OTA1MTQ4MzgwKSwgS1FVKCA2NDE2MjcyNzU0MTk3MTg4NDAzKSwKLQlLUVUoMTUwMTcz ODA0NzU5NDM2MTI1OTEpLCBLUVUoIDE5OTU2MzYyMjA5MTg0Mjk0ODcpLAotCUtRVSggMzQwMjAx NjgwNDYyMDEyMjcxNiksIEtRVSgxNTgwMDE4ODY2MzQwNzA1NzA4MCksCi0JS1FVKDExMzYyMzY5 OTkwMzkwOTMyODgyKSwgS1FVKDE1MjYyMTgzNTAxNjM3OTg2MTQ3KSwKLQlLUVUoMTAyMzkxNzUz ODUzODczNzE0OTQpLCBLUVUoIDkzNTIwNDI0MjAzNjU3NDgzMzQpLAotCUtRVSggMTY4MjQ1NzAz NDI4NTExOTg3NSksIEtRVSggMTcyNDcxMDY1MTM3NjI4OTY0NCksCi0JS1FVKCAyMDM4MTU3MDk4 ODkzODE3OTY2KSwgS1FVKCA5ODk3ODI1NTU4MzI0NjA4NzczKSwKLQlLUVUoIDE0Nzc2NjYyMzY1 MTkxNjQ3MzYpLCBLUVUoMTY4MzUzOTczMTQ1MTEyMzM2NDApLAotCUtRVSgxMDM3MDg2NjMyNzAw NTM0NjUwOCksIEtRVSgxMDE1NzUwNDM3MDY2MDYyMTk4MiksCi0JS1FVKDEyMTEzOTA0MDQ1MzM1 ODgyMDY5KSwgS1FVKDEzMzI2NDQ0NDM5NzQyNzgzMDA4KSwKLQlLUVUoMTEzMDI3NjkwNDMwMDA3 NjU4MDQpLCBLUVUoMTM1OTQ5Nzk5MjM5NTUyMjg0ODQpLAotCUtRVSgxMTc3OTM1MTc2MjYxMzQ3 NTk2OCksIEtRVSggMzc4NjEwMTYxOTUzOTI5ODM4MyksCi0JS1FVKCA4MDIxMTIyOTY5MTgwODQ2 MDYzKSwgS1FVKDE1NzQ1OTA0NDAxMTYyNTAwNDk1KSwKLQlLUVUoMTA3NjIxNjg0NjU5OTM4OTcy NjcpLCBLUVUoMTM1NTIwNTg5NTc4OTYzMTkwMjYpLAotCUtRVSgxMTIwMDIyODY1NTI1MjQ2MjAx MyksIEtRVSggNTAzNTM3MDM1NzMzNzQ0MTIyNiksCi0JS1FVKCA3NTkzOTE4OTg0NTQ1NTAwMDEz KSwgS1FVKCA1NDE4NTU0OTE4MzYxNTI4NzAwKSwKLQlLUVUoIDQ4NTgyNzA3OTk0MDU0NDYzNzEp LCBLUVUoIDk5NzQ2NTk1NjY4NzYyODI1NDQpLAotCUtRVSgxODIyNzU5NTkyMjI3Mzk1Nzg1OSks IEtRVSggMjc3Mjc3ODQ0MzYzNTY1NjIyMCksCi0JS1FVKDE0Mjg1MTQzMDUzMTgyMDg1Mzg1KSwg S1FVKCA5OTM5NzAwOTkyNDI5NjAwNDY5KSwKLQlLUVUoMTI3NTYxODU5MDQ1NDU1OTgwNjgpLCBL UVUoIDIwMjA3ODMzNzUzNjczNDUyNjIpLAotCUtRVSggICA1NzAyNjc3NTA1ODMzMTIyNyksIEtR VSggIDk1MDgyNzg2NzkzMDA2NTQ1NCksCi0JS1FVKCA2NjAyMjc5NjcwMTQ1MzcxMjE3KSwgS1FV KCAyMjkxMTcxNTM1NDQzNTY2OTI5KSwKLQlLUVUoIDU4MzIzODA3MjQ0MjUwMTAzMTMpLCBLUVUo IDEyMjAzNDM5MDQ3MTU5ODIyODUpLAotCUtRVSgxNzA0NTU0MjU5ODU5ODAzNzYzMyksIEtRVSgx NTQ2MDQ4MTc3OTcwMjgyMDk3MSksCi0JS1FVKDEzOTQ4Mzg4Nzc5OTQ5MzY1MTMwKSwgS1FVKDEz OTc1MDQwMTc1NDMwODI5NTE4KSwKLQlLUVUoMTc0Nzc1MzgyMzg0MjU1NDE3NjMpLCBLUVUoMTEx MDQ2NjMwNDE4NTE3NDU3MjUpLAotCUtRVSgxNTg2MDk5Mjk1NzE0MTE1NzU4NyksIEtRVSgxNDUy OTQzNDYzMzAxMjk1MDEzOCksCi0JS1FVKCAyNTA0ODM4MDE5MDc1Mzk0MjAzKSwgS1FVKCA3NTEy MTEzODgyNjExMTIxODg2KSwKLQlLUVUoIDQ4NTk5NzM1NTk5ODA4ODY2MTcpLCBLUVUoIDEyNTg2 MDE1NTU3MDMyNTAyMTkpLAotCUtRVSgxNTU5NDU0ODE1NzUxNDMxNjM5NCksIEtRVSggNDUxNjcz MDE3MTk2Mzc3MzA0OCksCi0JS1FVKDExMzgwMTAzMTkzOTA1MDMxOTgzKSwgS1FVKCA2ODA5Mjgy MjM5OTgyMzUzMzQ0KSwKLQlLUVUoMTgwNDUyNTY5MzA0MjAwNjUwMDIpLCBLUVUoIDI0NTM3MDI2 ODMxMDg3OTE4NTkpLAotCUtRVSggIDk3NzIxNDU4Mjk4Njk4MTQ2MCksIEtRVSggMjAwNjQxMDQw MjIzMjcxMzQ2NiksCi0JS1FVKCA2MTkyMjM2MjY3MjE2Mzc4MzU4KSwgS1FVKCAzNDI5NDY4NDAy MTk1Njc1MjUzKSwKLQlLUVUoMTgxNDY5MzMxNTMwMTczNDg5MjEpLCBLUVUoMTczNjk5Nzg1NzYz NjcyMzExMzkpLAotCUtRVSggMTI0Njk0MDcxNzIzMDM4NjYwMyksIEtRVSgxMTMzNTc1ODg3MDA4 MzMyNzExMCksCi0JS1FVKDE0MTY2NDg4ODAxNzMwMzUzNjgyKSwgS1FVKCA5MDA4NTczMTI3MjY5 NjM1NzMyKSwKLQlLUVUoMTA3NzYwMjUzODk4MjA2NDM4MTUpLCBLUVUoMTUwODc2MDU0NDE5MDM5 NDI5NjIpLAotCUtRVSggMTM1OTU0MjQ2MjcxMjE0NzkyMiksIEtRVSgxMzg5ODg3NDQxMTIyNjQ1 NDIwNiksCi0JS1FVKDE3OTExMTc2MDY2NTM2ODA0NDExKSwgS1FVKCA5NDM1NTkwNDI4NjAwMDg1 Mjc0KSwKLQlLUVUoICAyOTQ0ODg1MDk5Njc4NjQwMDcpLCBLUVUoIDg4OTAxMTEzOTc1Njc5MjIw NDYpLAotCUtRVSggNzk4NzgyMzQ3NjAzNDMyODc3OCksIEtRVSgxMzI2MzgyNzU4MjQ0MDk2NzY1 MSksCi0JS1FVKCA3NTAzNzc0ODEzMTA2NzUxNTczKSwgS1FVKDE0OTc0NzQ3Mjk2MTg1NjQ2ODM3 KSwKLQlLUVUoIDg1MDQ3NjUwMzcwMzIxMDMzNzUpLCBLUVUoMTczNDAzMDMzNTc0NDQ1MzYyMTMp LAotCUtRVSggNzcwNDYxMDkxMjk2NDQ4NTc0MyksIEtRVSggODEwNzUzMzY3MDMyNzIwNTA2MSks Ci0JS1FVKCA5MDYyOTY5ODM1MDgzMzE1OTg1KSwgS1FVKDE2OTY4OTYzMTQyMTI2NzM0MTg0KSwK LQlLUVUoMTI5NTgwNDEyMTQxOTA4MTAxODApLCBLUVUoIDI3MjAxNzAxNDc3NTk1NzAyMDApLAot CUtRVSggMjk4NjM1ODk2Mzk0MjE4OTU2NiksIEtRVSgxNDg4NDIyNjMyMjIxOTM1NjU4MCksCi0J S1FVKCAgMjg2MjI0MzI1MTQ0MzY4NTIwKSwgS1FVKDExMzEzODAwNDMzMTU0Mjc5Nzk3KSwKLQlL UVUoMTgzNjY4NDk1Mjg0Mzk2NzMyNDgpLCBLUVUoMTc4OTk3MjU5Mjk0ODIzNjg3ODkpLAotCUtR VSggMzczMDAwNDI4NDYwOTEwNjc5OSksIEtRVSggMTY1NDQ3NDMwMjA1Mjc2NzIwNSksCi0JS1FV KCA1MDA2Njk4MDA3MDQ3MDc3MDMyKSwgS1FVKCA4MTk2ODkzOTEzNjAxMTgyODM4KSwKLQlLUVUo MTUyMTQ1NDE3NzQ0MjUyMTE2NDApLCBLUVUoMTczOTEzNDYwNDU2MDY2MjYwNzMpLAotCUtRVSgg ODM2OTAwMzU4NDA3Njk2OTA4OSksIEtRVSggMzkzOTA0NjczMzM2ODU1MDI5MyksCi0JS1FVKDEw MTc4NjM5NzIwMzA4NzA3Nzg1KSwgS1FVKCAyMTgwMjQ4NjY5MzA0Mzg4Njk3KSwKLQlLUVUoICAg NjI4OTQzOTEzMDAxMjYzMjIpLCBLUVUoIDkyMDU3MDg5NjE3MzYyMjMxOTEpLAotCUtRVSggNjgz NzQzMTA1ODE2NTM2MDQzOCksIEtRVSggMzE1MDc0Mzg5MDg0ODMwODIxNCksCi0JS1FVKDE3ODQ5 MzMwNjU4MTExNDY0NTgzKSwgS1FVKDEyMjE0ODE1NjQzMTM1NDUwODY1KSwKLQlLUVUoMTM0MTA3 MTM4NDA1MTk2MDM0MDIpLCBLUVUoIDMyMDA3NzgxMjY2OTIwNDY4MDIpLAotCUtRVSgxMzM1NDc4 MDA0MzA0MTc3OTMxMyksIEtRVSggIDgwMDg1MDAyMjc1Njg4NjAzNiksCi0JS1FVKDE1NjYwMDUy OTMzOTUzMDY3NDMzKSwgS1FVKCA2NTcyODIzNTQ0MTU0Mzc1Njc2KSwKLQlLUVUoMTEwMzAyODE4 NTcwMTU4MTkyNjYpLCBLUVUoMTI2ODIyNDE5NDE0NzE0MzM4MzUpLAotCUtRVSgxMTY1NDEzNjQw NzMwMDI3NDY5MyksIEtRVSggNDUxNzc5NTQ5MjM4ODY0MTEwOSksCi0JS1FVKCA5NzU3MDE3Mzcx NTA0NTI0MjQ0KSwgS1FVKDE3ODMzMDQzNDAwNzgxODg5Mjc3KSwKLQlLUVUoMTI2ODUwODUyMDE3 NDc3OTIyMjcpLCBLUVUoMTA0MDgwNTc3Mjg4MzUwMTk1NzMpLAotCUtRVSggICA5ODM3MDQxODUx MzQ1NTIyMSksIEtRVSggNjczMjY2MzU1NTY5Njg0ODU5OCksCi0JS1FVKDEzMjQ4NTMwOTU5OTQ4 NTI5NzgwKSwgS1FVKCAzNTMwNDQxNDAxMjMwNjIyODI2KSwKLQlLUVUoMTgxODgyNTE5OTI4OTU2 NjA2MTUpLCBLUVUoIDE4NDc5MTgzNTQxODYzODM3NTYpLAotCUtRVSggMTEyNzM5MjE5MDQwMjY2 MDkyMSksIEtRVSgxMTI5MzczNDY0MzE0MzgxOTQ2MyksCi0JS1FVKCAzMDE1NTA2MzQ0NTc4Njgy OTgyKSwgS1FVKDEzODUyNjQ1NDQ0MDcxMTUzMzI5KSwKLQlLUVUoIDIxMjEzNTk2NTkwOTEzNDkx NDIpLCBLUVUoIDEyOTQ2MDQzNzYxMTY2Nzc2OTQpLAotCUtRVSggNTYxNjU3NjIzMTI4NjM1MjMx OCksIEtRVSggNzExMjUwMjQ0Mjk1NDIzNTYyNSksCi0JS1FVKDExNjc2MjI4MTk5NTUxNTYxNjg5 KSwgS1FVKDEyOTI1MTgyODAzMDA3MzA1MzU5KSwKLQlLUVUoIDc4NTIzNzU1MTgxNjA0OTMwODIp LCBLUVUoIDExMzY1MTMxMzA1MzkyOTYxNTQpLAotCUtRVSggNTYzNjkyMzkwMDkxNjU5MzE5NSks IEtRVSggMzIyMTA3NzUxNzYxMjYwNzc0NyksCi0JS1FVKDE3Nzg0NzkwNDY1Nzk4MTUyNTEzKSwg S1FVKCAzNTU0MjEwMDQ5MDU2OTk1OTM4KSwKLQlLUVUoMTc0NzY4Mzk2ODU4NzgyMjU4NzQpLCBL UVUoIDMyMDY4MzYzNzI1ODU1NzU3MzIpLAotCUtRVSggMjc2NTMzMzk0NTY0NDgyMzQzMCksIEtR VSgxMDA4MDA3MDkwMzcxODc5OTUyOCksCi0JS1FVKCA1NDEyMzcwODE4ODc4Mjg2MzUzKSwgS1FV KCA5Njg5Njg1ODg3NzI2MjU3NzI4KSwKLQlLUVUoIDgyMzYxMTc1MDkxMjM1MzM5OTgpLCBLUVUo IDE5NTExMzkxMzcxNjUwNDAyMTQpLAotCUtRVSggNDQ5MjIwNTIwOTIyNzk4MDM0OSksIEtRVSgx NjU0MTI5MTIzMDg2MTYwMjk2NyksCi0JS1FVKCAxNDI0MzcxNTQ4MzAxNDM3OTQwKSwgS1FVKCA5 MTE3NTYyMDc5NjY5MjA2Nzk0KSwKLQlLUVUoMTQzNzQ2ODE1NjMyNTE2OTE2MjUpLCBLUVUoMTM4 NzMxNjQwMzAxOTk5MjEzMDMpLAotCUtRVSggNjY4MDMxNzk0Njc3MDkzNjczMSksIEtRVSgxNTU4 NjMzNDAyNjkxODI3NjIxNCksCi0JS1FVKDEwODk2MjEzOTUwOTc2MTA5ODAyKSwgS1FVKCA5NTA2 MjYxOTQ5NTk2NDEzNjg5KSwKLQlLUVUoIDk5MDM5NDk1NzQzMDgwNDA2MTYpLCBLUVUoIDYwMzgz OTczNDQ1NTcyMDQ0NzApLAotCUtRVSggIDE3NDYwMTQ2NTQyMjM3MzY0OCksIEtRVSgxNTk0NjE0 MTE5MTMzODIzODAzMCksCi0JS1FVKDE3MTQyMjI1NjIwOTkyMDQ0OTM3KSwgS1FVKCA3NTUyMDMw MjgzNzg0NDc3MDY0KSwKLQlLUVUoIDI5NDczNzIzODQ1MzI5NDc5OTcpLCBLUVUoICA1MTA3OTcw MjE2ODgxOTc3MTEpLAotCUtRVSggNDk2MjQ5OTQzOTI0OTM2MzQ2MSksIEtRVSggICAyMzc3MDMy MDE1ODM4NTM1NyksCi0JS1FVKCAgOTU5Nzc0NDk5MTA1MTM4MTI0KSwgS1FVKCAxNDY4Mzk2MDEx NTE4Nzg4Mjc2KSwKLQlLUVUoIDIwMTU2OTgwMDY4NTIzMTIzMDgpLCBLUVUoIDQxNDk0MDA3MTg0 ODk5ODAxMzYpLAotCUtRVSggNTk5MjkxNjA5OTUyMjM3MTE4OCksIEtRVSgxMDgxOTE4MjkzNTI2 NTUzMTA3NiksCi0JS1FVKDE2MTg5Nzg3OTk5MTkyMzUxMTMxKSwgS1FVKCAgMzQyODMzOTYxNzkw MjYxOTUwKSwKLQlLUVUoMTI0NzA4MzAzMTk1NTA0OTUzMzYpLCBLUVUoMTgxMjg0OTUwNDE5MTI4 MTI1MDEpLAotCUtRVSggMTE5MzYwMDg5OTcyMzUyNDMzNyksIEtRVSggOTA1Njc5MzY2NjU5MDA3 OTc3MCksCi0JS1FVKCAyMTU0MDIxMjI3MDQxNjY5MDQxKSwgS1FVKCA0OTYzNTcwMjEzOTUxMjM1 NzM1KSwKLQlLUVUoIDQ4NjUwNzU5NjAyMDkyMTE0MDkpLCBLUVUoIDIwOTc3MjQ1OTkwMzk5NDI5 NjMpLAotCUtRVSggMjAyNDA4MDI3ODU4MzE3OTg0NSksIEtRVSgxMTUyNzA1NDU0OTE5NjU3Njcz NiksCi0JS1FVKDEwNjUwMjU2MDg0MTgyMzkwMjUyKSwgS1FVKCA0ODA4NDA4NjQ4Njk1NzY2NzU1 KSwKLQlLUVUoIDE2NDI4MzkyMTUwMTM3ODg4NDQpLCBLUVUoMTA2MDcxODc5NDgyNTAzOTgzOTAp LAotCUtRVSggNzA3Njg2ODE2NjA4NTkxMzUwOCksIEtRVSggIDczMDUyMjU3MTEwNjg4NzAzMiks Ci0JS1FVKDEyNTAwNTc5MjQwMjA4NTI0ODk1KSwgS1FVKCA0NDg0MzkwMDk3MzExMzU1MzI0KSwK LQlLUVUoMTUxNDU4MDEzMzA3MDA2MjM4NzApLCBLUVUoIDgwNTU4Mjc2NjEzOTI5NDQwMjgpLAot CUtRVSggNTg2NTA5Mjk3NjgzMjcxMjI2OCksIEtRVSgxNTE1OTIxMjUwODA1MzYyNTE0MyksCi0J S1FVKCAzNTYwOTY0NTgyODc2NDgzMzQxKSwgS1FVKCA0MDcwMDUyNzQxMzQ0NDM4MjgwKSwKLQlL UVUoIDYwMzI1ODU3MDk4ODY4NTU2MzQpLCBLUVUoMTU2NDMyNjIzMjA5MDQ2MDQ4NzMpLAotCUtR VSggMjU2NTExOTc3MjI5MzM3MTExMSksIEtRVSggIDMxODMxNDI5MzA2NTM0ODI2MCksCi0JS1FV KDE1MDQ3NDU4NzQ5MTQxNTExODcyKSwgS1FVKCA3NzcyNzg4Mzg5ODExNTI4NzMwKSwKLQlLUVUo IDcwODExODc0OTQzNDM4MDE5NzYpLCBLUVUoIDY0NjUxMzYwMDk0NjcyNTM5NDcpLAotCUtRVSgx MDQyNTk0MDY5MjU0MzM2MjA2OSksIEtRVSggIDU1NDYwODE5MDMxODMzOTExNSksCi0JS1FVKDE0 Nzk2Njk5ODYwMzAyMTI1MjE0KSwgS1FVKCAxNjM4MTUzMTM0NDMxMTExNDQzKSwKLQlLUVUoMTAz MzY5Njc0NDcwNTIyNzYyNDgpLCBLUVUoIDg0MTIzMDgwNzAzOTY1OTI5NTgpLAotCUtRVSggNDAw NDU1NzI3NzE1MjA1MTIyNiksIEtRVSggODE0MzU5ODk5NzI3ODc3NDgzNCksCi0JS1FVKDE2NDEz MzIzOTk2NTA4NzgzMjIxKSwgS1FVKDEzMTM5NDE4NzU4MDMzOTk0OTQ5KSwKLQlLUVUoIDk3NzI3 MDkxMzgzMzUwMDY2NjcpLCBLUVUoIDI4MTgxNjcxNTkyODcxNTc2NTkpLAotCUtRVSgxNzA5MTc0 MDU3MzgzMjUyMzY2OSksIEtRVSgxNDYyOTE5OTAxMzEzMDc1MTYwOCksCi0JS1FVKDE4MjY4MzIy NzExNTAwMzM4MTg1KSwgS1FVKCA4MjkwOTYzNDE1Njc1NDkzMDYzKSwKLQlLUVUoIDg4MzA4NjQ5 MDc0NTI1NDI1ODgpLCBLUVUoIDE2MTQ4MzkwODQ2Mzc0OTQ4NDkpLAotCUtRVSgxNDg1NTM1ODUw MDg3MDQyMjIzMSksIEtRVSggMzQ3Mjk5Njc0ODM5MjUxOTkzNyksCi0JS1FVKDE1MzE3MTUxMTY2 MjY4ODc3NzE2KSwgS1FVKCA1ODI1ODk1MDE4Njk4NDAwMzYyKSwKLQlLUVUoMTY3MzAyMDg0Mjkz Njc1NDQxMjkpLCBLUVUoMTA0ODExNTY1NzgxNDEyMDI4MDApLAotCUtRVSggNDc0NjE2NjUxMjM4 MjgyMzc1MCksIEtRVSgxMjcyMDg3NjAxNDQ3MjQ2NDk5OCksCi0JS1FVKCA4ODI1MTc3MTI0NDg2 NzM1OTcyKSwgS1FVKDEzNzMzNDQ3Mjk2ODM3NDY3ODM4KSwKLQlLUVUoIDY0MTIyOTM3NDE2ODEz NTk2MjUpLCBLUVUoIDgzMTMyMTMxMzg3NTYxMzUwMzMpLAotCUtRVSgxMTQyMTQ4MTE5NDgwMzcx MjUxNyksIEtRVSggNzk5NzAwNzY5MTU0NDE3NDAzMiksCi0JS1FVKCA2ODEyOTYzODQ3OTE3NjA1 OTMwKSwgS1FVKCA5NjgzMDkxOTAxMjI3NTU4NjQxKSwKLQlLUVUoMTQ3MDM1OTQxNjU4NjAzMjQ3 MTMpLCBLUVUoIDE3NzU0NzYxNDQ1MTk2MTgzMDkpLAotCUtRVSggMjcyNDI4MzI4ODUxNjQ2OTUx OSksIEtRVSggIDcxNzY0MjU1NTE4NTg1Njg2OCksCi0JS1FVKCA4NzM2NDAyMTkyMjE1MDkyMzQ2 KSwgS1FVKDExODc4ODAwMzM2NDMxMzgxMDIxKSwKLQlLUVUoIDQzNDg4MTYwNjYwMTcwNjEyOTMp LCBLUVUoIDYxMTUxMTI3NTY1ODM2MzEzMDcpLAotCUtRVSggOTE3NjU5NzIzOTY2NzE0Mjk3Niks IEtRVSgxMjYxNTYyMjcxNDg5NDI1OTIwNCksCi0JS1FVKDEwMjgzNDA2NzExMzAxMzg1OTg3KSwg S1FVKCA1MTExNzYyNTA5NDg1Mzc5NDIwKSwKLQlLUVUoIDMxMTgyOTAwNTExOTg2ODg0NDkpLCBL UVUoIDczNDUxMjMwNzE2MzIyMzIxNDUpLAotCUtRVSggOTE3NjQyMzQ1MTY4ODY4MjM1OSksIEtR VSggNDg0Mzg2NTQ1NjE1Nzg2ODk3MSksCi0JS1FVKDEyMDA4MDM2MzYzNzUyNTY2MDg4KSwgS1FV KDEyMDU4ODM3MTgxOTE5Mzk3NzIwKSwKLQlLUVUoIDIxNDUwNzM5NTg0NTczNDczNjYpLCBLUVUo IDE1MjY1MDQ4ODE2NzI4MTgwNjcpLAotCUtRVSggMzQ4ODgzMDEwNTU2NzEzNDg0OCksIEtRVSgx MzIwODM2Mjk2MDY3NDgwNTE0MyksCi0JS1FVKCA0MDc3NTQ5NjcyODk5NTcyMTkyKSwgS1FVKCA3 NzcwOTk1Njg0NjkzODE4MzY1KSwKLQlLUVUoIDEzOTg1MzIzNDE1NDYzMTM1OTMpLCBLUVUoMTI3 MTE4NTk5MDg3MDM5Mjc4NDApLAotCUtRVSggMTQxNzU2MTE3MjU5NDQ0NjgxMyksIEtRVSgxNzA0 NTE5MTAyNDE5NDE3MDYwNCksCi0JS1FVKCA0MTAxOTMzMTc3NjA0OTMxNzEzKSwgS1FVKDE0NzA4 NDI4ODM0MjAzNDgwMzIwKSwKLQlLUVUoMTc0NDc1MDkyNjQ0Njk0MDc3MjQpLCBLUVUoMTQzMTQ4 MjE5NzM5ODM0MzQyNTUpLAotCUtRVSgxNzk5MDQ3MjI3MTA2MTYxNzI2NSksIEtRVSggNTA4Nzc1 NjY4NTg0MTY3Mzk0MiksCi0JS1FVKDEyNzk3ODIwNTg2ODkzODU5OTM5KSwgS1FVKCAxNzc4MTI4 OTUyNjcxMDkyODc5KSwKLQlLUVUoIDM1MzU5MTg1MzA1MDg2NjU4OTgpLCBLUVUoIDkwMzU3Mjk3 MDEwNDI0ODEzMDEpLAotCUtRVSgxNDgwODY2MTU2ODI3NzA3OTk2MiksIEtRVSgxNDU4NzM0NTA3 NzUzNzc0NzkxNCksCi0JS1FVKDExOTIwMDgwMDAyMzIzMTIyNzA4KSwgS1FVKCA2NDI2NTE1ODA1 MTk3Mjc4NzUzKSwKLQlLUVUoIDMyOTU2MTIyMTY3MjU5ODQ4MzEpLCBLUVUoMTEwNDA3MjI1MzIx MDA4NzYxMjApLAotCUtRVSgxMjMwNTk1MjkzNjM4NzU5ODc1NCksIEtRVSgxNjA5NzM5MTg5OTc0 MjAwNDI1MyksCi0JS1FVKCA0OTA4NTM3MzM1NjA2MTgyMjA4KSwgS1FVKDEyNDQ2Njc0NTUyMTk2 Nzk1NTA0KSwKLQlLUVUoMTYwMTA0OTc4NTU4MTY4OTUxNzcpLCBLUVUoIDkxOTQzNzg4NzQ3ODg2 MTU1NTEpLAotCUtRVSggMzM4Mjk1NzUyOTU2NzYxMzM4NCksIEtRVSggNTE1NDY0NzYwMDc1NDk3 NDA3NyksCi0JS1FVKCA5ODAxODIyODY1MzI4Mzk2MTQxKSwgS1FVKCA5MDIzNjYyMTczOTE5Mjg4 MTQzKSwKLQlLUVUoMTc2MjMxMTUzNTM4MjUxNDc4NjgpLCBLUVUoIDgyMzgxMTU3Njc0NDMwMTU4 MTYpLAotCUtRVSgxNTgxMTQ0NDE1OTg1OTAwMjU2MCksIEtRVSggOTA4NTYxMjUyODkwNDA1OTY2 MSksCi0JS1FVKCA2ODg4NjAxMDg5Mzk4NjE0MjU0KSwgS1FVKCAgMjU4MjUyOTkyODk0MTYwMTg5 KSwKLQlLUVUoIDY3MDQzNjM4ODA3OTI0Mjg2MjIpLCBLUVUoIDYxMTQ5NjYwMzIxNDcyMzU3NjMp LAotCUtRVSgxMTA3NTM5Mzg4MjY5MDI2MTg3NSksIEtRVSggODc5NzY2NDIzODkzMzYyMDQwNyks Ci0JS1FVKCA1OTAxODkyMDA2NDc2NzI2OTIwKSwgS1FVKCA1MzA5NzgwMTU5Mjg1NTE4OTU4KSwK LQlLUVUoMTQ5NDA4MDgzODcyNDA4MTczNjcpLCBLUVUoMTQ2NDIwMzIwMjE0NDk2NTY2OTgpLAot CUtRVSggOTgwODI1NjY3MjA2ODUwNDEzOSksIEtRVSggMzY3MDEzNTExMTM4MDYwNzY1OCksCi0J S1FVKDExMjExMjExMDk3ODQ1OTYwMTUyKSwgS1FVKCAxNDc0MzA0NTA2NzE2Njk1ODA4KSwKLQlL UVUoMTU4NDMxNjYyMDQ1MDY4NzYyMzkpLCBLUVUoIDc2NjEwNTEyNTI0NzE3ODA1NjEpLAotCUtR VSgxMDE3MDkwNTUwMjI0OTQxODQ3NiksIEtRVSggNzgwMTQxNjA0NTU4MjAyODU4OSksCi0JS1FV KCAyNzYzOTgxNDg0NzM3MDUzMDUwKSwgS1FVKCA5NDkxMzc3OTA1NDk5MjUzMDU0KSwKLQlLUVUo MTYyMDEzOTU4OTYzMzY5MTUwOTUpLCBLUVUoIDkyNTY1MTM3NTY0NDI3ODIxOTgpLAotCUtRVSgg NTQxMTI4MzE1Nzk3MjQ1NjAzNCksIEtRVSggNTA1OTQzMzEyMjI4ODMyMTY3NiksCi0JS1FVKCA0 MzI3NDA4MDA2NzIxMTIzMzU3KSwgS1FVKCA5Mjc4NTQ0MDc4ODM0NDMzMzc3KSwKLQlLUVUoIDc2 MDE1MjcxMTA4ODIyODE2MTIpLCBLUVUoMTE4NDgyOTU4OTY5NzU1MDUyNTEpLAotCUtRVSgxMjA5 Njk5ODgwMTA5NDczNTU2MCksIEtRVSgxNDc3MzQ4MDMzOTgyMzUwNjQxMyksCi0JS1FVKDE1NTg2 MjI3NDMzODk1ODAyMTQ5KSwgS1FVKDEyNzg2NTQxMjU3ODMwMjQyODcyKSwKLQlLUVUoIDY5MDQ2 OTI5ODUxNDA1MDMwNjcpLCBLUVUoIDUzMDkwMTE1MTUyNjMxMDM5NTkpLAotCUtRVSgxMjEwNTI1 NzE5MTE3OTM3MTA2NiksIEtRVSgxNDY1NDM4MDIxMjQ0MjIyNTAzNyksCi0JS1FVKCAyNTU2Nzc0 OTc0MTkwNjk1MDA5KSwgS1FVKCA0NDYxMjk3Mzk5OTI3NjAwMjYxKSwKLQlLUVUoMTQ4ODgyMjU2 NjA5MTUxMTg2NDYpLCBLUVUoMTQ5MTU0NTkzNDExNDgyOTE4MjQpLAotCUtRVSggMjczODgwMjE2 NjI1MjMyNzYzMSksIEtRVSggNjA0NzE1NTc4OTIzOTEzMTUxMiksCi0JS1FVKDEyOTIwNTQ1MzUz MjE3MDEwMzM4KSwgS1FVKDEwNjk3NjE3MjU3MDA3ODQwMjA1KSwKLQlLUVUoIDI3NTE1ODUyNTMx NTgyMDM1MDQpLCBLUVUoMTMyNTI3MjkxNTk3ODAwNDc0OTYpLAotCUtRVSgxNDcwMDMyNjEzNDY3 MjgxNTQ2OSksIEtRVSgxNDA4MjUyNzkwNDM3NDYwMDUyOSksCi0JS1FVKDE2ODUyOTYyMjczNDk2 NTQyMDcwKSwgS1FVKDE3NDQ2Njc1NTA0MjM1ODUzOTA3KSwKLQlLUVUoMTUwMTk2MDAzOTg1Mjc1 NzIzMTEpLCBLUVUoMTIzMTI3ODEzNDYzNDQwODE1NTEpLAotCUtRVSgxNDUyNDY2NzkzNTAzOTgx MDQ1MCksIEtRVSggNTYzNDAwNTY2MzM3NzE5NTczOCksCi0JS1FVKDExMzc1NTc0NzM5NTI1MDAw NTY5KSwgS1FVKCAyNDIzNjY1Mzk2NDMzMjYwMDQwKSwKLQlLUVUoIDUyMjI4MzY5MTQ3OTYwMTU0 MTApLCBLUVUoIDQzOTc2NjYzODY0OTI2NDczODcpLAotCUtRVSggNDYxOTI5NDQ0MTY5MTcwNzYz OCksIEtRVSggIDY2NTA4ODYwMjM1NDc3MDcxNiksCi0JS1FVKDEzMjQ2NDk1NjY1MjgxNTkzNjEw KSwgS1FVKCA2NTY0MTQ0MjcwNTQ5NzI5NDA5KSwKLQlLUVUoMTAyMjMyMTYxODgxNDU2NjE2ODgp LCBLUVUoIDM5NjE1NTY5MDcyOTkyMzA1ODUpLAotCUtRVSgxMTU0MzI2MjUxNTQ5MjQzOTkxNCks IEtRVSgxNjExODAzMTQzNzI4NTk5Mzc5MCksCi0JS1FVKCA3MTQzNDE3OTY0NTIwMTY2NDY1KSwg S1FVKDEzMjk1MDUzNTE1OTA5NDg2NzcyKSwKLQlLUVUoICAgNDA0MzQ2NjYwMDQ4OTk2NzUpLCBL UVUoMTcxMjc4MDQxOTQwMzgzNDcxNjQpLAotCUtRVSggODU5OTE2NTk2NjU2MDU4NjI2OSksIEtR VSggODIxNDAxNjc0OTAxMTI4NDkwMyksCi0JS1FVKDEzNzI1MTMwMzUyMTQwNDY1MjM5KSwgS1FV KCA1NDY3MjU0NDc0NDMxNzI2MjkxKSwKLQlLUVUoIDc3NDg1ODQyOTc0MzgyMTk4NzcpLCBLUVUo MTY5MzM1NTExMTQ4Mjk3NzI0NzIpLAotCUtRVSggMjE2OTYxODQzOTUwNjc5OTQwMCksIEtRVSgg MjE2OTc4NzYyNzY2NTExMzQ2MyksCi0JS1FVKDE3MzE0NDkzNTcxMjY3OTQzNzY0KSwgS1FVKDE4 MDUzNTc1MTAyOTExMzU0OTEyKSwKLQlLUVUoMTE5MjgzMDMyNzUzNzg0NzY5NzMpLCBLUVUoMTE1 OTM4NTA5MjUwNjE3MTU1NTApLAotCUtRVSgxNzc4MjI2OTkyMzQ3MzU4OTM2MiksIEtRVSggMzI4 MDIzNTMwNzcwNDc0NzAzOSksCi0JS1FVKCA2MTQ1MzQzNTc4NTk4Njg1MTQ5KSwgS1FVKDE3MDgw MTE3MDMxMTE0MDg2MDkwKSwKLQlLUVUoMTgwNjY4Mzk5MDI5ODM1OTQ3NTUpLCBLUVUoIDY1MTc1 MDg0MzAzMzEwMjA3MDYpLAotCUtRVSggODA5MjkwODg5Mzk1MDQxMTU0MSksIEtRVSgxMjU1ODM3 ODIzMzM4NjE1MzczMiksCi0JS1FVKCA0NDc2NTMyMTY3OTczMTMyOTc2KSwgS1FVKDE2MDgxNjQy NDMwMzY3MDI1MDE2KSwKLQlLUVUoIDQyMzMxNTQwOTQzNjkxMzkzNjEpLCBLUVUoIDg2OTM2MzA0 ODY2OTMxNjEwMjcpLAotCUtRVSgxMTI0NDk1OTM0MzAyNzc0MjI4NSksIEtRVSgxMjI3MzUwMzk2 Nzc2ODUxMzUwOCksCi0JS1FVKDE0MTA4OTc4NjM2Mzg1Mjg0ODc2KSwgS1FVKCA3MjQyNDE0NjY1 Mzc4ODI2OTg0KSwKLQlLUVUoIDY1NjEzMTY5Mzg4NDY1NjI0MzIpLCBLUVUoIDg2MDEwMzg0NzQ5 OTQ2NjU3OTUpLAotCUtRVSgxNzUzMjk0MjM1MzYxMjM2NTkwNCksIEtRVSgxNzk0MDA3NjYzNzAy MDkxMjE4NiksCi0JS1FVKCA3MzQwMjYwMzY4ODIzMTcxMzA0KSwgS1FVKCA3MDYxODA3NjEzOTE2 MDY3OTA1KSwKLQlLUVUoMTA1NjE3MzQ5MzUwMzk1MTkzMjYpLCBLUVUoMTc5OTA3OTY1MDM3MjQ2 NTA4NjIpLAotCUtRVSggNjIwODczMjk0MzkxMTgyNzE1OSksIEtRVSggIDM1OTA3NzU2MjgwNDA5 MDYxNyksCi0JS1FVKDE0MTc3NzUxNTM3Nzg0NDAzMTEzKSwgS1FVKDEwNjU5NTk5NDQ0OTE1MzYy OTAyKSwKLQlLUVUoMTUwODE3MjcyMjA2MTUwODU4MzMpLCBLUVUoMTM0MTc1NzM4OTU2NTk3NTc0 ODYpLAotCUtRVSgxNTUxMzg0MjM0MjAxNzgxMTUyNCksIEtRVSgxMTgxNDE0MTUxNjIwNDI4ODIz MSksCi0JS1FVKCAxODI3MzEyNTEzODc1MTAxODE0KSwgS1FVKCAyODA0NjExNjk5ODk0NjAzMTAz KSwKLQlLUVUoMTcxMTY1MDA0Njk5NzU2MDI3NjMpLCBLUVUoMTIyNzAxOTE4MTUyMTE5NTIwODcp LAotCUtRVSgxMjI1NjM1ODQ2Nzc4NjAyNDk4OCksIEtRVSgxODQzNTAyMTcyMjQ1Mzk3MTI2Nyks Ci0JS1FVKCAgNjcxMzMwMjY0MzkwODY1NjE4KSwgS1FVKCAgNDc2NTA0MzAwNDYwMjg2MDUwKSwK LQlLUVUoMTY0NjU0NzA5MDEwMjcwOTM0NDEpLCBLUVUoIDQwNDc3MjQ0MDYyNDcxMzY0MDIpLAot CUtRVSggMTMyMjMwNTQ1MTQxMTg4MzM0NiksIEtRVSggMTM4ODMwODY4ODgzNDMyMjI4MCksCi0J S1FVKCA3MzAzOTg5MDg1MjY5NzU4MTc2KSwgS1FVKCA5MzIzNzkyNjY0NzY1MjMzNjQyKSwKLQlL UVUoIDQ1NDI3NjI1NzUzMTYzNjg5MzYpLCBLUVUoMTczNDI2OTYxMzI3OTQzMzc2MTgpLAotCUtR VSggNDU4ODAyNTA1NDc2ODQ5ODM3OSksIEtRVSgxMzQxNTQ3NTA1NzM5MDMzMDgwNCksCi0JS1FV KDE3ODgwMjc5NDkxNzMzNDA1NTcwKSwgS1FVKDEwNjEwNTUzNDAwNjE4NjIwMzUzKSwKLQlLUVUo IDMxODA4NDIwNzI2NTg5NjAxMzkpLCBLUVUoMTMwMDI5NjY2NTU0NTQyNzAxMjApLAotCUtRVSgg MTY2NTMwMTE4MTA2NDk4MjgyNiksIEtRVSggNzA4MzY3Mzk0Njc5MTI1ODk3OSksCi0JS1FVKCAg MTkwNTIyMjQ3MTIyNDk2ODIwKSwgS1FVKDE3Mzg4MjgwMjM3MjUwNjc3NzQwKSwKLQlLUVUoIDg0 MzA3NzAzNzk5MjM2NDI5NDUpLCBLUVUoMTI5ODcxODA5NzE5MjE2Njg1ODQpLAotCUtRVSggMjMx MTA4NjEwODM2NTM5MDY0MiksIEtRVSggMjg3MDk4NDM4MzU3OTgyMjM0NSksCi0JS1FVKDE0MDE0 NjgyNjA5MTY0NjUzMzE4KSwgS1FVKDE0NDY3MTg3MjkzMDYyMjUxNDg0KSwKLQlLUVUoICAxOTIx ODYzNjExNDc0MTMyOTgpLCBLUVUoMTUxNzE5NTE3MTM1MzE3OTY1MjQpLAotCUtRVSggOTkwMDMw NTQ5NTAxNTk0ODcyOCksIEtRVSgxNzk1ODAwNDc3NTYxNTQ2NjM0NCksCi0JS1FVKDE0MzQ2Mzgw OTU0NDk4NjA2NTE0KSwgS1FVKDE4MDQwMDQ3MzU3NjE3NDA3MDk2KSwKLQlLUVUoIDUwMzUyMzc1 ODQ4MzM0MjQ1MzIpLCBLUVUoMTUwODk1NTU0NjA2MTM5NzIyODcpLAotCUtRVSggNDEzMTQxMTg3 Mzc0OTcyOTgzMSksIEtRVSggMTMyOTAxMzU4MTE2ODI1MDMzMCksCi0JS1FVKDEwMDk1MzUzMzMz MDUxMTkzOTQ5KSwgS1FVKDEwNzQ5NTE4NTYxMDIyNDYyNzE2KSwKLQlLUVUoIDkwNTA2MTE0Mjk4 MTA3NTU4NDcpLCBLUVUoMTUwMjIwMjg4NDAyMzY2NTU2NDkpLAotCUtRVSggODc3NTU1NDI3OTIz OTc0ODI5OCksIEtRVSgxMzEwNTc1NDAyNTQ4OTIzMDUwMiksCi0JS1FVKDE1NDcxMzAwMTE4NTc0 MTY3NTg1KSwgS1FVKCAgIDg5ODY0NzY0MDAyMzU1NjI4KSwKLQlLUVUoIDg3NzY0MTYzMjM0MjA0 NjY2MzcpLCBLUVUoIDUyODAyNTg2MzA2MTIwNDA4OTEpLAotCUtRVSggMjcxOTE3NDQ4ODU5MTg2 MjkxMiksIEtRVSggNzU5OTMwOTEzNzM5OTY2MTk5NCksCi0JS1FVKDE1MDEyODg3MjU2Nzc4MDM5 OTc5KSwgS1FVKDE0MDYyOTgxNzI1NjMwOTI4OTI1KSwKLQlLUVUoMTIwMzg1MzYyODY5OTE2ODk2 MDMpLCBLUVUoIDcwODk3NTY1NDQ2ODE3NzUyNDUpLAotCUtRVSgxMDM3NjY2MTUzMjc0NDcxODAz OSksIEtRVSggMTI2NTE5ODcyNTkwMTUzMzEzMCksCi0JS1FVKDEzODA3OTk2NzI3MDgxMTQyNDA4 KSwgS1FVKCAyOTM1MDE5NjI2NzY1MDM2NDAzKSwKLQlLUVUoIDc2NTE2NzI0NjA2ODA3MDAxNDEp LCBLUVUoIDM2NDQwOTMwMTYyMDAzNzA3OTUpLAotCUtRVSggMjg0MDk4MjU3ODA5MDA4MDY3NCks IEtRVSgxNzk1NjI2Mjc0MDE1NzQ0OTIwMSksCi0JS1FVKDE4MjY3OTc5NDUwNDkyODgwNTQ4KSwg S1FVKDExNzk5NTAzNjU5Nzk2ODQ4MDcwKSwKLQlLUVUoIDk5NDI1MzcwMjU2Njk2NzIzODgpLCBL UVUoMTE4ODY2MDY4MTY0MDY5OTAyOTcpLAotCUtRVSggNTQ4ODU5NDk0NjQzNzQ0NzU3NiksIEtR VSggNzIyNjcxNDM1MzI4Mjc0NDMwMiksCi0JS1FVKCAzNzg0ODUxNjUzMTIzODc3MDQzKSwgS1FV KCAgODc4MDE4NDUzMjQ0ODAzMDQxKSwKLQlLUVUoMTIxMTAwMjI1ODYyNjg2MTYwODUpLCBLUVUo ICA3MzQwNzIxNzk0MDQ2NzUxMjMpLAotCUtRVSgxMTg2OTU3MzYyNzk5ODI0ODU0MiksIEtRVSgg IDQ2OTE1MDQyMTI5Nzc4Mzk5OCksCi0JS1FVKCAgMjYwMTUxMTI0OTEyODAzODA0KSwgS1FVKDEx NjM5MTc5NDEwMTIwOTY4NjQ5KSwKLQlLUVUoIDkzMTgxNjUxOTM4NDA4NDYyNTMpLCBLUVUoMTI3 OTU2NzE3MjI3MzQ3NTgwNzUpLAotCUtRVSgxNTMxODQxMDI5NzI2NzI1MzkzMyksIEtRVSggIDY5 MTUyNDcwMzU3MDA2MjYyMCksCi0JS1FVKCA1ODM3MTI5MDEwNTc2OTk0NjAxKSwgS1FVKDE1MDQ1 OTYzODU5NzI2OTQxMDUyKSwKLQlLUVUoIDU4NTAwNTY5NDQ5MzIyMzgxNjkpLCBLUVUoMTIwMTc0 MzQxNDQ3NTA5NDM4MDcpLAotCUtRVSggNzQ0NzEzOTA2NDkyODk1NjU3NCksIEtRVSggMzEwMTcx MTgxMjY1ODI0NTAxOSksCi0JS1FVKDE2MDUyOTQwNzA0NDc0OTgyOTU0KSwgS1FVKDE4MTk1NzQ1 OTQ1OTg2OTk0MDQyKSwKLQlLUVUoIDg5MzIyNTIxMzI3ODU1NzU2NTkpLCBLUVUoMTMzOTA4MTc0 ODgxMDY3OTQ4MzQpLAotCUtRVSgxMTU4Mjc3MTgzNjUwMjUxNzQ1MyksIEtRVSggNDk2NDQxMTMy NjY4MzYxMTY4NiksCi0JS1FVKCAyMTk1MDkzOTgxNzAyNjk0MDExKSwgS1FVKDE0MTQ1MjI5NTM4 Mzg5Njc1NjY5KSwKLQlLUVUoMTY0NTk2MDU1MzIwNjIyNzE3OTgpLCBLUVUoICA4NjYzMTY5MjQ4 MTY0ODI4NjQpLAotCUtRVSggNDU5MzA0MTIwOTkzNzI4NjM3NyksIEtRVSggODQxNTQ5MTM5MTkx MDk3MjEzOCksCi0JS1FVKCA0MTcxMjM2NzE1NjAwNTI4OTY5KSwgS1FVKDE2NjM3NTY5MzAzMzM2 NzgyODg5KSwKLQlLUVUoIDIwMDIwMTEwNzM0MzkyMTI2ODApLCBLUVUoMTc2OTUxMjQ2NjEwOTc2 MDE0MTEpLAotCUtRVSggNDYyNzY4NzA1MzU5ODYxMTcwMiksIEtRVSggNzg5NTgzMTkzNjAyMDE5 MDQwMyksCi0JS1FVKCA4NDU1OTUxMzAwOTE3MjY3ODAyKSwgS1FVKCAyOTIzODYxNjQ5MTA4NTM0 ODU0KSwKLQlLUVUoIDgzNDQ1NTc1NjM5Mjc3ODYyNTUpLCBLUVUoIDY0MDg2NzE5NDAzNzMzNTI1 NTYpLAotCUtRVSgxMjIxMDIyNzM1NDUzNjY3NTc3MiksIEtRVSgxNDI5NDgwNDE1NzI5NDIyMjI5 NSksCi0JS1FVKDEwMTAzMDIyNDI1MDcxMDg1MTI3KSwgS1FVKDEwMDkyOTU5NDg5NTA0MTIzNzcx KSwKLQlLUVUoIDY1NTQ3NzQ0MDUzNzY3MzYyNjgpLCBLUVUoMTI2Mjk5MTc3MTg0MTA2NDE3NzQp LAotCUtRVSggNjI2MDkzMzI1NzU5NjA2NzEyNiksIEtRVSggMjQ2MDgyNzAyMTQzOTM2OTY3Myks Ci0JS1FVKCAyNTQxOTYyOTk2NzE3MTAzNjY4KSwgS1FVKCAgNTk3Mzc3MjAzMTI3MzUxNDc1KSwK LQlLUVUoIDUzMTY5ODQyMDMxMTczMTUzMDkpLCBLUVUoIDQ4MTEyMTEzOTM1NjMyNDE5NjEpLAot CUtRVSgxMzExOTY5ODU5NzI1NTgxMTY0MSksIEtRVSggODA0ODY5MTUxMjg2MjM4ODk4MSksCi0J S1FVKDEwMjE2ODE4OTcxMTk0MDczODQyKSwgS1FVKCA0NjEyMjI5OTcwMTY1MjkxNzY0KSwKLQlL UVUoMTAwMDA5ODA3OTg0MTk5NzQ3NzApLCBLUVUoIDY4Nzc2NDA4MTI0MDI1NDA2ODcpLAotCUtR VSggMTQ4ODcyNzU2MzI5MDQzNjk5MiksIEtRVSggMjIyNzc3NDA2OTg5NTY5NzMxOCksCi0JS1FV KDExMjM3NzU0NTA3NTIzMzE2NTkzKSwgS1FVKDEzNDc4OTQ4NjA1MzgyMjkwOTcyKSwKLQlLUVUo IDE5NjM1ODM4NDY5NzY4NTgxMjQpLCBLUVUoIDU1MTIzMDkyMDUyNjkyNzY0NTcpLAotCUtRVSgg Mzk3Mjc3MDE2NDcxNzY1MjM0NyksIEtRVSggMzg0MTc1MTI3NjE5ODk3NTAzNyksCi0JS1FVKDEw MjgzMzQzMDQyMTgxOTAzMTE3KSwgS1FVKCA4NTY0MDAxMjU5NzkyODcyMTk5KSwKLQlLUVUoMTY0 NzIxODcyNDQ3MjI0ODkyMjEpLCBLUVUoIDg5NTM0OTM0OTkyNjg5NDU5MjEpLAotCUtRVSggMzUx ODc0NzM0MDM1NzI3OTU4MCksIEtRVSggNDAwMzE1NzU0NjIyMzk2MzA3MyksCi0JS1FVKCAzMjcw MzA1OTU4Mjg5ODE0NTkwKSwgS1FVKCAzOTY2NzA0NDU4MTI5NDgyNDk2KSwKLQlLUVUoIDgxMjIx NDE4NjU5MjY2NjE5MzkpLCBLUVUoMTQ2Mjc3MzQ3NDgwOTk1MDY2NTMpLAotCUtRVSgxMzA2NDQy Njk5MDg2MjU2MDU2OCksIEtRVSggMjQxNDA3OTE4Nzg4OTg3MDgyOSksCi0JS1FVKCA1Mzc4NDYx MjA5MzU0MjI1MzA2KSwgS1FVKDEwODQxOTg1NzQwMTI4MjU1NTY2KSwKLQlLUVUoICA1Mzg1ODI0 NDI4ODU0MDE3MzgpLCBLUVUoIDc1MzUwODkxODM0ODI5MDU5NDYpLAotCUtRVSgxNjExNzU1OTk1 NzU5ODg3OTA5NSksIEtRVSggODQ3Nzg5MDcyMTQxNDUzOTc0MSksCi0JS1FVKCAxNDU5MTI3NDkx MjA5NTMzMzg2KSwgS1FVKDE3MDM1MTI2MzYwNzMzNjIwNDYyKSwKLQlLUVUoIDg1MTc2Njg1NTI4 NzIzNzkxMjYpLCBLUVUoMTAyOTIxNTE0NjgzMzczNTUwMTQpLAotCUtRVSgxNzA4MTI2NzczMjc0 NTM0NDE1NyksIEtRVSgxMzc1MTQ1NTMzNzk0NjA4NzE3OCksCi0JS1FVKDE0MDI2OTQ1NDU5NTIz ODMyOTY2KSwgS1FVKCA2NjUzMjc4Nzc1MDYxNzIzNTE2KSwKLQlLUVUoMTA2MTkwODU1NDM4NTYz OTA0NDEpLCBLUVUoIDIxOTYzNDM2MzE0ODExMjI4ODUpLAotCUtRVSgxMDA0NTk2NjA3NDcwMjgy NjEzNiksIEtRVSgxMDA4MjMxNzMzMDQ1MjcxODI4MiksCi0JS1FVKCA1OTIwODU5MjU5NTA0ODMx MjQyKSwgS1FVKCA5OTUxODc5MDczNDI2NTQwNjE3KSwKLQlLUVUoIDcwNzQ2OTY2NDkxNTE0MTQx NTgpLCBLUVUoMTU4MDgxOTM1NDM4Nzk0NjQzMTgpLAotCUtRVSggNzM4NTI0Nzc3Mjc0Njk1MzM3 NCksIEtRVSggMzE5MjAwMzU0NDI4Mzg2NDI5MiksCi0JS1FVKDE4MTUzNjg0NDkwOTE3NTkzODQ3 KSwgS1FVKDEyNDIzNDk4MjYwNjY4NTY4OTA1KSwKLQlLUVUoMTA5NTc3NTgwOTk3NTYzNzgxNjkp LCBLUVUoMTE0ODg3NjIxNzk5MTEwMTYwNDApLAotCUtRVSggMjA5OTkzMTE4NjQ2NTMzMzc4Miks IEtRVSgxMTE4MDk3OTU4MTI1MDI5NDQzMiksCi0JS1FVKCA4MDk4OTE2MjUwNjY4MzY3OTMzKSwg S1FVKCAzNTI5MjAwNDM2NzkwNzYzNDY1KSwKLQlLUVUoMTI5ODg0MTg5MDg2NzQ2ODE3NDUpLCBL UVUoIDYxNDc1NjcyNzU5NTQ4MDg1ODApLAotCUtRVSggMzIwNzUwMzM0NDYwNDAzMDk4OSksIEtR VSgxMDc2MTU5MjYwNDg5ODYxNTM2MCksCi0JS1FVKCAgMjI5ODU0ODYxMDMxODkzNTA0KSwgS1FV KCA4ODA5ODUzOTYyNjY3MTQ0MjkxKSwKLQlLUVUoMTM5NTczNjQ0NjkwMDU2OTM4NjApLCBLUVUo IDc2MzQyODc2NjUyMjQ0OTU4ODYpLAotCUtRVSgxMjM1MzQ4NzM2Njk3NjU1Njg3NCksIEtRVSgg MTEzNDQyMzc5NjMxNzE1MjAzNCksCi0JS1FVKCAyMDg4OTkyNDcxMzM0MTA3MDY4KSwgS1FVKCA3 MzkzMzcyMTI3MTkwNzk5Njk4KSwKLQlLUVUoIDE4NDUzNjc4Mzk4NzEwNTgzOTEpLCBLUVUoICAy MDc5MjI1NjM5ODczMjI4ODQpLAotCUtRVSgxMTk2MDg3MDgxMzE1OTk0NDk3NiksIEtRVSgxMjE4 MjEyMDA1MzMxNzMxNzM2MyksCi0JS1FVKDE3MzA3MzU4MTMyNTcxNzA5MjgzKSwgS1FVKDEzODcx MDgxMTU1NTUyODI0OTM2KSwKLQlLUVUoMTgzMDQ0NDY3NTE3NDE1NjYyNjIpLCBLUVUoIDcxNzg3 MDUyMjAxODQzMDI4NDkpLAotCUtRVSgxMDkyOTYwNTY3Nzc1ODgyNDQyNSksIEtRVSgxNjQ0Njk3 Njk3NzgzNTgwNjg0NCksCi0JS1FVKDEzNzIzODc0NDEyMTU5NzY5MDQ0KSwgS1FVKCA2OTQyODU0 MzUyMTAwOTE1MjE2KSwKLQlLUVUoIDE3MjYzMDg0NzQzNjU3MjkzOTApLCBLUVUoIDIxNTAwNzg3 NjY0NDUzMjMxNTUpLAotCUtRVSgxNTM0NTU1ODk0NzkxOTY1NjYyNiksIEtRVSgxMjE0NTQ1Mzgy ODg3NDUyNzIwMSksCi0JS1FVKCAyMDU0NDQ4NjIwNzM5NzI2ODQ5KSwgS1FVKCAyNzQwMTAyMDAz MzUyNjI4MTM3KSwKLQlLUVUoMTEyOTQ0NjIxNjM1Nzc2MTA2NTUpLCBLUVUoICA3NTYxNjQyODMz ODc0MTM3NDMpLAotCUtRVSgxNzg0MTE0NDc1ODQzODgxMDg4MCksIEtRVSgxMDgwMjQwNjAyMTE4 NTQxNTg2MSksCi0JS1FVKCA4NzE2NDU1NTMwNDc2NzM3ODQ2KSwgS1FVKCA2MzIxNzg4ODM0NTE3 NjQ5NjA2KSwKLQlLUVUoMTQ2ODEzMjI5MTA1Nzc0Njg0MjYpLCBLUVUoMTczMzAwNDM1NjM4ODQz MzYzODcpLAotCUtRVSgxMjcwMTgwMjE4MDA1MDA3MTYxNCksIEtRVSgxNDY5NTEwNTExMTA3OTcy NzE1MSksCi0JS1FVKCA1MTEyMDk4NTExNjU0MTcyODMwKSwgS1FVKCA0OTU3NTA1NDk2Nzk0MTM5 OTczKSwKLQlLUVUoIDgyNzA5Nzk0NTE5NTIwNDU5ODIpLCBLUVUoMTIzMDc2ODU5MzkxOTkxMjA5 NjkpLAotCUtRVSgxMjQyNTc5OTQwODk1MzQ0MzAzMiksIEtRVSggODM3NjQxMDE0MzYzNDc5NjU4 OCksCi0JS1FVKDE2NjIxNzc4Njc5NjgwMDYwNDY0KSwgS1FVKCAzNTgwNDk3ODU0NTY2NjYwMDcz KSwKLQlLUVUoIDExMjI1MTU3NDc4MDMzODI0MTYpLCBLUVUoICA4NTc2NjQ5ODA5NjA1OTc1OTkp LAotCUtRVSggNjM0MzY0MDExOTg5NTkyNTkxOCksIEtRVSgxMjg3ODQ3MzI2MDg1NDQ2Mjg5MSks Ci0JS1FVKDEwMDM2ODEzOTIwNzY1NzIyNjI2KSwgS1FVKDE0NDUxMzM1NDY4MzYzMTczODEyKSwK LQlLUVUoIDU0NzY4MDk2OTI0MDExMDI4MDcpLCBLUVUoMTY0NDIyNTUxNzM1MTQzNjYzNDIpLAot CUtRVSgxMzA2MDIwMzE5NDc1NzE2NzEwNCksIEtRVSgxNDM1NDEyNDA3MTI0MzE3NzcxNSksCi0J S1FVKDE1OTYxMjQ5NDA1Njk2MTI1MjI3KSwgS1FVKDEzNzAzODkzNjQ5NjkwODcyNTg0KSwKLQlL UVUoICAzNjM5MDczMjYzNDAzNDAwNjQpLCBLUVUoIDYyNDc0NTU1NDA0OTE3NTQ4NDIpLAotCUtR VSgxMjI0MjI0OTMzMjc1NzgzMjM2MSksIEtRVSggIDE1NjA2NTQ3NTY3OTc5NjcxNyksCi0JS1FV KCA5MzUxMTE2MjM1NzQ5NzMyMzU1KSwgS1FVKCA0NTkwMzUwNjI4Njc3NzAxNDA1KSwKLQlLUVUo IDE2NzExOTU5NDA5ODIzNTAzODkpLCBLUVUoMTM1MDEzOTg0NTg4OTg0NTE5MDUpLAotCUtRVSgg NjUyNjM0MTk5MTIyNTAwMjI1NSksIEtRVSggMTY4OTc4MjkxMzc3ODE1NzU5MiksCi0JS1FVKCA3 NDM5MjIyMzUwODY5MDEwMzM0KSwgS1FVKDEzOTc1MTUwMjYzMjI2NDc4MzA4KSwKLQlLUVUoMTE0 MTE5NjExNjk5MzI2ODI3MTApLCBLUVUoMTcyMDQyNzE4MzQ4MzM4NDcyNzcpLAotCUtRVSggIDU0 MTUzNDc0MjU0NDQzNTM2NyksIEtRVSggNjU5MTE5MTkzMTIxODk0OTY4NCksCi0JS1FVKCAyNjQ1 NDU0Nzc1NDc4MjMyNDg2KSwgS1FVKCA0MzIyODU3NDgxMjU2NDg1MzIxKSwKLQlLUVUoIDg0Nzc0 MTY0ODc1NTMwNjUxMTApLCBLUVUoMTI5MDI1MDU0Mjg1NDg0MzUwNDgpLAotCUtRVSggIDk3MTQ0 NTc3Nzk4MTM0MTQxNSksIEtRVSgxNDk5NTEwNDY4Mjc0NDk3NjcxMiksCi0JS1FVKCA0MjQzMzQx NjQ4ODA3MTU4MDYzKSwgS1FVKCA4Njk1MDYxMjUyNzIxOTI3NjYxKSwKLQlLUVUoIDUwMjgyMDIw MDMyNzAxNzcyMjIpLCBLUVUoIDIyODkyNTczNDA5MTU1Njc4NDApLAotCUtRVSgxMzg3MDQxNjM0 NTEyMTg2NjAwNyksIEtRVSgxMzk5NDQ4MTY5ODA3MjA5MjIzMyksCi0JS1FVKCA2OTEyNzg1NDAw NzUzMTk2NDgxKSwgS1FVKCAyMjc4MzA5MzE1ODQxOTgwMTM5KSwKLQlLUVUoIDQzMjk3NjU0NDk2 NDgzMDQ4MzkpLCBLUVUoIDU5NjMxMDgwOTU3ODU0ODUyOTgpLAotCUtRVSggNDg4MDAyNDg0NzQ3 ODcyMjQ3OCksIEtRVSgxNjAxNTYwODc3OTg5MDI0MDk0NyksCi0JS1FVKCAxODY2Njc5MDM0MjYx MzkzNTQ0KSwgS1FVKCAgOTE0ODIxMTc5OTE5NzMxNTE5KSwKLQlLUVUoIDk2NDM0MDQwMzU2NDg3 NjAxMzEpLCBLUVUoIDI0MTgxMTQ5NTM2MTU1OTM5MTUpLAotCUtRVSggIDk0NDc1NjgzNjA3Mzcw MjM3NCksIEtRVSgxNTE4NjM4ODA0ODczNzI5NjgzNCksCi0JS1FVKCA3NzIzMzU1MzM2MTI4NDQy MjA2KSwgS1FVKCA3NTAwNzQ3NDc5Njc5NTk5NjkxKSwKLQlLUVUoMTgwMTM5NjEzMDY0NTMyOTM2 MzQpLCBLUVUoIDIzMTUyNzQ4MDgwOTU3NTY0NTYpLAotCUtRVSgxMzY1NTMwODI1NTQyNDAyOTU2 NiksIEtRVSgxNzIwMzgwMDI3MzU2MTY3NzA5OCksCi0JS1FVKCAxMzgyMTU4Njk0NDIyMDg3NzU2 KSwgS1FVKCA1MDkwMzkwMjUwMzA5NTg4OTc2KSwKLQlLUVUoICA1MTcxNzA4MTgzODQyMTM5ODkp LCBLUVUoIDE2MTI3MDkyNTI2Mjc3Mjk2MjEpLAotCUtRVSggMTMzMDExODk1NTU3MjQ0OTYwNiks IEtRVSggIDMwMDkyMjQ3ODA1NjcwOTg4NSksCi0JS1FVKDE4MTE1NjkzMjkxMjg5MDkxOTg3KSwg S1FVKDEzNDkxNDA3MTA5NzI1MjM4MzIxKSwKLQlLUVUoMTUyOTM3MTQ2MzM1OTM4MjczMjApLCBL UVUoIDUxNTE1MzkzNzMwNTMzMTQ1MDQpLAotCUtRVSggNTk1MTUyMzI0Mzc0MzEzOTIwNyksIEtR VSgxNDQ1OTExMjAxNTI0OTUyNzk3NSksCi0JS1FVKCA1NDU2MTEzOTU5MDAwNzAwNzM5KSwgS1FV KCAzODc3OTE4NDM4NDY0ODczMDE2KSwKLQlLUVUoMTI1MzQwNzE2NTQyNjAxNjM1NTUpLCBLUVUo MTU4NzE2NzgzNzY4OTM1NTUwNDEpLAotCUtRVSgxMTAwNTQ4NDgwNTcxMjAyNTU0OSksIEtRVSgx NjM1MzA2Njk3MzE0MzM3NDI1MiksCi0JS1FVKCA0MzU4MzMxNDcyMDYzMjU2Njg1KSwgS1FVKCA4 MjY4MzQ5MzMyMjEwODU5Mjg4KSwKLQlLUVUoMTI0ODUxNjE1OTA5Mzk2NTgwNzUpLCBLUVUoMTM5 NTU5OTM1OTI4NTQ0NzEzNDMpLAotCUtRVSggNTkxMTQ0Njg4Njg0ODM2NzAzOSksIEtRVSgxNDky NTgzNDA4NjgxMzcwNjk3NCksCi0JS1FVKCA2NTkwMzYyNTk3ODU3OTk0ODA1KSwgS1FVKCAxMjgw NTQ0OTIzNTMzNjYxODc1KSwKLQlLUVUoIDE2Mzc3NTYwMTg5NDc5ODgxNjQpLCBLUVUoIDQ3MzQw OTAwNjQ1MTI2ODYzMjkpLAotCUtRVSgxNjY5MzcwNTI2MzEzMTQ4NTkxMiksIEtRVSggNjgzNDg4 MjM0MDQ5NDM2MDk1OCksCi0JS1FVKCA4MTIwNzMyMTc2MTU5NjU4NTA1KSwgS1FVKCAyMjQ0Mzcx OTU4OTA1MzI5MzQ2KSwKLQlLUVUoMTA0NDc0OTk3MDc3Mjk3MzQwMjEpLCBLUVUoIDczMTg3NDIz NjE0NDY5NDIxOTQpLAotCUtRVSggODAzMjg1NzUxNjM1NTU1NTI5NiksIEtRVSgxNDAyMzYwNTk4 MzA1OTMxMzExNiksCi0JS1FVKCAxMDMyMzM2MDYxODE1NDYxMzc2KSwgS1FVKCA5ODQwOTk1MzM3 ODc2NTYyNjEyKSwKLQlLUVUoIDk4NjkyNTYyMjMwMjkyMDM1ODcpLCBLUVUoMTIyMjc5NzU2OTcx NzcyNjc2MzYpLAotCUtRVSgxMjcyODExNTExNTg0NDE4NjAzMyksIEtRVSggNzc1MjA1ODQ3OTc4 MzIwNTQ3MCksCi0JS1FVKCAgNzI5NzMzMjE5NzEzMzkzMDg3KSwgS1FVKDEyOTU0MDE3ODAxMjM5 MDA3NjIyKQotfTsKLXN0YXRpYyBjb25zdCB1aW50NjRfdCBpbml0X2J5X2FycmF5XzY0X2V4cGVj dGVkW10gPSB7Ci0JS1FVKCAyMTAwMzQxMjY2MzA3ODk1MjM5KSwgS1FVKCA4MzQ0MjU2MzAwNDg5 NzU3OTQzKSwKLQlLUVUoMTU2ODc5MzMyODU0ODQyNDM4OTQpLCBLUVUoIDgyNjg2MjAzNzAyNzcw NzYzMTkpLAotCUtRVSgxMjM3MTg1MjMwOTgyNjU0NTQ1OSksIEtRVSggODgwMDQ5MTU0MTczMDEx MDIzOCksCi0JS1FVKDE4MTEzMjY4OTUwMTAwODM1NzczKSwgS1FVKCAyODg2ODIzNjU4ODg0NDM4 MTE5KSwKLQlLUVUoIDMyOTM2NjczMDcyNDgxODA3MjQpLCBLUVUoIDkzMDc5MjgxNDMzMDAxNzI3 MzEpLAotCUtRVSggNzY4ODA4MjAxNzU3NDI5MzYyOSksIEtRVSggIDkwMDk4NjIyNDczNTE2NjY2 NSksCi0JS1FVKCA5OTc3OTcyNzEwNzIyMjY1MDM5KSwgS1FVKCA2MDA4MjA1MDA0OTk0ODMwNTUy KSwKLQlLUVUoICA1NDY5MDkxMDQ1MjE2ODkyOTIpLCBLUVUoIDc0Mjg0NzE1MjE4NjkxMDc1OTQp LAotCUtRVSgxNDc3NzU2MzQxOTMxNDcyMTE3OSksIEtRVSgxNjExNjE0MzA3NjU2NzM1MDA1Myks Ci0JS1FVKCA1MzIyNjg1MzQyMDAzMTQyMzI5KSwgS1FVKCA0MjAwNDI3MDQ4NDQ1ODYzNDczKSwK LQlLUVUoIDQ2OTMwOTIxNTAxMzI1NTkxNDYpLCBLUVUoMTM2NzE0MjU4NjM3NTkzMzg1ODIpLAot CUtRVSggNjc0NzExNzQ2MDczNzYzOTkxNiksIEtRVSggNDczMjY2NjA4MDIzNjU1MTE1MCksCi0J S1FVKCA1OTEyODM5OTUwNjExOTQxMjYzKSwgS1FVKCAzOTAzNzE3NTU0NTA0NzA0OTA5KSwKLQlL UVUoIDI2MTU2Njc2NTAyNTY3ODY4MTgpLCBLUVUoMTA4NDQxMjk5MTM4ODcwMDYzNTIpLAotCUtR VSgxMzc4NjQ2Nzg2MTgxMDk5NzgyMCksIEtRVSgxNDI2Nzg1MzAwMjk5NDAyMTU3MCksCi0JS1FV KDEzNzY3ODA3MzAyODQ3MjM3NDM5KSwgS1FVKDE2NDA3OTYzMjUzNzA3MjI0NjE3KSwKLQlLUVUo IDQ4MDI0OTgzNjM2OTg1ODM0OTcpLCBLUVUoIDI1MjM4MDI4MzkzMTcyMDk3NjQpLAotCUtRVSgg MzgyMjU3OTM5Nzc5NzQ3NTU4OSksIEtRVSggODk1MDMyMDU3MjIxMjEzMDYxMCksCi0JS1FVKCAz NzQ1NjIzNTA0OTc4MzQyNTM0KSwgS1FVKDE2MDkyNjA5MDY2MDY4NDgyODA2KSwKLQlLUVUoIDk4 MTcwMTY5NTAyNzQ2NDIzOTgpLCBLUVUoMTA1OTE2NjA2NjAzMjM4MjkwOTgpLAotCUtRVSgxMTc1 MTYwNjY1MDc5MjgxNTkyMCksIEtRVSggNTEyMjg3MzgxODU3NzEyMjIxMSksCi0JS1FVKDE3MjA5 NTUzNzY0OTEzOTM2NjI0KSwgS1FVKCA2MjQ5MDU3NzA5Mjg0MzgwMzQzKSwKLQlLUVUoMTUwODg3 OTEyNjQ2OTUwNzE4MzApLCBLUVUoMTUzNDQ2NzMwNzE3MDk4NTE5MzApLAotCUtRVSggNDM0NTc1 MTQxNTI5MzY0NjA4NCksIEtRVSggMjU0Mjg2NTc1MDcwMzA2NzkyOCksCi0JS1FVKDEzNTIwNTI1 MTI3ODUyMzY4Nzg0KSwgS1FVKDE4Mjk0MTg4NjYyODgwOTk3MjQxKSwKLQlLUVUoIDM4NzE3ODE5 MzgwNDQ4ODE1MjMpLCBLUVUoIDI4NzM0ODcyNjgxMjI4MTIxODQpLAotCUtRVSgxNTA5OTY3Njc1 OTQ4MjY3OTAwNSksIEtRVSgxNTQ0MjU5OTEyNzIzOTM1MDQ5MCksCi0JS1FVKCA2MzExODkzMjc0 MzY3NzEwODg4KSwgS1FVKCAzMjg2MTE4NzYwNDg0NjcyOTMzKSwKLQlLUVUoIDQxNDYwNjc5NjEz MzM1NDIxODkpLCBLUVUoMTMzMDM5NDI1Njc4OTcyMDg3NzApLAotCUtRVSggODE5NjAxMzcyMjI1 NTYzMDQxOCksIEtRVSggNDQzNzgxNTQzOTM0MDk3OTk4OSksCi0JS1FVKDE1NDMzNzkxNTMzNDUw NjA1MTM1KSwgS1FVKCA0MjU0ODI4OTU2ODE1Njg3MDQ5KSwKLQlLUVUoIDEzMTA5MDMyMDc3MDgy ODYwMTUpLCBLUVUoMTA1MjkxODI3NjQ0NjIzOTg1NDkpLAotCUtRVSgxNDkwMDIzMTMxMTY2MDYz ODgxMCksIEtRVSggOTcyNzAxNzI3NzEwNDYwOTc5MyksCi0JS1FVKCAxODIxMzA4MzEwOTQ4MTk5 MDMzKSwgS1FVKDExNjI4ODYxNDM1MDY2NzcyMDg0KSwKLQlLUVUoIDk0NjkwMTkxMzg0OTE1NDY5 MjQpLCBLUVUoIDMxNDU4MTI2NzA1MzI2MDQ5ODgpLAotCUtRVSggOTkzODQ2ODkxNTA0NTQ5MTkx OSksIEtRVSggMTU2MjQ0NzQzMDY3MjY2MjE0MiksCi0JS1FVKDEzOTYzOTk1MjY2Njk3OTg5MTM0 KSwgS1FVKCAzMzU2ODg0MzU3NjI1MDI4Njk1KSwKLQlLUVUoIDQ0OTk4NTAzMDQ1ODQzMDk3NDcp LCBLUVUoIDg0NTY4MjU4MTcwMjM2NTgxMjIpLAotCUtRVSgxMDg1OTAzOTkyMjgxNDI4NTI3OSks IEtRVSggODA5OTUxMjMzNzk3MjUyNjU1NSksCi0JS1FVKCAgMzQ4MDA2Mzc1MTA5NjcyMTQ5KSwg S1FVKDExOTE5ODkzOTk4MjQxNjg4NjAzKSwKLQlLUVUoIDExMDQxOTk1Nzc0MDI5NDg4MjYpLCBL UVUoMTY2ODkxOTE4NTQzNTYwNjAyODkpLAotCUtRVSgxMDk5MjU1MjA0MTczMDE2ODA3OCksIEtR VSggNzI0MzczMzE3MjcwNTQ2NTgzNiksCi0JS1FVKCA1NjY4MDc1NjA2MTgwMzE5NTYwKSwgS1FV KDE4MTgyODQ3MDM3MzMzMjg2OTcwKSwKLQlLUVUoIDQyOTAyMTUzNTc2NjQ2MzEzMjIpLCBLUVUo IDQwNjE0MTQyMjA3OTE4Mjg2MTMpLAotCUtRVSgxMzAwNjI5MTA2MTY1Mjk4OTYwNCksIEtRVSgg NzE0MDQ5MTE3ODkxNzEyODc5OCksCi0JS1FVKDEyNzAzNDQ2MjE3NjYzMjgzNDgxKSwgS1FVKCA1 NTAwMjIwNTk3NTY0NTU4MjY3KSwKLQlLUVUoMTAzMzA1NTE1MDk5NzEyOTYzNTgpLCBLUVUoMTU5 NTg1NTQ3Njg2NDg3MTQ0OTIpLAotCUtRVSggNTE3NDU1NTk1NDUxNTM2MDA0NSksIEtRVSggMTcz MTMxODgzNzY4NzU3NzczNSksCi0JS1FVKCAzNTU3NzAwODAxMDQ4MzU0ODU3KSwgS1FVKDEzNzY0 MDEyMzQxOTI4NjE2MTk4KSwKLQlLUVUoMTMxMTUxNjYxOTQzNzkxMTkwNDMpLCBLUVUoIDc5ODkz MjEwMjE1NjAyNTU1MTkpLAotCUtRVSggMjEwMzU4NDI4MDkwNTg3NzA0MCksIEtRVSggOTIzMDc4 ODY2MjE1NTIyODQ4OCksCi0JS1FVKDE2Mzk2NjI5MzIzMzI1NTQ3NjU0KSwgS1FVKCAgNjU3OTI2 NDA5ODExMzE4MDUxKSwKLQlLUVUoMTUwNDY3MDAyNjQzOTE0MDA3MjcpLCBLUVUoIDUxMjAxMzI4 NTg3NzE4ODA4MzApLAotCUtRVSggNzkzNDE2MDA5Nzk4OTAyODU2MSksIEtRVSggNjk2MzEyMTQ4 ODUzMTk3NjI0NSksCi0JS1FVKDE3NDEyMzI5NjAyNjIxNzQyMDg5KSwgS1FVKDE1MTQ0ODQzMDUz OTMxNzc0MDkyKSwKLQlLUVUoMTcyMDQxNzY2NTE3NjMwNTQ1MzIpLCBLUVUoMTMxNjY1OTUzODc1 NTQwNjU4NzApLAotCUtRVSggODU5MDM3NzgxMDUxMzk2MDIxMyksIEtRVSggNTgzNDM2NTEzNTM3 Mzk5MTkzOCksCi0JS1FVKCA3NjQwOTEzMDA3MTgyMjI2MjQzKSwgS1FVKCAzNDc5Mzk0NzAzODU5 NDE4NDI1KSwKLQlLUVUoMTY0MDI3ODQ0NTI2NDQ1MjEwNDApLCBLUVUoIDQ5OTM5Nzk4MDk2ODcw ODM5ODApLAotCUtRVSgxMzI1NDUyMjE2ODA5NzY4ODg2NSksIEtRVSgxNTY0MzY1OTA5NTI0NDM2 NTIxOSksCi0JS1FVKCA1ODgxNDM3NjYwNTM4NDI0OTgyKSwgS1FVKDExMTc0ODkyMjAwNjE4OTg3 Mzc5KSwKLQlLUVUoICAyNTQ0MDk5NjYxNTk3MTEwNzcpLCBLUVUoMTcxNTg0MTMwNDMxNDA1NDk5 MDkpLAotCUtRVSggMzYzODA0ODc4OTI5MDM3NjI3MiksIEtRVSggMTM3NjgxNjkzMDI5OTQ4OTE5 MCksCi0JS1FVKCA0NjIyNDYyMDk1MjE3NzYxOTIzKSwgS1FVKDE1MDg2NDA3OTczMDEwMjYzNTE1 KSwKLQlLUVUoMTMyNTM5NzE3NzI3ODQ2OTIyMzgpLCBLUVUoIDUyNzA1NDkwNDM1NDE2NDkyMzYp LAotCUtRVSgxMTE4MjcxNDE4NjgwNTQxMTYwNCksIEtRVSgxMjI4Mzg0NjQzNzQ5NTU3NzE0MCks Ci0JS1FVKCA1Mjk3NjQ3MTQ5OTA4OTUzMjE5KSwgS1FVKDEwMDQ3NDUxNzM4MzE2ODM2NjU0KSwK LQlLUVUoIDQ5MzgyMjgxMDAzNjc4NzQ3NDYpLCBLUVUoMTIzMjg1MjMwMjUzMDQwNzc5MjMpLAot CUtRVSggMzYwMTA0OTQzODU5NTMxMjM2MSksIEtRVSggOTMxMzYyNDExODM1MjczMzc3MCksCi0J S1FVKDEzMzIyOTY2MDg2MTE3NjYxNzk4KSwgS1FVKDE2NjYwMDA1NzA1NjQ0MDI5Mzk0KSwKLQlL UVUoMTEzMzc2Nzc1MjY5ODg4NzIzNzMpLCBLUVUoMTM4NjkyOTkxMDI1NzQ0MTc3OTUpLAotCUtR VSgxNTY0MjA0MzE4MzA0NTY0NTQzNyksIEtRVSggMzAyMTc1NTU2OTA4NTg4MDAxOSksCi0JS1FV KCA0OTc5NzQxNzY3NzYxMTg4MTYxKSwgS1FVKDEzNjc5OTc5MDkyMDc5Mjc5NTg3KSwKLQlLUVUo IDMzNDQ2ODU4NDI4NjEwNzE3NDMpLCBLUVUoMTM5NDc5NjAwNTk4OTk1ODgxMDQpLAotCUtRVSgg IDMwNTgwNjkzNDI5MzM2ODAwNyksIEtRVSggNTc0OTE3MzkyOTIwMTY1MDAyOSksCi0JS1FVKDEx MTIzNzI0ODUyMTE4ODQ0MDk4KSwgS1FVKDE1MTI4OTg3Njg4Nzg4ODc5ODAyKSwKLQlLUVUoMTUy NTE2NTEyMTEwMjQ2NjUwMDkpLCBLUVUoIDc2ODk5MjU5MzM4MTY1Nzc3NzYpLAotCUtRVSgxNjcz MjgwNDM5MjY5NTg1OTQ0OSksIEtRVSgxNzA4NzM0NTQwMTAxNDA3ODQ2OCksCi0JS1FVKDE0MzE1 MTA4NTg5MTU5MDQ4ODcxKSwgS1FVKCA0ODIwNzAwMjY2NjE5Nzc4OTE3KSwKLQlLUVUoMTY3MDk2 Mzc1MzkzNTc5NTg0NDEpLCBLUVUoIDQ5MzYyMjc4NzUxNzczNTEzNzQpLAotCUtRVSggMjEzNzkw NzY5NzkxMjk4NzI0NyksIEtRVSgxMTYyODU2NTYwMTQwODM5NTQyMCksCi0JS1FVKCAyMzMzMjUw NTQ5MjQxNTU2Nzg2KSwgS1FVKCA1NzExMjAwMzc5NTc3Nzc4NjM3KSwKLQlLUVUoIDUxNzA2ODAx MzE1MjkwMzE3MjkpLCBLUVUoMTI2MjAzOTIwNDMwNjEzMzUxNjQpLAotCUtRVSggICA5NTM2MzM5 MDEwMTA5NjA3OCksIEtRVSggNTQ4Nzk4MTkxNDA4MTcwOTQ2MiksCi0JS1FVKCAxNzYzMTA5ODIz OTgxODM4NjIwKSwgS1FVKCAzMzk1ODYxMjcxNDczMjI0Mzk2KSwKLQlLUVUoIDEzMDA0OTY4NDQy ODIyMTM1OTUpLCBLUVUoIDY4OTQzMTYyMTI4MjAyMzI5MDIpLAotCUtRVSgxMDY3Mzg1OTY1MTEz NTU3NjY3NCksIEtRVSggNTkxMTgzOTY1ODg1NzkwMzI1MiksCi0JS1FVKDE3NDA3MTEwNzQzMzg3 Mjk5MTAyKSwgS1FVKCA4MjU3NDI3MTU0NjIzMTQwMzg1KSwKLQlLUVUoMTEzODkwMDMwMjY3NDE4 MDAyNjcpLCBLUVUoIDQwNzAwNDMyMTEwOTUwMTM3MTcpLAotCUtRVSgxMTY2MzgwNjk5NzE0NTI1 OTAyNSksIEtRVSgxNTI2NTU5ODk1MDY0ODc5ODIxMCksCi0JS1FVKCAgNjMwNTg1Nzg5NDM0MDMw OTM0KSwgS1FVKCAzNTI0NDQ2NTI5MjEzNTg3MzM0KSwKLQlLUVUoIDcxODY0MjQxNjg0OTUxODQy MTEpLCBLUVUoMTA4MDY1ODU0NTEzODYzNzkwMjEpLAotCUtRVSgxMTEyMDAxNzc1MzUwMDQ5OTI3 MyksIEtRVSggMTU4NjgzNzY1MTM4NzcwMTMwMSksCi0JS1FVKDE3NTMwNDU0NDAwOTU0NDE1NTQ0 KSwgS1FVKCA5OTkxNjcwMDQ1MDc3ODgwNDMwKSwKLQlLUVUoIDc1NTA5OTcyNjg5OTA3MzAxODAp LCBLUVUoIDg2NDAyNDkxOTY1OTczNzkzMDQpLAotCUtRVSggMzUyMjIwMzg5Mjc4Njg5MzgyMyks IEtRVSgxMDQwMTExNjU0OTg3ODg1NDc4OCksCi0JS1FVKDEzNjkwMjg1NTQ0NzMzMTI0ODUyKSwg S1FVKCA4Mjk1Nzg1Njc1NDU1Nzc0NTg2KSwKLQlLUVUoMTU1MzU3MTYxNzIxNTUxMTc2MDMpLCBL UVUoIDMxMTIxMDg1ODM3MjM3MjI1MTEpLAotCUtRVSgxNzYzMzE3OTk1NTMzOTI3MTExMyksIEtR VSgxODE1NDIwODA1NjA2Mzc1OTM3NSksCi0JS1FVKCAxODY2NDA5MjM2Mjg1ODE1NjY2KSwgS1FV KDEzMzI2MDc1ODk1Mzk2NDEyODgyKSwKLQlLUVUoIDg3NTYyNjE4NDI5NDgwMjAwMjUpLCBLUVUo IDYyODE4NTI5OTk4Njg0MzkxMzEpLAotCUtRVSgxNTA4NzY1MzM2MTI3NTI5Mjg1OCksIEtRVSgx MDMzMzkyMzkxMTE1Mjk0OTM5NyksCi0JS1FVKCA1MjY1NTY3NjQ1NzU3NDA4NTAwKSwgS1FVKDEy NzI4MDQxODQzMjEwMzUyMTg0KSwKLQlLUVUoIDYzNDc5NTkzMjc1MDc4Mjg3NTkpLCBLUVUoICAx NTQxMTI4MDI2MjU1NjQ3NTgpLAotCUtRVSgxODIzNTIyODMwODY3OTc4MDIxOCksIEtRVSggMzI1 MzgwNTI3NDY3MzM1MjQxOCksCi0JS1FVKCA0ODQ5MTcxNjEwNjg5MDMxMTk3KSwgS1FVKDE3OTQ4 NTI5Mzk4MzQwNDMyNTE4KSwKLQlLUVUoMTM4MDM1MTA0NzU2Mzc0MDkxNjcpLCBLUVUoMTM1MDY1 NzAxOTA0MDk4ODMwOTUpLAotCUtRVSgxNTg3MDgwMTI3MzI4Mjk2MDgwNSksIEtRVSggODQ1MTI4 NjQ4MTI5OTE3MDc3MyksCi0JS1FVKCA5NTYyMTkwNjIwMDM0NDU3NTQxKSwgS1FVKCA4NTE4OTA1 Mzg3NDQ5MTM4MzY0KSwKLQlLUVUoMTI2ODEzMDY0MDEzNjMzODU2NTUpLCBLUVUoIDM3ODgwNzM2 OTA1NTk3NjI1NTgpLAotCUtRVSggNTI1NjgyMDI4OTU3MzQ4Nzc2OSksIEtRVSggMjc1MjAyMTM3 MjMxNDg3NTQ2NyksCi0JS1FVKCA2MzU0MDM1MTY2ODYyNTIwNzE2KSwgS1FVKCA0MzI4OTU2Mzc4 MzA5NzM5MDY5KSwKLQlLUVUoICA0NDkwODc0NDEyMjgyNjk2MDApLCBLUVUoIDU1MzM1MDg3NDI2 NTMwOTA4NjgpLAotCUtRVSggMTI2MDM4OTQyMDQwNDc0Njk4OCksIEtRVSgxODE3NTM5NDQ3MzI4 OTA1NTA5NyksCi0JS1FVKCAxNTM1NDY3MTA5NjYwMzk5NDIwKSwgS1FVKCA4ODE4ODk0MjgyODc0 MDYxNDQyKSwKLQlLUVUoMTIxNDA4NzMyNDM4MjQ4MTEyMTMpLCBLUVUoMTUwMzEzODY2NTM4MjMw MTQ5NDYpLAotCUtRVSggMTI4NjAyODIyMTQ1NjE0OTIzMiksIEtRVSggNjMyOTYwODg4OTM2Nzg1 ODc4NCksCi0JS1FVKCA5NDE5NjU0MzU0OTQ1MTMyNzI1KSwgS1FVKCA2MDk0NTc2NTQ3MDYxNjcy Mzc5KSwKLQlLUVUoMTc3MDYyMTcyNTE4NDc0NTAyNTUpLCBLUVUoIDE3MzM0OTUwNzMwNjU4Nzgx MjYpLAotCUtRVSgxNjkxODkyMzc1NDYwNzU1MjY2MyksIEtRVSggODg4MTk0OTg0OTk1NDk0NTA0 NCksCi0JS1FVKDEyOTM4OTc3NzA2ODk2MzEzODkxKSwgS1FVKDE0MDQzNjI4NjM4Mjk5NzkzNDA3 KSwKLQlLUVUoMTgzOTM4NzQ1ODE3MjM3MTgyMzMpLCBLUVUoIDY4ODYzMTg1MzQ4NDY4OTIwNDQp LAotCUtRVSgxNDU3Nzg3MDg3ODAzODMzNDA4MSksIEtRVSgxMzU0MTU1ODM4MzQzOTQxNDExOSks Ci0JS1FVKDEzNTcwNDcyMTU4ODA3NTg4MjczKSwgS1FVKDE4MzAwNzYwNTM3OTEwMjgzMzYxKSwK LQlLUVUoICA4MTgzNjg1NzI4MDA2MDkyMDUpLCBLUVUoIDE0MTcwMDA1ODUxMTI1NzMyMTkpLAot CUtRVSgxMjMzNzUzMzE0Mzg2NzY4MzY1NSksIEtRVSgxMjQzMzE4MDk5NDcwMjMxNDQ4MCksCi0J S1FVKCAgNzc4MTkwMDA1ODI5MTg5MDgzKSwgS1FVKDEzNjY3MzU2MjE2MjA2NTI0NzExKSwKLQlL UVUoIDk4NjYxNDk4OTUyOTUyMjUyMzApLCBLUVUoMTEwNDMyNDA0OTA0MTcxMTE5OTkpLAotCUtR VSggMTEyMzkzMzgyNjU0MTM3ODU5OCksIEtRVSggNjQ2OTYzMTkzMzYwNTEyMzYxMCksCi0JS1FV KDE0NTA4NTU0MDc0NDMxOTgwMDQwKSwgS1FVKDEzOTE4OTMxMjQyOTYyMDI2NzE0KSwKLQlLUVUo IDI4NzA3ODU5MjkzNDIzNDgyODUpLCBLUVUoMTQ3ODYzNjI2MjY3NDA3MzY5NzQpLAotCUtRVSgx MzE3NjY4MDA2MDkwMjY5NTc4NiksIEtRVSggOTU5MTc3ODYxMzU0MTY3OTQ1NiksCi0JS1FVKCA5 MDk3NjYyODg1MTE3NDM2NzA2KSwgS1FVKCAgNzQ5MjYyMjM0MjQwOTI0OTQ3KSwKLQlLUVUoIDE5 NDQ4NDQwNjc3OTMzMDcwOTMpLCBLUVUoIDQzMzkyMTQ5MDQ1Nzc0ODc3NDIpLAotCUtRVSggODAw OTU4NDE1Mjk2MTk0NjU1MSksIEtRVSgxNjA3MzE1OTUwMTIyNTUwMTc3NyksCi0JS1FVKCAzMzM1 ODcwNTkwNDk5MzA2MjE3KSwgS1FVKDE3MDg4MzEyNjUzMTUxMjAyODQ3KSwKLQlLUVUoIDMxMDg4 OTMxNDI2ODE5MzE4NDgpLCBLUVUoMTY2MzY4NDE3NjcyMDI3OTIwMjEpLAotCUtRVSgxMDQyMzMx NjQzMTExODQwMDYzNyksIEtRVSggODAwODM1NzM2ODY3NDQ0MzUwNiksCi0JS1FVKDExMzQwMDE1 MjMxOTE0Njc3ODc1KSwgS1FVKDE3Njg3ODk2NTAxNTk0OTM2MDkwKSwKLQlLUVUoMTUxNzM2Mjc5 MjE3NjMxOTk5NTgpLCBLUVUoICA1NDI1Njk0ODIyNDM3MjE5NTkpLAotCUtRVSgxNTA3MTcxNDk4 Mjc2OTgxMjk3NSksIEtRVSggNDQ2NjYyNDg3MjE1MTM4Njk1NiksCi0JS1FVKCAxOTAxNzgwNzE1 NjAyMzMyNDYxKSwgS1FVKCA5ODIyMjI3NzQyMTU0MzUxMDk4KSwKLQlLUVUoIDE0NzkzMzI4OTI5 Mjg2NDg3ODApLCBLUVUoIDY5ODE2MTE5NDgzODI0NzQ0MDApLAotCUtRVSggNzYyMDgyNDkyNDQ1 NjA3NzM3NiksIEtRVSgxNDA5NTk3MzMyOTQyOTQwNjc4MiksCi0JS1FVKCA3OTAyNzQ0MDA1Njk2 MTg1NDA0KSwgS1FVKDE1ODMwNTc3MjE5Mzc1MDM2OTIwKSwKLQlLUVUoMTAyODcwNzY2NjczMTc3 NjQ0MTYpLCBLUVUoMTIzMzQ4NzI3NjQwNzE3MjQwMjUpLAotCUtRVSggNDQxOTMwMjA4ODEzMzU0 NDMzMSksIEtRVSgxNDQ1NTg0Mjg1MTI2NjA5MDUyMCksCi0JS1FVKDEyNDg4MDc3NDE2NTA0NjU0 MjIyKSwgS1FVKCA3OTUzODkyMDE3NzAxODg2NzY2KSwKLQlLUVUoIDYzMzE0ODQ5MjU1Mjk1MTkw MDcpLCBLUVUoIDQ5MDIxNDU4NTM3ODUwMzAwMjIpLAotCUtRVSgxNzAxMDE1OTIxNjA5NjQ0MzA3 MyksIEtRVSgxMTk0NTM1NDY2ODY1Mzg4NjA4NyksCi0JS1FVKDE1MTEyMDIyNzI4NjQ1MjMwODI5 KSwgS1FVKDE3MzYzNDg0NDg0NTIyOTg2NzQyKSwKLQlLUVUoIDQ0MjM0OTc4MjU4OTY2OTI4ODcp LCBLUVUoIDgxNTU0ODk1MTA4MDkwNjc0NzEpLAotCUtRVSggIDI1ODk2NjYwNTYyMjU3NjI4NSks IEtRVSggNTQ2Mjk1ODA3NTc0MjAyMDUzNCksCi0JS1FVKCA2NzYzNzEwMjE0OTEzMjc2MjI4KSwg S1FVKCAyMzY4OTM1MTgzNDUxMTA5MDU0KSwKLQlLUVUoMTQyMDk1MDYxNjUyNDY0NTM4MTEpLCBL UVUoIDI2NDYyNTcwNDA5Nzg1MTQ4ODEpLAotCUtRVSggMzc3NjAwMTkxMTkyMjIwNzY3MiksIEtR VSggMTQxOTMwNDYwMTM5MDE0NzYzMSksCi0JS1FVKDE0OTg3MzY2NTk4MDIyNDU4Mjg0KSwgS1FV KCAzOTc3NzcwNzAxMDY1ODE1NzIxKSwKLQlLUVUoICA3MzA4MjA0MTc0NTE4Mzg4OTgpLCBLUVUo IDM5ODI5OTE3MDM2MTI4ODUzMjcpLAotCUtRVSggMjgwMzU0NDUxOTY3MTM4ODQ3NyksIEtRVSgx NzA2NzY2NzIyMTExNDQyNDY0OSksCi0JS1FVKCAyOTIyNTU1MTE5NzM3ODY3MTY2KSwgS1FVKCAx OTg5NDc3NTg0MTIxNDYwOTMyKSwKLQlLUVUoMTUwMjAzODc2MDU4OTIzMzczNTQpLCBLUVUoIDky OTMyNzc3OTY0Mjc1MzM1NDcpLAotCUtRVSgxMDcyMjE4MTQyNDA2MzU1NzI0NyksIEtRVSgxNjcw NDU0MjMzMjA0NzUxMTY1MSksCi0JS1FVKCA1MDA4Mjg2MjM2MTQyMDg5NTE0KSwgS1FVKDE2MTc0 NzMyMzA4NzQ3MzgyNTQwKSwKLQlLUVUoMTc1OTcwMTk0ODU3OTgzMzg0MDIpLCBLUVUoMTMwODE3 NDUxOTkxMTA2MjIwOTMpLAotCUtRVSggODg1MDMwNTg4Mzg0MjI1ODExNSksIEtRVSgxMjcyMzYy OTEyNTYyNDU4OTAwNSksCi0JS1FVKCA4MTQwNTY2NDUzNDAyODA1OTc4KSwgS1FVKDE1MzU2Njg0 NjA3NjgwOTM1MDYxKSwKLQlLUVUoMTQyMjIxOTAzODczNDI2NDg2NTApLCBLUVUoMTExMzQ2MTA0 NjA2NjU5NzUxNzgpLAotCUtRVSggMTI1OTc5OTA1ODYyMDk4NDI2NiksIEtRVSgxMzI4MTY1NjI2 ODAyNTYxMDA0MSksCi0JS1FVKCAgMjk4MjYyNTYxMDY4MTUzOTkyKSwgS1FVKDEyMjc3ODcxNzAw MjM5MjEyOTIyKSwKLQlLUVUoMTM5MTEyOTc3NzQ3MTk3Nzk0MzgpLCBLUVUoMTY1NTY3Mjc5NjI3 NjE0NzQ5MzQpLAotCUtRVSgxNzkwMzAxMDMxNjY1NDcyODAxMCksIEtRVSggOTY4MjYxNzY5OTY0 ODQzNDc0NCksCi0JS1FVKDE0NzU3NjgxODM2ODM4NTkyODUwKSwgS1FVKCAxMzI3MjQyNDQ2NTU4 NTI0NDczKSwKLQlLUVUoMTExMjY2NDUwOTg3ODA1NzI3OTIpLCBLUVUoIDE4ODM2MDIzMjkzMTMy MjE3NzQpLAotCUtRVSggMjU0Mzg5Nzc4MzkyMjc3Njg3MyksIEtRVSgxNTAyOTE2ODUxMzc2Nzc3 Mjg0MiksCi0JS1FVKDEyNzEwMjcwNjUxMDM5MTI5ODc4KSwgS1FVKDE2MTE4MjAyOTU2MDY5NjA0 NTA0KSwKLQlLUVUoMTUwMTA3NTkzNzIxNjg2ODA1MjQpLCBLUVUoIDIyOTY4MjcwODIyNTE5MjM5 NDgpLAotCUtRVSgxMDc5MzcyOTc0MjYyMzUxODEwMSksIEtRVSgxMzgyOTc2NDE1MTg0NTQxMzA0 NiksCi0JS1FVKDE3NzY5MzAxMjIzMTg0NDUxMjEzKSwgS1FVKCAzMTE4MjY4MTY5MjEwNzgzMzcy KSwKLQlLUVUoMTc2MjYyMDQ1NDQxMDUxMjMxMjcpLCBLUVUoIDc0MTY3MTg0ODg5NzQzNTI2NDQp LAotCUtRVSgxMDQ1MDc1MTk5NjIxMjkyNTk5NCksIEtRVSggOTM1MjUyOTUxOTEyODc3MDU4Niks Ci0JS1FVKCAgMjU5MzQ3NTY5NjQxMTEwMTQwKSwgS1FVKCA4MDQ4NTg4ODkyMjY5NjkyNjk3KSwK LQlLUVUoIDE3NzQ0MTQxNTIzMDY0OTQwNTgpLCBLUVUoMTA2Njk1NDgzNDcyMTQzNTU2MjIpLAot CUtRVSgxMzA2MTk5MjI1MzgxNjc5NTA4MSksIEtRVSgxODQzMjY3NzgwMzA2Mzg2MTY1OSksCi0J S1FVKCA4ODc5MTkxMDU1NTkzOTg0MzMzKSwgS1FVKDEyNDMzNzUzMTk1MTk5MjY4MDQxKSwKLQlL UVUoMTQ5MTkzOTI0MTU0Mzk3MzA2MDIpLCBLUVUoIDY2MTI4NDgzNzg1OTUzMzI5NjMpLAotCUtR VSggNjMyMDk4NjgxMjAzNjE0MzYyOCksIEtRVSgxMDQ2NTU5MjQyMDIyNjA5Mjg1OSksCi0JS1FV KCA0MTk2MDA5Mjc4OTYyNTcwODA4KSwgS1FVKCAzNzQ3ODE2NTY0NDczNTcyMjI0KSwKLQlLUVUo MTc5NDEyMDM0ODYxMzM3MzI4OTgpLCBLUVUoIDIzNTAzMTAwMzcwNDA1MDUxOTgpLAotCUtRVSgg NTgxMTc3OTg1OTEzNDM3MDExMyksIEtRVSgxMDQ5MjEwOTU5OTUwNjE5NTEyNiksCi0JS1FVKCA3 Njk5NjUwNjkwMTc5NTQxMjc0KSwgS1FVKCAxOTU0MzM4NDk0MzA2MDIyOTYxKSwKLQlLUVUoMTQw OTU4MTY5NjkwMjcyMzExNTIpLCBLUVUoIDU4NDEzNDY5MTk5NjQ4NTIwNjEpLAotCUtRVSgxNDk0 NTk2OTUxMDE0ODIxNDczNSksIEtRVSggMzY4MDIwMDMwNTg4NzU1MDk5MiksCi0JS1FVKCA2MjE4 MDQ3NDY2MTMxNjk1NzkyKSwgS1FVKCA4MjQyMTY1NzQ1MTc1Nzc1MDk2KSwKLQlLUVUoMTEwMjEz NzE5MzQwNTMzMDczNTcpLCBLUVUoIDEyNjUwOTk1MDI3NTMxNjk3OTcpLAotCUtRVSggNDY0NDM0 NzQzNjExMTMyMTcxOCksIEtRVSggMzYwOTI5NjkxNjc4MjgzMjg1OSksCi0JS1FVKCA4MTA5ODA3 OTkyMjE4NTIxNTcxKSwgS1FVKDE4Mzg3ODg0MjE1NjQ4NjYyMDIwKSwKLQlLUVUoMTQ2NTYzMjQ4 OTYyOTYzOTI5MDIpLCBLUVUoMTczODY4MTkwOTEyMzgyMTY3NTEpLAotCUtRVSgxNzc4ODMwMDg3 ODU4MjMxNzE1MiksIEtRVSggNzkxOTQ0NjI1OTc0MjM5OTU5MSksCi0JS1FVKCA0NDY2NjEzMTM0 NTc2MzU4MDA0KSwgS1FVKDEyOTI4MTgxMDIzNjY3OTM4NTA5KSwKLQlLUVUoMTMxNDc0NDYxNTQ0 NTQ5MzIwMzApLCBLUVUoMTY1NTIxMjkwMzgyNTI3MzQ2MjApLAotCUtRVSggODM5NTI5OTQwMzcz ODgyMjQ1MCksIEtRVSgxMTMxMzgxNzY1NTI3NTM2MTE2NCksCi0JS1FVKCAgNDM0MjU4ODA5NDk5 NTExNzE4KSwgS1FVKCAyMDc0ODgyMTA0OTU0Nzg4Njc2KSwKLQlLUVUoIDc5Mjk4OTIxNzg3NTkz OTU1MTgpLCBLUVUoIDkwMDY0NjE2MjkxMDU3NDUzODgpLAotCUtRVSggNTE3NjQ3NTY1MDAwMDMy MzA4NiksIEtRVSgxMTEyODM1NzAzMzQ2ODM0MTA2OSksCi0JS1FVKDEyMDI2MTU4ODUxNTU5MTE4 OTU1KSwgS1FVKDE0Njk5NzE2MjQ5NDcxMTU2NTAwKSwKLQlLUVUoICA0NDg5ODI0OTcxMjAyMDY3 NTcpLCBLUVUoIDQxNTY0NzUzNTY2ODU1MTk5MDApLAotCUtRVSggNjA2MzgxNjEwMzQxNzIxNTcy NyksIEtRVSgxMDA3MzI4OTM4Nzk1NDk3MTQ3OSksCi0JS1FVKCA4MTc0NDY2ODQ2MTM4NTkwOTYy KSwgS1FVKCAyNjc1Nzc3NDUyMzYzNDQ5MDA2KSwKLQlLUVUoIDkwOTA2ODU0MjA1NzI0NzQyODEp LCBLUVUoIDY2NTk2NTI2NTI3NjU1NjIwNjApLAotCUtRVSgxMjkyMzEyMDMwNDAxODEwNjYyMSks IEtRVSgxMTExNzQ4MDU2MDMzNDUyNjc3NSksCi0JS1FVKCAgOTM3OTEwNDczNDI0NTg3NTExKSwg S1FVKCAxODM4NjkyMTEzNTAyMzQ2NjQ1KSwKLQlLUVUoMTExMzM5MTQwNzQ2NDg3MjYxODApLCBL UVUoIDc5MjI2MDA5NDUxNDM4ODQwNTMpLAotCUtRVSgxMzQzNTI4NzcwMjcwMDk1OTU1MCksIEtR VSggNTI4Nzk2NDkyMTI1MTEyMzMzMiksCi0JS1FVKDExMzU0ODc1Mzc0NTc1MzE4OTQ3KSwgS1FV KDE3OTU1NzI0NzYwNzQ4MjM4MTMzKSwKLQlLUVUoMTM3Mjg2MTczOTYyOTcxMDY1MTIpLCBLUVUo IDQxMDc0NDk2NjAxMTgxMDEyNTUpLAotCUtRVSggMTIxMDI2OTc5NDg4NjU4OTYyMyksIEtRVSgx MTQwODY4NzIwNTczMzQ1NjI4MiksCi0JS1FVKCA0NTM4MzU0NzEwMzkyNjc3ODg3KSwgS1FVKDEz NTY2ODAzMzE5MzQxMzE5MjY3KSwKLQlLUVUoMTc4NzA3OTgxMDc3MzQwNTA3NzEpLCBLUVUoIDMz NTQzMTg5ODI1NjgwODkxMzUpLAotCUtRVSggOTAzNDQ1MDgzOTQwNTEzMzY1MSksIEtRVSgxMzA4 NzQzMTc5NTc1MzQyNDMxNCksCi0JS1FVKCAgOTUwMzMzMTAyODIwNjg4MjM5KSwgS1FVKCAxOTY4 MzYwNjU0NTM1NjA0MTE2KSwKLQlLUVUoMTY4NDA1NTE2NDU1NjMzMTQ5OTUpLCBLUVUoIDg4Njc1 MDE4MDM4OTI5MjQ5OTUpLAotCUtRVSgxMTM5NTM4ODY0NDQ5MDYyNjg0NSksIEtRVSggMTUyOTgx NTgzNjMwMDczMjIwNCksCi0JS1FVKDEzMzMwODQ4NTIyOTk2NjA4ODQyKSwgS1FVKCAxODEzNDMy ODc4ODE3NTA0MjY1KSwKLQlLUVUoIDIzMzY4Njc0MzI2OTM0Mjk1NjApLCBLUVUoMTUxOTI4MDU0 NDU5NzMzODU5MDIpLAotCUtRVSggMjUyODU5MzA3MTA3NjQwNzg3NyksIEtRVSggIDEyODQ1OTc3 NzkzNjY4OTI0OCksCi0JS1FVKCA5OTc2MzQ1MzgyODY3MjE0ODY2KSwgS1FVKCA2MjA4ODg1NzY2 NzY3OTk2MDQzKSwKLQlLUVUoMTQ5ODIzNDk1MjIyNzMxNDE3MDYpLCBLUVUoIDMwOTk2NTQzNjI0 MTA3Mzc4MjIpLAotCUtRVSgxMzc3NjcwMDc2MTk0NzI5NzY2MSksIEtRVSggODgwNjE4NTQ3MDY4 NDkyNTU1MCksCi0JS1FVKCA4MTUxNzE3ODkwNDEwNTg1MzIxKSwgS1FVKCAgNjQwODYwNTkxNTg4 MDcyOTI1KSwKLQlLUVUoMTQ1OTIwOTYzMDM5MzczMDc0NjUpLCBLUVUoIDkwNTY0NzI0MTk2MTM1 NjQ4NDYpLAotCUtRVSgxNDg2MTU0NDY0Nzc0MjI2NjM1MiksIEtRVSgxMjcwMzc3MTUwMDM5ODQ3 MDIxNiksCi0JS1FVKCAzMTQyMzcyODAwMzg0MTM4NDY1KSwgS1FVKCA2MjAxMTA1NjA2OTE3MjQ4 MTk2KSwKLQlLUVUoMTgzMzc1MTY0MDkzNTkyNzAxODQpLCBLUVUoMTUwNDIyNjg2OTU2NjUxMTUz MzkpLAotCUtRVSgxNTE4ODI0NjU0MTM4MzI4Mzg0NiksIEtRVSgxMjgwMDAyODY5MzA5MDExNDUx OSksCi0JS1FVKCA1OTkyODU5NjIxMTAxNDkzNDcyKSwgS1FVKDE4Mjc4MDQzOTcxODE2ODAzNTIx KSwKLQlLUVUoIDkwMDI3NzMwNzUyMTk0MjQ1NjApLCBLUVUoIDczMjU3MDcxMTY5NDM1OTgzNTMp LAotCUtRVSggNzkzMDU3MTkzMTI0ODA0MDgyMiksIEtRVSggNTY0NTI3NTg2OTYxNzAyMzQ0OCks Ci0JS1FVKCA3MjY2MTA3NDU1Mjk1OTU4NDg3KSwgS1FVKCA0MzYzNjY0NTI4MjczNTI0NDExKSwK LQlLUVUoMTQzMTM4NzU3NjM3ODc0Nzk4MDkpLCBLUVUoMTcwNTk2OTU2MTM1NTM0ODY4MDIpLAot CUtRVSggOTI0Nzc2MTQyNTg4OTk0MDkzMiksIEtRVSgxMzcwNDcyNjQ1OTIzNzU5MzEyOCksCi0J S1FVKCAyNzAxMzEyNDI3MzI4OTA5ODMyKSwgS1FVKDE3MjM1NTMyMDA4Mjg3MjQzMTE1KSwKLQlL UVUoMTQwOTMxNDc3NjE0OTE3Mjk1MzgpLCBLUVUoIDYyNDczNTIyNzM3NjgzODY1MTYpLAotCUtR VSggODI2ODcxMDA0ODE1MzI2ODQxNSksIEtRVSggNzk4NTI5NTIxNDQ3NzE4MjA4MyksCi0JS1FV KDE1NjI0NDk1MTkwODg4ODk2ODA3KSwgS1FVKCAzNzcyNzUzNDMwMDQ1MjYyNzg4KSwKLQlLUVUo IDkxMzM5OTE2MjA0NzQ5OTE2OTgpLCBLUVUoIDU2NjU3OTE5NDMzMTYyNTYwMjgpLAotCUtRVSgg NzU1MTk5NjgzMjQ2MjE5MzQ3MyksIEtRVSgxMzE2MzcyOTIwNjc5ODk1Mzg3NyksCi0JS1FVKCA5 MjYzNTMyMDc0MTUzODQ2Mzc0KSwgS1FVKCAxMDE1NDYwNzAzNjk4NjE4MzUzKSwKLQlLUVUoMTc5 Mjk4NzQ2OTY5ODk1MTkzOTApLCBLUVUoMTgyNTc4ODQ3MjE0NjYxNTM4NDcpLAotCUtRVSgxNjI3 MTg2NzU0MzAxMTIyMjk5MSksIEtRVSggMzkwNTk3MTUxOTAyMTc5MTk0MSksCi0JS1FVKDE2ODE0 NDg4Mzk3MTM3MDUyMDg1KSwgS1FVKCAxMzIxMTk3Njg1NTA0NjIxNjEzKSwKLQlLUVUoIDI4NzAz NTkxOTE4OTQwMDIxODEpLCBLUVUoMTQzMTcyODI5NzAzMjMzOTU0NTApLAotCUtRVSgxMzY2Mzky MDg0NTUxMTA3NDM2NiksIEtRVSggMjA1MjQ2Mzk5NTc5NjUzOTU5NCksCi0JS1FVKDE0MTI2MzQ1 Njg2NDMxNDQ0MzM3KSwgS1FVKCAxNzI3NTcyMTIxOTQ3MDIyNTM0KSwKLQlLUVUoMTc3OTM1NTIy NTQ0ODU1OTQyNDEpLCBLUVUoIDY3Mzg4NTc0MTg4NDkyMDU3NTApLAotCUtRVSggMTI4Mjk4NzEy MzE1NzQ0Mjk1MiksIEtRVSgxNjY1NTQ4MDAyMTU4MTE1OTI1MSksCi0JS1FVKCA2Nzg0NTg3MDMy MDgwMTgzODY2KSwgS1FVKDE0NzI2NzU4ODA1MzU5OTY1MTYyKSwKLQlLUVUoIDc1Nzc5OTU5MzM5 NjE5ODczNDkpLCBLUVUoMTI1Mzk2MDkzMjAzMTExMTQwMzYpLAotCUtRVSgxMDc4OTc3MzAzMzM4 NTQzOTQ5NCksIEtRVSggODUxNzAwMTQ5NzQxMTE1ODIyNyksCi0JS1FVKDEwMDc1NTQzOTMyMTM2 MzM5NzEwKSwgS1FVKDE0ODM4MTUyMzQwOTM4ODExMDgxKSwKLQlLUVUoIDk1NjA4NDA2MzE3OTQw NDQxOTQpLCBLUVUoMTc0NDU3MzY1NDE0NTQxMTc0NzUpLAotCUtRVSgxMDYzMzAyNjQ2NDMzNjM5 MzE4NiksIEtRVSgxNTcwNTcyOTcwODI0MjI0NjI5MyksCi0JS1FVKCAxMTE3NTE3NTk2ODkxNDEx MDk4KSwgS1FVKCA0MzA1NjU3OTQzNDE1ODg2OTQyKSwKLQlLUVUoIDQ5NDg4NTY4NDA1MzM5Nzky NjMpLCBLUVUoMTYwNzE2ODE5ODkwNDE3ODk1OTMpLAotCUtRVSgxMzcyMzAzMTQyOTI3MjQ4NjUy NyksIEtRVSggNzYzOTU2NzYyMjMwNjUwOTQ2MiksCi0JS1FVKDEyNjcwNDI0NTM3NDgzMDkwMzkw KSwgS1FVKCA5NzE1MjIzNDUzMDk3MTk3MTM0KSwKLQlLUVUoIDU0NTcxNzMzODk5OTI2ODYzOTQp LCBLUVUoICAyODk4NTcxMjkyNzYxMzUxNDUpLAotCUtRVSgxNzA0ODYxMDI3MDUyMTk3MjUxMiks IEtRVSggIDY5Mjc2ODAxMzMwOTgzNTQ4NSksCi0JS1FVKDE0ODIzMjMyMzYwNTQ2NjMyMDU3KSwg S1FVKDE4MjE4MDAyMzYxMzE3ODk1OTM2KSwKLQlLUVUoIDMyODE3MjQyNjAyMTI2NTAyMDQpLCBL UVUoMTY0NTM5NTcyNjY1NDk1MTM3OTUpLAotCUtRVSggODU5MjcxMTEwOTc3NDUxMTg4MSksIEtR VSggIDkyOTgyNTEyMzQ3MzM2OTU3OSksCi0JS1FVKDE1OTY2Nzg0NzY5NzY0MzY3NzkxKSwgS1FV KCA5NjI3MzQ0MjkxNDUwNjA3NTg4KSwKLQlLUVUoMTA4NDk1NTU1MDQ5Nzc4MTMyODcpLCBLUVUo IDkyMzQ1NjY5MTM5MzYzMzkyNzUpLAotCUtRVSggNjQxMzgwNzY5MDM2NjkxMTIxMCksIEtRVSgx MDg2MjM4OTAxNjE4NDIxOTI2NyksCi0JS1FVKDEzODQyNTA0Nzk5MzM1Mzc0MDQ4KSwgS1FVKCAx NTMxOTk0MTEzMzc2ODgxMTc0KSwKLQlLUVUoIDIwODEzMTQ4Njc1NDQzNjQ0NTkpLCBLUVUoMTY0 MzA2Mjg3OTE2MTY5NTk5MzIpLAotCUtRVSggODMxNDcxNDAzODY1NDM5NDM2OCksIEtRVSggOTE1 NTQ3Mzg5MjA5ODQzMTgxMyksCi0JS1FVKDEyNTc3ODQzNzg2NjcwNDc1NzA0KSwgS1FVKCA0Mzk5 MTYxMTA2NDUyNDAxMDE3KSwKLQlLUVUoIDE2NjgwODMwOTE2ODI2MjMxODYpLCBLUVUoIDE3NDEz ODM3NzcyMDM3MTQyMTYpLAotCUtRVSggMjE2MjU5NzI4NTQxNzc5NDM3NCksIEtRVSgxNTg0MTk4 MDE1OTE2NTIxODczNiksCi0JS1FVKCAxOTcxMzU0NjAzNTUxNDY3MDc5KSwgS1FVKCAxMjA2NzE0 NzY0OTEzMjA1OTY4KSwKLQlLUVUoIDQ3OTA4NjA0Mzk1OTEyNzIzMzApLCBLUVUoMTQ2OTkzNzU2 MTU1OTQwNTU3OTkpLAotCUtRVSggODM3NDQyMzg3MTY1NzQ0OTk4OCksIEtRVSgxMDk1MDY4NTcz NjQ3MjkzNzczOCksCi0JS1FVKCAgNjk3MzQ0MzMxMzQzMjY3MTc2KSwgS1FVKDEwMDg0OTk4NzYz MTE4MDU5ODEwKSwKLQlLUVUoMTI4OTczNjk1Mzk3OTU5ODMxMjQpLCBLUVUoMTIzNTEyNjAyOTIx NDQzODM2MDUpLAotCUtRVSggMTI2ODgxMDk3MDE3NjgxMTIzNCksIEtRVSggNzQwNjI4NzgwMDQx NDU4Mjc2OCksCi0JS1FVKCAgNTE2MTY5NTU3MDQzODA3ODMxKSwgS1FVKCA1MDc3NTY4Mjc4NzEw NTIwMzgwKSwKLQlLUVUoIDM4Mjg3OTE3MzgzMDkwMzkzMDQpLCBLUVUoIDc3MjE5NzQwNjk5NDY5 NDM2MTApLAotCUtRVSggMzUzNDY3MDI2MDk4MTA5NjQ2MCksIEtRVSggNDg2NTc5MjE4OTYwMDU4 NDg5MSksCi0JS1FVKDE2ODkyNTc4NDkzNzM0MzM3Mjk4KSwgS1FVKCA5MTYxNDk5NDY0Mjc4MDQy NTkwKSwKLQlLUVUoMTE5NzYxNDk2MjQwNjcwNTU5MzEpLCBLUVUoMTMyMTk0Nzk4ODcyNzczNDM5 OTApLAotCUtRVSgxNDE2MTU1NjczODExMTUwMDY4MCksIEtRVSgxNDY3MDcxNTI1NTAxMTIyMzA1 NiksCi0JS1FVKCA0NjcxMjA1Njc4NDAzNTc2NTU4KSwgS1FVKDEyNjMzMDIyOTMxNDU0MjU5Nzgx KSwKLQlLUVUoMTQ4MjEzNzYyMTk4NjkxODc2NDYpLCBLUVUoICA3NTExODE3NzY0ODQzMTcwMjgp LAotCUtRVSggMjE5MjIxMTMwODgzOTA0NzA3MCksIEtRVSgxMTc4NzMwNjM2MjM2MTI0NTE4OSks Ci0JS1FVKDEwNjcyMzc1MTIwNzQ0MDk1NzA3KSwgS1FVKCA0NjAxOTcyMzI4MzQ1MjQ0NDY3KSwK LQlLUVUoMTU0NTcyMTc3ODg4MzExMjU4NzkpLCBLUVUoIDg0NjQzNDUyNTY3NzU0NjA4MDkpLAot CUtRVSgxMDE5MTkzODc4OTQ4NzE1OTQ3OCksIEtRVSggNjE4NDM0ODczOTYxNTE5NzYxMyksCi0J S1FVKDExNDI1NDM2Nzc4ODA2ODgyMTAwKSwgS1FVKCAyNzM5MjI3MDg5MTI0MzE5NzkzKSwKLQlL UVUoICA0NjE0NjQ1MTg0NTYwMDA1NTEpLCBLUVUoIDQ2ODk4NTAxNzAwMjkxNzc0NDIpLAotCUtR VSggNjEyMDMwNzgxNDM3NDA3ODYyNSksIEtRVSgxMTE1MzU3OTIzMDY4MTcwODY3MSksCi0JS1FV KCA3ODkxNzIxNDczOTA1MzQ3OTI2KSwgS1FVKDEwMjgxNjQ2OTM3ODI0ODcyNDAwKSwKLQlLUVUo IDMwMjYwOTk2NDgxOTEzMzIyNDgpLCBLUVUoIDg2NjY3NTAyOTY5NTMyNzM4MTgpLAotCUtRVSgx NDk3ODQ5OTY5ODg0NDM2MzIzMiksIEtRVSgxMzMwMzM5NTEwMjg5MDEzMjA2NSksCi0JS1FVKCA4 MTgyMzU4MjA1MjkyODY0MDgwKSwgS1FVKDEwNTYwNTQ3NzEzOTcyOTcxMjkxKSwKLQlLUVUoMTE5 ODE2MzU0ODk0MTg5NTkwOTMpLCBLUVUoIDMxMzQ2MjEzNTQ5MzUyODg0MDkpLAotCUtRVSgxMTU4 MDY4MTk3NzQwNDM4Mzk2OCksIEtRVSgxNDIwNTUzMDMxNzQwNDA4ODY1MCksCi0JS1FVKCA1OTk3 Nzg5MDExODU0OTIzMTU3KSwgS1FVKDEzNjU5MTUxNTkzNDMyMjM4MDQxKSwKLQlLUVUoMTE2NjQz MzIxMTQzMzg4NjUwODYpLCBLUVUoIDc0OTAzNTEzODMyMjA5MjkzODYpLAotCUtRVSggNzE4OTI5 MDQ5OTg4MTUzMDM3OCksIEtRVSgxNTAzOTI2MjczNDI3MTAyMDIyMCksCi0JS1FVKCAyMDU3MjE3 Mjg1OTc2OTgwMDU1KSwgS1FVKCAgNTU1NTcwODA0OTA1MzU1NzM5KSwKLQlLUVUoMTEyMzUzMTE5 NjgzNDg1NTUxMTApLCBLUVUoMTM4MjQ1NTcxNDYyNjk2MDMyMTcpLAotCUtRVSgxNjkwNjc4ODg0 MDY1MzA5OTY5MyksIEtRVSggNzIyMjg3ODI0NTQ1NTY2MTY3NyksCi0JS1FVKCA1MjQ1MTM5NDQ0 MzMyNDIzNzU2KSwgS1FVKCA0NzIzNzQ4NDYyODA1Njc0MjkyKSwKLQlLUVUoMTIyMTY1MDk4MTU2 OTg1Njg2MTIpLCBLUVUoMTc0MDIzNjI5NzY2NDg5NTExODcpLAotCUtRVSgxNzM4OTYxNDgzNjgx MDM2Njc2OCksIEtRVSggNDg4MDkzNjQ4NDE0NjY2NzcxMSksCi0JS1FVKCA5MDg1MDA3ODM5Mjky NjM5ODgwKSwgS1FVKDEzODM3MzUzNDU4NDk4NTM1NDQ5KSwKLQlLUVUoMTE5MTQ0MTk4NTQzNjAz NjY2NzcpLCBLUVUoMTY1OTU4OTAxMzUzMTM4NjQxMDMpLAotCUtRVSggNjMxMzk2OTg0NzE5NzYy NzIyMiksIEtRVSgxODI5NjkwOTc5MjE2MzkxMDQzMSksCi0JS1FVKDEwMDQxNzgwMTEzMzgyMDg0 MDQyKSwgS1FVKCAyNDk5NDc4NTUxMTcyODg0Nzk0KSwKLQlLUVUoMTEwNTc4OTQyNDYyNDExODk0 ODkpLCBLUVUoIDk3NDIyNDMwMzIzODkwNjg1NTUpLAotCUtRVSgxMjgzODkzNDU4MjY3MzE5NjIy OCksIEtRVSgxMzQzNzAyMzIzNTI0ODQ5MDM2NyksCi0JS1FVKDEzMzcyNDIwNjY5NDQ2MTYzMjQw KSwgS1FVKCA2NzUyNTY0MjQ0NzE2OTA5MjI0KSwKLQlLUVUoIDcxNTczMzMwNzM0MDAzMTM3Mzcp LCBLUVUoMTIyMzAyODE1MTYzNzA2NTQzMDgpLAotCUtRVSggMTE4Mjg4NDU1MjIxOTQxOTExNyks IEtRVSggMjk1NTEyNTM4MTMxMjQ5OTIxOCksCi0JS1FVKDEwMzA4ODI3MDk3MDc5NDQzMjQ5KSwg S1FVKCAxMzM3NjQ4NTcyOTg2NTM0OTU4KSwKLQlLUVUoMTYzNzg3ODg1OTAwMjAzNDM5MzkpLCBL UVUoICAxMDg2MTkxMjY1MTQ0MjA5MzUpLAotCUtRVSggMzk5MDk4MTAwOTYyMTYyOTE4OCksIEtR VSggNTQ2MDk1MzA3MDIzMDk0NjQxMCksCi0JS1FVKCA5NzAzMzI4MzI5MzY2NTMxODgzKSwgS1FV KDEzMTY2NjMxNDg5MTg4MDc3MjM2KSwKLQlLUVUoIDExMDQ3Njg4MzEyMTM2NzUxNzApLCBLUVUo IDM0NDc5MzA0NTg1NTM4Nzc5MDgpLAotCUtRVSggODA2NzE3MjQ4Nzc2OTk0NTY3NiksIEtRVSgg NTQ0NTgwMjA5ODE5MDc3NTM0NyksCi0JS1FVKCAzMjQ0ODQwOTgxNjQ4OTczODczKSwgS1FVKDE3 MzE0NjY4MzIyOTgxOTUwMDYwKSwKLQlLUVUoIDUwMDY4MTI1Mjc4Mjc3NjM4MDcpLCBLUVUoMTgx NTg2OTUwNzAyMjU1MjYyNjApLAotCUtRVSggMjgyNDUzNjQ3ODg1MjQxNzg1MyksIEtRVSgxMzk3 NDc3NTgwOTEyNzUxOTg4NiksCi0JS1FVKCA5ODE0MzYyNzY5MDc0MDY3MzkyKSwgS1FVKDE3Mjc2 MjA1MTU2Mzc0ODYyMTI4KSwKLQlLUVUoMTEzNjE2ODA3MjUzNzkzMDY5NjcpLCBLUVUoIDM0MjI1 ODE5NzAzODIwMTI1NDIpLAotCUtRVSgxMTAwMzE4OTYwMzc1MzI0MTI2NiksIEtRVSgxMTE5NDI5 Mjk0NTI3Nzg2MjI2MSksCi0JS1FVKCA2ODM5NjIzMzEzOTA4NTIxMzQ4KSwgS1FVKDExOTM1MzI2 NDYyNzA3MzI0NjM0KSwKLQlLUVUoIDE2MTE0NTY3ODg2ODU4Nzg0NDQpLCBLUVUoMTMxMTI2MjA5 ODk0NzU1NTg5MDcpLAotCUtRVSggIDUxNzY1OTEwODkwNDQ1MDQyNyksIEtRVSgxMzU1ODExNDMx ODU3NDQwNzYyNCksCi0JS1FVKDE1Njk5MDg5NzQyNzMxNjMzMDc3KSwgS1FVKCA0OTg4OTc5Mjc4 ODYyNjg1NDU4KSwKLQlLUVUoIDgxMTEzNzM1ODMwNTY1MjEyOTcpLCBLUVUoIDM4OTEyNTg3NDY2 MTUzOTk2MjcpLAotCUtRVSggODEzNzI5ODI1MTQ2OTcxODA4NiksIEtRVSgxMjc0ODY2MzI5NTYy NDcwMTY0OSksCi0JS1FVKCA0Mzg5ODM1NjgzNDk1MjkyMDYyKSwgS1FVKCA1Nzc1MjE3ODcyMTI4 ODMxNzI5KSwKLQlLUVUoIDk0NjIwOTE4OTY0MDU1MzQ5MjcpLCBLUVUoIDg0OTgxMjQxMDg4MjAy NjM5ODkpLAotCUtRVSggODA1OTEzMTI3ODg0MjgzOTUyNSksIEtRVSgxMDUwMzE2Nzk5NDI1NDA5 MDg5MiksCi0JS1FVKDExNjEzMTUzNTQxMDcwMzk2NjU2KSwgS1FVKDE4MDY5MjQ4NzM4NTA0NjQ3 NzkwKSwKLQlLUVUoICA1NzA2NTc0MTkxMDk3Njg1MDgpLCBLUVUoIDM5NTA1NzQxNjc3NzExNTk2 NjUpLAotCUtRVSggNTUxNDY1NTU5OTYwNDMxMzA3NyksIEtRVSggMjkwODQ2MDg1NDQyODQ4NDE2 NSksCi0JS1FVKDEwNzc3NzIyNjE1OTM1NjYzMTE0KSwgS1FVKDEyMDA3MzYzMzA0ODM5Mjc5NDg2 KSwKLQlLUVUoIDk4MDA2NDYxODc1Njk0ODQ3NjcpLCBLUVUoIDg3OTU0MjM1NjQ4ODk4NjQyODcp LAotCUtRVSgxNDI1NzM5NjY4MDEzMTAyODQxOSksIEtRVSggNjQwNTQ2NTExNzMxNTA5NjQ5OCks Ci0JS1FVKCA3OTM5NDExMDcyMjA4Nzc0ODc4KSwgS1FVKDE3NTc3NTcyMzc4NTI4OTkwMDA2KSwK LQlLUVUoMTQ3ODU4NzM4MDY3MTU5OTQ4NTApLCBLUVUoMTY3NzA1NzI2ODA4NTQ3NDczOTApLAot CUtRVSgxODEyNzU0OTQ3NDQxOTM5NjQ4MSksIEtRVSgxMTYzNzAxMzQ0OTQ1NTc1Nzc1MCksCi0J S1FVKDE0MzcxODUxOTMzOTk2NzYxMDg2KSwgS1FVKCAzNjAxMTgxMDYzNjUwMTEwMjgwKSwKLQlL UVUoIDQxMjY0NDI4NDUwMTkzMTYxNDQpLCBLUVUoMTAxOTgyODcyMzkyNDQzMjA2NjkpLAotCUtR VSgxODAwMDE2OTYyODU1NTM3OTY1OSksIEtRVSgxODM5MjQ4MjQwMDczOTk3ODI2OSksCi0JS1FV KCA2MjE5OTE5MDM3Njg2OTE5OTU3KSwgS1FVKCAzNjEwMDg1Mzc3NzE5NDQ2MDUyKSwKLQlLUVUo IDI1MTM5MjUwMzk5ODE3NzYzMzYpLCBLUVUoMTY2Nzk0MTM1Mzc5MjY3MTY5NTUpLAotCUtRVSgx MjkwMzMwMjEzMTcxNDkwOTQzNCksIEtRVSggNTU4MTE0NTc4OTc2Mjk4NTAwOSksCi0JS1FVKDEy MzI1OTU1MDQ0MjkzMzAzMjMzKSwgS1FVKDE3MjE2MTExMTgwNzQyMTQxMjA0KSwKLQlLUVUoIDYz MjE5MTk1OTUyNzY1NDU3NDApLCBLUVUoIDM1MDc1MjExNDcyMTYxNzQ1MDEpLAotCUtRVSggOTY1 OTE5NDU5MzMxOTQ4MTg0MCksIEtRVSgxMTQ3Mzk3NjAwNTk3NTM1ODMyNiksCi0JS1FVKDE0NzQy NzMwMTAxNDM1OTg3MDI2KSwgS1FVKCAgNDkyODQ1ODk3NzA5OTU0NzgwKSwKLQlLUVUoMTY5NzYz NzExODYxNjI1OTk2NzYpLCBLUVUoMTc3MTI3MDM0MjI4Mzc2NDg2NTUpLAotCUtRVSggOTg4MTI1 NDc3ODU4NzA2MTY5NyksIEtRVSggODQxMzIyMzE1NjMwMjI5OTU1MSksCi0JS1FVKCAxNTYzODQx ODI4MjU0MDg5MTY4KSwgS1FVKCA5OTk2MDMyNzU4Nzg2NjcxOTc1KSwKLQlLUVUoICAxMzg4Nzc3 MDA1ODM3NzI2NjcpLCBLUVUoMTMwMDMwNDMzNjg1NzQ5OTU5ODkpLAotCUtRVSggNDM5MDU3MzY2 ODY1MDQ1NjU4NyksIEtRVSggODYxMDI4NzM5MDU2ODEyNjc1NSksCi0JS1FVKDE1MTI2OTA0OTc0 MjY2NjQyMTk5KSwgS1FVKCA2NzAzNjM3MjM4OTg2MDU3NjYyKSwKLQlLUVUoIDI4NzMwNzU1OTI5 NTY4MTAxNTcpLCBLUVUoIDYwMzUwODA5MzM5NDYwNDk0MTgpLAotCUtRVSgxMzM4Mjg0NjU4MTIw MjM1MzAxNCksIEtRVSggNzMwMzk3MTAzMTgxNDY0MjQ2MyksCi0JS1FVKDE4NDE4MDI0NDA1MzA3 NDQ0MjY3KSwgS1FVKCA1ODQ3MDk2NzMxNjc1NDA0NjQ3KSwKLQlLUVUoIDQwMzU4ODA2OTk2Mzk4 NDI1MDApLCBLUVUoMTE1MjUzNDg2MjUxMTIyMTg0NzgpLAotCUtRVSggMzA0MTE2MjM2NTQ1OTU3 NDEwMiksIEtRVSggMjYwNDczNDQ4NzcyNzk4NjU1OCksCi0JS1FVKDE1NTI2MzQxNzcxNjM2OTgz MTQ1KSwgS1FVKDE0NTU2MDUyMzEwNjk3MzcwMjU0KSwKLQlLUVUoMTI5OTc3ODcwNzc5MzA4MDgx NTUpLCBLUVUoIDk2MDE4MDY1MDE3NTU1NTQ0OTkpLAotCUtRVSgxMTM0OTY3Nzk1MjUyMTQyMzM4 OSksIEtRVSgxNDk1Njc3NzgwNzY0NDg5OTM1MCksCi0JS1FVKDE2NTU5NzM2OTU3NzQyODUyNzIx KSwgS1FVKDEyMzYwODI4Mjc0Nzc4MTQwNzI2KSwKLQlLUVUoIDY2ODUzNzMyNzIwMDk2NjI1MTMp LCBLUVUoMTY5MzIyNTg3NDgwNTUzMjQxMzApLAotCUtRVSgxNTkxODA1MTEzMTk1NDE1ODUwOCks IEtRVSggMTY5MjMxMjkxMzE0MDc5MDE0NCksCi0JS1FVKCAgNTQ2NjUzODI2ODAxNjM3MzY3KSwg S1FVKCA1MzQxNTg3MDc2MDQ1OTg2NjUyKSwKLQlLUVUoMTQ5NzUwNTcyMzYzNDI1ODU2NjIpLCBL UVUoMTIzNzQ5NzYzNTczNDA2MjI0MTIpLAotCUtRVSgxMDMyODgzMzk5NTE4MTk0MDU1MiksIEtR VSgxMjgzMTgwNzEwMTcxMDQ0MzE0OSksCi0JS1FVKDEwNTQ4NTE0OTE0MzgyNTQ1NzE2KSwgS1FV KCAyMjE3ODA2NzI3MTk5NzE1OTkzKSwKLQlLUVUoMTI2MjcwNjczNjkyNDI4NDUxMzgpLCBLUVUo IDQ1OTg5NjUzNjQwMzU0MzgxNTgpLAotCUtRVSggIDE1MDkyMzM1Mjc1MTMxODE3MSksIEtRVSgx NDI3NDEwOTU0NDQ0MjI1NzI4MyksCi0JS1FVKCA0Njk2NjYxNDc1MDkzODYzMDMxKSwgS1FVKCAx NTA1NzY0MTE0Mzg0NjU0NTE2KSwKLQlLUVUoMTA2OTkxODU4MzE4OTE0OTUxNDcpLCBLUVUoIDIz OTIzNTM4NDc3MTM2MjA1MTkpLAotCUtRVSggMzY1Mjg3MDE2NjcxMTc4ODM4MyksIEtRVSggODY0 MDY1MzI3NjIyMTkxMTEwOCksCi0JS1FVKCAzODk0MDc3NTkyMjc1ODg5NzA0KSwgS1FVKCA0OTE4 NTkyODcyMTM1OTY0ODQ1KSwKLQlLUVUoMTYzNzkxMjEyNzMyODE0MDA3ODkpLCBLUVUoMTIwNTg0 NjU0ODM1OTE2ODM2NTYpLAotCUtRVSgxMTI1MDEwNjgyOTMwMjkyNDk0NSksIEtRVSggMTE0NzUz NzU1NjI5Njk4MzAwNSksCi0JS1FVKCA2Mzc2MzQyNzU2MDA0NjEzMjY4KSwgS1FVKDE0OTY3MTI4 MTkxNzA5MjgwNTA2KSwKLQlLUVUoMTgwMDc0NDk5NDk3OTA2Mjc2MjgpLCBLUVUoIDk0OTcxNzgy NzkzMTY1Mzc4NDEpLAotCUtRVSggNzkyMDE3NDg0NDgwOTM5NDg5MyksIEtRVSgxMDAzNzc1MjU5 NTI1NTcxOTkwNyksCi0JS1FVKDE1ODc1MzQyNzg0OTg1MjE3Njk3KSwgS1FVKDE1MzExNjE1OTIx NzEyODUwNjk2KSwKLQlLUVUoIDk1NTI5MDI2NTIxMTA5OTI5NTApLCBLUVUoMTQwNTQ5Nzk0NTAw OTk3MjExNDApLAotCUtRVSggNTk5ODcwOTc3MzU2NjQxNzM0OSksIEtRVSgxODAyNzkxMDMzOTI3 NjMyMDE4NyksCi0JS1FVKCA4MjIzMDk5MDUzODY4NTg1NTU0KSwgS1FVKCA3ODQyMjcwMzU0ODI0 OTk5NzY3KSwKLQlLUVUoIDQ4OTYzMTU2ODg3NzAwODAyOTIpLCBLUVUoMTI5NjkzMjAyOTY1Njk3 ODc4OTUpLAotCUtRVSggMjY3NDMyMTQ4OTE4NTc1OTk2MSksIEtRVSggNDA1MzYxNTkzNjg2NDcx ODQzOSksCi0JS1FVKDExMzQ5Nzc1MjcwNTg4NjE3NTc4KSwgS1FVKCA0NzQzMDE5MjU2Mjg0NTUz OTc1KSwKLQlLUVUoIDU2MDIxMDAyMTc0Njk3MjM3NjkpLCBLUVUoMTQzOTg5OTU2OTE0MTE1Mjc4 MTMpLAotCUtRVSggNzQxMjE3MDQ5Mzc5NjgyNTQ3MCksIEtRVSggIDgzNjI2MjQwNjEzMTc0NDg0 NiksCi0JS1FVKCA4MjMxMDg2NjMzODQ1MTUzMDIyKSwgS1FVKCA1MTYxMzc3OTIwNDM4NTUyMjg3 KSwKLQlLUVUoIDg4Mjg3MzExOTYxNjk5MjQ5NDkpLCBLUVUoMTYyMTExNDIyNDY0NjU1MDI2ODAp LAotCUtRVSggMzMwNzk5MDg3OTI1MzY4NzgxOCksIEtRVSggNTE5MzQwNTQwNjg5OTc4MjAyMiks Ci0JS1FVKCA4NTEwODQyMTE3NDY3NTY2NjkzKSwgS1FVKCA2MDcwOTU1MTgxMDIyNDA1MzY1KSwK LQlLUVUoMTQ0ODI5NTAyMzEzNjE0MDk3OTkpLCBLUVUoMTI1ODUxNTkzNzEzMzExMzgwNzcpLAot CUtRVSggMzUxMTUzNzY3ODkzMzU4ODE0OCksIEtRVSggMjA0MTg0OTQ3NDUzMTExNjQxNyksCi0J S1FVKDEwOTQ0OTM2Njg1MDk1MzQ1NzkyKSwgS1FVKDE4MzAzMTE2OTIzMDc5MTA3NzI5KSwKLQlL UVUoIDI3MjA1NjYzNzEyMzk3MjUzMjApLCBLUVUoIDQ5NTg2NzI0NzM1NjIzOTc2MjIpLAotCUtR VSggMzAzMjMyNjY2ODI1MzI0MzQxMiksIEtRVSgxMzY4OTQxODY5MTcyNjkwODMzOCksCi0JS1FV KCAxODk1MjA1NTExNzI4ODQzOTk2KSwgS1FVKCA4MTQ2MzAzNTE1MjcxOTkwNTI3KSwKLQlLUVUo MTY1MDczNDM1MDAwNTYxMTM0ODApLCBLUVUoICA0NzM5OTY5MzkxMDU5MDI5MTkpLAotCUtRVSgg OTg5NzY4Njg4NTI0Njg4MTQ4MSksIEtRVSgxNDYwNjQzMzc2MjcxMjc5MDU3NSksCi0JS1FVKCA2 NzMyNzk2MjUxNjA1NTY2MzY4KSwgS1FVKCAxMzk5Nzc4MTIwODU1MzY4OTE2KSwKLQlLUVUoICA5 MzUwMjM4ODUxODI4MzM3NzcpLCBLUVUoMTYwNjYyODI4MTYxODY3NTM0NzcpLAotCUtRVSggNzI5 MTI3MDk5MTgyMDYxMjA1NSksIEtRVSgxNzUzMDIzMDM5MzEyOTg1Mzg0NCksCi0JS1FVKDEwMjIz NDkzNjIzNDc3NDUxMzY2KSwgS1FVKDE1ODQxNzI1NjMwNDk1Njc2NjgzKSwKLQlLUVUoMTczNzk1 NjcyNDY0MzU1MTU4MjQpLCBLUVUoIDg1ODgyNTE0MjkzNzU1NjE5NzEpLAotCUtRVSgxODMzOTUx MTIxMDg4NzIwNjQyMyksIEtRVSgxNzM0OTU4NzQzMDcyNTk3NjEwMCksCi0JS1FVKDEyMjQ0ODc2 NTIxMzk0ODM4MDg4KSwgS1FVKCA2MzgyMTg3NzE0MTQ3MTYxMjU5KSwKLQlLUVUoMTIzMzU4MDcx ODE4NDg5NTA4MzEpLCBLUVUoMTY5NDg4ODU2MjIzMDU0NjA2NjUpLAotCUtRVSgxMzc1NTA5Nzc5 NjM3MTUyMDUwNiksIEtRVSgxNDgwNjc0MDM3MzMyNDk0NzgwMSksCi0JS1FVKCA0ODI4Njk5NjMz ODU5Mjg3NzAzKSwgS1FVKCA4MjA5ODc5MjgxNDUyMzAxNjA0KSwKLQlLUVUoMTI0MzU3MTY2Njk1 NTM3MzY0MzcpLCBLUVUoMTM5NzA5NzY4NTk1ODg0NTIxMzEpLAotCUtRVSggNjIzMzk2MDg0MjU2 Njc3MzE0OCksIEtRVSgxMjUwNzA5NjI2NzkwMDUwNTc1OSksCi0JS1FVKCAxMTk4NzEzMTE0Mzgx Mjc5NDIxKSwgS1FVKDE0OTg5ODYyNzMxMTI0MTQ5MDE1KSwKLQlLUVUoMTU5MzIxODk1MDg3MDc5 Nzg5NDkpLCBLUVUoIDI1MjY0MDY2NDE0MzI3MDg3MjIpLAotCUtRVSggICAyOTE4NzQyNzgxNzI3 MTk4MiksIEtRVSggMTQ5OTgwMjc3MzA1NDU1NjM1MyksCi0JS1FVKDEwODE2NjM4MTg3MDIxODk3 MTczKSwgS1FVKCA1NDM2MTM5MjcwODM5NzM4MTMyKSwKLQlLUVUoIDY2NTk4ODIyODcwMzYwMTAw ODIpLCBLUVUoIDIxNTQwNDg5NTUzMTcxNzM2OTcpLAotCUtRVSgxMDg4NzMxNzAxOTMzMzc1NzY0 MiksIEtRVSgxNjI4MTA5MTgwMjYzNDQyNDk1NSksCi0JS1FVKDEwNzU0NTQ5ODc5OTE1Mzg0OTAx KSwgS1FVKDEwNzYwNjExNzQ1NzY5MjQ5ODE1KSwKLQlLUVUoIDIxNjE1MDU5NDY5NzI1MDQwMDIp LCBLUVUoIDUyNDMxMzI4MDg5ODYyNjUxMDcpLAotCUtRVSgxMDEyOTg1MjE3OTg3MzQxNTQxNiks IEtRVSggIDcxMDMzOTQ4MDAwODY0OTA4MSksCi0JS1FVKCA3ODAyMTI5NDUzMDY4ODA4NTI4KSwg S1FVKDE3OTY3MjEzNTY3MTc4OTA3MjEzKSwKLQlLUVUoMTU3MzA4NTkxMjQ2Njg2MDU1OTkpLCBL UVUoMTMwNTgzNTYxNjg5NjIzNzY1MDIpLAotCUtRVSggMzcwMTIyNDk4NTQxMzY0NTkwOSksIEtR VSgxNDQ2NDA2NTg2OTE0OTEwOTI2NCksCi0JS1FVKCA5OTU5MjcyNDE4ODQ0MzExNjQ2KSwgS1FV KDEwMTU3NDI2MDk5NTE1OTU4NzUyKSwKLQlLUVUoMTQwMTM3MzY4MTQ1MzgyNjg1MjgpLCBLUVUo MTc3OTc0NTY5OTIwNjU2NTM5NTEpLAotCUtRVSgxNzQxODg3ODE0MDI1NzM0NDgwNiksIEtRVSgx NTQ1NzQyOTA3MzU0MDU2MTUyMSksCi0JS1FVKCAyMTg0NDI2ODgxMzYwOTQ5Mzc4KSwgS1FVKCAy MDYyMTkzMDQxMTU0NzEyNDE2KSwKLQlLUVUoIDg1NTM0NjMzNDc0MDY5MzE2NjEpLCBLUVUoIDQ5 MTMwNTc2MjUyMDI4NzE4NTQpLAotCUtRVSggMjY2ODk0MzY4MjEyNjYxODQyNSksIEtRVSgxNzA2 NDQ0NDczNzg5MTE3MjI4OCksCi0JS1FVKCA0OTk3MTE1OTAzOTEzMjk4NjM3KSwgS1FVKDEyMDE5 NDAyNjA4ODkyMzI3NDE2KSwKLQlLUVUoMTc2MDM1ODQ1NTk3NjU4OTczNTIpLCBLUVUoMTEzNjc1 Mjk1ODIwNzM2NDc5NzUpLAotCUtRVSggODIxMTQ3NjA0MzUxODQzNjA1MCksIEtRVSggODY3Njg0 OTgwNDA3MDMyMzY3NCksCi0JS1FVKDE4NDMxODI5MjMwMzk0NDc1NzMwKSwgS1FVKDEwNDkwMTc3 ODYxMzYxMjQ3OTA0KSwKLQlLUVUoIDk1MDg3MjA2MDIwMjU2NTEzNDkpLCBLUVUoIDc0MDk2Mjc0 NDg1NTU3MjI3MDApLAotCUtRVSggNTgwNDA0NzAxODg2MjcyOTAwOCksIEtRVSgxMTk0Mzg1ODE3 Njg5MzE0MjU5NCksCi0JS1FVKDExOTA4MDk1NDE4OTMzODQ3MDkyKSwgS1FVKCA1NDE1NDQ5MzQ1 NzE1ODg3NjUyKSwKLQlLUVUoIDE1NTQwMjI2OTkxNjYxNTY0MDcpLCBLUVUoIDkwNzMzMjIxMDY0 MDYwMTcxNjEpLAotCUtRVSggNzA4MDYzMDk2Nzk2OTA0NzA4MiksIEtRVSgxODA0OTczNjk0MDg2 MDczMjk0MyksCi0JS1FVKDEyNzQ4NzE0MjQyNTk0MTk2Nzk0KSwgS1FVKCAxMjI2OTkyNDE1NzM1 MTU2NzQxKSwKLQlLUVUoMTc5MDA5ODEwMTk2MDk1MzExOTMpLCBLUVUoMTE3MjA3Mzk3NDQwMDg3 MTA5OTkpLAotCUtRVSggMzAwNjQwMDY4MzM5NDc3NTQzNCksIEtRVSgxMTM0Nzk3NDAxMTc1MTk5 NjAyOCksCi0JS1FVKCAzMzE2OTk5NjI4MjU3OTU0NjA4KSwgS1FVKCA4Mzg0NDg0NTYzNTU3NjM5 MTAxKSwKLQlLUVUoMTgxMTc3OTQ2ODU5NjE3Mjk3NjcpLCBLUVUoIDE5MDAxNDUwMjU1OTY2MTgx OTQpLAotCUtRVSgxNzQ1OTUyNzg0MDYzMjg5MjY3NiksIEtRVSggNTYzNDc4NDEwMTg2NTcxMDk5 NCksCi0JS1FVKCA3OTE4NjE5MzAwMjkyODk3MTU4KSwgS1FVKCAzMTQ2NTc3NjI1MDI2MzAxMzUw KSwKLQlLUVUoIDk5NTUyMTI4NTY0OTkwNjg3NjcpLCBLUVUoIDE4NzM5OTU4NDM2ODE3NDY5NzUp LAotCUtRVSggMTU2MTQ4Nzc1OTk2Nzk3MjE5NCksIEtRVSggODMyMjcxODgwNDM3NTg3ODQ3NCks Ci0JS1FVKDExMzAwMjg0MjE1MzI3MDI4MzY2KSwgS1FVKCA0NjY3MzkxMDMyNTA4OTk4OTgyKSwK LQlLUVUoIDk4MjAxMDQ0OTQzMDY2MjU1ODApLCBLUVUoMTc5MjIzOTc5Njg1OTk5NzA2MTApLAot CUtRVSggMTc4NDY5MDQ2MTg4Njc4NjcxMiksIEtRVSgxNDk0MDM2NTA4NDM0MTM0NjgyMSksCi0J S1FVKCA1MzQ4NzE5NTc1NTk0MTg2MTgxKSwgS1FVKDEwNzIwNDE5MDg0NTA3ODU1MjYxKSwKLQlL UVUoMTQyMTAzOTQzNTQxNDUxNDMyNzQpLCBLUVUoIDI0MjY0Njg2OTIxNjQwMDAxMzEpLAotCUtR VSgxNjI3MTA2MjExNDYwNzA1OTIwMiksIEtRVSgxNDg1MTkwNDA5MjM1NzA3MDI0NyksCi0JS1FV KCA2NTI0NDkzMDE1NjkzMTIxODk3KSwgS1FVKCA5ODI1NDczODM1MTI3MTM4NTMxKSwKLQlLUVUo MTQyMjI1MDA2MTYyNjg1Njk1NzgpLCBLUVUoMTU1MjE0ODQwNTIwMDc0ODc0NjgpLAotCUtRVSgx NDQ2MjU3OTQwNDEyNDYxNDY5OSksIEtRVSgxMTAxMjM3NTU5MDgyMDY2NTUyMCksCi0JS1FVKDEx NjI1MzI3MzUwNTM2MDg0OTI3KSwgS1FVKDE0NDUyMDE3NzY1MjQzNzg1NDE3KSwKLQlLUVUoIDk5 ODkzNDIyNjM1MTg3NjYzMDUpLCBLUVUoIDM2NDAxMDU0NzExMDE4MDM3OTApLAotCUtRVSggNDc0 OTg2NjQ1NTg5NzUxMzI0MiksIEtRVSgxMzk2MzA2NDk0NjczNjMxMjA0NCksCi0JS1FVKDEwMDA3 NDE2NTkxOTczMjIzNzkxKSwgS1FVKDE4MzE0MTMyMjM0NzE3NDMxMTE1KSwKLQlLUVUoIDMyODY1 OTY1ODg2MTc0ODM0NTApLCBLUVUoIDc3MjYxNjM0NTUzNzA4MTg3NjUpLAotCUtRVSggNzU3NTQ1 NDcyMTExNTM3OTMyOCksIEtRVSggNTMwODMzMTU3NjQzNzY2MzQyMiksCi0JS1FVKDE4Mjg4ODIx ODk0OTAzNTMwOTM0KSwgS1FVKCA4MDI4NDA1ODA1NDEwNTU0MTA2KSwKLQlLUVUoMTU3NDQwMTk4 MzIxMDMyOTY2MjgpLCBLUVUoICAxNDk3NjU1NTk2MzA5MzIxMDApLAotCUtRVSggNjEzNzcwNTU1 NzIwMDA3MTk3NyksIEtRVSgxNDUxMzQxNjMxNTQzNDgwMzYxNSksCi0JS1FVKDExNjY1NzAyODIw MTI4OTg0NDczKSwgS1FVKCAgMjE4OTI2NjcwNTA1NjAxMzg2KSwKLQlLUVUoIDY4Njg2NzUwMjg3 MTc3Njk1MTkpLCBLUVUoMTUyODIwMTY1Njk0NDE1MTIzMDIpLAotCUtRVSggNTcwNzAwMDQ5Nzc4 Mjk2MDIzNiksIEtRVSggNjY3MTEyMDU4NjU1NTA3OTU2NyksCi0JS1FVKCAyMTk0MDk4MDUyNjE4 OTg1NDQ4KSwgS1FVKDE2ODQ5NTc3ODk1NDc3MzMwOTc4KSwKLQlLUVUoMTI5NTcxNDg0NzEwMTc0 NjYyODMpLCBLUVUoIDE5OTc4MDU1MzU0MDQ4NTkzOTMpLAotCUtRVSggMTE4MDcyMTA2MDI2Mzg2 MDQ5MCksIEtRVSgxMzIwNjM5MTMxMDE5Mzc1Njk1OCksCi0JS1FVKDEyOTgwMjA4Njc0NDYxODYx Nzk3KSwgS1FVKCAzODI1OTY3Nzc1MDU4ODc1MzY2KSwKLQlLUVUoMTc1NDM0MzM2NzA3ODIwNDI2 MzEpLCBLUVUoIDE1MTgzMzkwNzAxMjAzMjI3MzApLAotCUtRVSgxNjM0NDU4NDM0MDg5MDk5MTY2 OSksIEtRVSggMjYxMTMyNzE2NTMxODUyOTgxOSksCi0JS1FVKDExMjY1MDIyNzIzMjgzNDIyNTI5 KSwgS1FVKCA0MDAxNTUyODAwMzczMTk2ODE3KSwKLQlLUVUoMTQ1MDk1OTU4OTAwNzkzNDYxNjEp LCBLUVUoIDM1Mjg3MTcxNjU0MTYyMzQ1NjIpLAotCUtRVSgxODE1MzIyMjU3MTUwMTkxNDA3Miks IEtRVSggOTM4NzE4Mjk3NzIwOTc0NDQyNSksCi0JS1FVKDEwMDY0MzQyMzE1OTg1NTgwMDIxKSwg S1FVKDExMzczNjc4NDEzMjE1MjUzOTc3KSwKLQlLUVUoIDIzMDg0NTc4NTMyMjg3OTgwOTkpLCBL UVUoIDk3MjkwNDI5NDI4Mzk1NDUzMDIpLAotCUtRVSggNzgzMzc4NTQ3MTE0MDEyNzc0NiksIEtR VSggNjM1MTA0OTkwMDMxOTg0NDQzNiksCi0JS1FVKDE0NDU0NjEwNjI3MTMzNDk2MDY3KSwgS1FV KDEyNTMzMTc1NjgzNjM0ODE5MTExKSwKLQlLUVUoMTU1NzAxNjM5MjY3MTY1MTMwMjkpLCBLUVUo MTMzNTY5ODA1MTkxODU3NjI0OTgpCi19OwotCi1URVNUX0JFR0lOKHRlc3RfZ2VuX3JhbmRfMzIp IHsKLQl1aW50MzJfdCBhcnJheTMyW0JMT0NLX1NJWkVdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgx NikpOwotCXVpbnQzMl90IGFycmF5MzJfMltCTE9DS19TSVpFXSBKRU1BTExPQ19BVFRSKGFsaWdu ZWQoMTYpKTsKLQlpbnQgaTsKLQl1aW50MzJfdCByMzI7Ci0Jc2ZtdF90ICpjdHg7Ci0KLQlleHBl Y3RfZF9sZShnZXRfbWluX2FycmF5X3NpemUzMigpLCBCTE9DS19TSVpFLAotCSAgICAiQXJyYXkg c2l6ZSB0b28gc21hbGwiKTsKLQljdHggPSBpbml0X2dlbl9yYW5kKDEyMzQpOwotCWZpbGxfYXJy YXkzMihjdHgsIGFycmF5MzIsIEJMT0NLX1NJWkUpOwotCWZpbGxfYXJyYXkzMihjdHgsIGFycmF5 MzJfMiwgQkxPQ0tfU0laRSk7Ci0JZmluaV9nZW5fcmFuZChjdHgpOwotCi0JY3R4ID0gaW5pdF9n ZW5fcmFuZCgxMjM0KTsKLQlmb3IgKGkgPSAwOyBpIDwgQkxPQ0tfU0laRTsgaSsrKSB7Ci0JCWlm IChpIDwgQ09VTlRfMSkgewotCQkJZXhwZWN0X3UzMl9lcShhcnJheTMyW2ldLCBpbml0X2dlbl9y YW5kXzMyX2V4cGVjdGVkW2ldLAotCQkJICAgICJPdXRwdXQgbWlzbWF0Y2ggZm9yIGk9JWQiLCBp KTsKLQkJfQotCQlyMzIgPSBnZW5fcmFuZDMyKGN0eCk7Ci0JCWV4cGVjdF91MzJfZXEocjMyLCBh cnJheTMyW2ldLAotCQkgICAgIk1pc21hdGNoIGF0IGFycmF5MzJbJWRdPSV4LCBnZW49JXgiLCBp LCBhcnJheTMyW2ldLCByMzIpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgQ09VTlRfMjsgaSsrKSB7 Ci0JCXIzMiA9IGdlbl9yYW5kMzIoY3R4KTsKLQkJZXhwZWN0X3UzMl9lcShyMzIsIGFycmF5MzJf MltpXSwKLQkJICAgICJNaXNtYXRjaCBhdCBhcnJheTMyXzJbJWRdPSV4LCBnZW49JXgiLCBpLCBh cnJheTMyXzJbaV0sCi0JCSAgICByMzIpOwotCX0KLQlmaW5pX2dlbl9yYW5kKGN0eCk7Ci19Ci1U RVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfYnlfYXJyYXlfMzIpIHsKLQl1aW50MzJfdCBhcnJh eTMyW0JMT0NLX1NJWkVdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikpOwotCXVpbnQzMl90IGFy cmF5MzJfMltCTE9DS19TSVpFXSBKRU1BTExPQ19BVFRSKGFsaWduZWQoMTYpKTsKLQlpbnQgaTsK LQl1aW50MzJfdCBpbmlbNF0gPSB7MHgxMjM0LCAweDU2NzgsIDB4OWFiYywgMHhkZWYwfTsKLQl1 aW50MzJfdCByMzI7Ci0Jc2ZtdF90ICpjdHg7Ci0KLQlleHBlY3RfZF9sZShnZXRfbWluX2FycmF5 X3NpemUzMigpLCBCTE9DS19TSVpFLAotCSAgICAiQXJyYXkgc2l6ZSB0b28gc21hbGwiKTsKLQlj dHggPSBpbml0X2J5X2FycmF5KGluaSwgNCk7Ci0JZmlsbF9hcnJheTMyKGN0eCwgYXJyYXkzMiwg QkxPQ0tfU0laRSk7Ci0JZmlsbF9hcnJheTMyKGN0eCwgYXJyYXkzMl8yLCBCTE9DS19TSVpFKTsK LQlmaW5pX2dlbl9yYW5kKGN0eCk7Ci0KLQljdHggPSBpbml0X2J5X2FycmF5KGluaSwgNCk7Ci0J Zm9yIChpID0gMDsgaSA8IEJMT0NLX1NJWkU7IGkrKykgewotCQlpZiAoaSA8IENPVU5UXzEpIHsK LQkJCWV4cGVjdF91MzJfZXEoYXJyYXkzMltpXSwgaW5pdF9ieV9hcnJheV8zMl9leHBlY3RlZFtp XSwKLQkJCSAgICAiT3V0cHV0IG1pc21hdGNoIGZvciBpPSVkIiwgaSk7Ci0JCX0KLQkJcjMyID0g Z2VuX3JhbmQzMihjdHgpOwotCQlleHBlY3RfdTMyX2VxKHIzMiwgYXJyYXkzMltpXSwKLQkJICAg ICJNaXNtYXRjaCBhdCBhcnJheTMyWyVkXT0leCwgZ2VuPSV4IiwgaSwgYXJyYXkzMltpXSwgcjMy KTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IENPVU5UXzI7IGkrKykgewotCQlyMzIgPSBnZW5fcmFu ZDMyKGN0eCk7Ci0JCWV4cGVjdF91MzJfZXEocjMyLCBhcnJheTMyXzJbaV0sCi0JCSAgICAiTWlz bWF0Y2ggYXQgYXJyYXkzMl8yWyVkXT0leCwgZ2VuPSV4IiwgaSwgYXJyYXkzMl8yW2ldLAotCQkg ICAgcjMyKTsKLQl9Ci0JZmluaV9nZW5fcmFuZChjdHgpOwotfQotVEVTVF9FTkQKLQotVEVTVF9C RUdJTih0ZXN0X2dlbl9yYW5kXzY0KSB7Ci0JdWludDY0X3QgYXJyYXk2NFtCTE9DS19TSVpFNjRd IEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikpOwotCXVpbnQ2NF90IGFycmF5NjRfMltCTE9DS19T SVpFNjRdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikpOwotCWludCBpOwotCXVpbnQ2NF90IHI7 Ci0Jc2ZtdF90ICpjdHg7Ci0KLQlleHBlY3RfZF9sZShnZXRfbWluX2FycmF5X3NpemU2NCgpLCBC TE9DS19TSVpFNjQsCi0JICAgICJBcnJheSBzaXplIHRvbyBzbWFsbCIpOwotCWN0eCA9IGluaXRf Z2VuX3JhbmQoNDMyMSk7Ci0JZmlsbF9hcnJheTY0KGN0eCwgYXJyYXk2NCwgQkxPQ0tfU0laRTY0 KTsKLQlmaWxsX2FycmF5NjQoY3R4LCBhcnJheTY0XzIsIEJMT0NLX1NJWkU2NCk7Ci0JZmluaV9n ZW5fcmFuZChjdHgpOwotCi0JY3R4ID0gaW5pdF9nZW5fcmFuZCg0MzIxKTsKLQlmb3IgKGkgPSAw OyBpIDwgQkxPQ0tfU0laRTY0OyBpKyspIHsKLQkJaWYgKGkgPCBDT1VOVF8xKSB7Ci0JCQlleHBl Y3RfdTY0X2VxKGFycmF5NjRbaV0sIGluaXRfZ2VuX3JhbmRfNjRfZXhwZWN0ZWRbaV0sCi0JCQkg ICAgIk91dHB1dCBtaXNtYXRjaCBmb3IgaT0lZCIsIGkpOwotCQl9Ci0JCXIgPSBnZW5fcmFuZDY0 KGN0eCk7Ci0JCWV4cGVjdF91NjRfZXEociwgYXJyYXk2NFtpXSwKLQkJICAgICJNaXNtYXRjaCBh dCBhcnJheTY0WyVkXT0lIkZNVHg2NCIsIGdlbj0lIkZNVHg2NCwgaSwKLQkJICAgIGFycmF5NjRb aV0sIHIpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgQ09VTlRfMjsgaSsrKSB7Ci0JCXIgPSBnZW5f cmFuZDY0KGN0eCk7Ci0JCWV4cGVjdF91NjRfZXEociwgYXJyYXk2NF8yW2ldLAotCQkgICAgIk1p c21hdGNoIGF0IGFycmF5NjRfMlslZF09JSJGTVR4NjQiIGdlbj0lIkZNVHg2NCIiLCBpLAotCQkg ICAgYXJyYXk2NF8yW2ldLCByKTsKLQl9Ci0JZmluaV9nZW5fcmFuZChjdHgpOwotfQotVEVTVF9F TkQKLQotVEVTVF9CRUdJTih0ZXN0X2J5X2FycmF5XzY0KSB7Ci0JdWludDY0X3QgYXJyYXk2NFtC TE9DS19TSVpFNjRdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikpOwotCXVpbnQ2NF90IGFycmF5 NjRfMltCTE9DS19TSVpFNjRdIEpFTUFMTE9DX0FUVFIoYWxpZ25lZCgxNikpOwotCWludCBpOwot CXVpbnQ2NF90IHI7Ci0JdWludDMyX3QgaW5pW10gPSB7NSwgNCwgMywgMiwgMX07Ci0Jc2ZtdF90 ICpjdHg7Ci0KLQlleHBlY3RfZF9sZShnZXRfbWluX2FycmF5X3NpemU2NCgpLCBCTE9DS19TSVpF NjQsCi0JICAgICJBcnJheSBzaXplIHRvbyBzbWFsbCIpOwotCWN0eCA9IGluaXRfYnlfYXJyYXko aW5pLCA1KTsKLQlmaWxsX2FycmF5NjQoY3R4LCBhcnJheTY0LCBCTE9DS19TSVpFNjQpOwotCWZp bGxfYXJyYXk2NChjdHgsIGFycmF5NjRfMiwgQkxPQ0tfU0laRTY0KTsKLQlmaW5pX2dlbl9yYW5k KGN0eCk7Ci0KLQljdHggPSBpbml0X2J5X2FycmF5KGluaSwgNSk7Ci0JZm9yIChpID0gMDsgaSA8 IEJMT0NLX1NJWkU2NDsgaSsrKSB7Ci0JCWlmIChpIDwgQ09VTlRfMSkgewotCQkJZXhwZWN0X3U2 NF9lcShhcnJheTY0W2ldLCBpbml0X2J5X2FycmF5XzY0X2V4cGVjdGVkW2ldLAotCQkJICAgICJP dXRwdXQgbWlzbWF0Y2ggZm9yIGk9JWQiLCBpKTsKLQkJfQotCQlyID0gZ2VuX3JhbmQ2NChjdHgp OwotCQlleHBlY3RfdTY0X2VxKHIsIGFycmF5NjRbaV0sCi0JCSAgICAiTWlzbWF0Y2ggYXQgYXJy YXk2NFslZF09JSJGTVR4NjQiIGdlbj0lIkZNVHg2NCwgaSwKLQkJICAgIGFycmF5NjRbaV0sIHIp OwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgQ09VTlRfMjsgaSsrKSB7Ci0JCXIgPSBnZW5fcmFuZDY0 KGN0eCk7Ci0JCWV4cGVjdF91NjRfZXEociwgYXJyYXk2NF8yW2ldLAotCQkgICAgIk1pc21hdGNo IGF0IGFycmF5NjRfMlslZF09JSJGTVR4NjQiIGdlbj0lIkZNVHg2NCwgaSwKLQkJICAgIGFycmF5 NjRfMltpXSwgcik7Ci0JfQotCWZpbmlfZ2VuX3JhbmQoY3R4KTsKLX0KLVRFU1RfRU5ECi0KLWlu dAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfZ2VuX3JhbmRfMzIsCi0J ICAgIHRlc3RfYnlfYXJyYXlfMzIsCi0JICAgIHRlc3RfZ2VuX3JhbmRfNjQsCi0JICAgIHRlc3Rf YnlfYXJyYXlfNjQpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hMC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L2EwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGMxYmU3OWEuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L2EwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jaW5j bHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLVRFU1RfQkVHSU4odGVzdF9hMCkgewotCXZv aWQgKnA7Ci0KLQlwID0gYTBtYWxsb2MoMSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5l eHBlY3RlZCBhMG1hbGxvYygpIGVycm9yIik7Ci0JYTBkYWxsb2MocCk7Ci19Ci1URVNUX0VORAot Ci1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0X25vX21hbGxvY19pbml0KAotCSAgICB0 ZXN0X2EwKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvYXJlbmFfZGVjYXkuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9kZWNheS5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBlOTkxZjRkLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9kZWNheS5jCisrKyAvZGV2L251bGwK QEAgLTEsNDM2ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLSNpbmNs dWRlICJ0ZXN0L2FyZW5hX3V0aWwuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Rp Y2tlci5oIgotCi1zdGF0aWMgbnN0aW1lX21vbm90b25pY190ICpuc3RpbWVfbW9ub3RvbmljX29y aWc7Ci1zdGF0aWMgbnN0aW1lX3VwZGF0ZV90ICpuc3RpbWVfdXBkYXRlX29yaWc7Ci0KLXN0YXRp YyB1bnNpZ25lZCBudXBkYXRlc19tb2NrOwotc3RhdGljIG5zdGltZV90IHRpbWVfbW9jazsKLXN0 YXRpYyBib29sIG1vbm90b25pY19tb2NrOwotCi1zdGF0aWMgYm9vbAotbnN0aW1lX21vbm90b25p Y19tb2NrKHZvaWQpIHsKLQlyZXR1cm4gbW9ub3RvbmljX21vY2s7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1uc3RpbWVfdXBkYXRlX21vY2sobnN0aW1lX3QgKnRpbWUpIHsKLQludXBkYXRlc19tb2NrKys7 Ci0JaWYgKG1vbm90b25pY19tb2NrKSB7Ci0JCW5zdGltZV9jb3B5KHRpbWUsICZ0aW1lX21vY2sp OwotCX0KLX0KLQotVEVTVF9CRUdJTih0ZXN0X2RlY2F5X3RpY2tzKSB7Ci0JdGVzdF9za2lwX2lm KGlzX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoKSk7Ci0JdGVzdF9za2lwX2lmKG9wdF9ocGEp OwotCi0JdGlja2VyX2dlb21fdCAqZGVjYXlfdGlja2VyOwotCXVuc2lnbmVkIHRpY2swLCB0aWNr MSwgYXJlbmFfaW5kOwotCXNpemVfdCBzeiwgbGFyZ2UwOwotCXZvaWQgKnA7Ci0KLQlzeiA9IHNp emVvZihzaXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sZXh0ZW50LjAuc2l6 ZSIsICh2b2lkICopJmxhcmdlMCwgJnN6LCBOVUxMLAotCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCBmYWlsdXJlIik7Ci0KLQkvKiBTZXQgdXAgYSBtYW51YWxseSBtYW5hZ2VkIGFyZW5h IGZvciB0ZXN0LiAqLwotCWFyZW5hX2luZCA9IGRvX2FyZW5hX2NyZWF0ZSgwLCAwKTsKLQotCS8q IE1pZ3JhdGUgdG8gdGhlIG5ldyBhcmVuYSwgYW5kIGdldCB0aGUgdGlja2VyLiAqLwotCXVuc2ln bmVkIG9sZF9hcmVuYV9pbmQ7Ci0Jc2l6ZV90IHN6X2FyZW5hX2luZCA9IHNpemVvZihvbGRfYXJl bmFfaW5kKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAodm9pZCAqKSZv bGRfYXJlbmFfaW5kLAotCSAgICAmc3pfYXJlbmFfaW5kLCAodm9pZCAqKSZhcmVuYV9pbmQsIHNp emVvZihhcmVuYV9pbmQpKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUi KTsKLQlkZWNheV90aWNrZXIgPSB0c2RfYXJlbmFfZGVjYXlfdGlja2VycF9nZXQodHNkX2ZldGNo KCkpOwotCWV4cGVjdF9wdHJfbm90X251bGwoZGVjYXlfdGlja2VyLAotCSAgICAiVW5leHBlY3Rl ZCBmYWlsdXJlIGdldHRpbmcgZGVjYXkgdGlja2VyIik7Ci0KLQkvKgotCSAqIFRlc3QgdGhlIHN0 YW5kYXJkIEFQSXMgdXNpbmcgYSBsYXJnZSBzaXplIGNsYXNzLCBzaW5jZSB3ZSBjYW4ndAotCSAq IGNvbnRyb2wgdGNhY2hlIGludGVyYWN0aW9ucyBmb3Igc21hbGwgc2l6ZSBjbGFzc2VzIChleGNl cHQgYnkKLQkgKiBjb21wbGV0ZWx5IGRpc2FibGluZyB0Y2FjaGUgZm9yIHRoZSBlbnRpcmUgdGVz dCBwcm9ncmFtKS4KLQkgKi8KLQotCS8qIG1hbGxvYygpLiAqLwotCXRpY2swID0gdGlja2VyX2dl b21fcmVhZChkZWNheV90aWNrZXIpOwotCXAgPSBtYWxsb2MobGFyZ2UwKTsKLQlleHBlY3RfcHRy X25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKLQl0aWNrMSA9IHRp Y2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQlleHBlY3RfdTMyX25lKHRpY2sxLCB0aWNr MCwgIkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyBtYWxsb2MoKSIpOwotCS8qIGZyZWUo KS4gKi8KLQl0aWNrMCA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQlmcmVlKHAp OwotCXRpY2sxID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOwotCWV4cGVjdF91MzJf bmUodGljazEsIHRpY2swLCAiRXhwZWN0ZWQgdGlja2VyIHRvIHRpY2sgZHVyaW5nIGZyZWUoKSIp OwotCi0JLyogY2FsbG9jKCkuICovCi0JdGljazAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3Rp Y2tlcik7Ci0JcCA9IGNhbGxvYygxLCBsYXJnZTApOwotCWV4cGVjdF9wdHJfbm90X251bGwocCwg IlVuZXhwZWN0ZWQgY2FsbG9jKCkgZmFpbHVyZSIpOwotCXRpY2sxID0gdGlja2VyX2dlb21fcmVh ZChkZWNheV90aWNrZXIpOwotCWV4cGVjdF91MzJfbmUodGljazEsIHRpY2swLCAiRXhwZWN0ZWQg dGlja2VyIHRvIHRpY2sgZHVyaW5nIGNhbGxvYygpIik7Ci0JZnJlZShwKTsKLQotCS8qIHBvc2l4 X21lbWFsaWduKCkuICovCi0JdGljazAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7 Ci0JZXhwZWN0X2RfZXEocG9zaXhfbWVtYWxpZ24oJnAsIHNpemVvZihzaXplX3QpLCBsYXJnZTAp LCAwLAotCSAgICAiVW5leHBlY3RlZCBwb3NpeF9tZW1hbGlnbigpIGZhaWx1cmUiKTsKLQl0aWNr MSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQlleHBlY3RfdTMyX25lKHRpY2sx LCB0aWNrMCwKLQkgICAgIkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyBwb3NpeF9tZW1h bGlnbigpIik7Ci0JZnJlZShwKTsKLQotCS8qIGFsaWduZWRfYWxsb2MoKS4gKi8KLQl0aWNrMCA9 IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQlwID0gYWxpZ25lZF9hbGxvYyhzaXpl b2Yoc2l6ZV90KSwgbGFyZ2UwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVk IGFsaWduZWRfYWxsb2MoKSBmYWlsdXJlIik7Ci0JdGljazEgPSB0aWNrZXJfZ2VvbV9yZWFkKGRl Y2F5X3RpY2tlcik7Ci0JZXhwZWN0X3UzMl9uZSh0aWNrMSwgdGljazAsCi0JICAgICJFeHBlY3Rl ZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgYWxpZ25lZF9hbGxvYygpIik7Ci0JZnJlZShwKTsKLQot CS8qIHJlYWxsb2MoKS4gKi8KLQkvKiBBbGxvY2F0ZS4gKi8KLQl0aWNrMCA9IHRpY2tlcl9nZW9t X3JlYWQoZGVjYXlfdGlja2VyKTsKLQlwID0gcmVhbGxvYyhOVUxMLCBsYXJnZTApOwotCWV4cGVj dF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgcmVhbGxvYygpIGZhaWx1cmUiKTsKLQl0aWNr MSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQlleHBlY3RfdTMyX25lKHRpY2sx LCB0aWNrMCwgIkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyByZWFsbG9jKCkiKTsKLQkv KiBSZWFsbG9jYXRlLiAqLwotCXRpY2swID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIp OwotCXAgPSByZWFsbG9jKHAsIGxhcmdlMCk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5l eHBlY3RlZCByZWFsbG9jKCkgZmFpbHVyZSIpOwotCXRpY2sxID0gdGlja2VyX2dlb21fcmVhZChk ZWNheV90aWNrZXIpOwotCWV4cGVjdF91MzJfbmUodGljazEsIHRpY2swLCAiRXhwZWN0ZWQgdGlj a2VyIHRvIHRpY2sgZHVyaW5nIHJlYWxsb2MoKSIpOwotCS8qIERlYWxsb2NhdGUuICovCi0JdGlj azAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7Ci0JcmVhbGxvYyhwLCAwKTsKLQl0 aWNrMSA9IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQlleHBlY3RfdTMyX25lKHRp Y2sxLCB0aWNrMCwgIkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyByZWFsbG9jKCkiKTsK LQotCS8qCi0JICogVGVzdCB0aGUgKmFsbG9jeCgpIEFQSXMgdXNpbmcgbGFyZ2UgYW5kIHNtYWxs IHNpemUgY2xhc3Nlcywgd2l0aAotCSAqIHRjYWNoZSBleHBsaWNpdGx5IGRpc2FibGVkLgotCSAq LwotCXsKLQkJdW5zaWduZWQgaTsKLQkJc2l6ZV90IGFsbG9jeF9zaXplc1syXTsKLQkJYWxsb2N4 X3NpemVzWzBdID0gbGFyZ2UwOwotCQlhbGxvY3hfc2l6ZXNbMV0gPSAxOwotCi0JCWZvciAoaSA9 IDA7IGkgPCBzaXplb2YoYWxsb2N4X3NpemVzKSAvIHNpemVvZihzaXplX3QpOyBpKyspIHsKLQkJ CXN6ID0gYWxsb2N4X3NpemVzW2ldOwotCi0JCQkvKiBtYWxsb2N4KCkuICovCi0JCQl0aWNrMCA9 IHRpY2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQkJCXAgPSBtYWxsb2N4KHN6LCBNQUxM T0NYX1RDQUNIRV9OT05FKTsKLQkJCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQg bWFsbG9jeCgpIGZhaWx1cmUiKTsKLQkJCXRpY2sxID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90 aWNrZXIpOwotCQkJZXhwZWN0X3UzMl9uZSh0aWNrMSwgdGljazAsCi0JCQkgICAgIkV4cGVjdGVk IHRpY2tlciB0byB0aWNrIGR1cmluZyBtYWxsb2N4KCkgKHN6PSV6dSkiLAotCQkJICAgIHN6KTsK LQkJCS8qIHJhbGxvY3goKS4gKi8KLQkJCXRpY2swID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90 aWNrZXIpOwotCQkJcCA9IHJhbGxvY3gocCwgc3osIE1BTExPQ1hfVENBQ0hFX05PTkUpOwotCQkJ ZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCByYWxsb2N4KCkgZmFpbHVyZSIpOwot CQkJdGljazEgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7Ci0JCQlleHBlY3RfdTMy X25lKHRpY2sxLCB0aWNrMCwKLQkJCSAgICAiRXhwZWN0ZWQgdGlja2VyIHRvIHRpY2sgZHVyaW5n IHJhbGxvY3goKSAoc3o9JXp1KSIsCi0JCQkgICAgc3opOwotCQkJLyogeGFsbG9jeCgpLiAqLwot CQkJdGljazAgPSB0aWNrZXJfZ2VvbV9yZWFkKGRlY2F5X3RpY2tlcik7Ci0JCQl4YWxsb2N4KHAs IHN6LCAwLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQkJCXRpY2sxID0gdGlja2VyX2dlb21fcmVh ZChkZWNheV90aWNrZXIpOwotCQkJZXhwZWN0X3UzMl9uZSh0aWNrMSwgdGljazAsCi0JCQkgICAg IkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyB4YWxsb2N4KCkgKHN6PSV6dSkiLAotCQkJ ICAgIHN6KTsKLQkJCS8qIGRhbGxvY3goKS4gKi8KLQkJCXRpY2swID0gdGlja2VyX2dlb21fcmVh ZChkZWNheV90aWNrZXIpOwotCQkJZGFsbG9jeChwLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQkJ CXRpY2sxID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOwotCQkJZXhwZWN0X3UzMl9u ZSh0aWNrMSwgdGljazAsCi0JCQkgICAgIkV4cGVjdGVkIHRpY2tlciB0byB0aWNrIGR1cmluZyBk YWxsb2N4KCkgKHN6PSV6dSkiLAotCQkJICAgIHN6KTsKLQkJCS8qIHNkYWxsb2N4KCkuICovCi0J CQlwID0gbWFsbG9jeChzeiwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JCQlleHBlY3RfcHRyX25v dF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7Ci0JCQl0aWNrMCA9IHRp Y2tlcl9nZW9tX3JlYWQoZGVjYXlfdGlja2VyKTsKLQkJCXNkYWxsb2N4KHAsIHN6LCBNQUxMT0NY X1RDQUNIRV9OT05FKTsKLQkJCXRpY2sxID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIp OwotCQkJZXhwZWN0X3UzMl9uZSh0aWNrMSwgdGljazAsCi0JCQkgICAgIkV4cGVjdGVkIHRpY2tl ciB0byB0aWNrIGR1cmluZyBzZGFsbG9jeCgpICIKLQkJCSAgICAiKHN6PSV6dSkiLCBzeik7Ci0J CX0KLQl9Ci0KLQkvKgotCSAqIFRlc3QgdGNhY2hlIGZpbGwvZmx1c2ggaW50ZXJhY3Rpb25zIGZv ciBsYXJnZSBhbmQgc21hbGwgc2l6ZSBjbGFzc2VzLAotCSAqIHVzaW5nIGFuIGV4cGxpY2l0IHRj YWNoZS4KLQkgKi8KLQl1bnNpZ25lZCB0Y2FjaGVfaW5kLCBpOwotCXNpemVfdCB0Y2FjaGVfc2l6 ZXNbMl07Ci0JdGNhY2hlX3NpemVzWzBdID0gbGFyZ2UwOwotCXRjYWNoZV9zaXplc1sxXSA9IDE7 Ci0KLQlzaXplX3QgdGNhY2hlX21heCwgc3pfdGNhY2hlX21heDsKLQlzel90Y2FjaGVfbWF4ID0g c2l6ZW9mKHRjYWNoZV9tYXgpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy50Y2FjaGVf bWF4IiwgKHZvaWQgKikmdGNhY2hlX21heCwKLQkgICAgJnN6X3RjYWNoZV9tYXgsIE5VTEwsIDAp LCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCi0Jc3ogPSBzaXplb2YodW5z aWduZWQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRjYWNoZS5jcmVhdGUiLCAodm9pZCAqKSZ0 Y2FjaGVfaW5kLCAmc3osCi0JICAgIE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZh aWx1cmUiKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodGNhY2hlX3NpemVzKSAvIHNpemVv ZihzaXplX3QpOyBpKyspIHsKLQkJc3ogPSB0Y2FjaGVfc2l6ZXNbaV07Ci0KLQkJLyogdGNhY2hl IGZpbGwuICovCi0JCXRpY2swID0gdGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOwotCQlw ID0gbWFsbG9jeChzeiwgTUFMTE9DWF9UQ0FDSEUodGNhY2hlX2luZCkpOwotCQlleHBlY3RfcHRy X25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7Ci0JCXRpY2sxID0g dGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOwotCQlleHBlY3RfdTMyX25lKHRpY2sxLCB0 aWNrMCwKLQkJICAgICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgdGNhY2hlIGZpbGwg IgotCQkgICAgIihzej0lenUpIiwgc3opOwotCQkvKiB0Y2FjaGUgZmx1c2guICovCi0JCWRhbGxv Y3gocCwgTUFMTE9DWF9UQ0FDSEUodGNhY2hlX2luZCkpOwotCQl0aWNrMCA9IHRpY2tlcl9nZW9t X3JlYWQoZGVjYXlfdGlja2VyKTsKLQkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGNhY2hlLmZsdXNo IiwgTlVMTCwgTlVMTCwKLQkJICAgICh2b2lkICopJnRjYWNoZV9pbmQsIHNpemVvZih1bnNpZ25l ZCkpLCAwLAotCQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci0JCXRpY2sxID0g dGlja2VyX2dlb21fcmVhZChkZWNheV90aWNrZXIpOwotCi0JCS8qIFdpbGwgb25seSB0aWNrIGlm IGl0J3MgaW4gdGNhY2hlLiAqLwotCQlleHBlY3RfdTMyX25lKHRpY2sxLCB0aWNrMCwKLQkJICAg ICJFeHBlY3RlZCB0aWNrZXIgdG8gdGljayBkdXJpbmcgdGNhY2hlIGZsdXNoIChzej0lenUpIiwg c3opOwotCX0KLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1kZWNheV90aWNrZXJfaGVscGVy KHVuc2lnbmVkIGFyZW5hX2luZCwgaW50IGZsYWdzLCBib29sIGRpcnR5LCBzc2l6ZV90IGR0LAot ICAgIHVpbnQ2NF90IGRpcnR5X25wdXJnZTAsIHVpbnQ2NF90IG11enp5X25wdXJnZTAsIGJvb2wg dGVybWluYXRlX2FzYXApIHsKLSNkZWZpbmUgTklOVEVSVkFMUyAxMDEKLQluc3RpbWVfdCB0aW1l LCB1cGRhdGVfaW50ZXJ2YWwsIGRlY2F5X21zLCBkZWFkbGluZTsKLQotCW5zdGltZV9pbml0X3Vw ZGF0ZSgmdGltZSk7Ci0KLQluc3RpbWVfaW5pdDIoJmRlY2F5X21zLCBkdCwgMCk7Ci0JbnN0aW1l X2NvcHkoJmRlYWRsaW5lLCAmdGltZSk7Ci0JbnN0aW1lX2FkZCgmZGVhZGxpbmUsICZkZWNheV9t cyk7Ci0KLQluc3RpbWVfaW5pdDIoJnVwZGF0ZV9pbnRlcnZhbCwgZHQsIDApOwotCW5zdGltZV9p ZGl2aWRlKCZ1cGRhdGVfaW50ZXJ2YWwsIE5JTlRFUlZBTFMpOwotCi0JLyoKLQkgKiBLZWVwIHEn cyBzbGFiIGZyb20gYmVpbmcgZGVhbGxvY2F0ZWQgZHVyaW5nIHRoZSBsb29waW5nIGJlbG93LiAg SWYgYQotCSAqIGNhY2hlZCBzbGFiIHdlcmUgdG8gcmVwZWF0ZWRseSBjb21lIGFuZCBnbyBkdXJp bmcgbG9vcGluZywgaXQgY291bGQKLQkgKiBwcmV2ZW50IHRoZSBkZWNheSBiYWNrbG9nIGV2ZXIg YmVjb21pbmcgZW1wdHkuCi0JICovCi0Jdm9pZCAqcCA9IGRvX21hbGxvY3goMSwgZmxhZ3MpOwot CXVpbnQ2NF90IGRpcnR5X25wdXJnZTEsIG11enp5X25wdXJnZTE7Ci0JZG8gewotCQlmb3IgKHVu c2lnbmVkIGkgPSAwOyBpIDwgQVJFTkFfREVDQVlfTlRJQ0tTX1BFUl9VUERBVEUgLyAyOwotCQkg ICAgaSsrKSB7Ci0JCQl2b2lkICpxID0gZG9fbWFsbG9jeCgxLCBmbGFncyk7Ci0JCQlkYWxsb2N4 KHEsIGZsYWdzKTsKLQkJfQotCQlkaXJ0eV9ucHVyZ2UxID0gZ2V0X2FyZW5hX2RpcnR5X25wdXJn ZShhcmVuYV9pbmQpOwotCQltdXp6eV9ucHVyZ2UxID0gZ2V0X2FyZW5hX211enp5X25wdXJnZShh cmVuYV9pbmQpOwotCi0JCW5zdGltZV9hZGQoJnRpbWVfbW9jaywgJnVwZGF0ZV9pbnRlcnZhbCk7 Ci0JCW5zdGltZV91cGRhdGUoJnRpbWUpOwotCX0gd2hpbGUgKG5zdGltZV9jb21wYXJlKCZ0aW1l LCAmZGVhZGxpbmUpIDw9IDAgJiYgKChkaXJ0eV9ucHVyZ2UxID09Ci0JICAgIGRpcnR5X25wdXJn ZTAgJiYgbXV6enlfbnB1cmdlMSA9PSBtdXp6eV9ucHVyZ2UwKSB8fAotCSAgICAhdGVybWluYXRl X2FzYXApKTsKLQlkYWxsb2N4KHAsIGZsYWdzKTsKLQotCWlmIChjb25maWdfc3RhdHMpIHsKLQkJ ZXhwZWN0X3U2NF9ndChkaXJ0eV9ucHVyZ2UxICsgbXV6enlfbnB1cmdlMSwgZGlydHlfbnB1cmdl MCArCi0JCSAgICBtdXp6eV9ucHVyZ2UwLCAiRXhwZWN0ZWQgcHVyZ2luZyB0byBvY2N1ciIpOwot CX0KLSN1bmRlZiBOSU5URVJWQUxTCi19Ci0KLVRFU1RfQkVHSU4odGVzdF9kZWNheV90aWNrZXIp IHsKLQl0ZXN0X3NraXBfaWYoaXNfYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpKTsKLQl0ZXN0 X3NraXBfaWYob3B0X2hwYSk7Ci0jZGVmaW5lIE5QUyAyMDQ4Ci0Jc3NpemVfdCBkZHQgPSBvcHRf ZGlydHlfZGVjYXlfbXM7Ci0Jc3NpemVfdCBtZHQgPSBvcHRfbXV6enlfZGVjYXlfbXM7Ci0JdW5z aWduZWQgYXJlbmFfaW5kID0gZG9fYXJlbmFfY3JlYXRlKGRkdCwgbWR0KTsKLQlpbnQgZmxhZ3Mg PSAoTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0Jdm9p ZCAqcHNbTlBTXTsKLQotCS8qCi0JICogQWxsb2NhdGUgYSBidW5jaCBvZiBsYXJnZSBvYmplY3Rz LCBwYXVzZSB0aGUgY2xvY2ssIGRlYWxsb2NhdGUgZXZlcnkKLQkgKiBvdGhlciBvYmplY3QgKHRv IGZyYWdtZW50IHZpcnR1YWwgbWVtb3J5KSwgcmVzdG9yZSB0aGUgY2xvY2ssIHRoZW4KLQkgKiBb bWRdYWxsb2N4KCkgaW4gYSB0aWdodCBsb29wIHdoaWxlIGFkdmFuY2luZyB0aW1lIHJhcGlkbHkg dG8gdmVyaWZ5Ci0JICogdGhlIHRpY2tlciB0cmlnZ2VycyBwdXJnaW5nLgotCSAqLwotCXNpemVf dCBsYXJnZTsKLQlzaXplX3Qgc3ogPSBzaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxs Y3RsKCJhcmVuYXMubGV4dGVudC4wLnNpemUiLCAodm9pZCAqKSZsYXJnZSwgJnN6LCBOVUxMLAot CSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci0KLQlkb19wdXJnZShh cmVuYV9pbmQpOwotCXVpbnQ2NF90IGRpcnR5X25wdXJnZTAgPSBnZXRfYXJlbmFfZGlydHlfbnB1 cmdlKGFyZW5hX2luZCk7Ci0JdWludDY0X3QgbXV6enlfbnB1cmdlMCA9IGdldF9hcmVuYV9tdXp6 eV9ucHVyZ2UoYXJlbmFfaW5kKTsKLQotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOUFM7IGkr KykgewotCQlwc1tpXSA9IGRvX21hbGxvY3gobGFyZ2UsIGZsYWdzKTsKLQl9Ci0KLQludXBkYXRl c19tb2NrID0gMDsKLQluc3RpbWVfaW5pdF91cGRhdGUoJnRpbWVfbW9jayk7Ci0JbW9ub3Rvbmlj X21vY2sgPSB0cnVlOwotCi0JbnN0aW1lX21vbm90b25pY19vcmlnID0gbnN0aW1lX21vbm90b25p YzsKLQluc3RpbWVfdXBkYXRlX29yaWcgPSBuc3RpbWVfdXBkYXRlOwotCW5zdGltZV9tb25vdG9u aWMgPSBuc3RpbWVfbW9ub3RvbmljX21vY2s7Ci0JbnN0aW1lX3VwZGF0ZSA9IG5zdGltZV91cGRh dGVfbW9jazsKLQotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOUFM7IGkgKz0gMikgewotCQlk YWxsb2N4KHBzW2ldLCBmbGFncyk7Ci0JCXVuc2lnbmVkIG51cGRhdGVzMCA9IG51cGRhdGVzX21v Y2s7Ci0JCWRvX2RlY2F5KGFyZW5hX2luZCk7Ci0JCWV4cGVjdF91X2d0KG51cGRhdGVzX21vY2ss IG51cGRhdGVzMCwKLQkJICAgICJFeHBlY3RlZCBuc3RpbWVfdXBkYXRlKCkgdG8gYmUgY2FsbGVk Iik7Ci0JfQotCi0JZGVjYXlfdGlja2VyX2hlbHBlcihhcmVuYV9pbmQsIGZsYWdzLCB0cnVlLCBk ZHQsIGRpcnR5X25wdXJnZTAsCi0JICAgIG11enp5X25wdXJnZTAsIHRydWUpOwotCWRlY2F5X3Rp Y2tlcl9oZWxwZXIoYXJlbmFfaW5kLCBmbGFncywgZmFsc2UsIGRkdCttZHQsIGRpcnR5X25wdXJn ZTAsCi0JICAgIG11enp5X25wdXJnZTAsIGZhbHNlKTsKLQotCWRvX2FyZW5hX2Rlc3Ryb3koYXJl bmFfaW5kKTsKLQotCW5zdGltZV9tb25vdG9uaWMgPSBuc3RpbWVfbW9ub3RvbmljX29yaWc7Ci0J bnN0aW1lX3VwZGF0ZSA9IG5zdGltZV91cGRhdGVfb3JpZzsKLSN1bmRlZiBOUFMKLX0KLVRFU1Rf RU5ECi0KLVRFU1RfQkVHSU4odGVzdF9kZWNheV9ub25tb25vdG9uaWMpIHsKLQl0ZXN0X3NraXBf aWYoaXNfYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpKTsKLQl0ZXN0X3NraXBfaWYob3B0X2hw YSk7Ci0jZGVmaW5lIE5QUyAoU01PT1RIU1RFUF9OU1RFUFMgKyAxKQotCWludCBmbGFncyA9IChN QUxMT0NYX0FSRU5BKDApIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0Jdm9pZCAqcHNbTlBTXTsK LQl1aW50NjRfdCBucHVyZ2UwID0gMDsKLQl1aW50NjRfdCBucHVyZ2UxID0gMDsKLQlzaXplX3Qg c3osIGxhcmdlMDsKLQl1bnNpZ25lZCBpLCBudXBkYXRlczA7Ci0KLQlzeiA9IHNpemVvZihzaXpl X3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sZXh0ZW50LjAuc2l6ZSIsICh2b2lk ICopJmxhcmdlMCwgJnN6LCBOVUxMLAotCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBm YWlsdXJlIik7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYS4wLnB1cmdlIiwgTlVMTCwg TlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOwot CWRvX2Vwb2NoKCk7Ci0Jc3ogPSBzaXplb2YodWludDY0X3QpOwotCW5wdXJnZTAgPSBnZXRfYXJl bmFfbnB1cmdlKDApOwotCi0JbnVwZGF0ZXNfbW9jayA9IDA7Ci0JbnN0aW1lX2luaXRfdXBkYXRl KCZ0aW1lX21vY2spOwotCW1vbm90b25pY19tb2NrID0gZmFsc2U7Ci0KLQluc3RpbWVfbW9ub3Rv bmljX29yaWcgPSBuc3RpbWVfbW9ub3RvbmljOwotCW5zdGltZV91cGRhdGVfb3JpZyA9IG5zdGlt ZV91cGRhdGU7Ci0JbnN0aW1lX21vbm90b25pYyA9IG5zdGltZV9tb25vdG9uaWNfbW9jazsKLQlu c3RpbWVfdXBkYXRlID0gbnN0aW1lX3VwZGF0ZV9tb2NrOwotCi0JZm9yIChpID0gMDsgaSA8IE5Q UzsgaSsrKSB7Ci0JCXBzW2ldID0gbWFsbG9jeChsYXJnZTAsIGZsYWdzKTsKLQkJZXhwZWN0X3B0 cl9ub3RfbnVsbChwc1tpXSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQl9Ci0K LQlmb3IgKGkgPSAwOyBpIDwgTlBTOyBpKyspIHsKLQkJZGFsbG9jeChwc1tpXSwgZmxhZ3MpOwot CQludXBkYXRlczAgPSBudXBkYXRlc19tb2NrOwotCQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVu YS4wLmRlY2F5IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JCSAgICAiVW5leHBlY3RlZCBh cmVuYS4wLmRlY2F5IGZhaWx1cmUiKTsKLQkJZXhwZWN0X3VfZ3QobnVwZGF0ZXNfbW9jaywgbnVw ZGF0ZXMwLAotCQkgICAgIkV4cGVjdGVkIG5zdGltZV91cGRhdGUoKSB0byBiZSBjYWxsZWQiKTsK LQl9Ci0KLQlkb19lcG9jaCgpOwotCXN6ID0gc2l6ZW9mKHVpbnQ2NF90KTsKLQlucHVyZ2UxID0g Z2V0X2FyZW5hX25wdXJnZSgwKTsKLQotCWlmIChjb25maWdfc3RhdHMpIHsKLQkJZXhwZWN0X3U2 NF9lcShucHVyZ2UwLCBucHVyZ2UxLCAiVW5leHBlY3RlZCBwdXJnaW5nIG9jY3VycmVkIik7Ci0J fQotCi0JbnN0aW1lX21vbm90b25pYyA9IG5zdGltZV9tb25vdG9uaWNfb3JpZzsKLQluc3RpbWVf dXBkYXRlID0gbnN0aW1lX3VwZGF0ZV9vcmlnOwotI3VuZGVmIE5QUwotfQotVEVTVF9FTkQKLQot VEVTVF9CRUdJTih0ZXN0X2RlY2F5X25vdykgewotCXRlc3Rfc2tpcF9pZihpc19iYWNrZ3JvdW5k X3RocmVhZF9lbmFibGVkKCkpOwotCXRlc3Rfc2tpcF9pZihvcHRfaHBhKTsKLQotCXVuc2lnbmVk IGFyZW5hX2luZCA9IGRvX2FyZW5hX2NyZWF0ZSgwLCAwKTsKLQlleHBlY3RfenVfZXEoZ2V0X2Fy ZW5hX3BkaXJ0eShhcmVuYV9pbmQpLCAwLCAiVW5leHBlY3RlZCBkaXJ0eSBwYWdlcyIpOwotCWV4 cGVjdF96dV9lcShnZXRfYXJlbmFfcG11enp5KGFyZW5hX2luZCksIDAsICJVbmV4cGVjdGVkIG11 enp5IHBhZ2VzIik7Ci0Jc2l6ZV90IHNpemVzW10gPSB7MTYsIFBBR0U8PDIsIEhVR0VQQUdFPDwy fTsKLQkvKiBWZXJpZnkgdGhhdCBkaXJ0eS9tdXp6eSBwYWdlcyBuZXZlciBsaW5nZXIgYWZ0ZXIg ZGVhbGxvY2F0aW9uLiAqLwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2Yoc2l6ZXMp L3NpemVvZihzaXplX3QpOyBpKyspIHsKLQkJc2l6ZV90IHNpemUgPSBzaXplc1tpXTsKLQkJZ2Vu ZXJhdGVfZGlydHkoYXJlbmFfaW5kLCBzaXplKTsKLQkJZXhwZWN0X3p1X2VxKGdldF9hcmVuYV9w ZGlydHkoYXJlbmFfaW5kKSwgMCwKLQkJICAgICJVbmV4cGVjdGVkIGRpcnR5IHBhZ2VzIik7Ci0J CWV4cGVjdF96dV9lcShnZXRfYXJlbmFfcG11enp5KGFyZW5hX2luZCksIDAsCi0JCSAgICAiVW5l eHBlY3RlZCBtdXp6eSBwYWdlcyIpOwotCX0KLQlkb19hcmVuYV9kZXN0cm95KGFyZW5hX2luZCk7 Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfZGVjYXlfbmV2ZXIpIHsKLQl0ZXN0X3Nr aXBfaWYoaXNfYmFja2dyb3VuZF90aHJlYWRfZW5hYmxlZCgpIHx8ICFjb25maWdfc3RhdHMpOwot CXRlc3Rfc2tpcF9pZihvcHRfaHBhKTsKLQotCXVuc2lnbmVkIGFyZW5hX2luZCA9IGRvX2FyZW5h X2NyZWF0ZSgtMSwgLTEpOwotCWludCBmbGFncyA9IE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSB8 IE1BTExPQ1hfVENBQ0hFX05PTkU7Ci0JZXhwZWN0X3p1X2VxKGdldF9hcmVuYV9wZGlydHkoYXJl bmFfaW5kKSwgMCwgIlVuZXhwZWN0ZWQgZGlydHkgcGFnZXMiKTsKLQlleHBlY3RfenVfZXEoZ2V0 X2FyZW5hX3BtdXp6eShhcmVuYV9pbmQpLCAwLCAiVW5leHBlY3RlZCBtdXp6eSBwYWdlcyIpOwot CXNpemVfdCBzaXplc1tdID0gezE2LCBQQUdFPDwyLCBIVUdFUEFHRTw8Mn07Ci0Jdm9pZCAqcHRy c1tzaXplb2Yoc2l6ZXMpL3NpemVvZihzaXplX3QpXTsKLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgc2l6ZW9mKHNpemVzKS9zaXplb2Yoc2l6ZV90KTsgaSsrKSB7Ci0JCXB0cnNbaV0gPSBkb19t YWxsb2N4KHNpemVzW2ldLCBmbGFncyk7Ci0JfQotCS8qIFZlcmlmeSB0aGF0IGVhY2ggZGVhbGxv Y2F0aW9uIGdlbmVyYXRlcyBhZGRpdGlvbmFsIGRpcnR5IHBhZ2VzLiAqLwotCXNpemVfdCBwZGly dHlfcHJldiA9IGdldF9hcmVuYV9wZGlydHkoYXJlbmFfaW5kKTsKLQlzaXplX3QgcG11enp5X3By ZXYgPSBnZXRfYXJlbmFfcG11enp5KGFyZW5hX2luZCk7Ci0JZXhwZWN0X3p1X2VxKHBkaXJ0eV9w cmV2LCAwLCAiVW5leHBlY3RlZCBkaXJ0eSBwYWdlcyIpOwotCWV4cGVjdF96dV9lcShwbXV6enlf cHJldiwgMCwgIlVuZXhwZWN0ZWQgbXV6enkgcGFnZXMiKTsKLQlmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgc2l6ZW9mKHNpemVzKS9zaXplb2Yoc2l6ZV90KTsgaSsrKSB7Ci0JCWRhbGxvY3gocHRy c1tpXSwgZmxhZ3MpOwotCQlzaXplX3QgcGRpcnR5ID0gZ2V0X2FyZW5hX3BkaXJ0eShhcmVuYV9p bmQpOwotCQlzaXplX3QgcG11enp5ID0gZ2V0X2FyZW5hX3BtdXp6eShhcmVuYV9pbmQpOwotCQll eHBlY3RfenVfZ3QocGRpcnR5ICsgKHNpemVfdClnZXRfYXJlbmFfZGlydHlfcHVyZ2VkKGFyZW5h X2luZCksCi0JCSAgICBwZGlydHlfcHJldiwgIkV4cGVjdGVkIGRpcnR5IHBhZ2VzIHRvIGluY3Jl YXNlLiIpOwotCQlleHBlY3RfenVfZXEocG11enp5LCAwLCAiVW5leHBlY3RlZCBtdXp6eSBwYWdl cyIpOwotCQlwZGlydHlfcHJldiA9IHBkaXJ0eTsKLQl9Ci0JZG9fYXJlbmFfZGVzdHJveShhcmVu YV9pbmQpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgK LQkgICAgdGVzdF9kZWNheV90aWNrcywKLQkgICAgdGVzdF9kZWNheV90aWNrZXIsCi0JICAgIHRl c3RfZGVjYXlfbm9ubW9ub3RvbmljLAotCSAgICB0ZXN0X2RlY2F5X25vdywKLQkgICAgdGVzdF9k ZWNheV9uZXZlcik7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L2FyZW5hX2RlY2F5LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2FyZW5hX2RlY2F5LnNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA1MmYxYjIwLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9kZWNheS5zaAorKysgL2Rl di9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyEvYmluL3NoCi0KLWV4cG9ydCBNQUxMT0NfQ09ORj0i ZGlydHlfZGVjYXlfbXM6MTAwMCxtdXp6eV9kZWNheV9tczoxMDAwLHRjYWNoZV9tYXg6MTAyNCIK CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvYXJlbmFfcmVzZXQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9hcmVuYV9yZXNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA4ZWYwNzg2Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9yZXNldC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICsw LDAgQEAKLSNpZm5kZWYgQVJFTkFfUkVTRVRfUFJPRl9DXwotI2luY2x1ZGUgInRlc3QvamVtYWxs b2NfdGVzdC5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9leHRlbnRf bW1hcC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3J0cmVlLmgiCi0KLSNpbmNsdWRl ICJ0ZXN0L2V4dGVudF9ob29rcy5oIgotCi1zdGF0aWMgdW5zaWduZWQKLWdldF9uc2l6ZXNfaW1w bChjb25zdCBjaGFyICpjbWQpIHsKLQl1bnNpZ25lZCByZXQ7Ci0Jc2l6ZV90IHo7Ci0KLQl6ID0g c2l6ZW9mKHVuc2lnbmVkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKGNtZCwgKHZvaWQgKikmcmV0 LCAmeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoXCIlc1wiLCAuLi4p IGZhaWx1cmUiLCBjbWQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHVuc2lnbmVkCi1n ZXRfbnNtYWxsKHZvaWQpIHsKLQlyZXR1cm4gZ2V0X25zaXplc19pbXBsKCJhcmVuYXMubmJpbnMi KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkCi1nZXRfbmxhcmdlKHZvaWQpIHsKLQlyZXR1cm4gZ2V0 X25zaXplc19pbXBsKCJhcmVuYXMubmxleHRlbnRzIik7Ci19Ci0KLXN0YXRpYyBzaXplX3QKLWdl dF9zaXplX2ltcGwoY29uc3QgY2hhciAqY21kLCBzaXplX3QgaW5kKSB7Ci0Jc2l6ZV90IHJldDsK LQlzaXplX3QgejsKLQlzaXplX3QgbWliWzRdOwotCXNpemVfdCBtaWJsZW4gPSA0OwotCi0JeiA9 IHNpemVvZihzaXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoY21kLCBtaWIs ICZtaWJsZW4pLAotCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKFwiJXNcIiwg Li4uKSBmYWlsdXJlIiwgY21kKTsKLQltaWJbMl0gPSBpbmQ7Ci0JeiA9IHNpemVvZihzaXplX3Qp OwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmcmV0LCAm eiwgTlVMTCwgMCksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYihbXCIlc1wiLCAl enVdLCAuLi4pIGZhaWx1cmUiLCBjbWQsIGluZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0 aWMgc2l6ZV90Ci1nZXRfc21hbGxfc2l6ZShzaXplX3QgaW5kKSB7Ci0JcmV0dXJuIGdldF9zaXpl X2ltcGwoImFyZW5hcy5iaW4uMC5zaXplIiwgaW5kKTsKLX0KLQotc3RhdGljIHNpemVfdAotZ2V0 X2xhcmdlX3NpemUoc2l6ZV90IGluZCkgewotCXJldHVybiBnZXRfc2l6ZV9pbXBsKCJhcmVuYXMu bGV4dGVudC4wLnNpemUiLCBpbmQpOwotfQotCi0vKiBMaWtlIGl2c2FsbG9jKCksIGJ1dCBzYWZl IHRvIGNhbGwgb24gZGlzY2FyZGVkIGFsbG9jYXRpb25zLiAqLwotc3RhdGljIHNpemVfdAotdnNh bGxvYyh0c2RuX3QgKnRzZG4sIGNvbnN0IHZvaWQgKnB0cikgewotCWVtYXBfZnVsbF9hbGxvY19j dHhfdCBmdWxsX2FsbG9jX2N0eDsKLQlib29sIG1pc3NpbmcgPSBlbWFwX2Z1bGxfYWxsb2NfY3R4 X3RyeV9sb29rdXAodHNkbiwgJmFyZW5hX2VtYXBfZ2xvYmFsLAotCSAgICBwdHIsICZmdWxsX2Fs bG9jX2N0eCk7Ci0JaWYgKG1pc3NpbmcpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGZ1bGxf YWxsb2NfY3R4LmVkYXRhID09IE5VTEwpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChlZGF0YV9z dGF0ZV9nZXQoZnVsbF9hbGxvY19jdHguZWRhdGEpICE9IGV4dGVudF9zdGF0ZV9hY3RpdmUpIHsK LQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGZ1bGxfYWxsb2NfY3R4LnN6aW5kID09IFNDX05TSVpF UykgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gc3pfaW5kZXgyc2l6ZShmdWxsX2FsbG9j X2N0eC5zemluZCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZAotZG9fYXJlbmFfY3JlYXRlKGV4dGVu dF9ob29rc190ICpoKSB7Ci0JdW5zaWduZWQgYXJlbmFfaW5kOwotCXNpemVfdCBzeiA9IHNpemVv Zih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lk ICopJmFyZW5hX2luZCwgJnN6LAotCSAgICAodm9pZCAqKShoICE9IE5VTEwgPyAmaCA6IE5VTEwp LCAoaCAhPSBOVUxMID8gc2l6ZW9mKGgpIDogMCkpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxs Y3RsKCkgZmFpbHVyZSIpOwotCXJldHVybiBhcmVuYV9pbmQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1k b19hcmVuYV9yZXNldF9wcmUodW5zaWduZWQgYXJlbmFfaW5kLCB2b2lkICoqKnB0cnMsIHVuc2ln bmVkICpucHRycykgewotI2RlZmluZSBOTEFSR0UJMzIKLQl1bnNpZ25lZCBuc21hbGwsIG5sYXJn ZSwgaTsKLQlzaXplX3Qgc3o7Ci0JaW50IGZsYWdzOwotCXRzZG5fdCAqdHNkbjsKLQotCWZsYWdz ID0gTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpIHwgTUFMTE9DWF9UQ0FDSEVfTk9ORTsKLQotCW5z bWFsbCA9IGdldF9uc21hbGwoKTsKLQlubGFyZ2UgPSBnZXRfbmxhcmdlKCkgPiBOTEFSR0UgPyBO TEFSR0UgOiBnZXRfbmxhcmdlKCk7Ci0JKm5wdHJzID0gbnNtYWxsICsgbmxhcmdlOwotCSpwdHJz ID0gKHZvaWQgKiopbWFsbG9jKCpucHRycyAqIHNpemVvZih2b2lkICopKTsKLQlleHBlY3RfcHRy X25vdF9udWxsKCpwdHJzLCAiVW5leHBlY3RlZCBtYWxsb2MoKSBmYWlsdXJlIik7Ci0KLQkvKiBB bGxvY2F0ZSBvYmplY3RzIHdpdGggYSB3aWRlIHJhbmdlIG9mIHNpemVzLiAqLwotCWZvciAoaSA9 IDA7IGkgPCBuc21hbGw7IGkrKykgewotCQlzeiA9IGdldF9zbWFsbF9zaXplKGkpOwotCQkoKnB0 cnMpW2ldID0gbWFsbG9jeChzeiwgZmxhZ3MpOwotCQlleHBlY3RfcHRyX25vdF9udWxsKCgqcHRy cylbaV0sCi0JCSAgICAiVW5leHBlY3RlZCBtYWxsb2N4KCV6dSwgJSN4KSBmYWlsdXJlIiwgc3os IGZsYWdzKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG5sYXJnZTsgaSsrKSB7Ci0JCXN6ID0gZ2V0 X2xhcmdlX3NpemUoaSk7Ci0JCSgqcHRycylbbnNtYWxsICsgaV0gPSBtYWxsb2N4KHN6LCBmbGFn cyk7Ci0JCWV4cGVjdF9wdHJfbm90X251bGwoKCpwdHJzKVtpXSwKLQkJICAgICJVbmV4cGVjdGVk IG1hbGxvY3goJXp1LCAlI3gpIGZhaWx1cmUiLCBzeiwgZmxhZ3MpOwotCX0KLQotCXRzZG4gPSB0 c2RuX2ZldGNoKCk7Ci0KLQkvKiBWZXJpZnkgYWxsb2NhdGlvbnMuICovCi0JZm9yIChpID0gMDsg aSA8ICpucHRyczsgaSsrKSB7Ci0JCWV4cGVjdF96dV9ndChpdnNhbGxvYyh0c2RuLCAoKnB0cnMp W2ldKSwgMCwKLQkJICAgICJBbGxvY2F0aW9uIHNob3VsZCBoYXZlIHF1ZXJ5YWJsZSBzaXplIik7 Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZG9fYXJlbmFfcmVzZXRfcG9zdCh2b2lkICoqcHRycywg dW5zaWduZWQgbnB0cnMsIHVuc2lnbmVkIGFyZW5hX2luZCkgewotCXRzZG5fdCAqdHNkbjsKLQl1 bnNpZ25lZCBpOwotCi0JdHNkbiA9IHRzZG5fZmV0Y2goKTsKLQotCWlmIChoYXZlX2JhY2tncm91 bmRfdGhyZWFkKSB7Ci0JCW1hbGxvY19tdXRleF9sb2NrKHRzZG4sCi0JCSAgICAmYmFja2dyb3Vu ZF90aHJlYWRfaW5mb19nZXQoYXJlbmFfaW5kKS0+bXR4KTsKLQl9Ci0JLyogVmVyaWZ5IGFsbG9j YXRpb25zIG5vIGxvbmdlciBleGlzdC4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnB0cnM7IGkrKykg ewotCQlleHBlY3RfenVfZXEodnNhbGxvYyh0c2RuLCBwdHJzW2ldKSwgMCwKLQkJICAgICJBbGxv Y2F0aW9uIHNob3VsZCBubyBsb25nZXIgZXhpc3QiKTsKLQl9Ci0JaWYgKGhhdmVfYmFja2dyb3Vu ZF90aHJlYWQpIHsKLQkJbWFsbG9jX211dGV4X3VubG9jayh0c2RuLAotCQkgICAgJmJhY2tncm91 bmRfdGhyZWFkX2luZm9fZ2V0KGFyZW5hX2luZCktPm10eCk7Ci0JfQotCi0JZnJlZShwdHJzKTsK LX0KLQotc3RhdGljIHZvaWQKLWRvX2FyZW5hX3Jlc2V0X2Rlc3Ryb3koY29uc3QgY2hhciAqbmFt ZSwgdW5zaWduZWQgYXJlbmFfaW5kKSB7Ci0Jc2l6ZV90IG1pYlszXTsKLQlzaXplX3QgbWlibGVu OwotCi0JbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEo bWFsbGN0bG5hbWV0b21pYihuYW1lLCBtaWIsICZtaWJsZW4pLCAwLAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwotCW1pYlsxXSA9IChzaXplX3QpYXJlbmFf aW5kOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwg TlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZhaWx1cmUiKTsK LX0KLQotc3RhdGljIHZvaWQKLWRvX2FyZW5hX3Jlc2V0KHVuc2lnbmVkIGFyZW5hX2luZCkgewot CWRvX2FyZW5hX3Jlc2V0X2Rlc3Ryb3koImFyZW5hLjAucmVzZXQiLCBhcmVuYV9pbmQpOwotfQot Ci1zdGF0aWMgdm9pZAotZG9fYXJlbmFfZGVzdHJveSh1bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQlk b19hcmVuYV9yZXNldF9kZXN0cm95KCJhcmVuYS4wLmRlc3Ryb3kiLCBhcmVuYV9pbmQpOwotfQot Ci1URVNUX0JFR0lOKHRlc3RfYXJlbmFfcmVzZXQpIHsKLQl1bnNpZ25lZCBhcmVuYV9pbmQ7Ci0J dm9pZCAqKnB0cnM7Ci0JdW5zaWduZWQgbnB0cnM7Ci0KLQlhcmVuYV9pbmQgPSBkb19hcmVuYV9j cmVhdGUoTlVMTCk7Ci0JZG9fYXJlbmFfcmVzZXRfcHJlKGFyZW5hX2luZCwgJnB0cnMsICZucHRy cyk7Ci0JZG9fYXJlbmFfcmVzZXQoYXJlbmFfaW5kKTsKLQlkb19hcmVuYV9yZXNldF9wb3N0KHB0 cnMsIG5wdHJzLCBhcmVuYV9pbmQpOwotfQotVEVTVF9FTkQKLQotc3RhdGljIGJvb2wKLWFyZW5h X2lfaW5pdGlhbGl6ZWQodW5zaWduZWQgYXJlbmFfaW5kLCBib29sIHJlZnJlc2gpIHsKLQlib29s IGluaXRpYWxpemVkOwotCXNpemVfdCBtaWJbM107Ci0Jc2l6ZV90IG1pYmxlbiwgc3o7Ci0KLQlp ZiAocmVmcmVzaCkgewotCQl1aW50NjRfdCBlcG9jaCA9IDE7Ci0JCWV4cGVjdF9kX2VxKG1hbGxj dGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsCi0JCSAgICBzaXplb2YoZXBv Y2gpKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQl9Ci0KLQltaWJsZW4g PSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRv bWliKCJhcmVuYS4wLmluaXRpYWxpemVkIiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAgIlVuZXhw ZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKLQltaWJbMV0gPSAoc2l6ZV90KWFy ZW5hX2luZDsKLQlzeiA9IHNpemVvZihpbml0aWFsaXplZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0 bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZpbml0aWFsaXplZCwgJnN6LCBOVUxMLAotCSAg ICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIpOwotCi0JcmV0dXJu IGluaXRpYWxpemVkOwotfQotCi1URVNUX0JFR0lOKHRlc3RfYXJlbmFfZGVzdHJveV9pbml0aWFs KSB7Ci0JZXhwZWN0X2ZhbHNlKGFyZW5hX2lfaW5pdGlhbGl6ZWQoTUFMTENUTF9BUkVOQVNfREVT VFJPWUVELCBmYWxzZSksCi0JICAgICJEZXN0cm95ZWQgYXJlbmEgc3RhdHMgc2hvdWxkIG5vdCBi ZSBpbml0aWFsaXplZCIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2FyZW5hX2Rl c3Ryb3lfaG9va3NfZGVmYXVsdCkgewotCXVuc2lnbmVkIGFyZW5hX2luZCwgYXJlbmFfaW5kX2Fu b3RoZXIsIGFyZW5hX2luZF9wcmV2OwotCXZvaWQgKipwdHJzOwotCXVuc2lnbmVkIG5wdHJzOwot Ci0JYXJlbmFfaW5kID0gZG9fYXJlbmFfY3JlYXRlKE5VTEwpOwotCWRvX2FyZW5hX3Jlc2V0X3By ZShhcmVuYV9pbmQsICZwdHJzLCAmbnB0cnMpOwotCi0JZXhwZWN0X2ZhbHNlKGFyZW5hX2lfaW5p dGlhbGl6ZWQoYXJlbmFfaW5kLCBmYWxzZSksCi0JICAgICJBcmVuYSBzdGF0cyBzaG91bGQgbm90 IGJlIGluaXRpYWxpemVkIik7Ci0JZXhwZWN0X3RydWUoYXJlbmFfaV9pbml0aWFsaXplZChhcmVu YV9pbmQsIHRydWUpLAotCSAgICAiQXJlbmEgc3RhdHMgc2hvdWxkIGJlIGluaXRpYWxpemVkIik7 Ci0KLQkvKgotCSAqIENyZWF0ZSBhbm90aGVyIGFyZW5hIGJlZm9yZSBkZXN0cm95aW5nIG9uZSwg dG8gYmV0dGVyIHZlcmlmeSBhcmVuYQotCSAqIGluZGV4IHJldXNlLgotCSAqLwotCWFyZW5hX2lu ZF9hbm90aGVyID0gZG9fYXJlbmFfY3JlYXRlKE5VTEwpOwotCi0JZG9fYXJlbmFfZGVzdHJveShh cmVuYV9pbmQpOwotCi0JZXhwZWN0X2ZhbHNlKGFyZW5hX2lfaW5pdGlhbGl6ZWQoYXJlbmFfaW5k LCB0cnVlKSwKLQkgICAgIkFyZW5hIHN0YXRzIHNob3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQiKTsK LQlleHBlY3RfdHJ1ZShhcmVuYV9pX2luaXRpYWxpemVkKE1BTExDVExfQVJFTkFTX0RFU1RST1lF RCwgZmFsc2UpLAotCSAgICAiRGVzdHJveWVkIGFyZW5hIHN0YXRzIHNob3VsZCBiZSBpbml0aWFs aXplZCIpOwotCi0JZG9fYXJlbmFfcmVzZXRfcG9zdChwdHJzLCBucHRycywgYXJlbmFfaW5kKTsK LQotCWFyZW5hX2luZF9wcmV2ID0gYXJlbmFfaW5kOwotCWFyZW5hX2luZCA9IGRvX2FyZW5hX2Ny ZWF0ZShOVUxMKTsKLQlkb19hcmVuYV9yZXNldF9wcmUoYXJlbmFfaW5kLCAmcHRycywgJm5wdHJz KTsKLQlleHBlY3RfdV9lcShhcmVuYV9pbmQsIGFyZW5hX2luZF9wcmV2LAotCSAgICAiQXJlbmEg aW5kZXggc2hvdWxkIGhhdmUgYmVlbiByZWN5Y2xlZCIpOwotCWRvX2FyZW5hX2Rlc3Ryb3koYXJl bmFfaW5kKTsKLQlkb19hcmVuYV9yZXNldF9wb3N0KHB0cnMsIG5wdHJzLCBhcmVuYV9pbmQpOwot Ci0JZG9fYXJlbmFfZGVzdHJveShhcmVuYV9pbmRfYW5vdGhlcik7Ci0KLQkvKiBUcnkgYXJlbmEu Y3JlYXRlIHdpdGggY3VzdG9tIGhvb2tzLiAqLwotCXNpemVfdCBzeiA9IHNpemVvZihleHRlbnRf aG9va3NfdCAqKTsKLQlleHRlbnRfaG9va3NfdCAqYTBfZGVmYXVsdF9ob29rczsKLQlleHBlY3Rf ZF9lcShtYWxsY3RsKCJhcmVuYS4wLmV4dGVudF9ob29rcyIsICh2b2lkICopJmEwX2RlZmF1bHRf aG9va3MsCi0JICAgICZzeiwgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9t aWIoKSBmYWlsdXJlIik7Ci0KLQkvKiBEZWZhdWx0IGltcGw7IGJ1dCB3cmFwcGVkIGFzICJjdXN0 b21pemVkIi4gKi8KLQlleHRlbnRfaG9va3NfdCBuZXdfaG9va3MgPSAqYTBfZGVmYXVsdF9ob29r czsKLQlleHRlbnRfaG9va3NfdCAqaG9vayA9ICZuZXdfaG9va3M7Ci0Jc3ogPSBzaXplb2YodW5z aWduZWQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAodm9pZCAqKSZh cmVuYV9pbmQsICZzeiwKLQkgICAgKHZvaWQgKikmaG9vaywgc2l6ZW9mKHZvaWQgKikpLCAwLAot CSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWRvX2FyZW5hX2Rlc3Ryb3ko YXJlbmFfaW5kKTsKLX0KLVRFU1RfRU5ECi0KLS8qCi0gKiBBY3R1YWxseSB1bm1hcCBleHRlbnRz LCByZWdhcmRsZXNzIG9mIG9wdF9yZXRhaW4sIHNvIHRoYXQgYXR0ZW1wdHMgdG8gYWNjZXNzCi0g KiBhIGRlc3Ryb3llZCBhcmVuYSdzIG1lbW9yeSB3aWxsIHNlZ2ZhdWx0LgotICovCi1zdGF0aWMg Ym9vbAotZXh0ZW50X2RhbGxvY191bm1hcChleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2 b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKLSAgICBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJl bmFfaW5kKSB7Ci0JVFJBQ0VfSE9PSygiJXMoZXh0ZW50X2hvb2tzPSVwLCBhZGRyPSVwLCBzaXpl PSV6dSwgY29tbWl0dGVkPSVzLCAiCi0JICAgICJhcmVuYV9pbmQ9JXUpXG4iLCBfX2Z1bmNfXywg ZXh0ZW50X2hvb2tzLCBhZGRyLCBzaXplLCBjb21taXR0ZWQgPwotCSAgICAidHJ1ZSIgOiAiZmFs c2UiLCBhcmVuYV9pbmQpOwotCWV4cGVjdF9wdHJfZXEoZXh0ZW50X2hvb2tzLCAmaG9va3MsCi0J ICAgICJleHRlbnRfaG9va3Mgc2hvdWxkIGJlIHNhbWUgYXMgcG9pbnRlciB1c2VkIHRvIHNldCBo b29rcyIpOwotCWV4cGVjdF9wdHJfZXEoZXh0ZW50X2hvb2tzLT5kYWxsb2MsIGV4dGVudF9kYWxs b2NfdW5tYXAsCi0JICAgICJXcm9uZyBob29rIGZ1bmN0aW9uIik7Ci0JY2FsbGVkX2RhbGxvYyA9 IHRydWU7Ci0JaWYgKCF0cnlfZGFsbG9jKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlkaWRfZGFs bG9jID0gdHJ1ZTsKLQlpZiAoIW1hcHNfY29hbGVzY2UgJiYgb3B0X3JldGFpbikgewotCQlyZXR1 cm4gdHJ1ZTsKLQl9Ci0JcGFnZXNfdW5tYXAoYWRkciwgc2l6ZSk7Ci0JcmV0dXJuIGZhbHNlOwot fQotCi1zdGF0aWMgZXh0ZW50X2hvb2tzX3QgaG9va3Nfb3JpZzsKLQotc3RhdGljIGV4dGVudF9o b29rc190IGhvb2tzX3VubWFwID0gewotCWV4dGVudF9hbGxvY19ob29rLAotCWV4dGVudF9kYWxs b2NfdW5tYXAsIC8qIGRhbGxvYyAqLwotCWV4dGVudF9kZXN0cm95X2hvb2ssCi0JZXh0ZW50X2Nv bW1pdF9ob29rLAotCWV4dGVudF9kZWNvbW1pdF9ob29rLAotCWV4dGVudF9wdXJnZV9sYXp5X2hv b2ssCi0JZXh0ZW50X3B1cmdlX2ZvcmNlZF9ob29rLAotCWV4dGVudF9zcGxpdF9ob29rLAotCWV4 dGVudF9tZXJnZV9ob29rCi19OwotCi1URVNUX0JFR0lOKHRlc3RfYXJlbmFfZGVzdHJveV9ob29r c191bm1hcCkgewotCXVuc2lnbmVkIGFyZW5hX2luZDsKLQl2b2lkICoqcHRyczsKLQl1bnNpZ25l ZCBucHRyczsKLQotCWV4dGVudF9ob29rc19wcmVwKCk7Ci0JaWYgKG1hcHNfY29hbGVzY2UpIHsK LQkJdHJ5X2RlY29tbWl0ID0gZmFsc2U7Ci0JfQotCW1lbWNweSgmaG9va3Nfb3JpZywgJmhvb2tz LCBzaXplb2YoZXh0ZW50X2hvb2tzX3QpKTsKLQltZW1jcHkoJmhvb2tzLCAmaG9va3NfdW5tYXAs IHNpemVvZihleHRlbnRfaG9va3NfdCkpOwotCi0JZGlkX2FsbG9jID0gZmFsc2U7Ci0JYXJlbmFf aW5kID0gZG9fYXJlbmFfY3JlYXRlKCZob29rcyk7Ci0JZG9fYXJlbmFfcmVzZXRfcHJlKGFyZW5h X2luZCwgJnB0cnMsICZucHRycyk7Ci0KLQlleHBlY3RfdHJ1ZShkaWRfYWxsb2MsICJFeHBlY3Rl ZCBhbGxvYyIpOwotCi0JZXhwZWN0X2ZhbHNlKGFyZW5hX2lfaW5pdGlhbGl6ZWQoYXJlbmFfaW5k LCBmYWxzZSksCi0JICAgICJBcmVuYSBzdGF0cyBzaG91bGQgbm90IGJlIGluaXRpYWxpemVkIik7 Ci0JZXhwZWN0X3RydWUoYXJlbmFfaV9pbml0aWFsaXplZChhcmVuYV9pbmQsIHRydWUpLAotCSAg ICAiQXJlbmEgc3RhdHMgc2hvdWxkIGJlIGluaXRpYWxpemVkIik7Ci0KLQlkaWRfZGFsbG9jID0g ZmFsc2U7Ci0JZG9fYXJlbmFfZGVzdHJveShhcmVuYV9pbmQpOwotCWV4cGVjdF90cnVlKGRpZF9k YWxsb2MsICJFeHBlY3RlZCBkYWxsb2MiKTsKLQotCWV4cGVjdF9mYWxzZShhcmVuYV9pX2luaXRp YWxpemVkKGFyZW5hX2luZCwgdHJ1ZSksCi0JICAgICJBcmVuYSBzdGF0cyBzaG91bGQgbm90IGJl IGluaXRpYWxpemVkIik7Ci0JZXhwZWN0X3RydWUoYXJlbmFfaV9pbml0aWFsaXplZChNQUxMQ1RM X0FSRU5BU19ERVNUUk9ZRUQsIGZhbHNlKSwKLQkgICAgIkRlc3Ryb3llZCBhcmVuYSBzdGF0cyBz aG91bGQgYmUgaW5pdGlhbGl6ZWQiKTsKLQotCWRvX2FyZW5hX3Jlc2V0X3Bvc3QocHRycywgbnB0 cnMsIGFyZW5hX2luZCk7Ci0KLQltZW1jcHkoJmhvb2tzLCAmaG9va3Nfb3JpZywgc2l6ZW9mKGV4 dGVudF9ob29rc190KSk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVy biB0ZXN0KAotCSAgICB0ZXN0X2FyZW5hX3Jlc2V0LAotCSAgICB0ZXN0X2FyZW5hX2Rlc3Ryb3lf aW5pdGlhbCwKLQkgICAgdGVzdF9hcmVuYV9kZXN0cm95X2hvb2tzX2RlZmF1bHQsCi0JICAgIHRl c3RfYXJlbmFfZGVzdHJveV9ob29rc191bm1hcCk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2FyZW5hX3Jlc2V0X3Byb2Yu YyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVu YV9yZXNldF9wcm9mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZDgwMTIuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L2FyZW5hX3Jlc2V0X3Byb2YuYworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI2lu Y2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotI2RlZmluZSBBUkVOQV9SRVNFVF9QUk9GX0Nf Ci0KLSNpbmNsdWRlICJhcmVuYV9yZXNldC5jIgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9hcmVuYV9yZXNldF9wcm9mLnNoIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2FyZW5hX3Jl c2V0X3Byb2Yuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MWRjMWMuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L2FyZW5hX3Jlc2V0X3Byb2Yuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jp bi9zaAotCi1leHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxsZ19wcm9mX3NhbXBsZTowIgoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC9hdG9taWMuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9hdG9taWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJlYzhjNy4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvYXRvbWljLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotI2luY2x1ZGUg InRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0vKgotICogV2UgKmFsbW9zdCogaGF2ZSBjb25zaXN0 ZW50IHNob3J0IG5hbWVzIChlLmcuICJ1MzIiIGZvciB1aW50MzJfdCwgImIiIGZvcgotICogYm9v bCwgZXRjLiAgVGhlIG9uZSBleGNlcHRpb24gaXMgdGhhdCB0aGUgc2hvcnQgbmFtZSBmb3Igdm9p ZCAqIGlzICJwIiBpbgotICogc29tZSBwbGFjZXMgYW5kICJwdHIiIGluIG90aGVycy4gIEluIHRo ZSBsb25nIHJ1biBpdCB3b3VsZCBiZSBuaWNlIHRvIHVuaWZ5Ci0gKiB0aGVzZSwgYnV0IGluIHRo ZSBzaG9ydCBydW4gd2UnbGwgdXNlIHRoaXMgc2hpbS4KLSAqLwotI2RlZmluZSBleHBlY3RfcF9l cSBleHBlY3RfcHRyX2VxCi0KLS8qCi0gKiB0OiB0aGUgbm9uLWF0b21pYyB0eXBlLCBsaWtlICJ1 aW50MzJfdCIuCi0gKiB0YTogdGhlIHNob3J0IG5hbWUgZm9yIHRoZSB0eXBlLCBsaWtlICJ1MzIi LgotICogdmFsWzEsMiwzXTogVmFsdWVzIG9mIHRoZSBnaXZlbiB0eXBlLiAgVGhlIENBUyB0ZXN0 cyB1c2UgdmFsMiBmb3IgZXhwZWN0ZWQsCi0gKiBhbmQgdmFsMyBmb3IgZGVzaXJlZC4KLSAqLwot Ci0jZGVmaW5lIERPX1RFU1RTKHQsIHRhLCB2YWwxLCB2YWwyLCB2YWwzKSBkbyB7CQkJCVwKLQl0 IHZhbDsJCQkJCQkJCVwKLQl0IGV4cGVjdGVkOwkJCQkJCQlcCi0JYm9vbCBzdWNjZXNzOwkJCQkJ CQlcCi0JLyogVGhpcyAoYWxvbmcgd2l0aCB0aGUgbG9hZCBiZWxvdykgYWxzbyB0ZXN0cyBBVE9N SUNfTE9BRC4gKi8JXAotCWF0b21pY18jI3RhIyNfdCBhdG9tID0gQVRPTUlDX0lOSVQodmFsMSk7 CQkJXAotCQkJCQkJCQkJXAotCS8qIEFUT01JQ19JTklUIGFuZCBsb2FkLiAqLwkJCQkJXAotCXZh bCA9IGF0b21pY19sb2FkXyMjdGEoJmF0b20sIEFUT01JQ19SRUxBWEVEKTsJCQlcCi0JZXhwZWN0 XyMjdGEjI19lcSh2YWwxLCB2YWwsICJMb2FkIG9yIGluaXQgZmFpbGVkIik7CQlcCi0JCQkJCQkJ CQlcCi0JLyogU3RvcmUuICovCQkJCQkJCVwKLQlhdG9taWNfc3RvcmVfIyN0YSgmYXRvbSwgdmFs MSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKLQlhdG9taWNfc3RvcmVfIyN0YSgmYXRvbSwgdmFsMiwg QVRPTUlDX1JFTEFYRUQpOwkJCVwKLQl2YWwgPSBhdG9taWNfbG9hZF8jI3RhKCZhdG9tLCBBVE9N SUNfUkVMQVhFRCk7CQkJXAotCWV4cGVjdF8jI3RhIyNfZXEodmFsMiwgdmFsLCAiU3RvcmUgZmFp bGVkIik7CQkJXAotCQkJCQkJCQkJXAotCS8qIEV4Y2hhbmdlLiAqLwkJCQkJCQlcCi0JYXRvbWlj X3N0b3JlXyMjdGEoJmF0b20sIHZhbDEsIEFUT01JQ19SRUxBWEVEKTsJCQlcCi0JdmFsID0gYXRv bWljX2V4Y2hhbmdlXyMjdGEoJmF0b20sIHZhbDIsIEFUT01JQ19SRUxBWEVEKTsJXAotCWV4cGVj dF8jI3RhIyNfZXEodmFsMSwgdmFsLCAiRXhjaGFuZ2UgcmV0dXJuZWQgaW52YWxpZCB2YWx1ZSIp OwlcCi0JdmFsID0gYXRvbWljX2xvYWRfIyN0YSgmYXRvbSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwK LQlleHBlY3RfIyN0YSMjX2VxKHZhbDIsIHZhbCwgIkV4Y2hhbmdlIHN0b3JlIGludmFsaWQgdmFs dWUiKTsJXAotCQkJCQkJCQkJXAotCS8qIAkJCQkJCQkJXAotCSAqIFdlYWsgQ0FTLiAgU3B1cmlv dXMgZmFpbHVyZXMgYXJlIGFsbG93ZWQsIHNvIHdlIGxvb3AgYSBmZXcJXAotCSAqIHRpbWVzLgkJ CQkJCQlcCi0JICovCQkJCQkJCQlcCi0JYXRvbWljX3N0b3JlXyMjdGEoJmF0b20sIHZhbDEsIEFU T01JQ19SRUxBWEVEKTsJCQlcCi0Jc3VjY2VzcyA9IGZhbHNlOwkJCQkJCVwKLQlmb3IgKGludCBy ZXRyeSA9IDA7IHJldHJ5IDwgMTAgJiYgIXN1Y2Nlc3M7IHJldHJ5KyspIHsJCVwKLQkJZXhwZWN0 ZWQgPSB2YWwyOwkJCQkJXAotCQlzdWNjZXNzID0gYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vh a18jI3RhKCZhdG9tLAlcCi0JCSAgICAmZXhwZWN0ZWQsIHZhbDMsIEFUT01JQ19SRUxBWEVELCBB VE9NSUNfUkVMQVhFRCk7CVwKLQkJZXhwZWN0XyMjdGEjI19lcSh2YWwxLCBleHBlY3RlZCwgCQkJ XAotCQkgICAgIkNBUyBzaG91bGQgdXBkYXRlIGV4cGVjdGVkIik7CQkJXAotCX0JCQkJCQkJCVwK LQlleHBlY3RfYl9lcSh2YWwxID09IHZhbDIsIHN1Y2Nlc3MsCQkJCVwKLQkgICAgIldlYWsgQ0FT IGRpZCB0aGUgd3Jvbmcgc3RhdGUgdXBkYXRlIik7CQkJXAotCXZhbCA9IGF0b21pY19sb2FkXyMj dGEoJmF0b20sIEFUT01JQ19SRUxBWEVEKTsJCQlcCi0JaWYgKHN1Y2Nlc3MpIHsJCQkJCQkJXAot CQlleHBlY3RfIyN0YSMjX2VxKHZhbDMsIHZhbCwJCQkJXAotCQkgICAgIlN1Y2Nlc3NmdWwgQ0FT IHNob3VsZCB1cGRhdGUgYXRvbWljIik7CQlcCi0JfSBlbHNlIHsJCQkJCQkJXAotCQlleHBlY3Rf IyN0YSMjX2VxKHZhbDEsIHZhbCwJCQkJXAotCQkgICAgIlVuc3VjY2Vzc2Z1bCBDQVMgc2hvdWxk IG5vdCB1cGRhdGUgYXRvbWljIik7CVwKLQl9CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JLyogU3Ry b25nIENBUy4gKi8JCQkJCQlcCi0JYXRvbWljX3N0b3JlXyMjdGEoJmF0b20sIHZhbDEsIEFUT01J Q19SRUxBWEVEKTsJCQlcCi0JZXhwZWN0ZWQgPSB2YWwyOwkJCQkJCVwKLQlzdWNjZXNzID0gYXRv bWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nXyMjdGEoJmF0b20sICZleHBlY3RlZCwJXAotCSAg ICB2YWwzLCBBVE9NSUNfUkVMQVhFRCwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKLQlleHBlY3RfYl9l cSh2YWwxID09IHZhbDIsIHN1Y2Nlc3MsCQkJCVwKLQkgICAgIlN0cm9uZyBDQVMgZGlkIHRoZSB3 cm9uZyBzdGF0ZSB1cGRhdGUiKTsJCQlcCi0JdmFsID0gYXRvbWljX2xvYWRfIyN0YSgmYXRvbSwg QVRPTUlDX1JFTEFYRUQpOwkJCVwKLQlpZiAoc3VjY2VzcykgewkJCQkJCQlcCi0JCWV4cGVjdF8j I3RhIyNfZXEodmFsMywgdmFsLAkJCQlcCi0JCSAgICAiU3VjY2Vzc2Z1bCBDQVMgc2hvdWxkIHVw ZGF0ZSBhdG9taWMiKTsJCVwKLQl9IGVsc2UgewkJCQkJCQlcCi0JCWV4cGVjdF8jI3RhIyNfZXEo dmFsMSwgdmFsLAkJCQlcCi0JCSAgICAiVW5zdWNjZXNzZnVsIENBUyBzaG91bGQgbm90IHVwZGF0 ZSBhdG9taWMiKTsJXAotCX0JCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQkJCQkJCQkJCVwKLX0gd2hp bGUgKDApCi0KLSNkZWZpbmUgRE9fSU5URUdFUl9URVNUUyh0LCB0YSwgdmFsMSwgdmFsMikgZG8g ewkJCVwKLQlhdG9taWNfIyN0YSMjX3QgYXRvbTsJCQkJCQlcCi0JdCB2YWw7CQkJCQkJCQlcCi0J CQkJCQkJCQlcCi0JLyogRmV0Y2gtYWRkLiAqLwkJCQkJCVwKLQlhdG9taWNfc3RvcmVfIyN0YSgm YXRvbSwgdmFsMSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKLQl2YWwgPSBhdG9taWNfZmV0Y2hfYWRk XyMjdGEoJmF0b20sIHZhbDIsIEFUT01JQ19SRUxBWEVEKTsJXAotCWV4cGVjdF8jI3RhIyNfZXEo dmFsMSwgdmFsLAkJCQkJXAotCSAgICAiRmV0Y2gtYWRkIHNob3VsZCByZXR1cm4gcHJldmlvdXMg dmFsdWUiKTsJCQlcCi0JdmFsID0gYXRvbWljX2xvYWRfIyN0YSgmYXRvbSwgQVRPTUlDX1JFTEFY RUQpOwkJCVwKLQlleHBlY3RfIyN0YSMjX2VxKHZhbDEgKyB2YWwyLCB2YWwsCQkJCVwKLQkgICAg IkZldGNoLWFkZCBzaG91bGQgdXBkYXRlIGF0b21pYyIpOwkJCQlcCi0JCQkJCQkJCQlcCi0JLyog RmV0Y2gtc3ViLiAqLwkJCQkJCVwKLQlhdG9taWNfc3RvcmVfIyN0YSgmYXRvbSwgdmFsMSwgQVRP TUlDX1JFTEFYRUQpOwkJCVwKLQl2YWwgPSBhdG9taWNfZmV0Y2hfc3ViXyMjdGEoJmF0b20sIHZh bDIsIEFUT01JQ19SRUxBWEVEKTsJXAotCWV4cGVjdF8jI3RhIyNfZXEodmFsMSwgdmFsLAkJCQkJ XAotCSAgICAiRmV0Y2gtc3ViIHNob3VsZCByZXR1cm4gcHJldmlvdXMgdmFsdWUiKTsJCQlcCi0J dmFsID0gYXRvbWljX2xvYWRfIyN0YSgmYXRvbSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKLQlleHBl Y3RfIyN0YSMjX2VxKHZhbDEgLSB2YWwyLCB2YWwsCQkJCVwKLQkgICAgIkZldGNoLXN1YiBzaG91 bGQgdXBkYXRlIGF0b21pYyIpOwkJCQlcCi0JCQkJCQkJCQlcCi0JLyogRmV0Y2gtYW5kLiAqLwkJ CQkJCVwKLQlhdG9taWNfc3RvcmVfIyN0YSgmYXRvbSwgdmFsMSwgQVRPTUlDX1JFTEFYRUQpOwkJ CVwKLQl2YWwgPSBhdG9taWNfZmV0Y2hfYW5kXyMjdGEoJmF0b20sIHZhbDIsIEFUT01JQ19SRUxB WEVEKTsJXAotCWV4cGVjdF8jI3RhIyNfZXEodmFsMSwgdmFsLAkJCQkJXAotCSAgICAiRmV0Y2gt YW5kIHNob3VsZCByZXR1cm4gcHJldmlvdXMgdmFsdWUiKTsJCQlcCi0JdmFsID0gYXRvbWljX2xv YWRfIyN0YSgmYXRvbSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKLQlleHBlY3RfIyN0YSMjX2VxKHZh bDEgJiB2YWwyLCB2YWwsCQkJCVwKLQkgICAgIkZldGNoLWFuZCBzaG91bGQgdXBkYXRlIGF0b21p YyIpOwkJCQlcCi0JCQkJCQkJCQlcCi0JLyogRmV0Y2gtb3IuICovCQkJCQkJCVwKLQlhdG9taWNf c3RvcmVfIyN0YSgmYXRvbSwgdmFsMSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKLQl2YWwgPSBhdG9t aWNfZmV0Y2hfb3JfIyN0YSgmYXRvbSwgdmFsMiwgQVRPTUlDX1JFTEFYRUQpOwlcCi0JZXhwZWN0 XyMjdGEjI19lcSh2YWwxLCB2YWwsCQkJCQlcCi0JICAgICJGZXRjaC1vciBzaG91bGQgcmV0dXJu IHByZXZpb3VzIHZhbHVlIik7CQkJXAotCXZhbCA9IGF0b21pY19sb2FkXyMjdGEoJmF0b20sIEFU T01JQ19SRUxBWEVEKTsJCQlcCi0JZXhwZWN0XyMjdGEjI19lcSh2YWwxIHwgdmFsMiwgdmFsLAkJ CQlcCi0JICAgICJGZXRjaC1vciBzaG91bGQgdXBkYXRlIGF0b21pYyIpOwkJCQlcCi0JCQkJCQkJ CQlcCi0JLyogRmV0Y2gteG9yLiAqLwkJCQkJCVwKLQlhdG9taWNfc3RvcmVfIyN0YSgmYXRvbSwg dmFsMSwgQVRPTUlDX1JFTEFYRUQpOwkJCVwKLQl2YWwgPSBhdG9taWNfZmV0Y2hfeG9yXyMjdGEo JmF0b20sIHZhbDIsIEFUT01JQ19SRUxBWEVEKTsJXAotCWV4cGVjdF8jI3RhIyNfZXEodmFsMSwg dmFsLAkJCQkJXAotCSAgICAiRmV0Y2gteG9yIHNob3VsZCByZXR1cm4gcHJldmlvdXMgdmFsdWUi KTsJCQlcCi0JdmFsID0gYXRvbWljX2xvYWRfIyN0YSgmYXRvbSwgQVRPTUlDX1JFTEFYRUQpOwkJ CVwKLQlleHBlY3RfIyN0YSMjX2VxKHZhbDEgXiB2YWwyLCB2YWwsCQkJCVwKLQkgICAgIkZldGNo LXhvciBzaG91bGQgdXBkYXRlIGF0b21pYyIpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5l IFRFU1RfU1RSVUNUKHQsIHRhKQkJCQkJCVwKLXR5cGVkZWYgc3RydWN0IHsJCQkJCQkJXAotCXQg dmFsMTsJCQkJCQkJCVwKLQl0IHZhbDI7CQkJCQkJCQlcCi0JdCB2YWwzOwkJCQkJCQkJXAotfSB0 YSMjX3Rlc3RfdDsKLQotI2RlZmluZSBURVNUX0NBU0VTKHQpIHsJCQkJCQkJXAotCXsodCktMSwg KHQpLTEsICh0KS0yfSwJCQkJCQlcCi0Jeyh0KS0xLCAodCkgMCwgKHQpLTJ9LAkJCQkJCVwKLQl7 KHQpLTEsICh0KSAxLCAodCktMn0sCQkJCQkJXAotCQkJCQkJCQkJXAotCXsodCkgMCwgKHQpLTEs ICh0KS0yfSwJCQkJCQlcCi0Jeyh0KSAwLCAodCkgMCwgKHQpLTJ9LAkJCQkJCVwKLQl7KHQpIDAs ICh0KSAxLCAodCktMn0sCQkJCQkJXAotCQkJCQkJCQkJXAotCXsodCkgMSwgKHQpLTEsICh0KS0y fSwJCQkJCQlcCi0Jeyh0KSAxLCAodCkgMCwgKHQpLTJ9LAkJCQkJCVwKLQl7KHQpIDEsICh0KSAx LCAodCktMn0sCQkJCQkJXAotCQkJCQkJCQkJXAotCXsodCkwLCAodCktKDEgPDwgMjIpLCAodCkt Mn0sCQkJCQlcCi0Jeyh0KTAsICh0KSgxIDw8IDIyKSwgKHQpLTJ9LAkJCQkJXAotCXsodCkoMSA8 PCAyMiksICh0KS0oMSA8PCAyMiksICh0KS0yfSwJCQkJXAotCXsodCkoMSA8PCAyMiksICh0KSgx IDw8IDIyKSwgKHQpLTJ9CQkJCVwKLX0KLQotI2RlZmluZSBURVNUX0JPRFkodCwgdGEpIGRvIHsJ CQkJCQlcCi0JY29uc3QgdGEjI190ZXN0X3QgdGVzdHNbXSA9IFRFU1RfQ0FTRVModCk7CQkJXAot CWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSk7 IGkrKykgewlcCi0JCXRhIyNfdGVzdF90IHRlc3QgPSB0ZXN0c1tpXTsJCQkJXAotCQlET19URVNU Uyh0LCB0YSwgdGVzdC52YWwxLCB0ZXN0LnZhbDIsIHRlc3QudmFsMyk7CVwKLQl9CQkJCQkJCQlc Ci19IHdoaWxlICgwKQotCi0jZGVmaW5lIElOVEVHRVJfVEVTVF9CT0RZKHQsIHRhKSBkbyB7CQkJ CQlcCi0JY29uc3QgdGEjI190ZXN0X3QgdGVzdHNbXSA9IFRFU1RfQ0FTRVModCk7CQkJXAotCWZv ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSk7IGkr KykgewlcCi0JCXRhIyNfdGVzdF90IHRlc3QgPSB0ZXN0c1tpXTsJCQkJXAotCQlET19URVNUUyh0 LCB0YSwgdGVzdC52YWwxLCB0ZXN0LnZhbDIsIHRlc3QudmFsMyk7CVwKLQkJRE9fSU5URUdFUl9U RVNUUyh0LCB0YSwgdGVzdC52YWwxLCB0ZXN0LnZhbDIpOwkJXAotCX0JCQkJCQkJCVwKLX0gd2hp bGUgKDApCi0KLVRFU1RfU1RSVUNUKHVpbnQ2NF90LCB1NjQpOwotVEVTVF9CRUdJTih0ZXN0X2F0 b21pY191NjQpIHsKLSNpZiAhKExHX1NJWkVPRl9QVFIgPT0gMyB8fCBMR19TSVpFT0ZfSU5UID09 IDMpCi0JdGVzdF9za2lwKCI2NC1iaXQgYXRvbWljIG9wZXJhdGlvbnMgbm90IHN1cHBvcnRlZCIp OwotI2Vsc2UKLQlJTlRFR0VSX1RFU1RfQk9EWSh1aW50NjRfdCwgdTY0KTsKLSNlbmRpZgotfQot VEVTVF9FTkQKLQotCi1URVNUX1NUUlVDVCh1aW50MzJfdCwgdTMyKTsKLVRFU1RfQkVHSU4odGVz dF9hdG9taWNfdTMyKSB7Ci0JSU5URUdFUl9URVNUX0JPRFkodWludDMyX3QsIHUzMik7Ci19Ci1U RVNUX0VORAotCi1URVNUX1NUUlVDVCh2b2lkICosIHApOwotVEVTVF9CRUdJTih0ZXN0X2F0b21p Y19wKSB7Ci0JVEVTVF9CT0RZKHZvaWQgKiwgcCk7Ci19Ci1URVNUX0VORAotCi1URVNUX1NUUlVD VChzaXplX3QsIHp1KTsKLVRFU1RfQkVHSU4odGVzdF9hdG9taWNfenUpIHsKLQlJTlRFR0VSX1RF U1RfQk9EWShzaXplX3QsIHp1KTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfU1RSVUNUKHNzaXplX3Qs IHpkKTsKLVRFU1RfQkVHSU4odGVzdF9hdG9taWNfemQpIHsKLQlJTlRFR0VSX1RFU1RfQk9EWShz c2l6ZV90LCB6ZCk7Ci19Ci1URVNUX0VORAotCi0KLVRFU1RfU1RSVUNUKHVuc2lnbmVkLCB1KTsK LVRFU1RfQkVHSU4odGVzdF9hdG9taWNfdSkgewotCUlOVEVHRVJfVEVTVF9CT0RZKHVuc2lnbmVk LCB1KTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0J ICAgIHRlc3RfYXRvbWljX3U2NCwKLQkgICAgdGVzdF9hdG9taWNfdTMyLAotCSAgICB0ZXN0X2F0 b21pY19wLAotCSAgICB0ZXN0X2F0b21pY196dSwKLQkgICAgdGVzdF9hdG9taWNfemQsCi0JICAg IHRlc3RfYXRvbWljX3UpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYWNrZ3JvdW5kX3RocmVhZC5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhY2tncm91bmRfdGhyZWFk LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2MDAxMGEuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhY2tncm91 bmRfdGhyZWFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotI2luY2x1ZGUgInRl c3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvdXRpbC5o IgotCi1zdGF0aWMgdm9pZAotdGVzdF9zd2l0Y2hfYmFja2dyb3VuZF90aHJlYWRfY3RsKGJvb2wg bmV3X3ZhbCkgewotCWJvb2wgZTAsIGUxOwotCXNpemVfdCBzeiA9IHNpemVvZihib29sKTsKLQot CWUxID0gbmV3X3ZhbDsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJiYWNrZ3JvdW5kX3RocmVhZCIs ICh2b2lkICopJmUwLCAmc3osCi0JICAgICZlMSwgc3opLCAwLCAiVW5leHBlY3RlZCBtYWxsY3Rs KCkgZmFpbHVyZSIpOwotCWV4cGVjdF9iX2VxKGUwLCAhZTEsCi0JICAgICJiYWNrZ3JvdW5kX3Ro cmVhZCBzaG91bGQgYmUgJWQgYmVmb3JlLlxuIiwgIWUxKTsKLQlpZiAoZTEpIHsKLQkJZXhwZWN0 X3p1X2d0KG5fYmFja2dyb3VuZF90aHJlYWRzLCAwLAotCQkgICAgIk51bWJlciBvZiBiYWNrZ3Jv dW5kIHRocmVhZHMgc2hvdWxkIGJlIG5vbiB6ZXJvLlxuIik7Ci0JfSBlbHNlIHsKLQkJZXhwZWN0 X3p1X2VxKG5fYmFja2dyb3VuZF90aHJlYWRzLCAwLAotCQkgICAgIk51bWJlciBvZiBiYWNrZ3Jv dW5kIHRocmVhZHMgc2hvdWxkIGJlIHplcm8uXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi10 ZXN0X3JlcGVhdF9iYWNrZ3JvdW5kX3RocmVhZF9jdGwoYm9vbCBiZWZvcmUpIHsKLQlib29sIGUw LCBlMTsKLQlzaXplX3Qgc3ogPSBzaXplb2YoYm9vbCk7Ci0KLQllMSA9IGJlZm9yZTsKLQlleHBl Y3RfZF9lcShtYWxsY3RsKCJiYWNrZ3JvdW5kX3RocmVhZCIsICh2b2lkICopJmUwLCAmc3osCi0J ICAgICZlMSwgc3opLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVj dF9iX2VxKGUwLCBiZWZvcmUsCi0JICAgICJiYWNrZ3JvdW5kX3RocmVhZCBzaG91bGQgYmUgJWQu XG4iLCBiZWZvcmUpOwotCWlmIChlMSkgewotCQlleHBlY3RfenVfZ3Qobl9iYWNrZ3JvdW5kX3Ro cmVhZHMsIDAsCi0JCSAgICAiTnVtYmVyIG9mIGJhY2tncm91bmQgdGhyZWFkcyBzaG91bGQgYmUg bm9uIHplcm8uXG4iKTsKLQl9IGVsc2UgewotCQlleHBlY3RfenVfZXEobl9iYWNrZ3JvdW5kX3Ro cmVhZHMsIDAsCi0JCSAgICAiTnVtYmVyIG9mIGJhY2tncm91bmQgdGhyZWFkcyBzaG91bGQgYmUg emVyby5cbiIpOwotCX0KLX0KLQotVEVTVF9CRUdJTih0ZXN0X2JhY2tncm91bmRfdGhyZWFkX2N0 bCkgewotCXRlc3Rfc2tpcF9pZighaGF2ZV9iYWNrZ3JvdW5kX3RocmVhZCk7Ci0KLQlib29sIGUw LCBlMTsKLQlzaXplX3Qgc3ogPSBzaXplb2YoYm9vbCk7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3Rs KCJvcHQuYmFja2dyb3VuZF90aHJlYWQiLCAodm9pZCAqKSZlMCwgJnN6LAotCSAgICBOVUxMLCAw KSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlleHBlY3RfZF9lcShtYWxs Y3RsKCJiYWNrZ3JvdW5kX3RocmVhZCIsICh2b2lkICopJmUxLCAmc3osCi0JICAgIE5VTEwsIDAp LCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF9iX2VxKGUwLCBl MSwKLQkgICAgIkRlZmF1bHQgYW5kIG9wdC5iYWNrZ3JvdW5kX3RocmVhZCBkb2VzIG5vdCBtYXRj aC5cbiIpOwotCWlmIChlMCkgewotCQl0ZXN0X3N3aXRjaF9iYWNrZ3JvdW5kX3RocmVhZF9jdGwo ZmFsc2UpOwotCX0KLQlleHBlY3RfenVfZXEobl9iYWNrZ3JvdW5kX3RocmVhZHMsIDAsCi0JICAg ICJOdW1iZXIgb2YgYmFja2dyb3VuZCB0aHJlYWRzIHNob3VsZCBiZSAwLlxuIik7Ci0KLQlmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXRlc3Rfc3dpdGNoX2JhY2tncm91bmRf dGhyZWFkX2N0bCh0cnVlKTsKLQkJdGVzdF9yZXBlYXRfYmFja2dyb3VuZF90aHJlYWRfY3RsKHRy dWUpOwotCQl0ZXN0X3JlcGVhdF9iYWNrZ3JvdW5kX3RocmVhZF9jdGwodHJ1ZSk7Ci0KLQkJdGVz dF9zd2l0Y2hfYmFja2dyb3VuZF90aHJlYWRfY3RsKGZhbHNlKTsKLQkJdGVzdF9yZXBlYXRfYmFj a2dyb3VuZF90aHJlYWRfY3RsKGZhbHNlKTsKLQkJdGVzdF9yZXBlYXRfYmFja2dyb3VuZF90aHJl YWRfY3RsKGZhbHNlKTsKLQl9Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfYmFja2dy b3VuZF90aHJlYWRfcnVubmluZykgewotCXRlc3Rfc2tpcF9pZighaGF2ZV9iYWNrZ3JvdW5kX3Ro cmVhZCk7Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfc3RhdHMpOwotCi0jaWYgZGVmaW5lZChKRU1B TExPQ19CQUNLR1JPVU5EX1RIUkVBRCkKLQl0c2RfdCAqdHNkID0gdHNkX2ZldGNoKCk7Ci0JYmFj a2dyb3VuZF90aHJlYWRfaW5mb190ICppbmZvID0gJmJhY2tncm91bmRfdGhyZWFkX2luZm9bMF07 Ci0KLQl0ZXN0X3JlcGVhdF9iYWNrZ3JvdW5kX3RocmVhZF9jdGwoZmFsc2UpOwotCXRlc3Rfc3dp dGNoX2JhY2tncm91bmRfdGhyZWFkX2N0bCh0cnVlKTsKLQlleHBlY3RfYl9lcShpbmZvLT5zdGF0 ZSwgYmFja2dyb3VuZF90aHJlYWRfc3RhcnRlZCwKLQkgICAgIkJhY2tncm91bmRfdGhyZWFkIGRp ZCBub3Qgc3RhcnQuXG4iKTsKLQotCW5zdGltZV90IHN0YXJ0OwotCW5zdGltZV9pbml0X3VwZGF0 ZSgmc3RhcnQpOwotCi0JYm9vbCByYW4gPSBmYWxzZTsKLQl3aGlsZSAodHJ1ZSkgewotCQltYWxs b2NfbXV0ZXhfbG9jayh0c2RfdHNkbih0c2QpLCAmaW5mby0+bXR4KTsKLQkJaWYgKGluZm8tPnRv dF9uX3J1bnMgPiAwKSB7Ci0JCQlyYW4gPSB0cnVlOwotCQl9Ci0JCW1hbGxvY19tdXRleF91bmxv Y2sodHNkX3RzZG4odHNkKSwgJmluZm8tPm10eCk7Ci0JCWlmIChyYW4pIHsKLQkJCWJyZWFrOwot CQl9Ci0KLQkJbnN0aW1lX3Qgbm93OwotCQluc3RpbWVfaW5pdF91cGRhdGUoJm5vdyk7Ci0JCW5z dGltZV9zdWJ0cmFjdCgmbm93LCAmc3RhcnQpOwotCQlleHBlY3RfdTY0X2x0KG5zdGltZV9zZWMo Jm5vdyksIDEwMDAsCi0JCSAgICAiQmFja2dyb3VuZCB0aHJlYWRzIGRpZCBub3QgcnVuIGZvciAx MDAwIHNlY29uZHMuIik7Ci0JCXNsZWVwKDEpOwotCX0KLQl0ZXN0X3N3aXRjaF9iYWNrZ3JvdW5k X3RocmVhZF9jdGwoZmFsc2UpOwotI2VuZGlmCi19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9p ZCkgewotCS8qIEJhY2tncm91bmRfdGhyZWFkIGNyZWF0aW9uIHRlc3RzIHJlZW50cmFuY3kgbmF0 dXJhbGx5LiAqLwotCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCi0JICAgIHRlc3RfYmFja2dy b3VuZF90aHJlYWRfY3RsLAotCSAgICB0ZXN0X2JhY2tncm91bmRfdGhyZWFkX3J1bm5pbmcpOwot fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9iYWNrZ3JvdW5kX3RocmVhZF9lbmFibGUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYWNrZ3JvdW5kX3RocmVhZF9lbmFibGUuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQwMzRhYy4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmFja2dyb3VuZF90 aHJlYWRfZW5hYmxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0jaW5jbHVkZSAi dGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLWNvbnN0IGNoYXIgKm1hbGxvY19jb25mID0gImJhY2tn cm91bmRfdGhyZWFkOmZhbHNlLG5hcmVuYXM6MSxtYXhfYmFja2dyb3VuZF90aHJlYWRzOjIwIjsK LQotc3RhdGljIHVuc2lnbmVkCi1tYXhfdGVzdF9uYXJlbmFzKHZvaWQpIHsKLQkvKgotCSAqIDEw IGhlcmUgaXMgc29tZXdoYXQgYXJiaXRyYXJ5LCBleGNlcHQgaW5zb2ZhciBhcyB3ZSB3YW50IHRv IGVuc3VyZQotCSAqIHRoYXQgdGhlIG51bWJlciBvZiBiYWNrZ3JvdW5kIHRocmVhZHMgaXMgc21h bGxlciB0aGFuIHRoZSBudW1iZXIgb2YKLQkgKiBhcmVuYXMuICBJJ2xsIHJhZ2VxdWl0IGxvbmcg YmVmb3JlIHdlIGhhdmUgdG8gc3BpbiB1cCAxMCB0aHJlYWRzIHBlcgotCSAqIGNwdSB0byBoYW5k bGUgYmFja2dyb3VuZCBwdXJnaW5nLCBzbyB0aGlzIGlzIGEgY29uc2VydmF0aXZlCi0JICogYXBw cm94aW1hdGlvbi4KLQkgKi8KLQl1bnNpZ25lZCByZXQgPSAxMCAqIG5jcHVzOwotCS8qIExpbWl0 IHRoZSBtYXggdG8gYXZvaWQgVk0gZXhoYXVzdGlvbiBvbiAzMi1iaXQgLiAqLwotCWlmIChyZXQg PiA1MTIpIHsKLQkJcmV0ID0gNTEyOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLVRFU1RfQkVH SU4odGVzdF9kZWZlcnJlZCkgewotCXRlc3Rfc2tpcF9pZighaGF2ZV9iYWNrZ3JvdW5kX3RocmVh ZCk7Ci0KLQl1bnNpZ25lZCBpZDsKLQlzaXplX3Qgc3pfdSA9IHNpemVvZih1bnNpZ25lZCk7Ci0K LQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF4X3Rlc3RfbmFyZW5hcygpOyBpKyspIHsKLQkJ ZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICZpZCwgJnN6X3UsIE5VTEwsIDAp LCAwLAotCQkgICAgIkZhaWxlZCB0byBjcmVhdGUgYXJlbmEiKTsKLQl9Ci0KLQlib29sIGVuYWJs ZSA9IHRydWU7Ci0Jc2l6ZV90IHN6X2IgPSBzaXplb2YoYm9vbCk7Ci0JZXhwZWN0X2RfZXEobWFs bGN0bCgiYmFja2dyb3VuZF90aHJlYWQiLCBOVUxMLCBOVUxMLCAmZW5hYmxlLCBzel9iKSwgMCwK LQkgICAgIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCB0aHJlYWRzIik7Ci0JZW5hYmxlID0g ZmFsc2U7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYmFja2dyb3VuZF90aHJlYWQiLCBOVUxMLCBO VUxMLCAmZW5hYmxlLCBzel9iKSwgMCwKLQkgICAgIkZhaWxlZCB0byBkaXNhYmxlIGJhY2tncm91 bmQgdGhyZWFkcyIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X21heF9iYWNrZ3Jv dW5kX3RocmVhZHMpIHsKLQl0ZXN0X3NraXBfaWYoIWhhdmVfYmFja2dyb3VuZF90aHJlYWQpOwot Ci0Jc2l6ZV90IG1heF9uX3RoZHM7Ci0Jc2l6ZV90IG9wdF9tYXhfbl90aGRzOwotCXNpemVfdCBz el9tID0gc2l6ZW9mKG1heF9uX3RoZHMpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoIm9wdC5tYXhf YmFja2dyb3VuZF90aHJlYWRzIiwKLQkgICAgJm9wdF9tYXhfbl90aGRzLCAmc3pfbSwgTlVMTCwg MCksIDAsCi0JICAgICJGYWlsZWQgdG8gZ2V0IG9wdC5tYXhfYmFja2dyb3VuZF90aHJlYWRzIik7 Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgibWF4X2JhY2tncm91bmRfdGhyZWFkcyIsICZtYXhfbl90 aGRzLCAmc3pfbSwgTlVMTCwKLQkgICAgMCksIDAsICJGYWlsZWQgdG8gZ2V0IG1heCBiYWNrZ3Jv dW5kIHRocmVhZHMiKTsKLQlleHBlY3RfenVfZXEob3B0X21heF9uX3RoZHMsIG1heF9uX3RoZHMs Ci0JICAgICJtYXhfYmFja2dyb3VuZF90aHJlYWRzIGFuZCAiCi0JICAgICJvcHQubWF4X2JhY2tn cm91bmRfdGhyZWFkcyBzaG91bGQgbWF0Y2giKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJtYXhf YmFja2dyb3VuZF90aHJlYWRzIiwgTlVMTCwgTlVMTCwgJm1heF9uX3RoZHMsCi0JICAgIHN6X20p LCAwLCAiRmFpbGVkIHRvIHNldCBtYXggYmFja2dyb3VuZCB0aHJlYWRzIik7Ci0KLQl1bnNpZ25l ZCBpZDsKLQlzaXplX3Qgc3pfdSA9IHNpemVvZih1bnNpZ25lZCk7Ci0KLQlmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgbWF4X3Rlc3RfbmFyZW5hcygpOyBpKyspIHsKLQkJZXhwZWN0X2RfZXEobWFs bGN0bCgiYXJlbmFzLmNyZWF0ZSIsICZpZCwgJnN6X3UsIE5VTEwsIDApLCAwLAotCQkgICAgIkZh aWxlZCB0byBjcmVhdGUgYXJlbmEiKTsKLQl9Ci0KLQlib29sIGVuYWJsZSA9IHRydWU7Ci0Jc2l6 ZV90IHN6X2IgPSBzaXplb2YoYm9vbCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYmFja2dyb3Vu ZF90aHJlYWQiLCBOVUxMLCBOVUxMLCAmZW5hYmxlLCBzel9iKSwgMCwKLQkgICAgIkZhaWxlZCB0 byBlbmFibGUgYmFja2dyb3VuZCB0aHJlYWRzIik7Ci0JZXhwZWN0X3p1X2VxKG5fYmFja2dyb3Vu ZF90aHJlYWRzLCBtYXhfbl90aGRzLAotCSAgICAiTnVtYmVyIG9mIGJhY2tncm91bmQgdGhyZWFk cyBzaG91bGQgbm90IGNoYW5nZS5cbiIpOwotCXNpemVfdCBuZXdfbWF4X3RoZHMgPSBtYXhfbl90 aGRzIC0gMTsKLQlpZiAobmV3X21heF90aGRzID4gMCkgewotCQlleHBlY3RfZF9lcShtYWxsY3Rs KCJtYXhfYmFja2dyb3VuZF90aHJlYWRzIiwgTlVMTCwgTlVMTCwKLQkJICAgICZuZXdfbWF4X3Ro ZHMsIHN6X20pLCAwLAotCQkgICAgIkZhaWxlZCB0byBzZXQgbWF4IGJhY2tncm91bmQgdGhyZWFk cyIpOwotCQlleHBlY3RfenVfZXEobl9iYWNrZ3JvdW5kX3RocmVhZHMsIG5ld19tYXhfdGhkcywK LQkJICAgICJOdW1iZXIgb2YgYmFja2dyb3VuZCB0aHJlYWRzIHNob3VsZCBkZWNyZWFzZSBieSAx LlxuIik7Ci0JfQotCW5ld19tYXhfdGhkcyA9IDE7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgibWF4 X2JhY2tncm91bmRfdGhyZWFkcyIsIE5VTEwsIE5VTEwsICZuZXdfbWF4X3RoZHMsCi0JICAgIHN6 X20pLCAwLCAiRmFpbGVkIHRvIHNldCBtYXggYmFja2dyb3VuZCB0aHJlYWRzIik7Ci0JZXhwZWN0 X3p1X2VxKG5fYmFja2dyb3VuZF90aHJlYWRzLCBuZXdfbWF4X3RoZHMsCi0JICAgICJOdW1iZXIg b2YgYmFja2dyb3VuZCB0aHJlYWRzIHNob3VsZCBiZSAxLlxuIik7Ci19Ci1URVNUX0VORAotCi1p bnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3koCi0JCXRlc3RfZGVm ZXJyZWQsCi0JCXRlc3RfbWF4X2JhY2tncm91bmRfdGhyZWFkcyk7Ci19CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Jhc2UuYyBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXNlLmMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZTA0YTguLjAwMDAwMDAKLS0tIGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Jhc2UuYworKysg L2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0 LmgiCi0KLSNpbmNsdWRlICJ0ZXN0L2V4dGVudF9ob29rcy5oIgotCi1zdGF0aWMgZXh0ZW50X2hv b2tzX3QgaG9va3NfbnVsbCA9IHsKLQlleHRlbnRfYWxsb2NfaG9vaywKLQlOVUxMLCAvKiBkYWxs b2MgKi8KLQlOVUxMLCAvKiBkZXN0cm95ICovCi0JTlVMTCwgLyogY29tbWl0ICovCi0JTlVMTCwg LyogZGVjb21taXQgKi8KLQlOVUxMLCAvKiBwdXJnZV9sYXp5ICovCi0JTlVMTCwgLyogcHVyZ2Vf Zm9yY2VkICovCi0JTlVMTCwgLyogc3BsaXQgKi8KLQlOVUxMIC8qIG1lcmdlICovCi19OwotCi1z dGF0aWMgZXh0ZW50X2hvb2tzX3QgaG9va3Nfbm90X251bGwgPSB7Ci0JZXh0ZW50X2FsbG9jX2hv b2ssCi0JZXh0ZW50X2RhbGxvY19ob29rLAotCWV4dGVudF9kZXN0cm95X2hvb2ssCi0JTlVMTCwg LyogY29tbWl0ICovCi0JZXh0ZW50X2RlY29tbWl0X2hvb2ssCi0JZXh0ZW50X3B1cmdlX2xhenlf aG9vaywKLQlleHRlbnRfcHVyZ2VfZm9yY2VkX2hvb2ssCi0JTlVMTCwgLyogc3BsaXQgKi8KLQlO VUxMIC8qIG1lcmdlICovCi19OwotCi1URVNUX0JFR0lOKHRlc3RfYmFzZV9ob29rc19kZWZhdWx0 KSB7Ci0JYmFzZV90ICpiYXNlOwotCXNpemVfdCBhbGxvY2F0ZWQwLCBhbGxvY2F0ZWQxLCByZXNp ZGVudCwgbWFwcGVkLCBuX3RocDsKLQotCXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZF9mZXRj aCgpKTsKLQliYXNlID0gYmFzZV9uZXcodHNkbiwgMCwKLQkgICAgKGV4dGVudF9ob29rc190ICop JmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcywKLQkgICAgLyogbWV0YWRhdGFfdXNlX2hvb2tz ICovIHRydWUpOwotCi0JaWYgKGNvbmZpZ19zdGF0cykgewotCQliYXNlX3N0YXRzX2dldCh0c2Ru LCBiYXNlLCAmYWxsb2NhdGVkMCwgJnJlc2lkZW50LCAmbWFwcGVkLAotCQkgICAgJm5fdGhwKTsK LQkJZXhwZWN0X3p1X2dlKGFsbG9jYXRlZDAsIHNpemVvZihiYXNlX3QpLAotCQkgICAgIkJhc2Ug aGVhZGVyIHNob3VsZCBjb3VudCBhcyBhbGxvY2F0ZWQiKTsKLQkJaWYgKG9wdF9tZXRhZGF0YV90 aHAgPT0gbWV0YWRhdGFfdGhwX2Fsd2F5cykgewotCQkJZXhwZWN0X3p1X2d0KG5fdGhwLCAwLAot CQkJICAgICJCYXNlIHNob3VsZCBoYXZlIDEgVEhQIGF0IGxlYXN0LiIpOwotCQl9Ci0JfQotCi0J ZXhwZWN0X3B0cl9ub3RfbnVsbChiYXNlX2FsbG9jKHRzZG4sIGJhc2UsIDQyLCAxKSwKLQkgICAg IlVuZXhwZWN0ZWQgYmFzZV9hbGxvYygpIGZhaWx1cmUiKTsKLQotCWlmIChjb25maWdfc3RhdHMp IHsKLQkJYmFzZV9zdGF0c19nZXQodHNkbiwgYmFzZSwgJmFsbG9jYXRlZDEsICZyZXNpZGVudCwg Jm1hcHBlZCwKLQkJICAgICZuX3RocCk7Ci0JCWV4cGVjdF96dV9nZShhbGxvY2F0ZWQxIC0gYWxs b2NhdGVkMCwgNDIsCi0JCSAgICAiQXQgbGVhc3QgNDIgYnl0ZXMgd2VyZSBhbGxvY2F0ZWQgYnkg YmFzZV9hbGxvYygpIik7Ci0JfQotCi0JYmFzZV9kZWxldGUodHNkbiwgYmFzZSk7Ci19Ci1URVNU X0VORAotCi1URVNUX0JFR0lOKHRlc3RfYmFzZV9ob29rc19udWxsKSB7Ci0JZXh0ZW50X2hvb2tz X3QgaG9va3Nfb3JpZzsKLQliYXNlX3QgKmJhc2U7Ci0Jc2l6ZV90IGFsbG9jYXRlZDAsIGFsbG9j YXRlZDEsIHJlc2lkZW50LCBtYXBwZWQsIG5fdGhwOwotCi0JZXh0ZW50X2hvb2tzX3ByZXAoKTsK LQl0cnlfZGFsbG9jID0gZmFsc2U7Ci0JdHJ5X2Rlc3Ryb3kgPSB0cnVlOwotCXRyeV9kZWNvbW1p dCA9IGZhbHNlOwotCXRyeV9wdXJnZV9sYXp5ID0gZmFsc2U7Ci0JdHJ5X3B1cmdlX2ZvcmNlZCA9 IGZhbHNlOwotCW1lbWNweSgmaG9va3Nfb3JpZywgJmhvb2tzLCBzaXplb2YoZXh0ZW50X2hvb2tz X3QpKTsKLQltZW1jcHkoJmhvb2tzLCAmaG9va3NfbnVsbCwgc2l6ZW9mKGV4dGVudF9ob29rc190 KSk7Ci0KLQl0c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2RfZmV0Y2goKSk7Ci0JYmFzZSA9IGJh c2VfbmV3KHRzZG4sIDAsICZob29rcywgLyogbWV0YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOwot CWV4cGVjdF9wdHJfbm90X251bGwoYmFzZSwgIlVuZXhwZWN0ZWQgYmFzZV9uZXcoKSBmYWlsdXJl Iik7Ci0KLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWJhc2Vfc3RhdHNfZ2V0KHRzZG4sIGJhc2Us ICZhbGxvY2F0ZWQwLCAmcmVzaWRlbnQsICZtYXBwZWQsCi0JCSAgICAmbl90aHApOwotCQlleHBl Y3RfenVfZ2UoYWxsb2NhdGVkMCwgc2l6ZW9mKGJhc2VfdCksCi0JCSAgICAiQmFzZSBoZWFkZXIg c2hvdWxkIGNvdW50IGFzIGFsbG9jYXRlZCIpOwotCQlpZiAob3B0X21ldGFkYXRhX3RocCA9PSBt ZXRhZGF0YV90aHBfYWx3YXlzKSB7Ci0JCQlleHBlY3RfenVfZ3Qobl90aHAsIDAsCi0JCQkgICAg IkJhc2Ugc2hvdWxkIGhhdmUgMSBUSFAgYXQgbGVhc3QuIik7Ci0JCX0KLQl9Ci0KLQlleHBlY3Rf cHRyX25vdF9udWxsKGJhc2VfYWxsb2ModHNkbiwgYmFzZSwgNDIsIDEpLAotCSAgICAiVW5leHBl Y3RlZCBiYXNlX2FsbG9jKCkgZmFpbHVyZSIpOwotCi0JaWYgKGNvbmZpZ19zdGF0cykgewotCQli YXNlX3N0YXRzX2dldCh0c2RuLCBiYXNlLCAmYWxsb2NhdGVkMSwgJnJlc2lkZW50LCAmbWFwcGVk LAotCQkgICAgJm5fdGhwKTsKLQkJZXhwZWN0X3p1X2dlKGFsbG9jYXRlZDEgLSBhbGxvY2F0ZWQw LCA0MiwKLQkJICAgICJBdCBsZWFzdCA0MiBieXRlcyB3ZXJlIGFsbG9jYXRlZCBieSBiYXNlX2Fs bG9jKCkiKTsKLQl9Ci0KLQliYXNlX2RlbGV0ZSh0c2RuLCBiYXNlKTsKLQotCW1lbWNweSgmaG9v a3MsICZob29rc19vcmlnLCBzaXplb2YoZXh0ZW50X2hvb2tzX3QpKTsKLX0KLVRFU1RfRU5ECi0K LVRFU1RfQkVHSU4odGVzdF9iYXNlX2hvb2tzX25vdF9udWxsKSB7Ci0JZXh0ZW50X2hvb2tzX3Qg aG9va3Nfb3JpZzsKLQliYXNlX3QgKmJhc2U7Ci0Jdm9pZCAqcCwgKnEsICpyLCAqcl9leHA7Ci0K LQlleHRlbnRfaG9va3NfcHJlcCgpOwotCXRyeV9kYWxsb2MgPSBmYWxzZTsKLQl0cnlfZGVzdHJv eSA9IHRydWU7Ci0JdHJ5X2RlY29tbWl0ID0gZmFsc2U7Ci0JdHJ5X3B1cmdlX2xhenkgPSBmYWxz ZTsKLQl0cnlfcHVyZ2VfZm9yY2VkID0gZmFsc2U7Ci0JbWVtY3B5KCZob29rc19vcmlnLCAmaG9v a3MsIHNpemVvZihleHRlbnRfaG9va3NfdCkpOwotCW1lbWNweSgmaG9va3MsICZob29rc19ub3Rf bnVsbCwgc2l6ZW9mKGV4dGVudF9ob29rc190KSk7Ci0KLQl0c2RuX3QgKnRzZG4gPSB0c2RfdHNk bih0c2RfZmV0Y2goKSk7Ci0JZGlkX2FsbG9jID0gZmFsc2U7Ci0JYmFzZSA9IGJhc2VfbmV3KHRz ZG4sIDAsICZob29rcywgLyogbWV0YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOwotCWV4cGVjdF9w dHJfbm90X251bGwoYmFzZSwgIlVuZXhwZWN0ZWQgYmFzZV9uZXcoKSBmYWlsdXJlIik7Ci0JZXhw ZWN0X3RydWUoZGlkX2FsbG9jLCAiRXhwZWN0ZWQgYWxsb2MiKTsKLQotCS8qCi0JICogQ2hlY2sg Zm9yIHRpZ2h0IHBhY2tpbmcgYXQgc3BlY2lmaWVkIGFsaWdubWVudCB1bmRlciBzaW1wbGUKLQkg KiBjb25kaXRpb25zLgotCSAqLwotCXsKLQkJY29uc3Qgc2l6ZV90IGFsaWdubWVudHNbXSA9IHsK LQkJCTEsCi0JCQlRVUFOVFVNLAotCQkJUVVBTlRVTSA8PCAxLAotCQkJQ0FDSEVMSU5FLAotCQkJ Q0FDSEVMSU5FIDw8IDEsCi0JCX07Ci0JCXVuc2lnbmVkIGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8 IHNpemVvZihhbGlnbm1lbnRzKSAvIHNpemVvZihzaXplX3QpOyBpKyspIHsKLQkJCXNpemVfdCBh bGlnbm1lbnQgPSBhbGlnbm1lbnRzW2ldOwotCQkJc2l6ZV90IGFsaWduX2NlaWwgPSBBTElHTk1F TlRfQ0VJTElORyhhbGlnbm1lbnQsCi0JCQkgICAgUVVBTlRVTSk7Ci0JCQlwID0gYmFzZV9hbGxv Yyh0c2RuLCBiYXNlLCAxLCBhbGlnbm1lbnQpOwotCQkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLAot CQkJICAgICJVbmV4cGVjdGVkIGJhc2VfYWxsb2MoKSBmYWlsdXJlIik7Ci0JCQlleHBlY3RfcHRy X2VxKHAsCi0JCQkgICAgKHZvaWQgKikoQUxJR05NRU5UX0NFSUxJTkcoKHVpbnRwdHJfdClwLAot CQkJICAgIGFsaWdubWVudCkpLCAiRXhwZWN0ZWQgcXVhbnR1bSBhbGlnbm1lbnQiKTsKLQkJCXEg PSBiYXNlX2FsbG9jKHRzZG4sIGJhc2UsIGFsaWdubWVudCwgYWxpZ25tZW50KTsKLQkJCWV4cGVj dF9wdHJfbm90X251bGwocSwKLQkJCSAgICAiVW5leHBlY3RlZCBiYXNlX2FsbG9jKCkgZmFpbHVy ZSIpOwotCQkJZXhwZWN0X3B0cl9lcSgodm9pZCAqKSgodWludHB0cl90KXAgKyBhbGlnbl9jZWls KSwgcSwKLQkJCSAgICAiTWluaW1hbCBhbGxvY2F0aW9uIHNob3VsZCB0YWtlIHVwICV6dSBieXRl cyIsCi0JCQkgICAgYWxpZ25fY2VpbCk7Ci0JCQlyID0gYmFzZV9hbGxvYyh0c2RuLCBiYXNlLCAx LCBhbGlnbm1lbnQpOwotCQkJZXhwZWN0X3B0cl9ub3RfbnVsbChyLAotCQkJICAgICJVbmV4cGVj dGVkIGJhc2VfYWxsb2MoKSBmYWlsdXJlIik7Ci0JCQlleHBlY3RfcHRyX2VxKCh2b2lkICopKCh1 aW50cHRyX3QpcSArIGFsaWduX2NlaWwpLCByLAotCQkJICAgICJNaW5pbWFsIGFsbG9jYXRpb24g c2hvdWxkIHRha2UgdXAgJXp1IGJ5dGVzIiwKLQkJCSAgICBhbGlnbl9jZWlsKTsKLQkJfQotCX0K LQotCS8qCi0JICogQWxsb2NhdGUgYW4gb2JqZWN0IHRoYXQgY2Fubm90IGZpdCBpbiB0aGUgZmly c3QgYmxvY2ssIHRoZW4gdmVyaWZ5Ci0JICogdGhhdCB0aGUgZmlyc3QgYmxvY2sncyByZW1haW5p bmcgc3BhY2UgaXMgY29uc2lkZXJlZCBmb3Igc3Vic2VxdWVudAotCSAqIGFsbG9jYXRpb24uCi0J ICovCi0JZXhwZWN0X3p1X2dlKGVkYXRhX2JzaXplX2dldCgmYmFzZS0+YmxvY2tzLT5lZGF0YSks IFFVQU5UVU0sCi0JICAgICJSZW1haW5kZXIgaW5zdWZmaWNpZW50IGZvciB0ZXN0Iik7Ci0JLyog VXNlIHVwIGFsbCBidXQgb25lIHF1YW50dW0gb2YgYmxvY2suICovCi0Jd2hpbGUgKGVkYXRhX2Jz aXplX2dldCgmYmFzZS0+YmxvY2tzLT5lZGF0YSkgPiBRVUFOVFVNKSB7Ci0JCXAgPSBiYXNlX2Fs bG9jKHRzZG4sIGJhc2UsIFFVQU5UVU0sIFFVQU5UVU0pOwotCQlleHBlY3RfcHRyX25vdF9udWxs KHAsICJVbmV4cGVjdGVkIGJhc2VfYWxsb2MoKSBmYWlsdXJlIik7Ci0JfQotCXJfZXhwID0gZWRh dGFfYWRkcl9nZXQoJmJhc2UtPmJsb2Nrcy0+ZWRhdGEpOwotCWV4cGVjdF96dV9lcShiYXNlLT5l eHRlbnRfc25fbmV4dCwgMSwgIk9uZSBleHRhbnQgYmxvY2sgZXhwZWN0ZWQiKTsKLQlxID0gYmFz ZV9hbGxvYyh0c2RuLCBiYXNlLCBRVUFOVFVNICsgMSwgUVVBTlRVTSk7Ci0JZXhwZWN0X3B0cl9u b3RfbnVsbChxLCAiVW5leHBlY3RlZCBiYXNlX2FsbG9jKCkgZmFpbHVyZSIpOwotCWV4cGVjdF9w dHJfbmUocSwgcl9leHAsICJFeHBlY3RlZCBhbGxvY2F0aW9uIGZyb20gbmV3IGJsb2NrIik7Ci0J ZXhwZWN0X3p1X2VxKGJhc2UtPmV4dGVudF9zbl9uZXh0LCAyLCAiVHdvIGV4dGFudCBibG9ja3Mg ZXhwZWN0ZWQiKTsKLQlyID0gYmFzZV9hbGxvYyh0c2RuLCBiYXNlLCBRVUFOVFVNLCBRVUFOVFVN KTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHIsICJVbmV4cGVjdGVkIGJhc2VfYWxsb2MoKSBmYWls dXJlIik7Ci0JZXhwZWN0X3B0cl9lcShyLCByX2V4cCwgIkV4cGVjdGVkIGFsbG9jYXRpb24gZnJv bSBmaXJzdCBibG9jayIpOwotCWV4cGVjdF96dV9lcShiYXNlLT5leHRlbnRfc25fbmV4dCwgMiwg IlR3byBleHRhbnQgYmxvY2tzIGV4cGVjdGVkIik7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBwcm9w ZXIgYWxpZ25tZW50IHN1cHBvcnQgd2hlbiBub3JtYWwgYmxvY2tzIGFyZSB0b28gc21hbGwuCi0J ICovCi0JewotCQljb25zdCBzaXplX3QgYWxpZ25tZW50c1tdID0gewotCQkJSFVHRVBBR0UsCi0J CQlIVUdFUEFHRSA8PCAxCi0JCX07Ci0JCXVuc2lnbmVkIGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8 IHNpemVvZihhbGlnbm1lbnRzKSAvIHNpemVvZihzaXplX3QpOyBpKyspIHsKLQkJCXNpemVfdCBh bGlnbm1lbnQgPSBhbGlnbm1lbnRzW2ldOwotCQkJcCA9IGJhc2VfYWxsb2ModHNkbiwgYmFzZSwg UVVBTlRVTSwgYWxpZ25tZW50KTsKLQkJCWV4cGVjdF9wdHJfbm90X251bGwocCwKLQkJCSAgICAi VW5leHBlY3RlZCBiYXNlX2FsbG9jKCkgZmFpbHVyZSIpOwotCQkJZXhwZWN0X3B0cl9lcShwLAot CQkJICAgICh2b2lkICopKEFMSUdOTUVOVF9DRUlMSU5HKCh1aW50cHRyX3QpcCwKLQkJCSAgICBh bGlnbm1lbnQpKSwgIkV4cGVjdGVkICV6dS1ieXRlIGFsaWdubWVudCIsCi0JCQkgICAgYWxpZ25t ZW50KTsKLQkJfQotCX0KLQotCWNhbGxlZF9kYWxsb2MgPSBjYWxsZWRfZGVzdHJveSA9IGNhbGxl ZF9kZWNvbW1pdCA9IGNhbGxlZF9wdXJnZV9sYXp5ID0KLQkgICAgY2FsbGVkX3B1cmdlX2ZvcmNl ZCA9IGZhbHNlOwotCWJhc2VfZGVsZXRlKHRzZG4sIGJhc2UpOwotCWV4cGVjdF90cnVlKGNhbGxl ZF9kYWxsb2MsICJFeHBlY3RlZCBkYWxsb2MgY2FsbCIpOwotCWV4cGVjdF90cnVlKCFjYWxsZWRf ZGVzdHJveSwgIlVuZXhwZWN0ZWQgZGVzdHJveSBjYWxsIik7Ci0JZXhwZWN0X3RydWUoY2FsbGVk X2RlY29tbWl0LCAiRXhwZWN0ZWQgZGVjb21taXQgY2FsbCIpOwotCWV4cGVjdF90cnVlKGNhbGxl ZF9wdXJnZV9sYXp5LCAiRXhwZWN0ZWQgcHVyZ2VfbGF6eSBjYWxsIik7Ci0JZXhwZWN0X3RydWUo Y2FsbGVkX3B1cmdlX2ZvcmNlZCwgIkV4cGVjdGVkIHB1cmdlX2ZvcmNlZCBjYWxsIik7Ci0KLQl0 cnlfZGFsbG9jID0gdHJ1ZTsKLQl0cnlfZGVzdHJveSA9IHRydWU7Ci0JdHJ5X2RlY29tbWl0ID0g dHJ1ZTsKLQl0cnlfcHVyZ2VfbGF6eSA9IHRydWU7Ci0JdHJ5X3B1cmdlX2ZvcmNlZCA9IHRydWU7 Ci0JbWVtY3B5KCZob29rcywgJmhvb2tzX29yaWcsIHNpemVvZihleHRlbnRfaG9va3NfdCkpOwot fQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2Jhc2VfZWhvb2tzX2dldF9mb3JfbWV0YWRh dGFfZGVmYXVsdF9ob29rKSB7Ci0JZXh0ZW50X2hvb2tzX3ByZXAoKTsKLQltZW1jcHkoJmhvb2tz LCAmaG9va3Nfbm90X251bGwsIHNpemVvZihleHRlbnRfaG9va3NfdCkpOwotCWJhc2VfdCAqYmFz ZTsKLQl0c2RuX3QgKnRzZG4gPSB0c2RfdHNkbih0c2RfZmV0Y2goKSk7Ci0JYmFzZSA9IGJhc2Vf bmV3KHRzZG4sIDAsICZob29rcywgLyogbWV0YWRhdGFfdXNlX2hvb2tzICovIGZhbHNlKTsKLQll aG9va3NfdCAqZWhvb2tzID0gYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0YShiYXNlKTsKLQll eHBlY3RfdHJ1ZShlaG9va3NfYXJlX2RlZmF1bHQoZWhvb2tzKSwKLQkJIkV4cGVjdGVkIGRlZmF1 bHQgZXh0ZW50IGhvb2sgZnVuY3Rpb25zIHBvaW50ZXIiKTsKLQliYXNlX2RlbGV0ZSh0c2RuLCBi YXNlKTsKLX0KLVRFU1RfRU5ECi0KLQotVEVTVF9CRUdJTih0ZXN0X2Jhc2VfZWhvb2tzX2dldF9m b3JfbWV0YWRhdGFfY3VzdG9tX2hvb2spIHsKLQlleHRlbnRfaG9va3NfcHJlcCgpOwotCW1lbWNw eSgmaG9va3MsICZob29rc19ub3RfbnVsbCwgc2l6ZW9mKGV4dGVudF9ob29rc190KSk7Ci0JYmFz ZV90ICpiYXNlOwotCXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZF9mZXRjaCgpKTsKLQliYXNl ID0gYmFzZV9uZXcodHNkbiwgMCwgJmhvb2tzLCAvKiBtZXRhZGF0YV91c2VfaG9va3MgKi8gdHJ1 ZSk7Ci0JZWhvb2tzX3QgKmVob29rcyA9IGJhc2VfZWhvb2tzX2dldF9mb3JfbWV0YWRhdGEoYmFz ZSk7Ci0JZXhwZWN0X3B0cl9lcSgmaG9va3MsIGVob29rc19nZXRfZXh0ZW50X2hvb2tzX3B0cihl aG9va3MpLAotCQkiRXhwZWN0ZWQgdXNlci1zcGVjaWZpZWQgZXh0ZW5kIGhvb2sgZnVuY3Rpb25z IHBvaW50ZXIiKTsKLQliYXNlX2RlbGV0ZSh0c2RuLCBiYXNlKTsKLX0KLVRFU1RfRU5ECi0KLWlu dAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfYmFzZV9ob29rc19kZWZh dWx0LAotCSAgICB0ZXN0X2Jhc2VfaG9va3NfbnVsbCwKLQkgICAgdGVzdF9iYXNlX2hvb2tzX25v dF9udWxsLAotICAgICAgICAgICAgdGVzdF9iYXNlX2Vob29rc19nZXRfZm9yX21ldGFkYXRhX2Rl ZmF1bHRfaG9vaywKLSAgICAgICAgICAgIHRlc3RfYmFzZV9laG9va3NfZ2V0X2Zvcl9tZXRhZGF0 YV9jdXN0b21faG9vayk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhdGNoX2FsbG9jLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2MuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggOTAxYzUyYi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2MuYworKysgL2Rl di9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0Lmgi Ci0KLSNkZWZpbmUgQkFUQ0hfTUFYICgoMVUgPDwgMTYpICsgMTAyNCkKLXN0YXRpYyB2b2lkICpn bG9iYWxfcHRyc1tCQVRDSF9NQVhdOwotCi0jZGVmaW5lIFBBR0VfQUxJR05FRChwdHIpICgoKHVp bnRwdHJfdClwdHIgJiBQQUdFX01BU0spID09IDApCi0KLXN0YXRpYyB2b2lkCi12ZXJpZnlfYmF0 Y2hfYmFzaWModHNkX3QgKnRzZCwgdm9pZCAqKnB0cnMsIHNpemVfdCBiYXRjaCwgc2l6ZV90IHVz aXplLAotICAgIGJvb2wgemVybykgewotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmF0Y2g7ICsr aSkgewotCQl2b2lkICpwID0gcHRyc1tpXTsKLQkJZXhwZWN0X3p1X2VxKGlzYWxsb2ModHNkX3Rz ZG4odHNkKSwgcCksIHVzaXplLCAiIik7Ci0JCWlmICh6ZXJvKSB7Ci0JCQlmb3IgKHNpemVfdCBr ID0gMDsgayA8IHVzaXplOyArK2spIHsKLQkJCQlleHBlY3RfdHJ1ZSgqKCh1bnNpZ25lZCBjaGFy ICopcCArIGspID09IDAsICIiKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXZl cmlmeV9iYXRjaF9sb2NhbGl0eSh0c2RfdCAqdHNkLCB2b2lkICoqcHRycywgc2l6ZV90IGJhdGNo LCBzaXplX3QgdXNpemUsCi0gICAgYXJlbmFfdCAqYXJlbmEsIHVuc2lnbmVkIG5yZWdzKSB7Ci0J aWYgKGNvbmZpZ19wcm9mICYmIG9wdF9wcm9mKSB7Ci0JCS8qCi0JCSAqIENoZWNraW5nIGJhdGNo IGxvY2FsaXR5IHdoZW4gcHJvZiBpcyBvbiBpcyBmZWFzaWJsZSBidXQKLQkJICogY29tcGxpY2F0 ZWQsIHdoaWxlIGNoZWNraW5nIHRoZSBub24tcHJvZiBjYXNlIHN1ZmZpY2VzIGZvcgotCQkgKiB1 bml0LXRlc3QgcHVycG9zZS4KLQkJICovCi0JCXJldHVybjsKLQl9Ci0JZm9yIChzaXplX3QgaSA9 IDAsIGogPSAwOyBpIDwgYmF0Y2g7ICsraSwgKytqKSB7Ci0JCWlmIChqID09IG5yZWdzKSB7Ci0J CQlqID0gMDsKLQkJfQotCQlpZiAoaiA9PSAwICYmIGJhdGNoIC0gaSA8IG5yZWdzKSB7Ci0JCQli cmVhazsKLQkJfQotCQl2b2lkICpwID0gcHRyc1tpXTsKLQkJZXhwZWN0X3B0cl9lcShpYWFsbG9j KHRzZF90c2RuKHRzZCksIHApLCBhcmVuYSwgIiIpOwotCQlpZiAoaiA9PSAwKSB7Ci0JCQlleHBl Y3RfdHJ1ZShQQUdFX0FMSUdORUQocCksICIiKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWFzc2Vy dChpID4gMCk7Ci0JCXZvaWQgKnEgPSBwdHJzW2kgLSAxXTsKLQkJZXhwZWN0X3RydWUoKHVpbnRw dHJfdClwID4gKHVpbnRwdHJfdClxCi0JCSAgICAmJiAoc2l6ZV90KSgodWludHB0cl90KXAgLSAo dWludHB0cl90KXEpID09IHVzaXplLCAiIik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcmVsZWFz ZV9iYXRjaCh2b2lkICoqcHRycywgc2l6ZV90IGJhdGNoLCBzaXplX3Qgc2l6ZSkgewotCWZvciAo c2l6ZV90IGkgPSAwOyBpIDwgYmF0Y2g7ICsraSkgewotCQlzZGFsbG9jeChwdHJzW2ldLCBzaXpl LCAwKTsKLQl9Ci19Ci0KLXR5cGVkZWYgc3RydWN0IGJhdGNoX2FsbG9jX3BhY2tldF9zIGJhdGNo X2FsbG9jX3BhY2tldF90Owotc3RydWN0IGJhdGNoX2FsbG9jX3BhY2tldF9zIHsKLQl2b2lkICoq cHRyczsKLQlzaXplX3QgbnVtOwotCXNpemVfdCBzaXplOwotCWludCBmbGFnczsKLX07Ci0KLXN0 YXRpYyBzaXplX3QKLWJhdGNoX2FsbG9jX3dyYXBwZXIodm9pZCAqKnB0cnMsIHNpemVfdCBudW0s IHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpIHsKLQliYXRjaF9hbGxvY19wYWNrZXRfdCBiYXRjaF9h bGxvY19wYWNrZXQgPSB7cHRycywgbnVtLCBzaXplLCBmbGFnc307Ci0Jc2l6ZV90IGZpbGxlZDsK LQlzaXplX3QgbGVuID0gc2l6ZW9mKHNpemVfdCk7Ci0JYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXhw ZXJpbWVudGFsLmJhdGNoX2FsbG9jIiwgJmZpbGxlZCwgJmxlbiwKLQkgICAgJmJhdGNoX2FsbG9j X3BhY2tldCwgc2l6ZW9mKGJhdGNoX2FsbG9jX3BhY2tldCkpLCAwLCAiIik7Ci0JcmV0dXJuIGZp bGxlZDsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfd3JhcHBlcihzaXplX3Qgc2l6ZSwgc2l6ZV90 IGFsaWdubWVudCwgYm9vbCB6ZXJvLCB1bnNpZ25lZCBhcmVuYV9mbGFnKSB7Ci0JdHNkX3QgKnRz ZCA9IHRzZF9mZXRjaCgpOwotCWFzc2VydCh0c2QgIT0gTlVMTCk7Ci0JY29uc3Qgc2l6ZV90IHVz aXplID0KLQkgICAgKGFsaWdubWVudCAhPSAwID8gc3pfc2EydShzaXplLCBhbGlnbm1lbnQpIDog c3pfczJ1KHNpemUpKTsKLQljb25zdCBzemluZF90IGluZCA9IHN6X3NpemUyaW5kZXgodXNpemUp OwotCWNvbnN0IGJpbl9pbmZvX3QgKmJpbl9pbmZvID0gJmJpbl9pbmZvc1tpbmRdOwotCWNvbnN0 IHVuc2lnbmVkIG5yZWdzID0gYmluX2luZm8tPm5yZWdzOwotCWFzc2VydChucmVncyA+IDApOwot CWFyZW5hX3QgKmFyZW5hOwotCWlmIChhcmVuYV9mbGFnICE9IDApIHsKLQkJYXJlbmEgPSBhcmVu YV9nZXQodHNkX3RzZG4odHNkKSwgTUFMTE9DWF9BUkVOQV9HRVQoYXJlbmFfZmxhZyksCi0JCSAg ICBmYWxzZSk7Ci0JfSBlbHNlIHsKLQkJYXJlbmEgPSBhcmVuYV9jaG9vc2UodHNkLCBOVUxMKTsK LQl9Ci0JYXNzZXJ0KGFyZW5hICE9IE5VTEwpOwotCWludCBmbGFncyA9IGFyZW5hX2ZsYWc7Ci0J aWYgKGFsaWdubWVudCAhPSAwKSB7Ci0JCWZsYWdzIHw9IE1BTExPQ1hfQUxJR04oYWxpZ25tZW50 KTsKLQl9Ci0JaWYgKHplcm8pIHsKLQkJZmxhZ3MgfD0gTUFMTE9DWF9aRVJPOwotCX0KLQotCS8q Ci0JICogQWxsb2NhdGUgZm9yIHRoZSBwdXJwb3NlIG9mIGJvb3RzdHJhcHBpbmcgYXJlbmFfdGRh dGEsIHNvIHRoYXQgdGhlCi0JICogY2hhbmdlIGluIGJpbiBzdGF0cyB3b24ndCBjb250YW1pbmF0 ZSB0aGUgc3RhdHMgdG8gYmUgdmVyaWZpZWQgYmVsb3cuCi0JICovCi0Jdm9pZCAqcCA9IG1hbGxv Y3goc2l6ZSwgZmxhZ3MgfCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQotCWZvciAoc2l6ZV90IGkg PSAwOyBpIDwgNDsgKytpKSB7Ci0JCXNpemVfdCBiYXNlID0gMDsKLQkJaWYgKGkgPT0gMSkgewot CQkJYmFzZSA9IG5yZWdzOwotCQl9IGVsc2UgaWYgKGkgPT0gMikgewotCQkJYmFzZSA9IG5yZWdz ICogMjsKLQkJfSBlbHNlIGlmIChpID09IDMpIHsKLQkJCWJhc2UgPSAoMSA8PCAxNik7Ci0JCX0K LQkJZm9yIChpbnQgaiA9IC0xOyBqIDw9IDE7ICsraikgewotCQkJaWYgKGJhc2UgPT0gMCAmJiBq ID09IC0xKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzaXplX3QgYmF0Y2ggPSBiYXNlICsg KHNpemVfdClqOwotCQkJYXNzZXJ0KGJhdGNoIDwgQkFUQ0hfTUFYKTsKLQkJCXNpemVfdCBmaWxs ZWQgPSBiYXRjaF9hbGxvY193cmFwcGVyKGdsb2JhbF9wdHJzLCBiYXRjaCwKLQkJCSAgICBzaXpl LCBmbGFncyk7Ci0JCQlhc3NlcnRfenVfZXEoZmlsbGVkLCBiYXRjaCwgIiIpOwotCQkJdmVyaWZ5 X2JhdGNoX2Jhc2ljKHRzZCwgZ2xvYmFsX3B0cnMsIGJhdGNoLCB1c2l6ZSwKLQkJCSAgICB6ZXJv KTsKLQkJCXZlcmlmeV9iYXRjaF9sb2NhbGl0eSh0c2QsIGdsb2JhbF9wdHJzLCBiYXRjaCwgdXNp emUsCi0JCQkgICAgYXJlbmEsIG5yZWdzKTsKLQkJCXJlbGVhc2VfYmF0Y2goZ2xvYmFsX3B0cnMs IGJhdGNoLCB1c2l6ZSk7Ci0JCX0KLQl9Ci0KLQlmcmVlKHApOwotfQotCi1URVNUX0JFR0lOKHRl c3RfYmF0Y2hfYWxsb2MpIHsKLQl0ZXN0X3dyYXBwZXIoMTEsIDAsIGZhbHNlLCAwKTsKLX0KLVRF U1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9iYXRjaF9hbGxvY196ZXJvKSB7Ci0JdGVzdF93cmFw cGVyKDExLCAwLCB0cnVlLCAwKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9iYXRj aF9hbGxvY19hbGlnbmVkKSB7Ci0JdGVzdF93cmFwcGVyKDcsIDE2LCBmYWxzZSwgMCk7Ci19Ci1U RVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfYmF0Y2hfYWxsb2NfbWFudWFsX2FyZW5hKSB7Ci0J dW5zaWduZWQgYXJlbmFfaW5kOwotCXNpemVfdCBsZW5fdW5zaWduZWQgPSBzaXplb2YodW5zaWdu ZWQpOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAmYXJlbmFfaW5kLCAm bGVuX3Vuc2lnbmVkLCBOVUxMLAotCSAgICAwKSwgMCwgIiIpOwotCXRlc3Rfd3JhcHBlcigxMSwg MCwgZmFsc2UsIE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSk7Ci19Ci1URVNUX0VORAotCi1URVNU X0JFR0lOKHRlc3RfYmF0Y2hfYWxsb2NfbGFyZ2UpIHsKLQlzaXplX3Qgc2l6ZSA9IFNDX0xBUkdF X01JTkNMQVNTOwotCWZvciAoc2l6ZV90IGJhdGNoID0gMDsgYmF0Y2ggPCA0OyArK2JhdGNoKSB7 Ci0JCWFzc2VydChiYXRjaCA8IEJBVENIX01BWCk7Ci0JCXNpemVfdCBmaWxsZWQgPSBiYXRjaF9h bGxvYyhnbG9iYWxfcHRycywgYmF0Y2gsIHNpemUsIDApOwotCQlhc3NlcnRfenVfZXEoZmlsbGVk LCBiYXRjaCwgIiIpOwotCQlyZWxlYXNlX2JhdGNoKGdsb2JhbF9wdHJzLCBiYXRjaCwgc2l6ZSk7 Ci0JfQotCXNpemUgPSB0Y2FjaGVfbWF4Y2xhc3MgKyAxOwotCWZvciAoc2l6ZV90IGJhdGNoID0g MDsgYmF0Y2ggPCA0OyArK2JhdGNoKSB7Ci0JCWFzc2VydChiYXRjaCA8IEJBVENIX01BWCk7Ci0J CXNpemVfdCBmaWxsZWQgPSBiYXRjaF9hbGxvYyhnbG9iYWxfcHRycywgYmF0Y2gsIHNpemUsIDAp OwotCQlhc3NlcnRfenVfZXEoZmlsbGVkLCBiYXRjaCwgIiIpOwotCQlyZWxlYXNlX2JhdGNoKGds b2JhbF9wdHJzLCBiYXRjaCwgc2l6ZSk7Ci0JfQotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZv aWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9iYXRjaF9hbGxvYywKLQkgICAgdGVzdF9i YXRjaF9hbGxvY196ZXJvLAotCSAgICB0ZXN0X2JhdGNoX2FsbG9jX2FsaWduZWQsCi0JICAgIHRl c3RfYmF0Y2hfYWxsb2NfbWFudWFsX2FyZW5hLAotCSAgICB0ZXN0X2JhdGNoX2FsbG9jX2xhcmdl KTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2Muc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2Muc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDlkODEwMTAuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JhdGNoX2FsbG9jLnNoCisrKyAvZGV2L251bGwKQEAg LTEsMyArMCwwIEBACi0jIS9iaW4vc2gKLQotZXhwb3J0IE1BTExPQ19DT05GPSJ0Y2FjaGVfZ2Nf aW5jcl9ieXRlczoyMTQ3NDgzNjQ4IgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXRjaF9hbGxvY19wcm9mLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2NfcHJv Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjY0NDU4Li4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXRjaF9h bGxvY19wcm9mLmMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaW5jbHVkZSAiYmF0Y2hf YWxsb2MuYyIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvYmF0Y2hfYWxsb2NfcHJvZi5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXRjaF9hbGxvY19wcm9mLnNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjY5N2E2Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9iYXRjaF9hbGxvY19wcm9mLnNo CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIS9iaW4vc2gKLQotZXhwb3J0IE1BTExP Q19DT05GPSJwcm9mOnRydWUsbGdfcHJvZl9zYW1wbGU6MTQiCgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JpbnNoYXJkLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmluc2hhcmQu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQwZWE1NC4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYmluc2hhcmQu YworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxv Y190ZXN0LmgiCi0KLS8qIENvbmZpZyAtLSAibmFyZW5hczoxLGJpbl9zaGFyZHM6MS0xNjA6MTZ8 MTI5LTUxMjo0fDI1Ni0yNTY6OCIgKi8KLQotI2RlZmluZSBOVEhSRUFEUyAxNgotI2RlZmluZSBS RU1PVEVfTkFMTE9DIDI1NgotCi1zdGF0aWMgdm9pZCAqCi10aGRfcHJvZHVjZXIodm9pZCAqdmFy ZykgewotCXZvaWQgKiptZW0gPSB2YXJnOwotCXVuc2lnbmVkIGFyZW5hLCBpOwotCXNpemVfdCBz ejsKLQotCXN6ID0gc2l6ZW9mKGFyZW5hKTsKLQkvKiBSZW1vdGUgYXJlbmEuICovCi0JZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hLCAmc3osIE5VTEws IDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWZvciAoaSA9 IDA7IGkgPCBSRU1PVEVfTkFMTE9DIC8gMjsgaSsrKSB7Ci0JCW1lbVtpXSA9IG1hbGxvY3goMSwg TUFMTE9DWF9UQ0FDSEVfTk9ORSB8IE1BTExPQ1hfQVJFTkEoYXJlbmEpKTsKLQl9Ci0KLQkvKiBS ZW1vdGUgYmluLiAqLwotCWZvciAoOyBpIDwgUkVNT1RFX05BTExPQzsgaSsrKSB7Ci0JCW1lbVtp XSA9IG1hbGxvY3goMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSB8IE1BTExPQ1hfQVJFTkEoMCkpOwot CX0KLQotCXJldHVybiBOVUxMOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcHJvZHVjZXJfY29uc3Vt ZXIpIHsKLQl0aGRfdCB0aGRzW05USFJFQURTXTsKLQl2b2lkICptZW1bTlRIUkVBRFNdW1JFTU9U RV9OQUxMT0NdOwotCXVuc2lnbmVkIGk7Ci0KLQkvKiBDcmVhdGUgcHJvZHVjZXIgdGhyZWFkcyB0 byBhbGxvY2F0ZS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlRIUkVBRFM7IGkrKykgewotCQl0aGRf Y3JlYXRlKCZ0aGRzW2ldLCB0aGRfcHJvZHVjZXIsIG1lbVtpXSk7Ci0JfQotCWZvciAoaSA9IDA7 IGkgPCBOVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9qb2luKHRoZHNbaV0sIE5VTEwpOwotCX0KLQkv KiBSZW1vdGUgZGVhbGxvY2F0aW9uIGJ5IHRoZSBjdXJyZW50IHRocmVhZC4gKi8KLQlmb3IgKGkg PSAwOyBpIDwgTlRIUkVBRFM7IGkrKykgewotCQlmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgUkVN T1RFX05BTExPQzsgaisrKSB7Ci0JCQlleHBlY3RfcHRyX25vdF9udWxsKG1lbVtpXVtqXSwKLQkJ CSAgICAiVW5leHBlY3RlZCByZW1vdGUgYWxsb2NhdGlvbiBmYWlsdXJlIik7Ci0JCQlkYWxsb2N4 KG1lbVtpXVtqXSwgMCk7Ci0JCX0KLQl9Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZCAqCi10 aGRfc3RhcnQodm9pZCAqdmFyZykgewotCXZvaWQgKnB0ciwgKnB0cjI7Ci0JZWRhdGFfdCAqZWRh dGE7Ci0JdW5zaWduZWQgc2hhcmQxLCBzaGFyZDI7Ci0KLQl0c2RuX3QgKnRzZG4gPSB0c2RuX2Zl dGNoKCk7Ci0JLyogVHJ5IHRyaWdnZXJpbmcgYWxsb2NhdGlvbnMgZnJvbSBzaGFyZGVkIGJpbnMu ICovCi0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMjQ7IGkrKykgewotCQlwdHIgPSBtYWxs b2N4KDEsIE1BTExPQ1hfVENBQ0hFX05PTkUpOwotCQlwdHIyID0gbWFsbG9jeCgxMjksIE1BTExP Q1hfVENBQ0hFX05PTkUpOwotCi0JCWVkYXRhID0gZW1hcF9lZGF0YV9sb29rdXAodHNkbiwgJmFy ZW5hX2VtYXBfZ2xvYmFsLCBwdHIpOwotCQlzaGFyZDEgPSBlZGF0YV9iaW5zaGFyZF9nZXQoZWRh dGEpOwotCQlkYWxsb2N4KHB0ciwgMCk7Ci0JCWV4cGVjdF91X2x0KHNoYXJkMSwgMTYsICJVbmV4 cGVjdGVkIGJpbiBzaGFyZCB1c2VkIik7Ci0KLQkJZWRhdGEgPSBlbWFwX2VkYXRhX2xvb2t1cCh0 c2RuLCAmYXJlbmFfZW1hcF9nbG9iYWwsIHB0cjIpOwotCQlzaGFyZDIgPSBlZGF0YV9iaW5zaGFy ZF9nZXQoZWRhdGEpOwotCQlkYWxsb2N4KHB0cjIsIDApOwotCQlleHBlY3RfdV9sdChzaGFyZDIs IDQsICJVbmV4cGVjdGVkIGJpbiBzaGFyZCB1c2VkIik7Ci0KLQkJaWYgKHNoYXJkMSA+IDAgfHwg c2hhcmQyID4gMCkgewotCQkJLyogVHJpZ2dlcmVkIHNoYXJkZWQgYmluIHVzYWdlLiAqLwotCQkJ cmV0dXJuICh2b2lkICopKHVpbnRwdHJfdClzaGFyZDE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVM TDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2Jpbl9zaGFyZF9tdCkgewotCXRlc3Rfc2tpcF9pZiho YXZlX3BlcmNwdV9hcmVuYSAmJgotCSAgICBQRVJDUFVfQVJFTkFfRU5BQkxFRChvcHRfcGVyY3B1 X2FyZW5hKSk7Ci0KLQl0aGRfdCB0aGRzW05USFJFQURTXTsKLQl1bnNpZ25lZCBpOwotCWZvciAo aSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9jcmVhdGUoJnRoZHNbaV0sIHRoZF9z dGFydCwgTlVMTCk7Ci0JfQotCWJvb2wgc2hhcmRlZCA9IGZhbHNlOwotCWZvciAoaSA9IDA7IGkg PCBOVEhSRUFEUzsgaSsrKSB7Ci0JCXZvaWQgKnJldDsKLQkJdGhkX2pvaW4odGhkc1tpXSwgJnJl dCk7Ci0JCWlmIChyZXQgIT0gTlVMTCkgewotCQkJc2hhcmRlZCA9IHRydWU7Ci0JCX0KLQl9Ci0J ZXhwZWN0X2JfZXEoc2hhcmRlZCwgdHJ1ZSwgIkRpZCBub3QgZmluZCBzaGFyZGVkIGJpbnMiKTsK LX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9iaW5fc2hhcmQpIHsKLQl1bnNpZ25lZCBu YmlucywgaTsKLQlzaXplX3QgbWliWzRdLCBtaWIyWzRdOwotCXNpemVfdCBtaWJsZW4sIG1pYmxl bjIsIGxlbjsKLQotCWxlbiA9IHNpemVvZihuYmlucyk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgi YXJlbmFzLm5iaW5zIiwgKHZvaWQgKikmbmJpbnMsICZsZW4sIE5VTEwsIDApLCAwLAotCSAgICAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCi0JbWlibGVuID0gNDsKLQlleHBlY3Rf ZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYXMuYmluLjAubnNoYXJkcyIsIG1pYiwgJm1pYmxl biksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7Ci0J bWlibGVuMiA9IDQ7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJlbmFzLmJpbi4w LnNpemUiLCBtaWIyLCAmbWlibGVuMiksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1l dG9taWIoKSBmYWlsdXJlIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmJpbnM7IGkrKykgewotCQl1 aW50MzJfdCBuc2hhcmRzOwotCQlzaXplX3Qgc2l6ZSwgc3oxLCBzejI7Ci0KLQkJbWliWzJdID0g aTsKLQkJc3oxID0gc2l6ZW9mKG5zaGFyZHMpOwotCQlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIo bWliLCBtaWJsZW4sICh2b2lkICopJm5zaGFyZHMsICZzejEsCi0JCSAgICBOVUxMLCAwKSwgMCwg IlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIpOwotCi0JCW1pYjJbMl0gPSBpOwot CQlzejIgPSBzaXplb2Yoc2l6ZSk7Ci0JCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIyLCBt aWJsZW4yLCAodm9pZCAqKSZzaXplLCAmc3oyLAotCQkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVj dGVkIG1hbGxjdGxieW1pYigpIGZhaWx1cmUiKTsKLQotCQlpZiAoc2l6ZSA+PSAxICYmIHNpemUg PD0gMTI4KSB7Ci0JCQlleHBlY3RfdV9lcShuc2hhcmRzLCAxNiwgIlVuZXhwZWN0ZWQgbnNoYXJk cyIpOwotCQl9IGVsc2UgaWYgKHNpemUgPT0gMjU2KSB7Ci0JCQlleHBlY3RfdV9lcShuc2hhcmRz LCA4LCAiVW5leHBlY3RlZCBuc2hhcmRzIik7Ci0JCX0gZWxzZSBpZiAoc2l6ZSA+IDEyOCAmJiBz aXplIDw9IDUxMikgewotCQkJZXhwZWN0X3VfZXEobnNoYXJkcywgNCwgIlVuZXhwZWN0ZWQgbnNo YXJkcyIpOwotCQl9IGVsc2UgewotCQkJZXhwZWN0X3VfZXEobnNoYXJkcywgMSwgIlVuZXhwZWN0 ZWQgbnNoYXJkcyIpOwotCQl9Ci0JfQotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsK LQlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0X2Jpbl9zaGFyZCwKLQkgICAg dGVzdF9iaW5fc2hhcmRfbXQsCi0JICAgIHRlc3RfcHJvZHVjZXJfY29uc3VtZXIpOwotfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9iaW5zaGFyZC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9iaW5zaGFyZC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkNThj OC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvYmluc2hhcmQuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jp bi9zaAotCi1leHBvcnQgTUFMTE9DX0NPTkY9Im5hcmVuYXM6MSxiaW5fc2hhcmRzOjEtMTYwOjE2 fDEyOS01MTI6NHwyNTYtMjU2OjgiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2JpdF91dGlsLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYml0X3V0aWwuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggN2QzMWIyMS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYml0X3V0aWwuYworKysgL2Rldi9udWxs CkBAIC0xLDMwNyArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNp bmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9iaXRfdXRpbC5oIgotCi0jZGVmaW5lIFRFU1RfUE9X Ml9DRUlMKHQsIHN1ZiwgcHJpKSBkbyB7CQkJCVwKLQl1bnNpZ25lZCBpLCBwb3cyOwkJCQkJCVwK LQl0IHg7CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JZXhwZWN0XyMjc3VmIyNfZXEocG93Ml9jZWls XyMjc3VmKDApLCAwLCAiVW5leHBlY3RlZCByZXN1bHQiKTsJXAotCQkJCQkJCQkJXAotCWZvciAo aSA9IDA7IGkgPCBzaXplb2YodCkgKiA4OyBpKyspIHsJCQkJXAotCQlleHBlY3RfIyNzdWYjI19l cShwb3cyX2NlaWxfIyNzdWYoKCh0KTEpIDw8IGkpLCAoKHQpMSkJXAotCQkgICAgPDwgaSwgIlVu ZXhwZWN0ZWQgcmVzdWx0Iik7CQkJCVwKLQl9CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JZm9yIChp ID0gMjsgaSA8IHNpemVvZih0KSAqIDg7IGkrKykgewkJCQlcCi0JCWV4cGVjdF8jI3N1ZiMjX2Vx KHBvdzJfY2VpbF8jI3N1ZigoKCh0KTEpIDw8IGkpIC0gMSksCVwKLQkJICAgICgodCkxKSA8PCBp LCAiVW5leHBlY3RlZCByZXN1bHQiKTsJCQlcCi0JfQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCWZv ciAoaSA9IDA7IGkgPCBzaXplb2YodCkgKiA4IC0gMTsgaSsrKSB7CQkJXAotCQlleHBlY3RfIyNz dWYjI19lcShwb3cyX2NlaWxfIyNzdWYoKCgodCkxKSA8PCBpKSArIDEpLAlcCi0JCSAgICAoKHQp MSkgPDwgKGkrMSksICJVbmV4cGVjdGVkIHJlc3VsdCIpOwkJXAotCX0JCQkJCQkJCVwKLQkJCQkJ CQkJCVwKLQlmb3IgKHBvdzIgPSAxOyBwb3cyIDwgMjU7IHBvdzIrKykgewkJCQlcCi0JCWZvciAo eCA9ICgoKHQpMSkgPDwgKHBvdzItMSkpICsgMTsgeCA8PSAoKHQpMSkgPDwgcG93MjsJXAotCQkg ICAgeCsrKSB7CQkJCQkJXAotCQkJZXhwZWN0XyMjc3VmIyNfZXEocG93Ml9jZWlsXyMjc3VmKHgp LAkJXAotCQkJICAgICgodCkxKSA8PCBwb3cyLAkJCQlcCi0JCQkgICAgIlVuZXhwZWN0ZWQgcmVz dWx0LCB4PSUicHJpLCB4KTsJCVwKLQkJfQkJCQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAo MCkKLQotVEVTVF9CRUdJTih0ZXN0X3BvdzJfY2VpbF91NjQpIHsKLQlURVNUX1BPVzJfQ0VJTCh1 aW50NjRfdCwgdTY0LCBGTVR1NjQpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3Bv dzJfY2VpbF91MzIpIHsKLQlURVNUX1BPVzJfQ0VJTCh1aW50MzJfdCwgdTMyLCBGTVR1MzIpOwot fQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3BvdzJfY2VpbF96dSkgewotCVRFU1RfUE9X Ml9DRUlMKHNpemVfdCwgenUsICJ6dSIpOwotfQotVEVTVF9FTkQKLQotdm9pZAotZXhwZWN0X2xn X2NlaWxfcmFuZ2Uoc2l6ZV90IGlucHV0LCB1bnNpZ25lZCBhbnN3ZXIpIHsKLQlpZiAoaW5wdXQg PT0gMSkgewotCQlleHBlY3RfdV9lcSgwLCBhbnN3ZXIsICJHb3QgJXUgYXMgbGdfY2VpbCBvZiAx IiwgYW5zd2VyKTsKLQkJcmV0dXJuOwotCX0KLQlleHBlY3RfenVfbGUoaW5wdXQsIChaVSgxKSA8 PCBhbnN3ZXIpLAotCSAgICAiR290ICV1IGFzIGxnX2NlaWwgb2YgJXp1IiwgYW5zd2VyLCBpbnB1 dCk7Ci0JZXhwZWN0X3p1X2d0KGlucHV0LCAoWlUoMSkgPDwgKGFuc3dlciAtIDEpKSwKLQkgICAg IkdvdCAldSBhcyBsZ19jZWlsIG9mICV6dSIsIGFuc3dlciwgaW5wdXQpOwotfQotCi12b2lkCi1l eHBlY3RfbGdfZmxvb3JfcmFuZ2Uoc2l6ZV90IGlucHV0LCB1bnNpZ25lZCBhbnN3ZXIpIHsKLQlp ZiAoaW5wdXQgPT0gMSkgewotCQlleHBlY3RfdV9lcSgwLCBhbnN3ZXIsICJHb3QgJXUgYXMgbGdf Zmxvb3Igb2YgMSIsIGFuc3dlcik7Ci0JCXJldHVybjsKLQl9Ci0JZXhwZWN0X3p1X2dlKGlucHV0 LCAoWlUoMSkgPDwgYW5zd2VyKSwKLQkgICAgIkdvdCAldSBhcyBsZ19mbG9vciBvZiAlenUiLCBh bnN3ZXIsIGlucHV0KTsKLQlleHBlY3RfenVfbHQoaW5wdXQsIChaVSgxKSA8PCAoYW5zd2VyICsg MSkpLAotCSAgICAiR290ICV1IGFzIGxnX2Zsb29yIG9mICV6dSIsIGFuc3dlciwgaW5wdXQpOwot fQotCi1URVNUX0JFR0lOKHRlc3RfbGdfY2VpbF9mbG9vcikgewotCWZvciAoc2l6ZV90IGkgPSAx OyBpIDwgMTAgKiAxMDAwICogMTAwMDsgaSsrKSB7Ci0JCWV4cGVjdF9sZ19jZWlsX3JhbmdlKGks IGxnX2NlaWwoaSkpOwotCQlleHBlY3RfbGdfY2VpbF9yYW5nZShpLCBMR19DRUlMKGkpKTsKLQkJ ZXhwZWN0X2xnX2Zsb29yX3JhbmdlKGksIGxnX2Zsb29yKGkpKTsKLQkJZXhwZWN0X2xnX2Zsb29y X3JhbmdlKGksIExHX0ZMT09SKGkpKTsKLQl9Ci0JZm9yIChpbnQgaSA9IDEwOyBpIDwgOCAqICgx IDw8IExHX1NJWkVPRl9QVFIpIC0gNTsgaSsrKSB7Ci0JCWZvciAoc2l6ZV90IGogPSAwOyBqIDwg KDEgPDwgNCk7IGorKykgewotCQkJc2l6ZV90IG51bTEgPSAoKHNpemVfdCkxIDw8IGkpCi0JCQkg ICAgLSBqICogKChzaXplX3QpMSA8PCAoaSAtIDQpKTsKLQkJCXNpemVfdCBudW0yID0gKChzaXpl X3QpMSA8PCBpKQotCQkJICAgICsgaiAqICgoc2l6ZV90KTEgPDwgKGkgLSA0KSk7Ci0JCQlleHBl Y3RfenVfbmUobnVtMSwgMCwgIkludmFsaWQgbGcgYXJndW1lbnQiKTsKLQkJCWV4cGVjdF96dV9u ZShudW0yLCAwLCAiSW52YWxpZCBsZyBhcmd1bWVudCIpOwotCQkJZXhwZWN0X2xnX2NlaWxfcmFu Z2UobnVtMSwgbGdfY2VpbChudW0xKSk7Ci0JCQlleHBlY3RfbGdfY2VpbF9yYW5nZShudW0xLCBM R19DRUlMKG51bTEpKTsKLQkJCWV4cGVjdF9sZ19jZWlsX3JhbmdlKG51bTIsIGxnX2NlaWwobnVt MikpOwotCQkJZXhwZWN0X2xnX2NlaWxfcmFuZ2UobnVtMiwgTEdfQ0VJTChudW0yKSk7Ci0KLQkJ CWV4cGVjdF9sZ19mbG9vcl9yYW5nZShudW0xLCBsZ19mbG9vcihudW0xKSk7Ci0JCQlleHBlY3Rf bGdfZmxvb3JfcmFuZ2UobnVtMSwgTEdfRkxPT1IobnVtMSkpOwotCQkJZXhwZWN0X2xnX2Zsb29y X3JhbmdlKG51bTIsIGxnX2Zsb29yKG51bTIpKTsKLQkJCWV4cGVjdF9sZ19mbG9vcl9yYW5nZShu dW0yLCBMR19GTE9PUihudW0yKSk7Ci0JCX0KLQl9Ci19Ci1URVNUX0VORAotCi0jZGVmaW5lIFRF U1RfRkZTKHQsIHN1ZiwgdGVzdF9zdWYsIHByaSkgZG8gewkJCQlcCi0JZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IHNpemVvZih0KSAqIDg7IGkrKykgewkJCVwKLQkJZm9yICh1bnNpZ25lZCBqID0g MDsgaiA8PSBpOyBqKyspIHsJCQlcCi0JCQlmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDw9IGo7IGsr KykgewkJXAotCQkJCXQgeCA9ICh0KTEgPDwgaTsJCQlcCi0JCQkJeCB8PSAodCkxIDw8IGo7CQkJ CVwKLQkJCQl4IHw9ICh0KTEgPDwgazsJCQkJXAotCQkJCWV4cGVjdF8jI3Rlc3Rfc3VmIyNfZXEo ZmZzXyMjc3VmKHgpLCBrLAlcCi0JCQkJICAgICJVbmV4cGVjdGVkIHJlc3VsdCwgeD0lInByaSwg eCk7CVwKLQkJCX0JCQkJCQlcCi0JCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUoMCkK LQotVEVTVF9CRUdJTih0ZXN0X2Zmc191KSB7Ci0JVEVTVF9GRlModW5zaWduZWQsIHUsIHUsInUi KTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9mZnNfbHUpIHsKLQlURVNUX0ZGUyh1 bnNpZ25lZCBsb25nLCBsdSwgbHUsICJsdSIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0 ZXN0X2Zmc19sbHUpIHsKLQlURVNUX0ZGUyh1bnNpZ25lZCBsb25nIGxvbmcsIGxsdSwgcWQsICJs bHUiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9mZnNfdTMyKSB7Ci0JVEVTVF9G RlModWludDMyX3QsIHUzMiwgdTMyLCBGTVR1MzIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJ Tih0ZXN0X2Zmc191NjQpIHsKLQlURVNUX0ZGUyh1aW50NjRfdCwgdTY0LCB1NjQsIEZNVHU2NCk7 Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfZmZzX3p1KSB7Ci0JVEVTVF9GRlMoc2l6 ZV90LCB6dSwgenUsICJ6dSIpOwotfQotVEVTVF9FTkQKLQotI2RlZmluZSBURVNUX0ZMUyh0LCBz dWYsIHRlc3Rfc3VmLCBwcmkpIGRvIHsJCQkJXAotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz aXplb2YodCkgKiA4OyBpKyspIHsJCQlcCi0JCWZvciAodW5zaWduZWQgaiA9IDA7IGogPD0gaTsg aisrKSB7CQkJXAotCQkJZm9yICh1bnNpZ25lZCBrID0gMDsgayA8PSBqOyBrKyspIHsJCVwKLQkJ CQl0IHggPSAodCkxIDw8IGk7CQkJXAotCQkJCXggfD0gKHQpMSA8PCBqOwkJCQlcCi0JCQkJeCB8 PSAodCkxIDw8IGs7CQkJCVwKLQkJCQlleHBlY3RfIyN0ZXN0X3N1ZiMjX2VxKGZsc18jI3N1Zih4 KSwgaSwJXAotCQkJCSAgICAiVW5leHBlY3RlZCByZXN1bHQsIHg9JSJwcmksIHgpOwlcCi0JCQl9 CQkJCQkJXAotCQl9CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlKDApCi0KLVRFU1RfQkVH SU4odGVzdF9mbHNfdSkgewotCVRFU1RfRkxTKHVuc2lnbmVkLCB1LCB1LCJ1Iik7Ci19Ci1URVNU X0VORAotCi1URVNUX0JFR0lOKHRlc3RfZmxzX2x1KSB7Ci0JVEVTVF9GTFModW5zaWduZWQgbG9u ZywgbHUsIGx1LCAibHUiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9mbHNfbGx1 KSB7Ci0JVEVTVF9GTFModW5zaWduZWQgbG9uZyBsb25nLCBsbHUsIHFkLCAibGx1Iik7Ci19Ci1U RVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfZmxzX3UzMikgewotCVRFU1RfRkxTKHVpbnQzMl90 LCB1MzIsIHUzMiwgRk1UdTMyKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9mbHNf dTY0KSB7Ci0JVEVTVF9GTFModWludDY0X3QsIHU2NCwgdTY0LCBGTVR1NjQpOwotfQotVEVTVF9F TkQKLQotVEVTVF9CRUdJTih0ZXN0X2Zsc196dSkgewotCVRFU1RfRkxTKHNpemVfdCwgenUsIHp1 LCAienUiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9mbHNfdV9zbG93KSB7Ci0J VEVTVF9GTFModW5zaWduZWQsIHVfc2xvdywgdSwidSIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9C RUdJTih0ZXN0X2Zsc19sdV9zbG93KSB7Ci0JVEVTVF9GTFModW5zaWduZWQgbG9uZywgbHVfc2xv dywgbHUsICJsdSIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2Zsc19sbHVfc2xv dykgewotCVRFU1RfRkxTKHVuc2lnbmVkIGxvbmcgbG9uZywgbGx1X3Nsb3csIHFkLCAibGx1Iik7 Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdW5zaWduZWQKLXBvcGNvdW50X2J5dGUodW5zaWduZWQg Ynl0ZSkgewotCWludCBjb3VudCA9IDA7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsK LQkJaWYgKChieXRlICYgKDEgPDwgaSkpICE9IDApIHsKLQkJCWNvdW50Kys7Ci0JCX0KLQl9Ci0J cmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgdWludDY0X3QKLWV4cGFuZF9ieXRlX3RvX21hc2so dW5zaWduZWQgYnl0ZSkgewotCXVpbnQ2NF90IHJlc3VsdCA9IDA7Ci0JZm9yIChpbnQgaSA9IDA7 IGkgPCA4OyBpKyspIHsKLQkJaWYgKChieXRlICYgKDEgPDwgaSkpICE9IDApIHsKLQkJCXJlc3Vs dCB8PSAoKHVpbnQ2NF90KTB4RkYgPDwgKGkgKiA4KSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJlc3Vs dDsKLX0KLQotI2RlZmluZSBURVNUX1BPUENPVU5UKHQsIHN1ZiwgcHJpX2hleCkgZG8gewkJCQlc Ci0JdCBibXVsID0gKHQpMHgwMTAxMDEwMTAxMDEwMTAxVUxMOwkJCQlcCi0JZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8ICgxIDw8IHNpemVvZih0KSk7IGkrKykgewkJXAotCQlmb3IgKHVuc2lnbmVk IGogPSAwOyBqIDwgMjU2OyBqKyspIHsJCQlcCi0JCQkvKgkJCQkJCVwKLQkJCSAqIFJlcGxpY2F0 ZSB0aGUgYnl0ZSBqIGludG8gdmFyaW91cwkJXAotCQkJICogYnl0ZXMgb2YgdGhlIGludGVnZXIg KGFzIGluZGljYXRlZCBieSB0aGUJXAotCQkJICogbWFzayBpbiBpKSwgYW5kIGVuc3VyZSB0aGF0 IHRoZSBwb3Bjb3VudCBvZglcCi0JCQkgKiB0aGUgcmVzdWx0IGlzIHBvcGNvdW50KGkpICogcG9w Y291bnQoaikJXAotCQkJICovCQkJCQkJXAotCQkJdCBtYXNrID0gKHQpZXhwYW5kX2J5dGVfdG9f bWFzayhpKTsJCVwKLQkJCXQgeCA9IChibXVsICogaikgJiBtYXNrOwkJCVwKLQkJCWV4cGVjdF91 X2VxKAkJCQkJXAotCQkJICAgIHBvcGNvdW50X2J5dGUoaSkgKiBwb3Bjb3VudF9ieXRlKGopLAlc Ci0JCQkgICAgcG9wY291bnRfIyNzdWYoeCksCQkJCVwKLQkJCSAgICAiVW5leHBlY3RlZCByZXN1 bHQsIHg9MHglInByaV9oZXgsIHgpOwlcCi0JCX0JCQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hp bGUgKDApCi0KLVRFU1RfQkVHSU4odGVzdF9wb3Bjb3VudF91KSB7Ci0JVEVTVF9QT1BDT1VOVCh1 bnNpZ25lZCwgdSwgIngiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9wb3Bjb3Vu dF91X3Nsb3cpIHsKLQlURVNUX1BPUENPVU5UKHVuc2lnbmVkLCB1X3Nsb3csICJ4Iik7Ci19Ci1U RVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcG9wY291bnRfbHUpIHsKLQlURVNUX1BPUENPVU5U KHVuc2lnbmVkIGxvbmcsIGx1LCAibHgiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVz dF9wb3Bjb3VudF9sdV9zbG93KSB7Ci0JVEVTVF9QT1BDT1VOVCh1bnNpZ25lZCBsb25nLCBsdV9z bG93LCAibHgiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9wb3Bjb3VudF9sbHUp IHsKLQlURVNUX1BPUENPVU5UKHVuc2lnbmVkIGxvbmcgbG9uZywgbGx1LCAibGx4Iik7Ci19Ci1U RVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcG9wY291bnRfbGx1X3Nsb3cpIHsKLQlURVNUX1BP UENPVU5UKHVuc2lnbmVkIGxvbmcgbG9uZywgbGx1X3Nsb3csICJsbHgiKTsKLX0KLVRFU1RfRU5E Ci0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAg dGVzdF9wb3cyX2NlaWxfdTY0LAotCSAgICB0ZXN0X3BvdzJfY2VpbF91MzIsCi0JICAgIHRlc3Rf cG93Ml9jZWlsX3p1LAotCSAgICB0ZXN0X2xnX2NlaWxfZmxvb3IsCi0JICAgIHRlc3RfZmZzX3Us Ci0JICAgIHRlc3RfZmZzX2x1LAotCSAgICB0ZXN0X2Zmc19sbHUsCi0JICAgIHRlc3RfZmZzX3Uz MiwKLQkgICAgdGVzdF9mZnNfdTY0LAotCSAgICB0ZXN0X2Zmc196dSwKLQkgICAgdGVzdF9mbHNf dSwKLQkgICAgdGVzdF9mbHNfbHUsCi0JICAgIHRlc3RfZmxzX2xsdSwKLQkgICAgdGVzdF9mbHNf dTMyLAotCSAgICB0ZXN0X2Zsc191NjQsCi0JICAgIHRlc3RfZmxzX3p1LAotCSAgICB0ZXN0X2Zs c191X3Nsb3csCi0JICAgIHRlc3RfZmxzX2x1X3Nsb3csCi0JICAgIHRlc3RfZmxzX2xsdV9zbG93 LAotCSAgICB0ZXN0X3BvcGNvdW50X3UsCi0JICAgIHRlc3RfcG9wY291bnRfdV9zbG93LAotCSAg ICB0ZXN0X3BvcGNvdW50X2x1LAotCSAgICB0ZXN0X3BvcGNvdW50X2x1X3Nsb3csCi0JICAgIHRl c3RfcG9wY291bnRfbGx1LAotCSAgICB0ZXN0X3BvcGNvdW50X2xsdV9zbG93KTsKLX0KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv Yml0bWFwLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvYml0bWFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZTU0MmIuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L2JpdG1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0 L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgInRlc3QvbmJpdHMuaCIKLQotc3RhdGljIHZv aWQKLXRlc3RfYml0bWFwX2luaXRpYWxpemVyX2JvZHkoY29uc3QgYml0bWFwX2luZm9fdCAqYmlu Zm8sIHNpemVfdCBuYml0cykgewotCWJpdG1hcF9pbmZvX3QgYmluZm9fZHluOwotCWJpdG1hcF9p bmZvX2luaXQoJmJpbmZvX2R5biwgbmJpdHMpOwotCi0JZXhwZWN0X3p1X2VxKGJpdG1hcF9zaXpl KGJpbmZvKSwgYml0bWFwX3NpemUoJmJpbmZvX2R5biksCi0JICAgICJVbmV4cGVjdGVkIGRpZmZl cmVuY2UgYmV0d2VlbiBzdGF0aWMgYW5kIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24sICIKLQkgICAg Im5iaXRzPSV6dSIsIG5iaXRzKTsKLQlleHBlY3RfenVfZXEoYmluZm8tPm5iaXRzLCBiaW5mb19k eW4ubmJpdHMsCi0JICAgICJVbmV4cGVjdGVkIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGF0aWMgYW5k IGR5bmFtaWMgaW5pdGlhbGl6YXRpb24sICIKLQkgICAgIm5iaXRzPSV6dSIsIG5iaXRzKTsKLSNp ZmRlZiBCSVRNQVBfVVNFX1RSRUUKLQlleHBlY3RfdV9lcShiaW5mby0+bmxldmVscywgYmluZm9f ZHluLm5sZXZlbHMsCi0JICAgICJVbmV4cGVjdGVkIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGF0aWMg YW5kIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24sICIKLQkgICAgIm5iaXRzPSV6dSIsIG5iaXRzKTsK LQl7Ci0JCXVuc2lnbmVkIGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGJpbmZvLT5ubGV2ZWxzOyBp KyspIHsKLQkJCWV4cGVjdF96dV9lcShiaW5mby0+bGV2ZWxzW2ldLmdyb3VwX29mZnNldCwKLQkJ CSAgICBiaW5mb19keW4ubGV2ZWxzW2ldLmdyb3VwX29mZnNldCwKLQkJCSAgICAiVW5leHBlY3Rl ZCBkaWZmZXJlbmNlIGJldHdlZW4gc3RhdGljIGFuZCBkeW5hbWljICIKLQkJCSAgICAiaW5pdGlh bGl6YXRpb24sIG5iaXRzPSV6dSwgbGV2ZWw9JXUiLCBuYml0cywgaSk7Ci0JCX0KLQl9Ci0jZWxz ZQotCWV4cGVjdF96dV9lcShiaW5mby0+bmdyb3VwcywgYmluZm9fZHluLm5ncm91cHMsCi0JICAg ICJVbmV4cGVjdGVkIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGF0aWMgYW5kIGR5bmFtaWMgaW5pdGlh bGl6YXRpb24iKTsKLSNlbmRpZgotfQotCi1URVNUX0JFR0lOKHRlc3RfYml0bWFwX2luaXRpYWxp emVyKSB7Ci0jZGVmaW5lIE5CKG5iaXRzKSB7CQkJCQkJCVwKLQkJaWYgKG5iaXRzIDw9IEJJVE1B UF9NQVhCSVRTKSB7CQkJCVwKLQkJCWJpdG1hcF9pbmZvX3QgYmluZm8gPQkJCQlcCi0JCQkgICAg QklUTUFQX0lORk9fSU5JVElBTElaRVIobmJpdHMpOwkJXAotCQkJdGVzdF9iaXRtYXBfaW5pdGlh bGl6ZXJfYm9keSgmYmluZm8sIG5iaXRzKTsJXAotCQl9CQkJCQkJCVwKLQl9Ci0JTkJJVFNfVEFC Ci0jdW5kZWYgTkIKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyBzaXplX3QKLXRlc3RfYml0bWFwX3Np emVfYm9keShjb25zdCBiaXRtYXBfaW5mb190ICpiaW5mbywgc2l6ZV90IG5iaXRzLAotICAgIHNp emVfdCBwcmV2X3NpemUpIHsKLQlzaXplX3Qgc2l6ZSA9IGJpdG1hcF9zaXplKGJpbmZvKTsKLQll eHBlY3RfenVfZ2Uoc2l6ZSwgKG5iaXRzID4+IDMpLAotCSAgICAiQml0bWFwIHNpemUgaXMgc21h bGxlciB0aGFuIGV4cGVjdGVkIik7Ci0JZXhwZWN0X3p1X2dlKHNpemUsIHByZXZfc2l6ZSwgIkJp dG1hcCBzaXplIGlzIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIpOwotCXJldHVybiBzaXplOwotfQot Ci1URVNUX0JFR0lOKHRlc3RfYml0bWFwX3NpemUpIHsKLQlzaXplX3QgbmJpdHMsIHByZXZfc2l6 ZTsKLQotCXByZXZfc2l6ZSA9IDA7Ci0JZm9yIChuYml0cyA9IDE7IG5iaXRzIDw9IEJJVE1BUF9N QVhCSVRTOyBuYml0cysrKSB7Ci0JCWJpdG1hcF9pbmZvX3QgYmluZm87Ci0JCWJpdG1hcF9pbmZv X2luaXQoJmJpbmZvLCBuYml0cyk7Ci0JCXByZXZfc2l6ZSA9IHRlc3RfYml0bWFwX3NpemVfYm9k eSgmYmluZm8sIG5iaXRzLCBwcmV2X3NpemUpOwotCX0KLSNkZWZpbmUgTkIobmJpdHMpIHsJCQkJ CQkJXAotCQliaXRtYXBfaW5mb190IGJpbmZvID0gQklUTUFQX0lORk9fSU5JVElBTElaRVIobmJp dHMpOwlcCi0JCXByZXZfc2l6ZSA9IHRlc3RfYml0bWFwX3NpemVfYm9keSgmYmluZm8sIG5iaXRz LAlcCi0JCSAgICBwcmV2X3NpemUpOwkJCQkJCVwKLQl9Ci0JcHJldl9zaXplID0gMDsKLQlOQklU U19UQUIKLSN1bmRlZiBOQgotfQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLXRlc3RfYml0bWFw X2luaXRfYm9keShjb25zdCBiaXRtYXBfaW5mb190ICpiaW5mbywgc2l6ZV90IG5iaXRzKSB7Ci0J c2l6ZV90IGk7Ci0JYml0bWFwX3QgKmJpdG1hcCA9IChiaXRtYXBfdCAqKW1hbGxvYyhiaXRtYXBf c2l6ZShiaW5mbykpOwotCWV4cGVjdF9wdHJfbm90X251bGwoYml0bWFwLCAiVW5leHBlY3RlZCBt YWxsb2MoKSBmYWlsdXJlIik7Ci0KLQliaXRtYXBfaW5pdChiaXRtYXAsIGJpbmZvLCBmYWxzZSk7 Ci0JZm9yIChpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJZXhwZWN0X2ZhbHNlKGJpdG1hcF9n ZXQoYml0bWFwLCBiaW5mbywgaSksCi0JCSAgICAiQml0IHNob3VsZCBiZSB1bnNldCIpOwotCX0K LQotCWJpdG1hcF9pbml0KGJpdG1hcCwgYmluZm8sIHRydWUpOwotCWZvciAoaSA9IDA7IGkgPCBu Yml0czsgaSsrKSB7Ci0JCWV4cGVjdF90cnVlKGJpdG1hcF9nZXQoYml0bWFwLCBiaW5mbywgaSks ICJCaXQgc2hvdWxkIGJlIHNldCIpOwotCX0KLQotCWZyZWUoYml0bWFwKTsKLX0KLQotVEVTVF9C RUdJTih0ZXN0X2JpdG1hcF9pbml0KSB7Ci0Jc2l6ZV90IG5iaXRzOwotCi0JZm9yIChuYml0cyA9 IDE7IG5iaXRzIDw9IEJJVE1BUF9NQVhCSVRTOyBuYml0cysrKSB7Ci0JCWJpdG1hcF9pbmZvX3Qg YmluZm87Ci0JCWJpdG1hcF9pbmZvX2luaXQoJmJpbmZvLCBuYml0cyk7Ci0JCXRlc3RfYml0bWFw X2luaXRfYm9keSgmYmluZm8sIG5iaXRzKTsKLQl9Ci0jZGVmaW5lIE5CKG5iaXRzKSB7CQkJCQkJ CVwKLQkJYml0bWFwX2luZm9fdCBiaW5mbyA9IEJJVE1BUF9JTkZPX0lOSVRJQUxJWkVSKG5iaXRz KTsJXAotCQl0ZXN0X2JpdG1hcF9pbml0X2JvZHkoJmJpbmZvLCBuYml0cyk7CQkJXAotCX0KLQlO QklUU19UQUIKLSN1bmRlZiBOQgotfQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLXRlc3RfYml0 bWFwX3NldF9ib2R5KGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbmJpdHMpIHsK LQlzaXplX3QgaTsKLQliaXRtYXBfdCAqYml0bWFwID0gKGJpdG1hcF90ICopbWFsbG9jKGJpdG1h cF9zaXplKGJpbmZvKSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChiaXRtYXAsICJVbmV4cGVjdGVk IG1hbGxvYygpIGZhaWx1cmUiKTsKLQliaXRtYXBfaW5pdChiaXRtYXAsIGJpbmZvLCBmYWxzZSk7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgewotCQliaXRtYXBfc2V0KGJpdG1hcCwg YmluZm8sIGkpOwotCX0KLQlleHBlY3RfdHJ1ZShiaXRtYXBfZnVsbChiaXRtYXAsIGJpbmZvKSwg IkFsbCBiaXRzIHNob3VsZCBiZSBzZXQiKTsKLQlmcmVlKGJpdG1hcCk7Ci19Ci0KLVRFU1RfQkVH SU4odGVzdF9iaXRtYXBfc2V0KSB7Ci0Jc2l6ZV90IG5iaXRzOwotCi0JZm9yIChuYml0cyA9IDE7 IG5iaXRzIDw9IEJJVE1BUF9NQVhCSVRTOyBuYml0cysrKSB7Ci0JCWJpdG1hcF9pbmZvX3QgYmlu Zm87Ci0JCWJpdG1hcF9pbmZvX2luaXQoJmJpbmZvLCBuYml0cyk7Ci0JCXRlc3RfYml0bWFwX3Nl dF9ib2R5KCZiaW5mbywgbmJpdHMpOwotCX0KLSNkZWZpbmUgTkIobmJpdHMpIHsJCQkJCQkJXAot CQliaXRtYXBfaW5mb190IGJpbmZvID0gQklUTUFQX0lORk9fSU5JVElBTElaRVIobmJpdHMpOwlc Ci0JCXRlc3RfYml0bWFwX3NldF9ib2R5KCZiaW5mbywgbmJpdHMpOwkJCVwKLQl9Ci0JTkJJVFNf VEFCCi0jdW5kZWYgTkIKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi10ZXN0X2JpdG1hcF91 bnNldF9ib2R5KGNvbnN0IGJpdG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbmJpdHMpIHsKLQlz aXplX3QgaTsKLQliaXRtYXBfdCAqYml0bWFwID0gKGJpdG1hcF90ICopbWFsbG9jKGJpdG1hcF9z aXplKGJpbmZvKSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChiaXRtYXAsICJVbmV4cGVjdGVkIG1h bGxvYygpIGZhaWx1cmUiKTsKLQliaXRtYXBfaW5pdChiaXRtYXAsIGJpbmZvLCBmYWxzZSk7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgewotCQliaXRtYXBfc2V0KGJpdG1hcCwgYmlu Zm8sIGkpOwotCX0KLQlleHBlY3RfdHJ1ZShiaXRtYXBfZnVsbChiaXRtYXAsIGJpbmZvKSwgIkFs bCBiaXRzIHNob3VsZCBiZSBzZXQiKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgewot CQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBu Yml0czsgaSsrKSB7Ci0JCWJpdG1hcF9zZXQoYml0bWFwLCBiaW5mbywgaSk7Ci0JfQotCWV4cGVj dF90cnVlKGJpdG1hcF9mdWxsKGJpdG1hcCwgYmluZm8pLCAiQWxsIGJpdHMgc2hvdWxkIGJlIHNl dCIpOwotCWZyZWUoYml0bWFwKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2JpdG1hcF91bnNldCkg ewotCXNpemVfdCBuYml0czsKLQotCWZvciAobmJpdHMgPSAxOyBuYml0cyA8PSBCSVRNQVBfTUFY QklUUzsgbmJpdHMrKykgewotCQliaXRtYXBfaW5mb190IGJpbmZvOwotCQliaXRtYXBfaW5mb19p bml0KCZiaW5mbywgbmJpdHMpOwotCQl0ZXN0X2JpdG1hcF91bnNldF9ib2R5KCZiaW5mbywgbmJp dHMpOwotCX0KLSNkZWZpbmUgTkIobmJpdHMpIHsJCQkJCQkJXAotCQliaXRtYXBfaW5mb190IGJp bmZvID0gQklUTUFQX0lORk9fSU5JVElBTElaRVIobmJpdHMpOwlcCi0JCXRlc3RfYml0bWFwX3Vu c2V0X2JvZHkoJmJpbmZvLCBuYml0cyk7CQkJXAotCX0KLQlOQklUU19UQUIKLSN1bmRlZiBOQgot fQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLXRlc3RfYml0bWFwX3hmdV9ib2R5KGNvbnN0IGJp dG1hcF9pbmZvX3QgKmJpbmZvLCBzaXplX3QgbmJpdHMpIHsKLQliaXRtYXBfdCAqYml0bWFwID0g KGJpdG1hcF90ICopbWFsbG9jKGJpdG1hcF9zaXplKGJpbmZvKSk7Ci0JZXhwZWN0X3B0cl9ub3Rf bnVsbChiaXRtYXAsICJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUiKTsKLQliaXRtYXBfaW5p dChiaXRtYXAsIGJpbmZvLCBmYWxzZSk7Ci0KLQkvKiBJdGVyYXRpdmVseSBzZXQgYml0cyBzdGFy dGluZyBhdCB0aGUgYmVnaW5uaW5nLiAqLwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7 IGkrKykgewotCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCAwKSwgaSwK LQkJICAgICJGaXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIGp1c3QgYWZ0ZXIgcHJldmlvdXMgZmly c3QgdW5zZXQgIgotCQkgICAgImJpdCIpOwotCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShiaXRt YXAsIGJpbmZvLCAoaSA+IDApID8gaS0xIDogaSksIGksCi0JCSAgICAiRmlyc3QgdW5zZXQgYml0 IHNob3VsZCBiZSBqdXN0IGFmdGVyIHByZXZpb3VzIGZpcnN0IHVuc2V0ICIKLQkJICAgICJiaXQi KTsKLQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBiaW5mbywgaSksIGksCi0JCSAg ICAiRmlyc3QgdW5zZXQgYml0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHByZXZpb3VzIGZpcnN0IHVu c2V0ICIKLQkJICAgICJiaXQiKTsKLQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9zZnUoYml0bWFwLCBi aW5mbyksIGksCi0JCSAgICAiRmlyc3QgdW5zZXQgYml0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHBy ZXZpb3VzIGZpcnN0IHVuc2V0ICIKLQkJICAgICJiaXQiKTsKLQl9Ci0JZXhwZWN0X3RydWUoYml0 bWFwX2Z1bGwoYml0bWFwLCBiaW5mbyksICJBbGwgYml0cyBzaG91bGQgYmUgc2V0Iik7Ci0KLQkv KgotCSAqIEl0ZXJhdGl2ZWx5IHVuc2V0IGJpdHMgc3RhcnRpbmcgYXQgdGhlIGVuZCwgYW5kIHZl cmlmeSB0aGF0Ci0JICogYml0bWFwX3NmdSgpIHJlYWNoZXMgdGhlIHVuc2V0IGJpdHMuCi0JICov Ci0JZm9yIChzaXplX3QgaSA9IG5iaXRzIC0gMTsgaSA8IG5iaXRzOyBpLS0pIHsgLyogKG5iaXRz Li4wXSAqLwotCQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7Ci0JCWV4cGVjdF96dV9l cShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIDApLCBpLAotCQkgICAgIkZpcnN0IHVuc2V0IGJp dCBzaG91bGQgdGhlIGJpdCBwcmV2aW91c2x5IHVuc2V0Iik7Ci0JCWV4cGVjdF96dV9lcShiaXRt YXBfZmZ1KGJpdG1hcCwgYmluZm8sIChpID4gMCkgPyBpLTEgOiBpKSwgaSwKLQkJICAgICJGaXJz dCB1bnNldCBiaXQgc2hvdWxkIHRoZSBiaXQgcHJldmlvdXNseSB1bnNldCIpOwotCQlleHBlY3Rf enVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCBpKSwgaSwKLQkJICAgICJGaXJzdCB1bnNl dCBiaXQgc2hvdWxkIHRoZSBiaXQgcHJldmlvdXNseSB1bnNldCIpOwotCQlleHBlY3RfenVfZXEo Yml0bWFwX3NmdShiaXRtYXAsIGJpbmZvKSwgaSwKLQkJICAgICJGaXJzdCB1bnNldCBiaXQgc2hv dWxkIHRoZSBiaXQgcHJldmlvdXNseSB1bnNldCIpOwotCQliaXRtYXBfdW5zZXQoYml0bWFwLCBi aW5mbywgaSk7Ci0JfQotCWV4cGVjdF9mYWxzZShiaXRtYXBfZ2V0KGJpdG1hcCwgYmluZm8sIDAp LCAiQml0IHNob3VsZCBiZSB1bnNldCIpOwotCi0JLyoKLQkgKiBJdGVyYXRpdmVseSBzZXQgYml0 cyBzdGFydGluZyBhdCB0aGUgYmVnaW5uaW5nLCBhbmQgdmVyaWZ5IHRoYXQKLQkgKiBiaXRtYXBf c2Z1KCkgbG9va3MgcGFzdCB0aGVtLgotCSAqLwotCWZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbmJp dHM7IGkrKykgewotCQliaXRtYXBfc2V0KGJpdG1hcCwgYmluZm8sIGkgLSAxKTsKLQkJZXhwZWN0 X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBiaW5mbywgMCksIGksCi0JCSAgICAiRmlyc3QgdW5z ZXQgYml0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHRoZSBiaXQgcHJldmlvdXNseSAiCi0JCSAgICAi c2V0Iik7Ci0JCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIChpID4gMCkg PyBpLTEgOiBpKSwgaSwKLQkJICAgICJGaXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIGp1c3QgYWZ0 ZXIgdGhlIGJpdCBwcmV2aW91c2x5ICIKLQkJICAgICJzZXQiKTsKLQkJZXhwZWN0X3p1X2VxKGJp dG1hcF9mZnUoYml0bWFwLCBiaW5mbywgaSksIGksCi0JCSAgICAiRmlyc3QgdW5zZXQgYml0IHNo b3VsZCBiZSBqdXN0IGFmdGVyIHRoZSBiaXQgcHJldmlvdXNseSAiCi0JCSAgICAic2V0Iik7Ci0J CWV4cGVjdF96dV9lcShiaXRtYXBfc2Z1KGJpdG1hcCwgYmluZm8pLCBpLAotCQkgICAgIkZpcnN0 IHVuc2V0IGJpdCBzaG91bGQgYmUganVzdCBhZnRlciB0aGUgYml0IHByZXZpb3VzbHkgIgotCQkg ICAgInNldCIpOwotCQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7Ci0JfQotCWV4cGVj dF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIDApLCBuYml0cyAtIDEsCi0JICAgICJG aXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIHRoZSBsYXN0IGJpdCIpOwotCWV4cGVjdF96dV9lcShi aXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIChuYml0cyA+IDEpID8gbmJpdHMtMiA6IG5iaXRzLTEp LAotCSAgICBuYml0cyAtIDEsICJGaXJzdCB1bnNldCBiaXQgc2hvdWxkIGJlIHRoZSBsYXN0IGJp dCIpOwotCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIG5iaXRzIC0gMSks IG5iaXRzIC0gMSwKLQkgICAgIkZpcnN0IHVuc2V0IGJpdCBzaG91bGQgYmUgdGhlIGxhc3QgYml0 Iik7Ci0JZXhwZWN0X3p1X2VxKGJpdG1hcF9zZnUoYml0bWFwLCBiaW5mbyksIG5iaXRzIC0gMSwK LQkgICAgIkZpcnN0IHVuc2V0IGJpdCBzaG91bGQgYmUgdGhlIGxhc3QgYml0Iik7Ci0JZXhwZWN0 X3RydWUoYml0bWFwX2Z1bGwoYml0bWFwLCBiaW5mbyksICJBbGwgYml0cyBzaG91bGQgYmUgc2V0 Iik7Ci0KLQkvKgotCSAqIEJ1YmJsZSBhICJ1c3UiIHBhdHRlcm4gdGhyb3VnaCB0aGUgYml0bWFw IGFuZCB2ZXJpZnkgdGhhdAotCSAqIGJpdG1hcF9mZnUoKSBmaW5kcyB0aGUgY29ycmVjdCBiaXQg Zm9yIGFsbCBmaXZlIG1pbl9iaXQgY2FzZXMuCi0JICovCi0JaWYgKG5iaXRzID49IDMpIHsKLQkJ Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0cy0yOyBpKyspIHsKLQkJCWJpdG1hcF91bnNldChi aXRtYXAsIGJpbmZvLCBpKTsKLQkJCWJpdG1hcF91bnNldChiaXRtYXAsIGJpbmZvLCBpKzIpOwot CQkJaWYgKGkgPiAwKSB7Ci0JCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBiaW5m bywgaS0xKSwgaSwKLQkJCQkgICAgIlVuZXhwZWN0ZWQgZmlyc3QgdW5zZXQgYml0Iik7Ci0JCQl9 Ci0JCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCBpKSwgaSwKLQkJCSAg ICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBiaXQiKTsKLQkJCWV4cGVjdF96dV9lcShiaXRtYXBf ZmZ1KGJpdG1hcCwgYmluZm8sIGkrMSksIGkrMiwKLQkJCSAgICAiVW5leHBlY3RlZCBmaXJzdCB1 bnNldCBiaXQiKTsKLQkJCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIGkr MiksIGkrMiwKLQkJCSAgICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBiaXQiKTsKLQkJCWlmIChp ICsgMyA8IG5iaXRzKSB7Ci0JCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBiaW5m bywgaSszKSwKLQkJCQkgICAgbmJpdHMsICJVbmV4cGVjdGVkIGZpcnN0IHVuc2V0IGJpdCIpOwot CQkJfQotCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9zZnUoYml0bWFwLCBiaW5mbyksIGksCi0JCQkg ICAgIlVuZXhwZWN0ZWQgZmlyc3QgdW5zZXQgYml0Iik7Ci0JCQlleHBlY3RfenVfZXEoYml0bWFw X3NmdShiaXRtYXAsIGJpbmZvKSwgaSsyLAotCQkJICAgICJVbmV4cGVjdGVkIGZpcnN0IHVuc2V0 IGJpdCIpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBVbnNldCB0aGUgbGFzdCBiaXQsIGJ1YmJsZSBh bm90aGVyIHVuc2V0IGJpdCB0aHJvdWdoIHRoZSBiaXRtYXAsIGFuZAotCSAqIHZlcmlmeSB0aGF0 IGJpdG1hcF9mZnUoKSBmaW5kcyB0aGUgY29ycmVjdCBiaXQgZm9yIGFsbCBmb3VyIG1pbl9iaXQK LQkgKiBjYXNlcy4KLQkgKi8KLQlpZiAobmJpdHMgPj0gMykgewotCQliaXRtYXBfdW5zZXQoYml0 bWFwLCBiaW5mbywgbmJpdHMtMSk7Ci0JCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHMtMTsg aSsrKSB7Ci0JCQliaXRtYXBfdW5zZXQoYml0bWFwLCBiaW5mbywgaSk7Ci0JCQlpZiAoaSA+IDAp IHsKLQkJCQlleHBlY3RfenVfZXEoYml0bWFwX2ZmdShiaXRtYXAsIGJpbmZvLCBpLTEpLCBpLAot CQkJCSAgICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBiaXQiKTsKLQkJCX0KLQkJCWV4cGVjdF96 dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIGkpLCBpLAotCQkJICAgICJVbmV4cGVjdGVk IGZpcnN0IHVuc2V0IGJpdCIpOwotCQkJZXhwZWN0X3p1X2VxKGJpdG1hcF9mZnUoYml0bWFwLCBi aW5mbywgaSsxKSwgbmJpdHMtMSwKLQkJCSAgICAiVW5leHBlY3RlZCBmaXJzdCB1bnNldCBiaXQi KTsKLQkJCWV4cGVjdF96dV9lcShiaXRtYXBfZmZ1KGJpdG1hcCwgYmluZm8sIG5iaXRzLTEpLAot CQkJICAgIG5iaXRzLTEsICJVbmV4cGVjdGVkIGZpcnN0IHVuc2V0IGJpdCIpOwotCi0JCQlleHBl Y3RfenVfZXEoYml0bWFwX3NmdShiaXRtYXAsIGJpbmZvKSwgaSwKLQkJCSAgICAiVW5leHBlY3Rl ZCBmaXJzdCB1bnNldCBiaXQiKTsKLQkJfQotCQlleHBlY3RfenVfZXEoYml0bWFwX3NmdShiaXRt YXAsIGJpbmZvKSwgbmJpdHMtMSwKLQkJICAgICJVbmV4cGVjdGVkIGZpcnN0IHVuc2V0IGJpdCIp OwotCX0KLQotCWZyZWUoYml0bWFwKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2JpdG1hcF94ZnUp IHsKLQlzaXplX3QgbmJpdHMsIG5iaXRzX21heDsKLQotCS8qIFRoZSB0ZXN0IGlzIE8obl4yKTsg bGFyZ2UgcGFnZSBzaXplcyBtYXkgc2xvdyBkb3duIHRvbyBtdWNoLiAqLwotCW5iaXRzX21heCA9 IEJJVE1BUF9NQVhCSVRTID4gNTEyID8gNTEyIDogQklUTUFQX01BWEJJVFM7Ci0JZm9yIChuYml0 cyA9IDE7IG5iaXRzIDw9IG5iaXRzX21heDsgbmJpdHMrKykgewotCQliaXRtYXBfaW5mb190IGJp bmZvOwotCQliaXRtYXBfaW5mb19pbml0KCZiaW5mbywgbmJpdHMpOwotCQl0ZXN0X2JpdG1hcF94 ZnVfYm9keSgmYmluZm8sIG5iaXRzKTsKLQl9Ci0jZGVmaW5lIE5CKG5iaXRzKSB7CQkJCQkJCVwK LQkJYml0bWFwX2luZm9fdCBiaW5mbyA9IEJJVE1BUF9JTkZPX0lOSVRJQUxJWkVSKG5iaXRzKTsJ XAotCQl0ZXN0X2JpdG1hcF94ZnVfYm9keSgmYmluZm8sIG5iaXRzKTsJCQlcCi0JfQotCU5CSVRT X1RBQgotI3VuZGVmIE5CCi19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVy biB0ZXN0KAotCSAgICB0ZXN0X2JpdG1hcF9pbml0aWFsaXplciwKLQkgICAgdGVzdF9iaXRtYXBf c2l6ZSwKLQkgICAgdGVzdF9iaXRtYXBfaW5pdCwKLQkgICAgdGVzdF9iaXRtYXBfc2V0LAotCSAg ICB0ZXN0X2JpdG1hcF91bnNldCwKLQkgICAgdGVzdF9iaXRtYXBfeGZ1KTsKLX0KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvYnVm X3dyaXRlci5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L2J1Zl93cml0ZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlNjNhMC4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvYnVmX3dyaXRlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLSNpbmNs dWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2J1Zl93cml0ZXIuaCIKLQotI2RlZmluZSBURVNUX0JVRl9TSVpFIDE2Ci0jZGVmaW5lIFVOSVRf TUFYIChURVNUX0JVRl9TSVpFICogMykKLQotc3RhdGljIHNpemVfdCB0ZXN0X3dyaXRlX2xlbjsK LXN0YXRpYyBjaGFyIHRlc3RfYnVmW1RFU1RfQlVGX1NJWkVdOwotc3RhdGljIHVpbnQ2NF90IGFy ZzsKLXN0YXRpYyB1aW50NjRfdCBhcmdfc3RvcmU7Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3dyaXRl X2NiKHZvaWQgKmNib3BhcXVlLCBjb25zdCBjaGFyICpzKSB7Ci0Jc2l6ZV90IHByZXZfdGVzdF93 cml0ZV9sZW4gPSB0ZXN0X3dyaXRlX2xlbjsKLQl0ZXN0X3dyaXRlX2xlbiArPSBzdHJsZW4ocyk7 IC8qIG9ubHkgaW5jcmVhc2UgdGhlIGxlbmd0aCAqLwotCWFyZ19zdG9yZSA9ICoodWludDY0X3Qg KiljYm9wYXF1ZTsgLyogb25seSBwYXNzIGFsb25nIHRoZSBhcmd1bWVudCAqLwotCWFzc2VydF96 dV9sZShwcmV2X3Rlc3Rfd3JpdGVfbGVuLCB0ZXN0X3dyaXRlX2xlbiwKLQkgICAgIlRlc3Qgd3Jp dGUgb3ZlcmZsb3dlZCIpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9idWZfd3JpdGVyX2JvZHko dHNkbl90ICp0c2RuLCBidWZfd3JpdGVyX3QgKmJ1Zl93cml0ZXIpIHsKLQljaGFyIHNbVU5JVF9N QVggKyAxXTsKLQlzaXplX3Qgbl91bml0LCByZW1haW4sIGk7Ci0Jc3NpemVfdCB1bml0OwotCi0J YXNzZXJ0KGJ1Zl93cml0ZXItPmJ1ZiAhPSBOVUxMKTsKLQltZW1zZXQocywgJ2EnLCBVTklUX01B WCk7Ci0JYXJnID0gNDsgLyogU3RhcnRpbmcgdmFsdWUgb2YgcmFuZG9tIGFyZ3VtZW50LiAqLwot CWFyZ19zdG9yZSA9IGFyZzsKLQlmb3IgKHVuaXQgPSBVTklUX01BWDsgdW5pdCA+PSAwOyAtLXVu aXQpIHsKLQkJLyogdW5pdCBrZWVwcyBkZWNyZWFzaW5nLCBzbyBzdHJsZW4ocykgaXMgYWx3YXlz IHVuaXQuICovCi0JCXNbdW5pdF0gPSAnXDAnOwotCQlmb3IgKG5fdW5pdCA9IDE7IG5fdW5pdCA8 PSAzOyArK25fdW5pdCkgewotCQkJdGVzdF93cml0ZV9sZW4gPSAwOwotCQkJcmVtYWluID0gMDsK LQkJCWZvciAoaSA9IDE7IGkgPD0gbl91bml0OyArK2kpIHsKLQkJCQlhcmcgPSBwcm5nX2xnX3Jh bmdlX3U2NCgmYXJnLCA2NCk7Ci0JCQkJYnVmX3dyaXRlcl9jYihidWZfd3JpdGVyLCBzKTsKLQkJ CQlyZW1haW4gKz0gdW5pdDsKLQkJCQlpZiAocmVtYWluID4gYnVmX3dyaXRlci0+YnVmX3NpemUp IHsKLQkJCQkJLyogRmx1c2hlcyBzaG91bGQgaGF2ZSBoYXBwZW5lZC4gKi8KLQkJCQkJYXNzZXJ0 X3U2NF9lcShhcmdfc3RvcmUsIGFyZywgIkNhbGwgIgotCQkJCQkgICAgImJhY2sgYXJndW1lbnQg ZGlkbid0IGdldCB0aHJvdWdoIik7Ci0JCQkJCXJlbWFpbiAlPSBidWZfd3JpdGVyLT5idWZfc2l6 ZTsKLQkJCQkJaWYgKHJlbWFpbiA9PSAwKSB7Ci0JCQkJCQkvKiBMYXN0IGZsdXNoIHNob3VsZCBi ZSBsYXp5LiAqLwotCQkJCQkJcmVtYWluICs9IGJ1Zl93cml0ZXItPmJ1Zl9zaXplOwotCQkJCQl9 Ci0JCQkJfQotCQkJCWFzc2VydF96dV9lcSh0ZXN0X3dyaXRlX2xlbiArIHJlbWFpbiwgaSAqIHVu aXQsCi0JCQkJICAgICJJbmNvcnJlY3QgbGVuZ3RoIGFmdGVyIHdyaXRpbmcgJXp1IHN0cmluZ3Mi Ci0JCQkJICAgICIgb2YgbGVuZ3RoICV6dSIsIGksIHVuaXQpOwotCQkJfQotCQkJYnVmX3dyaXRl cl9mbHVzaChidWZfd3JpdGVyKTsKLQkJCWV4cGVjdF96dV9lcSh0ZXN0X3dyaXRlX2xlbiwgbl91 bml0ICogdW5pdCwKLQkJCSAgICAiSW5jb3JyZWN0IGxlbmd0aCBhZnRlciBmbHVzaGluZyBhdCB0 aGUgZW5kIG9mIgotCQkJICAgICIgd3JpdGluZyAlenUgc3RyaW5ncyBvZiBsZW5ndGggJXp1Iiwg bl91bml0LCB1bml0KTsKLQkJfQotCX0KLQlidWZfd3JpdGVyX3Rlcm1pbmF0ZSh0c2RuLCBidWZf d3JpdGVyKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2J1Zl93cml0ZV9zdGF0aWMpIHsKLQlidWZf d3JpdGVyX3QgYnVmX3dyaXRlcjsKLQl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0JYXNz ZXJ0X2ZhbHNlKGJ1Zl93cml0ZXJfaW5pdCh0c2RuLCAmYnVmX3dyaXRlciwgdGVzdF93cml0ZV9j YiwgJmFyZywKLQkgICAgdGVzdF9idWYsIFRFU1RfQlVGX1NJWkUpLAotCSAgICAiYnVmX3dyaXRl cl9pbml0KCkgc2hvdWxkIG5vdCBlbmNvdW50ZXIgZXJyb3Igb24gc3RhdGljIGJ1ZmZlciIpOwot CXRlc3RfYnVmX3dyaXRlcl9ib2R5KHRzZG4sICZidWZfd3JpdGVyKTsKLX0KLVRFU1RfRU5ECi0K LVRFU1RfQkVHSU4odGVzdF9idWZfd3JpdGVfZHluYW1pYykgewotCWJ1Zl93cml0ZXJfdCBidWZf d3JpdGVyOwotCXRzZG5fdCAqdHNkbiA9IHRzZG5fZmV0Y2goKTsKLQlhc3NlcnRfZmFsc2UoYnVm X3dyaXRlcl9pbml0KHRzZG4sICZidWZfd3JpdGVyLCB0ZXN0X3dyaXRlX2NiLCAmYXJnLAotCSAg ICBOVUxMLCBURVNUX0JVRl9TSVpFKSwgImJ1Zl93cml0ZXJfaW5pdCgpIHNob3VsZCBub3QgT09N Iik7Ci0JdGVzdF9idWZfd3JpdGVyX2JvZHkodHNkbiwgJmJ1Zl93cml0ZXIpOwotfQotVEVTVF9F TkQKLQotVEVTVF9CRUdJTih0ZXN0X2J1Zl93cml0ZV9vb20pIHsKLQlidWZfd3JpdGVyX3QgYnVm X3dyaXRlcjsKLQl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0JYXNzZXJ0X3RydWUoYnVm X3dyaXRlcl9pbml0KHRzZG4sICZidWZfd3JpdGVyLCB0ZXN0X3dyaXRlX2NiLCAmYXJnLAotCSAg ICBOVUxMLCBTQ19MQVJHRV9NQVhDTEFTUyArIDEpLCAiYnVmX3dyaXRlcl9pbml0KCkgc2hvdWxk IE9PTSIpOwotCWFzc2VydChidWZfd3JpdGVyLmJ1ZiA9PSBOVUxMKTsKLQotCWNoYXIgc1tVTklU X01BWCArIDFdOwotCXNpemVfdCBuX3VuaXQsIGk7Ci0Jc3NpemVfdCB1bml0OwotCi0JbWVtc2V0 KHMsICdhJywgVU5JVF9NQVgpOwotCWFyZyA9IDQ7IC8qIFN0YXJ0aW5nIHZhbHVlIG9mIHJhbmRv bSBhcmd1bWVudC4gKi8KLQlhcmdfc3RvcmUgPSBhcmc7Ci0JZm9yICh1bml0ID0gVU5JVF9NQVg7 IHVuaXQgPj0gMDsgdW5pdCAtPSBVTklUX01BWCAvIDQpIHsKLQkJLyogdW5pdCBrZWVwcyBkZWNy ZWFzaW5nLCBzbyBzdHJsZW4ocykgaXMgYWx3YXlzIHVuaXQuICovCi0JCXNbdW5pdF0gPSAnXDAn OwotCQlmb3IgKG5fdW5pdCA9IDE7IG5fdW5pdCA8PSAzOyArK25fdW5pdCkgewotCQkJdGVzdF93 cml0ZV9sZW4gPSAwOwotCQkJZm9yIChpID0gMTsgaSA8PSBuX3VuaXQ7ICsraSkgewotCQkJCWFy ZyA9IHBybmdfbGdfcmFuZ2VfdTY0KCZhcmcsIDY0KTsKLQkJCQlidWZfd3JpdGVyX2NiKCZidWZf d3JpdGVyLCBzKTsKLQkJCQlhc3NlcnRfdTY0X2VxKGFyZ19zdG9yZSwgYXJnLAotCQkJCSAgICAi Q2FsbCBiYWNrIGFyZ3VtZW50IGRpZG4ndCBnZXQgdGhyb3VnaCIpOwotCQkJCWFzc2VydF96dV9l cSh0ZXN0X3dyaXRlX2xlbiwgaSAqIHVuaXQsCi0JCQkJICAgICJJbmNvcnJlY3QgbGVuZ3RoIGFm dGVyIHdyaXRpbmcgJXp1IHN0cmluZ3MiCi0JCQkJICAgICIgb2YgbGVuZ3RoICV6dSIsIGksIHVu aXQpOwotCQkJfQotCQkJYnVmX3dyaXRlcl9mbHVzaCgmYnVmX3dyaXRlcik7Ci0JCQlleHBlY3Rf enVfZXEodGVzdF93cml0ZV9sZW4sIG5fdW5pdCAqIHVuaXQsCi0JCQkgICAgIkluY29ycmVjdCBs ZW5ndGggYWZ0ZXIgZmx1c2hpbmcgYXQgdGhlIGVuZCBvZiIKLQkJCSAgICAiIHdyaXRpbmcgJXp1 IHN0cmluZ3Mgb2YgbGVuZ3RoICV6dSIsIG5fdW5pdCwgdW5pdCk7Ci0JCX0KLQl9Ci0JYnVmX3dy aXRlcl90ZXJtaW5hdGUodHNkbiwgJmJ1Zl93cml0ZXIpOwotfQotVEVTVF9FTkQKLQotc3RhdGlj IGludCB0ZXN0X3JlYWRfY291bnQ7Ci1zdGF0aWMgc2l6ZV90IHRlc3RfcmVhZF9sZW47Ci1zdGF0 aWMgdWludDY0X3QgYXJnX3N1bTsKLQotc3NpemVfdAotdGVzdF9yZWFkX2NiKHZvaWQgKmNib3Bh cXVlLCB2b2lkICpidWYsIHNpemVfdCBsaW1pdCkgewotCXN0YXRpYyB1aW50NjRfdCByYW5kID0g NDsKLQotCWFyZ19zdW0gKz0gKih1aW50NjRfdCAqKWNib3BhcXVlOwotCWFzc2VydF96dV9ndChs aW1pdCwgMCwgIkxpbWl0IGZvciByZWFkX2NiIG11c3QgYmUgcG9zaXRpdmUiKTsKLQktLXRlc3Rf cmVhZF9jb3VudDsKLQlpZiAodGVzdF9yZWFkX2NvdW50ID09IDApIHsKLQkJcmV0dXJuIC0xOwot CX0gZWxzZSB7Ci0JCXNpemVfdCByZWFkX2xlbiA9IGxpbWl0OwotCQlpZiAobGltaXQgPiAxKSB7 Ci0JCQlyYW5kID0gcHJuZ19yYW5nZV91NjQoJnJhbmQsICh1aW50NjRfdClsaW1pdCk7Ci0JCQly ZWFkX2xlbiAtPSAoc2l6ZV90KXJhbmQ7Ci0JCX0KLQkJYXNzZXJ0KHJlYWRfbGVuID4gMCk7Ci0J CW1lbXNldChidWYsICdhJywgcmVhZF9sZW4pOwotCQlzaXplX3QgcHJldl90ZXN0X3JlYWRfbGVu ID0gdGVzdF9yZWFkX2xlbjsKLQkJdGVzdF9yZWFkX2xlbiArPSByZWFkX2xlbjsKLQkJYXNzZXJ0 X3p1X2xlKHByZXZfdGVzdF9yZWFkX2xlbiwgdGVzdF9yZWFkX2xlbiwKLQkJICAgICJUZXN0IHJl YWQgb3ZlcmZsb3dlZCIpOwotCQlyZXR1cm4gcmVhZF9sZW47Ci0JfQotfQotCi1zdGF0aWMgdm9p ZAotdGVzdF9idWZfd3JpdGVyX3BpcGVfYm9keSh0c2RuX3QgKnRzZG4sIGJ1Zl93cml0ZXJfdCAq YnVmX3dyaXRlcikgewotCWFyZyA9IDQ7IC8qIFN0YXJ0aW5nIHZhbHVlIG9mIHJhbmRvbSBhcmd1 bWVudC4gKi8KLQlmb3IgKGludCBjb3VudCA9IDU7IGNvdW50ID4gMDsgLS1jb3VudCkgewotCQlh cmcgPSBwcm5nX2xnX3JhbmdlX3U2NCgmYXJnLCA2NCk7Ci0JCWFyZ19zdW0gPSAwOwotCQl0ZXN0 X3JlYWRfY291bnQgPSBjb3VudDsKLQkJdGVzdF9yZWFkX2xlbiA9IDA7Ci0JCXRlc3Rfd3JpdGVf bGVuID0gMDsKLQkJYnVmX3dyaXRlcl9waXBlKGJ1Zl93cml0ZXIsIHRlc3RfcmVhZF9jYiwgJmFy Zyk7Ci0JCWFzc2VydCh0ZXN0X3JlYWRfY291bnQgPT0gMCk7Ci0JCWV4cGVjdF91NjRfZXEoYXJn X3N1bSwgYXJnICogY291bnQsICIiKTsKLQkJZXhwZWN0X3p1X2VxKHRlc3Rfd3JpdGVfbGVuLCB0 ZXN0X3JlYWRfbGVuLAotCQkgICAgIldyaXRlIGxlbmd0aCBzaG91bGQgYmUgZXF1YWwgdG8gcmVh ZCBsZW5ndGgiKTsKLQl9Ci0JYnVmX3dyaXRlcl90ZXJtaW5hdGUodHNkbiwgYnVmX3dyaXRlcik7 Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9idWZfd3JpdGVfcGlwZSkgewotCWJ1Zl93cml0ZXJfdCBi dWZfd3JpdGVyOwotCXRzZG5fdCAqdHNkbiA9IHRzZG5fZmV0Y2goKTsKLQlhc3NlcnRfZmFsc2Uo YnVmX3dyaXRlcl9pbml0KHRzZG4sICZidWZfd3JpdGVyLCB0ZXN0X3dyaXRlX2NiLCAmYXJnLAot CSAgICB0ZXN0X2J1ZiwgVEVTVF9CVUZfU0laRSksCi0JICAgICJidWZfd3JpdGVyX2luaXQoKSBz aG91bGQgbm90IGVuY291bnRlciBlcnJvciBvbiBzdGF0aWMgYnVmZmVyIik7Ci0JdGVzdF9idWZf d3JpdGVyX3BpcGVfYm9keSh0c2RuLCAmYnVmX3dyaXRlcik7Ci19Ci1URVNUX0VORAotCi1URVNU X0JFR0lOKHRlc3RfYnVmX3dyaXRlX3BpcGVfb29tKSB7Ci0JYnVmX3dyaXRlcl90IGJ1Zl93cml0 ZXI7Ci0JdHNkbl90ICp0c2RuID0gdHNkbl9mZXRjaCgpOwotCWFzc2VydF90cnVlKGJ1Zl93cml0 ZXJfaW5pdCh0c2RuLCAmYnVmX3dyaXRlciwgdGVzdF93cml0ZV9jYiwgJmFyZywKLQkgICAgTlVM TCwgU0NfTEFSR0VfTUFYQ0xBU1MgKyAxKSwgImJ1Zl93cml0ZXJfaW5pdCgpIHNob3VsZCBPT00i KTsKLQl0ZXN0X2J1Zl93cml0ZXJfcGlwZV9ib2R5KHRzZG4sICZidWZfd3JpdGVyKTsKLX0KLVRF U1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfYnVm X3dyaXRlX3N0YXRpYywKLQkgICAgdGVzdF9idWZfd3JpdGVfZHluYW1pYywKLQkgICAgdGVzdF9i dWZfd3JpdGVfb29tLAotCSAgICB0ZXN0X2J1Zl93cml0ZV9waXBlLAotCSAgICB0ZXN0X2J1Zl93 cml0ZV9waXBlX29vbSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2NhY2hlX2Jpbi5jIGIvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2NhY2hlX2Jpbi5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAzYjZkYmFiLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9jYWNoZV9iaW4uYworKysgL2Rldi9udWxs CkBAIC0xLDM4NCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLXN0 YXRpYyB2b2lkCi1kb19maWxsX3Rlc3QoY2FjaGVfYmluX3QgKmJpbiwgY2FjaGVfYmluX2luZm9f dCAqaW5mbywgdm9pZCAqKnB0cnMsCi0gICAgY2FjaGVfYmluX3N6X3QgbmNhY2hlZF9tYXgsIGNh Y2hlX2Jpbl9zel90IG5maWxsX2F0dGVtcHQsCi0gICAgY2FjaGVfYmluX3N6X3QgbmZpbGxfc3Vj Y2VlZCkgewotCWJvb2wgc3VjY2VzczsKLQl2b2lkICpwdHI7Ci0JYXNzZXJ0X3RydWUoY2FjaGVf YmluX25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gMCwgIiIpOwotCUNBQ0hFX0JJTl9Q VFJfQVJSQVlfREVDTEFSRShhcnIsIG5maWxsX2F0dGVtcHQpOwotCWNhY2hlX2Jpbl9pbml0X3B0 cl9hcnJheV9mb3JfZmlsbChiaW4sIGluZm8sICZhcnIsIG5maWxsX2F0dGVtcHQpOwotCWZvciAo Y2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCBuZmlsbF9zdWNjZWVkOyBpKyspIHsKLQkJYXJyLnB0 cltpXSA9ICZwdHJzW2ldOwotCX0KLQljYWNoZV9iaW5fZmluaXNoX2ZpbGwoYmluLCBpbmZvLCAm YXJyLCBuZmlsbF9zdWNjZWVkKTsKLQlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbmNhY2hlZF9nZXRf bG9jYWwoYmluLCBpbmZvKSA9PSBuZmlsbF9zdWNjZWVkLAotCSAgICAiIik7Ci0JY2FjaGVfYmlu X2xvd193YXRlcl9zZXQoYmluKTsKLQotCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCBu ZmlsbF9zdWNjZWVkOyBpKyspIHsKLQkJcHRyID0gY2FjaGVfYmluX2FsbG9jKGJpbiwgJnN1Y2Nl c3MpOwotCQlleHBlY3RfdHJ1ZShzdWNjZXNzLCAiIik7Ci0JCWV4cGVjdF9wdHJfZXEocHRyLCAo dm9pZCAqKSZwdHJzW2ldLAotCQkgICAgIlNob3VsZCBwb3AgaW4gb3JkZXIgZmlsbGVkIik7Ci0J CWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9sb3dfd2F0ZXJfZ2V0KGJpbiwgaW5mbykKLQkJICAgID09 IG5maWxsX3N1Y2NlZWQgLSBpIC0gMSwgIiIpOwotCX0KLQlleHBlY3RfdHJ1ZShjYWNoZV9iaW5f bmNhY2hlZF9nZXRfbG9jYWwoYmluLCBpbmZvKSA9PSAwLCAiIik7Ci0JZXhwZWN0X3RydWUoY2Fj aGVfYmluX2xvd193YXRlcl9nZXQoYmluLCBpbmZvKSA9PSAwLCAiIik7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1kb19mbHVzaF90ZXN0KGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZvX3QgKmlu Zm8sIHZvaWQgKipwdHJzLAotICAgIGNhY2hlX2Jpbl9zel90IG5maWxsLCBjYWNoZV9iaW5fc3pf dCBuZmx1c2gpIHsKLQlib29sIHN1Y2Nlc3M7Ci0JYXNzZXJ0X3RydWUoY2FjaGVfYmluX25jYWNo ZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gMCwgIiIpOwotCi0JZm9yIChjYWNoZV9iaW5fc3pf dCBpID0gMDsgaSA8IG5maWxsOyBpKyspIHsKLQkJc3VjY2VzcyA9IGNhY2hlX2Jpbl9kYWxsb2Nf ZWFzeShiaW4sICZwdHJzW2ldKTsKLQkJZXhwZWN0X3RydWUoc3VjY2VzcywgIiIpOwotCX0KLQot CUNBQ0hFX0JJTl9QVFJfQVJSQVlfREVDTEFSRShhcnIsIG5mbHVzaCk7Ci0JY2FjaGVfYmluX2lu aXRfcHRyX2FycmF5X2Zvcl9mbHVzaChiaW4sIGluZm8sICZhcnIsIG5mbHVzaCk7Ci0JZm9yIChj YWNoZV9iaW5fc3pfdCBpID0gMDsgaSA8IG5mbHVzaDsgaSsrKSB7Ci0JCWV4cGVjdF9wdHJfZXEo YXJyLnB0cltpXSwgJnB0cnNbbmZsdXNoIC0gaSAtIDFdLCAiIik7Ci0JfQotCWNhY2hlX2Jpbl9m aW5pc2hfZmx1c2goYmluLCBpbmZvLCAmYXJyLCBuZmx1c2gpOwotCi0JZXhwZWN0X3RydWUoY2Fj aGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gbmZpbGwgLSBuZmx1c2gsCi0J ICAgICIiKTsKLQl3aGlsZSAoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykg PiAwKSB7Ci0JCWNhY2hlX2Jpbl9hbGxvYyhiaW4sICZzdWNjZXNzKTsKLQl9Ci19Ci0KLXN0YXRp YyB2b2lkCi1kb19iYXRjaF9hbGxvY190ZXN0KGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9p bmZvX3QgKmluZm8sIHZvaWQgKipwdHJzLAotICAgIGNhY2hlX2Jpbl9zel90IG5maWxsLCBzaXpl X3QgYmF0Y2gpIHsKLQlhc3NlcnRfdHJ1ZShjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoYmlu LCBpbmZvKSA9PSAwLCAiIik7Ci0JQ0FDSEVfQklOX1BUUl9BUlJBWV9ERUNMQVJFKGFyciwgbmZp bGwpOwotCWNhY2hlX2Jpbl9pbml0X3B0cl9hcnJheV9mb3JfZmlsbChiaW4sIGluZm8sICZhcnIs IG5maWxsKTsKLQlmb3IgKGNhY2hlX2Jpbl9zel90IGkgPSAwOyBpIDwgbmZpbGw7IGkrKykgewot CQlhcnIucHRyW2ldID0gJnB0cnNbaV07Ci0JfQotCWNhY2hlX2Jpbl9maW5pc2hfZmlsbChiaW4s IGluZm8sICZhcnIsIG5maWxsKTsKLQlhc3NlcnRfdHJ1ZShjYWNoZV9iaW5fbmNhY2hlZF9nZXRf bG9jYWwoYmluLCBpbmZvKSA9PSBuZmlsbCwgIiIpOwotCWNhY2hlX2Jpbl9sb3dfd2F0ZXJfc2V0 KGJpbik7Ci0KLQl2b2lkICoqb3V0ID0gbWFsbG9jKChiYXRjaCArIDEpICogc2l6ZW9mKHZvaWQg KikpOwotCXNpemVfdCBuID0gY2FjaGVfYmluX2FsbG9jX2JhdGNoKGJpbiwgYmF0Y2gsIG91dCk7 Ci0JYXNzZXJ0X3RydWUobiA9PSAoKHNpemVfdCluZmlsbCA8IGJhdGNoID8gKHNpemVfdCluZmls bCA6IGJhdGNoKSwgIiIpOwotCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCAoY2FjaGVf YmluX3N6X3QpbjsgaSsrKSB7Ci0JCWV4cGVjdF9wdHJfZXEob3V0W2ldLCAmcHRyc1tpXSwgIiIp OwotCX0KLQlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbG93X3dhdGVyX2dldChiaW4sIGluZm8pID09 IG5maWxsIC0KLQkgICAgKGNhY2hlX2Jpbl9zel90KW4sICIiKTsKLQl3aGlsZSAoY2FjaGVfYmlu X25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPiAwKSB7Ci0JCWJvb2wgc3VjY2VzczsKLQkJ Y2FjaGVfYmluX2FsbG9jKGJpbiwgJnN1Y2Nlc3MpOwotCX0KLQlmcmVlKG91dCk7Ci19Ci0KLXN0 YXRpYyB2b2lkCi10ZXN0X2Jpbl9pbml0KGNhY2hlX2Jpbl90ICpiaW4sIGNhY2hlX2Jpbl9pbmZv X3QgKmluZm8pIHsKLQlzaXplX3Qgc2l6ZTsKLQlzaXplX3QgYWxpZ25tZW50OwotCWNhY2hlX2Jp bl9pbmZvX2NvbXB1dGVfYWxsb2MoaW5mbywgMSwgJnNpemUsICZhbGlnbm1lbnQpOwotCXZvaWQg Km1lbSA9IG1hbGxvY3goc2l6ZSwgTUFMTE9DWF9BTElHTihhbGlnbm1lbnQpKTsKLQlhc3NlcnRf cHRyX25vdF9udWxsKG1lbSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCBmYWlsdXJlIik7Ci0KLQlzaXpl X3QgY3VyX29mZnNldCA9IDA7Ci0JY2FjaGVfYmluX3ByZWluY3JlbWVudChpbmZvLCAxLCBtZW0s ICZjdXJfb2Zmc2V0KTsKLQljYWNoZV9iaW5faW5pdChiaW4sIGluZm8sIG1lbSwgJmN1cl9vZmZz ZXQpOwotCWNhY2hlX2Jpbl9wb3N0aW5jcmVtZW50KGluZm8sIDEsIG1lbSwgJmN1cl9vZmZzZXQp OwotCWFzc2VydF96dV9lcShjdXJfb2Zmc2V0LCBzaXplLCAiU2hvdWxkIHVzZSBhbGwgcmVxdWVz dGVkIG1lbW9yeSIpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfY2FjaGVfYmluKSB7Ci0JY29uc3Qg aW50IG5jYWNoZWRfbWF4ID0gMTAwOwotCWJvb2wgc3VjY2VzczsKLQl2b2lkICpwdHI7Ci0KLQlj YWNoZV9iaW5faW5mb190IGluZm87Ci0JY2FjaGVfYmluX2luZm9faW5pdCgmaW5mbywgbmNhY2hl ZF9tYXgpOwotCWNhY2hlX2Jpbl90IGJpbjsKLQl0ZXN0X2Jpbl9pbml0KCZiaW4sICZpbmZvKTsK LQotCS8qIEluaXRpYWxpemUgdG8gZW1wdHk7IHNob3VsZCB0aGVuIGhhdmUgMCBlbGVtZW50cy4g Ki8KLQlleHBlY3RfZF9lcShuY2FjaGVkX21heCwgY2FjaGVfYmluX2luZm9fbmNhY2hlZF9tYXgo JmluZm8pLCAiIik7Ci0JZXhwZWN0X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKCZi aW4sICZpbmZvKSA9PSAwLCAiIik7Ci0JZXhwZWN0X3RydWUoY2FjaGVfYmluX2xvd193YXRlcl9n ZXQoJmJpbiwgJmluZm8pID09IDAsICIiKTsKLQotCXB0ciA9IGNhY2hlX2Jpbl9hbGxvY19lYXN5 KCZiaW4sICZzdWNjZXNzKTsKLQlleHBlY3RfZmFsc2Uoc3VjY2VzcywgIlNob3VsZG4ndCBzdWNj ZXNzZnVsbHkgYWxsb2NhdGUgd2hlbiBlbXB0eSIpOwotCWV4cGVjdF9wdHJfbnVsbChwdHIsICJT aG91bGRuJ3QgZ2V0IGEgbm9uLW51bGwgcG9pbnRlciBvbiBmYWlsdXJlIik7Ci0KLQlwdHIgPSBj YWNoZV9iaW5fYWxsb2MoJmJpbiwgJnN1Y2Nlc3MpOwotCWV4cGVjdF9mYWxzZShzdWNjZXNzLCAi U2hvdWxkbid0IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZSB3aGVuIGVtcHR5Iik7Ci0JZXhwZWN0X3B0 cl9udWxsKHB0ciwgIlNob3VsZG4ndCBnZXQgYSBub24tbnVsbCBwb2ludGVyIG9uIGZhaWx1cmUi KTsKLQotCS8qCi0JICogV2UgYWxsb2NhdGUgb25lIG1vcmUgaXRlbSB0aGFuIG5jYWNoZWRfbWF4 LCBzbyB3ZSBjYW4gdGVzdCBjYWNoZSBiaW4KLQkgKiBleGhhdXN0aW9uLgotCSAqLwotCXZvaWQg KipwdHJzID0gbWFsbG9jeChzaXplb2Yodm9pZCAqKSAqIChuY2FjaGVkX21heCArIDEpLCAwKTsK LQlhc3NlcnRfcHRyX25vdF9udWxsKHB0cnMsICJVbmV4cGVjdGVkIG1hbGxvY3ggZmFpbHVyZSIp OwotCWZvciAgKGNhY2hlX2Jpbl9zel90IGkgPSAwOyBpIDwgbmNhY2hlZF9tYXg7IGkrKykgewot CQlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoJmJpbiwgJmluZm8pID09 IGksICIiKTsKLQkJc3VjY2VzcyA9IGNhY2hlX2Jpbl9kYWxsb2NfZWFzeSgmYmluLCAmcHRyc1tp XSk7Ci0JCWV4cGVjdF90cnVlKHN1Y2Nlc3MsCi0JCSAgICAiU2hvdWxkIGJlIGFibGUgdG8gZGFs bG9jIGludG8gYSBub24tZnVsbCBjYWNoZSBiaW4uIik7Ci0JCWV4cGVjdF90cnVlKGNhY2hlX2Jp bl9sb3dfd2F0ZXJfZ2V0KCZiaW4sICZpbmZvKSA9PSAwLAotCQkgICAgIlB1c2hlcyBhbmQgcG9w cyBzaG91bGRuJ3QgY2hhbmdlIGxvdyB3YXRlciBvZiB6ZXJvLiIpOwotCX0KLQlleHBlY3RfdHJ1 ZShjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoJmJpbiwgJmluZm8pID09IG5jYWNoZWRfbWF4 LAotCSAgICAiIik7Ci0Jc3VjY2VzcyA9IGNhY2hlX2Jpbl9kYWxsb2NfZWFzeSgmYmluLCAmcHRy c1tuY2FjaGVkX21heF0pOwotCWV4cGVjdF9mYWxzZShzdWNjZXNzLCAiU2hvdWxkbid0IGJlIGFi bGUgdG8gZGFsbG9jIGludG8gYSBmdWxsIGJpbi4iKTsKLQotCWNhY2hlX2Jpbl9sb3dfd2F0ZXJf c2V0KCZiaW4pOwotCi0JZm9yIChjYWNoZV9iaW5fc3pfdCBpID0gMDsgaSA8IG5jYWNoZWRfbWF4 OyBpKyspIHsKLQkJZXhwZWN0X3RydWUoY2FjaGVfYmluX2xvd193YXRlcl9nZXQoJmJpbiwgJmlu Zm8pCi0JCSAgICA9PSBuY2FjaGVkX21heCAtIGksICIiKTsKLQkJZXhwZWN0X3RydWUoY2FjaGVf YmluX25jYWNoZWRfZ2V0X2xvY2FsKCZiaW4sICZpbmZvKQotCQkgICAgPT0gbmNhY2hlZF9tYXgg LSBpLCAiIik7Ci0JCS8qCi0JCSAqIFRoaXMgc2hvdWxkIGZhaWwgLS0gdGhlIGVhc3kgdmFyaWFu dCBjYW4ndCBjaGFuZ2UgdGhlIGxvdwotCQkgKiB3YXRlciBtYXJrLgotCQkgKi8KLQkJcHRyID0g Y2FjaGVfYmluX2FsbG9jX2Vhc3koJmJpbiwgJnN1Y2Nlc3MpOwotCQlleHBlY3RfcHRyX251bGwo cHRyLCAiIik7Ci0JCWV4cGVjdF9mYWxzZShzdWNjZXNzLCAiIik7Ci0JCWV4cGVjdF90cnVlKGNh Y2hlX2Jpbl9sb3dfd2F0ZXJfZ2V0KCZiaW4sICZpbmZvKQotCQkgICAgPT0gbmNhY2hlZF9tYXgg LSBpLCAiIik7Ci0JCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9uY2FjaGVkX2dldF9sb2NhbCgmYmlu LCAmaW5mbykKLQkJICAgID09IG5jYWNoZWRfbWF4IC0gaSwgIiIpOwotCi0JCS8qIFRoaXMgc2hv dWxkIHN1Y2NlZWQsIHRob3VnaC4gKi8KLQkJcHRyID0gY2FjaGVfYmluX2FsbG9jKCZiaW4sICZz dWNjZXNzKTsKLQkJZXhwZWN0X3RydWUoc3VjY2VzcywgIiIpOwotCQlleHBlY3RfcHRyX2VxKHB0 ciwgJnB0cnNbbmNhY2hlZF9tYXggLSBpIC0gMV0sCi0JCSAgICAiQWxsb2Mgc2hvdWxkIHBvcCBp biBzdGFjayBvcmRlciIpOwotCQlleHBlY3RfdHJ1ZShjYWNoZV9iaW5fbG93X3dhdGVyX2dldCgm YmluLCAmaW5mbykKLQkJICAgID09IG5jYWNoZWRfbWF4IC0gaSAtIDEsICIiKTsKLQkJZXhwZWN0 X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKCZiaW4sICZpbmZvKQotCQkgICAgPT0g bmNhY2hlZF9tYXggLSBpIC0gMSwgIiIpOwotCX0KLQkvKiBOb3cgd2UncmUgZW1wdHkgLS0gYWxs IGFsbG9jIGF0dGVtcHRzIHNob3VsZCBmYWlsLiAqLwotCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9u Y2FjaGVkX2dldF9sb2NhbCgmYmluLCAmaW5mbykgPT0gMCwgIiIpOwotCXB0ciA9IGNhY2hlX2Jp bl9hbGxvY19lYXN5KCZiaW4sICZzdWNjZXNzKTsKLQlleHBlY3RfcHRyX251bGwocHRyLCAiIik7 Ci0JZXhwZWN0X2ZhbHNlKHN1Y2Nlc3MsICIiKTsKLQlwdHIgPSBjYWNoZV9iaW5fYWxsb2MoJmJp biwgJnN1Y2Nlc3MpOwotCWV4cGVjdF9wdHJfbnVsbChwdHIsICIiKTsKLQlleHBlY3RfZmFsc2Uo c3VjY2VzcywgIiIpOwotCi0JZm9yIChjYWNoZV9iaW5fc3pfdCBpID0gMDsgaSA8IG5jYWNoZWRf bWF4IC8gMjsgaSsrKSB7Ci0JCWNhY2hlX2Jpbl9kYWxsb2NfZWFzeSgmYmluLCAmcHRyc1tpXSk7 Ci0JfQotCWNhY2hlX2Jpbl9sb3dfd2F0ZXJfc2V0KCZiaW4pOwotCi0JZm9yIChjYWNoZV9iaW5f c3pfdCBpID0gbmNhY2hlZF9tYXggLyAyOyBpIDwgbmNhY2hlZF9tYXg7IGkrKykgewotCQljYWNo ZV9iaW5fZGFsbG9jX2Vhc3koJmJpbiwgJnB0cnNbaV0pOwotCX0KLQlleHBlY3RfdHJ1ZShjYWNo ZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoJmJpbiwgJmluZm8pID09IG5jYWNoZWRfbWF4LAotCSAg ICAiIik7Ci0JZm9yIChjYWNoZV9iaW5fc3pfdCBpID0gbmNhY2hlZF9tYXggLSAxOyBpID49IG5j YWNoZWRfbWF4IC8gMjsgaS0tKSB7Ci0JCS8qCi0JCSAqIFNpemUgaXMgYmlnZ2VyIHRoYW4gbG93 IHdhdGVyIC0tIHRoZSByZWR1Y2VkIHZlcnNpb24gc2hvdWxkCi0JCSAqIHN1Y2NlZWQuCi0JCSAq LwotCQlwdHIgPSBjYWNoZV9iaW5fYWxsb2NfZWFzeSgmYmluLCAmc3VjY2Vzcyk7Ci0JCWV4cGVj dF90cnVlKHN1Y2Nlc3MsICIiKTsKLQkJZXhwZWN0X3B0cl9lcShwdHIsICZwdHJzW2ldLCAiIik7 Ci0JfQotCS8qIEJ1dCBub3csIHdlJ3ZlIGhpdCBsb3ctd2F0ZXIuICovCi0JcHRyID0gY2FjaGVf YmluX2FsbG9jX2Vhc3koJmJpbiwgJnN1Y2Nlc3MpOwotCWV4cGVjdF9mYWxzZShzdWNjZXNzLCAi Iik7Ci0JZXhwZWN0X3B0cl9udWxsKHB0ciwgIiIpOwotCi0JLyogV2UncmUgZ29pbmcgdG8gdGVz dCBmaWxsaW5nIC0tIHdlIG11c3QgYmUgZW1wdHkgdG8gc3RhcnQuICovCi0Jd2hpbGUgKGNhY2hl X2Jpbl9uY2FjaGVkX2dldF9sb2NhbCgmYmluLCAmaW5mbykpIHsKLQkJY2FjaGVfYmluX2FsbG9j KCZiaW4sICZzdWNjZXNzKTsKLQkJZXhwZWN0X3RydWUoc3VjY2VzcywgIiIpOwotCX0KLQotCS8q IFRlc3QgZmlsbC4gKi8KLQkvKiBUcnkgdG8gZmlsbCBhbGwsIHN1Y2NlZWQgZnVsbHkuICovCi0J ZG9fZmlsbF90ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCwgbmNhY2hlZF9tYXgs IG5jYWNoZWRfbWF4KTsKLQkvKiBUcnkgdG8gZmlsbCBhbGwsIHN1Y2NlZWQgcGFydGlhbGx5LiAq LwotCWRvX2ZpbGxfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXgsIG5jYWNoZWRf bWF4LAotCSAgICBuY2FjaGVkX21heCAvIDIpOwotCS8qIFRyeSB0byBmaWxsIGFsbCwgZmFpbCBj b21wbGV0ZWx5LiAqLwotCWRvX2ZpbGxfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9t YXgsIG5jYWNoZWRfbWF4LCAwKTsKLQotCS8qIFRyeSB0byBmaWxsIHNvbWUsIHN1Y2NlZWQgZnVs bHkuICovCi0JZG9fZmlsbF90ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCwgbmNh Y2hlZF9tYXggLyAyLAotCSAgICBuY2FjaGVkX21heCAvIDIpOwotCS8qIFRyeSB0byBmaWxsIHNv bWUsIHN1Y2NlZWQgcGFydGlhbGx5LiAqLwotCWRvX2ZpbGxfdGVzdCgmYmluLCAmaW5mbywgcHRy cywgbmNhY2hlZF9tYXgsIG5jYWNoZWRfbWF4IC8gMiwKLQkgICAgbmNhY2hlZF9tYXggLyA0KTsK LQkvKiBUcnkgdG8gZmlsbCBzb21lLCBmYWlsIGNvbXBsZXRlbHkuICovCi0JZG9fZmlsbF90ZXN0 KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCwgbmNhY2hlZF9tYXggLyAyLCAwKTsKLQot CWRvX2ZsdXNoX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCBuY2FjaGVkX21h eCk7Ci0JZG9fZmx1c2hfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXgsIG5jYWNo ZWRfbWF4IC8gMik7Ci0JZG9fZmx1c2hfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9t YXgsIDApOwotCWRvX2ZsdXNoX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4IC8g MiwgbmNhY2hlZF9tYXggLyAyKTsKLQlkb19mbHVzaF90ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBu Y2FjaGVkX21heCAvIDIsIG5jYWNoZWRfbWF4IC8gNCk7Ci0JZG9fZmx1c2hfdGVzdCgmYmluLCAm aW5mbywgcHRycywgbmNhY2hlZF9tYXggLyAyLCAwKTsKLQotCWRvX2JhdGNoX2FsbG9jX3Rlc3Qo JmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4LCBuY2FjaGVkX21heCk7Ci0JZG9fYmF0Y2hf YWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXgsIG5jYWNoZWRfbWF4ICog Mik7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXgs IG5jYWNoZWRfbWF4IC8gMik7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRy cywgbmNhY2hlZF9tYXgsIDIpOwotCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0 cnMsIG5jYWNoZWRfbWF4LCAxKTsKLQlkb19iYXRjaF9hbGxvY190ZXN0KCZiaW4sICZpbmZvLCBw dHJzLCBuY2FjaGVkX21heCwgMCk7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywg cHRycywgbmNhY2hlZF9tYXggLyAyLAotCSAgICBuY2FjaGVkX21heCAvIDIpOwotCWRvX2JhdGNo X2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4IC8gMiwgbmNhY2hlZF9t YXgpOwotCWRvX2JhdGNoX2FsbG9jX3Rlc3QoJmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4 IC8gMiwKLQkgICAgbmNhY2hlZF9tYXggLyA0KTsKLQlkb19iYXRjaF9hbGxvY190ZXN0KCZiaW4s ICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDIsIDIpOwotCWRvX2JhdGNoX2FsbG9jX3Rlc3Qo JmJpbiwgJmluZm8sIHB0cnMsIG5jYWNoZWRfbWF4IC8gMiwgMSk7Ci0JZG9fYmF0Y2hfYWxsb2Nf dGVzdCgmYmluLCAmaW5mbywgcHRycywgbmNhY2hlZF9tYXggLyAyLCAwKTsKLQlkb19iYXRjaF9h bGxvY190ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCAyLCBuY2FjaGVkX21heCk7Ci0JZG9fYmF0Y2hf YWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRycywgMiwgMik7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVz dCgmYmluLCAmaW5mbywgcHRycywgMiwgMSk7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAm aW5mbywgcHRycywgMiwgMCk7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRy cywgMSwgMik7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRycywgMSwgMSk7 Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRycywgMSwgMCk7Ci0JZG9fYmF0 Y2hfYWxsb2NfdGVzdCgmYmluLCAmaW5mbywgcHRycywgMCwgMik7Ci0JZG9fYmF0Y2hfYWxsb2Nf dGVzdCgmYmluLCAmaW5mbywgcHRycywgMCwgMSk7Ci0JZG9fYmF0Y2hfYWxsb2NfdGVzdCgmYmlu LCAmaW5mbywgcHRycywgMCwgMCk7Ci0KLQlmcmVlKHB0cnMpOwotfQotVEVTVF9FTkQKLQotc3Rh dGljIHZvaWQKLWRvX2ZsdXNoX3N0YXNoZWRfdGVzdChjYWNoZV9iaW5fdCAqYmluLCBjYWNoZV9i aW5faW5mb190ICppbmZvLCB2b2lkICoqcHRycywKLSAgICBjYWNoZV9iaW5fc3pfdCBuZmlsbCwg Y2FjaGVfYmluX3N6X3QgbnN0YXNoKSB7Ci0JZXhwZWN0X3RydWUoY2FjaGVfYmluX25jYWNoZWRf Z2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gMCwKLQkgICAgIkJpbiBub3QgZW1wdHkiKTsKLQlleHBl Y3RfdHJ1ZShjYWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gMCwKLQkg ICAgIkJpbiBub3QgZW1wdHkiKTsKLQlleHBlY3RfdHJ1ZShuZmlsbCArIG5zdGFzaCA8PSBpbmZv LT5uY2FjaGVkX21heCwgIkV4Y2VlZGVkIG1heCIpOwotCi0JYm9vbCByZXQ7Ci0JLyogRmlsbCAq LwotCWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCBuZmlsbDsgaSsrKSB7Ci0JCXJldCA9 IGNhY2hlX2Jpbl9kYWxsb2NfZWFzeShiaW4sICZwdHJzW2ldKTsKLQkJZXhwZWN0X3RydWUocmV0 LCAiVW5leHBlY3RlZCBmaWxsIGZhaWx1cmUiKTsKLQl9Ci0JZXhwZWN0X3RydWUoY2FjaGVfYmlu X25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gbmZpbGwsCi0JICAgICJXcm9uZyBjYWNo ZWQgY291bnQiKTsKLQotCS8qIFN0YXNoICovCi0JZm9yIChjYWNoZV9iaW5fc3pfdCBpID0gMDsg aSA8IG5zdGFzaDsgaSsrKSB7Ci0JCXJldCA9IGNhY2hlX2Jpbl9zdGFzaChiaW4sICZwdHJzW2kg KyBuZmlsbF0pOwotCQlleHBlY3RfdHJ1ZShyZXQsICJVbmV4cGVjdGVkIHN0YXNoIGZhaWx1cmUi KTsKLQl9Ci0JZXhwZWN0X3RydWUoY2FjaGVfYmluX25zdGFzaGVkX2dldF9sb2NhbChiaW4sIGlu Zm8pID09IG5zdGFzaCwKLQkgICAgIldyb25nIHN0YXNoZWQgY291bnQiKTsKLQotCWlmIChuZmls bCArIG5zdGFzaCA9PSBpbmZvLT5uY2FjaGVkX21heCkgewotCQlyZXQgPSBjYWNoZV9iaW5fZGFs bG9jX2Vhc3koYmluLCAmcHRyc1swXSk7Ci0JCWV4cGVjdF9mYWxzZShyZXQsICJTaG91bGQgbm90 IGRhbGxvYyBpbnRvIGEgZnVsbCBiaW4iKTsKLQkJcmV0ID0gY2FjaGVfYmluX3N0YXNoKGJpbiwg JnB0cnNbMF0pOwotCQlleHBlY3RfZmFsc2UocmV0LCAiU2hvdWxkIG5vdCBzdGFzaCBpbnRvIGEg ZnVsbCBiaW4iKTsKLQl9Ci0KLQkvKiBBbGxvYyBmaWxsZWQgb25lcyAqLwotCWZvciAoY2FjaGVf YmluX3N6X3QgaSA9IDA7IGkgPCBuZmlsbDsgaSsrKSB7Ci0JCXZvaWQgKnB0ciA9IGNhY2hlX2Jp bl9hbGxvYyhiaW4sICZyZXQpOwotCQlleHBlY3RfdHJ1ZShyZXQsICJVbmV4cGVjdGVkIGFsbG9j IGZhaWx1cmUiKTsKLQkJLyogVmVyaWZ5IGl0J3Mgbm90IGZyb20gdGhlIHN0YXNoZWQgcmFuZ2Uu ICovCi0JCWV4cGVjdF90cnVlKCh1aW50cHRyX3QpcHRyIDwgKHVpbnRwdHJfdCkmcHRyc1tuZmls bF0sCi0JCSAgICAiU2hvdWxkIG5vdCBhbGxvYyBzdGFzaGVkIHB0cnMiKTsKLQl9Ci0JZXhwZWN0 X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKGJpbiwgaW5mbykgPT0gMCwKLQkgICAg Ildyb25nIGNhY2hlZCBjb3VudCIpOwotCWV4cGVjdF90cnVlKGNhY2hlX2Jpbl9uc3Rhc2hlZF9n ZXRfbG9jYWwoYmluLCBpbmZvKSA9PSBuc3Rhc2gsCi0JICAgICJXcm9uZyBzdGFzaGVkIGNvdW50 Iik7Ci0KLQljYWNoZV9iaW5fYWxsb2MoYmluLCAmcmV0KTsKLQlleHBlY3RfZmFsc2UocmV0LCAi U2hvdWxkIG5vdCBhbGxvYyBzdGFzaGVkIik7Ci0KLQkvKiBDbGVhciBzdGFzaGVkIG9uZXMgKi8K LQljYWNoZV9iaW5fZmluaXNoX2ZsdXNoX3N0YXNoZWQoYmluLCBpbmZvKTsKLQlleHBlY3RfdHJ1 ZShjYWNoZV9iaW5fbmNhY2hlZF9nZXRfbG9jYWwoYmluLCBpbmZvKSA9PSAwLAotCSAgICAiV3Jv bmcgY2FjaGVkIGNvdW50Iik7Ci0JZXhwZWN0X3RydWUoY2FjaGVfYmluX25zdGFzaGVkX2dldF9s b2NhbChiaW4sIGluZm8pID09IDAsCi0JICAgICJXcm9uZyBzdGFzaGVkIGNvdW50Iik7Ci0KLQlj YWNoZV9iaW5fYWxsb2MoYmluLCAmcmV0KTsKLQlleHBlY3RfZmFsc2UocmV0LCAiU2hvdWxkIG5v dCBhbGxvYyBmcm9tIGVtcHR5IGJpbiIpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfY2FjaGVfYmlu X3N0YXNoKSB7Ci0JY29uc3QgaW50IG5jYWNoZWRfbWF4ID0gMTAwOwotCi0JY2FjaGVfYmluX3Qg YmluOwotCWNhY2hlX2Jpbl9pbmZvX3QgaW5mbzsKLQljYWNoZV9iaW5faW5mb19pbml0KCZpbmZv LCBuY2FjaGVkX21heCk7Ci0JdGVzdF9iaW5faW5pdCgmYmluLCAmaW5mbyk7Ci0KLQkvKgotCSAq IFRoZSBjb250ZW50IG9mIHRoaXMgYXJyYXkgaXMgbm90IGFjY2Vzc2VkOyBpbnN0ZWFkIHRoZSBp bnRlcmlvcgotCSAqIGFkZHJlc3NlcyBhcmUgdXNlZCB0byBpbnNlcnQgLyBzdGFzaCBpbnRvIHRo ZSBiaW5zIGFzIHRlc3QgcG9pbnRlcnMuCi0JICovCi0Jdm9pZCAqKnB0cnMgPSBtYWxsb2N4KHNp emVvZih2b2lkICopICogKG5jYWNoZWRfbWF4ICsgMSksIDApOwotCWFzc2VydF9wdHJfbm90X251 bGwocHRycywgIlVuZXhwZWN0ZWQgbWFsbG9jeCBmYWlsdXJlIik7Ci0JYm9vbCByZXQ7Ci0JZm9y IChjYWNoZV9iaW5fc3pfdCBpID0gMDsgaSA8IG5jYWNoZWRfbWF4OyBpKyspIHsKLQkJZXhwZWN0 X3RydWUoY2FjaGVfYmluX25jYWNoZWRfZ2V0X2xvY2FsKCZiaW4sICZpbmZvKSA9PQotCQkgICAg KGkgLyAyICsgaSAlIDIpLCAiV3JvbmcgbmNhY2hlZCB2YWx1ZSIpOwotCQlleHBlY3RfdHJ1ZShj YWNoZV9iaW5fbnN0YXNoZWRfZ2V0X2xvY2FsKCZiaW4sICZpbmZvKSA9PSBpIC8gMiwKLQkJICAg ICJXcm9uZyBuc3Rhc2hlZCB2YWx1ZSIpOwotCQlpZiAoaSAlIDIgPT0gMCkgewotCQkJY2FjaGVf YmluX2RhbGxvY19lYXN5KCZiaW4sICZwdHJzW2ldKTsKLQkJfSBlbHNlIHsKLQkJCXJldCA9IGNh Y2hlX2Jpbl9zdGFzaCgmYmluLCAmcHRyc1tpXSk7Ci0JCQlleHBlY3RfdHJ1ZShyZXQsICJTaG91 bGQgYmUgYWJsZSB0byBzdGFzaCBpbnRvIGEgIgotCQkJICAgICJub24tZnVsbCBjYWNoZSBiaW4i KTsKLQkJfQotCX0KLQlyZXQgPSBjYWNoZV9iaW5fZGFsbG9jX2Vhc3koJmJpbiwgJnB0cnNbMF0p OwotCWV4cGVjdF9mYWxzZShyZXQsICJTaG91bGQgbm90IGRhbGxvYyBpbnRvIGEgZnVsbCBjYWNo ZSBiaW4iKTsKLQlyZXQgPSBjYWNoZV9iaW5fc3Rhc2goJmJpbiwgJnB0cnNbMF0pOwotCWV4cGVj dF9mYWxzZShyZXQsICJTaG91bGQgbm90IHN0YXNoIGludG8gYSBmdWxsIGNhY2hlIGJpbiIpOwot CWZvciAoY2FjaGVfYmluX3N6X3QgaSA9IDA7IGkgPCBuY2FjaGVkX21heDsgaSsrKSB7Ci0JCXZv aWQgKnB0ciA9IGNhY2hlX2Jpbl9hbGxvYygmYmluLCAmcmV0KTsKLQkJaWYgKGkgPCBuY2FjaGVk X21heCAvIDIpIHsKLQkJCWV4cGVjdF90cnVlKHJldCwgIlNob3VsZCBiZSBhYmxlIHRvIGFsbG9j Iik7Ci0JCQl1aW50cHRyX3QgZGlmZiA9ICgodWludHB0cl90KXB0ciAtICh1aW50cHRyX3QpJnB0 cnNbMF0pCi0JCQkgICAgLyBzaXplb2Yodm9pZCAqKTsKLQkJCWV4cGVjdF90cnVlKGRpZmYgJSAy ID09IDAsICJTaG91bGQgYmUgYWJsZSB0byBhbGxvYyIpOwotCQl9IGVsc2UgewotCQkJZXhwZWN0 X2ZhbHNlKHJldCwgIlNob3VsZCBub3QgYWxsb2Mgc3Rhc2hlZCIpOwotCQkJZXhwZWN0X3RydWUo Y2FjaGVfYmluX25zdGFzaGVkX2dldF9sb2NhbCgmYmluLCAmaW5mbykgPT0KLQkJCSAgICBuY2Fj aGVkX21heCAvIDIsICJXcm9uZyBuc3Rhc2hlZCB2YWx1ZSIpOwotCQl9Ci0JfQotCi0JdGVzdF9i aW5faW5pdCgmYmluLCAmaW5mbyk7Ci0JZG9fZmx1c2hfc3Rhc2hlZF90ZXN0KCZiaW4sICZpbmZv LCBwdHJzLCBuY2FjaGVkX21heCwgMCk7Ci0JZG9fZmx1c2hfc3Rhc2hlZF90ZXN0KCZiaW4sICZp bmZvLCBwdHJzLCAwLCBuY2FjaGVkX21heCk7Ci0JZG9fZmx1c2hfc3Rhc2hlZF90ZXN0KCZiaW4s ICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDIsIG5jYWNoZWRfbWF4IC8gMik7Ci0JZG9fZmx1 c2hfc3Rhc2hlZF90ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDQsIG5jYWNo ZWRfbWF4IC8gMik7Ci0JZG9fZmx1c2hfc3Rhc2hlZF90ZXN0KCZiaW4sICZpbmZvLCBwdHJzLCBu Y2FjaGVkX21heCAvIDIsIG5jYWNoZWRfbWF4IC8gNCk7Ci0JZG9fZmx1c2hfc3Rhc2hlZF90ZXN0 KCZiaW4sICZpbmZvLCBwdHJzLCBuY2FjaGVkX21heCAvIDQsIG5jYWNoZWRfbWF4IC8gNCk7Ci19 Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0KHRlc3RfY2FjaGVf YmluLAotCQl0ZXN0X2NhY2hlX2Jpbl9zdGFzaCk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2NraC5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2NraC5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAzNjE0MmFjLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ja2guYworKysgL2Rldi9udWxsCkBA IC0xLDIxMSArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLVRFU1Rf QkVHSU4odGVzdF9uZXdfZGVsZXRlKSB7Ci0JdHNkX3QgKnRzZDsKLQlja2hfdCBja2g7Ci0KLQl0 c2QgPSB0c2RfZmV0Y2goKTsKLQotCWV4cGVjdF9mYWxzZShja2hfbmV3KHRzZCwgJmNraCwgMiwg Y2toX3N0cmluZ19oYXNoLAotCSAgICBja2hfc3RyaW5nX2tleWNvbXApLCAiVW5leHBlY3RlZCBj a2hfbmV3KCkgZXJyb3IiKTsKLQlja2hfZGVsZXRlKHRzZCwgJmNraCk7Ci0KLQlleHBlY3RfZmFs c2UoY2toX25ldyh0c2QsICZja2gsIDMsIGNraF9wb2ludGVyX2hhc2gsCi0JICAgIGNraF9wb2lu dGVyX2tleWNvbXApLCAiVW5leHBlY3RlZCBja2hfbmV3KCkgZXJyb3IiKTsKLQlja2hfZGVsZXRl KHRzZCwgJmNraCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfY291bnRfaW5zZXJ0 X3NlYXJjaF9yZW1vdmUpIHsKLQl0c2RfdCAqdHNkOwotCWNraF90IGNraDsKLQljb25zdCBjaGFy ICpzdHJzW10gPSB7Ci0JICAgICJhIHN0cmluZyIsCi0JICAgICJBIHN0cmluZyIsCi0JICAgICJh IHN0cmluZy4iLAotCSAgICAiQSBzdHJpbmcuIgotCX07Ci0JY29uc3QgY2hhciAqbWlzc2luZyA9 ICJBIHN0cmluZyBub3QgaW4gdGhlIGhhc2ggdGFibGUuIjsKLQlzaXplX3QgaTsKLQotCXRzZCA9 IHRzZF9mZXRjaCgpOwotCi0JZXhwZWN0X2ZhbHNlKGNraF9uZXcodHNkLCAmY2toLCAyLCBja2hf c3RyaW5nX2hhc2gsCi0JICAgIGNraF9zdHJpbmdfa2V5Y29tcCksICJVbmV4cGVjdGVkIGNraF9u ZXcoKSBlcnJvciIpOwotCWV4cGVjdF96dV9lcShja2hfY291bnQoJmNraCksIDAsCi0JICAgICJj a2hfY291bnQoKSBzaG91bGQgcmV0dXJuICV6dSwgYnV0IGl0IHJldHVybmVkICV6dSIsIFpVKDAp LAotCSAgICBja2hfY291bnQoJmNraCkpOwotCi0JLyogSW5zZXJ0LiAqLwotCWZvciAoaSA9IDA7 IGkgPCBzaXplb2Yoc3Rycykvc2l6ZW9mKGNvbnN0IGNoYXIgKik7IGkrKykgewotCQlja2hfaW5z ZXJ0KHRzZCwgJmNraCwgc3Ryc1tpXSwgc3Ryc1tpXSk7Ci0JCWV4cGVjdF96dV9lcShja2hfY291 bnQoJmNraCksIGkrMSwKLQkJICAgICJja2hfY291bnQoKSBzaG91bGQgcmV0dXJuICV6dSwgYnV0 IGl0IHJldHVybmVkICV6dSIsIGkrMSwKLQkJICAgIGNraF9jb3VudCgmY2toKSk7Ci0JfQotCi0J LyogU2VhcmNoLiAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3Rycykvc2l6ZW9mKGNvbnN0 IGNoYXIgKik7IGkrKykgewotCQl1bmlvbiB7Ci0JCQl2b2lkICpwOwotCQkJY29uc3QgY2hhciAq czsKLQkJfSBrLCB2OwotCQl2b2lkICoqa3AsICoqdnA7Ci0JCWNvbnN0IGNoYXIgKmtzLCAqdnM7 Ci0KLQkJa3AgPSAoaSAmIDEpID8gJmsucCA6IE5VTEw7Ci0JCXZwID0gKGkgJiAyKSA/ICZ2LnAg OiBOVUxMOwotCQlrLnAgPSBOVUxMOwotCQl2LnAgPSBOVUxMOwotCQlleHBlY3RfZmFsc2UoY2to X3NlYXJjaCgmY2toLCBzdHJzW2ldLCBrcCwgdnApLAotCQkgICAgIlVuZXhwZWN0ZWQgY2toX3Nl YXJjaCgpIGVycm9yIik7Ci0KLQkJa3MgPSAoaSAmIDEpID8gc3Ryc1tpXSA6IChjb25zdCBjaGFy ICopTlVMTDsKLQkJdnMgPSAoaSAmIDIpID8gc3Ryc1tpXSA6IChjb25zdCBjaGFyICopTlVMTDsK LQkJZXhwZWN0X3B0cl9lcSgodm9pZCAqKWtzLCAodm9pZCAqKWsucywgIktleSBtaXNtYXRjaCwg aT0lenUiLAotCQkgICAgaSk7Ci0JCWV4cGVjdF9wdHJfZXEoKHZvaWQgKil2cywgKHZvaWQgKil2 LnMsICJWYWx1ZSBtaXNtYXRjaCwgaT0lenUiLAotCQkgICAgaSk7Ci0JfQotCWV4cGVjdF90cnVl KGNraF9zZWFyY2goJmNraCwgbWlzc2luZywgTlVMTCwgTlVMTCksCi0JICAgICJVbmV4cGVjdGVk IGNraF9zZWFyY2goKSBzdWNjZXNzIik7Ci0KLQkvKiBSZW1vdmUuICovCi0JZm9yIChpID0gMDsg aSA8IHNpemVvZihzdHJzKS9zaXplb2YoY29uc3QgY2hhciAqKTsgaSsrKSB7Ci0JCXVuaW9uIHsK LQkJCXZvaWQgKnA7Ci0JCQljb25zdCBjaGFyICpzOwotCQl9IGssIHY7Ci0JCXZvaWQgKiprcCwg Kip2cDsKLQkJY29uc3QgY2hhciAqa3MsICp2czsKLQotCQlrcCA9IChpICYgMSkgPyAmay5wIDog TlVMTDsKLQkJdnAgPSAoaSAmIDIpID8gJnYucCA6IE5VTEw7Ci0JCWsucCA9IE5VTEw7Ci0JCXYu cCA9IE5VTEw7Ci0JCWV4cGVjdF9mYWxzZShja2hfcmVtb3ZlKHRzZCwgJmNraCwgc3Ryc1tpXSwg a3AsIHZwKSwKLQkJICAgICJVbmV4cGVjdGVkIGNraF9yZW1vdmUoKSBlcnJvciIpOwotCi0JCWtz ID0gKGkgJiAxKSA/IHN0cnNbaV0gOiAoY29uc3QgY2hhciAqKU5VTEw7Ci0JCXZzID0gKGkgJiAy KSA/IHN0cnNbaV0gOiAoY29uc3QgY2hhciAqKU5VTEw7Ci0JCWV4cGVjdF9wdHJfZXEoKHZvaWQg KilrcywgKHZvaWQgKilrLnMsICJLZXkgbWlzbWF0Y2gsIGk9JXp1IiwKLQkJICAgIGkpOwotCQll eHBlY3RfcHRyX2VxKCh2b2lkICopdnMsICh2b2lkICopdi5zLCAiVmFsdWUgbWlzbWF0Y2gsIGk9 JXp1IiwKLQkJICAgIGkpOwotCQlleHBlY3RfenVfZXEoY2toX2NvdW50KCZja2gpLAotCQkgICAg c2l6ZW9mKHN0cnMpL3NpemVvZihjb25zdCBjaGFyICopIC0gaSAtIDEsCi0JCSAgICAiY2toX2Nv dW50KCkgc2hvdWxkIHJldHVybiAlenUsIGJ1dCBpdCByZXR1cm5lZCAlenUiLAotCQkgICAgICAg IHNpemVvZihzdHJzKS9zaXplb2YoY29uc3QgY2hhciAqKSAtIGkgLSAxLAotCQkgICAgY2toX2Nv dW50KCZja2gpKTsKLQl9Ci0KLQlja2hfZGVsZXRlKHRzZCwgJmNraCk7Ci19Ci1URVNUX0VORAot Ci1URVNUX0JFR0lOKHRlc3RfaW5zZXJ0X2l0ZXJfcmVtb3ZlKSB7Ci0jZGVmaW5lIE5JVEVNUyBa VSgxMDAwKQotCXRzZF90ICp0c2Q7Ci0JY2toX3QgY2toOwotCXZvaWQgKipwW05JVEVNU107Ci0J dm9pZCAqcSwgKnI7Ci0Jc2l6ZV90IGk7Ci0KLQl0c2QgPSB0c2RfZmV0Y2goKTsKLQotCWV4cGVj dF9mYWxzZShja2hfbmV3KHRzZCwgJmNraCwgMiwgY2toX3BvaW50ZXJfaGFzaCwKLQkgICAgY2to X3BvaW50ZXJfa2V5Y29tcCksICJVbmV4cGVjdGVkIGNraF9uZXcoKSBlcnJvciIpOwotCi0JZm9y IChpID0gMDsgaSA8IE5JVEVNUzsgaSsrKSB7Ci0JCXBbaV0gPSBtYWxsb2N4KGkrMSwgMCk7Ci0J CWV4cGVjdF9wdHJfbm90X251bGwocFtpXSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUi KTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTklURU1TOyBpKyspIHsKLQkJc2l6ZV90IGo7Ci0K LQkJZm9yIChqID0gaTsgaiA8IE5JVEVNUzsgaisrKSB7Ci0JCQlleHBlY3RfZmFsc2UoY2toX2lu c2VydCh0c2QsICZja2gsIHBbal0sIHBbal0pLAotCQkJICAgICJVbmV4cGVjdGVkIGNraF9pbnNl cnQoKSBmYWlsdXJlIik7Ci0JCQlleHBlY3RfZmFsc2UoY2toX3NlYXJjaCgmY2toLCBwW2pdLCAm cSwgJnIpLAotCQkJICAgICJVbmV4cGVjdGVkIGNraF9zZWFyY2goKSBmYWlsdXJlIik7Ci0JCQll eHBlY3RfcHRyX2VxKHBbal0sIHEsICJLZXkgcG9pbnRlciBtaXNtYXRjaCIpOwotCQkJZXhwZWN0 X3B0cl9lcShwW2pdLCByLCAiVmFsdWUgcG9pbnRlciBtaXNtYXRjaCIpOwotCQl9Ci0KLQkJZXhw ZWN0X3p1X2VxKGNraF9jb3VudCgmY2toKSwgTklURU1TLAotCQkgICAgImNraF9jb3VudCgpIHNo b3VsZCByZXR1cm4gJXp1LCBidXQgaXQgcmV0dXJuZWQgJXp1IiwKLQkJICAgIE5JVEVNUywgY2to X2NvdW50KCZja2gpKTsKLQotCQlmb3IgKGogPSBpICsgMTsgaiA8IE5JVEVNUzsgaisrKSB7Ci0J CQlleHBlY3RfZmFsc2UoY2toX3NlYXJjaCgmY2toLCBwW2pdLCBOVUxMLCBOVUxMKSwKLQkJCSAg ICAiVW5leHBlY3RlZCBja2hfc2VhcmNoKCkgZmFpbHVyZSIpOwotCQkJZXhwZWN0X2ZhbHNlKGNr aF9yZW1vdmUodHNkLCAmY2toLCBwW2pdLCAmcSwgJnIpLAotCQkJICAgICJVbmV4cGVjdGVkIGNr aF9yZW1vdmUoKSBmYWlsdXJlIik7Ci0JCQlleHBlY3RfcHRyX2VxKHBbal0sIHEsICJLZXkgcG9p bnRlciBtaXNtYXRjaCIpOwotCQkJZXhwZWN0X3B0cl9lcShwW2pdLCByLCAiVmFsdWUgcG9pbnRl ciBtaXNtYXRjaCIpOwotCQkJZXhwZWN0X3RydWUoY2toX3NlYXJjaCgmY2toLCBwW2pdLCBOVUxM LCBOVUxMKSwKLQkJCSAgICAiVW5leHBlY3RlZCBja2hfc2VhcmNoKCkgc3VjY2VzcyIpOwotCQkJ ZXhwZWN0X3RydWUoY2toX3JlbW92ZSh0c2QsICZja2gsIHBbal0sICZxLCAmciksCi0JCQkgICAg IlVuZXhwZWN0ZWQgY2toX3JlbW92ZSgpIHN1Y2Nlc3MiKTsKLQkJfQotCi0JCXsKLQkJCWJvb2wg c2VlbltOSVRFTVNdOwotCQkJc2l6ZV90IHRhYmluZDsKLQotCQkJbWVtc2V0KHNlZW4sIDAsIHNp emVvZihzZWVuKSk7Ci0KLQkJCWZvciAodGFiaW5kID0gMDsgIWNraF9pdGVyKCZja2gsICZ0YWJp bmQsICZxLCAmcik7KSB7Ci0JCQkJc2l6ZV90IGs7Ci0KLQkJCQlleHBlY3RfcHRyX2VxKHEsIHIs ICJLZXkgYW5kIHZhbCBub3QgZXF1YWwiKTsKLQotCQkJCWZvciAoayA9IDA7IGsgPCBOSVRFTVM7 IGsrKykgewotCQkJCQlpZiAocFtrXSA9PSBxKSB7Ci0JCQkJCQlleHBlY3RfZmFsc2Uoc2Vlbltr XSwKLQkJCQkJCSAgICAiSXRlbSAlenUgYWxyZWFkeSBzZWVuIiwgayk7Ci0JCQkJCQlzZWVuW2td ID0gdHJ1ZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQlmb3IgKGog PSAwOyBqIDwgaSArIDE7IGorKykgewotCQkJCWV4cGVjdF90cnVlKHNlZW5bal0sICJJdGVtICV6 dSBub3Qgc2VlbiIsIGopOwotCQkJfQotCQkJZm9yICg7IGogPCBOSVRFTVM7IGorKykgewotCQkJ CWV4cGVjdF9mYWxzZShzZWVuW2pdLCAiSXRlbSAlenUgc2VlbiIsIGopOwotCQkJfQotCQl9Ci0J fQotCi0JZm9yIChpID0gMDsgaSA8IE5JVEVNUzsgaSsrKSB7Ci0JCWV4cGVjdF9mYWxzZShja2hf c2VhcmNoKCZja2gsIHBbaV0sIE5VTEwsIE5VTEwpLAotCQkgICAgIlVuZXhwZWN0ZWQgY2toX3Nl YXJjaCgpIGZhaWx1cmUiKTsKLQkJZXhwZWN0X2ZhbHNlKGNraF9yZW1vdmUodHNkLCAmY2toLCBw W2ldLCAmcSwgJnIpLAotCQkgICAgIlVuZXhwZWN0ZWQgY2toX3JlbW92ZSgpIGZhaWx1cmUiKTsK LQkJZXhwZWN0X3B0cl9lcShwW2ldLCBxLCAiS2V5IHBvaW50ZXIgbWlzbWF0Y2giKTsKLQkJZXhw ZWN0X3B0cl9lcShwW2ldLCByLCAiVmFsdWUgcG9pbnRlciBtaXNtYXRjaCIpOwotCQlleHBlY3Rf dHJ1ZShja2hfc2VhcmNoKCZja2gsIHBbaV0sIE5VTEwsIE5VTEwpLAotCQkgICAgIlVuZXhwZWN0 ZWQgY2toX3NlYXJjaCgpIHN1Y2Nlc3MiKTsKLQkJZXhwZWN0X3RydWUoY2toX3JlbW92ZSh0c2Qs ICZja2gsIHBbaV0sICZxLCAmciksCi0JCSAgICAiVW5leHBlY3RlZCBja2hfcmVtb3ZlKCkgc3Vj Y2VzcyIpOwotCQlkYWxsb2N4KHBbaV0sIDApOwotCX0KLQotCWV4cGVjdF96dV9lcShja2hfY291 bnQoJmNraCksIDAsCi0JICAgICJja2hfY291bnQoKSBzaG91bGQgcmV0dXJuICV6dSwgYnV0IGl0 IHJldHVybmVkICV6dSIsCi0JICAgIFpVKDApLCBja2hfY291bnQoJmNraCkpOwotCWNraF9kZWxl dGUodHNkLCAmY2toKTsKLSN1bmRlZiBOSVRFTVMKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2 b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfbmV3X2RlbGV0ZSwKLQkgICAgdGVzdF9j b3VudF9pbnNlcnRfc2VhcmNoX3JlbW92ZSwKLQkgICAgdGVzdF9pbnNlcnRfaXRlcl9yZW1vdmUp OwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9jb3VudGVyLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvY291bnRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy NzdiYWFjLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9jb3VudGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0j aW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLXN0YXRpYyBjb25zdCB1aW50NjRfdCBp bnRlcnZhbCA9IDEgPDwgMjA7Ci0KLVRFU1RfQkVHSU4odGVzdF9jb3VudGVyX2FjY3VtKSB7Ci0J dWludDY0X3QgaW5jcmVtZW50ID0gaW50ZXJ2YWwgPj4gNDsKLQl1bnNpZ25lZCBuID0gaW50ZXJ2 YWwgLyBpbmNyZW1lbnQ7Ci0JdWludDY0X3QgYWNjdW0gPSAwOwotCi0JY291bnRlcl9hY2N1bV90 IGM7Ci0JY291bnRlcl9hY2N1bV9pbml0KCZjLCBpbnRlcnZhbCk7Ci0KLQl0c2RfdCAqdHNkID0g dHNkX2ZldGNoKCk7Ci0JYm9vbCB0cmlnZ2VyOwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu OyBpKyspIHsKLQkJdHJpZ2dlciA9IGNvdW50ZXJfYWNjdW0odHNkX3RzZG4odHNkKSwgJmMsIGlu Y3JlbWVudCk7Ci0JCWFjY3VtICs9IGluY3JlbWVudDsKLQkJaWYgKGFjY3VtIDwgaW50ZXJ2YWwp IHsKLQkJCWV4cGVjdF9iX2VxKHRyaWdnZXIsIGZhbHNlLCAiU2hvdWxkIG5vdCB0cmlnZ2VyIik7 Ci0JCX0gZWxzZSB7Ci0JCQlleHBlY3RfYl9lcSh0cmlnZ2VyLCB0cnVlLCAiU2hvdWxkIGhhdmUg dHJpZ2dlcmVkIik7Ci0JCX0KLQl9Ci0JZXhwZWN0X2JfZXEodHJpZ2dlciwgdHJ1ZSwgIlNob3Vs ZCBoYXZlIHRyaWdnZXJlZCIpOwotfQotVEVTVF9FTkQKLQotdm9pZAotZXhwZWN0X2NvdW50ZXJf dmFsdWUoY291bnRlcl9hY2N1bV90ICpjLCB1aW50NjRfdCB2KSB7Ci0JdWludDY0X3QgYWNjdW0g PSBsb2NrZWRfcmVhZF91NjRfdW5zeW5jaHJvbml6ZWQoJmMtPmFjY3VtYnl0ZXMpOwotCWV4cGVj dF91NjRfZXEoYWNjdW0sIHYsICJDb3VudGVyIHZhbHVlIG1pc21hdGNoIik7Ci19Ci0KLSNkZWZp bmUgTl9USERTICgxNikKLSNkZWZpbmUgTl9JVEVSX1RIRCAoMSA8PCAxMikKLSNkZWZpbmUgSVRF Ul9JTkNSRU1FTlQgKGludGVydmFsID4+IDQpCi0KLXN0YXRpYyB2b2lkICoKLXRoZF9zdGFydCh2 b2lkICp2YXJnKSB7Ci0JY291bnRlcl9hY2N1bV90ICpjID0gKGNvdW50ZXJfYWNjdW1fdCAqKXZh cmc7Ci0KLQl0c2RfdCAqdHNkID0gdHNkX2ZldGNoKCk7Ci0JYm9vbCB0cmlnZ2VyOwotCXVpbnRw dHJfdCBuX3RyaWdnZXJlZCA9IDA7Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE5fSVRFUl9U SEQ7IGkrKykgewotCQl0cmlnZ2VyID0gY291bnRlcl9hY2N1bSh0c2RfdHNkbih0c2QpLCBjLCBJ VEVSX0lOQ1JFTUVOVCk7Ci0JCW5fdHJpZ2dlcmVkICs9IHRyaWdnZXIgPyAxIDogMDsKLQl9Ci0K LQlyZXR1cm4gKHZvaWQgKiluX3RyaWdnZXJlZDsKLX0KLQotCi1URVNUX0JFR0lOKHRlc3RfY291 bnRlcl9tdCkgewotCWNvdW50ZXJfYWNjdW1fdCBzaGFyZWRfYzsKLQljb3VudGVyX2FjY3VtX2lu aXQoJnNoYXJlZF9jLCBpbnRlcnZhbCk7Ci0KLQl0aGRfdCB0aGRzW05fVEhEU107Ci0JdW5zaWdu ZWQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgTl9USERTOyBpKyspIHsKLQkJdGhkX2NyZWF0ZSgmdGhk c1tpXSwgdGhkX3N0YXJ0LCAodm9pZCAqKSZzaGFyZWRfYyk7Ci0JfQotCi0JdWludDY0X3Qgc3Vt ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTl9USERTOyBpKyspIHsKLQkJdm9pZCAqcmV0OwotCQl0 aGRfam9pbih0aGRzW2ldLCAmcmV0KTsKLQkJc3VtICs9ICh1aW50cHRyX3QpcmV0OwotCX0KLQll eHBlY3RfdTY0X2VxKHN1bSwgTl9USERTICogTl9JVEVSX1RIRCAvIChpbnRlcnZhbCAvIElURVJf SU5DUkVNRU5UKSwKLQkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgdHJpZ2dlcnMiKTsKLX0KLVRF U1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfY291 bnRlcl9hY2N1bSwKLQkgICAgdGVzdF9jb3VudGVyX210KTsKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZGVjYXkuYyBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9kZWNheS5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGI2ZDBhLi4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9kZWNheS5jCisrKyAv ZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3Qu aCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2RlY2F5LmgiCi0KLVRFU1RfQkVHSU4o dGVzdF9kZWNheV9pbml0KSB7Ci0JZGVjYXlfdCBkZWNheTsKLQltZW1zZXQoJmRlY2F5LCAwLCBz aXplb2YoZGVjYXkpKTsKLQotCW5zdGltZV90IGN1cnRpbWU7Ci0JbnN0aW1lX2luaXQoJmN1cnRp bWUsIDApOwotCi0Jc3NpemVfdCBkZWNheV9tcyA9IDEwMDA7Ci0JYXNzZXJ0X3RydWUoZGVjYXlf bXNfdmFsaWQoZGVjYXlfbXMpLCAiIik7Ci0KLQlleHBlY3RfZmFsc2UoZGVjYXlfaW5pdCgmZGVj YXksICZjdXJ0aW1lLCBkZWNheV9tcyksCi0JICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWNh eSIpOwotCWV4cGVjdF96ZF9lcShkZWNheV9tc19yZWFkKCZkZWNheSksIGRlY2F5X21zLAotCSAg ICAiRGVjYXlfbXMgd2FzIGluaXRpYWxpemVkIGluY29ycmVjdGx5Iik7Ci0JZXhwZWN0X3U2NF9u ZShkZWNheV9lcG9jaF9kdXJhdGlvbl9ucygmZGVjYXkpLCAwLAotCSAgICAiRXBvY2ggZHVyYXRp b24gd2FzIGluaXRpYWxpemVkIGluY29ycmVjdGx5Iik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JF R0lOKHRlc3RfZGVjYXlfbXNfdmFsaWQpIHsKLQlleHBlY3RfZmFsc2UoZGVjYXlfbXNfdmFsaWQo LTcpLAotCSAgICAiTWlzY2xhc3NpZmllZCBuZWdhdGl2ZSBkZWNheSBhcyB2YWxpZCIpOwotCWV4 cGVjdF90cnVlKGRlY2F5X21zX3ZhbGlkKC0xKSwKLQkgICAgIk1pc2NsYXNzaWZpZWQgLTEgKG5l dmVyIGRlY2F5KSBhcyBpbnZhbGlkIGRlY2F5Iik7Ci0JZXhwZWN0X3RydWUoZGVjYXlfbXNfdmFs aWQoODk0MyksCi0JICAgICJNaXNjbGFzc2lmaWVkIHZhbGlkIGRlY2F5Iik7Ci0JaWYgKFNTSVpF X01BWCA+IE5TVElNRV9TRUNfTUFYKSB7Ci0JCWV4cGVjdF9mYWxzZSgKLQkJICAgIGRlY2F5X21z X3ZhbGlkKChzc2l6ZV90KShOU1RJTUVfU0VDX01BWCAqIEtRVSgxMDAwKSArIDM5KSksCi0JCSAg ICAiTWlzY2xhc3NpZmllZCB0b28gbGFyZ2UgZGVjYXkiKTsKLQl9Ci19Ci1URVNUX0VORAotCi1U RVNUX0JFR0lOKHRlc3RfZGVjYXlfbnBhZ2VzX3B1cmdlX2luKSB7Ci0JZGVjYXlfdCBkZWNheTsK LQltZW1zZXQoJmRlY2F5LCAwLCBzaXplb2YoZGVjYXkpKTsKLQotCW5zdGltZV90IGN1cnRpbWU7 Ci0JbnN0aW1lX2luaXQoJmN1cnRpbWUsIDApOwotCi0JdWludDY0X3QgZGVjYXlfbXMgPSAxMDAw OwotCW5zdGltZV90IGRlY2F5X25zdGltZTsKLQluc3RpbWVfaW5pdCgmZGVjYXlfbnN0aW1lLCBk ZWNheV9tcyAqIDEwMDAgKiAxMDAwKTsKLQlleHBlY3RfZmFsc2UoZGVjYXlfaW5pdCgmZGVjYXks ICZjdXJ0aW1lLCAoc3NpemVfdClkZWNheV9tcyksCi0JICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6 ZSBkZWNheSIpOwotCi0Jc2l6ZV90IG5ld19wYWdlcyA9IDEwMDsKLQotCW5zdGltZV90IHRpbWU7 Ci0JbnN0aW1lX2NvcHkoJnRpbWUsICZkZWNheV9uc3RpbWUpOwotCWV4cGVjdF91NjRfZXEoZGVj YXlfbnBhZ2VzX3B1cmdlX2luKCZkZWNheSwgJnRpbWUsIG5ld19wYWdlcyksCi0JICAgIG5ld19w YWdlcywgIk5vdCBhbGwgcGFnZXMgYXJlIGV4cGVjdGVkIHRvIGRlY2F5IGluIGRlY2F5X21zIik7 Ci0KLQluc3RpbWVfaW5pdCgmdGltZSwgMCk7Ci0JZXhwZWN0X3U2NF9lcShkZWNheV9ucGFnZXNf cHVyZ2VfaW4oJmRlY2F5LCAmdGltZSwgbmV3X3BhZ2VzKSwgMCwKLQkgICAgIk1vcmUgdGhhbiB6 ZXJvIHBhZ2VzIGFyZSBleHBlY3RlZCB0byBpbnN0YW50bHkgZGVjYXkiKTsKLQotCW5zdGltZV9j b3B5KCZ0aW1lLCAmZGVjYXlfbnN0aW1lKTsKLQluc3RpbWVfaWRpdmlkZSgmdGltZSwgMik7Ci0J ZXhwZWN0X3U2NF9lcShkZWNheV9ucGFnZXNfcHVyZ2VfaW4oJmRlY2F5LCAmdGltZSwgbmV3X3Bh Z2VzKSwKLQkgICAgbmV3X3BhZ2VzIC8gMiwgIk5vdCBoYWxmIG9mIHBhZ2VzIGRlY2F5IGluIGhh bGYgdGhlIGRlY2F5IHBlcmlvZCIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2Rl Y2F5X21heWJlX2FkdmFuY2VfZXBvY2gpIHsKLQlkZWNheV90IGRlY2F5OwotCW1lbXNldCgmZGVj YXksIDAsIHNpemVvZihkZWNheSkpOwotCi0JbnN0aW1lX3QgY3VydGltZTsKLQluc3RpbWVfaW5p dCgmY3VydGltZSwgMCk7Ci0KLQl1aW50NjRfdCBkZWNheV9tcyA9IDEwMDA7Ci0KLQlib29sIGVy ciA9IGRlY2F5X2luaXQoJmRlY2F5LCAmY3VydGltZSwgKHNzaXplX3QpZGVjYXlfbXMpOwotCWV4 cGVjdF9mYWxzZShlcnIsICIiKTsKLQotCWJvb2wgYWR2YW5jZWQ7Ci0JYWR2YW5jZWQgPSBkZWNh eV9tYXliZV9hZHZhbmNlX2Vwb2NoKCZkZWNheSwgJmN1cnRpbWUsIDApOwotCWV4cGVjdF9mYWxz ZShhZHZhbmNlZCwgIkVwb2NoIGFkdmFuY2VkIHdoaWxlIHRpbWUgZGlkbid0Iik7Ci0KLQluc3Rp bWVfdCBpbnRlcnZhbDsKLQluc3RpbWVfaW5pdCgmaW50ZXJ2YWwsIGRlY2F5X2Vwb2NoX2R1cmF0 aW9uX25zKCZkZWNheSkpOwotCi0JbnN0aW1lX2FkZCgmY3VydGltZSwgJmludGVydmFsKTsKLQlh ZHZhbmNlZCA9IGRlY2F5X21heWJlX2FkdmFuY2VfZXBvY2goJmRlY2F5LCAmY3VydGltZSwgMCk7 Ci0JZXhwZWN0X2ZhbHNlKGFkdmFuY2VkLCAiRXBvY2ggYWR2YW5jZWQgYWZ0ZXIgZmlyc3QgaW50 ZXJ2YWwiKTsKLQotCW5zdGltZV9hZGQoJmN1cnRpbWUsICZpbnRlcnZhbCk7Ci0JYWR2YW5jZWQg PSBkZWNheV9tYXliZV9hZHZhbmNlX2Vwb2NoKCZkZWNheSwgJmN1cnRpbWUsIDApOwotCWV4cGVj dF90cnVlKGFkdmFuY2VkLCAiRXBvY2ggZGlkbid0IGFkdmFuY2UgYWZ0ZXIgdHdvIGludGVydmFs cyIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2RlY2F5X2VtcHR5KSB7Ci0JLyog SWYgd2UgbmV2ZXIgaGF2ZSBhbnkgZGVjYXlpbmcgcGFnZXMsIG5wYWdlc19saW1pdCBzaG91bGQg YmUgMC4gKi8KLQlkZWNheV90IGRlY2F5OwotCW1lbXNldCgmZGVjYXksIDAsIHNpemVvZihkZWNh eSkpOwotCi0JbnN0aW1lX3QgY3VydGltZTsKLQluc3RpbWVfaW5pdCgmY3VydGltZSwgMCk7Ci0K LQl1aW50NjRfdCBkZWNheV9tcyA9IDEwMDA7Ci0JdWludDY0X3QgZGVjYXlfbnMgPSBkZWNheV9t cyAqIDEwMDAgKiAxMDAwOwotCi0JYm9vbCBlcnIgPSBkZWNheV9pbml0KCZkZWNheSwgJmN1cnRp bWUsIChzc2l6ZV90KWRlY2F5X21zKTsKLQlhc3NlcnRfZmFsc2UoZXJyLCAiIik7Ci0KLQl1aW50 NjRfdCB0aW1lX2JldHdlZW5fY2FsbHMgPSBkZWNheV9lcG9jaF9kdXJhdGlvbl9ucygmZGVjYXkp IC8gNTsKLQlpbnQgbmVwb2NocyA9IDA7Ci0JZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGRlY2F5 X25zIC8gdGltZV9iZXR3ZWVuX2NhbGxzICogMTA7IGkrKykgewotCQlzaXplX3QgZGlydHlfcGFn ZXMgPSAwOwotCQluc3RpbWVfaW5pdCgmY3VydGltZSwgaSAqIHRpbWVfYmV0d2Vlbl9jYWxscyk7 Ci0JCWJvb2wgZXBvY2hfYWR2YW5jZWQgPSBkZWNheV9tYXliZV9hZHZhbmNlX2Vwb2NoKCZkZWNh eSwKLQkJICAgICZjdXJ0aW1lLCBkaXJ0eV9wYWdlcyk7Ci0JCWlmIChlcG9jaF9hZHZhbmNlZCkg ewotCQkJbmVwb2NocysrOwotCQkJZXhwZWN0X3p1X2VxKGRlY2F5X25wYWdlc19saW1pdF9nZXQo JmRlY2F5KSwgMCwKLQkJCSAgICAiVW5leHBlY3RlZGx5IGluY3JlYXNlZCBucGFnZXNfbGltaXQi KTsKLQkJfQotCX0KLQlleHBlY3RfZF9ndChuZXBvY2hzLCAwLCAiRXBvY2hzIG5ldmVyIGFkdmFu Y2VkIik7Ci19Ci1URVNUX0VORAotCi0vKgotICogVmVyaWZ5IHRoYXQgbnBhZ2VzX2xpbWl0IGNv cnJlY3RseSBkZWNheXMgYXMgdGhlIHRpbWUgZ29lcy4KLSAqCi0gKiBEdXJpbmcgZmlyc3QgJ25l cG9jaF9pbml0JyBlcG9jaHMsIGFkZCBuZXcgZGlydHkgcGFnZXMuCi0gKiBBZnRlciB0aGF0LCBs ZXQgdGhlbSBkZWNheSBhbmQgdmVyaWZ5IG5wYWdlc19saW1pdCBkZWNyZWFzZXMuCi0gKiBUaGVu IHByb2NlZWQgd2l0aCBhbm90aGVyICduZXBvY2hfaW5pdCcgZXBvY2hzIGFuZCBjaGVjayB0aGF0 Ci0gKiBhbGwgZGlydHkgcGFnZXMgYXJlIGZsdXNoZWQgb3V0IG9mIGJhY2tsb2csIGJyaW5naW5n IG5wYWdlc19saW1pdAotICogZG93biB0byB6ZXJvLgotICovCi1URVNUX0JFR0lOKHRlc3RfZGVj YXkpIHsKLQljb25zdCB1aW50NjRfdCBuZXBvY2hfaW5pdCA9IDEwOwotCi0JZGVjYXlfdCBkZWNh eTsKLQltZW1zZXQoJmRlY2F5LCAwLCBzaXplb2YoZGVjYXkpKTsKLQotCW5zdGltZV90IGN1cnRp bWU7Ci0JbnN0aW1lX2luaXQoJmN1cnRpbWUsIDApOwotCi0JdWludDY0X3QgZGVjYXlfbXMgPSAx MDAwOwotCXVpbnQ2NF90IGRlY2F5X25zID0gZGVjYXlfbXMgKiAxMDAwICogMTAwMDsKLQotCWJv b2wgZXJyID0gZGVjYXlfaW5pdCgmZGVjYXksICZjdXJ0aW1lLCAoc3NpemVfdClkZWNheV9tcyk7 Ci0JYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOwotCi0JZXhwZWN0X3p1X2VxKGRlY2F5X25wYWdlc19s aW1pdF9nZXQoJmRlY2F5KSwgMCwKLQkgICAgIkVtcHR5IGRlY2F5IHJldHVybmVkIG5vbnplcm8g bnBhZ2VzX2xpbWl0Iik7Ci0KLQluc3RpbWVfdCBlcG9jaHRpbWU7Ci0JbnN0aW1lX2luaXQoJmVw b2NodGltZSwgZGVjYXlfZXBvY2hfZHVyYXRpb25fbnMoJmRlY2F5KSk7Ci0KLQljb25zdCBzaXpl X3QgZGlydHlfcGFnZXNfcGVyX2Vwb2NoID0gMTAwMDsKLQlzaXplX3QgZGlydHlfcGFnZXMgPSAw OwotCXVpbnQ2NF90IGVwb2NoX25zID0gZGVjYXlfZXBvY2hfZHVyYXRpb25fbnMoJmRlY2F5KTsK LQlib29sIGVwb2NoX2FkdmFuY2VkID0gZmFsc2U7Ci0KLQkvKiBQb3B1bGF0ZSBiYWNrbG9nIHdp dGggc29tZSBkaXJ0eSBwYWdlcyAqLwotCWZvciAodWludDY0X3QgaSA9IDA7IGkgPCBuZXBvY2hf aW5pdDsgaSsrKSB7Ci0JCW5zdGltZV9hZGQoJmN1cnRpbWUsICZlcG9jaHRpbWUpOwotCQlkaXJ0 eV9wYWdlcyArPSBkaXJ0eV9wYWdlc19wZXJfZXBvY2g7Ci0JCWVwb2NoX2FkdmFuY2VkIHw9IGRl Y2F5X21heWJlX2FkdmFuY2VfZXBvY2goJmRlY2F5LCAmY3VydGltZSwKLQkJICAgIGRpcnR5X3Bh Z2VzKTsKLQl9Ci0JZXhwZWN0X3RydWUoZXBvY2hfYWR2YW5jZWQsICJFcG9jaCBuZXZlciBhZHZh bmNlZCIpOwotCi0Jc2l6ZV90IG5wYWdlc19saW1pdCA9IGRlY2F5X25wYWdlc19saW1pdF9nZXQo JmRlY2F5KTsKLQlleHBlY3RfenVfZ3QobnBhZ2VzX2xpbWl0LCAwLCAibnBhZ2VzX2xpbWl0IGlz IGluY29ycmVjdGx5IGVxdWFsICIKLQkgICAgInRvIHplcm8gYWZ0ZXIgZGlydHkgcGFnZXMgaGF2 ZSBiZWVuIGFkZGVkIik7Ci0KLQkvKiBLZWVwIGRpcnR5IHBhZ2VzIHVuY2hhbmdlZCBhbmQgdmVy aWZ5IHRoYXQgbnBhZ2VzX2xpbWl0IGRlY3JlYXNlcyAqLwotCWZvciAodWludDY0X3QgaSA9IG5l cG9jaF9pbml0OyBpICogZXBvY2hfbnMgPCBkZWNheV9uczsgKytpKSB7Ci0JCW5zdGltZV9hZGQo JmN1cnRpbWUsICZlcG9jaHRpbWUpOwotCQllcG9jaF9hZHZhbmNlZCA9IGRlY2F5X21heWJlX2Fk dmFuY2VfZXBvY2goJmRlY2F5LCAmY3VydGltZSwKLQkJCQkgICAgZGlydHlfcGFnZXMpOwotCQlp ZiAoZXBvY2hfYWR2YW5jZWQpIHsKLQkJCXNpemVfdCBucGFnZXNfbGltaXRfbmV3ID0gZGVjYXlf bnBhZ2VzX2xpbWl0X2dldCgmZGVjYXkpOwotCQkJZXhwZWN0X3p1X2x0KG5wYWdlc19saW1pdF9u ZXcsIG5wYWdlc19saW1pdCwKLQkJCSAgICAibmFwZ2VzX2xpbWl0IGZhaWxlZCB0byBkZWNheSIp OwotCi0JCQlucGFnZXNfbGltaXQgPSBucGFnZXNfbGltaXRfbmV3OwotCQl9Ci0JfQotCi0JZXhw ZWN0X3p1X2d0KG5wYWdlc19saW1pdCwgMCwgIm5wYWdlc19saW1pdCBkZWNheWVkIHRvIHplcm8g ZWFybGllciAiCi0JICAgICJ0aGFuIGRlY2F5X21zIHNpbmNlIGxhc3QgZGlydHkgcGFnZSB3YXMg YWRkZWQiKTsKLQotCS8qIENvbXBsZXRlbHkgcHVzaCBhbGwgZGlydHkgcGFnZXMgb3V0IG9mIHRo ZSBiYWNrbG9nICovCi0JZXBvY2hfYWR2YW5jZWQgPSBmYWxzZTsKLQlmb3IgKHVpbnQ2NF90IGkg PSAwOyBpIDwgbmVwb2NoX2luaXQ7IGkrKykgewotCQluc3RpbWVfYWRkKCZjdXJ0aW1lLCAmZXBv Y2h0aW1lKTsKLQkJZXBvY2hfYWR2YW5jZWQgfD0gZGVjYXlfbWF5YmVfYWR2YW5jZV9lcG9jaCgm ZGVjYXksICZjdXJ0aW1lLAotCQkgICAgZGlydHlfcGFnZXMpOwotCX0KLQlleHBlY3RfdHJ1ZShl cG9jaF9hZHZhbmNlZCwgIkVwb2NoIG5ldmVyIGFkdmFuY2VkIik7Ci0KLQlucGFnZXNfbGltaXQg PSBkZWNheV9ucGFnZXNfbGltaXRfZ2V0KCZkZWNheSk7Ci0JZXhwZWN0X3p1X2VxKG5wYWdlc19s aW1pdCwgMCwgIm5wYWdlc19saW1pdCBkaWRuJ3QgZGVjYXkgdG8gMCBhZnRlciAiCi0JICAgICJk ZWNheV9tcyBzaW5jZSBsYXN0IGJ1bXAgaW4gZGlydHkgcGFnZXMiKTsKLX0KLVRFU1RfRU5ECi0K LVRFU1RfQkVHSU4odGVzdF9kZWNheV9uc191bnRpbF9wdXJnZSkgewotCWNvbnN0IHVpbnQ2NF90 IG5lcG9jaF9pbml0ID0gMTA7Ci0KLQlkZWNheV90IGRlY2F5OwotCW1lbXNldCgmZGVjYXksIDAs IHNpemVvZihkZWNheSkpOwotCi0JbnN0aW1lX3QgY3VydGltZTsKLQluc3RpbWVfaW5pdCgmY3Vy dGltZSwgMCk7Ci0KLQl1aW50NjRfdCBkZWNheV9tcyA9IDEwMDA7Ci0JdWludDY0X3QgZGVjYXlf bnMgPSBkZWNheV9tcyAqIDEwMDAgKiAxMDAwOwotCi0JYm9vbCBlcnIgPSBkZWNheV9pbml0KCZk ZWNheSwgJmN1cnRpbWUsIChzc2l6ZV90KWRlY2F5X21zKTsKLQlhc3NlcnRfZmFsc2UoZXJyLCAi Iik7Ci0KLQluc3RpbWVfdCBlcG9jaHRpbWU7Ci0JbnN0aW1lX2luaXQoJmVwb2NodGltZSwgZGVj YXlfZXBvY2hfZHVyYXRpb25fbnMoJmRlY2F5KSk7Ci0KLQl1aW50NjRfdCBuc191bnRpbF9wdXJn ZV9lbXB0eSA9IGRlY2F5X25zX3VudGlsX3B1cmdlKCZkZWNheSwgMCwgMCk7Ci0JZXhwZWN0X3U2 NF9lcShuc191bnRpbF9wdXJnZV9lbXB0eSwgREVDQVlfVU5CT1VOREVEX1RJTUVfVE9fUFVSR0Us Ci0JICAgICJGYWlsZWQgdG8gcmV0dXJuIHVuYm91bmRlZCB3YWl0IHRpbWUgZm9yIHplcm8gdGhy ZXNob2xkIik7Ci0KLQljb25zdCBzaXplX3QgZGlydHlfcGFnZXNfcGVyX2Vwb2NoID0gMTAwMDsK LQlzaXplX3QgZGlydHlfcGFnZXMgPSAwOwotCWJvb2wgZXBvY2hfYWR2YW5jZWQgPSBmYWxzZTsK LQlmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwgbmVwb2NoX2luaXQ7IGkrKykgewotCQluc3RpbWVf YWRkKCZjdXJ0aW1lLCAmZXBvY2h0aW1lKTsKLQkJZGlydHlfcGFnZXMgKz0gZGlydHlfcGFnZXNf cGVyX2Vwb2NoOwotCQllcG9jaF9hZHZhbmNlZCB8PSBkZWNheV9tYXliZV9hZHZhbmNlX2Vwb2No KCZkZWNheSwgJmN1cnRpbWUsCi0JCSAgICBkaXJ0eV9wYWdlcyk7Ci0JfQotCWV4cGVjdF90cnVl KGVwb2NoX2FkdmFuY2VkLCAiRXBvY2ggbmV2ZXIgYWR2YW5jZWQiKTsKLQotCXVpbnQ2NF90IG5z X3VudGlsX3B1cmdlX2FsbCA9IGRlY2F5X25zX3VudGlsX3B1cmdlKCZkZWNheSwKLQkgICAgZGly dHlfcGFnZXMsIGRpcnR5X3BhZ2VzKTsKLQlleHBlY3RfdTY0X2dlKG5zX3VudGlsX3B1cmdlX2Fs bCwgZGVjYXlfbnMsCi0JICAgICJJbmNvcnJlY3RseSBjYWxjdWxhdGVkIHRpbWUgdG8gcHVyZ2Ug YWxsIHBhZ2VzIik7Ci0KLQl1aW50NjRfdCBuc191bnRpbF9wdXJnZV9ub25lID0gZGVjYXlfbnNf dW50aWxfcHVyZ2UoJmRlY2F5LAotCSAgICBkaXJ0eV9wYWdlcywgMCk7Ci0JZXhwZWN0X3U2NF9l cShuc191bnRpbF9wdXJnZV9ub25lLCBkZWNheV9lcG9jaF9kdXJhdGlvbl9ucygmZGVjYXkpICog MiwKLQkgICAgIkluY29ycmVjdGx5IGNhbGN1bGF0ZWQgdGltZSB0byBwdXJnZSAwIHBhZ2VzIik7 Ci0KLQl1aW50NjRfdCBucGFnZXNfdGhyZXNob2xkID0gZGlydHlfcGFnZXMgLyAyOwotCXVpbnQ2 NF90IG5zX3VudGlsX3B1cmdlX2hhbGYgPSBkZWNheV9uc191bnRpbF9wdXJnZSgmZGVjYXksCi0J ICAgIGRpcnR5X3BhZ2VzLCBucGFnZXNfdGhyZXNob2xkKTsKLQotCW5zdGltZV90IHdhaXR0aW1l OwotCW5zdGltZV9pbml0KCZ3YWl0dGltZSwgbnNfdW50aWxfcHVyZ2VfaGFsZik7Ci0JbnN0aW1l X2FkZCgmY3VydGltZSwgJndhaXR0aW1lKTsKLQotCWRlY2F5X21heWJlX2FkdmFuY2VfZXBvY2go JmRlY2F5LCAmY3VydGltZSwgZGlydHlfcGFnZXMpOwotCXNpemVfdCBucGFnZXNfbGltaXQgPSBk ZWNheV9ucGFnZXNfbGltaXRfZ2V0KCZkZWNheSk7Ci0JZXhwZWN0X3p1X2x0KG5wYWdlc19saW1p dCwgZGlydHlfcGFnZXMsCi0JICAgICJucGFnZXNfbGltaXQgZmFpbGVkIHRvIGRlY3JlYXNlIGFm dGVyIHdhaXRpbmciKTsKLQlzaXplX3QgZXhwZWN0ZWQgPSBkaXJ0eV9wYWdlcyAtIG5wYWdlc19s aW1pdDsKLQlpbnQgZGV2aWF0aW9uID0gYWJzKChpbnQpZXhwZWN0ZWQgLSAoaW50KShucGFnZXNf dGhyZXNob2xkKSk7Ci0JZXhwZWN0X2RfbHQoZGV2aWF0aW9uLCAoaW50KShucGFnZXNfdGhyZXNo b2xkIC8gMiksCi0JICAgICJBZnRlciB3YWl0aW5nLCBudW1iZXIgb2YgcGFnZXMgaXMgb3V0IG9m IHRoZSBleHBlY3RlZCBpbnRlcnZhbCAiCi0JICAgICJbMC41ICogbnBhZ2VzX3RocmVzaG9sZCAu LiAxLjUgKiBucGFnZXNfdGhyZXNob2xkXSIpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZv aWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9kZWNheV9pbml0LAotCSAgICB0ZXN0X2Rl Y2F5X21zX3ZhbGlkLAotCSAgICB0ZXN0X2RlY2F5X25wYWdlc19wdXJnZV9pbiwKLQkgICAgdGVz dF9kZWNheV9tYXliZV9hZHZhbmNlX2Vwb2NoLAotCSAgICB0ZXN0X2RlY2F5X2VtcHR5LAotCSAg ICB0ZXN0X2RlY2F5LAotCSAgICB0ZXN0X2RlY2F5X25zX3VudGlsX3B1cmdlKTsKLX0KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv ZGl2LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv ZGl2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YWVhNjYuLjAwMDAwMDAKLS0t IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2Rpdi5j CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2Nf dGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvZGl2LmgiCi0KLVRFU1RfQkVH SU4odGVzdF9kaXZfZXhoYXVzdGl2ZSkgewotCWZvciAoc2l6ZV90IGRpdmlzb3IgPSAyOyBkaXZp c29yIDwgMTAwMCAqIDEwMDA7ICsrZGl2aXNvcikgewotCQlkaXZfaW5mb190IGRpdl9pbmZvOwot CQlkaXZfaW5pdCgmZGl2X2luZm8sIGRpdmlzb3IpOwotCQlzaXplX3QgbWF4ID0gMTAwMCAqIGRp dmlzb3I7Ci0JCWlmIChtYXggPCAxMDAwICogMTAwMCkgewotCQkJbWF4ID0gMTAwMCAqIDEwMDA7 Ci0JCX0KLQkJZm9yIChzaXplX3QgZGl2aWRlbmQgPSAwOyBkaXZpZGVuZCA8IDEwMDAgKiBkaXZp c29yOwotCQkgICAgZGl2aWRlbmQgKz0gZGl2aXNvcikgewotCQkJc2l6ZV90IHF1b3RpZW50ID0g ZGl2X2NvbXB1dGUoCi0JCQkgICAgJmRpdl9pbmZvLCBkaXZpZGVuZCk7Ci0JCQlleHBlY3RfenVf ZXEoZGl2aWRlbmQsIHF1b3RpZW50ICogZGl2aXNvciwKLQkJCSAgICAiV2l0aCBkaXZpc29yID0g JXp1LCBkaXZpZGVuZCA9ICV6dSwgIgotCQkJICAgICJnb3QgcXVvdGllbnQgJXp1IiwgZGl2aXNv ciwgZGl2aWRlbmQsIHF1b3RpZW50KTsKLQkJfQotCX0KLX0KLVRFU1RfRU5ECi0KLWludAotbWFp bih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF9kaXZfZXho YXVzdGl2ZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L2RvdWJsZV9mcmVlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZG91YmxlX2ZyZWUuYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMTIxMjJjMS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZG91YmxlX2ZyZWUuYworKysgL2Rldi9udWxs CkBAIC0xLDc3ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLSNpbmNs dWRlICJ0ZXN0L3Nhbi5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FmZXR5X2No ZWNrLmgiCi0KLWJvb2wgZmFrZV9hYm9ydF9jYWxsZWQ7Ci12b2lkIGZha2VfYWJvcnQoY29uc3Qg Y2hhciAqbWVzc2FnZSkgewotCSh2b2lkKW1lc3NhZ2U7Ci0JZmFrZV9hYm9ydF9jYWxsZWQgPSB0 cnVlOwotfQotCi12b2lkCi10ZXN0X2xhcmdlX2RvdWJsZV9mcmVlX3ByZSh2b2lkKSB7Ci0Jc2Fm ZXR5X2NoZWNrX3NldF9hYm9ydCgmZmFrZV9hYm9ydCk7Ci0JZmFrZV9hYm9ydF9jYWxsZWQgPSBm YWxzZTsKLX0KLQotdm9pZAotdGVzdF9sYXJnZV9kb3VibGVfZnJlZV9wb3N0KCkgewotCWV4cGVj dF9iX2VxKGZha2VfYWJvcnRfY2FsbGVkLCB0cnVlLCAiRG91YmxlLWZyZWUgY2hlY2sgZGlkbid0 IGZpcmUuIik7Ci0Jc2FmZXR5X2NoZWNrX3NldF9hYm9ydChOVUxMKTsKLX0KLQotVEVTVF9CRUdJ Tih0ZXN0X2xhcmdlX2RvdWJsZV9mcmVlX3RjYWNoZSkgewotCXRlc3Rfc2tpcF9pZighY29uZmln X29wdF9zYWZldHlfY2hlY2tzKTsKLQkvKgotCSAqIFNraXAgZGVidWcgYnVpbGRzLCBzaW5jZSB0 b28gbWFueSBhc3NlcnRpb25zIHdpbGwgYmUgdHJpZ2dlcmVkIHdpdGgKLQkgKiBkb3VibGUtZnJl ZSBiZWZvcmUgaGl0dGluZyB0aGUgb25lIHdlIGFyZSBpbnRlcmVzdGVkIGluLgotCSAqLwotCXRl c3Rfc2tpcF9pZihjb25maWdfZGVidWcpOwotCi0JdGVzdF9sYXJnZV9kb3VibGVfZnJlZV9wcmUo KTsKLQljaGFyICpwdHIgPSBtYWxsb2MoU0NfTEFSR0VfTUlOQ0xBU1MpOwotCWJvb2wgZ3VhcmRl ZCA9IGV4dGVudF9pc19ndWFyZGVkKHRzZG5fZmV0Y2goKSwgcHRyKTsKLQlmcmVlKHB0cik7Ci0J aWYgKCFndWFyZGVkKSB7Ci0JCWZyZWUocHRyKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBTa2lw IGJlY2F1c2UgZ3VhcmRlZCBleHRlbnRzIG1heSB1bmd1YXJkIGltbWVkaWF0ZWx5IG9uCi0JCSAq IGRlYWxsb2NhdGlvbiwgaW4gd2hpY2ggY2FzZSB0aGUgc2Vjb25kIGZyZWUgd2lsbCBjcmFzaCBi ZWZvcmUKLQkJICogcmVhY2hpbmcgdGhlIGludGVuZGVkIHNhZmV0eSBjaGVjay4KLQkJICovCi0J CWZha2VfYWJvcnRfY2FsbGVkID0gdHJ1ZTsKLQl9Ci0JbWFsbGN0bCgidGhyZWFkLnRjYWNoZS5m bHVzaCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApOwotCXRlc3RfbGFyZ2VfZG91YmxlX2ZyZWVfcG9z dCgpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2xhcmdlX2RvdWJsZV9mcmVlX25v X3RjYWNoZSkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX29wdF9zYWZldHlfY2hlY2tzKTsKLQl0 ZXN0X3NraXBfaWYoY29uZmlnX2RlYnVnKTsKLQotCXRlc3RfbGFyZ2VfZG91YmxlX2ZyZWVfcHJl KCk7Ci0JY2hhciAqcHRyID0gbWFsbG9jeChTQ19MQVJHRV9NSU5DTEFTUywgTUFMTE9DWF9UQ0FD SEVfTk9ORSk7Ci0JYm9vbCBndWFyZGVkID0gZXh0ZW50X2lzX2d1YXJkZWQodHNkbl9mZXRjaCgp LCBwdHIpOwotCWRhbGxvY3gocHRyLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQlpZiAoIWd1YXJk ZWQpIHsKLQkJZGFsbG9jeChwdHIsIE1BTExPQ1hfVENBQ0hFX05PTkUpOwotCX0gZWxzZSB7Ci0J CS8qCi0JCSAqIFNraXAgYmVjYXVzZSBndWFyZGVkIGV4dGVudHMgbWF5IHVuZ3VhcmQgaW1tZWRp YXRlbHkgb24KLQkJICogZGVhbGxvY2F0aW9uLCBpbiB3aGljaCBjYXNlIHRoZSBzZWNvbmQgZnJl ZSB3aWxsIGNyYXNoIGJlZm9yZQotCQkgKiByZWFjaGluZyB0aGUgaW50ZW5kZWQgc2FmZXR5IGNo ZWNrLgotCQkgKi8KLQkJZmFrZV9hYm9ydF9jYWxsZWQgPSB0cnVlOwotCX0KLQl0ZXN0X2xhcmdl X2RvdWJsZV9mcmVlX3Bvc3QoKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0J cmV0dXJuIHRlc3QodGVzdF9sYXJnZV9kb3VibGVfZnJlZV9ub190Y2FjaGUsCi0JICAgIHRlc3Rf bGFyZ2VfZG91YmxlX2ZyZWVfdGNhY2hlKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZG91YmxlX2ZyZWUuaCBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9kb3VibGVfZnJlZS5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YjEzNzg5Li4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9kb3VibGVfZnJl ZS5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2VkYXRhX2NhY2hlLmMgYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZWRhdGFfY2Fj aGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYxMTEwYS4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZWRhdGFf Y2FjaGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9q ZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9lZGF0YV9jYWNo ZS5oIgotCi1zdGF0aWMgdm9pZAotdGVzdF9lZGF0YV9jYWNoZV9pbml0KGVkYXRhX2NhY2hlX3Qg KmVkYXRhX2NhY2hlKSB7Ci0JYmFzZV90ICpiYXNlID0gYmFzZV9uZXcoVFNETl9OVUxMLCAvKiBp bmQgKi8gMSwKLQkgICAgJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcywgLyogbWV0YWRhdGFf dXNlX2hvb2tzICovIHRydWUpOwotCWFzc2VydF9wdHJfbm90X251bGwoYmFzZSwgIiIpOwotCWJv b2wgZXJyID0gZWRhdGFfY2FjaGVfaW5pdChlZGF0YV9jYWNoZSwgYmFzZSk7Ci0JYXNzZXJ0X2Zh bHNlKGVyciwgIiIpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9lZGF0YV9jYWNoZV9kZXN0cm95 KGVkYXRhX2NhY2hlX3QgKmVkYXRhX2NhY2hlKSB7Ci0JYmFzZV9kZWxldGUoVFNETl9OVUxMLCBl ZGF0YV9jYWNoZS0+YmFzZSk7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9lZGF0YV9jYWNoZSkgewot CWVkYXRhX2NhY2hlX3QgZWM7Ci0JdGVzdF9lZGF0YV9jYWNoZV9pbml0KCZlYyk7Ci0KLQkvKiBH ZXQgb25lICovCi0JZWRhdGFfdCAqZWQxID0gZWRhdGFfY2FjaGVfZ2V0KFRTRE5fTlVMTCwgJmVj KTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKGVkMSwgIiIpOwotCi0JLyogQ2FjaGUgc2hvdWxkIGJl IGVtcHR5ICovCi0JYXNzZXJ0X3p1X2VxKGF0b21pY19sb2FkX3p1KCZlYy5jb3VudCwgQVRPTUlD X1JFTEFYRUQpLCAwLCAiIik7Ci0KLQkvKiBHZXQgYW5vdGhlciAqLwotCWVkYXRhX3QgKmVkMiA9 IGVkYXRhX2NhY2hlX2dldChUU0ROX05VTEwsICZlYyk7Ci0JYXNzZXJ0X3B0cl9ub3RfbnVsbChl ZDIsICIiKTsKLQotCS8qIFN0aWxsIGVtcHR5ICovCi0JYXNzZXJ0X3p1X2VxKGF0b21pY19sb2Fk X3p1KCZlYy5jb3VudCwgQVRPTUlDX1JFTEFYRUQpLCAwLCAiIik7Ci0KLQkvKiBQdXQgb25lIGJh Y2ssIGFuZCB0aGUgY2FjaGUgc2hvdWxkIG5vdyBoYXZlIG9uZSBpdGVtICovCi0JZWRhdGFfY2Fj aGVfcHV0KFRTRE5fTlVMTCwgJmVjLCBlZDEpOwotCWFzc2VydF96dV9lcShhdG9taWNfbG9hZF96 dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgMSwgIiIpOwotCi0JLyogUmVhbGxvY2F0aW5n IHNob3VsZCByZXVzZSB0aGUgaXRlbSwgYW5kIGxlYXZlIGFuIGVtcHR5IGNhY2hlLiAqLwotCWVk YXRhX3QgKmVkMV9hZ2FpbiA9IGVkYXRhX2NhY2hlX2dldChUU0ROX05VTEwsICZlYyk7Ci0JYXNz ZXJ0X3B0cl9lcShlZDEsIGVkMV9hZ2FpbiwgIiIpOwotCWFzc2VydF96dV9lcShhdG9taWNfbG9h ZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgMCwgIiIpOwotCi0JdGVzdF9lZGF0YV9j YWNoZV9kZXN0cm95KCZlYyk7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgc2l6ZV90Ci1lY2ZfY291 bnQoZWRhdGFfY2FjaGVfZmFzdF90ICplY2YpIHsKLQlzaXplX3QgY291bnQgPSAwOwotCWVkYXRh X3QgKmN1cjsKLQlxbF9mb3JlYWNoKGN1ciwgJmVjZi0+bGlzdC5oZWFkLCBxbF9saW5rX2luYWN0 aXZlKSB7Ci0JCWNvdW50Kys7Ci0JfQotCXJldHVybiBjb3VudDsKLX0KLQotVEVTVF9CRUdJTih0 ZXN0X2VkYXRhX2NhY2hlX2Zhc3Rfc2ltcGxlKSB7Ci0JZWRhdGFfY2FjaGVfdCBlYzsKLQllZGF0 YV9jYWNoZV9mYXN0X3QgZWNmOwotCi0JdGVzdF9lZGF0YV9jYWNoZV9pbml0KCZlYyk7Ci0JZWRh dGFfY2FjaGVfZmFzdF9pbml0KCZlY2YsICZlYyk7Ci0KLQllZGF0YV90ICplZDEgPSBlZGF0YV9j YWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2YpOwotCWV4cGVjdF9wdHJfbm90X251bGwoZWQx LCAiIik7Ci0JZXhwZWN0X3p1X2VxKGVjZl9jb3VudCgmZWNmKSwgMCwgIiIpOwotCWV4cGVjdF96 dV9lcShhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgMCwgIiIpOwot Ci0JZWRhdGFfdCAqZWQyID0gZWRhdGFfY2FjaGVfZmFzdF9nZXQoVFNETl9OVUxMLCAmZWNmKTsK LQlleHBlY3RfcHRyX25vdF9udWxsKGVkMiwgIiIpOwotCWV4cGVjdF96dV9lcShlY2ZfY291bnQo JmVjZiksIDAsICIiKTsKLQlleHBlY3RfenVfZXEoYXRvbWljX2xvYWRfenUoJmVjLmNvdW50LCBB VE9NSUNfUkVMQVhFRCksIDAsICIiKTsKLQotCWVkYXRhX2NhY2hlX2Zhc3RfcHV0KFRTRE5fTlVM TCwgJmVjZiwgZWQxKTsKLQlleHBlY3RfenVfZXEoZWNmX2NvdW50KCZlY2YpLCAxLCAiIik7Ci0J ZXhwZWN0X3p1X2VxKGF0b21pY19sb2FkX3p1KCZlYy5jb3VudCwgQVRPTUlDX1JFTEFYRUQpLCAw LCAiIik7Ci0KLQllZGF0YV9jYWNoZV9mYXN0X3B1dChUU0ROX05VTEwsICZlY2YsIGVkMik7Ci0J ZXhwZWN0X3p1X2VxKGVjZl9jb3VudCgmZWNmKSwgMiwgIiIpOwotCWV4cGVjdF96dV9lcShhdG9t aWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVEKSwgMCwgIiIpOwotCi0JLyogTElG TyBvcmRlcmluZy4gKi8KLQlleHBlY3RfcHRyX2VxKGVkMiwgZWRhdGFfY2FjaGVfZmFzdF9nZXQo VFNETl9OVUxMLCAmZWNmKSwgIiIpOwotCWV4cGVjdF96dV9lcShlY2ZfY291bnQoJmVjZiksIDEs ICIiKTsKLQlleHBlY3RfenVfZXEoYXRvbWljX2xvYWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVM QVhFRCksIDAsICIiKTsKLQotCWV4cGVjdF9wdHJfZXEoZWQxLCBlZGF0YV9jYWNoZV9mYXN0X2dl dChUU0ROX05VTEwsICZlY2YpLCAiIik7Ci0JZXhwZWN0X3p1X2VxKGVjZl9jb3VudCgmZWNmKSwg MCwgIiIpOwotCWV4cGVjdF96dV9lcShhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19S RUxBWEVEKSwgMCwgIiIpOwotCi0JdGVzdF9lZGF0YV9jYWNoZV9kZXN0cm95KCZlYyk7Ci19Ci1U RVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfZWRhdGFfY2FjaGVfZmlsbCkgewotCWVkYXRhX2Nh Y2hlX3QgZWM7Ci0JZWRhdGFfY2FjaGVfZmFzdF90IGVjZjsKLQotCXRlc3RfZWRhdGFfY2FjaGVf aW5pdCgmZWMpOwotCWVkYXRhX2NhY2hlX2Zhc3RfaW5pdCgmZWNmLCAmZWMpOwotCi0JZWRhdGFf dCAqYWxsb2NzW0VEQVRBX0NBQ0hFX0ZBU1RfRklMTCAqIDJdOwotCi0JLyoKLQkgKiBJZiB0aGUg ZmFsbGJhY2sgY2FjaGUgY2FuJ3Qgc2F0aXNmeSB0aGUgcmVxdWVzdCwgd2Ugc2hvdWxkbid0IGRv Ci0JICogZXh0cmEgYWxsb2NhdGlvbnMgdW50aWwgY29tcGVsbGVkIHRvLiAgUHV0IGhhbGYgdGhl IGZpbGwgZ29hbCBpbiB0aGUKLQkgKiBmYWxsYmFjay4KLQkgKi8KLQlmb3IgKGludCBpID0gMDsg aSA8IEVEQVRBX0NBQ0hFX0ZBU1RfRklMTCAvIDI7IGkrKykgewotCQlhbGxvY3NbaV0gPSBlZGF0 YV9jYWNoZV9nZXQoVFNETl9OVUxMLCAmZWMpOwotCX0KLQlmb3IgKGludCBpID0gMDsgaSA8IEVE QVRBX0NBQ0hFX0ZBU1RfRklMTCAvIDI7IGkrKykgewotCQllZGF0YV9jYWNoZV9wdXQoVFNETl9O VUxMLCAmZWMsIGFsbG9jc1tpXSk7Ci0JfQotCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNU X0ZJTEwgLyAyLAotCSAgICBhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19SRUxBWEVE KSwgIiIpOwotCi0JYWxsb2NzWzBdID0gZWRhdGFfY2FjaGVfZmFzdF9nZXQoVFNETl9OVUxMLCAm ZWNmKTsKLQlleHBlY3RfenVfZXEoRURBVEFfQ0FDSEVfRkFTVF9GSUxMIC8gMiAtIDEsIGVjZl9j b3VudCgmZWNmKSwKLQkgICAgIlNob3VsZCBoYXZlIGdyYWJiZWQgYWxsIGVkYXRhcyBhdmFpbGFi bGUgYnV0IG5vIG1vcmUuIik7Ci0KLQlmb3IgKGludCBpID0gMTsgaSA8IEVEQVRBX0NBQ0hFX0ZB U1RfRklMTCAvIDI7IGkrKykgewotCQlhbGxvY3NbaV0gPSBlZGF0YV9jYWNoZV9mYXN0X2dldChU U0ROX05VTEwsICZlY2YpOwotCQlleHBlY3RfcHRyX25vdF9udWxsKGFsbG9jc1tpXSwgIiIpOwot CX0KLQlleHBlY3RfenVfZXEoMCwgZWNmX2NvdW50KCZlY2YpLCAiIik7Ci0KLQkvKiBXaGVuIGZv cmNlZCwgd2Ugc2hvdWxkIGFsbG9jIGZyb20gdGhlIGJhc2UuICovCi0JZWRhdGFfdCAqZWRhdGEg PSBlZGF0YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2YpOwotCWV4cGVjdF9wdHJfbm90 X251bGwoZWRhdGEsICIiKTsKLQlleHBlY3RfenVfZXEoMCwgZWNmX2NvdW50KCZlY2YpLCAiQWxs b2NhdGVkIG1vcmUgdGhhbiBuZWNlc3NhcnkiKTsKLQlleHBlY3RfenVfZXEoMCwgYXRvbWljX2xv YWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCksCi0JICAgICJBbGxvY2F0ZWQgbW9yZSB0 aGFuIG5lY2Vzc2FyeSIpOwotCi0JLyoKLQkgKiBXZSBzaG91bGQgY29ycmVjdGx5IGZpbGwgaW4g dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBmYWxsYmFjayBpc24ndAotCSAqIGV4aGF1c3RlZCwg dG9vLgotCSAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgRURBVEFfQ0FDSEVfRkFTVF9GSUxMICog MjsgaSsrKSB7Ci0JCWFsbG9jc1tpXSA9IGVkYXRhX2NhY2hlX2dldChUU0ROX05VTEwsICZlYyk7 Ci0JCWV4cGVjdF9wdHJfbm90X251bGwoYWxsb2NzW2ldLCAiIik7Ci0JfQotCWZvciAoaW50IGkg PSAwOyBpIDwgRURBVEFfQ0FDSEVfRkFTVF9GSUxMICogMjsgaSsrKSB7Ci0JCWVkYXRhX2NhY2hl X3B1dChUU0ROX05VTEwsICZlYywgYWxsb2NzW2ldKTsKLQl9Ci0KLQlhbGxvY3NbMF0gPSBlZGF0 YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2YpOwotCWV4cGVjdF96dV9lcShFREFUQV9D QUNIRV9GQVNUX0ZJTEwgLSAxLCBlY2ZfY291bnQoJmVjZiksICIiKTsKLQlleHBlY3RfenVfZXEo RURBVEFfQ0FDSEVfRkFTVF9GSUxMLAotCSAgICBhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFU T01JQ19SRUxBWEVEKSwgIiIpOwotCWZvciAoaW50IGkgPSAxOyBpIDwgRURBVEFfQ0FDSEVfRkFT VF9GSUxMOyBpKyspIHsKLQkJZXhwZWN0X3p1X2VxKEVEQVRBX0NBQ0hFX0ZBU1RfRklMTCAtIGks IGVjZl9jb3VudCgmZWNmKSwgIiIpOwotCQlleHBlY3RfenVfZXEoRURBVEFfQ0FDSEVfRkFTVF9G SUxMLAotCQkgICAgYXRvbWljX2xvYWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCksICIi KTsKLQkJYWxsb2NzW2ldID0gZWRhdGFfY2FjaGVfZmFzdF9nZXQoVFNETl9OVUxMLCAmZWNmKTsK LQkJZXhwZWN0X3B0cl9ub3RfbnVsbChhbGxvY3NbaV0sICIiKTsKLQl9Ci0JZXhwZWN0X3p1X2Vx KDAsIGVjZl9jb3VudCgmZWNmKSwgIiIpOwotCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNU X0ZJTEwsCi0JICAgIGF0b21pY19sb2FkX3p1KCZlYy5jb3VudCwgQVRPTUlDX1JFTEFYRUQpLCAi Iik7Ci0KLQlhbGxvY3NbMF0gPSBlZGF0YV9jYWNoZV9mYXN0X2dldChUU0ROX05VTEwsICZlY2Yp OwotCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNUX0ZJTEwgLSAxLCBlY2ZfY291bnQoJmVj ZiksICIiKTsKLQlleHBlY3RfenVfZXEoMCwgYXRvbWljX2xvYWRfenUoJmVjLmNvdW50LCBBVE9N SUNfUkVMQVhFRCksICIiKTsKLQlmb3IgKGludCBpID0gMTsgaSA8IEVEQVRBX0NBQ0hFX0ZBU1Rf RklMTDsgaSsrKSB7Ci0JCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNUX0ZJTEwgLSBpLCBl Y2ZfY291bnQoJmVjZiksICIiKTsKLQkJZXhwZWN0X3p1X2VxKDAsIGF0b21pY19sb2FkX3p1KCZl Yy5jb3VudCwgQVRPTUlDX1JFTEFYRUQpLCAiIik7Ci0JCWFsbG9jc1tpXSA9IGVkYXRhX2NhY2hl X2Zhc3RfZ2V0KFRTRE5fTlVMTCwgJmVjZik7Ci0JCWV4cGVjdF9wdHJfbm90X251bGwoYWxsb2Nz W2ldLCAiIik7Ci0JfQotCWV4cGVjdF96dV9lcSgwLCBlY2ZfY291bnQoJmVjZiksICIiKTsKLQll eHBlY3RfenVfZXEoMCwgYXRvbWljX2xvYWRfenUoJmVjLmNvdW50LCBBVE9NSUNfUkVMQVhFRCks ICIiKTsKLQotCXRlc3RfZWRhdGFfY2FjaGVfZGVzdHJveSgmZWMpOwotfQotVEVTVF9FTkQKLQot VEVTVF9CRUdJTih0ZXN0X2VkYXRhX2NhY2hlX2Rpc2FibGUpIHsKLQllZGF0YV9jYWNoZV90IGVj OwotCWVkYXRhX2NhY2hlX2Zhc3RfdCBlY2Y7Ci0KLQl0ZXN0X2VkYXRhX2NhY2hlX2luaXQoJmVj KTsKLQllZGF0YV9jYWNoZV9mYXN0X2luaXQoJmVjZiwgJmVjKTsKLQotCWZvciAoaW50IGkgPSAw OyBpIDwgRURBVEFfQ0FDSEVfRkFTVF9GSUxMOyBpKyspIHsKLQkJZWRhdGFfdCAqZWRhdGEgPSBl ZGF0YV9jYWNoZV9nZXQoVFNETl9OVUxMLCAmZWMpOwotCQlleHBlY3RfcHRyX25vdF9udWxsKGVk YXRhLCAiIik7Ci0JCWVkYXRhX2NhY2hlX2Zhc3RfcHV0KFRTRE5fTlVMTCwgJmVjZiwgZWRhdGEp OwotCX0KLQotCWV4cGVjdF96dV9lcShFREFUQV9DQUNIRV9GQVNUX0ZJTEwsIGVjZl9jb3VudCgm ZWNmKSwgIiIpOwotCWV4cGVjdF96dV9lcSgwLCBhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFU T01JQ19SRUxBWEVEKSwgIiIpOwotCi0JZWRhdGFfY2FjaGVfZmFzdF9kaXNhYmxlKFRTRE5fTlVM TCwgJmVjZik7Ci0KLQlleHBlY3RfenVfZXEoMCwgZWNmX2NvdW50KCZlY2YpLCAiIik7Ci0JZXhw ZWN0X3p1X2VxKEVEQVRBX0NBQ0hFX0ZBU1RfRklMTCwKLQkgICAgYXRvbWljX2xvYWRfenUoJmVj LmNvdW50LCBBVE9NSUNfUkVMQVhFRCksICJEaXNhYmxpbmcgc2hvdWxkIGZsdXNoIik7Ci0KLQll ZGF0YV90ICplZGF0YSA9IGVkYXRhX2NhY2hlX2Zhc3RfZ2V0KFRTRE5fTlVMTCwgJmVjZik7Ci0J ZXhwZWN0X3p1X2VxKDAsIGVjZl9jb3VudCgmZWNmKSwgIiIpOwotCWV4cGVjdF96dV9lcShFREFU QV9DQUNIRV9GQVNUX0ZJTEwgLSAxLAotCSAgICBhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFU T01JQ19SRUxBWEVEKSwKLQkgICAgIkRpc2FibGVkIGVjZiBzaG91bGQgZm9yd2FyZCBvbiBnZXQi KTsKLQotCWVkYXRhX2NhY2hlX2Zhc3RfcHV0KFRTRE5fTlVMTCwgJmVjZiwgZWRhdGEpOwotCWV4 cGVjdF96dV9lcSgwLCBlY2ZfY291bnQoJmVjZiksICIiKTsKLQlleHBlY3RfenVfZXEoRURBVEFf Q0FDSEVfRkFTVF9GSUxMLAotCSAgICBhdG9taWNfbG9hZF96dSgmZWMuY291bnQsIEFUT01JQ19S RUxBWEVEKSwKLQkgICAgIkRpc2FibGVkIGVjZiBzaG91bGQgZm9yd2FyZCBvbiBwdXQiKTsKLQot CXRlc3RfZWRhdGFfY2FjaGVfZGVzdHJveSgmZWMpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWlu KHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9lZGF0YV9jYWNoZSwKLQkgICAgdGVz dF9lZGF0YV9jYWNoZV9mYXN0X3NpbXBsZSwKLQkgICAgdGVzdF9lZGF0YV9jYWNoZV9maWxsLAot CSAgICB0ZXN0X2VkYXRhX2NhY2hlX2Rpc2FibGUpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9lbWl0dGVyLmMgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZW1pdHRlci5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjhmOWZmLi4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9lbWl0dGVyLmMKKysr IC9kZXYvbnVsbApAQCAtMSw1MzMgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVz dC5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2VtaXR0ZXIuaCIKLQotLyoKLSAqIFRo aXMgaXMgc28gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYW5kIGZlYXR1cmUgd29yaywgd2UnbGwgbGVh dmUgcHJpbnRpbmcKLSAqIGZ1bmN0aW9uYWxpdHkgY29tbWl0dGVkIGJ1dCBkaXNhYmxlZCBieSBk ZWZhdWx0LgotICovCi0vKiBQcmludCB0aGUgdGV4dCBhcyBpdCB3aWxsIGFwcGVhci4gKi8KLXN0 YXRpYyBib29sIHByaW50X3JhdyA9IGZhbHNlOwotLyogUHJpbnQgdGhlIHRleHQgZXNjYXBlZCwg c28gaXQgY2FuIGJlIGNvcGllZCBiYWNrIGludG8gdGhlIHRlc3QgY2FzZS4gKi8KLXN0YXRpYyBi b29sIHByaW50X2VzY2FwZWQgPSBmYWxzZTsKLQotdHlwZWRlZiBzdHJ1Y3QgYnVmX2Rlc2NyaXB0 b3JfcyBidWZfZGVzY3JpcHRvcl90Owotc3RydWN0IGJ1Zl9kZXNjcmlwdG9yX3MgewotCWNoYXIg KmJ1ZjsKLQlzaXplX3QgbGVuOwotCWJvb2wgbWlkX3F1b3RlOwotfTsKLQotLyoKLSAqIEZvcndh cmRzIGFsbCB3cml0ZXMgdG8gdGhlIHBhc3NlZC1pbiBidWZfdiAod2hpY2ggc2hvdWxkIGJlIGNh c3QgZnJvbSBhCi0gKiBidWZfZGVzY3JpcHRvcl90ICopLgotICovCi1zdGF0aWMgdm9pZAotZm9y d2FyZGluZ19jYih2b2lkICpidWZfZGVzY3JpcHRvcl92LCBjb25zdCBjaGFyICpzdHIpIHsKLQli dWZfZGVzY3JpcHRvcl90ICpidWZfZGVzY3JpcHRvciA9IChidWZfZGVzY3JpcHRvcl90ICopYnVm X2Rlc2NyaXB0b3JfdjsKLQotCWlmIChwcmludF9yYXcpIHsKLQkJbWFsbG9jX3ByaW50ZigiJXMi LCBzdHIpOwotCX0KLQlpZiAocHJpbnRfZXNjYXBlZCkgewotCQljb25zdCBjaGFyICppdCA9IHN0 cjsKLQkJd2hpbGUgKCppdCAhPSAnXDAnKSB7Ci0JCQlpZiAoIWJ1Zl9kZXNjcmlwdG9yLT5taWRf cXVvdGUpIHsKLQkJCQltYWxsb2NfcHJpbnRmKCJcIiIpOwotCQkJCWJ1Zl9kZXNjcmlwdG9yLT5t aWRfcXVvdGUgPSB0cnVlOwotCQkJfQotCQkJc3dpdGNoICgqaXQpIHsKLQkJCWNhc2UgJ1xcJzoK LQkJCQltYWxsb2NfcHJpbnRmKCJcXCIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXCInOgotCQkJ CW1hbGxvY19wcmludGYoIlxcXCIiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1x0JzoKLQkJCQlt YWxsb2NfcHJpbnRmKCJcXHQiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xuJzoKLQkJCQltYWxs b2NfcHJpbnRmKCJcXG5cIlxuIik7Ci0JCQkJYnVmX2Rlc2NyaXB0b3ItPm1pZF9xdW90ZSA9IGZh bHNlOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQltYWxsb2NfcHJpbnRmKCIlYyIsICpp dCk7Ci0JCQl9Ci0JCQlpdCsrOwotCQl9Ci0JfQotCi0Jc2l6ZV90IHdyaXR0ZW4gPSBtYWxsb2Nf c25wcmludGYoYnVmX2Rlc2NyaXB0b3ItPmJ1ZiwKLQkgICAgYnVmX2Rlc2NyaXB0b3ItPmxlbiwg IiVzIiwgc3RyKTsKLQlleHBlY3RfenVfZXEod3JpdHRlbiwgc3RybGVuKHN0ciksICJCdWZmZXIg b3ZlcmZsb3chIik7Ci0JYnVmX2Rlc2NyaXB0b3ItPmJ1ZiArPSB3cml0dGVuOwotCWJ1Zl9kZXNj cmlwdG9yLT5sZW4gLT0gd3JpdHRlbjsKLQlleHBlY3RfenVfZ3QoYnVmX2Rlc2NyaXB0b3ItPmxl biwgMCwgIkJ1ZmZlciBvdXQgb2Ygc3BhY2UhIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1leHBlY3Rf ZW1pdF9vdXRwdXQodm9pZCAoKmVtaXRfZm4pKGVtaXR0ZXJfdCAqKSwKLSAgICBjb25zdCBjaGFy ICpleHBlY3RlZF9qc29uX291dHB1dCwKLSAgICBjb25zdCBjaGFyICpleHBlY3RlZF9qc29uX2Nv bXBhY3Rfb3V0cHV0LAotICAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3RhYmxlX291dHB1dCkgewot CWVtaXR0ZXJfdCBlbWl0dGVyOwotCWNoYXIgYnVmW01BTExPQ19QUklOVEZfQlVGU0laRV07Ci0J YnVmX2Rlc2NyaXB0b3JfdCBidWZfZGVzY3JpcHRvcjsKLQotCWJ1Zl9kZXNjcmlwdG9yLmJ1ZiA9 IGJ1ZjsKLQlidWZfZGVzY3JpcHRvci5sZW4gPSBNQUxMT0NfUFJJTlRGX0JVRlNJWkU7Ci0JYnVm X2Rlc2NyaXB0b3IubWlkX3F1b3RlID0gZmFsc2U7Ci0KLQllbWl0dGVyX2luaXQoJmVtaXR0ZXIs IGVtaXR0ZXJfb3V0cHV0X2pzb24sICZmb3J3YXJkaW5nX2NiLAotCSAgICAmYnVmX2Rlc2NyaXB0 b3IpOwotCSgqZW1pdF9mbikoJmVtaXR0ZXIpOwotCWV4cGVjdF9zdHJfZXEoZXhwZWN0ZWRfanNv bl9vdXRwdXQsIGJ1ZiwgImpzb24gb3V0cHV0IGZhaWx1cmUiKTsKLQotCWJ1Zl9kZXNjcmlwdG9y LmJ1ZiA9IGJ1ZjsKLQlidWZfZGVzY3JpcHRvci5sZW4gPSBNQUxMT0NfUFJJTlRGX0JVRlNJWkU7 Ci0JYnVmX2Rlc2NyaXB0b3IubWlkX3F1b3RlID0gZmFsc2U7Ci0KLQllbWl0dGVyX2luaXQoJmVt aXR0ZXIsIGVtaXR0ZXJfb3V0cHV0X2pzb25fY29tcGFjdCwgJmZvcndhcmRpbmdfY2IsCi0JICAg ICZidWZfZGVzY3JpcHRvcik7Ci0JKCplbWl0X2ZuKSgmZW1pdHRlcik7Ci0JZXhwZWN0X3N0cl9l cShleHBlY3RlZF9qc29uX2NvbXBhY3Rfb3V0cHV0LCBidWYsCi0JICAgICJjb21wYWN0IGpzb24g b3V0cHV0IGZhaWx1cmUiKTsKLQotCWJ1Zl9kZXNjcmlwdG9yLmJ1ZiA9IGJ1ZjsKLQlidWZfZGVz Y3JpcHRvci5sZW4gPSBNQUxMT0NfUFJJTlRGX0JVRlNJWkU7Ci0JYnVmX2Rlc2NyaXB0b3IubWlk X3F1b3RlID0gZmFsc2U7Ci0KLQllbWl0dGVyX2luaXQoJmVtaXR0ZXIsIGVtaXR0ZXJfb3V0cHV0 X3RhYmxlLCAmZm9yd2FyZGluZ19jYiwKLQkgICAgJmJ1Zl9kZXNjcmlwdG9yKTsKLQkoKmVtaXRf Zm4pKCZlbWl0dGVyKTsKLQlleHBlY3Rfc3RyX2VxKGV4cGVjdGVkX3RhYmxlX291dHB1dCwgYnVm LCAidGFibGUgb3V0cHV0IGZhaWx1cmUiKTsKLX0KLQotc3RhdGljIHZvaWQKLWVtaXRfZGljdChl bWl0dGVyX3QgKmVtaXR0ZXIpIHsKLQlib29sIGJfZmFsc2UgPSBmYWxzZTsKLQlib29sIGJfdHJ1 ZSA9IHRydWU7Ci0JaW50IGlfMTIzID0gMTIzOwotCWNvbnN0IGNoYXIgKnN0ciA9ICJhIHN0cmlu ZyI7Ci0KLQllbWl0dGVyX2JlZ2luKGVtaXR0ZXIpOwotCWVtaXR0ZXJfZGljdF9iZWdpbihlbWl0 dGVyLCAiZm9vIiwgIlRoaXMgaXMgdGhlIGZvbyB0YWJsZToiKTsKLQllbWl0dGVyX2t2KGVtaXR0 ZXIsICJhYmMiLCAiQUJDIiwgZW1pdHRlcl90eXBlX2Jvb2wsICZiX2ZhbHNlKTsKLQllbWl0dGVy X2t2KGVtaXR0ZXIsICJkZWYiLCAiREVGIiwgZW1pdHRlcl90eXBlX2Jvb2wsICZiX3RydWUpOwot CWVtaXR0ZXJfa3Zfbm90ZShlbWl0dGVyLCAiZ2hpIiwgIkdISSIsIGVtaXR0ZXJfdHlwZV9pbnQs ICZpXzEyMywKLQkgICAgIm5vdGVfa2V5MSIsIGVtaXR0ZXJfdHlwZV9zdHJpbmcsICZzdHIpOwot CWVtaXR0ZXJfa3Zfbm90ZShlbWl0dGVyLCAiamtsIiwgIkpLTCIsIGVtaXR0ZXJfdHlwZV9zdHJp bmcsICZzdHIsCi0JICAgICJub3RlX2tleTIiLCBlbWl0dGVyX3R5cGVfYm9vbCwgJmJfZmFsc2Up OwotCWVtaXR0ZXJfZGljdF9lbmQoZW1pdHRlcik7Ci0JZW1pdHRlcl9lbmQoZW1pdHRlcik7Ci19 Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkaWN0X2pzb24gPQotIntcbiIKLSJcdFwiZm9vXCI6IHtc biIKLSJcdFx0XCJhYmNcIjogZmFsc2UsXG4iCi0iXHRcdFwiZGVmXCI6IHRydWUsXG4iCi0iXHRc dFwiZ2hpXCI6IDEyMyxcbiIKLSJcdFx0XCJqa2xcIjogXCJhIHN0cmluZ1wiXG4iCi0iXHR9XG4i Ci0ifVxuIjsKLXN0YXRpYyBjb25zdCBjaGFyICpkaWN0X2pzb25fY29tcGFjdCA9Ci0ieyIKLQki XCJmb29cIjp7IgotCQkiXCJhYmNcIjpmYWxzZSwiCi0JCSJcImRlZlwiOnRydWUsIgotCQkiXCJn aGlcIjoxMjMsIgotCQkiXCJqa2xcIjpcImEgc3RyaW5nXCIiCi0JIn0iCi0ifSI7Ci1zdGF0aWMg Y29uc3QgY2hhciAqZGljdF90YWJsZSA9Ci0iVGhpcyBpcyB0aGUgZm9vIHRhYmxlOlxuIgotIiAg QUJDOiBmYWxzZVxuIgotIiAgREVGOiB0cnVlXG4iCi0iICBHSEk6IDEyMyAobm90ZV9rZXkxOiBc ImEgc3RyaW5nXCIpXG4iCi0iICBKS0w6IFwiYSBzdHJpbmdcIiAobm90ZV9rZXkyOiBmYWxzZSlc biI7Ci0KLXN0YXRpYyB2b2lkCi1lbWl0X3RhYmxlX3ByaW50ZihlbWl0dGVyX3QgKmVtaXR0ZXIp IHsKLQllbWl0dGVyX2JlZ2luKGVtaXR0ZXIpOwotCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0 ZXIsICJUYWJsZSBub3RlIDFcbiIpOwotCWVtaXR0ZXJfdGFibGVfcHJpbnRmKGVtaXR0ZXIsICJU YWJsZSBub3RlIDIgJXNcbiIsCi0JICAgICJ3aXRoIGZvcm1hdCBzdHJpbmciKTsKLQllbWl0dGVy X2VuZChlbWl0dGVyKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnRhYmxlX3ByaW50Zl9qc29u ID0KLSJ7XG4iCi0ifVxuIjsKLXN0YXRpYyBjb25zdCBjaGFyICp0YWJsZV9wcmludGZfanNvbl9j b21wYWN0ID0gInt9IjsKLXN0YXRpYyBjb25zdCBjaGFyICp0YWJsZV9wcmludGZfdGFibGUgPQot IlRhYmxlIG5vdGUgMVxuIgotIlRhYmxlIG5vdGUgMiB3aXRoIGZvcm1hdCBzdHJpbmdcbiI7Ci0K LXN0YXRpYyB2b2lkIGVtaXRfbmVzdGVkX2RpY3QoZW1pdHRlcl90ICplbWl0dGVyKSB7Ci0JaW50 IHZhbCA9IDEyMzsKLQllbWl0dGVyX2JlZ2luKGVtaXR0ZXIpOwotCWVtaXR0ZXJfZGljdF9iZWdp bihlbWl0dGVyLCAianNvbjEiLCAiRGljdCAxIik7Ci0JZW1pdHRlcl9kaWN0X2JlZ2luKGVtaXR0 ZXIsICJqc29uMiIsICJEaWN0IDIiKTsKLQllbWl0dGVyX2t2KGVtaXR0ZXIsICJwcmltaXRpdmUi LCAiQSBwcmltaXRpdmUiLCBlbWl0dGVyX3R5cGVfaW50LCAmdmFsKTsKLQllbWl0dGVyX2RpY3Rf ZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSAyICovCi0JZW1pdHRlcl9kaWN0X2JlZ2luKGVtaXR0ZXIs ICJqc29uMyIsICJEaWN0IDMiKTsKLQllbWl0dGVyX2RpY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9z ZSAzICovCi0JZW1pdHRlcl9kaWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgMSAqLwotCWVtaXR0 ZXJfZGljdF9iZWdpbihlbWl0dGVyLCAianNvbjQiLCAiRGljdCA0Iik7Ci0JZW1pdHRlcl9rdihl bWl0dGVyLCAicHJpbWl0aXZlIiwgIkFub3RoZXIgcHJpbWl0aXZlIiwKLQkgICAgZW1pdHRlcl90 eXBlX2ludCwgJnZhbCk7Ci0JZW1pdHRlcl9kaWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgNCAq LwotCWVtaXR0ZXJfZW5kKGVtaXR0ZXIpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqbmVzdGVk X2RpY3RfanNvbiA9Ci0ie1xuIgotIlx0XCJqc29uMVwiOiB7XG4iCi0iXHRcdFwianNvbjJcIjog e1xuIgotIlx0XHRcdFwicHJpbWl0aXZlXCI6IDEyM1xuIgotIlx0XHR9LFxuIgotIlx0XHRcImpz b24zXCI6IHtcbiIKLSJcdFx0fVxuIgotIlx0fSxcbiIKLSJcdFwianNvbjRcIjoge1xuIgotIlx0 XHRcInByaW1pdGl2ZVwiOiAxMjNcbiIKLSJcdH1cbiIKLSJ9XG4iOwotc3RhdGljIGNvbnN0IGNo YXIgKm5lc3RlZF9kaWN0X2pzb25fY29tcGFjdCA9Ci0ieyIKLQkiXCJqc29uMVwiOnsiCi0JCSJc Impzb24yXCI6eyIKLQkJCSJcInByaW1pdGl2ZVwiOjEyMyIKLQkJIn0sIgotCQkiXCJqc29uM1wi OnsiCi0JCSJ9IgotCSJ9LCIKLQkiXCJqc29uNFwiOnsiCi0JCSJcInByaW1pdGl2ZVwiOjEyMyIK LQkifSIKLSJ9IjsKLXN0YXRpYyBjb25zdCBjaGFyICpuZXN0ZWRfZGljdF90YWJsZSA9Ci0iRGlj dCAxXG4iCi0iICBEaWN0IDJcbiIKLSIgICAgQSBwcmltaXRpdmU6IDEyM1xuIgotIiAgRGljdCAz XG4iCi0iRGljdCA0XG4iCi0iICBBbm90aGVyIHByaW1pdGl2ZTogMTIzXG4iOwotCi1zdGF0aWMg dm9pZAotZW1pdF90eXBlcyhlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKLQlib29sIGIgPSBmYWxzZTsK LQlpbnQgaSA9IC0xMjM7Ci0JdW5zaWduZWQgdSA9IDEyMzsKLQlzc2l6ZV90IHpkID0gLTQ1NjsK LQlzaXplX3QgenUgPSA0NTY7Ci0JY29uc3QgY2hhciAqc3RyID0gInN0cmluZyI7Ci0JdWludDMy X3QgdTMyID0gNzg5OwotCXVpbnQ2NF90IHU2NCA9IDEwMDAwMDAwMDAwVUxMOwotCi0JZW1pdHRl cl9iZWdpbihlbWl0dGVyKTsKLQllbWl0dGVyX2t2KGVtaXR0ZXIsICJrMSIsICJLMSIsIGVtaXR0 ZXJfdHlwZV9ib29sLCAmYik7Ci0JZW1pdHRlcl9rdihlbWl0dGVyLCAiazIiLCAiSzIiLCBlbWl0 dGVyX3R5cGVfaW50LCAmaSk7Ci0JZW1pdHRlcl9rdihlbWl0dGVyLCAiazMiLCAiSzMiLCBlbWl0 dGVyX3R5cGVfdW5zaWduZWQsICZ1KTsKLQllbWl0dGVyX2t2KGVtaXR0ZXIsICJrNCIsICJLNCIs IGVtaXR0ZXJfdHlwZV9zc2l6ZSwgJnpkKTsKLQllbWl0dGVyX2t2KGVtaXR0ZXIsICJrNSIsICJL NSIsIGVtaXR0ZXJfdHlwZV9zaXplLCAmenUpOwotCWVtaXR0ZXJfa3YoZW1pdHRlciwgIms2Iiwg Iks2IiwgZW1pdHRlcl90eXBlX3N0cmluZywgJnN0cik7Ci0JZW1pdHRlcl9rdihlbWl0dGVyLCAi azciLCAiSzciLCBlbWl0dGVyX3R5cGVfdWludDMyLCAmdTMyKTsKLQllbWl0dGVyX2t2KGVtaXR0 ZXIsICJrOCIsICJLOCIsIGVtaXR0ZXJfdHlwZV91aW50NjQsICZ1NjQpOwotCS8qCi0JICogV2Ug ZG9uJ3QgdGVzdCB0aGUgdGl0bGUgdHlwZSwgc2luY2UgaXQncyBvbmx5IHVzZWQgZm9yIHRhYmxl cy4gIEl0J3MKLQkgKiB0ZXN0ZWQgaW4gdGhlIGVtaXR0ZXJfdGFibGVfcm93IHRlc3RzLgotCSAq LwotCWVtaXR0ZXJfZW5kKGVtaXR0ZXIpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqdHlwZXNf anNvbiA9Ci0ie1xuIgotIlx0XCJrMVwiOiBmYWxzZSxcbiIKLSJcdFwiazJcIjogLTEyMyxcbiIK LSJcdFwiazNcIjogMTIzLFxuIgotIlx0XCJrNFwiOiAtNDU2LFxuIgotIlx0XCJrNVwiOiA0NTYs XG4iCi0iXHRcIms2XCI6IFwic3RyaW5nXCIsXG4iCi0iXHRcIms3XCI6IDc4OSxcbiIKLSJcdFwi azhcIjogMTAwMDAwMDAwMDBcbiIKLSJ9XG4iOwotc3RhdGljIGNvbnN0IGNoYXIgKnR5cGVzX2pz b25fY29tcGFjdCA9Ci0ieyIKLQkiXCJrMVwiOmZhbHNlLCIKLQkiXCJrMlwiOi0xMjMsIgotCSJc ImszXCI6MTIzLCIKLQkiXCJrNFwiOi00NTYsIgotCSJcIms1XCI6NDU2LCIKLQkiXCJrNlwiOlwi c3RyaW5nXCIsIgotCSJcIms3XCI6Nzg5LCIKLQkiXCJrOFwiOjEwMDAwMDAwMDAwIgotIn0iOwot c3RhdGljIGNvbnN0IGNoYXIgKnR5cGVzX3RhYmxlID0KLSJLMTogZmFsc2VcbiIKLSJLMjogLTEy M1xuIgotIkszOiAxMjNcbiIKLSJLNDogLTQ1NlxuIgotIks1OiA0NTZcbiIKLSJLNjogXCJzdHJp bmdcIlxuIgotIks3OiA3ODlcbiIKLSJLODogMTAwMDAwMDAwMDBcbiI7Ci0KLXN0YXRpYyB2b2lk Ci1lbWl0X21vZGFsKGVtaXR0ZXJfdCAqZW1pdHRlcikgewotCWludCB2YWwgPSAxMjM7Ci0JZW1p dHRlcl9iZWdpbihlbWl0dGVyKTsKLQllbWl0dGVyX2RpY3RfYmVnaW4oZW1pdHRlciwgImowIiwg IlQwIik7Ci0JZW1pdHRlcl9qc29uX2tleShlbWl0dGVyLCAiajEiKTsKLQllbWl0dGVyX2pzb25f b2JqZWN0X2JlZ2luKGVtaXR0ZXIpOwotCWVtaXR0ZXJfa3YoZW1pdHRlciwgImkxIiwgIkkxIiwg ZW1pdHRlcl90eXBlX2ludCwgJnZhbCk7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJpMiIs IGVtaXR0ZXJfdHlwZV9pbnQsICZ2YWwpOwotCWVtaXR0ZXJfdGFibGVfa3YoZW1pdHRlciwgIkkz IiwgZW1pdHRlcl90eXBlX2ludCwgJnZhbCk7Ci0JZW1pdHRlcl90YWJsZV9kaWN0X2JlZ2luKGVt aXR0ZXIsICJUMSIpOwotCWVtaXR0ZXJfa3YoZW1pdHRlciwgImk0IiwgIkk0IiwgZW1pdHRlcl90 eXBlX2ludCwgJnZhbCk7Ci0JZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1pdHRlcik7IC8qIENs b3NlIGoxICovCi0JZW1pdHRlcl9rdihlbWl0dGVyLCAiaTUiLCAiSTUiLCBlbWl0dGVyX3R5cGVf aW50LCAmdmFsKTsKLQllbWl0dGVyX3RhYmxlX2RpY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSBU MSAqLwotCWVtaXR0ZXJfa3YoZW1pdHRlciwgImk2IiwgIkk2IiwgZW1pdHRlcl90eXBlX2ludCwg JnZhbCk7Ci0JZW1pdHRlcl9kaWN0X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgajAgLyBUMCAqLwot CWVtaXR0ZXJfZW5kKGVtaXR0ZXIpOwotfQotCi1jb25zdCBjaGFyICptb2RhbF9qc29uID0KLSJ7 XG4iCi0iXHRcImowXCI6IHtcbiIKLSJcdFx0XCJqMVwiOiB7XG4iCi0iXHRcdFx0XCJpMVwiOiAx MjMsXG4iCi0iXHRcdFx0XCJpMlwiOiAxMjMsXG4iCi0iXHRcdFx0XCJpNFwiOiAxMjNcbiIKLSJc dFx0fSxcbiIKLSJcdFx0XCJpNVwiOiAxMjMsXG4iCi0iXHRcdFwiaTZcIjogMTIzXG4iCi0iXHR9 XG4iCi0ifVxuIjsKLWNvbnN0IGNoYXIgKm1vZGFsX2pzb25fY29tcGFjdCA9Ci0ieyIKLQkiXCJq MFwiOnsiCi0JCSJcImoxXCI6eyIKLQkJCSJcImkxXCI6MTIzLCIKLQkJCSJcImkyXCI6MTIzLCIK LQkJCSJcImk0XCI6MTIzIgotCQkifSwiCi0JCSJcImk1XCI6MTIzLCIKLQkJIlwiaTZcIjoxMjMi Ci0JIn0iCi0ifSI7Ci1jb25zdCBjaGFyICptb2RhbF90YWJsZSA9Ci0iVDBcbiIKLSIgIEkxOiAx MjNcbiIKLSIgIEkzOiAxMjNcbiIKLSIgIFQxXG4iCi0iICAgIEk0OiAxMjNcbiIKLSIgICAgSTU6 IDEyM1xuIgotIiAgSTY6IDEyM1xuIjsKLQotc3RhdGljIHZvaWQKLWVtaXRfanNvbl9hcnJheShl bWl0dGVyX3QgKmVtaXR0ZXIpIHsKLQlpbnQgaXZhbCA9IDEyMzsKLQotCWVtaXR0ZXJfYmVnaW4o ZW1pdHRlcik7Ci0JZW1pdHRlcl9qc29uX2tleShlbWl0dGVyLCAiZGljdCIpOwotCWVtaXR0ZXJf anNvbl9vYmplY3RfYmVnaW4oZW1pdHRlcik7Ci0JZW1pdHRlcl9qc29uX2tleShlbWl0dGVyLCAi YXJyIik7Ci0JZW1pdHRlcl9qc29uX2FycmF5X2JlZ2luKGVtaXR0ZXIpOwotCWVtaXR0ZXJfanNv bl9vYmplY3RfYmVnaW4oZW1pdHRlcik7Ci0JZW1pdHRlcl9qc29uX2t2KGVtaXR0ZXIsICJmb28i LCBlbWl0dGVyX3R5cGVfaW50LCAmaXZhbCk7Ci0JZW1pdHRlcl9qc29uX29iamVjdF9lbmQoZW1p dHRlcik7IC8qIENsb3NlIGFyclswXSAqLwotCS8qIGFyclsxXSBhbmQgYXJyWzJdIGFyZSBwcmlt aXRpdmVzLiAqLwotCWVtaXR0ZXJfanNvbl92YWx1ZShlbWl0dGVyLCBlbWl0dGVyX3R5cGVfaW50 LCAmaXZhbCk7Ci0JZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfdHlwZV9pbnQs ICZpdmFsKTsKLQllbWl0dGVyX2pzb25fb2JqZWN0X2JlZ2luKGVtaXR0ZXIpOwotCWVtaXR0ZXJf anNvbl9rdihlbWl0dGVyLCAiYmFyIiwgZW1pdHRlcl90eXBlX2ludCwgJml2YWwpOwotCWVtaXR0 ZXJfanNvbl9rdihlbWl0dGVyLCAiYmF6IiwgZW1pdHRlcl90eXBlX2ludCwgJml2YWwpOwotCWVt aXR0ZXJfanNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSBhcnJbM10uICovCi0JZW1p dHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsgLyogQ2xvc2UgYXJyLiAqLwotCWVtaXR0ZXJf anNvbl9vYmplY3RfZW5kKGVtaXR0ZXIpOyAvKiBDbG9zZSBkaWN0LiAqLwotCWVtaXR0ZXJfZW5k KGVtaXR0ZXIpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqanNvbl9hcnJheV9qc29uID0KLSJ7 XG4iCi0iXHRcImRpY3RcIjoge1xuIgotIlx0XHRcImFyclwiOiBbXG4iCi0iXHRcdFx0e1xuIgot Ilx0XHRcdFx0XCJmb29cIjogMTIzXG4iCi0iXHRcdFx0fSxcbiIKLSJcdFx0XHQxMjMsXG4iCi0i XHRcdFx0MTIzLFxuIgotIlx0XHRcdHtcbiIKLSJcdFx0XHRcdFwiYmFyXCI6IDEyMyxcbiIKLSJc dFx0XHRcdFwiYmF6XCI6IDEyM1xuIgotIlx0XHRcdH1cbiIKLSJcdFx0XVxuIgotIlx0fVxuIgot In1cbiI7Ci1zdGF0aWMgY29uc3QgY2hhciAqanNvbl9hcnJheV9qc29uX2NvbXBhY3QgPQotInsi Ci0JIlwiZGljdFwiOnsiCi0JCSJcImFyclwiOlsiCi0JCQkieyIKLQkJCQkiXCJmb29cIjoxMjMi Ci0JCQkifSwiCi0JCQkiMTIzLCIKLQkJCSIxMjMsIgotCQkJInsiCi0JCQkJIlwiYmFyXCI6MTIz LCIKLQkJCQkiXCJiYXpcIjoxMjMiCi0JCQkifSIKLQkJIl0iCi0JIn0iCi0ifSI7Ci1zdGF0aWMg Y29uc3QgY2hhciAqanNvbl9hcnJheV90YWJsZSA9ICIiOwotCi1zdGF0aWMgdm9pZAotZW1pdF9q c29uX25lc3RlZF9hcnJheShlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKLQlpbnQgaXZhbCA9IDEyMzsK LQljaGFyICpzdmFsID0gImZvbyI7Ci0JZW1pdHRlcl9iZWdpbihlbWl0dGVyKTsKLQllbWl0dGVy X2pzb25fYXJyYXlfYmVnaW4oZW1pdHRlcik7Ci0JCWVtaXR0ZXJfanNvbl9hcnJheV9iZWdpbihl bWl0dGVyKTsKLQkJZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfdHlwZV9pbnQs ICZpdmFsKTsKLQkJZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfdHlwZV9zdHJp bmcsICZzdmFsKTsKLQkJZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfdHlwZV9p bnQsICZpdmFsKTsKLQkJZW1pdHRlcl9qc29uX3ZhbHVlKGVtaXR0ZXIsIGVtaXR0ZXJfdHlwZV9z dHJpbmcsICZzdmFsKTsKLQkJZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsKLQkJZW1p dHRlcl9qc29uX2FycmF5X2JlZ2luKGVtaXR0ZXIpOwotCQllbWl0dGVyX2pzb25fdmFsdWUoZW1p dHRlciwgZW1pdHRlcl90eXBlX2ludCwgJml2YWwpOwotCQllbWl0dGVyX2pzb25fYXJyYXlfZW5k KGVtaXR0ZXIpOwotCQllbWl0dGVyX2pzb25fYXJyYXlfYmVnaW4oZW1pdHRlcik7Ci0JCWVtaXR0 ZXJfanNvbl92YWx1ZShlbWl0dGVyLCBlbWl0dGVyX3R5cGVfc3RyaW5nLCAmc3ZhbCk7Ci0JCWVt aXR0ZXJfanNvbl92YWx1ZShlbWl0dGVyLCBlbWl0dGVyX3R5cGVfaW50LCAmaXZhbCk7Ci0JCWVt aXR0ZXJfanNvbl9hcnJheV9lbmQoZW1pdHRlcik7Ci0JCWVtaXR0ZXJfanNvbl9hcnJheV9iZWdp bihlbWl0dGVyKTsKLQkJZW1pdHRlcl9qc29uX2FycmF5X2VuZChlbWl0dGVyKTsKLQllbWl0dGVy X2pzb25fYXJyYXlfZW5kKGVtaXR0ZXIpOwotCWVtaXR0ZXJfZW5kKGVtaXR0ZXIpOwotfQotCi1z dGF0aWMgY29uc3QgY2hhciAqanNvbl9uZXN0ZWRfYXJyYXlfanNvbiA9Ci0ie1xuIgotIlx0W1xu IgotIlx0XHRbXG4iCi0iXHRcdFx0MTIzLFxuIgotIlx0XHRcdFwiZm9vXCIsXG4iCi0iXHRcdFx0 MTIzLFxuIgotIlx0XHRcdFwiZm9vXCJcbiIKLSJcdFx0XSxcbiIKLSJcdFx0W1xuIgotIlx0XHRc dDEyM1xuIgotIlx0XHRdLFxuIgotIlx0XHRbXG4iCi0iXHRcdFx0XCJmb29cIixcbiIKLSJcdFx0 XHQxMjNcbiIKLSJcdFx0XSxcbiIKLSJcdFx0W1xuIgotIlx0XHRdXG4iCi0iXHRdXG4iCi0ifVxu IjsKLXN0YXRpYyBjb25zdCBjaGFyICpqc29uX25lc3RlZF9hcnJheV9qc29uX2NvbXBhY3QgPQot InsiCi0JIlsiCi0JCSJbIgotCQkJIjEyMywiCi0JCQkiXCJmb29cIiwiCi0JCQkiMTIzLCIKLQkJ CSJcImZvb1wiIgotCQkiXSwiCi0JCSJbIgotCQkJIjEyMyIKLQkJIl0sIgotCQkiWyIKLQkJCSJc ImZvb1wiLCIKLQkJCSIxMjMiCi0JCSJdLCIKLQkJIlsiCi0JCSJdIgotCSJdIgotIn0iOwotc3Rh dGljIGNvbnN0IGNoYXIgKmpzb25fbmVzdGVkX2FycmF5X3RhYmxlID0gIiI7Ci0KLXN0YXRpYyB2 b2lkCi1lbWl0X3RhYmxlX3JvdyhlbWl0dGVyX3QgKmVtaXR0ZXIpIHsKLQllbWl0dGVyX2JlZ2lu KGVtaXR0ZXIpOwotCWVtaXR0ZXJfcm93X3Qgcm93OwotCWVtaXR0ZXJfY29sX3QgYWJjID0ge2Vt aXR0ZXJfanVzdGlmeV9sZWZ0LCAxMCwgZW1pdHRlcl90eXBlX3RpdGxlLCB7MH0sIHswLCAwfX07 Ci0JYWJjLnN0cl92YWwgPSAiQUJDIHRpdGxlIjsKLQllbWl0dGVyX2NvbF90IGRlZiA9IHtlbWl0 dGVyX2p1c3RpZnlfcmlnaHQsIDE1LCBlbWl0dGVyX3R5cGVfdGl0bGUsIHswfSwgezAsIDB9fTsK LQlkZWYuc3RyX3ZhbCA9ICJERUYgdGl0bGUiOwotCWVtaXR0ZXJfY29sX3QgZ2hpID0ge2VtaXR0 ZXJfanVzdGlmeV9yaWdodCwgNSwgZW1pdHRlcl90eXBlX3RpdGxlLCB7MH0sIHswLCAwfX07Ci0J Z2hpLnN0cl92YWwgPSAiR0hJIjsKLQotCWVtaXR0ZXJfcm93X2luaXQoJnJvdyk7Ci0JZW1pdHRl cl9jb2xfaW5pdCgmYWJjLCAmcm93KTsKLQllbWl0dGVyX2NvbF9pbml0KCZkZWYsICZyb3cpOwot CWVtaXR0ZXJfY29sX2luaXQoJmdoaSwgJnJvdyk7Ci0KLQllbWl0dGVyX3RhYmxlX3JvdyhlbWl0 dGVyLCAmcm93KTsKLQotCWFiYy50eXBlID0gZW1pdHRlcl90eXBlX2ludDsKLQlkZWYudHlwZSA9 IGVtaXR0ZXJfdHlwZV9ib29sOwotCWdoaS50eXBlID0gZW1pdHRlcl90eXBlX2ludDsKLQotCWFi Yy5pbnRfdmFsID0gMTIzOwotCWRlZi5ib29sX3ZhbCA9IHRydWU7Ci0JZ2hpLmludF92YWwgPSA0 NTY7Ci0JZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7Ci0KLQlhYmMuaW50X3ZhbCA9 IDc4OTsKLQlkZWYuYm9vbF92YWwgPSBmYWxzZTsKLQlnaGkuaW50X3ZhbCA9IDEwMTE7Ci0JZW1p dHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7Ci0KLQlhYmMudHlwZSA9IGVtaXR0ZXJfdHlw ZV9zdHJpbmc7Ci0JYWJjLnN0cl92YWwgPSAiYSBzdHJpbmciOwotCWRlZi5ib29sX3ZhbCA9IGZh bHNlOwotCWdoaS50eXBlID0gZW1pdHRlcl90eXBlX3RpdGxlOwotCWdoaS5zdHJfdmFsID0gImdo aSI7Ci0JZW1pdHRlcl90YWJsZV9yb3coZW1pdHRlciwgJnJvdyk7Ci0KLQllbWl0dGVyX2VuZChl bWl0dGVyKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnRhYmxlX3Jvd19qc29uID0KLSJ7XG4i Ci0ifVxuIjsKLXN0YXRpYyBjb25zdCBjaGFyICp0YWJsZV9yb3dfanNvbl9jb21wYWN0ID0gInt9 IjsKLXN0YXRpYyBjb25zdCBjaGFyICp0YWJsZV9yb3dfdGFibGUgPQotIkFCQyB0aXRsZSAgICAg ICBERUYgdGl0bGUgIEdISVxuIgotIjEyMyAgICAgICAgICAgICAgICAgIHRydWUgIDQ1NlxuIgot Ijc4OSAgICAgICAgICAgICAgICAgZmFsc2UgMTAxMVxuIgotIlwiYSBzdHJpbmdcIiAgICAgICAg ICBmYWxzZSAgZ2hpXG4iOwotCi0jZGVmaW5lIEdFTkVSQVRFX1RFU1QoZmVhdHVyZSkJCQkJCVwK LVRFU1RfQkVHSU4odGVzdF8jI2ZlYXR1cmUpIHsJCQkJCVwKLQlleHBlY3RfZW1pdF9vdXRwdXQo ZW1pdF8jI2ZlYXR1cmUsIGZlYXR1cmUjI19qc29uLAlcCi0JICAgIGZlYXR1cmUjI19qc29uX2Nv bXBhY3QsIGZlYXR1cmUjI190YWJsZSk7CQlcCi19CQkJCQkJCQlcCi1URVNUX0VORAotCi1HRU5F UkFURV9URVNUKGRpY3QpCi1HRU5FUkFURV9URVNUKHRhYmxlX3ByaW50ZikKLUdFTkVSQVRFX1RF U1QobmVzdGVkX2RpY3QpCi1HRU5FUkFURV9URVNUKHR5cGVzKQotR0VORVJBVEVfVEVTVChtb2Rh bCkKLUdFTkVSQVRFX1RFU1QoanNvbl9hcnJheSkKLUdFTkVSQVRFX1RFU1QoanNvbl9uZXN0ZWRf YXJyYXkpCi1HRU5FUkFURV9URVNUKHRhYmxlX3JvdykKLQotaW50Ci1tYWluKHZvaWQpIHsKLQly ZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0X2RpY3QsCi0JICAgIHRlc3RfdGFi bGVfcHJpbnRmLAotCSAgICB0ZXN0X25lc3RlZF9kaWN0LAotCSAgICB0ZXN0X3R5cGVzLAotCSAg ICB0ZXN0X21vZGFsLAotCSAgICB0ZXN0X2pzb25fYXJyYXksCi0JICAgIHRlc3RfanNvbl9uZXN0 ZWRfYXJyYXksCi0JICAgIHRlc3RfdGFibGVfcm93KTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZXh0ZW50X3F1YW50aXpl LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZXh0 ZW50X3F1YW50aXplLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YmJkNTMuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L2V4dGVudF9xdWFudGl6ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLSNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotVEVTVF9CRUdJTih0ZXN0X3NtYWxsX2V4 dGVudF9zaXplKSB7Ci0JdW5zaWduZWQgbmJpbnMsIGk7Ci0Jc2l6ZV90IHN6LCBleHRlbnRfc2l6 ZTsKLQlzaXplX3QgbWliWzRdOwotCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVv ZihzaXplX3QpOwotCi0JLyoKLQkgKiBJdGVyYXRlIG92ZXIgYWxsIHNtYWxsIHNpemUgY2xhc3Nl cywgZ2V0IHRoZWlyIGV4dGVudCBzaXplcywgYW5kCi0JICogdmVyaWZ5IHRoYXQgdGhlIHF1YW50 aXplZCBzaXplIGlzIHRoZSBzYW1lIGFzIHRoZSBleHRlbnQgc2l6ZS4KLQkgKi8KLQotCXN6ID0g c2l6ZW9mKHVuc2lnbmVkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmJpbnMiLCAo dm9pZCAqKSZuYmlucywgJnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0 bCBmYWlsdXJlIik7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYXMuYmlu LjAuc2xhYl9zaXplIiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0 bG5hbWV0b21pYiBmYWlsdXJlIik7Ci0JZm9yIChpID0gMDsgaSA8IG5iaW5zOyBpKyspIHsKLQkJ bWliWzJdID0gaTsKLQkJc3ogPSBzaXplb2Yoc2l6ZV90KTsKLQkJZXhwZWN0X2RfZXEobWFsbGN0 bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZleHRlbnRfc2l6ZSwgJnN6LAotCQkgICAgTlVM TCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYiBmYWlsdXJlIik7Ci0JCWV4cGVjdF96 dV9lcShleHRlbnRfc2l6ZSwKLQkJICAgIHN6X3Bzel9xdWFudGl6ZV9mbG9vcihleHRlbnRfc2l6 ZSksCi0JCSAgICAiU21hbGwgZXh0ZW50IHF1YW50aXphdGlvbiBzaG91bGQgYmUgYSBuby1vcCAi Ci0JCSAgICAiKGV4dGVudF9zaXplPSV6dSkiLCBleHRlbnRfc2l6ZSk7Ci0JCWV4cGVjdF96dV9l cShleHRlbnRfc2l6ZSwKLQkJICAgIHN6X3Bzel9xdWFudGl6ZV9jZWlsKGV4dGVudF9zaXplKSwK LQkJICAgICJTbWFsbCBleHRlbnQgcXVhbnRpemF0aW9uIHNob3VsZCBiZSBhIG5vLW9wICIKLQkJ ICAgICIoZXh0ZW50X3NpemU9JXp1KSIsIGV4dGVudF9zaXplKTsKLQl9Ci19Ci1URVNUX0VORAot Ci1URVNUX0JFR0lOKHRlc3RfbGFyZ2VfZXh0ZW50X3NpemUpIHsKLQlib29sIGNhY2hlX29ibGl2 aW91czsKLQl1bnNpZ25lZCBubGV4dGVudHMsIGk7Ci0Jc2l6ZV90IHN6LCBleHRlbnRfc2l6ZV9w cmV2LCBjZWlsX3ByZXY7Ci0Jc2l6ZV90IG1pYls0XTsKLQlzaXplX3QgbWlibGVuID0gc2l6ZW9m KG1pYikgLyBzaXplb2Yoc2l6ZV90KTsKLQotCS8qCi0JICogSXRlcmF0ZSBvdmVyIGFsbCBsYXJn ZSBzaXplIGNsYXNzZXMsIGdldCB0aGVpciBleHRlbnQgc2l6ZXMsIGFuZAotCSAqIHZlcmlmeSB0 aGF0IHRoZSBxdWFudGl6ZWQgc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZXh0ZW50IHNpemUuCi0J ICovCi0KLQlzeiA9IHNpemVvZihib29sKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJvcHQuY2Fj aGVfb2JsaXZpb3VzIiwgKHZvaWQgKikmY2FjaGVfb2JsaXZpb3VzLAotCSAgICAmc3osIE5VTEws IDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKLQotCXN6ID0gc2l6ZW9mKHVu c2lnbmVkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmxleHRlbnRzIiwgKHZvaWQg KikmbmxleHRlbnRzLCAmc3osIE5VTEwsCi0JICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3Rs IGZhaWx1cmUiKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hcy5sZXh0 ZW50LjAuc2l6ZSIsIG1pYiwgJm1pYmxlbiksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxu YW1ldG9taWIgZmFpbHVyZSIpOwotCWZvciAoaSA9IDA7IGkgPCBubGV4dGVudHM7IGkrKykgewot CQlzaXplX3QgbGV4dGVudF9zaXplLCBleHRlbnRfc2l6ZSwgZmxvb3IsIGNlaWw7Ci0KLQkJbWli WzJdID0gaTsKLQkJc3ogPSBzaXplb2Yoc2l6ZV90KTsKLQkJZXhwZWN0X2RfZXEobWFsbGN0bGJ5 bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZsZXh0ZW50X3NpemUsCi0JCSAgICAmc3osIE5VTEws IDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIgZmFpbHVyZSIpOwotCQlleHRlbnRfc2l6 ZSA9IGNhY2hlX29ibGl2aW91cyA/IGxleHRlbnRfc2l6ZSArIFBBR0UgOgotCQkgICAgbGV4dGVu dF9zaXplOwotCQlmbG9vciA9IHN6X3Bzel9xdWFudGl6ZV9mbG9vcihleHRlbnRfc2l6ZSk7Ci0J CWNlaWwgPSBzel9wc3pfcXVhbnRpemVfY2VpbChleHRlbnRfc2l6ZSk7Ci0KLQkJZXhwZWN0X3p1 X2VxKGV4dGVudF9zaXplLCBmbG9vciwKLQkJICAgICJFeHRlbnQgcXVhbnRpemF0aW9uIHNob3Vs ZCBiZSBhIG5vLW9wIGZvciBwcmVjaXNlIHNpemUgIgotCQkgICAgIihsZXh0ZW50X3NpemU9JXp1 LCBleHRlbnRfc2l6ZT0lenUpIiwgbGV4dGVudF9zaXplLAotCQkgICAgZXh0ZW50X3NpemUpOwot CQlleHBlY3RfenVfZXEoZXh0ZW50X3NpemUsIGNlaWwsCi0JCSAgICAiRXh0ZW50IHF1YW50aXph dGlvbiBzaG91bGQgYmUgYSBuby1vcCBmb3IgcHJlY2lzZSBzaXplICIKLQkJICAgICIobGV4dGVu dF9zaXplPSV6dSwgZXh0ZW50X3NpemU9JXp1KSIsIGxleHRlbnRfc2l6ZSwKLQkJICAgIGV4dGVu dF9zaXplKTsKLQotCQlpZiAoaSA+IDApIHsKLQkJCWV4cGVjdF96dV9lcShleHRlbnRfc2l6ZV9w cmV2LAotCQkJICAgIHN6X3Bzel9xdWFudGl6ZV9mbG9vcihleHRlbnRfc2l6ZSAtIFBBR0UpLAot CQkJICAgICJGbG9vciBzaG91bGQgYmUgYSBwcmVjaXNlIHNpemUiKTsKLQkJCWlmIChleHRlbnRf c2l6ZV9wcmV2IDwgY2VpbF9wcmV2KSB7Ci0JCQkJZXhwZWN0X3p1X2VxKGNlaWxfcHJldiwgZXh0 ZW50X3NpemUsCi0JCQkJICAgICJDZWlsaW5nIHNob3VsZCBiZSBhIHByZWNpc2Ugc2l6ZSAiCi0J CQkJICAgICIoZXh0ZW50X3NpemVfcHJldj0lenUsIGNlaWxfcHJldj0lenUsICIKLQkJCQkgICAg ImV4dGVudF9zaXplPSV6dSkiLCBleHRlbnRfc2l6ZV9wcmV2LAotCQkJCSAgICBjZWlsX3ByZXYs IGV4dGVudF9zaXplKTsKLQkJCX0KLQkJfQotCQlpZiAoaSArIDEgPCBubGV4dGVudHMpIHsKLQkJ CWV4dGVudF9zaXplX3ByZXYgPSBmbG9vcjsKLQkJCWNlaWxfcHJldiA9IHN6X3Bzel9xdWFudGl6 ZV9jZWlsKGV4dGVudF9zaXplICsKLQkJCSAgICBQQUdFKTsKLQkJfQotCX0KLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9tb25vdG9uaWMpIHsKLSNkZWZpbmUgU1pfTUFYCVpVKDQgKiAx MDI0ICogMTAyNCkKLQl1bnNpZ25lZCBpOwotCXNpemVfdCBmbG9vcl9wcmV2LCBjZWlsX3ByZXY7 Ci0KLQlmbG9vcl9wcmV2ID0gMDsKLQljZWlsX3ByZXYgPSAwOwotCWZvciAoaSA9IDE7IGkgPD0g U1pfTUFYID4+IExHX1BBR0U7IGkrKykgewotCQlzaXplX3QgZXh0ZW50X3NpemUsIGZsb29yLCBj ZWlsOwotCi0JCWV4dGVudF9zaXplID0gaSA8PCBMR19QQUdFOwotCQlmbG9vciA9IHN6X3Bzel9x dWFudGl6ZV9mbG9vcihleHRlbnRfc2l6ZSk7Ci0JCWNlaWwgPSBzel9wc3pfcXVhbnRpemVfY2Vp bChleHRlbnRfc2l6ZSk7Ci0KLQkJZXhwZWN0X3p1X2xlKGZsb29yLCBleHRlbnRfc2l6ZSwKLQkJ ICAgICJGbG9vciBzaG91bGQgYmUgPD0gKGZsb29yPSV6dSwgZXh0ZW50X3NpemU9JXp1LCBjZWls PSV6dSkiLAotCQkgICAgZmxvb3IsIGV4dGVudF9zaXplLCBjZWlsKTsKLQkJZXhwZWN0X3p1X2dl KGNlaWwsIGV4dGVudF9zaXplLAotCQkgICAgIkNlaWxpbmcgc2hvdWxkIGJlID49IChmbG9vcj0l enUsIGV4dGVudF9zaXplPSV6dSwgIgotCQkgICAgImNlaWw9JXp1KSIsIGZsb29yLCBleHRlbnRf c2l6ZSwgY2VpbCk7Ci0KLQkJZXhwZWN0X3p1X2xlKGZsb29yX3ByZXYsIGZsb29yLCAiRmxvb3Ig c2hvdWxkIGJlIG1vbm90b25pYyAiCi0JCSAgICAiKGZsb29yX3ByZXY9JXp1LCBmbG9vcj0lenUs IGV4dGVudF9zaXplPSV6dSwgY2VpbD0lenUpIiwKLQkJICAgIGZsb29yX3ByZXYsIGZsb29yLCBl eHRlbnRfc2l6ZSwgY2VpbCk7Ci0JCWV4cGVjdF96dV9sZShjZWlsX3ByZXYsIGNlaWwsICJDZWls aW5nIHNob3VsZCBiZSBtb25vdG9uaWMgIgotCQkgICAgIihmbG9vcj0lenUsIGV4dGVudF9zaXpl PSV6dSwgY2VpbF9wcmV2PSV6dSwgY2VpbD0lenUpIiwKLQkJICAgIGZsb29yLCBleHRlbnRfc2l6 ZSwgY2VpbF9wcmV2LCBjZWlsKTsKLQotCQlmbG9vcl9wcmV2ID0gZmxvb3I7Ci0JCWNlaWxfcHJl diA9IGNlaWw7Ci0JfQotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4g dGVzdCgKLQkgICAgdGVzdF9zbWFsbF9leHRlbnRfc2l6ZSwKLQkgICAgdGVzdF9sYXJnZV9leHRl bnRfc2l6ZSwKLQkgICAgdGVzdF9tb25vdG9uaWMpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9mYi5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2ZiLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGFkNzJjNzUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2ZiLmMKKysrIC9kZXYvbnVsbApAQCAt MSw5NTQgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvZmIuaCIKLSNpbmNsdWRlICJ0ZXN0L25iaXRzLmgiCi0KLXN0 YXRpYyB2b2lkCi1kb190ZXN0X2luaXQoc2l6ZV90IG5iaXRzKSB7Ci0Jc2l6ZV90IHN6ID0gRkJf TkdST1VQUyhuYml0cykgKiBzaXplb2YoZmJfZ3JvdXBfdCk7Ci0JZmJfZ3JvdXBfdCAqZmIgPSBt YWxsb2Moc3opOwotCS8qIEp1bmsgZmIncyBjb250ZW50cy4gKi8KLQltZW1zZXQoZmIsIDk5LCBz eik7Ci0JZmJfaW5pdChmYiwgbmJpdHMpOwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7 IGkrKykgewotCQlleHBlY3RfZmFsc2UoZmJfZ2V0KGZiLCBuYml0cywgaSksCi0JCSAgICAiYml0 bWFwIHNob3VsZCBzdGFydCBlbXB0eSIpOwotCX0KLQlmcmVlKGZiKTsKLX0KLQotVEVTVF9CRUdJ Tih0ZXN0X2ZiX2luaXQpIHsKLSNkZWZpbmUgTkIobmJpdHMpIFwKLQlkb190ZXN0X2luaXQobmJp dHMpOwotCU5CSVRTX1RBQgotI3VuZGVmIE5CCi19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAot ZG9fdGVzdF9nZXRfc2V0X3Vuc2V0KHNpemVfdCBuYml0cykgewotCXNpemVfdCBzeiA9IEZCX05H Uk9VUFMobmJpdHMpICogc2l6ZW9mKGZiX2dyb3VwX3QpOwotCWZiX2dyb3VwX3QgKmZiID0gbWFs bG9jKHN6KTsKLQlmYl9pbml0KGZiLCBuYml0cyk7Ci0JLyogU2V0IHRoZSBiaXRzIGRpdmlzaWJs ZSBieSAzLiAqLwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgewotCQlpZiAo aSAlIDMgPT0gMCkgewotCQkJZmJfc2V0KGZiLCBuYml0cywgaSk7Ci0JCX0KLQl9Ci0JLyogQ2hl Y2sgdGhlbS4gKi8KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJZXhw ZWN0X2JfZXEoaSAlIDMgPT0gMCwgZmJfZ2V0KGZiLCBuYml0cywgaSksCi0JCSAgICAiVW5leHBl Y3RlZCBiaXQgYXQgcG9zaXRpb24gJXp1IiwgaSk7Ci0JfQotCS8qIFVuc2V0IHRob3NlIGRpdmlz aWJsZSBieSA1LiAqLwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgewotCQlp ZiAoaSAlIDUgPT0gMCkgewotCQkJZmJfdW5zZXQoZmIsIG5iaXRzLCBpKTsKLQkJfQotCX0KLQkv KiBDaGVjayB0aGVtLiAqLwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgewot CQlleHBlY3RfYl9lcShpICUgMyA9PSAwICYmIGkgJSA1ICE9IDAsIGZiX2dldChmYiwgbmJpdHMs IGkpLAotCQkgICAgIlVuZXhwZWN0ZWQgYml0IGF0IHBvc2l0aW9uICV6dSIsIGkpOwotCX0KLQlm cmVlKGZiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2dldF9zZXRfdW5zZXQpIHsKLSNkZWZpbmUg TkIobmJpdHMpIFwKLQlkb190ZXN0X2dldF9zZXRfdW5zZXQobmJpdHMpOwotCU5CSVRTX1RBQgot I3VuZGVmIE5CCi19Ci1URVNUX0VORAotCi1zdGF0aWMgc3NpemVfdAotZmluZF8zXzVfY29tcHV0 ZShzc2l6ZV90IGksIHNpemVfdCBuYml0cywgYm9vbCBiaXQsIGJvb2wgZm9yd2FyZCkgewotCWZv cig7IGkgPCAoc3NpemVfdCluYml0cyAmJiBpID49IDA7IGkgKz0gKGZvcndhcmQgPyAxIDogLTEp KSB7Ci0JCWJvb2wgZXhwZWN0ZWRfYml0ID0gaSAlIDMgPT0gMCB8fCBpICUgNSA9PSAwOwotCQlp ZiAoZXhwZWN0ZWRfYml0ID09IGJpdCkgewotCQkJcmV0dXJuIGk7Ci0JCX0KLQl9Ci0JcmV0dXJu IGZvcndhcmQgPyAoc3NpemVfdCluYml0cyA6IChzc2l6ZV90KS0xOwotfQotCi1zdGF0aWMgdm9p ZAotZG9fdGVzdF9zZWFyY2hfc2ltcGxlKHNpemVfdCBuYml0cykgewotCXNpemVfdCBzeiA9IEZC X05HUk9VUFMobmJpdHMpICogc2l6ZW9mKGZiX2dyb3VwX3QpOwotCWZiX2dyb3VwX3QgKmZiID0g bWFsbG9jKHN6KTsKLQlmYl9pbml0KGZiLCBuYml0cyk7Ci0KLQkvKiBXZSBwaWNrIG11bHRpcGxl cyBvZiAzIG9yIDUuICovCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7Ci0J CWlmIChpICUgMyA9PSAwKSB7Ci0JCQlmYl9zZXQoZmIsIG5iaXRzLCBpKTsKLQkJfQotCQkvKiBU aGlzIHRlc3RzIGRvdWJsZS1zZXR0aW5nIGEgbGl0dGxlLCB0b28uICovCi0JCWlmIChpICUgNSA9 PSAwKSB7Ci0JCQlmYl9zZXQoZmIsIG5iaXRzLCBpKTsKLQkJfQotCX0KLQlmb3IgKHNpemVfdCBp ID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJc2l6ZV90IGZmc19jb21wdXRlID0gZmluZF8zXzVf Y29tcHV0ZShpLCBuYml0cywgdHJ1ZSwgdHJ1ZSk7Ci0JCXNpemVfdCBmZnNfc2VhcmNoID0gZmJf ZmZzKGZiLCBuYml0cywgaSk7Ci0JCWV4cGVjdF96dV9lcShmZnNfY29tcHV0ZSwgZmZzX3NlYXJj aCwgImZmcyBtaXNtYXRjaCBhdCAlenUiLCBpKTsKLQotCQlzc2l6ZV90IGZsc19jb21wdXRlID0g ZmluZF8zXzVfY29tcHV0ZShpLCBuYml0cywgdHJ1ZSwgZmFsc2UpOwotCQlzaXplX3QgZmxzX3Nl YXJjaCA9IGZiX2ZscyhmYiwgbmJpdHMsIGkpOwotCQlleHBlY3RfenVfZXEoZmxzX2NvbXB1dGUs IGZsc19zZWFyY2gsICJmbHMgbWlzbWF0Y2ggYXQgJXp1IiwgaSk7Ci0KLQkJc2l6ZV90IGZmdV9j b21wdXRlID0gZmluZF8zXzVfY29tcHV0ZShpLCBuYml0cywgZmFsc2UsIHRydWUpOwotCQlzaXpl X3QgZmZ1X3NlYXJjaCA9IGZiX2ZmdShmYiwgbmJpdHMsIGkpOwotCQlleHBlY3RfenVfZXEoZmZ1 X2NvbXB1dGUsIGZmdV9zZWFyY2gsICJmZnUgbWlzbWF0Y2ggYXQgJXp1IiwgaSk7Ci0KLQkJc2l6 ZV90IGZsdV9jb21wdXRlID0gZmluZF8zXzVfY29tcHV0ZShpLCBuYml0cywgZmFsc2UsIGZhbHNl KTsKLQkJc2l6ZV90IGZsdV9zZWFyY2ggPSBmYl9mbHUoZmIsIG5iaXRzLCBpKTsKLQkJZXhwZWN0 X3p1X2VxKGZsdV9jb21wdXRlLCBmbHVfc2VhcmNoLCAiZmx1IG1pc21hdGNoIGF0ICV6dSIsIGkp OwotCX0KLQotCWZyZWUoZmIpOwotfQotCi1URVNUX0JFR0lOKHRlc3Rfc2VhcmNoX3NpbXBsZSkg ewotI2RlZmluZSBOQihuYml0cykgXAotCWRvX3Rlc3Rfc2VhcmNoX3NpbXBsZShuYml0cyk7Ci0J TkJJVFNfVEFCCi0jdW5kZWYgTkIKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1leHBlY3Rf ZXhoYXVzdGl2ZV9yZXN1bHRzKGZiX2dyb3VwX3QgKm1vc3RseV9mdWxsLCBmYl9ncm91cF90ICpt b3N0bHlfZW1wdHksCi0gICAgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3BlY2lhbF9iaXQsIHNpemVf dCBwb3NpdGlvbikgewotCWlmIChwb3NpdGlvbiA8IHNwZWNpYWxfYml0KSB7Ci0JCWV4cGVjdF96 dV9lcShzcGVjaWFsX2JpdCwgZmJfZmZzKG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwK LQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0J CWV4cGVjdF96ZF9lcSgtMSwgZmJfZmxzKG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwK LQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0J CWV4cGVjdF96dV9lcShwb3NpdGlvbiwgZmJfZmZ1KG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0 aW9uKSwKLQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2Jp dCk7Ci0JCWV4cGVjdF96ZF9lcShwb3NpdGlvbiwgZmJfZmx1KG1vc3RseV9lbXB0eSwgbmJpdHMs IHBvc2l0aW9uKSwKLQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVj aWFsX2JpdCk7Ci0KLQkJZXhwZWN0X3p1X2VxKHBvc2l0aW9uLCBmYl9mZnMobW9zdGx5X2Z1bGws IG5iaXRzLCBwb3NpdGlvbiksCi0JCSAgICAibWlzbWF0Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlv biwgc3BlY2lhbF9iaXQpOwotCQlleHBlY3RfemRfZXEocG9zaXRpb24sIGZiX2Zscyhtb3N0bHlf ZnVsbCwgbmJpdHMsIHBvc2l0aW9uKSwKLQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBv c2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0JCWV4cGVjdF96dV9lcShzcGVjaWFsX2JpdCwgZmJfZmZ1 KG1vc3RseV9mdWxsLCBuYml0cywgcG9zaXRpb24pLAotCQkgICAgIm1pc21hdGNoIGF0ICV6dSwg JXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0KTsKLQkJZXhwZWN0X3pkX2VxKC0xLCBmYl9mbHUo bW9zdGx5X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiksCi0JCSAgICAibWlzbWF0Y2ggYXQgJXp1LCAl enUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOwotCX0gZWxzZSBpZiAocG9zaXRpb24gPT0gc3Bl Y2lhbF9iaXQpIHsKLQkJZXhwZWN0X3p1X2VxKHNwZWNpYWxfYml0LCBmYl9mZnMobW9zdGx5X2Vt cHR5LCBuYml0cywgcG9zaXRpb24pLAotCQkgICAgIm1pc21hdGNoIGF0ICV6dSwgJXp1IiwgcG9z aXRpb24sIHNwZWNpYWxfYml0KTsKLQkJZXhwZWN0X3pkX2VxKHNwZWNpYWxfYml0LCBmYl9mbHMo bW9zdGx5X2VtcHR5LCBuYml0cywgcG9zaXRpb24pLAotCQkgICAgIm1pc21hdGNoIGF0ICV6dSwg JXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0KTsKLQkJZXhwZWN0X3p1X2VxKHBvc2l0aW9uICsg MSwgZmJfZmZ1KG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKLQkJICAgICJtaXNtYXRj aCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0JCWV4cGVjdF96ZF9lcShw b3NpdGlvbiAtIDEsIGZiX2ZsdShtb3N0bHlfZW1wdHksIG5iaXRzLAotCQkgICAgcG9zaXRpb24p LCAibWlzbWF0Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOwotCi0JCWV4 cGVjdF96dV9lcShwb3NpdGlvbiArIDEsIGZiX2Zmcyhtb3N0bHlfZnVsbCwgbmJpdHMsIHBvc2l0 aW9uKSwKLQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2Jp dCk7Ci0JCWV4cGVjdF96ZF9lcShwb3NpdGlvbiAtIDEsIGZiX2Zscyhtb3N0bHlfZnVsbCwgbmJp dHMsCi0JCSAgICBwb3NpdGlvbiksICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBz cGVjaWFsX2JpdCk7Ci0JCWV4cGVjdF96dV9lcShwb3NpdGlvbiwgZmJfZmZ1KG1vc3RseV9mdWxs LCBuYml0cywgcG9zaXRpb24pLAotCQkgICAgIm1pc21hdGNoIGF0ICV6dSwgJXp1IiwgcG9zaXRp b24sIHNwZWNpYWxfYml0KTsKLQkJZXhwZWN0X3pkX2VxKHBvc2l0aW9uLCBmYl9mbHUobW9zdGx5 X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiksCi0JCSAgICAibWlzbWF0Y2ggYXQgJXp1LCAlenUiLCBw b3NpdGlvbiwgc3BlY2lhbF9iaXQpOwotCX0gZWxzZSB7Ci0JCS8qIHBvc2l0aW9uID4gc3BlY2lh bF9iaXQuICovCi0JCWV4cGVjdF96dV9lcShuYml0cywgZmJfZmZzKG1vc3RseV9lbXB0eSwgbmJp dHMsIHBvc2l0aW9uKSwKLQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBz cGVjaWFsX2JpdCk7Ci0JCWV4cGVjdF96ZF9lcShzcGVjaWFsX2JpdCwgZmJfZmxzKG1vc3RseV9l bXB0eSwgbmJpdHMsCi0JCSAgICBwb3NpdGlvbiksICJtaXNtYXRjaCBhdCAlenUsICV6dSIsIHBv c2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0JCWV4cGVjdF96dV9lcShwb3NpdGlvbiwgZmJfZmZ1KG1v c3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKLQkJICAgICJtaXNtYXRjaCBhdCAlenUsICV6 dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0JCWV4cGVjdF96ZF9lcShwb3NpdGlvbiwgZmJf Zmx1KG1vc3RseV9lbXB0eSwgbmJpdHMsIHBvc2l0aW9uKSwKLQkJICAgICJtaXNtYXRjaCBhdCAl enUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0KLQkJZXhwZWN0X3p1X2VxKHBvc2l0 aW9uLCBmYl9mZnMobW9zdGx5X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiksCi0JCSAgICAibWlzbWF0 Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOwotCQlleHBlY3RfemRfZXEo cG9zaXRpb24sIGZiX2Zscyhtb3N0bHlfZnVsbCwgbmJpdHMsIHBvc2l0aW9uKSwKLQkJICAgICJt aXNtYXRjaCBhdCAlenUsICV6dSIsIHBvc2l0aW9uLCBzcGVjaWFsX2JpdCk7Ci0JCWV4cGVjdF96 dV9lcShuYml0cywgZmJfZmZ1KG1vc3RseV9mdWxsLCBuYml0cywgcG9zaXRpb24pLAotCQkgICAg Im1pc21hdGNoIGF0ICV6dSwgJXp1IiwgcG9zaXRpb24sIHNwZWNpYWxfYml0KTsKLQkJZXhwZWN0 X3pkX2VxKHNwZWNpYWxfYml0LCBmYl9mbHUobW9zdGx5X2Z1bGwsIG5iaXRzLCBwb3NpdGlvbiks Ci0JCSAgICAibWlzbWF0Y2ggYXQgJXp1LCAlenUiLCBwb3NpdGlvbiwgc3BlY2lhbF9iaXQpOwot CX0KLX0KLQotc3RhdGljIHZvaWQKLWRvX3Rlc3Rfc2VhcmNoX2V4aGF1c3RpdmUoc2l6ZV90IG5i aXRzKSB7Ci0JLyogVGhpcyB0ZXN0IGlzIHF1YWRyYXRpYzsgbGV0J3Mgbm90IGdldCB0b28gYmln LiAqLwotCWlmIChuYml0cyA+IDEwMDApIHsKLQkJcmV0dXJuOwotCX0KLQlzaXplX3Qgc3ogPSBG Ql9OR1JPVVBTKG5iaXRzKSAqIHNpemVvZihmYl9ncm91cF90KTsKLQlmYl9ncm91cF90ICplbXB0 eSA9IG1hbGxvYyhzeik7Ci0JZmJfaW5pdChlbXB0eSwgbmJpdHMpOwotCWZiX2dyb3VwX3QgKmZ1 bGwgPSBtYWxsb2Moc3opOwotCWZiX2luaXQoZnVsbCwgbmJpdHMpOwotCWZiX3NldF9yYW5nZShm dWxsLCBuYml0cywgMCwgbmJpdHMpOwotCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsg aSsrKSB7Ci0JCWZiX3NldChlbXB0eSwgbmJpdHMsIGkpOwotCQlmYl91bnNldChmdWxsLCBuYml0 cywgaSk7Ci0KLQkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBuYml0czsgaisrKSB7Ci0JCQlleHBl Y3RfZXhoYXVzdGl2ZV9yZXN1bHRzKGZ1bGwsIGVtcHR5LCBuYml0cywgaSwgaik7Ci0JCX0KLQkJ ZmJfdW5zZXQoZW1wdHksIG5iaXRzLCBpKTsKLQkJZmJfc2V0KGZ1bGwsIG5iaXRzLCBpKTsKLQl9 Ci0KLQlmcmVlKGVtcHR5KTsKLQlmcmVlKGZ1bGwpOwotfQotCi1URVNUX0JFR0lOKHRlc3Rfc2Vh cmNoX2V4aGF1c3RpdmUpIHsKLSNkZWZpbmUgTkIobmJpdHMpIFwKLQlkb190ZXN0X3NlYXJjaF9l eGhhdXN0aXZlKG5iaXRzKTsKLQlOQklUU19UQUIKLSN1bmRlZiBOQgotfQotVEVTVF9FTkQKLQot VEVTVF9CRUdJTih0ZXN0X3JhbmdlX3NpbXBsZSkgewotCS8qCi0JICogSnVzdCBwaWNrIGEgY29u c3RhbnQgYmlnIGVub3VnaCB0byBoYXZlIG5vbnRyaXZpYWwgbWlkZGxlIHNpemVzLCBhbmQKLQkg KiBiaWcgZW5vdWdoIHRoYXQgdXNhZ2VzIG9mIHRoaW5ncyBsaWtlIHdlaXJkbnVtIChiZWxvdykg bmVhciB0aGUKLQkgKiBiZWdpbm5pbmcgZml0IGNvbWZvcnRhYmx5IGludG8gdGhlIGJlZ2lubmlu ZyBvZiB0aGUgYml0bWFwLgotCSAqLwotCXNpemVfdCBuYml0cyA9IDY0ICogMTA7Ci0Jc2l6ZV90 IG5ncm91cHMgPSBGQl9OR1JPVVBTKG5iaXRzKTsKLQlmYl9ncm91cF90ICpmYiA9IG1hbGxvYyhz aXplb2YoZmJfZ3JvdXBfdCkgKiBuZ3JvdXBzKTsKLQlmYl9pbml0KGZiLCBuYml0cyk7Ci0JZm9y IChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7Ci0JCWlmIChpICUgMiA9PSAwKSB7Ci0J CQlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBpLCAxKTsKLQkJfQotCX0KLQlmb3IgKHNpemVfdCBp ID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJZXhwZWN0X2JfZXEoaSAlIDIgPT0gMCwgZmJfZ2V0 KGZiLCBuYml0cywgaSksCi0JCSAgICAibWlzbWF0Y2ggYXQgcG9zaXRpb24gJXp1IiwgaSk7Ci0J fQotCWZiX3NldF9yYW5nZShmYiwgbmJpdHMsIDAsIG5iaXRzIC8gMik7Ci0JZmJfdW5zZXRfcmFu Z2UoZmIsIG5iaXRzLCBuYml0cyAvIDIsIG5iaXRzIC8gMik7Ci0JZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBuYml0czsgaSsrKSB7Ci0JCWV4cGVjdF9iX2VxKGkgPCBuYml0cyAvIDIsIGZiX2dldChm YiwgbmJpdHMsIGkpLAotCQkgICAgIm1pc21hdGNoIGF0IHBvc2l0aW9uICV6dSIsIGkpOwotCX0K LQotCXN0YXRpYyBjb25zdCBzaXplX3Qgd2VpcmRudW0gPSA3OwotCWZiX3NldF9yYW5nZShmYiwg bmJpdHMsIDAsIG5iaXRzKTsKLQlmYl91bnNldF9yYW5nZShmYiwgbmJpdHMsIHdlaXJkbnVtLCBG Ql9HUk9VUF9CSVRTICsgd2VpcmRudW0pOwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmJpdHM7 IGkrKykgewotCQlleHBlY3RfYl9lcSg3IDw9IGkgJiYgaSA8PSAyICogd2VpcmRudW0gKyBGQl9H Uk9VUF9CSVRTIC0gMSwKLQkJICAgICFmYl9nZXQoZmIsIG5iaXRzLCBpKSwgIm1pc21hdGNoIGF0 IHBvc2l0aW9uICV6dSIsIGkpOwotCX0KLQlmcmVlKGZiKTsKLX0KLVRFU1RfRU5ECi0KLXN0YXRp YyB2b2lkCi1kb190ZXN0X2VtcHR5X2Z1bGxfZXhoYXVzdGl2ZShzaXplX3QgbmJpdHMpIHsKLQlz aXplX3Qgc3ogPSBGQl9OR1JPVVBTKG5iaXRzKSAqIHNpemVvZihmYl9ncm91cF90KTsKLQlmYl9n cm91cF90ICplbXB0eSA9IG1hbGxvYyhzeik7Ci0JZmJfaW5pdChlbXB0eSwgbmJpdHMpOwotCWZi X2dyb3VwX3QgKmZ1bGwgPSBtYWxsb2Moc3opOwotCWZiX2luaXQoZnVsbCwgbmJpdHMpOwotCWZi X3NldF9yYW5nZShmdWxsLCBuYml0cywgMCwgbmJpdHMpOwotCi0JZXhwZWN0X3RydWUoZmJfZnVs bChmdWxsLCBuYml0cyksICIiKTsKLQlleHBlY3RfZmFsc2UoZmJfZW1wdHkoZnVsbCwgbmJpdHMp LCAiIik7Ci0JZXhwZWN0X2ZhbHNlKGZiX2Z1bGwoZW1wdHksIG5iaXRzKSwgIiIpOwotCWV4cGVj dF90cnVlKGZiX2VtcHR5KGVtcHR5LCBuYml0cyksICIiKTsKLQotCWZvciAoc2l6ZV90IGkgPSAw OyBpIDwgbmJpdHM7IGkrKykgewotCQlmYl9zZXQoZW1wdHksIG5iaXRzLCBpKTsKLQkJZmJfdW5z ZXQoZnVsbCwgbmJpdHMsIGkpOwotCi0JCWV4cGVjdF9mYWxzZShmYl9lbXB0eShlbXB0eSwgbmJp dHMpLCAiZXJyb3IgYXQgYml0ICV6dSIsIGkpOwotCQlpZiAobmJpdHMgIT0gMSkgewotCQkJZXhw ZWN0X2ZhbHNlKGZiX2Z1bGwoZW1wdHksIG5iaXRzKSwKLQkJCSAgICAiZXJyb3IgYXQgYml0ICV6 dSIsIGkpOwotCQkJZXhwZWN0X2ZhbHNlKGZiX2VtcHR5KGZ1bGwsIG5iaXRzKSwKLQkJCSAgICAi ZXJyb3IgYXQgYml0ICV6dSIsIGkpOwotCQl9IGVsc2UgewotCQkJZXhwZWN0X3RydWUoZmJfZnVs bChlbXB0eSwgbmJpdHMpLAotCQkJICAgICJlcnJvciBhdCBiaXQgJXp1IiwgaSk7Ci0JCQlleHBl Y3RfdHJ1ZShmYl9lbXB0eShmdWxsLCBuYml0cyksCi0JCQkgICAgImVycm9yIGF0IGJpdCAlenUi LCBpKTsKLQkJfQotCQlleHBlY3RfZmFsc2UoZmJfZnVsbChmdWxsLCBuYml0cyksICJlcnJvciBh dCBiaXQgJXp1IiwgaSk7Ci0KLQkJZmJfdW5zZXQoZW1wdHksIG5iaXRzLCBpKTsKLQkJZmJfc2V0 KGZ1bGwsIG5iaXRzLCBpKTsKLQl9Ci0KLQlmcmVlKGVtcHR5KTsKLQlmcmVlKGZ1bGwpOwotfQot Ci1URVNUX0JFR0lOKHRlc3RfZW1wdHlfZnVsbCkgewotI2RlZmluZSBOQihuYml0cykgXAotCWRv X3Rlc3RfZW1wdHlfZnVsbF9leGhhdXN0aXZlKG5iaXRzKTsKLQlOQklUU19UQUIKLSN1bmRlZiBO QgotfQotVEVTVF9FTkQKLQotLyoKLSAqIFRoaXMgdGVzdHMgYm90aCBpdGVyX3JhbmdlIGFuZCB0 aGUgbG9uZ2VzdCByYW5nZSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcwotICogYnVpbHQgY2xvc2Vs eSBvbiB0b3Agb2YgaXQuCi0gKi8KLVRFU1RfQkVHSU4odGVzdF9pdGVyX3JhbmdlX3NpbXBsZSkg ewotCXNpemVfdCBzZXRfbGltaXQgPSAzMDsKLQlzaXplX3QgbmJpdHMgPSAxMDA7Ci0JZmJfZ3Jv dXBfdCBmYltGQl9OR1JPVVBTKDEwMCldOwotCi0JZmJfaW5pdChmYiwgbmJpdHMpOwotCi0JLyoK LQkgKiBGYWlsaW5nIHRvIGluaXRpYWxpemUgdGhlc2UgY2FuIGxlYWQgdG8gYnVpbGQgZmFpbHVy ZXMgd2l0aCAtV2FsbDsKLQkgKiB0aGUgY29tcGlsZXIgY2FuJ3QgcHJvdmUgdGhhdCB0aGV5J3Jl IHNldC4KLQkgKi8KLQlzaXplX3QgYmVnaW4gPSAoc2l6ZV90KS0xOwotCXNpemVfdCBsZW4gPSAo c2l6ZV90KS0xOwotCWJvb2wgcmVzdWx0OwotCi0JLyogQSBzZXQgb2YgY2hlY2tzIHdpdGggb25s eSB0aGUgZmlyc3Qgc2V0X2xpbWl0IGJpdHMgKnNldCouICovCi0JZmJfc2V0X3JhbmdlKGZiLCBu Yml0cywgMCwgc2V0X2xpbWl0KTsKLQlleHBlY3RfenVfZXEoc2V0X2xpbWl0LCBmYl9zcmFuZ2Vf bG9uZ2VzdChmYiwgbmJpdHMpLAotCSAgICAiSW5jb3JyZWN0IGxvbmdlc3Qgc2V0IHJhbmdlIik7 Ci0JZXhwZWN0X3p1X2VxKG5iaXRzIC0gc2V0X2xpbWl0LCBmYl91cmFuZ2VfbG9uZ2VzdChmYiwg bmJpdHMpLAotCSAgICAiSW5jb3JyZWN0IGxvbmdlc3QgdW5zZXQgcmFuZ2UiKTsKLQlmb3IgKHNp emVfdCBpID0gMDsgaSA8IHNldF9saW1pdDsgaSsrKSB7Ci0JCXJlc3VsdCA9IGZiX3NyYW5nZV9p dGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsKLQkJZXhwZWN0X3RydWUocmVzdWx0LCAi U2hvdWxkIGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUiLCBpKTsKLQkJZXhwZWN0X3p1X2VxKGks IGJlZ2luLCAiSW5jb3JyZWN0IGJlZ2luIGF0ICV6dSIsIGkpOwotCQlleHBlY3RfenVfZXEoc2V0 X2xpbWl0IC0gaSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKLQotCQlyZXN1bHQg PSBmYl91cmFuZ2VfaXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwgJmxlbik7Ci0JCWV4cGVjdF90 cnVlKHJlc3VsdCwgIlNob3VsZCBoYXZlIGZvdW5kIGEgcmFuZ2UgYXQgJXp1IiwgaSk7Ci0JCWV4 cGVjdF96dV9lcShzZXRfbGltaXQsIGJlZ2luLCAiSW5jb3JyZWN0IGJlZ2luIGF0ICV6dSIsIGkp OwotCQlleHBlY3RfenVfZXEobmJpdHMgLSBzZXRfbGltaXQsIGxlbiwgIkluY29ycmVjdCBsZW4g YXQgJXp1IiwgaSk7Ci0KLQkJcmVzdWx0ID0gZmJfc3JhbmdlX3JpdGVyKGZiLCBuYml0cywgaSwg JmJlZ2luLCAmbGVuKTsKLQkJZXhwZWN0X3RydWUocmVzdWx0LCAiU2hvdWxkIGhhdmUgZm91bmQg YSByYW5nZSBhdCAlenUiLCBpKTsKLQkJZXhwZWN0X3p1X2VxKDAsIGJlZ2luLCAiSW5jb3JyZWN0 IGJlZ2luIGF0ICV6dSIsIGkpOwotCQlleHBlY3RfenVfZXEoaSArIDEsIGxlbiwgIkluY29ycmVj dCBsZW4gYXQgJXp1IiwgaSk7Ci0KLQkJcmVzdWx0ID0gZmJfdXJhbmdlX3JpdGVyKGZiLCBuYml0 cywgaSwgJmJlZ2luLCAmbGVuKTsKLQkJZXhwZWN0X2ZhbHNlKHJlc3VsdCwgIlNob3VsZCBub3Qg aGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOwotCX0KLQlmb3IgKHNpemVfdCBpID0gc2V0 X2xpbWl0OyBpIDwgbmJpdHM7IGkrKykgewotCQlyZXN1bHQgPSBmYl9zcmFuZ2VfaXRlcihmYiwg bmJpdHMsIGksICZiZWdpbiwgJmxlbik7Ci0JCWV4cGVjdF9mYWxzZShyZXN1bHQsICJTaG91bGQg bm90IGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUiLCBpKTsKLQotCQlyZXN1bHQgPSBmYl91cmFu Z2VfaXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwgJmxlbik7Ci0JCWV4cGVjdF90cnVlKHJlc3Vs dCwgIlNob3VsZCBoYXZlIGZvdW5kIGEgcmFuZ2UgYXQgJXp1IiwgaSk7Ci0JCWV4cGVjdF96dV9l cShpLCBiZWdpbiwgIkluY29ycmVjdCBiZWdpbiBhdCAlenUiLCBpKTsKLQkJZXhwZWN0X3p1X2Vx KG5iaXRzIC0gaSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKLQotCQlyZXN1bHQg PSBmYl9zcmFuZ2Vfcml0ZXIoZmIsIG5iaXRzLCBpLCAmYmVnaW4sICZsZW4pOwotCQlleHBlY3Rf dHJ1ZShyZXN1bHQsICJTaG91bGQgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOwotCQll eHBlY3RfenVfZXEoMCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7Ci0JCWV4 cGVjdF96dV9lcShzZXRfbGltaXQsIGxlbiwgIkluY29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7Ci0K LQkJcmVzdWx0ID0gZmJfdXJhbmdlX3JpdGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsK LQkJZXhwZWN0X3RydWUocmVzdWx0LCAiU2hvdWxkIGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUi LCBpKTsKLQkJZXhwZWN0X3p1X2VxKHNldF9saW1pdCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4g YXQgJXp1IiwgaSk7Ci0JCWV4cGVjdF96dV9lcShpIC0gc2V0X2xpbWl0ICsgMSwgbGVuLCAiSW5j b3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKLQl9Ci0KLQkvKiBBIHNldCBvZiBjaGVja3Mgd2l0aCBv bmx5IHRoZSBmaXJzdCBzZXRfbGltaXQgYml0cyAqdW5zZXQqLiAqLwotCWZiX3Vuc2V0X3Jhbmdl KGZiLCBuYml0cywgMCwgc2V0X2xpbWl0KTsKLQlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBzZXRf bGltaXQsIG5iaXRzIC0gc2V0X2xpbWl0KTsKLQlleHBlY3RfenVfZXEobmJpdHMgLSBzZXRfbGlt aXQsIGZiX3NyYW5nZV9sb25nZXN0KGZiLCBuYml0cyksCi0JICAgICJJbmNvcnJlY3QgbG9uZ2Vz dCBzZXQgcmFuZ2UiKTsKLQlleHBlY3RfenVfZXEoc2V0X2xpbWl0LCBmYl91cmFuZ2VfbG9uZ2Vz dChmYiwgbmJpdHMpLAotCSAgICAiSW5jb3JyZWN0IGxvbmdlc3QgdW5zZXQgcmFuZ2UiKTsKLQlm b3IgKHNpemVfdCBpID0gMDsgaSA8IHNldF9saW1pdDsgaSsrKSB7Ci0JCXJlc3VsdCA9IGZiX3Ny YW5nZV9pdGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsKLQkJZXhwZWN0X3RydWUocmVz dWx0LCAiU2hvdWxkIGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUiLCBpKTsKLQkJZXhwZWN0X3p1 X2VxKHNldF9saW1pdCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7Ci0JCWV4 cGVjdF96dV9lcShuYml0cyAtIHNldF9saW1pdCwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUi LCBpKTsKLQotCQlyZXN1bHQgPSBmYl91cmFuZ2VfaXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwg Jmxlbik7Ci0JCWV4cGVjdF90cnVlKHJlc3VsdCwgIlNob3VsZCBoYXZlIGZvdW5kIGEgcmFuZ2Ug YXQgJXp1IiwgaSk7Ci0JCWV4cGVjdF96dV9lcShpLCBiZWdpbiwgIkluY29ycmVjdCBiZWdpbiBh dCAlenUiLCBpKTsKLQkJZXhwZWN0X3p1X2VxKHNldF9saW1pdCAtIGksIGxlbiwgIkluY29ycmVj dCBsZW4gYXQgJXp1IiwgaSk7Ci0KLQkJcmVzdWx0ID0gZmJfc3JhbmdlX3JpdGVyKGZiLCBuYml0 cywgaSwgJmJlZ2luLCAmbGVuKTsKLQkJZXhwZWN0X2ZhbHNlKHJlc3VsdCwgIlNob3VsZCBub3Qg aGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOwotCi0JCXJlc3VsdCA9IGZiX3VyYW5nZV9y aXRlcihmYiwgbmJpdHMsIGksICZiZWdpbiwgJmxlbik7Ci0JCWV4cGVjdF90cnVlKHJlc3VsdCwg IlNob3VsZCBub3QgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOwotCQlleHBlY3RfenVf ZXEoMCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7Ci0JCWV4cGVjdF96dV9l cShpICsgMSwgbGVuLCAiSW5jb3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKLQl9Ci0JZm9yIChzaXpl X3QgaSA9IHNldF9saW1pdDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJcmVzdWx0ID0gZmJfc3Jhbmdl X2l0ZXIoZmIsIG5iaXRzLCBpLCAmYmVnaW4sICZsZW4pOwotCQlleHBlY3RfdHJ1ZShyZXN1bHQs ICJTaG91bGQgaGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOwotCQlleHBlY3RfenVfZXEo aSwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7Ci0JCWV4cGVjdF96dV9lcShu Yml0cyAtIGksIGxlbiwgIkluY29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7Ci0KLQkJcmVzdWx0ID0g ZmJfdXJhbmdlX2l0ZXIoZmIsIG5iaXRzLCBpLCAmYmVnaW4sICZsZW4pOwotCQlleHBlY3RfZmFs c2UocmVzdWx0LCAiU2hvdWxkIG5vdCBoYXZlIGZvdW5kIGEgcmFuZ2UgYXQgJXp1IiwgaSk7Ci0K LQkJcmVzdWx0ID0gZmJfc3JhbmdlX3JpdGVyKGZiLCBuYml0cywgaSwgJmJlZ2luLCAmbGVuKTsK LQkJZXhwZWN0X3RydWUocmVzdWx0LCAiU2hvdWxkIGhhdmUgZm91bmQgYSByYW5nZSBhdCAlenUi LCBpKTsKLQkJZXhwZWN0X3p1X2VxKHNldF9saW1pdCwgYmVnaW4sICJJbmNvcnJlY3QgYmVnaW4g YXQgJXp1IiwgaSk7Ci0JCWV4cGVjdF96dV9lcShpIC0gc2V0X2xpbWl0ICsgMSwgbGVuLCAiSW5j b3JyZWN0IGxlbiBhdCAlenUiLCBpKTsKLQotCQlyZXN1bHQgPSBmYl91cmFuZ2Vfcml0ZXIoZmIs IG5iaXRzLCBpLCAmYmVnaW4sICZsZW4pOwotCQlleHBlY3RfdHJ1ZShyZXN1bHQsICJTaG91bGQg aGF2ZSBmb3VuZCBhIHJhbmdlIGF0ICV6dSIsIGkpOwotCQlleHBlY3RfenVfZXEoMCwgYmVnaW4s ICJJbmNvcnJlY3QgYmVnaW4gYXQgJXp1IiwgaSk7Ci0JCWV4cGVjdF96dV9lcShzZXRfbGltaXQs IGxlbiwgIkluY29ycmVjdCBsZW4gYXQgJXp1IiwgaSk7Ci0JfQotCi19Ci1URVNUX0VORAotCi0v KgotICogRG9pbmcgdGhpcyBiaXQtYnktYml0IGlzIHRvbyBzbG93IGZvciBhIHJlYWwgaW1wbGVt ZW50YXRpb24sIGJ1dCBmb3IgdGVzdGluZwotICogY29kZSwgaXQncyBlYXN5IHRvIGdldCByaWdo dC4gIEluIHRoZSBleGhhdXN0aXZlIHRlc3RzLCB3ZSdsbCBjb21wYXJlIHRoZQotICogKGZhc3Qg YnV0IHRyaWNreSkgcmVhbCBpbXBsZW1lbnRhdGlvbiBhZ2FpbnN0IHRoZSAoc2xvdyBidXQgc2lt cGxlKSB0ZXN0aW5nCi0gKiBvbmUuCi0gKi8KLXN0YXRpYyBib29sCi1mYl9pdGVyX3NpbXBsZShm Yl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3Qgc3RhcnQsIHNpemVfdCAqcl9iZWdp biwKLSAgICBzaXplX3QgKnJfbGVuLCBib29sIHZhbCwgYm9vbCBmb3J3YXJkKSB7Ci0Jc3NpemVf dCBzdHJpZGUgPSAoZm9yd2FyZCA/IChzc2l6ZV90KTEgOiAoc3NpemVfdCktMSk7Ci0Jc3NpemVf dCByYW5nZV9iZWdpbiA9IChzc2l6ZV90KXN0YXJ0OwotCWZvciAoOyByYW5nZV9iZWdpbiAhPSAo c3NpemVfdCluYml0cyAmJiByYW5nZV9iZWdpbiAhPSAtMTsKLQkgICAgcmFuZ2VfYmVnaW4gKz0g c3RyaWRlKSB7Ci0JCWlmIChmYl9nZXQoZmIsIG5iaXRzLCByYW5nZV9iZWdpbikgPT0gdmFsKSB7 Ci0JCQlzc2l6ZV90IHJhbmdlX2VuZCA9IHJhbmdlX2JlZ2luOwotCQkJZm9yICg7IHJhbmdlX2Vu ZCAhPSAoc3NpemVfdCluYml0cyAmJiByYW5nZV9lbmQgIT0gLTE7Ci0JCQkgICAgcmFuZ2VfZW5k ICs9IHN0cmlkZSkgewotCQkJCWlmIChmYl9nZXQoZmIsIG5iaXRzLCByYW5nZV9lbmQpICE9IHZh bCkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoZm9yd2FyZCkgewotCQkJCSpy X2JlZ2luID0gcmFuZ2VfYmVnaW47Ci0JCQkJKnJfbGVuID0gcmFuZ2VfZW5kIC0gcmFuZ2VfYmVn aW47Ci0JCQl9IGVsc2UgewotCQkJCSpyX2JlZ2luID0gcmFuZ2VfZW5kICsgMTsKLQkJCQkqcl9s ZW4gPSByYW5nZV9iZWdpbiAtIHJhbmdlX2VuZDsKLQkJCX0KLQkJCXJldHVybiB0cnVlOwotCQl9 Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotLyogU2ltaWxhciwgYnV0IGZvciBmaW5kaW5nIGxv bmdlc3QgcmFuZ2VzLiAqLwotc3RhdGljIHNpemVfdAotZmJfcmFuZ2VfbG9uZ2VzdF9zaW1wbGUo ZmJfZ3JvdXBfdCAqZmIsIHNpemVfdCBuYml0cywgYm9vbCB2YWwpIHsKLQlzaXplX3QgbG9uZ2Vz dF9zb19mYXIgPSAwOwotCWZvciAoc2l6ZV90IGJlZ2luID0gMDsgYmVnaW4gPCBuYml0czsgYmVn aW4rKykgewotCQlpZiAoZmJfZ2V0KGZiLCBuYml0cywgYmVnaW4pICE9IHZhbCkgewotCQkJY29u dGludWU7Ci0JCX0KLQkJc2l6ZV90IGVuZCA9IGJlZ2luICsgMTsKLQkJZm9yICg7IGVuZCA8IG5i aXRzOyBlbmQrKykgewotCQkJaWYgKGZiX2dldChmYiwgbmJpdHMsIGVuZCkgIT0gdmFsKSB7Ci0J CQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVuZCAtIGJlZ2luID4gbG9uZ2VzdF9zb19mYXIp IHsKLQkJCWxvbmdlc3Rfc29fZmFyID0gZW5kIC0gYmVnaW47Ci0JCX0KLQl9Ci0JcmV0dXJuIGxv bmdlc3Rfc29fZmFyOwotfQotCi1zdGF0aWMgdm9pZAotZXhwZWN0X2l0ZXJfcmVzdWx0c19hdChm Yl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBzaXplX3QgcG9zLAotICAgIGJvb2wgdmFsLCBi b29sIGZvcndhcmQpIHsKLQlib29sIGl0ZXJfcmVzOwotCXNpemVfdCBpdGVyX2JlZ2luIEpFTUFM TE9DX0NDX1NJTEVOQ0VfSU5JVCgwKTsKLQlzaXplX3QgaXRlcl9sZW4gSkVNQUxMT0NfQ0NfU0lM RU5DRV9JTklUKDApOwotCWlmICh2YWwpIHsKLQkJaWYgKGZvcndhcmQpIHsKLQkJCWl0ZXJfcmVz ID0gZmJfc3JhbmdlX2l0ZXIoZmIsIG5iaXRzLCBwb3MsCi0JCQkgICAgJml0ZXJfYmVnaW4sICZp dGVyX2xlbik7Ci0JCX0gZWxzZSB7Ci0JCQlpdGVyX3JlcyA9IGZiX3NyYW5nZV9yaXRlcihmYiwg bmJpdHMsIHBvcywKLQkJCSAgICAmaXRlcl9iZWdpbiwgJml0ZXJfbGVuKTsKLQkJfQotCX0gZWxz ZSB7Ci0JCWlmIChmb3J3YXJkKSB7Ci0JCQlpdGVyX3JlcyA9IGZiX3VyYW5nZV9pdGVyKGZiLCBu Yml0cywgcG9zLAotCQkJICAgICZpdGVyX2JlZ2luLCAmaXRlcl9sZW4pOwotCQl9IGVsc2Ugewot CQkJaXRlcl9yZXMgPSBmYl91cmFuZ2Vfcml0ZXIoZmIsIG5iaXRzLCBwb3MsCi0JCQkgICAgJml0 ZXJfYmVnaW4sICZpdGVyX2xlbik7Ci0JCX0KLQl9Ci0KLQlib29sIHNpbXBsZV9pdGVyX3JlczsK LQkvKgotCSAqIFRoZXNlIGFyZSBkZWFkIHN0b3JlcywgYnV0IHRoZSBjb21waWxlciBjYW4ndCBh bHdheXMgZmlndXJlIHRoYXQgb3V0Ci0JICogc3RhdGljYWxseSwgYW5kIHdhcm5zIG9uIHRoZSB1 bmluaXRpYWxpemVkIHZhcmlhYmxlLgotCSAqLwotCXNpemVfdCBzaW1wbGVfaXRlcl9iZWdpbiA9 IDA7Ci0Jc2l6ZV90IHNpbXBsZV9pdGVyX2xlbiA9IDA7Ci0Jc2ltcGxlX2l0ZXJfcmVzID0gZmJf aXRlcl9zaW1wbGUoZmIsIG5iaXRzLCBwb3MsICZzaW1wbGVfaXRlcl9iZWdpbiwKLQkgICAgJnNp bXBsZV9pdGVyX2xlbiwgdmFsLCBmb3J3YXJkKTsKLQotCWV4cGVjdF9iX2VxKGl0ZXJfcmVzLCBz aW1wbGVfaXRlcl9yZXMsICJSZXN1bHQgbWlzbWF0Y2ggYXQgJXp1IiwgcG9zKTsKLQlpZiAoaXRl cl9yZXMgJiYgc2ltcGxlX2l0ZXJfcmVzKSB7Ci0JCWFzc2VydF96dV9lcShpdGVyX2JlZ2luLCBz aW1wbGVfaXRlcl9iZWdpbiwKLQkJICAgICJCZWdpbiBtaXNtYXRjaCBhdCAlenUiLCBwb3MpOwot CQlleHBlY3RfenVfZXEoaXRlcl9sZW4sIHNpbXBsZV9pdGVyX2xlbiwKLQkJICAgICJMZW5ndGgg bWlzbWF0Y2ggYXQgJXp1IiwgcG9zKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1leHBlY3RfaXRl cl9yZXN1bHRzKGZiX2dyb3VwX3QgKmZiLCBzaXplX3QgbmJpdHMpIHsKLQlmb3IgKHNpemVfdCBp ID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJZXhwZWN0X2l0ZXJfcmVzdWx0c19hdChmYiwgbmJp dHMsIGksIGZhbHNlLCBmYWxzZSk7Ci0JCWV4cGVjdF9pdGVyX3Jlc3VsdHNfYXQoZmIsIG5iaXRz LCBpLCBmYWxzZSwgdHJ1ZSk7Ci0JCWV4cGVjdF9pdGVyX3Jlc3VsdHNfYXQoZmIsIG5iaXRzLCBp LCB0cnVlLCBmYWxzZSk7Ci0JCWV4cGVjdF9pdGVyX3Jlc3VsdHNfYXQoZmIsIG5iaXRzLCBpLCB0 cnVlLCB0cnVlKTsKLQl9Ci0JZXhwZWN0X3p1X2VxKGZiX3JhbmdlX2xvbmdlc3Rfc2ltcGxlKGZi LCBuYml0cywgdHJ1ZSksCi0JICAgIGZiX3NyYW5nZV9sb25nZXN0KGZiLCBuYml0cyksICJMb25n ZXN0IHJhbmdlIG1pc21hdGNoIik7Ci0JZXhwZWN0X3p1X2VxKGZiX3JhbmdlX2xvbmdlc3Rfc2lt cGxlKGZiLCBuYml0cywgZmFsc2UpLAotCSAgICBmYl91cmFuZ2VfbG9uZ2VzdChmYiwgbmJpdHMp LCAiTG9uZ2VzdCByYW5nZSBtaXNtYXRjaCIpOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X3BhdHRl cm5fMyhmYl9ncm91cF90ICpmYiwgc2l6ZV90IG5iaXRzLCBib29sIHplcm9fdmFsKSB7Ci0JZm9y IChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7Ci0JCWlmICgoaSAlIDYgPCAzICYmIHpl cm9fdmFsKSB8fCAoaSAlIDYgPj0gMyAmJiAhemVyb192YWwpKSB7Ci0JCQlmYl9zZXQoZmIsIG5i aXRzLCBpKTsKLQkJfSBlbHNlIHsKLQkJCWZiX3Vuc2V0KGZiLCBuYml0cywgaSk7Ci0JCX0KLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb190ZXN0X2l0ZXJfcmFuZ2VfZXhoYXVzdGl2ZShzaXplX3Qg bmJpdHMpIHsKLQkvKiBUaGlzIHRlc3QgaXMgYWxzbyBwcmV0dHkgc2xvdy4gKi8KLQlpZiAobmJp dHMgPiAxMDAwKSB7Ci0JCXJldHVybjsKLQl9Ci0Jc2l6ZV90IHN6ID0gRkJfTkdST1VQUyhuYml0 cykgKiBzaXplb2YoZmJfZ3JvdXBfdCk7Ci0JZmJfZ3JvdXBfdCAqZmIgPSBtYWxsb2Moc3opOwot CWZiX2luaXQoZmIsIG5iaXRzKTsKLQotCXNldF9wYXR0ZXJuXzMoZmIsIG5iaXRzLCAvKiB6ZXJv X3ZhbCAqLyB0cnVlKTsKLQlleHBlY3RfaXRlcl9yZXN1bHRzKGZiLCBuYml0cyk7Ci0KLQlzZXRf cGF0dGVybl8zKGZiLCBuYml0cywgLyogemVyb192YWwgKi8gZmFsc2UpOwotCWV4cGVjdF9pdGVy X3Jlc3VsdHMoZmIsIG5iaXRzKTsKLQotCWZiX3NldF9yYW5nZShmYiwgbmJpdHMsIDAsIG5iaXRz KTsKLQlmYl91bnNldF9yYW5nZShmYiwgbmJpdHMsIDAsIG5iaXRzIC8gMiA9PSAwID8gMSA6IG5i aXRzIC8gMik7Ci0JZXhwZWN0X2l0ZXJfcmVzdWx0cyhmYiwgbmJpdHMpOwotCi0JZmJfdW5zZXRf cmFuZ2UoZmIsIG5iaXRzLCAwLCBuYml0cyk7Ci0JZmJfc2V0X3JhbmdlKGZiLCBuYml0cywgMCwg bmJpdHMgLyAyID09IDAgPyAxOiBuYml0cyAvIDIpOwotCWV4cGVjdF9pdGVyX3Jlc3VsdHMoZmIs IG5iaXRzKTsKLQotCWZyZWUoZmIpOwotfQotCi0vKgotICogTGlrZSB0ZXN0X2l0ZXJfcmFuZ2Vf c2ltcGxlLCB0aGlzIHRlc3RzIGJvdGggaXRlcmF0aW9uIGFuZCBsb25nZXN0LXJhbmdlCi0gKiBj b21wdXRhdGlvbi4KLSAqLwotVEVTVF9CRUdJTih0ZXN0X2l0ZXJfcmFuZ2VfZXhoYXVzdGl2ZSkg ewotI2RlZmluZSBOQihuYml0cykgXAotCWRvX3Rlc3RfaXRlcl9yYW5nZV9leGhhdXN0aXZlKG5i aXRzKTsKLQlOQklUU19UQUIKLSN1bmRlZiBOQgotfQotVEVTVF9FTkQKLQotLyoKLSAqIElmIGFs bCBzZXQgYml0cyBpbiB0aGUgYml0bWFwIGFyZSBjb250aWd1b3VzLCBpbiBbc2V0X3N0YXJ0LCBz ZXRfZW5kKSwKLSAqIHJldHVybnMgdGhlIG51bWJlciBvZiBzZXQgYml0cyBpbiBbc2NvdW50X3N0 YXJ0LCBzY291bnRfZW5kKS4KLSAqLwotc3RhdGljIHNpemVfdAotc2NvdW50X2NvbnRpZ3VvdXMo c2l6ZV90IHNldF9zdGFydCwgc2l6ZV90IHNldF9lbmQsIHNpemVfdCBzY291bnRfc3RhcnQsCi0g ICAgc2l6ZV90IHNjb3VudF9lbmQpIHsKLQkvKiBObyBvdmVybGFwLiAqLwotCWlmIChzZXRfZW5k IDw9IHNjb3VudF9zdGFydCB8fCBzY291bnRfZW5kIDw9IHNldF9zdGFydCkgewotCQlyZXR1cm4g MDsKLQl9Ci0JLyogc2V0IHJhbmdlIGNvbnRhaW5zIHNjb3VudCByYW5nZSAqLwotCWlmIChzZXRf c3RhcnQgPD0gc2NvdW50X3N0YXJ0ICYmIHNldF9lbmQgPj0gc2NvdW50X2VuZCkgewotCQlyZXR1 cm4gc2NvdW50X2VuZCAtIHNjb3VudF9zdGFydDsKLQl9Ci0JLyogc2NvdW50IHJhbmdlIGNvbnRh aW5zIHNldCByYW5nZS4gKi8KLQlpZiAoc2NvdW50X3N0YXJ0IDw9IHNldF9zdGFydCAmJiBzY291 bnRfZW5kID49IHNldF9lbmQpIHsKLQkJcmV0dXJuIHNldF9lbmQgLSBzZXRfc3RhcnQ7Ci0JfQot CS8qIFBhcnRpYWwgb3ZlcmxhcCwgd2l0aCBzZXQgcmFuZ2Ugc3RhcnRpbmcgZmlyc3QuICovCi0J aWYgKHNldF9zdGFydCA8IHNjb3VudF9zdGFydCAmJiBzZXRfZW5kIDwgc2NvdW50X2VuZCkgewot CQlyZXR1cm4gc2V0X2VuZCAtIHNjb3VudF9zdGFydDsKLQl9Ci0JLyogUGFydGlhbCBvdmVybGFw LCB3aXRoIHNjb3VudCByYW5nZSBzdGFydGluZyBmaXJzdC4gKi8KLQlpZiAoc2NvdW50X3N0YXJ0 IDwgc2V0X3N0YXJ0ICYmIHNjb3VudF9lbmQgPCBzZXRfZW5kKSB7Ci0JCXJldHVybiBzY291bnRf ZW5kIC0gc2V0X3N0YXJ0OwotCX0KLQkvKgotCSAqIFRyaWdnZXIgYW4gYXNzZXJ0IGZhaWx1cmU7 IHRoZSBhYm92ZSBsaXN0IHNob3VsZCBoYXZlIGJlZW4KLQkgKiBleGhhdXN0aXZlLgotCSAqLwot CXVucmVhY2hhYmxlKCk7Ci19Ci0KLXN0YXRpYyBzaXplX3QKLXVjb3VudF9jb250aWd1b3VzKHNp emVfdCBzZXRfc3RhcnQsIHNpemVfdCBzZXRfZW5kLCBzaXplX3QgdWNvdW50X3N0YXJ0LAotICAg IHNpemVfdCB1Y291bnRfZW5kKSB7Ci0JLyogTm8gb3ZlcmxhcC4gKi8KLQlpZiAoc2V0X2VuZCA8 PSB1Y291bnRfc3RhcnQgfHwgdWNvdW50X2VuZCA8PSBzZXRfc3RhcnQpIHsKLQkJcmV0dXJuIHVj b3VudF9lbmQgLSB1Y291bnRfc3RhcnQ7Ci0JfQotCS8qIHNldCByYW5nZSBjb250YWlucyB1Y291 bnQgcmFuZ2UgKi8KLQlpZiAoc2V0X3N0YXJ0IDw9IHVjb3VudF9zdGFydCAmJiBzZXRfZW5kID49 IHVjb3VudF9lbmQpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIHVjb3VudCByYW5nZSBjb250YWlu cyBzZXQgcmFuZ2UuICovCi0JaWYgKHVjb3VudF9zdGFydCA8PSBzZXRfc3RhcnQgJiYgdWNvdW50 X2VuZCA+PSBzZXRfZW5kKSB7Ci0JCXJldHVybiAodWNvdW50X2VuZCAtIHVjb3VudF9zdGFydCkg LSAoc2V0X2VuZCAtIHNldF9zdGFydCk7Ci0JfQotCS8qIFBhcnRpYWwgb3ZlcmxhcCwgd2l0aCBz ZXQgcmFuZ2Ugc3RhcnRpbmcgZmlyc3QuICovCi0JaWYgKHNldF9zdGFydCA8IHVjb3VudF9zdGFy dCAmJiBzZXRfZW5kIDwgdWNvdW50X2VuZCkgewotCQlyZXR1cm4gdWNvdW50X2VuZCAtIHNldF9l bmQ7Ci0JfQotCS8qIFBhcnRpYWwgb3ZlcmxhcCwgd2l0aCB1Y291bnQgcmFuZ2Ugc3RhcnRpbmcg Zmlyc3QuICovCi0JaWYgKHVjb3VudF9zdGFydCA8IHNldF9zdGFydCAmJiB1Y291bnRfZW5kIDwg c2V0X2VuZCkgewotCQlyZXR1cm4gc2V0X3N0YXJ0IC0gdWNvdW50X3N0YXJ0OwotCX0KLQkvKgot CSAqIFRyaWdnZXIgYW4gYXNzZXJ0IGZhaWx1cmU7IHRoZSBhYm92ZSBsaXN0IHNob3VsZCBoYXZl IGJlZW4KLQkgKiBleGhhdXN0aXZlLgotCSAqLwotCXVucmVhY2hhYmxlKCk7Ci19Ci0KLXN0YXRp YyB2b2lkCi1leHBlY3RfY291bnRfbWF0Y2hfY29udGlndW91cyhmYl9ncm91cF90ICpmYiwgc2l6 ZV90IG5iaXRzLCBzaXplX3Qgc2V0X3N0YXJ0LAotICAgIHNpemVfdCBzZXRfZW5kKSB7Ci0JZm9y IChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7Ci0JCWZvciAoc2l6ZV90IGogPSBpICsg MTsgaiA8PSBuYml0czsgaisrKSB7Ci0JCQlzaXplX3QgY250ID0gaiAtIGk7Ci0JCQlzaXplX3Qg c2NvdW50X2V4cGVjdGVkID0gc2NvdW50X2NvbnRpZ3VvdXMoc2V0X3N0YXJ0LAotCQkJICAgIHNl dF9lbmQsIGksIGopOwotCQkJc2l6ZV90IHNjb3VudF9jb21wdXRlZCA9IGZiX3Njb3VudChmYiwg bmJpdHMsIGksIGNudCk7Ci0JCQlleHBlY3RfenVfZXEoc2NvdW50X2V4cGVjdGVkLCBzY291bnRf Y29tcHV0ZWQsCi0JCQkgICAgImZiX3Njb3VudCBlcnJvciB3aXRoIG5iaXRzPSV6dSwgc3RhcnQ9 JXp1LCAiCi0JCQkgICAgImNudD0lenUsIHdpdGggYml0cyBzZXQgaW4gWyV6dSwgJXp1KSIsCi0J CQkgICAgbmJpdHMsIGksIGNudCwgc2V0X3N0YXJ0LCBzZXRfZW5kKTsKLQotCQkJc2l6ZV90IHVj b3VudF9leHBlY3RlZCA9IHVjb3VudF9jb250aWd1b3VzKHNldF9zdGFydCwKLQkJCSAgICBzZXRf ZW5kLCBpLCBqKTsKLQkJCXNpemVfdCB1Y291bnRfY29tcHV0ZWQgPSBmYl91Y291bnQoZmIsIG5i aXRzLCBpLCBjbnQpOwotCQkJYXNzZXJ0X3p1X2VxKHVjb3VudF9leHBlY3RlZCwgdWNvdW50X2Nv bXB1dGVkLAotCQkJICAgICJmYl91Y291bnQgZXJyb3Igd2l0aCBuYml0cz0lenUsIHN0YXJ0PSV6 dSwgIgotCQkJICAgICJjbnQ9JXp1LCB3aXRoIGJpdHMgc2V0IGluIFslenUsICV6dSkiLAotCQkJ ICAgIG5iaXRzLCBpLCBjbnQsIHNldF9zdGFydCwgc2V0X2VuZCk7Ci0KLQkJfQotCX0KLX0KLQot c3RhdGljIHZvaWQKLWRvX3Rlc3RfY291bnRfY29udGlndW91cyhzaXplX3QgbmJpdHMpIHsKLQlz aXplX3Qgc3ogPSBGQl9OR1JPVVBTKG5iaXRzKSAqIHNpemVvZihmYl9ncm91cF90KTsKLQlmYl9n cm91cF90ICpmYiA9IG1hbGxvYyhzeik7Ci0KLQlmYl9pbml0KGZiLCBuYml0cyk7Ci0KLQlleHBl Y3RfY291bnRfbWF0Y2hfY29udGlndW91cyhmYiwgbmJpdHMsIDAsIDApOwotCWZvciAoc2l6ZV90 IGkgPSAwOyBpIDwgbmJpdHM7IGkrKykgewotCQlmYl9zZXQoZmIsIG5iaXRzLCBpKTsKLQkJZXhw ZWN0X2NvdW50X21hdGNoX2NvbnRpZ3VvdXMoZmIsIG5iaXRzLCAwLCBpICsgMSk7Ci0JfQotCi0J Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYml0czsgaSsrKSB7Ci0JCWZiX3Vuc2V0KGZiLCBuYml0 cywgaSk7Ci0JCWV4cGVjdF9jb3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBuYml0cywgaSArIDEs IG5iaXRzKTsKLQl9Ci0KLQlmcmVlKGZiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2NvdW50X2Nv bnRpZ3VvdXNfc2ltcGxlKSB7Ci0JZW51bSB7bmJpdHMgPSAzMDB9OwotCWZiX2dyb3VwX3QgZmJb RkJfTkdST1VQUyhuYml0cyldOwotCWZiX2luaXQoZmIsIG5iaXRzKTsKLQkvKiBKdXN0IGFuIGFy Yml0cmFyeSBudW1iZXIuICovCi0Jc2l6ZV90IHN0YXJ0ID0gMjM7Ci0KLQlmYl9zZXRfcmFuZ2Uo ZmIsIG5iaXRzLCBzdGFydCwgMzAgLSBzdGFydCk7Ci0JZXhwZWN0X2NvdW50X21hdGNoX2NvbnRp Z3VvdXMoZmIsIG5iaXRzLCBzdGFydCwgMzApOwotCi0JZmJfc2V0X3JhbmdlKGZiLCBuYml0cywg c3RhcnQsIDQwIC0gc3RhcnQpOwotCWV4cGVjdF9jb3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBu Yml0cywgc3RhcnQsIDQwKTsKLQotCWZiX3NldF9yYW5nZShmYiwgbmJpdHMsIHN0YXJ0LCA3MCAt IHN0YXJ0KTsKLQlleHBlY3RfY291bnRfbWF0Y2hfY29udGlndW91cyhmYiwgbmJpdHMsIHN0YXJ0 LCA3MCk7Ci0KLQlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMTIwIC0gc3RhcnQpOwot CWV4cGVjdF9jb3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBuYml0cywgc3RhcnQsIDEyMCk7Ci0K LQlmYl9zZXRfcmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMTUwIC0gc3RhcnQpOwotCWV4cGVjdF9j b3VudF9tYXRjaF9jb250aWd1b3VzKGZiLCBuYml0cywgc3RhcnQsIDE1MCk7Ci0KLQlmYl9zZXRf cmFuZ2UoZmIsIG5iaXRzLCBzdGFydCwgMjAwIC0gc3RhcnQpOwotCWV4cGVjdF9jb3VudF9tYXRj aF9jb250aWd1b3VzKGZiLCBuYml0cywgc3RhcnQsIDIwMCk7Ci0KLQlmYl9zZXRfcmFuZ2UoZmIs IG5iaXRzLCBzdGFydCwgMjkwIC0gc3RhcnQpOwotCWV4cGVjdF9jb3VudF9tYXRjaF9jb250aWd1 b3VzKGZiLCBuYml0cywgc3RhcnQsIDI5MCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRl c3RfY291bnRfY29udGlndW91cykgewotI2RlZmluZSBOQihuYml0cykgXAotCS8qIFRoaXMgdGVz dCBpcyAqcGFydGljdWxhcmx5KiBzbG93IGluIGRlYnVnIGJ1aWxkcy4gKi8gXAotCWlmICgoIWNv bmZpZ19kZWJ1ZyAmJiBuYml0cyA8IDMwMCkgfHwgbmJpdHMgPCAxNTApIHsgXAotCQlkb190ZXN0 X2NvdW50X2NvbnRpZ3VvdXMobmJpdHMpOyBcCi0JfQotCU5CSVRTX1RBQgotI3VuZGVmIE5CCi19 Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAotZXhwZWN0X2NvdW50X21hdGNoX2FsdGVybmF0aW5n KGZiX2dyb3VwX3QgKmZiX2V2ZW4sIGZiX2dyb3VwX3QgKmZiX29kZCwKLSAgICBzaXplX3QgbmJp dHMpIHsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJZm9yIChzaXpl X3QgaiA9IGkgKyAxOyBqIDw9IG5iaXRzOyBqKyspIHsKLQkJCXNpemVfdCBjbnQgPSBqIC0gaTsK LQkJCXNpemVfdCBvZGRfc2NvdW50ID0gY250IC8gMgotCQkJICAgICsgKHNpemVfdCkoY250ICUg MiA9PSAxICYmIGkgJSAyID09IDEpOwotCQkJc2l6ZV90IG9kZF9zY291bnRfY29tcHV0ZWQgPSBm Yl9zY291bnQoZmJfb2RkLCBuYml0cywKLQkJCSAgICBpLCBqIC0gaSk7Ci0JCQlhc3NlcnRfenVf ZXEob2RkX3Njb3VudCwgb2RkX3Njb3VudF9jb21wdXRlZCwKLQkJCSAgICAiZmJfc2NvdW50IGVy cm9yIHdpdGggbmJpdHM9JXp1LCBzdGFydD0lenUsICIKLQkJCSAgICAiY250PSV6dSwgd2l0aCBh bHRlcm5hdGluZyBiaXRzIHNldC4iLAotCQkJICAgIG5iaXRzLCBpLCBqIC0gaSk7Ci0KLQkJCXNp emVfdCBvZGRfdWNvdW50ID0gY250IC8gMgotCQkJICAgICsgKHNpemVfdCkoY250ICUgMiA9PSAx ICYmIGkgJSAyID09IDApOwotCQkJc2l6ZV90IG9kZF91Y291bnRfY29tcHV0ZWQgPSBmYl91Y291 bnQoZmJfb2RkLCBuYml0cywKLQkJCSAgICBpLCBqIC0gaSk7Ci0JCQlhc3NlcnRfenVfZXEob2Rk X3Vjb3VudCwgb2RkX3Vjb3VudF9jb21wdXRlZCwKLQkJCSAgICAiZmJfdWNvdW50IGVycm9yIHdp dGggbmJpdHM9JXp1LCBzdGFydD0lenUsICIKLQkJCSAgICAiY250PSV6dSwgd2l0aCBhbHRlcm5h dGluZyBiaXRzIHNldC4iLAotCQkJICAgIG5iaXRzLCBpLCBqIC0gaSk7Ci0KLQkJCXNpemVfdCBl dmVuX3Njb3VudCA9IGNudCAvIDIKLQkJCSAgICArIChzaXplX3QpKGNudCAlIDIgPT0gMSAmJiBp ICUgMiA9PSAwKTsKLQkJCXNpemVfdCBldmVuX3Njb3VudF9jb21wdXRlZCA9IGZiX3Njb3VudChm Yl9ldmVuLCBuYml0cywKLQkJCSAgICBpLCBqIC0gaSk7Ci0JCQlhc3NlcnRfenVfZXEoZXZlbl9z Y291bnQsIGV2ZW5fc2NvdW50X2NvbXB1dGVkLAotCQkJICAgICJmYl9zY291bnQgZXJyb3Igd2l0 aCBuYml0cz0lenUsIHN0YXJ0PSV6dSwgIgotCQkJICAgICJjbnQ9JXp1LCB3aXRoIGFsdGVybmF0 aW5nIGJpdHMgc2V0LiIsCi0JCQkgICAgbmJpdHMsIGksIGogLSBpKTsKLQotCQkJc2l6ZV90IGV2 ZW5fdWNvdW50ID0gY250IC8gMgotCQkJICAgICsgKHNpemVfdCkoY250ICUgMiA9PSAxICYmIGkg JSAyID09IDEpOwotCQkJc2l6ZV90IGV2ZW5fdWNvdW50X2NvbXB1dGVkID0gZmJfdWNvdW50KGZi X2V2ZW4sIG5iaXRzLAotCQkJICAgIGksIGogLSBpKTsKLQkJCWFzc2VydF96dV9lcShldmVuX3Vj b3VudCwgZXZlbl91Y291bnRfY29tcHV0ZWQsCi0JCQkgICAgImZiX3Vjb3VudCBlcnJvciB3aXRo IG5iaXRzPSV6dSwgc3RhcnQ9JXp1LCAiCi0JCQkgICAgImNudD0lenUsIHdpdGggYWx0ZXJuYXRp bmcgYml0cyBzZXQuIiwKLQkJCSAgICBuYml0cywgaSwgaiAtIGkpOwotCQl9Ci0JfQotfQotCi1z dGF0aWMgdm9pZAotZG9fdGVzdF9jb3VudF9hbHRlcm5hdGluZyhzaXplX3QgbmJpdHMpIHsKLQlp ZiAobmJpdHMgPiAxMDAwKSB7Ci0JCXJldHVybjsKLQl9Ci0Jc2l6ZV90IHN6ID0gRkJfTkdST1VQ UyhuYml0cykgKiBzaXplb2YoZmJfZ3JvdXBfdCk7Ci0JZmJfZ3JvdXBfdCAqZmJfZXZlbiA9IG1h bGxvYyhzeik7Ci0JZmJfZ3JvdXBfdCAqZmJfb2RkID0gbWFsbG9jKHN6KTsKLQotCWZiX2luaXQo ZmJfZXZlbiwgbmJpdHMpOwotCWZiX2luaXQoZmJfb2RkLCBuYml0cyk7Ci0KLQlmb3IgKHNpemVf dCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJaWYgKGkgJSAyID09IDApIHsKLQkJCWZiX3Nl dChmYl9ldmVuLCBuYml0cywgaSk7Ci0JCX0gZWxzZSB7Ci0JCQlmYl9zZXQoZmJfb2RkLCBuYml0 cywgaSk7Ci0JCX0KLQl9Ci0KLQlleHBlY3RfY291bnRfbWF0Y2hfYWx0ZXJuYXRpbmcoZmJfZXZl biwgZmJfb2RkLCBuYml0cyk7Ci0KLQlmcmVlKGZiX2V2ZW4pOwotCWZyZWUoZmJfb2RkKTsKLX0K LQotVEVTVF9CRUdJTih0ZXN0X2NvdW50X2FsdGVybmF0aW5nKSB7Ci0jZGVmaW5lIE5CKG5iaXRz KSBcCi0JZG9fdGVzdF9jb3VudF9hbHRlcm5hdGluZyhuYml0cyk7Ci0JTkJJVFNfVEFCCi0jdW5k ZWYgTkIKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1kb190ZXN0X2JpdF9vcChzaXplX3Qg bmJpdHMsIGJvb2wgKCpvcCkoYm9vbCBhLCBib29sIGIpLAotICAgIHZvaWQgKCpmYl9vcCkoZmJf Z3JvdXBfdCAqZHN0LCBmYl9ncm91cF90ICpzcmMxLCBmYl9ncm91cF90ICpzcmMyLCBzaXplX3Qg bmJpdHMpKSB7Ci0Jc2l6ZV90IHN6ID0gRkJfTkdST1VQUyhuYml0cykgKiBzaXplb2YoZmJfZ3Jv dXBfdCk7Ci0JZmJfZ3JvdXBfdCAqZmIxID0gbWFsbG9jKHN6KTsKLQlmYl9ncm91cF90ICpmYjIg PSBtYWxsb2Moc3opOwotCWZiX2dyb3VwX3QgKmZiX3Jlc3VsdCA9IG1hbGxvYyhzeik7Ci0JZmJf aW5pdChmYjEsIG5iaXRzKTsKLQlmYl9pbml0KGZiMiwgbmJpdHMpOwotCWZiX2luaXQoZmJfcmVz dWx0LCBuYml0cyk7Ci0KLQkvKiBKdXN0IHR3byByYW5kb20gbnVtYmVycy4gKi8KLQljb25zdCB1 aW50NjRfdCBwcm5nX2luaXQxID0gKHVpbnQ2NF90KTBYNEU5QTlERTZBMzU2OTFDRFVMTDsKLQlj b25zdCB1aW50NjRfdCBwcm5nX2luaXQyID0gKHVpbnQ2NF90KTBYNzg1NkUzOTZCMDYzQzM2RVVM TDsKLQotCXVpbnQ2NF90IHBybmcxID0gcHJuZ19pbml0MTsKLQl1aW50NjRfdCBwcm5nMiA9IHBy bmdfaW5pdDI7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5iaXRzOyBpKyspIHsKLQkJYm9v bCBiaXQxID0gKChwcm5nMSAmICgxVUxMIDw8IChpICUgNjQpKSkgIT0gMCk7Ci0JCWJvb2wgYml0 MiA9ICgocHJuZzIgJiAoMVVMTCA8PCAoaSAlIDY0KSkpICE9IDApOwotCi0JCWlmIChiaXQxKSB7 Ci0JCQlmYl9zZXQoZmIxLCBuYml0cywgaSk7Ci0JCX0KLQkJaWYgKGJpdDIpIHsKLQkJCWZiX3Nl dChmYjIsIG5iaXRzLCBpKTsKLQkJfQotCi0JCWlmIChpICUgNjQgPT0gMCkgewotCQkJcHJuZzEg PSBwcm5nX3N0YXRlX25leHRfdTY0KHBybmcxKTsKLQkJCXBybmcyID0gcHJuZ19zdGF0ZV9uZXh0 X3U2NChwcm5nMik7Ci0JCX0KLQl9Ci0KLQlmYl9vcChmYl9yZXN1bHQsIGZiMSwgZmIyLCBuYml0 cyk7Ci0KLQkvKiBSZXNldCB0aGUgcHJuZ3MgdG8gcmVwbGF5IHRoZW0uICovCi0JcHJuZzEgPSBw cm5nX2luaXQxOwotCXBybmcyID0gcHJuZ19pbml0MjsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBp IDwgbmJpdHM7IGkrKykgewotCQlib29sIGJpdDEgPSAoKHBybmcxICYgKDFVTEwgPDwgKGkgJSA2 NCkpKSAhPSAwKTsKLQkJYm9vbCBiaXQyID0gKChwcm5nMiAmICgxVUxMIDw8IChpICUgNjQpKSkg IT0gMCk7Ci0KLQkJLyogT3JpZ2luYWwgYml0bWFwcyBzaG91bGRuJ3QgY2hhbmdlLiAqLwotCQll eHBlY3RfYl9lcShiaXQxLCBmYl9nZXQoZmIxLCBuYml0cywgaSksICJkaWZmZXJlbmNlIGF0IGJp dCAlenUiLCBpKTsKLQkJZXhwZWN0X2JfZXEoYml0MiwgZmJfZ2V0KGZiMiwgbmJpdHMsIGkpLCAi ZGlmZmVyZW5jZSBhdCBiaXQgJXp1IiwgaSk7Ci0KLQkJLyogTmV3IG9uZSBzaG91bGQgYmUgYml0 d2lzZSBhbmQuICovCi0JCWV4cGVjdF9iX2VxKG9wKGJpdDEsIGJpdDIpLCBmYl9nZXQoZmJfcmVz dWx0LCBuYml0cywgaSksCi0JCSAgICAiZGlmZmVyZW5jZSBhdCBiaXQgJXp1IiwgaSk7Ci0KLQkJ LyogVXBkYXRlIHRoZSBzYW1lIHdheSB3ZSBkaWQgbGFzdCB0aW1lLiAqLwotCQlpZiAoaSAlIDY0 ID09IDApIHsKLQkJCXBybmcxID0gcHJuZ19zdGF0ZV9uZXh0X3U2NChwcm5nMSk7Ci0JCQlwcm5n MiA9IHBybmdfc3RhdGVfbmV4dF91NjQocHJuZzIpOwotCQl9Ci0JfQotCi0JZnJlZShmYjEpOwot CWZyZWUoZmIyKTsKLQlmcmVlKGZiX3Jlc3VsdCk7Ci19Ci0KLXN0YXRpYyBib29sCi1iaW5hcnlf YW5kKGJvb2wgYSwgYm9vbCBiKSB7Ci0JcmV0dXJuIGEgJiBiOwotfQotCi1zdGF0aWMgdm9pZAot ZG9fdGVzdF9iaXRfYW5kKHNpemVfdCBuYml0cykgewotCWRvX3Rlc3RfYml0X29wKG5iaXRzLCAm YmluYXJ5X2FuZCwgJmZiX2JpdF9hbmQpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfYml0X2FuZCkg ewotI2RlZmluZSBOQihuYml0cykgXAotCWRvX3Rlc3RfYml0X2FuZChuYml0cyk7Ci0JTkJJVFNf VEFCCi0jdW5kZWYgTkIKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyBib29sCi1iaW5hcnlfb3IoYm9v bCBhLCBib29sIGIpIHsKLQlyZXR1cm4gYSB8IGI7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb190ZXN0 X2JpdF9vcihzaXplX3QgbmJpdHMpIHsKLQlkb190ZXN0X2JpdF9vcChuYml0cywgJmJpbmFyeV9v ciwgJmZiX2JpdF9vcik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9iaXRfb3IpIHsKLSNkZWZpbmUg TkIobmJpdHMpIFwKLQlkb190ZXN0X2JpdF9vcihuYml0cyk7Ci0JTkJJVFNfVEFCCi0jdW5kZWYg TkIKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyBib29sCi1iaW5hcnlfbm90KGJvb2wgYSwgYm9vbCBi KSB7Ci0JKHZvaWQpYjsKLQlyZXR1cm4gIWE7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mYl9iaXRfbm90 X3NoaW0oZmJfZ3JvdXBfdCAqZHN0LCBmYl9ncm91cF90ICpzcmMxLCBmYl9ncm91cF90ICpzcmMy LAotICAgIHNpemVfdCBuYml0cykgewotCSh2b2lkKXNyYzI7Ci0JZmJfYml0X25vdChkc3QsIHNy YzEsIG5iaXRzKTsKLX0KLQotc3RhdGljIHZvaWQKLWRvX3Rlc3RfYml0X25vdChzaXplX3QgbmJp dHMpIHsKLQlkb190ZXN0X2JpdF9vcChuYml0cywgJmJpbmFyeV9ub3QsICZmYl9iaXRfbm90X3No aW0pOwotfQotCi1URVNUX0JFR0lOKHRlc3RfYml0X25vdCkgewotI2RlZmluZSBOQihuYml0cykg XAotCWRvX3Rlc3RfYml0X25vdChuYml0cyk7Ci0JTkJJVFNfVEFCCi0jdW5kZWYgTkIKLX0KLVRF U1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgK LQkgICAgdGVzdF9mYl9pbml0LAotCSAgICB0ZXN0X2dldF9zZXRfdW5zZXQsCi0JICAgIHRlc3Rf c2VhcmNoX3NpbXBsZSwKLQkgICAgdGVzdF9zZWFyY2hfZXhoYXVzdGl2ZSwKLQkgICAgdGVzdF9y YW5nZV9zaW1wbGUsCi0JICAgIHRlc3RfZW1wdHlfZnVsbCwKLQkgICAgdGVzdF9pdGVyX3Jhbmdl X3NpbXBsZSwKLQkgICAgdGVzdF9pdGVyX3JhbmdlX2V4aGF1c3RpdmUsCi0JICAgIHRlc3RfY291 bnRfY29udGlndW91c19zaW1wbGUsCi0JICAgIHRlc3RfY291bnRfY29udGlndW91cywKLQkgICAg dGVzdF9jb3VudF9hbHRlcm5hdGluZywKLQkgICAgdGVzdF9iaXRfYW5kLAotCSAgICB0ZXN0X2Jp dF9vciwKLQkgICAgdGVzdF9iaXRfbm90KTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZm9yay5jIGIvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2ZvcmsuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggNDEzNzQyMy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvZm9yay5jCisrKyAvZGV2L251bGwKQEAg LTEsMTQxICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2lmbmRl ZiBfV0lOMzIKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2VuZGlmCi0KLSNpZm5kZWYgX1dJTjMy Ci1zdGF0aWMgdm9pZAotd2FpdF9mb3JfY2hpbGRfZXhpdChpbnQgcGlkKSB7Ci0JaW50IHN0YXR1 czsKLQl3aGlsZSAodHJ1ZSkgewotCQlpZiAod2FpdHBpZChwaWQsICZzdGF0dXMsIDApID09IC0x KSB7Ci0JCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgd2FpdHBpZCgpIGZhaWx1cmUuIik7Ci0JCX0K LQkJaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKLQkJCXRlc3RfZmFpbCgiVW5leHBlY3RlZCBj aGlsZCB0ZXJtaW5hdGlvbiBkdWUgdG8gIgotCQkJICAgICJzaWduYWwgJWQiLCBXVEVSTVNJRyhz dGF0dXMpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChXSUZFWElURUQoc3RhdHVzKSkgewotCQkJ aWYgKFdFWElUU1RBVFVTKHN0YXR1cykgIT0gMCkgewotCQkJCXRlc3RfZmFpbCgiVW5leHBlY3Rl ZCBjaGlsZCBleGl0IHZhbHVlICVkIiwKLQkJCQkgICAgV0VYSVRTVEFUVVMoc3RhdHVzKSk7Ci0J CQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLSNlbmRpZgotCi1URVNUX0JFR0lOKHRlc3RfZm9y aykgewotI2lmbmRlZiBfV0lOMzIKLQl2b2lkICpwOwotCXBpZF90IHBpZDsKLQotCS8qIFNldCB1 cCBhIG1hbnVhbGx5IG1hbmFnZWQgYXJlbmEgZm9yIHRlc3QuICovCi0JdW5zaWduZWQgYXJlbmFf aW5kOwotCXNpemVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0 bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAwKSwKLQkg ICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCS8qIE1pZ3JhdGUgdG8g dGhlIG5ldyBhcmVuYS4gKi8KLQl1bnNpZ25lZCBvbGRfYXJlbmFfaW5kOwotCXN6ID0gc2l6ZW9m KG9sZF9hcmVuYV9pbmQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5hcmVuYSIsICh2 b2lkICopJm9sZF9hcmVuYV9pbmQsICZzeiwKLQkgICAgKHZvaWQgKikmYXJlbmFfaW5kLCBzaXpl b2YoYXJlbmFfaW5kKSksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7 Ci0KLQlwID0gbWFsbG9jKDEpOwotCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQg bWFsbG9jKCkgZmFpbHVyZSIpOwotCi0JcGlkID0gZm9yaygpOwotCi0JZnJlZShwKTsKLQotCXAg PSBtYWxsb2MoNjQpOwotCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9j KCkgZmFpbHVyZSIpOwotCWZyZWUocCk7Ci0KLQlpZiAocGlkID09IC0xKSB7Ci0JCS8qIEVycm9y LiAqLwotCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgZm9yaygpIGZhaWx1cmUiKTsKLQl9IGVsc2Ug aWYgKHBpZCA9PSAwKSB7Ci0JCS8qIENoaWxkLiAqLwotCQlfZXhpdCgwKTsKLQl9IGVsc2Ugewot CQl3YWl0X2Zvcl9jaGlsZF9leGl0KHBpZCk7Ci0JfQotI2Vsc2UKLQl0ZXN0X3NraXAoImZvcmso MikgaXMgaXJyZWxldmFudCB0byBXaW5kb3dzIik7Ci0jZW5kaWYKLX0KLVRFU1RfRU5ECi0KLSNp Zm5kZWYgX1dJTjMyCi1zdGF0aWMgdm9pZCAqCi1kb19mb3JrX3RoZCh2b2lkICphcmcpIHsKLQlt YWxsb2MoMSk7Ci0JaW50IHBpZCA9IGZvcmsoKTsKLQlpZiAocGlkID09IC0xKSB7Ci0JCS8qIEVy cm9yLiAqLwotCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgZm9yaygpIGZhaWx1cmUiKTsKLQl9IGVs c2UgaWYgKHBpZCA9PSAwKSB7Ci0JCS8qIENoaWxkLiAqLwotCQljaGFyICphcmdzW10gPSB7InRy dWUiLCBOVUxMfTsKLQkJZXhlY3ZwKGFyZ3NbMF0sIGFyZ3MpOwotCQl0ZXN0X2ZhaWwoIkV4ZWMg ZmFpbGVkIik7Ci0JfSBlbHNlIHsKLQkJLyogUGFyZW50ICovCi0JCXdhaXRfZm9yX2NoaWxkX2V4 aXQocGlkKTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBfV0lOMzIK LXN0YXRpYyB2b2lkCi1kb190ZXN0X2ZvcmtfbXVsdGl0aHJlYWRlZCgpIHsKLQl0aGRfdCBjaGls ZDsKLQl0aGRfY3JlYXRlKCZjaGlsZCwgZG9fZm9ya190aGQsIE5VTEwpOwotCWRvX2ZvcmtfdGhk KE5VTEwpOwotCXRoZF9qb2luKGNoaWxkLCBOVUxMKTsKLX0KLSNlbmRpZgotCi1URVNUX0JFR0lO KHRlc3RfZm9ya19tdWx0aXRocmVhZGVkKSB7Ci0jaWZuZGVmIF9XSU4zMgotCS8qCi0JICogV2Un dmUgc2VlbiBidWdzIGludm9sdmluZyBoYW5naW5nIG9uIGFyZW5hc19sb2NrICh0aG91Z2ggdGhl IHNhbWUKLQkgKiBjbGFzcyBvZiBidWdzIGNhbiBoYXBwZW4gb24gYW55IG11dGV4KS4gIFRoZSBi dWdzIGFyZSBpbnRlcm1pdHRlbnQKLQkgKiB0aG91Z2gsIHNvIHdlIHdhbnQgdG8gcnVuIHRoZSB0 ZXN0IG11bHRpcGxlIHRpbWVzLiAgU2luY2Ugd2UgaG9sZCB0aGUKLQkgKiBhcmVuYXMgbG9jayBv bmx5IGVhcmx5IGluIHRoZSBwcm9jZXNzIGxpZmV0aW1lLCB3ZSBjYW4ndCBqdXN0IHJ1bgotCSAq IHRoaXMgdGVzdCBpbiBhIGxvb3AgKHNpbmNlLCBhZnRlciBhbGwgdGhlIGFyZW5hcyBhcmUgaW5p dGlhbGl6ZWQsIHdlCi0JICogd29uJ3QgYWNxdWlyZSBhcmVuYXNfbG9jayBhbnkgZnVydGhlciku ICBXZSB0aGVyZWZvcmUgcmVwZWF0IHRoZSB0ZXN0Ci0JICogd2l0aCBtdWx0aXBsZSBwcm9jZXNz ZXMuCi0JICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpbnQgcGlkID0g Zm9yaygpOwotCQlpZiAocGlkID09IC0xKSB7Ci0JCQkvKiBFcnJvci4gKi8KLQkJCXRlc3RfZmFp bCgiVW5leHBlY3RlZCBmb3JrKCkgZmFpbHVyZSwiKTsKLQkJfSBlbHNlIGlmIChwaWQgPT0gMCkg ewotCQkJLyogQ2hpbGQuICovCi0JCQlkb190ZXN0X2ZvcmtfbXVsdGl0aHJlYWRlZCgpOwotCQkJ X2V4aXQoMCk7Ci0JCX0gZWxzZSB7Ci0JCQl3YWl0X2Zvcl9jaGlsZF9leGl0KHBpZCk7Ci0JCX0K LQl9Ci0jZWxzZQotCXRlc3Rfc2tpcCgiZm9yaygyKSBpcyBpcnJlbGV2YW50IHRvIFdpbmRvd3Mi KTsKLSNlbmRpZgotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVz dF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0X2ZvcmssCi0JICAgIHRlc3RfZm9ya19tdWx0aXRo cmVhZGVkKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvZnhwLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvZnhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3 ZjEwOTcuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L2Z4cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLSNpbmNs dWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFs L2Z4cC5oIgotCi1zdGF0aWMgZG91YmxlCi1meHAyZG91YmxlKGZ4cF90IGEpIHsKLQlkb3VibGUg aW50cGFydCA9IChkb3VibGUpKGEgPj4gMTYpOwotCWRvdWJsZSBmcmFjcGFydCA9IChkb3VibGUp KGEgJiAoKDFVIDw8IDE2KSAtIDEpKSAvICgxVSA8PCAxNik7Ci0JcmV0dXJuIGludHBhcnQgKyBm cmFjcGFydDsKLX0KLQotLyogSXMgYSBjbG9zZSB0byBiPyAqLwotc3RhdGljIGJvb2wKLWRvdWJs ZV9jbG9zZShkb3VibGUgYSwgZG91YmxlIGIpIHsKLQkvKgotCSAqIE91ciBpbXBsZW1lbnRhdGlv biBkb2Vzbid0IHRyeSBmb3IgcHJlY2lzaW9uLiAgQ29ycmVzcG9uZGluZ2x5LCBkb24ndAotCSAq IGVuZm9yY2UgaXQgdG9vIHN0cmVudW91c2x5IGhlcmU7IGFjY2VwdCB2YWx1ZXMgdGhhdCBhcmUg Y2xvc2UgaW4KLQkgKiBlaXRoZXIgcmVsYXRpdmUgb3IgYWJzb2x1dGUgdGVybXMuCi0JICovCi0J cmV0dXJuIGZhYnMoYSAtIGIpIDwgMC4wMSB8fCBmYWJzKGEgLSBiKSAvIGEgPCAwLjAxOwotfQot Ci1zdGF0aWMgYm9vbAotZnhwX2Nsb3NlKGZ4cF90IGEsIGZ4cF90IGIpIHsKLQlyZXR1cm4gZG91 YmxlX2Nsb3NlKGZ4cDJkb3VibGUoYSksIGZ4cDJkb3VibGUoYikpOwotfQotCi1zdGF0aWMgZnhw X3QKLXhwYXJzZV9meHAoY29uc3QgY2hhciAqc3RyKSB7Ci0JZnhwX3QgcmVzdWx0OwotCWJvb2wg ZXJyID0gZnhwX3BhcnNlKCZyZXN1bHQsIHN0ciwgTlVMTCk7Ci0JYXNzZXJ0X2ZhbHNlKGVyciwg IkludmFsaWQgZnhwIHN0cmluZzogJXMiLCBzdHIpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1leHBlY3RfcGFyc2VfYWNjdXJhdGUoY29uc3QgY2hhciAqc3RyLCBjb25zdCBj aGFyICpwYXJzZV9zdHIpIHsKLQlkb3VibGUgdHJ1ZV92YWwgPSBzdHJ0b2Qoc3RyLCBOVUxMKTsK LQlmeHBfdCBmeHBfdmFsOwotCWNoYXIgKmVuZDsKLQlib29sIGVyciA9IGZ4cF9wYXJzZSgmZnhw X3ZhbCwgcGFyc2Vfc3RyLCAmZW5kKTsKLQlleHBlY3RfZmFsc2UoZXJyLCAiVW5leHBlY3RlZCBw YXJzZSBmYWlsdXJlIik7Ci0JZXhwZWN0X3B0cl9lcShwYXJzZV9zdHIgKyBzdHJsZW4oc3RyKSwg ZW5kLAotCSAgICAiRGlkbid0IHBhcnNlIHdob2xlIHN0cmluZyIpOwotCWV4cGVjdF90cnVlKGRv dWJsZV9jbG9zZShmeHAyZG91YmxlKGZ4cF92YWwpLCB0cnVlX3ZhbCksCi0JICAgICJNaXNwYXJz ZWQgJXMiLCBzdHIpOwotfQotCi1zdGF0aWMgdm9pZAotcGFyc2VfdmFsaWRfdHJpYWwoY29uc3Qg Y2hhciAqc3RyKSB7Ci0JLyogVGhlIHZhbHVlIGl0IHBhcnNlcyBzaG91bGQgYmUgY29ycmVjdC4g Ki8KLQlleHBlY3RfcGFyc2VfYWNjdXJhdGUoc3RyLCBzdHIpOwotCWNoYXIgYnVmWzEwMF07Ci0J c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzd2l0aF9zb21lX3RyYWlsaW5nX3RleHQiLCBz dHIpOwotCWV4cGVjdF9wYXJzZV9hY2N1cmF0ZShzdHIsIGJ1Zik7Ci0Jc25wcmludGYoYnVmLCBz aXplb2YoYnVmKSwgIiVzIHdpdGggYSBzcGFjZSIsIHN0cik7Ci0JZXhwZWN0X3BhcnNlX2FjY3Vy YXRlKHN0ciwgYnVmKTsKLQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMsaW5fYV9tYWxs b2NfY29uZl9zdHJpbmc6MSIsIHN0cik7Ci0JZXhwZWN0X3BhcnNlX2FjY3VyYXRlKHN0ciwgYnVm KTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3BhcnNlX3ZhbGlkKSB7Ci0JcGFyc2VfdmFsaWRfdHJp YWwoIjAiKTsKLQlwYXJzZV92YWxpZF90cmlhbCgiMSIpOwotCXBhcnNlX3ZhbGlkX3RyaWFsKCIy Iik7Ci0JcGFyc2VfdmFsaWRfdHJpYWwoIjEwMCIpOwotCXBhcnNlX3ZhbGlkX3RyaWFsKCIzNDUi KTsKLQlwYXJzZV92YWxpZF90cmlhbCgiMDAwMDAwMDAxMjMiKTsKLQlwYXJzZV92YWxpZF90cmlh bCgiMDAwMDAwMDA5ODciKTsKLQotCXBhcnNlX3ZhbGlkX3RyaWFsKCIwLjAiKTsKLQlwYXJzZV92 YWxpZF90cmlhbCgiMC4wMDAwMDAwMDAwMDQ1NjQ1NjQ1NiIpOwotCXBhcnNlX3ZhbGlkX3RyaWFs KCIxMDAuMDAwMDAwMDAwMDA0NTY0NTY0NTYiKTsKLQotCXBhcnNlX3ZhbGlkX3RyaWFsKCIxMjMu MSIpOwotCXBhcnNlX3ZhbGlkX3RyaWFsKCIxMjMuMDEiKTsKLQlwYXJzZV92YWxpZF90cmlhbCgi MTIzLjAwMSIpOwotCXBhcnNlX3ZhbGlkX3RyaWFsKCIxMjMuMDAwMSIpOwotCXBhcnNlX3ZhbGlk X3RyaWFsKCIxMjMuMDAwMDEiKTsKLQlwYXJzZV92YWxpZF90cmlhbCgiMTIzLjAwMDAwMSIpOwot CXBhcnNlX3ZhbGlkX3RyaWFsKCIxMjMuMDAwMDAwMSIpOwotCi0JcGFyc2VfdmFsaWRfdHJpYWwo Ii4wIik7Ci0JcGFyc2VfdmFsaWRfdHJpYWwoIi4xIik7Ci0JcGFyc2VfdmFsaWRfdHJpYWwoIi4w MSIpOwotCXBhcnNlX3ZhbGlkX3RyaWFsKCIuMDAxIik7Ci0JcGFyc2VfdmFsaWRfdHJpYWwoIi4w MDAxIik7Ci0JcGFyc2VfdmFsaWRfdHJpYWwoIi4wMDAwMSIpOwotCXBhcnNlX3ZhbGlkX3RyaWFs KCIuMDAwMDAxIik7Ci0KLQlwYXJzZV92YWxpZF90cmlhbCgiLjEiKTsKLQlwYXJzZV92YWxpZF90 cmlhbCgiLjEwIik7Ci0JcGFyc2VfdmFsaWRfdHJpYWwoIi4xMDAiKTsKLQlwYXJzZV92YWxpZF90 cmlhbCgiLjEwMDAiKTsKLQlwYXJzZV92YWxpZF90cmlhbCgiLjEwMDAwMCIpOwotfQotVEVTVF9F TkQKLQotc3RhdGljIHZvaWQKLWV4cGVjdF9wYXJzZV9mYWlsdXJlKGNvbnN0IGNoYXIgKnN0cikg ewotCWZ4cF90IHJlc3VsdCA9IEZYUF9JTklUX0lOVCgzMzMpOwotCWNoYXIgKmVuZCA9ICh2b2lk ICopMHgxMjM7Ci0JYm9vbCBlcnIgPSBmeHBfcGFyc2UoJnJlc3VsdCwgc3RyLCAmZW5kKTsKLQll eHBlY3RfdHJ1ZShlcnIsICJFeHBlY3RlZCBhIHBhcnNlIGVycm9yIG9uOiAlcyIsIHN0cik7Ci0J ZXhwZWN0X3B0cl9lcSgodm9pZCAqKTB4MTIzLCBlbmQsCi0JICAgICJQYXJzZSBlcnJvciBzaG91 bGRuJ3QgY2hhbmdlIHJlc3VsdHMiKTsKLQlleHBlY3RfdTMyX2VxKHJlc3VsdCwgRlhQX0lOSVRf SU5UKDMzMyksCi0JICAgICJQYXJzZSBlcnJvciBzaG91bGRuJ3QgY2hhbmdlIHJlc3VsdHMiKTsK LX0KLQotVEVTVF9CRUdJTih0ZXN0X3BhcnNlX2ludmFsaWQpIHsKLQlleHBlY3RfcGFyc2VfZmFp bHVyZSgiMTIzLiIpOwotCWV4cGVjdF9wYXJzZV9mYWlsdXJlKCIzLmEiKTsKLQlleHBlY3RfcGFy c2VfZmFpbHVyZSgiLmEiKTsKLQlleHBlY3RfcGFyc2VfZmFpbHVyZSgiYS4xIik7Ci0JZXhwZWN0 X3BhcnNlX2ZhaWx1cmUoImEiKTsKLQkvKiBBIHZhbGlkIHN0cmluZywgYnV0IG9uZSB0aGF0IG92 ZXJmbG93cy4gKi8KLQlleHBlY3RfcGFyc2VfZmFpbHVyZSgiMTIzNDU2Nzg5Iik7Ci0JZXhwZWN0 X3BhcnNlX2ZhaWx1cmUoIjAwMDAwMDAxMjM0NTY3ODkiKTsKLQlleHBlY3RfcGFyc2VfZmFpbHVy ZSgiMTAwMDAwMCIpOwotfQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLWV4cGVjdF9pbml0X3Bl cmNlbnQodW5zaWduZWQgcGVyY2VudCwgY29uc3QgY2hhciAqc3RyKSB7Ci0JZnhwX3QgcmVzdWx0 X2luaXQgPSBGWFBfSU5JVF9QRVJDRU5UKHBlcmNlbnQpOwotCWZ4cF90IHJlc3VsdF9wYXJzZSA9 IHhwYXJzZV9meHAoc3RyKTsKLQlleHBlY3RfdTMyX2VxKHJlc3VsdF9pbml0LCByZXN1bHRfcGFy c2UsCi0JICAgICJFeHBlY3QgcmVwcmVzZW50YXRpb25zIG9mIEZYUF9JTklUX1BFUkNFTlQoJXUp IGFuZCAiCi0JICAgICJmeHBfcGFyc2UoXCIlc1wiKSB0byBiZSBlcXVhbDsgZ290ICV4IGFuZCAl eCIsCi0JICAgIHBlcmNlbnQsIHN0ciwgcmVzdWx0X2luaXQsIHJlc3VsdF9wYXJzZSk7Ci0KLX0K LQotLyoKLSAqIEV2ZXJ5IG90aGVyIHRlc3QgdXNlcyBlaXRoZXIgcGFyc2luZyBvciBGWFBfSU5J VF9JTlQ7IGl0IGdldHMgdGVzdGVkIGluIHRob3NlCi0gKiB3YXlzLiAgV2UgbmVlZCBhIG9uZS1v ZmYgZm9yIHRoZSBwZXJjZW50LWJhc2VkIGluaXRpYWxpemF0aW9uLCB0aG91Z2guCi0gKi8KLVRF U1RfQkVHSU4odGVzdF9pbml0X3BlcmNlbnQpIHsKLQlleHBlY3RfaW5pdF9wZXJjZW50KDEwMCwg IjEiKTsKLQlleHBlY3RfaW5pdF9wZXJjZW50KDc1LCAiLjc1Iik7Ci0JZXhwZWN0X2luaXRfcGVy Y2VudCgxLCAiLjAxIik7Ci0JZXhwZWN0X2luaXRfcGVyY2VudCg1MCwgIi41Iik7Ci19Ci1URVNU X0VORAotCi1zdGF0aWMgdm9pZAotZXhwZWN0X2FkZChjb25zdCBjaGFyICphc3RyLCBjb25zdCBj aGFyICpic3RyLCBjb25zdCBjaGFyKiByZXN1bHRzdHIpIHsKLQlmeHBfdCBhID0geHBhcnNlX2Z4 cChhc3RyKTsKLQlmeHBfdCBiID0geHBhcnNlX2Z4cChic3RyKTsKLQlmeHBfdCByZXN1bHQgPSB4 cGFyc2VfZnhwKHJlc3VsdHN0cik7Ci0JZXhwZWN0X3RydWUoZnhwX2Nsb3NlKGZ4cF9hZGQoYSwg YiksIHJlc3VsdCksCi0JICAgICJFeHBlY3RlZCAlcyArICVzID09ICVzIiwgYXN0ciwgYnN0ciwg cmVzdWx0c3RyKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2FkZF9zaW1wbGUpIHsKLQlleHBlY3Rf YWRkKCIwIiwgIjAiLCAiMCIpOwotCWV4cGVjdF9hZGQoIjAiLCAiMSIsICIxIik7Ci0JZXhwZWN0 X2FkZCgiMSIsICIxIiwgIjIiKTsKLQlleHBlY3RfYWRkKCIxLjUiLCAiMS41IiwgIjMiKTsKLQll eHBlY3RfYWRkKCIwLjEiLCAiMC4xIiwgIjAuMiIpOwotCWV4cGVjdF9hZGQoIjEyMyIsICI0NTYi LCAiNTc5Iik7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAotZXhwZWN0X3N1Yihjb25zdCBj aGFyICphc3RyLCBjb25zdCBjaGFyICpic3RyLCBjb25zdCBjaGFyKiByZXN1bHRzdHIpIHsKLQlm eHBfdCBhID0geHBhcnNlX2Z4cChhc3RyKTsKLQlmeHBfdCBiID0geHBhcnNlX2Z4cChic3RyKTsK LQlmeHBfdCByZXN1bHQgPSB4cGFyc2VfZnhwKHJlc3VsdHN0cik7Ci0JZXhwZWN0X3RydWUoZnhw X2Nsb3NlKGZ4cF9zdWIoYSwgYiksIHJlc3VsdCksCi0JICAgICJFeHBlY3RlZCAlcyAtICVzID09 ICVzIiwgYXN0ciwgYnN0ciwgcmVzdWx0c3RyKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3N1Yl9z aW1wbGUpIHsKLQlleHBlY3Rfc3ViKCIwIiwgIjAiLCAiMCIpOwotCWV4cGVjdF9zdWIoIjEiLCAi MCIsICIxIik7Ci0JZXhwZWN0X3N1YigiMSIsICIxIiwgIjAiKTsKLQlleHBlY3Rfc3ViKCIzLjUi LCAiMS41IiwgIjIiKTsKLQlleHBlY3Rfc3ViKCIwLjMiLCAiMC4xIiwgIjAuMiIpOwotCWV4cGVj dF9zdWIoIjQ1NiIsICIxMjMiLCAiMzMzIik7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAot ZXhwZWN0X211bChjb25zdCBjaGFyICphc3RyLCBjb25zdCBjaGFyICpic3RyLCBjb25zdCBjaGFy KiByZXN1bHRzdHIpIHsKLQlmeHBfdCBhID0geHBhcnNlX2Z4cChhc3RyKTsKLQlmeHBfdCBiID0g eHBhcnNlX2Z4cChic3RyKTsKLQlmeHBfdCByZXN1bHQgPSB4cGFyc2VfZnhwKHJlc3VsdHN0cik7 Ci0JZXhwZWN0X3RydWUoZnhwX2Nsb3NlKGZ4cF9tdWwoYSwgYiksIHJlc3VsdCksCi0JICAgICJF eHBlY3RlZCAlcyAqICVzID09ICVzIiwgYXN0ciwgYnN0ciwgcmVzdWx0c3RyKTsKLX0KLQotVEVT VF9CRUdJTih0ZXN0X211bF9zaW1wbGUpIHsKLQlleHBlY3RfbXVsKCIwIiwgIjAiLCAiMCIpOwot CWV4cGVjdF9tdWwoIjEiLCAiMCIsICIwIik7Ci0JZXhwZWN0X211bCgiMSIsICIxIiwgIjEiKTsK LQlleHBlY3RfbXVsKCIxLjUiLCAiMS41IiwgIjIuMjUiKTsKLQlleHBlY3RfbXVsKCIxMDAuMCIs ICIxMCIsICIxMDAwIik7Ci0JZXhwZWN0X211bCgiLjEiLCAiMTAiLCAiMSIpOwotfQotVEVTVF9F TkQKLQotc3RhdGljIHZvaWQKLWV4cGVjdF9kaXYoY29uc3QgY2hhciAqYXN0ciwgY29uc3QgY2hh ciAqYnN0ciwgY29uc3QgY2hhciogcmVzdWx0c3RyKSB7Ci0JZnhwX3QgYSA9IHhwYXJzZV9meHAo YXN0cik7Ci0JZnhwX3QgYiA9IHhwYXJzZV9meHAoYnN0cik7Ci0JZnhwX3QgcmVzdWx0ID0geHBh cnNlX2Z4cChyZXN1bHRzdHIpOwotCWV4cGVjdF90cnVlKGZ4cF9jbG9zZShmeHBfZGl2KGEsIGIp LCByZXN1bHQpLAotCSAgICAiRXhwZWN0ZWQgJXMgLyAlcyA9PSAlcyIsIGFzdHIsIGJzdHIsIHJl c3VsdHN0cik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9kaXZfc2ltcGxlKSB7Ci0JZXhwZWN0X2Rp digiMSIsICIxIiwgIjEiKTsKLQlleHBlY3RfZGl2KCIwIiwgIjEiLCAiMCIpOwotCWV4cGVjdF9k aXYoIjIiLCAiMSIsICIyIik7Ci0JZXhwZWN0X2RpdigiMyIsICIyIiwgIjEuNSIpOwotCWV4cGVj dF9kaXYoIjMiLCAiMS41IiwgIjIiKTsKLQlleHBlY3RfZGl2KCIxMCIsICIuMSIsICIxMDAiKTsK LQlleHBlY3RfZGl2KCIxMjMiLCAiNDU2IiwgIi4yNjk3MzY4NDIxIik7Ci19Ci1URVNUX0VORAot Ci1zdGF0aWMgdm9pZAotZXhwZWN0X3JvdW5kKGNvbnN0IGNoYXIgKnN0ciwgdWludDMyX3Qgcm91 bmRlZF9kb3duLCB1aW50MzJfdCByb3VuZGVkX25lYXJlc3QpIHsKLQlmeHBfdCBmeHAgPSB4cGFy c2VfZnhwKHN0cik7Ci0JdWludDMyX3QgZnhwX3JvdW5kZWRfZG93biA9IGZ4cF9yb3VuZF9kb3du KGZ4cCk7Ci0JdWludDMyX3QgZnhwX3JvdW5kZWRfbmVhcmVzdCA9IGZ4cF9yb3VuZF9uZWFyZXN0 KGZ4cCk7Ci0JZXhwZWN0X3UzMl9lcShyb3VuZGVkX2Rvd24sIGZ4cF9yb3VuZGVkX2Rvd24sCi0J ICAgICJNaXN0YWtlIHJvdW5kaW5nICVzIGRvd24iLCBzdHIpOwotCWV4cGVjdF91MzJfZXEocm91 bmRlZF9uZWFyZXN0LCBmeHBfcm91bmRlZF9uZWFyZXN0LAotCSAgICAiTWlzdGFrZSByb3VuZGlu ZyAlcyB0byBuZWFyZXN0Iiwgc3RyKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3JvdW5kX3NpbXBs ZSkgewotCWV4cGVjdF9yb3VuZCgiMS41IiwgMSwgMik7Ci0JZXhwZWN0X3JvdW5kKCIwIiwgMCwg MCk7Ci0JZXhwZWN0X3JvdW5kKCIwLjEiLCAwLCAwKTsKLQlleHBlY3Rfcm91bmQoIjAuNCIsIDAs IDApOwotCWV4cGVjdF9yb3VuZCgiMC40MDAwMCIsIDAsIDApOwotCWV4cGVjdF9yb3VuZCgiMC41 IiwgMCwgMSk7Ci0JZXhwZWN0X3JvdW5kKCIwLjYiLCAwLCAxKTsKLQlleHBlY3Rfcm91bmQoIjEy MyIsIDEyMywgMTIzKTsKLQlleHBlY3Rfcm91bmQoIjEyMy40IiwgMTIzLCAxMjMpOwotCWV4cGVj dF9yb3VuZCgiMTIzLjUiLCAxMjMsIDEyNCk7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAot ZXhwZWN0X211bF9mcmFjKHNpemVfdCBhLCBjb25zdCBjaGFyICpmcmFjc3RyLCBzaXplX3QgZXhw ZWN0ZWQpIHsKLQlmeHBfdCBmcmFjID0geHBhcnNlX2Z4cChmcmFjc3RyKTsKLQlzaXplX3QgcmVz dWx0ID0gZnhwX211bF9mcmFjKGEsIGZyYWMpOwotCWV4cGVjdF90cnVlKGRvdWJsZV9jbG9zZShl eHBlY3RlZCwgcmVzdWx0KSwKLQkgICAgIkV4cGVjdGVkICV6dSAqICVzID09ICV6dSAoZnJhY211 bCk7IGdvdCAlenUiLCBhLCBmcmFjc3RyLAotCSAgICBleHBlY3RlZCwgcmVzdWx0KTsKLX0KLQot VEVTVF9CRUdJTih0ZXN0X211bF9mcmFjX3NpbXBsZSkgewotCWV4cGVjdF9tdWxfZnJhYyhTSVpF X01BWCwgIjEuMCIsIFNJWkVfTUFYKTsKLQlleHBlY3RfbXVsX2ZyYWMoU0laRV9NQVgsICIuNzUi LCBTSVpFX01BWCAvIDQgKiAzKTsKLQlleHBlY3RfbXVsX2ZyYWMoU0laRV9NQVgsICIuNSIsIFNJ WkVfTUFYIC8gMik7Ci0JZXhwZWN0X211bF9mcmFjKFNJWkVfTUFYLCAiLjI1IiwgU0laRV9NQVgg LyA0KTsKLQlleHBlY3RfbXVsX2ZyYWMoMVUgPDwgMTYsICIxLjAiLCAxVSA8PCAxNik7Ci0JZXhw ZWN0X211bF9mcmFjKDFVIDw8IDMwLCAiMC41IiwgMVUgPDwgMjkpOwotCWV4cGVjdF9tdWxfZnJh YygxVSA8PCAzMCwgIjAuMjUiLCAxVSA8PCAyOCk7Ci0JZXhwZWN0X211bF9mcmFjKDFVIDw8IDMw LCAiMC4xMjUiLCAxVSA8PCAyNyk7Ci0JZXhwZWN0X211bF9mcmFjKCgxVSA8PCAzMCkgKyAxLCAi MC4xMjUiLCAxVSA8PCAyNyk7Ci0JZXhwZWN0X211bF9mcmFjKDEwMCwgIjAuMjUiLCAyNSk7Ci0J ZXhwZWN0X211bF9mcmFjKDEwMDAgKiAxMDAwLCAiMC4wMDEiLCAxMDAwKTsKLX0KLVRFU1RfRU5E Ci0KLXN0YXRpYyB2b2lkCi1leHBlY3RfcHJpbnQoY29uc3QgY2hhciAqc3RyKSB7Ci0JZnhwX3Qg ZnhwID0geHBhcnNlX2Z4cChzdHIpOwotCWNoYXIgYnVmW0ZYUF9CVUZfU0laRV07Ci0JZnhwX3By aW50KGZ4cCwgYnVmKTsKLQlleHBlY3RfZF9lcSgwLCBzdHJjbXAoc3RyLCBidWYpLCAiQ291bGRu J3Qgcm91bmQtdHJpcCBwcmludCAlcyIsIHN0cik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9wcmlu dF9zaW1wbGUpIHsKLQlleHBlY3RfcHJpbnQoIjAuMCIpOwotCWV4cGVjdF9wcmludCgiMS4wIik7 Ci0JZXhwZWN0X3ByaW50KCIyLjAiKTsKLQlleHBlY3RfcHJpbnQoIjEyMy4wIik7Ci0JLyoKLQkg KiBXZSBoaXQgdGhlIHBvc3NpYmlsaXR5IG9mIHJvdW5kb2ZmIGVycm9ycyB3aGVuZXZlciB0aGUg ZnJhY3Rpb25hbAotCSAqIGNvbXBvbmVudCBpc24ndCBhIHJvdW5kIGJpbmFyeSBudW1iZXI7IG9u bHkgY2hlY2sgdGhlc2UgaGVyZSAod2UKLQkgKiByb3VuZC10cmlwIHByb3Blcmx5IGluIHRoZSBz dHJlc3MgdGVzdCkuCi0JICovCi0JZXhwZWN0X3ByaW50KCIxLjUiKTsKLQlleHBlY3RfcHJpbnQo IjMuMzc1Iik7Ci0JZXhwZWN0X3ByaW50KCIwLjI1Iik7Ci0JZXhwZWN0X3ByaW50KCIwLjEyNSIp OwotCS8qIDEgLyAyKioxNCAqLwotCWV4cGVjdF9wcmludCgiMC4wMDAwNjEwMzUxNTYyNSIpOwot fQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3N0cmVzcykgewotCWNvbnN0IGNoYXIgKm51 bWJlcnNbXSA9IHsKLQkJIjAuMCIsICIwLjEiLCAiMC4yIiwgIjAuMyIsICIwLjQiLAotCQkiMC41 IiwgIjAuNiIsICIwLjciLCAiMC44IiwgIjAuOSIsCi0KLQkJIjEuMCIsICIxLjEiLCAiMS4yIiwg IjEuMyIsICIxLjQiLAotCQkiMS41IiwgIjEuNiIsICIxLjciLCAiMS44IiwgIjEuOSIsCi0KLQkJ IjIuMCIsICIyLjEiLCAiMi4yIiwgIjIuMyIsICIyLjQiLAotCQkiMi41IiwgIjIuNiIsICIyLjci LCAiMi44IiwgIjIuOSIsCi0KLQkJIjE3LjAiLCAiMTcuMSIsICIxNy4yIiwgIjE3LjMiLCAiMTcu NCIsCi0JCSIxNy41IiwgIjE3LjYiLCAiMTcuNyIsICIxNy44IiwgIjE3LjkiLAotCi0JCSIxOC4w IiwgIjE4LjEiLCAiMTguMiIsICIxOC4zIiwgIjE4LjQiLAotCQkiMTguNSIsICIxOC42IiwgIjE4 LjciLCAiMTguOCIsICIxOC45IiwKLQotCQkiMTIzLjAiLCAiMTIzLjEiLCAiMTIzLjIiLCAiMTIz LjMiLCAiMTIzLjQiLAotCQkiMTIzLjUiLCAiMTIzLjYiLCAiMTIzLjciLCAiMTIzLjgiLCAiMTIz LjkiLAotCi0JCSIxMjQuMCIsICIxMjQuMSIsICIxMjQuMiIsICIxMjQuMyIsICIxMjQuNCIsCi0J CSIxMjQuNSIsICIxMjQuNiIsICIxMjQuNyIsICIxMjQuOCIsICIxMjQuOSIsCi0KLQkJIjEyNS4w IiwgIjEyNS4xIiwgIjEyNS4yIiwgIjEyNS4zIiwgIjEyNS40IiwKLQkJIjEyNS41IiwgIjEyNS42 IiwgIjEyNS43IiwgIjEyNS44IiwgIjEyNS45In07Ci0Jc2l6ZV90IG51bWJlcnNfbGVuID0gc2l6 ZW9mKG51bWJlcnMpL3NpemVvZihudW1iZXJzWzBdKTsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8 IG51bWJlcnNfbGVuOyBpKyspIHsKLQkJZnhwX3QgZnhwX2EgPSB4cGFyc2VfZnhwKG51bWJlcnNb aV0pOwotCQlkb3VibGUgZG91YmxlX2EgPSBzdHJ0b2QobnVtYmVyc1tpXSwgTlVMTCk7Ci0KLQkJ dWludDMyX3QgZnhwX3JvdW5kZWRfZG93biA9IGZ4cF9yb3VuZF9kb3duKGZ4cF9hKTsKLQkJdWlu dDMyX3QgZnhwX3JvdW5kZWRfbmVhcmVzdCA9IGZ4cF9yb3VuZF9uZWFyZXN0KGZ4cF9hKTsKLQkJ dWludDMyX3QgZG91YmxlX3JvdW5kZWRfZG93biA9ICh1aW50MzJfdClkb3VibGVfYTsKLQkJdWlu dDMyX3QgZG91YmxlX3JvdW5kZWRfbmVhcmVzdCA9ICh1aW50MzJfdClyb3VuZChkb3VibGVfYSk7 Ci0KLQkJZXhwZWN0X3UzMl9lcShkb3VibGVfcm91bmRlZF9kb3duLCBmeHBfcm91bmRlZF9kb3du LAotCQkgICAgIkluY29ycmVjdGx5IHJvdW5kZWQgZG93biAlcyIsIG51bWJlcnNbaV0pOwotCQll eHBlY3RfdTMyX2VxKGRvdWJsZV9yb3VuZGVkX25lYXJlc3QsIGZ4cF9yb3VuZGVkX25lYXJlc3Qs Ci0JCSAgICAiSW5jb3JyZWN0bHkgcm91bmRlZC10by1uZWFyZXN0ICVzIiwgbnVtYmVyc1tpXSk7 Ci0KLQkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBudW1iZXJzX2xlbjsgaisrKSB7Ci0JCQlmeHBf dCBmeHBfYiA9IHhwYXJzZV9meHAobnVtYmVyc1tqXSk7Ci0JCQlkb3VibGUgZG91YmxlX2IgPSBz dHJ0b2QobnVtYmVyc1tqXSwgTlVMTCk7Ci0KLQkJCWZ4cF90IGZ4cF9zdW0gPSBmeHBfYWRkKGZ4 cF9hLCBmeHBfYik7Ci0JCQlkb3VibGUgZG91YmxlX3N1bSA9IGRvdWJsZV9hICsgZG91YmxlX2I7 Ci0JCQlleHBlY3RfdHJ1ZSgKLQkJCSAgICBkb3VibGVfY2xvc2UoZnhwMmRvdWJsZShmeHBfc3Vt KSwgZG91YmxlX3N1bSksCi0JCQkgICAgIk1pc2NvbXB1dGVkICVzICsgJXMiLCBudW1iZXJzW2ld LCBudW1iZXJzW2pdKTsKLQotCQkJaWYgKGRvdWJsZV9hID4gZG91YmxlX2IpIHsKLQkJCQlmeHBf dCBmeHBfZGlmZiA9IGZ4cF9zdWIoZnhwX2EsIGZ4cF9iKTsKLQkJCQlkb3VibGUgZG91YmxlX2Rp ZmYgPSBkb3VibGVfYSAtIGRvdWJsZV9iOwotCQkJCWV4cGVjdF90cnVlKAotCQkJCSAgICBkb3Vi bGVfY2xvc2UoZnhwMmRvdWJsZShmeHBfZGlmZiksCi0JCQkJICAgIGRvdWJsZV9kaWZmKSwKLQkJ CQkgICAgIk1pc2NvbXB1dGVkICVzIC0gJXMiLCBudW1iZXJzW2ldLAotCQkJCSAgICBudW1iZXJz W2pdKTsKLQkJCX0KLQotCQkJZnhwX3QgZnhwX3Byb2QgPSBmeHBfbXVsKGZ4cF9hLCBmeHBfYik7 Ci0JCQlkb3VibGUgZG91YmxlX3Byb2QgPSBkb3VibGVfYSAqIGRvdWJsZV9iOwotCQkJZXhwZWN0 X3RydWUoCi0JCQkgICAgZG91YmxlX2Nsb3NlKGZ4cDJkb3VibGUoZnhwX3Byb2QpLCBkb3VibGVf cHJvZCksCi0JCQkgICAgIk1pc2NvbXB1dGVkICVzICogJXMiLCBudW1iZXJzW2ldLCBudW1iZXJz W2pdKTsKLQotCQkJaWYgKGRvdWJsZV9iICE9IDAuMCkgewotCQkJCWZ4cF90IGZ4cF9xdW90ID0g ZnhwX2RpdihmeHBfYSwgZnhwX2IpOwotCQkJCWRvdWJsZSBkb3VibGVfcXVvdCA9IGRvdWJsZV9h IC8gZG91YmxlX2I7Ci0JCQkJZXhwZWN0X3RydWUoCi0JCQkJICAgIGRvdWJsZV9jbG9zZShmeHAy ZG91YmxlKGZ4cF9xdW90KSwKLQkJCQkgICAgZG91YmxlX3F1b3QpLAotCQkJCSAgICAiTWlzY29t cHV0ZWQgJXMgLyAlcyIsIG51bWJlcnNbaV0sCi0JCQkJICAgIG51bWJlcnNbal0pOwotCQkJfQot CQl9Ci0JfQotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdF9u b19yZWVudHJhbmN5KAotCSAgICB0ZXN0X3BhcnNlX3ZhbGlkLAotCSAgICB0ZXN0X3BhcnNlX2lu dmFsaWQsCi0JICAgIHRlc3RfaW5pdF9wZXJjZW50LAotCSAgICB0ZXN0X2FkZF9zaW1wbGUsCi0J ICAgIHRlc3Rfc3ViX3NpbXBsZSwKLQkgICAgdGVzdF9tdWxfc2ltcGxlLAotCSAgICB0ZXN0X2Rp dl9zaW1wbGUsCi0JICAgIHRlc3Rfcm91bmRfc2ltcGxlLAotCSAgICB0ZXN0X211bF9mcmFjX3Np bXBsZSwKLQkgICAgdGVzdF9wcmludF9zaW1wbGUsCi0JICAgIHRlc3Rfc3RyZXNzKTsKLX0KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvaGFzaC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L2hhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlmMDgyMy4uMDAwMDAw MAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv aGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUg aXMgYmFzZWQgb24gY29kZSB0aGF0IGlzIHBhcnQgb2YgU01IYXNoZXIKLSAqIChodHRwczovL2Nv ZGUuZ29vZ2xlLmNvbS9wL3NtaGFzaGVyLyksIGFuZCBpcyBzdWJqZWN0IHRvIHRoZSBNSVQgbGlj ZW5zZQotICogKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2Uu cGhwKS4gIEJvdGggZW1haWwgYWRkcmVzc2VzCi0gKiBhc3NvY2lhdGVkIHdpdGggdGhlIHNvdXJj ZSBjb2RlJ3MgcmV2aXNpb24gaGlzdG9yeSBiZWxvbmcgdG8gQXVzdGluIEFwcGxlYnksCi0gKiBh bmQgdGhlIHJldmlzaW9uIGhpc3RvcnkgcmFuZ2VzIGZyb20gMjAxMCB0byAyMDEyLiAgVGhlcmVm b3JlIHRoZSBjb3B5cmlnaHQKLSAqIGFuZCBsaWNlbnNlIGFyZSBoZXJlIHRha2VuIHRvIGJlOgot ICoKLSAqIENvcHlyaWdodCAoYykgMjAxMC0yMDEyIEF1c3RpbiBBcHBsZWJ5Ci0gKgotICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRo ZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotICogZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0g KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz aGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJ TkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgotICogVEhFIFNPRlRXQVJFLgot ICovCi0KLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLSNpbmNsdWRlICJqZW1hbGxv Yy9pbnRlcm5hbC9oYXNoLmgiCi0KLXR5cGVkZWYgZW51bSB7Ci0JaGFzaF92YXJpYW50X3g4Nl8z MiwKLQloYXNoX3ZhcmlhbnRfeDg2XzEyOCwKLQloYXNoX3ZhcmlhbnRfeDY0XzEyOAotfSBoYXNo X3ZhcmlhbnRfdDsKLQotc3RhdGljIGludAotaGFzaF92YXJpYW50X2JpdHMoaGFzaF92YXJpYW50 X3QgdmFyaWFudCkgewotCXN3aXRjaCAodmFyaWFudCkgewotCWNhc2UgaGFzaF92YXJpYW50X3g4 Nl8zMjogcmV0dXJuIDMyOwotCWNhc2UgaGFzaF92YXJpYW50X3g4Nl8xMjg6IHJldHVybiAxMjg7 Ci0JY2FzZSBoYXNoX3ZhcmlhbnRfeDY0XzEyODogcmV0dXJuIDEyODsKLQlkZWZhdWx0OiBub3Rf cmVhY2hlZCgpOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotaGFzaF92YXJpYW50X3N0 cmluZyhoYXNoX3ZhcmlhbnRfdCB2YXJpYW50KSB7Ci0Jc3dpdGNoICh2YXJpYW50KSB7Ci0JY2Fz ZSBoYXNoX3ZhcmlhbnRfeDg2XzMyOiByZXR1cm4gImhhc2hfeDg2XzMyIjsKLQljYXNlIGhhc2hf dmFyaWFudF94ODZfMTI4OiByZXR1cm4gImhhc2hfeDg2XzEyOCI7Ci0JY2FzZSBoYXNoX3Zhcmlh bnRfeDY0XzEyODogcmV0dXJuICJoYXNoX3g2NF8xMjgiOwotCWRlZmF1bHQ6IG5vdF9yZWFjaGVk KCk7Ci0JfQotfQotCi0jZGVmaW5lIEtFWV9TSVpFCTI1Ngotc3RhdGljIHZvaWQKLWhhc2hfdmFy aWFudF92ZXJpZnlfa2V5KGhhc2hfdmFyaWFudF90IHZhcmlhbnQsIHVpbnQ4X3QgKmtleSkgewot CWNvbnN0IGludCBoYXNoYnl0ZXMgPSBoYXNoX3ZhcmlhbnRfYml0cyh2YXJpYW50KSAvIDg7Ci0J Y29uc3QgaW50IGhhc2hlc19zaXplID0gaGFzaGJ5dGVzICogMjU2OwotCVZBUklBQkxFX0FSUkFZ KHVpbnQ4X3QsIGhhc2hlcywgaGFzaGVzX3NpemUpOwotCVZBUklBQkxFX0FSUkFZKHVpbnQ4X3Qs IGZpbmFsLCBoYXNoYnl0ZXMpOwotCXVuc2lnbmVkIGk7Ci0JdWludDMyX3QgY29tcHV0ZWQsIGV4 cGVjdGVkOwotCi0JbWVtc2V0KGtleSwgMCwgS0VZX1NJWkUpOwotCW1lbXNldChoYXNoZXMsIDAs IGhhc2hlc19zaXplKTsKLQltZW1zZXQoZmluYWwsIDAsIGhhc2hieXRlcyk7Ci0KLQkvKgotCSAq IEhhc2gga2V5cyBvZiB0aGUgZm9ybSB7MH0sIHswLDF9LCB7MCwxLDJ9LCAuLi4sIHswLDEsLi4u LDI1NX0gYXMgdGhlCi0JICogc2VlZC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKysp IHsKLQkJa2V5W2ldID0gKHVpbnQ4X3QpaTsKLQkJc3dpdGNoICh2YXJpYW50KSB7Ci0JCWNhc2Ug aGFzaF92YXJpYW50X3g4Nl8zMjogewotCQkJdWludDMyX3Qgb3V0OwotCQkJb3V0ID0gaGFzaF94 ODZfMzIoa2V5LCBpLCAyNTYtaSk7Ci0JCQltZW1jcHkoJmhhc2hlc1tpKmhhc2hieXRlc10sICZv dXQsIGhhc2hieXRlcyk7Ci0JCQlicmVhazsKLQkJfSBjYXNlIGhhc2hfdmFyaWFudF94ODZfMTI4 OiB7Ci0JCQl1aW50NjRfdCBvdXRbMl07Ci0JCQloYXNoX3g4Nl8xMjgoa2V5LCBpLCAyNTYtaSwg b3V0KTsKLQkJCW1lbWNweSgmaGFzaGVzW2kqaGFzaGJ5dGVzXSwgb3V0LCBoYXNoYnl0ZXMpOwot CQkJYnJlYWs7Ci0JCX0gY2FzZSBoYXNoX3ZhcmlhbnRfeDY0XzEyODogewotCQkJdWludDY0X3Qg b3V0WzJdOwotCQkJaGFzaF94NjRfMTI4KGtleSwgaSwgMjU2LWksIG91dCk7Ci0JCQltZW1jcHko Jmhhc2hlc1tpKmhhc2hieXRlc10sIG91dCwgaGFzaGJ5dGVzKTsKLQkJCWJyZWFrOwotCQl9IGRl ZmF1bHQ6IG5vdF9yZWFjaGVkKCk7Ci0JCX0KLQl9Ci0KLQkvKiBIYXNoIHRoZSByZXN1bHQgYXJy YXkuICovCi0Jc3dpdGNoICh2YXJpYW50KSB7Ci0JY2FzZSBoYXNoX3ZhcmlhbnRfeDg2XzMyOiB7 Ci0JCXVpbnQzMl90IG91dCA9IGhhc2hfeDg2XzMyKGhhc2hlcywgaGFzaGVzX3NpemUsIDApOwot CQltZW1jcHkoZmluYWwsICZvdXQsIHNpemVvZihvdXQpKTsKLQkJYnJlYWs7Ci0JfSBjYXNlIGhh c2hfdmFyaWFudF94ODZfMTI4OiB7Ci0JCXVpbnQ2NF90IG91dFsyXTsKLQkJaGFzaF94ODZfMTI4 KGhhc2hlcywgaGFzaGVzX3NpemUsIDAsIG91dCk7Ci0JCW1lbWNweShmaW5hbCwgb3V0LCBzaXpl b2Yob3V0KSk7Ci0JCWJyZWFrOwotCX0gY2FzZSBoYXNoX3ZhcmlhbnRfeDY0XzEyODogewotCQl1 aW50NjRfdCBvdXRbMl07Ci0JCWhhc2hfeDY0XzEyOChoYXNoZXMsIGhhc2hlc19zaXplLCAwLCBv dXQpOwotCQltZW1jcHkoZmluYWwsIG91dCwgc2l6ZW9mKG91dCkpOwotCQlicmVhazsKLQl9IGRl ZmF1bHQ6IG5vdF9yZWFjaGVkKCk7Ci0JfQotCi0JY29tcHV0ZWQgPSAoZmluYWxbMF0gPDwgMCkg fCAoZmluYWxbMV0gPDwgOCkgfCAoZmluYWxbMl0gPDwgMTYpIHwKLQkgICAgKGZpbmFsWzNdIDw8 IDI0KTsKLQotCXN3aXRjaCAodmFyaWFudCkgewotI2lmZGVmIEpFTUFMTE9DX0JJR19FTkRJQU4K LQljYXNlIGhhc2hfdmFyaWFudF94ODZfMzI6IGV4cGVjdGVkID0gMHg2MjEzMzAzZVU7IGJyZWFr OwotCWNhc2UgaGFzaF92YXJpYW50X3g4Nl8xMjg6IGV4cGVjdGVkID0gMHgyNjY4MjBjYVU7IGJy ZWFrOwotCWNhc2UgaGFzaF92YXJpYW50X3g2NF8xMjg6IGV4cGVjdGVkID0gMHhjYzYyMmI2ZlU7 IGJyZWFrOwotI2Vsc2UKLQljYXNlIGhhc2hfdmFyaWFudF94ODZfMzI6IGV4cGVjdGVkID0gMHhi MGY1N2VlM1U7IGJyZWFrOwotCWNhc2UgaGFzaF92YXJpYW50X3g4Nl8xMjg6IGV4cGVjdGVkID0g MHhiM2VjZTYyYVU7IGJyZWFrOwotCWNhc2UgaGFzaF92YXJpYW50X3g2NF8xMjg6IGV4cGVjdGVk ID0gMHg2Mzg0YmE2OVU7IGJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDogbm90X3JlYWNoZWQoKTsK LQl9Ci0KLQlleHBlY3RfdTMyX2VxKGNvbXB1dGVkLCBleHBlY3RlZCwKLQkgICAgIkhhc2ggbWlz bWF0Y2ggZm9yICVzKCk6IGV4cGVjdGVkICUjeCBidXQgZ290ICUjeCIsCi0JICAgIGhhc2hfdmFy aWFudF9zdHJpbmcodmFyaWFudCksIGV4cGVjdGVkLCBjb21wdXRlZCk7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1oYXNoX3ZhcmlhbnRfdmVyaWZ5KGhhc2hfdmFyaWFudF90IHZhcmlhbnQpIHsKLSNkZWZp bmUgTUFYX0FMSUdOCTE2Ci0JdWludDhfdCBrZXlbS0VZX1NJWkUgKyAoTUFYX0FMSUdOIC0gMSld OwotCXVuc2lnbmVkIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0FMSUdOOyBpKyspIHsKLQkJ aGFzaF92YXJpYW50X3ZlcmlmeV9rZXkodmFyaWFudCwgJmtleVtpXSk7Ci0JfQotI3VuZGVmIE1B WF9BTElHTgotfQotI3VuZGVmIEtFWV9TSVpFCi0KLVRFU1RfQkVHSU4odGVzdF9oYXNoX3g4Nl8z MikgewotCWhhc2hfdmFyaWFudF92ZXJpZnkoaGFzaF92YXJpYW50X3g4Nl8zMik7Ci19Ci1URVNU X0VORAotCi1URVNUX0JFR0lOKHRlc3RfaGFzaF94ODZfMTI4KSB7Ci0JaGFzaF92YXJpYW50X3Zl cmlmeShoYXNoX3ZhcmlhbnRfeDg2XzEyOCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRl c3RfaGFzaF94NjRfMTI4KSB7Ci0JaGFzaF92YXJpYW50X3ZlcmlmeShoYXNoX3ZhcmlhbnRfeDY0 XzEyOCk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0KAot CSAgICB0ZXN0X2hhc2hfeDg2XzMyLAotCSAgICB0ZXN0X2hhc2hfeDg2XzEyOCwKLQkgICAgdGVz dF9oYXNoX3g2NF8xMjgpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ob29rLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaG9vay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAxNmE2ZjFiLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ob29rLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1ODYgKzAs MCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxs b2MvaW50ZXJuYWwvaG9vay5oIgotCi1zdGF0aWMgdm9pZCAqYXJnX2V4dHJhOwotc3RhdGljIGlu dCBhcmdfdHlwZTsKLXN0YXRpYyB2b2lkICphcmdfcmVzdWx0Owotc3RhdGljIHZvaWQgKmFyZ19h ZGRyZXNzOwotc3RhdGljIHNpemVfdCBhcmdfb2xkX3VzaXplOwotc3RhdGljIHNpemVfdCBhcmdf bmV3X3VzaXplOwotc3RhdGljIHVpbnRwdHJfdCBhcmdfcmVzdWx0X3JhdzsKLXN0YXRpYyB1aW50 cHRyX3QgYXJnX2FyZ3NfcmF3WzRdOwotCi1zdGF0aWMgaW50IGNhbGxfY291bnQgPSAwOwotCi1z dGF0aWMgdm9pZAotcmVzZXRfYXJncygpIHsKLQlhcmdfZXh0cmEgPSBOVUxMOwotCWFyZ190eXBl ID0gMTIzNDU7Ci0JYXJnX3Jlc3VsdCA9IE5VTEw7Ci0JYXJnX2FkZHJlc3MgPSBOVUxMOwotCWFy Z19vbGRfdXNpemUgPSAwOwotCWFyZ19uZXdfdXNpemUgPSAwOwotCWFyZ19yZXN1bHRfcmF3ID0g MDsKLQltZW1zZXQoYXJnX2FyZ3NfcmF3LCA3Nywgc2l6ZW9mKGFyZ19hcmdzX3JhdykpOwotfQot Ci1zdGF0aWMgdm9pZAotYWxsb2NfZnJlZV9zaXplKHNpemVfdCBzeikgewotCXZvaWQgKnB0ciA9 IG1hbGxvY3goMSwgMCk7Ci0JZnJlZShwdHIpOwotCXB0ciA9IG1hbGxvY3goMSwgMCk7Ci0JZnJl ZShwdHIpOwotCXB0ciA9IG1hbGxvY3goMSwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JZGFsbG9j eChwdHIsIE1BTExPQ1hfVENBQ0hFX05PTkUpOwotfQotCi0vKgotICogV2Ugd2FudCB0byBzdXBw b3J0IGEgZGVncmVlIG9mIHVzZXIgcmVlbnRyYW5jeS4gIFRoaXMgdGVzdHMgYSB2YXJpZXR5IG9m Ci0gKiBhbGxvY2F0aW9uIHNjZW5hcmlvcy4KLSAqLwotc3RhdGljIHZvaWQKLWJlX3JlZW50cmFu dCgpIHsKLQkvKiBMZXQncyBtYWtlIHN1cmUgdGhlIHRjYWNoZSBpcyBub24tZW1wdHkgaWYgZW5h YmxlZC4gKi8KLQlhbGxvY19mcmVlX3NpemUoMSk7Ci0JYWxsb2NfZnJlZV9zaXplKDEwMjQpOwot CWFsbG9jX2ZyZWVfc2l6ZSg2NCAqIDEwMjQpOwotCWFsbG9jX2ZyZWVfc2l6ZSgyNTYgKiAxMDI0 KTsKLQlhbGxvY19mcmVlX3NpemUoMTAyNCAqIDEwMjQpOwotCi0JLyogU29tZSByZWFsbG9jYXRp b24uICovCi0Jdm9pZCAqcHRyID0gbWFsbG9jeCgxMjksIDApOwotCXB0ciA9IHJhbGxvY3gocHRy LCAxMzAsIDApOwotCWZyZWUocHRyKTsKLQotCXB0ciA9IG1hbGxvY3goMiAqIDEwMjQgKiAxMDI0 LCAwKTsKLQlmcmVlKHB0cik7Ci0JcHRyID0gbWFsbG9jeCgxICogMTAyNCAqIDEwMjQsIDApOwot CXB0ciA9IHJhbGxvY3gocHRyLCAyICogMTAyNCAqIDEwMjQsIDApOwotCWZyZWUocHRyKTsKLQot CXB0ciA9IG1hbGxvY3goMSwgMCk7Ci0JcHRyID0gcmFsbG9jeChwdHIsIDEwMDAsIDApOwotCWZy ZWUocHRyKTsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9hcmdzX3Jhdyh1aW50cHRyX3QgKmFyZ3Nf cmF3LCBpbnQgbmFyZ3MpIHsKLQltZW1jcHkoYXJnX2FyZ3NfcmF3LCBhcmdzX3Jhdywgc2l6ZW9m KHVpbnRwdHJfdCkgKiBuYXJncyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1leHBlY3RfYXJnc19yYXco dWludHB0cl90ICphcmdzX3Jhd19leHBlY3RlZCwgaW50IG5hcmdzKSB7Ci0JaW50IGNtcCA9IG1l bWNtcChhcmdzX3Jhd19leHBlY3RlZCwgYXJnX2FyZ3NfcmF3LAotCSAgICBzaXplb2YodWludHB0 cl90KSAqIG5hcmdzKTsKLQlleHBlY3RfZF9lcShjbXAsIDAsICJSYXcgYXJncyBtaXNtYXRjaCIp OwotfQotCi1zdGF0aWMgdm9pZAotcmVzZXQoKSB7Ci0JY2FsbF9jb3VudCA9IDA7Ci0JcmVzZXRf YXJncygpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9hbGxvY19ob29rKHZvaWQgKmV4dHJhLCBo b29rX2FsbG9jX3QgdHlwZSwgdm9pZCAqcmVzdWx0LAotICAgIHVpbnRwdHJfdCByZXN1bHRfcmF3 LCB1aW50cHRyX3QgYXJnc19yYXdbM10pIHsKLQljYWxsX2NvdW50Kys7Ci0JYXJnX2V4dHJhID0g ZXh0cmE7Ci0JYXJnX3R5cGUgPSAoaW50KXR5cGU7Ci0JYXJnX3Jlc3VsdCA9IHJlc3VsdDsKLQlh cmdfcmVzdWx0X3JhdyA9IHJlc3VsdF9yYXc7Ci0Jc2V0X2FyZ3NfcmF3KGFyZ3NfcmF3LCAzKTsK LQliZV9yZWVudHJhbnQoKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3RfZGFsbG9jX2hvb2sodm9p ZCAqZXh0cmEsIGhvb2tfZGFsbG9jX3QgdHlwZSwgdm9pZCAqYWRkcmVzcywKLSAgICB1aW50cHRy X3QgYXJnc19yYXdbM10pIHsKLQljYWxsX2NvdW50Kys7Ci0JYXJnX2V4dHJhID0gZXh0cmE7Ci0J YXJnX3R5cGUgPSAoaW50KXR5cGU7Ci0JYXJnX2FkZHJlc3MgPSBhZGRyZXNzOwotCXNldF9hcmdz X3JhdyhhcmdzX3JhdywgMyk7Ci0JYmVfcmVlbnRyYW50KCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi10 ZXN0X2V4cGFuZF9ob29rKHZvaWQgKmV4dHJhLCBob29rX2V4cGFuZF90IHR5cGUsIHZvaWQgKmFk ZHJlc3MsCi0gICAgc2l6ZV90IG9sZF91c2l6ZSwgc2l6ZV90IG5ld191c2l6ZSwgdWludHB0cl90 IHJlc3VsdF9yYXcsCi0gICAgdWludHB0cl90IGFyZ3NfcmF3WzRdKSB7Ci0JY2FsbF9jb3VudCsr OwotCWFyZ19leHRyYSA9IGV4dHJhOwotCWFyZ190eXBlID0gKGludCl0eXBlOwotCWFyZ19hZGRy ZXNzID0gYWRkcmVzczsKLQlhcmdfb2xkX3VzaXplID0gb2xkX3VzaXplOwotCWFyZ19uZXdfdXNp emUgPSBuZXdfdXNpemU7Ci0JYXJnX3Jlc3VsdF9yYXcgPSByZXN1bHRfcmF3OwotCXNldF9hcmdz X3JhdyhhcmdzX3JhdywgNCk7Ci0JYmVfcmVlbnRyYW50KCk7Ci19Ci0KLVRFU1RfQkVHSU4odGVz dF9ob29rc19iYXNpYykgewotCS8qIEp1c3QgdmVyaWZ5IHRoYXQgdGhlIHJlY29yZCB0aGVpciBh cmd1bWVudHMgY29ycmVjdGx5LiAqLwotCWhvb2tzX3QgaG9va3MgPSB7Ci0JCSZ0ZXN0X2FsbG9j X2hvb2ssICZ0ZXN0X2RhbGxvY19ob29rLCAmdGVzdF9leHBhbmRfaG9vaywKLQkJKHZvaWQgKikx MTF9OwotCXZvaWQgKmhhbmRsZSA9IGhvb2tfaW5zdGFsbChUU0ROX05VTEwsICZob29rcyk7Ci0J dWludHB0cl90IGFyZ3NfcmF3WzRdID0gezEwLCAyMCwgMzAsIDQwfTsKLQotCS8qIEFsbG9jICov Ci0JcmVzZXRfYXJncygpOwotCWhvb2tfaW52b2tlX2FsbG9jKGhvb2tfYWxsb2NfcG9zaXhfbWVt YWxpZ24sICh2b2lkICopMjIyLCAzMzMsCi0JICAgIGFyZ3NfcmF3KTsKLQlleHBlY3RfcHRyX2Vx KGFyZ19leHRyYSwgKHZvaWQgKikxMTEsICJQYXNzZWQgd3JvbmcgdXNlciBwb2ludGVyIik7Ci0J ZXhwZWN0X2RfZXEoKGludClob29rX2FsbG9jX3Bvc2l4X21lbWFsaWduLCBhcmdfdHlwZSwKLQkg ICAgIlBhc3NlZCB3cm9uZyBhbGxvYyB0eXBlIik7Ci0JZXhwZWN0X3B0cl9lcSgodm9pZCAqKTIy MiwgYXJnX3Jlc3VsdCwgIlBhc3NlZCB3cm9uZyByZXN1bHQgYWRkcmVzcyIpOwotCWV4cGVjdF91 NjRfZXEoMzMzLCBhcmdfcmVzdWx0X3JhdywgIlBhc3NlZCB3cm9uZyByZXN1bHQiKTsKLQlleHBl Y3RfYXJnc19yYXcoYXJnc19yYXcsIDMpOwotCi0JLyogRGFsbG9jICovCi0JcmVzZXRfYXJncygp OwotCWhvb2tfaW52b2tlX2RhbGxvYyhob29rX2RhbGxvY19zZGFsbG9jeCwgKHZvaWQgKikyMjIs IGFyZ3NfcmF3KTsKLQlleHBlY3RfZF9lcSgoaW50KWhvb2tfZGFsbG9jX3NkYWxsb2N4LCBhcmdf dHlwZSwKLQkgICAgIlBhc3NlZCB3cm9uZyBkYWxsb2MgdHlwZSIpOwotCWV4cGVjdF9wdHJfZXEo KHZvaWQgKikxMTEsIGFyZ19leHRyYSwgIlBhc3NlZCB3cm9uZyB1c2VyIHBvaW50ZXIiKTsKLQll eHBlY3RfcHRyX2VxKCh2b2lkICopMjIyLCBhcmdfYWRkcmVzcywgIlBhc3NlZCB3cm9uZyBhZGRy ZXNzIik7Ci0JZXhwZWN0X2FyZ3NfcmF3KGFyZ3NfcmF3LCAzKTsKLQotCS8qIEV4cGFuZCAqLwot CXJlc2V0X2FyZ3MoKTsKLQlob29rX2ludm9rZV9leHBhbmQoaG9va19leHBhbmRfeGFsbG9jeCwg KHZvaWQgKikyMjIsIDMzMywgNDQ0LCA1NTUsCi0JICAgIGFyZ3NfcmF3KTsKLQlleHBlY3RfZF9l cSgoaW50KWhvb2tfZXhwYW5kX3hhbGxvY3gsIGFyZ190eXBlLAotCSAgICAiUGFzc2VkIHdyb25n IGV4cGFuZCB0eXBlIik7Ci0JZXhwZWN0X3B0cl9lcSgodm9pZCAqKTExMSwgYXJnX2V4dHJhLCAi UGFzc2VkIHdyb25nIHVzZXIgcG9pbnRlciIpOwotCWV4cGVjdF9wdHJfZXEoKHZvaWQgKikyMjIs IGFyZ19hZGRyZXNzLCAiUGFzc2VkIHdyb25nIGFkZHJlc3MiKTsKLQlleHBlY3RfenVfZXEoMzMz LCBhcmdfb2xkX3VzaXplLCAiUGFzc2VkIHdyb25nIG9sZCB1c2l6ZSIpOwotCWV4cGVjdF96dV9l cSg0NDQsIGFyZ19uZXdfdXNpemUsICJQYXNzZWQgd3JvbmcgbmV3IHVzaXplIik7Ci0JZXhwZWN0 X3p1X2VxKDU1NSwgYXJnX3Jlc3VsdF9yYXcsICJQYXNzZWQgd3JvbmcgcmVzdWx0Iik7Ci0JZXhw ZWN0X2FyZ3NfcmF3KGFyZ3NfcmF3LCA0KTsKLQotCWhvb2tfcmVtb3ZlKFRTRE5fTlVMTCwgaGFu ZGxlKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9ob29rc19udWxsKSB7Ci0JLyog TnVsbCBob29rcyBzaG91bGQgYmUgaWdub3JlZCwgbm90IGNyYXNoLiAqLwotCWhvb2tzX3QgaG9v a3MxID0ge05VTEwsIE5VTEwsIE5VTEwsIE5VTEx9OwotCWhvb2tzX3QgaG9va3MyID0geyZ0ZXN0 X2FsbG9jX2hvb2ssIE5VTEwsIE5VTEwsIE5VTEx9OwotCWhvb2tzX3QgaG9va3MzID0ge05VTEws ICZ0ZXN0X2RhbGxvY19ob29rLCBOVUxMLCBOVUxMfTsKLQlob29rc190IGhvb2tzNCA9IHtOVUxM LCBOVUxMLCAmdGVzdF9leHBhbmRfaG9vaywgTlVMTH07Ci0KLQl2b2lkICpoYW5kbGUxID0gaG9v a19pbnN0YWxsKFRTRE5fTlVMTCwgJmhvb2tzMSk7Ci0Jdm9pZCAqaGFuZGxlMiA9IGhvb2tfaW5z dGFsbChUU0ROX05VTEwsICZob29rczIpOwotCXZvaWQgKmhhbmRsZTMgPSBob29rX2luc3RhbGwo VFNETl9OVUxMLCAmaG9va3MzKTsKLQl2b2lkICpoYW5kbGU0ID0gaG9va19pbnN0YWxsKFRTRE5f TlVMTCwgJmhvb2tzNCk7Ci0KLQlleHBlY3RfcHRyX25lKGhhbmRsZTEsIE5VTEwsICJIb29rIGlu c3RhbGxhdGlvbiBmYWlsZWQiKTsKLQlleHBlY3RfcHRyX25lKGhhbmRsZTIsIE5VTEwsICJIb29r IGluc3RhbGxhdGlvbiBmYWlsZWQiKTsKLQlleHBlY3RfcHRyX25lKGhhbmRsZTMsIE5VTEwsICJI b29rIGluc3RhbGxhdGlvbiBmYWlsZWQiKTsKLQlleHBlY3RfcHRyX25lKGhhbmRsZTQsIE5VTEws ICJIb29rIGluc3RhbGxhdGlvbiBmYWlsZWQiKTsKLQotCXVpbnRwdHJfdCBhcmdzX3Jhd1s0XSA9 IHsxMCwgMjAsIDMwLCA0MH07Ci0KLQljYWxsX2NvdW50ID0gMDsKLQlob29rX2ludm9rZV9hbGxv Yyhob29rX2FsbG9jX21hbGxvYywgTlVMTCwgMCwgYXJnc19yYXcpOwotCWV4cGVjdF9kX2VxKGNh bGxfY291bnQsIDEsICJDYWxsZWQgd3JvbmcgbnVtYmVyIG9mIHRpbWVzIik7Ci0KLQljYWxsX2Nv dW50ID0gMDsKLQlob29rX2ludm9rZV9kYWxsb2MoaG9va19kYWxsb2NfZnJlZSwgTlVMTCwgYXJn c19yYXcpOwotCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJDYWxsZWQgd3JvbmcgbnVtYmVy IG9mIHRpbWVzIik7Ci0KLQljYWxsX2NvdW50ID0gMDsKLQlob29rX2ludm9rZV9leHBhbmQoaG9v a19leHBhbmRfcmVhbGxvYywgTlVMTCwgMCwgMCwgMCwgYXJnc19yYXcpOwotCWV4cGVjdF9kX2Vx KGNhbGxfY291bnQsIDEsICJDYWxsZWQgd3JvbmcgbnVtYmVyIG9mIHRpbWVzIik7Ci0KLQlob29r X3JlbW92ZShUU0ROX05VTEwsIGhhbmRsZTEpOwotCWhvb2tfcmVtb3ZlKFRTRE5fTlVMTCwgaGFu ZGxlMik7Ci0JaG9va19yZW1vdmUoVFNETl9OVUxMLCBoYW5kbGUzKTsKLQlob29rX3JlbW92ZShU U0ROX05VTEwsIGhhbmRsZTQpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2hvb2tz X3JlbW92ZSkgewotCWhvb2tzX3QgaG9va3MgPSB7JnRlc3RfYWxsb2NfaG9vaywgTlVMTCwgTlVM TCwgTlVMTH07Ci0Jdm9pZCAqaGFuZGxlID0gaG9va19pbnN0YWxsKFRTRE5fTlVMTCwgJmhvb2tz KTsKLQlleHBlY3RfcHRyX25lKGhhbmRsZSwgTlVMTCwgIkhvb2sgaW5zdGFsbGF0aW9uIGZhaWxl ZCIpOwotCWNhbGxfY291bnQgPSAwOwotCXVpbnRwdHJfdCBhcmdzX3Jhd1s0XSA9IHsxMCwgMjAs IDMwLCA0MH07Ci0JaG9va19pbnZva2VfYWxsb2MoaG9va19hbGxvY19tYWxsb2MsIE5VTEwsIDAs IGFyZ3NfcmF3KTsKLQlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAxLCAiSG9vayBub3QgaW52b2tl ZCIpOwotCi0JY2FsbF9jb3VudCA9IDA7Ci0JaG9va19yZW1vdmUoVFNETl9OVUxMLCBoYW5kbGUp OwotCWhvb2tfaW52b2tlX2FsbG9jKGhvb2tfYWxsb2NfbWFsbG9jLCBOVUxMLCAwLCBOVUxMKTsK LQlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAwLCAiSG9vayBpbnZva2VkIGFmdGVyIHJlbW92YWwi KTsKLQotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2hvb2tzX2FsbG9jX3NpbXBsZSkg ewotCS8qICJTaW1wbGUiIGluIHRoZSBzZW5zZSB0aGF0IHdlJ3JlIG5vdCBpbiBhIHJlYWxsb2Mg dmFyaWFudC4gKi8KLQlob29rc190IGhvb2tzID0geyZ0ZXN0X2FsbG9jX2hvb2ssIE5VTEwsIE5V TEwsICh2b2lkICopMTIzfTsKLQl2b2lkICpoYW5kbGUgPSBob29rX2luc3RhbGwoVFNETl9OVUxM LCAmaG9va3MpOwotCWV4cGVjdF9wdHJfbmUoaGFuZGxlLCBOVUxMLCAiSG9vayBpbnN0YWxsYXRp b24gZmFpbGVkIik7Ci0KLQkvKiBTdG9wIG1hbGxvYyBmcm9tIGJlaW5nIG9wdGltaXplZCBhd2F5 LiAqLwotCXZvbGF0aWxlIGludCBlcnI7Ci0Jdm9pZCAqdm9sYXRpbGUgcHRyOwotCi0JLyogbWFs bG9jICovCi0JcmVzZXQoKTsKLQlwdHIgPSBtYWxsb2MoMSk7Ci0JZXhwZWN0X2RfZXEoY2FsbF9j b3VudCwgMSwgIkhvb2sgbm90IGNhbGxlZCIpOwotCWV4cGVjdF9wdHJfZXEoYXJnX2V4dHJhLCAo dm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7Ci0JZXhwZWN0X2RfZXEoYXJnX3R5cGUsIChpbnQp aG9va19hbGxvY19tYWxsb2MsICJXcm9uZyBob29rIHR5cGUiKTsKLQlleHBlY3RfcHRyX2VxKHB0 ciwgYXJnX3Jlc3VsdCwgIldyb25nIHJlc3VsdCIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJf dClwdHIsICh1aW50cHRyX3QpYXJnX3Jlc3VsdF9yYXcsCi0JICAgICJXcm9uZyByYXcgcmVzdWx0 Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTEsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25n IGFyZ3VtZW50Iik7Ci0JZnJlZShwdHIpOwotCi0JLyogcG9zaXhfbWVtYWxpZ24gKi8KLQlyZXNl dCgpOwotCWVyciA9IHBvc2l4X21lbWFsaWduKCh2b2lkICoqKSZwdHIsIDEwMjQsIDEpOwotCWV4 cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJIb29rIG5vdCBjYWxsZWQiKTsKLQlleHBlY3RfcHRy X2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMsICJXcm9uZyBleHRyYSIpOwotCWV4cGVjdF9kX2Vx KGFyZ190eXBlLCAoaW50KWhvb2tfYWxsb2NfcG9zaXhfbWVtYWxpZ24sCi0JICAgICJXcm9uZyBo b29rIHR5cGUiKTsKLQlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX3Jlc3VsdCwgIldyb25nIHJlc3Vs dCIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdCllcnIsICh1aW50cHRyX3QpYXJnX3Jlc3Vs dF9yYXcsCi0JICAgICJXcm9uZyByYXcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0 cl90KSZwdHIsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZ3VtZW50Iik7Ci0JZXhwZWN0X3U2 NF9lcSgodWludHB0cl90KTEwMjQsIGFyZ19hcmdzX3Jhd1sxXSwgIldyb25nIGFyZ3VtZW50Iik7 Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTEsIGFyZ19hcmdzX3Jhd1syXSwgIldyb25nIGFy Z3VtZW50Iik7Ci0JZnJlZShwdHIpOwotCi0JLyogYWxpZ25lZF9hbGxvYyAqLwotCXJlc2V0KCk7 Ci0JcHRyID0gYWxpZ25lZF9hbGxvYygxMDI0LCAxKTsKLQlleHBlY3RfZF9lcShjYWxsX2NvdW50 LCAxLCAiSG9vayBub3QgY2FsbGVkIik7Ci0JZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lk ICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKLQlleHBlY3RfZF9lcShhcmdfdHlwZSwgKGludClob29r X2FsbG9jX2FsaWduZWRfYWxsb2MsCi0JICAgICJXcm9uZyBob29rIHR5cGUiKTsKLQlleHBlY3Rf cHRyX2VxKHB0ciwgYXJnX3Jlc3VsdCwgIldyb25nIHJlc3VsdCIpOwotCWV4cGVjdF91NjRfZXEo KHVpbnRwdHJfdClwdHIsICh1aW50cHRyX3QpYXJnX3Jlc3VsdF9yYXcsCi0JICAgICJXcm9uZyBy YXcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTEwMjQsIGFyZ19hcmdzX3Jh d1swXSwgIldyb25nIGFyZ3VtZW50Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTEsIGFy Z19hcmdzX3Jhd1sxXSwgIldyb25nIGFyZ3VtZW50Iik7Ci0JZnJlZShwdHIpOwotCi0JLyogY2Fs bG9jICovCi0JcmVzZXQoKTsKLQlwdHIgPSBjYWxsb2MoMTEsIDEzKTsKLQlleHBlY3RfZF9lcShj YWxsX2NvdW50LCAxLCAiSG9vayBub3QgY2FsbGVkIik7Ci0JZXhwZWN0X3B0cl9lcShhcmdfZXh0 cmEsICh2b2lkICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKLQlleHBlY3RfZF9lcShhcmdfdHlwZSwg KGludClob29rX2FsbG9jX2NhbGxvYywgIldyb25nIGhvb2sgdHlwZSIpOwotCWV4cGVjdF9wdHJf ZXEocHRyLCBhcmdfcmVzdWx0LCAiV3JvbmcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWlu dHB0cl90KXB0ciwgKHVpbnRwdHJfdClhcmdfcmVzdWx0X3JhdywKLQkgICAgIldyb25nIHJhdyBy ZXN1bHQiKTsKLQlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMTEsIGFyZ19hcmdzX3Jhd1swXSwg Ildyb25nIGFyZ3VtZW50Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTEzLCBhcmdfYXJn c19yYXdbMV0sICJXcm9uZyBhcmd1bWVudCIpOwotCWZyZWUocHRyKTsKLQotCS8qIG1lbWFsaWdu ICovCi0jaWZkZWYgSkVNQUxMT0NfT1ZFUlJJREVfTUVNQUxJR04KLQlyZXNldCgpOwotCXB0ciA9 IG1lbWFsaWduKDEwMjQsIDEpOwotCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJIb29rIG5v dCBjYWxsZWQiKTsKLQlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMsICJXcm9u ZyBleHRyYSIpOwotCWV4cGVjdF9kX2VxKGFyZ190eXBlLCAoaW50KWhvb2tfYWxsb2NfbWVtYWxp Z24sICJXcm9uZyBob29rIHR5cGUiKTsKLQlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX3Jlc3VsdCwg Ildyb25nIHJlc3VsdCIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIsICh1aW50cHRy X3QpYXJnX3Jlc3VsdF9yYXcsCi0JICAgICJXcm9uZyByYXcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2 NF9lcSgodWludHB0cl90KTEwMjQsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZ3VtZW50Iik7 Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTEsIGFyZ19hcmdzX3Jhd1sxXSwgIldyb25nIGFy Z3VtZW50Iik7Ci0JZnJlZShwdHIpOwotI2VuZGlmIC8qIEpFTUFMTE9DX09WRVJSSURFX01FTUFM SUdOICovCi0KLQkvKiB2YWxsb2MgKi8KLSNpZmRlZiBKRU1BTExPQ19PVkVSUklERV9WQUxMT0MK LQlyZXNldCgpOwotCXB0ciA9IHZhbGxvYygxKTsKLQlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAx LCAiSG9vayBub3QgY2FsbGVkIik7Ci0JZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lkICop MTIzLCAiV3JvbmcgZXh0cmEiKTsKLQlleHBlY3RfZF9lcShhcmdfdHlwZSwgKGludClob29rX2Fs bG9jX3ZhbGxvYywgIldyb25nIGhvb2sgdHlwZSIpOwotCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdf cmVzdWx0LCAiV3JvbmcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwg KHVpbnRwdHJfdClhcmdfcmVzdWx0X3JhdywKLQkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKLQll eHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMSwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1l bnQiKTsKLQlmcmVlKHB0cik7Ci0jZW5kaWYgLyogSkVNQUxMT0NfT1ZFUlJJREVfVkFMTE9DICov Ci0KLQkvKiBtYWxsb2N4ICovCi0JcmVzZXQoKTsKLQlwdHIgPSBtYWxsb2N4KDEsIE1BTExPQ1hf TEdfQUxJR04oMTApKTsKLQlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAxLCAiSG9vayBub3QgY2Fs bGVkIik7Ci0JZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lkICopMTIzLCAiV3JvbmcgZXh0 cmEiKTsKLQlleHBlY3RfZF9lcShhcmdfdHlwZSwgKGludClob29rX2FsbG9jX21hbGxvY3gsICJX cm9uZyBob29rIHR5cGUiKTsKLQlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX3Jlc3VsdCwgIldyb25n IHJlc3VsdCIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIsICh1aW50cHRyX3QpYXJn X3Jlc3VsdF9yYXcsCi0JICAgICJXcm9uZyByYXcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2NF9lcSgo dWludHB0cl90KTEsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZ3VtZW50Iik7Ci0JZXhwZWN0 X3U2NF9lcSgodWludHB0cl90KU1BTExPQ1hfTEdfQUxJR04oMTApLCBhcmdfYXJnc19yYXdbMV0s Ci0JICAgICJXcm9uZyBmbGFncyIpOwotCWZyZWUocHRyKTsKLQotCWhvb2tfcmVtb3ZlKFRTRE5f TlVMTCwgaGFuZGxlKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9ob29rc19kYWxs b2Nfc2ltcGxlKSB7Ci0JLyogIlNpbXBsZSIgaW4gdGhlIHNlbnNlIHRoYXQgd2UncmUgbm90IGlu IGEgcmVhbGxvYyB2YXJpYW50LiAqLwotCWhvb2tzX3QgaG9va3MgPSB7TlVMTCwgJnRlc3RfZGFs bG9jX2hvb2ssIE5VTEwsICh2b2lkICopMTIzfTsKLQl2b2lkICpoYW5kbGUgPSBob29rX2luc3Rh bGwoVFNETl9OVUxMLCAmaG9va3MpOwotCWV4cGVjdF9wdHJfbmUoaGFuZGxlLCBOVUxMLCAiSG9v ayBpbnN0YWxsYXRpb24gZmFpbGVkIik7Ci0KLQl2b2lkICp2b2xhdGlsZSBwdHI7Ci0KLQkvKiBm cmVlKCkgKi8KLQlyZXNldCgpOwotCXB0ciA9IG1hbGxvYygxKTsKLQlmcmVlKHB0cik7Ci0JZXhw ZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwgIkhvb2sgbm90IGNhbGxlZCIpOwotCWV4cGVjdF9wdHJf ZXEoYXJnX2V4dHJhLCAodm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7Ci0JZXhwZWN0X2RfZXEo YXJnX3R5cGUsIChpbnQpaG9va19kYWxsb2NfZnJlZSwgIldyb25nIGhvb2sgdHlwZSIpOwotCWV4 cGVjdF9wdHJfZXEocHRyLCBhcmdfYWRkcmVzcywgIldyb25nIHBvaW50ZXIgZnJlZWQiKTsKLQll eHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpcHRyLCBhcmdfYXJnc19yYXdbMF0sICJXcm9uZyByYXcg YXJnIik7Ci0KLQkvKiBkYWxsb2N4KCkgKi8KLQlyZXNldCgpOwotCXB0ciA9IG1hbGxvYygxKTsK LQlkYWxsb2N4KHB0ciwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JZXhwZWN0X2RfZXEoY2FsbF9j b3VudCwgMSwgIkhvb2sgbm90IGNhbGxlZCIpOwotCWV4cGVjdF9wdHJfZXEoYXJnX2V4dHJhLCAo dm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7Ci0JZXhwZWN0X2RfZXEoYXJnX3R5cGUsIChpbnQp aG9va19kYWxsb2NfZGFsbG9jeCwgIldyb25nIGhvb2sgdHlwZSIpOwotCWV4cGVjdF9wdHJfZXEo cHRyLCBhcmdfYWRkcmVzcywgIldyb25nIHBvaW50ZXIgZnJlZWQiKTsKLQlleHBlY3RfdTY0X2Vx KCh1aW50cHRyX3QpcHRyLCBhcmdfYXJnc19yYXdbMF0sICJXcm9uZyByYXcgYXJnIik7Ci0JZXhw ZWN0X3U2NF9lcSgodWludHB0cl90KU1BTExPQ1hfVENBQ0hFX05PTkUsIGFyZ19hcmdzX3Jhd1sx XSwKLQkgICAgIldyb25nIHJhdyBhcmciKTsKLQotCS8qIHNkYWxsb2N4KCkgKi8KLQlyZXNldCgp OwotCXB0ciA9IG1hbGxvYygxKTsKLQlzZGFsbG9jeChwdHIsIDEsIE1BTExPQ1hfVENBQ0hFX05P TkUpOwotCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJIb29rIG5vdCBjYWxsZWQiKTsKLQll eHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMsICJXcm9uZyBleHRyYSIpOwotCWV4 cGVjdF9kX2VxKGFyZ190eXBlLCAoaW50KWhvb2tfZGFsbG9jX3NkYWxsb2N4LCAiV3JvbmcgaG9v ayB0eXBlIik7Ci0JZXhwZWN0X3B0cl9lcShwdHIsIGFyZ19hZGRyZXNzLCAiV3JvbmcgcG9pbnRl ciBmcmVlZCIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIsIGFyZ19hcmdzX3Jhd1sw XSwgIldyb25nIHJhdyBhcmciKTsKLQlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpMSwgYXJnX2Fy Z3NfcmF3WzFdLCAiV3JvbmcgcmF3IGFyZyIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClN QUxMT0NYX1RDQUNIRV9OT05FLCBhcmdfYXJnc19yYXdbMl0sCi0JICAgICJXcm9uZyByYXcgYXJn Iik7Ci0KLQlob29rX3JlbW92ZShUU0ROX05VTEwsIGhhbmRsZSk7Ci19Ci1URVNUX0VORAotCi1U RVNUX0JFR0lOKHRlc3RfaG9va3NfZXhwYW5kX3NpbXBsZSkgewotCS8qICJTaW1wbGUiIGluIHRo ZSBzZW5zZSB0aGF0IHdlJ3JlIG5vdCBpbiBhIHJlYWxsb2MgdmFyaWFudC4gKi8KLQlob29rc190 IGhvb2tzID0ge05VTEwsIE5VTEwsICZ0ZXN0X2V4cGFuZF9ob29rLCAodm9pZCAqKTEyM307Ci0J dm9pZCAqaGFuZGxlID0gaG9va19pbnN0YWxsKFRTRE5fTlVMTCwgJmhvb2tzKTsKLQlleHBlY3Rf cHRyX25lKGhhbmRsZSwgTlVMTCwgIkhvb2sgaW5zdGFsbGF0aW9uIGZhaWxlZCIpOwotCi0Jdm9p ZCAqdm9sYXRpbGUgcHRyOwotCi0JLyogeGFsbG9jeCgpICovCi0JcmVzZXQoKTsKLQlwdHIgPSBt YWxsb2MoMSk7Ci0Jc2l6ZV90IG5ld191c2l6ZSA9IHhhbGxvY3gocHRyLCAxMDAsIDIwMCwgTUFM TE9DWF9UQ0FDSEVfTk9ORSk7Ci0JZXhwZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwgIkhvb2sgbm90 IGNhbGxlZCIpOwotCWV4cGVjdF9wdHJfZXEoYXJnX2V4dHJhLCAodm9pZCAqKTEyMywgIldyb25n IGV4dHJhIik7Ci0JZXhwZWN0X2RfZXEoYXJnX3R5cGUsIChpbnQpaG9va19leHBhbmRfeGFsbG9j eCwgIldyb25nIGhvb2sgdHlwZSIpOwotCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfYWRkcmVzcywg Ildyb25nIHBvaW50ZXIgZXhwYW5kZWQiKTsKLQlleHBlY3RfdTY0X2VxKGFyZ19vbGRfdXNpemUs IG5hbGxvY3goMSwgMCksICJXcm9uZyBvbGQgdXNpemUiKTsKLQlleHBlY3RfdTY0X2VxKGFyZ19u ZXdfdXNpemUsIHNhbGxvY3gocHRyLCAwKSwgIldyb25nIG5ldyB1c2l6ZSIpOwotCWV4cGVjdF91 NjRfZXEobmV3X3VzaXplLCBhcmdfcmVzdWx0X3JhdywgIldyb25nIHJlc3VsdCIpOwotCWV4cGVj dF91NjRfZXEoKHVpbnRwdHJfdClwdHIsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZyIpOwot CWV4cGVjdF91NjRfZXEoMTAwLCBhcmdfYXJnc19yYXdbMV0sICJXcm9uZyBhcmciKTsKLQlleHBl Y3RfdTY0X2VxKDIwMCwgYXJnX2FyZ3NfcmF3WzJdLCAiV3JvbmcgYXJnIik7Ci0JZXhwZWN0X3U2 NF9lcShNQUxMT0NYX1RDQUNIRV9OT05FLCBhcmdfYXJnc19yYXdbM10sICJXcm9uZyBhcmciKTsK LQotCWhvb2tfcmVtb3ZlKFRTRE5fTlVMTCwgaGFuZGxlKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1Rf QkVHSU4odGVzdF9ob29rc19yZWFsbG9jX2FzX21hbGxvY19vcl9mcmVlKSB7Ci0JaG9va3NfdCBo b29rcyA9IHsmdGVzdF9hbGxvY19ob29rLCAmdGVzdF9kYWxsb2NfaG9vaywKLQkJJnRlc3RfZXhw YW5kX2hvb2ssICh2b2lkICopMTIzfTsKLQl2b2lkICpoYW5kbGUgPSBob29rX2luc3RhbGwoVFNE Tl9OVUxMLCAmaG9va3MpOwotCWV4cGVjdF9wdHJfbmUoaGFuZGxlLCBOVUxMLCAiSG9vayBpbnN0 YWxsYXRpb24gZmFpbGVkIik7Ci0KLQl2b2lkICp2b2xhdGlsZSBwdHI7Ci0KLQkvKiByZWFsbG9j KE5VTEwsIHNpemUpIGFzIG1hbGxvYyAqLwotCXJlc2V0KCk7Ci0JcHRyID0gcmVhbGxvYyhOVUxM LCAxKTsKLQlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAxLCAiSG9vayBub3QgY2FsbGVkIik7Ci0J ZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lkICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKLQll eHBlY3RfZF9lcShhcmdfdHlwZSwgKGludClob29rX2FsbG9jX3JlYWxsb2MsICJXcm9uZyBob29r IHR5cGUiKTsKLQlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX3Jlc3VsdCwgIldyb25nIHJlc3VsdCIp OwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIsICh1aW50cHRyX3QpYXJnX3Jlc3VsdF9y YXcsCi0JICAgICJXcm9uZyByYXcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90 KU5VTEwsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZ3VtZW50Iik7Ci0JZXhwZWN0X3U2NF9l cSgodWludHB0cl90KTEsIGFyZ19hcmdzX3Jhd1sxXSwgIldyb25nIGFyZ3VtZW50Iik7Ci0JZnJl ZShwdHIpOwotCi0JLyogcmVhbGxvYyhwdHIsIDApIGFzIGZyZWUgKi8KLQlpZiAob3B0X3plcm9f cmVhbGxvY19hY3Rpb24gPT0gemVyb19yZWFsbG9jX2FjdGlvbl9mcmVlKSB7Ci0JCXB0ciA9IG1h bGxvYygxKTsKLQkJcmVzZXQoKTsKLQkJcmVhbGxvYyhwdHIsIDApOwotCQlleHBlY3RfZF9lcShj YWxsX2NvdW50LCAxLCAiSG9vayBub3QgY2FsbGVkIik7Ci0JCWV4cGVjdF9wdHJfZXEoYXJnX2V4 dHJhLCAodm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7Ci0JCWV4cGVjdF9kX2VxKGFyZ190eXBl LCAoaW50KWhvb2tfZGFsbG9jX3JlYWxsb2MsCi0JCSAgICAiV3JvbmcgaG9vayB0eXBlIik7Ci0J CWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfYWRkcmVzcywKLQkJICAgICJXcm9uZyBwb2ludGVyIGZy ZWVkIik7Ci0JCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIsIGFyZ19hcmdzX3Jhd1swXSwK LQkJICAgICJXcm9uZyByYXcgYXJnIik7Ci0JCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdCkwLCBh cmdfYXJnc19yYXdbMV0sCi0JCSAgICAiV3JvbmcgcmF3IGFyZyIpOwotCX0KLQotCS8qIHJlYWxs b2MoTlVMTCwgMCkgYXMgbWFsbG9jKDApICovCi0JcmVzZXQoKTsKLQlwdHIgPSByZWFsbG9jKE5V TEwsIDApOwotCWV4cGVjdF9kX2VxKGNhbGxfY291bnQsIDEsICJIb29rIG5vdCBjYWxsZWQiKTsK LQlleHBlY3RfcHRyX2VxKGFyZ19leHRyYSwgKHZvaWQgKikxMjMsICJXcm9uZyBleHRyYSIpOwot CWV4cGVjdF9kX2VxKGFyZ190eXBlLCAoaW50KWhvb2tfYWxsb2NfcmVhbGxvYywgIldyb25nIGhv b2sgdHlwZSIpOwotCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfcmVzdWx0LCAiV3JvbmcgcmVzdWx0 Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0ciwgKHVpbnRwdHJfdClhcmdfcmVzdWx0 X3JhdywKLQkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKLQlleHBlY3RfdTY0X2VxKCh1aW50cHRy X3QpTlVMTCwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQiKTsKLQlleHBlY3RfdTY0 X2VxKCh1aW50cHRyX3QpMCwgYXJnX2FyZ3NfcmF3WzFdLCAiV3JvbmcgYXJndW1lbnQiKTsKLQlm cmVlKHB0cik7Ci0KLQlob29rX3JlbW92ZShUU0ROX05VTEwsIGhhbmRsZSk7Ci19Ci1URVNUX0VO RAotCi1zdGF0aWMgdm9pZAotZG9fcmVhbGxvY190ZXN0KHZvaWQgKigqcmFsbG9jKSh2b2lkICos IHNpemVfdCwgaW50KSwgaW50IGZsYWdzLAotICAgIGludCBleHBhbmRfdHlwZSwgaW50IGRhbGxv Y190eXBlKSB7Ci0JaG9va3NfdCBob29rcyA9IHsmdGVzdF9hbGxvY19ob29rLCAmdGVzdF9kYWxs b2NfaG9vaywKLQkJJnRlc3RfZXhwYW5kX2hvb2ssICh2b2lkICopMTIzfTsKLQl2b2lkICpoYW5k bGUgPSBob29rX2luc3RhbGwoVFNETl9OVUxMLCAmaG9va3MpOwotCWV4cGVjdF9wdHJfbmUoaGFu ZGxlLCBOVUxMLCAiSG9vayBpbnN0YWxsYXRpb24gZmFpbGVkIik7Ci0KLQl2b2lkICp2b2xhdGls ZSBwdHI7Ci0Jdm9pZCAqdm9sYXRpbGUgcHRyMjsKLQotCS8qIFJlYWxsb2MgaW4tcGxhY2UsIHNt YWxsLiAqLwotCXB0ciA9IG1hbGxvYygxMjkpOwotCXJlc2V0KCk7Ci0JcHRyMiA9IHJhbGxvYyhw dHIsIDEzMCwgZmxhZ3MpOwotCWV4cGVjdF9wdHJfZXEocHRyLCBwdHIyLCAiU21hbGwgcmVhbGxv YyBtb3ZlZCIpOwotCi0JZXhwZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwgIkhvb2sgbm90IGNhbGxl ZCIpOwotCWV4cGVjdF9wdHJfZXEoYXJnX2V4dHJhLCAodm9pZCAqKTEyMywgIldyb25nIGV4dHJh Iik7Ci0JZXhwZWN0X2RfZXEoYXJnX3R5cGUsIGV4cGFuZF90eXBlLCAiV3JvbmcgaG9vayB0eXBl Iik7Ci0JZXhwZWN0X3B0cl9lcShwdHIsIGFyZ19hZGRyZXNzLCAiV3JvbmcgYWRkcmVzcyIpOwot CWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIsICh1aW50cHRyX3QpYXJnX3Jlc3VsdF9yYXcs Ci0JICAgICJXcm9uZyByYXcgcmVzdWx0Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KXB0 ciwgYXJnX2FyZ3NfcmF3WzBdLCAiV3JvbmcgYXJndW1lbnQiKTsKLQlleHBlY3RfdTY0X2VxKCh1 aW50cHRyX3QpMTMwLCBhcmdfYXJnc19yYXdbMV0sICJXcm9uZyBhcmd1bWVudCIpOwotCWZyZWUo cHRyKTsKLQotCS8qCi0JICogUmVhbGxvYyBpbi1wbGFjZSwgbGFyZ2UuICBTaW5jZSB3ZSBjYW4n dCBndWFyYW50ZWUgdGhlIGxhcmdlIGNhc2UKLQkgKiBhY3Jvc3MgYWxsIHBsYXRmb3Jtcywgd2Ug c3RheSByZXNpbGllbnQgdG8gbW92aW5nIHJlc3VsdHMuCi0JICovCi0JcHRyID0gbWFsbG9jKDIg KiAxMDI0ICogMTAyNCk7Ci0JZnJlZShwdHIpOwotCXB0cjIgPSBtYWxsb2MoMSAqIDEwMjQgKiAx MDI0KTsKLQlyZXNldCgpOwotCXB0ciA9IHJhbGxvYyhwdHIyLCAyICogMTAyNCAqIDEwMjQsIGZs YWdzKTsKLQkvKiBwdHIgaXMgdGhlIG5ldyBhZGRyZXNzLCBwdHIyIGlzIHRoZSBvbGQgYWRkcmVz cy4gKi8KLQlpZiAocHRyID09IHB0cjIpIHsKLQkJZXhwZWN0X2RfZXEoY2FsbF9jb3VudCwgMSwg Ikhvb2sgbm90IGNhbGxlZCIpOwotCQlleHBlY3RfZF9lcShhcmdfdHlwZSwgZXhwYW5kX3R5cGUs ICJXcm9uZyBob29rIHR5cGUiKTsKLQl9IGVsc2UgewotCQlleHBlY3RfZF9lcShjYWxsX2NvdW50 LCAyLCAiV3JvbmcgaG9va3MgY2FsbGVkIik7Ci0JCWV4cGVjdF9wdHJfZXEocHRyLCBhcmdfcmVz dWx0LCAiV3JvbmcgYWRkcmVzcyIpOwotCQlleHBlY3RfZF9lcShhcmdfdHlwZSwgZGFsbG9jX3R5 cGUsICJXcm9uZyBob29rIHR5cGUiKTsKLQl9Ci0JZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2 b2lkICopMTIzLCAiV3JvbmcgZXh0cmEiKTsKLQlleHBlY3RfcHRyX2VxKHB0cjIsIGFyZ19hZGRy ZXNzLCAiV3JvbmcgYWRkcmVzcyIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIsICh1 aW50cHRyX3QpYXJnX3Jlc3VsdF9yYXcsCi0JICAgICJXcm9uZyByYXcgcmVzdWx0Iik7Ci0JZXhw ZWN0X3U2NF9lcSgodWludHB0cl90KXB0cjIsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZ3Vt ZW50Iik7Ci0JZXhwZWN0X3U2NF9lcSgodWludHB0cl90KTIgKiAxMDI0ICogMTAyNCwgYXJnX2Fy Z3NfcmF3WzFdLAotCSAgICAiV3JvbmcgYXJndW1lbnQiKTsKLQlmcmVlKHB0cik7Ci0KLQkvKiBS ZWFsbG9jIHdpdGggbW92ZSwgc21hbGwuICovCi0JcHRyID0gbWFsbG9jKDgpOwotCXJlc2V0KCk7 Ci0JcHRyMiA9IHJhbGxvYyhwdHIsIDEyOCwgZmxhZ3MpOwotCWV4cGVjdF9wdHJfbmUocHRyLCBw dHIyLCAiU21hbGwgcmVhbGxvYyBkaWRuJ3QgbW92ZSIpOwotCi0JZXhwZWN0X2RfZXEoY2FsbF9j b3VudCwgMiwgIkhvb2sgbm90IGNhbGxlZCIpOwotCWV4cGVjdF9wdHJfZXEoYXJnX2V4dHJhLCAo dm9pZCAqKTEyMywgIldyb25nIGV4dHJhIik7Ci0JZXhwZWN0X2RfZXEoYXJnX3R5cGUsIGRhbGxv Y190eXBlLCAiV3JvbmcgaG9vayB0eXBlIik7Ci0JZXhwZWN0X3B0cl9lcShwdHIsIGFyZ19hZGRy ZXNzLCAiV3JvbmcgYWRkcmVzcyIpOwotCWV4cGVjdF9wdHJfZXEocHRyMiwgYXJnX3Jlc3VsdCwg Ildyb25nIGFkZHJlc3MiKTsKLQlleHBlY3RfdTY0X2VxKCh1aW50cHRyX3QpcHRyMiwgKHVpbnRw dHJfdClhcmdfcmVzdWx0X3JhdywKLQkgICAgIldyb25nIHJhdyByZXN1bHQiKTsKLQlleHBlY3Rf dTY0X2VxKCh1aW50cHRyX3QpcHRyLCBhcmdfYXJnc19yYXdbMF0sICJXcm9uZyBhcmd1bWVudCIp OwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdCkxMjgsIGFyZ19hcmdzX3Jhd1sxXSwgIldyb25n IGFyZ3VtZW50Iik7Ci0JZnJlZShwdHIyKTsKLQotCS8qIFJlYWxsb2Mgd2l0aCBtb3ZlLCBsYXJn ZS4gKi8KLQlwdHIgPSBtYWxsb2MoMSk7Ci0JcmVzZXQoKTsKLQlwdHIyID0gcmFsbG9jKHB0ciwg MiAqIDEwMjQgKiAxMDI0LCBmbGFncyk7Ci0JZXhwZWN0X3B0cl9uZShwdHIsIHB0cjIsICJMYXJn ZSByZWFsbG9jIGRpZG4ndCBtb3ZlIik7Ci0KLQlleHBlY3RfZF9lcShjYWxsX2NvdW50LCAyLCAi SG9vayBub3QgY2FsbGVkIik7Ci0JZXhwZWN0X3B0cl9lcShhcmdfZXh0cmEsICh2b2lkICopMTIz LCAiV3JvbmcgZXh0cmEiKTsKLQlleHBlY3RfZF9lcShhcmdfdHlwZSwgZGFsbG9jX3R5cGUsICJX cm9uZyBob29rIHR5cGUiKTsKLQlleHBlY3RfcHRyX2VxKHB0ciwgYXJnX2FkZHJlc3MsICJXcm9u ZyBhZGRyZXNzIik7Ci0JZXhwZWN0X3B0cl9lcShwdHIyLCBhcmdfcmVzdWx0LCAiV3JvbmcgYWRk cmVzcyIpOwotCWV4cGVjdF91NjRfZXEoKHVpbnRwdHJfdClwdHIyLCAodWludHB0cl90KWFyZ19y ZXN1bHRfcmF3LAotCSAgICAiV3JvbmcgcmF3IHJlc3VsdCIpOwotCWV4cGVjdF91NjRfZXEoKHVp bnRwdHJfdClwdHIsIGFyZ19hcmdzX3Jhd1swXSwgIldyb25nIGFyZ3VtZW50Iik7Ci0JZXhwZWN0 X3U2NF9lcSgodWludHB0cl90KTIgKiAxMDI0ICogMTAyNCwgYXJnX2FyZ3NfcmF3WzFdLAotCSAg ICAiV3JvbmcgYXJndW1lbnQiKTsKLQlmcmVlKHB0cjIpOwotCi0JaG9va19yZW1vdmUoVFNETl9O VUxMLCBoYW5kbGUpOwotfQotCi1zdGF0aWMgdm9pZCAqCi1yZWFsbG9jX3dyYXBwZXIodm9pZCAq cHRyLCBzaXplX3Qgc2l6ZSwgVU5VU0VEIGludCBmbGFncykgewotCXJldHVybiByZWFsbG9jKHB0 ciwgc2l6ZSk7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9ob29rc19yZWFsbG9jKSB7Ci0JZG9fcmVh bGxvY190ZXN0KCZyZWFsbG9jX3dyYXBwZXIsIDAsIGhvb2tfZXhwYW5kX3JlYWxsb2MsCi0JICAg IGhvb2tfZGFsbG9jX3JlYWxsb2MpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2hv b2tzX3JhbGxvY3gpIHsKLQlkb19yZWFsbG9jX3Rlc3QoJnJhbGxvY3gsIE1BTExPQ1hfVENBQ0hF X05PTkUsIGhvb2tfZXhwYW5kX3JhbGxvY3gsCi0JICAgIGhvb2tfZGFsbG9jX3JhbGxvY3gpOwot fQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQkvKiBXZSBhc3NlcnQgb24gY2FsbCBj b3VudHMuICovCi0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF9ob29rc19i YXNpYywKLQkgICAgdGVzdF9ob29rc19udWxsLAotCSAgICB0ZXN0X2hvb2tzX3JlbW92ZSwKLQkg ICAgdGVzdF9ob29rc19hbGxvY19zaW1wbGUsCi0JICAgIHRlc3RfaG9va3NfZGFsbG9jX3NpbXBs ZSwKLQkgICAgdGVzdF9ob29rc19leHBhbmRfc2ltcGxlLAotCSAgICB0ZXN0X2hvb2tzX3JlYWxs b2NfYXNfbWFsbG9jX29yX2ZyZWUsCi0JICAgIHRlc3RfaG9va3NfcmVhbGxvYywKLQkgICAgdGVz dF9ob29rc19yYWxsb2N4KTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaHBhLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaHBhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGRmZDU3ZjMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L2hwYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDU5ICswLDAg QEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9j L2ludGVybmFsL2hwYS5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL25zdGltZS5oIgot Ci0jZGVmaW5lIFNIQVJEX0lORCAxMTEKLQotI2RlZmluZSBBTExPQ19NQVggKEhVR0VQQUdFIC8g NCkKLQotdHlwZWRlZiBzdHJ1Y3QgdGVzdF9kYXRhX3MgdGVzdF9kYXRhX3Q7Ci1zdHJ1Y3QgdGVz dF9kYXRhX3MgewotCS8qCi0JICogTXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyIC0tIHdlIGNvbnZl cnQgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUKLQkgKiB0ZXN0X2RhdGFfdCBhbmQgdGhlIGhw YV9zaGFyZF90OwotCSAqLwotCWhwYV9zaGFyZF90IHNoYXJkOwotCWhwYV9jZW50cmFsX3QgY2Vu dHJhbDsKLQliYXNlX3QgKmJhc2U7Ci0JZWRhdGFfY2FjaGVfdCBzaGFyZF9lZGF0YV9jYWNoZTsK LQotCWVtYXBfdCBlbWFwOwotfTsKLQotc3RhdGljIGhwYV9zaGFyZF9vcHRzX3QgdGVzdF9ocGFf c2hhcmRfb3B0c19kZWZhdWx0ID0gewotCS8qIHNsYWJfbWF4X2FsbG9jICovCi0JQUxMT0NfTUFY LAotCS8qIGh1Z2lmaWNhdGlvbiB0aHJlc2hvbGQgKi8KLQlIVUdFUEFHRSwKLQkvKiBkaXJ0eV9t dWx0ICovCi0JRlhQX0lOSVRfUEVSQ0VOVCgyNSksCi0JLyogZGVmZXJyYWxfYWxsb3dlZCAqLwot CWZhbHNlLAotCS8qIGh1Z2lmeV9kZWxheV9tcyAqLwotCTEwICogMTAwMCwKLX07Ci0KLXN0YXRp YyBocGFfc2hhcmRfdCAqCi1jcmVhdGVfdGVzdF9kYXRhKGhwYV9ob29rc190ICpob29rcywgaHBh X3NoYXJkX29wdHNfdCAqb3B0cykgewotCWJvb2wgZXJyOwotCWJhc2VfdCAqYmFzZSA9IGJhc2Vf bmV3KFRTRE5fTlVMTCwgLyogaW5kICovIFNIQVJEX0lORCwKLQkgICAgJmVob29rc19kZWZhdWx0 X2V4dGVudF9ob29rcywgLyogbWV0YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOwotCWFzc2VydF9w dHJfbm90X251bGwoYmFzZSwgIiIpOwotCi0JdGVzdF9kYXRhX3QgKnRlc3RfZGF0YSA9IG1hbGxv YyhzaXplb2YodGVzdF9kYXRhX3QpKTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKHRlc3RfZGF0YSwg IiIpOwotCi0JdGVzdF9kYXRhLT5iYXNlID0gYmFzZTsKLQotCWVyciA9IGVkYXRhX2NhY2hlX2lu aXQoJnRlc3RfZGF0YS0+c2hhcmRfZWRhdGFfY2FjaGUsIGJhc2UpOwotCWFzc2VydF9mYWxzZShl cnIsICIiKTsKLQotCWVyciA9IGVtYXBfaW5pdCgmdGVzdF9kYXRhLT5lbWFwLCB0ZXN0X2RhdGEt PmJhc2UsIC8qIHplcm9lZCAqLyBmYWxzZSk7Ci0JYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOwotCi0J ZXJyID0gaHBhX2NlbnRyYWxfaW5pdCgmdGVzdF9kYXRhLT5jZW50cmFsLCB0ZXN0X2RhdGEtPmJh c2UsIGhvb2tzKTsKLQlhc3NlcnRfZmFsc2UoZXJyLCAiIik7Ci0KLQllcnIgPSBocGFfc2hhcmRf aW5pdCgmdGVzdF9kYXRhLT5zaGFyZCwgJnRlc3RfZGF0YS0+Y2VudHJhbCwKLQkgICAgJnRlc3Rf ZGF0YS0+ZW1hcCwgdGVzdF9kYXRhLT5iYXNlLCAmdGVzdF9kYXRhLT5zaGFyZF9lZGF0YV9jYWNo ZSwKLQkgICAgU0hBUkRfSU5ELCBvcHRzKTsKLQlhc3NlcnRfZmFsc2UoZXJyLCAiIik7Ci0KLQly ZXR1cm4gKGhwYV9zaGFyZF90ICopdGVzdF9kYXRhOwotfQotCi1zdGF0aWMgdm9pZAotZGVzdHJv eV90ZXN0X2RhdGEoaHBhX3NoYXJkX3QgKnNoYXJkKSB7Ci0JdGVzdF9kYXRhX3QgKnRlc3RfZGF0 YSA9ICh0ZXN0X2RhdGFfdCAqKXNoYXJkOwotCWJhc2VfZGVsZXRlKFRTRE5fTlVMTCwgdGVzdF9k YXRhLT5iYXNlKTsKLQlmcmVlKHRlc3RfZGF0YSk7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9hbGxv Y19tYXgpIHsKLQl0ZXN0X3NraXBfaWYoIWhwYV9zdXBwb3J0ZWQoKSk7Ci0KLQlocGFfc2hhcmRf dCAqc2hhcmQgPSBjcmVhdGVfdGVzdF9kYXRhKCZocGFfaG9va3NfZGVmYXVsdCwKLQkgICAgJnRl c3RfaHBhX3NoYXJkX29wdHNfZGVmYXVsdCk7Ci0JdHNkbl90ICp0c2RuID0gdHNkX3RzZG4odHNk X2ZldGNoKCkpOwotCi0JZWRhdGFfdCAqZWRhdGE7Ci0KLQkvKiBTbWFsbCBtYXggKi8KLQlib29s IGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7Ci0JZWRhdGEgPSBwYWlfYWxsb2ModHNk biwgJnNoYXJkLT5wYWksIEFMTE9DX01BWCwgUEFHRSwgZmFsc2UsIGZhbHNlLAotCSAgICBmYWxz ZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKGVkYXRh LCAiQWxsb2NhdGlvbiBvZiBzbWFsbCBtYXggZmFpbGVkIik7Ci0JZWRhdGEgPSBwYWlfYWxsb2Mo dHNkbiwgJnNoYXJkLT5wYWksIEFMTE9DX01BWCArIFBBR0UsIFBBR0UsIGZhbHNlLAotCSAgICBm YWxzZSwgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JZXhwZWN0X3B0cl9udWxs KGVkYXRhLCAiQWxsb2NhdGlvbiBvZiBsYXJnZXIgdGhhbiBzbWFsbCBtYXggc3VjY2VlZGVkIik7 Ci0KLQlkZXN0cm95X3Rlc3RfZGF0YShzaGFyZCk7Ci19Ci1URVNUX0VORAotCi10eXBlZGVmIHN0 cnVjdCBtZW1fY29udGVudHNfcyBtZW1fY29udGVudHNfdDsKLXN0cnVjdCBtZW1fY29udGVudHNf cyB7Ci0JdWludHB0cl90IG15X2FkZHI7Ci0Jc2l6ZV90IHNpemU7Ci0JZWRhdGFfdCAqbXlfZWRh dGE7Ci0JcmJfbm9kZShtZW1fY29udGVudHNfdCkgbGluazsKLX07Ci0KLXN0YXRpYyBpbnQKLW1l bV9jb250ZW50c19jbXAoY29uc3QgbWVtX2NvbnRlbnRzX3QgKmEsIGNvbnN0IG1lbV9jb250ZW50 c190ICpiKSB7Ci0JcmV0dXJuIChhLT5teV9hZGRyID4gYi0+bXlfYWRkcikgLSAoYS0+bXlfYWRk ciA8IGItPm15X2FkZHIpOwotfQotCi10eXBlZGVmIHJiX3RyZWUobWVtX2NvbnRlbnRzX3QpIG1l bV90cmVlX3Q7Ci1yYl9nZW4oc3RhdGljLCBtZW1fdHJlZV8sIG1lbV90cmVlX3QsIG1lbV9jb250 ZW50c190LCBsaW5rLAotICAgIG1lbV9jb250ZW50c19jbXApOwotCi1zdGF0aWMgdm9pZAotbm9k ZV9hc3NlcnRfb3JkZXJlZChtZW1fY29udGVudHNfdCAqYSwgbWVtX2NvbnRlbnRzX3QgKmIpIHsK LQlhc3NlcnRfenVfbHQoYS0+bXlfYWRkciwgYS0+bXlfYWRkciArIGEtPnNpemUsICJPdmVyZmxv dyIpOwotCWFzc2VydF96dV9sZShhLT5teV9hZGRyICsgYS0+c2l6ZSwgYi0+bXlfYWRkciwgIiIp OwotfQotCi1zdGF0aWMgdm9pZAotbm9kZV9jaGVjayhtZW1fdHJlZV90ICp0cmVlLCBtZW1fY29u dGVudHNfdCAqY29udGVudHMpIHsKLQllZGF0YV90ICplZGF0YSA9IGNvbnRlbnRzLT5teV9lZGF0 YTsKLQlhc3NlcnRfcHRyX2VxKGNvbnRlbnRzLCAodm9pZCAqKWNvbnRlbnRzLT5teV9hZGRyLCAi Iik7Ci0JYXNzZXJ0X3B0cl9lcShjb250ZW50cywgZWRhdGFfYmFzZV9nZXQoZWRhdGEpLCAiIik7 Ci0JYXNzZXJ0X3p1X2VxKGNvbnRlbnRzLT5zaXplLCBlZGF0YV9zaXplX2dldChlZGF0YSksICIi KTsKLQlhc3NlcnRfcHRyX2VxKGNvbnRlbnRzLT5teV9lZGF0YSwgZWRhdGEsICIiKTsKLQotCW1l bV9jb250ZW50c190ICpuZXh0ID0gbWVtX3RyZWVfbmV4dCh0cmVlLCBjb250ZW50cyk7Ci0JaWYg KG5leHQgIT0gTlVMTCkgewotCQlub2RlX2Fzc2VydF9vcmRlcmVkKGNvbnRlbnRzLCBuZXh0KTsK LQl9Ci0JbWVtX2NvbnRlbnRzX3QgKnByZXYgPSBtZW1fdHJlZV9wcmV2KHRyZWUsIGNvbnRlbnRz KTsKLQlpZiAocHJldiAhPSBOVUxMKSB7Ci0JCW5vZGVfYXNzZXJ0X29yZGVyZWQocHJldiwgY29u dGVudHMpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLW5vZGVfaW5zZXJ0KG1lbV90cmVlX3QgKnRy ZWUsIGVkYXRhX3QgKmVkYXRhLCBzaXplX3QgbnBhZ2VzKSB7Ci0JbWVtX2NvbnRlbnRzX3QgKmNv bnRlbnRzID0gKG1lbV9jb250ZW50c190ICopZWRhdGFfYmFzZV9nZXQoZWRhdGEpOwotCWNvbnRl bnRzLT5teV9hZGRyID0gKHVpbnRwdHJfdCllZGF0YV9iYXNlX2dldChlZGF0YSk7Ci0JY29udGVu dHMtPnNpemUgPSBlZGF0YV9zaXplX2dldChlZGF0YSk7Ci0JY29udGVudHMtPm15X2VkYXRhID0g ZWRhdGE7Ci0JbWVtX3RyZWVfaW5zZXJ0KHRyZWUsIGNvbnRlbnRzKTsKLQlub2RlX2NoZWNrKHRy ZWUsIGNvbnRlbnRzKTsKLX0KLQotc3RhdGljIHZvaWQKLW5vZGVfcmVtb3ZlKG1lbV90cmVlX3Qg KnRyZWUsIGVkYXRhX3QgKmVkYXRhKSB7Ci0JbWVtX2NvbnRlbnRzX3QgKmNvbnRlbnRzID0gKG1l bV9jb250ZW50c190ICopZWRhdGFfYmFzZV9nZXQoZWRhdGEpOwotCW5vZGVfY2hlY2sodHJlZSwg Y29udGVudHMpOwotCW1lbV90cmVlX3JlbW92ZSh0cmVlLCBjb250ZW50cyk7Ci19Ci0KLVRFU1Rf QkVHSU4odGVzdF9zdHJlc3MpIHsKLQl0ZXN0X3NraXBfaWYoIWhwYV9zdXBwb3J0ZWQoKSk7Ci0K LQlocGFfc2hhcmRfdCAqc2hhcmQgPSBjcmVhdGVfdGVzdF9kYXRhKCZocGFfaG9va3NfZGVmYXVs dCwKLQkgICAgJnRlc3RfaHBhX3NoYXJkX29wdHNfZGVmYXVsdCk7Ci0KLQl0c2RuX3QgKnRzZG4g PSB0c2RfdHNkbih0c2RfZmV0Y2goKSk7Ci0KLQljb25zdCBzaXplX3QgbmxpdmVfZWRhdGFzX21h eCA9IDUwMDsKLQlzaXplX3QgbmxpdmVfZWRhdGFzID0gMDsKLQllZGF0YV90ICoqbGl2ZV9lZGF0 YXMgPSBjYWxsb2MobmxpdmVfZWRhdGFzX21heCwgc2l6ZW9mKGVkYXRhX3QgKikpOwotCS8qCi0J ICogTm90aGluZyBzcGVjaWFsIGFib3V0IHRoaXMgY29uc3RhbnQ7IHdlJ3JlIG9ubHkgZml4aW5n IGl0IGZvcgotCSAqIGNvbnNpc3RlbmN5IGFjcm9zcyBydW5zLgotCSAqLwotCXNpemVfdCBwcm5n X3N0YXRlID0gKHNpemVfdCkweDc2OTk5ZmZiMDE0ZGYwN2M7Ci0KLQltZW1fdHJlZV90IHRyZWU7 Ci0JbWVtX3RyZWVfbmV3KCZ0cmVlKTsKLQotCWJvb2wgZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQg PSBmYWxzZTsKLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwICogMTAwMDsgaSsrKSB7Ci0J CXNpemVfdCBvcGVyYXRpb24gPSBwcm5nX3JhbmdlX3p1KCZwcm5nX3N0YXRlLCAyKTsKLQkJaWYg KG9wZXJhdGlvbiA9PSAwKSB7Ci0JCQkvKiBBbGxvYyAqLwotCQkJaWYgKG5saXZlX2VkYXRhcyA9 PSBubGl2ZV9lZGF0YXNfbWF4KSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkg KiBXZSBtYWtlIHN1cmUgdG8gZ2V0IGFuIGV2ZW4gYmFsYW5jZSBvZiBzbWFsbCBhbmQKLQkJCSAq IGxhcmdlIGFsbG9jYXRpb25zLgotCQkJICovCi0JCQlzaXplX3QgbnBhZ2VzX21pbiA9IDE7Ci0J CQlzaXplX3QgbnBhZ2VzX21heCA9IEFMTE9DX01BWCAvIFBBR0U7Ci0JCQlzaXplX3QgbnBhZ2Vz ID0gbnBhZ2VzX21pbiArIHBybmdfcmFuZ2VfenUoJnBybmdfc3RhdGUsCi0JCQkgICAgbnBhZ2Vz X21heCAtIG5wYWdlc19taW4pOwotCQkJZWRhdGFfdCAqZWRhdGEgPSBwYWlfYWxsb2ModHNkbiwg JnNoYXJkLT5wYWksCi0JCQkgICAgbnBhZ2VzICogUEFHRSwgUEFHRSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwKLQkJCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCQkJYXNzZXJ0X3B0cl9u b3RfbnVsbChlZGF0YSwKLQkJCSAgICAiVW5leHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmUiKTsK LQkJCWxpdmVfZWRhdGFzW25saXZlX2VkYXRhc10gPSBlZGF0YTsKLQkJCW5saXZlX2VkYXRhcysr OwotCQkJbm9kZV9pbnNlcnQoJnRyZWUsIGVkYXRhLCBucGFnZXMpOwotCQl9IGVsc2UgewotCQkJ LyogRnJlZS4gKi8KLQkJCWlmIChubGl2ZV9lZGF0YXMgPT0gMCkgewotCQkJCWNvbnRpbnVlOwot CQkJfQotCQkJc2l6ZV90IHZpY3RpbSA9IHBybmdfcmFuZ2VfenUoJnBybmdfc3RhdGUsIG5saXZl X2VkYXRhcyk7Ci0JCQllZGF0YV90ICp0b19mcmVlID0gbGl2ZV9lZGF0YXNbdmljdGltXTsKLQkJ CWxpdmVfZWRhdGFzW3ZpY3RpbV0gPSBsaXZlX2VkYXRhc1tubGl2ZV9lZGF0YXMgLSAxXTsKLQkJ CW5saXZlX2VkYXRhcy0tOwotCQkJbm9kZV9yZW1vdmUoJnRyZWUsIHRvX2ZyZWUpOwotCQkJcGFp X2RhbGxvYyh0c2RuLCAmc2hhcmQtPnBhaSwgdG9fZnJlZSwKLQkJCSAgICAmZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQpOwotCQl9Ci0JfQotCi0Jc2l6ZV90IG50cmVlbm9kZXMgPSAwOwotCWZvciAo bWVtX2NvbnRlbnRzX3QgKmNvbnRlbnRzID0gbWVtX3RyZWVfZmlyc3QoJnRyZWUpOyBjb250ZW50 cyAhPSBOVUxMOwotCSAgICBjb250ZW50cyA9IG1lbV90cmVlX25leHQoJnRyZWUsIGNvbnRlbnRz KSkgewotCQludHJlZW5vZGVzKys7Ci0JCW5vZGVfY2hlY2soJnRyZWUsIGNvbnRlbnRzKTsKLQl9 Ci0JZXhwZWN0X3p1X2VxKG50cmVlbm9kZXMsIG5saXZlX2VkYXRhcywgIiIpOwotCi0JLyoKLQkg KiBUZXN0IGhwYV9zaGFyZF9kZXN0cm95LCB3aGljaCByZXF1aXJlcyBhcyBhIHByZWNvbmRpdGlv biB0aGF0IGFsbCBpdHMKLQkgKiBleHRlbnRzIGhhdmUgYmVlbiBkZWFsbG9jYXRlZC4KLQkgKi8K LQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5saXZlX2VkYXRhczsgaSsrKSB7Ci0JCWVkYXRhX3Qg KnRvX2ZyZWUgPSBsaXZlX2VkYXRhc1tpXTsKLQkJbm9kZV9yZW1vdmUoJnRyZWUsIHRvX2ZyZWUp OwotCQlwYWlfZGFsbG9jKHRzZG4sICZzaGFyZC0+cGFpLCB0b19mcmVlLAotCQkgICAgJmRlZmVy cmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQl9Ci0JaHBhX3NoYXJkX2Rlc3Ryb3kodHNkbiwgc2hhcmQp OwotCi0JZnJlZShsaXZlX2VkYXRhcyk7Ci0JZGVzdHJveV90ZXN0X2RhdGEoc2hhcmQpOwotfQot VEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLWV4cGVjdF9jb250aWd1b3VzKGVkYXRhX3QgKiplZGF0 YXMsIHNpemVfdCBuZWRhdGFzKSB7Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZWRhdGFzOyBp KyspIHsKLQkJc2l6ZV90IGV4cGVjdGVkID0gKHNpemVfdCllZGF0YV9iYXNlX2dldChlZGF0YXNb MF0pCi0JCSAgICArIGkgKiBQQUdFOwotCQlleHBlY3RfenVfZXEoZXhwZWN0ZWQsIChzaXplX3Qp ZWRhdGFfYmFzZV9nZXQoZWRhdGFzW2ldKSwKLQkJICAgICJNaXNtYXRjaCBhdCBpbmRleCAlenUi LCBpKTsKLQl9Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9hbGxvY19kYWxsb2NfYmF0Y2gpIHsKLQl0 ZXN0X3NraXBfaWYoIWhwYV9zdXBwb3J0ZWQoKSk7Ci0KLQlocGFfc2hhcmRfdCAqc2hhcmQgPSBj cmVhdGVfdGVzdF9kYXRhKCZocGFfaG9va3NfZGVmYXVsdCwKLQkgICAgJnRlc3RfaHBhX3NoYXJk X29wdHNfZGVmYXVsdCk7Ci0JdHNkbl90ICp0c2RuID0gdHNkX3RzZG4odHNkX2ZldGNoKCkpOwot Ci0JYm9vbCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOwotCi0JZW51bSB7TkFMTE9D UyA9IDh9OwotCi0JZWRhdGFfdCAqYWxsb2NzW05BTExPQ1NdOwotCS8qCi0JICogQWxsb2NhdGUg YSBtaXggb2Ygd2F5czsgZmlyc3QgaGFsZiBmcm9tIHJlZ3VsYXIgYWxsb2MsIHNlY29uZCBoYWxm Ci0JICogZnJvbSBhbGxvY19iYXRjaC4KLQkgKi8KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5B TExPQ1MgLyAyOyBpKyspIHsKLQkJYWxsb2NzW2ldID0gcGFpX2FsbG9jKHRzZG4sICZzaGFyZC0+ cGFpLCBQQUdFLCBQQUdFLAotCQkgICAgLyogemVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBm YWxzZSwKLQkJICAgIC8qIGZyZXF1ZW50X3JldXNlICovIGZhbHNlLCAmZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQpOwotCQlleHBlY3RfcHRyX25vdF9udWxsKGFsbG9jc1tpXSwgIlVuZXhwZWN0ZWQg YWxsb2MgZmFpbHVyZSIpOwotCX0KLQllZGF0YV9saXN0X2FjdGl2ZV90IGFsbG9jc19saXN0Owot CWVkYXRhX2xpc3RfYWN0aXZlX2luaXQoJmFsbG9jc19saXN0KTsKLQlzaXplX3QgbnN1Y2Nlc3Mg PSBwYWlfYWxsb2NfYmF0Y2godHNkbiwgJnNoYXJkLT5wYWksIFBBR0UsIE5BTExPQ1MgLyAyLAot CSAgICAmYWxsb2NzX2xpc3QsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JZXhwZWN0X3p1 X2VxKE5BTExPQ1MgLyAyLCBuc3VjY2VzcywgIlVuZXhwZWN0ZWQgb29tIik7Ci0JZm9yIChzaXpl X3QgaSA9IE5BTExPQ1MgLyAyOyBpIDwgTkFMTE9DUzsgaSsrKSB7Ci0JCWFsbG9jc1tpXSA9IGVk YXRhX2xpc3RfYWN0aXZlX2ZpcnN0KCZhbGxvY3NfbGlzdCk7Ci0JCWVkYXRhX2xpc3RfYWN0aXZl X3JlbW92ZSgmYWxsb2NzX2xpc3QsIGFsbG9jc1tpXSk7Ci0JfQotCi0JLyoKLQkgKiBTaG91bGQg aGF2ZSBhbGxvY2F0ZWQgdGhlbSBjb250aWd1b3VzbHksIGRlc3BpdGUgdGhlIGRpZmZlcmluZwot CSAqIG1ldGhvZHMgdXNlZC4KLQkgKi8KLQl2b2lkICpvcmlnX2Jhc2UgPSBlZGF0YV9iYXNlX2dl dChhbGxvY3NbMF0pOwotCWV4cGVjdF9jb250aWd1b3VzKGFsbG9jcywgTkFMTE9DUyk7Ci0KLQkv KgotCSAqIEJhdGNoIGRhbGxvYyB0aGUgZmlyc3QgaGFsZiwgaW5kaXZpZHVhbGx5IGRlYWxsb2Nh dGUgdGhlIHNlY29uZCBoYWxmLgotCSAqLwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTkFMTE9D UyAvIDI7IGkrKykgewotCQllZGF0YV9saXN0X2FjdGl2ZV9hcHBlbmQoJmFsbG9jc19saXN0LCBh bGxvY3NbaV0pOwotCX0KLQlwYWlfZGFsbG9jX2JhdGNoKHRzZG4sICZzaGFyZC0+cGFpLCAmYWxs b2NzX2xpc3QsCi0JICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JZm9yIChzaXplX3Qg aSA9IE5BTExPQ1MgLyAyOyBpIDwgTkFMTE9DUzsgaSsrKSB7Ci0JCXBhaV9kYWxsb2ModHNkbiwg JnNoYXJkLT5wYWksIGFsbG9jc1tpXSwKLQkJICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7 Ci0JfQotCi0JLyogUmVhbGxvY2F0ZSAoaW5kaXZpZHVhbGx5KSwgYW5kIGVuc3VyZSByZXVzZSBh bmQgY29udGlndWl0eS4gKi8KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5BTExPQ1M7IGkrKykg ewotCQlhbGxvY3NbaV0gPSBwYWlfYWxsb2ModHNkbiwgJnNoYXJkLT5wYWksIFBBR0UsIFBBR0Us Ci0JCSAgICAvKiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVu dF9yZXVzZSAqLwotCQkgICAgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JCWV4 cGVjdF9wdHJfbm90X251bGwoYWxsb2NzW2ldLCAiVW5leHBlY3RlZCBhbGxvYyBmYWlsdXJlLiIp OwotCX0KLQl2b2lkICpuZXdfYmFzZSA9IGVkYXRhX2Jhc2VfZ2V0KGFsbG9jc1swXSk7Ci0JZXhw ZWN0X3B0cl9lcShvcmlnX2Jhc2UsIG5ld19iYXNlLAotCSAgICAiRmFpbGVkIHRvIHJldXNlIHRo ZSBhbGxvY2F0ZWQgbWVtb3J5LiIpOwotCWV4cGVjdF9jb250aWd1b3VzKGFsbG9jcywgTkFMTE9D Uyk7Ci0KLQlkZXN0cm95X3Rlc3RfZGF0YShzaGFyZCk7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMg dWludHB0cl90IGRlZmVyX2J1bXBfcHRyID0gSFVHRVBBR0UgKiAxMjM7Ci1zdGF0aWMgdm9pZCAq Ci1kZWZlcl90ZXN0X21hcChzaXplX3Qgc2l6ZSkgewotCXZvaWQgKnJlc3VsdCA9ICh2b2lkICop ZGVmZXJfYnVtcF9wdHI7Ci0JZGVmZXJfYnVtcF9wdHIgKz0gc2l6ZTsKLQlyZXR1cm4gcmVzdWx0 OwotfQotCi1zdGF0aWMgdm9pZAotZGVmZXJfdGVzdF91bm1hcCh2b2lkICpwdHIsIHNpemVfdCBz aXplKSB7Ci0JKHZvaWQpcHRyOwotCSh2b2lkKXNpemU7Ci19Ci0KLXN0YXRpYyBib29sIGRlZmVy X3B1cmdlX2NhbGxlZCA9IGZhbHNlOwotc3RhdGljIHZvaWQKLWRlZmVyX3Rlc3RfcHVyZ2Uodm9p ZCAqcHRyLCBzaXplX3Qgc2l6ZSkgewotCSh2b2lkKXB0cjsKLQkodm9pZClzaXplOwotCWRlZmVy X3B1cmdlX2NhbGxlZCA9IHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGRlZmVyX2h1Z2lmeV9jYWxs ZWQgPSBmYWxzZTsKLXN0YXRpYyB2b2lkCi1kZWZlcl90ZXN0X2h1Z2lmeSh2b2lkICpwdHIsIHNp emVfdCBzaXplKSB7Ci0JZGVmZXJfaHVnaWZ5X2NhbGxlZCA9IHRydWU7Ci19Ci0KLXN0YXRpYyBi b29sIGRlZmVyX2RlaHVnaWZ5X2NhbGxlZCA9IGZhbHNlOwotc3RhdGljIHZvaWQKLWRlZmVyX3Rl c3RfZGVodWdpZnkodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkgewotCWRlZmVyX2RlaHVnaWZ5X2Nh bGxlZCA9IHRydWU7Ci19Ci0KLXN0YXRpYyBuc3RpbWVfdCBkZWZlcl9jdXJ0aW1lOwotc3RhdGlj IHZvaWQKLWRlZmVyX3Rlc3RfY3VydGltZShuc3RpbWVfdCAqcl90aW1lLCBib29sIGZpcnN0X3Jl YWRpbmcpIHsKLQkqcl90aW1lID0gZGVmZXJfY3VydGltZTsKLX0KLQotc3RhdGljIHVpbnQ2NF90 Ci1kZWZlcl90ZXN0X21zX3NpbmNlKG5zdGltZV90ICpwYXN0X3RpbWUpIHsKLQlyZXR1cm4gKG5z dGltZV9ucygmZGVmZXJfY3VydGltZSkgLSBuc3RpbWVfbnMocGFzdF90aW1lKSkgLyAxMDAwIC8g MTAwMDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2RlZmVyX3RpbWUpIHsKLQl0ZXN0X3NraXBfaWYo IWhwYV9zdXBwb3J0ZWQoKSk7Ci0KLQlocGFfaG9va3NfdCBob29rczsKLQlob29rcy5tYXAgPSAm ZGVmZXJfdGVzdF9tYXA7Ci0JaG9va3MudW5tYXAgPSAmZGVmZXJfdGVzdF91bm1hcDsKLQlob29r cy5wdXJnZSA9ICZkZWZlcl90ZXN0X3B1cmdlOwotCWhvb2tzLmh1Z2lmeSA9ICZkZWZlcl90ZXN0 X2h1Z2lmeTsKLQlob29rcy5kZWh1Z2lmeSA9ICZkZWZlcl90ZXN0X2RlaHVnaWZ5OwotCWhvb2tz LmN1cnRpbWUgPSAmZGVmZXJfdGVzdF9jdXJ0aW1lOwotCWhvb2tzLm1zX3NpbmNlID0gJmRlZmVy X3Rlc3RfbXNfc2luY2U7Ci0KLQlocGFfc2hhcmRfb3B0c190IG9wdHMgPSB0ZXN0X2hwYV9zaGFy ZF9vcHRzX2RlZmF1bHQ7Ci0Jb3B0cy5kZWZlcnJhbF9hbGxvd2VkID0gdHJ1ZTsKLQotCWhwYV9z aGFyZF90ICpzaGFyZCA9IGNyZWF0ZV90ZXN0X2RhdGEoJmhvb2tzLCAmb3B0cyk7Ci0KLQlib29s IGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7Ci0KLQluc3RpbWVfaW5pdCgmZGVmZXJf Y3VydGltZSwgMCk7Ci0JdHNkbl90ICp0c2RuID0gdHNkX3RzZG4odHNkX2ZldGNoKCkpOwotCWVk YXRhX3QgKmVkYXRhc1tIVUdFUEFHRV9QQUdFU107Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50 KUhVR0VQQUdFX1BBR0VTOyBpKyspIHsKLQkJZWRhdGFzW2ldID0gcGFpX2FsbG9jKHRzZG4sICZz aGFyZC0+cGFpLCBQQUdFLCBQQUdFLCBmYWxzZSwKLQkJICAgIGZhbHNlLCBmYWxzZSwgJmRlZmVy cmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChlZGF0YXNbaV0sICJV bmV4cGVjdGVkIG51bGwgZWRhdGEiKTsKLQl9Ci0JaHBhX3NoYXJkX2RvX2RlZmVycmVkX3dvcmso dHNkbiwgc2hhcmQpOwotCWV4cGVjdF9mYWxzZShkZWZlcl9odWdpZnlfY2FsbGVkLCAiSHVnaWZp ZWQgdG9vIGVhcmx5Iik7Ci0KLQkvKiBIdWdpZmljYXRpb24gZGVsYXkgaXMgc2V0IHRvIDEwIHNl Y29uZHMgaW4gb3B0aW9ucy4gKi8KLQluc3RpbWVfaW5pdDIoJmRlZmVyX2N1cnRpbWUsIDExLCAw KTsKLQlocGFfc2hhcmRfZG9fZGVmZXJyZWRfd29yayh0c2RuLCBzaGFyZCk7Ci0JZXhwZWN0X3Ry dWUoZGVmZXJfaHVnaWZ5X2NhbGxlZCwgIkZhaWxlZCB0byBodWdpZnkiKTsKLQotCWRlZmVyX2h1 Z2lmeV9jYWxsZWQgPSBmYWxzZTsKLQotCS8qIFB1cmdlLiAgUmVjYWxsIHRoYXQgZGlydHlfbXVs dCBpcyAuMjUuICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KUhVR0VQQUdFX1BBR0VTIC8g MjsgaSsrKSB7Ci0JCXBhaV9kYWxsb2ModHNkbiwgJnNoYXJkLT5wYWksIGVkYXRhc1tpXSwKLQkJ ICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JfQotCi0JaHBhX3NoYXJkX2RvX2RlZmVy cmVkX3dvcmsodHNkbiwgc2hhcmQpOwotCi0JZXhwZWN0X2ZhbHNlKGRlZmVyX2h1Z2lmeV9jYWxs ZWQsICJIdWdpZmllZCB0b28gZWFybHkiKTsKLQlleHBlY3RfdHJ1ZShkZWZlcl9kZWh1Z2lmeV9j YWxsZWQsICJTaG91bGQgaGF2ZSBkZWh1Z2lmaWVkIik7Ci0JZXhwZWN0X3RydWUoZGVmZXJfcHVy Z2VfY2FsbGVkLCAiU2hvdWxkIGhhdmUgcHVyZ2VkIik7Ci0JZGVmZXJfaHVnaWZ5X2NhbGxlZCA9 IGZhbHNlOwotCWRlZmVyX2RlaHVnaWZ5X2NhbGxlZCA9IGZhbHNlOwotCWRlZmVyX3B1cmdlX2Nh bGxlZCA9IGZhbHNlOwotCi0JLyoKLQkgKiBSZWZpbGwgdGhlIHBhZ2UuICBXZSBub3cgbWVldCB0 aGUgaHVnaWZpY2F0aW9uIHRocmVzaG9sZDsgd2Ugc2hvdWxkCi0JICogYmUgbWFya2VkIGZvciBw ZW5kaW5nIGh1Z2lmeS4KLQkgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8IChpbnQpSFVHRVBBR0Vf UEFHRVMgLyAyOyBpKyspIHsKLQkJZWRhdGFzW2ldID0gcGFpX2FsbG9jKHRzZG4sICZzaGFyZC0+ cGFpLCBQQUdFLCBQQUdFLCBmYWxzZSwKLQkJICAgIGZhbHNlLCBmYWxzZSwgJmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChlZGF0YXNbaV0sICJVbmV4cGVj dGVkIG51bGwgZWRhdGEiKTsKLQl9Ci0JLyoKLQkgKiBXZSB3b3VsZCBiZSBpbmVsaWdpYmxlIGZv ciBodWdpZmljYXRpb24sIGhhZCB3ZSBub3QgYWxyZWFkeSBtZXQgdGhlCi0JICogdGhyZXNob2xk IGJlZm9yZSBkaXBwaW5nIGJlbG93IGl0LgotCSAqLwotCXBhaV9kYWxsb2ModHNkbiwgJnNoYXJk LT5wYWksIGVkYXRhc1swXSwKLQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQkvKiBX YWl0IGZvciB0aGUgdGhyZXNob2xkIGFnYWluLiAqLwotCW5zdGltZV9pbml0MigmZGVmZXJfY3Vy dGltZSwgMjIsIDApOwotCWhwYV9zaGFyZF9kb19kZWZlcnJlZF93b3JrKHRzZG4sIHNoYXJkKTsK LQlleHBlY3RfdHJ1ZShkZWZlcl9odWdpZnlfY2FsbGVkLCAiSHVnaWZpZWQgdG9vIGVhcmx5Iik7 Ci0JZXhwZWN0X2ZhbHNlKGRlZmVyX2RlaHVnaWZ5X2NhbGxlZCwgIlVuZXhwZWN0ZWQgZGVodWdp ZnkiKTsKLQlleHBlY3RfZmFsc2UoZGVmZXJfcHVyZ2VfY2FsbGVkLCAiVW5leHBlY3RlZCBwdXJn ZSIpOwotCi0JZGVzdHJveV90ZXN0X2RhdGEoc2hhcmQpOwotfQotVEVTVF9FTkQKLQotaW50Ci1t YWluKHZvaWQpIHsKLQkvKgotCSAqIFRoZXNlIHRyaWdnZXIgdW51c2VkLWZ1bmN0aW9uIHdhcm5p bmdzIG9uIENJIHJ1bnMsIGV2ZW4gaWYgZGVjbGFyZWQKLQkgKiB3aXRoIHN0YXRpYyBpbmxpbmUu Ci0JICovCi0JKHZvaWQpbWVtX3RyZWVfZW1wdHk7Ci0JKHZvaWQpbWVtX3RyZWVfbGFzdDsKLQko dm9pZCltZW1fdHJlZV9zZWFyY2g7Ci0JKHZvaWQpbWVtX3RyZWVfbnNlYXJjaDsKLQkodm9pZClt ZW1fdHJlZV9wc2VhcmNoOwotCSh2b2lkKW1lbV90cmVlX2l0ZXI7Ci0JKHZvaWQpbWVtX3RyZWVf cmV2ZXJzZV9pdGVyOwotCSh2b2lkKW1lbV90cmVlX2Rlc3Ryb3k7Ci0JcmV0dXJuIHRlc3Rfbm9f cmVlbnRyYW5jeSgKLQkgICAgdGVzdF9hbGxvY19tYXgsCi0JICAgIHRlc3Rfc3RyZXNzLAotCSAg ICB0ZXN0X2FsbG9jX2RhbGxvY19iYXRjaCwKLQkgICAgdGVzdF9kZWZlcl90aW1lKTsKLX0KCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvaHBhX2JhY2tncm91bmRfdGhyZWFkLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvaHBhX2JhY2tncm91bmRfdGhyZWFkLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDgxYzI1NjEuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2hwYV9iYWNrZ3JvdW5kX3RocmVhZC5j CisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKLSNpbmNsdWRlICJ0ZXN0L3NsZWVwLmgiCi0KLXN0YXRpYyB2b2lkCi1zbGVlcF9m b3JfYmFja2dyb3VuZF90aHJlYWRfaW50ZXJ2YWwoKSB7Ci0JLyoKLQkgKiBUaGUgc2xlZXAgaW50 ZXJ2YWwgc2V0IGluIG91ciAuc2ggZmlsZSBpcyA1MG1zLiAgU28gaXQgbGlrZWx5IHdpbGwKLQkg KiBydW4gaWYgd2Ugc2xlZXAgZm9yIGZvdXIgdGltZXMgdGhhdC4KLQkgKi8KLQlzbGVlcF9ucygy MDAgKiAxMDAwICogMTAwMCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZAotY3JlYXRlX2FyZW5hKCkg ewotCXVuc2lnbmVkIGFyZW5hX2luZDsKLQlzaXplX3Qgc3o7Ci0KLQlzeiA9IHNpemVvZih1bnNp Z25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2b2lkICopJmFy ZW5hX2luZCwgJnN6LCBOVUxMLCAyKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZh aWx1cmUiKTsKLQlyZXR1cm4gYXJlbmFfaW5kOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1nZXRfZW1w dHlfbmRpcnR5KHVuc2lnbmVkIGFyZW5hX2luZCkgewotCWludCBlcnI7Ci0Jc2l6ZV90IG5kaXJ0 eV9odWdlOwotCXNpemVfdCBuZGlydHlfbm9uaHVnZTsKLQl1aW50NjRfdCBlcG9jaCA9IDE7Ci0J c2l6ZV90IHN6ID0gc2l6ZW9mKGVwb2NoKTsKLQllcnIgPSBqZV9tYWxsY3RsKCJlcG9jaCIsICh2 b2lkICopJmVwb2NoLCAmc3osICh2b2lkICopJmVwb2NoLAotCSAgICBzaXplb2YoZXBvY2gpKTsK LQlleHBlY3RfZF9lcSgwLCBlcnIsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0K LQlzaXplX3QgbWliWzZdOwotCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2YobWli WzBdKTsKLQllcnIgPSBtYWxsY3RsbmFtZXRvbWliKAotCSAgICAic3RhdHMuYXJlbmFzLjAuaHBh X3NoYXJkLmVtcHR5X3NsYWJzLm5kaXJ0eV9ub25odWdlIiwgbWliLAotCSAgICAmbWlibGVuKTsK LQlleHBlY3RfZF9lcSgwLCBlcnIsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWls dXJlIik7Ci0KLQlzeiA9IHNpemVvZihuZGlydHlfbm9uaHVnZSk7Ci0JbWliWzJdID0gYXJlbmFf aW5kOwotCWVyciA9IG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgJm5kaXJ0eV9ub25odWdlLCAm c3osIE5VTEwsIDApOwotCWV4cGVjdF9kX2VxKDAsIGVyciwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5 bWliKCkgZmFpbHVyZSIpOwotCi0JZXJyID0gbWFsbGN0bG5hbWV0b21pYigKLQkgICAgInN0YXRz LmFyZW5hcy4wLmhwYV9zaGFyZC5lbXB0eV9zbGFicy5uZGlydHlfaHVnZSIsIG1pYiwKLQkgICAg Jm1pYmxlbik7Ci0JZXhwZWN0X2RfZXEoMCwgZXJyLCAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRv bWliKCkgZmFpbHVyZSIpOwotCi0Jc3ogPSBzaXplb2YobmRpcnR5X2h1Z2UpOwotCW1pYlsyXSA9 IGFyZW5hX2luZDsKLQllcnIgPSBtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZuZGlydHlfaHVn ZSwgJnN6LCBOVUxMLCAwKTsKLQlleHBlY3RfZF9lcSgwLCBlcnIsICJVbmV4cGVjdGVkIG1hbGxj dGxieW1pYigpIGZhaWx1cmUiKTsKLQotCXJldHVybiBuZGlydHlfaHVnZSArIG5kaXJ0eV9ub25o dWdlOwotfQotCi1zdGF0aWMgdm9pZAotc2V0X2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoYm9v bCBlbmFibGVkKSB7Ci0JaW50IGVycjsKLQllcnIgPSBqZV9tYWxsY3RsKCJiYWNrZ3JvdW5kX3Ro cmVhZCIsIE5VTEwsIE5VTEwsICZlbmFibGVkLAotCSAgICBzaXplb2YoZW5hYmxlZCkpOwotCWV4 cGVjdF9kX2VxKDAsIGVyciwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci19Ci0KLXN0 YXRpYyB2b2lkCi13YWl0X3VudGlsX3RocmVhZF9pc19lbmFibGVkKHVuc2lnbmVkIGFyZW5hX2lk KSB7Ci0JdHNkX3QqIHRzZCA9IHRzZF9mZXRjaCgpOwotCi0JYm9vbCBzbGVlcGluZyA9IGZhbHNl OwotCWludCBpdGVyYXRpb25zID0gMDsKLQlkbyB7Ci0JCWJhY2tncm91bmRfdGhyZWFkX2luZm9f dCAqaW5mbyA9Ci0JCSAgICBiYWNrZ3JvdW5kX3RocmVhZF9pbmZvX2dldChhcmVuYV9pZCk7Ci0J CW1hbGxvY19tdXRleF9sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCQltYWxsb2Nf bXV0ZXhfdW5sb2NrKHRzZF90c2RuKHRzZCksICZpbmZvLT5tdHgpOwotCQlzbGVlcGluZyA9IGJh Y2tncm91bmRfdGhyZWFkX2luZGVmaW5pdGVfc2xlZXAoaW5mbyk7Ci0JCWFzc2VydF9kX2x0KGl0 ZXJhdGlvbnMsIFVJTlQ2NF9DKDEwMDAwMDApLAotCQkgICAgIldhaXRpbmcgZm9yIGEgdGhyZWFk IHRvIHN0YXJ0IGZvciB0b28gbG9uZyIpOwotCX0gd2hpbGUgKCFzbGVlcGluZyk7Ci19Ci0KLXN0 YXRpYyB2b2lkCi1leHBlY3RfcHVyZ2luZyh1bnNpZ25lZCBhcmVuYV9pbmQsIGJvb2wgZXhwZWN0 X2RlZmVycmVkKSB7Ci0Jc2l6ZV90IGVtcHR5X25kaXJ0eTsKLQotCWVtcHR5X25kaXJ0eSA9IGdl dF9lbXB0eV9uZGlydHkoYXJlbmFfaW5kKTsKLQlleHBlY3RfenVfZXEoMCwgZW1wdHlfbmRpcnR5 LCAiRXhwZWN0ZWQgYXJlbmEgdG8gc3RhcnQgdW51c2VkLiIpOwotCi0JLyoKLQkgKiBJdCdzIHBv c3NpYmxlIHRoYXQgd2UgZ2V0IHVubHVja3kgd2l0aCBvdXIgc3RhdHMgY29sbGVjdGlvbiB0aW1p bmcsCi0JICogYW5kIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBydW5zIGluIGJldHdlZW4gdGhlIGRl YWxsb2NhdGlvbiBhbmQgdGhlCi0JICogc3RhdHMgY29sbGVjdGlvbi4gIFNvIHdlIHJldHJ5IDEw IHRpbWVzLCBhbmQgc2VlIGlmIHdlICpldmVyKiBzZWUKLQkgKiBkZWZlcnJlZCByZWNsYW1hdGlv bi4KLQkgKi8KLQlib29sIG9ic2VydmVkX2RpcnR5X3BhZ2UgPSBmYWxzZTsKLQlmb3IgKGludCBp ID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJdm9pZCAqcHRyID0gbWFsbG9jeChQQUdFLAotCQkgICAg TUFMTE9DWF9UQ0FDSEVfTk9ORSB8IE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSk7Ci0JCWVtcHR5 X25kaXJ0eSA9IGdldF9lbXB0eV9uZGlydHkoYXJlbmFfaW5kKTsKLQkJZXhwZWN0X3p1X2VxKDAs IGVtcHR5X25kaXJ0eSwgIkFsbCBwYWdlcyBzaG91bGQgYmUgYWN0aXZlIik7Ci0JCWRhbGxvY3go cHRyLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQkJZW1wdHlfbmRpcnR5ID0gZ2V0X2VtcHR5X25k aXJ0eShhcmVuYV9pbmQpOwotCQlpZiAoZXhwZWN0X2RlZmVycmVkKSB7Ci0JCQlleHBlY3RfdHJ1 ZShlbXB0eV9uZGlydHkgPT0gMCB8fCBlbXB0eV9uZGlydHkgPT0gMSB8fAotCQkJICAgIG9wdF9w cm9mLCAiVW5leHBlY3RlZCBleHRyYSBkaXJ0eSBwYWdlIGNvdW50OiAlenUiLAotCQkJICAgIGVt cHR5X25kaXJ0eSk7Ci0JCX0gZWxzZSB7Ci0JCQlhc3NlcnRfenVfZXEoMCwgZW1wdHlfbmRpcnR5 LAotCQkJICAgICJTYXcgZGlydHkgcGFnZXMgd2l0aG91dCBkZWZlcnJlZCBwdXJnaW5nIik7Ci0J CX0KLQkJaWYgKGVtcHR5X25kaXJ0eSA+IDApIHsKLQkJCW9ic2VydmVkX2RpcnR5X3BhZ2UgPSB0 cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JZXhwZWN0X2JfZXEoZXhwZWN0X2RlZmVycmVkLCBv YnNlcnZlZF9kaXJ0eV9wYWdlLCAiIik7Ci0KLQkvKgotCSAqIFVuZGVyIGhpZ2ggY29uY3VycmVu Y3kgLyBoZWF2eSB0ZXN0IGxvYWQgKGUuZy4gdXNpbmcgcnVuX3Rlc3Quc2gpLAotCSAqIHRoZSBi YWNrZ3JvdW5kIHRocmVhZCBtYXkgbm90IGdldCBzY2hlZHVsZWQgZm9yIGEgbG9uZ2VyIHBlcmlv ZCBvZgotCSAqIHRpbWUuICBSZXRyeSAxMDAgdGltZXMgbWF4IGJlZm9yZSBiYWlsaW5nIG91dC4K LQkgKi8KLQl1bnNpZ25lZCByZXRyeSA9IDA7Ci0Jd2hpbGUgKChlbXB0eV9uZGlydHkgPSBnZXRf ZW1wdHlfbmRpcnR5KGFyZW5hX2luZCkpID4gMCAmJgotCSAgICBleHBlY3RfZGVmZXJyZWQgJiYg KHJldHJ5KysgPCAxMDApKSB7Ci0JCXNsZWVwX2Zvcl9iYWNrZ3JvdW5kX3RocmVhZF9pbnRlcnZh bCgpOwotCX0KLQotCWV4cGVjdF96dV9lcSgwLCBlbXB0eV9uZGlydHksICJTaG91bGQgaGF2ZSBz ZWVuIGEgYmFja2dyb3VuZCBwdXJnZSIpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfaHBhX2JhY2tn cm91bmRfdGhyZWFkX3B1cmdlcykgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3N0YXRzKTsKLQl0 ZXN0X3NraXBfaWYoIWhwYV9zdXBwb3J0ZWQoKSk7Ci0JdGVzdF9za2lwX2lmKCFoYXZlX2JhY2tn cm91bmRfdGhyZWFkKTsKLQkvKiBTa2lwIHNpbmNlIGd1YXJkZWQgcGFnZXMgY2Fubm90IGJlIGFs bG9jYXRlZCBmcm9tIGhwYS4gKi8KLQl0ZXN0X3NraXBfaWYoc2FuX2d1YXJkX2VuYWJsZWQoKSk7 Ci0KLQl1bnNpZ25lZCBhcmVuYV9pbmQgPSBjcmVhdGVfYXJlbmEoKTsKLQkvKgotCSAqIE91ciAu c2ggc2V0cyBkaXJ0eSBtdWx0IHRvIDAsIHNvIGFsbCBkaXJ0eSBwYWdlcyBzaG91bGQgZ2V0IHB1 cmdlZAotCSAqIGFueSB0aW1lIGFueSB0aHJlYWQgZnJlZXMuCi0JICovCi0JZXhwZWN0X3B1cmdp bmcoYXJlbmFfaW5kLCAvKiBleHBlY3RfZGVmZXJyZWQgKi8gdHJ1ZSk7Ci19Ci1URVNUX0VORAot Ci1URVNUX0JFR0lOKHRlc3RfaHBhX2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZV9kaXNhYmxlKSB7 Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfc3RhdHMpOwotCXRlc3Rfc2tpcF9pZighaHBhX3N1cHBv cnRlZCgpKTsKLQl0ZXN0X3NraXBfaWYoIWhhdmVfYmFja2dyb3VuZF90aHJlYWQpOwotCS8qIFNr aXAgc2luY2UgZ3VhcmRlZCBwYWdlcyBjYW5ub3QgYmUgYWxsb2NhdGVkIGZyb20gaHBhLiAqLwot CXRlc3Rfc2tpcF9pZihzYW5fZ3VhcmRfZW5hYmxlZCgpKTsKLQotCXVuc2lnbmVkIGFyZW5hX2lu ZCA9IGNyZWF0ZV9hcmVuYSgpOwotCi0Jc2V0X2JhY2tncm91bmRfdGhyZWFkX2VuYWJsZWQoZmFs c2UpOwotCWV4cGVjdF9wdXJnaW5nKGFyZW5hX2luZCwgZmFsc2UpOwotCi0Jc2V0X2JhY2tncm91 bmRfdGhyZWFkX2VuYWJsZWQodHJ1ZSk7Ci0Jd2FpdF91bnRpbF90aHJlYWRfaXNfZW5hYmxlZChh cmVuYV9pbmQpOwotCWV4cGVjdF9wdXJnaW5nKGFyZW5hX2luZCwgdHJ1ZSk7Ci19Ci1URVNUX0VO RAotCi1pbnQKLW1haW4odm9pZCkgewotCS8qCi0JICogT0ssIHRoaXMgaXMgYSBzb3J0IG9mIG5h c3R5IGhhY2suICBXZSBkb24ndCB3YW50IHRvIGFkZCAqYW5vdGhlcioKLQkgKiBjb25maWcgb3B0 aW9uIGZvciBIUEEgKHRoZSBpbnRlbnQgaXMgdGhhdCBpdCBiZWNvbWVzIGF2YWlsYWJsZSBvbgot CSAqIG1vcmUgcGxhdGZvcm1zIG92ZXIgdGltZSwgYW5kIHdlJ3JlIHRyeWluZyB0byBwcnVuZSBi YWNrIGNvbmZpZwotCSAqIG9wdGlvbnMgZ2VuZXJhbGx5LiAgQnV0IHdlJ2xsIGdldCBpbml0aWFs aXphdGlvbiBlcnJvcnMgb24gb3RoZXIKLQkgKiBwbGF0Zm9ybXMgaWYgd2Ugc2V0IGhwYTp0cnVl IGluIHRoZSBNQUxMT0NfQ09ORiAoZXZlbiBpZiB3ZSBzZXQKLQkgKiBhYm9ydF9jb25mOmZhbHNl IGFzIHdlbGwpLiAgU28gd2UgcmVhY2ggaW50byB0aGUgaW50ZXJuYWxzIGFuZCBzZXQKLQkgKiB0 aGVtIGRpcmVjdGx5LCBidXQgb25seSBpZiB3ZSBrbm93IHRoYXQgd2UncmUgYWN0dWFsbHkgZ29p bmcgdG8gZG8KLQkgKiBzb21ldGhpbmcgbm9udHJpdmlhbCBpbiB0aGUgdGVzdHMuCi0JICovCi0J aWYgKGNvbmZpZ19zdGF0cyAmJiBocGFfc3VwcG9ydGVkKCkgJiYgaGF2ZV9iYWNrZ3JvdW5kX3Ro cmVhZCkgewotCQlvcHRfaHBhID0gdHJ1ZTsKLQkJb3B0X2JhY2tncm91bmRfdGhyZWFkID0gdHJ1 ZTsKLQl9Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF9ocGFfYmFja2dy b3VuZF90aHJlYWRfcHVyZ2VzLAotCSAgICB0ZXN0X2hwYV9iYWNrZ3JvdW5kX3RocmVhZF9lbmFi bGVfZGlzYWJsZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L2hwYV9iYWNrZ3JvdW5kX3RocmVhZC5zaCBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ocGFfYmFja2dyb3VuZF90 aHJlYWQuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YTU2YTAuLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2hw YV9iYWNrZ3JvdW5kX3RocmVhZC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyEv YmluL3NoCi0KLWV4cG9ydCBNQUxMT0NfQ09ORj0iaHBhX2RpcnR5X211bHQ6MCxocGFfbWluX3B1 cmdlX2ludGVydmFsX21zOjUwLGhwYV9zZWNfbnNoYXJkczowIgotCgpkaWZmIC0tZ2l0IGEvMzg5 LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2hwZGF0YS5jIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2hwZGF0YS5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODhlNzFkLi4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ocGRhdGEuYwor KysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190 ZXN0LmgiCi0KLSNkZWZpbmUgSFBEQVRBX0FERFIgKCh2b2lkICopKDEwICogSFVHRVBBR0UpKQot I2RlZmluZSBIUERBVEFfQUdFIDEyMwotCi1URVNUX0JFR0lOKHRlc3RfcmVzZXJ2ZV9hbGxvYykg ewotCWhwZGF0YV90IGhwZGF0YTsKLQlocGRhdGFfaW5pdCgmaHBkYXRhLCBIUERBVEFfQUREUiwg SFBEQVRBX0FHRSk7Ci0KLQkvKiBBbGxvY2F0aW5nIGEgcGFnZSBhdCBhIHRpbWUsIHdlIHNob3Vs ZCBkbyBmaXJzdCBmaXQuICovCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIVUdFUEFHRV9QQUdF UzsgaSsrKSB7Ci0JCWV4cGVjdF90cnVlKGhwZGF0YV9jb25zaXN0ZW50KCZocGRhdGEpLCAiIik7 Ci0JCWV4cGVjdF96dV9lcShIVUdFUEFHRV9QQUdFUyAtIGksCi0JCSAgICBocGRhdGFfbG9uZ2Vz dF9mcmVlX3JhbmdlX2dldCgmaHBkYXRhKSwgIiIpOwotCQl2b2lkICphbGxvYyA9IGhwZGF0YV9y ZXNlcnZlX2FsbG9jKCZocGRhdGEsIFBBR0UpOwotCQlleHBlY3RfcHRyX2VxKChjaGFyICopSFBE QVRBX0FERFIgKyBpICogUEFHRSwgYWxsb2MsICIiKTsKLQkJZXhwZWN0X3RydWUoaHBkYXRhX2Nv bnNpc3RlbnQoJmhwZGF0YSksICIiKTsKLQl9Ci0JZXhwZWN0X3RydWUoaHBkYXRhX2NvbnNpc3Rl bnQoJmhwZGF0YSksICIiKTsKLQlleHBlY3RfenVfZXEoMCwgaHBkYXRhX2xvbmdlc3RfZnJlZV9y YW5nZV9nZXQoJmhwZGF0YSksICIiKTsKLQotCS8qCi0JICogQnVpbGQgdXAgYSBiaWdnZXIgZnJl ZS1yYW5nZSwgMiBwYWdlcyBhdCBhIHRpbWUsIHVudGlsIHdlJ3ZlIGdvdCA2Ci0JICogYWRqYWNl bnQgZnJlZSBwYWdlcyB0b3RhbC4gIFBhZ2VzIDgtMTMgc2hvdWxkIGJlIHVucmVzZXJ2ZWQgYWZ0 ZXIKLQkgKiB0aGlzLgotCSAqLwotCWhwZGF0YV91bnJlc2VydmUoJmhwZGF0YSwgKGNoYXIgKilI UERBVEFfQUREUiArIDEwICogUEFHRSwgMiAqIFBBR0UpOwotCWV4cGVjdF90cnVlKGhwZGF0YV9j b25zaXN0ZW50KCZocGRhdGEpLCAiIik7Ci0JZXhwZWN0X3p1X2VxKDIsIGhwZGF0YV9sb25nZXN0 X2ZyZWVfcmFuZ2VfZ2V0KCZocGRhdGEpLCAiIik7Ci0KLQlocGRhdGFfdW5yZXNlcnZlKCZocGRh dGEsIChjaGFyICopSFBEQVRBX0FERFIgKyAxMiAqIFBBR0UsIDIgKiBQQUdFKTsKLQlleHBlY3Rf dHJ1ZShocGRhdGFfY29uc2lzdGVudCgmaHBkYXRhKSwgIiIpOwotCWV4cGVjdF96dV9lcSg0LCBo cGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dldCgmaHBkYXRhKSwgIiIpOwotCi0JaHBkYXRhX3Vu cmVzZXJ2ZSgmaHBkYXRhLCAoY2hhciAqKUhQREFUQV9BRERSICsgOCAqIFBBR0UsIDIgKiBQQUdF KTsKLQlleHBlY3RfdHJ1ZShocGRhdGFfY29uc2lzdGVudCgmaHBkYXRhKSwgIiIpOwotCWV4cGVj dF96dV9lcSg2LCBocGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dldCgmaHBkYXRhKSwgIiIpOwot Ci0JLyoKLQkgKiBMZWF2ZSBwYWdlIDE0IHJlc2VydmVkLCBidXQgZnJlZSBwYWdlIDE1ICh0aGlz IHRlc3QgdGhlIGNhc2Ugd2hlcmUKLQkgKiB1bnJlc2VydmluZyBjb21iaW5lcyB0d28gcmFuZ2Vz KS4KLQkgKi8KLQlocGRhdGFfdW5yZXNlcnZlKCZocGRhdGEsIChjaGFyICopSFBEQVRBX0FERFIg KyAxNSAqIFBBR0UsIFBBR0UpOwotCS8qCi0JICogTG9uZ2VzdCBmcmVlIHJhbmdlIHNob3VsZG4n dCBjaGFuZ2U7IHdlJ3ZlIGdvdCBhIGZyZWUgcmFuZ2Ugb2Ygc2l6ZQotCSAqIDYsIHRoZW4gYSBy ZXNlcnZlZCBwYWdlLCB0aGVuIGFub3RoZXIgZnJlZSByYW5nZS4KLQkgKi8KLQlleHBlY3RfdHJ1 ZShocGRhdGFfY29uc2lzdGVudCgmaHBkYXRhKSwgIiIpOwotCWV4cGVjdF96dV9lcSg2LCBocGRh dGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dldCgmaHBkYXRhKSwgIiIpOwotCi0JLyogQWZ0ZXIgZnJl ZWluZyBwYWdlIDE0LCB0aGUgdHdvIHJhbmdlcyBnZXQgY29tYmluZWQuICovCi0JaHBkYXRhX3Vu cmVzZXJ2ZSgmaHBkYXRhLCAoY2hhciAqKUhQREFUQV9BRERSICsgMTQgKiBQQUdFLCBQQUdFKTsK LQlleHBlY3RfdHJ1ZShocGRhdGFfY29uc2lzdGVudCgmaHBkYXRhKSwgIiIpOwotCWV4cGVjdF96 dV9lcSg4LCBocGRhdGFfbG9uZ2VzdF9mcmVlX3JhbmdlX2dldCgmaHBkYXRhKSwgIiIpOwotfQot VEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3B1cmdlX3NpbXBsZSkgewotCWhwZGF0YV90IGhw ZGF0YTsKLQlocGRhdGFfaW5pdCgmaHBkYXRhLCBIUERBVEFfQUREUiwgSFBEQVRBX0FHRSk7Ci0K LQl2b2lkICphbGxvYyA9IGhwZGF0YV9yZXNlcnZlX2FsbG9jKCZocGRhdGEsIEhVR0VQQUdFX1BB R0VTIC8gMiAqIFBBR0UpOwotCWV4cGVjdF9wdHJfZXEoYWxsb2MsIEhQREFUQV9BRERSLCAiIik7 Ci0KLQkvKiBDcmVhdGUgSFVHRVBBR0VfUEFHRVMgLyA0IGRpcnR5IGluYWN0aXZlIHBhZ2VzIGF0 IHRoZSBiZWdpbm5pbmcuICovCi0JaHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhLCBhbGxvYywgSFVH RVBBR0VfUEFHRVMgLyA0ICogUEFHRSk7Ci0KLQlleHBlY3RfenVfZXEoaHBkYXRhX250b3VjaGVk X2dldCgmaHBkYXRhKSwgSFVHRVBBR0VfUEFHRVMgLyAyLCAiIik7Ci0KLQlocGRhdGFfYWxsb2Nf YWxsb3dlZF9zZXQoJmhwZGF0YSwgZmFsc2UpOwotCWhwZGF0YV9wdXJnZV9zdGF0ZV90IHB1cmdl X3N0YXRlOwotCXNpemVfdCB0b19wdXJnZSA9IGhwZGF0YV9wdXJnZV9iZWdpbigmaHBkYXRhLCAm cHVyZ2Vfc3RhdGUpOwotCWV4cGVjdF96dV9lcShIVUdFUEFHRV9QQUdFUyAvIDQsIHRvX3B1cmdl LCAiIik7Ci0KLQl2b2lkICpwdXJnZV9hZGRyOwotCXNpemVfdCBwdXJnZV9zaXplOwotCWJvb2wg Z290X3Jlc3VsdCA9IGhwZGF0YV9wdXJnZV9uZXh0KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1 cmdlX2FkZHIsCi0JICAgICZwdXJnZV9zaXplKTsKLQlleHBlY3RfdHJ1ZShnb3RfcmVzdWx0LCAi Iik7Ci0JZXhwZWN0X3B0cl9lcShIUERBVEFfQUREUiwgcHVyZ2VfYWRkciwgIiIpOwotCWV4cGVj dF96dV9lcShIVUdFUEFHRV9QQUdFUyAvIDQgKiBQQUdFLCBwdXJnZV9zaXplLCAiIik7Ci0KLQln b3RfcmVzdWx0ID0gaHBkYXRhX3B1cmdlX25leHQoJmhwZGF0YSwgJnB1cmdlX3N0YXRlLCAmcHVy Z2VfYWRkciwKLQkgICAgJnB1cmdlX3NpemUpOwotCWV4cGVjdF9mYWxzZShnb3RfcmVzdWx0LCAi VW5leHBlY3RlZCBhZGRpdGlvbmFsIHB1cmdlIHJhbmdlOiAiCi0JICAgICJleHRlbnQgYXQgJXAg b2Ygc2l6ZSAlenUiLCBwdXJnZV9hZGRyLCBwdXJnZV9zaXplKTsKLQotCWhwZGF0YV9wdXJnZV9l bmQoJmhwZGF0YSwgJnB1cmdlX3N0YXRlKTsKLQlleHBlY3RfenVfZXEoaHBkYXRhX250b3VjaGVk X2dldCgmaHBkYXRhKSwgSFVHRVBBR0VfUEFHRVMgLyA0LCAiIik7Ci19Ci1URVNUX0VORAotCi0v KgotICogV2Ugb25seSB0ZXN0IGludGVydmVuaW5nIGRhbGxvYydzIG5vdCBpbnRlcnZlbmluZyBh bGxvY3M7IHRoZSBsYXR0ZXIgYXJlCi0gKiBkaXNhbGxvd2VkIGFzIGEgcHVyZ2luZyBwcmVjb25k aXRpb24gKGJlY2F1c2UgdGhleSBpbnRlcmZlcmUgd2l0aCBwdXJnaW5nCi0gKiBhY3Jvc3MgYSBy ZXRhaW5lZCBleHRlbnQsIHNhdmluZyBhIHB1cmdlIGNhbGwpLgotICovCi1URVNUX0JFR0lOKHRl c3RfcHVyZ2VfaW50ZXJ2ZW5pbmdfZGFsbG9jKSB7Ci0JaHBkYXRhX3QgaHBkYXRhOwotCWhwZGF0 YV9pbml0KCZocGRhdGEsIEhQREFUQV9BRERSLCBIUERBVEFfQUdFKTsKLQotCS8qIEFsbG9jYXRl IHRoZSBmaXJzdCAzLzQgb2YgdGhlIHBhZ2VzLiAqLwotCXZvaWQgKmFsbG9jID0gaHBkYXRhX3Jl c2VydmVfYWxsb2MoJmhwZGF0YSwgMyAqIEhVR0VQQUdFX1BBR0VTIC8gNCAgKiBQQUdFKTsKLQll eHBlY3RfcHRyX2VxKGFsbG9jLCBIUERBVEFfQUREUiwgIiIpOwotCi0JLyogRnJlZSB0aGUgZmly c3QgMS80IGFuZCB0aGUgdGhpcmQgMS80IG9mIHRoZSBwYWdlcy4gKi8KLQlocGRhdGFfdW5yZXNl cnZlKCZocGRhdGEsIGFsbG9jLCBIVUdFUEFHRV9QQUdFUyAvIDQgKiBQQUdFKTsKLQlocGRhdGFf dW5yZXNlcnZlKCZocGRhdGEsCi0JICAgICh2b2lkICopKCh1aW50cHRyX3QpYWxsb2MgKyAyICog SFVHRVBBR0VfUEFHRVMgLyA0ICogUEFHRSksCi0JICAgIEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBB R0UpOwotCi0JZXhwZWN0X3p1X2VxKGhwZGF0YV9udG91Y2hlZF9nZXQoJmhwZGF0YSksIDMgKiBI VUdFUEFHRV9QQUdFUyAvIDQsICIiKTsKLQotCWhwZGF0YV9hbGxvY19hbGxvd2VkX3NldCgmaHBk YXRhLCBmYWxzZSk7Ci0JaHBkYXRhX3B1cmdlX3N0YXRlX3QgcHVyZ2Vfc3RhdGU7Ci0Jc2l6ZV90 IHRvX3B1cmdlID0gaHBkYXRhX3B1cmdlX2JlZ2luKCZocGRhdGEsICZwdXJnZV9zdGF0ZSk7Ci0J ZXhwZWN0X3p1X2VxKEhVR0VQQUdFX1BBR0VTIC8gMiwgdG9fcHVyZ2UsICIiKTsKLQotCXZvaWQg KnB1cmdlX2FkZHI7Ci0Jc2l6ZV90IHB1cmdlX3NpemU7Ci0JLyogRmlyc3QgcHVyZ2UuICovCi0J Ym9vbCBnb3RfcmVzdWx0ID0gaHBkYXRhX3B1cmdlX25leHQoJmhwZGF0YSwgJnB1cmdlX3N0YXRl LCAmcHVyZ2VfYWRkciwKLQkgICAgJnB1cmdlX3NpemUpOwotCWV4cGVjdF90cnVlKGdvdF9yZXN1 bHQsICIiKTsKLQlleHBlY3RfcHRyX2VxKEhQREFUQV9BRERSLCBwdXJnZV9hZGRyLCAiIik7Ci0J ZXhwZWN0X3p1X2VxKEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBBR0UsIHB1cmdlX3NpemUsICIiKTsK LQotCS8qIERlYWxsb2NhdGUgdGhlIHNlY29uZCAxLzQgYmVmb3JlIHRoZSBzZWNvbmQgcHVyZ2Ug b2NjdXJzLiAqLwotCWhwZGF0YV91bnJlc2VydmUoJmhwZGF0YSwKLQkgICAgKHZvaWQgKikoKHVp bnRwdHJfdClhbGxvYyArIDEgKiBIVUdFUEFHRV9QQUdFUyAvIDQgKiBQQUdFKSwKLQkgICAgSFVH RVBBR0VfUEFHRVMgLyA0ICogUEFHRSk7Ci0KLQkvKiBOb3cgY29udGludWUgcHVyZ2luZy4gKi8K LQlnb3RfcmVzdWx0ID0gaHBkYXRhX3B1cmdlX25leHQoJmhwZGF0YSwgJnB1cmdlX3N0YXRlLCAm cHVyZ2VfYWRkciwKLQkgICAgJnB1cmdlX3NpemUpOwotCWV4cGVjdF90cnVlKGdvdF9yZXN1bHQs ICIiKTsKLQlleHBlY3RfcHRyX2VxKAotCSAgICAodm9pZCAqKSgodWludHB0cl90KWFsbG9jICsg MiAqIEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBBR0UpLAotCSAgICBwdXJnZV9hZGRyLCAiIik7Ci0J ZXhwZWN0X3p1X2dlKEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBBR0UsIHB1cmdlX3NpemUsICIiKTsK LQotCWdvdF9yZXN1bHQgPSBocGRhdGFfcHVyZ2VfbmV4dCgmaHBkYXRhLCAmcHVyZ2Vfc3RhdGUs ICZwdXJnZV9hZGRyLAotCSAgICAmcHVyZ2Vfc2l6ZSk7Ci0JZXhwZWN0X2ZhbHNlKGdvdF9yZXN1 bHQsICJVbmV4cGVjdGVkIGFkZGl0aW9uYWwgcHVyZ2UgcmFuZ2U6ICIKLQkgICAgImV4dGVudCBh dCAlcCBvZiBzaXplICV6dSIsIHB1cmdlX2FkZHIsIHB1cmdlX3NpemUpOwotCi0JaHBkYXRhX3B1 cmdlX2VuZCgmaHBkYXRhLCAmcHVyZ2Vfc3RhdGUpOwotCi0JZXhwZWN0X3p1X2VxKGhwZGF0YV9u dG91Y2hlZF9nZXQoJmhwZGF0YSksIEhVR0VQQUdFX1BBR0VTIC8gNCwgIiIpOwotfQotVEVTVF9F TkQKLQotVEVTVF9CRUdJTih0ZXN0X3B1cmdlX292ZXJfcmV0YWluZWQpIHsKLQl2b2lkICpwdXJn ZV9hZGRyOwotCXNpemVfdCBwdXJnZV9zaXplOwotCi0JaHBkYXRhX3QgaHBkYXRhOwotCWhwZGF0 YV9pbml0KCZocGRhdGEsIEhQREFUQV9BRERSLCBIUERBVEFfQUdFKTsKLQotCS8qIEFsbG9jYXRl IHRoZSBmaXJzdCAzLzQgb2YgdGhlIHBhZ2VzLiAqLwotCXZvaWQgKmFsbG9jID0gaHBkYXRhX3Jl c2VydmVfYWxsb2MoJmhwZGF0YSwgMyAqIEhVR0VQQUdFX1BBR0VTIC8gNCAgKiBQQUdFKTsKLQll eHBlY3RfcHRyX2VxKGFsbG9jLCBIUERBVEFfQUREUiwgIiIpOwotCi0JLyogRnJlZSB0aGUgc2Vj b25kIHF1YXJ0ZXIuICovCi0Jdm9pZCAqc2Vjb25kX3F1YXJ0ZXIgPQotCSAgICAodm9pZCAqKSgo dWludHB0cl90KWFsbG9jICsgSFVHRVBBR0VfUEFHRVMgLyA0ICogUEFHRSk7Ci0JaHBkYXRhX3Vu cmVzZXJ2ZSgmaHBkYXRhLCBzZWNvbmRfcXVhcnRlciwgSFVHRVBBR0VfUEFHRVMgLyA0ICogUEFH RSk7Ci0KLQlleHBlY3RfenVfZXEoaHBkYXRhX250b3VjaGVkX2dldCgmaHBkYXRhKSwgMyAqIEhV R0VQQUdFX1BBR0VTIC8gNCwgIiIpOwotCi0JLyogUHVyZ2UgdGhlIHNlY29uZCBxdWFydGVyLiAq LwotCWhwZGF0YV9hbGxvY19hbGxvd2VkX3NldCgmaHBkYXRhLCBmYWxzZSk7Ci0JaHBkYXRhX3B1 cmdlX3N0YXRlX3QgcHVyZ2Vfc3RhdGU7Ci0Jc2l6ZV90IHRvX3B1cmdlX2RpcnR5ID0gaHBkYXRh X3B1cmdlX2JlZ2luKCZocGRhdGEsICZwdXJnZV9zdGF0ZSk7Ci0JZXhwZWN0X3p1X2VxKEhVR0VQ QUdFX1BBR0VTIC8gNCwgdG9fcHVyZ2VfZGlydHksICIiKTsKLQotCWJvb2wgZ290X3Jlc3VsdCA9 IGhwZGF0YV9wdXJnZV9uZXh0KCZocGRhdGEsICZwdXJnZV9zdGF0ZSwgJnB1cmdlX2FkZHIsCi0J ICAgICZwdXJnZV9zaXplKTsKLQlleHBlY3RfdHJ1ZShnb3RfcmVzdWx0LCAiIik7Ci0JZXhwZWN0 X3B0cl9lcShzZWNvbmRfcXVhcnRlciwgcHVyZ2VfYWRkciwgIiIpOwotCWV4cGVjdF96dV9lcShI VUdFUEFHRV9QQUdFUyAvIDQgKiBQQUdFLCBwdXJnZV9zaXplLCAiIik7Ci0KLQlnb3RfcmVzdWx0 ID0gaHBkYXRhX3B1cmdlX25leHQoJmhwZGF0YSwgJnB1cmdlX3N0YXRlLCAmcHVyZ2VfYWRkciwK LQkgICAgJnB1cmdlX3NpemUpOwotCWV4cGVjdF9mYWxzZShnb3RfcmVzdWx0LCAiVW5leHBlY3Rl ZCBhZGRpdGlvbmFsIHB1cmdlIHJhbmdlOiAiCi0JICAgICJleHRlbnQgYXQgJXAgb2Ygc2l6ZSAl enUiLCBwdXJnZV9hZGRyLCBwdXJnZV9zaXplKTsKLQlocGRhdGFfcHVyZ2VfZW5kKCZocGRhdGEs ICZwdXJnZV9zdGF0ZSk7Ci0KLQlleHBlY3RfenVfZXEoaHBkYXRhX250b3VjaGVkX2dldCgmaHBk YXRhKSwgSFVHRVBBR0VfUEFHRVMgLyAyLCAiIik7Ci0KLQkvKiBGcmVlIHRoZSBmaXJzdCBhbmQg dGhpcmQgcXVhcnRlci4gKi8KLQlocGRhdGFfdW5yZXNlcnZlKCZocGRhdGEsIEhQREFUQV9BRERS LCBIVUdFUEFHRV9QQUdFUyAvIDQgKiBQQUdFKTsKLQlocGRhdGFfdW5yZXNlcnZlKCZocGRhdGEs Ci0JICAgICh2b2lkICopKCh1aW50cHRyX3QpYWxsb2MgKyAyICogSFVHRVBBR0VfUEFHRVMgLyA0 ICogUEFHRSksCi0JICAgIEhVR0VQQUdFX1BBR0VTIC8gNCAqIFBBR0UpOwotCi0JLyoKLQkgKiBQ dXJnZSBhZ2Fpbi4gIFRoZSBzZWNvbmQgcXVhcnRlciBpcyByZXRhaW5lZCwgc28gd2UgY2FuIHNh ZmVseQotCSAqIHJlLXB1cmdlIGl0LiAgV2UgZXhwZWN0IGEgc2luZ2xlIHB1cmdlIG9mIDMvNCBv ZiB0aGUgaHVnZXBhZ2UsCi0JICogcHVyZ2luZyBoYWxmIGl0cyBwYWdlcy4KLQkgKi8KLQl0b19w dXJnZV9kaXJ0eSA9IGhwZGF0YV9wdXJnZV9iZWdpbigmaHBkYXRhLCAmcHVyZ2Vfc3RhdGUpOwot CWV4cGVjdF96dV9lcShIVUdFUEFHRV9QQUdFUyAvIDIsIHRvX3B1cmdlX2RpcnR5LCAiIik7Ci0K LQlnb3RfcmVzdWx0ID0gaHBkYXRhX3B1cmdlX25leHQoJmhwZGF0YSwgJnB1cmdlX3N0YXRlLCAm cHVyZ2VfYWRkciwKLQkgICAgJnB1cmdlX3NpemUpOwotCWV4cGVjdF90cnVlKGdvdF9yZXN1bHQs ICIiKTsKLQlleHBlY3RfcHRyX2VxKEhQREFUQV9BRERSLCBwdXJnZV9hZGRyLCAiIik7Ci0JZXhw ZWN0X3p1X2VxKDMgKiBIVUdFUEFHRV9QQUdFUyAvIDQgKiBQQUdFLCBwdXJnZV9zaXplLCAiIik7 Ci0KLQlnb3RfcmVzdWx0ID0gaHBkYXRhX3B1cmdlX25leHQoJmhwZGF0YSwgJnB1cmdlX3N0YXRl LCAmcHVyZ2VfYWRkciwKLQkgICAgJnB1cmdlX3NpemUpOwotCWV4cGVjdF9mYWxzZShnb3RfcmVz dWx0LCAiVW5leHBlY3RlZCBhZGRpdGlvbmFsIHB1cmdlIHJhbmdlOiAiCi0JICAgICJleHRlbnQg YXQgJXAgb2Ygc2l6ZSAlenUiLCBwdXJnZV9hZGRyLCBwdXJnZV9zaXplKTsKLQlocGRhdGFfcHVy Z2VfZW5kKCZocGRhdGEsICZwdXJnZV9zdGF0ZSk7Ci0KLQlleHBlY3RfenVfZXEoaHBkYXRhX250 b3VjaGVkX2dldCgmaHBkYXRhKSwgMCwgIiIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0 ZXN0X2h1Z2lmeSkgewotCWhwZGF0YV90IGhwZGF0YTsKLQlocGRhdGFfaW5pdCgmaHBkYXRhLCBI UERBVEFfQUREUiwgSFBEQVRBX0FHRSk7Ci0KLQl2b2lkICphbGxvYyA9IGhwZGF0YV9yZXNlcnZl X2FsbG9jKCZocGRhdGEsIEhVR0VQQUdFIC8gMik7Ci0JZXhwZWN0X3B0cl9lcShhbGxvYywgSFBE QVRBX0FERFIsICIiKTsKLQotCWV4cGVjdF96dV9lcShIVUdFUEFHRV9QQUdFUyAvIDIsIGhwZGF0 YV9udG91Y2hlZF9nZXQoJmhwZGF0YSksICIiKTsKLQotCWhwZGF0YV9odWdpZnkoJmhwZGF0YSk7 Ci0KLQkvKiBIdWdlaWZ5aW5nIHNob3VsZCBoYXZlIGluY3JlYXNlZCB0aGUgZGlydHkgcGFnZSBj b3VudC4gKi8KLQlleHBlY3RfenVfZXEoSFVHRVBBR0VfUEFHRVMsIGhwZGF0YV9udG91Y2hlZF9n ZXQoJmhwZGF0YSksICIiKTsKLX0KLVRFU1RfRU5ECi0KLWludCBtYWluKHZvaWQpIHsKLQlyZXR1 cm4gdGVzdF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0X3Jlc2VydmVfYWxsb2MsCi0JICAgIHRl c3RfcHVyZ2Vfc2ltcGxlLAotCSAgICB0ZXN0X3B1cmdlX2ludGVydmVuaW5nX2RhbGxvYywKLQkg ICAgdGVzdF9wdXJnZV9vdmVyX3JldGFpbmVkLAotCSAgICB0ZXN0X2h1Z2lmeSk7Ci19CgpkaWZm IC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L2h1Z2UuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9odWdlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjRlNTAuLjAwMDAwMDAK LS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2h1 Z2UuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1h bGxvY190ZXN0LmgiCi0KLS8qIFRocmVzaG9sZDogMiA8PCAyMCA9IDIwOTcxNTIuICovCi1jb25z dCBjaGFyICptYWxsb2NfY29uZiA9ICJvdmVyc2l6ZV90aHJlc2hvbGQ6MjA5NzE1MiI7Ci0KLSNk ZWZpbmUgSFVHRV9TWiAoMiA8PCAyMCkKLSNkZWZpbmUgU01BTExfU1ogKDgpCi0KLVRFU1RfQkVH SU4oaHVnZV9iaW5kX3RocmVhZCkgewotCXVuc2lnbmVkIGFyZW5hMSwgYXJlbmEyOwotCXNpemVf dCBzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0KLQkvKiBCaW5kIHRvIGEgbWFudWFsIGFyZW5hLiAq LwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAmYXJlbmExLCAmc3osIE5V TEwsIDApLCAwLAotCSAgICAiRmFpbGVkIHRvIGNyZWF0ZSBhcmVuYSIpOwotCWV4cGVjdF9kX2Vx KG1hbGxjdGwoInRocmVhZC5hcmVuYSIsIE5VTEwsIE5VTEwsICZhcmVuYTEsCi0JICAgIHNpemVv ZihhcmVuYTEpKSwgMCwgIkZhaWwgdG8gYmluZCB0aHJlYWQiKTsKLQotCXZvaWQgKnB0ciA9IG1h bGxvY3goSFVHRV9TWiwgMCk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwdHIsICJGYWlsIHRvIGFs bG9jYXRlIGh1Z2Ugc2l6ZSIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sb29rdXAi LCAmYXJlbmEyLCAmc3osICZwdHIsCi0JICAgIHNpemVvZihwdHIpKSwgMCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlleHBlY3RfdV9lcShhcmVuYTEsIGFyZW5hMiwgIldyb25n IGFyZW5hIHVzZWQgYWZ0ZXIgYmluZGluZyIpOwotCWRhbGxvY3gocHRyLCAwKTsKLQotCS8qIFN3 aXRjaCBiYWNrIHRvIGFyZW5hIDAuICovCi0JdGVzdF9za2lwX2lmKGhhdmVfcGVyY3B1X2FyZW5h ICYmCi0JICAgIFBFUkNQVV9BUkVOQV9FTkFCTEVEKG9wdF9wZXJjcHVfYXJlbmEpKTsKLQlhcmVu YTIgPSAwOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5hcmVuYSIsIE5VTEwsIE5VTEws ICZhcmVuYTIsCi0JICAgIHNpemVvZihhcmVuYTIpKSwgMCwgIkZhaWwgdG8gYmluZCB0aHJlYWQi KTsKLQlwdHIgPSBtYWxsb2N4KFNNQUxMX1NaLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQlleHBl Y3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubG9va3VwIiwgJmFyZW5hMiwgJnN6LCAmcHRyLAotCSAg ICBzaXplb2YocHRyKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JZXhw ZWN0X3VfZXEoYXJlbmEyLCAwLCAiV3JvbmcgYXJlbmEgdXNlZCBhZnRlciBiaW5kaW5nIik7Ci0J ZGFsbG9jeChwdHIsIE1BTExPQ1hfVENBQ0hFX05PTkUpOwotCi0JLyogVGhlbiBodWdlIGFsbG9j YXRpb24gc2hvdWxkIHVzZSB0aGUgaHVnZSBhcmVuYS4gKi8KLQlwdHIgPSBtYWxsb2N4KEhVR0Vf U1osIDApOwotCWV4cGVjdF9wdHJfbm90X251bGwocHRyLCAiRmFpbCB0byBhbGxvY2F0ZSBodWdl IHNpemUiKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubG9va3VwIiwgJmFyZW5hMiwg JnN6LCAmcHRyLAotCSAgICBzaXplb2YocHRyKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBm YWlsdXJlIik7Ci0JZXhwZWN0X3VfbmUoYXJlbmEyLCAwLCAiV3JvbmcgYXJlbmEgdXNlZCBhZnRl ciBiaW5kaW5nIik7Ci0JZXhwZWN0X3VfbmUoYXJlbmExLCBhcmVuYTIsICJXcm9uZyBhcmVuYSB1 c2VkIGFmdGVyIGJpbmRpbmciKTsKLQlkYWxsb2N4KHB0ciwgMCk7Ci19Ci1URVNUX0VORAotCi1U RVNUX0JFR0lOKGh1Z2VfbWFsbG9jeCkgewotCXVuc2lnbmVkIGFyZW5hMSwgYXJlbmEyOwotCXNp emVfdCBzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVu YXMuY3JlYXRlIiwgJmFyZW5hMSwgJnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIkZhaWxlZCB0byBj cmVhdGUgYXJlbmEiKTsKLQl2b2lkICpodWdlID0gbWFsbG9jeChIVUdFX1NaLCBNQUxMT0NYX0FS RU5BKGFyZW5hMSkpOwotCWV4cGVjdF9wdHJfbm90X251bGwoaHVnZSwgIkZhaWwgdG8gYWxsb2Nh dGUgaHVnZSBzaXplIik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxvb2t1cCIsICZh cmVuYTIsICZzeiwgJmh1Z2UsCi0JICAgIHNpemVvZihodWdlKSksIDAsICJVbmV4cGVjdGVkIG1h bGxjdGwoKSBmYWlsdXJlIik7Ci0JZXhwZWN0X3VfZXEoYXJlbmExLCBhcmVuYTIsICJXcm9uZyBh cmVuYSB1c2VkIGZvciBtYWxsb2N4Iik7Ci0JZGFsbG9jeChodWdlLCBNQUxMT0NYX0FSRU5BKGFy ZW5hMSkpOwotCi0Jdm9pZCAqaHVnZTIgPSBtYWxsb2N4KEhVR0VfU1osIDApOwotCWV4cGVjdF9w dHJfbm90X251bGwoaHVnZSwgIkZhaWwgdG8gYWxsb2NhdGUgaHVnZSBzaXplIik7Ci0JZXhwZWN0 X2RfZXEobWFsbGN0bCgiYXJlbmFzLmxvb2t1cCIsICZhcmVuYTIsICZzeiwgJmh1Z2UyLAotCSAg ICBzaXplb2YoaHVnZTIpKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQll eHBlY3RfdV9uZShhcmVuYTEsIGFyZW5hMiwKLQkgICAgIkh1Z2UgYWxsb2NhdGlvbiBzaG91bGQg bm90IGNvbWUgZnJvbSB0aGUgbWFudWFsIGFyZW5hLiIpOwotCWV4cGVjdF91X25lKGFyZW5hMiwg MCwKLQkgICAgIkh1Z2UgYWxsb2NhdGlvbiBzaG91bGQgbm90IGNvbWUgZnJvbSB0aGUgYXJlbmEg MC4iKTsKLQlkYWxsb2N4KGh1Z2UyLCAwKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4oaHVn ZV9hbGxvY2F0aW9uKSB7Ci0JdW5zaWduZWQgYXJlbmExLCBhcmVuYTI7Ci0KLQl2b2lkICpwdHIg PSBtYWxsb2N4KEhVR0VfU1osIDApOwotCWV4cGVjdF9wdHJfbm90X251bGwocHRyLCAiRmFpbCB0 byBhbGxvY2F0ZSBodWdlIHNpemUiKTsKLQlzaXplX3Qgc3ogPSBzaXplb2YodW5zaWduZWQpOwot CWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sb29rdXAiLCAmYXJlbmExLCAmc3osICZwdHIs IHNpemVvZihwdHIpKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsK LQlleHBlY3RfdV9ndChhcmVuYTEsIDAsICJIdWdlIGFsbG9jYXRpb24gc2hvdWxkIG5vdCBjb21l IGZyb20gYXJlbmEgMCIpOwotCWRhbGxvY3gocHRyLCAwKTsKLQotCXB0ciA9IG1hbGxvY3goSFVH RV9TWiA+PiAxLCAwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIkZhaWwgdG8gYWxsb2Nh dGUgaGFsZiBodWdlIHNpemUiKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubG9va3Vw IiwgJmFyZW5hMiwgJnN6LCAmcHRyLAotCSAgICBzaXplb2YocHRyKSksIDAsICJVbmV4cGVjdGVk IG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JZXhwZWN0X3VfbmUoYXJlbmExLCBhcmVuYTIsICJXcm9u ZyBhcmVuYSB1c2VkIGZvciBoYWxmIGh1Z2UiKTsKLQlkYWxsb2N4KHB0ciwgMCk7Ci0KLQlwdHIg PSBtYWxsb2N4KFNNQUxMX1NaLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQlleHBlY3RfcHRyX25v dF9udWxsKHB0ciwgIkZhaWwgdG8gYWxsb2NhdGUgc21hbGwgc2l6ZSIpOwotCWV4cGVjdF9kX2Vx KG1hbGxjdGwoImFyZW5hcy5sb29rdXAiLCAmYXJlbmEyLCAmc3osICZwdHIsCi0JICAgIHNpemVv ZihwdHIpKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlleHBlY3RfdV9u ZShhcmVuYTEsIGFyZW5hMiwKLQkgICAgIkh1Z2UgYW5kIHNtYWxsIHNob3VsZCBiZSBmcm9tIGRp ZmZlcmVudCBhcmVuYXMiKTsKLQlkYWxsb2N4KHB0ciwgMCk7Ci19Ci1URVNUX0VORAotCi1pbnQK LW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICBodWdlX2FsbG9jYXRpb24sCi0JICAg IGh1Z2VfbWFsbG9jeCwKLQkgICAgaHVnZV9iaW5kX3RocmVhZCk7Ci19CgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2luc3BlY3Qu YyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9pbnNw ZWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNTllNTkuLjAwMDAwMDAKLS0t IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2luc3Bl Y3QuYworKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1h bGxvY190ZXN0LmgiCi0KLSNkZWZpbmUgVEVTVF9VVElMX0VJTlZBTChub2RlLCBhLCBiLCBjLCBk LCB3aHlfaW52YWwpIGRvIHsJCVwKLQlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwu dXRpbGl6YXRpb24uIiBub2RlLAkJXAotCSAgICBhLCBiLCBjLCBkKSwgRUlOVkFMLCAiU2hvdWxk IGZhaWwgd2hlbiAiIHdoeV9pbnZhbCk7CVwKLQlhc3NlcnRfenVfZXEob3V0X3N6LCBvdXRfc3pf cmVmLAkJCQlcCi0JICAgICJPdXRwdXQgc2l6ZSB0b3VjaGVkIHdoZW4gZ2l2ZW4gaW52YWxpZCBh cmd1bWVudHMiKTsJXAotCWFzc2VydF9kX2VxKG1lbWNtcChvdXQsIG91dF9yZWYsIG91dF9zel9y ZWYpLCAwLAkJXAotCSAgICAiT3V0cHV0IGNvbnRlbnQgdG91Y2hlZCB3aGVuIGdpdmVuIGludmFs aWQgYXJndW1lbnRzIik7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgVEVTVF9VVElMX1FVRVJZ X0VJTlZBTChhLCBiLCBjLCBkLCB3aHlfaW52YWwpCQkJXAotCVRFU1RfVVRJTF9FSU5WQUwoInF1 ZXJ5IiwgYSwgYiwgYywgZCwgd2h5X2ludmFsKQotI2RlZmluZSBURVNUX1VUSUxfQkFUQ0hfRUlO VkFMKGEsIGIsIGMsIGQsIHdoeV9pbnZhbCkJCQlcCi0JVEVTVF9VVElMX0VJTlZBTCgiYmF0Y2hf cXVlcnkiLCBhLCBiLCBjLCBkLCB3aHlfaW52YWwpCi0KLSNkZWZpbmUgVEVTVF9VVElMX1ZBTElE KG5vZGUpIGRvIHsJCQkJCVwKLSAgICAgICAgYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXhwZXJpbWVu dGFsLnV0aWxpemF0aW9uLiIgbm9kZSwJCVwKLQkgICAgb3V0LCAmb3V0X3N6LCBpbiwgaW5fc3op LCAwLAkJCQlcCi0JICAgICJTaG91bGQgcmV0dXJuIDAgb24gY29ycmVjdCBhcmd1bWVudHMiKTsJ CQlcCi0gICAgICAgIGV4cGVjdF96dV9lcShvdXRfc3osIG91dF9zel9yZWYsICJpbmNvcnJlY3Qg b3V0cHV0IHNpemUiKTsJXAotCWV4cGVjdF9kX25lKG1lbWNtcChvdXQsIG91dF9yZWYsIG91dF9z el9yZWYpLCAwLAkJXAotCSAgICAiT3V0cHV0IGNvbnRlbnQgc2hvdWxkIGJlIGNoYW5nZWQiKTsJ CQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFRFU1RfVVRJTF9CQVRDSF9WQUxJRCBURVNUX1VU SUxfVkFMSUQoImJhdGNoX3F1ZXJ5IikKLQotI2RlZmluZSBURVNUX01BWF9TSVpFICgxIDw8IDIw KQotCi1URVNUX0JFR0lOKHRlc3RfcXVlcnkpIHsKLQlzaXplX3Qgc3o7Ci0JLyoKLQkgKiBTZWxl Y3Qgc29tZSBzaXplcyB0aGF0IGNhbiBzcGFuIGJvdGggc21hbGwgYW5kIGxhcmdlIHNpemVzLCBh bmQgYXJlCi0JICogbnVtZXJpY2FsbHkgdW5yZWxhdGVkIHRvIGFueSBzaXplIGJvdW5kYXJpZXMu Ci0JICovCi0JZm9yIChzeiA9IDc7IHN6IDw9IFRFU1RfTUFYX1NJWkUgJiYgc3ogPD0gU0NfTEFS R0VfTUFYQ0xBU1M7Ci0JICAgIHN6ICs9IChzeiA8PSBTQ19TTUFMTF9NQVhDTEFTUyA/IDEwMDkg OiA5OTk4OSkpIHsKLQkJdm9pZCAqcCA9IG1hbGxvY3goc3osIDApOwotCQl2b2lkICoqaW4gPSAm cDsKLQkJc2l6ZV90IGluX3N6ID0gc2l6ZW9mKGNvbnN0IHZvaWQgKik7Ci0JCXNpemVfdCBvdXRf c3ogPSBzaXplb2Yodm9pZCAqKSArIHNpemVvZihzaXplX3QpICogNTsKLQkJdm9pZCAqb3V0ID0g bWFsbG9jeChvdXRfc3osIDApOwotCQl2b2lkICpvdXRfcmVmID0gbWFsbG9jeChvdXRfc3osIDAp OwotCQlzaXplX3Qgb3V0X3N6X3JlZiA9IG91dF9zejsKLQotCQlhc3NlcnRfcHRyX25vdF9udWxs KHAsCi0JCSAgICAidGVzdCBwb2ludGVyIGFsbG9jYXRpb24gZmFpbGVkIik7Ci0JCWFzc2VydF9w dHJfbm90X251bGwob3V0LAotCQkgICAgInRlc3Qgb3V0cHV0IGFsbG9jYXRpb24gZmFpbGVkIik7 Ci0JCWFzc2VydF9wdHJfbm90X251bGwob3V0X3JlZiwKLQkJICAgICJ0ZXN0IHJlZmVyZW5jZSBv dXRwdXQgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLQotI2RlZmluZSBTTEFCQ1VSX1JFQUQob3V0KSAo Kih2b2lkICoqKW91dCkKLSNkZWZpbmUgQ09VTlRTKG91dCkgKChzaXplX3QgKikoKHZvaWQgKiop b3V0ICsgMSkpCi0jZGVmaW5lIE5GUkVFX1JFQUQob3V0KSBDT1VOVFMob3V0KVswXQotI2RlZmlu ZSBOUkVHU19SRUFEKG91dCkgQ09VTlRTKG91dClbMV0KLSNkZWZpbmUgU0laRV9SRUFEKG91dCkg Q09VTlRTKG91dClbMl0KLSNkZWZpbmUgQklOX05GUkVFX1JFQUQob3V0KSBDT1VOVFMob3V0KVsz XQotI2RlZmluZSBCSU5fTlJFR1NfUkVBRChvdXQpIENPVU5UUyhvdXQpWzRdCi0KLQkJU0xBQkNV Ul9SRUFEKG91dCkgPSBOVUxMOwotCQlORlJFRV9SRUFEKG91dCkgPSBOUkVHU19SRUFEKG91dCkg PSBTSVpFX1JFQUQob3V0KSA9IC0xOwotCQlCSU5fTkZSRUVfUkVBRChvdXQpID0gQklOX05SRUdT X1JFQUQob3V0KSA9IC0xOwotCQltZW1jcHkob3V0X3JlZiwgb3V0LCBvdXRfc3opOwotCi0JCS8q IFRlc3QgaW52YWxpZCBhcmd1bWVudChzKSBlcnJvcnMgKi8KLQkJVEVTVF9VVElMX1FVRVJZX0VJ TlZBTChOVUxMLCAmb3V0X3N6LCBpbiwgaW5fc3osCi0JCSAgICAib2xkIGlzIE5VTEwiKTsKLQkJ VEVTVF9VVElMX1FVRVJZX0VJTlZBTChvdXQsIE5VTEwsIGluLCBpbl9zeiwKLQkJICAgICJvbGRs ZW5wIGlzIE5VTEwiKTsKLQkJVEVTVF9VVElMX1FVRVJZX0VJTlZBTChvdXQsICZvdXRfc3osIE5V TEwsIGluX3N6LAotCQkgICAgIm5ld3AgaXMgTlVMTCIpOwotCQlURVNUX1VUSUxfUVVFUllfRUlO VkFMKG91dCwgJm91dF9zeiwgaW4sIDAsCi0JCSAgICAibmV3bGVuIGlzIHplcm8iKTsKLQkJaW5f c3ogLT0gMTsKLQkJVEVTVF9VVElMX1FVRVJZX0VJTlZBTChvdXQsICZvdXRfc3osIGluLCBpbl9z eiwKLQkJICAgICJpbnZhbGlkIG5ld2xlbiIpOwotCQlpbl9zeiArPSAxOwotCQlvdXRfc3pfcmVm ID0gb3V0X3N6IC09IDIgKiBzaXplb2Yoc2l6ZV90KTsKLQkJVEVTVF9VVElMX1FVRVJZX0VJTlZB TChvdXQsICZvdXRfc3osIGluLCBpbl9zeiwKLQkJICAgICJpbnZhbGlkICpvbGRsZW5wIik7Ci0J CW91dF9zel9yZWYgPSBvdXRfc3ogKz0gMiAqIHNpemVvZihzaXplX3QpOwotCi0JCS8qIEV4YW1p bmUgb3V0cHV0IGZvciB2YWxpZCBjYWxsICovCi0JCVRFU1RfVVRJTF9WQUxJRCgicXVlcnkiKTsK LQkJZXhwZWN0X3p1X2xlKHN6LCBTSVpFX1JFQUQob3V0KSwKLQkJICAgICJFeHRlbnQgc2l6ZSBz aG91bGQgYmUgYXQgbGVhc3QgYWxsb2NhdGlvbiBzaXplIik7Ci0JCWV4cGVjdF96dV9lcShTSVpF X1JFQUQob3V0KSAmIChQQUdFIC0gMSksIDAsCi0JCSAgICAiRXh0ZW50IHNpemUgc2hvdWxkIGJl IGEgbXVsdGlwbGUgb2YgcGFnZSBzaXplIik7Ci0KLQkJLyoKLQkJICogV2UgZG9uJ3QgZG8gbXVj aCBiaW4gY2hlY2tpbmcgaWYgcHJvZiBpcyBvbiwgc2luY2UgcHJvZmlsaW5nCi0JCSAqIGNhbiBw cm9kdWNlIGV4dGVudHMgdGhhdCBhcmUgZm9yIHNtYWxsIHNpemUgY2xhc3NlcyBidXQgbm90Ci0J CSAqIHNsYWJzLCB3aGljaCBpbnRlcmZlcmVzIHdpdGggdGhpbmdzIGxpa2UgcmVnaW9uIGNvdW50 cy4KLQkJICovCi0JCWlmICghb3B0X3Byb2YgJiYgc3ogPD0gU0NfU01BTExfTUFYQ0xBU1MpIHsK LQkJCWV4cGVjdF96dV9sZShORlJFRV9SRUFEKG91dCksIE5SRUdTX1JFQUQob3V0KSwKLQkJCSAg ICAiRXh0ZW50IGZyZWUgY291bnQgZXhjZWVkZWQgcmVnaW9uIGNvdW50Iik7Ci0JCQlleHBlY3Rf enVfbGUoTlJFR1NfUkVBRChvdXQpLCBTSVpFX1JFQUQob3V0KSwKLQkJCSAgICAiRXh0ZW50IHJl Z2lvbiBjb3VudCBleGNlZWRlZCBzaXplIik7Ci0JCQlleHBlY3RfenVfbmUoTlJFR1NfUkVBRChv dXQpLCAwLAotCQkJICAgICJFeHRlbnQgcmVnaW9uIGNvdW50IG11c3QgYmUgcG9zaXRpdmUiKTsK LQkJCWV4cGVjdF90cnVlKE5GUkVFX1JFQUQob3V0KSA9PSAwIHx8IChTTEFCQ1VSX1JFQUQob3V0 KQotCQkJICAgICE9IE5VTEwgJiYgU0xBQkNVUl9SRUFEKG91dCkgPD0gcCksCi0JCQkgICAgIkFs bG9jYXRpb24gc2hvdWxkIGZvbGxvdyBmaXJzdCBmaXQgcHJpbmNpcGxlIik7Ci0KLQkJCWlmIChj b25maWdfc3RhdHMpIHsKLQkJCQlleHBlY3RfenVfbGUoQklOX05GUkVFX1JFQUQob3V0KSwKLQkJ CQkgICAgQklOX05SRUdTX1JFQUQob3V0KSwKLQkJCQkgICAgIkJpbiBmcmVlIGNvdW50IGV4Y2Vl ZGVkIHJlZ2lvbiBjb3VudCIpOwotCQkJCWV4cGVjdF96dV9uZShCSU5fTlJFR1NfUkVBRChvdXQp LCAwLAotCQkJCSAgICAiQmluIHJlZ2lvbiBjb3VudCBtdXN0IGJlIHBvc2l0aXZlIik7Ci0JCQkJ ZXhwZWN0X3p1X2xlKE5GUkVFX1JFQUQob3V0KSwKLQkJCQkgICAgQklOX05GUkVFX1JFQUQob3V0 KSwKLQkJCQkgICAgIkV4dGVudCBmcmVlIGNvdW50IGV4Y2VlZGVkIGJpbiBmcmVlIGNvdW50Iik7 Ci0JCQkJZXhwZWN0X3p1X2xlKE5SRUdTX1JFQUQob3V0KSwKLQkJCQkgICAgQklOX05SRUdTX1JF QUQob3V0KSwKLQkJCQkgICAgIkV4dGVudCByZWdpb24gY291bnQgZXhjZWVkZWQgIgotCQkJCSAg ICAiYmluIHJlZ2lvbiBjb3VudCIpOwotCQkJCWV4cGVjdF96dV9lcShCSU5fTlJFR1NfUkVBRChv dXQpCi0JCQkJICAgICUgTlJFR1NfUkVBRChvdXQpLCAwLAotCQkJCSAgICAiQmluIHJlZ2lvbiBj b3VudCBpc24ndCBhIG11bHRpcGxlIG9mICIKLQkJCQkgICAgImV4dGVudCByZWdpb24gY291bnQi KTsKLQkJCQlleHBlY3RfenVfbGUoCi0JCQkJICAgIEJJTl9ORlJFRV9SRUFEKG91dCkgLSBORlJF RV9SRUFEKG91dCksCi0JCQkJICAgIEJJTl9OUkVHU19SRUFEKG91dCkgLSBOUkVHU19SRUFEKG91 dCksCi0JCQkJICAgICJGcmVlIGNvdW50IGluIG90aGVyIGV4dGVudHMgaW4gdGhlIGJpbiAiCi0J CQkJICAgICJleGNlZWRlZCByZWdpb24gY291bnQgaW4gb3RoZXIgZXh0ZW50cyAiCi0JCQkJICAg ICJpbiB0aGUgYmluIik7Ci0JCQkJZXhwZWN0X3p1X2xlKE5SRUdTX1JFQUQob3V0KSAtIE5GUkVF X1JFQUQob3V0KSwKLQkJCQkgICAgQklOX05SRUdTX1JFQUQob3V0KSAtIEJJTl9ORlJFRV9SRUFE KG91dCksCi0JCQkJICAgICJFeHRlbnQgdXRpbGl6ZWQgY291bnQgZXhjZWVkZWQgIgotCQkJCSAg ICAiYmluIHV0aWxpemVkIGNvdW50Iik7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc3ogPiBTQ19TTUFM TF9NQVhDTEFTUykgewotCQkJZXhwZWN0X3p1X2VxKE5GUkVFX1JFQUQob3V0KSwgMCwKLQkJCSAg ICAiRXh0ZW50IGZyZWUgY291bnQgc2hvdWxkIGJlIHplcm8iKTsKLQkJCWV4cGVjdF96dV9lcShO UkVHU19SRUFEKG91dCksIDEsCi0JCQkgICAgIkV4dGVudCByZWdpb24gY291bnQgc2hvdWxkIGJl IG9uZSIpOwotCQkJZXhwZWN0X3B0cl9udWxsKFNMQUJDVVJfUkVBRChvdXQpLAotCQkJICAgICJD dXJyZW50IHNsYWIgbXVzdCBiZSBudWxsIGZvciBsYXJnZSBzaXplIGNsYXNzZXMiKTsKLQkJCWlm IChjb25maWdfc3RhdHMpIHsKLQkJCQlleHBlY3RfenVfZXEoQklOX05GUkVFX1JFQUQob3V0KSwg MCwKLQkJCQkgICAgIkJpbiBmcmVlIGNvdW50IG11c3QgYmUgemVybyBmb3IgIgotCQkJCSAgICAi bGFyZ2Ugc2l6ZXMiKTsKLQkJCQlleHBlY3RfenVfZXEoQklOX05SRUdTX1JFQUQob3V0KSwgMCwK LQkJCQkgICAgIkJpbiByZWdpb24gY291bnQgbXVzdCBiZSB6ZXJvIGZvciAiCi0JCQkJICAgICJs YXJnZSBzaXplcyIpOwotCQkJfQotCQl9Ci0KLSN1bmRlZiBCSU5fTlJFR1NfUkVBRAotI3VuZGVm IEJJTl9ORlJFRV9SRUFECi0jdW5kZWYgU0laRV9SRUFECi0jdW5kZWYgTlJFR1NfUkVBRAotI3Vu ZGVmIE5GUkVFX1JFQUQKLSN1bmRlZiBDT1VOVFMKLSN1bmRlZiBTTEFCQ1VSX1JFQUQKLQotCQlm cmVlKG91dF9yZWYpOwotCQlmcmVlKG91dCk7Ci0JCWZyZWUocCk7Ci0JfQotfQotVEVTVF9FTkQK LQotVEVTVF9CRUdJTih0ZXN0X2JhdGNoKSB7Ci0Jc2l6ZV90IHN6OwotCS8qCi0JICogU2VsZWN0 IHNvbWUgc2l6ZXMgdGhhdCBjYW4gc3BhbiBib3RoIHNtYWxsIGFuZCBsYXJnZSBzaXplcywgYW5k IGFyZQotCSAqIG51bWVyaWNhbGx5IHVucmVsYXRlZCB0byBhbnkgc2l6ZSBib3VuZGFyaWVzLgot CSAqLwotCWZvciAoc3ogPSAxNzsgc3ogPD0gVEVTVF9NQVhfU0laRSAmJiBzeiA8PSBTQ19MQVJH RV9NQVhDTEFTUzsKLQkgICAgc3ogKz0gKHN6IDw9IFNDX1NNQUxMX01BWENMQVNTID8gMTAxOSA6 IDk5OTkxKSkgewotCQl2b2lkICpwID0gbWFsbG9jeChzeiwgMCk7Ci0JCXZvaWQgKnEgPSBtYWxs b2N4KHN6LCAwKTsKLQkJdm9pZCAqaW5bXSA9IHtwLCBxfTsKLQkJc2l6ZV90IGluX3N6ID0gc2l6 ZW9mKGNvbnN0IHZvaWQgKikgKiAyOwotCQlzaXplX3Qgb3V0W10gPSB7LTEsIC0xLCAtMSwgLTEs IC0xLCAtMX07Ci0JCXNpemVfdCBvdXRfc3ogPSBzaXplb2Yoc2l6ZV90KSAqIDY7Ci0JCXNpemVf dCBvdXRfcmVmW10gPSB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07Ci0JCXNpemVfdCBvdXRfc3pf cmVmID0gb3V0X3N6OwotCi0JCWFzc2VydF9wdHJfbm90X251bGwocCwgInRlc3QgcG9pbnRlciBh bGxvY2F0aW9uIGZhaWxlZCIpOwotCQlhc3NlcnRfcHRyX25vdF9udWxsKHEsICJ0ZXN0IHBvaW50 ZXIgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLQotCQkvKiBUZXN0IGludmFsaWQgYXJndW1lbnQocykg ZXJyb3JzICovCi0JCVRFU1RfVVRJTF9CQVRDSF9FSU5WQUwoTlVMTCwgJm91dF9zeiwgaW4sIGlu X3N6LAotCQkgICAgIm9sZCBpcyBOVUxMIik7Ci0JCVRFU1RfVVRJTF9CQVRDSF9FSU5WQUwob3V0 LCBOVUxMLCBpbiwgaW5fc3osCi0JCSAgICAib2xkbGVucCBpcyBOVUxMIik7Ci0JCVRFU1RfVVRJ TF9CQVRDSF9FSU5WQUwob3V0LCAmb3V0X3N6LCBOVUxMLCBpbl9zeiwKLQkJICAgICJuZXdwIGlz IE5VTEwiKTsKLQkJVEVTVF9VVElMX0JBVENIX0VJTlZBTChvdXQsICZvdXRfc3osIGluLCAwLAot CQkgICAgIm5ld2xlbiBpcyB6ZXJvIik7Ci0JCWluX3N6IC09IDE7Ci0JCVRFU1RfVVRJTF9CQVRD SF9FSU5WQUwob3V0LCAmb3V0X3N6LCBpbiwgaW5fc3osCi0JCSAgICAibmV3bGVuIGlzIG5vdCBh biBleGFjdCBtdWx0aXBsZSIpOwotCQlpbl9zeiArPSAxOwotCQlvdXRfc3pfcmVmID0gb3V0X3N6 IC09IDIgKiBzaXplb2Yoc2l6ZV90KTsKLQkJVEVTVF9VVElMX0JBVENIX0VJTlZBTChvdXQsICZv dXRfc3osIGluLCBpbl9zeiwKLQkJICAgICIqb2xkbGVucCBpcyBub3QgYW4gZXhhY3QgbXVsdGlw bGUiKTsKLQkJb3V0X3N6X3JlZiA9IG91dF9zeiArPSAyICogc2l6ZW9mKHNpemVfdCk7Ci0JCWlu X3N6IC09IHNpemVvZihjb25zdCB2b2lkICopOwotCQlURVNUX1VUSUxfQkFUQ0hfRUlOVkFMKG91 dCwgJm91dF9zeiwgaW4sIGluX3N6LAotCQkgICAgIipvbGRsZW5wIGFuZCBuZXdsZW4gZG8gbm90 IG1hdGNoIik7Ci0JCWluX3N6ICs9IHNpemVvZihjb25zdCB2b2lkICopOwotCi0JLyogRXhhbWlu ZSBvdXRwdXQgZm9yIHZhbGlkIGNhbGxzICovCi0jZGVmaW5lIFRFU1RfRVFVQUxfUkVGKGksIG1l c3NhZ2UpIFwKLQlhc3NlcnRfZF9lcShtZW1jbXAob3V0ICsgKGkpICogMywgb3V0X3JlZiArIChp KSAqIDMsIDMpLCAwLCBtZXNzYWdlKQotCi0jZGVmaW5lIE5GUkVFX1JFQUQob3V0LCBpKSBvdXRb KGkpICogM10KLSNkZWZpbmUgTlJFR1NfUkVBRChvdXQsIGkpIG91dFsoaSkgKiAzICsgMV0KLSNk ZWZpbmUgU0laRV9SRUFEKG91dCwgaSkgb3V0WyhpKSAqIDMgKyAyXQotCi0JCW91dF9zel9yZWYg PSBvdXRfc3ogLz0gMjsKLQkJaW5fc3ogLz0gMjsKLQkJVEVTVF9VVElMX0JBVENIX1ZBTElEOwot CQlleHBlY3RfenVfbGUoc3osIFNJWkVfUkVBRChvdXQsIDApLAotCQkgICAgIkV4dGVudCBzaXpl IHNob3VsZCBiZSBhdCBsZWFzdCBhbGxvY2F0aW9uIHNpemUiKTsKLQkJZXhwZWN0X3p1X2VxKFNJ WkVfUkVBRChvdXQsIDApICYgKFBBR0UgLSAxKSwgMCwKLQkJICAgICJFeHRlbnQgc2l6ZSBzaG91 bGQgYmUgYSBtdWx0aXBsZSBvZiBwYWdlIHNpemUiKTsKLQkJLyoKLQkJICogU2VlIHRoZSBjb3Jy ZXNwb25kaW5nIGNvbW1lbnQgaW4gdGVzdF9xdWVyeTsgcHJvZmlsaW5nIGJyZWFrcwotCQkgKiBv dXIgc2xhYiBjb3VudCBleHBlY3RhdGlvbnMuCi0JCSAqLwotCQlpZiAoc3ogPD0gU0NfU01BTExf TUFYQ0xBU1MgJiYgIW9wdF9wcm9mKSB7Ci0JCQlleHBlY3RfenVfbGUoTkZSRUVfUkVBRChvdXQs IDApLCBOUkVHU19SRUFEKG91dCwgMCksCi0JCQkgICAgIkV4dGVudCBmcmVlIGNvdW50IGV4Y2Vl ZGVkIHJlZ2lvbiBjb3VudCIpOwotCQkJZXhwZWN0X3p1X2xlKE5SRUdTX1JFQUQob3V0LCAwKSwg U0laRV9SRUFEKG91dCwgMCksCi0JCQkgICAgIkV4dGVudCByZWdpb24gY291bnQgZXhjZWVkZWQg c2l6ZSIpOwotCQkJZXhwZWN0X3p1X25lKE5SRUdTX1JFQUQob3V0LCAwKSwgMCwKLQkJCSAgICAi RXh0ZW50IHJlZ2lvbiBjb3VudCBtdXN0IGJlIHBvc2l0aXZlIik7Ci0JCX0gZWxzZSBpZiAoc3og PiBTQ19TTUFMTF9NQVhDTEFTUykgewotCQkJZXhwZWN0X3p1X2VxKE5GUkVFX1JFQUQob3V0LCAw KSwgMCwKLQkJCSAgICAiRXh0ZW50IGZyZWUgY291bnQgc2hvdWxkIGJlIHplcm8iKTsKLQkJCWV4 cGVjdF96dV9lcShOUkVHU19SRUFEKG91dCwgMCksIDEsCi0JCQkgICAgIkV4dGVudCByZWdpb24g Y291bnQgc2hvdWxkIGJlIG9uZSIpOwotCQl9Ci0JCVRFU1RfRVFVQUxfUkVGKDEsCi0JCSAgICAi U2hvdWxkIG5vdCBvdmVyd3JpdGUgY29udGVudCBiZXlvbmQgd2hhdCdzIG5lZWRlZCIpOwotCQlp bl9zeiAqPSAyOwotCQlvdXRfc3pfcmVmID0gb3V0X3N6ICo9IDI7Ci0KLQkJbWVtY3B5KG91dF9y ZWYsIG91dCwgMyAqIHNpemVvZihzaXplX3QpKTsKLQkJVEVTVF9VVElMX0JBVENIX1ZBTElEOwot CQlURVNUX0VRVUFMX1JFRigwLCAiU3RhdGlzdGljcyBzaG91bGQgYmUgc3RhYmxlIGFjcm9zcyBj YWxscyIpOwotCQlpZiAoc3ogPD0gU0NfU01BTExfTUFYQ0xBU1MpIHsKLQkJCWV4cGVjdF96dV9s ZShORlJFRV9SRUFEKG91dCwgMSksIE5SRUdTX1JFQUQob3V0LCAxKSwKLQkJCSAgICAiRXh0ZW50 IGZyZWUgY291bnQgZXhjZWVkZWQgcmVnaW9uIGNvdW50Iik7Ci0JCX0gZWxzZSB7Ci0JCQlleHBl Y3RfenVfZXEoTkZSRUVfUkVBRChvdXQsIDApLCAwLAotCQkJICAgICJFeHRlbnQgZnJlZSBjb3Vu dCBzaG91bGQgYmUgemVybyIpOwotCQl9Ci0JCWV4cGVjdF96dV9lcShOUkVHU19SRUFEKG91dCwg MCksIE5SRUdTX1JFQUQob3V0LCAxKSwKLQkJICAgICJFeHRlbnQgcmVnaW9uIGNvdW50IHNob3Vs ZCBiZSBzYW1lIGZvciBzYW1lIHJlZ2lvbiBzaXplIik7Ci0JCWV4cGVjdF96dV9lcShTSVpFX1JF QUQob3V0LCAwKSwgU0laRV9SRUFEKG91dCwgMSksCi0JCSAgICAiRXh0ZW50IHNpemUgc2hvdWxk IGJlIHNhbWUgZm9yIHNhbWUgcmVnaW9uIHNpemUiKTsKLQotI3VuZGVmIFNJWkVfUkVBRAotI3Vu ZGVmIE5SRUdTX1JFQUQKLSN1bmRlZiBORlJFRV9SRUFECi0KLSN1bmRlZiBURVNUX0VRVUFMX1JF RgotCi0JCWZyZWUocSk7Ci0JCWZyZWUocCk7Ci0JfQotfQotVEVTVF9FTkQKLQotaW50Ci1tYWlu KHZvaWQpIHsKLQlhc3NlcnRfenVfbHQoU0NfU01BTExfTUFYQ0xBU1MgKyAxMDAwMDAsIFRFU1Rf TUFYX1NJWkUsCi0JICAgICJUZXN0IGNhc2UgY2Fubm90IGNvdmVyIGxhcmdlIGNsYXNzZXMiKTsK LQlyZXR1cm4gdGVzdCh0ZXN0X3F1ZXJ5LCB0ZXN0X2JhdGNoKTsKLX0KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvaW5zcGVjdC5z aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9pbnNw ZWN0LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTJkMTEwLi4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9pbnNw ZWN0LnNoCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIS9iaW4vc2gKLQotaWYgWyAi eCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KLSAgZXhwb3J0IE1BTExPQ19DT05GPSJw cm9mOmZhbHNlIgotZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvanVuay5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L2p1bmsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggNTQzMDkyZi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvanVuay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAK LSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2RlZmluZSBhcnJheWxlbihhcnIp IChzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKSkKLXN0YXRpYyBzaXplX3QgcHRyX2luZDsKLXN0 YXRpYyB2b2lkICp2b2xhdGlsZSBwdHJzWzEwMF07Ci1zdGF0aWMgdm9pZCAqbGFzdF9qdW5rZWRf cHRyOwotc3RhdGljIHNpemVfdCBsYXN0X2p1bmtlZF91c2l6ZTsKLQotc3RhdGljIHZvaWQKLXJl c2V0KCkgewotCXB0cl9pbmQgPSAwOwotCWxhc3RfanVua2VkX3B0ciA9IE5VTEw7Ci0JbGFzdF9q dW5rZWRfdXNpemUgPSAwOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9qdW5rKHZvaWQgKnB0ciwg c2l6ZV90IHVzaXplKSB7Ci0JbGFzdF9qdW5rZWRfcHRyID0gcHRyOwotCWxhc3RfanVua2VkX3Vz aXplID0gdXNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19hbGxvY3Moc2l6ZV90IHNpemUsIGJv b2wgemVybywgc2l6ZV90IGxnX2FsaWduKSB7Ci0jZGVmaW5lIEpVTktfQUxMT0MoLi4uKQkJCQkJ CQlcCi0JZG8gewkJCQkJCQkJXAotCQlhc3NlcnQocHRyX2luZCArIDEgPCBhcnJheWxlbihwdHJz KSk7CQkJXAotCQl2b2lkICpwdHIgPSBfX1ZBX0FSR1NfXzsJCQkJXAotCQlhc3NlcnRfcHRyX25v dF9udWxsKHB0ciwgIiIpOwkJCQlcCi0JCXB0cnNbcHRyX2luZCsrXSA9IHB0cjsJCQkJCVwKLQkJ aWYgKG9wdF9qdW5rX2FsbG9jICYmICF6ZXJvKSB7CQkJCVwKLQkJCWV4cGVjdF9wdHJfZXEocHRy LCBsYXN0X2p1bmtlZF9wdHIsICIiKTsJXAotCQkJZXhwZWN0X3p1X2VxKGxhc3RfanVua2VkX3Vz aXplLAkJCVwKLQkJCSAgICBURVNUX01BTExPQ19TSVpFKHB0ciksICIiKTsJCQlcCi0JCX0JCQkJ CQkJXAotCX0gd2hpbGUgKDApCi0JaWYgKCF6ZXJvICYmIGxnX2FsaWduID09IDApIHsKLQkJSlVO S19BTExPQyhtYWxsb2Moc2l6ZSkpOwotCX0KLQlpZiAoIXplcm8pIHsKLQkJSlVOS19BTExPQyhh bGlnbmVkX2FsbG9jKDEgPDwgbGdfYWxpZ24sIHNpemUpKTsKLQl9Ci0jaWZkZWYgSkVNQUxMT0Nf T1ZFUlJJREVfTUVNQUxJR04KLQlpZiAoIXplcm8pIHsKLQkJSlVOS19BTExPQyhqZV9tZW1hbGln bigxIDw8IGxnX2FsaWduLCBzaXplKSk7Ci0JfQotI2VuZGlmCi0jaWZkZWYgSkVNQUxMT0NfT1ZF UlJJREVfVkFMTE9DCi0JaWYgKCF6ZXJvICYmIGxnX2FsaWduID09IExHX1BBR0UpIHsKLQkJSlVO S19BTExPQyhqZV92YWxsb2Moc2l6ZSkpOwotCX0KLSNlbmRpZgotCWludCB6ZXJvX2ZsYWcgPSB6 ZXJvID8gTUFMTE9DWF9aRVJPIDogMDsKLQlKVU5LX0FMTE9DKG1hbGxvY3goc2l6ZSwgemVyb19m bGFnIHwgTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbikpKTsKLQlKVU5LX0FMTE9DKG1hbGxvY3go c2l6ZSwgemVyb19mbGFnIHwgTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbikKLQkgICAgfCBNQUxM T0NYX1RDQUNIRV9OT05FKSk7Ci0JaWYgKGxnX2FsaWduID49IExHX1NJWkVPRl9QVFIpIHsKLQkJ dm9pZCAqbWVtYWxpZ25fcmVzdWx0OwotCQlpbnQgZXJyID0gcG9zaXhfbWVtYWxpZ24oJm1lbWFs aWduX3Jlc3VsdCwgKDEgPDwgbGdfYWxpZ24pLAotCQkgICAgc2l6ZSk7Ci0JCWFzc2VydF9kX2Vx KGVyciwgMCwgIiIpOwotCQlKVU5LX0FMTE9DKG1lbWFsaWduX3Jlc3VsdCk7Ci0JfQotfQotCi1U RVNUX0JFR0lOKHRlc3RfanVua19hbGxvY19mcmVlKSB7Ci0JYm9vbCB6ZXJvdmFsc1tdID0ge2Zh bHNlLCB0cnVlfTsKLQlzaXplX3Qgc2l6ZXZhbHNbXSA9IHsKLQkJMSwgOCwgMTAwLCAxMDAwLCAx MDAqMTAwMAotCS8qCi0JICogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpcyBhIHJlYWwgcG9z c2liaWxpdHkgaW4gMzItYml0IG1vZGUuCi0JICogUmF0aGVyIHRoYW4gdHJ5IHRvIGNoZWNrIGlu IHRoZSBmYWNlIG9mIHJlc291cmNlIGV4aGF1c3Rpb24sIHdlIGp1c3QKLQkgKiByZWx5IG1vcmUg b24gdGhlIDY0LWJpdCB0ZXN0cy4gIFRoaXMgaXMgYSBsaXR0bGUgYml0IHdoaXRlLWJveC15IGlu Ci0JICogdGhlIHNlbnNlIHRoYXQgdGhpcyBpcyBvbmx5IGEgZ29vZCB0ZXN0IHN0cmF0ZWd5IGlm IHdlIGtub3cgdGhhdCB0aGUKLQkgKiBqdW5rIHBhdGh3YXlzIGRvbid0IHRvdWNoIGludGVyYWN0 IHdpdGggdGhlIGFsbG9jYXRpb24gc2VsZWN0aW9uCi0JICogbWVjaGFuaXNtczsgYnV0IHRoaXMg aXMgaW4gZmFjdCB0aGUgY2FzZS4KLQkgKi8KLSNpZiBMR19TSVpFT0ZfUFRSID09IDMKLQkJICAg ICwgMTAgKiAxMDAwICogMTAwMAotI2VuZGlmCi0JfTsKLQlzaXplX3QgbGdfYWxpZ252YWxzW10g PSB7Ci0JCTAsIDQsIDEwLCAxNSwgMTYsIExHX1BBR0UKLSNpZiBMR19TSVpFT0ZfUFRSID09IDMK LQkJICAgICwgMjAsIDI0Ci0jZW5kaWYKLQl9OwotCi0jZGVmaW5lIEpVTktfRlJFRSguLi4pCQkJ CQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWRvX2FsbG9jcyhzaXplLCB6ZXJvLCBsZ19hbGlnbik7 CQkJXAotCQlmb3IgKHNpemVfdCBuID0gMDsgbiA8IHB0cl9pbmQ7IG4rKykgewkJCVwKLQkJCXZv aWQgKnB0ciA9IHB0cnNbbl07CQkJCVwKLQkJCV9fVkFfQVJHU19fOwkJCQkJXAotCQkJaWYgKG9w dF9qdW5rX2ZyZWUpIHsJCQkJXAotCQkJCWFzc2VydF9wdHJfZXEocHRyLCBsYXN0X2p1bmtlZF9w dHIsCVwKLQkJCQkgICAgIiIpOwkJCQlcCi0JCQkJYXNzZXJ0X3p1X2VxKHVzaXplLCBsYXN0X2p1 bmtlZF91c2l6ZSwJXAotCQkJCSAgICAiIik7CQkJCVwKLQkJCX0JCQkJCQlcCi0JCQlyZXNldCgp OwkJCQkJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotCWZvciAoc2l6ZV90IGkgPSAwOyBp IDwgYXJyYXlsZW4oemVyb3ZhbHMpOyBpKyspIHsKLQkJZm9yIChzaXplX3QgaiA9IDA7IGogPCBh cnJheWxlbihzaXpldmFscyk7IGorKykgewotCQkJZm9yIChzaXplX3QgayA9IDA7IGsgPCBhcnJh eWxlbihsZ19hbGlnbnZhbHMpOyBrKyspIHsKLQkJCQlib29sIHplcm8gPSB6ZXJvdmFsc1tpXTsK LQkJCQlzaXplX3Qgc2l6ZSA9IHNpemV2YWxzW2pdOwotCQkJCXNpemVfdCBsZ19hbGlnbiA9IGxn X2FsaWdudmFsc1trXTsKLQkJCQlzaXplX3QgdXNpemUgPSBuYWxsb2N4KHNpemUsCi0JCQkJICAg IE1BTExPQ1hfTEdfQUxJR04obGdfYWxpZ24pKTsKLQotCQkJCUpVTktfRlJFRShmcmVlKHB0cikp OwotCQkJCUpVTktfRlJFRShkYWxsb2N4KHB0ciwgMCkpOwotCQkJCUpVTktfRlJFRShkYWxsb2N4 KHB0ciwgTUFMTE9DWF9UQ0FDSEVfTk9ORSkpOwotCQkJCUpVTktfRlJFRShkYWxsb2N4KHB0ciwg TUFMTE9DWF9MR19BTElHTigKLQkJCQkgICAgbGdfYWxpZ24pKSk7Ci0JCQkJSlVOS19GUkVFKHNk YWxsb2N4KHB0ciwgdXNpemUsIE1BTExPQ1hfTEdfQUxJR04oCi0JCQkJICAgIGxnX2FsaWduKSkp OwotCQkJCUpVTktfRlJFRShzZGFsbG9jeChwdHIsIHVzaXplLAotCQkJCSAgICBNQUxMT0NYX1RD QUNIRV9OT05FIHwgTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbikpKTsKLQkJCQlpZiAob3B0X3pl cm9fcmVhbGxvY19hY3Rpb24KLQkJCQkgICAgPT0gemVyb19yZWFsbG9jX2FjdGlvbl9mcmVlKSB7 Ci0JCQkJCUpVTktfRlJFRShyZWFsbG9jKHB0ciwgMCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0K LX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9yZWFsbG9jX2V4cGFuZCkgewotCWNoYXIg KnZvbGF0aWxlIHB0cjsKLQljaGFyICp2b2xhdGlsZSBleHBhbmRlZDsKLQotCXRlc3Rfc2tpcF9p Zighb3B0X2p1bmtfYWxsb2MpOwotCi0JLyogUmVhbGxvYyAqLwotCXB0ciA9IG1hbGxvYyhTQ19T TUFMTF9NQVhDTEFTUyk7Ci0JZXhwYW5kZWQgPSByZWFsbG9jKHB0ciwgU0NfTEFSR0VfTUlOQ0xB U1MpOwotCWV4cGVjdF9wdHJfZXEobGFzdF9qdW5rZWRfcHRyLCAmZXhwYW5kZWRbU0NfU01BTExf TUFYQ0xBU1NdLCAiIik7Ci0JZXhwZWN0X3p1X2VxKGxhc3RfanVua2VkX3VzaXplLAotCSAgICBT Q19MQVJHRV9NSU5DTEFTUyAtIFNDX1NNQUxMX01BWENMQVNTLCAiIik7Ci0JZnJlZShleHBhbmRl ZCk7Ci0KLQkvKiByYWxsb2N4KC4uLiwgMCkgKi8KLQlwdHIgPSBtYWxsb2MoU0NfU01BTExfTUFY Q0xBU1MpOwotCWV4cGFuZGVkID0gcmFsbG9jeChwdHIsIFNDX0xBUkdFX01JTkNMQVNTLCAwKTsK LQlleHBlY3RfcHRyX2VxKGxhc3RfanVua2VkX3B0ciwgJmV4cGFuZGVkW1NDX1NNQUxMX01BWENM QVNTXSwgIiIpOwotCWV4cGVjdF96dV9lcShsYXN0X2p1bmtlZF91c2l6ZSwKLQkgICAgU0NfTEFS R0VfTUlOQ0xBU1MgLSBTQ19TTUFMTF9NQVhDTEFTUywgIiIpOwotCWZyZWUoZXhwYW5kZWQpOwot Ci0JLyogcmFsbG9jeCguLi4sIG5vbnplcm8pICovCi0JcHRyID0gbWFsbG9jKFNDX1NNQUxMX01B WENMQVNTKTsKLQlleHBhbmRlZCA9IHJhbGxvY3gocHRyLCBTQ19MQVJHRV9NSU5DTEFTUywgTUFM TE9DWF9UQ0FDSEVfTk9ORSk7Ci0JZXhwZWN0X3B0cl9lcShsYXN0X2p1bmtlZF9wdHIsICZleHBh bmRlZFtTQ19TTUFMTF9NQVhDTEFTU10sICIiKTsKLQlleHBlY3RfenVfZXEobGFzdF9qdW5rZWRf dXNpemUsCi0JICAgIFNDX0xBUkdFX01JTkNMQVNTIC0gU0NfU01BTExfTUFYQ0xBU1MsICIiKTsK LQlmcmVlKGV4cGFuZGVkKTsKLQotCS8qIHJhbGxvY3goLi4uLCBNQUxMT0NYX1pFUk8pICovCi0J cHRyID0gbWFsbG9jKFNDX1NNQUxMX01BWENMQVNTKTsKLQlsYXN0X2p1bmtlZF9wdHIgPSAodm9p ZCAqKS0xOwotCWxhc3RfanVua2VkX3VzaXplID0gKHNpemVfdCktMTsKLQlleHBhbmRlZCA9IHJh bGxvY3gocHRyLCBTQ19MQVJHRV9NSU5DTEFTUywgTUFMTE9DWF9aRVJPKTsKLQlleHBlY3RfcHRy X2VxKGxhc3RfanVua2VkX3B0ciwgKHZvaWQgKiktMSwgIiIpOwotCWV4cGVjdF96dV9lcShsYXN0 X2p1bmtlZF91c2l6ZSwgKHNpemVfdCktMSwgIiIpOwotCWZyZWUoZXhwYW5kZWQpOwotCi0JLyoK LQkgKiBVbmZvcnR1bmF0ZWx5LCB0ZXN0aW5nIHhhbGxvY3ggcmVsaWFibHkgaXMgZGlmZmljdWx0 IHRvIGRvIHBvcnRhYmx5Ci0JICogKHNpbmNlIGFsbG9jYXRpb25zIGNhbiBiZSBleHBhbmRlZCAv IG5vdCBleHBhbmRlZCBkaWZmZXJlbnRseSBvbgotCSAqIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBX ZSByZWx5IG9uIG1hbnVhbCBpbnNwZWN0aW9uIHRoZXJlIC0tIHRoZQotCSAqIHhhbGxvY3ggcGF0 aHdheSBpcyBlYXN5IHRvIGluc3BlY3QsIHRob3VnaC4KLQkgKgotCSAqIExpa2V3aXNlLCB3ZSBk b24ndCB0ZXN0IHRoZSBzaHJpbmtpbmcgcGF0aHdheXMuICBJdCdzIGRpZmZpY3VsdCB0byBkbwot CSAqIHNvIGNvbnNpc3RlbnRseSAoYmVjYXVzZSBvZiB0aGUgcmlzayBvZiBzcGxpdCBmYWlsdXJl IG9yIG1lbW9yeQotCSAqIGV4aGF1c3Rpb24sIGluIHdoaWNoIGNhc2Ugbm8ganVua2luZyBzaG91 bGQgaGFwcGVuKS4gIFRoaXMgaXMgZmluZQotCSAqIC0tIGp1bmtpbmcgaXMgYSBiZXN0LWVmZm9y dCBkZWJ1ZyBtZWNoYW5pc20gaW4gdGhlIGZpcnN0IHBsYWNlLgotCSAqLwotfQotVEVTVF9FTkQK LQotaW50Ci1tYWluKHZvaWQpIHsKLQlqdW5rX2FsbG9jX2NhbGxiYWNrID0gJnRlc3RfanVuazsK LQlqdW5rX2ZyZWVfY2FsbGJhY2sgPSAmdGVzdF9qdW5rOwotCS8qCi0JICogV2UgY2hlY2sgdGhl IGxhc3QgcG9pbnRlciBqdW5rZWQuICBJZiBhIHJlZW50cmFudCBjYWxsIGhhcHBlbnMsIHRoYXQK LQkgKiBtaWdodCBiZSBhbiBpbnRlcm5hbCBhbGxvY2F0aW9uLgotCSAqLwotCXJldHVybiB0ZXN0 X25vX3JlZW50cmFuY3koCi0JICAgIHRlc3RfanVua19hbGxvY19mcmVlLAotCSAgICB0ZXN0X3Jl YWxsb2NfZXhwYW5kKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVuay5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9qdW5rLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA5N2NkOGNhLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9qdW5rLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCww IEBACi0jIS9iaW4vc2gKLQotaWYgWyAieCR7ZW5hYmxlX2ZpbGx9IiA9ICJ4MSIgXSA7IHRoZW4K LSAgZXhwb3J0IE1BTExPQ19DT05GPSJhYm9ydDpmYWxzZSx6ZXJvOmZhbHNlLGp1bms6dHJ1ZSIK LWZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L2p1bmtfYWxsb2MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9qdW5rX2FsbG9jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGE0NDJhMGMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L2p1bmtfYWxsb2MuYworKysgL2Rldi9udWxsCkBAIC0xICswLDAg QEAKLSNpbmNsdWRlICJqdW5rLmMiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2p1bmtfYWxsb2Muc2ggYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19hbGxvYy5zaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwMDhjMi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19hbGxvYy5zaAorKysg L2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyEvYmluL3NoCi0KLWlmIFsgIngke2VuYWJsZV9m aWxsfSIgPSAieDEiIF0gOyB0aGVuCi0gIGV4cG9ydCBNQUxMT0NfQ09ORj0iYWJvcnQ6ZmFsc2Us emVybzpmYWxzZSxqdW5rOmFsbG9jIgotZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19mcmVlLmMgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19mcmVlLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDJhMGMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2p1bmtfZnJlZS5jCisrKyAv ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgImp1bmsuYyIKCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvanVua19mcmVl LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2p1 bmtfZnJlZS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAyMTk2Yy4uMDAwMDAw MAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv anVua19mcmVlLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIS9iaW4vc2gKLQot aWYgWyAieCR7ZW5hYmxlX2ZpbGx9IiA9ICJ4MSIgXSA7IHRoZW4KLSAgZXhwb3J0IE1BTExPQ19D T05GPSJhYm9ydDpmYWxzZSx6ZXJvOmZhbHNlLGp1bms6ZnJlZSIKLWZpCgpkaWZmIC0tZ2l0IGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2xvZy5jIGIv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L2xvZy5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDliNTg5Li4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9sb2cuYworKysgL2Rl di9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0Lmgi Ci0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9sb2cuaCIKLQotc3RhdGljIHZvaWQKLXVw ZGF0ZV9sb2dfdmFyX25hbWVzKGNvbnN0IGNoYXIgKm5hbWVzKSB7Ci0Jc3RybmNweShsb2dfdmFy X25hbWVzLCBuYW1lcywgc2l6ZW9mKGxvZ192YXJfbmFtZXMpKTsKLX0KLQotc3RhdGljIHZvaWQK LWV4cGVjdF9ub19sb2dnaW5nKGNvbnN0IGNoYXIgKm5hbWVzKSB7Ci0JbG9nX3Zhcl90IGxvZ19s MSA9IExPR19WQVJfSU5JVCgibDEiKTsKLQlsb2dfdmFyX3QgbG9nX2wyID0gTE9HX1ZBUl9JTklU KCJsMiIpOwotCWxvZ192YXJfdCBsb2dfbDJfYSA9IExPR19WQVJfSU5JVCgibDIuYSIpOwotCi0J dXBkYXRlX2xvZ192YXJfbmFtZXMobmFtZXMpOwotCi0JaW50IGNvdW50ID0gMDsKLQotCWZvciAo aW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlsb2dfZG9fYmVnaW4obG9nX2wxKQotCQkJY291 bnQrKzsKLQkJbG9nX2RvX2VuZChsb2dfbDEpCi0KLQkJbG9nX2RvX2JlZ2luKGxvZ19sMikKLQkJ CWNvdW50Kys7Ci0JCWxvZ19kb19lbmQobG9nX2wyKQotCi0JCWxvZ19kb19iZWdpbihsb2dfbDJf YSkKLQkJCWNvdW50Kys7Ci0JCWxvZ19kb19lbmQobG9nX2wyX2EpCi0JfQotCWV4cGVjdF9kX2Vx KGNvdW50LCAwLCAiRGlzYWJsZWQgbG9nZ2luZyBub3QgaWdub3JlZCEiKTsKLX0KLQotVEVTVF9C RUdJTih0ZXN0X2xvZ19kaXNhYmxlZCkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX2xvZyk7Ci0J YXRvbWljX3N0b3JlX2IoJmxvZ19pbml0X2RvbmUsIHRydWUsIEFUT01JQ19SRUxBWEVEKTsKLQll eHBlY3Rfbm9fbG9nZ2luZygiIik7Ci0JZXhwZWN0X25vX2xvZ2dpbmcoImFiYyIpOwotCWV4cGVj dF9ub19sb2dnaW5nKCJhLmIuYyIpOwotCWV4cGVjdF9ub19sb2dnaW5nKCJsMTIiKTsKLQlleHBl Y3Rfbm9fbG9nZ2luZygibDEyM3xhNDU2fGI3ODkiKTsKLQlleHBlY3Rfbm9fbG9nZ2luZygifHx8 Iik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfbG9nX2VuYWJsZWRfZGlyZWN0KSB7 Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfbG9nKTsKLQlhdG9taWNfc3RvcmVfYigmbG9nX2luaXRf ZG9uZSwgdHJ1ZSwgQVRPTUlDX1JFTEFYRUQpOwotCWxvZ192YXJfdCBsb2dfbDEgPSBMT0dfVkFS X0lOSVQoImwxIik7Ci0JbG9nX3Zhcl90IGxvZ19sMV9hID0gTE9HX1ZBUl9JTklUKCJsMS5hIik7 Ci0JbG9nX3Zhcl90IGxvZ19sMiA9IExPR19WQVJfSU5JVCgibDIiKTsKLQotCWludCBjb3VudDsK LQotCWNvdW50ID0gMDsKLQl1cGRhdGVfbG9nX3Zhcl9uYW1lcygibDEiKTsKLQlmb3IgKGludCBp ID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJbG9nX2RvX2JlZ2luKGxvZ19sMSkKLQkJCWNvdW50Kys7 Ci0JCWxvZ19kb19lbmQobG9nX2wxKQotCX0KLQlleHBlY3RfZF9lcShjb3VudCwgMTAsICJNaXMt bG9nZ2VkISIpOwotCi0JY291bnQgPSAwOwotCXVwZGF0ZV9sb2dfdmFyX25hbWVzKCJsMS5hIik7 Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWxvZ19kb19iZWdpbihsb2dfbDFf YSkKLQkJCWNvdW50Kys7Ci0JCWxvZ19kb19lbmQobG9nX2wxX2EpCi0JfQotCWV4cGVjdF9kX2Vx KGNvdW50LCAxMCwgIk1pcy1sb2dnZWQhIik7Ci0KLQljb3VudCA9IDA7Ci0JdXBkYXRlX2xvZ192 YXJfbmFtZXMoImwxLmF8YWJjfGwyfGRlZiIpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkr KykgewotCQlsb2dfZG9fYmVnaW4obG9nX2wxX2EpCi0JCQljb3VudCsrOwotCQlsb2dfZG9fZW5k KGxvZ19sMV9hKQotCi0JCWxvZ19kb19iZWdpbihsb2dfbDIpCi0JCQljb3VudCsrOwotCQlsb2df ZG9fZW5kKGxvZ19sMikKLQl9Ci0JZXhwZWN0X2RfZXEoY291bnQsIDIwLCAiTWlzLWxvZ2dlZCEi KTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9sb2dfZW5hYmxlZF9pbmRpcmVjdCkg ewotCXRlc3Rfc2tpcF9pZighY29uZmlnX2xvZyk7Ci0JYXRvbWljX3N0b3JlX2IoJmxvZ19pbml0 X2RvbmUsIHRydWUsIEFUT01JQ19SRUxBWEVEKTsKLQl1cGRhdGVfbG9nX3Zhcl9uYW1lcygibDB8 bDF8YWJjfGwyLmJ8ZGVmIik7Ci0KLQkvKiBPbi4gKi8KLQlsb2dfdmFyX3QgbG9nX2wxID0gTE9H X1ZBUl9JTklUKCJsMSIpOwotCS8qIE9mZi4gKi8KLQlsb2dfdmFyX3QgbG9nX2wxYSA9IExPR19W QVJfSU5JVCgibDFhIik7Ci0JLyogT24uICovCi0JbG9nX3Zhcl90IGxvZ19sMV9hID0gTE9HX1ZB Ul9JTklUKCJsMS5hIik7Ci0JLyogT2ZmLiAqLwotCWxvZ192YXJfdCBsb2dfbDJfYSA9IExPR19W QVJfSU5JVCgibDIuYSIpOwotCS8qIE9uLiAqLwotCWxvZ192YXJfdCBsb2dfbDJfYl9hID0gTE9H X1ZBUl9JTklUKCJsMi5iLmEiKTsKLQkvKiBPbi4gKi8KLQlsb2dfdmFyX3QgbG9nX2wyX2JfYiA9 IExPR19WQVJfSU5JVCgibDIuYi5iIik7Ci0KLQkvKiA0IGFyZSBvbiB0b3RhbCwgc28gc2hvdWxk IHN1bSB0byA0MC4gKi8KLQlpbnQgY291bnQgPSAwOwotCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7 IGkrKykgewotCQlsb2dfZG9fYmVnaW4obG9nX2wxKQotCQkJY291bnQrKzsKLQkJbG9nX2RvX2Vu ZChsb2dfbDEpCi0KLQkJbG9nX2RvX2JlZ2luKGxvZ19sMWEpCi0JCQljb3VudCsrOwotCQlsb2df ZG9fZW5kKGxvZ19sMWEpCi0KLQkJbG9nX2RvX2JlZ2luKGxvZ19sMV9hKQotCQkJY291bnQrKzsK LQkJbG9nX2RvX2VuZChsb2dfbDFfYSkKLQotCQlsb2dfZG9fYmVnaW4obG9nX2wyX2EpCi0JCQlj b3VudCsrOwotCQlsb2dfZG9fZW5kKGxvZ19sMl9hKQotCi0JCWxvZ19kb19iZWdpbihsb2dfbDJf Yl9hKQotCQkJY291bnQrKzsKLQkJbG9nX2RvX2VuZChsb2dfbDJfYl9hKQotCi0JCWxvZ19kb19i ZWdpbihsb2dfbDJfYl9iKQotCQkJY291bnQrKzsKLQkJbG9nX2RvX2VuZChsb2dfbDJfYl9iKQot CX0KLQotCWV4cGVjdF9kX2VxKGNvdW50LCA0MCwgIk1pcy1sb2dnZWQhIik7Ci19Ci1URVNUX0VO RAotCi1URVNUX0JFR0lOKHRlc3RfbG9nX2VuYWJsZWRfZ2xvYmFsKSB7Ci0JdGVzdF9za2lwX2lm KCFjb25maWdfbG9nKTsKLQlhdG9taWNfc3RvcmVfYigmbG9nX2luaXRfZG9uZSwgdHJ1ZSwgQVRP TUlDX1JFTEFYRUQpOwotCXVwZGF0ZV9sb2dfdmFyX25hbWVzKCJhYmN8LnxkZWYiKTsKLQotCWxv Z192YXJfdCBsb2dfbDEgPSBMT0dfVkFSX0lOSVQoImwxIik7Ci0JbG9nX3Zhcl90IGxvZ19sMl9h X2EgPSBMT0dfVkFSX0lOSVQoImwyLmEuYSIpOwotCi0JaW50IGNvdW50ID0gMDsKLQlmb3IgKGlu dCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJbG9nX2RvX2JlZ2luKGxvZ19sMSkKLQkJICAgIGNv dW50Kys7Ci0JCWxvZ19kb19lbmQobG9nX2wxKQotCi0JCWxvZ19kb19iZWdpbihsb2dfbDJfYV9h KQotCQkgICAgY291bnQrKzsKLQkJbG9nX2RvX2VuZChsb2dfbDJfYV9hKQotCX0KLQlleHBlY3Rf ZF9lcShjb3VudCwgMjAsICJNaXMtbG9nZ2VkISIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJ Tih0ZXN0X2xvZ3NfaWZfbm9faW5pdCkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX2xvZyk7Ci0J YXRvbWljX3N0b3JlX2IoJmxvZ19pbml0X2RvbmUsIGZhbHNlLCBBVE9NSUNfUkVMQVhFRCk7Ci0K LQlsb2dfdmFyX3QgbCA9IExPR19WQVJfSU5JVCgiZGVmaW5pdGVseS5ub3QuZW5hYmxlZCIpOwot Ci0JaW50IGNvdW50ID0gMDsKLQlmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJbG9n X2RvX2JlZ2luKGwpCi0JCQljb3VudCsrOwotCQlsb2dfZG9fZW5kKGwpCi0JfQotCWV4cGVjdF9k X2VxKGNvdW50LCAwLCAiTG9nZ2luZyBzaG91bGRuJ3QgaGFwcGVuIGlmIG5vdCBpbml0aWFsaXpl ZC4iKTsKLX0KLVRFU1RfRU5ECi0KLS8qCi0gKiBUaGlzIHJlYWxseSBqdXN0IGNoZWNrcyB0byBt YWtlIHN1cmUgdGhhdCB0aGlzIHVzYWdlIGNvbXBpbGVzOyB3ZSBkb24ndCBoYXZlCi0gKiBhbnkg dGVzdCBjb2RlIHRvIHJ1bi4KLSAqLwotVEVTVF9CRUdJTih0ZXN0X2xvZ19vbmx5X2Zvcm1hdF9z dHJpbmcpIHsKLQlpZiAoZmFsc2UpIHsKLQkJTE9HKCJsb2dfc3RyIiwgIk5vIGFyZ3VtZW50cyBm b2xsb3cgdGhpcyBmb3JtYXQgc3RyaW5nLiIpOwotCX0KLX0KLVRFU1RfRU5ECi0KLWludAotbWFp bih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfbG9nX2Rpc2FibGVkLAotCSAgICB0 ZXN0X2xvZ19lbmFibGVkX2RpcmVjdCwKLQkgICAgdGVzdF9sb2dfZW5hYmxlZF9pbmRpcmVjdCwK LQkgICAgdGVzdF9sb2dfZW5hYmxlZF9nbG9iYWwsCi0JICAgIHRlc3RfbG9nc19pZl9ub19pbml0 LAotCSAgICB0ZXN0X2xvZ19vbmx5X2Zvcm1hdF9zdHJpbmcpOwotfQoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tYWxsY3RsLmMg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbWFsbGN0 bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWZjOGYxLi4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tYWxsY3Rs LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjc0ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFs bG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2N0bC5oIgotI2luY2x1 ZGUgImplbWFsbG9jL2ludGVybmFsL2hvb2suaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5h bC91dGlsLmgiCi0KLVRFU1RfQkVHSU4odGVzdF9tYWxsY3RsX2Vycm9ycykgewotCXVpbnQ2NF90 IGVwb2NoOwotCXNpemVfdCBzejsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGwoIm5vX3N1Y2hfbmFt ZSIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCBFTk9FTlQsCi0JICAgICJtYWxsY3RsKCkgc2hvdWxk IHJldHVybiBFTk9FTlQgZm9yIG5vbi1leGlzdGVudCBuYW1lcyIpOwotCi0JZXhwZWN0X2RfZXEo bWFsbGN0bCgidmVyc2lvbiIsIE5VTEwsIE5VTEwsICIwLjAuMCIsIHN0cmxlbigiMC4wLjAiKSks Ci0JICAgIEVQRVJNLCAibWFsbGN0bCgpIHNob3VsZCByZXR1cm4gRVBFUk0gb24gYXR0ZW1wdCB0 byB3cml0ZSAiCi0JICAgICJyZWFkLW9ubHkgdmFsdWUiKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxj dGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsCi0JICAgIHNpemVvZihlcG9j aCktMSksIEVJTlZBTCwKLQkgICAgIm1hbGxjdGwoKSBzaG91bGQgcmV0dXJuIEVJTlZBTCBmb3Ig aW5wdXQgc2l6ZSBtaXNtYXRjaCIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgTlVM TCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsCi0JICAgIHNpemVvZihlcG9jaCkrMSksIEVJTlZBTCwK LQkgICAgIm1hbGxjdGwoKSBzaG91bGQgcmV0dXJuIEVJTlZBTCBmb3IgaW5wdXQgc2l6ZSBtaXNt YXRjaCIpOwotCi0Jc3ogPSBzaXplb2YoZXBvY2gpLTE7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgi ZXBvY2giLCAodm9pZCAqKSZlcG9jaCwgJnN6LCBOVUxMLCAwKSwgRUlOVkFMLAotCSAgICAibWFs bGN0bCgpIHNob3VsZCByZXR1cm4gRUlOVkFMIGZvciBvdXRwdXQgc2l6ZSBtaXNtYXRjaCIpOwot CXN6ID0gc2l6ZW9mKGVwb2NoKSsxOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgKHZv aWQgKikmZXBvY2gsICZzeiwgTlVMTCwgMCksIEVJTlZBTCwKLQkgICAgIm1hbGxjdGwoKSBzaG91 bGQgcmV0dXJuIEVJTlZBTCBmb3Igb3V0cHV0IHNpemUgbWlzbWF0Y2giKTsKLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9tYWxsY3RsbmFtZXRvbWliX2Vycm9ycykgewotCXNpemVfdCBt aWJbMV07Ci0Jc2l6ZV90IG1pYmxlbjsKLQotCW1pYmxlbiA9IHNpemVvZihtaWIpL3NpemVvZihz aXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoIm5vX3N1Y2hfbmFtZSIsIG1p YiwgJm1pYmxlbiksIEVOT0VOVCwKLQkgICAgIm1hbGxjdGxuYW1ldG9taWIoKSBzaG91bGQgcmV0 dXJuIEVOT0VOVCBmb3Igbm9uLWV4aXN0ZW50IG5hbWVzIik7Ci19Ci1URVNUX0VORAotCi1URVNU X0JFR0lOKHRlc3RfbWFsbGN0bGJ5bWliX2Vycm9ycykgewotCXVpbnQ2NF90IGVwb2NoOwotCXNp emVfdCBzejsKLQlzaXplX3QgbWliWzFdOwotCXNpemVfdCBtaWJsZW47Ci0KLQltaWJsZW4gPSBz aXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWli KCJ2ZXJzaW9uIiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5h bWV0b21pYigpIGZhaWx1cmUiKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1p YmxlbiwgTlVMTCwgTlVMTCwgIjAuMC4wIiwKLQkgICAgc3RybGVuKCIwLjAuMCIpKSwgRVBFUk0s ICJtYWxsY3RsKCkgc2hvdWxkIHJldHVybiBFUEVSTSBvbiAiCi0JICAgICJhdHRlbXB0IHRvIHdy aXRlIHJlYWQtb25seSB2YWx1ZSIpOwotCi0JbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNp emVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiZXBvY2giLCBtaWIsICZtaWJs ZW4pLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwot Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxMLCAodm9p ZCAqKSZlcG9jaCwKLQkgICAgc2l6ZW9mKGVwb2NoKS0xKSwgRUlOVkFMLAotCSAgICAibWFsbGN0 bGJ5bWliKCkgc2hvdWxkIHJldHVybiBFSU5WQUwgZm9yIGlucHV0IHNpemUgbWlzbWF0Y2giKTsK LQlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsICh2b2lk ICopJmVwb2NoLAotCSAgICBzaXplb2YoZXBvY2gpKzEpLCBFSU5WQUwsCi0JICAgICJtYWxsY3Rs YnltaWIoKSBzaG91bGQgcmV0dXJuIEVJTlZBTCBmb3IgaW5wdXQgc2l6ZSBtaXNtYXRjaCIpOwot Ci0Jc3ogPSBzaXplb2YoZXBvY2gpLTE7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwg bWlibGVuLCAodm9pZCAqKSZlcG9jaCwgJnN6LCBOVUxMLCAwKSwKLQkgICAgRUlOVkFMLAotCSAg ICAibWFsbGN0bGJ5bWliKCkgc2hvdWxkIHJldHVybiBFSU5WQUwgZm9yIG91dHB1dCBzaXplIG1p c21hdGNoIik7Ci0Jc3ogPSBzaXplb2YoZXBvY2gpKzE7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5 bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZlcG9jaCwgJnN6LCBOVUxMLCAwKSwKLQkgICAgRUlO VkFMLAotCSAgICAibWFsbGN0bGJ5bWliKCkgc2hvdWxkIHJldHVybiBFSU5WQUwgZm9yIG91dHB1 dCBzaXplIG1pc21hdGNoIik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfbWFsbGN0 bF9yZWFkX3dyaXRlKSB7Ci0JdWludDY0X3Qgb2xkX2Vwb2NoLCBuZXdfZXBvY2g7Ci0Jc2l6ZV90 IHN6ID0gc2l6ZW9mKG9sZF9lcG9jaCk7Ci0KLQkvKiBCbGluZC4gKi8KLQlleHBlY3RfZF9lcSht YWxsY3RsKCJlcG9jaCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF96dV9lcShzeiwgc2l6ZW9mKG9sZF9lcG9j aCksICJVbmV4cGVjdGVkIG91dHB1dCBzaXplIik7Ci0KLQkvKiBSZWFkLiAqLwotCWV4cGVjdF9k X2VxKG1hbGxjdGwoImVwb2NoIiwgKHZvaWQgKikmb2xkX2Vwb2NoLCAmc3osIE5VTEwsIDApLCAw LAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF96dV9lcShz eiwgc2l6ZW9mKG9sZF9lcG9jaCksICJVbmV4cGVjdGVkIG91dHB1dCBzaXplIik7Ci0KLQkvKiBX cml0ZS4gKi8KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJlcG9jaCIsIE5VTEwsIE5VTEwsICh2b2lk ICopJm5ld19lcG9jaCwKLQkgICAgc2l6ZW9mKG5ld19lcG9jaCkpLCAwLCAiVW5leHBlY3RlZCBt YWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF96dV9lcShzeiwgc2l6ZW9mKG9sZF9lcG9jaCks ICJVbmV4cGVjdGVkIG91dHB1dCBzaXplIik7Ci0KLQkvKiBSZWFkK3dyaXRlLiAqLwotCWV4cGVj dF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgKHZvaWQgKikmb2xkX2Vwb2NoLCAmc3osCi0JICAgICh2 b2lkICopJm5ld19lcG9jaCwgc2l6ZW9mKG5ld19lcG9jaCkpLCAwLAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF96dV9lcShzeiwgc2l6ZW9mKG9sZF9lcG9j aCksICJVbmV4cGVjdGVkIG91dHB1dCBzaXplIik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lO KHRlc3RfbWFsbGN0bG5hbWV0b21pYl9zaG9ydF9taWIpIHsKLQlzaXplX3QgbWliWzRdOwotCXNp emVfdCBtaWJsZW47Ci0KLQltaWJsZW4gPSAzOwotCW1pYlszXSA9IDQyOwotCWV4cGVjdF9kX2Vx KG1hbGxjdGxuYW1ldG9taWIoImFyZW5hcy5iaW4uMC5ucmVncyIsIG1pYiwgJm1pYmxlbiksIDAs Ci0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7Ci0JZXhwZWN0 X3p1X2VxKG1pYmxlbiwgMywgIlVuZXhwZWN0ZWQgbWliIG91dHB1dCBsZW5ndGgiKTsKLQlleHBl Y3RfenVfZXEobWliWzNdLCA0MiwKLQkgICAgIm1hbGxjdGxuYW1ldG9taWIoKSB3cm90ZSBwYXN0 IHRoZSBlbmQgb2YgdGhlIGlucHV0IG1pYiIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0 ZXN0X21hbGxjdGxuYW1ldG9taWJfc2hvcnRfbmFtZSkgewotCXNpemVfdCBtaWJbNF07Ci0Jc2l6 ZV90IG1pYmxlbjsKLQotCW1pYmxlbiA9IDQ7Ci0JbWliWzNdID0gNDI7Ci0JZXhwZWN0X2RfZXEo bWFsbGN0bG5hbWV0b21pYigiYXJlbmFzLmJpbi4wIiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKLQlleHBlY3RfenVfZXEo bWlibGVuLCAzLCAiVW5leHBlY3RlZCBtaWIgb3V0cHV0IGxlbmd0aCIpOwotCWV4cGVjdF96dV9l cShtaWJbM10sIDQyLAotCSAgICAibWFsbGN0bG5hbWV0b21pYigpIHdyb3RlIHBhc3QgdGhlIGVu ZCBvZiB0aGUgaW5wdXQgbWliIik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfbWFs bGN0bG1pYm5hbWV0b21pYikgewotCXNpemVfdCBtaWJbNF07Ci0Jc2l6ZV90IG1pYmxlbiA9IDQ7 Ci0JdWludDMyX3QgcmVzdWx0LCByZXN1bHRfcmVmOwotCXNpemVfdCBsZW5fcmVzdWx0ID0gc2l6 ZW9mKHVpbnQzMl90KTsKLQotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKLQotCS8qIEVycm9y IGNhc2VzICovCi0JYXNzZXJ0X2RfZXEoY3RsX21pYm5hbWV0b21pYih0c2QsIG1pYiwgMCwgImJv YiIsICZtaWJsZW4pLCBFTk9FTlQsICIiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCA0LCAiIik7 Ci0JYXNzZXJ0X2RfZXEoY3RsX21pYm5hbWV0b21pYih0c2QsIG1pYiwgMCwgIjk5OTkiLCAmbWli bGVuKSwgRU5PRU5ULCAiIik7Ci0JYXNzZXJ0X3p1X2VxKG1pYmxlbiwgNCwgIiIpOwotCi0JLyog VmFsaWQgY2FzZS4gKi8KLQlhc3NlcnRfZF9lcShjdGxfbWlibmFtZXRvbWliKHRzZCwgbWliLCAw LCAiYXJlbmFzIiwgJm1pYmxlbiksIDAsICIiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCAxLCAi Iik7Ci0JbWlibGVuID0gNDsKLQlhc3NlcnRfZF9lcShjdGxfbWlibmFtZXRvbWliKHRzZCwgbWli LCAxLCAiYmluIiwgJm1pYmxlbiksIDAsICIiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCAyLCAi Iik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmcmVzdWx0LCAmbGVu X3Jlc3VsdCwgTlVMTCwgMCksCi0JICAgIEVOT0VOVCwgIm1hbGxjdGxieW1pYigpIHNob3VsZCBm YWlsIG9uIHBhcnRpYWwgcGF0aCIpOwotCi0JLyogRXJyb3IgY2FzZXMuICovCi0JbWlibGVuID0g NDsKLQlhc3NlcnRfZF9lcShjdGxfbWlibmFtZXRvbWliKHRzZCwgbWliLCAyLCAiYm9iIiwgJm1p YmxlbiksIEVOT0VOVCwgIiIpOwotCWFzc2VydF96dV9lcShtaWJsZW4sIDQsICIiKTsKLQlhc3Nl cnRfZF9lcShjdGxfbWlibmFtZXRvbWliKHRzZCwgbWliLCAyLCAiOTk5OSIsICZtaWJsZW4pLCBF Tk9FTlQsICIiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCA0LCAiIik7Ci0KLQkvKiBWYWxpZCBj YXNlLiAqLwotCWFzc2VydF9kX2VxKGN0bF9taWJuYW1ldG9taWIodHNkLCBtaWIsIDIsICIwIiwg Jm1pYmxlbiksIDAsICIiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCAzLCAiIik7Ci0JZXhwZWN0 X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmcmVzdWx0LCAmbGVuX3Jlc3VsdCwgTlVM TCwgMCksCi0JICAgIEVOT0VOVCwgIm1hbGxjdGxieW1pYigpIHNob3VsZCBmYWlsIG9uIHBhcnRp YWwgcGF0aCIpOwotCi0JLyogRXJyb3IgY2FzZXMuICovCi0JbWlibGVuID0gNDsKLQlhc3NlcnRf ZF9lcShjdGxfbWlibmFtZXRvbWliKHRzZCwgbWliLCAzLCAiYm9iIiwgJm1pYmxlbiksIEVOT0VO VCwgIiIpOwotCWFzc2VydF96dV9lcShtaWJsZW4sIDQsICIiKTsKLQlhc3NlcnRfZF9lcShjdGxf bWlibmFtZXRvbWliKHRzZCwgbWliLCAzLCAiOTk5OSIsICZtaWJsZW4pLCBFTk9FTlQsICIiKTsK LQlhc3NlcnRfenVfZXEobWlibGVuLCA0LCAiIik7Ci0KLQkvKiBWYWxpZCBjYXNlLiAqLwotCWFz c2VydF9kX2VxKGN0bF9taWJuYW1ldG9taWIodHNkLCBtaWIsIDMsICJucmVncyIsICZtaWJsZW4p LCAwLCAiIik7Ci0JYXNzZXJ0X3p1X2VxKG1pYmxlbiwgNCwgIiIpOwotCWFzc2VydF9kX2VxKG1h bGxjdGxieW1pYihtaWIsIG1pYmxlbiwgJnJlc3VsdCwgJmxlbl9yZXN1bHQsIE5VTEwsIDApLAot CSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7Ci0JYXNzZXJ0X2Rf ZXEobWFsbGN0bCgiYXJlbmFzLmJpbi4wLm5yZWdzIiwgJnJlc3VsdF9yZWYsICZsZW5fcmVzdWx0 LAotCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQll eHBlY3RfenVfZXEocmVzdWx0LCByZXN1bHRfcmVmLAotCSAgICAibWFsbGN0bGJ5bWliKCkgYW5k IG1hbGxjdGwoKSByZXR1cm5lZCBkaWZmZXJlbnQgcmVzdWx0Iik7Ci19Ci1URVNUX0VORAotCi1U RVNUX0JFR0lOKHRlc3RfbWFsbGN0bGJ5bWlibmFtZSkgewotCXNpemVfdCBtaWJbNF07Ci0Jc2l6 ZV90IG1pYmxlbiA9IDQ7Ci0JdWludDMyX3QgcmVzdWx0LCByZXN1bHRfcmVmOwotCXNpemVfdCBs ZW5fcmVzdWx0ID0gc2l6ZW9mKHVpbnQzMl90KTsKLQotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2go KTsKLQotCS8qIEVycm9yIGNhc2VzLiAqLwotCi0JYXNzZXJ0X2RfZXEobWFsbGN0bG5hbWV0b21p YigiYXJlbmFzIiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5h bWV0b21pYigpIGZhaWx1cmUiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCAxLCAiIik7Ci0KLQlt aWJsZW4gPSA0OwotCWFzc2VydF9kX2VxKGN0bF9ieW1pYm5hbWUodHNkLCBtaWIsIDEsICJiaW4u MCIsICZtaWJsZW4sCi0JICAgICZyZXN1bHQsICZsZW5fcmVzdWx0LCBOVUxMLCAwKSwgRU5PRU5U LCAiIik7Ci0JbWlibGVuID0gNDsKLQlhc3NlcnRfZF9lcShjdGxfYnltaWJuYW1lKHRzZCwgbWli LCAxLCAiYmluLjAuYm9iIiwgJm1pYmxlbiwKLQkgICAgJnJlc3VsdCwgJmxlbl9yZXN1bHQsIE5V TEwsIDApLCBFTk9FTlQsICIiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCA0LCAiIik7Ci0KLQkv KiBWYWxpZCBjYXNlcy4gKi8KLQotCWFzc2VydF9kX2VxKG1hbGxjdGwoImFyZW5hcy5iaW4uMC5u cmVncyIsICZyZXN1bHRfcmVmLCAmbGVuX3Jlc3VsdCwKLQkgICAgTlVMTCwgMCksIDAsICJVbmV4 cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JbWlibGVuID0gNDsKLQotCWFzc2VydF9kX2Vx KGN0bF9ieW1pYm5hbWUodHNkLCBtaWIsIDAsICJhcmVuYXMuYmluLjAubnJlZ3MiLCAmbWlibGVu LAotCSAgICAmcmVzdWx0LCAmbGVuX3Jlc3VsdCwgTlVMTCwgMCksIDAsICIiKTsKLQlhc3NlcnRf enVfZXEobWlibGVuLCA0LCAiIik7Ci0JZXhwZWN0X3p1X2VxKHJlc3VsdCwgcmVzdWx0X3JlZiwg IlVuZXhwZWN0ZWQgcmVzdWx0Iik7Ci0KLQlhc3NlcnRfZF9lcShjdGxfYnltaWJuYW1lKHRzZCwg bWliLCAxLCAiYmluLjAubnJlZ3MiLCAmbWlibGVuLCAmcmVzdWx0LAotCSAgICAmbGVuX3Jlc3Vs dCwgTlVMTCwgMCksIDAsICIiKTsKLQlhc3NlcnRfenVfZXEobWlibGVuLCA0LCAiIik7Ci0JZXhw ZWN0X3p1X2VxKHJlc3VsdCwgcmVzdWx0X3JlZiwgIlVuZXhwZWN0ZWQgcmVzdWx0Iik7Ci0KLQlh c3NlcnRfZF9lcShjdGxfYnltaWJuYW1lKHRzZCwgbWliLCAyLCAiMC5ucmVncyIsICZtaWJsZW4s ICZyZXN1bHQsCi0JICAgICZsZW5fcmVzdWx0LCBOVUxMLCAwKSwgMCwgIiIpOwotCWFzc2VydF96 dV9lcShtaWJsZW4sIDQsICIiKTsKLQlleHBlY3RfenVfZXEocmVzdWx0LCByZXN1bHRfcmVmLCAi VW5leHBlY3RlZCByZXN1bHQiKTsKLQotCWFzc2VydF9kX2VxKGN0bF9ieW1pYm5hbWUodHNkLCBt aWIsIDMsICJucmVncyIsICZtaWJsZW4sICZyZXN1bHQsCi0JICAgICZsZW5fcmVzdWx0LCBOVUxM LCAwKSwgMCwgIiIpOwotCWFzc2VydF96dV9lcShtaWJsZW4sIDQsICIiKTsKLQlleHBlY3RfenVf ZXEocmVzdWx0LCByZXN1bHRfcmVmLCAiVW5leHBlY3RlZCByZXN1bHQiKTsKLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9tYWxsY3RsX2NvbmZpZykgewotI2RlZmluZSBURVNUX01BTExD VExfQ09ORklHKGNvbmZpZywgdCkgZG8gewkJCQlcCi0JdCBvbGR2YWw7CQkJCQkJCVwKLQlzaXpl X3Qgc3ogPSBzaXplb2Yob2xkdmFsKTsJCQkJCVwKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJjb25m aWcuIiNjb25maWcsICh2b2lkICopJm9sZHZhbCwgJnN6LAlcCi0JICAgIE5VTEwsIDApLCAwLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwkJXAotCWV4cGVjdF9iX2VxKG9sZHZhbCwg Y29uZmlnXyMjY29uZmlnLCAiSW5jb3JyZWN0IGNvbmZpZyB2YWx1ZSIpOwlcCi0JZXhwZWN0X3p1 X2VxKHN6LCBzaXplb2Yob2xkdmFsKSwgIlVuZXhwZWN0ZWQgb3V0cHV0IHNpemUiKTsJXAotfSB3 aGlsZSAoMCkKLQotCVRFU1RfTUFMTENUTF9DT05GSUcoY2FjaGVfb2JsaXZpb3VzLCBib29sKTsK LQlURVNUX01BTExDVExfQ09ORklHKGRlYnVnLCBib29sKTsKLQlURVNUX01BTExDVExfQ09ORklH KGZpbGwsIGJvb2wpOwotCVRFU1RfTUFMTENUTF9DT05GSUcobGF6eV9sb2NrLCBib29sKTsKLQlU RVNUX01BTExDVExfQ09ORklHKG1hbGxvY19jb25mLCBjb25zdCBjaGFyICopOwotCVRFU1RfTUFM TENUTF9DT05GSUcocHJvZiwgYm9vbCk7Ci0JVEVTVF9NQUxMQ1RMX0NPTkZJRyhwcm9mX2xpYmdj YywgYm9vbCk7Ci0JVEVTVF9NQUxMQ1RMX0NPTkZJRyhwcm9mX2xpYnVud2luZCwgYm9vbCk7Ci0J VEVTVF9NQUxMQ1RMX0NPTkZJRyhzdGF0cywgYm9vbCk7Ci0JVEVTVF9NQUxMQ1RMX0NPTkZJRyh1 dHJhY2UsIGJvb2wpOwotCVRFU1RfTUFMTENUTF9DT05GSUcoeG1hbGxvYywgYm9vbCk7Ci0KLSN1 bmRlZiBURVNUX01BTExDVExfQ09ORklHCi19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3Rf bWFsbGN0bF9vcHQpIHsKLQlib29sIGNvbmZpZ19hbHdheXMgPSB0cnVlOwotCi0jZGVmaW5lIFRF U1RfTUFMTENUTF9PUFQodCwgb3B0LCBjb25maWcpIGRvIHsJCQkJXAotCXQgb2xkdmFsOwkJCQkJ CQlcCi0Jc2l6ZV90IHN6ID0gc2l6ZW9mKG9sZHZhbCk7CQkJCQlcCi0JaW50IGV4cGVjdGVkID0g Y29uZmlnXyMjY29uZmlnID8gMCA6IEVOT0VOVDsJCQlcCi0JaW50IHJlc3VsdCA9IG1hbGxjdGwo Im9wdC4iI29wdCwgKHZvaWQgKikmb2xkdmFsLCAmc3osIE5VTEwsCVwKLQkgICAgMCk7CQkJCQkJ CQlcCi0JZXhwZWN0X2RfZXEocmVzdWx0LCBleHBlY3RlZCwJCQkJCVwKLQkgICAgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIHJlc3VsdCBmb3Igb3B0LiIjb3B0KTsJCVwKLQlleHBlY3RfenVfZXEoc3os IHNpemVvZihvbGR2YWwpLCAiVW5leHBlY3RlZCBvdXRwdXQgc2l6ZSIpOwlcCi19IHdoaWxlICgw KQotCi0JVEVTVF9NQUxMQ1RMX09QVChib29sLCBhYm9ydCwgYWx3YXlzKTsKLQlURVNUX01BTExD VExfT1BUKGJvb2wsIGFib3J0X2NvbmYsIGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RMX09QVChib29s LCBjYWNoZV9vYmxpdmlvdXMsIGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RMX09QVChib29sLCB0cnVz dF9tYWR2aXNlLCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwgY29uZmlybV9jb25m LCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQoY29uc3QgY2hhciAqLCBtZXRhZGF0YV90aHAs IGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RMX09QVChib29sLCByZXRhaW4sIGFsd2F5cyk7Ci0JVEVT VF9NQUxMQ1RMX09QVChjb25zdCBjaGFyICosIGRzcywgYWx3YXlzKTsKLQlURVNUX01BTExDVExf T1BUKGJvb2wsIGhwYSwgYWx3YXlzKTsKLQlURVNUX01BTExDVExfT1BUKHNpemVfdCwgaHBhX3Ns YWJfbWF4X2FsbG9jLCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQoc2l6ZV90LCBocGFfc2Vj X25zaGFyZHMsIGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RMX09QVChzaXplX3QsIGhwYV9zZWNfbWF4 X2FsbG9jLCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQoc2l6ZV90LCBocGFfc2VjX21heF9i eXRlcywgYWx3YXlzKTsKLQlURVNUX01BTExDVExfT1BUKHNpemVfdCwgaHBhX3NlY19ieXRlc19h ZnRlcl9mbHVzaCwgYWx3YXlzKTsKLQlURVNUX01BTExDVExfT1BUKHNpemVfdCwgaHBhX3NlY19i YXRjaF9maWxsX2V4dHJhLCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQodW5zaWduZWQsIG5h cmVuYXMsIGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RMX09QVChjb25zdCBjaGFyICosIHBlcmNwdV9h cmVuYSwgYWx3YXlzKTsKLQlURVNUX01BTExDVExfT1BUKHNpemVfdCwgb3ZlcnNpemVfdGhyZXNo b2xkLCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwgYmFja2dyb3VuZF90aHJlYWQs IGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RMX09QVChzc2l6ZV90LCBkaXJ0eV9kZWNheV9tcywgYWx3 YXlzKTsKLQlURVNUX01BTExDVExfT1BUKHNzaXplX3QsIG11enp5X2RlY2F5X21zLCBhbHdheXMp OwotCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwgc3RhdHNfcHJpbnQsIGFsd2F5cyk7Ci0JVEVTVF9N QUxMQ1RMX09QVChjb25zdCBjaGFyICosIHN0YXRzX3ByaW50X29wdHMsIGFsd2F5cyk7Ci0JVEVT VF9NQUxMQ1RMX09QVChpbnQ2NF90LCBzdGF0c19pbnRlcnZhbCwgYWx3YXlzKTsKLQlURVNUX01B TExDVExfT1BUKGNvbnN0IGNoYXIgKiwgc3RhdHNfaW50ZXJ2YWxfb3B0cywgYWx3YXlzKTsKLQlU RVNUX01BTExDVExfT1BUKGNvbnN0IGNoYXIgKiwganVuaywgZmlsbCk7Ci0JVEVTVF9NQUxMQ1RM X09QVChib29sLCB6ZXJvLCBmaWxsKTsKLQlURVNUX01BTExDVExfT1BUKGJvb2wsIHV0cmFjZSwg dXRyYWNlKTsKLQlURVNUX01BTExDVExfT1BUKGJvb2wsIHhtYWxsb2MsIHhtYWxsb2MpOwotCVRF U1RfTUFMTENUTF9PUFQoYm9vbCwgdGNhY2hlLCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQo c2l6ZV90LCBsZ19leHRlbnRfbWF4X2FjdGl2ZV9maXQsIGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RM X09QVChzaXplX3QsIHRjYWNoZV9tYXgsIGFsd2F5cyk7Ci0JVEVTVF9NQUxMQ1RMX09QVChjb25z dCBjaGFyICosIHRocCwgYWx3YXlzKTsKLQlURVNUX01BTExDVExfT1BUKGNvbnN0IGNoYXIgKiwg emVyb19yZWFsbG9jLCBhbHdheXMpOwotCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwgcHJvZiwgcHJv Zik7Ci0JVEVTVF9NQUxMQ1RMX09QVChjb25zdCBjaGFyICosIHByb2ZfcHJlZml4LCBwcm9mKTsK LQlURVNUX01BTExDVExfT1BUKGJvb2wsIHByb2ZfYWN0aXZlLCBwcm9mKTsKLQlURVNUX01BTExD VExfT1BUKHNzaXplX3QsIGxnX3Byb2Zfc2FtcGxlLCBwcm9mKTsKLQlURVNUX01BTExDVExfT1BU KGJvb2wsIHByb2ZfYWNjdW0sIHByb2YpOwotCVRFU1RfTUFMTENUTF9PUFQoc3NpemVfdCwgbGdf cHJvZl9pbnRlcnZhbCwgcHJvZik7Ci0JVEVTVF9NQUxMQ1RMX09QVChib29sLCBwcm9mX2dkdW1w LCBwcm9mKTsKLQlURVNUX01BTExDVExfT1BUKGJvb2wsIHByb2ZfZmluYWwsIHByb2YpOwotCVRF U1RfTUFMTENUTF9PUFQoYm9vbCwgcHJvZl9sZWFrLCBwcm9mKTsKLQlURVNUX01BTExDVExfT1BU KGJvb2wsIHByb2ZfbGVha19lcnJvciwgcHJvZik7Ci0JVEVTVF9NQUxMQ1RMX09QVChzc2l6ZV90 LCBwcm9mX3JlY2VudF9hbGxvY19tYXgsIHByb2YpOwotCVRFU1RfTUFMTENUTF9PUFQoYm9vbCwg cHJvZl9zdGF0cywgcHJvZik7Ci0JVEVTVF9NQUxMQ1RMX09QVChib29sLCBwcm9mX3N5c190aHJl YWRfbmFtZSwgcHJvZik7Ci0JVEVTVF9NQUxMQ1RMX09QVChzc2l6ZV90LCBsZ19zYW5fdWFmX2Fs aWduLCB1YWZfZGV0ZWN0aW9uKTsKLQotI3VuZGVmIFRFU1RfTUFMTENUTF9PUFQKLX0KLVRFU1Rf RU5ECi0KLVRFU1RfQkVHSU4odGVzdF9tYW5wYWdlX2V4YW1wbGUpIHsKLQl1bnNpZ25lZCBuYmlu cywgaTsKLQlzaXplX3QgbWliWzRdOwotCXNpemVfdCBsZW4sIG1pYmxlbjsKLQotCWxlbiA9IHNp emVvZihuYmlucyk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLm5iaW5zIiwgKHZvaWQg KikmbmJpbnMsICZsZW4sIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkg ZmFpbHVyZSIpOwotCi0JbWlibGVuID0gNDsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWli KCJhcmVuYXMuYmluLjAuc2l6ZSIsIG1pYiwgJm1pYmxlbiksIDAsCi0JICAgICJVbmV4cGVjdGVk IG1hbGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7Ci0JZm9yIChpID0gMDsgaSA8IG5iaW5zOyBp KyspIHsKLQkJc2l6ZV90IGJpbl9zaXplOwotCi0JCW1pYlsyXSA9IGk7Ci0JCWxlbiA9IHNpemVv ZihiaW5fc2l6ZSk7Ci0JCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZv aWQgKikmYmluX3NpemUsICZsZW4sCi0JCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFs bGN0bGJ5bWliKCkgZmFpbHVyZSIpOwotCQkvKiBEbyBzb21ldGhpbmcgd2l0aCBiaW5fc2l6ZS4u LiAqLwotCX0KLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF90Y2FjaGVfbm9uZSkgewot CXRlc3Rfc2tpcF9pZighb3B0X3RjYWNoZSk7Ci0KLQkvKiBBbGxvY2F0ZSBwIGFuZCBxLiAqLwot CXZvaWQgKnAwID0gbWFsbG9jeCg0MiwgMCk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwMCwgIlVu ZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQl2b2lkICpxID0gbWFsbG9jeCg0MiwgMCk7 Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChxLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIp OwotCi0JLyogRGVhbGxvY2F0ZSBwIGFuZCBxLCBidXQgYnlwYXNzIHRoZSB0Y2FjaGUgZm9yIHEu ICovCi0JZGFsbG9jeChwMCwgMCk7Ci0JZGFsbG9jeChxLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsK LQotCS8qIE1ha2Ugc3VyZSB0aGF0IHRjYWNoZS1iYXNlZCBhbGxvY2F0aW9uIHJldHVybnMgcCwg bm90IHEuICovCi0Jdm9pZCAqcDEgPSBtYWxsb2N4KDQyLCAwKTsKLQlleHBlY3RfcHRyX25vdF9u dWxsKHAxLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwotCWlmICghb3B0X3Byb2Yg JiYgIXNhbl91YWZfZGV0ZWN0aW9uX2VuYWJsZWQoKSkgewotCQlleHBlY3RfcHRyX2VxKHAwLCBw MSwKLQkJICAgICJFeHBlY3RlZCB0Y2FjaGUgdG8gYWxsb2NhdGUgY2FjaGVkIHJlZ2lvbiIpOwot CX0KLQotCS8qIENsZWFuIHVwLiAqLwotCWRhbGxvY3gocDEsIE1BTExPQ1hfVENBQ0hFX05PTkUp OwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3RjYWNoZSkgewotI2RlZmluZSBOVENB Q0hFUwkxMAotCXVuc2lnbmVkIHRpc1tOVENBQ0hFU107Ci0Jdm9pZCAqcHNbTlRDQUNIRVNdOwot CXZvaWQgKnFzW05UQ0FDSEVTXTsKLQl1bnNpZ25lZCBpOwotCXNpemVfdCBzeiwgcHN6LCBxc3o7 Ci0KLQlwc3ogPSA0MjsKLQlxc3ogPSBuYWxsb2N4KHBzeiwgMCkgKyAxOwotCi0JLyogQ3JlYXRl IHRjYWNoZXMuICovCi0JZm9yIChpID0gMDsgaSA8IE5UQ0FDSEVTOyBpKyspIHsKLQkJc3ogPSBz aXplb2YodW5zaWduZWQpOwotCQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0Y2FjaGUuY3JlYXRlIiwg KHZvaWQgKikmdGlzW2ldLCAmc3osIE5VTEwsCi0JCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFs bGN0bCgpIGZhaWx1cmUsIGk9JXUiLCBpKTsKLQl9Ci0KLQkvKiBFeGVyY2lzZSB0Y2FjaGUgSUQg cmVjeWNsaW5nLiAqLwotCWZvciAoaSA9IDA7IGkgPCBOVENBQ0hFUzsgaSsrKSB7Ci0JCWV4cGVj dF9kX2VxKG1hbGxjdGwoInRjYWNoZS5kZXN0cm95IiwgTlVMTCwgTlVMTCwKLQkJICAgICh2b2lk ICopJnRpc1tpXSwgc2l6ZW9mKHVuc2lnbmVkKSksIDAsCi0JCSAgICAiVW5leHBlY3RlZCBtYWxs Y3RsKCkgZmFpbHVyZSwgaT0ldSIsIGkpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTlRDQUNIRVM7 IGkrKykgewotCQlzeiA9IHNpemVvZih1bnNpZ25lZCk7Ci0JCWV4cGVjdF9kX2VxKG1hbGxjdGwo InRjYWNoZS5jcmVhdGUiLCAodm9pZCAqKSZ0aXNbaV0sICZzeiwgTlVMTCwKLQkJICAgIDApLCAw LCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSwgaT0ldSIsIGkpOwotCX0KLQotCS8qIEZs dXNoIGVtcHR5IHRjYWNoZXMuICovCi0JZm9yIChpID0gMDsgaSA8IE5UQ0FDSEVTOyBpKyspIHsK LQkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGNhY2hlLmZsdXNoIiwgTlVMTCwgTlVMTCwgKHZvaWQg KikmdGlzW2ldLAotCQkgICAgc2l6ZW9mKHVuc2lnbmVkKSksIDAsICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlLCBpPSV1IiwKLQkJICAgIGkpOwotCX0KLQotCS8qIENhY2hlIHNvbWUgYWxs b2NhdGlvbnMuICovCi0JZm9yIChpID0gMDsgaSA8IE5UQ0FDSEVTOyBpKyspIHsKLQkJcHNbaV0g PSBtYWxsb2N4KHBzeiwgTUFMTE9DWF9UQ0FDSEUodGlzW2ldKSk7Ci0JCWV4cGVjdF9wdHJfbm90 X251bGwocHNbaV0sICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlLCBpPSV1IiwKLQkJICAg IGkpOwotCQlkYWxsb2N4KHBzW2ldLCBNQUxMT0NYX1RDQUNIRSh0aXNbaV0pKTsKLQotCQlxc1tp XSA9IG1hbGxvY3gocXN6LCBNQUxMT0NYX1RDQUNIRSh0aXNbaV0pKTsKLQkJZXhwZWN0X3B0cl9u b3RfbnVsbChxc1tpXSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUsIGk9JXUiLAotCQkg ICAgaSk7Ci0JCWRhbGxvY3gocXNbaV0sIE1BTExPQ1hfVENBQ0hFKHRpc1tpXSkpOwotCX0KLQot CS8qIFZlcmlmeSB0aGF0IHRjYWNoZXMgYWxsb2NhdGUgY2FjaGVkIHJlZ2lvbnMuICovCi0JZm9y IChpID0gMDsgaSA8IE5UQ0FDSEVTOyBpKyspIHsKLQkJdm9pZCAqcDAgPSBwc1tpXTsKLQkJcHNb aV0gPSBtYWxsb2N4KHBzeiwgTUFMTE9DWF9UQ0FDSEUodGlzW2ldKSk7Ci0JCWV4cGVjdF9wdHJf bm90X251bGwocHNbaV0sICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlLCBpPSV1IiwKLQkJ ICAgIGkpOwotCQlpZiAoIXNhbl91YWZfZGV0ZWN0aW9uX2VuYWJsZWQoKSkgewotCQkJZXhwZWN0 X3B0cl9lcShwc1tpXSwgcDAsICJFeHBlY3RlZCBtYWxsb2N4KCkgdG8gIgotCQkJICAgICJhbGxv Y2F0ZSBjYWNoZWQgcmVnaW9uLCBpPSV1IiwgaSk7Ci0JCX0KLQl9Ci0KLQkvKiBWZXJpZnkgdGhh dCByZWFsbG9jYXRpb24gdXNlcyBjYWNoZWQgcmVnaW9ucy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwg TlRDQUNIRVM7IGkrKykgewotCQl2b2lkICpxMCA9IHFzW2ldOwotCQlxc1tpXSA9IHJhbGxvY3go cHNbaV0sIHFzeiwgTUFMTE9DWF9UQ0FDSEUodGlzW2ldKSk7Ci0JCWV4cGVjdF9wdHJfbm90X251 bGwocXNbaV0sICJVbmV4cGVjdGVkIHJhbGxvY3goKSBmYWlsdXJlLCBpPSV1IiwKLQkJICAgIGkp OwotCQlpZiAoIXNhbl91YWZfZGV0ZWN0aW9uX2VuYWJsZWQoKSkgewotCQkJZXhwZWN0X3B0cl9l cShxc1tpXSwgcTAsICJFeHBlY3RlZCByYWxsb2N4KCkgdG8gIgotCQkJICAgICJhbGxvY2F0ZSBj YWNoZWQgcmVnaW9uLCBpPSV1IiwgaSk7Ci0JCX0KLQkJLyogQXZvaWQgdW5kZWZpbmVkIGJlaGF2 aW9yIGluIGNhc2Ugb2YgdGVzdCBmYWlsdXJlLiAqLwotCQlpZiAocXNbaV0gPT0gTlVMTCkgewot CQkJcXNbaV0gPSBwc1tpXTsKLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTlRDQUNIRVM7IGkr KykgewotCQlkYWxsb2N4KHFzW2ldLCBNQUxMT0NYX1RDQUNIRSh0aXNbaV0pKTsKLQl9Ci0KLQkv KiBGbHVzaCBzb21lIG5vbi1lbXB0eSB0Y2FjaGVzLiAqLwotCWZvciAoaSA9IDA7IGkgPCBOVENB Q0hFUy8yOyBpKyspIHsKLQkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGNhY2hlLmZsdXNoIiwgTlVM TCwgTlVMTCwgKHZvaWQgKikmdGlzW2ldLAotCQkgICAgc2l6ZW9mKHVuc2lnbmVkKSksIDAsICJV bmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlLCBpPSV1IiwKLQkJICAgIGkpOwotCX0KLQotCS8q IERlc3Ryb3kgdGNhY2hlcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlRDQUNIRVM7IGkrKykgewot CQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0Y2FjaGUuZGVzdHJveSIsIE5VTEwsIE5VTEwsCi0JCSAg ICAodm9pZCAqKSZ0aXNbaV0sIHNpemVvZih1bnNpZ25lZCkpLCAwLAotCQkgICAgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGZhaWx1cmUsIGk9JXUiLCBpKTsKLQl9Ci19Ci1URVNUX0VORAotCi1URVNU X0JFR0lOKHRlc3RfdGhyZWFkX2FyZW5hKSB7Ci0JdW5zaWduZWQgb2xkX2FyZW5hX2luZCwgbmV3 X2FyZW5hX2luZCwgbmFyZW5hczsKLQotCWNvbnN0IGNoYXIgKm9wYTsKLQlzaXplX3Qgc3ogPSBz aXplb2Yob3BhKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJvcHQucGVyY3B1X2FyZW5hIiwgKHZv aWQgKikmb3BhLCAmc3osIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkg ZmFpbHVyZSIpOwotCi0Jc3ogPSBzaXplb2YodW5zaWduZWQpOwotCWV4cGVjdF9kX2VxKG1hbGxj dGwoImFyZW5hcy5uYXJlbmFzIiwgKHZvaWQgKikmbmFyZW5hcywgJnN6LCBOVUxMLCAwKSwKLQkg ICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlpZiAob3B0X292ZXJzaXpl X3RocmVzaG9sZCAhPSAwKSB7Ci0JCW5hcmVuYXMtLTsKLQl9Ci0JZXhwZWN0X3VfZXEobmFyZW5h cywgb3B0X25hcmVuYXMsICJOdW1iZXIgb2YgYXJlbmFzIGluY29ycmVjdCIpOwotCi0JaWYgKHN0 cmNtcChvcGEsICJkaXNhYmxlZCIpID09IDApIHsKLQkJbmV3X2FyZW5hX2luZCA9IG5hcmVuYXMg LSAxOwotCQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAodm9pZCAqKSZvbGRf YXJlbmFfaW5kLCAmc3osCi0JCSAgICAodm9pZCAqKSZuZXdfYXJlbmFfaW5kLCBzaXplb2YodW5z aWduZWQpKSwgMCwKLQkJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JCW5l d19hcmVuYV9pbmQgPSAwOwotCQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAo dm9pZCAqKSZvbGRfYXJlbmFfaW5kLCAmc3osCi0JCSAgICAodm9pZCAqKSZuZXdfYXJlbmFfaW5k LCBzaXplb2YodW5zaWduZWQpKSwgMCwKLQkJICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWls dXJlIik7Ci0JfSBlbHNlIHsKLQkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLmFyZW5hIiwg KHZvaWQgKikmb2xkX2FyZW5hX2luZCwgJnN6LAotCQkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVj dGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JCW5ld19hcmVuYV9pbmQgPSBwZXJjcHVfYXJlbmFf aW5kX2xpbWl0KG9wdF9wZXJjcHVfYXJlbmEpIC0gMTsKLQkJaWYgKG9sZF9hcmVuYV9pbmQgIT0g bmV3X2FyZW5hX2luZCkgewotCQkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLmFyZW5hIiwK LQkJCSAgICAodm9pZCAqKSZvbGRfYXJlbmFfaW5kLCAmc3osICh2b2lkICopJm5ld19hcmVuYV9p bmQsCi0JCQkgICAgc2l6ZW9mKHVuc2lnbmVkKSksIEVQRVJNLCAidGhyZWFkLmFyZW5hIGN0bCAi Ci0JCQkgICAgInNob3VsZCBub3QgYmUgYWxsb3dlZCB3aXRoIHBlcmNwdSBhcmVuYSIpOwotCQl9 Ci0JfQotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2FyZW5hX2lfaW5pdGlhbGl6ZWQp IHsKLQl1bnNpZ25lZCBuYXJlbmFzLCBpOwotCXNpemVfdCBzejsKLQlzaXplX3QgbWliWzNdOwot CXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVvZihzaXplX3QpOwotCWJvb2wgaW5p dGlhbGl6ZWQ7Ci0KLQlzeiA9IHNpemVvZihuYXJlbmFzKTsKLQlleHBlY3RfZF9lcShtYWxsY3Rs KCJhcmVuYXMubmFyZW5hcyIsICh2b2lkICopJm5hcmVuYXMsICZzeiwgTlVMTCwgMCksCi0JICAg IDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlleHBlY3RfZF9lcShtYWxs Y3RsbmFtZXRvbWliKCJhcmVuYS4wLmluaXRpYWxpemVkIiwgbWliLCAmbWlibGVuKSwgMCwKLQkg ICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKLQlmb3IgKGkgPSAw OyBpIDwgbmFyZW5hczsgaSsrKSB7Ci0JCW1pYlsxXSA9IGk7Ci0JCXN6ID0gc2l6ZW9mKGluaXRp YWxpemVkKTsKLQkJZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmaW5pdGlh bGl6ZWQsICZzeiwgTlVMTCwKLQkJICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFp bHVyZSIpOwotCX0KLQotCW1pYlsxXSA9IE1BTExDVExfQVJFTkFTX0FMTDsKLQlzeiA9IHNpemVv Zihpbml0aWFsaXplZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAm aW5pdGlhbGl6ZWQsICZzeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwo KSBmYWlsdXJlIik7Ci0JZXhwZWN0X3RydWUoaW5pdGlhbGl6ZWQsCi0JICAgICJNZXJnZWQgYXJl bmEgc3RhdGlzdGljcyBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIik7Ci0KLQkvKiBFcXVp dmFsZW50IHRvIHRoZSBhYm92ZSBidXQgdXNpbmcgbWFsbGN0bCgpIGRpcmVjdGx5LiAqLwotCXN6 ID0gc2l6ZW9mKGluaXRpYWxpemVkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKAotCSAgICAiYXJl bmEuIiBTVFJJTkdJRlkoTUFMTENUTF9BUkVOQVNfQUxMKSAiLmluaXRpYWxpemVkIiwKLQkgICAg KHZvaWQgKikmaW5pdGlhbGl6ZWQsICZzeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVk IG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JZXhwZWN0X3RydWUoaW5pdGlhbGl6ZWQsCi0JICAgICJN ZXJnZWQgYXJlbmEgc3RhdGlzdGljcyBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIik7Ci19 Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfYXJlbmFfaV9kaXJ0eV9kZWNheV9tcykgewot CXNzaXplX3QgZGlydHlfZGVjYXlfbXMsIG9yaWdfZGlydHlfZGVjYXlfbXMsIHByZXZfZGlydHlf ZGVjYXlfbXM7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHNzaXplX3QpOwotCi0JZXhwZWN0X2RfZXEo bWFsbGN0bCgiYXJlbmEuMC5kaXJ0eV9kZWNheV9tcyIsCi0JICAgICh2b2lkICopJm9yaWdfZGly dHlfZGVjYXlfbXMsICZzeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwo KSBmYWlsdXJlIik7Ci0KLQlkaXJ0eV9kZWNheV9tcyA9IC0yOwotCWV4cGVjdF9kX2VxKG1hbGxj dGwoImFyZW5hLjAuZGlydHlfZGVjYXlfbXMiLCBOVUxMLCBOVUxMLAotCSAgICAodm9pZCAqKSZk aXJ0eV9kZWNheV9tcywgc2l6ZW9mKHNzaXplX3QpKSwgRUZBVUxULAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgc3VjY2VzcyIpOwotCi0JZGlydHlfZGVjYXlfbXMgPSAweDdmZmZmZmZmOwot CWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hLjAuZGlydHlfZGVjYXlfbXMiLCBOVUxMLCBOVUxM LAotCSAgICAodm9pZCAqKSZkaXJ0eV9kZWNheV9tcywgc2l6ZW9mKHNzaXplX3QpKSwgMCwKLQkg ICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCWZvciAocHJldl9kaXJ0eV9k ZWNheV9tcyA9IGRpcnR5X2RlY2F5X21zLCBkaXJ0eV9kZWNheV9tcyA9IC0xOwotCSAgICBkaXJ0 eV9kZWNheV9tcyA8IDIwOyBwcmV2X2RpcnR5X2RlY2F5X21zID0gZGlydHlfZGVjYXlfbXMsCi0J ICAgIGRpcnR5X2RlY2F5X21zKyspIHsKLQkJc3NpemVfdCBvbGRfZGlydHlfZGVjYXlfbXM7Ci0K LQkJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5kaXJ0eV9kZWNheV9tcyIsCi0JCSAgICAo dm9pZCAqKSZvbGRfZGlydHlfZGVjYXlfbXMsICZzeiwgKHZvaWQgKikmZGlydHlfZGVjYXlfbXMs Ci0JCSAgICBzaXplb2Yoc3NpemVfdCkpLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVy ZSIpOwotCQlleHBlY3RfemRfZXEob2xkX2RpcnR5X2RlY2F5X21zLCBwcmV2X2RpcnR5X2RlY2F5 X21zLAotCQkgICAgIlVuZXhwZWN0ZWQgb2xkIGFyZW5hLjAuZGlydHlfZGVjYXlfbXMiKTsKLQl9 Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfYXJlbmFfaV9tdXp6eV9kZWNheV9tcykg ewotCXNzaXplX3QgbXV6enlfZGVjYXlfbXMsIG9yaWdfbXV6enlfZGVjYXlfbXMsIHByZXZfbXV6 enlfZGVjYXlfbXM7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHNzaXplX3QpOwotCi0JZXhwZWN0X2Rf ZXEobWFsbGN0bCgiYXJlbmEuMC5tdXp6eV9kZWNheV9tcyIsCi0JICAgICh2b2lkICopJm9yaWdf bXV6enlfZGVjYXlfbXMsICZzeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlIik7Ci0KLQltdXp6eV9kZWNheV9tcyA9IC0yOwotCWV4cGVjdF9kX2VxKG1h bGxjdGwoImFyZW5hLjAubXV6enlfZGVjYXlfbXMiLCBOVUxMLCBOVUxMLAotCSAgICAodm9pZCAq KSZtdXp6eV9kZWNheV9tcywgc2l6ZW9mKHNzaXplX3QpKSwgRUZBVUxULAotCSAgICAiVW5leHBl Y3RlZCBtYWxsY3RsKCkgc3VjY2VzcyIpOwotCi0JbXV6enlfZGVjYXlfbXMgPSAweDdmZmZmZmZm OwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hLjAubXV6enlfZGVjYXlfbXMiLCBOVUxMLCBO VUxMLAotCSAgICAodm9pZCAqKSZtdXp6eV9kZWNheV9tcywgc2l6ZW9mKHNzaXplX3QpKSwgMCwK LQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCWZvciAocHJldl9tdXp6 eV9kZWNheV9tcyA9IG11enp5X2RlY2F5X21zLCBtdXp6eV9kZWNheV9tcyA9IC0xOwotCSAgICBt dXp6eV9kZWNheV9tcyA8IDIwOyBwcmV2X211enp5X2RlY2F5X21zID0gbXV6enlfZGVjYXlfbXMs Ci0JICAgIG11enp5X2RlY2F5X21zKyspIHsKLQkJc3NpemVfdCBvbGRfbXV6enlfZGVjYXlfbXM7 Ci0KLQkJZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmEuMC5tdXp6eV9kZWNheV9tcyIsCi0JCSAg ICAodm9pZCAqKSZvbGRfbXV6enlfZGVjYXlfbXMsICZzeiwgKHZvaWQgKikmbXV6enlfZGVjYXlf bXMsCi0JCSAgICBzaXplb2Yoc3NpemVfdCkpLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFp bHVyZSIpOwotCQlleHBlY3RfemRfZXEob2xkX211enp5X2RlY2F5X21zLCBwcmV2X211enp5X2Rl Y2F5X21zLAotCQkgICAgIlVuZXhwZWN0ZWQgb2xkIGFyZW5hLjAubXV6enlfZGVjYXlfbXMiKTsK LQl9Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfYXJlbmFfaV9wdXJnZSkgewotCXVu c2lnbmVkIG5hcmVuYXM7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKLQlzaXplX3Qg bWliWzNdOwotCXNpemVfdCBtaWJsZW4gPSAzOwotCi0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJl bmEuMC5wdXJnZSIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBt YWxsY3RsKCkgZmFpbHVyZSIpOwotCi0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLm5hcmVu YXMiLCAodm9pZCAqKSZuYXJlbmFzLCAmc3osIE5VTEwsIDApLAotCSAgICAwLCAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFy ZW5hLjAucHVyZ2UiLCBtaWIsICZtaWJsZW4pLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3Rs bmFtZXRvbWliKCkgZmFpbHVyZSIpOwotCW1pYlsxXSA9IG5hcmVuYXM7Ci0JZXhwZWN0X2RfZXEo bWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKLQkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliKCkgZmFpbHVyZSIpOwotCi0JbWliWzFdID0gTUFMTENU TF9BUkVOQVNfQUxMOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVM TCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxieW1pYigpIGZh aWx1cmUiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9hcmVuYV9pX2RlY2F5KSB7 Ci0JdW5zaWduZWQgbmFyZW5hczsKLQlzaXplX3Qgc3ogPSBzaXplb2YodW5zaWduZWQpOwotCXNp emVfdCBtaWJbM107Ci0Jc2l6ZV90IG1pYmxlbiA9IDM7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3Rs KCJhcmVuYS4wLmRlY2F5IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVj dGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMu bmFyZW5hcyIsICh2b2lkICopJm5hcmVuYXMsICZzeiwgTlVMTCwgMCksCi0JICAgIDAsICJVbmV4 cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21p YigiYXJlbmEuMC5kZWNheSIsIG1pYiwgJm1pYmxlbiksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1h bGxjdGxuYW1ldG9taWIoKSBmYWlsdXJlIik7Ci0JbWliWzFdID0gbmFyZW5hczsKLQlleHBlY3Rf ZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAot CSAgICAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7Ci0KLQltaWJbMV0gPSBN QUxMQ1RMX0FSRU5BU19BTEw7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVu LCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWli KCkgZmFpbHVyZSIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2FyZW5hX2lfZHNz KSB7Ci0JY29uc3QgY2hhciAqZHNzX3ByZWNfb2xkLCAqZHNzX3ByZWNfbmV3OwotCXNpemVfdCBz eiA9IHNpemVvZihkc3NfcHJlY19vbGQpOwotCXNpemVfdCBtaWJbM107Ci0Jc2l6ZV90IG1pYmxl bjsKLQotCW1pYmxlbiA9IHNpemVvZihtaWIpL3NpemVvZihzaXplX3QpOwotCWV4cGVjdF9kX2Vx KG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAuZHNzIiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGVycm9yIik7Ci0KLQlkc3NfcHJlY19uZXcg PSAiZGlzYWJsZWQiOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZv aWQgKikmZHNzX3ByZWNfb2xkLCAmc3osCi0JICAgICh2b2lkICopJmRzc19wcmVjX25ldywgc2l6 ZW9mKGRzc19wcmVjX25ldykpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVy ZSIpOwotCWV4cGVjdF9zdHJfbmUoZHNzX3ByZWNfb2xkLCAicHJpbWFyeSIsCi0JICAgICJVbmV4 cGVjdGVkIGRlZmF1bHQgZm9yIGRzcyBwcmVjZWRlbmNlIik7Ci0KLQlleHBlY3RfZF9lcShtYWxs Y3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJmRzc19wcmVjX25ldywgJnN6LAotCSAgICAo dm9pZCAqKSZkc3NfcHJlY19vbGQsIHNpemVvZihkc3NfcHJlY19vbGQpKSwgMCwKLQkgICAgIlVu ZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1p YihtaWIsIG1pYmxlbiwgKHZvaWQgKikmZHNzX3ByZWNfb2xkLCAmc3osIE5VTEwsCi0JICAgIDAp LCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF9zdHJfbmUoZHNz X3ByZWNfb2xkLCAicHJpbWFyeSIsCi0JICAgICJVbmV4cGVjdGVkIHZhbHVlIGZvciBkc3MgcHJl Y2VkZW5jZSIpOwotCi0JbWliWzFdID0gbmFyZW5hc190b3RhbF9nZXQoKTsKLQlkc3NfcHJlY19u ZXcgPSAiZGlzYWJsZWQiOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwg KHZvaWQgKikmZHNzX3ByZWNfb2xkLCAmc3osCi0JICAgICh2b2lkICopJmRzc19wcmVjX25ldywg c2l6ZW9mKGRzc19wcmVjX25ldykpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFp bHVyZSIpOwotCWV4cGVjdF9zdHJfbmUoZHNzX3ByZWNfb2xkLCAicHJpbWFyeSIsCi0JICAgICJV bmV4cGVjdGVkIGRlZmF1bHQgZm9yIGRzcyBwcmVjZWRlbmNlIik7Ci0KLQlleHBlY3RfZF9lcSht YWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJmRzc19wcmVjX25ldywgJnN6LAotCSAg ICAodm9pZCAqKSZkc3NfcHJlY19vbGQsIHNpemVvZihkc3NfcHJlY19uZXcpKSwgMCwKLQkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGxi eW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmZHNzX3ByZWNfb2xkLCAmc3osIE5VTEwsCi0JICAg IDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF9zdHJfbmUo ZHNzX3ByZWNfb2xkLCAicHJpbWFyeSIsCi0JICAgICJVbmV4cGVjdGVkIHZhbHVlIGZvciBkc3Mg cHJlY2VkZW5jZSIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2FyZW5hX2lfcmV0 YWluX2dyb3dfbGltaXQpIHsKLQlzaXplX3Qgb2xkX2xpbWl0LCBuZXdfbGltaXQsIGRlZmF1bHRf bGltaXQ7Ci0Jc2l6ZV90IG1pYlszXTsKLQlzaXplX3QgbWlibGVuOwotCi0JYm9vbCByZXRhaW5f ZW5hYmxlZDsKLQlzaXplX3Qgc3ogPSBzaXplb2YocmV0YWluX2VuYWJsZWQpOwotCWV4cGVjdF9k X2VxKG1hbGxjdGwoIm9wdC5yZXRhaW4iLCAmcmV0YWluX2VuYWJsZWQsICZzeiwgTlVMTCwgMCks Ci0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JdGVzdF9za2lwX2lm KCFyZXRhaW5fZW5hYmxlZCk7Ci0KLQlzeiA9IHNpemVvZihkZWZhdWx0X2xpbWl0KTsKLQltaWJs ZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsbmFt ZXRvbWliKCJhcmVuYS4wLnJldGFpbl9ncm93X2xpbWl0IiwgbWliLCAmbWlibGVuKSwKLQkgICAg MCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYigpIGVycm9yIik7Ci0KLQlleHBlY3RfZF9l cShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZkZWZhdWx0X2xpbWl0LCAmc3osIE5VTEwsIDAp LCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF96dV9l cShkZWZhdWx0X2xpbWl0LCBTQ19MQVJHRV9NQVhDTEFTUywKLQkgICAgIlVuZXhwZWN0ZWQgZGVm YXVsdCBmb3IgcmV0YWluX2dyb3dfbGltaXQiKTsKLQotCW5ld19saW1pdCA9IFBBR0UgLSAxOwot CWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgJm5ld19s aW1pdCwKLQkgICAgc2l6ZW9mKG5ld19saW1pdCkpLCBFRkFVTFQsICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBzdWNjZXNzIik7Ci0KLQluZXdfbGltaXQgPSBQQUdFICsgMTsKLQlleHBlY3RfZF9lcSht YWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsICZuZXdfbGltaXQsCi0JICAgIHNp emVvZihuZXdfbGltaXQpKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQll eHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICZvbGRfbGltaXQsICZzeiwgTlVM TCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0JZXhwZWN0 X3p1X2VxKG9sZF9saW1pdCwgUEFHRSwKLQkgICAgIlVuZXhwZWN0ZWQgdmFsdWUgZm9yIHJldGFp bl9ncm93X2xpbWl0Iik7Ci0KLQkvKiBFeHBlY3QgZ3JvdyBsZXNzIHRoYW4gcHNpemUgY2xhc3Mg MTAuICovCi0JbmV3X2xpbWl0ID0gc3pfcGluZDJzeigxMCkgLSAxOwotCWV4cGVjdF9kX2VxKG1h bGxjdGxieW1pYihtaWIsIG1pYmxlbiwgTlVMTCwgTlVMTCwgJm5ld19saW1pdCwKLQkgICAgc2l6 ZW9mKG5ld19saW1pdCkpLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4 cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgJm9sZF9saW1pdCwgJnN6LCBOVUxM LCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlleHBlY3Rf enVfZXEob2xkX2xpbWl0LCBzel9waW5kMnN6KDkpLAotCSAgICAiVW5leHBlY3RlZCB2YWx1ZSBm b3IgcmV0YWluX2dyb3dfbGltaXQiKTsKLQotCS8qIFJlc3RvcmUgdG8gZGVmYXVsdC4gKi8KLQll eHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsICZkZWZhdWx0 X2xpbWl0LAotCSAgICBzaXplb2YoZGVmYXVsdF9saW1pdCkpLCAwLCAiVW5leHBlY3RlZCBtYWxs Y3RsKCkgZmFpbHVyZSIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X2FyZW5hc19k aXJ0eV9kZWNheV9tcykgewotCXNzaXplX3QgZGlydHlfZGVjYXlfbXMsIG9yaWdfZGlydHlfZGVj YXlfbXMsIHByZXZfZGlydHlfZGVjYXlfbXM7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHNzaXplX3Qp OwotCi0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmRpcnR5X2RlY2F5X21zIiwKLQkgICAg KHZvaWQgKikmb3JpZ19kaXJ0eV9kZWNheV9tcywgJnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVu ZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCWRpcnR5X2RlY2F5X21zID0gLTI7Ci0J ZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmRpcnR5X2RlY2F5X21zIiwgTlVMTCwgTlVMTCwK LQkgICAgKHZvaWQgKikmZGlydHlfZGVjYXlfbXMsIHNpemVvZihzc2l6ZV90KSksIEVGQVVMVCwK LQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHN1Y2Nlc3MiKTsKLQotCWRpcnR5X2RlY2F5X21z ID0gMHg3ZmZmZmZmZjsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuZGlydHlfZGVjYXlf bXMiLCBOVUxMLCBOVUxMLAotCSAgICAodm9pZCAqKSZkaXJ0eV9kZWNheV9tcywgc2l6ZW9mKHNz aXplX3QpKSwgMCwKLQkgICAgIkV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlmb3Ig KHByZXZfZGlydHlfZGVjYXlfbXMgPSBkaXJ0eV9kZWNheV9tcywgZGlydHlfZGVjYXlfbXMgPSAt MTsKLQkgICAgZGlydHlfZGVjYXlfbXMgPCAyMDsgcHJldl9kaXJ0eV9kZWNheV9tcyA9IGRpcnR5 X2RlY2F5X21zLAotCSAgICBkaXJ0eV9kZWNheV9tcysrKSB7Ci0JCXNzaXplX3Qgb2xkX2RpcnR5 X2RlY2F5X21zOwotCi0JCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5kaXJ0eV9kZWNheV9t cyIsCi0JCSAgICAodm9pZCAqKSZvbGRfZGlydHlfZGVjYXlfbXMsICZzeiwgKHZvaWQgKikmZGly dHlfZGVjYXlfbXMsCi0JCSAgICBzaXplb2Yoc3NpemVfdCkpLCAwLCAiVW5leHBlY3RlZCBtYWxs Y3RsKCkgZmFpbHVyZSIpOwotCQlleHBlY3RfemRfZXEob2xkX2RpcnR5X2RlY2F5X21zLCBwcmV2 X2RpcnR5X2RlY2F5X21zLAotCQkgICAgIlVuZXhwZWN0ZWQgb2xkIGFyZW5hcy5kaXJ0eV9kZWNh eV9tcyIpOwotCX0KLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9hcmVuYXNfbXV6enlf ZGVjYXlfbXMpIHsKLQlzc2l6ZV90IG11enp5X2RlY2F5X21zLCBvcmlnX211enp5X2RlY2F5X21z LCBwcmV2X211enp5X2RlY2F5X21zOwotCXNpemVfdCBzeiA9IHNpemVvZihzc2l6ZV90KTsKLQot CWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5tdXp6eV9kZWNheV9tcyIsCi0JICAgICh2b2lk ICopJm9yaWdfbXV6enlfZGVjYXlfbXMsICZzeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVj dGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQltdXp6eV9kZWNheV9tcyA9IC0yOwotCWV4cGVj dF9kX2VxKG1hbGxjdGwoImFyZW5hcy5tdXp6eV9kZWNheV9tcyIsIE5VTEwsIE5VTEwsCi0JICAg ICh2b2lkICopJm11enp5X2RlY2F5X21zLCBzaXplb2Yoc3NpemVfdCkpLCBFRkFVTFQsCi0JICAg ICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBzdWNjZXNzIik7Ci0KLQltdXp6eV9kZWNheV9tcyA9IDB4 N2ZmZmZmZmY7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLm11enp5X2RlY2F5X21zIiwg TlVMTCwgTlVMTCwKLQkgICAgKHZvaWQgKikmbXV6enlfZGVjYXlfbXMsIHNpemVvZihzc2l6ZV90 KSksIDAsCi0JICAgICJFeHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCi0JZm9yIChwcmV2 X211enp5X2RlY2F5X21zID0gbXV6enlfZGVjYXlfbXMsIG11enp5X2RlY2F5X21zID0gLTE7Ci0J ICAgIG11enp5X2RlY2F5X21zIDwgMjA7IHByZXZfbXV6enlfZGVjYXlfbXMgPSBtdXp6eV9kZWNh eV9tcywKLQkgICAgbXV6enlfZGVjYXlfbXMrKykgewotCQlzc2l6ZV90IG9sZF9tdXp6eV9kZWNh eV9tczsKLQotCQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubXV6enlfZGVjYXlfbXMiLAot CQkgICAgKHZvaWQgKikmb2xkX211enp5X2RlY2F5X21zLCAmc3osICh2b2lkICopJm11enp5X2Rl Y2F5X21zLAotCQkgICAgc2l6ZW9mKHNzaXplX3QpKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgp IGZhaWx1cmUiKTsKLQkJZXhwZWN0X3pkX2VxKG9sZF9tdXp6eV9kZWNheV9tcywgcHJldl9tdXp6 eV9kZWNheV9tcywKLQkJICAgICJVbmV4cGVjdGVkIG9sZCBhcmVuYXMubXV6enlfZGVjYXlfbXMi KTsKLQl9Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfYXJlbmFzX2NvbnN0YW50cykg ewotI2RlZmluZSBURVNUX0FSRU5BU19DT05TVEFOVCh0LCBuYW1lLCBleHBlY3RlZCkgZG8gewkJ CVwKLQl0IG5hbWU7CQkJCQkJCQlcCi0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHQpOwkJCQkJCVwKLQll eHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMuIiNuYW1lLCAodm9pZCAqKSZuYW1lLCAmc3osIE5V TEwsCVwKLQkgICAgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CQkJXAot CWV4cGVjdF96dV9lcShuYW1lLCBleHBlY3RlZCwgIkluY29ycmVjdCAiI25hbWUiIHNpemUiKTsJ CVwKLX0gd2hpbGUgKDApCi0KLQlURVNUX0FSRU5BU19DT05TVEFOVChzaXplX3QsIHF1YW50dW0s IFFVQU5UVU0pOwotCVRFU1RfQVJFTkFTX0NPTlNUQU5UKHNpemVfdCwgcGFnZSwgUEFHRSk7Ci0J VEVTVF9BUkVOQVNfQ09OU1RBTlQodW5zaWduZWQsIG5iaW5zLCBTQ19OQklOUyk7Ci0JVEVTVF9B UkVOQVNfQ09OU1RBTlQodW5zaWduZWQsIG5sZXh0ZW50cywgU0NfTlNJWkVTIC0gU0NfTkJJTlMp OwotCi0jdW5kZWYgVEVTVF9BUkVOQVNfQ09OU1RBTlQKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVH SU4odGVzdF9hcmVuYXNfYmluX2NvbnN0YW50cykgewotI2RlZmluZSBURVNUX0FSRU5BU19CSU5f Q09OU1RBTlQodCwgbmFtZSwgZXhwZWN0ZWQpIGRvIHsJCVwKLQl0IG5hbWU7CQkJCQkJCQlcCi0J c2l6ZV90IHN6ID0gc2l6ZW9mKHQpOwkJCQkJCVwKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVu YXMuYmluLjAuIiNuYW1lLCAodm9pZCAqKSZuYW1lLCAmc3osCVwKLQkgICAgTlVMTCwgMCksIDAs ICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7CQlcCi0JZXhwZWN0X3p1X2VxKG5hbWUs IGV4cGVjdGVkLCAiSW5jb3JyZWN0ICIjbmFtZSIgc2l6ZSIpOwkJXAotfSB3aGlsZSAoMCkKLQot CVRFU1RfQVJFTkFTX0JJTl9DT05TVEFOVChzaXplX3QsIHNpemUsIGJpbl9pbmZvc1swXS5yZWdf c2l6ZSk7Ci0JVEVTVF9BUkVOQVNfQklOX0NPTlNUQU5UKHVpbnQzMl90LCBucmVncywgYmluX2lu Zm9zWzBdLm5yZWdzKTsKLQlURVNUX0FSRU5BU19CSU5fQ09OU1RBTlQoc2l6ZV90LCBzbGFiX3Np emUsCi0JICAgIGJpbl9pbmZvc1swXS5zbGFiX3NpemUpOwotCVRFU1RfQVJFTkFTX0JJTl9DT05T VEFOVCh1aW50MzJfdCwgbnNoYXJkcywgYmluX2luZm9zWzBdLm5fc2hhcmRzKTsKLQotI3VuZGVm IFRFU1RfQVJFTkFTX0JJTl9DT05TVEFOVAotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0 X2FyZW5hc19sZXh0ZW50X2NvbnN0YW50cykgewotI2RlZmluZSBURVNUX0FSRU5BU19MRVhURU5U X0NPTlNUQU5UKHQsIG5hbWUsIGV4cGVjdGVkKSBkbyB7CQlcCi0JdCBuYW1lOwkJCQkJCQkJXAot CXNpemVfdCBzeiA9IHNpemVvZih0KTsJCQkJCQlcCi0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJl bmFzLmxleHRlbnQuMC4iI25hbWUsICh2b2lkICopJm5hbWUsCVwKLQkgICAgJnN6LCBOVUxMLCAw KSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsJCVwKLQlleHBlY3RfenVfZXEo bmFtZSwgZXhwZWN0ZWQsICJJbmNvcnJlY3QgIiNuYW1lIiBzaXplIik7CQlcCi19IHdoaWxlICgw KQotCi0JVEVTVF9BUkVOQVNfTEVYVEVOVF9DT05TVEFOVChzaXplX3QsIHNpemUsCi0JICAgIFND X0xBUkdFX01JTkNMQVNTKTsKLQotI3VuZGVmIFRFU1RfQVJFTkFTX0xFWFRFTlRfQ09OU1RBTlQK LX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9hcmVuYXNfY3JlYXRlKSB7Ci0JdW5zaWdu ZWQgbmFyZW5hc19iZWZvcmUsIGFyZW5hLCBuYXJlbmFzX2FmdGVyOwotCXNpemVfdCBzeiA9IHNp emVvZih1bnNpZ25lZCk7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmFyZW5hcyIs ICh2b2lkICopJm5hcmVuYXNfYmVmb3JlLCAmc3osCi0JICAgIE5VTEwsIDApLCAwLCAiVW5leHBl Y3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5j cmVhdGUiLCAodm9pZCAqKSZhcmVuYSwgJnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmFy ZW5hcyIsICh2b2lkICopJm5hcmVuYXNfYWZ0ZXIsICZzeiwgTlVMTCwKLQkgICAgMCksIDAsICJV bmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlleHBlY3RfdV9lcShuYXJlbmFzX2Jl Zm9yZSsxLCBuYXJlbmFzX2FmdGVyLAotCSAgICAiVW5leHBlY3RlZCBudW1iZXIgb2YgYXJlbmFz IGJlZm9yZSB2ZXJzdXMgYWZ0ZXIgZXh0ZW5zaW9uIik7Ci0JZXhwZWN0X3VfZXEoYXJlbmEsIG5h cmVuYXNfYWZ0ZXItMSwgIlVuZXhwZWN0ZWQgYXJlbmEgaW5kZXgiKTsKLX0KLVRFU1RfRU5ECi0K LVRFU1RfQkVHSU4odGVzdF9hcmVuYXNfbG9va3VwKSB7Ci0JdW5zaWduZWQgYXJlbmEsIGFyZW5h MTsKLQl2b2lkICpwdHI7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKLQotCWV4cGVj dF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAodm9pZCAqKSZhcmVuYSwgJnN6LCBOVUxM LCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlwdHIgPSBt YWxsb2N4KDQyLCBNQUxMT0NYX0FSRU5BKGFyZW5hKSB8IE1BTExPQ1hfVENBQ0hFX05PTkUpOwot CWV4cGVjdF9wdHJfbm90X251bGwocHRyLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIp OwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5sb29rdXAiLCAmYXJlbmExLCAmc3osICZw dHIsIHNpemVvZihwdHIpKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUi KTsKLQlleHBlY3RfdV9lcShhcmVuYSwgYXJlbmExLCAiVW5leHBlY3RlZCBhcmVuYSBpbmRleCIp OwotCWRhbGxvY3gocHRyLCAwKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9wcm9m X2FjdGl2ZSkgewotCS8qCi0JICogSWYgY29uZmlnX3Byb2YgaXMgb2ZmLCB0aGVuIHRoZSB0ZXN0 IGZvciBwcm9mX2FjdGl2ZSBpbgotCSAqIHRlc3RfbWFsbGN0bF9vcHQgd2FzIGFscmVhZHkgZW5v dWdoLgotCSAqLwotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc2tpcF9pZihv cHRfcHJvZik7Ci0KLQlib29sIGFjdGl2ZSwgb2xkOwotCXNpemVfdCBsZW4gPSBzaXplb2YoYm9v bCk7Ci0KLQlhY3RpdmUgPSB0cnVlOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuYWN0aXZl IiwgTlVMTCwgTlVMTCwgJmFjdGl2ZSwgbGVuKSwgRU5PRU5ULAotCSAgICAiU2V0dGluZyBwcm9m X2FjdGl2ZSB0byB0cnVlIHNob3VsZCBmYWlsIHdoZW4gb3B0X3Byb2YgaXMgb2ZmIik7Ci0Jb2xk ID0gdHJ1ZTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmFjdGl2ZSIsICZvbGQsICZsZW4s ICZhY3RpdmUsIGxlbiksIEVOT0VOVCwKLQkgICAgIlNldHRpbmcgcHJvZl9hY3RpdmUgdG8gdHJ1 ZSBzaG91bGQgZmFpbCB3aGVuIG9wdF9wcm9mIGlzIG9mZiIpOwotCWV4cGVjdF90cnVlKG9sZCwg Im9sZCB2YWx1ZSBzaG91bGQgbm90IGJlIHRvdWNoZWQgd2hlbiBtYWxsY3RsIGZhaWxzIik7Ci0J YWN0aXZlID0gZmFsc2U7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgicHJvZi5hY3RpdmUiLCBOVUxM LCBOVUxMLCAmYWN0aXZlLCBsZW4pLCAwLAotCSAgICAiU2V0dGluZyBwcm9mX2FjdGl2ZSB0byBm YWxzZSBzaG91bGQgc3VjY2VlZCB3aGVuIG9wdF9wcm9mIGlzIG9mZiIpOwotCWV4cGVjdF9kX2Vx KG1hbGxjdGwoInByb2YuYWN0aXZlIiwgJm9sZCwgJmxlbiwgJmFjdGl2ZSwgbGVuKSwgMCwKLQkg ICAgIlNldHRpbmcgcHJvZl9hY3RpdmUgdG8gZmFsc2Ugc2hvdWxkIHN1Y2NlZWQgd2hlbiBvcHRf cHJvZiBpcyBvZmYiKTsKLQlleHBlY3RfZmFsc2Uob2xkLCAicHJvZl9hY3RpdmUgc2hvdWxkIGJl IGZhbHNlIHdoZW4gb3B0X3Byb2YgaXMgb2ZmIik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lO KHRlc3Rfc3RhdHNfYXJlbmFzKSB7Ci0jZGVmaW5lIFRFU1RfU1RBVFNfQVJFTkFTKHQsIG5hbWUp IGRvIHsJCQkJCVwKLQl0IG5hbWU7CQkJCQkJCQlcCi0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHQpOwkJ CQkJCVwKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC4iI25hbWUsICh2b2lk ICopJm5hbWUsICZzeiwJXAotCSAgICBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgp IGZhaWx1cmUiKTsJCVwKLX0gd2hpbGUgKDApCi0KLQlURVNUX1NUQVRTX0FSRU5BUyh1bnNpZ25l ZCwgbnRocmVhZHMpOwotCVRFU1RfU1RBVFNfQVJFTkFTKGNvbnN0IGNoYXIgKiwgZHNzKTsKLQlU RVNUX1NUQVRTX0FSRU5BUyhzc2l6ZV90LCBkaXJ0eV9kZWNheV9tcyk7Ci0JVEVTVF9TVEFUU19B UkVOQVMoc3NpemVfdCwgbXV6enlfZGVjYXlfbXMpOwotCVRFU1RfU1RBVFNfQVJFTkFTKHNpemVf dCwgcGFjdGl2ZSk7Ci0JVEVTVF9TVEFUU19BUkVOQVMoc2l6ZV90LCBwZGlydHkpOwotCi0jdW5k ZWYgVEVTVF9TVEFUU19BUkVOQVMKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1hbGxvY19o b29rKHZvaWQgKmV4dHJhLCBVTlVTRUQgaG9va19hbGxvY190IHR5cGUsIFVOVVNFRCB2b2lkICpy ZXN1bHQsCi0gICAgVU5VU0VEIHVpbnRwdHJfdCByZXN1bHRfcmF3LCBVTlVTRUQgdWludHB0cl90 IGFyZ3NfcmF3WzNdKSB7Ci0JKihib29sICopZXh0cmEgPSB0cnVlOwotfQotCi1zdGF0aWMgdm9p ZAotZGFsbG9jX2hvb2sodm9pZCAqZXh0cmEsIFVOVVNFRCBob29rX2RhbGxvY190IHR5cGUsCi0g ICAgVU5VU0VEIHZvaWQgKmFkZHJlc3MsIFVOVVNFRCB1aW50cHRyX3QgYXJnc19yYXdbM10pIHsK LQkqKGJvb2wgKilleHRyYSA9IHRydWU7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9ob29rcykgewot CWJvb2wgaG9va19jYWxsZWQgPSBmYWxzZTsKLQlob29rc190IGhvb2tzID0geyZhbGxvY19ob29r LCAmZGFsbG9jX2hvb2ssIE5VTEwsICZob29rX2NhbGxlZH07Ci0Jdm9pZCAqaGFuZGxlID0gTlVM TDsKLQlzaXplX3Qgc3ogPSBzaXplb2YoaGFuZGxlKTsKLQlpbnQgZXJyID0gbWFsbGN0bCgiZXhw ZXJpbWVudGFsLmhvb2tzLmluc3RhbGwiLCAmaGFuZGxlLCAmc3osICZob29rcywKLQkgICAgc2l6 ZW9mKGhvb2tzKSk7Ci0JZXhwZWN0X2RfZXEoZXJyLCAwLCAiSG9vayBpbnN0YWxsYXRpb24gZmFp bGVkIik7Ci0JZXhwZWN0X3B0cl9uZShoYW5kbGUsIE5VTEwsICJIb29rIGluc3RhbGxhdGlvbiBn YXZlIG51bGwgaGFuZGxlIik7Ci0Jdm9pZCAqcHRyID0gbWFsbG9jeCgxLCAwKTsKLQlleHBlY3Rf dHJ1ZShob29rX2NhbGxlZCwgIkFsbG9jIGhvb2sgbm90IGNhbGxlZCIpOwotCWhvb2tfY2FsbGVk ID0gZmFsc2U7Ci0JZnJlZShwdHIpOwotCWV4cGVjdF90cnVlKGhvb2tfY2FsbGVkLCAiRnJlZSBo b29rIG5vdCBjYWxsZWQiKTsKLQotCWVyciA9IG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5y ZW1vdmUiLCBOVUxMLCBOVUxMLCAmaGFuZGxlLAotCSAgICBzaXplb2YoaGFuZGxlKSk7Ci0JZXhw ZWN0X2RfZXEoZXJyLCAwLCAiSG9vayByZW1vdmFsIGZhaWxlZCIpOwotCWhvb2tfY2FsbGVkID0g ZmFsc2U7Ci0JcHRyID0gbWFsbG9jeCgxLCAwKTsKLQlmcmVlKHB0cik7Ci0JZXhwZWN0X2ZhbHNl KGhvb2tfY2FsbGVkLCAiSG9vayBjYWxsZWQgYWZ0ZXIgcmVtb3ZhbCIpOwotfQotVEVTVF9FTkQK LQotVEVTVF9CRUdJTih0ZXN0X2hvb2tzX2V4aGF1c3Rpb24pIHsKLQlib29sIGhvb2tfY2FsbGVk ID0gZmFsc2U7Ci0JaG9va3NfdCBob29rcyA9IHsmYWxsb2NfaG9vaywgJmRhbGxvY19ob29rLCBO VUxMLCAmaG9va19jYWxsZWR9OwotCi0Jdm9pZCAqaGFuZGxlOwotCXZvaWQgKmhhbmRsZXNbSE9P S19NQVhdOwotCXNpemVfdCBzeiA9IHNpemVvZihoYW5kbGUpOwotCWludCBlcnI7Ci0JZm9yIChp bnQgaSA9IDA7IGkgPCBIT09LX01BWDsgaSsrKSB7Ci0JCWhhbmRsZSA9IE5VTEw7Ci0JCWVyciA9 IG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5pbnN0YWxsIiwgJmhhbmRsZSwgJnN6LAotCQkg ICAgJmhvb2tzLCBzaXplb2YoaG9va3MpKTsKLQkJZXhwZWN0X2RfZXEoZXJyLCAwLCAiRXJyb3Ig aW5zdGFsbGF0aW9uIGhvb2tzIik7Ci0JCWV4cGVjdF9wdHJfbmUoaGFuZGxlLCBOVUxMLCAiR290 IE5VTEwgaGFuZGxlIik7Ci0JCWhhbmRsZXNbaV0gPSBoYW5kbGU7Ci0JfQotCWVyciA9IG1hbGxj dGwoImV4cGVyaW1lbnRhbC5ob29rcy5pbnN0YWxsIiwgJmhhbmRsZSwgJnN6LCAmaG9va3MsCi0J ICAgIHNpemVvZihob29rcykpOwotCWV4cGVjdF9kX2VxKGVyciwgRUFHQUlOLCAiU2hvdWxkIGhh dmUgZmFpbGVkIGhvb2sgaW5zdGFsbGF0aW9uIik7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBIT09L X01BWDsgaSsrKSB7Ci0JCWVyciA9IG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5yZW1vdmUi LCBOVUxMLCBOVUxMLAotCQkgICAgJmhhbmRsZXNbaV0sIHNpemVvZihoYW5kbGVzW2ldKSk7Ci0J CWV4cGVjdF9kX2VxKGVyciwgMCwgIkhvb2sgcmVtb3ZhbCBmYWlsZWQiKTsKLQl9Ci0JLyogSW5z ZXJ0aW9uIGZhaWxlZCwgYnV0IHRoZW4gd2UgcmVtb3ZlZCBzb21lOyBpdCBzaG91bGQgd29yayBu b3cuICovCi0JaGFuZGxlID0gTlVMTDsKLQllcnIgPSBtYWxsY3RsKCJleHBlcmltZW50YWwuaG9v a3MuaW5zdGFsbCIsICZoYW5kbGUsICZzeiwgJmhvb2tzLAotCSAgICBzaXplb2YoaG9va3MpKTsK LQlleHBlY3RfZF9lcShlcnIsIDAsICJIb29rIGluc2VydGlvbiBmYWlsZWQiKTsKLQlleHBlY3Rf cHRyX25lKGhhbmRsZSwgTlVMTCwgIkdvdCBOVUxMIGhhbmRsZSIpOwotCWVyciA9IG1hbGxjdGwo ImV4cGVyaW1lbnRhbC5ob29rcy5yZW1vdmUiLCBOVUxMLCBOVUxMLCAmaGFuZGxlLAotCSAgICBz aXplb2YoaGFuZGxlKSk7Ci0JZXhwZWN0X2RfZXEoZXJyLCAwLCAiSG9vayByZW1vdmFsIGZhaWxl ZCIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3RocmVhZF9pZGxlKSB7Ci0JLyoK LQkgKiBXZSdyZSBjaGVhdGluZyBhIGxpdHRsZSBiaXQgaW4gdGhpcyB0ZXN0LCBhbmQgaW5mZXJy aW5nIHRoaW5ncyBhYm91dAotCSAqIGltcGxlbWVudGF0aW9uIGludGVybmFscyAobGlrZSB0Y2Fj aGUgZGV0YWlscykuICBXZSBoYXZlIHRvOwotCSAqIHRocmVhZC5pZGxlIGhhcyBubyBndWFyYW50 ZWVkIGVmZmVjdHMuICBXZSBuZWVkIHN0YXRzIHRvIG1ha2UgdGhlc2UKLQkgKiBpbmZlcmVuY2Vz LgotCSAqLwotCXRlc3Rfc2tpcF9pZighY29uZmlnX3N0YXRzKTsKLQotCWludCBlcnI7Ci0Jc2l6 ZV90IHN6OwotCXNpemVfdCBtaWJsZW47Ci0KLQlib29sIHRjYWNoZV9lbmFibGVkID0gZmFsc2U7 Ci0Jc3ogPSBzaXplb2YodGNhY2hlX2VuYWJsZWQpOwotCWVyciA9IG1hbGxjdGwoInRocmVhZC50 Y2FjaGUuZW5hYmxlZCIsICZ0Y2FjaGVfZW5hYmxlZCwgJnN6LCBOVUxMLCAwKTsKLQlleHBlY3Rf ZF9lcShlcnIsIDAsICIiKTsKLQl0ZXN0X3NraXBfaWYoIXRjYWNoZV9lbmFibGVkKTsKLQotCXNp emVfdCB0Y2FjaGVfbWF4OwotCXN6ID0gc2l6ZW9mKHRjYWNoZV9tYXgpOwotCWVyciA9IG1hbGxj dGwoImFyZW5hcy50Y2FjaGVfbWF4IiwgJnRjYWNoZV9tYXgsICZzeiwgTlVMTCwgMCk7Ci0JZXhw ZWN0X2RfZXEoZXJyLCAwLCAiIik7Ci0JdGVzdF9za2lwX2lmKHRjYWNoZV9tYXggPT0gMCk7Ci0K LQl1bnNpZ25lZCBhcmVuYV9pbmQ7Ci0Jc3ogPSBzaXplb2YoYXJlbmFfaW5kKTsKLQllcnIgPSBt YWxsY3RsKCJ0aHJlYWQuYXJlbmEiLCAmYXJlbmFfaW5kLCAmc3osIE5VTEwsIDApOwotCWV4cGVj dF9kX2VxKGVyciwgMCwgIiIpOwotCi0JLyogV2UncmUgZ29pbmcgdG8gZG8gYW4gYWxsb2NhdGlv biBvZiBzaXplIDEsIHdoaWNoIHdlIGtub3cgaXMgc21hbGwuICovCi0Jc2l6ZV90IG1pYls1XTsK LQltaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKLQllcnIgPSBtYWxsY3RsbmFt ZXRvbWliKCJzdGF0cy5hcmVuYXMuMC5zbWFsbC5uZGFsbG9jIiwgbWliLCAmbWlibGVuKTsKLQll eHBlY3RfZF9lcShlcnIsIDAsICIiKTsKLQltaWJbMl0gPSBhcmVuYV9pbmQ7Ci0KLQkvKgotCSAq IFRoaXMgYWxsb2MgYW5kIGRhbGxvYyBzaG91bGQgbGVhdmUgc29tZXRoaW5nIGluIHRoZSB0Y2Fj aGUsIGluIGEKLQkgKiBzbWFsbCBzaXplJ3MgY2FjaGUgYmluLgotCSAqLwotCXZvaWQgKnB0ciA9 IG1hbGxvY3goMSwgMCk7Ci0JZGFsbG9jeChwdHIsIDApOwotCi0JdWludDY0X3QgZXBvY2g7Ci0J ZXJyID0gbWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAmZXBvY2gsIHNpemVvZihlcG9jaCkp OwotCWV4cGVjdF9kX2VxKGVyciwgMCwgIiIpOwotCi0JdWludDY0X3Qgc21hbGxfZGFsbG9jX3By ZV9pZGxlOwotCXN6ID0gc2l6ZW9mKHNtYWxsX2RhbGxvY19wcmVfaWRsZSk7Ci0JZXJyID0gbWFs bGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmc21hbGxfZGFsbG9jX3ByZV9pZGxlLCAmc3osIE5VTEws IDApOwotCWV4cGVjdF9kX2VxKGVyciwgMCwgIiIpOwotCi0JZXJyID0gbWFsbGN0bCgidGhyZWFk LmlkbGUiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKLQlleHBlY3RfZF9lcShlcnIsIDAsICIiKTsK LQotCWVyciA9IG1hbGxjdGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgJmVwb2NoLCBzaXplb2YoZXBv Y2gpKTsKLQlleHBlY3RfZF9lcShlcnIsIDAsICIiKTsKLQotCXVpbnQ2NF90IHNtYWxsX2RhbGxv Y19wb3N0X2lkbGU7Ci0Jc3ogPSBzaXplb2Yoc21hbGxfZGFsbG9jX3Bvc3RfaWRsZSk7Ci0JZXJy ID0gbWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAmc21hbGxfZGFsbG9jX3Bvc3RfaWRsZSwgJnN6 LCBOVUxMLCAwKTsKLQlleHBlY3RfZF9lcShlcnIsIDAsICIiKTsKLQotCWV4cGVjdF91NjRfbHQo c21hbGxfZGFsbG9jX3ByZV9pZGxlLCBzbWFsbF9kYWxsb2NfcG9zdF9pZGxlLAotCSAgICAiUHVy Z2UgZGlkbid0IGZsdXNoIHRoZSB0Y2FjaGUiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4o dGVzdF90aHJlYWRfcGVhaykgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3N0YXRzKTsKLQotCS8q Ci0JICogV2UgZG9uJ3QgY29tbWl0IHRvIGFueSBzdGFibGUgYW1vdW50IG9mIGFjY3VyYWN5IGZv ciBwZWFrIHRyYWNraW5nCi0JICogKGluIHByYWN0aWNlLCB3aGVuIHRoaXMgdGVzdCB3YXMgd3Jp dHRlbiwgd2UgbWFkZSBzdXJlIHRvIGJlIHdpdGhpbgotCSAqIDEwMGspLiAgQnV0IDEwTUIgaXMg YmlnIGZvciBtb3JlIG9yIGxlc3MgYW55IGRlZmluaXRpb24gb2YgYmlnLgotCSAqLwotCXNpemVf dCBiaWdfc2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7Ci0Jc2l6ZV90IHNtYWxsX3NpemUgPSAyNTY7 Ci0KLQl2b2lkICpwdHI7Ci0JaW50IGVycjsKLQlzaXplX3Qgc3o7Ci0JdWludDY0X3QgcGVhazsK LQlzeiA9IHNpemVvZih1aW50NjRfdCk7Ci0KLQllcnIgPSBtYWxsY3RsKCJ0aHJlYWQucGVhay5y ZXNldCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApOwotCWV4cGVjdF9kX2VxKGVyciwgMCwgIiIpOwot CXB0ciA9IG1hbGxvY3goU0NfU01BTExfTUFYQ0xBU1MsIDApOwotCWVyciA9IG1hbGxjdGwoInRo cmVhZC5wZWFrLnJlYWQiLCAmcGVhaywgJnN6LCBOVUxMLCAwKTsKLQlleHBlY3RfZF9lcShlcnIs IDAsICIiKTsKLQlleHBlY3RfdTY0X2VxKHBlYWssIFNDX1NNQUxMX01BWENMQVNTLCAiTWlzc2Vk IGFuIHVwZGF0ZSIpOwotCWZyZWUocHRyKTsKLQllcnIgPSBtYWxsY3RsKCJ0aHJlYWQucGVhay5y ZWFkIiwgJnBlYWssICZzeiwgTlVMTCwgMCk7Ci0JZXhwZWN0X2RfZXEoZXJyLCAwLCAiIik7Ci0J ZXhwZWN0X3U2NF9lcShwZWFrLCBTQ19TTUFMTF9NQVhDTEFTUywgIkZyZWVpbmcgY2hhbmdlZCBw ZWFrIik7Ci0JcHRyID0gbWFsbG9jeChiaWdfc2l6ZSwgMCk7Ci0JZnJlZShwdHIpOwotCS8qCi0J ICogVGhlIHBlYWsgc2hvdWxkIGhhdmUgaGl0IGJpZ19zaXplIGluIHRoZSBsYXN0IHR3byBsaW5l cywgZXZlbiB0aG91Z2gKLQkgKiB0aGUgbmV0IGFsbG9jYXRlZCBieXRlcyBoYXMgc2luY2UgZHJv cHBlZCBiYWNrIGRvd24gdG8gemVyby4gIFdlCi0JICogc2hvdWxkIGhhdmUgbm90aWNlZCB0aGUg cGVhayBjaGFuZ2Ugd2l0aG91dCBoYXZpbmcgZG93biBhbnkgbWFsbGN0bAotCSAqIGNhbGxzIHdo aWxlIG5ldCBhbGxvY2F0ZWQgYnl0ZXMgd2FzIGhpZ2guCi0JICovCi0JZXJyID0gbWFsbGN0bCgi dGhyZWFkLnBlYWsucmVhZCIsICZwZWFrLCAmc3osIE5VTEwsIDApOwotCWV4cGVjdF9kX2VxKGVy ciwgMCwgIiIpOwotCWV4cGVjdF91NjRfZ2UocGVhaywgYmlnX3NpemUsICJNaXNzZWQgYSBwZWFr IGNoYW5nZS4iKTsKLQotCS8qIEFsbG9jYXRlIGJpZ19zaXplLCBidXQgdXNpbmcgc21hbGwgYWxs b2NhdGlvbnMuICovCi0Jc2l6ZV90IG5hbGxvY3MgPSBiaWdfc2l6ZSAvIHNtYWxsX3NpemU7Ci0J dm9pZCAqKnB0cnMgPSBjYWxsb2MobmFsbG9jcywgc2l6ZW9mKHZvaWQgKikpOwotCWVyciA9IG1h bGxjdGwoInRocmVhZC5wZWFrLnJlc2V0IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci0JZXhwZWN0 X2RfZXEoZXJyLCAwLCAiIik7Ci0JZXJyID0gbWFsbGN0bCgidGhyZWFkLnBlYWsucmVhZCIsICZw ZWFrLCAmc3osIE5VTEwsIDApOwotCWV4cGVjdF9kX2VxKGVyciwgMCwgIiIpOwotCWV4cGVjdF91 NjRfZXEoMCwgcGVhaywgIk1pc3NlZCBhIHJlc2V0LiIpOwotCWZvciAoc2l6ZV90IGkgPSAwOyBp IDwgbmFsbG9jczsgaSsrKSB7Ci0JCXB0cnNbaV0gPSBtYWxsb2N4KHNtYWxsX3NpemUsIDApOwot CX0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbGxvY3M7IGkrKykgewotCQlmcmVlKHB0cnNb aV0pOwotCX0KLQllcnIgPSBtYWxsY3RsKCJ0aHJlYWQucGVhay5yZWFkIiwgJnBlYWssICZzeiwg TlVMTCwgMCk7Ci0JZXhwZWN0X2RfZXEoZXJyLCAwLCAiIik7Ci0JLyoKLQkgKiBXZSBkb24ndCBn dWFyYW50ZWUgZXhhY3RuZXNzOyBtYWtlIHN1cmUgd2UncmUgd2l0aGluIDEwJSBvZiB0aGUgcGVh aywKLQkgKiB0aG91Z2guCi0JICovCi0JZXhwZWN0X3U2NF9nZShwZWFrLCBuYWxsb2N4KHNtYWxs X3NpemUsIDApICogbmFsbG9jcyAqIDkgLyAxMCwKLQkgICAgIk1pc3NlZCBzb21lIHBlYWsgY2hh bmdlcy4iKTsKLQlleHBlY3RfdTY0X2xlKHBlYWssIG5hbGxvY3goc21hbGxfc2l6ZSwgMCkgKiBu YWxsb2NzICogMTEgLyAxMCwKLQkgICAgIk92ZXJjb3VudGVkIHBlYWsgY2hhbmdlcy4iKTsKLQlm cmVlKHB0cnMpOwotfQotVEVTVF9FTkQKLQotdHlwZWRlZiBzdHJ1Y3QgYWN0aXZpdHlfdGVzdF9k YXRhX3MgYWN0aXZpdHlfdGVzdF9kYXRhX3Q7Ci1zdHJ1Y3QgYWN0aXZpdHlfdGVzdF9kYXRhX3Mg ewotCXVpbnQ2NF90IG9idGFpbmVkX2FsbG9jOwotCXVpbnQ2NF90IG9idGFpbmVkX2RhbGxvYzsK LX07Ci0KLXN0YXRpYyB2b2lkCi1hY3Rpdml0eV90ZXN0X2NhbGxiYWNrKHZvaWQgKnVjdHgsIHVp bnQ2NF90IGFsbG9jLCB1aW50NjRfdCBkYWxsb2MpIHsKLQlhY3Rpdml0eV90ZXN0X2RhdGFfdCAq dGVzdF9kYXRhID0gKGFjdGl2aXR5X3Rlc3RfZGF0YV90ICopdWN0eDsKLQl0ZXN0X2RhdGEtPm9i dGFpbmVkX2FsbG9jID0gYWxsb2M7Ci0JdGVzdF9kYXRhLT5vYnRhaW5lZF9kYWxsb2MgPSBkYWxs b2M7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF90aHJlYWRfYWN0aXZpdHlfY2FsbGJhY2spIHsKLQl0 ZXN0X3NraXBfaWYoIWNvbmZpZ19zdGF0cyk7Ci0KLQljb25zdCBzaXplX3QgYmlnX3NpemUgPSAx MCAqIDEwMjQgKiAxMDI0OwotCXZvaWQgKnB0cjsKLQlpbnQgZXJyOwotCXNpemVfdCBzejsKLQot CXVpbnQ2NF90ICphbGxvY2F0ZWRwOwotCXVpbnQ2NF90ICpkZWFsbG9jYXRlZHA7Ci0Jc3ogPSBz aXplb2YoYWxsb2NhdGVkcCk7Ci0JZXJyID0gbWFsbGN0bCgidGhyZWFkLmFsbG9jYXRlZHAiLCAm YWxsb2NhdGVkcCwgJnN6LCBOVUxMLCAwKTsKLQlhc3NlcnRfZF9lcSgwLCBlcnIsICIiKTsKLQll cnIgPSBtYWxsY3RsKCJ0aHJlYWQuZGVhbGxvY2F0ZWRwIiwgJmRlYWxsb2NhdGVkcCwgJnN6LCBO VUxMLCAwKTsKLQlhc3NlcnRfZF9lcSgwLCBlcnIsICIiKTsKLQotCWFjdGl2aXR5X2NhbGxiYWNr X3RodW5rX3Qgb2xkX3RodW5rID0geyhhY3Rpdml0eV9jYWxsYmFja190KTExMSwKLQkJKHZvaWQg KikyMjJ9OwotCi0JYWN0aXZpdHlfdGVzdF9kYXRhX3QgdGVzdF9kYXRhID0gezMzMywgNDQ0fTsK LQlhY3Rpdml0eV9jYWxsYmFja190aHVua190IG5ld190aHVuayA9Ci0JICAgIHsmYWN0aXZpdHlf dGVzdF9jYWxsYmFjaywgJnRlc3RfZGF0YX07Ci0KLQlzeiA9IHNpemVvZihvbGRfdGh1bmspOwot CWVyciA9IG1hbGxjdGwoImV4cGVyaW1lbnRhbC50aHJlYWQuYWN0aXZpdHlfY2FsbGJhY2siLCAm b2xkX3RodW5rLCAmc3osCi0JICAgICZuZXdfdGh1bmssIHNpemVvZihuZXdfdGh1bmspKTsKLQlh c3NlcnRfZF9lcSgwLCBlcnIsICIiKTsKLQotCWV4cGVjdF90cnVlKG9sZF90aHVuay5jYWxsYmFj ayA9PSBOVUxMLCAiQ2FsbGJhY2sgYWxyZWFkeSBpbnN0YWxsZWQiKTsKLQlleHBlY3RfdHJ1ZShv bGRfdGh1bmsudWN0eCA9PSBOVUxMLCAiQ2FsbGJhY2sgZGF0YSBhbHJlYWR5IGluc3RhbGxlZCIp OwotCi0JcHRyID0gbWFsbG9jeChiaWdfc2l6ZSwgMCk7Ci0JZXhwZWN0X3U2NF9lcSh0ZXN0X2Rh dGEub2J0YWluZWRfYWxsb2MsICphbGxvY2F0ZWRwLCAiIik7Ci0JZXhwZWN0X3U2NF9lcSh0ZXN0 X2RhdGEub2J0YWluZWRfZGFsbG9jLCAqZGVhbGxvY2F0ZWRwLCAiIik7Ci0KLQlmcmVlKHB0cik7 Ci0JZXhwZWN0X3U2NF9lcSh0ZXN0X2RhdGEub2J0YWluZWRfYWxsb2MsICphbGxvY2F0ZWRwLCAi Iik7Ci0JZXhwZWN0X3U2NF9lcSh0ZXN0X2RhdGEub2J0YWluZWRfZGFsbG9jLCAqZGVhbGxvY2F0 ZWRwLCAiIik7Ci0KLQlzeiA9IHNpemVvZihvbGRfdGh1bmspOwotCW5ld190aHVuayA9IChhY3Rp dml0eV9jYWxsYmFja190aHVua190KXsgTlVMTCwgTlVMTCB9OwotCWVyciA9IG1hbGxjdGwoImV4 cGVyaW1lbnRhbC50aHJlYWQuYWN0aXZpdHlfY2FsbGJhY2siLCAmb2xkX3RodW5rLCAmc3osCi0J ICAgICZuZXdfdGh1bmssIHNpemVvZihuZXdfdGh1bmspKTsKLQlhc3NlcnRfZF9lcSgwLCBlcnIs ICIiKTsKLQotCWV4cGVjdF90cnVlKG9sZF90aHVuay5jYWxsYmFjayA9PSAmYWN0aXZpdHlfdGVz dF9jYWxsYmFjaywgIiIpOwotCWV4cGVjdF90cnVlKG9sZF90aHVuay51Y3R4ID09ICZ0ZXN0X2Rh dGEsICIiKTsKLQotCS8qIEluc2VydGluZyBOVUxMIHNob3VsZCBoYXZlIHR1cm5lZCBvZmYgdHJh Y2tpbmcuICovCi0JdGVzdF9kYXRhLm9idGFpbmVkX2FsbG9jID0gMzMzOwotCXRlc3RfZGF0YS5v YnRhaW5lZF9kYWxsb2MgPSA0NDQ7Ci0JcHRyID0gbWFsbG9jeChiaWdfc2l6ZSwgMCk7Ci0JZnJl ZShwdHIpOwotCWV4cGVjdF91NjRfZXEoMzMzLCB0ZXN0X2RhdGEub2J0YWluZWRfYWxsb2MsICIi KTsKLQlleHBlY3RfdTY0X2VxKDQ0NCwgdGVzdF9kYXRhLm9idGFpbmVkX2RhbGxvYywgIiIpOwot fQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVz dF9tYWxsY3RsX2Vycm9ycywKLQkgICAgdGVzdF9tYWxsY3RsbmFtZXRvbWliX2Vycm9ycywKLQkg ICAgdGVzdF9tYWxsY3RsYnltaWJfZXJyb3JzLAotCSAgICB0ZXN0X21hbGxjdGxfcmVhZF93cml0 ZSwKLQkgICAgdGVzdF9tYWxsY3RsbmFtZXRvbWliX3Nob3J0X21pYiwKLQkgICAgdGVzdF9tYWxs Y3RsbmFtZXRvbWliX3Nob3J0X25hbWUsCi0JICAgIHRlc3RfbWFsbGN0bG1pYm5hbWV0b21pYiwK LQkgICAgdGVzdF9tYWxsY3RsYnltaWJuYW1lLAotCSAgICB0ZXN0X21hbGxjdGxfY29uZmlnLAot CSAgICB0ZXN0X21hbGxjdGxfb3B0LAotCSAgICB0ZXN0X21hbnBhZ2VfZXhhbXBsZSwKLQkgICAg dGVzdF90Y2FjaGVfbm9uZSwKLQkgICAgdGVzdF90Y2FjaGUsCi0JICAgIHRlc3RfdGhyZWFkX2Fy ZW5hLAotCSAgICB0ZXN0X2FyZW5hX2lfaW5pdGlhbGl6ZWQsCi0JICAgIHRlc3RfYXJlbmFfaV9k aXJ0eV9kZWNheV9tcywKLQkgICAgdGVzdF9hcmVuYV9pX211enp5X2RlY2F5X21zLAotCSAgICB0 ZXN0X2FyZW5hX2lfcHVyZ2UsCi0JICAgIHRlc3RfYXJlbmFfaV9kZWNheSwKLQkgICAgdGVzdF9h cmVuYV9pX2RzcywKLQkgICAgdGVzdF9hcmVuYV9pX3JldGFpbl9ncm93X2xpbWl0LAotCSAgICB0 ZXN0X2FyZW5hc19kaXJ0eV9kZWNheV9tcywKLQkgICAgdGVzdF9hcmVuYXNfbXV6enlfZGVjYXlf bXMsCi0JICAgIHRlc3RfYXJlbmFzX2NvbnN0YW50cywKLQkgICAgdGVzdF9hcmVuYXNfYmluX2Nv bnN0YW50cywKLQkgICAgdGVzdF9hcmVuYXNfbGV4dGVudF9jb25zdGFudHMsCi0JICAgIHRlc3Rf YXJlbmFzX2NyZWF0ZSwKLQkgICAgdGVzdF9hcmVuYXNfbG9va3VwLAotCSAgICB0ZXN0X3Byb2Zf YWN0aXZlLAotCSAgICB0ZXN0X3N0YXRzX2FyZW5hcywKLQkgICAgdGVzdF9ob29rcywKLQkgICAg dGVzdF9ob29rc19leGhhdXN0aW9uLAotCSAgICB0ZXN0X3RocmVhZF9pZGxlLAotCSAgICB0ZXN0 X3RocmVhZF9wZWFrLAotCSAgICB0ZXN0X3RocmVhZF9hY3Rpdml0eV9jYWxsYmFjayk7Ci19Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L21hbGxvY19jb25mXzIuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9tYWxsb2NfY29uZl8yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGVjZmE0OTkuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L21hbGxvY19jb25mXzIuYworKysgL2Rldi9udWxsCkBAIC0xLDI5 ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotY29uc3QgY2hhciAq bWFsbG9jX2NvbmYgPSAiZGlydHlfZGVjYXlfbXM6MTAwMCI7Ci1jb25zdCBjaGFyICptYWxsb2Nf Y29uZl8yX2NvbmZfaGFyZGVyID0gImRpcnR5X2RlY2F5X21zOjEyMzQiOwotCi1URVNUX0JFR0lO KHRlc3RfbWFsbG9jX2NvbmZfMikgewotI2lmZGVmIF9XSU4zMgotCWJvb2wgd2luZG93cyA9IHRy dWU7Ci0jZWxzZQotCWJvb2wgd2luZG93cyA9IGZhbHNlOwotI2VuZGlmCi0JLyogV2luZG93cyBk b2Vzbid0IHN1cHBvcnQgd2VhayBzeW1ib2wgbGlua2VyIHRyaWNrZXJ5LiAqLwotCXRlc3Rfc2tp cF9pZih3aW5kb3dzKTsKLQotCXNzaXplX3QgZGlydHlfZGVjYXlfbXM7Ci0Jc2l6ZV90IHN6ID0g c2l6ZW9mKGRpcnR5X2RlY2F5X21zKTsKLQotCWludCBlcnIgPSBtYWxsY3RsKCJvcHQuZGlydHlf ZGVjYXlfbXMiLCAmZGlydHlfZGVjYXlfbXMsICZzeiwgTlVMTCwgMCk7Ci0JYXNzZXJ0X2RfZXEo ZXJyLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKLQlleHBlY3RfemRfZXEoZGly dHlfZGVjYXlfbXMsIDEyMzQsCi0JICAgICJtYWxsb2NfY29uZl8yIHNldHRpbmcgZGlkbid0IHRh a2UgZWZmZWN0Iik7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0 ZXN0KAotCSAgICB0ZXN0X21hbGxvY19jb25mXzIpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tYWxsb2NfY29uZl8yLnNo IGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L21hbGxv Y19jb25mXzIuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNzgwZjEuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L21hbGxvY19jb25mXzIuc2gKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1leHBvcnQgTUFM TE9DX0NPTkY9ImRpcnR5X2RlY2F5X21zOjUwMCIKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbWFsbG9jX2lvLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbWFsbG9jX2lvLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NWY3NDUuLjAwMDAwMDAKLS0tIGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L21hbGxvY19pby5jCisr KyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rl c3QuaCIKLQotVEVTVF9CRUdJTih0ZXN0X21hbGxvY19zdHJ0b3VtYXhfbm9fZW5kcHRyKSB7Ci0J aW50IGVycjsKLQotCXNldF9lcnJubygwKTsKLQlleHBlY3RfanVfZXEobWFsbG9jX3N0cnRvdW1h eCgiMCIsIE5VTEwsIDApLCAwLCAiVW5leHBlY3RlZCByZXN1bHQiKTsKLQllcnIgPSBnZXRfZXJy bm8oKTsKLQlleHBlY3RfZF9lcShlcnIsIDAsICJVbmV4cGVjdGVkIGZhaWx1cmUiKTsKLX0KLVRF U1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9tYWxsb2Nfc3RydG91bWF4KSB7Ci0Jc3RydWN0IHRl c3RfcyB7Ci0JCWNvbnN0IGNoYXIgKmlucHV0OwotCQljb25zdCBjaGFyICpleHBlY3RlZF9yZW1h aW5kZXI7Ci0JCWludCBiYXNlOwotCQlpbnQgZXhwZWN0ZWRfZXJybm87Ci0JCWNvbnN0IGNoYXIg KmV4cGVjdGVkX2Vycm5vX25hbWU7Ci0JCXVpbnRtYXhfdCBleHBlY3RlZF94OwotCX07Ci0jZGVm aW5lIEVSUihlKQkJZSwgI2UKLSNkZWZpbmUgS1VNQVgoeCkJKCh1aW50bWF4X3QpeCMjVUxMKQot I2RlZmluZSBLU01BWCh4KQkoKHVpbnRtYXhfdCkoaW50bWF4X3QpeCMjTEwpCi0Jc3RydWN0IHRl c3RfcyB0ZXN0c1tdID0gewotCQl7IjAiLAkJIjAiLAktMSwJRVJSKEVJTlZBTCksCVVJTlRNQVhf TUFYfSwKLQkJeyIwIiwJCSIwIiwJMSwJRVJSKEVJTlZBTCksCVVJTlRNQVhfTUFYfSwKLQkJeyIw IiwJCSIwIiwJMzcsCUVSUihFSU5WQUwpLAlVSU5UTUFYX01BWH0sCi0KLQkJeyIiLAkJIiIsCTAs CUVSUihFSU5WQUwpLAlVSU5UTUFYX01BWH0sCi0JCXsiKyIsCQkiKyIsCTAsCUVSUihFSU5WQUwp LAlVSU5UTUFYX01BWH0sCi0JCXsiKyszIiwJCSIrKzMiLAkwLAlFUlIoRUlOVkFMKSwJVUlOVE1B WF9NQVh9LAotCQl7Ii0iLAkJIi0iLAkwLAlFUlIoRUlOVkFMKSwJVUlOVE1BWF9NQVh9LAotCi0J CXsiNDIiLAkJIiIsCTAsCUVSUigwKSwJCUtVTUFYKDQyKX0sCi0JCXsiKzQyIiwJCSIiLAkwLAlF UlIoMCksCQlLVU1BWCg0Mil9LAotCQl7Ii00MiIsCQkiIiwJMCwJRVJSKDApLAkJS1NNQVgoLTQy KX0sCi0JCXsiMDQyIiwJCSIiLAkwLAlFUlIoMCksCQlLVU1BWCgwNDIpfSwKLQkJeyIrMDQyIiwJ IiIsCTAsCUVSUigwKSwJCUtVTUFYKDA0Mil9LAotCQl7Ii0wNDIiLAkiIiwJMCwJRVJSKDApLAkJ S1NNQVgoLTA0Mil9LAotCQl7IjB4NDIiLAkiIiwJMCwJRVJSKDApLAkJS1VNQVgoMHg0Mil9LAot CQl7IisweDQyIiwJIiIsCTAsCUVSUigwKSwJCUtVTUFYKDB4NDIpfSwKLQkJeyItMHg0MiIsCSIi LAkwLAlFUlIoMCksCQlLU01BWCgtMHg0Mil9LAotCi0JCXsiMCIsCQkiIiwJMCwJRVJSKDApLAkJ S1VNQVgoMCl9LAotCQl7IjEiLAkJIiIsCTAsCUVSUigwKSwJCUtVTUFYKDEpfSwKLQotCQl7IjQy IiwJCSIiLAkwLAlFUlIoMCksCQlLVU1BWCg0Mil9LAotCQl7IiA0MiIsCQkiIiwJMCwJRVJSKDAp LAkJS1VNQVgoNDIpfSwKLQkJeyI0MiAiLAkJIiAiLAkwLAlFUlIoMCksCQlLVU1BWCg0Mil9LAot CQl7IjB4IiwJCSJ4IiwJMCwJRVJSKDApLAkJS1VNQVgoMCl9LAotCQl7IjQyeCIsCQkieCIsCTAs CUVSUigwKSwJCUtVTUFYKDQyKX0sCi0KLQkJeyIwNyIsCQkiIiwJMCwJRVJSKDApLAkJS1VNQVgo Nyl9LAotCQl7IjAxMCIsCQkiIiwJMCwJRVJSKDApLAkJS1VNQVgoOCl9LAotCQl7IjA4IiwJCSI4 IiwJMCwJRVJSKDApLAkJS1VNQVgoMCl9LAotCQl7IjBfIiwJCSJfIiwJMCwJRVJSKDApLAkJS1VN QVgoMCl9LAotCi0JCXsiMHgiLAkJIngiLAkwLAlFUlIoMCksCQlLVU1BWCgwKX0sCi0JCXsiMFgi LAkJIlgiLAkwLAlFUlIoMCksCQlLVU1BWCgwKX0sCi0JCXsiMHhnIiwJCSJ4ZyIsCTAsCUVSUigw KSwJCUtVTUFYKDApfSwKLQkJeyIwWEEiLAkJIiIsCTAsCUVSUigwKSwJCUtVTUFYKDEwKX0sCi0K LQkJeyIwMTAiLAkJIiIsCTEwLAlFUlIoMCksCQlLVU1BWCgxMCl9LAotCQl7IjB4MyIsCQkieDMi LAkxMCwJRVJSKDApLAkJS1VNQVgoMCl9LAotCi0JCXsiMTIiLAkJIjIiLAkyLAlFUlIoMCksCQlL VU1BWCgxKX0sCi0JCXsiNzgiLAkJIjgiLAk4LAlFUlIoMCksCQlLVU1BWCg3KX0sCi0JCXsiOWEi LAkJImEiLAkxMCwJRVJSKDApLAkJS1VNQVgoOSl9LAotCQl7IjlBIiwJCSJBIiwJMTAsCUVSUigw KSwJCUtVTUFYKDkpfSwKLQkJeyJmZyIsCQkiZyIsCTE2LAlFUlIoMCksCQlLVU1BWCgxNSl9LAot CQl7IkZHIiwJCSJHIiwJMTYsCUVSUigwKSwJCUtVTUFYKDE1KX0sCi0JCXsiMHhmZyIsCSJnIiwJ MTYsCUVSUigwKSwJCUtVTUFYKDE1KX0sCi0JCXsiMFhGRyIsCSJHIiwJMTYsCUVSUigwKSwJCUtV TUFYKDE1KX0sCi0JCXsiel8iLAkJIl8iLAkzNiwJRVJSKDApLAkJS1VNQVgoMzUpfSwKLQkJeyJa XyIsCQkiXyIsCTM2LAlFUlIoMCksCQlLVU1BWCgzNSl9Ci0JfTsKLSN1bmRlZiBFUlIKLSN1bmRl ZiBLVU1BWAotI3VuZGVmIEtTTUFYCi0JdW5zaWduZWQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBz aXplb2YodGVzdHMpL3NpemVvZihzdHJ1Y3QgdGVzdF9zKTsgaSsrKSB7Ci0JCXN0cnVjdCB0ZXN0 X3MgKnRlc3QgPSAmdGVzdHNbaV07Ci0JCWludCBlcnI7Ci0JCXVpbnRtYXhfdCByZXN1bHQ7Ci0J CWNoYXIgKnJlbWFpbmRlcjsKLQotCQlzZXRfZXJybm8oMCk7Ci0JCXJlc3VsdCA9IG1hbGxvY19z dHJ0b3VtYXgodGVzdC0+aW5wdXQsICZyZW1haW5kZXIsIHRlc3QtPmJhc2UpOwotCQllcnIgPSBn ZXRfZXJybm8oKTsKLQkJZXhwZWN0X2RfZXEoZXJyLCB0ZXN0LT5leHBlY3RlZF9lcnJubywKLQkJ ICAgICJFeHBlY3RlZCBlcnJubyAlcyBmb3IgXCIlc1wiLCBiYXNlICVkIiwKLQkJICAgIHRlc3Qt PmV4cGVjdGVkX2Vycm5vX25hbWUsIHRlc3QtPmlucHV0LCB0ZXN0LT5iYXNlKTsKLQkJZXhwZWN0 X3N0cl9lcShyZW1haW5kZXIsIHRlc3QtPmV4cGVjdGVkX3JlbWFpbmRlciwKLQkJICAgICJVbmV4 cGVjdGVkIHJlbWFpbmRlciBmb3IgXCIlc1wiLCBiYXNlICVkIiwKLQkJICAgIHRlc3QtPmlucHV0 LCB0ZXN0LT5iYXNlKTsKLQkJaWYgKGVyciA9PSAwKSB7Ci0JCQlleHBlY3RfanVfZXEocmVzdWx0 LCB0ZXN0LT5leHBlY3RlZF94LAotCQkJICAgICJVbmV4cGVjdGVkIHJlc3VsdCBmb3IgXCIlc1wi LCBiYXNlICVkIiwKLQkJCSAgICB0ZXN0LT5pbnB1dCwgdGVzdC0+YmFzZSk7Ci0JCX0KLQl9Ci19 Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfbWFsbG9jX3NucHJpbnRmX3RydW5jYXRlZCkg ewotI2RlZmluZSBCVUZMRU4JMTUKLQljaGFyIGJ1ZltCVUZMRU5dOwotCXNpemVfdCByZXN1bHQ7 Ci0Jc2l6ZV90IGxlbjsKLSNkZWZpbmUgVEVTVChleHBlY3RlZF9zdHJfdW50cnVuY2F0ZWQsIC4u LikgZG8gewkJCVwKLQlyZXN1bHQgPSBtYWxsb2Nfc25wcmludGYoYnVmLCBsZW4sIF9fVkFfQVJH U19fKTsJCVwKLQlleHBlY3RfZF9lcShzdHJuY21wKGJ1ZiwgZXhwZWN0ZWRfc3RyX3VudHJ1bmNh dGVkLCBsZW4tMSksIDAsCVwKLQkgICAgIlVuZXhwZWN0ZWQgc3RyaW5nIGluZXF1YWxpdHkgKFwi JXNcIiB2cyBcIiVzXCIpIiwJCVwKLQkgICAgYnVmLCBleHBlY3RlZF9zdHJfdW50cnVuY2F0ZWQp OwkJCQlcCi0JZXhwZWN0X3p1X2VxKHJlc3VsdCwgc3RybGVuKGV4cGVjdGVkX3N0cl91bnRydW5j YXRlZCksCQlcCi0JICAgICJVbmV4cGVjdGVkIHJlc3VsdCIpOwkJCQkJXAotfSB3aGlsZSAoMCkK LQotCWZvciAobGVuID0gMTsgbGVuIDwgQlVGTEVOOyBsZW4rKykgewotCQlURVNUKCIwMTIzNDY3 ODkiLAkiMDEyMzQ2Nzg5Iik7Ci0JCVRFU1QoImEwMTIzYiIsCQkiYSVzYiIsICIwMTIzIik7Ci0J CVRFU1QoImEwMTIzNDU2NyIsCSJhJXMlcyIsICIwMTIzIiwgIjQ1NjciKTsKLQkJVEVTVCgiYTAx MjMgICIsCQkiYSUtNnMiLCAiMDEyMyIpOwotCQlURVNUKCJhICAwMTIzIiwJCSJhJTZzIiwgIjAx MjMiKTsKLQkJVEVTVCgiYSAgIDAxMiIsCQkiYSU2LjNzIiwgIjAxMjMiKTsKLQkJVEVTVCgiYSAg IDAxMiIsCQkiYSUqLipzIiwgNiwgMywgIjAxMjMiKTsKLQkJVEVTVCgiYSAxMjNiIiwJCSJhJSBk YiIsIDEyMyk7Ci0JCVRFU1QoImExMjNiIiwJCSJhJS1kYiIsIDEyMyk7Ci0JCVRFU1QoImEtMTIz YiIsCQkiYSUtZGIiLCAtMTIzKTsKLQkJVEVTVCgiYSsxMjNiIiwJCSJhJStkYiIsIDEyMyk7Ci0J fQotI3VuZGVmIEJVRkxFTgotI3VuZGVmIFRFU1QKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4o dGVzdF9tYWxsb2Nfc25wcmludGYpIHsKLSNkZWZpbmUgQlVGTEVOCTEyOAotCWNoYXIgYnVmW0JV RkxFTl07Ci0Jc2l6ZV90IHJlc3VsdDsKLSNkZWZpbmUgVEVTVChleHBlY3RlZF9zdHIsIC4uLikg ZG8gewkJCQkJXAotCXJlc3VsdCA9IG1hbGxvY19zbnByaW50ZihidWYsIHNpemVvZihidWYpLCBf X1ZBX0FSR1NfXyk7CVwKLQlleHBlY3Rfc3RyX2VxKGJ1ZiwgZXhwZWN0ZWRfc3RyLCAiVW5leHBl Y3RlZCBvdXRwdXQiKTsJCVwKLQlleHBlY3RfenVfZXEocmVzdWx0LCBzdHJsZW4oZXhwZWN0ZWRf c3RyKSwgIlVuZXhwZWN0ZWQgcmVzdWx0Iik7XAotfSB3aGlsZSAoMCkKLQotCVRFU1QoImhlbGxv IiwgImhlbGxvIik7Ci0KLQlURVNUKCI1MCUsIDEwMCUiLCAiNTAlJSwgJWQlJSIsIDEwMCk7Ci0K LQlURVNUKCJhMDEyM2IiLCAiYSVzYiIsICIwMTIzIik7Ci0KLQlURVNUKCJhIDAxMjNiIiwgImEl NXNiIiwgIjAxMjMiKTsKLQlURVNUKCJhIDAxMjNiIiwgImElKnNiIiwgNSwgIjAxMjMiKTsKLQot CVRFU1QoImEwMTIzIGIiLCAiYSUtNXNiIiwgIjAxMjMiKTsKLQlURVNUKCJhMDEyM2IiLCAiYSUq c2IiLCAtMSwgIjAxMjMiKTsKLQlURVNUKCJhMDEyMyBiIiwgImElKnNiIiwgLTUsICIwMTIzIik7 Ci0JVEVTVCgiYTAxMjMgYiIsICJhJS0qc2IiLCAtNSwgIjAxMjMiKTsKLQotCVRFU1QoImEwMTJi IiwgImElLjNzYiIsICIwMTIzIik7Ci0JVEVTVCgiYTAxMmIiLCAiYSUuKnNiIiwgMywgIjAxMjMi KTsKLQlURVNUKCJhMDEyM2IiLCAiYSUuKnNiIiwgLTMsICIwMTIzIik7Ci0KLQlURVNUKCJhICAw MTJiIiwgImElNS4zc2IiLCAiMDEyMyIpOwotCVRFU1QoImEgIDAxMmIiLCAiYSU1LipzYiIsIDMs ICIwMTIzIik7Ci0JVEVTVCgiYSAgMDEyYiIsICJhJSouM3NiIiwgNSwgIjAxMjMiKTsKLQlURVNU KCJhICAwMTJiIiwgImElKi4qc2IiLCA1LCAzLCAiMDEyMyIpOwotCVRFU1QoImEgMDEyM2IiLCAi YSUqLipzYiIsIDUsIC0zLCAiMDEyMyIpOwotCi0JVEVTVCgiX2FiY2RfIiwgIl8leF8iLCAweGFi Y2QpOwotCVRFU1QoIl8weGFiY2RfIiwgIl8lI3hfIiwgMHhhYmNkKTsKLQlURVNUKCJfMTIzNF8i LCAiXyVvXyIsIDAxMjM0KTsKLQlURVNUKCJfMDEyMzRfIiwgIl8lI29fIiwgMDEyMzQpOwotCVRF U1QoIl8xMjM0XyIsICJfJXVfIiwgMTIzNCk7Ci0JVEVTVCgiMDEyMzQiLCAiJTA1dSIsIDEyMzQp OwotCi0JVEVTVCgiXzEyMzRfIiwgIl8lZF8iLCAxMjM0KTsKLQlURVNUKCJfIDEyMzRfIiwgIl8l IGRfIiwgMTIzNCk7Ci0JVEVTVCgiXysxMjM0XyIsICJfJStkXyIsIDEyMzQpOwotCVRFU1QoIl8t MTIzNF8iLCAiXyVkXyIsIC0xMjM0KTsKLQlURVNUKCJfLTEyMzRfIiwgIl8lIGRfIiwgLTEyMzQp OwotCVRFU1QoIl8tMTIzNF8iLCAiXyUrZF8iLCAtMTIzNCk7Ci0KLQkvKgotCSAqIE1vcmFsbHks IHdlIHNob3VsZCB0ZXN0IHRoZXNlIHRvbywgYnV0IDAtcGFkZGVkIHNpZ25lZCB0eXBlcyBhcmUg bm90Ci0JICogeWV0IHN1cHBvcnRlZC4KLQkgKgotCSAqIFRFU1QoIjAxMjM0IiwgIiUwNSIsIDEy MzQpOwotCSAqIFRFU1QoIi0xMjM0IiwgIiUwNWQiLCAtMTIzNCk7Ci0JICogVEVTVCgiLTAxMjM0 IiwgIiUwNmQiLCAtMTIzNCk7Ci0JKi8KLQotCVRFU1QoIl8tMTIzNF8iLCAiXyVkXyIsIC0xMjM0 KTsKLQlURVNUKCJfMTIzNF8iLCAiXyVkXyIsIDEyMzQpOwotCVRFU1QoIl8tMTIzNF8iLCAiXyVp XyIsIC0xMjM0KTsKLQlURVNUKCJfMTIzNF8iLCAiXyVpXyIsIDEyMzQpOwotCVRFU1QoIl8wMTIz NF8iLCAiXyUjb18iLCAwMTIzNCk7Ci0JVEVTVCgiXzEyMzRfIiwgIl8ldV8iLCAxMjM0KTsKLQlU RVNUKCJfMHgxMjM0YWJjXyIsICJfJSN4XyIsIDB4MTIzNGFiYyk7Ci0JVEVTVCgiXzBYMTIzNEFC Q18iLCAiXyUjWF8iLCAweDEyMzRhYmMpOwotCVRFU1QoIl9jXyIsICJfJWNfIiwgJ2MnKTsKLQlU RVNUKCJfc3RyaW5nXyIsICJfJXNfIiwgInN0cmluZyIpOwotCVRFU1QoIl8weDQyXyIsICJfJXBf IiwgKCh2b2lkICopMHg0MikpOwotCi0JVEVTVCgiXy0xMjM0XyIsICJfJWxkXyIsICgobG9uZykt MTIzNCkpOwotCVRFU1QoIl8xMjM0XyIsICJfJWxkXyIsICgobG9uZykxMjM0KSk7Ci0JVEVTVCgi Xy0xMjM0XyIsICJfJWxpXyIsICgobG9uZyktMTIzNCkpOwotCVRFU1QoIl8xMjM0XyIsICJfJWxp XyIsICgobG9uZykxMjM0KSk7Ci0JVEVTVCgiXzAxMjM0XyIsICJfJSNsb18iLCAoKGxvbmcpMDEy MzQpKTsKLQlURVNUKCJfMTIzNF8iLCAiXyVsdV8iLCAoKGxvbmcpMTIzNCkpOwotCVRFU1QoIl8w eDEyMzRhYmNfIiwgIl8lI2x4XyIsICgobG9uZykweDEyMzRhYmMpKTsKLQlURVNUKCJfMFgxMjM0 QUJDXyIsICJfJSNsWF8iLCAoKGxvbmcpMHgxMjM0QUJDKSk7Ci0KLQlURVNUKCJfLTEyMzRfIiwg Il8lbGxkXyIsICgobG9uZyBsb25nKS0xMjM0KSk7Ci0JVEVTVCgiXzEyMzRfIiwgIl8lbGxkXyIs ICgobG9uZyBsb25nKTEyMzQpKTsKLQlURVNUKCJfLTEyMzRfIiwgIl8lbGxpXyIsICgobG9uZyBs b25nKS0xMjM0KSk7Ci0JVEVTVCgiXzEyMzRfIiwgIl8lbGxpXyIsICgobG9uZyBsb25nKTEyMzQp KTsKLQlURVNUKCJfMDEyMzRfIiwgIl8lI2xsb18iLCAoKGxvbmcgbG9uZykwMTIzNCkpOwotCVRF U1QoIl8xMjM0XyIsICJfJWxsdV8iLCAoKGxvbmcgbG9uZykxMjM0KSk7Ci0JVEVTVCgiXzB4MTIz NGFiY18iLCAiXyUjbGx4XyIsICgobG9uZyBsb25nKTB4MTIzNGFiYykpOwotCVRFU1QoIl8wWDEy MzRBQkNfIiwgIl8lI2xsWF8iLCAoKGxvbmcgbG9uZykweDEyMzRBQkMpKTsKLQotCVRFU1QoIl8t MTIzNF8iLCAiXyVxZF8iLCAoKGxvbmcgbG9uZyktMTIzNCkpOwotCVRFU1QoIl8xMjM0XyIsICJf JXFkXyIsICgobG9uZyBsb25nKTEyMzQpKTsKLQlURVNUKCJfLTEyMzRfIiwgIl8lcWlfIiwgKChs b25nIGxvbmcpLTEyMzQpKTsKLQlURVNUKCJfMTIzNF8iLCAiXyVxaV8iLCAoKGxvbmcgbG9uZykx MjM0KSk7Ci0JVEVTVCgiXzAxMjM0XyIsICJfJSNxb18iLCAoKGxvbmcgbG9uZykwMTIzNCkpOwot CVRFU1QoIl8xMjM0XyIsICJfJXF1XyIsICgobG9uZyBsb25nKTEyMzQpKTsKLQlURVNUKCJfMHgx MjM0YWJjXyIsICJfJSNxeF8iLCAoKGxvbmcgbG9uZykweDEyMzRhYmMpKTsKLQlURVNUKCJfMFgx MjM0QUJDXyIsICJfJSNxWF8iLCAoKGxvbmcgbG9uZykweDEyMzRBQkMpKTsKLQotCVRFU1QoIl8t MTIzNF8iLCAiXyVqZF8iLCAoKGludG1heF90KS0xMjM0KSk7Ci0JVEVTVCgiXzEyMzRfIiwgIl8l amRfIiwgKChpbnRtYXhfdCkxMjM0KSk7Ci0JVEVTVCgiXy0xMjM0XyIsICJfJWppXyIsICgoaW50 bWF4X3QpLTEyMzQpKTsKLQlURVNUKCJfMTIzNF8iLCAiXyVqaV8iLCAoKGludG1heF90KTEyMzQp KTsKLQlURVNUKCJfMDEyMzRfIiwgIl8lI2pvXyIsICgoaW50bWF4X3QpMDEyMzQpKTsKLQlURVNU KCJfMTIzNF8iLCAiXyVqdV8iLCAoKGludG1heF90KTEyMzQpKTsKLQlURVNUKCJfMHgxMjM0YWJj XyIsICJfJSNqeF8iLCAoKGludG1heF90KTB4MTIzNGFiYykpOwotCVRFU1QoIl8wWDEyMzRBQkNf IiwgIl8lI2pYXyIsICgoaW50bWF4X3QpMHgxMjM0QUJDKSk7Ci0KLQlURVNUKCJfMTIzNF8iLCAi XyV0ZF8iLCAoKHB0cmRpZmZfdCkxMjM0KSk7Ci0JVEVTVCgiXy0xMjM0XyIsICJfJXRkXyIsICgo cHRyZGlmZl90KS0xMjM0KSk7Ci0JVEVTVCgiXzEyMzRfIiwgIl8ldGlfIiwgKChwdHJkaWZmX3Qp MTIzNCkpOwotCVRFU1QoIl8tMTIzNF8iLCAiXyV0aV8iLCAoKHB0cmRpZmZfdCktMTIzNCkpOwot Ci0JVEVTVCgiXy0xMjM0XyIsICJfJXpkXyIsICgoc3NpemVfdCktMTIzNCkpOwotCVRFU1QoIl8x MjM0XyIsICJfJXpkXyIsICgoc3NpemVfdCkxMjM0KSk7Ci0JVEVTVCgiXy0xMjM0XyIsICJfJXpp XyIsICgoc3NpemVfdCktMTIzNCkpOwotCVRFU1QoIl8xMjM0XyIsICJfJXppXyIsICgoc3NpemVf dCkxMjM0KSk7Ci0JVEVTVCgiXzAxMjM0XyIsICJfJSN6b18iLCAoKHNzaXplX3QpMDEyMzQpKTsK LQlURVNUKCJfMTIzNF8iLCAiXyV6dV8iLCAoKHNzaXplX3QpMTIzNCkpOwotCVRFU1QoIl8weDEy MzRhYmNfIiwgIl8lI3p4XyIsICgoc3NpemVfdCkweDEyMzRhYmMpKTsKLQlURVNUKCJfMFgxMjM0 QUJDXyIsICJfJSN6WF8iLCAoKHNzaXplX3QpMHgxMjM0QUJDKSk7Ci0jdW5kZWYgQlVGTEVOCi19 Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0 X21hbGxvY19zdHJ0b3VtYXhfbm9fZW5kcHRyLAotCSAgICB0ZXN0X21hbGxvY19zdHJ0b3VtYXgs Ci0JICAgIHRlc3RfbWFsbG9jX3NucHJpbnRmX3RydW5jYXRlZCwKLQkgICAgdGVzdF9tYWxsb2Nf c25wcmludGYpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC9tYXRoLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvbWF0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBhMzI3NjdjLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9tYXRoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAot I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jZGVmaW5lIE1BWF9SRUxfRVJSIDEu MGUtOQotI2RlZmluZSBNQVhfQUJTX0VSUiAxLjBlLTkKLQotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0K LSNpZmRlZiBfX1BHSQotI3VuZGVmIElORklOSVRZCi0jZW5kaWYKLQotI2lmbmRlZiBJTkZJTklU WQotI2RlZmluZSBJTkZJTklUWSAoREJMX01BWCArIERCTF9NQVgpCi0jZW5kaWYKLQotc3RhdGlj IGJvb2wKLWRvdWJsZV9lcV9yZWwoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgbWF4X3JlbF9l cnIsIGRvdWJsZSBtYXhfYWJzX2VycikgewotCWRvdWJsZSByZWxfZXJyOwotCi0JaWYgKGZhYnMo YSAtIGIpIDwgbWF4X2Fic19lcnIpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXJlbF9lcnIgPSAo ZmFicyhiKSA+IGZhYnMoYSkpID8gZmFicygoYS1iKS9iKSA6IGZhYnMoKGEtYikvYSk7Ci0JcmV0 dXJuIChyZWxfZXJyIDwgbWF4X3JlbF9lcnIpOwotfQotCi1zdGF0aWMgdWludDY0X3QKLWZhY3Rv cmlhbCh1bnNpZ25lZCB4KSB7Ci0JdWludDY0X3QgcmV0ID0gMTsKLQl1bnNpZ25lZCBpOwotCi0J Zm9yIChpID0gMjsgaSA8PSB4OyBpKyspIHsKLQkJcmV0ICo9ICh1aW50NjRfdClpOwotCX0KLQot CXJldHVybiByZXQ7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9sbl9nYW1tYV9mYWN0b3JpYWwpIHsK LQl1bnNpZ25lZCB4OwotCi0JLyogZXhwKGxuX2dhbW1hKHgpKSA9PSAoeC0xKSEgZm9yIGludGVn ZXIgeC4gKi8KLQlmb3IgKHggPSAxOyB4IDw9IDIxOyB4KyspIHsKLQkJZXhwZWN0X3RydWUoZG91 YmxlX2VxX3JlbChleHAobG5fZ2FtbWEoeCkpLAotCQkgICAgKGRvdWJsZSlmYWN0b3JpYWwoeC0x KSwgTUFYX1JFTF9FUlIsIE1BWF9BQlNfRVJSKSwKLQkJICAgICJJbmNvcnJlY3QgZmFjdG9yaWFs IHJlc3VsdCBmb3IgeD0ldSIsIHgpOwotCX0KLX0KLVRFU1RfRU5ECi0KLS8qIEV4cGVjdGVkIGxu X2dhbW1hKFswLjAuLjEwMC4wXSBpbmNyZW1lbnQ9MC4yNSkuICovCi1zdGF0aWMgY29uc3QgZG91 YmxlIGxuX2dhbW1hX21pc2NfZXhwZWN0ZWRbXSA9IHsKLQlJTkZJTklUWSwKLQkxLjI4ODAyMjUy NDY5ODA3NzQzLCAwLjU3MjM2NDk0MjkyNDcwMDA4LCAwLjIwMzI4MDk1MTQzMTI5NTM4LAotCTAu MDAwMDAwMDAwMDAwMDAwMDAsIC0wLjA5ODI3MTgzNjQyMTgxMzIwLCAtMC4xMjA3ODIyMzc2MzUy NDUxOCwKLQktMC4wODQ0MDExMjEwMjA0ODU1NSwgMC4wMDAwMDAwMDAwMDAwMDAwMCwgMC4xMjQ4 NzE3MTQ4OTIzOTY1MSwKLQkwLjI4NDY4Mjg3MDQ3MjkxOTE4LCAwLjQ3NTIxNDY2NjkxNDkzNzE5 LCAwLjY5MzE0NzE4MDU1OTk0NTI5LAotCTAuOTM1ODAxOTMxMTA4NzI1MjMsIDEuMjAwOTczNjAy MzQ3MDc0MjksIDEuNDg2ODE1NTc4NTkzNDE3MTgsCi0JMS43OTE3NTk0NjkyMjgwNTQ5NiwgMi4x MTQ0NTY5Mjc0NTAzNzEyOCwgMi40NTM3MzY1NzA4NDI0NDIzNCwKLQkyLjgwODU3MTQxODU3NTcz NjQ0LCAzLjE3ODA1MzgzMDM0Nzk0NTc1LCAzLjU2MTM3NTkxMDM4NjY5NzEwLAotCTMuOTU3ODEz OTY3NjE4NzE2NTEsIDQuMzY2NzE2MDM2NjIyMjg2ODAsIDQuNzg3NDkxNzQyNzgyMDQ1ODEsCi0J NS4yMTk2MDM5ODY5OTAyMjkzMiwgNS42NjI1NjIwNTk4NTcxNDE3OCwgNi4xMTU5MTU4OTE0MzE1 NDU2OCwKLQk2LjU3OTI1MTIxMjAxMDEwMTIxLCA3LjA1MjE4NTQ1MDczODUzOTUzLCA3LjUzNDM2 NDIzNjc1ODczMjY4LAotCTguMDI1NDU4Mzk2MzE1OTgzMTIsIDguNTI1MTYxMzYxMDY1NDE0Njcs IDkuMDMzMTg2OTE5NjA1MTIzMzIsCi0JOS41NDkyNjcyNTczMDA5OTY5MCwgMTAuMDczMTUxMjM5 NjgxMjM5NDksIDEwLjYwNDYwMjkwMjc0NTI1MDg2LAotCTExLjE0MzQwMDExOTk1MTcxMjMxLCAx MS42ODkzMzM0MjA3OTcyNjg1NiwgMTIuMjQyMjA0OTQwMDUwNzYxNzYsCi0JMTIuODAxODI3NDgw MDgxNDY5MDksIDEzLjM2ODAyMzY3MTQ3NjA0NzIwLCAxMy45NDA2MjUyMTk0MDM3NjM0MiwKLQkx NC41MTk0NzIyMjUwNjA1MTgxNiwgMTUuMTA0NDEyNTczMDc1NTE5NDMsIDE1LjY5NTMwMTM3NzA2 MDQ2NTI0LAotCTE2LjI5MjAwMDQ3NjU2NzI0MjM3LCAxNi44OTQzNzc5Nzk2MzQxOTI4NSwgMTcu NTAyMzA3ODQ1ODczODkwMTAsCi0JMTguMTE1NjY5NTA1NzEwODk0MDcsIDE4LjczNDM0NzUxMTkz NjQ0ODQzLCAxOS4zNTgyMzEyMjAyMjQzNTQyNywKLQkxOS45ODcyMTQ0OTU2NjE4ODQ2OCwgMjAu NjIxMTk1NDQyNzAxNjMwMTgsIDIxLjI2MDA3NjE1NjI0NDcwMDQ4LAotCTIxLjkwMzc2MjQ5MTgy ODc5MzIwLCAyMi41NTIxNjM4NTMxMjM0MjA5OCwgMjMuMjA1MTkyOTk1MTMzODYwMDIsCi0JMjMu ODYyNzY1ODQxNjg5MDg5NTQsIDI0LjUyNDgwMTMxNTk0MTM3ODAyLCAyNS4xOTEyMjExODI3Mzg2 ODMzOCwKLQkyNS44NjE5NDk5MDE4NDg1MTg2MSwgMjYuNTM2OTE0NDkxMTE1NjEzNDAsIDI3LjIx NjA0NDM5ODcyNzIwNjA0LAotCTI3Ljg5OTI3MTM4Mzg0MDg5Mzg5LCAyOC41ODY1Mjk0MDQ5MDE5 MzgyOCwgMjkuMjc3NzU0NTE1MDQwODE1MTYsCi0JMjkuOTcyODg0NzYzOTk4ODQ4NzEsIDMwLjY3 MTg2MDEwNjA4MDY3NTQ4LCAzMS4zNzQ2MjIzMTM2Nzc2OTA1MCwKLQkzMi4wODExMTQ4OTU5NDcz NTg0MywgMzIuNzkxMjgzMDIyMjY5OTE1NjUsIDMzLjUwNTA3MzQ1MDEzNjg5MDc2LAotCTM0LjIy MjQzNDQ1NzE1NTA1MzE3LCAzNC45NDMzMTU3NzY4NzY4MTU0NSwgMzUuNjY3NjY4NTM4MTkxMzQy OTgsCi0JMzYuMzk1NDQ1MjA4MDMzMDUyNjEsIDM3LjEyNjU5OTUzNzE4MzU1ODY1LCAzNy44NjEw ODY1MDg5NjEwOTM5NSwKLQkzOC41OTg4NjIyOTA2MDc3NjIzMCwgMzkuMzM5ODg0MTg3MTk5NDk0 NjUsIDQwLjA4NDExMDU5NzkxNzM1MTk4LAotCTQwLjgzMTUwMDk3NDUzMDc5NzUyLCA0MS41ODIw MTU3ODE5NTQ5MDEwMCwgNDIuMzM1NjE2NDYwNzUzNDg1MDYsCi0JNDMuMDkyMjY1MzkxNDY5ODg2 OTksIDQzLjg1MTkyNTg2MDY3NTE1MjA4LCA0NC42MTQ1NjIwMjg2MzE1ODg5MywKLQk0NS4zODAx Mzg4OTg0NzY5MDA1MiwgNDYuMTQ4NjIyMjg2ODQwMzI4ODUsIDQ2LjkxOTk3ODc5NTgwODc3Mzk1 LAotCTQ3LjY5NDE3NTc4NjE2NjI4MzYxLCA0OC40NzExODEzNTE4MzUyMjAxNCwgNDkuMjUwOTY0 Mjk1NDUyNTY4ODIsCi0JNTAuMDMzNDk0MTA1MDE5MTQ0NjMsIDUwLjgxODc0MDkzMTU2MzI0Nzkw LCA1MS42MDY2NzU1Njc3NjQzNjk4MiwKLQk1Mi4zOTcyNjk0Mjc0ODU5MjM2NCwgNTMuMTkwNDk0 NTI2MTY5MjY3NDMsIDUzLjk4NjMyMzQ2MjA0MzkwNTg2LAotCTU0Ljc4NDcyOTM5ODExMjMxMTU3 LCA1NS41ODU2ODYwNDQ4Njk0MjYzMywgNTYuMzg5MTY3NjQzNzE5OTI5NDAsCi0JNTcuMTk1MTQ4 OTUxMDU4NTk4NjQsIDU4LjAwMzYwNTIyMjk4MDUxMDgwLCA1OC44MTQ1MTIyMDA1OTA3OTc4NywK LQk1OS42Mjc4NDYwOTU4ODQzMjI2MSwgNjAuNDQzNTgzNTc4MTY4MzQzNzEsIDYxLjI2MTcwMTc2 MTAwMTk5NDI3LAotCTYyLjA4MjE3ODE4OTYyODQyOTI3LCA2Mi45MDQ5OTA4Mjg4NzY0OTk2Miwg NjMuNzMwMTE4MDUxNTEwMzU5NTgsCi0JNjQuNTU3NTM4NjI3MDA2MzIzNDAsIDY1LjM4NzIzMTcx MDczNzY4MDE1LCA2Ni4yMTkxNzY4MzM1NDkwMTM4NSwKLQk2Ny4wNTMzNTM4OTE3MDI3OTgyNSwg NjcuODg5NzQzMTM3MTgxNTQwMDgsIDY4LjcyODMyNTE2ODMzMDEzMDE3LAotCTY5LjU2OTA4MDky MDgyMzYzNzM3LCA3MC40MTE5OTE2NTg5NDYxNjM4NSwgNzEuMjU3MDM4OTY3MTY4MDAwNDUsCi0J NzIuMTA0MjA0NzQyMDA3OTkzOTAsIDcyLjk1MzQ3MTE4NDE2OTQwMTkxLCA3My44MDQ4MjA3OTA5 Mzc3OTY0NiwKLQk3NC42NTgyMzYzNDg4MzAxNTgxNCwgNzUuNTEzNzAwOTI2NDg0ODU4NjYsIDc2 LjM3MTE5Nzg2Nzc4Mjc1NDU0LAotCTc3LjIzMDcxMDc4NTE5MDMzOTYxLCA3OC4wOTIyMjM1NTMz MTUzMDcwNywgNzguOTU1NzIwMzAyNjY3MjU5NjAsCi0JNzkuODIxMTg1NDEzNjE0MzU4NTksIDgw LjY4ODYwMzUxMDUyOTAzNDY4LCA4MS41NTc5NTk0NTYxMTUwMjg3MywKLQk4Mi40MjkyMzgzNDU5 MDkwNDE2NCwgODMuMzAyNDI1NTAyOTUwMDQzNzgsIDg0LjE3NzUwNjQ3MjYxMDI4OTczLAotCTg1 LjA1NDQ2NzAxNzU4MTUyOTgzLCA4NS45MzMyOTMxMTMwMTA5MDQ1NiwgODYuODEzOTcwOTQxNzgx MDc5MjAsCi0JODcuNjk2NDg2ODg5OTI4ODIwNTcsIDg4LjU4MDgyNzU0MjE5NzY2NzQxLCA4OS40 NjY5Nzk2Nzc3MTkxMzc5NSwKLQk5MC4zNTQ5MzAyNjU4MTgzODE5NCwgOTEuMjQ0NjY2NDYxOTM5 NjMwMTUsIDkyLjEzNjE3NTYwMzY4NzA5MjkyLAotCTkzLjAyOTQ0NTIwNjk3NzQyODAzLCA5My45 MjQ0NjI5NjIyOTk3ODQ4NiwgOTQuODIxMjE2NzMxMDc5NjcyOTcsCi0JOTUuNzE5Njk0NTQyMTQz MjE2MTUsIDk2LjYxOTg4NDU4ODI3ODA5NzIzLCA5Ny41MjE3NzUyMjI4ODgyMDkxMCwKLQk5OC40 MjUzNTQ5NTY3Mzg0ODgwMCwgOTkuMzMwNjEyNDU0Nzg3NDEzNDEsIDEwMC4yMzc1MzY1MzMxMDM2 Nzg5NSwKLQkxMDEuMTQ2MTE2MTU1ODY0NTg5ODEsIDEwMi4wNTYzNDA0MzI0MzM1NDM3MCwgMTAy Ljk2ODE5ODYxNDUxMzgyMzk0LAotCTEwMy44ODE2ODAwOTMzNzYyMTgxMSwgMTA0Ljc5Njc3NDM5 NzE1ODMzMDMyLCAxMDUuNzEzNDcxMTg4MjMyODczMDMsCi0JMTA2LjYzMTc2MDI2MDY0MzQ2MDQ3 LCAxMDcuNTUxNjMxNTM3NjA0NjM1MDEsIDEwOC40NzMwNzUwNjkwNjU0MDE5OCwKLQkxMDkuMzk2 MDgxMDI5MzMzMjMxNTMsIDExMC4zMjA2Mzk3MTQ3NTc0MDUxNiwgMTExLjI0Njc0MTU0MTQ2OTIw NTU3LAotCTExMi4xNzQzNzcwNDMxNzc4Njk5NSwgMTEzLjEwMzUzNjg2OTAyMDEzMjM3LCAxMTQu MDM0MjExNzgxNDYxNzA2ODksCi0JMTE0Ljk2NjM5MjY1NDI0OTkwMTI4LCAxMTUuOTAwMDcwNDcw NDE0NTQ3NjksIDExNi44MzUyMzYzMjAzMTY5ODAxNCwKLQkxMTcuNzcxODgxMzk5NzQ1MDY5NTMs IDExOC43MDk5OTcwMDgwNTMxMDc5NSwgMTE5LjY0OTU3NDU0NjM0NDkwODMwLAotCTEyMC41OTA2 MDU1MTU2OTk3NDk2MiwgMTIxLjUzMzA4MTUxNTQzODY1Mjc5LCAxMjIuNDc2OTk0MjQxNDMwOTcy NDcsCi0JMTIzLjQyMjMzNTQ4NDQzOTU1NzI2LCAxMjQuMzY5MDk3MTI4NTAzMzgzOTQsIDEyNS4z MTcyNzExNDkzNTY4OTgyNiwKLQkxMjYuMjY2ODQ5NjEyODg0OTI1NTksIDEyNy4yMTc4MjQ2NzM2 MTE3NTg2MSwgMTI4LjE3MDE4ODU3MzIyNDIwODk5LAotCTEyOS4xMjM5MzM2MzkxMjcyNDQ1Mywg MTMwLjA3OTA1MjI4MzAzMDg0NzU1LCAxMzEuMDM1NTM2OTk5NTY4NjIwMzMsCi0JMTMxLjk5MzM4 MDM2NDk0NTc3ODY0LCAxMzIuOTUyNTc1MDM1NjE2MjkxNjQsIDEzMy45MTMxMTM3NDY5ODkyNjc4 NCwKLQkxMzQuODc0OTg5MzEyMTYxOTQzNjQsIDEzNS44MzgxOTQ2MjA2ODA0Njg0NiwgMTM2Ljgw MjcyMjYzNzMyNjM4Mjk0LAotCTEzNy43Njg1NjY0MDA5MjkwMTc4NSwgMTM4LjczNTcxOTAyMzIw MjU2Mjk5LCAxMzkuNzA0MTczNjg3NjA3MTgwOTEsCi0JMTQwLjY3MzkyMzY0ODIzNDI1MDU1LCAx NDEuNjQ0OTYyMjI4NzE0MDA3MzIsIDE0Mi42MTcyODI4MjExNDYwMDU3NCwKLQkxNDMuNTkwODc4 ODg1MDUxMDQwNDcsIDE0NC41NjU3NDM5NDYzNDQ4NjY4MCwgMTQ1LjU0MTg3MTU5NjMzMjEwMDU4 LAotCTE0Ni41MTkyNTU0OTA3MjA2Mzg1OSwgMTQ3LjQ5Nzg4OTM0ODY1NTY2MTQ4LCAxNDguNDc3 NzY2OTUxNzczMDIwMzEsCi0JMTQ5LjQ1ODg4MjE0MzI3MTI5NjE3LCAxNTAuNDQxMjI4ODI3MDAx OTM2MDAsIDE1MS40MjQ4MDA5NjY1Nzc1NDk4NCwKLQkxNTIuNDA5NTkyNTg0NDk3Mzc0OTAsIDE1 My4zOTU1OTc3NjEyODk4MjA5NCwgMTU0LjM4MjgxMDYzNDY3MTY0MjQ1LAotCTE1NS4zNzEyMjUz OTg3MjMwMjY5NiwgMTU2LjM2MDgzNjMwMzA3ODc5ODQ0LCAxNTcuMzUxNjM3NjUyMTM0NzQxMDcs Ci0JMTU4LjM0MzYyMzgwNDI2OTIxMzkxLCAxNTkuMzM2Nzg5MTcxMDc5MjAzNzAsIDE2MC4zMzEx MjgyMTY2MzA5Mjk3MywKLQkxNjEuMzI2NjM1NDU2NzI0Mjg5OTUsIDE2Mi4zMjMzMDU0NTgxNzEx NzY5NSwgMTYzLjMyMTEzMjgzODA4Njk1MzE0LAotCTE2NC4zMjAxMTIyNjMxOTUxOTg5MiwgMTY1 LjMyMDIzODQ0OTE0NDg1MjY3LCAxNjYuMzIxNTA2MTU5ODQwMzY3OTAsCi0JMTY3LjMyMzkxMDIw Njc4MzU4MDE4LCAxNjguMzI3NDQ1NDQ4NDI3NjgxNjQsIDE2OS4zMzIxMDY3ODk1NDI3MDYzNCwK LQkxNzAuMzM3ODg5MTgwNTkyNzUzNzUsIDE3MS4zNDQ3ODc2MTcxMjM4NDE5OCwgMTcyLjM1Mjc5 NzEzOTE2MjgxNzA3LAotCTE3My4zNjE5MTI4MzA2MjcyNjE0MywgMTc0LjM3MjEyOTgxODc0NTE1 MDk0LCAxNzUuMzgzNDQzMjczNDg1MzQwODAsCi0JMTc2LjM5NTg0ODQwNjk5NzM0NTE0LCAxNzcu NDA5MzQwNDczMDYxNjA0MzcsIDE3OC40MjM5MTQ3NjY1NDg0Nzc5MywKLQkxNzkuNDM5NTY2NjIy ODg3MjEzMDQsIDE4MC40NTYyOTE0MTc1NDM3ODExMSwgMTgxLjQ3NDA4NDU2NTUwNzQxMTA3LAot CTE4Mi40OTI5NDE1MjA3ODYzMDMwNCwgMTgzLjUxMjg1Nzc3NTkxMTUyNzM3LCAxODQuNTMzODI4 ODYxNDQ5NDc4NjEsCi0JMTg1LjU1NTg1MDM0NTUyMjYyODY5LCAxODYuNTc4OTE3ODMzMzM3ODY4 NjEsIDE4Ny42MDMwMjY5NjY3MjMxMjA5NSwKLQkxODguNjI4MTczNDIzNjcxNjI2MTAsIDE4OS42 NTQzNTI5MTc4OTM0MTkzMiwgMTkwLjY4MTU2MTE5ODM3NDY4MDU0LAotCTE5MS43MDk3OTQwNDg5 NDM3NjMzMCwgMTkyLjczOTA0NzI4Nzg0NDkyNTkwLCAxOTMuNzY5MzE2NzY3MzE4MjAxNzYsCi0J MTk0LjgwMDU5ODM3MzE4NzE0MjQ0LCAxOTUuODMyODg4MDI0NDUxODQ3MjksIDE5Ni44NjYxODE2 NzI4ODk5NTA5NiwKLQkxOTcuOTAwNDc1MzAyNjYzMDExMjMsIDE5OC45MzU3NjQ5Mjk5Mjk0NjIx NCwgMTk5Ljk3MjA0NjYwMjQ2MzczNDY0LAotCTIwMS4wMDkzMTYzOTkyODE0ODc5NywgMjAyLjA0 NzU3MDQzMDI3MDYzOTAxLCAyMDMuMDg2ODA0ODM1ODI4MDc1OTcsCi0JMjA0LjEyNzAxNTc4NjUw MjI4Mzg1LCAyMDUuMTY4MTk5NDgyNjQxMTcxMDIsIDIwNi4yMTAzNTIxNTQwNDU5NzgwNywKLQky MDcuMjUzNDcwMDU5NjI5ODc2MjMsIDIwOC4yOTc1NDk0ODcwODE5MDkwOSwgMjA5LjM0MjU4Njc1 MjUzNjc4OTE2LAotCTIxMC4zODg1NzgyMDAyNDg3NTg3OCwgMjExLjQzNTUyMDIwMjI3MDk5MzIw LCAyMTIuNDgzNDA5MTU4MTM5Nzc4NTgsCi0JMjEzLjUzMjI0MTQ5NDU2MzIzNzQ0LCAyMTQuNTgy MDEzNjY1MTE1MTQxNTIsIDIxNS42MzI3MjIxNDk5MzI4NDU5MiwKLQkyMTYuNjg0MzYzNDU1NDIw MTQwMTAsIDIxNy43MzY5MzQxMTM5NTQyMjAwNCwgMjE4Ljc5MDQzMDY4MzU5NzAzNzM5LAotCTIx OS44NDQ4NDk3NDc4MTEzMzgxNSwgMjIwLjkwMDE4NzkxNTE3OTk2OTg4LCAyMjEuOTU2NDQxODE5 MTMwMzMzMjIsCi0JMjIzLjAxMzYwODExNzY2MjE1ODc1LCAyMjQuMDcxNjgzNDkzMDc5NTE4NzEs IDIyNS4xMzA2NjQ2NTE3MjY2MTg3OSwKLQkyMjYuMTkwNTQ4MzIzNzI3NTk3MzQsIDIyNy4yNTEz MzEyNjI3Mjk2MjE1OSwgMjI4LjMxMzAxMDI0NTY1MDI0NzA0LAotCTIyOS4zNzU1ODIwNzI0Mjgw NzM4NCwgMjMwLjQzOTA0MzU2NTc3Njg5ODk2LCAyMzEuNTAzMzkxNTcwOTQzNDIxMTMsCi0JMjMy LjU2ODYyMjk1NTQ2ODQ3MDA4LCAyMzMuNjM0NzM0NjA4OTUxNDQ3NDAsIDIzNC43MDE3MjM0NDI4 MTgyMzQ4NCwKLQkyMzUuNzY5NTg2MzkwMDkyMjI5MDcsIDIzNi44MzgzMjA0MDUxNjg0NDU4Niwg MjM3LjkwNzkyMjQ2MzU5MTE3NzEyLAotCTIzOC45NzgzODk1NjE4MzQzMTk0NywgMjQwLjA0OTcx ODcxNzA4NDc3MjM4LCAyNDEuMTIxOTA2OTY3MDI5MDQ4MDIsCi0JMjQyLjE5NDk1MTM2OTY0Mjgw ODQ2LCAyNDMuMjY4ODQ5MDAyOTgyNzA1MDksIDI0NC4zNDM1OTY5NjQ5ODE5MTI4MywKLQkyNDUu NDE5MTkyMzczMjQ3ODI0NDMsIDI0Ni40OTU2MzIzNjQ4NjI3MDA1NywgMjQ3LjU3MjkxNDA5NjE4 NjgyMTEwLAotCTI0OC42NTEwMzQ3NDI2NjQ3NjI2OSwgMjQ5LjcyOTk5MTQ5ODYzMzM4MTc1LCAy NTAuODA5NzgxNTc3MTMzNTQ5MDQsCi0JMjUxLjg5MDQwMjIwOTcyMzE2MzIwLCAyNTIuOTcxODUw NjQ2MjkzNzQ1NTEsIDI1NC4wNTQxMjQxNTQ4ODgzNDE5OSwKLQkyNTUuMTM3MjIwMDIxNTIzMDA2 NjEsIDI1Ni4yMjExMzU1NTAwMDk1MzUxMSwgMjU3LjMwNTg2ODA2MTc4MTI2ODM1LAotCTI1OC4z OTE0MTQ4OTU3MjA4NTY3NSwgMjU5LjQ3Nzc3MzQwNzk5MDI5ODQ0LCAyNjAuNTY0OTQwOTcxODYz MjIyNzksCi0JMjYxLjY1MjkxNDk3NzU1OTEzNDk3LCAyNjIuNzQxNjkyODMyMDgwMjE4NTIsIDI2 My44MzEyNzE5NTkwNDk2NzI2NiwKLQkyNjQuOTIxNjQ5Nzk4NTUyNzc4MDcsIDI2Ni4wMTI4MjM4 MDY5NzkzODM3OSwgMjY3LjEwNDc5MTQ1Njg2ODQ5NzMzLAotCTI2OC4xOTc1NTAyMzY3NTUzNzU4 NiwgMjY5LjI5MTA5NzY1MTAxOTc1NDI3LCAyNzAuMzg1NDMxMjE5NzM2NzQ0ODgsCi0JMjcxLjQ4 MDU0ODQ3ODUyODgxNzIxLCAyNzIuNTc2NDQ2OTc4NDIwMzM1NjUsIDI3My42NzMxMjQyODU2OTM3 NDU2MSwKLQkyNzQuNzcwNTc3OTgxNzQ2ODM5NjcsIDI3NS44Njg4MDU2NjI5NTMyNjM4OSwgMjc2 Ljk2NzgwNDk0MDUyMzEzNzcwLAotCTI3OC4wNjc1NzM0NDAzNjYxNzQ5NiwgMjc5LjE2ODEwODgw Mjk1NjY4MDg1LCAyODAuMjY5NDA4NjgzMjAwMDgzNDksCi0JMjgxLjM3MTQ3MDc1MDMwMDQzMTk3 LCAyODIuNDc0MjkyNjg3NjMwNDUyMjksIDI4My41Nzc4NzIxOTI2MDIxNzE3MSwKLQkyODQuNjgy MjA2OTc2NTQwNzgzMjIsIDI4NS43ODcyOTQ3NjQ1NTc2MDA1MCwgMjg2Ljg5MzEzMzI5NTQyNjk5 MTk0LAotCTI4Ny45OTk3MjAzMjE0NjI2ODkzMCwgMjg5LjEwNzA1MzYwODM5NzU2Mzk1LCAyOTAu MjE1MTMwOTM1MjYyODkxNDAsCi0JMjkxLjMyMzk1MDA5NDI3MDI4NzU0LCAyOTIuNDMzNTA4ODkw Njk1MjM2NDYsIDI5My41NDM4MDUxNDI3NjA3MzIwMCwKLQkyOTQuNjU0ODM2NjgxNTIzMzYzNTAs IDI5NS43NjY2MDEzNTA3NjA1OTUzMiwgMjk2Ljg3OTA5NzAwNjg1ODg5OTAyLAotCTI5Ny45OTIz MjE1MTg3MDM0MjAyMiwgMjk5LjEwNjI3Mjc2NzU2OTQ2NDU4LCAzMDAuMjIwOTQ4NjQ3MDE0MDk3 MzMsCi0JMzAxLjMzNjM0NzA2Mjc3MDMwMDkxLCAzMDIuNDUyNDY1OTMyNjQxMzAyOTcsIDMwMy41 NjkzMDMxODYzOTY0MzkyOSwKLQkzMDQuNjg2ODU2NzY1NjY4NzIxODksIDMwNS44MDUxMjQ2MjM4 NTI4MDUxNCwgMzA2LjkyNDEwNDcyNjAwNDc3MDc4LAotCTMwOC4wNDM3OTUwNDg3NDIzNjc3Mywg MzA5LjE2NDE5MzU4MDE0NjkwMDMzLCAzMTAuMjg1Mjk4MzE5NjY2MzEwMzYsCi0JMzExLjQwNzEw NzI3ODAxODY1Njg3LCAzMTIuNTI5NjE4NDc3MDk3OTI2NjQsIDMxMy42NTI4Mjk5NDk4Nzg5OTIw MSwKLQkzMTQuNzc2NzM5NzQwMzI2MDM2MTAsIDMxNS45MDEzNDU5MDMyOTk1MDAxNSwgMzE3LjAy NjY0NjUwNDQ2NjMyNzc3LAotCTMxOC4xNTI2Mzk2MjAyMDkyOTk2NiwgMzE5LjI3OTMyMzMzNzUz ODkyNjM1LCAzMjAuNDA2Njk1NzU0MDA1NDU0NTUsCi0JMzIxLjUzNDc1NDk3NzYxMTI3MTQ0LCAz MjIuNjYzNDk5MTI2NzI2MjA4MDMsIDMyMy43OTI5MjYzMzAwMDE1OTE4NSwKLQkzMjQuOTIzMDM0 NzI2Mjg2OTE0NTIsIDMyNi4wNTM4MjI0NjQ1NDU4NzQwMywgMzI3LjE4NTI4NzcwMzc3NTI1OTE2 LAotCTMyOC4zMTc0Mjg2MTI5MjIyNDIzNCwgMzI5LjQ1MDI0MzM3MDgwNTI1MzU2LCAzMzAuNTgz NzMwMTY2MDMzNDMzMzEsCi0JMzMxLjcxNzg4NzE5NjkyODQ3MjgwLCAzMzIuODUyNzEyNjcxNDQ2 MTEzMjksIDMzMy45ODgyMDQ4MDcwOTk5MTg5OCwKLQkzMzUuMTI0MzYxODMwODgzOTcwMDEsIDMz Ni4yNjExODE5NzkxOTg0NTQ0MywgMzM3LjM5ODY2MzQ5Nzc3NDI5Mzc3LAotCTMzOC41MzY4MDQ2 NDE1OTk1ODc3NCwgMzM5LjY3NTYwMzY3NDg0NjU3MDM2LCAzNDAuODE1MDU4ODcwNzk4OTY0MTEs Ci0JMzQxLjk1NTE2ODUxMTc4MTA5NjE5LCAzNDMuMDk1OTMwODg5MDg2Mjc1NzgsIDM0NC4yMzcz NDQzMDI5MDcyNzQ2MCwKLQkzNDUuMzc5NDA3MDYyMjY2ODY0MTYsIDM0Ni41MjIxMTc0ODQ5NDkw MzUzMiwgMzQ3LjY2NTQ3Mzg5NzQzMTE4NDAxLAotCTM0OC44MDk0NzQ2MzQ4MTcyMDY2MSwgMzQ5 Ljk1NDExODA0MDc3MDI1NDA4LCAzNTEuMDk5NDAyNDY3NDQ3NTMyNjcsCi0JMzUyLjI0NTMyNjI3 NTQzNTA0NzU5LCAzNTMuMzkxODg3ODMzNjgyNjMxMDMsIDM1NC41MzkwODU1MTk0NDA3ODkwOCwK LQkzNTUuNjg2OTE3NzE4MTk2OTIzNDksIDM1Ni44MzUzODI4MjM2MTMwMzExOCwgMzU3Ljk4NDQ3 OTIzNzQ2Mzg1ODY4LAotCTM1OS4xMzQyMDUzNjk1NzUzOTc1MwotfTsKLQotVEVTVF9CRUdJTih0 ZXN0X2xuX2dhbW1hX21pc2MpIHsKLQl1bnNpZ25lZCBpOwotCi0JZm9yIChpID0gMTsgaSA8IHNp emVvZihsbl9nYW1tYV9taXNjX2V4cGVjdGVkKS9zaXplb2YoZG91YmxlKTsgaSsrKSB7Ci0JCWRv dWJsZSB4ID0gKGRvdWJsZSlpICogMC4yNTsKLQkJZXhwZWN0X3RydWUoZG91YmxlX2VxX3JlbChs bl9nYW1tYSh4KSwKLQkJICAgIGxuX2dhbW1hX21pc2NfZXhwZWN0ZWRbaV0sIE1BWF9SRUxfRVJS LCBNQVhfQUJTX0VSUiksCi0JCSAgICAiSW5jb3JyZWN0IGxuX2dhbW1hIHJlc3VsdCBmb3IgaT0l dSIsIGkpOwotCX0KLX0KLVRFU1RfRU5ECi0KLS8qIEV4cGVjdGVkIHB0X25vcm0oWzAuMDEuLjAu OTldIGluY3JlbWVudD0wLjAxKS4gKi8KLXN0YXRpYyBjb25zdCBkb3VibGUgcHRfbm9ybV9leHBl Y3RlZFtdID0gewotCS1JTkZJTklUWSwKLQktMi4zMjYzNDc4NzQwNDA4NDA3NiwgLTIuMDUzNzQ4 OTEwNjMxODIyNTIsIC0xLjg4MDc5MzYwODE1MTI1MDg1LAotCS0xLjc1MDY4NjA3MTI1MjE2OTQ2 LCAtMS42NDQ4NTM2MjY5NTE0NzI2NCwgLTEuNTU0NzczNTk0NTk2ODUzMDUsCi0JLTEuNDc1Nzkx MDI4MTc5MTcwNjMsIC0xLjQwNTA3MTU2MDMwOTYzMjIxLCAtMS4zNDA3NTUwMzM2OTAyMTY1NCwK LQktMS4yODE1NTE1NjU1NDQ2MDA4MSwgLTEuMjI2NTI4MTIwMDM2NjEwNDksIC0xLjE3NDk4Njc5 MjA2NjA4OTkxLAotCS0xLjEyNjM5MTEyOTAzODgwMDQ1LCAtMS4wODAzMTkzNDA4MTQ5NTYwNiwg LTEuMDM2NDMzMzg5NDkzNzg5MzgsCi0JLTAuOTk0NDU3ODgzMjA5NzUyODEsIC0wLjk1NDE2NTI1 MzE0NjE5NDE2LCAtMC45MTUzNjUwODc4NDI4MTM5MCwKLQktMC44Nzc4OTYyOTUwNTEyMjg0Niwg LTAuODQxNjIxMjMzNTcyOTE0MTgsIC0wLjgwNjQyMTI0NzAxODI0MDI1LAotCS0wLjc3MjE5MzIx NDE4ODY4NDkyLCAtMC43Mzg4NDY4NDkxODUyMTM3MSwgLTAuNzA2MzAyNTYyODQwMDg3NTIsCi0J LTAuNjc0NDg5NzUwMTk2MDgxNzEsIC0wLjY0MzM0NTQwNTM5MjkxNjg1LCAtMC42MTI4MTI5OTEw MTY2MjcwMSwKLQktMC41ODI4NDE1MDcyNzEyMTYyMCwgLTAuNTUzMzg0NzE5NTU1NjcyODEsIC0w LjUyNDQwMDUxMjcwODA0MDY3LAotCS0wLjQ5NTg1MDM0NzM0NzQ1MzIwLCAtMC40Njc2OTg3OTkx MTQ1MDgxMiwgLTAuNDM5OTEzMTY1NjczMjMzODAsCi0JLTAuNDEyNDYzMTI5NDQxNDA0NjIsIC0w LjM4NTMyMDQ2NjQwNzU2NzUxLCAtMC4zNTg0NTg3OTMyNTExOTM3MywKLQktMC4zMzE4NTMzNDY0 MzY4MTY1MiwgLTAuMzA1NDgwNzg4MDk5Mzk3MzgsIC0wLjI3OTMxOTAzNDQ0NzQ1NDA0LAotCS0w LjI1MzM0NzEwMzEzNTc5OTc4LCAtMC4yMjc1NDQ5NzY2NDExNDkzMSwgLTAuMjAxODkzNDc5MTQx ODUwNzcsCi0JLTAuMTc2Mzc0MTY0NzgwODYxMzUsIC0wLjE1MDk2OTIxNTQ5Njc3NzI1LCAtMC4x MjU2NjEzNDY4NTUwNzM5OSwKLQktMC4xMDA0MzM3MjA1MTE0Njk3NSwgLTAuMDc1MjY5ODYyMDk5 ODI5NzYsIC0wLjA1MDE1MzU4MzQ2NDczMzUyLAotCS0wLjAyNTA2ODkwODI1ODcxMTA2LCAwLjAw MDAwMDAwMDAwMDAwMDAwLCAwLjAyNTA2ODkwODI1ODcxMTA2LAotCTAuMDUwMTUzNTgzNDY0NzMz NjYsIDAuMDc1MjY5ODYyMDk5ODI5OTAsIDAuMTAwNDMzNzIwNTExNDY5OTAsCi0JMC4xMjU2NjEz NDY4NTUwNzQxMywgMC4xNTA5NjkyMTU0OTY3NzczOSwgMC4xNzYzNzQxNjQ3ODA4NjE0NiwKLQkw LjIwMTg5MzQ3OTE0MTg1MTA1LCAwLjIyNzU0NDk3NjY0MTE0OTMxLCAwLjI1MzM0NzEwMzEzNTc5 OTc4LAotCTAuMjc5MzE5MDM0NDQ3NDU0MDQsIDAuMzA1NDgwNzg4MDk5Mzk3MzgsIDAuMzMxODUz MzQ2NDM2ODE2NTIsCi0JMC4zNTg0NTg3OTMyNTExOTM3MywgMC4zODUzMjA0NjY0MDc1Njc2Miwg MC40MTI0NjMxMjk0NDE0MDQ4NCwKLQkwLjQzOTkxMzE2NTY3MzIzMzkxLCAwLjQ2NzY5ODc5OTEx NDUwODM1LCAwLjQ5NTg1MDM0NzM0NzQ1MzQ4LAotCTAuNTI0NDAwNTEyNzA4MDQxMTEsIDAuNTUz Mzg0NzE5NTU1NjczMDMsIDAuNTgyODQxNTA3MjcxMjE2MjAsCi0JMC42MTI4MTI5OTEwMTY2Mjcw MSwgMC42NDMzNDU0MDUzOTI5MTY4NSwgMC42NzQ0ODk3NTAxOTYwODE3MSwKLQkwLjcwNjMwMjU2 Mjg0MDA4NzUyLCAwLjczODg0Njg0OTE4NTIxMzcxLCAwLjc3MjE5MzIxNDE4ODY4NDkyLAotCTAu ODA2NDIxMjQ3MDE4MjQwMzYsIDAuODQxNjIxMjMzNTcyOTE0NDEsIDAuODc3ODk2Mjk1MDUxMjI4 NzksCi0JMC45MTUzNjUwODc4NDI4MTQyMywgMC45NTQxNjUyNTMxNDYxOTQ2MCwgMC45OTQ0NTc4 ODMyMDk3NTM0OCwKLQkxLjAzNjQzMzM4OTQ5Mzc4OTM4LCAxLjA4MDMxOTM0MDgxNDk1NjA2LCAx LjEyNjM5MTEyOTAzODgwMDQ1LAotCTEuMTc0OTg2NzkyMDY2MDg5OTEsIDEuMjI2NTI4MTIwMDM2 NjEwNDksIDEuMjgxNTUxNTY1NTQ0NjAwODEsCi0JMS4zNDA3NTUwMzM2OTAyMTY1NCwgMS40MDUw NzE1NjAzMDk2MzI2NSwgMS40NzU3OTEwMjgxNzkxNzA4NSwKLQkxLjU1NDc3MzU5NDU5Njg1Mzk0 LCAxLjY0NDg1MzYyNjk1MTQ3MzA4LCAxLjc1MDY4NjA3MTI1MjE3MTAyLAotCTEuODgwNzkzNjA4 MTUxMjUwNDEsIDIuMDUzNzQ4OTEwNjMxODIyMDgsIDIuMzI2MzQ3ODc0MDQwODQwNzYKLX07Ci0K LVRFU1RfQkVHSU4odGVzdF9wdF9ub3JtKSB7Ci0JdW5zaWduZWQgaTsKLQotCWZvciAoaSA9IDE7 IGkgPCBzaXplb2YocHRfbm9ybV9leHBlY3RlZCkvc2l6ZW9mKGRvdWJsZSk7IGkrKykgewotCQlk b3VibGUgcCA9IChkb3VibGUpaSAqIDAuMDE7Ci0JCWV4cGVjdF90cnVlKGRvdWJsZV9lcV9yZWwo cHRfbm9ybShwKSwgcHRfbm9ybV9leHBlY3RlZFtpXSwKLQkJICAgIE1BWF9SRUxfRVJSLCBNQVhf QUJTX0VSUiksCi0JCSAgICAiSW5jb3JyZWN0IHB0X25vcm0gcmVzdWx0IGZvciBpPSV1IiwgaSk7 Ci0JfQotfQotVEVTVF9FTkQKLQotLyoKLSAqIEV4cGVjdGVkIHB0X2NoaTIocD1bMC4wMS4uMC45 OV0gaW5jcmVtZW50PTAuMDcsCi0gKiAgICAgICAgICAgICAgICAgIGRmPXswLjEsIDEuMSwgMTAu MSwgMTAwLjEsIDEwMDAuMX0pLgotICovCi1zdGF0aWMgY29uc3QgZG91YmxlIHB0X2NoaTJfZGZb XSA9IHswLjEsIDEuMSwgMTAuMSwgMTAwLjEsIDEwMDAuMX07Ci1zdGF0aWMgY29uc3QgZG91Ymxl IHB0X2NoaTJfZXhwZWN0ZWRbXSA9IHsKLQkxLjE2ODkyNjQxMTQ1NzMyMGUtNDAsIDEuMzQ3Njgw Mzk3MDcyMDM0ZS0yMiwgMy44ODY5ODA0MTY2NjYyNjBlLTE3LAotCTguMjQ1OTUxNzI0MzU2NTY0 ZS0xNCwgMi4wNjg5MzYzNDc0OTc2MDRlLTExLCAxLjU2MjU2MTc0MzMwOTIzM2UtMDksCi0JNS40 NTk1NDMwNDM0MjY1NjRlLTA4LCAxLjExNDc3NTY4ODE0OTI1MmUtMDYsIDEuNTMyMTAxMjAyMzY0 MzcxZS0wNSwKLQkxLjU1Mzg4NDY4MzcyNjU4NWUtMDQsIDEuMjM5Mzk2OTU0OTE1OTM5ZS0wMywg OC4xNTM4NzIzMjAyNTU3MjFlLTAzLAotCTQuNjMxMTgzNzM5NjQ3NTIzZS0wMiwgMi40NzMxODcz MTE3MDEzMjdlLTAxLCAyLjE3NTI1NDgwMDE4MzYxN2UrMDAsCi0KLQkwLjAwMDM3Mjk4ODc4ODg4 NzYzNzksIDAuMDE2NDQwOTIzODIyODkyOTUxMywgMC4wNTIxNTIzMDE1MTkwNjUwMTEzLAotCTAu MTA2NDcwMTM3MjI3MTIxNjYxMiwgMC4xODAwOTEzNzM1NzkzMDgyMTE1LCAwLjI3NDg3MDQyODEx OTU2MjY5MzEsCi0JMC4zOTM5MjQ2MjgyNzg3OTg2NDk3LCAwLjU0MjA3Mjc1NTIyNjA4MTc4MTYs IDAuNzI2NzI2NTgyMjIyMTk3MzI1OSwKLQkwLjk1OTY1NTQyOTYwMDAyNTM2NzAsIDEuMjYwNzQ0 MDM3NjM4NjE2NTMyNiwgMS42NjcxMTg1MDg0NTQxNjA0MzA0LAotCTIuMjYwNDgyODk4NDczODcw NTE2NywgMy4yODY4NjEzMzQyMTQ4NjA3MDgyLCA2LjkyOTg1NzQ5MjE2OTIxMzk4MzksCi0KLQky LjYwNjY3MzU0ODYzMjUwOCwgNC42MDI5MTM3MjUyOTQ4NzcsIDUuNjQ2MTUyODEzOTI0MjEyLAot CTYuNDg4OTcxMzE1NTQwODY5LCA3LjI0OTgyMzI3NTgxNjI4NSwgNy45NzczMTQyMzE0MTA4NDEs Ci0JOC43MDAzNTQ5Mzk5NDQwNDcsIDkuNDQxNzI4MDI0MjI1ODkyLCAxMC4yMjQzMzgzMjEzNzQx MjcsCi0JMTEuMDc2NDM1MzY4ODAxMDYxLCAxMi4wMzkzMjA5MzcwMzgzODYsIDEzLjE4Mzg3ODc1 MjY5NzE2NywKLQkxNC42NTc3OTE5MzUwODQ1NzUsIDE2Ljg4NTcyODIxNjMzOTM3MywgMjMuMzYx OTkxNjgwMDMxODE3LAotCi0JNzAuMTQ4NDQwODczOTIxNTIsIDgwLjkyMzc5NDk4ODQ5MzU1LCA4 NS41MzMyNTQyMDA4NTg5MSwKLQk4OC45NDQzMzEyMDcxNTM0NywgOTEuODM3MzI3MTI4NTcwMTcs IDk0LjQ2NzE5OTQzNjA2MzAxLAotCTk2Ljk2ODk2NDc5OTk0NjM1LCA5OS40MzQxMjg0MzUxMDM2 MywgMTAxLjk0MDc0NzE5ODI5NzMzLAotCTEwNC41NzIyODY0NDMwNzI0NywgMTA3LjQzOTAwMDkz NDQ4NzM0LCAxMTAuNzE4NDQ2NzM0MTcyODcsCi0JMTE0Ljc2NjE2ODE5ODcxMzI1LCAxMjAuNTc0 MjI1MDU5NTk1NjMsIDEzNS45MjMxODgxODc1NzU1NiwKLQotCTg5OS4wMDcyNDQ3ODQ5NjQ5LCA5 MzcuOTI3MTI3ODg1ODIyMCwgOTUzLjgxMTcxODk1NjAyMDcsCi0JOTY1LjMwNzkzNzE1MDExNTQs IDk3NC44OTc0MDYxMjA3OTU0LCA5ODMuNDkzNjIzNTE4MjM0NywKLQk5OTEuNTY5MTE3MDUxODk0 NiwgOTk5LjQzMzQxMjM5NTQ2OTAsIDEwMDcuMzM5MTgyNjg1NjU1MywKLQkxMDE1LjU0NDUxNTQ5 OTk5NTEsIDEwMjQuMzc3NzA3NTYxOTU2OSwgMTAzNC4zNTM4Nzg5ODM2MjIzLAotCTEwNDYuNDg3 MjU2MTg2OTU3NywgMTA2My41NzE3NDYxOTk5NjU0LCAxMTA3LjA3NDE5NjYwNTM4NTkKLX07Ci0K LVRFU1RfQkVHSU4odGVzdF9wdF9jaGkyKSB7Ci0JdW5zaWduZWQgaSwgajsKLQl1bnNpZ25lZCBl ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHRfY2hpMl9kZikvc2l6ZW9mKGRvdWJs ZSk7IGkrKykgewotCQlkb3VibGUgZGYgPSBwdF9jaGkyX2RmW2ldOwotCQlkb3VibGUgbG5fZ2Ft bWFfZGYgPSBsbl9nYW1tYShkZiAqIDAuNSk7Ci0JCWZvciAoaiA9IDE7IGogPCAxMDA7IGogKz0g NykgewotCQkJZG91YmxlIHAgPSAoZG91YmxlKWogKiAwLjAxOwotCQkJZXhwZWN0X3RydWUoZG91 YmxlX2VxX3JlbChwdF9jaGkyKHAsIGRmLCBsbl9nYW1tYV9kZiksCi0JCQkgICAgcHRfY2hpMl9l eHBlY3RlZFtlXSwgTUFYX1JFTF9FUlIsIE1BWF9BQlNfRVJSKSwKLQkJCSAgICAiSW5jb3JyZWN0 IHB0X2NoaTIgcmVzdWx0IGZvciBpPSV1LCBqPSV1IiwgaSwgaik7Ci0JCQllKys7Ci0JCX0KLQl9 Ci19Ci1URVNUX0VORAotCi0vKgotICogRXhwZWN0ZWQgcHRfZ2FtbWEocD1bMC4xLi4wLjk5XSBp bmNyZW1lbnQ9MC4wNywKLSAqICAgICAgICAgICAgICAgICAgIHNoYXBlPVswLjUuLjMuMF0gaW5j cmVtZW50PTAuNSkuCi0gKi8KLXN0YXRpYyBjb25zdCBkb3VibGUgcHRfZ2FtbWFfc2hhcGVbXSA9 IHswLjUsIDEuMCwgMS41LCAyLjAsIDIuNSwgMy4wfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcHRf Z2FtbWFfZXhwZWN0ZWRbXSA9IHsKLQk3Ljg1NDM5Mjg5NTQ4NTEwM2UtMDUsIDUuMDQzNDY2MTA3 ODg4MDE2ZS0wMywgMS43ODgyODg5NTc3OTQ4ODNlLTAyLAotCTMuOTAwOTU2MTUwMjMyOTA2ZS0w MiwgNi45MTM4NDc1NjA2MzgwMzRlLTAyLCAxLjA5MzcxMDgzMzQ2NTc2NmUtMDEsCi0JMS42MTM0 MTI1MjM4MjU4MTdlLTAxLCAyLjI3NDY4MjExNTU5Nzg2NGUtMDEsIDMuMTE0MTE3MzIzMTI3MDgz ZS0wMSwKLQk0LjE4OTQ2NjIyMDIwNzQxN2UtMDEsIDUuNTk4MTA2Nzg5MDU5MjQ2ZS0wMSwgNy41 MjE4NTYxNDYyMDI3MDZlLTAxLAotCTEuMDM2MTI1NDI3OTExMTE5ZSswMCwgMS41MzI0NTA4NjAw MzgxODBlKzAwLCAzLjMxNzQ0ODMwMDUxMDYwNmUrMDAsCi0KLQkwLjAxMDA1MDMzNTg1MzUwMTQ0 LCAwLjA4MzM4MTYwODkzOTA1MTA3LCAwLjE2MjUxODkyOTQ5Nzc3NDk3LAotCTAuMjQ4NDYxMzU5 Mjk4NDk5NjYsIDAuMzQyNDkwMzA4OTQ2Nzc1OTYsIDAuNDQ2Mjg3MTAyNjI4NDE5NDcsCi0JMC41 NjIxMTg5MTgxNTM1NDE0MiwgMC42OTMxNDcxODA1NTk5NDUyOSwgMC44NDM5NzAwNzAyOTQ1Mjky MCwKLQkxLjAyMTY1MTI0NzUzMTk4MTY3LCAxLjIzNzg3NDM1NjAwMTYxNzY2LCAxLjUxNDEyNzcz MjYyOTc3NTc0LAotCTEuODk3MTE5OTg0ODg1ODgxOTYsIDIuNTI1NzI4NjQ0MzA4MjU3ODMsIDQu NjA1MTcwMTg1OTg4MDkwOTEsCi0KLQkwLjA1NzQxNTkwMDk0OTU1ODUzLCAwLjI0NzQ3Mzc4MDg0 ODYwNzQ0LCAwLjM5ODg4NTcyMjEyMjM2MDg0LAotCTAuNTQzOTQxMzk5OTc0NDQ5MDEsIDAuNjkw NDg4MTI1MTM5MTUxNTksIDAuODQzMTEzODk4NjEyOTYxMDQsCi0JMS4wMDU4MDYyMjIyMTQ3OTg5 OCwgMS4xODI5ODY5NDIxODc2NjkzMSwgMS4zODAzODA5NjMwNTg2MTIxMywKLQkxLjYwNjI3NzM2 MzgzMDI3NDUzLCAxLjg3Mzk2OTcwNTIyMzM3OTQ3LCAyLjIwNzQ5MjIwNDA4MDgxMDcwLAotCTIu NjU4NTIzOTE4NjU4NTQ5NDIsIDMuMzc5MzQ2MzA5ODQ4NDIyNDQsIDUuNjcyNDMzMzY1MDcyMTg0 NzYsCi0KLQkwLjE0ODU1NDc0MDI1MzI2NTksIDAuNDY1NzQ1ODAxMTY0MDM5MSwgMC42ODMyMzg2 MTMwNzA5NDA2LAotCTAuODc5NDI5NzgzNDY3MjEwMCwgMS4wNzAwNzUyODUyNDc0NTI0LCAxLjI2 Mjk2MTQyMTczNTA3NDQsCi0JMS40NjM4NDAwNDQ4NTgwNzc5LCAxLjY3ODM0Njk5MDAxNjY2MTAs IDEuOTEzMjMzODA5MDYwNjk0MCwKLQkyLjE3Nzg1ODkyMjg2MTg3NzcsIDIuNDg2ODgyMzk3MDAx MDk5MSwgMi44NjY0Njk1NjY2MjY0MTk1LAotCTMuMzcyNDQxNTQzNjA2MjExNCwgNC4xNjgyNjU4 NTEyNzU4MDcxLCA2LjYzODM1MjA2Nzk5MzgxMDgsCi0KLQkwLjI3NzE0OTAzODM2NDEzODUsIDAu NzE5NTAwMTI3OTY0MzcyNywgMC45OTY5MDgxNzMyMjY1MjQzLAotCTEuMjM4MzQ5Nzg4MDYwODA2 MSwgMS40Njc1MjA2NTk3MjY5OTI3LCAxLjY5NTMwNjQyNTE4MTY1NTIsCi0JMS45MjkxMjQzNDM1 NjA2ODA5LCAyLjE3NTczMDA5NTU0Nzc2NDEsIDIuNDQyODAzMjEzMTIxNjM5MSwKLQkyLjc0MDY1 MzQ1NjkyMzA2MTYsIDMuMDg1MTQ0NTAzOTY2NTUxMywgMy41MDQzMTAxMTIyMDMzMzY3LAotCTQu MDU3NTk5NzA2NTI2NDYzNywgNC45MTgyOTU2NDI0Njc1Mjg2LCA3LjU0MzEzNjIzNDY5NDQ5Mzcs Ci0KLQkwLjQzNjA0NTE2NTA3ODI5MzIsIDAuOTk4MzYwMDkwMjQ4NjI2NywgMS4zMzA2MzY1ODgw NzM0NTI4LAotCTEuNjEyOTc1MDgzNDc1MzgwMiwgMS44NzY3MjQxNjA2OTk0Mjk0LCAyLjEzNTcw MzI0MzYwOTc2NjAsCi0JMi4zOTg4ODUzMzM2ODY1NTY1LCAyLjY3NDA2MDMxMzcyMzU2MDMsIDIu OTY5NzU2MTczNzUxNzk1OSwKLQkzLjI5NzE0NTc3MTM4ODMyNjUsIDMuNjczMTc5NTg5ODUwNDY2 MCwgNC4xMjc1NzUxNjE3NzcwNjMxLAotCTQuNzIzMDUxNTYzMzk0NjY3NywgNS42NDE3NDc3ODY1 MzA2MDIwLCA4LjQwNTk0NjkxNDg4NTQ2MzUKLX07Ci0KLVRFU1RfQkVHSU4odGVzdF9wdF9nYW1t YV9zaGFwZSkgewotCXVuc2lnbmVkIGksIGo7Ci0JdW5zaWduZWQgZSA9IDA7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgc2l6ZW9mKHB0X2dhbW1hX3NoYXBlKS9zaXplb2YoZG91YmxlKTsgaSsrKSB7Ci0J CWRvdWJsZSBzaGFwZSA9IHB0X2dhbW1hX3NoYXBlW2ldOwotCQlkb3VibGUgbG5fZ2FtbWFfc2hh cGUgPSBsbl9nYW1tYShzaGFwZSk7Ci0JCWZvciAoaiA9IDE7IGogPCAxMDA7IGogKz0gNykgewot CQkJZG91YmxlIHAgPSAoZG91YmxlKWogKiAwLjAxOwotCQkJZXhwZWN0X3RydWUoZG91YmxlX2Vx X3JlbChwdF9nYW1tYShwLCBzaGFwZSwgMS4wLAotCQkJICAgIGxuX2dhbW1hX3NoYXBlKSwgcHRf Z2FtbWFfZXhwZWN0ZWRbZV0sIE1BWF9SRUxfRVJSLAotCQkJICAgIE1BWF9BQlNfRVJSKSwKLQkJ CSAgICAiSW5jb3JyZWN0IHB0X2dhbW1hIHJlc3VsdCBmb3IgaT0ldSwgaj0ldSIsIGksIGopOwot CQkJZSsrOwotCQl9Ci0JfQotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3B0X2dhbW1h X3NjYWxlKSB7Ci0JZG91YmxlIHNoYXBlID0gMS4wOwotCWRvdWJsZSBsbl9nYW1tYV9zaGFwZSA9 IGxuX2dhbW1hKHNoYXBlKTsKLQotCWV4cGVjdF90cnVlKGRvdWJsZV9lcV9yZWwoCi0JICAgIHB0 X2dhbW1hKDAuNSwgc2hhcGUsIDEuMCwgbG5fZ2FtbWFfc2hhcGUpICogMTAuMCwKLQkgICAgcHRf Z2FtbWEoMC41LCBzaGFwZSwgMTAuMCwgbG5fZ2FtbWFfc2hhcGUpLCBNQVhfUkVMX0VSUiwKLQkg ICAgTUFYX0FCU19FUlIpLAotCSAgICAiU2NhbGUgc2hvdWxkIGJlIHRyaXZpYWxseSBlcXVpdmFs ZW50IHRvIGV4dGVybmFsIG11bHRpcGxpY2F0aW9uIik7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1h aW4odm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X2xuX2dhbW1hX2ZhY3RvcmlhbCwK LQkgICAgdGVzdF9sbl9nYW1tYV9taXNjLAotCSAgICB0ZXN0X3B0X25vcm0sCi0JICAgIHRlc3Rf cHRfY2hpMiwKLQkgICAgdGVzdF9wdF9nYW1tYV9zaGFwZSwKLQkgICAgdGVzdF9wdF9nYW1tYV9z Y2FsZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L21wc2NfcXVldWUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9tcHNjX3F1ZXVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDg5NWVkZjguLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L21wc2NfcXVldWUuYworKysgL2Rldi9udWxsCkBAIC0x LDMwNCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9tcHNjX3F1ZXVlLmgiCi0KLXR5cGVkZWYgc3RydWN0IGVsZW1f cyBlbGVtX3Q7Ci10eXBlZGVmIHFsX2hlYWQoZWxlbV90KSBlbGVtX2xpc3RfdDsKLXR5cGVkZWYg bXBzY19xdWV1ZShlbGVtX3QpIGVsZW1fbXBzY19xdWV1ZV90Owotc3RydWN0IGVsZW1fcyB7Ci0J aW50IHRocmVhZDsKLQlpbnQgaWR4OwotCXFsX2VsbShlbGVtX3QpIGxpbms7Ci19OwotCi0vKiBJ bmNsdWRlIGJvdGggcHJvdG8gYW5kIGdlbiB0byBtYWtlIHN1cmUgdGhleSBtYXRjaCB1cC4gKi8K LW1wc2NfcXVldWVfcHJvdG8oc3RhdGljLCBlbGVtX21wc2NfcXVldWVfLCBlbGVtX21wc2NfcXVl dWVfdCwgZWxlbV90LAotICAgIGVsZW1fbGlzdF90KTsKLW1wc2NfcXVldWVfZ2VuKHN0YXRpYywg ZWxlbV9tcHNjX3F1ZXVlXywgZWxlbV9tcHNjX3F1ZXVlX3QsIGVsZW1fdCwKLSAgICBlbGVtX2xp c3RfdCwgbGluayk7Ci0KLXN0YXRpYyB2b2lkCi1pbml0X2VsZW1zX3NpbXBsZShlbGVtX3QgKmVs ZW1zLCBpbnQgbmVsZW1zLCBpbnQgdGhyZWFkKSB7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxl bXM7IGkrKykgewotCQllbGVtc1tpXS50aHJlYWQgPSB0aHJlYWQ7Ci0JCWVsZW1zW2ldLmlkeCA9 IGk7Ci0JCXFsX2VsbV9uZXcoJmVsZW1zW2ldLCBsaW5rKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk Ci1jaGVja19lbGVtc19zaW1wbGUoZWxlbV9saXN0X3QgKmxpc3QsIGludCBuZWxlbXMsIGludCB0 aHJlYWQpIHsKLQllbGVtX3QgKmVsZW07Ci0JaW50IG5leHRfaWR4ID0gMDsKLQlxbF9mb3JlYWNo KGVsZW0sIGxpc3QsIGxpbmspIHsKLQkJZXhwZWN0X2RfbHQobmV4dF9pZHgsIG5lbGVtcywgIlRv byBtYW55IGxpc3QgaXRlbXMiKTsKLQkJZXhwZWN0X2RfZXEodGhyZWFkLCBlbGVtLT50aHJlYWQs ICIiKTsKLQkJZXhwZWN0X2RfZXEobmV4dF9pZHgsIGVsZW0tPmlkeCwgIkxpc3Qgb3V0IG9mIG9y ZGVyIik7Ci0JCW5leHRfaWR4Kys7Ci0JfQotfQotCi1URVNUX0JFR0lOKHRlc3Rfc2ltcGxlKSB7 Ci0JZW51bSB7TkVMRU1TID0gMTB9OwotCWVsZW1fdCBlbGVtc1tORUxFTVNdOwotCWVsZW1fbGlz dF90IGxpc3Q7Ci0JZWxlbV9tcHNjX3F1ZXVlX3QgcXVldWU7Ci0KLQkvKiBQb3AgZW1wdHkgcXVl dWUgb250byBlbXB0eSBsaXN0IC0+IGVtcHR5IGxpc3QgKi8KLQlxbF9uZXcoJmxpc3QpOwotCWVs ZW1fbXBzY19xdWV1ZV9uZXcoJnF1ZXVlKTsKLQllbGVtX21wc2NfcXVldWVfcG9wX2JhdGNoKCZx dWV1ZSwgJmxpc3QpOwotCWV4cGVjdF90cnVlKHFsX2VtcHR5KCZsaXN0KSwgIiIpOwotCi0JLyog UG9wIGVtcHR5IHF1ZXVlIG9udG8gbm9uZW1wdHkgbGlzdCAtPiBsaXN0IHVuY2hhbmdlZCAqLwot CXFsX25ldygmbGlzdCk7Ci0JZWxlbV9tcHNjX3F1ZXVlX25ldygmcXVldWUpOwotCWluaXRfZWxl bXNfc2ltcGxlKGVsZW1zLCBORUxFTVMsIDApOwotCWZvciAoaW50IGkgPSAwOyBpIDwgTkVMRU1T OyBpKyspIHsKLQkJcWxfdGFpbF9pbnNlcnQoJmxpc3QsICZlbGVtc1tpXSwgbGluayk7Ci0JfQot CWVsZW1fbXBzY19xdWV1ZV9wb3BfYmF0Y2goJnF1ZXVlLCAmbGlzdCk7Ci0JY2hlY2tfZWxlbXNf c2ltcGxlKCZsaXN0LCBORUxFTVMsIDApOwotCi0JLyogUG9wIG5vbmVtcHR5IHF1ZXVlIG9udG8g ZW1wdHkgbGlzdCAtPiBsaXN0IHRha2VzIHF1ZXVlIGNvbnRlbnRzICovCi0JcWxfbmV3KCZsaXN0 KTsKLQllbGVtX21wc2NfcXVldWVfbmV3KCZxdWV1ZSk7Ci0JaW5pdF9lbGVtc19zaW1wbGUoZWxl bXMsIE5FTEVNUywgMCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBORUxFTVM7IGkrKykgewotCQll bGVtX21wc2NfcXVldWVfcHVzaCgmcXVldWUsICZlbGVtc1tpXSk7Ci0JfQotCWVsZW1fbXBzY19x dWV1ZV9wb3BfYmF0Y2goJnF1ZXVlLCAmbGlzdCk7Ci0JY2hlY2tfZWxlbXNfc2ltcGxlKCZsaXN0 LCBORUxFTVMsIDApOwotCi0JLyogUG9wIG5vbmVtcHR5IHF1ZXVlIG9udG8gbm9uZW1wdHkgbGlz dCAtPiBsaXN0IGdhaW5zIHF1ZXVlIGNvbnRlbnRzICovCi0JcWxfbmV3KCZsaXN0KTsKLQllbGVt X21wc2NfcXVldWVfbmV3KCZxdWV1ZSk7Ci0JaW5pdF9lbGVtc19zaW1wbGUoZWxlbXMsIE5FTEVN UywgMCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBORUxFTVMgLyAyOyBpKyspIHsKLQkJcWxfdGFp bF9pbnNlcnQoJmxpc3QsICZlbGVtc1tpXSwgbGluayk7Ci0JfQotCWZvciAoaW50IGkgPSBORUxF TVMgLyAyOyBpIDwgTkVMRU1TOyBpKyspIHsKLQkJZWxlbV9tcHNjX3F1ZXVlX3B1c2goJnF1ZXVl LCAmZWxlbXNbaV0pOwotCX0KLQllbGVtX21wc2NfcXVldWVfcG9wX2JhdGNoKCZxdWV1ZSwgJmxp c3QpOwotCWNoZWNrX2VsZW1zX3NpbXBsZSgmbGlzdCwgTkVMRU1TLCAwKTsKLQotfQotVEVTVF9F TkQKLQotVEVTVF9CRUdJTih0ZXN0X3B1c2hfc2luZ2xlX29yX2JhdGNoKSB7Ci0JZW51bSB7Ci0J CUJBVENIX01BWCA9IDEwLAotCQkvKgotCQkgKiBXZSdsbCBwdXNoIGkgaXRlbXMgb25lLWF0LWEt dGltZSwgdGhlbiBpIGl0ZW1zIGFzIGEgYmF0Y2gsCi0JCSAqIHRoZW4gaSBpdGVtcyBhcyBhIGJh dGNoIGFnYWluLCBhcyBpIHJhbmdlcyBmcm9tIDEgdG8KLQkJICogQkFUQ0hfTUFYLiAgU28gd2Ug bmVlZCAzIHRpbWVzIHRoZSBzdW0gb2YgdGhlIG51bWJlcnMgZnJvbSAxCi0JCSAqIHRvIEJBVENI X01BWCBlbGVtZW50cyB0b3RhbC4KLQkJICovCi0JCU5FTEVNUyA9IDMgKiBCQVRDSF9NQVggKiAo QkFUQ0hfTUFYIC0gMSkgLyAyCi0JfTsKLQllbGVtX3QgZWxlbXNbTkVMRU1TXTsKLQlpbml0X2Vs ZW1zX3NpbXBsZShlbGVtcywgTkVMRU1TLCAwKTsKLQllbGVtX2xpc3RfdCBsaXN0OwotCXFsX25l dygmbGlzdCk7Ci0JZWxlbV9tcHNjX3F1ZXVlX3QgcXVldWU7Ci0JZWxlbV9tcHNjX3F1ZXVlX25l dygmcXVldWUpOwotCWludCBuZXh0X2lkeCA9IDA7Ci0JZm9yIChpbnQgaSA9IDE7IGkgPCAxMDsg aSsrKSB7Ci0JCS8qIFB1c2ggaSBpdGVtcyAxIGF0IGEgdGltZS4gKi8KLQkJZm9yIChpbnQgaiA9 IDA7IGogPCBpOyBqKyspIHsKLQkJCWVsZW1fbXBzY19xdWV1ZV9wdXNoKCZxdWV1ZSwgJmVsZW1z W25leHRfaWR4XSk7Ci0JCQluZXh0X2lkeCsrOwotCQl9Ci0JCS8qIFB1c2ggaSBpdGVtcyBpbiBi YXRjaC4gKi8KLQkJZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKLQkJCXFsX3RhaWxfaW5z ZXJ0KCZsaXN0LCAmZWxlbXNbbmV4dF9pZHhdLCBsaW5rKTsKLQkJCW5leHRfaWR4Kys7Ci0JCX0K LQkJZWxlbV9tcHNjX3F1ZXVlX3B1c2hfYmF0Y2goJnF1ZXVlLCAmbGlzdCk7Ci0JCWV4cGVjdF90 cnVlKHFsX2VtcHR5KCZsaXN0KSwgIkJhdGNoIHB1c2ggc2hvdWxkIGVtcHR5IHNvdXJjZSIpOwot CQkvKgotCQkgKiBQdXNoIGkgaXRlbXMgaW4gYmF0Y2gsIGFnYWluLiAgVGhpcyB0ZXN0cyB0d28g YmF0Y2hlcwotCQkgKiBwcm9jZWVkaW5nIG9uZSBhZnRlciB0aGUgb3RoZXIuCi0JCSAqLwotCQlm b3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewotCQkJcWxfdGFpbF9pbnNlcnQoJmxpc3QsICZl bGVtc1tuZXh0X2lkeF0sIGxpbmspOwotCQkJbmV4dF9pZHgrKzsKLQkJfQotCQllbGVtX21wc2Nf cXVldWVfcHVzaF9iYXRjaCgmcXVldWUsICZsaXN0KTsKLQkJZXhwZWN0X3RydWUocWxfZW1wdHko Jmxpc3QpLCAiQmF0Y2ggcHVzaCBzaG91bGQgZW1wdHkgc291cmNlIik7Ci0JfQotCWV4cGVjdF9k X2VxKE5FTEVNUywgbmV4dF9pZHgsICJNaXNjb21wdXRlZCBudW1iZXIgb2YgZWxlbXMgdG8gcHVz aC4iKTsKLQotCWV4cGVjdF90cnVlKHFsX2VtcHR5KCZsaXN0KSwgIiIpOwotCWVsZW1fbXBzY19x dWV1ZV9wb3BfYmF0Y2goJnF1ZXVlLCAmbGlzdCk7Ci0JY2hlY2tfZWxlbXNfc2ltcGxlKCZsaXN0 LCBORUxFTVMsIDApOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X211bHRpX29wKSB7 Ci0JZW51bSB7TkVMRU1TID0gMjB9OwotCWVsZW1fdCBlbGVtc1tORUxFTVNdOwotCWluaXRfZWxl bXNfc2ltcGxlKGVsZW1zLCBORUxFTVMsIDApOwotCWVsZW1fbGlzdF90IHB1c2hfbGlzdDsKLQlx bF9uZXcoJnB1c2hfbGlzdCk7Ci0JZWxlbV9saXN0X3QgcmVzdWx0X2xpc3Q7Ci0JcWxfbmV3KCZy ZXN1bHRfbGlzdCk7Ci0JZWxlbV9tcHNjX3F1ZXVlX3QgcXVldWU7Ci0JZWxlbV9tcHNjX3F1ZXVl X25ldygmcXVldWUpOwotCi0JaW50IG5leHRfaWR4ID0gMDsKLQkvKiBQdXNoIGZpcnN0IHF1YXJ0 ZXIgMS1hdC1hLXRpbWUuICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBORUxFTVMgLyA0OyBpKysp IHsKLQkJZWxlbV9tcHNjX3F1ZXVlX3B1c2goJnF1ZXVlLCAmZWxlbXNbbmV4dF9pZHhdKTsKLQkJ bmV4dF9pZHgrKzsKLQl9Ci0JLyogUHVzaCBzZWNvbmQgcXVhcnRlciBpbiBiYXRjaC4gKi8KLQlm b3IgKGludCBpID0gTkVMRU1TIC8gNDsgaSA8IE5FTEVNUyAvIDI7IGkrKykgewotCQlxbF90YWls X2luc2VydCgmcHVzaF9saXN0LCAmZWxlbXNbbmV4dF9pZHhdLCBsaW5rKTsKLQkJbmV4dF9pZHgr KzsKLQl9Ci0JZWxlbV9tcHNjX3F1ZXVlX3B1c2hfYmF0Y2goJnF1ZXVlLCAmcHVzaF9saXN0KTsK LQkvKiBCYXRjaCBwb3AgYWxsIHB1c2hlZCBlbGVtZW50cy4gKi8KLQllbGVtX21wc2NfcXVldWVf cG9wX2JhdGNoKCZxdWV1ZSwgJnJlc3VsdF9saXN0KTsKLQkvKiBQdXNoIHRoaXJkIHF1YXJ0ZXIg aW4gYmF0Y2guICovCi0JZm9yIChpbnQgaSA9IE5FTEVNUyAvIDI7IGkgPCAzICogTkVMRU1TIC8g NDsgaSsrKSB7Ci0JCXFsX3RhaWxfaW5zZXJ0KCZwdXNoX2xpc3QsICZlbGVtc1tuZXh0X2lkeF0s IGxpbmspOwotCQluZXh0X2lkeCsrOwotCX0KLQllbGVtX21wc2NfcXVldWVfcHVzaF9iYXRjaCgm cXVldWUsICZwdXNoX2xpc3QpOwotCS8qIFB1c2ggbGFzdCBxdWFydGVyIG9uZS1hdC1hLXRpbWUu ICovCi0JZm9yIChpbnQgaSA9IDMgKiBORUxFTVMgLyA0OyBpIDwgTkVMRU1TOyBpKyspIHsKLQkJ ZWxlbV9tcHNjX3F1ZXVlX3B1c2goJnF1ZXVlLCAmZWxlbXNbbmV4dF9pZHhdKTsKLQkJbmV4dF9p ZHgrKzsKLQl9Ci0JLyogUG9wIHRoZW0gYWdhaW4uICBPcmRlciBvZiBleGlzdGluZyBsaXN0IHNo b3VsZCBiZSBwcmVzZXJ2ZWQuICovCi0JZWxlbV9tcHNjX3F1ZXVlX3BvcF9iYXRjaCgmcXVldWUs ICZyZXN1bHRfbGlzdCk7Ci0KLQljaGVja19lbGVtc19zaW1wbGUoJnJlc3VsdF9saXN0LCBORUxF TVMsIDApOwotCi19Ci1URVNUX0VORAotCi10eXBlZGVmIHN0cnVjdCBwdXNoZXJfYXJnX3MgcHVz aGVyX2FyZ190Owotc3RydWN0IHB1c2hlcl9hcmdfcyB7Ci0JZWxlbV9tcHNjX3F1ZXVlX3QgKnF1 ZXVlOwotCWludCB0aHJlYWQ7Ci0JZWxlbV90ICplbGVtczsKLQlpbnQgbmVsZW1zOwotfTsKLQot dHlwZWRlZiBzdHJ1Y3QgcG9wcGVyX2FyZ19zIHBvcHBlcl9hcmdfdDsKLXN0cnVjdCBwb3BwZXJf YXJnX3MgewotCWVsZW1fbXBzY19xdWV1ZV90ICpxdWV1ZTsKLQlpbnQgbnB1c2hlcnM7Ci0JaW50 IG5lbGVtc19wZXJfcHVzaGVyOwotCWludCAqcHVzaGVyX2NvdW50czsKLX07Ci0KLXN0YXRpYyB2 b2lkICoKLXRoZF9wdXNoZXIodm9pZCAqdm9pZF9hcmcpIHsKLQlwdXNoZXJfYXJnX3QgKmFyZyA9 IChwdXNoZXJfYXJnX3QgKil2b2lkX2FyZzsKLQlpbnQgbmV4dF9pZHggPSAwOwotCXdoaWxlIChu ZXh0X2lkeCA8IGFyZy0+bmVsZW1zKSB7Ci0JCS8qIFB1c2ggMTAgaXRlbXMgaW4gYmF0Y2guICov Ci0JCWVsZW1fbGlzdF90IGxpc3Q7Ci0JCXFsX25ldygmbGlzdCk7Ci0JCWludCBsaW1pdCA9IG5l eHRfaWR4ICsgMTA7Ci0JCXdoaWxlIChuZXh0X2lkeCA8IGFyZy0+bmVsZW1zICYmIG5leHRfaWR4 IDwgbGltaXQpIHsKLQkJCXFsX3RhaWxfaW5zZXJ0KCZsaXN0LCAmYXJnLT5lbGVtc1tuZXh0X2lk eF0sIGxpbmspOwotCQkJbmV4dF9pZHgrKzsKLQkJfQotCQllbGVtX21wc2NfcXVldWVfcHVzaF9i YXRjaChhcmctPnF1ZXVlLCAmbGlzdCk7Ci0JCS8qIFB1c2ggMTAgaXRlbXMgb25lLWF0LWEtdGlt ZS4gKi8KLQkJbGltaXQgPSBuZXh0X2lkeCArIDEwOwotCQl3aGlsZSAobmV4dF9pZHggPCBhcmct Pm5lbGVtcyAmJiBuZXh0X2lkeCA8IGxpbWl0KSB7Ci0JCQllbGVtX21wc2NfcXVldWVfcHVzaChh cmctPnF1ZXVlLCAmYXJnLT5lbGVtc1tuZXh0X2lkeF0pOwotCQkJbmV4dF9pZHgrKzsKLQkJfQot Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCAqCi10aGRfcG9wcGVyKHZvaWQg KnZvaWRfYXJnKSB7Ci0JcG9wcGVyX2FyZ190ICphcmcgPSAocG9wcGVyX2FyZ190ICopdm9pZF9h cmc7Ci0JaW50IGRvbmVfcHVzaGVycyA9IDA7Ci0Jd2hpbGUgKGRvbmVfcHVzaGVycyA8IGFyZy0+ bnB1c2hlcnMpIHsKLQkJZWxlbV9saXN0X3QgbGlzdDsKLQkJcWxfbmV3KCZsaXN0KTsKLQkJZWxl bV9tcHNjX3F1ZXVlX3BvcF9iYXRjaChhcmctPnF1ZXVlLCAmbGlzdCk7Ci0JCWVsZW1fdCAqZWxl bTsKLQkJcWxfZm9yZWFjaChlbGVtLCAmbGlzdCwgbGluaykgewotCQkJaW50IHRocmVhZCA9IGVs ZW0tPnRocmVhZDsKLQkJCWludCBpZHggPSBlbGVtLT5pZHg7Ci0JCQlleHBlY3RfZF9lcShhcmct PnB1c2hlcl9jb3VudHNbdGhyZWFkXSwgaWR4LAotCQkJICAgICJUaHJlYWQncyBwdXNoZXMgcmVv cmRlcmVkIik7Ci0JCQlhcmctPnB1c2hlcl9jb3VudHNbdGhyZWFkXSsrOwotCQkJaWYgKGFyZy0+ cHVzaGVyX2NvdW50c1t0aHJlYWRdCi0JCQkgICAgPT0gYXJnLT5uZWxlbXNfcGVyX3B1c2hlcikg ewotCQkJCWRvbmVfcHVzaGVycysrOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBOVUxMOwotfQot Ci1URVNUX0JFR0lOKHRlc3RfbXVsdGlwbGVfdGhyZWFkcykgewotCWVudW0gewotCQlOUFVTSEVS UyA9IDQsCi0JCU5FTEVNU19QRVJfUFVTSEVSID0gMTAwMCoxMDAwLAotCX07Ci0JdGhkX3QgcHVz aGVyc1tOUFVTSEVSU107Ci0JcHVzaGVyX2FyZ190IHB1c2hlcl9hcmdbTlBVU0hFUlNdOwotCi0J dGhkX3QgcG9wcGVyOwotCXBvcHBlcl9hcmdfdCBwb3BwZXJfYXJnOwotCi0JZWxlbV9tcHNjX3F1 ZXVlX3QgcXVldWU7Ci0JZWxlbV9tcHNjX3F1ZXVlX25ldygmcXVldWUpOwotCi0JZWxlbV90ICpl bGVtcyA9IGNhbGxvYyhOUFVTSEVSUyAqIE5FTEVNU19QRVJfUFVTSEVSLCBzaXplb2YoZWxlbV90 KSk7Ci0JZWxlbV90ICplbGVtX2l0ZXIgPSBlbGVtczsKLQlmb3IgKGludCBpID0gMDsgaSA8IE5Q VVNIRVJTOyBpKyspIHsKLQkJcHVzaGVyX2FyZ1tpXS5xdWV1ZSA9ICZxdWV1ZTsKLQkJcHVzaGVy X2FyZ1tpXS50aHJlYWQgPSBpOwotCQlwdXNoZXJfYXJnW2ldLmVsZW1zID0gZWxlbV9pdGVyOwot CQlwdXNoZXJfYXJnW2ldLm5lbGVtcyA9IE5FTEVNU19QRVJfUFVTSEVSOwotCi0JCWluaXRfZWxl bXNfc2ltcGxlKGVsZW1faXRlciwgTkVMRU1TX1BFUl9QVVNIRVIsIGkpOwotCQllbGVtX2l0ZXIg Kz0gTkVMRU1TX1BFUl9QVVNIRVI7Ci0JfQotCXBvcHBlcl9hcmcucXVldWUgPSAmcXVldWU7Ci0J cG9wcGVyX2FyZy5ucHVzaGVycyA9IE5QVVNIRVJTOwotCXBvcHBlcl9hcmcubmVsZW1zX3Blcl9w dXNoZXIgPSBORUxFTVNfUEVSX1BVU0hFUjsKLQlpbnQgcHVzaGVyX2NvdW50c1tOUFVTSEVSU10g PSB7MH07Ci0JcG9wcGVyX2FyZy5wdXNoZXJfY291bnRzID0gcHVzaGVyX2NvdW50czsKLQotCXRo ZF9jcmVhdGUoJnBvcHBlciwgdGhkX3BvcHBlciwgKHZvaWQgKikmcG9wcGVyX2FyZyk7Ci0JZm9y IChpbnQgaSA9IDA7IGkgPCBOUFVTSEVSUzsgaSsrKSB7Ci0JCXRoZF9jcmVhdGUoJnB1c2hlcnNb aV0sIHRoZF9wdXNoZXIsICZwdXNoZXJfYXJnW2ldKTsKLQl9Ci0KLQl0aGRfam9pbihwb3BwZXIs IE5VTEwpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgTlBVU0hFUlM7IGkrKykgewotCQl0aGRfam9p bihwdXNoZXJzW2ldLCBOVUxMKTsKLQl9Ci0KLQlmb3IgKGludCBpID0gMDsgaSA8IE5QVVNIRVJT OyBpKyspIHsKLQkJZXhwZWN0X2RfZXEoTkVMRU1TX1BFUl9QVVNIRVIsIHB1c2hlcl9jb3VudHNb aV0sICIiKTsKLQl9Ci0KLQlmcmVlKGVsZW1zKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2 b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF9zaW1wbGUsCi0J ICAgIHRlc3RfcHVzaF9zaW5nbGVfb3JfYmF0Y2gsCi0JICAgIHRlc3RfbXVsdGlfb3AsCi0JICAg IHRlc3RfbXVsdGlwbGVfdGhyZWFkcyk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L21xLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbXEuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZjgzM2Y3Ny4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWls ZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbXEuYworKysgL2Rldi9udWxsCkBAIC0xLDg5ICsw LDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2RlZmluZSBOU0VOREVS UwkzCi0jZGVmaW5lIE5NU0dTCQkxMDAwMDAKLQotdHlwZWRlZiBzdHJ1Y3QgbXFfbXNnX3MgbXFf bXNnX3Q7Ci1zdHJ1Y3QgbXFfbXNnX3MgewotCW1xX21zZyhtcV9tc2dfdCkJbGluazsKLX07Ci1t cV9nZW4oc3RhdGljLCBtcV8sIG1xX3QsIG1xX21zZ190LCBsaW5rKQotCi1URVNUX0JFR0lOKHRl c3RfbXFfYmFzaWMpIHsKLQltcV90IG1xOwotCW1xX21zZ190IG1zZzsKLQotCWV4cGVjdF9mYWxz ZShtcV9pbml0KCZtcSksICJVbmV4cGVjdGVkIG1xX2luaXQoKSBmYWlsdXJlIik7Ci0JZXhwZWN0 X3VfZXEobXFfY291bnQoJm1xKSwgMCwgIm1xIHNob3VsZCBiZSBlbXB0eSIpOwotCWV4cGVjdF9w dHJfbnVsbChtcV90cnlnZXQoJm1xKSwKLQkgICAgIm1xX3RyeWdldCgpIHNob3VsZCBmYWlsIHdo ZW4gdGhlIHF1ZXVlIGlzIGVtcHR5Iik7Ci0KLQltcV9wdXQoJm1xLCAmbXNnKTsKLQlleHBlY3Rf dV9lcShtcV9jb3VudCgmbXEpLCAxLCAibXEgc2hvdWxkIGNvbnRhaW4gb25lIG1lc3NhZ2UiKTsK LQlleHBlY3RfcHRyX2VxKG1xX3RyeWdldCgmbXEpLCAmbXNnLCAibXFfdHJ5Z2V0KCkgc2hvdWxk IHJldHVybiBtc2ciKTsKLQotCW1xX3B1dCgmbXEsICZtc2cpOwotCWV4cGVjdF9wdHJfZXEobXFf Z2V0KCZtcSksICZtc2csICJtcV9nZXQoKSBzaG91bGQgcmV0dXJuIG1zZyIpOwotCi0JbXFfZmlu aSgmbXEpOwotfQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQgKgotdGhkX3JlY2VpdmVyX3N0YXJ0 KHZvaWQgKmFyZykgewotCW1xX3QgKm1xID0gKG1xX3QgKilhcmc7Ci0JdW5zaWduZWQgaTsKLQot CWZvciAoaSA9IDA7IGkgPCAoTlNFTkRFUlMgKiBOTVNHUyk7IGkrKykgewotCQltcV9tc2dfdCAq bXNnID0gbXFfZ2V0KG1xKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChtc2csICJtcV9nZXQoKSBz aG91bGQgbmV2ZXIgcmV0dXJuIE5VTEwiKTsKLQkJZGFsbG9jeChtc2csIDApOwotCX0KLQlyZXR1 cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgKgotdGhkX3NlbmRlcl9zdGFydCh2b2lkICphcmcp IHsKLQltcV90ICptcSA9IChtcV90ICopYXJnOwotCXVuc2lnbmVkIGk7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgTk1TR1M7IGkrKykgewotCQltcV9tc2dfdCAqbXNnOwotCQl2b2lkICpwOwotCQlwID0g bWFsbG9jeChzaXplb2YobXFfbXNnX3QpLCAwKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAi VW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwotCQltc2cgPSAobXFfbXNnX3QgKilwOwot CQltcV9wdXQobXEsIG1zZyk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1URVNUX0JFR0lOKHRl c3RfbXFfdGhyZWFkZWQpIHsKLQltcV90IG1xOwotCXRoZF90IHJlY2VpdmVyOwotCXRoZF90IHNl bmRlcnNbTlNFTkRFUlNdOwotCXVuc2lnbmVkIGk7Ci0KLQlleHBlY3RfZmFsc2UobXFfaW5pdCgm bXEpLCAiVW5leHBlY3RlZCBtcV9pbml0KCkgZmFpbHVyZSIpOwotCi0JdGhkX2NyZWF0ZSgmcmVj ZWl2ZXIsIHRoZF9yZWNlaXZlcl9zdGFydCwgKHZvaWQgKikmbXEpOwotCWZvciAoaSA9IDA7IGkg PCBOU0VOREVSUzsgaSsrKSB7Ci0JCXRoZF9jcmVhdGUoJnNlbmRlcnNbaV0sIHRoZF9zZW5kZXJf c3RhcnQsICh2b2lkICopJm1xKTsKLQl9Ci0KLQl0aGRfam9pbihyZWNlaXZlciwgTlVMTCk7Ci0J Zm9yIChpID0gMDsgaSA8IE5TRU5ERVJTOyBpKyspIHsKLQkJdGhkX2pvaW4oc2VuZGVyc1tpXSwg TlVMTCk7Ci0JfQotCi0JbXFfZmluaSgmbXEpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZv aWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9tcV9iYXNpYywKLQkgICAgdGVzdF9tcV90 aHJlYWRlZCk7Ci19Ci0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvbXR4LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvbXR4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDRhZWViYzEuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L210eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI2lu Y2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jZGVmaW5lIE5USFJFQURTCTIKLSNkZWZp bmUgTklOQ1JTCQkyMDAwMDAwCi0KLVRFU1RfQkVHSU4odGVzdF9tdHhfYmFzaWMpIHsKLQltdHhf dCBtdHg7Ci0KLQlleHBlY3RfZmFsc2UobXR4X2luaXQoJm10eCksICJVbmV4cGVjdGVkIG10eF9p bml0KCkgZmFpbHVyZSIpOwotCW10eF9sb2NrKCZtdHgpOwotCW10eF91bmxvY2soJm10eCk7Ci0J bXR4X2ZpbmkoJm10eCk7Ci19Ci1URVNUX0VORAotCi10eXBlZGVmIHN0cnVjdCB7Ci0JbXR4X3QJ CW10eDsKLQl1bnNpZ25lZAl4OwotfSB0aGRfc3RhcnRfYXJnX3Q7Ci0KLXN0YXRpYyB2b2lkICoK LXRoZF9zdGFydCh2b2lkICp2YXJnKSB7Ci0JdGhkX3N0YXJ0X2FyZ190ICphcmcgPSAodGhkX3N0 YXJ0X2FyZ190ICopdmFyZzsKLQl1bnNpZ25lZCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE5JTkNS UzsgaSsrKSB7Ci0JCW10eF9sb2NrKCZhcmctPm10eCk7Ci0JCWFyZy0+eCsrOwotCQltdHhfdW5s b2NrKCZhcmctPm10eCk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1URVNUX0JFR0lOKHRlc3Rf bXR4X3JhY2UpIHsKLQl0aGRfc3RhcnRfYXJnX3QgYXJnOwotCXRoZF90IHRoZHNbTlRIUkVBRFNd OwotCXVuc2lnbmVkIGk7Ci0KLQlleHBlY3RfZmFsc2UobXR4X2luaXQoJmFyZy5tdHgpLCAiVW5l eHBlY3RlZCBtdHhfaW5pdCgpIGZhaWx1cmUiKTsKLQlhcmcueCA9IDA7Ci0JZm9yIChpID0gMDsg aSA8IE5USFJFQURTOyBpKyspIHsKLQkJdGhkX2NyZWF0ZSgmdGhkc1tpXSwgdGhkX3N0YXJ0LCAo dm9pZCAqKSZhcmcpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTlRIUkVBRFM7IGkrKykgewotCQl0 aGRfam9pbih0aGRzW2ldLCBOVUxMKTsKLQl9Ci0JZXhwZWN0X3VfZXEoYXJnLngsIE5USFJFQURT ICogTklOQ1JTLAotCSAgICAiUmFjZS1yZWxhdGVkIGNvdW50ZXIgY29ycnVwdGlvbiIpOwotfQot VEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9t dHhfYmFzaWMsCi0JICAgIHRlc3RfbXR4X3JhY2UpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9uc3RpbWUuYyBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9uc3RpbWUuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYyMzhhYi4uMDAwMDAwMAotLS0gYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvbnN0aW1lLmMKKysrIC9k ZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5o IgotCi0jZGVmaW5lIEJJTExJT04JVUlOVDY0X0MoMTAwMDAwMDAwMCkKLQotVEVTVF9CRUdJTih0 ZXN0X25zdGltZV9pbml0KSB7Ci0JbnN0aW1lX3QgbnN0OwotCi0JbnN0aW1lX2luaXQoJm5zdCwg NDIwMDAwMDAwNDMpOwotCWV4cGVjdF91NjRfZXEobnN0aW1lX25zKCZuc3QpLCA0MjAwMDAwMDA0 MywgIm5zIGluY29ycmVjdGx5IHJlYWQiKTsKLQlleHBlY3RfdTY0X2VxKG5zdGltZV9zZWMoJm5z dCksIDQyLCAic2VjIGluY29ycmVjdGx5IHJlYWQiKTsKLQlleHBlY3RfdTY0X2VxKG5zdGltZV9u c2VjKCZuc3QpLCA0MywgIm5zZWMgaW5jb3JyZWN0bHkgcmVhZCIpOwotfQotVEVTVF9FTkQKLQot VEVTVF9CRUdJTih0ZXN0X25zdGltZV9pbml0MikgewotCW5zdGltZV90IG5zdDsKLQotCW5zdGlt ZV9pbml0MigmbnN0LCA0MiwgNDMpOwotCWV4cGVjdF91NjRfZXEobnN0aW1lX3NlYygmbnN0KSwg NDIsICJzZWMgaW5jb3JyZWN0bHkgcmVhZCIpOwotCWV4cGVjdF91NjRfZXEobnN0aW1lX25zZWMo Jm5zdCksIDQzLCAibnNlYyBpbmNvcnJlY3RseSByZWFkIik7Ci19Ci1URVNUX0VORAotCi1URVNU X0JFR0lOKHRlc3RfbnN0aW1lX2NvcHkpIHsKLQluc3RpbWVfdCBuc3RhLCBuc3RiOwotCi0JbnN0 aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOwotCW5zdGltZV9pbml0X3plcm8oJm5zdGIpOwotCW5z dGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7Ci0JZXhwZWN0X3U2NF9lcShuc3RpbWVfc2VjKCZuc3Ri KSwgNDIsICJzZWMgaW5jb3JyZWN0bHkgY29waWVkIik7Ci0JZXhwZWN0X3U2NF9lcShuc3RpbWVf bnNlYygmbnN0YiksIDQzLCAibnNlYyBpbmNvcnJlY3RseSBjb3BpZWQiKTsKLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9uc3RpbWVfY29tcGFyZSkgewotCW5zdGltZV90IG5zdGEsIG5z dGI7Ci0KLQluc3RpbWVfaW5pdDIoJm5zdGEsIDQyLCA0Myk7Ci0JbnN0aW1lX2NvcHkoJm5zdGIs ICZuc3RhKTsKLQlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAwLCAi VGltZXMgc2hvdWxkIGJlIGVxdWFsIik7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5z dGIsICZuc3RhKSwgMCwgIlRpbWVzIHNob3VsZCBiZSBlcXVhbCIpOwotCi0JbnN0aW1lX2luaXQy KCZuc3RiLCA0MiwgNDIpOwotCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3RhLCAmbnN0 YiksIDEsCi0JICAgICJuc3RhIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gbnN0YiIpOwotCWV4cGVj dF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3RiLCAmbnN0YSksIC0xLAotCSAgICAibnN0YiBzaG91 bGQgYmUgbGVzcyB0aGFuIG5zdGEiKTsKLQotCW5zdGltZV9pbml0MigmbnN0YiwgNDIsIDQ0KTsK LQlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAtMSwKLQkgICAgIm5z dGEgc2hvdWxkIGJlIGxlc3MgdGhhbiBuc3RiIik7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBh cmUoJm5zdGIsICZuc3RhKSwgMSwKLQkgICAgIm5zdGIgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBu c3RhIik7Ci0KLQluc3RpbWVfaW5pdDIoJm5zdGIsIDQxLCBCSUxMSU9OIC0gMSk7Ci0JZXhwZWN0 X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5zdGEsICZuc3RiKSwgMSwKLQkgICAgIm5zdGEgc2hvdWxk IGJlIGdyZWF0ZXIgdGhhbiBuc3RiIik7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5z dGIsICZuc3RhKSwgLTEsCi0JICAgICJuc3RiIHNob3VsZCBiZSBsZXNzIHRoYW4gbnN0YSIpOwot Ci0JbnN0aW1lX2luaXQyKCZuc3RiLCA0MywgMCk7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBh cmUoJm5zdGEsICZuc3RiKSwgLTEsCi0JICAgICJuc3RhIHNob3VsZCBiZSBsZXNzIHRoYW4gbnN0 YiIpOwotCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3RiLCAmbnN0YSksIDEsCi0JICAg ICJuc3RiIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gbnN0YSIpOwotfQotVEVTVF9FTkQKLQotVEVT VF9CRUdJTih0ZXN0X25zdGltZV9hZGQpIHsKLQluc3RpbWVfdCBuc3RhLCBuc3RiOwotCi0JbnN0 aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOwotCW5zdGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7Ci0J bnN0aW1lX2FkZCgmbnN0YSwgJm5zdGIpOwotCW5zdGltZV9pbml0MigmbnN0YiwgODQsIDg2KTsK LQlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAwLAotCSAgICAiSW5j b3JyZWN0IGFkZGl0aW9uIHJlc3VsdCIpOwotCi0JbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgQklM TElPTiAtIDEpOwotCW5zdGltZV9jb3B5KCZuc3RiLCAmbnN0YSk7Ci0JbnN0aW1lX2FkZCgmbnN0 YSwgJm5zdGIpOwotCW5zdGltZV9pbml0MigmbnN0YiwgODUsIEJJTExJT04gLSAyKTsKLQlleHBl Y3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAwLAotCSAgICAiSW5jb3JyZWN0 IGFkZGl0aW9uIHJlc3VsdCIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X25zdGlt ZV9pYWRkKSB7Ci0JbnN0aW1lX3QgbnN0YSwgbnN0YjsKLQotCW5zdGltZV9pbml0MigmbnN0YSwg NDIsIEJJTExJT04gLSAxKTsKLQluc3RpbWVfaWFkZCgmbnN0YSwgMSk7Ci0JbnN0aW1lX2luaXQy KCZuc3RiLCA0MywgMCk7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5zdGEsICZuc3Ri KSwgMCwKLQkgICAgIkluY29ycmVjdCBhZGRpdGlvbiByZXN1bHQiKTsKLQotCW5zdGltZV9pbml0 MigmbnN0YSwgNDIsIDEpOwotCW5zdGltZV9pYWRkKCZuc3RhLCBCSUxMSU9OICsgMSk7Ci0JbnN0 aW1lX2luaXQyKCZuc3RiLCA0MywgMik7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5z dGEsICZuc3RiKSwgMCwKLQkgICAgIkluY29ycmVjdCBhZGRpdGlvbiByZXN1bHQiKTsKLX0KLVRF U1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9uc3RpbWVfc3VidHJhY3QpIHsKLQluc3RpbWVfdCBu c3RhLCBuc3RiOwotCi0JbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOwotCW5zdGltZV9jb3B5 KCZuc3RiLCAmbnN0YSk7Ci0JbnN0aW1lX3N1YnRyYWN0KCZuc3RhLCAmbnN0Yik7Ci0JbnN0aW1l X2luaXRfemVybygmbnN0Yik7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5zdGEsICZu c3RiKSwgMCwKLQkgICAgIkluY29ycmVjdCBzdWJ0cmFjdGlvbiByZXN1bHQiKTsKLQotCW5zdGlt ZV9pbml0MigmbnN0YSwgNDIsIDQzKTsKLQluc3RpbWVfaW5pdDIoJm5zdGIsIDQxLCA0NCk7Ci0J bnN0aW1lX3N1YnRyYWN0KCZuc3RhLCAmbnN0Yik7Ci0JbnN0aW1lX2luaXQyKCZuc3RiLCAwLCBC SUxMSU9OIC0gMSk7Ci0JZXhwZWN0X2RfZXEobnN0aW1lX2NvbXBhcmUoJm5zdGEsICZuc3RiKSwg MCwKLQkgICAgIkluY29ycmVjdCBzdWJ0cmFjdGlvbiByZXN1bHQiKTsKLX0KLVRFU1RfRU5ECi0K LVRFU1RfQkVHSU4odGVzdF9uc3RpbWVfaXN1YnRyYWN0KSB7Ci0JbnN0aW1lX3QgbnN0YSwgbnN0 YjsKLQotCW5zdGltZV9pbml0MigmbnN0YSwgNDIsIDQzKTsKLQluc3RpbWVfaXN1YnRyYWN0KCZu c3RhLCA0MipCSUxMSU9OICsgNDMpOwotCW5zdGltZV9pbml0X3plcm8oJm5zdGIpOwotCWV4cGVj dF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3RhLCAmbnN0YiksIDAsCi0JICAgICJJbmNvcnJlY3Qg c3VidHJhY3Rpb24gcmVzdWx0Iik7Ci0KLQluc3RpbWVfaW5pdDIoJm5zdGEsIDQyLCA0Myk7Ci0J bnN0aW1lX2lzdWJ0cmFjdCgmbnN0YSwgNDEqQklMTElPTiArIDQ0KTsKLQluc3RpbWVfaW5pdDIo Jm5zdGIsIDAsIEJJTExJT04gLSAxKTsKLQlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0 YSwgJm5zdGIpLCAwLAotCSAgICAiSW5jb3JyZWN0IHN1YnRyYWN0aW9uIHJlc3VsdCIpOwotfQot VEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X25zdGltZV9pbXVsdGlwbHkpIHsKLQluc3RpbWVf dCBuc3RhLCBuc3RiOwotCi0JbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOwotCW5zdGltZV9p bXVsdGlwbHkoJm5zdGEsIDEwKTsKLQluc3RpbWVfaW5pdDIoJm5zdGIsIDQyMCwgNDMwKTsKLQll eHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0YSwgJm5zdGIpLCAwLAotCSAgICAiSW5jb3Jy ZWN0IG11bHRpcGxpY2F0aW9uIHJlc3VsdCIpOwotCi0JbnN0aW1lX2luaXQyKCZuc3RhLCA0Miwg NjY2NjY2NjY2KTsKLQluc3RpbWVfaW11bHRpcGx5KCZuc3RhLCAzKTsKLQluc3RpbWVfaW5pdDIo Jm5zdGIsIDEyNywgOTk5OTk5OTk4KTsKLQlleHBlY3RfZF9lcShuc3RpbWVfY29tcGFyZSgmbnN0 YSwgJm5zdGIpLCAwLAotCSAgICAiSW5jb3JyZWN0IG11bHRpcGxpY2F0aW9uIHJlc3VsdCIpOwot fQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X25zdGltZV9pZGl2aWRlKSB7Ci0JbnN0aW1l X3QgbnN0YSwgbnN0YjsKLQotCW5zdGltZV9pbml0MigmbnN0YSwgNDIsIDQzKTsKLQluc3RpbWVf Y29weSgmbnN0YiwgJm5zdGEpOwotCW5zdGltZV9pbXVsdGlwbHkoJm5zdGEsIDEwKTsKLQluc3Rp bWVfaWRpdmlkZSgmbnN0YSwgMTApOwotCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3Rh LCAmbnN0YiksIDAsCi0JICAgICJJbmNvcnJlY3QgZGl2aXNpb24gcmVzdWx0Iik7Ci0KLQluc3Rp bWVfaW5pdDIoJm5zdGEsIDQyLCA2NjY2NjY2NjYpOwotCW5zdGltZV9jb3B5KCZuc3RiLCAmbnN0 YSk7Ci0JbnN0aW1lX2ltdWx0aXBseSgmbnN0YSwgMyk7Ci0JbnN0aW1lX2lkaXZpZGUoJm5zdGEs IDMpOwotCWV4cGVjdF9kX2VxKG5zdGltZV9jb21wYXJlKCZuc3RhLCAmbnN0YiksIDAsCi0JICAg ICJJbmNvcnJlY3QgZGl2aXNpb24gcmVzdWx0Iik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lO KHRlc3RfbnN0aW1lX2RpdmlkZSkgewotCW5zdGltZV90IG5zdGEsIG5zdGIsIG5zdGM7Ci0KLQlu c3RpbWVfaW5pdDIoJm5zdGEsIDQyLCA0Myk7Ci0JbnN0aW1lX2NvcHkoJm5zdGIsICZuc3RhKTsK LQluc3RpbWVfaW11bHRpcGx5KCZuc3RhLCAxMCk7Ci0JZXhwZWN0X3U2NF9lcShuc3RpbWVfZGl2 aWRlKCZuc3RhLCAmbnN0YiksIDEwLAotCSAgICAiSW5jb3JyZWN0IGRpdmlzaW9uIHJlc3VsdCIp OwotCi0JbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOwotCW5zdGltZV9jb3B5KCZuc3RiLCAm bnN0YSk7Ci0JbnN0aW1lX2ltdWx0aXBseSgmbnN0YSwgMTApOwotCW5zdGltZV9pbml0KCZuc3Rj LCAxKTsKLQluc3RpbWVfYWRkKCZuc3RhLCAmbnN0Yyk7Ci0JZXhwZWN0X3U2NF9lcShuc3RpbWVf ZGl2aWRlKCZuc3RhLCAmbnN0YiksIDEwLAotCSAgICAiSW5jb3JyZWN0IGRpdmlzaW9uIHJlc3Vs dCIpOwotCi0JbnN0aW1lX2luaXQyKCZuc3RhLCA0MiwgNDMpOwotCW5zdGltZV9jb3B5KCZuc3Ri LCAmbnN0YSk7Ci0JbnN0aW1lX2ltdWx0aXBseSgmbnN0YSwgMTApOwotCW5zdGltZV9pbml0KCZu c3RjLCAxKTsKLQluc3RpbWVfc3VidHJhY3QoJm5zdGEsICZuc3RjKTsKLQlleHBlY3RfdTY0X2Vx KG5zdGltZV9kaXZpZGUoJm5zdGEsICZuc3RiKSwgOSwKLQkgICAgIkluY29ycmVjdCBkaXZpc2lv biByZXN1bHQiKTsKLX0KLVRFU1RfRU5ECi0KLXZvaWQKLXRlc3RfbnN0aW1lX3NpbmNlX29uY2Uo bnN0aW1lX3QgKnQpIHsKLQluc3RpbWVfdCBvbGRfdDsKLQluc3RpbWVfY29weSgmb2xkX3QsIHQp OwotCi0JdWludDY0X3QgbnNfc2luY2UgPSBuc3RpbWVfbnNfc2luY2UodCk7Ci0JbnN0aW1lX3Vw ZGF0ZSh0KTsKLQotCW5zdGltZV90IG5ld190OwotCW5zdGltZV9jb3B5KCZuZXdfdCwgdCk7Ci0J bnN0aW1lX3N1YnRyYWN0KCZuZXdfdCwgJm9sZF90KTsKLQotCWV4cGVjdF91NjRfZ2UobnN0aW1l X25zKCZuZXdfdCksIG5zX3NpbmNlLAotCSAgICAiSW5jb3JyZWN0IHRpbWUgc2luY2UgcmVzdWx0 Iik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9uc3RpbWVfbnNfc2luY2UpIHsKLQluc3RpbWVfdCB0 OwotCi0JbnN0aW1lX2luaXRfdXBkYXRlKCZ0KTsKLQlmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwg MTAwMDA7IGkrKykgewotCQkvKiBLZWVwcyB1cGRhdGluZyB0IGFuZCB2ZXJpZmllcyBuc19zaW5j ZSBpcyB2YWxpZC4gKi8KLQkJdGVzdF9uc3RpbWVfc2luY2Vfb25jZSgmdCk7Ci0JfQotfQotVEVT VF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X25zdGltZV9tb25vdG9uaWMpIHsKLQluc3RpbWVfbW9u b3RvbmljKCk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0 KAotCSAgICB0ZXN0X25zdGltZV9pbml0LAotCSAgICB0ZXN0X25zdGltZV9pbml0MiwKLQkgICAg dGVzdF9uc3RpbWVfY29weSwKLQkgICAgdGVzdF9uc3RpbWVfY29tcGFyZSwKLQkgICAgdGVzdF9u c3RpbWVfYWRkLAotCSAgICB0ZXN0X25zdGltZV9pYWRkLAotCSAgICB0ZXN0X25zdGltZV9zdWJ0 cmFjdCwKLQkgICAgdGVzdF9uc3RpbWVfaXN1YnRyYWN0LAotCSAgICB0ZXN0X25zdGltZV9pbXVs dGlwbHksCi0JICAgIHRlc3RfbnN0aW1lX2lkaXZpZGUsCi0JICAgIHRlc3RfbnN0aW1lX2Rpdmlk ZSwKLQkgICAgdGVzdF9uc3RpbWVfbnNfc2luY2UsCi0JICAgIHRlc3RfbnN0aW1lX21vbm90b25p Yyk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L292ZXJzaXplX3RocmVzaG9sZC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L292ZXJzaXplX3RocmVzaG9sZC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGE4Zjc2Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9vdmVyc2l6ZV90aHJlc2hvbGQu YworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxv Y190ZXN0LmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9jdGwuaCIKLQotc3RhdGlj IHZvaWQKLWFyZW5hX21hbGxjdGwoY29uc3QgY2hhciAqbWFsbGN0bF9zdHIsIHVuc2lnbmVkIGFy ZW5hLCB2b2lkICpvbGRwLAotICAgIHNpemVfdCAqb2xkbGVuLCB2b2lkICpuZXdwLCBzaXplX3Qg bmV3bGVuKSB7Ci0JaW50IGVycjsKLQljaGFyIGJ1ZlsxMDBdOwotCW1hbGxvY19zbnByaW50Zihi dWYsIHNpemVvZihidWYpLCBtYWxsY3RsX3N0ciwgYXJlbmEpOwotCi0JZXJyID0gbWFsbGN0bChi dWYsIG9sZHAsIG9sZGxlbiwgbmV3cCwgbmV3bGVuKTsKLQlleHBlY3RfZF9lcSgwLCBlcnIsICJN YWxsY3RsIGZhaWxlZDsgJXMiLCBidWYpOwotfQotCi1URVNUX0JFR0lOKHRlc3Rfb3ZlcnNpemVf dGhyZXNob2xkX2dldF9zZXQpIHsKLQlpbnQgZXJyOwotCXNpemVfdCBvbGRfdGhyZXNob2xkOwot CXNpemVfdCBuZXdfdGhyZXNob2xkOwotCXNpemVfdCB0aHJlc2hvbGRfc3ogPSBzaXplb2Yob2xk X3RocmVzaG9sZCk7Ci0KLQl1bnNpZ25lZCBhcmVuYTsKLQlzaXplX3QgYXJlbmFfc3ogPSBzaXpl b2YoYXJlbmEpOwotCWVyciA9IG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAodm9pZCAqKSZhcmVu YSwgJmFyZW5hX3N6LCBOVUxMLCAwKTsKLQlleHBlY3RfZF9lcSgwLCBlcnIsICJBcmVuYSBjcmVh dGlvbiBmYWlsZWQiKTsKLQotCS8qIEp1c3QgYSB3cml0ZS4gKi8KLQluZXdfdGhyZXNob2xkID0g MTAyNCAqIDEwMjQ7Ci0JYXJlbmFfbWFsbGN0bCgiYXJlbmEuJXUub3ZlcnNpemVfdGhyZXNob2xk IiwgYXJlbmEsIE5VTEwsIE5VTEwsCi0JICAgICZuZXdfdGhyZXNob2xkLCB0aHJlc2hvbGRfc3op OwotCi0JLyogUmVhZCBhbmQgd3JpdGUgKi8KLQluZXdfdGhyZXNob2xkID0gMiAqIDEwMjQgKiAx MDI0OwotCWFyZW5hX21hbGxjdGwoImFyZW5hLiV1Lm92ZXJzaXplX3RocmVzaG9sZCIsIGFyZW5h LCAmb2xkX3RocmVzaG9sZCwKLQkgICAgJnRocmVzaG9sZF9zeiwgJm5ld190aHJlc2hvbGQsIHRo cmVzaG9sZF9zeik7Ci0JZXhwZWN0X3p1X2VxKDEwMjQgKiAxMDI0LCBvbGRfdGhyZXNob2xkLCAi U2hvdWxkIGhhdmUgcmVhZCBvbGQgdmFsdWUiKTsKLQotCS8qIEp1c3QgYSByZWFkICovCi0JYXJl bmFfbWFsbGN0bCgiYXJlbmEuJXUub3ZlcnNpemVfdGhyZXNob2xkIiwgYXJlbmEsICZvbGRfdGhy ZXNob2xkLAotCSAgICAmdGhyZXNob2xkX3N6LCBOVUxMLCAwKTsKLQlleHBlY3RfenVfZXEoMiAq IDEwMjQgKiAxMDI0LCBvbGRfdGhyZXNob2xkLCAiU2hvdWxkIGhhdmUgcmVhZCBvbGQgdmFsdWUi KTsKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyBzaXplX3QgbWF4X3B1cmdlZCA9IDA7Ci1zdGF0aWMg Ym9vbAotcHVyZ2VfZm9yY2VkX3JlY29yZF9tYXgoZXh0ZW50X2hvb2tzX3QqIGhvb2tzLCB2b2lk ICphZGRyLCBzaXplX3Qgc3osCi0gICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCwgdW5z aWduZWQgYXJlbmFfaW5kKSB7Ci0JaWYgKGxlbmd0aCA+IG1heF9wdXJnZWQpIHsKLQkJbWF4X3B1 cmdlZCA9IGxlbmd0aDsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbAotZGFs bG9jX3JlY29yZF9tYXgoZXh0ZW50X2hvb2tzX3QgKmV4dGVudF9ob29rcywgdm9pZCAqYWRkciwg c2l6ZV90IHN6LAotICAgIGJvb2wgY29taXR0ZWQsIHVuc2lnbmVkIGFyZW5hX2luZCkgewotCWlm IChzeiA+IG1heF9wdXJnZWQpIHsKLQkJbWF4X3B1cmdlZCA9IHN6OwotCX0KLQlyZXR1cm4gZmFs c2U7Ci19Ci0KLWV4dGVudF9ob29rc190IG1heF9yZWNvcmRpbmdfZXh0ZW50X2hvb2tzOwotCi1U RVNUX0JFR0lOKHRlc3Rfb3ZlcnNpemVfdGhyZXNob2xkKSB7Ci0JbWF4X3JlY29yZGluZ19leHRl bnRfaG9va3MgPSBlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3M7Ci0JbWF4X3JlY29yZGluZ19l eHRlbnRfaG9va3MucHVyZ2VfZm9yY2VkID0gJnB1cmdlX2ZvcmNlZF9yZWNvcmRfbWF4OwotCW1h eF9yZWNvcmRpbmdfZXh0ZW50X2hvb2tzLmRhbGxvYyA9ICZkYWxsb2NfcmVjb3JkX21heDsKLQot CWV4dGVudF9ob29rc190ICpleHRlbnRfaG9va3MgPSAmbWF4X3JlY29yZGluZ19leHRlbnRfaG9v a3M7Ci0KLQlpbnQgZXJyOwotCi0JdW5zaWduZWQgYXJlbmE7Ci0Jc2l6ZV90IGFyZW5hX3N6ID0g c2l6ZW9mKGFyZW5hKTsKLQllcnIgPSBtYWxsY3RsKCJhcmVuYXMuY3JlYXRlIiwgKHZvaWQgKikm YXJlbmEsICZhcmVuYV9zeiwgTlVMTCwgMCk7Ci0JZXhwZWN0X2RfZXEoMCwgZXJyLCAiQXJlbmEg Y3JlYXRpb24gZmFpbGVkIik7Ci0JYXJlbmFfbWFsbGN0bCgiYXJlbmEuJXUuZXh0ZW50X2hvb2tz IiwgYXJlbmEsIE5VTEwsIE5VTEwsICZleHRlbnRfaG9va3MsCi0JICAgIHNpemVvZihleHRlbnRf aG9va3MpKTsKLQotCS8qCi0JICogVGhpcyB0ZXN0IHdpbGwgZnVuZGFtZW50YWxseSByYWNlIHdp dGggcHVyZ2luZywgc2luY2Ugd2UncmUgZ29pbmcgdG8KLQkgKiBjaGVjayB0aGUgZGlydHkgc3Rh dHMgdG8gc2VlIGlmIG91ciBvdmVyc2l6ZWQgYWxsb2NhdGlvbiBnb3QgcHVyZ2VkLgotCSAqIFdl IGRvbid0IHdhbnQgb3RoZXIgcHVyZ2luZyB0byBoYXBwZW4gYWNjaWRlbnRhbGx5LiAgV2UgY2Fu J3QganVzdAotCSAqIGRpc2FibGUgcHVyZ2luZyBlbnRpcmVseSwgdGhvdWdoLCBzaW5jZSB0aGF0 IHdpbGwgYWxzbyBkaXNhYmxlCi0JICogb3ZlcnNpemUgcHVyZ2luZy4gIEp1c3Qgc2V0IHB1cmdp bmcgaW50ZXJ2YWxzIHRvIGJlIHZlcnkgbGFyZ2UuCi0JICovCi0Jc3NpemVfdCBkZWNheV9tcyA9 IDEwMCAqIDEwMDA7Ci0Jc3NpemVfdCBkZWNheV9tc19zeiA9IHNpemVvZihkZWNheV9tcyk7Ci0J YXJlbmFfbWFsbGN0bCgiYXJlbmEuJXUuZGlydHlfZGVjYXlfbXMiLCBhcmVuYSwgTlVMTCwgTlVM TCwgJmRlY2F5X21zLAotCSAgICBkZWNheV9tc19zeik7Ci0JYXJlbmFfbWFsbGN0bCgiYXJlbmEu JXUubXV6enlfZGVjYXlfbXMiLCBhcmVuYSwgTlVMTCwgTlVMTCwgJmRlY2F5X21zLAotCSAgICBk ZWNheV9tc19zeik7Ci0KLQkvKiBDbGVhbiBldmVyeXRoaW5nIG91dC4gKi8KLQlhcmVuYV9tYWxs Y3RsKCJhcmVuYS4ldS5wdXJnZSIsIGFyZW5hLCBOVUxMLCBOVUxMLCBOVUxMLCAwKTsKLQltYXhf cHVyZ2VkID0gMDsKLQotCS8qIFNldCB0aHJlc2hvbGQgdG8gMU1CLiAqLwotCXNpemVfdCB0aHJl c2hvbGQgPSAxMDI0ICogMTAyNDsKLQlzaXplX3QgdGhyZXNob2xkX3N6ID0gc2l6ZW9mKHRocmVz aG9sZCk7Ci0JYXJlbmFfbWFsbGN0bCgiYXJlbmEuJXUub3ZlcnNpemVfdGhyZXNob2xkIiwgYXJl bmEsIE5VTEwsIE5VTEwsCi0JICAgICZ0aHJlc2hvbGQsIHRocmVzaG9sZF9zeik7Ci0KLQkvKiBB bGxvY2F0aW5nIGFuZCBmcmVlaW5nIGhhbGYgYSBtZWdhYnl0ZSBzaG91bGQgbGVhdmUgdGhlbSBk aXJ0eS4gKi8KLQl2b2lkICpwdHIgPSBtYWxsb2N4KDUxMiAqIDEwMjQsIE1BTExPQ1hfQVJFTkEo YXJlbmEpKTsKLQlkYWxsb2N4KHB0ciwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JaWYgKCFpc19i YWNrZ3JvdW5kX3RocmVhZF9lbmFibGVkKCkpIHsKLQkJZXhwZWN0X3p1X2x0KG1heF9wdXJnZWQs IDUxMiAqIDEwMjQsICJFeHBlY3RlZCBubyA1MTJrIHB1cmdlIik7Ci0JfQotCi0JLyogUHVyZ2Ug YWdhaW4gdG8gcmVzZXQgZXZlcnl0aGluZyBvdXQuICovCi0JYXJlbmFfbWFsbGN0bCgiYXJlbmEu JXUucHVyZ2UiLCBhcmVuYSwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ci0JbWF4X3B1cmdlZCA9IDA7 Ci0KLQkvKgotCSAqIEFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgMiBtZWdhYnl0ZXMgc2hvdWxkIGhh dmUgdGhlbSBwdXJnZWQgYmVjYXVzZSBvZgotCSAqIHRoZSBvdmVyc2l6ZSB0aHJlc2hvbGQuCi0J ICovCi0JcHRyID0gbWFsbG9jeCgyICogMTAyNCAqIDEwMjQsIE1BTExPQ1hfQVJFTkEoYXJlbmEp KTsKLQlkYWxsb2N4KHB0ciwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JZXhwZWN0X3p1X2dlKG1h eF9wdXJnZWQsIDIgKiAxMDI0ICogMTAyNCwgIkV4cGVjdGVkIGEgMk1CIHB1cmdlIik7Ci19Ci1U RVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0X25vX3JlZW50cmFuY3ko Ci0JICAgIHRlc3Rfb3ZlcnNpemVfdGhyZXNob2xkX2dldF9zZXQsCi0JICAgIHRlc3Rfb3ZlcnNp emVfdGhyZXNob2xkKTsKLX0KLQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wYS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGIxZTJmNmUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L3BhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAot I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcGEuaCIKLQotc3RhdGljIHZvaWQgKgotYWxsb2NfaG9vayhleHRlbnRfaG9va3NfdCAq ZXh0ZW50X2hvb2tzLCB2b2lkICpuZXdfYWRkciwgc2l6ZV90IHNpemUsCi0gICAgc2l6ZV90IGFs aWdubWVudCwgYm9vbCAqemVybywgYm9vbCAqY29tbWl0LCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsK LQl2b2lkICpyZXQgPSBwYWdlc19tYXAobmV3X2FkZHIsIHNpemUsIGFsaWdubWVudCwgY29tbWl0 KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgYm9vbAotbWVyZ2VfaG9vayhleHRlbnRfaG9v a3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyX2EsIHNpemVfdCBzaXplX2EsCi0gICAgdm9p ZCAqYWRkcl9iLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwgdW5zaWduZWQgYXJlbmFf aW5kKSB7Ci0JcmV0dXJuICFtYXBzX2NvYWxlc2NlOwotfQotCi1zdGF0aWMgYm9vbAotc3BsaXRf aG9vayhleHRlbnRfaG9va3NfdCAqZXh0ZW50X2hvb2tzLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6 ZSwKLSAgICBzaXplX3Qgc2l6ZV9hLCBzaXplX3Qgc2l6ZV9iLCBib29sIGNvbW1pdHRlZCwgdW5z aWduZWQgYXJlbmFfaW5kKSB7Ci0JcmV0dXJuICFtYXBzX2NvYWxlc2NlOwotfQotCi1zdGF0aWMg dm9pZAotaW5pdF90ZXN0X2V4dGVudF9ob29rcyhleHRlbnRfaG9va3NfdCAqaG9va3MpIHsKLQkv KgotCSAqIFRoZSBkZWZhdWx0IGhvb2tzIGFyZSBtb3N0bHkgZmluZSBmb3IgdGVzdGluZy4gIEEg ZmV3IG9mIHRoZW0sCi0JICogdGhvdWdoLCBhY2Nlc3MgZ2xvYmFscyAoYWxsb2MgZm9yIGRzcyBz ZXR0aW5nIGluIGFuIGFyZW5hLCBzcGxpdCBhbmQKLQkgKiBtZXJnZSB0b3VjaCB0aGUgZ2xvYmFs IGVtYXAgdG8gZmluZCBoZWFkIHN0YXRlLiAgVGhlIGZpcnN0IG9mIHRoZXNlCi0JICogY2FuIGJl IGZpeGVkIGJ5IGtlZXBpbmcgdGhhdCBzdGF0ZSB3aXRoIHRoZSBob29rcywgd2hlcmUgaXQgbG9n aWNhbGx5Ci0JICogYmVsb25ncy4gIFRoZSBzZWNvbmQsIHRob3VnaCwgd2UgY2FuIG9ubHkgZml4 IHdoZW4gd2UgdXNlIHRoZSBleHRlbnQKLQkgKiBob29rIEFQSS4KLQkgKi8KLQltZW1jcHkoaG9v a3MsICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MsIHNpemVvZihleHRlbnRfaG9va3NfdCkp OwotCWhvb2tzLT5hbGxvYyA9ICZhbGxvY19ob29rOwotCWhvb2tzLT5tZXJnZSA9ICZtZXJnZV9o b29rOwotCWhvb2tzLT5zcGxpdCA9ICZzcGxpdF9ob29rOwotfQotCi10eXBlZGVmIHN0cnVjdCB0 ZXN0X2RhdGFfcyB0ZXN0X2RhdGFfdDsKLXN0cnVjdCB0ZXN0X2RhdGFfcyB7Ci0JcGFfc2hhcmRf dCBzaGFyZDsKLQlwYV9jZW50cmFsX3QgY2VudHJhbDsKLQliYXNlX3QgKmJhc2U7Ci0JZW1hcF90 IGVtYXA7Ci0JcGFfc2hhcmRfc3RhdHNfdCBzdGF0czsKLQltYWxsb2NfbXV0ZXhfdCBzdGF0c19t dHg7Ci0JZXh0ZW50X2hvb2tzX3QgaG9va3M7Ci19OwotCi10ZXN0X2RhdGFfdCAqaW5pdF90ZXN0 X2RhdGEoc3NpemVfdCBkaXJ0eV9kZWNheV9tcywgc3NpemVfdCBtdXp6eV9kZWNheV9tcykgewot CXRlc3RfZGF0YV90ICp0ZXN0X2RhdGEgPSBjYWxsb2MoMSwgc2l6ZW9mKHRlc3RfZGF0YV90KSk7 Ci0JYXNzZXJ0X3B0cl9ub3RfbnVsbCh0ZXN0X2RhdGEsICIiKTsKLQlpbml0X3Rlc3RfZXh0ZW50 X2hvb2tzKCZ0ZXN0X2RhdGEtPmhvb2tzKTsKLQotCWJhc2VfdCAqYmFzZSA9IGJhc2VfbmV3KFRT RE5fTlVMTCwgLyogaW5kICovIDEsICZ0ZXN0X2RhdGEtPmhvb2tzLAotCSAgICAvKiBtZXRhZGF0 YV91c2VfaG9va3MgKi8gdHJ1ZSk7Ci0JYXNzZXJ0X3B0cl9ub3RfbnVsbChiYXNlLCAiIik7Ci0K LQl0ZXN0X2RhdGEtPmJhc2UgPSBiYXNlOwotCWJvb2wgZXJyID0gZW1hcF9pbml0KCZ0ZXN0X2Rh dGEtPmVtYXAsIHRlc3RfZGF0YS0+YmFzZSwKLQkgICAgLyogemVyb2VkICovIHRydWUpOwotCWFz c2VydF9mYWxzZShlcnIsICIiKTsKLQotCW5zdGltZV90IHRpbWU7Ci0JbnN0aW1lX2luaXQoJnRp bWUsIDApOwotCi0JZXJyID0gcGFfY2VudHJhbF9pbml0KCZ0ZXN0X2RhdGEtPmNlbnRyYWwsIGJh c2UsIG9wdF9ocGEsCi0JICAgICZocGFfaG9va3NfZGVmYXVsdCk7Ci0JYXNzZXJ0X2ZhbHNlKGVy ciwgIiIpOwotCi0JY29uc3Qgc2l6ZV90IHBhX292ZXJzaXplX3RocmVzaG9sZCA9IDggKiAxMDI0 ICogMTAyNDsKLQllcnIgPSBwYV9zaGFyZF9pbml0KFRTRE5fTlVMTCwgJnRlc3RfZGF0YS0+c2hh cmQsICZ0ZXN0X2RhdGEtPmNlbnRyYWwsCi0JICAgICZ0ZXN0X2RhdGEtPmVtYXAsIHRlc3RfZGF0 YS0+YmFzZSwgLyogaW5kICovIDEsICZ0ZXN0X2RhdGEtPnN0YXRzLAotCSAgICAmdGVzdF9kYXRh LT5zdGF0c19tdHgsICZ0aW1lLCBwYV9vdmVyc2l6ZV90aHJlc2hvbGQsIGRpcnR5X2RlY2F5X21z LAotCSAgICBtdXp6eV9kZWNheV9tcyk7Ci0JYXNzZXJ0X2ZhbHNlKGVyciwgIiIpOwotCi0JcmV0 dXJuIHRlc3RfZGF0YTsKLX0KLQotdm9pZCBkZXN0cm95X3Rlc3RfZGF0YSh0ZXN0X2RhdGFfdCAq ZGF0YSkgewotCWJhc2VfZGVsZXRlKFRTRE5fTlVMTCwgZGF0YS0+YmFzZSk7Ci0JZnJlZShkYXRh KTsKLX0KLQotc3RhdGljIHZvaWQgKgotZG9fYWxsb2NfZnJlZV9wdXJnZSh2b2lkICphcmcpIHsK LQl0ZXN0X2RhdGFfdCAqdGVzdF9kYXRhID0gKHRlc3RfZGF0YV90ICopYXJnOwotCWZvciAoaW50 IGkgPSAwOyBpIDwgMTAgKiAxMDAwOyBpKyspIHsKLQkJYm9vbCBkZWZlcnJlZF93b3JrX2dlbmVy YXRlZCA9IGZhbHNlOwotCQllZGF0YV90ICplZGF0YSA9IHBhX2FsbG9jKFRTRE5fTlVMTCwgJnRl c3RfZGF0YS0+c2hhcmQsIFBBR0UsCi0JCSAgICBQQUdFLCAvKiBzbGFiICovIGZhbHNlLCAvKiBz emluZCAqLyAwLCAvKiB6ZXJvICovIGZhbHNlLAotCQkgICAgLyogZ3VhcmRlZCAqLyBmYWxzZSwg JmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQkJYXNzZXJ0X3B0cl9ub3RfbnVsbChlZGF0YSwg IiIpOwotCQlwYV9kYWxsb2MoVFNETl9OVUxMLCAmdGVzdF9kYXRhLT5zaGFyZCwgZWRhdGEsCi0J CSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCQltYWxsb2NfbXV0ZXhfbG9jayhUU0RO X05VTEwsCi0JCSAgICAmdGVzdF9kYXRhLT5zaGFyZC5wYWMuZGVjYXlfZGlydHkubXR4KTsKLQkJ cGFjX2RlY2F5X2FsbChUU0ROX05VTEwsICZ0ZXN0X2RhdGEtPnNoYXJkLnBhYywKLQkJICAgICZ0 ZXN0X2RhdGEtPnNoYXJkLnBhYy5kZWNheV9kaXJ0eSwKLQkJICAgICZ0ZXN0X2RhdGEtPnNoYXJk LnBhYy5zdGF0cy0+ZGVjYXlfZGlydHksCi0JCSAgICAmdGVzdF9kYXRhLT5zaGFyZC5wYWMuZWNh Y2hlX2RpcnR5LCB0cnVlKTsKLQkJbWFsbG9jX211dGV4X3VubG9jayhUU0ROX05VTEwsCi0JCSAg ICAmdGVzdF9kYXRhLT5zaGFyZC5wYWMuZGVjYXlfZGlydHkubXR4KTsKLQl9Ci0JcmV0dXJuIE5V TEw7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9hbGxvY19mcmVlX3B1cmdlX3RoZHMpIHsKLQl0ZXN0 X2RhdGFfdCAqdGVzdF9kYXRhID0gaW5pdF90ZXN0X2RhdGEoMCwgMCk7Ci0JdGhkX3QgdGhkc1s0 XTsKLQlmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotCQl0aGRfY3JlYXRlKCZ0aGRzW2ld LCBkb19hbGxvY19mcmVlX3B1cmdlLCB0ZXN0X2RhdGEpOwotCX0KLQlmb3IgKGludCBpID0gMDsg aSA8IDQ7IGkrKykgewotCQl0aGRfam9pbih0aGRzW2ldLCBOVUxMKTsKLQl9Ci19Ci1URVNUX0VO RAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X2FsbG9jX2Zy ZWVfcHVyZ2VfdGhkcyk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BhY2suYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wYWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGU2MzkyODIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L3BhY2suYworKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCww IEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLS8qCi0gKiBTaXplIGNsYXNz IHRoYXQgaXMgYSBkaXZpc29yIG9mIHRoZSBwYWdlIHNpemUsIGlkZWFsbHkgNCsgcmVnaW9ucyBw ZXIgcnVuLgotICovCi0jaWYgTEdfUEFHRSA8PSAxNAotI2RlZmluZSBTWgkoWlUoMSkgPDwgKExH X1BBR0UgLSAyKSkKLSNlbHNlCi0jZGVmaW5lIFNaCVpVKDQwOTYpCi0jZW5kaWYKLQotLyoKLSAq IE51bWJlciBvZiBzbGFicyB0byBjb25zdW1lIGF0IGhpZ2ggd2F0ZXIgbWFyay4gIFNob3VsZCBi ZSBhdCBsZWFzdCAyIHNvIHRoYXQKLSAqIGlmIG1tYXAoKWVkIG1lbW9yeSBncm93cyBkb3dud2Fy ZCwgZG93bndhcmQgZ3Jvd3RoIG9mIG1tYXAoKWVkIG1lbW9yeSBpcwotICogdGVzdGVkLgotICov Ci0jZGVmaW5lIE5TTEFCUwk4Ci0KLXN0YXRpYyB1bnNpZ25lZAotYmluaW5kX2NvbXB1dGUodm9p ZCkgewotCXNpemVfdCBzejsKLQl1bnNpZ25lZCBuYmlucywgaTsKLQotCXN6ID0gc2l6ZW9mKG5i aW5zKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVuYXMubmJpbnMiLCAodm9pZCAqKSZuYmlu cywgJnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmJpbnM7IGkrKykgewotCQlzaXplX3QgbWliWzRdOwotCQlz aXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVfdCk7Ci0JCXNpemVfdCBzaXpl OwotCi0JCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hcy5iaW4uMC5zaXplIiwg bWliLAotCQkgICAgJm1pYmxlbiksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9tYiBmYWls dXJlIik7Ci0JCW1pYlsyXSA9IChzaXplX3QpaTsKLQotCQlzeiA9IHNpemVvZihzaXplKTsKLQkJ ZXhwZWN0X2RfZXEobWFsbGN0bGJ5bWliKG1pYiwgbWlibGVuLCAodm9pZCAqKSZzaXplLCAmc3os IE5VTEwsCi0JCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bGJ5bWliIGZhaWx1cmUiKTsK LQkJaWYgKHNpemUgPT0gU1opIHsKLQkJCXJldHVybiBpOwotCQl9Ci0JfQotCi0JdGVzdF9mYWls KCJVbmFibGUgdG8gY29tcHV0ZSBucmVnc19wZXJfcnVuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBzaXplX3QKLW5yZWdzX3Blcl9ydW5fY29tcHV0ZSh2b2lkKSB7Ci0JdWludDMyX3QgbnJl Z3M7Ci0Jc2l6ZV90IHN6OwotCXVuc2lnbmVkIGJpbmluZCA9IGJpbmluZF9jb21wdXRlKCk7Ci0J c2l6ZV90IG1pYls0XTsKLQlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVf dCk7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYXMuYmluLjAubnJlZ3Mi LCBtaWIsICZtaWJsZW4pLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWIgZmFp bHVyZSIpOwotCW1pYlsyXSA9IChzaXplX3QpYmluaW5kOwotCXN6ID0gc2l6ZW9mKG5yZWdzKTsK LQlleHBlY3RfZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sICh2b2lkICopJm5yZWdzLCAm c3osIE5VTEwsCi0JICAgIDApLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIgZmFpbHVyZSIp OwotCXJldHVybiBucmVnczsKLX0KLQotc3RhdGljIHVuc2lnbmVkCi1hcmVuYXNfY3JlYXRlX21h bGxjdGwodm9pZCkgewotCXVuc2lnbmVkIGFyZW5hX2luZDsKLQlzaXplX3Qgc3o7Ci0KLQlzeiA9 IHNpemVvZihhcmVuYV9pbmQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUi LCAodm9pZCAqKSZhcmVuYV9pbmQsICZzeiwgTlVMTCwgMCksCi0JICAgIDAsICJFcnJvciBpbiBh cmVuYXMuY3JlYXRlIik7Ci0KLQlyZXR1cm4gYXJlbmFfaW5kOwotfQotCi1zdGF0aWMgdm9pZAot YXJlbmFfcmVzZXRfbWFsbGN0bCh1bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQlzaXplX3QgbWliWzNd OwotCXNpemVfdCBtaWJsZW4gPSBzaXplb2YobWliKS9zaXplb2Yoc2l6ZV90KTsKLQotCWV4cGVj dF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hLjAucmVzZXQiLCBtaWIsICZtaWJsZW4pLCAw LAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsbmFtZXRvbWliKCkgZmFpbHVyZSIpOwotCW1pYlsx XSA9IChzaXplX3QpYXJlbmFfaW5kOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1p YmxlbiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxi eW1pYigpIGZhaWx1cmUiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3BhY2spIHsKLQlib29sIHBy b2ZfZW5hYmxlZDsKLQlzaXplX3Qgc3ogPSBzaXplb2YocHJvZl9lbmFibGVkKTsKLQlpZiAobWFs bGN0bCgib3B0LnByb2YiLCAodm9pZCAqKSZwcm9mX2VuYWJsZWQsICZzeiwgTlVMTCwgMCkgPT0g MCkgewotCQl0ZXN0X3NraXBfaWYocHJvZl9lbmFibGVkKTsKLQl9Ci0KLQl1bnNpZ25lZCBhcmVu YV9pbmQgPSBhcmVuYXNfY3JlYXRlX21hbGxjdGwoKTsKLQlzaXplX3QgbnJlZ3NfcGVyX3J1biA9 IG5yZWdzX3Blcl9ydW5fY29tcHV0ZSgpOwotCXNpemVfdCBucmVncyA9IG5yZWdzX3Blcl9ydW4g KiBOU0xBQlM7Ci0JVkFSSUFCTEVfQVJSQVkodm9pZCAqLCBwdHJzLCBucmVncyk7Ci0Jc2l6ZV90 IGksIGosIG9mZnNldDsKLQotCS8qIEZpbGwgbWF0cml4LiAqLwotCWZvciAoaSA9IG9mZnNldCA9 IDA7IGkgPCBOU0xBQlM7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgbnJlZ3NfcGVyX3J1bjsg aisrKSB7Ci0JCQl2b2lkICpwID0gbWFsbG9jeChTWiwgTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQp IHwKLQkJCSAgICBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQkJCWV4cGVjdF9wdHJfbm90X251bGwo cCwKLQkJCSAgICAiVW5leHBlY3RlZCBtYWxsb2N4KCV6dSwgTUFMTE9DWF9BUkVOQSgldSkgfCIK LQkJCSAgICAiIE1BTExPQ1hfVENBQ0hFX05PTkUpIGZhaWx1cmUsIHJ1bj0lenUsIHJlZz0lenUi LAotCQkJICAgIFNaLCBhcmVuYV9pbmQsIGksIGopOwotCQkJcHRyc1soaSAqIG5yZWdzX3Blcl9y dW4pICsgal0gPSBwOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBGcmVlIGFsbCBidXQgb25lIHJlZ2lv biBvZiBlYWNoIHJ1biwgYnV0IHJvdGF0ZSB3aGljaCByZWdpb24gaXMKLQkgKiBwcmVzZXJ2ZWQs IHNvIHRoYXQgc3Vic2VxdWVudCBhbGxvY2F0aW9ucyBleGVyY2lzZSB0aGUgd2l0aGluLXJ1bgot CSAqIGxheW91dCBwb2xpY3kuCi0JICovCi0Jb2Zmc2V0ID0gMDsKLQlmb3IgKGkgPSBvZmZzZXQg PSAwOwotCSAgICBpIDwgTlNMQUJTOwotCSAgICBpKyssIG9mZnNldCA9IChvZmZzZXQgKyAxKSAl IG5yZWdzX3Blcl9ydW4pIHsKLQkJZm9yIChqID0gMDsgaiA8IG5yZWdzX3Blcl9ydW47IGorKykg ewotCQkJdm9pZCAqcCA9IHB0cnNbKGkgKiBucmVnc19wZXJfcnVuKSArIGpdOwotCQkJaWYgKG9m ZnNldCA9PSBqKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlkYWxsb2N4KHAsIE1BTExPQ1hf QVJFTkEoYXJlbmFfaW5kKSB8Ci0JCQkgICAgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JCX0KLQl9 Ci0KLQkvKgotCSAqIExvZ2ljYWxseSByZWZpbGwgbWF0cml4LCBza2lwcGluZyBwcmVzZXJ2ZWQg cmVnaW9ucyBhbmQgdmVyaWZ5aW5nCi0JICogdGhhdCB0aGUgbWF0cml4IGlzIHVubW9kaWZpZWQu Ci0JICovCi0Jb2Zmc2V0ID0gMDsKLQlmb3IgKGkgPSBvZmZzZXQgPSAwOwotCSAgICBpIDwgTlNM QUJTOwotCSAgICBpKyssIG9mZnNldCA9IChvZmZzZXQgKyAxKSAlIG5yZWdzX3Blcl9ydW4pIHsK LQkJZm9yIChqID0gMDsgaiA8IG5yZWdzX3Blcl9ydW47IGorKykgewotCQkJdm9pZCAqcDsKLQot CQkJaWYgKG9mZnNldCA9PSBqKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlwID0gbWFsbG9j eChTWiwgTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpIHwKLQkJCSAgICBNQUxMT0NYX1RDQUNIRV9O T05FKTsKLQkJCWV4cGVjdF9wdHJfZXEocCwgcHRyc1soaSAqIG5yZWdzX3Blcl9ydW4pICsgal0s Ci0JCQkgICAgIlVuZXhwZWN0ZWQgcmVmaWxsIGRpc2NyZXBhbmN5LCBydW49JXp1LCByZWc9JXp1 XG4iLAotCQkJICAgIGksIGopOwotCQl9Ci0JfQotCi0JLyogQ2xlYW4gdXAuICovCi0JYXJlbmFf cmVzZXRfbWFsbGN0bChhcmVuYV9pbmQpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQp IHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9wYWNrKTsKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFjay5zaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wYWNrLnNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjQ1MTQ4Li4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wYWNrLnNoCisrKyAv ZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBJbW1lZGlhdGVseSBwdXJn ZSB0byBtaW5pbWl6ZSBmcmFnbWVudGF0aW9uLgotZXhwb3J0IE1BTExPQ19DT05GPSJkaXJ0eV9k ZWNheV9tczowLG11enp5X2RlY2F5X21zOjAiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BhZ2VzLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFnZXMuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggOGRmZDFhNy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGFnZXMuYworKysgL2Rldi9udWxsCkBA IC0xLDI5ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotVEVTVF9C RUdJTih0ZXN0X3BhZ2VzX2h1Z2UpIHsKLQlzaXplX3QgYWxsb2Nfc2l6ZTsKLQlib29sIGNvbW1p dDsKLQl2b2lkICpwYWdlcywgKmh1Z2VwYWdlOwotCi0JYWxsb2Nfc2l6ZSA9IEhVR0VQQUdFICog MiAtIFBBR0U7Ci0JY29tbWl0ID0gdHJ1ZTsKLQlwYWdlcyA9IHBhZ2VzX21hcChOVUxMLCBhbGxv Y19zaXplLCBQQUdFLCAmY29tbWl0KTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHBhZ2VzLCAiVW5l eHBlY3RlZCBwYWdlc19tYXAoKSBlcnJvciIpOwotCi0JaWYgKGluaXRfc3lzdGVtX3RocF9tb2Rl ID09IHRocF9tb2RlX2RlZmF1bHQpIHsKLQkgICAgaHVnZXBhZ2UgPSAodm9pZCAqKShBTElHTk1F TlRfQ0VJTElORygodWludHB0cl90KXBhZ2VzLCBIVUdFUEFHRSkpOwotCSAgICBleHBlY3RfYl9u ZShwYWdlc19odWdlKGh1Z2VwYWdlLCBIVUdFUEFHRSksIGhhdmVfbWFkdmlzZV9odWdlLAotCSAg ICAgICAgIlVuZXhwZWN0ZWQgcGFnZXNfaHVnZSgpIHJlc3VsdCIpOwotCSAgICBleHBlY3RfZmFs c2UocGFnZXNfbm9odWdlKGh1Z2VwYWdlLCBIVUdFUEFHRSksCi0JICAgICAgICAiVW5leHBlY3Rl ZCBwYWdlc19ub2h1Z2UoKSByZXN1bHQiKTsKLQl9Ci0KLQlwYWdlc191bm1hcChwYWdlcywgYWxs b2Nfc2l6ZSk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0 KAotCSAgICB0ZXN0X3BhZ2VzX2h1Z2UpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wZWFrLmMgYi8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGVhay5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAxMTEyOTc4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wZWFrLmMKKysrIC9kZXYvbnVsbApAQCAt MSw0NyArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9wZWFrLmgiCi0KLVRFU1RfQkVHSU4odGVzdF9wZWFrKSB7Ci0J cGVha190IHBlYWsgPSBQRUFLX0lOSVRJQUxJWkVSOwotCWV4cGVjdF91NjRfZXEoMCwgcGVha19t YXgoJnBlYWspLAotCSAgICAiUGVhayBzaG91bGQgYmUgemVybyBhdCBpbml0aWFsaXphdGlvbiIp OwotCXBlYWtfdXBkYXRlKCZwZWFrLCAxMDAsIDUwKTsKLQlleHBlY3RfdTY0X2VxKDUwLCBwZWFr X21heCgmcGVhayksCi0JICAgICJNaXNzZWQgdXBkYXRlIik7Ci0JcGVha191cGRhdGUoJnBlYWss IDEwMCwgMTAwKTsKLQlleHBlY3RfdTY0X2VxKDUwLCBwZWFrX21heCgmcGVhayksICJEYWxsb2Nz IHNob3VsZG4ndCBjaGFuZ2UgcGVhayIpOwotCXBlYWtfdXBkYXRlKCZwZWFrLCAxMDAsIDIwMCk7 Ci0JZXhwZWN0X3U2NF9lcSg1MCwgcGVha19tYXgoJnBlYWspLCAiRGFsbG9jcyBzaG91bGRuJ3Qg Y2hhbmdlIHBlYWsiKTsKLQlwZWFrX3VwZGF0ZSgmcGVhaywgMjAwLCAyMDApOwotCWV4cGVjdF91 NjRfZXEoNTAsIHBlYWtfbWF4KCZwZWFrKSwgIkhhdmVuJ3QgcmVhY2hlZCBwZWFrIGFnYWluIik7 Ci0JcGVha191cGRhdGUoJnBlYWssIDMwMCwgMjAwKTsKLQlleHBlY3RfdTY0X2VxKDEwMCwgcGVh a19tYXgoJnBlYWspLCAiTWlzc2VkIGFuIHVwZGF0ZS4iKTsKLQlwZWFrX3NldF96ZXJvKCZwZWFr LCAzMDAsIDIwMCk7Ci0JZXhwZWN0X3U2NF9lcSgwLCBwZWFrX21heCgmcGVhayksICJObyBlZmZl Y3QgZnJvbSB6ZXJvaW5nIik7Ci0JcGVha191cGRhdGUoJnBlYWssIDMwMCwgMzAwKTsKLQlleHBl Y3RfdTY0X2VxKDAsIHBlYWtfbWF4KCZwZWFrKSwgIkRhbGxvYyBzaG91bGRuJ3QgY2hhbmdlIHBl YWsiKTsKLQlwZWFrX3VwZGF0ZSgmcGVhaywgNDAwLCAzMDApOwotCWV4cGVjdF91NjRfZXEoMCwg cGVha19tYXgoJnBlYWspLCAiU2hvdWxkIHN0aWxsIGJlIG5ldCBuZWdhdGl2ZSIpOwotCXBlYWtf dXBkYXRlKCZwZWFrLCA1MDAsIDMwMCk7Ci0JZXhwZWN0X3U2NF9lcSgxMDAsIHBlYWtfbWF4KCZw ZWFrKSwgIk1pc3NlZCBhbiB1cGRhdGUuIik7Ci0JLyoKLQkgKiBBYm92ZSwgd2Ugc2V0IHRvIHpl cm8gd2hpbGUgYSBuZXQgYWxsb2NhdG9yOyBsZXQncyB0cnkgYXMgYQotCSAqIG5ldC1kZWFsbG9j YXRvci4KLQkgKi8KLQlwZWFrX3NldF96ZXJvKCZwZWFrLCA2MDAsIDcwMCk7Ci0JZXhwZWN0X3U2 NF9lcSgwLCBwZWFrX21heCgmcGVhayksICJObyBlZmZlY3QgZnJvbSB6ZXJvaW5nLiIpOwotCXBl YWtfdXBkYXRlKCZwZWFrLCA2MDAsIDgwMCk7Ci0JZXhwZWN0X3U2NF9lcSgwLCBwZWFrX21heCgm cGVhayksICJEYWxsb2Mgc2hvdWxkbid0IGNoYW5nZSBwZWFrLiIpOwotCXBlYWtfdXBkYXRlKCZw ZWFrLCA3MDAsIDgwMCk7Ci0JZXhwZWN0X3U2NF9lcSgwLCBwZWFrX21heCgmcGVhayksICJTaG91 bGQgc3RpbGwgYmUgbmV0IG5lZ2F0aXZlLiIpOwotCXBlYWtfdXBkYXRlKCZwZWFrLCA4MDAsIDgw MCk7Ci0JZXhwZWN0X3U2NF9lcSgxMDAsIHBlYWtfbWF4KCZwZWFrKSwgIk1pc3NlZCBhbiB1cGRh dGUuIik7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0X25v X3JlZW50cmFuY3koCi0JICAgIHRlc3RfcGVhayk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3BoLmMgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGguYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMjhmNWU0OC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcGguYworKysgL2Rldi9udWxsCkBAIC0x LDMzMCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9waC5oIgotCi10eXBlZGVmIHN0cnVjdCBub2RlX3Mgbm9kZV90 OwotcGhfc3RydWN0cyhoZWFwLCBub2RlX3QpOwotCi1zdHJ1Y3Qgbm9kZV9zIHsKLSNkZWZpbmUg Tk9ERV9NQUdJQyAweDk4MjNhZjdlCi0JdWludDMyX3QgbWFnaWM7Ci0JaGVhcF9saW5rX3QgbGlu azsKLQl1aW50NjRfdCBrZXk7Ci19OwotCi1zdGF0aWMgaW50Ci1ub2RlX2NtcChjb25zdCBub2Rl X3QgKmEsIGNvbnN0IG5vZGVfdCAqYikgewotCWludCByZXQ7Ci0KLQlyZXQgPSAoYS0+a2V5ID4g Yi0+a2V5KSAtIChhLT5rZXkgPCBiLT5rZXkpOwotCWlmIChyZXQgPT0gMCkgewotCQkvKgotCQkg KiBEdXBsaWNhdGVzIGFyZSBub3QgYWxsb3dlZCBpbiB0aGUgaGVhcCwgc28gZm9yY2UgYW4KLQkJ ICogYXJiaXRyYXJ5IG9yZGVyaW5nIGZvciBub24taWRlbnRpY2FsIGl0ZW1zIHdpdGggZXF1YWwg a2V5cy4KLQkJICovCi0JCXJldCA9ICgoKHVpbnRwdHJfdClhKSA+ICgodWludHB0cl90KWIpKQot CQkgICAgLSAoKCh1aW50cHRyX3QpYSkgPCAoKHVpbnRwdHJfdCliKSk7Ci0JfQotCXJldHVybiBy ZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLW5vZGVfY21wX21hZ2ljKGNvbnN0IG5vZGVfdCAqYSwgY29u c3Qgbm9kZV90ICpiKSB7Ci0KLQlleHBlY3RfdTMyX2VxKGEtPm1hZ2ljLCBOT0RFX01BR0lDLCAi QmFkIG1hZ2ljIik7Ci0JZXhwZWN0X3UzMl9lcShiLT5tYWdpYywgTk9ERV9NQUdJQywgIkJhZCBt YWdpYyIpOwotCi0JcmV0dXJuIG5vZGVfY21wKGEsIGIpOwotfQotCi1waF9nZW4oc3RhdGljLCBo ZWFwLCBub2RlX3QsIGxpbmssIG5vZGVfY21wX21hZ2ljKTsKLQotc3RhdGljIG5vZGVfdCAqCi1u b2RlX25leHRfZ2V0KGNvbnN0IG5vZGVfdCAqbm9kZSkgewotCXJldHVybiBwaG5fbmV4dF9nZXQo KG5vZGVfdCAqKW5vZGUsIG9mZnNldG9mKG5vZGVfdCwgbGluaykpOwotfQotCi1zdGF0aWMgbm9k ZV90ICoKLW5vZGVfcHJldl9nZXQoY29uc3Qgbm9kZV90ICpub2RlKSB7Ci0JcmV0dXJuIHBobl9w cmV2X2dldCgobm9kZV90ICopbm9kZSwgb2Zmc2V0b2Yobm9kZV90LCBsaW5rKSk7Ci19Ci0KLXN0 YXRpYyBub2RlX3QgKgotbm9kZV9sY2hpbGRfZ2V0KGNvbnN0IG5vZGVfdCAqbm9kZSkgewotCXJl dHVybiBwaG5fbGNoaWxkX2dldCgobm9kZV90ICopbm9kZSwgb2Zmc2V0b2Yobm9kZV90LCBsaW5r KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ub2RlX3ByaW50KGNvbnN0IG5vZGVfdCAqbm9kZSwgdW5z aWduZWQgZGVwdGgpIHsKLQl1bnNpZ25lZCBpOwotCW5vZGVfdCAqbGVmdG1vc3RfY2hpbGQsICpz aWJsaW5nOwotCi0JZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspIHsKLQkJbWFsbG9jX3ByaW50 ZigiXHQiKTsKLQl9Ci0JbWFsbG9jX3ByaW50ZigiJTIiRk1UdTY0IlxuIiwgbm9kZS0+a2V5KTsK LQotCWxlZnRtb3N0X2NoaWxkID0gbm9kZV9sY2hpbGRfZ2V0KG5vZGUpOwotCWlmIChsZWZ0bW9z dF9jaGlsZCA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0Jbm9kZV9wcmludChsZWZ0bW9zdF9j aGlsZCwgZGVwdGggKyAxKTsKLQotCWZvciAoc2libGluZyA9IG5vZGVfbmV4dF9nZXQobGVmdG1v c3RfY2hpbGQpOyBzaWJsaW5nICE9Ci0JICAgIE5VTEw7IHNpYmxpbmcgPSBub2RlX25leHRfZ2V0 KHNpYmxpbmcpKSB7Ci0JCW5vZGVfcHJpbnQoc2libGluZywgZGVwdGggKyAxKTsKLQl9Ci19Ci0K LXN0YXRpYyB2b2lkCi1oZWFwX3ByaW50KGNvbnN0IGhlYXBfdCAqaGVhcCkgewotCW5vZGVfdCAq YXV4ZWxtOwotCi0JbWFsbG9jX3ByaW50ZigidnZ2IGhlYXAgJXAgdnZ2XG4iLCBoZWFwKTsKLQlp ZiAoaGVhcC0+cGgucm9vdCA9PSBOVUxMKSB7Ci0JCWdvdG8gbGFiZWxfcmV0dXJuOwotCX0KLQot CW5vZGVfcHJpbnQoaGVhcC0+cGgucm9vdCwgMCk7Ci0KLQlmb3IgKGF1eGVsbSA9IG5vZGVfbmV4 dF9nZXQoaGVhcC0+cGgucm9vdCk7IGF1eGVsbSAhPSBOVUxMOwotCSAgICBhdXhlbG0gPSBub2Rl X25leHRfZ2V0KGF1eGVsbSkpIHsKLQkJZXhwZWN0X3B0cl9lcShub2RlX25leHRfZ2V0KG5vZGVf cHJldl9nZXQoYXV4ZWxtKSksIGF1eGVsbSwKLQkJICAgICJhdXhlbG0ncyBwcmV2IGRvZXNuJ3Qg bGluayB0byBhdXhlbG0iKTsKLQkJbm9kZV9wcmludChhdXhlbG0sIDApOwotCX0KLQotbGFiZWxf cmV0dXJuOgotCW1hbGxvY19wcmludGYoIl5eXiBoZWFwICVwIF5eXlxuIiwgaGVhcCk7Ci19Ci0K LXN0YXRpYyB1bnNpZ25lZAotbm9kZV92YWxpZGF0ZShjb25zdCBub2RlX3QgKm5vZGUsIGNvbnN0 IG5vZGVfdCAqcGFyZW50KSB7Ci0JdW5zaWduZWQgbm5vZGVzID0gMTsKLQlub2RlX3QgKmxlZnRt b3N0X2NoaWxkLCAqc2libGluZzsKLQotCWlmIChwYXJlbnQgIT0gTlVMTCkgewotCQlleHBlY3Rf ZF9nZShub2RlX2NtcF9tYWdpYyhub2RlLCBwYXJlbnQpLCAwLAotCQkgICAgIkNoaWxkIGlzIGxl c3MgdGhhbiBwYXJlbnQiKTsKLQl9Ci0KLQlsZWZ0bW9zdF9jaGlsZCA9IG5vZGVfbGNoaWxkX2dl dChub2RlKTsKLQlpZiAobGVmdG1vc3RfY2hpbGQgPT0gTlVMTCkgewotCQlyZXR1cm4gbm5vZGVz OwotCX0KLQlleHBlY3RfcHRyX2VxKG5vZGVfcHJldl9nZXQobGVmdG1vc3RfY2hpbGQpLAotCSAg ICAodm9pZCAqKW5vZGUsICJMZWZ0bW9zdCBjaGlsZCBkb2VzIG5vdCBsaW5rIHRvIG5vZGUiKTsK LQlubm9kZXMgKz0gbm9kZV92YWxpZGF0ZShsZWZ0bW9zdF9jaGlsZCwgbm9kZSk7Ci0KLQlmb3Ig KHNpYmxpbmcgPSBub2RlX25leHRfZ2V0KGxlZnRtb3N0X2NoaWxkKTsgc2libGluZyAhPQotCSAg ICBOVUxMOyBzaWJsaW5nID0gbm9kZV9uZXh0X2dldChzaWJsaW5nKSkgewotCQlleHBlY3RfcHRy X2VxKG5vZGVfbmV4dF9nZXQobm9kZV9wcmV2X2dldChzaWJsaW5nKSksIHNpYmxpbmcsCi0JCSAg ICAic2libGluZydzIHByZXYgZG9lc24ndCBsaW5rIHRvIHNpYmxpbmciKTsKLQkJbm5vZGVzICs9 IG5vZGVfdmFsaWRhdGUoc2libGluZywgbm9kZSk7Ci0JfQotCXJldHVybiBubm9kZXM7Ci19Ci0K LXN0YXRpYyB1bnNpZ25lZAotaGVhcF92YWxpZGF0ZShjb25zdCBoZWFwX3QgKmhlYXApIHsKLQl1 bnNpZ25lZCBubm9kZXMgPSAwOwotCW5vZGVfdCAqYXV4ZWxtOwotCi0JaWYgKGhlYXAtPnBoLnJv b3QgPT0gTlVMTCkgewotCQlnb3RvIGxhYmVsX3JldHVybjsKLQl9Ci0KLQlubm9kZXMgKz0gbm9k ZV92YWxpZGF0ZShoZWFwLT5waC5yb290LCBOVUxMKTsKLQotCWZvciAoYXV4ZWxtID0gbm9kZV9u ZXh0X2dldChoZWFwLT5waC5yb290KTsgYXV4ZWxtICE9IE5VTEw7Ci0JICAgIGF1eGVsbSA9IG5v ZGVfbmV4dF9nZXQoYXV4ZWxtKSkgewotCQlleHBlY3RfcHRyX2VxKG5vZGVfbmV4dF9nZXQobm9k ZV9wcmV2X2dldChhdXhlbG0pKSwgYXV4ZWxtLAotCQkgICAgImF1eGVsbSdzIHByZXYgZG9lc24n dCBsaW5rIHRvIGF1eGVsbSIpOwotCQlubm9kZXMgKz0gbm9kZV92YWxpZGF0ZShhdXhlbG0sIE5V TEwpOwotCX0KLQotbGFiZWxfcmV0dXJuOgotCWlmIChmYWxzZSkgewotCQloZWFwX3ByaW50KGhl YXApOwotCX0KLQlyZXR1cm4gbm5vZGVzOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcGhfZW1wdHkp IHsKLQloZWFwX3QgaGVhcDsKLQotCWhlYXBfbmV3KCZoZWFwKTsKLQlleHBlY3RfdHJ1ZShoZWFw X2VtcHR5KCZoZWFwKSwgIkhlYXAgc2hvdWxkIGJlIGVtcHR5Iik7Ci0JZXhwZWN0X3B0cl9udWxs KGhlYXBfZmlyc3QoJmhlYXApLCAiVW5leHBlY3RlZCBub2RlIik7Ci0JZXhwZWN0X3B0cl9udWxs KGhlYXBfYW55KCZoZWFwKSwgIlVuZXhwZWN0ZWQgbm9kZSIpOwotfQotVEVTVF9FTkQKLQotc3Rh dGljIHZvaWQKLW5vZGVfcmVtb3ZlKGhlYXBfdCAqaGVhcCwgbm9kZV90ICpub2RlKSB7Ci0JaGVh cF9yZW1vdmUoaGVhcCwgbm9kZSk7Ci0KLQlub2RlLT5tYWdpYyA9IDA7Ci19Ci0KLXN0YXRpYyBu b2RlX3QgKgotbm9kZV9yZW1vdmVfZmlyc3QoaGVhcF90ICpoZWFwKSB7Ci0Jbm9kZV90ICpub2Rl ID0gaGVhcF9yZW1vdmVfZmlyc3QoaGVhcCk7Ci0Jbm9kZS0+bWFnaWMgPSAwOwotCXJldHVybiBu b2RlOwotfQotCi1zdGF0aWMgbm9kZV90ICoKLW5vZGVfcmVtb3ZlX2FueShoZWFwX3QgKmhlYXAp IHsKLQlub2RlX3QgKm5vZGUgPSBoZWFwX3JlbW92ZV9hbnkoaGVhcCk7Ci0Jbm9kZS0+bWFnaWMg PSAwOwotCXJldHVybiBub2RlOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcGhfcmFuZG9tKSB7Ci0j ZGVmaW5lIE5OT0RFUyAyNQotI2RlZmluZSBOQkFHUyAyNTAKLSNkZWZpbmUgU0VFRCA0MgotCXNm bXRfdCAqc2ZtdDsKLQl1aW50NjRfdCBiYWdbTk5PREVTXTsKLQloZWFwX3QgaGVhcDsKLQlub2Rl X3Qgbm9kZXNbTk5PREVTXTsKLQl1bnNpZ25lZCBpLCBqLCBrOwotCi0Jc2ZtdCA9IGluaXRfZ2Vu X3JhbmQoU0VFRCk7Ci0JZm9yIChpID0gMDsgaSA8IE5CQUdTOyBpKyspIHsKLQkJc3dpdGNoIChp KSB7Ci0JCWNhc2UgMDoKLQkJCS8qIEluc2VydCBpbiBvcmRlci4gKi8KLQkJCWZvciAoaiA9IDA7 IGogPCBOTk9ERVM7IGorKykgewotCQkJCWJhZ1tqXSA9IGo7Ci0JCQl9Ci0JCQlicmVhazsKLQkJ Y2FzZSAxOgotCQkJLyogSW5zZXJ0IGluIHJldmVyc2Ugb3JkZXIuICovCi0JCQlmb3IgKGogPSAw OyBqIDwgTk5PREVTOyBqKyspIHsKLQkJCQliYWdbal0gPSBOTk9ERVMgLSBqIC0gMTsKLQkJCX0K LQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZm9yIChqID0gMDsgaiA8IE5OT0RFUzsgaisrKSB7 Ci0JCQkJYmFnW2pdID0gZ2VuX3JhbmQ2NF9yYW5nZShzZm10LCBOTk9ERVMpOwotCQkJfQotCQl9 Ci0KLQkJZm9yIChqID0gMTsgaiA8PSBOTk9ERVM7IGorKykgewotCQkJLyogSW5pdGlhbGl6ZSBo ZWFwIGFuZCBub2Rlcy4gKi8KLQkJCWhlYXBfbmV3KCZoZWFwKTsKLQkJCWV4cGVjdF91X2VxKGhl YXBfdmFsaWRhdGUoJmhlYXApLCAwLAotCQkJICAgICJJbmNvcnJlY3Qgbm9kZSBjb3VudCIpOwot CQkJZm9yIChrID0gMDsgayA8IGo7IGsrKykgewotCQkJCW5vZGVzW2tdLm1hZ2ljID0gTk9ERV9N QUdJQzsKLQkJCQlub2Rlc1trXS5rZXkgPSBiYWdba107Ci0JCQl9Ci0KLQkJCS8qIEluc2VydCBu b2Rlcy4gKi8KLQkJCWZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsKLQkJCQloZWFwX2luc2VydCgm aGVhcCwgJm5vZGVzW2tdKTsKLQkJCQlpZiAoaSAlIDEzID09IDEyKSB7Ci0JCQkJCWV4cGVjdF9w dHJfbm90X251bGwoaGVhcF9hbnkoJmhlYXApLAotCQkJCQkgICAgIkhlYXAgc2hvdWxkIG5vdCBi ZSBlbXB0eSIpOwotCQkJCQkvKiBUcmlnZ2VyIG1lcmdpbmcuICovCi0JCQkJCWV4cGVjdF9wdHJf bm90X251bGwoaGVhcF9maXJzdCgmaGVhcCksCi0JCQkJCSAgICAiSGVhcCBzaG91bGQgbm90IGJl IGVtcHR5Iik7Ci0JCQkJfQotCQkJCWV4cGVjdF91X2VxKGhlYXBfdmFsaWRhdGUoJmhlYXApLCBr ICsgMSwKLQkJCQkgICAgIkluY29ycmVjdCBub2RlIGNvdW50Iik7Ci0JCQl9Ci0KLQkJCWV4cGVj dF9mYWxzZShoZWFwX2VtcHR5KCZoZWFwKSwKLQkJCSAgICAiSGVhcCBzaG91bGQgbm90IGJlIGVt cHR5Iik7Ci0KLQkJCS8qIFJlbW92ZSBub2Rlcy4gKi8KLQkJCXN3aXRjaCAoaSAlIDYpIHsKLQkJ CWNhc2UgMDoKLQkJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7Ci0JCQkJCWV4cGVjdF91X2Vx KGhlYXBfdmFsaWRhdGUoJmhlYXApLCBqIC0gaywKLQkJCQkJICAgICJJbmNvcnJlY3Qgbm9kZSBj b3VudCIpOwotCQkJCQlub2RlX3JlbW92ZSgmaGVhcCwgJm5vZGVzW2tdKTsKLQkJCQkJZXhwZWN0 X3VfZXEoaGVhcF92YWxpZGF0ZSgmaGVhcCksIGogLSBrCi0JCQkJCSAgICAtIDEsICJJbmNvcnJl Y3Qgbm9kZSBjb3VudCIpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQlmb3Ig KGsgPSBqOyBrID4gMDsgay0tKSB7Ci0JCQkJCW5vZGVfcmVtb3ZlKCZoZWFwLCAmbm9kZXNbay0x XSk7Ci0JCQkJCWV4cGVjdF91X2VxKGhlYXBfdmFsaWRhdGUoJmhlYXApLCBrIC0gMSwKLQkJCQkJ ICAgICJJbmNvcnJlY3Qgbm9kZSBjb3VudCIpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2Ug MjogewotCQkJCW5vZGVfdCAqcHJldiA9IE5VTEw7Ci0JCQkJZm9yIChrID0gMDsgayA8IGo7IGsr KykgewotCQkJCQlub2RlX3QgKm5vZGUgPSBub2RlX3JlbW92ZV9maXJzdCgmaGVhcCk7Ci0JCQkJ CWV4cGVjdF91X2VxKGhlYXBfdmFsaWRhdGUoJmhlYXApLCBqIC0gawotCQkJCQkgICAgLSAxLCAi SW5jb3JyZWN0IG5vZGUgY291bnQiKTsKLQkJCQkJaWYgKHByZXYgIT0gTlVMTCkgewotCQkJCQkJ ZXhwZWN0X2RfZ2Uobm9kZV9jbXAobm9kZSwKLQkJCQkJCSAgICBwcmV2KSwgMCwKLQkJCQkJCSAg ICAiQmFkIHJlbW92YWwgb3JkZXIiKTsKLQkJCQkJfQotCQkJCQlwcmV2ID0gbm9kZTsKLQkJCQl9 Ci0JCQkJYnJlYWs7Ci0JCQl9IGNhc2UgMzogewotCQkJCW5vZGVfdCAqcHJldiA9IE5VTEw7Ci0J CQkJZm9yIChrID0gMDsgayA8IGo7IGsrKykgewotCQkJCQlub2RlX3QgKm5vZGUgPSBoZWFwX2Zp cnN0KCZoZWFwKTsKLQkJCQkJZXhwZWN0X3VfZXEoaGVhcF92YWxpZGF0ZSgmaGVhcCksIGogLSBr LAotCQkJCQkgICAgIkluY29ycmVjdCBub2RlIGNvdW50Iik7Ci0JCQkJCWlmIChwcmV2ICE9IE5V TEwpIHsKLQkJCQkJCWV4cGVjdF9kX2dlKG5vZGVfY21wKG5vZGUsCi0JCQkJCQkgICAgcHJldiks IDAsCi0JCQkJCQkgICAgIkJhZCByZW1vdmFsIG9yZGVyIik7Ci0JCQkJCX0KLQkJCQkJbm9kZV9y ZW1vdmUoJmhlYXAsIG5vZGUpOwotCQkJCQlleHBlY3RfdV9lcShoZWFwX3ZhbGlkYXRlKCZoZWFw KSwgaiAtIGsKLQkJCQkJICAgIC0gMSwgIkluY29ycmVjdCBub2RlIGNvdW50Iik7Ci0JCQkJCXBy ZXYgPSBub2RlOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0gY2FzZSA0OiB7Ci0JCQkJZm9yIChr ID0gMDsgayA8IGo7IGsrKykgewotCQkJCQlub2RlX3JlbW92ZV9hbnkoJmhlYXApOwotCQkJCQll eHBlY3RfdV9lcShoZWFwX3ZhbGlkYXRlKCZoZWFwKSwgaiAtIGsKLQkJCQkJICAgIC0gMSwgIklu Y29ycmVjdCBub2RlIGNvdW50Iik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfSBjYXNlIDU6IHsK LQkJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7Ci0JCQkJCW5vZGVfdCAqbm9kZSA9IGhlYXBf YW55KCZoZWFwKTsKLQkJCQkJZXhwZWN0X3VfZXEoaGVhcF92YWxpZGF0ZSgmaGVhcCksIGogLSBr LAotCQkJCQkgICAgIkluY29ycmVjdCBub2RlIGNvdW50Iik7Ci0JCQkJCW5vZGVfcmVtb3ZlKCZo ZWFwLCBub2RlKTsKLQkJCQkJZXhwZWN0X3VfZXEoaGVhcF92YWxpZGF0ZSgmaGVhcCksIGogLSBr Ci0JCQkJCSAgICAtIDEsICJJbmNvcnJlY3Qgbm9kZSBjb3VudCIpOwotCQkJCX0KLQkJCQlicmVh azsKLQkJCX0gZGVmYXVsdDoKLQkJCQlub3RfcmVhY2hlZCgpOwotCQkJfQotCi0JCQlleHBlY3Rf cHRyX251bGwoaGVhcF9maXJzdCgmaGVhcCksCi0JCQkgICAgIkhlYXAgc2hvdWxkIGJlIGVtcHR5 Iik7Ci0JCQlleHBlY3RfcHRyX251bGwoaGVhcF9hbnkoJmhlYXApLAotCQkJICAgICJIZWFwIHNo b3VsZCBiZSBlbXB0eSIpOwotCQkJZXhwZWN0X3RydWUoaGVhcF9lbXB0eSgmaGVhcCksICJIZWFw IHNob3VsZCBiZSBlbXB0eSIpOwotCQl9Ci0JfQotCWZpbmlfZ2VuX3JhbmQoc2ZtdCk7Ci0jdW5k ZWYgTk5PREVTCi0jdW5kZWYgU0VFRAotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsK LQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9waF9lbXB0eSwKLQkgICAgdGVzdF9waF9yYW5kb20p OwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9wcm5nLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvcHJuZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmQ5YjAx Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9wcm5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotI2luY2x1ZGUg InRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi1URVNUX0JFR0lOKHRlc3RfcHJuZ19sZ19yYW5nZV91 MzIpIHsKLQl1aW50MzJfdCBzYSwgc2I7Ci0JdWludDMyX3QgcmEsIHJiOwotCXVuc2lnbmVkIGxn X3JhbmdlOwotCi0Jc2EgPSA0MjsKLQlyYSA9IHBybmdfbGdfcmFuZ2VfdTMyKCZzYSwgMzIpOwot CXNhID0gNDI7Ci0JcmIgPSBwcm5nX2xnX3JhbmdlX3UzMigmc2EsIDMyKTsKLQlleHBlY3RfdTMy X2VxKHJhLCByYiwKLQkgICAgIlJlcGVhdGVkIGdlbmVyYXRpb24gc2hvdWxkIHByb2R1Y2UgcmVw ZWF0ZWQgcmVzdWx0cyIpOwotCi0Jc2IgPSA0MjsKLQlyYiA9IHBybmdfbGdfcmFuZ2VfdTMyKCZz YiwgMzIpOwotCWV4cGVjdF91MzJfZXEocmEsIHJiLAotCSAgICAiRXF1aXZhbGVudCBnZW5lcmF0 aW9uIHNob3VsZCBwcm9kdWNlIGVxdWl2YWxlbnQgcmVzdWx0cyIpOwotCi0Jc2EgPSA0MjsKLQly YSA9IHBybmdfbGdfcmFuZ2VfdTMyKCZzYSwgMzIpOwotCXJiID0gcHJuZ19sZ19yYW5nZV91MzIo JnNhLCAzMik7Ci0JZXhwZWN0X3UzMl9uZShyYSwgcmIsCi0JICAgICJGdWxsLXdpZHRoIHJlc3Vs dHMgbXVzdCBub3QgaW1tZWRpYXRlbHkgcmVwZWF0Iik7Ci0KLQlzYSA9IDQyOwotCXJhID0gcHJu Z19sZ19yYW5nZV91MzIoJnNhLCAzMik7Ci0JZm9yIChsZ19yYW5nZSA9IDMxOyBsZ19yYW5nZSA+ IDA7IGxnX3JhbmdlLS0pIHsKLQkJc2IgPSA0MjsKLQkJcmIgPSBwcm5nX2xnX3JhbmdlX3UzMigm c2IsIGxnX3JhbmdlKTsKLQkJZXhwZWN0X3UzMl9lcSgocmIgJiAoVUlOVDMyX0MoMHhmZmZmZmZm ZikgPDwgbGdfcmFuZ2UpKSwKLQkJICAgIDAsICJIaWdoIG9yZGVyIGJpdHMgc2hvdWxkIGJlIDAs IGxnX3JhbmdlPSV1IiwgbGdfcmFuZ2UpOwotCQlleHBlY3RfdTMyX2VxKHJiLCAocmEgPj4gKDMy IC0gbGdfcmFuZ2UpKSwKLQkJICAgICJFeHBlY3RlZCBoaWdoIG9yZGVyIGJpdHMgb2YgZnVsbC13 aWR0aCByZXN1bHQsICIKLQkJICAgICJsZ19yYW5nZT0ldSIsIGxnX3JhbmdlKTsKLQl9Ci0KLX0K LVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9wcm5nX2xnX3JhbmdlX3U2NCkgewotCXVpbnQ2 NF90IHNhLCBzYiwgcmEsIHJiOwotCXVuc2lnbmVkIGxnX3JhbmdlOwotCi0Jc2EgPSA0MjsKLQly YSA9IHBybmdfbGdfcmFuZ2VfdTY0KCZzYSwgNjQpOwotCXNhID0gNDI7Ci0JcmIgPSBwcm5nX2xn X3JhbmdlX3U2NCgmc2EsIDY0KTsKLQlleHBlY3RfdTY0X2VxKHJhLCByYiwKLQkgICAgIlJlcGVh dGVkIGdlbmVyYXRpb24gc2hvdWxkIHByb2R1Y2UgcmVwZWF0ZWQgcmVzdWx0cyIpOwotCi0Jc2Ig PSA0MjsKLQlyYiA9IHBybmdfbGdfcmFuZ2VfdTY0KCZzYiwgNjQpOwotCWV4cGVjdF91NjRfZXEo cmEsIHJiLAotCSAgICAiRXF1aXZhbGVudCBnZW5lcmF0aW9uIHNob3VsZCBwcm9kdWNlIGVxdWl2 YWxlbnQgcmVzdWx0cyIpOwotCi0Jc2EgPSA0MjsKLQlyYSA9IHBybmdfbGdfcmFuZ2VfdTY0KCZz YSwgNjQpOwotCXJiID0gcHJuZ19sZ19yYW5nZV91NjQoJnNhLCA2NCk7Ci0JZXhwZWN0X3U2NF9u ZShyYSwgcmIsCi0JICAgICJGdWxsLXdpZHRoIHJlc3VsdHMgbXVzdCBub3QgaW1tZWRpYXRlbHkg cmVwZWF0Iik7Ci0KLQlzYSA9IDQyOwotCXJhID0gcHJuZ19sZ19yYW5nZV91NjQoJnNhLCA2NCk7 Ci0JZm9yIChsZ19yYW5nZSA9IDYzOyBsZ19yYW5nZSA+IDA7IGxnX3JhbmdlLS0pIHsKLQkJc2Ig PSA0MjsKLQkJcmIgPSBwcm5nX2xnX3JhbmdlX3U2NCgmc2IsIGxnX3JhbmdlKTsKLQkJZXhwZWN0 X3U2NF9lcSgocmIgJiAoVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKSA8PCBsZ19yYW5nZSkp LAotCQkgICAgMCwgIkhpZ2ggb3JkZXIgYml0cyBzaG91bGQgYmUgMCwgbGdfcmFuZ2U9JXUiLCBs Z19yYW5nZSk7Ci0JCWV4cGVjdF91NjRfZXEocmIsIChyYSA+PiAoNjQgLSBsZ19yYW5nZSkpLAot CQkgICAgIkV4cGVjdGVkIGhpZ2ggb3JkZXIgYml0cyBvZiBmdWxsLXdpZHRoIHJlc3VsdCwgIgot CQkgICAgImxnX3JhbmdlPSV1IiwgbGdfcmFuZ2UpOwotCX0KLX0KLVRFU1RfRU5ECi0KLVRFU1Rf QkVHSU4odGVzdF9wcm5nX2xnX3JhbmdlX3p1KSB7Ci0Jc2l6ZV90IHNhLCBzYjsKLQlzaXplX3Qg cmEsIHJiOwotCXVuc2lnbmVkIGxnX3JhbmdlOwotCi0Jc2EgPSA0MjsKLQlyYSA9IHBybmdfbGdf cmFuZ2VfenUoJnNhLCBaVSgxKSA8PCAoMyArIExHX1NJWkVPRl9QVFIpKTsKLQlzYSA9IDQyOwot CXJiID0gcHJuZ19sZ19yYW5nZV96dSgmc2EsIFpVKDEpIDw8ICgzICsgTEdfU0laRU9GX1BUUikp OwotCWV4cGVjdF96dV9lcShyYSwgcmIsCi0JICAgICJSZXBlYXRlZCBnZW5lcmF0aW9uIHNob3Vs ZCBwcm9kdWNlIHJlcGVhdGVkIHJlc3VsdHMiKTsKLQotCXNiID0gNDI7Ci0JcmIgPSBwcm5nX2xn X3JhbmdlX3p1KCZzYiwgWlUoMSkgPDwgKDMgKyBMR19TSVpFT0ZfUFRSKSk7Ci0JZXhwZWN0X3p1 X2VxKHJhLCByYiwKLQkgICAgIkVxdWl2YWxlbnQgZ2VuZXJhdGlvbiBzaG91bGQgcHJvZHVjZSBl cXVpdmFsZW50IHJlc3VsdHMiKTsKLQotCXNhID0gNDI7Ci0JcmEgPSBwcm5nX2xnX3JhbmdlX3p1 KCZzYSwgWlUoMSkgPDwgKDMgKyBMR19TSVpFT0ZfUFRSKSk7Ci0JcmIgPSBwcm5nX2xnX3Jhbmdl X3p1KCZzYSwgWlUoMSkgPDwgKDMgKyBMR19TSVpFT0ZfUFRSKSk7Ci0JZXhwZWN0X3p1X25lKHJh LCByYiwKLQkgICAgIkZ1bGwtd2lkdGggcmVzdWx0cyBtdXN0IG5vdCBpbW1lZGlhdGVseSByZXBl YXQiKTsKLQotCXNhID0gNDI7Ci0JcmEgPSBwcm5nX2xnX3JhbmdlX3p1KCZzYSwgWlUoMSkgPDwg KDMgKyBMR19TSVpFT0ZfUFRSKSk7Ci0JZm9yIChsZ19yYW5nZSA9IChaVSgxKSA8PCAoMyArIExH X1NJWkVPRl9QVFIpKSAtIDE7IGxnX3JhbmdlID4gMDsKLQkgICAgbGdfcmFuZ2UtLSkgewotCQlz YiA9IDQyOwotCQlyYiA9IHBybmdfbGdfcmFuZ2VfenUoJnNiLCBsZ19yYW5nZSk7Ci0JCWV4cGVj dF96dV9lcSgocmIgJiAoU0laRV9UX01BWCA8PCBsZ19yYW5nZSkpLAotCQkgICAgMCwgIkhpZ2gg b3JkZXIgYml0cyBzaG91bGQgYmUgMCwgbGdfcmFuZ2U9JXUiLCBsZ19yYW5nZSk7Ci0JCWV4cGVj dF96dV9lcShyYiwgKHJhID4+ICgoWlUoMSkgPDwgKDMgKyBMR19TSVpFT0ZfUFRSKSkgLQotCQkg ICAgbGdfcmFuZ2UpKSwgIkV4cGVjdGVkIGhpZ2ggb3JkZXIgYml0cyBvZiBmdWxsLXdpZHRoICIK LQkJICAgICJyZXN1bHQsIGxnX3JhbmdlPSV1IiwgbGdfcmFuZ2UpOwotCX0KLQotfQotVEVTVF9F TkQKLQotVEVTVF9CRUdJTih0ZXN0X3BybmdfcmFuZ2VfdTMyKSB7Ci0JdWludDMyX3QgcmFuZ2U7 Ci0KLQljb25zdCB1aW50MzJfdCBtYXhfcmFuZ2UgPSAxMDAwMDAwMDsKLQljb25zdCB1aW50MzJf dCByYW5nZV9zdGVwID0gOTc7Ci0JY29uc3QgdW5zaWduZWQgbnJlcHMgPSAxMDsKLQotCWZvciAo cmFuZ2UgPSAyOyByYW5nZSA8IG1heF9yYW5nZTsgcmFuZ2UgKz0gcmFuZ2Vfc3RlcCkgewotCQl1 aW50MzJfdCBzOwotCQl1bnNpZ25lZCByZXA7Ci0KLQkJcyA9IHJhbmdlOwotCQlmb3IgKHJlcCA9 IDA7IHJlcCA8IG5yZXBzOyByZXArKykgewotCQkJdWludDMyX3QgciA9IHBybmdfcmFuZ2VfdTMy KCZzLCByYW5nZSk7Ci0KLQkJCWV4cGVjdF91MzJfbHQociwgcmFuZ2UsICJPdXQgb2YgcmFuZ2Ui KTsKLQkJfQotCX0KLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9wcm5nX3JhbmdlX3U2 NCkgewotCXVpbnQ2NF90IHJhbmdlOwotCi0JY29uc3QgdWludDY0X3QgbWF4X3JhbmdlID0gMTAw MDAwMDA7Ci0JY29uc3QgdWludDY0X3QgcmFuZ2Vfc3RlcCA9IDk3OwotCWNvbnN0IHVuc2lnbmVk IG5yZXBzID0gMTA7Ci0KLQlmb3IgKHJhbmdlID0gMjsgcmFuZ2UgPCBtYXhfcmFuZ2U7IHJhbmdl ICs9IHJhbmdlX3N0ZXApIHsKLQkJdWludDY0X3QgczsKLQkJdW5zaWduZWQgcmVwOwotCi0JCXMg PSByYW5nZTsKLQkJZm9yIChyZXAgPSAwOyByZXAgPCBucmVwczsgcmVwKyspIHsKLQkJCXVpbnQ2 NF90IHIgPSBwcm5nX3JhbmdlX3U2NCgmcywgcmFuZ2UpOwotCi0JCQlleHBlY3RfdTY0X2x0KHIs IHJhbmdlLCAiT3V0IG9mIHJhbmdlIik7Ci0JCX0KLQl9Ci19Ci1URVNUX0VORAotCi1URVNUX0JF R0lOKHRlc3RfcHJuZ19yYW5nZV96dSkgewotCXNpemVfdCByYW5nZTsKLQotCWNvbnN0IHNpemVf dCBtYXhfcmFuZ2UgPSAxMDAwMDAwMDsKLQljb25zdCBzaXplX3QgcmFuZ2Vfc3RlcCA9IDk3Owot CWNvbnN0IHVuc2lnbmVkIG5yZXBzID0gMTA7Ci0KLQotCWZvciAocmFuZ2UgPSAyOyByYW5nZSA8 IG1heF9yYW5nZTsgcmFuZ2UgKz0gcmFuZ2Vfc3RlcCkgewotCQlzaXplX3QgczsKLQkJdW5zaWdu ZWQgcmVwOwotCi0JCXMgPSByYW5nZTsKLQkJZm9yIChyZXAgPSAwOyByZXAgPCBucmVwczsgcmVw KyspIHsKLQkJCXNpemVfdCByID0gcHJuZ19yYW5nZV96dSgmcywgcmFuZ2UpOwotCi0JCQlleHBl Y3RfenVfbHQociwgcmFuZ2UsICJPdXQgb2YgcmFuZ2UiKTsKLQkJfQotCX0KLX0KLVRFU1RfRU5E Ci0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAg dGVzdF9wcm5nX2xnX3JhbmdlX3UzMiwKLQkgICAgdGVzdF9wcm5nX2xnX3JhbmdlX3U2NCwKLQkg ICAgdGVzdF9wcm5nX2xnX3JhbmdlX3p1LAotCSAgICB0ZXN0X3BybmdfcmFuZ2VfdTMyLAotCSAg ICB0ZXN0X3BybmdfcmFuZ2VfdTY0LAotCSAgICB0ZXN0X3BybmdfcmFuZ2VfenUpOwotfQoKZGlm ZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9wcm9mX2FjY3VtLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvcHJvZl9hY2N1bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjM5 MmFjLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9wcm9mX2FjY3VtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0j aW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9wcm9mX2RhdGEuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX3N5cy5o IgotCi0jZGVmaW5lIE5USFJFQURTCQk0Ci0jZGVmaW5lIE5BTExPQ1NfUEVSX1RIUkVBRAk1MAot I2RlZmluZSBEVU1QX0lOVEVSVkFMCQkxCi0jZGVmaW5lIEJUX0NPVU5UX0NIRUNLX0lOVEVSVkFM CTUKLQotc3RhdGljIGludAotcHJvZl9kdW1wX29wZW5fZmlsZV9pbnRlcmNlcHQoY29uc3QgY2hh ciAqZmlsZW5hbWUsIGludCBtb2RlKSB7Ci0JaW50IGZkOwotCi0JZmQgPSBvcGVuKCIvZGV2L251 bGwiLCBPX1dST05MWSk7Ci0JYXNzZXJ0X2RfbmUoZmQsIC0xLCAiVW5leHBlY3RlZCBvcGVuKCkg ZmFpbHVyZSIpOwotCi0JcmV0dXJuIGZkOwotfQotCi1zdGF0aWMgdm9pZCAqCi1hbGxvY19mcm9t X3Blcm11dGVkX2JhY2t0cmFjZSh1bnNpZ25lZCB0aGRfaW5kLCB1bnNpZ25lZCBpdGVyYXRpb24p IHsKLQlyZXR1cm4gYnRhbGxvYygxLCB0aGRfaW5kKk5BTExPQ1NfUEVSX1RIUkVBRCArIGl0ZXJh dGlvbik7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXRoZF9zdGFydCh2b2lkICp2YXJnKSB7Ci0JdW5z aWduZWQgdGhkX2luZCA9ICoodW5zaWduZWQgKil2YXJnOwotCXNpemVfdCBidF9jb3VudF9wcmV2 LCBidF9jb3VudDsKLQl1bnNpZ25lZCBpX3ByZXYsIGk7Ci0KLQlpX3ByZXYgPSAwOwotCWJ0X2Nv dW50X3ByZXYgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOQUxMT0NTX1BFUl9USFJFQUQ7IGkrKykg ewotCQl2b2lkICpwID0gYWxsb2NfZnJvbV9wZXJtdXRlZF9iYWNrdHJhY2UodGhkX2luZCwgaSk7 Ci0JCWRhbGxvY3gocCwgMCk7Ci0JCWlmIChpICUgRFVNUF9JTlRFUlZBTCA9PSAwKSB7Ci0JCQll eHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmR1bXAiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwKLQkJ CSAgICAwLCAiVW5leHBlY3RlZCBlcnJvciB3aGlsZSBkdW1waW5nIGhlYXAgcHJvZmlsZSIpOwot CQl9Ci0KLQkJaWYgKGkgJSBCVF9DT1VOVF9DSEVDS19JTlRFUlZBTCA9PSAwIHx8Ci0JCSAgICBp KzEgPT0gTkFMTE9DU19QRVJfVEhSRUFEKSB7Ci0JCQlidF9jb3VudCA9IHByb2ZfYnRfY291bnQo KTsKLQkJCWV4cGVjdF96dV9sZShidF9jb3VudF9wcmV2KyhpLWlfcHJldiksIGJ0X2NvdW50LAot CQkJICAgICJFeHBlY3RlZCBsYXJnZXIgYmFja3RyYWNlIGNvdW50IGluY3JlYXNlIik7Ci0JCQlp X3ByZXYgPSBpOwotCQkJYnRfY291bnRfcHJldiA9IGJ0X2NvdW50OwotCQl9Ci0JfQotCi0JcmV0 dXJuIE5VTEw7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9pZHVtcCkgewotCWJvb2wgYWN0aXZlOwot CXRoZF90IHRoZHNbTlRIUkVBRFNdOwotCXVuc2lnbmVkIHRoZF9hcmdzW05USFJFQURTXTsKLQl1 bnNpZ25lZCBpOwotCi0JdGVzdF9za2lwX2lmKCFjb25maWdfcHJvZik7Ci0KLQlhY3RpdmUgPSB0 cnVlOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuYWN0aXZlIiwgTlVMTCwgTlVMTCwgKHZv aWQgKikmYWN0aXZlLAotCSAgICBzaXplb2YoYWN0aXZlKSksIDAsCi0JICAgICJVbmV4cGVjdGVk IG1hbGxjdGwgZmFpbHVyZSB3aGlsZSBhY3RpdmF0aW5nIHByb2ZpbGluZyIpOwotCi0JcHJvZl9k dW1wX29wZW5fZmlsZSA9IHByb2ZfZHVtcF9vcGVuX2ZpbGVfaW50ZXJjZXB0OwotCi0JZm9yIChp ID0gMDsgaSA8IE5USFJFQURTOyBpKyspIHsKLQkJdGhkX2FyZ3NbaV0gPSBpOwotCQl0aGRfY3Jl YXRlKCZ0aGRzW2ldLCB0aGRfc3RhcnQsICh2b2lkICopJnRoZF9hcmdzW2ldKTsKLQl9Ci0JZm9y IChpID0gMDsgaSA8IE5USFJFQURTOyBpKyspIHsKLQkJdGhkX2pvaW4odGhkc1tpXSwgTlVMTCk7 Ci0JfQotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdF9ub19y ZWVudHJhbmN5KAotCSAgICB0ZXN0X2lkdW1wKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9hY2N1bS5zaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2FjY3Vt LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UxM2ZjLi4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2Fj Y3VtLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIS9iaW4vc2gKLQotaWYgWyAi eCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KLSAgZXhwb3J0IE1BTExPQ19DT05GPSJw cm9mOnRydWUscHJvZl9hY2N1bTp0cnVlLHByb2ZfYWN0aXZlOmZhbHNlLGxnX3Byb2Zfc2FtcGxl OjAiCi1maQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9wcm9mX2FjdGl2ZS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfYWN0aXZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGFmMjllN2EuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfYWN0aXZlLmMKKysrIC9kZXYvbnVsbApAQCAt MSwxMTkgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVk ZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9kYXRhLmgiCi0KLXN0YXRpYyB2b2lkCi1tYWxsY3Rs X2Jvb2xfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgZXhwZWN0ZWQsIGNvbnN0IGNoYXIgKmZ1 bmMsIGludCBsaW5lKSB7Ci0JYm9vbCBvbGQ7Ci0Jc2l6ZV90IHN6OwotCi0Jc3ogPSBzaXplb2Yo b2xkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKG5hbWUsICh2b2lkICopJm9sZCwgJnN6LCBOVUxM LCAwKSwgMCwKLQkgICAgIiVzKCk6JWQ6IFVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHJlYWRp bmcgJXMiLCBmdW5jLCBsaW5lLCBuYW1lKTsKLQlleHBlY3RfYl9lcShvbGQsIGV4cGVjdGVkLCAi JXMoKTolZDogVW5leHBlY3RlZCAlcyB2YWx1ZSIsIGZ1bmMsIGxpbmUsCi0JICAgIG5hbWUpOwot fQotCi1zdGF0aWMgdm9pZAotbWFsbGN0bF9ib29sX3NldChjb25zdCBjaGFyICpuYW1lLCBib29s IG9sZF9leHBlY3RlZCwgYm9vbCB2YWxfbmV3LAotICAgIGNvbnN0IGNoYXIgKmZ1bmMsIGludCBs aW5lKSB7Ci0JYm9vbCBvbGQ7Ci0Jc2l6ZV90IHN6OwotCi0Jc3ogPSBzaXplb2Yob2xkKTsKLQll eHBlY3RfZF9lcShtYWxsY3RsKG5hbWUsICh2b2lkICopJm9sZCwgJnN6LCAodm9pZCAqKSZ2YWxf bmV3LAotCSAgICBzaXplb2YodmFsX25ldykpLCAwLAotCSAgICAiJXMoKTolZDogVW5leHBlY3Rl ZCBtYWxsY3RsIGZhaWx1cmUgcmVhZGluZy93cml0aW5nICVzIiwgZnVuYywKLQkgICAgbGluZSwg bmFtZSk7Ci0JZXhwZWN0X2JfZXEob2xkLCBvbGRfZXhwZWN0ZWQsICIlcygpOiVkOiBVbmV4cGVj dGVkICVzIHZhbHVlIiwgZnVuYywKLQkgICAgbGluZSwgbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1tYWxsY3RsX3Byb2ZfYWN0aXZlX2dldF9pbXBsKGJvb2wgcHJvZl9hY3RpdmVfb2xkX2V4cGVj dGVkLCBjb25zdCBjaGFyICpmdW5jLAotICAgIGludCBsaW5lKSB7Ci0JbWFsbGN0bF9ib29sX2dl dCgicHJvZi5hY3RpdmUiLCBwcm9mX2FjdGl2ZV9vbGRfZXhwZWN0ZWQsIGZ1bmMsIGxpbmUpOwot fQotI2RlZmluZSBtYWxsY3RsX3Byb2ZfYWN0aXZlX2dldChhKQkJCQkJXAotCW1hbGxjdGxfcHJv Zl9hY3RpdmVfZ2V0X2ltcGwoYSwgX19mdW5jX18sIF9fTElORV9fKQotCi1zdGF0aWMgdm9pZAot bWFsbGN0bF9wcm9mX2FjdGl2ZV9zZXRfaW1wbChib29sIHByb2ZfYWN0aXZlX29sZF9leHBlY3Rl ZCwKLSAgICBib29sIHByb2ZfYWN0aXZlX25ldywgY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmUp IHsKLQltYWxsY3RsX2Jvb2xfc2V0KCJwcm9mLmFjdGl2ZSIsIHByb2ZfYWN0aXZlX29sZF9leHBl Y3RlZCwKLQkgICAgcHJvZl9hY3RpdmVfbmV3LCBmdW5jLCBsaW5lKTsKLX0KLSNkZWZpbmUgbWFs bGN0bF9wcm9mX2FjdGl2ZV9zZXQoYSwgYikJCQkJCVwKLQltYWxsY3RsX3Byb2ZfYWN0aXZlX3Nl dF9pbXBsKGEsIGIsIF9fZnVuY19fLCBfX0xJTkVfXykKLQotc3RhdGljIHZvaWQKLW1hbGxjdGxf dGhyZWFkX3Byb2ZfYWN0aXZlX2dldF9pbXBsKGJvb2wgdGhyZWFkX3Byb2ZfYWN0aXZlX29sZF9l eHBlY3RlZCwKLSAgICBjb25zdCBjaGFyICpmdW5jLCBpbnQgbGluZSkgewotCW1hbGxjdGxfYm9v bF9nZXQoInRocmVhZC5wcm9mLmFjdGl2ZSIsIHRocmVhZF9wcm9mX2FjdGl2ZV9vbGRfZXhwZWN0 ZWQsCi0JICAgIGZ1bmMsIGxpbmUpOwotfQotI2RlZmluZSBtYWxsY3RsX3RocmVhZF9wcm9mX2Fj dGl2ZV9nZXQoYSkJCQkJXAotCW1hbGxjdGxfdGhyZWFkX3Byb2ZfYWN0aXZlX2dldF9pbXBsKGEs IF9fZnVuY19fLCBfX0xJTkVfXykKLQotc3RhdGljIHZvaWQKLW1hbGxjdGxfdGhyZWFkX3Byb2Zf YWN0aXZlX3NldF9pbXBsKGJvb2wgdGhyZWFkX3Byb2ZfYWN0aXZlX29sZF9leHBlY3RlZCwKLSAg ICBib29sIHRocmVhZF9wcm9mX2FjdGl2ZV9uZXcsIGNvbnN0IGNoYXIgKmZ1bmMsIGludCBsaW5l KSB7Ci0JbWFsbGN0bF9ib29sX3NldCgidGhyZWFkLnByb2YuYWN0aXZlIiwgdGhyZWFkX3Byb2Zf YWN0aXZlX29sZF9leHBlY3RlZCwKLQkgICAgdGhyZWFkX3Byb2ZfYWN0aXZlX25ldywgZnVuYywg bGluZSk7Ci19Ci0jZGVmaW5lIG1hbGxjdGxfdGhyZWFkX3Byb2ZfYWN0aXZlX3NldChhLCBiKQkJ CQlcCi0JbWFsbGN0bF90aHJlYWRfcHJvZl9hY3RpdmVfc2V0X2ltcGwoYSwgYiwgX19mdW5jX18s IF9fTElORV9fKQotCi1zdGF0aWMgdm9pZAotcHJvZl9zYW1wbGluZ19wcm9iZV9pbXBsKGJvb2wg ZXhwZWN0X3NhbXBsZSwgY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmUpIHsKLQl2b2lkICpwOwot CXNpemVfdCBleHBlY3RlZF9iYWNrdHJhY2VzID0gZXhwZWN0X3NhbXBsZSA/IDEgOiAwOwotCi0J ZXhwZWN0X3p1X2VxKHByb2ZfYnRfY291bnQoKSwgMCwgIiVzKCk6JWQ6IEV4cGVjdGVkIDAgYmFj a3RyYWNlcyIsIGZ1bmMsCi0JICAgIGxpbmUpOwotCXAgPSBtYWxsb2N4KDEsIDApOwotCWV4cGVj dF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQlleHBl Y3RfenVfZXEocHJvZl9idF9jb3VudCgpLCBleHBlY3RlZF9iYWNrdHJhY2VzLAotCSAgICAiJXMo KTolZDogVW5leHBlY3RlZCBiYWNrdHJhY2UgY291bnQiLCBmdW5jLCBsaW5lKTsKLQlkYWxsb2N4 KHAsIDApOwotfQotI2RlZmluZSBwcm9mX3NhbXBsaW5nX3Byb2JlKGEpCQkJCQkJXAotCXByb2Zf c2FtcGxpbmdfcHJvYmVfaW1wbChhLCBfX2Z1bmNfXywgX19MSU5FX18pCi0KLVRFU1RfQkVHSU4o dGVzdF9wcm9mX2FjdGl2ZSkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCi0JbWFs bGN0bF9wcm9mX2FjdGl2ZV9nZXQodHJ1ZSk7Ci0JbWFsbGN0bF90aHJlYWRfcHJvZl9hY3RpdmVf Z2V0KGZhbHNlKTsKLQotCW1hbGxjdGxfcHJvZl9hY3RpdmVfc2V0KHRydWUsIHRydWUpOwotCW1h bGxjdGxfdGhyZWFkX3Byb2ZfYWN0aXZlX3NldChmYWxzZSwgZmFsc2UpOwotCS8qIHByb2YuYWN0 aXZlLCAhdGhyZWFkLnByb2YuYWN0aXZlLiAqLwotCXByb2Zfc2FtcGxpbmdfcHJvYmUoZmFsc2Up OwotCi0JbWFsbGN0bF9wcm9mX2FjdGl2ZV9zZXQodHJ1ZSwgZmFsc2UpOwotCW1hbGxjdGxfdGhy ZWFkX3Byb2ZfYWN0aXZlX3NldChmYWxzZSwgZmFsc2UpOwotCS8qICFwcm9mLmFjdGl2ZSwgIXRo cmVhZC5wcm9mLmFjdGl2ZS4gKi8KLQlwcm9mX3NhbXBsaW5nX3Byb2JlKGZhbHNlKTsKLQotCW1h bGxjdGxfcHJvZl9hY3RpdmVfc2V0KGZhbHNlLCBmYWxzZSk7Ci0JbWFsbGN0bF90aHJlYWRfcHJv Zl9hY3RpdmVfc2V0KGZhbHNlLCB0cnVlKTsKLQkvKiAhcHJvZi5hY3RpdmUsIHRocmVhZC5wcm9m LmFjdGl2ZS4gKi8KLQlwcm9mX3NhbXBsaW5nX3Byb2JlKGZhbHNlKTsKLQotCW1hbGxjdGxfcHJv Zl9hY3RpdmVfc2V0KGZhbHNlLCB0cnVlKTsKLQltYWxsY3RsX3RocmVhZF9wcm9mX2FjdGl2ZV9z ZXQodHJ1ZSwgdHJ1ZSk7Ci0JLyogcHJvZi5hY3RpdmUsIHRocmVhZC5wcm9mLmFjdGl2ZS4gKi8K LQlwcm9mX3NhbXBsaW5nX3Byb2JlKHRydWUpOwotCi0JLyogUmVzdG9yZSBzZXR0aW5ncy4gKi8K LQltYWxsY3RsX3Byb2ZfYWN0aXZlX3NldCh0cnVlLCB0cnVlKTsKLQltYWxsY3RsX3RocmVhZF9w cm9mX2FjdGl2ZV9zZXQodHJ1ZSwgZmFsc2UpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZv aWQpIHsKLQlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0X3Byb2ZfYWN0aXZl KTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvcHJvZl9hY3RpdmUuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9hY3RpdmUuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDk3NDk2NzQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfYWN0aXZlLnNoCisrKyAvZGV2L251bGwKQEAg LTEsNSArMCwwIEBACi0jIS9iaW4vc2gKLQotaWYgWyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIg XSA7IHRoZW4KLSAgZXhwb3J0IE1BTExPQ19DT05GPSJwcm9mOnRydWUscHJvZl9hY3RpdmU6dHJ1 ZSxwcm9mX3RocmVhZF9hY3RpdmVfaW5pdDpmYWxzZSxsZ19wcm9mX3NhbXBsZTowIgotZmkKCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvcHJvZl9nZHVtcC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3Byb2ZfZ2R1bXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZl NDUwMy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvcHJvZl9nZHVtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAot I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcHJvZl9zeXMuaCIKLQotc3RhdGljIGJvb2wgZGlkX3Byb2ZfZHVtcF9vcGVuOwotCi1z dGF0aWMgaW50Ci1wcm9mX2R1bXBfb3Blbl9maWxlX2ludGVyY2VwdChjb25zdCBjaGFyICpmaWxl bmFtZSwgaW50IG1vZGUpIHsKLQlpbnQgZmQ7Ci0KLQlkaWRfcHJvZl9kdW1wX29wZW4gPSB0cnVl OwotCi0JZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1dST05MWSk7Ci0JYXNzZXJ0X2RfbmUoZmQs IC0xLCAiVW5leHBlY3RlZCBvcGVuKCkgZmFpbHVyZSIpOwotCi0JcmV0dXJuIGZkOwotfQotCi1U RVNUX0JFR0lOKHRlc3RfZ2R1bXApIHsKLQl0ZXN0X3NraXBfaWYob3B0X2hwYSk7Ci0JYm9vbCBh Y3RpdmUsIGdkdW1wLCBnZHVtcF9vbGQ7Ci0Jdm9pZCAqcCwgKnEsICpyLCAqczsKLQlzaXplX3Qg c3o7Ci0KLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKLQotCWFjdGl2ZSA9IHRydWU7Ci0J ZXhwZWN0X2RfZXEobWFsbGN0bCgicHJvZi5hY3RpdmUiLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZh Y3RpdmUsCi0JICAgIHNpemVvZihhY3RpdmUpKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0 bCBmYWlsdXJlIHdoaWxlIGFjdGl2YXRpbmcgcHJvZmlsaW5nIik7Ci0KLQlwcm9mX2R1bXBfb3Bl bl9maWxlID0gcHJvZl9kdW1wX29wZW5fZmlsZV9pbnRlcmNlcHQ7Ci0KLQlkaWRfcHJvZl9kdW1w X29wZW4gPSBmYWxzZTsKLQlwID0gbWFsbG9jeCgoMVUgPDwgU0NfTEdfTEFSR0VfTUlOQ0xBU1Mp LCAwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWls dXJlIik7Ci0JZXhwZWN0X3RydWUoZGlkX3Byb2ZfZHVtcF9vcGVuLCAiRXhwZWN0ZWQgYSBwcm9m aWxlIGR1bXAiKTsKLQotCWRpZF9wcm9mX2R1bXBfb3BlbiA9IGZhbHNlOwotCXEgPSBtYWxsb2N4 KCgxVSA8PCBTQ19MR19MQVJHRV9NSU5DTEFTUyksIDApOwotCWV4cGVjdF9wdHJfbm90X251bGwo cSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQlleHBlY3RfdHJ1ZShkaWRfcHJv Zl9kdW1wX29wZW4sICJFeHBlY3RlZCBhIHByb2ZpbGUgZHVtcCIpOwotCi0JZ2R1bXAgPSBmYWxz ZTsKLQlzeiA9IHNpemVvZihnZHVtcF9vbGQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2Yu Z2R1bXAiLCAodm9pZCAqKSZnZHVtcF9vbGQsICZzeiwKLQkgICAgKHZvaWQgKikmZ2R1bXAsIHNp emVvZihnZHVtcCkpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hpbGUg ZGlzYWJsaW5nIHByb2YuZ2R1bXAiKTsKLQlhc3NlcnQoZ2R1bXBfb2xkKTsKLQlkaWRfcHJvZl9k dW1wX29wZW4gPSBmYWxzZTsKLQlyID0gbWFsbG9jeCgoMVUgPDwgU0NfTEdfTEFSR0VfTUlOQ0xB U1MpLCAwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHEsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBm YWlsdXJlIik7Ci0JZXhwZWN0X2ZhbHNlKGRpZF9wcm9mX2R1bXBfb3BlbiwgIlVuZXhwZWN0ZWQg cHJvZmlsZSBkdW1wIik7Ci0KLQlnZHVtcCA9IHRydWU7Ci0Jc3ogPSBzaXplb2YoZ2R1bXBfb2xk KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmdkdW1wIiwgKHZvaWQgKikmZ2R1bXBfb2xk LCAmc3osCi0JICAgICh2b2lkICopJmdkdW1wLCBzaXplb2YoZ2R1bXApKSwgMCwKLQkgICAgIlVu ZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoaWxlIGVuYWJsaW5nIHByb2YuZ2R1bXAiKTsKLQlh c3NlcnQoIWdkdW1wX29sZCk7Ci0JZGlkX3Byb2ZfZHVtcF9vcGVuID0gZmFsc2U7Ci0JcyA9IG1h bGxvY3goKDFVIDw8IFNDX0xHX0xBUkdFX01JTkNMQVNTKSwgMCk7Ci0JZXhwZWN0X3B0cl9ub3Rf bnVsbChxLCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwotCWV4cGVjdF90cnVlKGRp ZF9wcm9mX2R1bXBfb3BlbiwgIkV4cGVjdGVkIGEgcHJvZmlsZSBkdW1wIik7Ci0KLQlkYWxsb2N4 KHAsIDApOwotCWRhbGxvY3gocSwgMCk7Ci0JZGFsbG9jeChyLCAwKTsKLQlkYWxsb2N4KHMsIDAp OwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdF9ub19yZWVu dHJhbmN5KAotCSAgICB0ZXN0X2dkdW1wKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9nZHVtcC5zaCBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2dkdW1wLnNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjYwMGQyLi4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2dkdW1w LnNoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIS9iaW4vc2gKLQotaWYgWyAieCR7 ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KLSAgZXhwb3J0IE1BTExPQ19DT05GPSJwcm9m OnRydWUscHJvZl9hY3RpdmU6ZmFsc2UscHJvZl9nZHVtcDp0cnVlIgotZmkKLQoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9m X2hvb2suYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9wcm9mX2hvb2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ4MGQ5My4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvcHJvZl9ob29rLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotI2luY2x1ZGUg InRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi1jb25zdCBjaGFyICpkdW1wX2ZpbGVuYW1lID0gIi9k ZXYvbnVsbCI7Ci0KLXByb2ZfYmFja3RyYWNlX2hvb2tfdCBkZWZhdWx0X2hvb2s7Ci0KLWJvb2wg bW9ja19idF9ob29rX2NhbGxlZCA9IGZhbHNlOwotYm9vbCBtb2NrX2R1bXBfaG9va19jYWxsZWQg PSBmYWxzZTsKLQotdm9pZAotbW9ja19idF9ob29rKHZvaWQgKip2ZWMsIHVuc2lnbmVkICpsZW4s IHVuc2lnbmVkIG1heF9sZW4pIHsKLQkqbGVuID0gbWF4X2xlbjsKLQlmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgbWF4X2xlbjsgKytpKSB7Ci0JCXZlY1tpXSA9ICh2b2lkICopKCh1aW50cHRyX3Qp aSk7Ci0JfQotCW1vY2tfYnRfaG9va19jYWxsZWQgPSB0cnVlOwotfQotCi12b2lkCi1tb2NrX2J0 X2F1Z21lbnRpbmdfaG9vayh2b2lkICoqdmVjLCB1bnNpZ25lZCAqbGVuLCB1bnNpZ25lZCBtYXhf bGVuKSB7Ci0JZGVmYXVsdF9ob29rKHZlYywgbGVuLCBtYXhfbGVuKTsKLQlleHBlY3RfdV9ndCgq bGVuLCAwLCAiRGVmYXVsdCBiYWNrdHJhY2UgaG9vayByZXR1cm5lZCBlbXB0eSBiYWNrdHJhY2Ui KTsKLQlleHBlY3RfdV9sdCgqbGVuLCBtYXhfbGVuLAotCSAgICAiRGVmYXVsdCBiYWNrdHJhY2Ug aG9vayByZXR1cm5lZCB0b28gbGFyZ2UgYmFja3RyYWNlIik7Ci0KLQkvKiBBZGQgYSBzZXBhcmF0 b3IgYmV0d2VlbiBkZWZhdWx0IGZyYW1lcyBhbmQgYXVnbWVudGVkICovCi0JdmVjWypsZW5dID0g KHZvaWQgKikweDAzMDMwMzAzMDsKLQkoKmxlbikrKzsKLQotCS8qIEFkZCBtb3JlIHN0YWNrIGZy YW1lcyAqLwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLQkJaWYgKCpsZW4g PT0gbWF4X2xlbikgewotCQkJYnJlYWs7Ci0JCX0KLQkJdmVjWypsZW5dID0gKHZvaWQgKikoKHVp bnRwdHJfdClpKTsKLQkJKCpsZW4pKys7Ci0JfQotCi0KLQltb2NrX2J0X2hvb2tfY2FsbGVkID0g dHJ1ZTsKLX0KLQotdm9pZAotbW9ja19kdW1wX2hvb2soY29uc3QgY2hhciAqZmlsZW5hbWUpIHsK LQltb2NrX2R1bXBfaG9va19jYWxsZWQgPSB0cnVlOwotCWV4cGVjdF9zdHJfZXEoZmlsZW5hbWUs IGR1bXBfZmlsZW5hbWUsCi0JICAgICJJbmNvcnJlY3QgZmlsZSBuYW1lIHBhc3NlZCB0byB0aGUg ZHVtcCBob29rIik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9wcm9mX2JhY2t0cmFjZV9ob29rX3Jl cGxhY2UpIHsKLQotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCi0JbW9ja19idF9ob29r X2NhbGxlZCA9IGZhbHNlOwotCi0Jdm9pZCAqcDAgPSBtYWxsb2N4KDEsIDApOwotCWFzc2VydF9w dHJfbm90X251bGwocDAsICJGYWlsZWQgdG8gYWxsb2NhdGUiKTsKLQotCWV4cGVjdF9mYWxzZSht b2NrX2J0X2hvb2tfY2FsbGVkLCAiQ2FsbGVkIG1vY2sgaG9vayBiZWZvcmUgaXQncyBzZXQiKTsK LQotCXByb2ZfYmFja3RyYWNlX2hvb2tfdCBudWxsX2hvb2sgPSBOVUxMOwotCWV4cGVjdF9kX2Vx KG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5wcm9mX2JhY2t0cmFjZSIsCi0JICAgIE5VTEws IDAsICh2b2lkICopJm51bGxfaG9vaywgIHNpemVvZihudWxsX2hvb2spKSwKLQkJRUlOVkFMLCAi SW5jb3JyZWN0bHkgYWxsb3dlZCBOVUxMIGJhY2t0cmFjZSBob29rIik7Ci0KLQlzaXplX3QgZGVm YXVsdF9ob29rX3N6ID0gc2l6ZW9mKHByb2ZfYmFja3RyYWNlX2hvb2tfdCk7Ci0JcHJvZl9iYWNr dHJhY2VfaG9va190IGhvb2sgPSAmbW9ja19idF9ob29rOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwo ImV4cGVyaW1lbnRhbC5ob29rcy5wcm9mX2JhY2t0cmFjZSIsCi0JICAgICh2b2lkICopJmRlZmF1 bHRfaG9vaywgJmRlZmF1bHRfaG9va19zeiwgKHZvaWQgKikmaG9vaywKLQkgICAgc2l6ZW9mKGhv b2spKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHNldHRpbmcgaG9vayIpOwotCi0J dm9pZCAqcDEgPSBtYWxsb2N4KDEsIDApOwotCWFzc2VydF9wdHJfbm90X251bGwocDEsICJGYWls ZWQgdG8gYWxsb2NhdGUiKTsKLQotCWV4cGVjdF90cnVlKG1vY2tfYnRfaG9va19jYWxsZWQsICJE aWRuJ3QgY2FsbCBtb2NrIGhvb2siKTsKLQotCXByb2ZfYmFja3RyYWNlX2hvb2tfdCBjdXJyZW50 X2hvb2s7Ci0Jc2l6ZV90IGN1cnJlbnRfaG9va19zeiA9IHNpemVvZihwcm9mX2JhY2t0cmFjZV9o b29rX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5wcm9mX2Jh Y2t0cmFjZSIsCi0JICAgICh2b2lkICopJmN1cnJlbnRfaG9vaywgJmN1cnJlbnRfaG9va19zeiwg KHZvaWQgKikmZGVmYXVsdF9ob29rLAotCSAgICBzaXplb2YoZGVmYXVsdF9ob29rKSksIDAsCi0J ICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSByZXNldHRpbmcgaG9vayB0byBkZWZhdWx0 Iik7Ci0KLQlleHBlY3RfcHRyX2VxKGN1cnJlbnRfaG9vaywgaG9vaywKLQkgICAgIkhvb2sgcmV0 dXJuZWQgYnkgbWFsbGN0bCBpcyBub3QgZXF1YWwgdG8gbW9jayBob29rIik7Ci0KLQlkYWxsb2N4 KHAxLCAwKTsKLQlkYWxsb2N4KHAwLCAwKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVz dF9wcm9mX2JhY2t0cmFjZV9ob29rX2F1Z21lbnQpIHsKLQotCXRlc3Rfc2tpcF9pZighY29uZmln X3Byb2YpOwotCi0JbW9ja19idF9ob29rX2NhbGxlZCA9IGZhbHNlOwotCi0Jdm9pZCAqcDAgPSBt YWxsb2N4KDEsIDApOwotCWFzc2VydF9wdHJfbm90X251bGwocDAsICJGYWlsZWQgdG8gYWxsb2Nh dGUiKTsKLQotCWV4cGVjdF9mYWxzZShtb2NrX2J0X2hvb2tfY2FsbGVkLCAiQ2FsbGVkIG1vY2sg aG9vayBiZWZvcmUgaXQncyBzZXQiKTsKLQotCXNpemVfdCBkZWZhdWx0X2hvb2tfc3ogPSBzaXpl b2YocHJvZl9iYWNrdHJhY2VfaG9va190KTsKLQlwcm9mX2JhY2t0cmFjZV9ob29rX3QgaG9vayA9 ICZtb2NrX2J0X2F1Z21lbnRpbmdfaG9vazsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJleHBlcmlt ZW50YWwuaG9va3MucHJvZl9iYWNrdHJhY2UiLAotCSAgICAodm9pZCAqKSZkZWZhdWx0X2hvb2ss ICZkZWZhdWx0X2hvb2tfc3osICh2b2lkICopJmhvb2ssCi0JICAgIHNpemVvZihob29rKSksIDAs ICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSBzZXR0aW5nIGhvb2siKTsKLQotCXZvaWQgKnAx ID0gbWFsbG9jeCgxLCAwKTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKHAxLCAiRmFpbGVkIHRvIGFs bG9jYXRlIik7Ci0KLQlleHBlY3RfdHJ1ZShtb2NrX2J0X2hvb2tfY2FsbGVkLCAiRGlkbid0IGNh bGwgbW9jayBob29rIik7Ci0KLQlwcm9mX2JhY2t0cmFjZV9ob29rX3QgY3VycmVudF9ob29rOwot CXNpemVfdCBjdXJyZW50X2hvb2tfc3ogPSBzaXplb2YocHJvZl9iYWNrdHJhY2VfaG9va190KTsK LQlleHBlY3RfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwuaG9va3MucHJvZl9iYWNrdHJhY2Ui LAotCSAgICAodm9pZCAqKSZjdXJyZW50X2hvb2ssICZjdXJyZW50X2hvb2tfc3osICh2b2lkICop JmRlZmF1bHRfaG9vaywKLQkgICAgc2l6ZW9mKGRlZmF1bHRfaG9vaykpLCAwLAotCSAgICAiVW5l eHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgcmVzZXR0aW5nIGhvb2sgdG8gZGVmYXVsdCIpOwotCi0J ZXhwZWN0X3B0cl9lcShjdXJyZW50X2hvb2ssIGhvb2ssCi0JICAgICJIb29rIHJldHVybmVkIGJ5 IG1hbGxjdGwgaXMgbm90IGVxdWFsIHRvIG1vY2sgaG9vayIpOwotCi0JZGFsbG9jeChwMSwgMCk7 Ci0JZGFsbG9jeChwMCwgMCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcHJvZl9k dW1wX2hvb2spIHsKLQotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCi0JbW9ja19kdW1w X2hvb2tfY2FsbGVkID0gZmFsc2U7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmR1bXAi LCBOVUxMLCBOVUxMLCAodm9pZCAqKSZkdW1wX2ZpbGVuYW1lLAotCSAgICBzaXplb2YoZHVtcF9m aWxlbmFtZSkpLCAwLCAiRmFpbGVkIHRvIGR1bXAgaGVhcCBwcm9maWxlIik7Ci0KLQlleHBlY3Rf ZmFsc2UobW9ja19kdW1wX2hvb2tfY2FsbGVkLCAiQ2FsbGVkIGR1bXAgaG9vayBiZWZvcmUgaXQn cyBzZXQiKTsKLQotCXNpemVfdCBkZWZhdWx0X2hvb2tfc3ogPSBzaXplb2YocHJvZl9kdW1wX2hv b2tfdCk7Ci0JcHJvZl9kdW1wX2hvb2tfdCBob29rID0gJm1vY2tfZHVtcF9ob29rOwotCWV4cGVj dF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5ob29rcy5wcm9mX2R1bXAiLAotCSAgICAodm9p ZCAqKSZkZWZhdWx0X2hvb2ssICZkZWZhdWx0X2hvb2tfc3osICh2b2lkICopJmhvb2ssCi0JICAg IHNpemVvZihob29rKSksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSBzZXR0aW5nIGhv b2siKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YuZHVtcCIsIE5VTEwsIE5VTEwsICh2 b2lkICopJmR1bXBfZmlsZW5hbWUsCi0JICAgIHNpemVvZihkdW1wX2ZpbGVuYW1lKSksIDAsICJG YWlsZWQgdG8gZHVtcCBoZWFwIHByb2ZpbGUiKTsKLQotCWV4cGVjdF90cnVlKG1vY2tfZHVtcF9o b29rX2NhbGxlZCwgIkRpZG4ndCBjYWxsIG1vY2sgaG9vayIpOwotCi0JcHJvZl9kdW1wX2hvb2tf dCBjdXJyZW50X2hvb2s7Ci0Jc2l6ZV90IGN1cnJlbnRfaG9va19zeiA9IHNpemVvZihwcm9mX2R1 bXBfaG9va190KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwuaG9va3MucHJv Zl9kdW1wIiwKLQkgICAgKHZvaWQgKikmY3VycmVudF9ob29rLCAmY3VycmVudF9ob29rX3N6LCAo dm9pZCAqKSZkZWZhdWx0X2hvb2ssCi0JICAgIHNpemVvZihkZWZhdWx0X2hvb2spKSwgMCwKLQkg ICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHJlc2V0dGluZyBob29rIHRvIGRlZmF1bHQi KTsKLQotCWV4cGVjdF9wdHJfZXEoY3VycmVudF9ob29rLCBob29rLAotCSAgICAiSG9vayByZXR1 cm5lZCBieSBtYWxsY3RsIGlzIG5vdCBlcXVhbCB0byBtb2NrIGhvb2siKTsKLX0KLVRFU1RfRU5E Ci0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfcHJvZl9iYWNr dHJhY2VfaG9va19yZXBsYWNlLAotCSAgICB0ZXN0X3Byb2ZfYmFja3RyYWNlX2hvb2tfYXVnbWVu dCwKLQkgICAgdGVzdF9wcm9mX2R1bXBfaG9vayk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfaG9vay5zaCBiLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2hvb2su c2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZWJkOGYuLjAwMDAwMDAKLS0tIGEv Mzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfaG9v ay5zaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyEvYmluL3NoCi0KLWlmIFsgIngk e2VuYWJsZV9wcm9mfSIgPSAieDEiIF0gOyB0aGVuCi0gIGV4cG9ydCBNQUxMT0NfQ09ORj0icHJv Zjp0cnVlLHByb2ZfYWN0aXZlOnRydWUsbGdfcHJvZl9zYW1wbGU6MCIKLWZpCi0KCmRpZmYgLS1n aXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJv Zl9pZHVtcC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3Byb2ZfaWR1bXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU1YWM1Mi4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvcHJvZl9pZHVtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI2luY2x1 ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwv cHJvZl9zeXMuaCIKLQotI2RlZmluZSBURVNUX1BSRUZJWCAidGVzdF9wcmVmaXgiCi0KLXN0YXRp YyBib29sIGRpZF9wcm9mX2R1bXBfb3BlbjsKLQotc3RhdGljIGludAotcHJvZl9kdW1wX29wZW5f ZmlsZV9pbnRlcmNlcHQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlKSB7Ci0JaW50IGZk OwotCi0JZGlkX3Byb2ZfZHVtcF9vcGVuID0gdHJ1ZTsKLQotCWNvbnN0IGNoYXIgZmlsZW5hbWVf cHJlZml4W10gPSBURVNUX1BSRUZJWCAiLiI7Ci0JZXhwZWN0X2RfZXEoc3RybmNtcChmaWxlbmFt ZV9wcmVmaXgsIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWVfcHJlZml4KQotCSAgICAtIDEpLCAw LCAiRHVtcCBmaWxlIG5hbWUgc2hvdWxkIHN0YXJ0IHdpdGggXCIiIFRFU1RfUFJFRklYICIuXCIi KTsKLQotCWZkID0gb3BlbigiL2Rldi9udWxsIiwgT19XUk9OTFkpOwotCWFzc2VydF9kX25lKGZk LCAtMSwgIlVuZXhwZWN0ZWQgb3BlbigpIGZhaWx1cmUiKTsKLQotCXJldHVybiBmZDsKLX0KLQot VEVTVF9CRUdJTih0ZXN0X2lkdW1wKSB7Ci0JYm9vbCBhY3RpdmU7Ci0Jdm9pZCAqcDsKLQotCWNv bnN0IGNoYXIgKnRlc3RfcHJlZml4ID0gVEVTVF9QUkVGSVg7Ci0KLQl0ZXN0X3NraXBfaWYoIWNv bmZpZ19wcm9mKTsKLQotCWFjdGl2ZSA9IHRydWU7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJw cm9mLnByZWZpeCIsIE5VTEwsIE5VTEwsICh2b2lkICopJnRlc3RfcHJlZml4LAotCSAgICBzaXpl b2YodGVzdF9wcmVmaXgpKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdo aWxlIG92ZXJ3cml0aW5nIGR1bXAgcHJlZml4Iik7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJw cm9mLmFjdGl2ZSIsIE5VTEwsIE5VTEwsICh2b2lkICopJmFjdGl2ZSwKLQkgICAgc2l6ZW9mKGFj dGl2ZSkpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hpbGUgYWN0aXZh dGluZyBwcm9maWxpbmciKTsKLQotCXByb2ZfZHVtcF9vcGVuX2ZpbGUgPSBwcm9mX2R1bXBfb3Bl bl9maWxlX2ludGVyY2VwdDsKLQotCWRpZF9wcm9mX2R1bXBfb3BlbiA9IGZhbHNlOwotCXAgPSBt YWxsb2N4KDEsIDApOwotCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9j eCgpIGZhaWx1cmUiKTsKLQlkYWxsb2N4KHAsIDApOwotCWV4cGVjdF90cnVlKGRpZF9wcm9mX2R1 bXBfb3BlbiwgIkV4cGVjdGVkIGEgcHJvZmlsZSBkdW1wIik7Ci19Ci1URVNUX0VORAotCi1pbnQK LW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X2lkdW1wKTsKLX0KCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cHJvZl9pZHVtcC5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9wcm9mX2lkdW1wLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGM1 OTlhLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9wcm9mX2lkdW1wLnNoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0j IS9iaW4vc2gKLQotZXhwb3J0IE1BTExPQ19DT05GPSJ0Y2FjaGU6ZmFsc2UiCi1pZiBbICJ4JHtl bmFibGVfcHJvZn0iID0gIngxIiBdIDsgdGhlbgotICBleHBvcnQgTUFMTE9DX0NPTkY9IiR7TUFM TE9DX0NPTkZ9LHByb2Y6dHJ1ZSxwcm9mX2FjY3VtOnRydWUscHJvZl9hY3RpdmU6ZmFsc2UsbGdf cHJvZl9zYW1wbGU6MCxsZ19wcm9mX2ludGVydmFsOjAiCi1maQotCi0KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9sb2cu YyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9m X2xvZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmYyMDhlLi4wMDAwMDAwCi0t LSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9m X2xvZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2pl bWFsbG9jX3Rlc3QuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2xvZy5oIgot Ci0jZGVmaW5lIE5fUEFSQU0gMTAwCi0jZGVmaW5lIE5fVEhSRUFEUyAxMAotCi1zdGF0aWMgdm9p ZCBleHBlY3RfcmVwKCkgewotCWV4cGVjdF9iX2VxKHByb2ZfbG9nX3JlcF9jaGVjaygpLCBmYWxz ZSwgIlJlcCBjaGVjayBmYWlsZWQiKTsKLX0KLQotc3RhdGljIHZvaWQgZXhwZWN0X2xvZ19lbXB0 eSgpIHsKLQlleHBlY3RfenVfZXEocHJvZl9sb2dfYnRfY291bnQoKSwgMCwKLQkgICAgIlRoZSBs b2cgaGFzIGJhY2t0cmFjZXM7IGl0IGlzbid0IGVtcHR5Iik7Ci0JZXhwZWN0X3p1X2VxKHByb2Zf bG9nX3Rocl9jb3VudCgpLCAwLAotCSAgICAiVGhlIGxvZyBoYXMgdGhyZWFkczsgaXQgaXNuJ3Qg ZW1wdHkiKTsKLQlleHBlY3RfenVfZXEocHJvZl9sb2dfYWxsb2NfY291bnQoKSwgMCwKLQkgICAg IlRoZSBsb2cgaGFzIGFsbG9jYXRpb25zOyBpdCBpc24ndCBlbXB0eSIpOwotfQotCi12b2lkICpi dWZbTl9QQVJBTV07Ci0KLXN0YXRpYyB2b2lkIGYoKSB7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsg aSA8IE5fUEFSQU07IGkrKykgewotCQlidWZbaV0gPSBtYWxsb2MoMTAwKTsKLQl9Ci0JZm9yIChp ID0gMDsgaSA8IE5fUEFSQU07IGkrKykgewotCQlmcmVlKGJ1ZltpXSk7Ci0JfQotfQotCi1URVNU X0JFR0lOKHRlc3RfcHJvZl9sb2dfbWFueV9sb2dzKSB7Ci0JaW50IGk7Ci0KLQl0ZXN0X3NraXBf aWYoIWNvbmZpZ19wcm9mKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOX1BBUkFNOyBpKyspIHsKLQkJ ZXhwZWN0X2JfZXEocHJvZl9sb2dfaXNfbG9nZ2luZygpLCBmYWxzZSwKLQkJICAgICJMb2dnaW5n IHNob3VsZG4ndCBoYXZlIHN0YXJ0ZWQgeWV0Iik7Ci0JCWV4cGVjdF9kX2VxKG1hbGxjdGwoInBy b2YubG9nX3N0YXJ0IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsIGZhaWx1cmUgd2hlbiBzdGFydGluZyBsb2dnaW5nIik7Ci0JCWV4cGVjdF9iX2Vx KHByb2ZfbG9nX2lzX2xvZ2dpbmcoKSwgdHJ1ZSwKLQkJICAgICJMb2dnaW5nIHNob3VsZCBiZSBz dGFydGVkIGJ5IG5vdyIpOwotCQlleHBlY3RfbG9nX2VtcHR5KCk7Ci0JCWV4cGVjdF9yZXAoKTsK LQkJZigpOwotCQlleHBlY3RfenVfZXEocHJvZl9sb2dfdGhyX2NvdW50KCksIDEsICJXcm9uZyB0 aHJlYWQgY291bnQiKTsKLQkJZXhwZWN0X3JlcCgpOwotCQlleHBlY3RfYl9lcShwcm9mX2xvZ19p c19sb2dnaW5nKCksIHRydWUsCi0JCSAgICAiTG9nZ2luZyBzaG91bGQgc3RpbGwgYmUgb24iKTsK LQkJZXhwZWN0X2RfZXEobWFsbGN0bCgicHJvZi5sb2dfc3RvcCIsIE5VTEwsIE5VTEwsIE5VTEws IDApLCAwLAotCQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoZW4gc3RvcHBpbmcg bG9nZ2luZyIpOwotCQlleHBlY3RfYl9lcShwcm9mX2xvZ19pc19sb2dnaW5nKCksIGZhbHNlLAot CQkgICAgIkxvZ2dpbmcgc2hvdWxkIGhhdmUgdHVybmVkIG9mZiIpOwotCX0KLX0KLVRFU1RfRU5E Ci0KLXRoZF90IHRocl9idWZbTl9USFJFQURTXTsKLQotc3RhdGljIHZvaWQgKmZfdGhyZWFkKHZv aWQgKnVudXNlZCkgewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBOX1BBUkFNOyBpKyspIHsK LQkJdm9pZCAqcCA9IG1hbGxvYygxMDApOwotCQltZW1zZXQocCwgMTAwLCAxKTsKLQkJZnJlZShw KTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3Byb2ZfbG9nX21h bnlfdGhyZWFkcykgewotCi0JdGVzdF9za2lwX2lmKCFjb25maWdfcHJvZik7Ci0KLQlpbnQgaTsK LQlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmxvZ19zdGFydCIsIE5VTEwsIE5VTEwsIE5VTEws IDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hlbiBzdGFydGluZyBs b2dnaW5nIik7Ci0JZm9yIChpID0gMDsgaSA8IE5fVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9jcmVh dGUoJnRocl9idWZbaV0sICZmX3RocmVhZCwgTlVMTCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8 IE5fVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9qb2luKHRocl9idWZbaV0sIE5VTEwpOwotCX0KLQll eHBlY3RfenVfZXEocHJvZl9sb2dfdGhyX2NvdW50KCksIE5fVEhSRUFEUywKLQkgICAgIldyb25n IG51bWJlciBvZiB0aHJlYWQgZW50cmllcyIpOwotCWV4cGVjdF9yZXAoKTsKLQlleHBlY3RfZF9l cShtYWxsY3RsKCJwcm9mLmxvZ19zdG9wIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAg ICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSB3aGVuIHN0b3BwaW5nIGxvZ2dpbmciKTsKLX0K LVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkIGYzKCkgewotCXZvaWQgKnAgPSBtYWxsb2MoMTAwKTsK LQlmcmVlKHApOwotfQotCi1zdGF0aWMgdm9pZCBmMSgpIHsKLQl2b2lkICpwID0gbWFsbG9jKDEw MCk7Ci0JZjMoKTsKLQlmcmVlKHApOwotfQotCi1zdGF0aWMgdm9pZCBmMigpIHsKLQl2b2lkICpw ID0gbWFsbG9jKDEwMCk7Ci0JZnJlZShwKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3Byb2ZfbG9n X21hbnlfdHJhY2VzKSB7Ci0KLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKLQotCWV4cGVj dF9kX2VxKG1hbGxjdGwoInByb2YubG9nX3N0YXJ0IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAs Ci0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSB3aGVuIHN0YXJ0aW5nIGxvZ2dpbmci KTsKLQlpbnQgaTsKLQlleHBlY3RfcmVwKCk7Ci0JZXhwZWN0X2xvZ19lbXB0eSgpOwotCWZvciAo aSA9IDA7IGkgPCBOX1BBUkFNOyBpKyspIHsKLQkJZXhwZWN0X3JlcCgpOwotCQlmMSgpOwotCQll eHBlY3RfcmVwKCk7Ci0JCWYyKCk7Ci0JCWV4cGVjdF9yZXAoKTsKLQkJZjMoKTsKLQkJZXhwZWN0 X3JlcCgpOwotCX0KLQkvKgotCSAqIFRoZXJlIHNob3VsZCBiZSA4IHRvdGFsIGJhY2t0cmFjZXM6 IHR3byBmb3IgbWFsbG9jL2ZyZWUgaW4gZjEoKSwgdHdvCi0JICogZm9yIG1hbGxvYy9mcmVlIGlu IGYyKCksIHR3byBmb3IgbWFsbG9jL2ZyZWUgaW4gZjMoKSwgYW5kIHRoZW4gdHdvCi0JICogZm9y IG1hbGxvYy9mcmVlIGluIGYxKCkncyBjYWxsIHRvIGYzKCkuICBIb3dldmVyIGNvbXBpbGVyCi0J ICogb3B0aW1pemF0aW9ucyBzdWNoIGFzIGxvb3AgdW5yb2xsaW5nIG1pZ2h0IGdlbmVyYXRlIG1v cmUgY2FsbCBzaXRlcy4KLQkgKiBTbyA+PSA4IHRyYWNlcyBhcmUgZXhwZWN0ZWQuCi0JICovCi0J ZXhwZWN0X3p1X2dlKHByb2ZfbG9nX2J0X2NvdW50KCksIDgsCi0JICAgICJFeHBlY3QgYXQgbGVh c3QgOCBiYWNrdHJhY2VzIGdpdmVuIHNhbXBsZSB3b3JrbG9hZCIpOwotCWV4cGVjdF9kX2VxKG1h bGxjdGwoInByb2YubG9nX3N0b3AiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKLQkgICAgIlVu ZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoZW4gc3RvcHBpbmcgbG9nZ2luZyIpOwotfQotVEVT VF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlpZiAoY29uZmlnX3Byb2YpIHsKLQkJcHJvZl9s b2dfZHVtbXlfc2V0KHRydWUpOwotCX0KLQlyZXR1cm4gdGVzdF9ub19yZWVudHJhbmN5KAotCSAg ICB0ZXN0X3Byb2ZfbG9nX21hbnlfbG9ncywKLQkgICAgdGVzdF9wcm9mX2xvZ19tYW55X3RyYWNl cywKLQkgICAgdGVzdF9wcm9mX2xvZ19tYW55X3RocmVhZHMpOwotfQoKZGlmZiAtLWdpdCBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX2xvZy5z aCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9m X2xvZy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1ZjliZi4uMDAwMDAwMAot LS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJv Zl9sb2cuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1pZiBb ICJ4JHtlbmFibGVfcHJvZn0iID0gIngxIiBdIDsgdGhlbgotICBleHBvcnQgTUFMTE9DX0NPTkY9 InByb2Y6dHJ1ZSxwcm9mX2FjdGl2ZTp0cnVlLGxnX3Byb2Zfc2FtcGxlOjAiCi1maQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9w cm9mX21kdW1wLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvcHJvZl9tZHVtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWIzYTUx Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9wcm9mX21kdW1wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotI2lu Y2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJu YWwvcHJvZl9zeXMuaCIKLQotc3RhdGljIGNvbnN0IGNoYXIgKnRlc3RfZmlsZW5hbWUgPSAidGVz dF9maWxlbmFtZSI7Ci1zdGF0aWMgYm9vbCBkaWRfcHJvZl9kdW1wX29wZW47Ci0KLXN0YXRpYyBp bnQKLXByb2ZfZHVtcF9vcGVuX2ZpbGVfaW50ZXJjZXB0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBp bnQgbW9kZSkgewotCWludCBmZDsKLQotCWRpZF9wcm9mX2R1bXBfb3BlbiA9IHRydWU7Ci0KLQkv KgotCSAqIFN0cm9uZ2VyIHRoYW4gYSBzdHJjbXAoKSAtIHZlcmlmeWluZyB0aGF0IHdlIGludGVy bmFsbHkgZGlyZWN0bHkgdXNlCi0JICogdGhlIGNhbGxlciBzdXBwbGllZCBjaGFyIHBvaW50ZXIu Ci0JICovCi0JZXhwZWN0X3B0cl9lcShmaWxlbmFtZSwgdGVzdF9maWxlbmFtZSwKLQkgICAgIkR1 bXAgZmlsZSBuYW1lIHNob3VsZCBiZSBcIiVzXCIiLCB0ZXN0X2ZpbGVuYW1lKTsKLQotCWZkID0g b3BlbigiL2Rldi9udWxsIiwgT19XUk9OTFkpOwotCWFzc2VydF9kX25lKGZkLCAtMSwgIlVuZXhw ZWN0ZWQgb3BlbigpIGZhaWx1cmUiKTsKLQotCXJldHVybiBmZDsKLX0KLQotVEVTVF9CRUdJTih0 ZXN0X21kdW1wX25vcm1hbCkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCi0JcHJv Zl9kdW1wX29wZW5fZmlsZV90ICpvcGVuX2ZpbGVfb3JpZyA9IHByb2ZfZHVtcF9vcGVuX2ZpbGU7 Ci0KLQl2b2lkICpwID0gbWFsbG9jeCgxLCAwKTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJV bmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7Ci0KLQlwcm9mX2R1bXBfb3Blbl9maWxlID0g cHJvZl9kdW1wX29wZW5fZmlsZV9pbnRlcmNlcHQ7Ci0JZGlkX3Byb2ZfZHVtcF9vcGVuID0gZmFs c2U7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgicHJvZi5kdW1wIiwgTlVMTCwgTlVMTCwgKHZvaWQg KikmdGVzdF9maWxlbmFtZSwKLQkgICAgc2l6ZW9mKHRlc3RfZmlsZW5hbWUpKSwgMCwKLQkgICAg IlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoaWxlIGR1bXBpbmciKTsKLQlleHBlY3RfdHJ1 ZShkaWRfcHJvZl9kdW1wX29wZW4sICJFeHBlY3RlZCBhIHByb2ZpbGUgZHVtcCIpOwotCi0JZGFs bG9jeChwLCAwKTsKLQotCXByb2ZfZHVtcF9vcGVuX2ZpbGUgPSBvcGVuX2ZpbGVfb3JpZzsKLX0K LVRFU1RfRU5ECi0KLXN0YXRpYyBpbnQKLXByb2ZfZHVtcF9vcGVuX2ZpbGVfZXJyb3IoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIGludCBtb2RlKSB7Ci0JcmV0dXJuIC0xOwotfQotCi0vKgotICogSW4g dGhlIGNvbnRleHQgb2YgdGVzdF9tZHVtcF9vdXRwdXRfZXJyb3IsIHByb2ZfZHVtcF93cml0ZV9m aWxlX2NvdW50IGlzIHRoZQotICogdG90YWwgbnVtYmVyIG9mIHRpbWVzIHByb2ZfZHVtcF93cml0 ZV9maWxlX2Vycm9yKCkgaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkLgotICogSW4gdGhlIGNvbnRl eHQgb2YgdGVzdF9tZHVtcF9tYXBzX2Vycm9yLCBwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3VudCBp cyB0aGUKLSAqIHRvdGFsIG51bWJlciBvZiB0aW1lcyBwcm9mX2R1bXBfd3JpdGVfZmlsZV9lcnJv cigpIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZAotICogc3RhcnRpbmcgZnJvbSB0aGUgb25lIHRo YXQgY29udGFpbnMgYW4gJ00nIChiZWdpbm5pbmcgdGhlICJNQVBQRURfTElCUkFSSUVTIgotICog aGVhZGVyKS4KLSAqLwotc3RhdGljIGludCBwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3VudDsKLQot c3RhdGljIHNzaXplX3QKLXByb2ZfZHVtcF93cml0ZV9maWxlX2Vycm9yKGludCBmZCwgY29uc3Qg dm9pZCAqcywgc2l6ZV90IGxlbikgewotCS0tcHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQ7Ci0K LQlleHBlY3RfZF9nZShwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3VudCwgMCwKLQkgICAgIldyaXRl IGlzIGNhbGxlZCBhZnRlciBlcnJvciBvY2N1cnMiKTsKLQotCWlmIChwcm9mX2R1bXBfd3JpdGVf ZmlsZV9jb3VudCA9PSAwKSB7Ci0JCXJldHVybiAtMTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBB bnkgbm9uLW5lZ2F0aXZlIG51bWJlciBpbmRpY2F0ZXMgc3VjY2VzcywgYW5kIGZvcgotCQkgKiBz aW1wbGljaXR5IHdlIGp1c3QgdXNlIDAuICBXaGVuIHByb2ZfZHVtcF93cml0ZV9maWxlX2NvdW50 Ci0JCSAqIGlzIHBvc2l0aXZlLCBpdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3QgcmVhY2hlZCB0aGUg d3JpdGUgdGhhdAotCQkgKiB3ZSB3YW50IHRvIGZhaWw7IHdoZW4gcHJvZl9kdW1wX3dyaXRlX2Zp bGVfY291bnQgaXMKLQkJICogbmVnYXRpdmUsIGl0IG1lYW5zIHRoYXQgd2UndmUgYWxyZWFkeSB2 aW9sYXRlZCB0aGUKLQkJICogZXhwZWN0X2RfZ2UocHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQs IDApIHN0YXRlbWVudCBhYm92ZSwKLQkJICogYnV0IGluc3RlYWQgb2YgYWJvcnRpbmcsIHdlIGNv bnRpbnVlIHRoZSByZXN0IG9mIHRoZSB0ZXN0LAotCQkgKiBhbmQgd2UgaW5kaWNhdGUgdGhhdCBh bGwgdGhlIHdyaXRlcyBhZnRlciB0aGUgZmFpbGVkIHdyaXRlCi0JCSAqIGFyZSBzdWNjZXNzZnVs LgotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZXhwZWN0X3dyaXRl X2ZhaWx1cmUoaW50IGNvdW50KSB7Ci0JcHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQgPSBjb3Vu dDsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJwcm9mLmR1bXAiLCBOVUxMLCBOVUxMLCAodm9pZCAq KSZ0ZXN0X2ZpbGVuYW1lLAotCSAgICBzaXplb2YodGVzdF9maWxlbmFtZSkpLCBFRkFVTFQsICJE dW1wIHNob3VsZCBlcnIiKTsKLQlleHBlY3RfZF9lcShwcm9mX2R1bXBfd3JpdGVfZmlsZV9jb3Vu dCwgMCwKLQkgICAgIkR1bXBpbmcgc3RvcHBlZCBhZnRlciBhIHdyb25nIG51bWJlciBvZiB3cml0 ZXMiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X21kdW1wX291dHB1dF9lcnJvcikgewotCXRlc3Rf c2tpcF9pZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc2tpcF9pZighY29uZmlnX2RlYnVnKTsKLQot CXByb2ZfZHVtcF9vcGVuX2ZpbGVfdCAqb3Blbl9maWxlX29yaWcgPSBwcm9mX2R1bXBfb3Blbl9m aWxlOwotCXByb2ZfZHVtcF93cml0ZV9maWxlX3QgKndyaXRlX2ZpbGVfb3JpZyA9IHByb2ZfZHVt cF93cml0ZV9maWxlOwotCi0JcHJvZl9kdW1wX3dyaXRlX2ZpbGUgPSBwcm9mX2R1bXBfd3JpdGVf ZmlsZV9lcnJvcjsKLQotCXZvaWQgKnAgPSBtYWxsb2N4KDEsIDApOwotCWFzc2VydF9wdHJfbm90 X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQotCS8qCi0JICogV2hl biBvcGVuaW5nIHRoZSBkdW1wIGZpbGUgZmFpbHMsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgd3Jp dGUsIGFuZAotCSAqIG1hbGxjdGwoKSBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0JICovCi0JcHJv Zl9kdW1wX29wZW5fZmlsZSA9IHByb2ZfZHVtcF9vcGVuX2ZpbGVfZXJyb3I7Ci0JZXhwZWN0X3dy aXRlX2ZhaWx1cmUoMCk7Ci0KLQkvKgotCSAqIFdoZW4gdGhlIG4tdGggd3JpdGUgZmFpbHMsIHRo ZXJlIHNob3VsZG4ndCBiZSBhbnkgbW9yZSB3cml0ZSwgYW5kCi0JICogbWFsbGN0bCgpIHNob3Vs ZCByZXR1cm4gZmFpbHVyZS4KLQkgKi8KLQlwcm9mX2R1bXBfb3Blbl9maWxlID0gcHJvZl9kdW1w X29wZW5fZmlsZV9pbnRlcmNlcHQ7Ci0JZXhwZWN0X3dyaXRlX2ZhaWx1cmUoMSk7IC8qIEZpcnN0 IHdyaXRlIGZhaWxzLiAqLwotCWV4cGVjdF93cml0ZV9mYWlsdXJlKDIpOyAvKiBTZWNvbmQgd3Jp dGUgZmFpbHMuICovCi0KLQlkYWxsb2N4KHAsIDApOwotCi0JcHJvZl9kdW1wX29wZW5fZmlsZSA9 IG9wZW5fZmlsZV9vcmlnOwotCXByb2ZfZHVtcF93cml0ZV9maWxlID0gd3JpdGVfZmlsZV9vcmln OwotfQotVEVTVF9FTkQKLQotc3RhdGljIGludAotcHJvZl9kdW1wX29wZW5fbWFwc19lcnJvcigp IHsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBib29sIHN0YXJ0ZWRfcGlwaW5nX21hcHNfZmls ZTsKLQotc3RhdGljIHNzaXplX3QKLXByb2ZfZHVtcF93cml0ZV9tYXBzX2ZpbGVfZXJyb3IoaW50 IGZkLCBjb25zdCB2b2lkICpzLCBzaXplX3QgbGVuKSB7Ci0JLyogVGhlIG1haW4gZHVtcCBkb2Vz bid0IGNvbnRhaW4gYW55IGNhcGl0YWwgJ00nLiAqLwotCWlmICghc3RhcnRlZF9waXBpbmdfbWFw c19maWxlICYmIHN0cmNocihzLCAnTScpICE9IE5VTEwpIHsKLQkJc3RhcnRlZF9waXBpbmdfbWFw c19maWxlID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoc3RhcnRlZF9waXBpbmdfbWFwc19maWxlKSB7Ci0J CXJldHVybiBwcm9mX2R1bXBfd3JpdGVfZmlsZV9lcnJvcihmZCwgcywgbGVuKTsKLQl9IGVsc2Ug ewotCQkvKiBSZXR1cm4gc3VjY2VzcyB3aGVuIHdlIGhhdmVuJ3Qgc3RhcnRlZCBwaXBpbmcgbWFw cy4gKi8KLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZXhwZWN0X21hcHNfd3Jp dGVfZmFpbHVyZShpbnQgY291bnQpIHsKLQlpbnQgbWZkID0gcHJvZl9kdW1wX29wZW5fbWFwcygp OwotCWlmIChtZmQgPT0gLTEpIHsKLQkJLyogTm8gbmVlZCB0byBjb250aW51ZSBpZiB3ZSBqdXN0 IGNhbid0IGZpbmQgdGhlIG1hcHMgZmlsZS4gKi8KLQkJcmV0dXJuOwotCX0KLQljbG9zZShtZmQp OwotCXN0YXJ0ZWRfcGlwaW5nX21hcHNfZmlsZSA9IGZhbHNlOwotCWV4cGVjdF93cml0ZV9mYWls dXJlKGNvdW50KTsKLQlleHBlY3RfdHJ1ZShzdGFydGVkX3BpcGluZ19tYXBzX2ZpbGUsICJTaG91 bGQgc3RhcnQgcGlwaW5nIG1hcHMiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X21kdW1wX21hcHNf ZXJyb3IpIHsKLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKLQl0ZXN0X3NraXBfaWYoIWNv bmZpZ19kZWJ1Zyk7Ci0KLQlwcm9mX2R1bXBfb3Blbl9maWxlX3QgKm9wZW5fZmlsZV9vcmlnID0g cHJvZl9kdW1wX29wZW5fZmlsZTsKLQlwcm9mX2R1bXBfd3JpdGVfZmlsZV90ICp3cml0ZV9maWxl X29yaWcgPSBwcm9mX2R1bXBfd3JpdGVfZmlsZTsKLQlwcm9mX2R1bXBfb3Blbl9tYXBzX3QgKm9w ZW5fbWFwc19vcmlnID0gcHJvZl9kdW1wX29wZW5fbWFwczsKLQotCXByb2ZfZHVtcF9vcGVuX2Zp bGUgPSBwcm9mX2R1bXBfb3Blbl9maWxlX2ludGVyY2VwdDsKLQlwcm9mX2R1bXBfd3JpdGVfZmls ZSA9IHByb2ZfZHVtcF93cml0ZV9tYXBzX2ZpbGVfZXJyb3I7Ci0KLQl2b2lkICpwID0gbWFsbG9j eCgxLCAwKTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBm YWlsdXJlIik7Ci0KLQkvKgotCSAqIFdoZW4gb3BlbmluZyB0aGUgbWFwcyBmaWxlIGZhaWxzLCB0 aGVyZSBzaG91bGRuJ3QgYmUgYW55IG1hcHMgd3JpdGUsCi0JICogYW5kIG1hbGxjdGwoKSBzaG91 bGQgcmV0dXJuIHN1Y2Nlc3MuCi0JICovCi0JcHJvZl9kdW1wX29wZW5fbWFwcyA9IHByb2ZfZHVt cF9vcGVuX21hcHNfZXJyb3I7Ci0Jc3RhcnRlZF9waXBpbmdfbWFwc19maWxlID0gZmFsc2U7Ci0J cHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQgPSAwOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInBy b2YuZHVtcCIsIE5VTEwsIE5VTEwsICh2b2lkICopJnRlc3RfZmlsZW5hbWUsCi0JICAgIHNpemVv Zih0ZXN0X2ZpbGVuYW1lKSksIDAsCi0JICAgICJtYWxsY3RsIHNob3VsZCBub3QgZmFpbCBpbiBj YXNlIG9mIG1hcHMgZmlsZSBvcGVuaW5nIGZhaWx1cmUiKTsKLQlleHBlY3RfZmFsc2Uoc3RhcnRl ZF9waXBpbmdfbWFwc19maWxlLCAiU2hvdWxkbid0IHN0YXJ0IHBpcGluZyBtYXBzIik7Ci0JZXhw ZWN0X2RfZXEocHJvZl9kdW1wX3dyaXRlX2ZpbGVfY291bnQsIDAsCi0JICAgICJEdW1waW5nIHN0 b3BwZWQgYWZ0ZXIgYSB3cm9uZyBudW1iZXIgb2Ygd3JpdGVzIik7Ci0KLQkvKgotCSAqIFdoZW4g dGhlIG4tdGggbWFwcyB3cml0ZSBmYWlscyAoZ2l2ZW4gdGhhdCB3ZSBhcmUgYWJsZSB0byBmaW5k IHRoZQotCSAqIG1hcHMgZmlsZSksIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgbW9yZSBtYXBzIHdy aXRlLCBhbmQgbWFsbGN0bCgpCi0JICogc2hvdWxkIHJldHVybiBmYWlsdXJlLgotCSAqLwotCXBy b2ZfZHVtcF9vcGVuX21hcHMgPSBvcGVuX21hcHNfb3JpZzsKLQlleHBlY3RfbWFwc193cml0ZV9m YWlsdXJlKDEpOyAvKiBGaXJzdCB3cml0ZSBmYWlscy4gKi8KLQlleHBlY3RfbWFwc193cml0ZV9m YWlsdXJlKDIpOyAvKiBTZWNvbmQgd3JpdGUgZmFpbHMuICovCi0KLQlkYWxsb2N4KHAsIDApOwot Ci0JcHJvZl9kdW1wX29wZW5fZmlsZSA9IG9wZW5fZmlsZV9vcmlnOwotCXByb2ZfZHVtcF93cml0 ZV9maWxlID0gd3JpdGVfZmlsZV9vcmlnOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQp IHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9tZHVtcF9ub3JtYWwsCi0JICAgIHRlc3RfbWR1 bXBfb3V0cHV0X2Vycm9yLAotCSAgICB0ZXN0X21kdW1wX21hcHNfZXJyb3IpOwotfQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9w cm9mX21kdW1wLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3Byb2ZfbWR1bXAuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNGNi OGMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3Byb2ZfbWR1bXAuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMh L2Jpbi9zaAotCi1pZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngxIiBdIDsgdGhlbgotICBleHBv cnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxsZ19wcm9mX3NhbXBsZTowIgotZmkKLQoKZGlmZiAt LWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9w cm9mX3JlY2VudC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3Byb2ZfcmVjZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYjM3 MjMuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3Byb2ZfcmVjZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzggKzAsMCBAQAot I2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50 ZXJuYWwvcHJvZl9yZWNlbnQuaCIKLQotLyogQXMgc3BlY2lmaWVkIGluIHRoZSBzaGVsbCBzY3Jp cHQgKi8KLSNkZWZpbmUgT1BUX0FMTE9DX01BWCAzCi0KLS8qIEludmFyaWFudCBiZWZvcmUgYW5k IGFmdGVyIGV2ZXJ5IHRlc3QgKHdoZW4gY29uZmlnX3Byb2YgaXMgb24pICovCi1zdGF0aWMgdm9p ZAotY29uZmlybV9wcm9mX3NldHVwKCkgewotCS8qIE9wdGlvbnMgKi8KLQlhc3NlcnRfdHJ1ZShv cHRfcHJvZiwgIm9wdF9wcm9mIG5vdCBvbiIpOwotCWFzc2VydF90cnVlKG9wdF9wcm9mX2FjdGl2 ZSwgIm9wdF9wcm9mX2FjdGl2ZSBub3Qgb24iKTsKLQlhc3NlcnRfemRfZXEob3B0X3Byb2ZfcmVj ZW50X2FsbG9jX21heCwgT1BUX0FMTE9DX01BWCwKLQkgICAgIm9wdF9wcm9mX3JlY2VudF9hbGxv Y19tYXggbm90IHNldCBjb3JyZWN0bHkiKTsKLQotCS8qIER5bmFtaWNzICovCi0JYXNzZXJ0X3Ry dWUocHJvZl9hY3RpdmVfc3RhdGUsICJwcm9mX2FjdGl2ZSBub3Qgb24iKTsKLQlhc3NlcnRfemRf ZXEocHJvZl9yZWNlbnRfYWxsb2NfbWF4X2N0bF9yZWFkKCksIE9QVF9BTExPQ19NQVgsCi0JICAg ICJwcm9mX3JlY2VudF9hbGxvY19tYXggbm90IHNldCBjb3JyZWN0bHkiKTsKLX0KLQotVEVTVF9C RUdJTih0ZXN0X2NvbmZpcm1fc2V0dXApIHsKLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsK LQljb25maXJtX3Byb2Zfc2V0dXAoKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9w cm9mX3JlY2VudF9vZmYpIHsKLQl0ZXN0X3NraXBfaWYoY29uZmlnX3Byb2YpOwotCi0JY29uc3Qg c3NpemVfdCBwYXN0X3JlZiA9IDAsIGZ1dHVyZV9yZWYgPSAwOwotCWNvbnN0IHNpemVfdCBsZW5f cmVmID0gc2l6ZW9mKHNzaXplX3QpOwotCi0Jc3NpemVfdCBwYXN0ID0gcGFzdF9yZWYsIGZ1dHVy ZSA9IGZ1dHVyZV9yZWY7Ci0Jc2l6ZV90IGxlbiA9IGxlbl9yZWY7Ci0KLSNkZWZpbmUgQVNTRVJU X1NIT1VMRF9GQUlMKG9wdCwgYSwgYiwgYywgZCkgZG8gewkJCVwKLQlhc3NlcnRfZF9lcShtYWxs Y3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuIiBvcHQsIGEsIGIsIGMsCVwKLQkgICAgZCks IEVOT0VOVCwgIlNob3VsZCByZXR1cm4gRU5PRU5UIHdoZW4gY29uZmlnX3Byb2YgaXMgb2ZmIik7 XAotCWFzc2VydF96ZF9lcShwYXN0LCBwYXN0X3JlZiwgIm91dHB1dCB3YXMgdG91Y2hlZCIpOwkJ XAotCWFzc2VydF96dV9lcShsZW4sIGxlbl9yZWYsICJvdXRwdXQgbGVuZ3RoIHdhcyB0b3VjaGVk Iik7CVwKLQlhc3NlcnRfemRfZXEoZnV0dXJlLCBmdXR1cmVfcmVmLCAiaW5wdXQgd2FzIHRvdWNo ZWQiKTsJCVwKLX0gd2hpbGUgKDApCi0KLQlBU1NFUlRfU0hPVUxEX0ZBSUwoImFsbG9jX21heCIs IE5VTEwsIE5VTEwsIE5VTEwsIDApOwotCUFTU0VSVF9TSE9VTERfRkFJTCgiYWxsb2NfbWF4Iiwg JnBhc3QsICZsZW4sIE5VTEwsIDApOwotCUFTU0VSVF9TSE9VTERfRkFJTCgiYWxsb2NfbWF4Iiwg TlVMTCwgTlVMTCwgJmZ1dHVyZSwgbGVuKTsKLQlBU1NFUlRfU0hPVUxEX0ZBSUwoImFsbG9jX21h eCIsICZwYXN0LCAmbGVuLCAmZnV0dXJlLCBsZW4pOwotCi0jdW5kZWYgQVNTRVJUX1NIT1VMRF9G QUlMCi19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcHJvZl9yZWNlbnRfb24pIHsKLQl0 ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKLQotCXNzaXplX3QgcGFzdCwgZnV0dXJlOwotCXNp emVfdCBsZW4gPSBzaXplb2Yoc3NpemVfdCk7Ci0KLQljb25maXJtX3Byb2Zfc2V0dXAoKTsKLQot CWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgi LAotCSAgICBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwgIm5vLW9wIG1hbGxjdGwgc2hvdWxkIGJl IGFsbG93ZWQiKTsKLQljb25maXJtX3Byb2Zfc2V0dXAoKTsKLQotCWFzc2VydF9kX2VxKG1hbGxj dGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAotCSAgICAmcGFzdCwgJmxl biwgTlVMTCwgMCksIDAsICJSZWFkIGVycm9yIik7Ci0JZXhwZWN0X3pkX2VxKHBhc3QsIE9QVF9B TExPQ19NQVgsICJXcm9uZyByZWFkIHJlc3VsdCIpOwotCWZ1dHVyZSA9IE9QVF9BTExPQ19NQVgg KyAxOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxv Y19tYXgiLAotCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBsZW4pLCAwLCAiV3JpdGUgZXJyb3Ii KTsKLQlmdXR1cmUgPSAtMTsKLQlhc3NlcnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwucHJv Zl9yZWNlbnQuYWxsb2NfbWF4IiwKLQkgICAgJnBhc3QsICZsZW4sICZmdXR1cmUsIGxlbiksIDAs ICJSZWFkL3dyaXRlIGVycm9yIik7Ci0JZXhwZWN0X3pkX2VxKHBhc3QsIE9QVF9BTExPQ19NQVgg KyAxLCAiV3JvbmcgcmVhZCByZXN1bHQiKTsKLQlmdXR1cmUgPSAtMjsKLQlhc3NlcnRfZF9lcSht YWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKLQkgICAgJnBhc3Qs ICZsZW4sICZmdXR1cmUsIGxlbiksIEVJTlZBTCwKLQkgICAgIkludmFsaWQgd3JpdGUgc2hvdWxk IHJldHVybiBFSU5WQUwiKTsKLQlleHBlY3RfemRfZXEocGFzdCwgT1BUX0FMTE9DX01BWCArIDEs Ci0JICAgICJPdXRwdXQgc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGdpdmVuIGludmFsaWQgd3JpdGUi KTsKLQlmdXR1cmUgPSBPUFRfQUxMT0NfTUFYOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVy aW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAotCSAgICAmcGFzdCwgJmxlbiwgJmZ1dHVy ZSwgbGVuKSwgMCwgIlJlYWQvd3JpdGUgZXJyb3IiKTsKLQlleHBlY3RfemRfZXEocGFzdCwgLTEs ICJXcm9uZyByZWFkIHJlc3VsdCIpOwotCWZ1dHVyZSA9IE9QVF9BTExPQ19NQVggKyAyOwotCWFz c2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAot CSAgICAmcGFzdCwgJmxlbiwgJmZ1dHVyZSwgbGVuICogMiksIEVJTlZBTCwKLQkgICAgIkludmFs aWQgd3JpdGUgc2hvdWxkIHJldHVybiBFSU5WQUwiKTsKLQlleHBlY3RfemRfZXEocGFzdCwgLTEs Ci0JICAgICJPdXRwdXQgc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGdpdmVuIGludmFsaWQgd3JpdGUi KTsKLQotCWNvbmZpcm1fcHJvZl9zZXR1cCgpOwotfQotVEVTVF9FTkQKLQotLyogUmVwcm9kdWNp YmxlIHNlcXVlbmNlIG9mIHJlcXVlc3Qgc2l6ZXMgKi8KLSNkZWZpbmUgTlRIX1JFUV9TSVpFKG4p ICgobikgKiA5NyArIDEwMSkKLQotc3RhdGljIHZvaWQKLWNvbmZpcm1fbWFsbG9jKHZvaWQgKnAp IHsKLQlhc3NlcnRfcHRyX25vdF9udWxsKHAsICJtYWxsb2MgZmFpbGVkIHVuZXhwZWN0ZWRseSIp OwotCWVkYXRhX3QgKmUgPSBlbWFwX2VkYXRhX2xvb2t1cChUU0ROX05VTEwsICZhcmVuYV9lbWFw X2dsb2JhbCwgcCk7Ci0JYXNzZXJ0X3B0cl9ub3RfbnVsbChlLCAiTlVMTCBlZGF0YSBmb3IgbGl2 aW5nIHBvaW50ZXIiKTsKLQlwcm9mX3JlY2VudF90ICpuID0gZWRhdGFfcHJvZl9yZWNlbnRfYWxs b2NfZ2V0X25vX2xvY2tfdGVzdChlKTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKG4sICJSZWNvcmQg aW4gZWRhdGEgc2hvdWxkIG5vdCBiZSBOVUxMIik7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChuLT5h bGxvY190Y3R4LAotCSAgICAiYWxsb2NfdGN0eCBpbiByZWNvcmQgc2hvdWxkIG5vdCBiZSBOVUxM Iik7Ci0JZXhwZWN0X3B0cl9lcShlLCBwcm9mX3JlY2VudF9hbGxvY19lZGF0YV9nZXRfbm9fbG9j a190ZXN0KG4pLAotCSAgICAiZWRhdGEgcG9pbnRlciBpbiByZWNvcmQgaXMgbm90IGNvcnJlY3Qi KTsKLQlleHBlY3RfcHRyX251bGwobi0+ZGFsbG9jX3RjdHgsICJkYWxsb2NfdGN0eCBpbiByZWNv cmQgc2hvdWxkIGJlIE5VTEwiKTsKLX0KLQotc3RhdGljIHZvaWQKLWNvbmZpcm1fcmVjb3JkX3Np emUocHJvZl9yZWNlbnRfdCAqbiwgdW5zaWduZWQga3RoKSB7Ci0JZXhwZWN0X3p1X2VxKG4tPnNp emUsIE5USF9SRVFfU0laRShrdGgpLAotCSAgICAiUmVjb3JkZWQgYWxsb2NhdGlvbiBzaXplIGlz IHdyb25nIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb25maXJtX3JlY29yZF9saXZpbmcocHJvZl9y ZWNlbnRfdCAqbikgewotCWV4cGVjdF9wdHJfbm90X251bGwobi0+YWxsb2NfdGN0eCwKLQkgICAg ImFsbG9jX3RjdHggaW4gcmVjb3JkIHNob3VsZCBub3QgYmUgTlVMTCIpOwotCWVkYXRhX3QgKmVk YXRhID0gcHJvZl9yZWNlbnRfYWxsb2NfZWRhdGFfZ2V0X25vX2xvY2tfdGVzdChuKTsKLQlhc3Nl cnRfcHRyX25vdF9udWxsKGVkYXRhLAotCSAgICAiUmVjb3JkZWQgZWRhdGEgc2hvdWxkIG5vdCBi ZSBOVUxMIGZvciBsaXZpbmcgcG9pbnRlciIpOwotCWV4cGVjdF9wdHJfZXEobiwgZWRhdGFfcHJv Zl9yZWNlbnRfYWxsb2NfZ2V0X25vX2xvY2tfdGVzdChlZGF0YSksCi0JICAgICJSZWNvcmQgaW4g ZWRhdGEgaXMgbm90IGNvcnJlY3QiKTsKLQlleHBlY3RfcHRyX251bGwobi0+ZGFsbG9jX3RjdHgs ICJkYWxsb2NfdGN0eCBpbiByZWNvcmQgc2hvdWxkIGJlIE5VTEwiKTsKLX0KLQotc3RhdGljIHZv aWQKLWNvbmZpcm1fcmVjb3JkX3JlbGVhc2VkKHByb2ZfcmVjZW50X3QgKm4pIHsKLQlleHBlY3Rf cHRyX25vdF9udWxsKG4tPmFsbG9jX3RjdHgsCi0JICAgICJhbGxvY190Y3R4IGluIHJlY29yZCBz aG91bGQgbm90IGJlIE5VTEwiKTsKLQlleHBlY3RfcHRyX251bGwocHJvZl9yZWNlbnRfYWxsb2Nf ZWRhdGFfZ2V0X25vX2xvY2tfdGVzdChuKSwKLQkgICAgIlJlY29yZGVkIGVkYXRhIHNob3VsZCBi ZSBOVUxMIGZvciByZWxlYXNlZCBwb2ludGVyIik7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChuLT5k YWxsb2NfdGN0eCwKLQkgICAgImRhbGxvY190Y3R4IGluIHJlY29yZCBzaG91bGQgbm90IGJlIE5V TEwgZm9yIHJlbGVhc2VkIHBvaW50ZXIiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3Byb2ZfcmVj ZW50X2FsbG9jKSB7Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfcHJvZik7Ci0KLQlib29sIGI7Ci0J dW5zaWduZWQgaSwgYzsKLQlzaXplX3QgcmVxX3NpemU7Ci0Jdm9pZCAqcDsKLQlwcm9mX3JlY2Vu dF90ICpuOwotCXNzaXplX3QgZnV0dXJlOwotCi0JY29uZmlybV9wcm9mX3NldHVwKCk7Ci0KLQkv KgotCSAqIEZpcnN0IGJhdGNoIG9mIDIgKiBPUFRfQUxMT0NfTUFYIGFsbG9jYXRpb25zLiAgQWZ0 ZXIgdGhlCi0JICogKE9QVF9BTExPQ19NQVggLSAxKSd0aCBhbGxvY2F0aW9uIHRoZSByZWNvcmRl ZCBhbGxvY2F0aW9ucyBzaG91bGQKLQkgKiBhbHdheXMgYmUgdGhlIGxhc3QgT1BUX0FMTE9DX01B WCBhbGxvY2F0aW9ucyBjb21pbmcgZnJvbSBoZXJlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCAy ICogT1BUX0FMTE9DX01BWDsgKytpKSB7Ci0JCXJlcV9zaXplID0gTlRIX1JFUV9TSVpFKGkpOwot CQlwID0gbWFsbG9jKHJlcV9zaXplKTsKLQkJY29uZmlybV9tYWxsb2MocCk7Ci0JCWlmIChpIDwg T1BUX0FMTE9DX01BWCAtIDEpIHsKLQkJCWFzc2VydF9mYWxzZShxbF9lbXB0eSgmcHJvZl9yZWNl bnRfYWxsb2NfbGlzdCksCi0JCQkgICAgIkVtcHR5IHJlY2VudCBhbGxvY2F0aW9uIik7Ci0JCQlm cmVlKHApOwotCQkJLyoKLQkJCSAqIFRoZSByZWNvcmRlZCBhbGxvY2F0aW9ucyBtYXkgc3RpbGwg aW5jbHVkZSBzb21lCi0JCQkgKiBvdGhlciBhbGxvY2F0aW9ucyBiZWZvcmUgdGhlIHRlc3QgcnVu IHN0YXJ0ZWQsCi0JCQkgKiBzbyBrZWVwIGFsbG9jYXRpbmcgd2l0aG91dCBjaGVja2luZyBhbnl0 aGluZy4KLQkJCSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJYyA9IDA7Ci0JCXFsX2ZvcmVhY2go biwgJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QsIGxpbmspIHsKLQkJCSsrYzsKLQkJCWNvbmZpcm1f cmVjb3JkX3NpemUobiwgaSArIGMgLSBPUFRfQUxMT0NfTUFYKTsKLQkJCWlmIChjID09IE9QVF9B TExPQ19NQVgpIHsKLQkJCQljb25maXJtX3JlY29yZF9saXZpbmcobik7Ci0JCQl9IGVsc2Ugewot CQkJCWNvbmZpcm1fcmVjb3JkX3JlbGVhc2VkKG4pOwotCQkJfQotCQl9Ci0JCWFzc2VydF91X2Vx KGMsIE9QVF9BTExPQ19NQVgsCi0JCSAgICAiSW5jb3JyZWN0IHRvdGFsIG51bWJlciBvZiBhbGxv Y2F0aW9ucyIpOwotCQlmcmVlKHApOwotCX0KLQotCWNvbmZpcm1fcHJvZl9zZXR1cCgpOwotCi0J YiA9IGZhbHNlOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoInByb2YuYWN0aXZlIiwgTlVMTCwgTlVM TCwgJmIsIHNpemVvZihib29sKSksIDAsCi0JICAgICJtYWxsY3RsIGZvciB0dXJuaW5nIG9mZiBw cm9mX2FjdGl2ZSBmYWlsZWQiKTsKLQotCS8qCi0JICogU2Vjb25kIGJhdGNoIG9mIE9QVF9BTExP Q19NQVggYWxsb2NhdGlvbnMuICBTaW5jZSBwcm9mX2FjdGl2ZSBpcwotCSAqIHR1cm5lZCBvZmYs IHRoaXMgYmF0Y2ggc2hvdWxkbid0IGJlIHJlY29yZGVkLgotCSAqLwotCWZvciAoOyBpIDwgMyAq IE9QVF9BTExPQ19NQVg7ICsraSkgewotCQlyZXFfc2l6ZSA9IE5USF9SRVFfU0laRShpKTsKLQkJ cCA9IG1hbGxvYyhyZXFfc2l6ZSk7Ci0JCWFzc2VydF9wdHJfbm90X251bGwocCwgIm1hbGxvYyBm YWlsZWQgdW5leHBlY3RlZGx5Iik7Ci0JCWMgPSAwOwotCQlxbF9mb3JlYWNoKG4sICZwcm9mX3Jl Y2VudF9hbGxvY19saXN0LCBsaW5rKSB7Ci0JCQljb25maXJtX3JlY29yZF9zaXplKG4sIGMgKyBP UFRfQUxMT0NfTUFYKTsKLQkJCWNvbmZpcm1fcmVjb3JkX3JlbGVhc2VkKG4pOwotCQkJKytjOwot CQl9Ci0JCWFzc2VydF91X2VxKGMsIE9QVF9BTExPQ19NQVgsCi0JCSAgICAiSW5jb3JyZWN0IHRv dGFsIG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCQlmcmVlKHApOwotCX0KLQotCWIgPSB0cnVl OwotCWFzc2VydF9kX2VxKG1hbGxjdGwoInByb2YuYWN0aXZlIiwgTlVMTCwgTlVMTCwgJmIsIHNp emVvZihib29sKSksIDAsCi0JICAgICJtYWxsY3RsIGZvciB0dXJuaW5nIG9uIHByb2ZfYWN0aXZl IGZhaWxlZCIpOwotCi0JY29uZmlybV9wcm9mX3NldHVwKCk7Ci0KLQkvKgotCSAqIFRoaXJkIGJh dGNoIG9mIE9QVF9BTExPQ19NQVggYWxsb2NhdGlvbnMuICBTaW5jZSBwcm9mX2FjdGl2ZSBpcwot CSAqIHR1cm5lZCBiYWNrIG9uLCB0aGV5IHNob3VsZCBiZSByZWNvcmRlZCwgYW5kIGluIHRoZSBs aXN0IG9mIHJlY29yZGVkCi0JICogYWxsb2NhdGlvbnMgdGhleSBzaG91bGQgZm9sbG93IHRoZSBm aXJzdCBiYXRjaCByYXRoZXIgdGhhbiB0aGUKLQkgKiBzZWNvbmQgYmF0Y2guCi0JICovCi0JZm9y ICg7IGkgPCA0ICogT1BUX0FMTE9DX01BWDsgKytpKSB7Ci0JCXJlcV9zaXplID0gTlRIX1JFUV9T SVpFKGkpOwotCQlwID0gbWFsbG9jKHJlcV9zaXplKTsKLQkJY29uZmlybV9tYWxsb2MocCk7Ci0J CWMgPSAwOwotCQlxbF9mb3JlYWNoKG4sICZwcm9mX3JlY2VudF9hbGxvY19saXN0LCBsaW5rKSB7 Ci0JCQkrK2M7Ci0JCQljb25maXJtX3JlY29yZF9zaXplKG4sCi0JCQkgICAgLyogSXMgdGhlIGFs bG9jYXRpb24gZnJvbSB0aGUgdGhpcmQgYmF0Y2g/ICovCi0JCQkgICAgaSArIGMgLSBPUFRfQUxM T0NfTUFYID49IDMgKiBPUFRfQUxMT0NfTUFYID8KLQkJCSAgICAvKiBJZiB5ZXMsIHRoZW4gaXQn cyBqdXN0IHJlY29yZGVkLiAqLwotCQkJICAgIGkgKyBjIC0gT1BUX0FMTE9DX01BWCA6Ci0JCQkg ICAgLyoKLQkJCSAgICAgKiBPdGhlcndpc2UsIGl0IHNob3VsZCBjb21lIGZyb20gdGhlIGZpcnN0 IGJhdGNoCi0JCQkgICAgICogaW5zdGVhZCBvZiB0aGUgc2Vjb25kIGJhdGNoLgotCQkJICAgICAq LwotCQkJICAgIGkgKyBjIC0gMiAqIE9QVF9BTExPQ19NQVgpOwotCQkJaWYgKGMgPT0gT1BUX0FM TE9DX01BWCkgewotCQkJCWNvbmZpcm1fcmVjb3JkX2xpdmluZyhuKTsKLQkJCX0gZWxzZSB7Ci0J CQkJY29uZmlybV9yZWNvcmRfcmVsZWFzZWQobik7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0X3VfZXEo YywgT1BUX0FMTE9DX01BWCwKLQkJICAgICJJbmNvcnJlY3QgdG90YWwgbnVtYmVyIG9mIGFsbG9j YXRpb25zIik7Ci0JCWZyZWUocCk7Ci0JfQotCi0JLyogSW5jcmVhc2luZyB0aGUgbGltaXQgc2hv dWxkbid0IGFsdGVyIHRoZSBsaXN0IG9mIHJlY29yZHMuICovCi0JZnV0dXJlID0gT1BUX0FMTE9D X01BWCArIDE7Ci0JYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXhwZXJpbWVudGFsLnByb2ZfcmVjZW50 LmFsbG9jX21heCIsCi0JICAgIE5VTEwsIE5VTEwsICZmdXR1cmUsIHNpemVvZihzc2l6ZV90KSks IDAsICJXcml0ZSBlcnJvciIpOwotCWMgPSAwOwotCXFsX2ZvcmVhY2gobiwgJnByb2ZfcmVjZW50 X2FsbG9jX2xpc3QsIGxpbmspIHsKLQkJY29uZmlybV9yZWNvcmRfc2l6ZShuLCBjICsgMyAqIE9Q VF9BTExPQ19NQVgpOwotCQljb25maXJtX3JlY29yZF9yZWxlYXNlZChuKTsKLQkJKytjOwotCX0K LQlhc3NlcnRfdV9lcShjLCBPUFRfQUxMT0NfTUFYLAotCSAgICAiSW5jb3JyZWN0IHRvdGFsIG51 bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCi0JLyoKLQkgKiBEZWNyZWFzaW5nIHRoZSBsaW1pdCBz aG91bGRuJ3QgYWx0ZXIgdGhlIGxpc3Qgb2YgcmVjb3JkcyBhcyBsb25nIGFzCi0JICogdGhlIG5l dyBsaW1pdCBpcyBzdGlsbCBubyBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgbGlzdC4KLQkg Ki8KLQlmdXR1cmUgPSBPUFRfQUxMT0NfTUFYOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVy aW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAotCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJl LCBzaXplb2Yoc3NpemVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKLQljID0gMDsKLQlxbF9mb3Jl YWNoKG4sICZwcm9mX3JlY2VudF9hbGxvY19saXN0LCBsaW5rKSB7Ci0JCWNvbmZpcm1fcmVjb3Jk X3NpemUobiwgYyArIDMgKiBPUFRfQUxMT0NfTUFYKTsKLQkJY29uZmlybV9yZWNvcmRfcmVsZWFz ZWQobik7Ci0JCSsrYzsKLQl9Ci0JYXNzZXJ0X3VfZXEoYywgT1BUX0FMTE9DX01BWCwKLQkgICAg IkluY29ycmVjdCB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKLQotCS8qCi0JICogRGVj cmVhc2luZyB0aGUgbGltaXQgc2hvdWxkIHNob3J0ZW4gdGhlIGxpc3Qgb2YgcmVjb3JkcyBpZiB0 aGUgbmV3Ci0JICogbGltaXQgaXMgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QuCi0J ICovCi0JZnV0dXJlID0gT1BUX0FMTE9DX01BWCAtIDE7Ci0JYXNzZXJ0X2RfZXEobWFsbGN0bCgi ZXhwZXJpbWVudGFsLnByb2ZfcmVjZW50LmFsbG9jX21heCIsCi0JICAgIE5VTEwsIE5VTEwsICZm dXR1cmUsIHNpemVvZihzc2l6ZV90KSksIDAsICJXcml0ZSBlcnJvciIpOwotCWMgPSAwOwotCXFs X2ZvcmVhY2gobiwgJnByb2ZfcmVjZW50X2FsbG9jX2xpc3QsIGxpbmspIHsKLQkJKytjOwotCQlj b25maXJtX3JlY29yZF9zaXplKG4sIGMgKyAzICogT1BUX0FMTE9DX01BWCk7Ci0JCWNvbmZpcm1f cmVjb3JkX3JlbGVhc2VkKG4pOwotCX0KLQlhc3NlcnRfdV9lcShjLCBPUFRfQUxMT0NfTUFYIC0g MSwKLQkgICAgIkluY29ycmVjdCB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKLQotCS8q IFNldHRpbmcgdG8gdW5saW1pdGVkIHNob3VsZG4ndCBhbHRlciB0aGUgbGlzdCBvZiByZWNvcmRz LiAqLwotCWZ1dHVyZSA9IC0xOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5w cm9mX3JlY2VudC5hbGxvY19tYXgiLAotCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBzaXplb2Yo c3NpemVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKLQljID0gMDsKLQlxbF9mb3JlYWNoKG4sICZw cm9mX3JlY2VudF9hbGxvY19saXN0LCBsaW5rKSB7Ci0JCSsrYzsKLQkJY29uZmlybV9yZWNvcmRf c2l6ZShuLCBjICsgMyAqIE9QVF9BTExPQ19NQVgpOwotCQljb25maXJtX3JlY29yZF9yZWxlYXNl ZChuKTsKLQl9Ci0JYXNzZXJ0X3VfZXEoYywgT1BUX0FMTE9DX01BWCAtIDEsCi0JICAgICJJbmNv cnJlY3QgdG90YWwgbnVtYmVyIG9mIGFsbG9jYXRpb25zIik7Ci0KLQkvKiBEb3duc2hpZnQgdG8g b25seSBvbmUgcmVjb3JkLiAqLwotCWZ1dHVyZSA9IDE7Ci0JYXNzZXJ0X2RfZXEobWFsbGN0bCgi ZXhwZXJpbWVudGFsLnByb2ZfcmVjZW50LmFsbG9jX21heCIsCi0JICAgIE5VTEwsIE5VTEwsICZm dXR1cmUsIHNpemVvZihzc2l6ZV90KSksIDAsICJXcml0ZSBlcnJvciIpOwotCWFzc2VydF9mYWxz ZShxbF9lbXB0eSgmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCksICJSZWNlbnQgbGlzdCBpcyBlbXB0 eSIpOwotCW4gPSBxbF9maXJzdCgmcHJvZl9yZWNlbnRfYWxsb2NfbGlzdCk7Ci0JY29uZmlybV9y ZWNvcmRfc2l6ZShuLCA0ICogT1BUX0FMTE9DX01BWCAtIDEpOwotCWNvbmZpcm1fcmVjb3JkX3Jl bGVhc2VkKG4pOwotCW4gPSBxbF9uZXh0KCZwcm9mX3JlY2VudF9hbGxvY19saXN0LCBuLCBsaW5r KTsKLQlhc3NlcnRfcHRyX251bGwobiwgIlJlY2VudCBsaXN0IHNob3VsZCBvbmx5IGNvbnRhaW4g b25lIHJlY29yZCIpOwotCi0JLyogQ29tcGxldGVseSB0dXJuIG9mZi4gKi8KLQlmdXR1cmUgPSAw OwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19t YXgiLAotCSAgICBOVUxMLCBOVUxMLCAmZnV0dXJlLCBzaXplb2Yoc3NpemVfdCkpLCAwLCAiV3Jp dGUgZXJyb3IiKTsKLQlhc3NlcnRfdHJ1ZShxbF9lbXB0eSgmcHJvZl9yZWNlbnRfYWxsb2NfbGlz dCksCi0JICAgICJSZWNlbnQgbGlzdCBzaG91bGQgYmUgZW1wdHkiKTsKLQotCS8qIFJlc3RvcmUg dGhlIHNldHRpbmdzLiAqLwotCWZ1dHVyZSA9IE9QVF9BTExPQ19NQVg7Ci0JYXNzZXJ0X2RfZXEo bWFsbGN0bCgiZXhwZXJpbWVudGFsLnByb2ZfcmVjZW50LmFsbG9jX21heCIsCi0JICAgIE5VTEws IE5VTEwsICZmdXR1cmUsIHNpemVvZihzc2l6ZV90KSksIDAsICJXcml0ZSBlcnJvciIpOwotCWFz c2VydF90cnVlKHFsX2VtcHR5KCZwcm9mX3JlY2VudF9hbGxvY19saXN0KSwKLQkgICAgIlJlY2Vu dCBsaXN0IHNob3VsZCBiZSBlbXB0eSIpOwotCi0JY29uZmlybV9wcm9mX3NldHVwKCk7Ci19Ci1U RVNUX0VORAotCi0jdW5kZWYgTlRIX1JFUV9TSVpFCi0KLSNkZWZpbmUgRFVNUF9PVVRfU0laRSA0 MDk2Ci1zdGF0aWMgY2hhciBkdW1wX291dFtEVU1QX09VVF9TSVpFXTsKLXN0YXRpYyBzaXplX3Qg ZHVtcF9vdXRfbGVuID0gMDsKLQotc3RhdGljIHZvaWQKLXRlc3RfZHVtcF93cml0ZV9jYih2b2lk ICpub3RfdXNlZCwgY29uc3QgY2hhciAqc3RyKSB7Ci0Jc2l6ZV90IGxlbiA9IHN0cmxlbihzdHIp OwotCWFzc2VydChkdW1wX291dF9sZW4gKyBsZW4gPCBEVU1QX09VVF9TSVpFKTsKLQltZW1jcHko ZHVtcF9vdXQgKyBkdW1wX291dF9sZW4sIHN0ciwgbGVuICsgMSk7Ci0JZHVtcF9vdXRfbGVuICs9 IGxlbjsKLX0KLQotc3RhdGljIHZvaWQKLWNhbGxfZHVtcCgpIHsKLQlzdGF0aWMgdm9pZCAqaW5b Ml0gPSB7dGVzdF9kdW1wX3dyaXRlX2NiLCBOVUxMfTsKLQlkdW1wX291dF9sZW4gPSAwOwotCWFz c2VydF9kX2VxKG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19kdW1wIiwK LQkgICAgTlVMTCwgTlVMTCwgaW4sIHNpemVvZihpbikpLCAwLCAiRHVtcCBtYWxsY3RsIHJhaXNl ZCBlcnJvciIpOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0Jc2l6ZV90IHNpemU7Ci0Jc2l6ZV90 IHVzaXplOwotCWJvb2wgcmVsZWFzZWQ7Ci19IGNvbmZpcm1fcmVjb3JkX3Q7Ci0KLSNkZWZpbmUg RFVNUF9FUlJPUiAiRHVtcCBvdXRwdXQgaXMgd3JvbmciCi0KLXN0YXRpYyB2b2lkCi1jb25maXJt X3JlY29yZChjb25zdCBjaGFyICp0ZW1wbGF0ZSwgY29uc3QgY29uZmlybV9yZWNvcmRfdCAqcmVj b3JkcywKLSAgICBjb25zdCBzaXplX3Qgbl9yZWNvcmRzKSB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIg KnR5cGVzWzJdID0geyJhbGxvYyIsICJkYWxsb2MifTsKLQlzdGF0aWMgY2hhciBidWZbNjRdOwot Ci0JLyoKLQkgKiBUaGUgdGVtcGxhdGUgc3RyaW5nIHdvdWxkIGJlIGluIHRoZSBmb3JtIG9mOgot CSAqICJ7Li4uLFwicmVjZW50X2FsbG9jXCI6W119IiwKLQkgKiBhbmQgZHVtcF9vdXQgd291bGQg YmUgaW4gdGhlIGZvcm0gb2Y6Ci0JICogInsuLi4sXCJyZWNlbnRfYWxsb2NcIjpbLi4uXX0iLgot CSAqIFVzaW5nICItIDIiIHNlcnZlcyB0byBjdXQgcmlnaHQgYmVmb3JlIHRoZSBlbmRpbmcgIl19 Ii4KLQkgKi8KLQlhc3NlcnRfZF9lcShtZW1jbXAoZHVtcF9vdXQsIHRlbXBsYXRlLCBzdHJsZW4o dGVtcGxhdGUpIC0gMiksIDAsCi0JICAgIERVTVBfRVJST1IpOwotCWFzc2VydF9kX2VxKG1lbWNt cChkdW1wX291dCArIHN0cmxlbihkdW1wX291dCkgLSAyLAotCSAgICB0ZW1wbGF0ZSArIHN0cmxl bih0ZW1wbGF0ZSkgLSAyLCAyKSwgMCwgRFVNUF9FUlJPUik7Ci0KLQljb25zdCBjaGFyICpzdGFy dCA9IGR1bXBfb3V0ICsgc3RybGVuKHRlbXBsYXRlKSAtIDI7Ci0JY29uc3QgY2hhciAqZW5kID0g ZHVtcF9vdXQgKyBzdHJsZW4oZHVtcF9vdXQpIC0gMjsKLQljb25zdCBjb25maXJtX3JlY29yZF90 ICpyZWNvcmQ7Ci0JZm9yIChyZWNvcmQgPSByZWNvcmRzOyByZWNvcmQgPCByZWNvcmRzICsgbl9y ZWNvcmRzOyArK3JlY29yZCkgewotCi0jZGVmaW5lIEFTU0VSVF9DSEFSKGMpIGRvIHsJCQkJCQlc Ci0JYXNzZXJ0X3RydWUoc3RhcnQgPCBlbmQsIERVTVBfRVJST1IpOwkJCQlcCi0JYXNzZXJ0X2Nf ZXEoKnN0YXJ0KyssIGMsIERVTVBfRVJST1IpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5l IEFTU0VSVF9TVFIocykgZG8gewkJCQkJCVwKLQljb25zdCBzaXplX3QgbGVuID0gc3RybGVuKHMp OwkJCQkJXAotCWFzc2VydF90cnVlKHN0YXJ0ICsgbGVuIDw9IGVuZCwgRFVNUF9FUlJPUik7CQkJ XAotCWFzc2VydF9kX2VxKG1lbWNtcChzdGFydCwgcywgbGVuKSwgMCwgRFVNUF9FUlJPUik7CQlc Ci0Jc3RhcnQgKz0gbGVuOwkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIEFTU0VSVF9G T1JNQVRURURfU1RSKHMsIC4uLikgZG8gewkJCQlcCi0JbWFsbG9jX3NucHJpbnRmKGJ1Ziwgc2l6 ZW9mKGJ1ZiksIHMsIF9fVkFfQVJHU19fKTsJCVwKLQlBU1NFUlRfU1RSKGJ1Zik7CQkJCQkJXAot fSB3aGlsZSAoMCkKLQotCQlpZiAocmVjb3JkICE9IHJlY29yZHMpIHsKLQkJCUFTU0VSVF9DSEFS KCcsJyk7Ci0JCX0KLQotCQlBU1NFUlRfQ0hBUigneycpOwotCi0JCUFTU0VSVF9TVFIoIlwic2l6 ZVwiIik7Ci0JCUFTU0VSVF9DSEFSKCc6Jyk7Ci0JCUFTU0VSVF9GT1JNQVRURURfU1RSKCIlenUi LCByZWNvcmQtPnNpemUpOwotCQlBU1NFUlRfQ0hBUignLCcpOwotCi0JCUFTU0VSVF9TVFIoIlwi dXNpemVcIiIpOwotCQlBU1NFUlRfQ0hBUignOicpOwotCQlBU1NFUlRfRk9STUFUVEVEX1NUUigi JXp1IiwgcmVjb3JkLT51c2l6ZSk7Ci0JCUFTU0VSVF9DSEFSKCcsJyk7Ci0KLQkJQVNTRVJUX1NU UigiXCJyZWxlYXNlZFwiIik7Ci0JCUFTU0VSVF9DSEFSKCc6Jyk7Ci0JCUFTU0VSVF9TVFIocmVj b3JkLT5yZWxlYXNlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCQlBU1NFUlRfQ0hBUignLCcpOwot Ci0JCWNvbnN0IGNoYXIgKip0eXBlID0gdHlwZXM7Ci0JCXdoaWxlICh0cnVlKSB7Ci0JCQlBU1NF UlRfRk9STUFUVEVEX1NUUigiXCIlc190aHJlYWRfdWlkXCIiLCAqdHlwZSk7Ci0JCQlBU1NFUlRf Q0hBUignOicpOwotCQkJd2hpbGUgKGlzZGlnaXQoKnN0YXJ0KSkgewotCQkJCSsrc3RhcnQ7Ci0J CQl9Ci0JCQlBU1NFUlRfQ0hBUignLCcpOwotCi0JCQlpZiAob3B0X3Byb2Zfc3lzX3RocmVhZF9u YW1lKSB7Ci0JCQkJQVNTRVJUX0ZPUk1BVFRFRF9TVFIoIlwiJXNfdGhyZWFkX25hbWVcIiIsCi0J CQkJICAgICp0eXBlKTsKLQkJCQlBU1NFUlRfQ0hBUignOicpOwotCQkJCUFTU0VSVF9DSEFSKCci Jyk7Ci0JCQkJd2hpbGUgKCpzdGFydCAhPSAnIicpIHsKLQkJCQkJKytzdGFydDsKLQkJCQl9Ci0J CQkJQVNTRVJUX0NIQVIoJyInKTsKLQkJCQlBU1NFUlRfQ0hBUignLCcpOwotCQkJfQotCi0JCQlB U1NFUlRfRk9STUFUVEVEX1NUUigiXCIlc190aW1lXCIiLCAqdHlwZSk7Ci0JCQlBU1NFUlRfQ0hB UignOicpOwotCQkJd2hpbGUgKGlzZGlnaXQoKnN0YXJ0KSkgewotCQkJCSsrc3RhcnQ7Ci0JCQl9 Ci0JCQlBU1NFUlRfQ0hBUignLCcpOwotCi0JCQlBU1NFUlRfRk9STUFUVEVEX1NUUigiXCIlc190 cmFjZVwiIiwgKnR5cGUpOwotCQkJQVNTRVJUX0NIQVIoJzonKTsKLQkJCUFTU0VSVF9DSEFSKCdb Jyk7Ci0JCQl3aGlsZSAoaXNkaWdpdCgqc3RhcnQpIHx8ICpzdGFydCA9PSAneCcgfHwKLQkJCSAg ICAoKnN0YXJ0ID49ICdhJyAmJiAqc3RhcnQgPD0gJ2YnKSB8fAotCQkJICAgICpzdGFydCA9PSAn XCInIHx8ICpzdGFydCA9PSAnLCcpIHsKLQkJCQkrK3N0YXJ0OwotCQkJfQotCQkJQVNTRVJUX0NI QVIoJ10nKTsKLQotCQkJaWYgKHN0cmNtcCgqdHlwZSwgImRhbGxvYyIpID09IDApIHsKLQkJCQli cmVhazsKLQkJCX0KLQotCQkJYXNzZXJ0KHN0cmNtcCgqdHlwZSwgImFsbG9jIikgPT0gMCk7Ci0J CQlpZiAoIXJlY29yZC0+cmVsZWFzZWQpIHsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJQVNTRVJU X0NIQVIoJywnKTsKLQkJCSsrdHlwZTsKLQkJfQotCi0JCUFTU0VSVF9DSEFSKCd9Jyk7Ci0KLSN1 bmRlZiBBU1NFUlRfRk9STUFUVEVEX1NUUgotI3VuZGVmIEFTU0VSVF9TVFIKLSN1bmRlZiBBU1NF UlRfQ0hBUgotCi0JfQotCWFzc2VydF9wdHJfZXEocmVjb3JkLCByZWNvcmRzICsgbl9yZWNvcmRz LCBEVU1QX0VSUk9SKTsKLQlhc3NlcnRfcHRyX2VxKHN0YXJ0LCBlbmQsIERVTVBfRVJST1IpOwot fQotCi1URVNUX0JFR0lOKHRlc3RfcHJvZl9yZWNlbnRfYWxsb2NfZHVtcCkgewotCXRlc3Rfc2tp cF9pZighY29uZmlnX3Byb2YpOwotCi0JY29uZmlybV9wcm9mX3NldHVwKCk7Ci0KLQlzc2l6ZV90 IGZ1dHVyZTsKLQl2b2lkICpwLCAqcTsKLQljb25maXJtX3JlY29yZF90IHJlY29yZHNbMl07Ci0K LQlhc3NlcnRfenVfZXEobGdfcHJvZl9zYW1wbGUsIChzaXplX3QpMCwKLQkgICAgImxnX3Byb2Zf c2FtcGxlIG5vdCBzZXQgY29ycmVjdGx5Iik7Ci0KLQlmdXR1cmUgPSAwOwotCWFzc2VydF9kX2Vx KG1hbGxjdGwoImV4cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAotCSAgICBOVUxM LCBOVUxMLCAmZnV0dXJlLCBzaXplb2Yoc3NpemVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKLQlj YWxsX2R1bXAoKTsKLQlleHBlY3Rfc3RyX2VxKGR1bXBfb3V0LCAie1wic2FtcGxlX2ludGVydmFs XCI6MSwiCi0JICAgICJcInJlY2VudF9hbGxvY19tYXhcIjowLFwicmVjZW50X2FsbG9jXCI6W119 IiwgRFVNUF9FUlJPUik7Ci0KLQlmdXR1cmUgPSAyOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImV4 cGVyaW1lbnRhbC5wcm9mX3JlY2VudC5hbGxvY19tYXgiLAotCSAgICBOVUxMLCBOVUxMLCAmZnV0 dXJlLCBzaXplb2Yoc3NpemVfdCkpLCAwLCAiV3JpdGUgZXJyb3IiKTsKLQljYWxsX2R1bXAoKTsK LQljb25zdCBjaGFyICp0ZW1wbGF0ZSA9ICJ7XCJzYW1wbGVfaW50ZXJ2YWxcIjoxLCIKLQkgICAg IlwicmVjZW50X2FsbG9jX21heFwiOjIsXCJyZWNlbnRfYWxsb2NcIjpbXX0iOwotCWV4cGVjdF9z dHJfZXEoZHVtcF9vdXQsIHRlbXBsYXRlLCBEVU1QX0VSUk9SKTsKLQotCXAgPSBtYWxsb2MoNyk7 Ci0JY2FsbF9kdW1wKCk7Ci0JcmVjb3Jkc1swXS5zaXplID0gNzsKLQlyZWNvcmRzWzBdLnVzaXpl ID0gc3pfczJ1KDcpOwotCXJlY29yZHNbMF0ucmVsZWFzZWQgPSBmYWxzZTsKLQljb25maXJtX3Jl Y29yZCh0ZW1wbGF0ZSwgcmVjb3JkcywgMSk7Ci0KLQlxID0gbWFsbG9jeCgxNywgTUFMTE9DWF9B TElHTigxMjgpKTsKLQljYWxsX2R1bXAoKTsKLQlyZWNvcmRzWzFdLnNpemUgPSAxNzsKLQlyZWNv cmRzWzFdLnVzaXplID0gc3pfc2EydSgxNywgMTI4KTsKLQlyZWNvcmRzWzFdLnJlbGVhc2VkID0g ZmFsc2U7Ci0JY29uZmlybV9yZWNvcmQodGVtcGxhdGUsIHJlY29yZHMsIDIpOwotCi0JZnJlZShx KTsKLQljYWxsX2R1bXAoKTsKLQlyZWNvcmRzWzFdLnJlbGVhc2VkID0gdHJ1ZTsKLQljb25maXJt X3JlY29yZCh0ZW1wbGF0ZSwgcmVjb3JkcywgMik7Ci0KLQlmcmVlKHApOwotCWNhbGxfZHVtcCgp OwotCXJlY29yZHNbMF0ucmVsZWFzZWQgPSB0cnVlOwotCWNvbmZpcm1fcmVjb3JkKHRlbXBsYXRl LCByZWNvcmRzLCAyKTsKLQotCWZ1dHVyZSA9IE9QVF9BTExPQ19NQVg7Ci0JYXNzZXJ0X2RfZXEo bWFsbGN0bCgiZXhwZXJpbWVudGFsLnByb2ZfcmVjZW50LmFsbG9jX21heCIsCi0JICAgIE5VTEws IE5VTEwsICZmdXR1cmUsIHNpemVvZihzc2l6ZV90KSksIDAsICJXcml0ZSBlcnJvciIpOwotCWNv bmZpcm1fcHJvZl9zZXR1cCgpOwotfQotVEVTVF9FTkQKLQotI3VuZGVmIERVTVBfRVJST1IKLSN1 bmRlZiBEVU1QX09VVF9TSVpFCi0KLSNkZWZpbmUgTl9USFJFQURTIDgKLSNkZWZpbmUgTl9QVFJT IDUxMgotI2RlZmluZSBOX0NUTFMgOAotI2RlZmluZSBOX0lURVJTIDIwNDgKLSNkZWZpbmUgU1RS RVNTX0FMTE9DX01BWCA0MDk2Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl0aGRfdCB0aGQ7Ci0Jc2l6 ZV90IGlkOwotCXZvaWQgKnB0cnNbTl9QVFJTXTsKLQlzaXplX3QgY291bnQ7Ci19IHRoZF9kYXRh X3Q7Ci0KLXN0YXRpYyB0aGRfZGF0YV90IHRoZF9kYXRhW05fVEhSRUFEU107Ci1zdGF0aWMgc3Np emVfdCB0ZXN0X21heDsKLQotc3RhdGljIHZvaWQKLXRlc3Rfd3JpdGVfY2Iodm9pZCAqY2JvcGFx dWUsIGNvbnN0IGNoYXIgKnN0cikgewotCXNsZWVwX25zKDEwMDAgKiAxMDAwKTsKLX0KLQotc3Rh dGljIHZvaWQgKgotZl90aHJlYWQodm9pZCAqYXJnKSB7Ci0JY29uc3Qgc2l6ZV90IHRoZF9pZCA9 ICooc2l6ZV90ICopYXJnOwotCXRoZF9kYXRhX3QgKmRhdGFfcCA9IHRoZF9kYXRhICsgdGhkX2lk OwotCWFzc2VydChkYXRhX3AtPmlkID09IHRoZF9pZCk7Ci0JZGF0YV9wLT5jb3VudCA9IDA7Ci0J dWludDY0X3QgcmFuZCA9ICh1aW50NjRfdCl0aGRfaWQ7Ci0JdHNkX3QgKnRzZCA9IHRzZF9mZXRj aCgpOwotCWFzc2VydCh0ZXN0X21heCA+IDEpOwotCXNzaXplX3QgbGFzdF9tYXggPSAtMTsKLQlm b3IgKGludCBpID0gMDsgaSA8IE5fSVRFUlM7IGkrKykgewotCQlyYW5kID0gcHJuZ19yYW5nZV91 NjQoJnJhbmQsIE5fUFRSUyArIE5fQ1RMUyAqIDUpOwotCQlhc3NlcnQoZGF0YV9wLT5jb3VudCA8 PSBOX1BUUlMpOwotCQlpZiAocmFuZCA8IGRhdGFfcC0+Y291bnQpIHsKLQkJCWFzc2VydChkYXRh X3AtPmNvdW50ID4gMCk7Ci0JCQlpZiAocmFuZCAhPSBkYXRhX3AtPmNvdW50IC0gMSkgewotCQkJ CWFzc2VydChkYXRhX3AtPmNvdW50ID4gMSk7Ci0JCQkJdm9pZCAqdGVtcCA9IGRhdGFfcC0+cHRy c1tyYW5kXTsKLQkJCQlkYXRhX3AtPnB0cnNbcmFuZF0gPQotCQkJCSAgICBkYXRhX3AtPnB0cnNb ZGF0YV9wLT5jb3VudCAtIDFdOwotCQkJCWRhdGFfcC0+cHRyc1tkYXRhX3AtPmNvdW50IC0gMV0g PSB0ZW1wOwotCQkJfQotCQkJZnJlZShkYXRhX3AtPnB0cnNbLS1kYXRhX3AtPmNvdW50XSk7Ci0J CX0gZWxzZSBpZiAocmFuZCA8IE5fUFRSUykgewotCQkJYXNzZXJ0KGRhdGFfcC0+Y291bnQgPCBO X1BUUlMpOwotCQkJZGF0YV9wLT5wdHJzW2RhdGFfcC0+Y291bnQrK10gPSBtYWxsb2MoMSk7Ci0J CX0gZWxzZSBpZiAocmFuZCAlIDUgPT0gMCkgewotCQkJcHJvZl9yZWNlbnRfYWxsb2NfZHVtcCh0 c2QsIHRlc3Rfd3JpdGVfY2IsIE5VTEwpOwotCQl9IGVsc2UgaWYgKHJhbmQgJSA1ID09IDEpIHsK LQkJCWxhc3RfbWF4ID0gcHJvZl9yZWNlbnRfYWxsb2NfbWF4X2N0bF9yZWFkKCk7Ci0JCX0gZWxz ZSBpZiAocmFuZCAlIDUgPT0gMikgewotCQkJbGFzdF9tYXggPQotCQkJICAgIHByb2ZfcmVjZW50 X2FsbG9jX21heF9jdGxfd3JpdGUodHNkLCB0ZXN0X21heCAqIDIpOwotCQl9IGVsc2UgaWYgKHJh bmQgJSA1ID09IDMpIHsKLQkJCWxhc3RfbWF4ID0KLQkJCSAgICBwcm9mX3JlY2VudF9hbGxvY19t YXhfY3RsX3dyaXRlKHRzZCwgdGVzdF9tYXgpOwotCQl9IGVsc2UgewotCQkJYXNzZXJ0KHJhbmQg JSA1ID09IDQpOwotCQkJbGFzdF9tYXggPQotCQkJICAgIHByb2ZfcmVjZW50X2FsbG9jX21heF9j dGxfd3JpdGUodHNkLCB0ZXN0X21heCAvIDIpOwotCQl9Ci0JCWFzc2VydF96ZF9nZShsYXN0X21h eCwgLTEsICJJbGxlZ2FsIGxhc3QtTiBtYXgiKTsKLQl9Ci0KLQl3aGlsZSAoZGF0YV9wLT5jb3Vu dCA+IDApIHsKLQkJZnJlZShkYXRhX3AtPnB0cnNbLS1kYXRhX3AtPmNvdW50XSk7Ci0JfQotCi0J cmV0dXJuIE5VTEw7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9wcm9mX3JlY2VudF9zdHJlc3MpIHsK LQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsKLQotCWNvbmZpcm1fcHJvZl9zZXR1cCgpOwot Ci0JdGVzdF9tYXggPSBPUFRfQUxMT0NfTUFYOwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTl9U SFJFQURTOyBpKyspIHsKLQkJdGhkX2RhdGFfdCAqZGF0YV9wID0gdGhkX2RhdGEgKyBpOwotCQlk YXRhX3AtPmlkID0gaTsKLQkJdGhkX2NyZWF0ZSgmZGF0YV9wLT50aGQsICZmX3RocmVhZCwgJmRh dGFfcC0+aWQpOwotCX0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5fVEhSRUFEUzsgaSsrKSB7 Ci0JCXRoZF9kYXRhX3QgKmRhdGFfcCA9IHRoZF9kYXRhICsgaTsKLQkJdGhkX2pvaW4oZGF0YV9w LT50aGQsIE5VTEwpOwotCX0KLQotCXRlc3RfbWF4ID0gU1RSRVNTX0FMTE9DX01BWDsKLQlhc3Nl cnRfZF9lcShtYWxsY3RsKCJleHBlcmltZW50YWwucHJvZl9yZWNlbnQuYWxsb2NfbWF4IiwKLQkg ICAgTlVMTCwgTlVMTCwgJnRlc3RfbWF4LCBzaXplb2Yoc3NpemVfdCkpLCAwLCAiV3JpdGUgZXJy b3IiKTsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5fVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9k YXRhX3QgKmRhdGFfcCA9IHRoZF9kYXRhICsgaTsKLQkJZGF0YV9wLT5pZCA9IGk7Ci0JCXRoZF9j cmVhdGUoJmRhdGFfcC0+dGhkLCAmZl90aHJlYWQsICZkYXRhX3AtPmlkKTsKLQl9Ci0JZm9yIChz aXplX3QgaSA9IDA7IGkgPCBOX1RIUkVBRFM7IGkrKykgewotCQl0aGRfZGF0YV90ICpkYXRhX3Ag PSB0aGRfZGF0YSArIGk7Ci0JCXRoZF9qb2luKGRhdGFfcC0+dGhkLCBOVUxMKTsKLQl9Ci0KLQl0 ZXN0X21heCA9IE9QVF9BTExPQ19NQVg7Ci0JYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXhwZXJpbWVu dGFsLnByb2ZfcmVjZW50LmFsbG9jX21heCIsCi0JICAgIE5VTEwsIE5VTEwsICZ0ZXN0X21heCwg c2l6ZW9mKHNzaXplX3QpKSwgMCwgIldyaXRlIGVycm9yIik7Ci0JY29uZmlybV9wcm9mX3NldHVw KCk7Ci19Ci1URVNUX0VORAotCi0jdW5kZWYgU1RSRVNTX0FMTE9DX01BWAotI3VuZGVmIE5fSVRF UlMKLSN1bmRlZiBOX1BUUlMKLSN1bmRlZiBOX1RIUkVBRFMKLQotaW50Ci1tYWluKHZvaWQpIHsK LQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9jb25maXJtX3NldHVwLAotCSAgICB0ZXN0X3Byb2Zf cmVjZW50X29mZiwKLQkgICAgdGVzdF9wcm9mX3JlY2VudF9vbiwKLQkgICAgdGVzdF9wcm9mX3Jl Y2VudF9hbGxvYywKLQkgICAgdGVzdF9wcm9mX3JlY2VudF9hbGxvY19kdW1wLAotCSAgICB0ZXN0 X3Byb2ZfcmVjZW50X3N0cmVzcyk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAt YnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVjZW50LnNoIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVjZW50LnNoCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGE1NGE0Li4wMDAwMDAwCi0tLSBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3JlY2VudC5z aAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyEvYmluL3NoCi0KLWlmIFsgIngke2Vu YWJsZV9wcm9mfSIgPSAieDEiIF0gOyB0aGVuCi0gIGV4cG9ydCBNQUxMT0NfQ09ORj0icHJvZjp0 cnVlLHByb2ZfYWN0aXZlOnRydWUsbGdfcHJvZl9zYW1wbGU6MCxwcm9mX3JlY2VudF9hbGxvY19t YXg6MyIKLWZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L3Byb2ZfcmVzZXQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3Jlc2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDliMzNiMjAuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVzZXQuYworKysgL2Rldi9udWxsCkBAIC0x LDI2NiArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNsdWRl ICJqZW1hbGxvYy9pbnRlcm5hbC9wcm9mX2RhdGEuaCIKLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRl cm5hbC9wcm9mX3N5cy5oIgotCi1zdGF0aWMgaW50Ci1wcm9mX2R1bXBfb3Blbl9maWxlX2ludGVy Y2VwdChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpIHsKLQlpbnQgZmQ7Ci0KLQlmZCA9 IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JPTkxZKTsKLQlhc3NlcnRfZF9uZShmZCwgLTEsICJVbmV4 cGVjdGVkIG9wZW4oKSBmYWlsdXJlIik7Ci0KLQlyZXR1cm4gZmQ7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1zZXRfcHJvZl9hY3RpdmUoYm9vbCBhY3RpdmUpIHsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJw cm9mLmFjdGl2ZSIsIE5VTEwsIE5VTEwsICh2b2lkICopJmFjdGl2ZSwKLQkgICAgc2l6ZW9mKGFj dGl2ZSkpLCAwLCAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKLX0KLQotc3RhdGljIHNp emVfdAotZ2V0X2xnX3Byb2Zfc2FtcGxlKHZvaWQpIHsKLQlzaXplX3QgcmV0OwotCXNpemVfdCBz eiA9IHNpemVvZihzaXplX3QpOwotCi0JZXhwZWN0X2RfZXEobWFsbGN0bCgicHJvZi5sZ19zYW1w bGUiLCAodm9pZCAqKSZyZXQsICZzeiwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1h bGxjdGwgZmFpbHVyZSB3aGlsZSByZWFkaW5nIHByb2ZpbGluZyBzYW1wbGUgcmF0ZSIpOwotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kb19wcm9mX3Jlc2V0KHNpemVfdCBsZ19wcm9m X3NhbXBsZV9pbnB1dCkgewotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInByb2YucmVzZXQiLCBOVUxM LCBOVUxMLAotCSAgICAodm9pZCAqKSZsZ19wcm9mX3NhbXBsZV9pbnB1dCwgc2l6ZW9mKHNpemVf dCkpLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUgd2hpbGUgcmVzZXR0aW5n IHByb2ZpbGUgZGF0YSIpOwotCWV4cGVjdF96dV9lcShsZ19wcm9mX3NhbXBsZV9pbnB1dCwgZ2V0 X2xnX3Byb2Zfc2FtcGxlKCksCi0JICAgICJFeHBlY3RlZCBwcm9maWxlIHNhbXBsZSByYXRlIGNo YW5nZSIpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcHJvZl9yZXNldF9iYXNpYykgewotCXNpemVf dCBsZ19wcm9mX3NhbXBsZV9vcmlnLCBsZ19wcm9mX3NhbXBsZV9jdXIsIGxnX3Byb2Zfc2FtcGxl X25leHQ7Ci0Jc2l6ZV90IHN6OwotCXVuc2lnbmVkIGk7Ci0KLQl0ZXN0X3NraXBfaWYoIWNvbmZp Z19wcm9mKTsKLQotCXN6ID0gc2l6ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgi b3B0LmxnX3Byb2Zfc2FtcGxlIiwgKHZvaWQgKikmbGdfcHJvZl9zYW1wbGVfb3JpZywKLQkgICAg JnN6LCBOVUxMLCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIHdoaWxl IHJlYWRpbmcgcHJvZmlsaW5nIHNhbXBsZSByYXRlIik7Ci0JZXhwZWN0X3p1X2VxKGxnX3Byb2Zf c2FtcGxlX29yaWcsIDAsCi0JICAgICJVbmV4cGVjdGVkIHByb2ZpbGluZyBzYW1wbGUgcmF0ZSIp OwotCWxnX3Byb2Zfc2FtcGxlX2N1ciA9IGdldF9sZ19wcm9mX3NhbXBsZSgpOwotCWV4cGVjdF96 dV9lcShsZ19wcm9mX3NhbXBsZV9vcmlnLCBsZ19wcm9mX3NhbXBsZV9jdXIsCi0JICAgICJVbmV4 cGVjdGVkIGRpc2FncmVlbWVudCBiZXR3ZWVuIFwib3B0LmxnX3Byb2Zfc2FtcGxlXCIgYW5kICIK LQkgICAgIlwicHJvZi5sZ19zYW1wbGVcIiIpOwotCi0JLyogVGVzdCBzaW1wbGUgcmVzZXRzLiAq LwotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJZXhwZWN0X2RfZXEobWFsbGN0bCgicHJv Zi5yZXNldCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAotCQkgICAgIlVuZXhwZWN0ZWQgbWFs bGN0bCBmYWlsdXJlIHdoaWxlIHJlc2V0dGluZyBwcm9maWxlIGRhdGEiKTsKLQkJbGdfcHJvZl9z YW1wbGVfY3VyID0gZ2V0X2xnX3Byb2Zfc2FtcGxlKCk7Ci0JCWV4cGVjdF96dV9lcShsZ19wcm9m X3NhbXBsZV9vcmlnLCBsZ19wcm9mX3NhbXBsZV9jdXIsCi0JCSAgICAiVW5leHBlY3RlZCBwcm9m aWxlIHNhbXBsZSByYXRlIGNoYW5nZSIpOwotCX0KLQotCS8qIFRlc3QgcmVzZXRzIHdpdGggcHJv Zi5sZ19zYW1wbGUgY2hhbmdlcy4gKi8KLQlsZ19wcm9mX3NhbXBsZV9uZXh0ID0gMTsKLQlmb3Ig KGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWRvX3Byb2ZfcmVzZXQobGdfcHJvZl9zYW1wbGVfbmV4 dCk7Ci0JCWxnX3Byb2Zfc2FtcGxlX2N1ciA9IGdldF9sZ19wcm9mX3NhbXBsZSgpOwotCQlleHBl Y3RfenVfZXEobGdfcHJvZl9zYW1wbGVfY3VyLCBsZ19wcm9mX3NhbXBsZV9uZXh0LAotCQkgICAg IkV4cGVjdGVkIHByb2ZpbGUgc2FtcGxlIHJhdGUgY2hhbmdlIik7Ci0JCWxnX3Byb2Zfc2FtcGxl X25leHQgPSBsZ19wcm9mX3NhbXBsZV9vcmlnOwotCX0KLQotCS8qIE1ha2Ugc3VyZSB0aGUgdGVz dCBjb2RlIHJlc3RvcmVkIHByb2YubGdfc2FtcGxlLiAqLwotCWxnX3Byb2Zfc2FtcGxlX2N1ciA9 IGdldF9sZ19wcm9mX3NhbXBsZSgpOwotCWV4cGVjdF96dV9lcShsZ19wcm9mX3NhbXBsZV9vcmln LCBsZ19wcm9mX3NhbXBsZV9jdXIsCi0JICAgICJVbmV4cGVjdGVkIGRpc2FncmVlbWVudCBiZXR3 ZWVuIFwib3B0LmxnX3Byb2Zfc2FtcGxlXCIgYW5kICIKLQkgICAgIlwicHJvZi5sZ19zYW1wbGVc IiIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3Byb2ZfcmVzZXRfY2xlYW51cCkg ewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCi0Jc2V0X3Byb2ZfYWN0aXZlKHRydWUp OwotCi0JZXhwZWN0X3p1X2VxKHByb2ZfYnRfY291bnQoKSwgMCwgIkV4cGVjdGVkIDAgYmFja3Ry YWNlcyIpOwotCXZvaWQgKnAgPSBtYWxsb2N4KDEsIDApOwotCWV4cGVjdF9wdHJfbm90X251bGwo cCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQlleHBlY3RfenVfZXEocHJvZl9i dF9jb3VudCgpLCAxLCAiRXhwZWN0ZWQgMSBiYWNrdHJhY2UiKTsKLQotCXByb2ZfY250X3QgY250 X2FsbDsKLQlwcm9mX2NudF9hbGwoJmNudF9hbGwpOwotCWV4cGVjdF91NjRfZXEoY250X2FsbC5j dXJvYmpzLCAxLCAiRXhwZWN0ZWQgMSBhbGxvY2F0aW9uIik7Ci0KLQlleHBlY3RfZF9lcShtYWxs Y3RsKCJwcm9mLnJlc2V0IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVj dGVkIGVycm9yIHdoaWxlIHJlc2V0dGluZyBoZWFwIHByb2ZpbGUgZGF0YSIpOwotCXByb2ZfY250 X2FsbCgmY250X2FsbCk7Ci0JZXhwZWN0X3U2NF9lcShjbnRfYWxsLmN1cm9ianMsIDAsICJFeHBl Y3RlZCAwIGFsbG9jYXRpb25zIik7Ci0JZXhwZWN0X3p1X2VxKHByb2ZfYnRfY291bnQoKSwgMSwg IkV4cGVjdGVkIDEgYmFja3RyYWNlIik7Ci0KLQlkYWxsb2N4KHAsIDApOwotCWV4cGVjdF96dV9l cShwcm9mX2J0X2NvdW50KCksIDAsICJFeHBlY3RlZCAwIGJhY2t0cmFjZXMiKTsKLQotCXNldF9w cm9mX2FjdGl2ZShmYWxzZSk7Ci19Ci1URVNUX0VORAotCi0jZGVmaW5lIE5USFJFQURTCQk0Ci0j ZGVmaW5lIE5BTExPQ1NfUEVSX1RIUkVBRAkoMVUgPDwgMTMpCi0jZGVmaW5lIE9CSl9SSU5HX0JV Rl9DT1VOVAkxNTMxCi0jZGVmaW5lIFJFU0VUX0lOVEVSVkFMCQkoMVUgPDwgMTApCi0jZGVmaW5l IERVTVBfSU5URVJWQUwJCTM2NzcKLXN0YXRpYyB2b2lkICoKLXRoZF9zdGFydCh2b2lkICp2YXJn KSB7Ci0JdW5zaWduZWQgdGhkX2luZCA9ICoodW5zaWduZWQgKil2YXJnOwotCXVuc2lnbmVkIGk7 Ci0Jdm9pZCAqb2Jqc1tPQkpfUklOR19CVUZfQ09VTlRdOwotCi0JbWVtc2V0KG9ianMsIDAsIHNp emVvZihvYmpzKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTkFMTE9DU19QRVJfVEhSRUFEOyBpKysp IHsKLQkJaWYgKGkgJSBSRVNFVF9JTlRFUlZBTCA9PSAwKSB7Ci0JCQlleHBlY3RfZF9lcShtYWxs Y3RsKCJwcm9mLnJlc2V0IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksCi0JCQkgICAgMCwgIlVuZXhw ZWN0ZWQgZXJyb3Igd2hpbGUgcmVzZXR0aW5nIGhlYXAgcHJvZmlsZSAiCi0JCQkgICAgImRhdGEi KTsKLQkJfQotCi0JCWlmIChpICUgRFVNUF9JTlRFUlZBTCA9PSAwKSB7Ci0JCQlleHBlY3RfZF9l cShtYWxsY3RsKCJwcm9mLmR1bXAiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwKLQkJCSAgICAwLCAi VW5leHBlY3RlZCBlcnJvciB3aGlsZSBkdW1waW5nIGhlYXAgcHJvZmlsZSIpOwotCQl9Ci0KLQkJ ewotCQkJdm9pZCAqKnBwID0gJm9ianNbaSAlIE9CSl9SSU5HX0JVRl9DT1VOVF07Ci0JCQlpZiAo KnBwICE9IE5VTEwpIHsKLQkJCQlkYWxsb2N4KCpwcCwgMCk7Ci0JCQkJKnBwID0gTlVMTDsKLQkJ CX0KLQkJCSpwcCA9IGJ0YWxsb2MoMSwgdGhkX2luZCpOQUxMT0NTX1BFUl9USFJFQUQgKyBpKTsK LQkJCWV4cGVjdF9wdHJfbm90X251bGwoKnBwLAotCQkJICAgICJVbmV4cGVjdGVkIGJ0YWxsb2Mo KSBmYWlsdXJlIik7Ci0JCX0KLQl9Ci0KLQkvKiBDbGVhbiB1cCBhbnkgcmVtYWluaW5nIG9iamVj dHMuICovCi0JZm9yIChpID0gMDsgaSA8IE9CSl9SSU5HX0JVRl9DT1VOVDsgaSsrKSB7Ci0JCXZv aWQgKipwcCA9ICZvYmpzW2kgJSBPQkpfUklOR19CVUZfQ09VTlRdOwotCQlpZiAoKnBwICE9IE5V TEwpIHsKLQkJCWRhbGxvY3goKnBwLCAwKTsKLQkJCSpwcCA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQly ZXR1cm4gTlVMTDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3Byb2ZfcmVzZXQpIHsKLQlzaXplX3Qg bGdfcHJvZl9zYW1wbGVfb3JpZzsKLQl0aGRfdCB0aGRzW05USFJFQURTXTsKLQl1bnNpZ25lZCB0 aGRfYXJnc1tOVEhSRUFEU107Ci0JdW5zaWduZWQgaTsKLQlzaXplX3QgYnRfY291bnQsIHRkYXRh X2NvdW50OwotCi0JdGVzdF9za2lwX2lmKCFjb25maWdfcHJvZik7Ci0KLQlidF9jb3VudCA9IHBy b2ZfYnRfY291bnQoKTsKLQlleHBlY3RfenVfZXEoYnRfY291bnQsIDAsCi0JICAgICJVbmV4cGVj dGVkIHByZS1leGlzdGluZyB0ZGF0YSBzdHJ1Y3R1cmVzIik7Ci0JdGRhdGFfY291bnQgPSBwcm9m X3RkYXRhX2NvdW50KCk7Ci0KLQlsZ19wcm9mX3NhbXBsZV9vcmlnID0gZ2V0X2xnX3Byb2Zfc2Ft cGxlKCk7Ci0JZG9fcHJvZl9yZXNldCg1KTsKLQotCXNldF9wcm9mX2FjdGl2ZSh0cnVlKTsKLQot CWZvciAoaSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9hcmdzW2ldID0gaTsKLQkJ dGhkX2NyZWF0ZSgmdGhkc1tpXSwgdGhkX3N0YXJ0LCAodm9pZCAqKSZ0aGRfYXJnc1tpXSk7Ci0J fQotCWZvciAoaSA9IDA7IGkgPCBOVEhSRUFEUzsgaSsrKSB7Ci0JCXRoZF9qb2luKHRoZHNbaV0s IE5VTEwpOwotCX0KLQotCWV4cGVjdF96dV9lcShwcm9mX2J0X2NvdW50KCksIGJ0X2NvdW50LAot CSAgICAiVW5leHBlY3RlZCBiYWN0cmFjZSBjb3VudCBjaGFuZ2UiKTsKLQlleHBlY3RfenVfZXEo cHJvZl90ZGF0YV9jb3VudCgpLCB0ZGF0YV9jb3VudCwKLQkgICAgIlVuZXhwZWN0ZWQgcmVtYWlu aW5nIHRkYXRhIHN0cnVjdHVyZXMiKTsKLQotCXNldF9wcm9mX2FjdGl2ZShmYWxzZSk7Ci0KLQlk b19wcm9mX3Jlc2V0KGxnX3Byb2Zfc2FtcGxlX29yaWcpOwotfQotVEVTVF9FTkQKLSN1bmRlZiBO VEhSRUFEUwotI3VuZGVmIE5BTExPQ1NfUEVSX1RIUkVBRAotI3VuZGVmIE9CSl9SSU5HX0JVRl9D T1VOVAotI3VuZGVmIFJFU0VUX0lOVEVSVkFMCi0jdW5kZWYgRFVNUF9JTlRFUlZBTAotCi0vKiBU ZXN0IHNhbXBsaW5nIGF0IHRoZSBzYW1lIGFsbG9jYXRpb24gc2l0ZSBhY3Jvc3MgcmVzZXRzLiAq LwotI2RlZmluZSBOSVRFUiAxMAotVEVTVF9CRUdJTih0ZXN0X3hhbGxvY3gpIHsKLQlzaXplX3Qg bGdfcHJvZl9zYW1wbGVfb3JpZzsKLQl1bnNpZ25lZCBpOwotCXZvaWQgKnB0cnNbTklURVJdOwot Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfcHJvZik7Ci0KLQlsZ19wcm9mX3NhbXBsZV9vcmlnID0g Z2V0X2xnX3Byb2Zfc2FtcGxlKCk7Ci0Jc2V0X3Byb2ZfYWN0aXZlKHRydWUpOwotCi0JLyogUmVz ZXQgcHJvZmlsaW5nLiAqLwotCWRvX3Byb2ZfcmVzZXQoMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg TklURVI7IGkrKykgewotCQl2b2lkICpwOwotCQlzaXplX3Qgc3osIG5zejsKLQotCQkvKiBSZXNl dCBwcm9maWxpbmcuICovCi0JCWRvX3Byb2ZfcmVzZXQoMCk7Ci0KLQkJLyogQWxsb2NhdGUgc21h bGwgb2JqZWN0ICh3aGljaCB3aWxsIGJlIHByb21vdGVkKS4gKi8KLQkJcCA9IHB0cnNbaV0gPSBt YWxsb2N4KDEsIDApOwotCQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxv Y3goKSBmYWlsdXJlIik7Ci0KLQkJLyogUmVzZXQgcHJvZmlsaW5nLiAqLwotCQlkb19wcm9mX3Jl c2V0KDApOwotCi0JCS8qIFBlcmZvcm0gc3VjY2Vzc2Z1bCB4YWxsb2N4KCkuICovCi0JCXN6ID0g c2FsbG9jeChwLCAwKTsKLQkJZXhwZWN0X3p1X2VxKHhhbGxvY3gocCwgc3osIDAsIDApLCBzeiwK LQkJICAgICJVbmV4cGVjdGVkIHhhbGxvY3goKSBmYWlsdXJlIik7Ci0KLQkJLyogUGVyZm9ybSB1 bnN1Y2Nlc3NmdWwgeGFsbG9jeCgpLiAqLwotCQluc3ogPSBuYWxsb2N4KHN6KzEsIDApOwotCQll eHBlY3RfenVfZXEoeGFsbG9jeChwLCBuc3osIDAsIDApLCBzeiwKLQkJICAgICJVbmV4cGVjdGVk IHhhbGxvY3goKSBzdWNjZXNzIik7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE5JVEVSOyBpKysp IHsKLQkJLyogZGFsbG9jeC4gKi8KLQkJZGFsbG9jeChwdHJzW2ldLCAwKTsKLQl9Ci0KLQlzZXRf cHJvZl9hY3RpdmUoZmFsc2UpOwotCWRvX3Byb2ZfcmVzZXQobGdfcHJvZl9zYW1wbGVfb3JpZyk7 Ci19Ci1URVNUX0VORAotI3VuZGVmIE5JVEVSCi0KLWludAotbWFpbih2b2lkKSB7Ci0JLyogSW50 ZXJjZXB0IGR1bXBpbmcgcHJpb3IgdG8gcnVubmluZyBhbnkgdGVzdHMuICovCi0JcHJvZl9kdW1w X29wZW5fZmlsZSA9IHByb2ZfZHVtcF9vcGVuX2ZpbGVfaW50ZXJjZXB0OwotCi0JcmV0dXJuIHRl c3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF9wcm9mX3Jlc2V0X2Jhc2ljLAotCSAgICB0ZXN0 X3Byb2ZfcmVzZXRfY2xlYW51cCwKLQkgICAgdGVzdF9wcm9mX3Jlc2V0LAotCSAgICB0ZXN0X3hh bGxvY3gpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3Jlc2V0LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVzZXQuc2gKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGRhZWZlYjcuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfcmVzZXQuc2gKKysrIC9kZXYvbnVsbApA QCAtMSw1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1pZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngx IiBdIDsgdGhlbgotICBleHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9mX2FjdGl2ZTpm YWxzZSxsZ19wcm9mX3NhbXBsZTowLHByb2ZfcmVjZW50X2FsbG9jX21heDowIgotZmkKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cHJvZl9zdGF0cy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3Byb2Zfc3RhdHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4YzRh ZS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvcHJvZl9zdGF0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLSNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2RlZmluZSBOX1BUUlMgMwotCi1zdGF0 aWMgdm9pZAotdGVzdF9jb21iaW5hdGlvbnMoc3ppbmRfdCBpbmQsIHNpemVfdCBzaXplc19hcnJh eVtOX1BUUlNdLAotICAgIGludCBmbGFnc19hcnJheVtOX1BUUlNdKSB7Ci0jZGVmaW5lIE1BTExD VExfU1RSX0xFTiA2NAotCWFzc2VydChvcHRfcHJvZiAmJiBvcHRfcHJvZl9zdGF0cyk7Ci0KLQlj aGFyIG1hbGxjdGxfbGl2ZV9zdHJbTUFMTENUTF9TVFJfTEVOXTsKLQljaGFyIG1hbGxjdGxfYWNj dW1fc3RyW01BTExDVExfU1RSX0xFTl07Ci0JaWYgKGluZCA8IFNDX05CSU5TKSB7Ci0JCW1hbGxv Y19zbnByaW50ZihtYWxsY3RsX2xpdmVfc3RyLCBNQUxMQ1RMX1NUUl9MRU4sCi0JCSAgICAicHJv Zi5zdGF0cy5iaW5zLiV1LmxpdmUiLCAodW5zaWduZWQpaW5kKTsKLQkJbWFsbG9jX3NucHJpbnRm KG1hbGxjdGxfYWNjdW1fc3RyLCBNQUxMQ1RMX1NUUl9MRU4sCi0JCSAgICAicHJvZi5zdGF0cy5i aW5zLiV1LmFjY3VtIiwgKHVuc2lnbmVkKWluZCk7Ci0JfSBlbHNlIHsKLQkJbWFsbG9jX3NucHJp bnRmKG1hbGxjdGxfbGl2ZV9zdHIsIE1BTExDVExfU1RSX0xFTiwKLQkJICAgICJwcm9mLnN0YXRz LmxleHRlbnRzLiV1LmxpdmUiLCAodW5zaWduZWQpKGluZCAtIFNDX05CSU5TKSk7Ci0JCW1hbGxv Y19zbnByaW50ZihtYWxsY3RsX2FjY3VtX3N0ciwgTUFMTENUTF9TVFJfTEVOLAotCQkgICAgInBy b2Yuc3RhdHMubGV4dGVudHMuJXUuYWNjdW0iLCAodW5zaWduZWQpKGluZCAtIFNDX05CSU5TKSk7 Ci0JfQotCi0Jc2l6ZV90IHN0YXRzX2xlbiA9IDIgKiBzaXplb2YodWludDY0X3QpOwotCi0JdWlu dDY0X3QgbGl2ZV9zdGF0c19vcmlnWzJdOwotCWFzc2VydF9kX2VxKG1hbGxjdGwobWFsbGN0bF9s aXZlX3N0ciwgJmxpdmVfc3RhdHNfb3JpZywgJnN0YXRzX2xlbiwKLQkgICAgTlVMTCwgMCksIDAs ICIiKTsKLQl1aW50NjRfdCBhY2N1bV9zdGF0c19vcmlnWzJdOwotCWFzc2VydF9kX2VxKG1hbGxj dGwobWFsbGN0bF9hY2N1bV9zdHIsICZhY2N1bV9zdGF0c19vcmlnLCAmc3RhdHNfbGVuLAotCSAg ICBOVUxMLCAwKSwgMCwgIiIpOwotCi0Jdm9pZCAqcHRyc1tOX1BUUlNdOwotCi0JdWludDY0X3Qg bGl2ZV9yZXFfc3VtID0gMDsKLQl1aW50NjRfdCBsaXZlX2NvdW50ID0gMDsKLQl1aW50NjRfdCBh Y2N1bV9yZXFfc3VtID0gMDsKLQl1aW50NjRfdCBhY2N1bV9jb3VudCA9IDA7Ci0KLQlmb3IgKHNp emVfdCBpID0gMDsgaSA8IE5fUFRSUzsgKytpKSB7Ci0JCXNpemVfdCBzeiA9IHNpemVzX2FycmF5 W2ldOwotCQlpbnQgZmxhZ3MgPSBmbGFnc19hcnJheVtpXTsKLQkJdm9pZCAqcCA9IG1hbGxvY3go c3osIGZsYWdzKTsKLQkJYXNzZXJ0X3B0cl9ub3RfbnVsbChwLCAibWFsbG9jKCkgZmFpbGVkIik7 Ci0JCWFzc2VydChURVNUX01BTExPQ19TSVpFKHApID09IHN6X2luZGV4MnNpemUoaW5kKSk7Ci0J CXB0cnNbaV0gPSBwOwotCQlsaXZlX3JlcV9zdW0gKz0gc3o7Ci0JCWxpdmVfY291bnQrKzsKLQkJ YWNjdW1fcmVxX3N1bSArPSBzejsKLQkJYWNjdW1fY291bnQrKzsKLQkJdWludDY0X3QgbGl2ZV9z dGF0c1syXTsKLQkJYXNzZXJ0X2RfZXEobWFsbGN0bChtYWxsY3RsX2xpdmVfc3RyLCAmbGl2ZV9z dGF0cywgJnN0YXRzX2xlbiwKLQkJICAgIE5VTEwsIDApLCAwLCAiIik7Ci0JCWV4cGVjdF91NjRf ZXEobGl2ZV9zdGF0c1swXSAtIGxpdmVfc3RhdHNfb3JpZ1swXSwKLQkJICAgIGxpdmVfcmVxX3N1 bSwgIiIpOwotCQlleHBlY3RfdTY0X2VxKGxpdmVfc3RhdHNbMV0gLSBsaXZlX3N0YXRzX29yaWdb MV0sCi0JCSAgICBsaXZlX2NvdW50LCAiIik7Ci0JCXVpbnQ2NF90IGFjY3VtX3N0YXRzWzJdOwot CQlhc3NlcnRfZF9lcShtYWxsY3RsKG1hbGxjdGxfYWNjdW1fc3RyLCAmYWNjdW1fc3RhdHMsICZz dGF0c19sZW4sCi0JCSAgICBOVUxMLCAwKSwgMCwgIiIpOwotCQlleHBlY3RfdTY0X2VxKGFjY3Vt X3N0YXRzWzBdIC0gYWNjdW1fc3RhdHNfb3JpZ1swXSwKLQkJICAgIGFjY3VtX3JlcV9zdW0sICIi KTsKLQkJZXhwZWN0X3U2NF9lcShhY2N1bV9zdGF0c1sxXSAtIGFjY3VtX3N0YXRzX29yaWdbMV0s Ci0JCSAgICBhY2N1bV9jb3VudCwgIiIpOwotCX0KLQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwg Tl9QVFJTOyArK2kpIHsKLQkJc2l6ZV90IHN6ID0gc2l6ZXNfYXJyYXlbaV07Ci0JCWludCBmbGFn cyA9IGZsYWdzX2FycmF5W2ldOwotCQlzZGFsbG9jeChwdHJzW2ldLCBzeiwgZmxhZ3MpOwotCQls aXZlX3JlcV9zdW0gLT0gc3o7Ci0JCWxpdmVfY291bnQtLTsKLQkJdWludDY0X3QgbGl2ZV9zdGF0 c1syXTsKLQkJYXNzZXJ0X2RfZXEobWFsbGN0bChtYWxsY3RsX2xpdmVfc3RyLCAmbGl2ZV9zdGF0 cywgJnN0YXRzX2xlbiwKLQkJICAgIE5VTEwsIDApLCAwLCAiIik7Ci0JCWV4cGVjdF91NjRfZXEo bGl2ZV9zdGF0c1swXSAtIGxpdmVfc3RhdHNfb3JpZ1swXSwKLQkJICAgIGxpdmVfcmVxX3N1bSwg IiIpOwotCQlleHBlY3RfdTY0X2VxKGxpdmVfc3RhdHNbMV0gLSBsaXZlX3N0YXRzX29yaWdbMV0s Ci0JCSAgICBsaXZlX2NvdW50LCAiIik7Ci0JCXVpbnQ2NF90IGFjY3VtX3N0YXRzWzJdOwotCQlh c3NlcnRfZF9lcShtYWxsY3RsKG1hbGxjdGxfYWNjdW1fc3RyLCAmYWNjdW1fc3RhdHMsICZzdGF0 c19sZW4sCi0JCSAgICBOVUxMLCAwKSwgMCwgIiIpOwotCQlleHBlY3RfdTY0X2VxKGFjY3VtX3N0 YXRzWzBdIC0gYWNjdW1fc3RhdHNfb3JpZ1swXSwKLQkJICAgIGFjY3VtX3JlcV9zdW0sICIiKTsK LQkJZXhwZWN0X3U2NF9lcShhY2N1bV9zdGF0c1sxXSAtIGFjY3VtX3N0YXRzX29yaWdbMV0sCi0J CSAgICBhY2N1bV9jb3VudCwgIiIpOwotCX0KLSN1bmRlZiBNQUxMQ1RMX1NUUl9MRU4KLX0KLQot c3RhdGljIHZvaWQKLXRlc3Rfc3ppbmRfd3JhcHBlcihzemluZF90IGluZCkgewotCXNpemVfdCBz aXplc19hcnJheVtOX1BUUlNdOwotCWludCBmbGFnc19hcnJheVtOX1BUUlNdOwotCWZvciAoc2l6 ZV90IGkgPSAwLCBzeiA9IHN6X2luZGV4MnNpemUoaW5kKSAtIE5fUFRSUzsgaSA8IE5fUFRSUzsK LQkgICAgKytpLCArK3N6KSB7Ci0JCXNpemVzX2FycmF5W2ldID0gc3o7Ci0JCWZsYWdzX2FycmF5 W2ldID0gMDsKLQl9Ci0JdGVzdF9jb21iaW5hdGlvbnMoaW5kLCBzaXplc19hcnJheSwgZmxhZ3Nf YXJyYXkpOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcHJvZl9zdGF0cykgewotCXRlc3Rfc2tpcF9p ZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc3ppbmRfd3JhcHBlcigwKTsKLQl0ZXN0X3N6aW5kX3dy YXBwZXIoMSk7Ci0JdGVzdF9zemluZF93cmFwcGVyKDIpOwotCXRlc3Rfc3ppbmRfd3JhcHBlcihT Q19OQklOUyk7Ci0JdGVzdF9zemluZF93cmFwcGVyKFNDX05CSU5TICsgMSk7Ci0JdGVzdF9zemlu ZF93cmFwcGVyKFNDX05CSU5TICsgMik7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAotdGVz dF9zemluZF9hbGlnbmVkX3dyYXBwZXIoc3ppbmRfdCBpbmQsIHVuc2lnbmVkIGxnX2FsaWduKSB7 Ci0Jc2l6ZV90IHNpemVzX2FycmF5W05fUFRSU107Ci0JaW50IGZsYWdzX2FycmF5W05fUFRSU107 Ci0JaW50IGZsYWdzID0gTUFMTE9DWF9MR19BTElHTihsZ19hbGlnbik7Ci0JZm9yIChzaXplX3Qg aSA9IDAsIHN6ID0gc3pfaW5kZXgyc2l6ZShpbmQpIC0gTl9QVFJTOyBpIDwgTl9QVFJTOwotCSAg ICArK2ksICsrc3opIHsKLQkJc2l6ZXNfYXJyYXlbaV0gPSBzejsKLQkJZmxhZ3NfYXJyYXlbaV0g PSBmbGFnczsKLQl9Ci0JdGVzdF9jb21iaW5hdGlvbnMoCi0JICAgIHN6X3NpemUyaW5kZXgoc3pf c2EydShzel9pbmRleDJzaXplKGluZCksIDEgPDwgbGdfYWxpZ24pKSwKLQkgICAgc2l6ZXNfYXJy YXksIGZsYWdzX2FycmF5KTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3Byb2Zfc3RhdHNfYWxpZ25l ZCkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCWZvciAoc3ppbmRfdCBpbmQgPSAw OyBpbmQgPCAxMDsgKytpbmQpIHsKLQkJZm9yICh1bnNpZ25lZCBsZ19hbGlnbiA9IDA7IGxnX2Fs aWduIDwgMTA7ICsrbGdfYWxpZ24pIHsKLQkJCXRlc3Rfc3ppbmRfYWxpZ25lZF93cmFwcGVyKGlu ZCwgbGdfYWxpZ24pOwotCQl9Ci0JfQotCWZvciAoc3ppbmRfdCBpbmQgPSBTQ19OQklOUyAtIDU7 IGluZCA8IFNDX05CSU5TICsgNTsgKytpbmQpIHsKLQkJZm9yICh1bnNpZ25lZCBsZ19hbGlnbiA9 IFNDX0xHX0xBUkdFX01JTkNMQVNTIC0gNTsKLQkJICAgIGxnX2FsaWduIDwgU0NfTEdfTEFSR0Vf TUlOQ0xBU1MgKyA1OyArK2xnX2FsaWduKSB7Ci0JCQl0ZXN0X3N6aW5kX2FsaWduZWRfd3JhcHBl cihpbmQsIGxnX2FsaWduKTsKLQkJfQotCX0KLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lk KSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfcHJvZl9zdGF0cywKLQkgICAgdGVzdF9wcm9m X3N0YXRzX2FsaWduZWQpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N0YXRzLnNoIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zfc3RhdHMuc2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYzgxOWIuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2Zfc3RhdHMuc2gKKysrIC9k ZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1pZiBbICJ4JHtlbmFibGVfcHJv Zn0iID0gIngxIiBdIDsgdGhlbgotICBleHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9m X2FjdGl2ZTp0cnVlLGxnX3Byb2Zfc2FtcGxlOjAscHJvZl9zdGF0czp0cnVlIgotZmkKCmRpZmYg LS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQv cHJvZl9zeXNfdGhyZWFkX25hbWUuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9j LTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N5c190aHJlYWRfbmFtZS5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBhZmZjNzg4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N5c190aHJlYWRfbmFtZS5jCisrKyAv ZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5o IgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcHJvZl9zeXMuaCIKLQotc3RhdGljIGNv bnN0IGNoYXIgKnRlc3RfdGhyZWFkX25hbWUgPSAidGVzdF9uYW1lIjsKLQotc3RhdGljIGludAot dGVzdF9wcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkX2Vycm9yKGNoYXIgKmJ1Ziwgc2l6ZV90IGxp bWl0KSB7Ci0JcmV0dXJuIEVOT1NZUzsKLX0KLQotc3RhdGljIGludAotdGVzdF9wcm9mX3N5c190 aHJlYWRfbmFtZV9yZWFkKGNoYXIgKmJ1Ziwgc2l6ZV90IGxpbWl0KSB7Ci0JYXNzZXJ0KHN0cmxl bih0ZXN0X3RocmVhZF9uYW1lKSA8IGxpbWl0KTsKLQlzdHJuY3B5KGJ1ZiwgdGVzdF90aHJlYWRf bmFtZSwgbGltaXQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10ZXN0X3Byb2Zfc3lz X3RocmVhZF9uYW1lX3JlYWRfY2xlYXIoY2hhciAqYnVmLCBzaXplX3QgbGltaXQpIHsKLQlhc3Nl cnQobGltaXQgPiAwKTsKLQlidWZbMF0gPSAnXDAnOwotCXJldHVybiAwOwotfQotCi1URVNUX0JF R0lOKHRlc3RfcHJvZl9zeXNfdGhyZWFkX25hbWUpIHsKLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19w cm9mKTsKLQotCWJvb2wgb2xkdmFsOwotCXNpemVfdCBzeiA9IHNpemVvZihvbGR2YWwpOwotCWFz c2VydF9kX2VxKG1hbGxjdGwoIm9wdC5wcm9mX3N5c190aHJlYWRfbmFtZSIsICZvbGR2YWwsICZz eiwgTlVMTCwgMCksCi0JICAgIDAsICJtYWxsY3RsIGZhaWxlZCIpOwotCWFzc2VydF90cnVlKG9s ZHZhbCwgIm9wdGlvbiB3YXMgbm90IHNldCBjb3JyZWN0bHkiKTsKLQotCWNvbnN0IGNoYXIgKnRo cmVhZF9uYW1lOwotCXN6ID0gc2l6ZW9mKHRocmVhZF9uYW1lKTsKLQlhc3NlcnRfZF9lcShtYWxs Y3RsKCJ0aHJlYWQucHJvZi5uYW1lIiwgJnRocmVhZF9uYW1lLCAmc3osIE5VTEwsIDApLCAwLAot CSAgICAibWFsbGN0bCByZWFkIGZvciB0aHJlYWQgbmFtZSBzaG91bGQgbm90IGZhaWwiKTsKLQll eHBlY3Rfc3RyX2VxKHRocmVhZF9uYW1lLCAiIiwgIkluaXRpYWwgdGhyZWFkIG5hbWUgc2hvdWxk IGJlIGVtcHR5Iik7Ci0KLQl0aHJlYWRfbmFtZSA9IHRlc3RfdGhyZWFkX25hbWU7Ci0JYXNzZXJ0 X2RfZXEobWFsbGN0bCgidGhyZWFkLnByb2YubmFtZSIsIE5VTEwsIE5VTEwsICZ0aHJlYWRfbmFt ZSwgc3opLAotCSAgICBFTk9FTlQsICJtYWxsY3RsIHdyaXRlIGZvciB0aHJlYWQgbmFtZSBzaG91 bGQgZmFpbCIpOwotCWFzc2VydF9wdHJfZXEodGhyZWFkX25hbWUsIHRlc3RfdGhyZWFkX25hbWUs Ci0JICAgICJUaHJlYWQgbmFtZSBzaG91bGQgbm90IGJlIHRvdWNoZWQiKTsKLQotCXByb2Zfc3lz X3RocmVhZF9uYW1lX3JlYWQgPSB0ZXN0X3Byb2Zfc3lzX3RocmVhZF9uYW1lX3JlYWRfZXJyb3I7 Ci0Jdm9pZCAqcCA9IG1hbGxvYygxKTsKLQlmcmVlKHApOwotCWFzc2VydF9kX2VxKG1hbGxjdGwo InRocmVhZC5wcm9mLm5hbWUiLCAmdGhyZWFkX25hbWUsICZzeiwgTlVMTCwgMCksIDAsCi0JICAg ICJtYWxsY3RsIHJlYWQgZm9yIHRocmVhZCBuYW1lIHNob3VsZCBub3QgZmFpbCIpOwotCWFzc2Vy dF9zdHJfZXEodGhyZWFkX25hbWUsICIiLAotCSAgICAiVGhyZWFkIG5hbWUgc2hvdWxkIHN0YXkg dGhlIHNhbWUgaWYgdGhlIHN5c3RlbSBjYWxsIGZhaWxzIik7Ci0KLQlwcm9mX3N5c190aHJlYWRf bmFtZV9yZWFkID0gdGVzdF9wcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkOwotCXAgPSBtYWxsb2Mo MSk7Ci0JZnJlZShwKTsKLQlhc3NlcnRfZF9lcShtYWxsY3RsKCJ0aHJlYWQucHJvZi5uYW1lIiwg JnRocmVhZF9uYW1lLCAmc3osIE5VTEwsIDApLCAwLAotCSAgICAibWFsbGN0bCByZWFkIGZvciB0 aHJlYWQgbmFtZSBzaG91bGQgbm90IGZhaWwiKTsKLQlhc3NlcnRfc3RyX2VxKHRocmVhZF9uYW1l LCB0ZXN0X3RocmVhZF9uYW1lLAotCSAgICAiVGhyZWFkIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQg aWYgdGhlIHN5c3RlbSBjYWxsIHN1Y2NlZWRzIik7Ci0KLQlwcm9mX3N5c190aHJlYWRfbmFtZV9y ZWFkID0gdGVzdF9wcm9mX3N5c190aHJlYWRfbmFtZV9yZWFkX2NsZWFyOwotCXAgPSBtYWxsb2Mo MSk7Ci0JZnJlZShwKTsKLQlhc3NlcnRfZF9lcShtYWxsY3RsKCJ0aHJlYWQucHJvZi5uYW1lIiwg JnRocmVhZF9uYW1lLCAmc3osIE5VTEwsIDApLCAwLAotCSAgICAibWFsbGN0bCByZWFkIGZvciB0 aHJlYWQgbmFtZSBzaG91bGQgbm90IGZhaWwiKTsKLQlleHBlY3Rfc3RyX2VxKHRocmVhZF9uYW1l LCAiIiwgIlRocmVhZCBuYW1lIHNob3VsZCBiZSB1cGRhdGVkIGlmIHRoZSAiCi0JICAgICJzeXN0 ZW0gY2FsbCByZXR1cm5zIGEgZGlmZmVyZW50IG5hbWUiKTsKLX0KLVRFU1RfRU5ECi0KLWludAot bWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfcHJvZl9zeXNfdGhyZWFkX25h bWUpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9wcm9mX3N5c190aHJlYWRfbmFtZS5zaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3N5c190aHJlYWRfbmFtZS5zaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYwMmE4YS4uMDAwMDAwMAotLS0gYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl9zeXNfdGhy ZWFkX25hbWUuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1p ZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngxIiBdIDsgdGhlbgotICBleHBvcnQgTUFMTE9DX0NP TkY9InByb2Y6dHJ1ZSxwcm9mX2FjdGl2ZTp0cnVlLGxnX3Byb2Zfc2FtcGxlOjAscHJvZl9zeXNf dGhyZWFkX25hbWU6dHJ1ZSIKLWZpCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfdGN0eC5jIGIvMzg5LWRzLWJhc2UtMy4z LjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Byb2ZfdGN0eC5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBlMGVmZGMzLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RjdHguYworKysgL2Rldi9u dWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQot I2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Byb2ZfZGF0YS5oIgotCi1URVNUX0JFR0lOKHRl c3RfcHJvZl9yZWFsbG9jKSB7Ci0JdHNkX3QgKnRzZDsKLQlpbnQgZmxhZ3M7Ci0Jdm9pZCAqcCwg KnE7Ci0JcHJvZl9pbmZvX3QgcHJvZl9pbmZvX3AsIHByb2ZfaW5mb19xOwotCXByb2ZfY250X3Qg Y250XzAsIGNudF8xLCBjbnRfMiwgY250XzM7Ci0KLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9m KTsKLQotCXRzZCA9IHRzZF9mZXRjaCgpOwotCWZsYWdzID0gTUFMTE9DWF9UQ0FDSEVfTk9ORTsK LQotCXByb2ZfY250X2FsbCgmY250XzApOwotCXAgPSBtYWxsb2N4KDEwMjQsIGZsYWdzKTsKLQll eHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7Ci0J cHJvZl9pbmZvX2dldCh0c2QsIHAsIE5VTEwsICZwcm9mX2luZm9fcCk7Ci0JZXhwZWN0X3B0cl9u ZShwcm9mX2luZm9fcC5hbGxvY190Y3R4LCAocHJvZl90Y3R4X3QgKikodWludHB0cl90KTFVLAot CSAgICAiRXhwZWN0ZWQgdmFsaWQgdGN0eCIpOwotCXByb2ZfY250X2FsbCgmY250XzEpOwotCWV4 cGVjdF91NjRfZXEoY250XzAuY3Vyb2JqcyArIDEsIGNudF8xLmN1cm9ianMsCi0JICAgICJBbGxv Y2F0aW9uIHNob3VsZCBoYXZlIGluY3JlYXNlZCBzYW1wbGUgc2l6ZSIpOwotCi0JcSA9IHJhbGxv Y3gocCwgMjA0OCwgZmxhZ3MpOwotCWV4cGVjdF9wdHJfbmUocCwgcSwgIkV4cGVjdGVkIG1vdmUi KTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIHJtYWxsb2N4KCkgZmFpbHVy ZSIpOwotCXByb2ZfaW5mb19nZXQodHNkLCBxLCBOVUxMLCAmcHJvZl9pbmZvX3EpOwotCWV4cGVj dF9wdHJfbmUocHJvZl9pbmZvX3EuYWxsb2NfdGN0eCwgKHByb2ZfdGN0eF90ICopKHVpbnRwdHJf dCkxVSwKLQkgICAgIkV4cGVjdGVkIHZhbGlkIHRjdHgiKTsKLQlwcm9mX2NudF9hbGwoJmNudF8y KTsKLQlleHBlY3RfdTY0X2VxKGNudF8xLmN1cm9ianMsIGNudF8yLmN1cm9ianMsCi0JICAgICJS ZWFsbG9jYXRpb24gc2hvdWxkIG5vdCBoYXZlIGNoYW5nZWQgc2FtcGxlIHNpemUiKTsKLQotCWRh bGxvY3gocSwgZmxhZ3MpOwotCXByb2ZfY250X2FsbCgmY250XzMpOwotCWV4cGVjdF91NjRfZXEo Y250XzAuY3Vyb2JqcywgY250XzMuY3Vyb2JqcywKLQkgICAgIlNhbXBsZSBzaXplIHNob3VsZCBo YXZlIHJldHVybmVkIHRvIGJhc2UgbGV2ZWwiKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2 b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5jeSgKLQkgICAgdGVzdF9wcm9mX3JlYWxs b2MpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9wcm9mX3RjdHguc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl90Y3R4LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA0ODVmOWJmLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RjdHguc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1 ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1pZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngxIiBdIDsg dGhlbgotICBleHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9mX2FjdGl2ZTp0cnVlLGxn X3Byb2Zfc2FtcGxlOjAiCi1maQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RocmVhZF9uYW1lLmMgYi8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcHJvZl90aHJlYWRfbmFtZS5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzQ2MTRmLi4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RocmVh ZF9uYW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotI2luY2x1ZGUgInRlc3Qv amVtYWxsb2NfdGVzdC5oIgotCi1zdGF0aWMgdm9pZAotbWFsbGN0bF90aHJlYWRfbmFtZV9nZXRf aW1wbChjb25zdCBjaGFyICp0aHJlYWRfbmFtZV9leHBlY3RlZCwgY29uc3QgY2hhciAqZnVuYywK LSAgICBpbnQgbGluZSkgewotCWNvbnN0IGNoYXIgKnRocmVhZF9uYW1lX29sZDsKLQlzaXplX3Qg c3o7Ci0KLQlzeiA9IHNpemVvZih0aHJlYWRfbmFtZV9vbGQpOwotCWV4cGVjdF9kX2VxKG1hbGxj dGwoInRocmVhZC5wcm9mLm5hbWUiLCAodm9pZCAqKSZ0aHJlYWRfbmFtZV9vbGQsICZzeiwKLQkg ICAgTlVMTCwgMCksIDAsCi0JICAgICIlcygpOiVkOiBVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVy ZSByZWFkaW5nIHRocmVhZC5wcm9mLm5hbWUiLAotCSAgICBmdW5jLCBsaW5lKTsKLQlleHBlY3Rf c3RyX2VxKHRocmVhZF9uYW1lX29sZCwgdGhyZWFkX25hbWVfZXhwZWN0ZWQsCi0JICAgICIlcygp OiVkOiBVbmV4cGVjdGVkIHRocmVhZC5wcm9mLm5hbWUgdmFsdWUiLCBmdW5jLCBsaW5lKTsKLX0K LSNkZWZpbmUgbWFsbGN0bF90aHJlYWRfbmFtZV9nZXQoYSkJCQkJCVwKLQltYWxsY3RsX3RocmVh ZF9uYW1lX2dldF9pbXBsKGEsIF9fZnVuY19fLCBfX0xJTkVfXykKLQotc3RhdGljIHZvaWQKLW1h bGxjdGxfdGhyZWFkX25hbWVfc2V0X2ltcGwoY29uc3QgY2hhciAqdGhyZWFkX25hbWUsIGNvbnN0 IGNoYXIgKmZ1bmMsCi0gICAgaW50IGxpbmUpIHsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJl YWQucHJvZi5uYW1lIiwgTlVMTCwgTlVMTCwKLQkgICAgKHZvaWQgKikmdGhyZWFkX25hbWUsIHNp emVvZih0aHJlYWRfbmFtZSkpLCAwLAotCSAgICAiJXMoKTolZDogVW5leHBlY3RlZCBtYWxsY3Rs IGZhaWx1cmUgd3JpdGluZyB0aHJlYWQucHJvZi5uYW1lIiwKLQkgICAgZnVuYywgbGluZSk7Ci0J bWFsbGN0bF90aHJlYWRfbmFtZV9nZXRfaW1wbCh0aHJlYWRfbmFtZSwgZnVuYywgbGluZSk7Ci19 Ci0jZGVmaW5lIG1hbGxjdGxfdGhyZWFkX25hbWVfc2V0KGEpCQkJCQlcCi0JbWFsbGN0bF90aHJl YWRfbmFtZV9zZXRfaW1wbChhLCBfX2Z1bmNfXywgX19MSU5FX18pCi0KLVRFU1RfQkVHSU4odGVz dF9wcm9mX3RocmVhZF9uYW1lX3ZhbGlkYXRpb24pIHsKLQljb25zdCBjaGFyICp0aHJlYWRfbmFt ZTsKLQotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc2tpcF9pZihvcHRfcHJv Zl9zeXNfdGhyZWFkX25hbWUpOwotCi0JbWFsbGN0bF90aHJlYWRfbmFtZV9nZXQoIiIpOwotCW1h bGxjdGxfdGhyZWFkX25hbWVfc2V0KCJoaSB0aGVyZSIpOwotCi0JLyogTlVMTCBpbnB1dCBzaG91 bGRuJ3QgYmUgYWxsb3dlZC4gKi8KLQl0aHJlYWRfbmFtZSA9IE5VTEw7Ci0JZXhwZWN0X2RfZXEo bWFsbGN0bCgidGhyZWFkLnByb2YubmFtZSIsIE5VTEwsIE5VTEwsCi0JICAgICh2b2lkICopJnRo cmVhZF9uYW1lLCBzaXplb2YodGhyZWFkX25hbWUpKSwgRUZBVUxULAotCSAgICAiVW5leHBlY3Rl ZCBtYWxsY3RsIHJlc3VsdCB3cml0aW5nIFwiJXNcIiB0byB0aHJlYWQucHJvZi5uYW1lIiwKLQkg ICAgdGhyZWFkX25hbWUpOwotCi0JLyogJ1xuJyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4gKi8KLQl0 aHJlYWRfbmFtZSA9ICJoaVxudGhlcmUiOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5w cm9mLm5hbWUiLCBOVUxMLCBOVUxMLAotCSAgICAodm9pZCAqKSZ0aHJlYWRfbmFtZSwgc2l6ZW9m KHRocmVhZF9uYW1lKSksIEVGQVVMVCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCByZXN1bHQg d3JpdGluZyBcIiVzXCIgdG8gdGhyZWFkLnByb2YubmFtZSIsCi0JICAgIHRocmVhZF9uYW1lKTsK LQotCS8qIFNpbXVsdGFuZW91cyByZWFkL3dyaXRlIHNob3VsZG4ndCBiZSBhbGxvd2VkLiAqLwot CXsKLQkJY29uc3QgY2hhciAqdGhyZWFkX25hbWVfb2xkOwotCQlzaXplX3Qgc3o7Ci0KLQkJc3og PSBzaXplb2YodGhyZWFkX25hbWVfb2xkKTsKLQkJZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFk LnByb2YubmFtZSIsCi0JCSAgICAodm9pZCAqKSZ0aHJlYWRfbmFtZV9vbGQsICZzeiwgKHZvaWQg KikmdGhyZWFkX25hbWUsCi0JCSAgICBzaXplb2YodGhyZWFkX25hbWUpKSwgRVBFUk0sCi0JCSAg ICAiVW5leHBlY3RlZCBtYWxsY3RsIHJlc3VsdCB3cml0aW5nIFwiJXNcIiB0byAiCi0JCSAgICAi dGhyZWFkLnByb2YubmFtZSIsIHRocmVhZF9uYW1lKTsKLQl9Ci0KLQltYWxsY3RsX3RocmVhZF9u YW1lX3NldCgiIik7Ci19Ci1URVNUX0VORAotCi0jZGVmaW5lIE5USFJFQURTCTQKLSNkZWZpbmUg TlJFU0VUCQkyNQotc3RhdGljIHZvaWQgKgotdGhkX3N0YXJ0KHZvaWQgKnZhcmcpIHsKLQl1bnNp Z25lZCB0aGRfaW5kID0gKih1bnNpZ25lZCAqKXZhcmc7Ci0JY2hhciB0aHJlYWRfbmFtZVsxNl0g PSAiIjsKLQl1bnNpZ25lZCBpOwotCi0JbWFsbG9jX3NucHJpbnRmKHRocmVhZF9uYW1lLCBzaXpl b2YodGhyZWFkX25hbWUpLCAidGhyZWFkICV1IiwgdGhkX2luZCk7Ci0KLQltYWxsY3RsX3RocmVh ZF9uYW1lX2dldCgiIik7Ci0JbWFsbGN0bF90aHJlYWRfbmFtZV9zZXQodGhyZWFkX25hbWUpOwot Ci0JZm9yIChpID0gMDsgaSA8IE5SRVNFVDsgaSsrKSB7Ci0JCWV4cGVjdF9kX2VxKG1hbGxjdGwo InByb2YucmVzZXQiLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwgMCwKLQkJICAgICJVbmV4cGVjdGVk IGVycm9yIHdoaWxlIHJlc2V0dGluZyBoZWFwIHByb2ZpbGUgZGF0YSIpOwotCQltYWxsY3RsX3Ro cmVhZF9uYW1lX2dldCh0aHJlYWRfbmFtZSk7Ci0JfQotCi0JbWFsbGN0bF90aHJlYWRfbmFtZV9z ZXQodGhyZWFkX25hbWUpOwotCW1hbGxjdGxfdGhyZWFkX25hbWVfc2V0KCIiKTsKLQotCXJldHVy biBOVUxMOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcHJvZl90aHJlYWRfbmFtZV90aHJlYWRlZCkg ewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc2tpcF9pZihvcHRfcHJvZl9z eXNfdGhyZWFkX25hbWUpOwotCi0JdGhkX3QgdGhkc1tOVEhSRUFEU107Ci0JdW5zaWduZWQgdGhk X2FyZ3NbTlRIUkVBRFNdOwotCXVuc2lnbmVkIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlRIUkVB RFM7IGkrKykgewotCQl0aGRfYXJnc1tpXSA9IGk7Ci0JCXRoZF9jcmVhdGUoJnRoZHNbaV0sIHRo ZF9zdGFydCwgKHZvaWQgKikmdGhkX2FyZ3NbaV0pOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTlRI UkVBRFM7IGkrKykgewotCQl0aGRfam9pbih0aGRzW2ldLCBOVUxMKTsKLQl9Ci19Ci1URVNUX0VO RAotI3VuZGVmIE5USFJFQURTCi0jdW5kZWYgTlJFU0VUCi0KLWludAotbWFpbih2b2lkKSB7Ci0J cmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfcHJvZl90aHJlYWRfbmFtZV92YWxpZGF0aW9uLAotCSAg ICB0ZXN0X3Byb2ZfdGhyZWFkX25hbWVfdGhyZWFkZWQpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9wcm9mX3RocmVhZF9u YW1lLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3Byb2ZfdGhyZWFkX25hbWUuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OGMx MDUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3Byb2ZfdGhyZWFkX25hbWUuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAg QEAKLSMhL2Jpbi9zaAotCi1pZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngxIiBdIDsgdGhlbgot ICBleHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxwcm9mX2FjdGl2ZTpmYWxzZSIKLWZpCgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3Bzc2V0LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvcHNzZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmNzIwMS4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvcHNzZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDc0OCArMCwwIEBACi0jaW5jbHVkZSAidGVz dC9qZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9wc3NldC5o IgotCi0jZGVmaW5lIFBBR0VTTEFCX0FERFIgKCh2b2lkICopKDEyMzQgKiBIVUdFUEFHRSkpCi0j ZGVmaW5lIFBBR0VTTEFCX0FHRSA1Njc4Ci0KLSNkZWZpbmUgQUxMT0NfQVJFTkFfSU5EIDExMQot I2RlZmluZSBBTExPQ19FU04gMjIyCi0KLXN0YXRpYyB2b2lkCi1lZGF0YV9pbml0X3Rlc3QoZWRh dGFfdCAqZWRhdGEpIHsKLQltZW1zZXQoZWRhdGEsIDAsIHNpemVvZigqZWRhdGEpKTsKLQllZGF0 YV9hcmVuYV9pbmRfc2V0KGVkYXRhLCBBTExPQ19BUkVOQV9JTkQpOwotCWVkYXRhX2Vzbl9zZXQo ZWRhdGEsIEFMTE9DX0VTTik7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3Bzc2V0X2Zha2VfcHVy Z2UoaHBkYXRhX3QgKnBzKSB7Ci0JaHBkYXRhX3B1cmdlX3N0YXRlX3QgcHVyZ2Vfc3RhdGU7Ci0J aHBkYXRhX2FsbG9jX2FsbG93ZWRfc2V0KHBzLCBmYWxzZSk7Ci0JaHBkYXRhX3B1cmdlX2JlZ2lu KHBzLCAmcHVyZ2Vfc3RhdGUpOwotCXZvaWQgKmFkZHI7Ci0Jc2l6ZV90IHNpemU7Ci0Jd2hpbGUg KGhwZGF0YV9wdXJnZV9uZXh0KHBzLCAmcHVyZ2Vfc3RhdGUsICZhZGRyLCAmc2l6ZSkpIHsKLQl9 Ci0JaHBkYXRhX3B1cmdlX2VuZChwcywgJnB1cmdlX3N0YXRlKTsKLQlocGRhdGFfYWxsb2NfYWxs b3dlZF9zZXQocHMsIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF9wc3NldF9hbGxvY19u ZXcocHNzZXRfdCAqcHNzZXQsIGhwZGF0YV90ICpwcywgZWRhdGFfdCAqcl9lZGF0YSwKLSAgICBz aXplX3Qgc2l6ZSkgewotCWhwZGF0YV9hc3NlcnRfZW1wdHkocHMpOwotCi0JdGVzdF9wc3NldF9m YWtlX3B1cmdlKHBzKTsKLQotCXBzc2V0X2luc2VydChwc3NldCwgcHMpOwotCXBzc2V0X3VwZGF0 ZV9iZWdpbihwc3NldCwgcHMpOwotCi0gICAgICAgIHZvaWQgKmFkZHIgPSBocGRhdGFfcmVzZXJ2 ZV9hbGxvYyhwcywgc2l6ZSk7Ci0gICAgICAgIGVkYXRhX2luaXQocl9lZGF0YSwgZWRhdGFfYXJl bmFfaW5kX2dldChyX2VkYXRhKSwgYWRkciwgc2l6ZSwKLQkgICAgLyogc2xhYiAqLyBmYWxzZSwg U0NfTlNJWkVTLCAvKiBzbiAqLyAwLCBleHRlbnRfc3RhdGVfYWN0aXZlLAotICAgICAgICAgICAg LyogemVyb2VkICovIGZhbHNlLCAvKiBjb21taXR0ZWQgKi8gdHJ1ZSwgRVhURU5UX1BBSV9IUEEs Ci0gICAgICAgICAgICBFWFRFTlRfTk9UX0hFQUQpOwotICAgICAgICBlZGF0YV9wc19zZXQocl9l ZGF0YSwgcHMpOwotCXBzc2V0X3VwZGF0ZV9lbmQocHNzZXQsIHBzKTsKLX0KLQotc3RhdGljIGJv b2wKLXRlc3RfcHNzZXRfYWxsb2NfcmV1c2UocHNzZXRfdCAqcHNzZXQsIGVkYXRhX3QgKnJfZWRh dGEsIHNpemVfdCBzaXplKSB7Ci0JaHBkYXRhX3QgKnBzID0gcHNzZXRfcGlja19hbGxvYyhwc3Nl dCwgc2l6ZSk7Ci0JaWYgKHBzID09IE5VTEwpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXBzc2V0 X3VwZGF0ZV9iZWdpbihwc3NldCwgcHMpOwotCXZvaWQgKmFkZHIgPSBocGRhdGFfcmVzZXJ2ZV9h bGxvYyhwcywgc2l6ZSk7Ci0JZWRhdGFfaW5pdChyX2VkYXRhLCBlZGF0YV9hcmVuYV9pbmRfZ2V0 KHJfZWRhdGEpLCBhZGRyLCBzaXplLAotCSAgICAvKiBzbGFiICovIGZhbHNlLCBTQ19OU0laRVMs IC8qIHNuICovIDAsIGV4dGVudF9zdGF0ZV9hY3RpdmUsCi0JICAgIC8qIHplcm9lZCAqLyBmYWxz ZSwgLyogY29tbWl0dGVkICovIHRydWUsIEVYVEVOVF9QQUlfSFBBLAotCSAgICBFWFRFTlRfTk9U X0hFQUQpOwotCWVkYXRhX3BzX3NldChyX2VkYXRhLCBwcyk7Ci0JcHNzZXRfdXBkYXRlX2VuZChw c3NldCwgcHMpOwotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGhwZGF0YV90ICoKLXRlc3Rf cHNzZXRfZGFsbG9jKHBzc2V0X3QgKnBzc2V0LCBlZGF0YV90ICplZGF0YSkgewotCWhwZGF0YV90 ICpwcyA9IGVkYXRhX3BzX2dldChlZGF0YSk7Ci0JcHNzZXRfdXBkYXRlX2JlZ2luKHBzc2V0LCBw cyk7Ci0JaHBkYXRhX3VucmVzZXJ2ZShwcywgZWRhdGFfYWRkcl9nZXQoZWRhdGEpLCBlZGF0YV9z aXplX2dldChlZGF0YSkpOwotCXBzc2V0X3VwZGF0ZV9lbmQocHNzZXQsIHBzKTsKLQlpZiAoaHBk YXRhX2VtcHR5KHBzKSkgewotCQlwc3NldF9yZW1vdmUocHNzZXQsIHBzKTsKLQkJcmV0dXJuIHBz OwotCX0gZWxzZSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWVkYXRh X2V4cGVjdChlZGF0YV90ICplZGF0YSwgc2l6ZV90IHBhZ2Vfb2Zmc2V0LCBzaXplX3QgcGFnZV9j bnQpIHsKLQkvKgotCSAqIE5vdGUgdGhhdCBhbGxvY2F0aW9ucyBzaG91bGQgZ2V0IHRoZSBhcmVu YSBpbmQgb2YgdGhlaXIgaG9tZQotCSAqIGFyZW5hLCAqbm90KiB0aGUgYXJlbmEgaW5kIG9mIHRo ZSBwYWdlc2xhYiBhbGxvY2F0b3IuCi0JICovCi0JZXhwZWN0X3VfZXEoQUxMT0NfQVJFTkFfSU5E LCBlZGF0YV9hcmVuYV9pbmRfZ2V0KGVkYXRhKSwKLQkgICAgIkFyZW5hIGluZCBjaGFuZ2VkIik7 Ci0JZXhwZWN0X3B0cl9lcSgKLQkgICAgKHZvaWQgKikoKHVpbnRwdHJfdClQQUdFU0xBQl9BRERS ICsgKHBhZ2Vfb2Zmc2V0IDw8IExHX1BBR0UpKSwKLQkgICAgZWRhdGFfYWRkcl9nZXQoZWRhdGEp LCAiRGlkbid0IGFsbG9jYXRlIGluIG9yZGVyIik7Ci0JZXhwZWN0X3p1X2VxKHBhZ2VfY250IDw8 IExHX1BBR0UsIGVkYXRhX3NpemVfZ2V0KGVkYXRhKSwgIiIpOwotCWV4cGVjdF9mYWxzZShlZGF0 YV9zbGFiX2dldChlZGF0YSksICIiKTsKLQlleHBlY3RfdV9lcShTQ19OU0laRVMsIGVkYXRhX3N6 aW5kX2dldF9tYXliZV9pbnZhbGlkKGVkYXRhKSwKLQkgICAgIiIpOwotCWV4cGVjdF91NjRfZXEo MCwgZWRhdGFfc25fZ2V0KGVkYXRhKSwgIiIpOwotCWV4cGVjdF9kX2VxKGVkYXRhX3N0YXRlX2dl dChlZGF0YSksIGV4dGVudF9zdGF0ZV9hY3RpdmUsICIiKTsKLQlleHBlY3RfZmFsc2UoZWRhdGFf emVyb2VkX2dldChlZGF0YSksICIiKTsKLQlleHBlY3RfdHJ1ZShlZGF0YV9jb21taXR0ZWRfZ2V0 KGVkYXRhKSwgIiIpOwotCWV4cGVjdF9kX2VxKEVYVEVOVF9QQUlfSFBBLCBlZGF0YV9wYWlfZ2V0 KGVkYXRhKSwgIiIpOwotCWV4cGVjdF9mYWxzZShlZGF0YV9pc19oZWFkX2dldChlZGF0YSksICIi KTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X2VtcHR5KSB7Ci0JYm9vbCBlcnI7Ci0JaHBkYXRhX3Qg cGFnZXNsYWI7Ci0JaHBkYXRhX2luaXQoJnBhZ2VzbGFiLCBQQUdFU0xBQl9BRERSLCBQQUdFU0xB Ql9BR0UpOwotCi0JZWRhdGFfdCBhbGxvYzsKLQllZGF0YV9pbml0X3Rlc3QoJmFsbG9jKTsKLQot CXBzc2V0X3QgcHNzZXQ7Ci0JcHNzZXRfaW5pdCgmcHNzZXQpOwotCi0JLyogRW1wdHkgcHNzZXQg c2hvdWxkIHJldHVybiBmYWlsIGFsbG9jYXRpb25zLiAqLwotCWVyciA9IHRlc3RfcHNzZXRfYWxs b2NfcmV1c2UoJnBzc2V0LCAmYWxsb2MsIFBBR0UpOwotCWV4cGVjdF90cnVlKGVyciwgIkVtcHR5 IHBzc2V0IHN1Y2NlZWRlZCBpbiBhbiBhbGxvY2F0aW9uLiIpOwotfQotVEVTVF9FTkQKLQotVEVT VF9CRUdJTih0ZXN0X2ZpbGwpIHsKLQlib29sIGVycjsKLQotCWhwZGF0YV90IHBhZ2VzbGFiOwot CWhwZGF0YV9pbml0KCZwYWdlc2xhYiwgUEFHRVNMQUJfQUREUiwgUEFHRVNMQUJfQUdFKTsKLQot CWVkYXRhX3QgYWxsb2NbSFVHRVBBR0VfUEFHRVNdOwotCi0JcHNzZXRfdCBwc3NldDsKLQlwc3Nl dF9pbml0KCZwc3NldCk7Ci0KLQllZGF0YV9pbml0X3Rlc3QoJmFsbG9jWzBdKTsKLQl0ZXN0X3Bz c2V0X2FsbG9jX25ldygmcHNzZXQsICZwYWdlc2xhYiwgJmFsbG9jWzBdLCBQQUdFKTsKLQlmb3Ig KHNpemVfdCBpID0gMTsgaSA8IEhVR0VQQUdFX1BBR0VTOyBpKyspIHsKLQkJZWRhdGFfaW5pdF90 ZXN0KCZhbGxvY1tpXSk7Ci0JCWVyciA9IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAm YWxsb2NbaV0sIFBBR0UpOwotCQlleHBlY3RfZmFsc2UoZXJyLCAiTm9uZW1wdHkgcHNzZXQgZmFp bGVkIHBhZ2UgYWxsb2NhdGlvbi4iKTsKLQl9Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IEhV R0VQQUdFX1BBR0VTOyBpKyspIHsKLQkJZWRhdGFfdCAqZWRhdGEgPSAmYWxsb2NbaV07Ci0JCWVk YXRhX2V4cGVjdChlZGF0YSwgaSwgMSk7Ci0JfQotCi0JLyogVGhlIHBhZ2VzbGFiLCBhbmQgdGh1 cyBwc3NldCwgc2hvdWxkIG5vdyBoYXZlIG5vIGFsbG9jYXRpb25zLiAqLwotCWVkYXRhX3QgZXh0 cmFfYWxsb2M7Ci0JZWRhdGFfaW5pdF90ZXN0KCZleHRyYV9hbGxvYyk7Ci0JZXJyID0gdGVzdF9w c3NldF9hbGxvY19yZXVzZSgmcHNzZXQsICZleHRyYV9hbGxvYywgUEFHRSk7Ci0JZXhwZWN0X3Ry dWUoZXJyLCAiQWxsb2Mgc3VjY2VlZGVkIGV2ZW4gdGhvdWdoIHBzc2V0IHNob3VsZCBiZSBlbXB0 eSIpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3JldXNlKSB7Ci0JYm9vbCBlcnI7 Ci0JaHBkYXRhX3QgKnBzOwotCi0JaHBkYXRhX3QgcGFnZXNsYWI7Ci0JaHBkYXRhX2luaXQoJnBh Z2VzbGFiLCBQQUdFU0xBQl9BRERSLCBQQUdFU0xBQl9BR0UpOwotCi0JZWRhdGFfdCBhbGxvY1tI VUdFUEFHRV9QQUdFU107Ci0KLQlwc3NldF90IHBzc2V0OwotCXBzc2V0X2luaXQoJnBzc2V0KTsK LQotCWVkYXRhX2luaXRfdGVzdCgmYWxsb2NbMF0pOwotCXRlc3RfcHNzZXRfYWxsb2NfbmV3KCZw c3NldCwgJnBhZ2VzbGFiLCAmYWxsb2NbMF0sIFBBR0UpOwotCWZvciAoc2l6ZV90IGkgPSAxOyBp IDwgSFVHRVBBR0VfUEFHRVM7IGkrKykgewotCQllZGF0YV9pbml0X3Rlc3QoJmFsbG9jW2ldKTsK LQkJZXJyID0gdGVzdF9wc3NldF9hbGxvY19yZXVzZSgmcHNzZXQsICZhbGxvY1tpXSwgUEFHRSk7 Ci0JCWV4cGVjdF9mYWxzZShlcnIsICJOb25lbXB0eSBwc3NldCBmYWlsZWQgcGFnZSBhbGxvY2F0 aW9uLiIpOwotCX0KLQotCS8qIEZyZWUgb2RkIGluZGljZXMuICovCi0JZm9yIChzaXplX3QgaSA9 IDA7IGkgPCBIVUdFUEFHRV9QQUdFUzsgaSArKykgewotCQlpZiAoaSAlIDIgPT0gMCkgewotCQkJ Y29udGludWU7Ci0JCX0KLQkJcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxvY1tp XSk7Ci0JCWV4cGVjdF9wdHJfbnVsbChwcywgIk5vbmVtcHR5IHBhZ2VzbGFiIGV2aWN0ZWQiKTsK LQl9Ci0JLyogUmVhbGxvYyBpbnRvIHRoZW0uICovCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBI VUdFUEFHRV9QQUdFUzsgaSsrKSB7Ci0JCWlmIChpICUgMiA9PSAwKSB7Ci0JCQljb250aW51ZTsK LQkJfQotCQllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jW2ldLCBQ QUdFKTsKLQkJZXhwZWN0X2ZhbHNlKGVyciwgIk5vbmVtcHR5IHBzc2V0IGZhaWxlZCBwYWdlIGFs bG9jYXRpb24uIik7Ci0JCWVkYXRhX2V4cGVjdCgmYWxsb2NbaV0sIGksIDEpOwotCX0KLQkvKiBO b3csIGZyZWUgdGhlIHBhZ2VzIGF0IGluZGljZXMgMCBvciAxIG1vZCAyLiAqLwotCWZvciAoc2l6 ZV90IGkgPSAwOyBpIDwgSFVHRVBBR0VfUEFHRVM7IGkrKykgewotCQlpZiAoaSAlIDQgPiAxKSB7 Ci0JCQljb250aW51ZTsKLQkJfQotCQlwcyA9IHRlc3RfcHNzZXRfZGFsbG9jKCZwc3NldCwgJmFs bG9jW2ldKTsKLQkJZXhwZWN0X3B0cl9udWxsKHBzLCAiTm9uZW1wdHkgcGFnZXNsYWIgZXZpY3Rl ZCIpOwotCX0KLQkvKiBBbmQgcmVhbGxvYyAyLXBhZ2UgYWxsb2NhdGlvbnMgaW50byB0aGVtLiAq LwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSFVHRVBBR0VfUEFHRVM7IGkrKykgewotCQlpZiAo aSAlIDQgIT0gMCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJZXJyID0gdGVzdF9wc3NldF9hbGxv Y19yZXVzZSgmcHNzZXQsICZhbGxvY1tpXSwgMiAqIFBBR0UpOwotCQlleHBlY3RfZmFsc2UoZXJy LCAiTm9uZW1wdHkgcHNzZXQgZmFpbGVkIHBhZ2UgYWxsb2NhdGlvbi4iKTsKLQkJZWRhdGFfZXhw ZWN0KCZhbGxvY1tpXSwgaSwgMik7Ci0JfQotCS8qIEZyZWUgYWxsIHRoZSAyLXBhZ2UgYWxsb2Nh dGlvbnMuICovCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIVUdFUEFHRV9QQUdFUzsgaSsrKSB7 Ci0JCWlmIChpICUgNCAhPSAwKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlwcyA9IHRlc3RfcHNz ZXRfZGFsbG9jKCZwc3NldCwgJmFsbG9jW2ldKTsKLQkJZXhwZWN0X3B0cl9udWxsKHBzLCAiTm9u ZW1wdHkgcGFnZXNsYWIgZXZpY3RlZCIpOwotCX0KLQkvKgotCSAqIEZyZWUgdXAgYSAxLXBhZ2Ug aG9sZSBuZXh0IHRvIGEgMi1wYWdlIGhvbGUsIGJ1dCBzb21ld2hlcmUgaW4gdGhlCi0JICogbWlk ZGxlIG9mIHRoZSBwYWdlc2xhYi4gIEluZGV4IDExIHNob3VsZCBiZSByaWdodCBiZWZvcmUgc3Vj aCBhIGhvbGUKLQkgKiAoc2luY2UgMTIgJSA0ID09IDApLgotCSAqLwotCXNpemVfdCBpbmRleF9v Zl8zID0gMTE7Ci0JcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxvY1tpbmRleF9v Zl8zXSk7Ci0JZXhwZWN0X3B0cl9udWxsKHBzLCAiTm9uZW1wdHkgcGFnZXNsYWIgZXZpY3RlZCIp OwotCWVyciA9IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAmYWxsb2NbaW5kZXhfb2Zf M10sIDMgKiBQQUdFKTsKLQlleHBlY3RfZmFsc2UoZXJyLCAiU2hvdWxkIGhhdmUgYmVlbiBhYmxl IHRvIGZpbmQgYWxsb2MuIik7Ci0JZWRhdGFfZXhwZWN0KCZhbGxvY1tpbmRleF9vZl8zXSwgaW5k ZXhfb2ZfMywgMyk7Ci0KLQkvKgotCSAqIEZyZWUgdXAgYSA0LXBhZ2UgaG9sZSBhdCB0aGUgZW5k LiAgUmVjYWxsIHRoYXQgdGhlIHBhZ2VzIGF0IG9mZnNldHMgMAotCSAqIGFuZCAxIG1vZCA0IHdl cmUgZnJlZWQgYWJvdmUsIHNvIHdlIGp1c3QgaGF2ZSB0byBmcmVlIHRoZSBsYXN0Ci0JICogYWxs b2NhdGlvbnMuCi0JICovCi0JcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxvY1tI VUdFUEFHRV9QQUdFUyAtIDFdKTsKLQlleHBlY3RfcHRyX251bGwocHMsICJOb25lbXB0eSBwYWdl c2xhYiBldmljdGVkIik7Ci0JcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxvY1tI VUdFUEFHRV9QQUdFUyAtIDJdKTsKLQlleHBlY3RfcHRyX251bGwocHMsICJOb25lbXB0eSBwYWdl c2xhYiBldmljdGVkIik7Ci0KLQkvKiBNYWtlIHN1cmUgd2UgY2FuIHNhdGlzZnkgYW4gYWxsb2Nh dGlvbiBhdCB0aGUgdmVyeSBlbmQgb2YgYSBzbGFiLiAqLwotCXNpemVfdCBpbmRleF9vZl80ID0g SFVHRVBBR0VfUEFHRVMgLSA0OwotCWVyciA9IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UoJnBzc2V0 LCAmYWxsb2NbaW5kZXhfb2ZfNF0sIDQgKiBQQUdFKTsKLQlleHBlY3RfZmFsc2UoZXJyLCAiU2hv dWxkIGhhdmUgYmVlbiBhYmxlIHRvIGZpbmQgYWxsb2MuIik7Ci0JZWRhdGFfZXhwZWN0KCZhbGxv Y1tpbmRleF9vZl80XSwgaW5kZXhfb2ZfNCwgNCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lO KHRlc3RfZXZpY3QpIHsKLQlib29sIGVycjsKLQlocGRhdGFfdCAqcHM7Ci0KLQlocGRhdGFfdCBw YWdlc2xhYjsKLQlocGRhdGFfaW5pdCgmcGFnZXNsYWIsIFBBR0VTTEFCX0FERFIsIFBBR0VTTEFC X0FHRSk7Ci0KLQllZGF0YV90IGFsbG9jW0hVR0VQQUdFX1BBR0VTXTsKLQotCXBzc2V0X3QgcHNz ZXQ7Ci0JcHNzZXRfaW5pdCgmcHNzZXQpOwotCi0JLyogQWxsb2MgdGhlIHdob2xlIHNsYWIuICov Ci0JZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1swXSk7Ci0JdGVzdF9wc3NldF9hbGxvY19uZXcoJnBz c2V0LCAmcGFnZXNsYWIsICZhbGxvY1swXSwgUEFHRSk7Ci0JZm9yIChzaXplX3QgaSA9IDE7IGkg PCBIVUdFUEFHRV9QQUdFUzsgaSsrKSB7Ci0JCWVkYXRhX2luaXRfdGVzdCgmYWxsb2NbaV0pOwot CQllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jW2ldLCBQQUdFKTsK LQkJZXhwZWN0X2ZhbHNlKGVyciwgIlVueHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKLQl9 Ci0KLQkvKiBEZWFsbG9jIHRoZSB3aG9sZSBzbGFiLCBnb2luZyBmb3J3YXJkcy4gKi8KLQlmb3Ig KHNpemVfdCBpID0gMDsgaSA8IEhVR0VQQUdFX1BBR0VTIC0gMTsgaSsrKSB7Ci0JCXBzID0gdGVz dF9wc3NldF9kYWxsb2MoJnBzc2V0LCAmYWxsb2NbaV0pOwotCQlleHBlY3RfcHRyX251bGwocHMs ICJOb25lbXB0eSBwYWdlc2xhYiBldmljdGVkIik7Ci0JfQotCXBzID0gdGVzdF9wc3NldF9kYWxs b2MoJnBzc2V0LCAmYWxsb2NbSFVHRVBBR0VfUEFHRVMgLSAxXSk7Ci0JZXhwZWN0X3B0cl9lcSgm cGFnZXNsYWIsIHBzLCAiRW1wdHkgcGFnZXNsYWIgbm90IGV2aWN0ZWQuIik7Ci0KLQllcnIgPSB0 ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jWzBdLCBQQUdFKTsKLQlleHBlY3Rf dHJ1ZShlcnIsICJwc3NldCBzaG91bGQgYmUgZW1wdHkuIik7Ci19Ci1URVNUX0VORAotCi1URVNU X0JFR0lOKHRlc3RfbXVsdGlfcGFnZXNsYWIpIHsKLQlib29sIGVycjsKLQlocGRhdGFfdCAqcHM7 Ci0KLQlocGRhdGFfdCBwYWdlc2xhYlsyXTsKLQlocGRhdGFfaW5pdCgmcGFnZXNsYWJbMF0sIFBB R0VTTEFCX0FERFIsIFBBR0VTTEFCX0FHRSk7Ci0JaHBkYXRhX2luaXQoJnBhZ2VzbGFiWzFdLAot CSAgICAodm9pZCAqKSgodWludHB0cl90KVBBR0VTTEFCX0FERFIgKyBIVUdFUEFHRSksCi0JICAg IFBBR0VTTEFCX0FHRSArIDEpOwotCi0JZWRhdGFfdCBhbGxvY1syXVtIVUdFUEFHRV9QQUdFU107 Ci0KLQlwc3NldF90IHBzc2V0OwotCXBzc2V0X2luaXQoJnBzc2V0KTsKLQotCS8qIEluc2VydCBi b3RoIHNsYWJzLiAqLwotCWVkYXRhX2luaXRfdGVzdCgmYWxsb2NbMF1bMF0pOwotCXRlc3RfcHNz ZXRfYWxsb2NfbmV3KCZwc3NldCwgJnBhZ2VzbGFiWzBdLCAmYWxsb2NbMF1bMF0sIFBBR0UpOwot CWVkYXRhX2luaXRfdGVzdCgmYWxsb2NbMV1bMF0pOwotCXRlc3RfcHNzZXRfYWxsb2NfbmV3KCZw c3NldCwgJnBhZ2VzbGFiWzFdLCAmYWxsb2NbMV1bMF0sIFBBR0UpOwotCi0JLyogRmlsbCB0aGVt IGJvdGggdXA7IG1ha2Ugc3VyZSB3ZSBkbyBzbyBpbiBmaXJzdC1maXQgb3JkZXIuICovCi0JZm9y IChzaXplX3QgaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJZm9yIChzaXplX3QgaiA9IDE7IGogPCBI VUdFUEFHRV9QQUdFUzsgaisrKSB7Ci0JCQllZGF0YV9pbml0X3Rlc3QoJmFsbG9jW2ldW2pdKTsK LQkJCWVyciA9IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAmYWxsb2NbaV1bal0sIFBB R0UpOwotCQkJZXhwZWN0X2ZhbHNlKGVyciwKLQkJCSAgICAiTm9uZW1wdHkgcHNzZXQgZmFpbGVk IHBhZ2UgYWxsb2NhdGlvbi4iKTsKLQkJCWFzc2VydF9wdHJfZXEoJnBhZ2VzbGFiW2ldLCBlZGF0 YV9wc19nZXQoJmFsbG9jW2ldW2pdKSwKLQkJCSAgICAiRGlkbid0IHBpY2sgcGFnZXNsYWJzIGlu IGZpcnN0LWZpdCIpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBGcmVlIHVwIGEgMi1wYWdlIGhvbGUg aW4gdGhlIGVhcmxpZXIgc2xhYiwgYW5kIGEgMS1wYWdlIG9uZSBpbiB0aGUKLQkgKiBsYXRlciBv bmUuICBXZSBzaG91bGQgc3RpbGwgcGljayB0aGUgbGF0ZXIgb25lLgotCSAqLwotCXBzID0gdGVz dF9wc3NldF9kYWxsb2MoJnBzc2V0LCAmYWxsb2NbMF1bMF0pOwotCWV4cGVjdF9wdHJfbnVsbChw cywgIlVuZXhwZWN0ZWQgZXZpY3Rpb24iKTsKLQlwcyA9IHRlc3RfcHNzZXRfZGFsbG9jKCZwc3Nl dCwgJmFsbG9jWzBdWzFdKTsKLQlleHBlY3RfcHRyX251bGwocHMsICJVbmV4cGVjdGVkIGV2aWN0 aW9uIik7Ci0JcHMgPSB0ZXN0X3Bzc2V0X2RhbGxvYygmcHNzZXQsICZhbGxvY1sxXVswXSk7Ci0J ZXhwZWN0X3B0cl9udWxsKHBzLCAiVW5leHBlY3RlZCBldmljdGlvbiIpOwotCWVyciA9IHRlc3Rf cHNzZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAmYWxsb2NbMF1bMF0sIFBBR0UpOwotCWV4cGVjdF9w dHJfZXEoJnBhZ2VzbGFiWzFdLCBlZGF0YV9wc19nZXQoJmFsbG9jWzBdWzBdKSwKLQkgICAgIlNo b3VsZCBoYXZlIHBpY2tlZCB0aGUgZnVsbGVyIHBhZ2VzbGFiIik7Ci0KLQkvKgotCSAqIE5vdyBi b3RoIHNsYWJzIGhhdmUgMS1wYWdlIGhvbGVzLiBGcmVlIHVwIGEgc2Vjb25kIG9uZSBpbiB0aGUg bGF0ZXIKLQkgKiBzbGFiLgotCSAqLwotCXBzID0gdGVzdF9wc3NldF9kYWxsb2MoJnBzc2V0LCAm YWxsb2NbMV1bMV0pOwotCWV4cGVjdF9wdHJfbnVsbChwcywgIlVuZXhwZWN0ZWQgZXZpY3Rpb24i KTsKLQotCS8qCi0JICogV2Ugc2hvdWxkIGJlIGFibGUgdG8gYWxsb2NhdGUgYSAyLXBhZ2Ugb2Jq ZWN0LCBldmVuIHRob3VnaCBhbiBlYXJsaWVyCi0JICogc2l6ZSBjbGFzcyBpcyBub25lbXB0eS4K LQkgKi8KLQllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNlKCZwc3NldCwgJmFsbG9jWzFdWzBd LCAyICogUEFHRSk7Ci0JZXhwZWN0X2ZhbHNlKGVyciwgIkFsbG9jYXRpb24gc2hvdWxkIGhhdmUg c3VjY2VlZGVkIik7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAotc3RhdHNfZXhwZWN0X2Vt cHR5KHBzc2V0X2Jpbl9zdGF0c190ICpzdGF0cykgewotCWFzc2VydF96dV9lcSgwLCBzdGF0cy0+ bnBhZ2VzbGFicywKLQkgICAgIlN1cHBvc2VkbHkgZW1wdHkgYmluIGhhZCBwb3NpdGl2ZSBucGFn ZXNsYWJzIik7Ci0JZXhwZWN0X3p1X2VxKDAsIHN0YXRzLT5uYWN0aXZlLCAiVW5leHBlY3RlZCBu b25lbXB0eSBiaW4iCi0JICAgICJTdXBwb3NlZGx5IGVtcHR5IGJpbiBoYWQgcG9zaXRpdmUgbmFj dGl2ZSIpOwotfQotCi1zdGF0aWMgdm9pZAotc3RhdHNfZXhwZWN0KHBzc2V0X3QgKnBzc2V0LCBz aXplX3QgbmFjdGl2ZSkgewotCWlmIChuYWN0aXZlID09IEhVR0VQQUdFX1BBR0VTKSB7Ci0JCWV4 cGVjdF96dV9lcSgxLCBwc3NldC0+c3RhdHMuZnVsbF9zbGFic1swXS5ucGFnZXNsYWJzLAotCQkg ICAgIkV4cGVjdGVkIGEgZnVsbCBzbGFiIik7Ci0JCWV4cGVjdF96dV9lcShIVUdFUEFHRV9QQUdF UywKLQkJICAgIHBzc2V0LT5zdGF0cy5mdWxsX3NsYWJzWzBdLm5hY3RpdmUsCi0JCSAgICAiU2hv dWxkIGhhdmUgZXhhY3RseSBmaWxsZWQgdGhlIGJpbiIpOwotCX0gZWxzZSB7Ci0JCXN0YXRzX2V4 cGVjdF9lbXB0eSgmcHNzZXQtPnN0YXRzLmZ1bGxfc2xhYnNbMF0pOwotCX0KLQlzaXplX3Qgbmlu YWN0aXZlID0gSFVHRVBBR0VfUEFHRVMgLSBuYWN0aXZlOwotCXBzemluZF90IG5vbmVtcHR5X3Bp bmQgPSBQU1NFVF9OUFNJWkVTOwotCWlmIChuaW5hY3RpdmUgIT0gMCAmJiBuaW5hY3RpdmUgPCBI VUdFUEFHRV9QQUdFUykgewotCQlub25lbXB0eV9waW5kID0gc3pfcHN6MmluZChzel9wc3pfcXVh bnRpemVfZmxvb3IoCi0JCSAgICBuaW5hY3RpdmUgPDwgTEdfUEFHRSkpOwotCX0KLQlmb3IgKHBz emluZF90IGkgPSAwOyBpIDwgUFNTRVRfTlBTSVpFUzsgaSsrKSB7Ci0JCWlmIChpID09IG5vbmVt cHR5X3BpbmQpIHsKLQkJCWFzc2VydF96dV9lcSgxLAotCQkJICAgIHBzc2V0LT5zdGF0cy5ub25m dWxsX3NsYWJzW2ldWzBdLm5wYWdlc2xhYnMsCi0JCQkgICAgIlNob3VsZCBoYXZlIGZvdW5kIGEg c2xhYiIpOwotCQkJZXhwZWN0X3p1X2VxKG5hY3RpdmUsCi0JCQkgICAgcHNzZXQtPnN0YXRzLm5v bmZ1bGxfc2xhYnNbaV1bMF0ubmFjdGl2ZSwKLQkJCSAgICAiTWlzbWF0Y2ggaW4gYWN0aXZlIHBh Z2VzIik7Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0c19leHBlY3RfZW1wdHkoJnBzc2V0LT5zdGF0cy5u b25mdWxsX3NsYWJzW2ldWzBdKTsKLQkJfQotCX0KLQlleHBlY3RfenVfZXEobmFjdGl2ZSwgcHNz ZXRfbmFjdGl2ZShwc3NldCksICIiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3N0YXRzKSB7Ci0J Ym9vbCBlcnI7Ci0KLQlocGRhdGFfdCBwYWdlc2xhYjsKLQlocGRhdGFfaW5pdCgmcGFnZXNsYWIs IFBBR0VTTEFCX0FERFIsIFBBR0VTTEFCX0FHRSk7Ci0KLQllZGF0YV90IGFsbG9jW0hVR0VQQUdF X1BBR0VTXTsKLQotCXBzc2V0X3QgcHNzZXQ7Ci0JcHNzZXRfaW5pdCgmcHNzZXQpOwotCXN0YXRz X2V4cGVjdCgmcHNzZXQsIDApOwotCi0JZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1swXSk7Ci0JdGVz dF9wc3NldF9hbGxvY19uZXcoJnBzc2V0LCAmcGFnZXNsYWIsICZhbGxvY1swXSwgUEFHRSk7Ci0J Zm9yIChzaXplX3QgaSA9IDE7IGkgPCBIVUdFUEFHRV9QQUdFUzsgaSsrKSB7Ci0JCXN0YXRzX2V4 cGVjdCgmcHNzZXQsIGkpOwotCQllZGF0YV9pbml0X3Rlc3QoJmFsbG9jW2ldKTsKLQkJZXJyID0g dGVzdF9wc3NldF9hbGxvY19yZXVzZSgmcHNzZXQsICZhbGxvY1tpXSwgUEFHRSk7Ci0JCWV4cGVj dF9mYWxzZShlcnIsICJOb25lbXB0eSBwc3NldCBmYWlsZWQgcGFnZSBhbGxvY2F0aW9uLiIpOwot CX0KLQlzdGF0c19leHBlY3QoJnBzc2V0LCBIVUdFUEFHRV9QQUdFUyk7Ci0JaHBkYXRhX3QgKnBz OwotCWZvciAoc3NpemVfdCBpID0gSFVHRVBBR0VfUEFHRVMgLSAxOyBpID49IDA7IGktLSkgewot CQlwcyA9IHRlc3RfcHNzZXRfZGFsbG9jKCZwc3NldCwgJmFsbG9jW2ldKTsKLQkJZXhwZWN0X3Ry dWUoKHBzID09IE5VTEwpID09IChpICE9IDApLAotCQkgICAgInRlc3RfcHNzZXRfZGFsbG9jIHNo b3VsZCBvbmx5IGV2aWN0IGEgc2xhYiBvbiB0aGUgbGFzdCAiCi0JCSAgICAiZnJlZSIpOwotCQlz dGF0c19leHBlY3QoJnBzc2V0LCBpKTsKLQl9Ci0KLQl0ZXN0X3Bzc2V0X2FsbG9jX25ldygmcHNz ZXQsICZwYWdlc2xhYiwgJmFsbG9jWzBdLCBQQUdFKTsKLQlzdGF0c19leHBlY3QoJnBzc2V0LCAx KTsKLQlwc3NldF91cGRhdGVfYmVnaW4oJnBzc2V0LCAmcGFnZXNsYWIpOwotCXN0YXRzX2V4cGVj dCgmcHNzZXQsIDApOwotCXBzc2V0X3VwZGF0ZV9lbmQoJnBzc2V0LCAmcGFnZXNsYWIpOwotCXN0 YXRzX2V4cGVjdCgmcHNzZXQsIDEpOwotfQotVEVTVF9FTkQKLQotLyoKLSAqIEZpbGxzIGluIGFu ZCBpbnNlcnRzIHR3byBwYWdlc2xhYnMsIHdpdGggdGhlIGZpcnN0IGJldHRlciB0aGFuIHRoZSBz ZWNvbmQsCi0gKiBhbmQgZWFjaCBmdWxseSBhbGxvY2F0ZWQgKGludG8gdGhlIGFsbG9jYXRpb25z IGluIGFsbG9jcyBhbmQgd29yc2VfYWxsb2NzLAotICogZWFjaCBvZiB3aGljaCBzaG91bGQgYmUg SFVHRVBBR0VfUEFHRVMgbG9uZyksIGV4Y2VwdCBmb3IgYSBzaW5nbGUgZnJlZSBwYWdlCi0gKiBh dCB0aGUgZW5kLgotICoKLSAqIChUaGVyZSdzIG5vdGhpbmcgbWFnaWMgYWJvdXQgdGhlc2UgbnVt YmVyczsgaXQncyBqdXN0IHVzZWZ1bCB0byBzaGFyZSB0aGUKLSAqIHNldHVwIGJldHdlZW4gdGhl IG9sZGVzdCBmaXQgYW5kIHRoZSBpbnNlcnQvcmVtb3ZlIHRlc3QpLgotICovCi1zdGF0aWMgdm9p ZAotaW5pdF90ZXN0X3BhZ2VzbGFicyhwc3NldF90ICpwc3NldCwgaHBkYXRhX3QgKnBhZ2VzbGFi LAotICAgIGhwZGF0YV90ICp3b3JzZV9wYWdlc2xhYiwgZWRhdGFfdCAqYWxsb2MsIGVkYXRhX3Qg KndvcnNlX2FsbG9jKSB7Ci0JYm9vbCBlcnI7Ci0KLQlocGRhdGFfaW5pdChwYWdlc2xhYiwgKHZv aWQgKikoMTAgKiBIVUdFUEFHRSksIFBBR0VTTEFCX0FHRSk7Ci0JLyoKLQkgKiBUaGlzIHBhZ2Vz bGFiIHdvdWxkIGJlIGJldHRlciBmcm9tIGFuIGFkZHJlc3MtZmlyc3QtZml0IFBPViwgYnV0Ci0J ICogd29yc2UgZnJvbSBhbiBhZ2UgUE9WLgotCSAqLwotCWhwZGF0YV9pbml0KHdvcnNlX3BhZ2Vz bGFiLCAodm9pZCAqKSg5ICogSFVHRVBBR0UpLCBQQUdFU0xBQl9BR0UgKyAxKTsKLQotCXBzc2V0 X2luaXQocHNzZXQpOwotCi0JZWRhdGFfaW5pdF90ZXN0KCZhbGxvY1swXSk7Ci0JdGVzdF9wc3Nl dF9hbGxvY19uZXcocHNzZXQsIHBhZ2VzbGFiLCAmYWxsb2NbMF0sIFBBR0UpOwotCWZvciAoc2l6 ZV90IGkgPSAxOyBpIDwgSFVHRVBBR0VfUEFHRVM7IGkrKykgewotCQllZGF0YV9pbml0X3Rlc3Qo JmFsbG9jW2ldKTsKLQkJZXJyID0gdGVzdF9wc3NldF9hbGxvY19yZXVzZShwc3NldCwgJmFsbG9j W2ldLCBQQUdFKTsKLQkJZXhwZWN0X2ZhbHNlKGVyciwgIk5vbmVtcHR5IHBzc2V0IGZhaWxlZCBw YWdlIGFsbG9jYXRpb24uIik7Ci0JCWV4cGVjdF9wdHJfZXEocGFnZXNsYWIsIGVkYXRhX3BzX2dl dCgmYWxsb2NbaV0pLAotCQkgICAgIkFsbG9jYXRlZCBmcm9tIHRoZSB3cm9uZyBwYWdlc2xhYiIp OwotCX0KLQotCWVkYXRhX2luaXRfdGVzdCgmd29yc2VfYWxsb2NbMF0pOwotCXRlc3RfcHNzZXRf YWxsb2NfbmV3KHBzc2V0LCB3b3JzZV9wYWdlc2xhYiwgJndvcnNlX2FsbG9jWzBdLCBQQUdFKTsK LQlleHBlY3RfcHRyX2VxKHdvcnNlX3BhZ2VzbGFiLCBlZGF0YV9wc19nZXQoJndvcnNlX2FsbG9j WzBdKSwKLQkgICAgIkFsbG9jYXRlZCBmcm9tIHRoZSB3cm9uZyBwYWdlc2xhYiIpOwotCS8qCi0J ICogTWFrZSB0aGUgdHdvIHBzc2V0cyBvdGhlcndpc2UgaW5kaXN0aW5ndWlzaGFibGU7IGFsbCBm dWxsIGV4Y2VwdCBmb3IKLQkgKiBhIHNpbmdsZSBwYWdlLgotCSAqLwotCWZvciAoc2l6ZV90IGkg PSAxOyBpIDwgSFVHRVBBR0VfUEFHRVMgLSAxOyBpKyspIHsKLQkJZWRhdGFfaW5pdF90ZXN0KCZ3 b3JzZV9hbGxvY1tpXSk7Ci0JCWVyciA9IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UocHNzZXQsICZh bGxvY1tpXSwgUEFHRSk7Ci0JCWV4cGVjdF9mYWxzZShlcnIsICJOb25lbXB0eSBwc3NldCBmYWls ZWQgcGFnZSBhbGxvY2F0aW9uLiIpOwotCQlleHBlY3RfcHRyX2VxKHdvcnNlX3BhZ2VzbGFiLCBl ZGF0YV9wc19nZXQoJmFsbG9jW2ldKSwKLQkJICAgICJBbGxvY2F0ZWQgZnJvbSB0aGUgd3Jvbmcg cGFnZXNsYWIiKTsKLQl9Ci0KLQkvKiBEZWFsbG9jYXRlIHRoZSBsYXN0IHBhZ2UgZnJvbSB0aGUg b2xkZXIgcGFnZXNsYWIuICovCi0JaHBkYXRhX3QgKmV2aWN0ZWQgPSB0ZXN0X3Bzc2V0X2RhbGxv Yyhwc3NldCwKLQkgICAgJmFsbG9jW0hVR0VQQUdFX1BBR0VTIC0gMV0pOwotCWV4cGVjdF9wdHJf bnVsbChldmljdGVkLCAiVW5leHBlY3RlZCBldmljdGlvbiIpOwotfQotCi1URVNUX0JFR0lOKHRl c3Rfb2xkZXN0X2ZpdCkgewotCWJvb2wgZXJyOwotCWVkYXRhX3QgYWxsb2NbSFVHRVBBR0VfUEFH RVNdOwotCWVkYXRhX3Qgd29yc2VfYWxsb2NbSFVHRVBBR0VfUEFHRVNdOwotCi0JaHBkYXRhX3Qg cGFnZXNsYWI7Ci0JaHBkYXRhX3Qgd29yc2VfcGFnZXNsYWI7Ci0KLQlwc3NldF90IHBzc2V0Owot Ci0JaW5pdF90ZXN0X3BhZ2VzbGFicygmcHNzZXQsICZwYWdlc2xhYiwgJndvcnNlX3BhZ2VzbGFi LCBhbGxvYywKLQkgICAgd29yc2VfYWxsb2MpOwotCi0JLyogVGhlIGVkYXRhIHNob3VsZCBjb21l IGZyb20gdGhlIGJldHRlciBwYWdlc2xhYi4gKi8KLQllZGF0YV90IHRlc3RfZWRhdGE7Ci0JZWRh dGFfaW5pdF90ZXN0KCZ0ZXN0X2VkYXRhKTsKLQllcnIgPSB0ZXN0X3Bzc2V0X2FsbG9jX3JldXNl KCZwc3NldCwgJnRlc3RfZWRhdGEsIFBBR0UpOwotCWV4cGVjdF9mYWxzZShlcnIsICJOb25lbXB0 eSBwc3NldCBmYWlsZWQgcGFnZSBhbGxvY2F0aW9uIik7Ci0JZXhwZWN0X3B0cl9lcSgmcGFnZXNs YWIsIGVkYXRhX3BzX2dldCgmdGVzdF9lZGF0YSksCi0JICAgICJBbGxvY2F0ZWQgZnJvbSB0aGUg d3JvbmcgcGFnZXNsYWIiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9pbnNlcnRf cmVtb3ZlKSB7Ci0JYm9vbCBlcnI7Ci0JaHBkYXRhX3QgKnBzOwotCWVkYXRhX3QgYWxsb2NbSFVH RVBBR0VfUEFHRVNdOwotCWVkYXRhX3Qgd29yc2VfYWxsb2NbSFVHRVBBR0VfUEFHRVNdOwotCi0J aHBkYXRhX3QgcGFnZXNsYWI7Ci0JaHBkYXRhX3Qgd29yc2VfcGFnZXNsYWI7Ci0KLQlwc3NldF90 IHBzc2V0OwotCi0JaW5pdF90ZXN0X3BhZ2VzbGFicygmcHNzZXQsICZwYWdlc2xhYiwgJndvcnNl X3BhZ2VzbGFiLCBhbGxvYywKLQkgICAgd29yc2VfYWxsb2MpOwotCi0JLyogUmVtb3ZlIGJldHRl cjsgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gYWxsb2MgZnJvbSB3b3JzZS4gKi8KLQlwc3NldF91 cGRhdGVfYmVnaW4oJnBzc2V0LCAmcGFnZXNsYWIpOwotCWVyciA9IHRlc3RfcHNzZXRfYWxsb2Nf cmV1c2UoJnBzc2V0LCAmd29yc2VfYWxsb2NbSFVHRVBBR0VfUEFHRVMgLSAxXSwKLQkgICAgUEFH RSk7Ci0JZXhwZWN0X2ZhbHNlKGVyciwgIlJlbW92YWwgc2hvdWxkIHN0aWxsIGxlYXZlIGFuIGVt cHR5IHBhZ2UiKTsKLQlleHBlY3RfcHRyX2VxKCZ3b3JzZV9wYWdlc2xhYiwKLQkgICAgZWRhdGFf cHNfZ2V0KCZ3b3JzZV9hbGxvY1tIVUdFUEFHRV9QQUdFUyAtIDFdKSwKLQkgICAgIkFsbG9jYXRl ZCBvdXQgb2Ygd3JvbmcgcHMiKTsKLQotCS8qCi0JICogQWZ0ZXIgZGVhbGxvY2F0aW5nIHRoZSBw cmV2aW91cyBhbGxvYyBhbmQgcmVpbnNlcnRpbmcgYmV0dGVyLCBpdAotCSAqIHNob3VsZCBiZSBw cmVmZXJyZWQgZm9yIGZ1dHVyZSBhbGxvY2F0aW9ucy4KLQkgKi8KLQlwcyA9IHRlc3RfcHNzZXRf ZGFsbG9jKCZwc3NldCwgJndvcnNlX2FsbG9jW0hVR0VQQUdFX1BBR0VTIC0gMV0pOwotCWV4cGVj dF9wdHJfbnVsbChwcywgIkluY29ycmVjdCBldmljdGlvbiBvZiBub25lbXB0eSBwYWdlc2xhYiIp OwotCXBzc2V0X3VwZGF0ZV9lbmQoJnBzc2V0LCAmcGFnZXNsYWIpOwotCWVyciA9IHRlc3RfcHNz ZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAmYWxsb2NbSFVHRVBBR0VfUEFHRVMgLSAxXSwgUEFHRSk7 Ci0JZXhwZWN0X2ZhbHNlKGVyciwgInBzc2V0IHNob3VsZCBiZSBub25lbXB0eSIpOwotCWV4cGVj dF9wdHJfZXEoJnBhZ2VzbGFiLCBlZGF0YV9wc19nZXQoJmFsbG9jW0hVR0VQQUdFX1BBR0VTIC0g MV0pLAotCSAgICAiUmVtb3ZhbC9yZWluc2VydGlvbiBzaG91bGRuJ3QgY2hhbmdlIG9yZGVyaW5n Iik7Ci0JLyoKLQkgKiBBZnRlciBkZWFsbG9jYXRpbmcgYW5kIHJlbW92aW5nIGJvdGgsIGFsbG9j YXRpb25zIHNob3VsZCBmYWlsLgotCSAqLwotCXBzID0gdGVzdF9wc3NldF9kYWxsb2MoJnBzc2V0 LCAmYWxsb2NbSFVHRVBBR0VfUEFHRVMgLSAxXSk7Ci0JZXhwZWN0X3B0cl9udWxsKHBzLCAiSW5j b3JyZWN0IGV2aWN0aW9uIik7Ci0JcHNzZXRfdXBkYXRlX2JlZ2luKCZwc3NldCwgJnBhZ2VzbGFi KTsKLQlwc3NldF91cGRhdGVfYmVnaW4oJnBzc2V0LCAmd29yc2VfcGFnZXNsYWIpOwotCWVyciA9 IHRlc3RfcHNzZXRfYWxsb2NfcmV1c2UoJnBzc2V0LCAmYWxsb2NbSFVHRVBBR0VfUEFHRVMgLSAx XSwgUEFHRSk7Ci0JZXhwZWN0X3RydWUoZXJyLCAicHNzZXQgc2hvdWxkIGJlIGVtcHR5LCBidXQg YW4gYWxsb2Mgc3VjY2VlZGVkIik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcHVy Z2VfcHJlZmVyc19ub25odWdlKSB7Ci0JLyoKLQkgKiBBbGwgZWxzZSBiZWluZyBlcXVhbCwgd2Ug c2hvdWxkIHByZWZlciBwdXJnaW5nIG5vbi1odWdlIHBhZ2VzIG92ZXIKLQkgKiBodWdlIG9uZXMg Zm9yIG5vbi1lbXB0eSBleHRlbnRzLgotCSAqLwotCi0JLyogTm90aGluZyBtYWdpYyBhYm91dCB0 aGlzIGNvbnN0YW50LiAqLwotCWVudW0gewotCQlOSFAgPSAyMywKLQl9OwotCWhwZGF0YV90ICpo cGRhdGE7Ci0KLQlwc3NldF90IHBzc2V0OwotCXBzc2V0X2luaXQoJnBzc2V0KTsKLQotCWhwZGF0 YV90IGhwZGF0YV9odWdlW05IUF07Ci0JdWludHB0cl90IGh1Z2VfYmVnaW4gPSAodWludHB0cl90 KSZocGRhdGFfaHVnZVswXTsKLQl1aW50cHRyX3QgaHVnZV9lbmQgPSAodWludHB0cl90KSZocGRh dGFfaHVnZVtOSFBdOwotCWhwZGF0YV90IGhwZGF0YV9ub25odWdlW05IUF07Ci0JdWludHB0cl90 IG5vbmh1Z2VfYmVnaW4gPSAodWludHB0cl90KSZocGRhdGFfbm9uaHVnZVswXTsKLQl1aW50cHRy X3Qgbm9uaHVnZV9lbmQgPSAodWludHB0cl90KSZocGRhdGFfbm9uaHVnZVtOSFBdOwotCi0JZm9y IChzaXplX3QgaSA9IDA7IGkgPCBOSFA7IGkrKykgewotCQlocGRhdGFfaW5pdCgmaHBkYXRhX2h1 Z2VbaV0sICh2b2lkICopKCgxMCArIGkpICogSFVHRVBBR0UpLAotCQkgICAgMTIzICsgaSk7Ci0J CXBzc2V0X2luc2VydCgmcHNzZXQsICZocGRhdGFfaHVnZVtpXSk7Ci0KLQkJaHBkYXRhX2luaXQo JmhwZGF0YV9ub25odWdlW2ldLAotCQkgICAgKHZvaWQgKikoKDEwICsgTkhQICsgaSkgKiBIVUdF UEFHRSksCi0JCSAgICA0NTYgKyBpKTsKLQkJcHNzZXRfaW5zZXJ0KCZwc3NldCwgJmhwZGF0YV9u b25odWdlW2ldKTsKLQotCX0KLQlmb3IgKGludCBpID0gMDsgaSA8IDIgKiBOSFA7IGkrKykgewot CQlocGRhdGEgPSBwc3NldF9waWNrX2FsbG9jKCZwc3NldCwgSFVHRVBBR0UgKiAzIC8gNCk7Ci0J CXBzc2V0X3VwZGF0ZV9iZWdpbigmcHNzZXQsIGhwZGF0YSk7Ci0JCXZvaWQgKnB0cjsKLQkJcHRy ID0gaHBkYXRhX3Jlc2VydmVfYWxsb2MoaHBkYXRhLCBIVUdFUEFHRSAqIDMgLyA0KTsKLQkJLyog SWdub3JlIHRoZSBmaXJzdCBhbGxvYywgd2hpY2ggd2lsbCBzdGljayBhcm91bmQuICovCi0JCSh2 b2lkKXB0cjsKLQkJLyoKLQkJICogVGhlIHNlY29uZCBhbGxvYyBpcyB0byBkaXJ0eSB0aGUgcGFn ZXM7IGZyZWUgaXQgaW1tZWRpYXRlbHkKLQkJICogYWZ0ZXIgYWxsb2NhdGluZy4KLQkJICovCi0J CXB0ciA9IGhwZGF0YV9yZXNlcnZlX2FsbG9jKGhwZGF0YSwgSFVHRVBBR0UgLyA0KTsKLQkJaHBk YXRhX3VucmVzZXJ2ZShocGRhdGEsIHB0ciwgSFVHRVBBR0UgLyA0KTsKLQotCQlpZiAoaHVnZV9i ZWdpbiA8PSAodWludHB0cl90KWhwZGF0YQotCQkgICAgJiYgKHVpbnRwdHJfdClocGRhdGEgPCBo dWdlX2VuZCkgewotCQkJaHBkYXRhX2h1Z2lmeShocGRhdGEpOwotCQl9Ci0KLQkJaHBkYXRhX3B1 cmdlX2FsbG93ZWRfc2V0KGhwZGF0YSwgdHJ1ZSk7Ci0JCXBzc2V0X3VwZGF0ZV9lbmQoJnBzc2V0 LCBocGRhdGEpOwotCX0KLQotCS8qCi0JICogV2UndmUgZ290IGEgYnVuY2ggb2YgMS84dGggZGly dHkgaHBkYXRhcy4gIEl0IHNob3VsZCBnaXZlIHVzIGFsbCB0aGUKLQkgKiBub24taHVnZSBvbmVz IHRvIHB1cmdlLCB0aGVuIGFsbCB0aGUgaHVnZSBvbmVzLCB0aGVuIHJlZnVzZSB0byBwdXJnZQot CSAqIGZ1cnRoZXIuCi0JICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBOSFA7IGkrKykgewotCQlo cGRhdGEgPSBwc3NldF9waWNrX3B1cmdlKCZwc3NldCk7Ci0JCWFzc2VydF90cnVlKG5vbmh1Z2Vf YmVnaW4gPD0gKHVpbnRwdHJfdClocGRhdGEKLQkJICAgICYmICh1aW50cHRyX3QpaHBkYXRhIDwg bm9uaHVnZV9lbmQsICIiKTsKLQkJcHNzZXRfdXBkYXRlX2JlZ2luKCZwc3NldCwgaHBkYXRhKTsK LQkJdGVzdF9wc3NldF9mYWtlX3B1cmdlKGhwZGF0YSk7Ci0JCWhwZGF0YV9wdXJnZV9hbGxvd2Vk X3NldChocGRhdGEsIGZhbHNlKTsKLQkJcHNzZXRfdXBkYXRlX2VuZCgmcHNzZXQsIGhwZGF0YSk7 Ci0JfQotCWZvciAoaW50IGkgPSAwOyBpIDwgTkhQOyBpKyspIHsKLQkJaHBkYXRhID0gcHNzZXRf cGlja19wdXJnZSgmcHNzZXQpOwotCQlleHBlY3RfdHJ1ZShodWdlX2JlZ2luIDw9ICh1aW50cHRy X3QpaHBkYXRhCi0JCSAgICAmJiAodWludHB0cl90KWhwZGF0YSA8IGh1Z2VfZW5kLCAiIik7Ci0J CXBzc2V0X3VwZGF0ZV9iZWdpbigmcHNzZXQsIGhwZGF0YSk7Ci0JCWhwZGF0YV9kZWh1Z2lmeSho cGRhdGEpOwotCQl0ZXN0X3Bzc2V0X2Zha2VfcHVyZ2UoaHBkYXRhKTsKLQkJaHBkYXRhX3B1cmdl X2FsbG93ZWRfc2V0KGhwZGF0YSwgZmFsc2UpOwotCQlwc3NldF91cGRhdGVfZW5kKCZwc3NldCwg aHBkYXRhKTsKLQl9Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcHVyZ2VfcHJlZmVy c19lbXB0eSkgewotCXZvaWQgKnB0cjsKLQotCXBzc2V0X3QgcHNzZXQ7Ci0JcHNzZXRfaW5pdCgm cHNzZXQpOwotCi0JaHBkYXRhX3QgaHBkYXRhX2VtcHR5OwotCWhwZGF0YV90IGhwZGF0YV9ub25l bXB0eTsKLQlocGRhdGFfaW5pdCgmaHBkYXRhX2VtcHR5LCAodm9pZCAqKSgxMCAqIEhVR0VQQUdF KSwgMTIzKTsKLQlwc3NldF9pbnNlcnQoJnBzc2V0LCAmaHBkYXRhX2VtcHR5KTsKLQlocGRhdGFf aW5pdCgmaHBkYXRhX25vbmVtcHR5LCAodm9pZCAqKSgxMSAqIEhVR0VQQUdFKSwgNDU2KTsKLQlw c3NldF9pbnNlcnQoJnBzc2V0LCAmaHBkYXRhX25vbmVtcHR5KTsKLQotCXBzc2V0X3VwZGF0ZV9i ZWdpbigmcHNzZXQsICZocGRhdGFfZW1wdHkpOwotCXB0ciA9IGhwZGF0YV9yZXNlcnZlX2FsbG9j KCZocGRhdGFfZW1wdHksIFBBR0UpOwotCWV4cGVjdF9wdHJfZXEoaHBkYXRhX2FkZHJfZ2V0KCZo cGRhdGFfZW1wdHkpLCBwdHIsICIiKTsKLQlocGRhdGFfdW5yZXNlcnZlKCZocGRhdGFfZW1wdHks IHB0ciwgUEFHRSk7Ci0JaHBkYXRhX3B1cmdlX2FsbG93ZWRfc2V0KCZocGRhdGFfZW1wdHksIHRy dWUpOwotCXBzc2V0X3VwZGF0ZV9lbmQoJnBzc2V0LCAmaHBkYXRhX2VtcHR5KTsKLQotCXBzc2V0 X3VwZGF0ZV9iZWdpbigmcHNzZXQsICZocGRhdGFfbm9uZW1wdHkpOwotCXB0ciA9IGhwZGF0YV9y ZXNlcnZlX2FsbG9jKCZocGRhdGFfbm9uZW1wdHksIDEwICogUEFHRSk7Ci0JZXhwZWN0X3B0cl9l cShocGRhdGFfYWRkcl9nZXQoJmhwZGF0YV9ub25lbXB0eSksIHB0ciwgIiIpOwotCWhwZGF0YV91 bnJlc2VydmUoJmhwZGF0YV9ub25lbXB0eSwgcHRyLCA5ICogUEFHRSk7Ci0JaHBkYXRhX3B1cmdl X2FsbG93ZWRfc2V0KCZocGRhdGFfbm9uZW1wdHksIHRydWUpOwotCXBzc2V0X3VwZGF0ZV9lbmQo JnBzc2V0LCAmaHBkYXRhX25vbmVtcHR5KTsKLQotCS8qCi0JICogVGhlIG5vbmVtcHR5IHNsYWIg aGFzIDkgZGlydHkgcGFnZXMsIHdoaWxlIHRoZSBlbXB0eSBvbmUgaGFzIG9ubHkgMS4KLQkgKiBX ZSBzaG91bGQgc3RpbGwgcGljayB0aGUgZW1wdHkgb25lIGZvciBwdXJnaW5nLgotCSAqLwotCWhw ZGF0YV90ICp0b19wdXJnZSA9IHBzc2V0X3BpY2tfcHVyZ2UoJnBzc2V0KTsKLQlleHBlY3RfcHRy X2VxKCZocGRhdGFfZW1wdHksIHRvX3B1cmdlLCAiIik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JF R0lOKHRlc3RfcHVyZ2VfcHJlZmVyc19lbXB0eV9odWdlKSB7Ci0Jdm9pZCAqcHRyOwotCi0JcHNz ZXRfdCBwc3NldDsKLQlwc3NldF9pbml0KCZwc3NldCk7Ci0KLQllbnVtIHtOSFAgPSAxMCB9Owot Ci0JaHBkYXRhX3QgaHBkYXRhX2h1Z2VbTkhQXTsKLQlocGRhdGFfdCBocGRhdGFfbm9uaHVnZVtO SFBdOwotCi0JdWludHB0cl90IGN1cl9hZGRyID0gMTAwICogSFVHRVBBR0U7Ci0JdWludDY0X3Qg Y3VyX2FnZSA9IDEyMzsKLQlmb3IgKGludCBpID0gMDsgaSA8IE5IUDsgaSsrKSB7Ci0JCWhwZGF0 YV9pbml0KCZocGRhdGFfaHVnZVtpXSwgKHZvaWQgKiljdXJfYWRkciwgY3VyX2FnZSk7Ci0JCWN1 cl9hZGRyICs9IEhVR0VQQUdFOwotCQljdXJfYWdlKys7Ci0JCXBzc2V0X2luc2VydCgmcHNzZXQs ICZocGRhdGFfaHVnZVtpXSk7Ci0KLQkJaHBkYXRhX2luaXQoJmhwZGF0YV9ub25odWdlW2ldLCAo dm9pZCAqKWN1cl9hZGRyLCBjdXJfYWdlKTsKLQkJY3VyX2FkZHIgKz0gSFVHRVBBR0U7Ci0JCWN1 cl9hZ2UrKzsKLQkJcHNzZXRfaW5zZXJ0KCZwc3NldCwgJmhwZGF0YV9ub25odWdlW2ldKTsKLQot CQkvKgotCQkgKiBNYWtlIHRoZSBocGRhdGFfaHVnZVtpXSBmdWxseSBkaXJ0eSwgZW1wdHksIHB1 cmdhYmxlLCBhbmQKLQkJICogaHVnZS4KLQkJICovCi0JCXBzc2V0X3VwZGF0ZV9iZWdpbigmcHNz ZXQsICZocGRhdGFfaHVnZVtpXSk7Ci0JCXB0ciA9IGhwZGF0YV9yZXNlcnZlX2FsbG9jKCZocGRh dGFfaHVnZVtpXSwgSFVHRVBBR0UpOwotCQlleHBlY3RfcHRyX2VxKGhwZGF0YV9hZGRyX2dldCgm aHBkYXRhX2h1Z2VbaV0pLCBwdHIsICIiKTsKLQkJaHBkYXRhX2h1Z2lmeSgmaHBkYXRhX2h1Z2Vb aV0pOwotCQlocGRhdGFfdW5yZXNlcnZlKCZocGRhdGFfaHVnZVtpXSwgcHRyLCBIVUdFUEFHRSk7 Ci0JCWhwZGF0YV9wdXJnZV9hbGxvd2VkX3NldCgmaHBkYXRhX2h1Z2VbaV0sIHRydWUpOwotCQlw c3NldF91cGRhdGVfZW5kKCZwc3NldCwgJmhwZGF0YV9odWdlW2ldKTsKLQotCQkvKgotCQkgKiBN YWtlIGhwZGF0YV9ub25odWdlW2ldIGZ1bGx5IGRpcnR5LCBlbXB0eSwgcHVyZ2FibGUsIGFuZAot CQkgKiBub24taHVnZS4KLQkJICovCi0JCXBzc2V0X3VwZGF0ZV9iZWdpbigmcHNzZXQsICZocGRh dGFfbm9uaHVnZVtpXSk7Ci0JCXB0ciA9IGhwZGF0YV9yZXNlcnZlX2FsbG9jKCZocGRhdGFfbm9u aHVnZVtpXSwgSFVHRVBBR0UpOwotCQlleHBlY3RfcHRyX2VxKGhwZGF0YV9hZGRyX2dldCgmaHBk YXRhX25vbmh1Z2VbaV0pLCBwdHIsICIiKTsKLQkJaHBkYXRhX3VucmVzZXJ2ZSgmaHBkYXRhX25v bmh1Z2VbaV0sIHB0ciwgSFVHRVBBR0UpOwotCQlocGRhdGFfcHVyZ2VfYWxsb3dlZF9zZXQoJmhw ZGF0YV9ub25odWdlW2ldLCB0cnVlKTsKLQkJcHNzZXRfdXBkYXRlX2VuZCgmcHNzZXQsICZocGRh dGFfbm9uaHVnZVtpXSk7Ci0JfQotCi0JLyoKLQkgKiBXZSBoYXZlIGEgYnVuY2ggb2YgZW1wdHkg c2xhYnMsIGhhbGYgaHVnZSwgaGFsZiBub25odWdlLCBpbnNlcnRlZCBpbgotCSAqIGFsdGVybmF0 aW5nIG9yZGVyLiAgV2Ugc2hvdWxkIHBvcCBhbGwgdGhlIGh1Z2Ugb25lcyBiZWZvcmUgcG9wcGlu ZwotCSAqIGFueSBvZiB0aGUgbm9uLWh1Z2Ugb25lcyBmb3IgcHVyZ2luZy4KLQkgKi8KLQlmb3Ig KGludCBpID0gMDsgaSA8IE5IUDsgaSsrKSB7Ci0JCWhwZGF0YV90ICp0b19wdXJnZSA9IHBzc2V0 X3BpY2tfcHVyZ2UoJnBzc2V0KTsKLQkJZXhwZWN0X3B0cl9lcSgmaHBkYXRhX2h1Z2VbaV0sIHRv X3B1cmdlLCAiIik7Ci0JCXBzc2V0X3VwZGF0ZV9iZWdpbigmcHNzZXQsIHRvX3B1cmdlKTsKLQkJ aHBkYXRhX3B1cmdlX2FsbG93ZWRfc2V0KHRvX3B1cmdlLCBmYWxzZSk7Ci0JCXBzc2V0X3VwZGF0 ZV9lbmQoJnBzc2V0LCB0b19wdXJnZSk7Ci0JfQotCWZvciAoaW50IGkgPSAwOyBpIDwgTkhQOyBp KyspIHsKLQkJaHBkYXRhX3QgKnRvX3B1cmdlID0gcHNzZXRfcGlja19wdXJnZSgmcHNzZXQpOwot CQlleHBlY3RfcHRyX2VxKCZocGRhdGFfbm9uaHVnZVtpXSwgdG9fcHVyZ2UsICIiKTsKLQkJcHNz ZXRfdXBkYXRlX2JlZ2luKCZwc3NldCwgdG9fcHVyZ2UpOwotCQlocGRhdGFfcHVyZ2VfYWxsb3dl ZF9zZXQodG9fcHVyZ2UsIGZhbHNlKTsKLQkJcHNzZXRfdXBkYXRlX2VuZCgmcHNzZXQsIHRvX3B1 cmdlKTsKLQl9Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0 X25vX3JlZW50cmFuY3koCi0JICAgIHRlc3RfZW1wdHksCi0JICAgIHRlc3RfZmlsbCwKLQkgICAg dGVzdF9yZXVzZSwKLQkgICAgdGVzdF9ldmljdCwKLQkgICAgdGVzdF9tdWx0aV9wYWdlc2xhYiwK LQkgICAgdGVzdF9zdGF0cywKLQkgICAgdGVzdF9vbGRlc3RfZml0LAotCSAgICB0ZXN0X2luc2Vy dF9yZW1vdmUsCi0JICAgIHRlc3RfcHVyZ2VfcHJlZmVyc19ub25odWdlLAotCSAgICB0ZXN0X3B1 cmdlX3ByZWZlcnNfZW1wdHksCi0JICAgIHRlc3RfcHVyZ2VfcHJlZmVyc19lbXB0eV9odWdlKTsK LX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvcWwuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC9xbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTEzMDU4Li4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC9xbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE3ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2pl bWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3FsLmgiCi0KLS8q IE51bWJlciBvZiByaW5nIGVudHJpZXMsIGluIFsyLi4yNl0uICovCi0jZGVmaW5lIE5FTlRSSUVT IDkKLQotdHlwZWRlZiBzdHJ1Y3QgbGlzdF9zIGxpc3RfdDsKLXR5cGVkZWYgcWxfaGVhZChsaXN0 X3QpIGxpc3RfaGVhZF90OwotCi1zdHJ1Y3QgbGlzdF9zIHsKLQlxbF9lbG0obGlzdF90KSBsaW5r OwotCWNoYXIgaWQ7Ci19OwotCi1zdGF0aWMgdm9pZAotdGVzdF9lbXB0eV9saXN0KGxpc3RfaGVh ZF90ICpoZWFkKSB7Ci0JbGlzdF90ICp0OwotCXVuc2lnbmVkIGk7Ci0KLQlleHBlY3RfdHJ1ZShx bF9lbXB0eShoZWFkKSwgIlVuZXhwZWN0ZWQgZWxlbWVudCBmb3IgZW1wdHkgbGlzdCIpOwotCWV4 cGVjdF9wdHJfbnVsbChxbF9maXJzdChoZWFkKSwgIlVuZXhwZWN0ZWQgZWxlbWVudCBmb3IgZW1w dHkgbGlzdCIpOwotCWV4cGVjdF9wdHJfbnVsbChxbF9sYXN0KGhlYWQsIGxpbmspLAotCSAgICAi VW5leHBlY3RlZCBlbGVtZW50IGZvciBlbXB0eSBsaXN0Iik7Ci0KLQlpID0gMDsKLQlxbF9mb3Jl YWNoKHQsIGhlYWQsIGxpbmspIHsKLQkJaSsrOwotCX0KLQlleHBlY3RfdV9lcShpLCAwLCAiVW5l eHBlY3RlZCBlbGVtZW50IGZvciBlbXB0eSBsaXN0Iik7Ci0KLQlpID0gMDsKLQlxbF9yZXZlcnNl X2ZvcmVhY2godCwgaGVhZCwgbGluaykgewotCQlpKys7Ci0JfQotCWV4cGVjdF91X2VxKGksIDAs ICJVbmV4cGVjdGVkIGVsZW1lbnQgZm9yIGVtcHR5IGxpc3QiKTsKLX0KLQotVEVTVF9CRUdJTih0 ZXN0X3FsX2VtcHR5KSB7Ci0JbGlzdF9oZWFkX3QgaGVhZDsKLQotCXFsX25ldygmaGVhZCk7Ci0J dGVzdF9lbXB0eV9saXN0KCZoZWFkKTsKLX0KLVRFU1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1pbml0 X2VudHJpZXMobGlzdF90ICplbnRyaWVzLCB1bnNpZ25lZCBuZW50cmllcykgewotCXVuc2lnbmVk IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmVudHJpZXM7IGkrKykgewotCQllbnRyaWVzW2ldLmlk ID0gJ2EnICsgaTsKLQkJcWxfZWxtX25ldygmZW50cmllc1tpXSwgbGluayk7Ci0JfQotfQotCi1z dGF0aWMgdm9pZAotdGVzdF9lbnRyaWVzX2xpc3QobGlzdF9oZWFkX3QgKmhlYWQsIGxpc3RfdCAq ZW50cmllcywgdW5zaWduZWQgbmVudHJpZXMpIHsKLQlsaXN0X3QgKnQ7Ci0JdW5zaWduZWQgaTsK LQotCWV4cGVjdF9mYWxzZShxbF9lbXB0eShoZWFkKSwgIkxpc3Qgc2hvdWxkIG5vdCBiZSBlbXB0 eSIpOwotCWV4cGVjdF9jX2VxKHFsX2ZpcnN0KGhlYWQpLT5pZCwgZW50cmllc1swXS5pZCwgIkVs ZW1lbnQgaWQgbWlzbWF0Y2giKTsKLQlleHBlY3RfY19lcShxbF9sYXN0KGhlYWQsIGxpbmspLT5p ZCwgZW50cmllc1tuZW50cmllcy0xXS5pZCwKLQkgICAgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsK LQotCWkgPSAwOwotCXFsX2ZvcmVhY2godCwgaGVhZCwgbGluaykgewotCQlleHBlY3RfY19lcSh0 LT5pZCwgZW50cmllc1tpXS5pZCwgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKLQkJaSsrOwotCX0K LQotCWkgPSAwOwotCXFsX3JldmVyc2VfZm9yZWFjaCh0LCBoZWFkLCBsaW5rKSB7Ci0JCWV4cGVj dF9jX2VxKHQtPmlkLCBlbnRyaWVzW25lbnRyaWVzLWktMV0uaWQsCi0JCSAgICAiRWxlbWVudCBp ZCBtaXNtYXRjaCIpOwotCQlpKys7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG5lbnRyaWVzLTE7 IGkrKykgewotCQl0ID0gcWxfbmV4dChoZWFkLCAmZW50cmllc1tpXSwgbGluayk7Ci0JCWV4cGVj dF9jX2VxKHQtPmlkLCBlbnRyaWVzW2krMV0uaWQsICJFbGVtZW50IGlkIG1pc21hdGNoIik7Ci0J fQotCWV4cGVjdF9wdHJfbnVsbChxbF9uZXh0KGhlYWQsICZlbnRyaWVzW25lbnRyaWVzLTFdLCBs aW5rKSwKLQkgICAgIlVuZXhwZWN0ZWQgZWxlbWVudCIpOwotCi0JZXhwZWN0X3B0cl9udWxsKHFs X3ByZXYoaGVhZCwgJmVudHJpZXNbMF0sIGxpbmspLCAiVW5leHBlY3RlZCBlbGVtZW50Iik7Ci0J Zm9yIChpID0gMTsgaSA8IG5lbnRyaWVzOyBpKyspIHsKLQkJdCA9IHFsX3ByZXYoaGVhZCwgJmVu dHJpZXNbaV0sIGxpbmspOwotCQlleHBlY3RfY19lcSh0LT5pZCwgZW50cmllc1tpLTFdLmlkLCAi RWxlbWVudCBpZCBtaXNtYXRjaCIpOwotCX0KLX0KLQotVEVTVF9CRUdJTih0ZXN0X3FsX3RhaWxf aW5zZXJ0KSB7Ci0JbGlzdF9oZWFkX3QgaGVhZDsKLQlsaXN0X3QgZW50cmllc1tORU5UUklFU107 Ci0JdW5zaWduZWQgaTsKLQotCXFsX25ldygmaGVhZCk7Ci0JaW5pdF9lbnRyaWVzKGVudHJpZXMs IHNpemVvZihlbnRyaWVzKS9zaXplb2YobGlzdF90KSk7Ci0JZm9yIChpID0gMDsgaSA8IE5FTlRS SUVTOyBpKyspIHsKLQkJcWxfdGFpbF9pbnNlcnQoJmhlYWQsICZlbnRyaWVzW2ldLCBsaW5rKTsK LQl9Ci0KLQl0ZXN0X2VudHJpZXNfbGlzdCgmaGVhZCwgZW50cmllcywgTkVOVFJJRVMpOwotfQot VEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3FsX3RhaWxfcmVtb3ZlKSB7Ci0JbGlzdF9oZWFk X3QgaGVhZDsKLQlsaXN0X3QgZW50cmllc1tORU5UUklFU107Ci0JdW5zaWduZWQgaTsKLQotCXFs X25ldygmaGVhZCk7Ci0JaW5pdF9lbnRyaWVzKGVudHJpZXMsIHNpemVvZihlbnRyaWVzKS9zaXpl b2YobGlzdF90KSk7Ci0JZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKLQkJcWxfdGFp bF9pbnNlcnQoJmhlYWQsICZlbnRyaWVzW2ldLCBsaW5rKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBp IDwgTkVOVFJJRVM7IGkrKykgewotCQl0ZXN0X2VudHJpZXNfbGlzdCgmaGVhZCwgZW50cmllcywg TkVOVFJJRVMtaSk7Ci0JCXFsX3RhaWxfcmVtb3ZlKCZoZWFkLCBsaXN0X3QsIGxpbmspOwotCX0K LQl0ZXN0X2VtcHR5X2xpc3QoJmhlYWQpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0 X3FsX2hlYWRfaW5zZXJ0KSB7Ci0JbGlzdF9oZWFkX3QgaGVhZDsKLQlsaXN0X3QgZW50cmllc1tO RU5UUklFU107Ci0JdW5zaWduZWQgaTsKLQotCXFsX25ldygmaGVhZCk7Ci0JaW5pdF9lbnRyaWVz KGVudHJpZXMsIHNpemVvZihlbnRyaWVzKS9zaXplb2YobGlzdF90KSk7Ci0JZm9yIChpID0gMDsg aSA8IE5FTlRSSUVTOyBpKyspIHsKLQkJcWxfaGVhZF9pbnNlcnQoJmhlYWQsICZlbnRyaWVzW05F TlRSSUVTLWktMV0sIGxpbmspOwotCX0KLQotCXRlc3RfZW50cmllc19saXN0KCZoZWFkLCBlbnRy aWVzLCBORU5UUklFUyk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcWxfaGVhZF9y ZW1vdmUpIHsKLQlsaXN0X2hlYWRfdCBoZWFkOwotCWxpc3RfdCBlbnRyaWVzW05FTlRSSUVTXTsK LQl1bnNpZ25lZCBpOwotCi0JcWxfbmV3KCZoZWFkKTsKLQlpbml0X2VudHJpZXMoZW50cmllcywg c2l6ZW9mKGVudHJpZXMpL3NpemVvZihsaXN0X3QpKTsKLQlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJ RVM7IGkrKykgewotCQlxbF9oZWFkX2luc2VydCgmaGVhZCwgJmVudHJpZXNbTkVOVFJJRVMtaS0x XSwgbGluayk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKLQkJdGVz dF9lbnRyaWVzX2xpc3QoJmhlYWQsICZlbnRyaWVzW2ldLCBORU5UUklFUy1pKTsKLQkJcWxfaGVh ZF9yZW1vdmUoJmhlYWQsIGxpc3RfdCwgbGluayk7Ci0JfQotCXRlc3RfZW1wdHlfbGlzdCgmaGVh ZCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcWxfaW5zZXJ0KSB7Ci0JbGlzdF9o ZWFkX3QgaGVhZDsKLQlsaXN0X3QgZW50cmllc1s4XTsKLQlsaXN0X3QgKmEsICpiLCAqYywgKmQs ICplLCAqZiwgKmcsICpoOwotCi0JcWxfbmV3KCZoZWFkKTsKLQlpbml0X2VudHJpZXMoZW50cmll cywgc2l6ZW9mKGVudHJpZXMpL3NpemVvZihsaXN0X3QpKTsKLQlhID0gJmVudHJpZXNbMF07Ci0J YiA9ICZlbnRyaWVzWzFdOwotCWMgPSAmZW50cmllc1syXTsKLQlkID0gJmVudHJpZXNbM107Ci0J ZSA9ICZlbnRyaWVzWzRdOwotCWYgPSAmZW50cmllc1s1XTsKLQlnID0gJmVudHJpZXNbNl07Ci0J aCA9ICZlbnRyaWVzWzddOwotCi0JLyoKLQkgKiBxbF9yZW1vdmUoKSwgcWxfYmVmb3JlX2luc2Vy dCgpLCBhbmQgcWxfYWZ0ZXJfaW5zZXJ0KCkgYXJlIHVzZWQKLQkgKiBpbnRlcm5hbGx5IGJ5IG90 aGVyIG1hY3JvcyB0aGF0IGFyZSBhbHJlYWR5IHRlc3RlZCwgc28gdGhlcmUncyBubwotCSAqIG5l ZWQgdG8gdGVzdCB0aGVtIGNvbXBsZXRlbHkuICBIb3dldmVyLCBpbnNlcnRpb24vZGVsZXRpb24g ZnJvbSB0aGUKLQkgKiBtaWRkbGUgb2YgbGlzdHMgaXMgbm90IG90aGVyd2lzZSB0ZXN0ZWQ7IGRv IHNvIGhlcmUuCi0JICovCi0JcWxfdGFpbF9pbnNlcnQoJmhlYWQsIGYsIGxpbmspOwotCXFsX2Jl Zm9yZV9pbnNlcnQoJmhlYWQsIGYsIGIsIGxpbmspOwotCXFsX2JlZm9yZV9pbnNlcnQoJmhlYWQs IGYsIGMsIGxpbmspOwotCXFsX2FmdGVyX2luc2VydChmLCBoLCBsaW5rKTsKLQlxbF9hZnRlcl9p bnNlcnQoZiwgZywgbGluayk7Ci0JcWxfYmVmb3JlX2luc2VydCgmaGVhZCwgYiwgYSwgbGluayk7 Ci0JcWxfYWZ0ZXJfaW5zZXJ0KGMsIGQsIGxpbmspOwotCXFsX2JlZm9yZV9pbnNlcnQoJmhlYWQs IGYsIGUsIGxpbmspOwotCi0JdGVzdF9lbnRyaWVzX2xpc3QoJmhlYWQsIGVudHJpZXMsIHNpemVv ZihlbnRyaWVzKS9zaXplb2YobGlzdF90KSk7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAot dGVzdF9jb25jYXRfc3BsaXRfZW50cmllcyhsaXN0X3QgKmVudHJpZXMsIHVuc2lnbmVkIG5lbnRy aWVzX2EsCi0gICAgdW5zaWduZWQgbmVudHJpZXNfYikgewotCWluaXRfZW50cmllcyhlbnRyaWVz LCBuZW50cmllc19hICsgbmVudHJpZXNfYik7Ci0KLQlsaXN0X2hlYWRfdCBoZWFkX2E7Ci0JcWxf bmV3KCZoZWFkX2EpOwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZW50cmllc19hOyBpKysp IHsKLQkJcWxfdGFpbF9pbnNlcnQoJmhlYWRfYSwgJmVudHJpZXNbaV0sIGxpbmspOwotCX0KLQlp ZiAobmVudHJpZXNfYSA9PSAwKSB7Ci0JCXRlc3RfZW1wdHlfbGlzdCgmaGVhZF9hKTsKLQl9IGVs c2UgewotCQl0ZXN0X2VudHJpZXNfbGlzdCgmaGVhZF9hLCBlbnRyaWVzLCBuZW50cmllc19hKTsK LQl9Ci0KLQlsaXN0X2hlYWRfdCBoZWFkX2I7Ci0JcWxfbmV3KCZoZWFkX2IpOwotCWZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBuZW50cmllc19iOyBpKyspIHsKLQkJcWxfdGFpbF9pbnNlcnQoJmhl YWRfYiwgJmVudHJpZXNbbmVudHJpZXNfYSArIGldLCBsaW5rKTsKLQl9Ci0JaWYgKG5lbnRyaWVz X2IgPT0gMCkgewotCQl0ZXN0X2VtcHR5X2xpc3QoJmhlYWRfYik7Ci0JfSBlbHNlIHsKLQkJdGVz dF9lbnRyaWVzX2xpc3QoJmhlYWRfYiwgZW50cmllcyArIG5lbnRyaWVzX2EsIG5lbnRyaWVzX2Ip OwotCX0KLQotCXFsX2NvbmNhdCgmaGVhZF9hLCAmaGVhZF9iLCBsaW5rKTsKLQlpZiAobmVudHJp ZXNfYSArIG5lbnRyaWVzX2IgPT0gMCkgewotCQl0ZXN0X2VtcHR5X2xpc3QoJmhlYWRfYSk7Ci0J fSBlbHNlIHsKLQkJdGVzdF9lbnRyaWVzX2xpc3QoJmhlYWRfYSwgZW50cmllcywgbmVudHJpZXNf YSArIG5lbnRyaWVzX2IpOwotCX0KLQl0ZXN0X2VtcHR5X2xpc3QoJmhlYWRfYik7Ci0KLQlpZiAo bmVudHJpZXNfYiA9PSAwKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0X2hlYWRfdCBoZWFkX2M7 Ci0JcWxfc3BsaXQoJmhlYWRfYSwgJmVudHJpZXNbbmVudHJpZXNfYV0sICZoZWFkX2MsIGxpbmsp OwotCWlmIChuZW50cmllc19hID09IDApIHsKLQkJdGVzdF9lbXB0eV9saXN0KCZoZWFkX2EpOwot CX0gZWxzZSB7Ci0JCXRlc3RfZW50cmllc19saXN0KCZoZWFkX2EsIGVudHJpZXMsIG5lbnRyaWVz X2EpOwotCX0KLQl0ZXN0X2VudHJpZXNfbGlzdCgmaGVhZF9jLCBlbnRyaWVzICsgbmVudHJpZXNf YSwgbmVudHJpZXNfYik7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9xbF9jb25jYXRfc3BsaXQpIHsK LQlsaXN0X3QgZW50cmllc1tORU5UUklFU107Ci0KLQl0ZXN0X2NvbmNhdF9zcGxpdF9lbnRyaWVz KGVudHJpZXMsIDAsIDApOwotCi0JdGVzdF9jb25jYXRfc3BsaXRfZW50cmllcyhlbnRyaWVzLCAw LCAxKTsKLQl0ZXN0X2NvbmNhdF9zcGxpdF9lbnRyaWVzKGVudHJpZXMsIDEsIDApOwotCi0JdGVz dF9jb25jYXRfc3BsaXRfZW50cmllcyhlbnRyaWVzLCAwLCBORU5UUklFUyk7Ci0JdGVzdF9jb25j YXRfc3BsaXRfZW50cmllcyhlbnRyaWVzLCAxLCBORU5UUklFUyAtIDEpOwotCXRlc3RfY29uY2F0 X3NwbGl0X2VudHJpZXMoZW50cmllcywgTkVOVFJJRVMgLyAyLAotCSAgICBORU5UUklFUyAtIE5F TlRSSUVTIC8gMik7Ci0JdGVzdF9jb25jYXRfc3BsaXRfZW50cmllcyhlbnRyaWVzLCBORU5UUklF UyAtIDEsIDEpOwotCXRlc3RfY29uY2F0X3NwbGl0X2VudHJpZXMoZW50cmllcywgTkVOVFJJRVMs IDApOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3FsX3JvdGF0ZSkgewotCWxpc3Rf aGVhZF90IGhlYWQ7Ci0JbGlzdF90IGVudHJpZXNbTkVOVFJJRVNdOwotCXVuc2lnbmVkIGk7Ci0K LQlxbF9uZXcoJmhlYWQpOwotCWluaXRfZW50cmllcyhlbnRyaWVzLCBzaXplb2YoZW50cmllcykv c2l6ZW9mKGxpc3RfdCkpOwotCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7Ci0JCXFs X3RhaWxfaW5zZXJ0KCZoZWFkLCAmZW50cmllc1tpXSwgbGluayk7Ci0JfQotCi0JY2hhciBoZWFk X2lkID0gcWxfZmlyc3QoJmhlYWQpLT5pZDsKLQlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkr KykgewotCQlhc3NlcnRfY19lcShxbF9maXJzdCgmaGVhZCktPmlkLCBoZWFkX2lkLCAiIik7Ci0J CXFsX3JvdGF0ZSgmaGVhZCwgbGluayk7Ci0JCWFzc2VydF9jX2VxKHFsX2xhc3QoJmhlYWQsIGxp bmspLT5pZCwgaGVhZF9pZCwgIiIpOwotCQloZWFkX2lkKys7Ci0JfQotCXRlc3RfZW50cmllc19s aXN0KCZoZWFkLCBlbnRyaWVzLCBORU5UUklFUyk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lO KHRlc3RfcWxfbW92ZSkgewotCWxpc3RfaGVhZF90IGhlYWRfZGVzdCwgaGVhZF9zcmM7Ci0JbGlz dF90IGVudHJpZXNbTkVOVFJJRVNdOwotCXVuc2lnbmVkIGk7Ci0KLQlxbF9uZXcoJmhlYWRfc3Jj KTsKLQlxbF9tb3ZlKCZoZWFkX2Rlc3QsICZoZWFkX3NyYyk7Ci0JdGVzdF9lbXB0eV9saXN0KCZo ZWFkX3NyYyk7Ci0JdGVzdF9lbXB0eV9saXN0KCZoZWFkX2Rlc3QpOwotCi0JaW5pdF9lbnRyaWVz KGVudHJpZXMsIHNpemVvZihlbnRyaWVzKS9zaXplb2YobGlzdF90KSk7Ci0JZm9yIChpID0gMDsg aSA8IE5FTlRSSUVTOyBpKyspIHsKLQkJcWxfdGFpbF9pbnNlcnQoJmhlYWRfc3JjLCAmZW50cmll c1tpXSwgbGluayk7Ci0JfQotCXFsX21vdmUoJmhlYWRfZGVzdCwgJmhlYWRfc3JjKTsKLQl0ZXN0 X2VtcHR5X2xpc3QoJmhlYWRfc3JjKTsKLQl0ZXN0X2VudHJpZXNfbGlzdCgmaGVhZF9kZXN0LCBl bnRyaWVzLCBORU5UUklFUyk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJl dHVybiB0ZXN0KAotCSAgICB0ZXN0X3FsX2VtcHR5LAotCSAgICB0ZXN0X3FsX3RhaWxfaW5zZXJ0 LAotCSAgICB0ZXN0X3FsX3RhaWxfcmVtb3ZlLAotCSAgICB0ZXN0X3FsX2hlYWRfaW5zZXJ0LAot CSAgICB0ZXN0X3FsX2hlYWRfcmVtb3ZlLAotCSAgICB0ZXN0X3FsX2luc2VydCwKLQkgICAgdGVz dF9xbF9jb25jYXRfc3BsaXQsCi0JICAgIHRlc3RfcWxfcm90YXRlLAotCSAgICB0ZXN0X3FsX21v dmUpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9xci5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3FyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZWVkMGUu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3FyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotI2luY2x1ZGUgInRl c3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvcXIuaCIK LQotLyogTnVtYmVyIG9mIHJpbmcgZW50cmllcywgaW4gWzIuLjI2XS4gKi8KLSNkZWZpbmUgTkVO VFJJRVMgOQotLyogU3BsaXQgaW5kZXgsIGluIFsxLi5ORU5UUklFUykuICovCi0jZGVmaW5lIFNQ TElUX0lOREVYIDUKLQotdHlwZWRlZiBzdHJ1Y3QgcmluZ19zIHJpbmdfdDsKLQotc3RydWN0IHJp bmdfcyB7Ci0JcXIocmluZ190KSBsaW5rOwotCWNoYXIgaWQ7Ci19OwotCi1zdGF0aWMgdm9pZAot aW5pdF9lbnRyaWVzKHJpbmdfdCAqZW50cmllcykgewotCXVuc2lnbmVkIGk7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgewotCQlxcl9uZXcoJmVudHJpZXNbaV0sIGxpbmspOwot CQllbnRyaWVzW2ldLmlkID0gJ2EnICsgaTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X2lu ZGVwZW5kZW50X2VudHJpZXMocmluZ190ICplbnRyaWVzKSB7Ci0JcmluZ190ICp0OwotCXVuc2ln bmVkIGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgewotCQlqID0gMDsK LQkJcXJfZm9yZWFjaCh0LCAmZW50cmllc1tpXSwgbGluaykgewotCQkJaisrOwotCQl9Ci0JCWV4 cGVjdF91X2VxKGosIDEsCi0JCSAgICAiSXRlcmF0aW9uIG92ZXIgc2luZ2xlLWVsZW1lbnQgcmlu ZyBzaG91bGQgdmlzaXQgcHJlY2lzZWx5ICIKLQkJICAgICJvbmUgZWxlbWVudCIpOwotCX0KLQlm b3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgewotCQlqID0gMDsKLQkJcXJfcmV2ZXJzZV9m b3JlYWNoKHQsICZlbnRyaWVzW2ldLCBsaW5rKSB7Ci0JCQlqKys7Ci0JCX0KLQkJZXhwZWN0X3Vf ZXEoaiwgMSwKLQkJICAgICJJdGVyYXRpb24gb3ZlciBzaW5nbGUtZWxlbWVudCByaW5nIHNob3Vs ZCB2aXNpdCBwcmVjaXNlbHkgIgotCQkgICAgIm9uZSBlbGVtZW50Iik7Ci0JfQotCWZvciAoaSA9 IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7Ci0JCXQgPSBxcl9uZXh0KCZlbnRyaWVzW2ldLCBsaW5r KTsKLQkJZXhwZWN0X3B0cl9lcSh0LCAmZW50cmllc1tpXSwKLQkJICAgICJOZXh0IGVsZW1lbnQg aW4gc2luZ2xlLWVsZW1lbnQgcmluZyBzaG91bGQgYmUgc2FtZSBhcyAiCi0JCSAgICAiY3VycmVu dCBlbGVtZW50Iik7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7Ci0JCXQg PSBxcl9wcmV2KCZlbnRyaWVzW2ldLCBsaW5rKTsKLQkJZXhwZWN0X3B0cl9lcSh0LCAmZW50cmll c1tpXSwKLQkJICAgICJQcmV2aW91cyBlbGVtZW50IGluIHNpbmdsZS1lbGVtZW50IHJpbmcgc2hv dWxkIGJlIHNhbWUgYXMgIgotCQkgICAgImN1cnJlbnQgZWxlbWVudCIpOwotCX0KLX0KLQotVEVT VF9CRUdJTih0ZXN0X3FyX29uZSkgewotCXJpbmdfdCBlbnRyaWVzW05FTlRSSUVTXTsKLQotCWlu aXRfZW50cmllcyhlbnRyaWVzKTsKLQl0ZXN0X2luZGVwZW5kZW50X2VudHJpZXMoZW50cmllcyk7 Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZAotdGVzdF9lbnRyaWVzX3JpbmcocmluZ190ICpl bnRyaWVzKSB7Ci0JcmluZ190ICp0OwotCXVuc2lnbmVkIGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgTkVOVFJJRVM7IGkrKykgewotCQlqID0gMDsKLQkJcXJfZm9yZWFjaCh0LCAmZW50cmllc1tp XSwgbGluaykgewotCQkJZXhwZWN0X2NfZXEodC0+aWQsIGVudHJpZXNbKGkraikgJSBORU5UUklF U10uaWQsCi0JCQkgICAgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKLQkJCWorKzsKLQkJfQotCX0K LQlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgewotCQlqID0gMDsKLQkJcXJfcmV2ZXJz ZV9mb3JlYWNoKHQsICZlbnRyaWVzW2ldLCBsaW5rKSB7Ci0JCQlleHBlY3RfY19lcSh0LT5pZCwg ZW50cmllc1soTkVOVFJJRVMraS1qLTEpICUKLQkJCSAgICBORU5UUklFU10uaWQsICJFbGVtZW50 IGlkIG1pc21hdGNoIik7Ci0JCQlqKys7Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8IE5FTlRS SUVTOyBpKyspIHsKLQkJdCA9IHFyX25leHQoJmVudHJpZXNbaV0sIGxpbmspOwotCQlleHBlY3Rf Y19lcSh0LT5pZCwgZW50cmllc1soaSsxKSAlIE5FTlRSSUVTXS5pZCwKLQkJICAgICJFbGVtZW50 IGlkIG1pc21hdGNoIik7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7Ci0J CXQgPSBxcl9wcmV2KCZlbnRyaWVzW2ldLCBsaW5rKTsKLQkJZXhwZWN0X2NfZXEodC0+aWQsIGVu dHJpZXNbKE5FTlRSSUVTK2ktMSkgJSBORU5UUklFU10uaWQsCi0JCSAgICAiRWxlbWVudCBpZCBt aXNtYXRjaCIpOwotCX0KLX0KLQotVEVTVF9CRUdJTih0ZXN0X3FyX2FmdGVyX2luc2VydCkgewot CXJpbmdfdCBlbnRyaWVzW05FTlRSSUVTXTsKLQl1bnNpZ25lZCBpOwotCi0JaW5pdF9lbnRyaWVz KGVudHJpZXMpOwotCWZvciAoaSA9IDE7IGkgPCBORU5UUklFUzsgaSsrKSB7Ci0JCXFyX2FmdGVy X2luc2VydCgmZW50cmllc1tpIC0gMV0sICZlbnRyaWVzW2ldLCBsaW5rKTsKLQl9Ci0JdGVzdF9l bnRyaWVzX3JpbmcoZW50cmllcyk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcXJf cmVtb3ZlKSB7Ci0JcmluZ190IGVudHJpZXNbTkVOVFJJRVNdOwotCXJpbmdfdCAqdDsKLQl1bnNp Z25lZCBpLCBqOwotCi0JaW5pdF9lbnRyaWVzKGVudHJpZXMpOwotCWZvciAoaSA9IDE7IGkgPCBO RU5UUklFUzsgaSsrKSB7Ci0JCXFyX2FmdGVyX2luc2VydCgmZW50cmllc1tpIC0gMV0sICZlbnRy aWVzW2ldLCBsaW5rKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgewot CQlqID0gMDsKLQkJcXJfZm9yZWFjaCh0LCAmZW50cmllc1tpXSwgbGluaykgewotCQkJZXhwZWN0 X2NfZXEodC0+aWQsIGVudHJpZXNbaStqXS5pZCwKLQkJCSAgICAiRWxlbWVudCBpZCBtaXNtYXRj aCIpOwotCQkJaisrOwotCQl9Ci0JCWogPSAwOwotCQlxcl9yZXZlcnNlX2ZvcmVhY2godCwgJmVu dHJpZXNbaV0sIGxpbmspIHsKLQkJCWV4cGVjdF9jX2VxKHQtPmlkLCBlbnRyaWVzW05FTlRSSUVT IC0gMSAtIGpdLmlkLAotCQkJIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKLQkJCWorKzsKLQkJfQot CQlxcl9yZW1vdmUoJmVudHJpZXNbaV0sIGxpbmspOwotCX0KLQl0ZXN0X2luZGVwZW5kZW50X2Vu dHJpZXMoZW50cmllcyk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcXJfYmVmb3Jl X2luc2VydCkgewotCXJpbmdfdCBlbnRyaWVzW05FTlRSSUVTXTsKLQlyaW5nX3QgKnQ7Ci0JdW5z aWduZWQgaSwgajsKLQotCWluaXRfZW50cmllcyhlbnRyaWVzKTsKLQlmb3IgKGkgPSAxOyBpIDwg TkVOVFJJRVM7IGkrKykgewotCQlxcl9iZWZvcmVfaW5zZXJ0KCZlbnRyaWVzW2kgLSAxXSwgJmVu dHJpZXNbaV0sIGxpbmspOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTkVOVFJJRVM7IGkrKykgewot CQlqID0gMDsKLQkJcXJfZm9yZWFjaCh0LCAmZW50cmllc1tpXSwgbGluaykgewotCQkJZXhwZWN0 X2NfZXEodC0+aWQsIGVudHJpZXNbKE5FTlRSSUVTK2ktaikgJQotCQkJICAgIE5FTlRSSUVTXS5p ZCwgIkVsZW1lbnQgaWQgbWlzbWF0Y2giKTsKLQkJCWorKzsKLQkJfQotCX0KLQlmb3IgKGkgPSAw OyBpIDwgTkVOVFJJRVM7IGkrKykgewotCQlqID0gMDsKLQkJcXJfcmV2ZXJzZV9mb3JlYWNoKHQs ICZlbnRyaWVzW2ldLCBsaW5rKSB7Ci0JCQlleHBlY3RfY19lcSh0LT5pZCwgZW50cmllc1soaStq KzEpICUgTkVOVFJJRVNdLmlkLAotCQkJICAgICJFbGVtZW50IGlkIG1pc21hdGNoIik7Ci0JCQlq Kys7Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8IE5FTlRSSUVTOyBpKyspIHsKLQkJdCA9IHFy X25leHQoJmVudHJpZXNbaV0sIGxpbmspOwotCQlleHBlY3RfY19lcSh0LT5pZCwgZW50cmllc1so TkVOVFJJRVMraS0xKSAlIE5FTlRSSUVTXS5pZCwKLQkJICAgICJFbGVtZW50IGlkIG1pc21hdGNo Iik7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBORU5UUklFUzsgaSsrKSB7Ci0JCXQgPSBxcl9wcmV2 KCZlbnRyaWVzW2ldLCBsaW5rKTsKLQkJZXhwZWN0X2NfZXEodC0+aWQsIGVudHJpZXNbKGkrMSkg JSBORU5UUklFU10uaWQsCi0JCSAgICAiRWxlbWVudCBpZCBtaXNtYXRjaCIpOwotCX0KLX0KLVRF U1RfRU5ECi0KLXN0YXRpYyB2b2lkCi10ZXN0X3NwbGl0X2VudHJpZXMocmluZ190ICplbnRyaWVz KSB7Ci0JcmluZ190ICp0OwotCXVuc2lnbmVkIGksIGo7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTkVO VFJJRVM7IGkrKykgewotCQlqID0gMDsKLQkJcXJfZm9yZWFjaCh0LCAmZW50cmllc1tpXSwgbGlu aykgewotCQkJaWYgKGkgPCBTUExJVF9JTkRFWCkgewotCQkJCWV4cGVjdF9jX2VxKHQtPmlkLAot CQkJCSAgICBlbnRyaWVzWyhpK2opICUgU1BMSVRfSU5ERVhdLmlkLAotCQkJCSAgICAiRWxlbWVu dCBpZCBtaXNtYXRjaCIpOwotCQkJfSBlbHNlIHsKLQkJCQlleHBlY3RfY19lcSh0LT5pZCwgZW50 cmllc1soaStqLVNQTElUX0lOREVYKSAlCi0JCQkJICAgIChORU5UUklFUy1TUExJVF9JTkRFWCkg KyBTUExJVF9JTkRFWF0uaWQsCi0JCQkJICAgICJFbGVtZW50IGlkIG1pc21hdGNoIik7Ci0JCQl9 Ci0JCQlqKys7Ci0JCX0KLQl9Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9xcl9tZWxkX3NwbGl0KSB7 Ci0JcmluZ190IGVudHJpZXNbTkVOVFJJRVNdOwotCXVuc2lnbmVkIGk7Ci0KLQlpbml0X2VudHJp ZXMoZW50cmllcyk7Ci0JZm9yIChpID0gMTsgaSA8IE5FTlRSSUVTOyBpKyspIHsKLQkJcXJfYWZ0 ZXJfaW5zZXJ0KCZlbnRyaWVzW2kgLSAxXSwgJmVudHJpZXNbaV0sIGxpbmspOwotCX0KLQotCXFy X3NwbGl0KCZlbnRyaWVzWzBdLCAmZW50cmllc1tTUExJVF9JTkRFWF0sIGxpbmspOwotCXRlc3Rf c3BsaXRfZW50cmllcyhlbnRyaWVzKTsKLQotCXFyX21lbGQoJmVudHJpZXNbMF0sICZlbnRyaWVz W1NQTElUX0lOREVYXSwgbGluayk7Ci0JdGVzdF9lbnRyaWVzX3JpbmcoZW50cmllcyk7Ci0KLQlx cl9tZWxkKCZlbnRyaWVzWzBdLCAmZW50cmllc1tTUExJVF9JTkRFWF0sIGxpbmspOwotCXRlc3Rf c3BsaXRfZW50cmllcyhlbnRyaWVzKTsKLQotCXFyX3NwbGl0KCZlbnRyaWVzWzBdLCAmZW50cmll c1tTUExJVF9JTkRFWF0sIGxpbmspOwotCXRlc3RfZW50cmllc19yaW5nKGVudHJpZXMpOwotCi0J cXJfc3BsaXQoJmVudHJpZXNbMF0sICZlbnRyaWVzWzBdLCBsaW5rKTsKLQl0ZXN0X2VudHJpZXNf cmluZyhlbnRyaWVzKTsKLQotCXFyX21lbGQoJmVudHJpZXNbMF0sICZlbnRyaWVzWzBdLCBsaW5r KTsKLQl0ZXN0X2VudHJpZXNfcmluZyhlbnRyaWVzKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFp bih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfcXJfb25lLAotCSAgICB0ZXN0X3Fy X2FmdGVyX2luc2VydCwKLQkgICAgdGVzdF9xcl9yZW1vdmUsCi0JICAgIHRlc3RfcXJfYmVmb3Jl X2luc2VydCwKLQkgICAgdGVzdF9xcl9tZWxkX3NwbGl0KTsKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcmIuYyBiLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9yYi5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjdlYzUxLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9yYi5jCisrKyAvZGV2L251bGwK QEAgLTEsMTAxOSArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNp bmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3JiLmgiCi0K LSNkZWZpbmUgcmJ0bl9ibGFja19oZWlnaHQoYV90eXBlLCBhX2ZpZWxkLCBhX3JidCwgcl9oZWln aHQpIGRvIHsJXAotCWFfdHlwZSAqcmJwX2JoX3Q7CQkJCQkJXAotCWZvciAocmJwX2JoX3QgPSAo YV9yYnQpLT5yYnRfcm9vdCwgKHJfaGVpZ2h0KSA9IDA7IHJicF9iaF90ICE9CVwKLQkgICAgTlVM TDsgcmJwX2JoX3QgPSByYnRuX2xlZnRfZ2V0KGFfdHlwZSwgYV9maWVsZCwJCVwKLQkgICAgcmJw X2JoX3QpKSB7CQkJCQkJXAotCQlpZiAoIXJidG5fcmVkX2dldChhX3R5cGUsIGFfZmllbGQsIHJi cF9iaF90KSkgewkJXAotCQkocl9oZWlnaHQpKys7CQkJCQkJXAotCQl9CQkJCQkJCVwKLQl9CQkJ CQkJCQlcCi19IHdoaWxlICgwKQotCi1zdGF0aWMgYm9vbCBzdW1tYXJpemVfYWx3YXlzX3JldHVy bnNfdHJ1ZSA9IGZhbHNlOwotCi10eXBlZGVmIHN0cnVjdCBub2RlX3Mgbm9kZV90Owotc3RydWN0 IG5vZGVfcyB7Ci0jZGVmaW5lIE5PREVfTUFHSUMgMHg5ODIzYWY3ZQotCXVpbnQzMl90IG1hZ2lj OwotCXJiX25vZGUobm9kZV90KSBsaW5rOwotCS8qIE9yZGVyIHVzZWQgYnkgbm9kZXMuICovCi0J dWludDY0X3Qga2V5OwotCS8qCi0JICogT3VyIG1hZGUtdXAgc3VtbWFyeSBwcm9wZXJ0eSBpcyAi c3BlY2lhbG5lc3MiLCB3aXRoIHN1bW1hcml6YXRpb24KLQkgKiB0YWtpbmcgdGhlIG1heC4KLQkg Ki8KLQl1aW50NjRfdCBzcGVjaWFsbmVzczsKLQotCS8qCi0JICogVXNlZCBieSBzb21lIG9mIHRo ZSB0ZXN0IHJhbmRvbWl6YXRpb24gdG8gYXZvaWQgZG91YmxlLXJlbW92aW5nCi0JICogbm9kZXMu Ci0JICovCi0JYm9vbCBtaWRfcmVtb3ZlOwotCi0JLyoKLQkgKiBUbyB0ZXN0IHNlYXJjaGluZyBm dW5jdGlvbmFsaXR5LCB3ZSB3YW50IHRvIHRlbXBvcmFyaWx5IHdlYWtlbiB0aGUKLQkgKiBvcmRl cmluZyB0byBhbGxvdyBub24tZXF1YWwgbm9kZXMgdGhhdCBuZXZlcnRoZWxlc3MgY29tcGFyZSBl cXVhbC4KLQkgKi8KLQlib29sIGFsbG93X2R1cGxpY2F0ZXM7Ci0KLQkvKgotCSAqIEluIGNoZWNr X2NvbnNpc3RlbmN5LCBpdCdzIGhhbmR5IHRvIGtub3cgYSBub2RlJ3MgcmFuayBpbiB0aGUgdHJl ZTsKLQkgKiB0aGlzIHRyYWNrcyBpdCAoYnV0IG9ubHkgdGhlcmU7IG5vdCBhbGwgdGVzdHMgdXNl IHRoaXMpLgotCSAqLwotCWludCByYW5rOwotCWludCBmaWx0ZXJlZF9yYW5rOwotCi0JLyoKLQkg KiBSZXBsaWNhdGUgdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGUgdHJlZSwgdG8gbWFrZSBz dXJlIHRoZQotCSAqIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgbWlzcyBhbnkgdXBkYXRlcy4KLQkg Ki8KLQljb25zdCBub2RlX3QgKnN1bW1hcnlfbGNoaWxkOwotCWNvbnN0IG5vZGVfdCAqc3VtbWFy eV9yY2hpbGQ7Ci0JdWludDY0X3Qgc3VtbWFyeV9tYXhfc3BlY2lhbG5lc3M7Ci19OwotCi1zdGF0 aWMgaW50Ci1ub2RlX2NtcChjb25zdCBub2RlX3QgKmEsIGNvbnN0IG5vZGVfdCAqYikgewotCWlu dCByZXQ7Ci0KLQlleHBlY3RfdTMyX2VxKGEtPm1hZ2ljLCBOT0RFX01BR0lDLCAiQmFkIG1hZ2lj Iik7Ci0JZXhwZWN0X3UzMl9lcShiLT5tYWdpYywgTk9ERV9NQUdJQywgIkJhZCBtYWdpYyIpOwot Ci0JcmV0ID0gKGEtPmtleSA+IGItPmtleSkgLSAoYS0+a2V5IDwgYi0+a2V5KTsKLQlpZiAocmV0 ID09IDAgJiYgIWEtPmFsbG93X2R1cGxpY2F0ZXMpIHsKLQkJLyoKLQkJICogRHVwbGljYXRlcyBh cmUgbm90IGFsbG93ZWQgaW4gdGhlIHRyZWUsIHNvIGZvcmNlIGFuCi0JCSAqIGFyYml0cmFyeSBv cmRlcmluZyBmb3Igbm9uLWlkZW50aWNhbCBpdGVtcyB3aXRoIGVxdWFsIGtleXMsCi0JCSAqIHVu bGVzcyB0aGUgdXNlciBpcyBzZWFyY2hpbmcgYW5kIHdhbnRzIHRvIGFsbG93IHRoZQotCQkgKiBk dXBsaWNhdGUuCi0JCSAqLwotCQlyZXQgPSAoKCh1aW50cHRyX3QpYSkgPiAoKHVpbnRwdHJfdCli KSkKLQkJICAgIC0gKCgodWludHB0cl90KWEpIDwgKCh1aW50cHRyX3QpYikpOwotCX0KLQlyZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgdWludDY0X3QKLW5vZGVfc3VidHJlZV9zcGVjaWFsbmVzcyhu b2RlX3QgKm4sIGNvbnN0IG5vZGVfdCAqbGNoaWxkLAotICAgIGNvbnN0IG5vZGVfdCAqcmNoaWxk KSB7Ci0JdWludDY0X3Qgc3VidHJlZV9zcGVjaWFsbmVzcyA9IG4tPnNwZWNpYWxuZXNzOwotCWlm IChsY2hpbGQgIT0gTlVMTAotCSAgICAmJiBsY2hpbGQtPnN1bW1hcnlfbWF4X3NwZWNpYWxuZXNz ID4gc3VidHJlZV9zcGVjaWFsbmVzcykgewotCQlzdWJ0cmVlX3NwZWNpYWxuZXNzID0gbGNoaWxk LT5zdW1tYXJ5X21heF9zcGVjaWFsbmVzczsKLQl9Ci0JaWYgKHJjaGlsZCAhPSBOVUxMCi0JICAg ICYmIHJjaGlsZC0+c3VtbWFyeV9tYXhfc3BlY2lhbG5lc3MgPiBzdWJ0cmVlX3NwZWNpYWxuZXNz KSB7Ci0JCXN1YnRyZWVfc3BlY2lhbG5lc3MgPSByY2hpbGQtPnN1bW1hcnlfbWF4X3NwZWNpYWxu ZXNzOwotCX0KLQlyZXR1cm4gc3VidHJlZV9zcGVjaWFsbmVzczsKLX0KLQotc3RhdGljIGJvb2wK LW5vZGVfc3VtbWFyaXplKG5vZGVfdCAqYSwgY29uc3Qgbm9kZV90ICpsY2hpbGQsIGNvbnN0IG5v ZGVfdCAqcmNoaWxkKSB7Ci0JdWludDY0X3QgbmV3X3N1bW1hcnlfbWF4X3NwZWNpYWxuZXNzID0g bm9kZV9zdWJ0cmVlX3NwZWNpYWxuZXNzKAotCSAgICBhLCBsY2hpbGQsIHJjaGlsZCk7Ci0JYm9v bCBjaGFuZ2VkID0gKGEtPnN1bW1hcnlfbGNoaWxkICE9IGxjaGlsZCkKLQkgICAgfHwgKGEtPnN1 bW1hcnlfcmNoaWxkICE9IHJjaGlsZCkKLQkgICAgfHwgKG5ld19zdW1tYXJ5X21heF9zcGVjaWFs bmVzcyAhPSBhLT5zdW1tYXJ5X21heF9zcGVjaWFsbmVzcyk7Ci0JYS0+c3VtbWFyeV9tYXhfc3Bl Y2lhbG5lc3MgPSBuZXdfc3VtbWFyeV9tYXhfc3BlY2lhbG5lc3M7Ci0JYS0+c3VtbWFyeV9sY2hp bGQgPSBsY2hpbGQ7Ci0JYS0+c3VtbWFyeV9yY2hpbGQgPSByY2hpbGQ7Ci0JcmV0dXJuIGNoYW5n ZWQgfHwgc3VtbWFyaXplX2Fsd2F5c19yZXR1cm5zX3RydWU7Ci19Ci0KLXR5cGVkZWYgcmJfdHJl ZShub2RlX3QpIHRyZWVfdDsKLXJiX3N1bW1hcml6ZWRfcHJvdG8oc3RhdGljLCB0cmVlXywgdHJl ZV90LCBub2RlX3QpOwotcmJfc3VtbWFyaXplZF9nZW4oc3RhdGljLCB0cmVlXywgdHJlZV90LCBu b2RlX3QsIGxpbmssIG5vZGVfY21wLAotICAgIG5vZGVfc3VtbWFyaXplKTsKLQotc3RhdGljIGJv b2wKLXNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlKHZvaWQgKmN0eCwgbm9kZV90ICpub2RlKSB7Ci0J dWludDY0X3Qgc3BlY2lhbG5lc3MgPSAqKHVpbnQ2NF90ICopY3R4OwotCXJldHVybiBub2RlLT5z cGVjaWFsbmVzcyA+PSBzcGVjaWFsbmVzczsKLX0KLQotc3RhdGljIGJvb2wKLXNwZWNpYWxuZXNz X2ZpbHRlcl9zdWJ0cmVlKHZvaWQgKmN0eCwgbm9kZV90ICpub2RlKSB7Ci0JdWludDY0X3Qgc3Bl Y2lhbG5lc3MgPSAqKHVpbnQ2NF90ICopY3R4OwotCXJldHVybiBub2RlLT5zdW1tYXJ5X21heF9z cGVjaWFsbmVzcyA+PSBzcGVjaWFsbmVzczsKLX0KLQotc3RhdGljIG5vZGVfdCAqCi10cmVlX2l0 ZXJhdGVfY2IodHJlZV90ICp0cmVlLCBub2RlX3QgKm5vZGUsIHZvaWQgKmRhdGEpIHsKLQl1bnNp Z25lZCAqaSA9ICh1bnNpZ25lZCAqKWRhdGE7Ci0Jbm9kZV90ICpzZWFyY2hfbm9kZTsKLQotCWV4 cGVjdF91MzJfZXEobm9kZS0+bWFnaWMsIE5PREVfTUFHSUMsICJCYWQgbWFnaWMiKTsKLQotCS8q IFRlc3QgcmJfc2VhcmNoKCkuICovCi0Jc2VhcmNoX25vZGUgPSB0cmVlX3NlYXJjaCh0cmVlLCBu b2RlKTsKLQlleHBlY3RfcHRyX2VxKHNlYXJjaF9ub2RlLCBub2RlLAotCSAgICAidHJlZV9zZWFy Y2goKSByZXR1cm5lZCB1bmV4cGVjdGVkIG5vZGUiKTsKLQotCS8qIFRlc3QgcmJfbnNlYXJjaCgp LiAqLwotCXNlYXJjaF9ub2RlID0gdHJlZV9uc2VhcmNoKHRyZWUsIG5vZGUpOwotCWV4cGVjdF9w dHJfZXEoc2VhcmNoX25vZGUsIG5vZGUsCi0JICAgICJ0cmVlX25zZWFyY2goKSByZXR1cm5lZCB1 bmV4cGVjdGVkIG5vZGUiKTsKLQotCS8qIFRlc3QgcmJfcHNlYXJjaCgpLiAqLwotCXNlYXJjaF9u b2RlID0gdHJlZV9wc2VhcmNoKHRyZWUsIG5vZGUpOwotCWV4cGVjdF9wdHJfZXEoc2VhcmNoX25v ZGUsIG5vZGUsCi0JICAgICJ0cmVlX3BzZWFyY2goKSByZXR1cm5lZCB1bmV4cGVjdGVkIG5vZGUi KTsKLQotCSgqaSkrKzsKLQotCXJldHVybiBOVUxMOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcmJf ZW1wdHkpIHsKLQl0cmVlX3QgdHJlZTsKLQlub2RlX3Qga2V5OwotCi0JdHJlZV9uZXcoJnRyZWUp OwotCi0JZXhwZWN0X3RydWUodHJlZV9lbXB0eSgmdHJlZSksICJUcmVlIHNob3VsZCBiZSBlbXB0 eSIpOwotCWV4cGVjdF9wdHJfbnVsbCh0cmVlX2ZpcnN0KCZ0cmVlKSwgIlVuZXhwZWN0ZWQgbm9k ZSIpOwotCWV4cGVjdF9wdHJfbnVsbCh0cmVlX2xhc3QoJnRyZWUpLCAiVW5leHBlY3RlZCBub2Rl Iik7Ci0KLQlrZXkua2V5ID0gMDsKLQlrZXkubWFnaWMgPSBOT0RFX01BR0lDOwotCWV4cGVjdF9w dHJfbnVsbCh0cmVlX3NlYXJjaCgmdHJlZSwgJmtleSksICJVbmV4cGVjdGVkIG5vZGUiKTsKLQot CWtleS5rZXkgPSAwOwotCWtleS5tYWdpYyA9IE5PREVfTUFHSUM7Ci0JZXhwZWN0X3B0cl9udWxs KHRyZWVfbnNlYXJjaCgmdHJlZSwgJmtleSksICJVbmV4cGVjdGVkIG5vZGUiKTsKLQotCWtleS5r ZXkgPSAwOwotCWtleS5tYWdpYyA9IE5PREVfTUFHSUM7Ci0JZXhwZWN0X3B0cl9udWxsKHRyZWVf cHNlYXJjaCgmdHJlZSwgJmtleSksICJVbmV4cGVjdGVkIG5vZGUiKTsKLQotCXVuc2lnbmVkIG5v ZGVzID0gMDsKLQl0cmVlX2l0ZXJfZmlsdGVyZWQoJnRyZWUsIE5VTEwsICZ0cmVlX2l0ZXJhdGVf Y2IsCi0JICAgICZub2RlcywgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3Nf ZmlsdGVyX3N1YnRyZWUsCi0JICAgIE5VTEwpOwotCWV4cGVjdF91X2VxKDAsIG5vZGVzLCAiIik7 Ci0KLQlub2RlcyA9IDA7Ci0JdHJlZV9yZXZlcnNlX2l0ZXJfZmlsdGVyZWQoJnRyZWUsIE5VTEws ICZ0cmVlX2l0ZXJhdGVfY2IsCi0JICAgICZub2RlcywgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2Rl LCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCi0JICAgIE5VTEwpOwotCWV4cGVjdF91X2Vx KDAsIG5vZGVzLCAiIik7Ci0KLQlleHBlY3RfcHRyX251bGwodHJlZV9maXJzdF9maWx0ZXJlZCgm dHJlZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLAotCSAgICAmc3BlY2lhbG5lc3NfZmlsdGVy X3N1YnRyZWUsIE5VTEwpLCAiIik7Ci0JZXhwZWN0X3B0cl9udWxsKHRyZWVfbGFzdF9maWx0ZXJl ZCgmdHJlZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLAotCSAgICAmc3BlY2lhbG5lc3NfZmls dGVyX3N1YnRyZWUsIE5VTEwpLCAiIik7Ci0KLQlrZXkua2V5ID0gMDsKLQlrZXkubWFnaWMgPSBO T0RFX01BR0lDOwotCWV4cGVjdF9wdHJfbnVsbCh0cmVlX3NlYXJjaF9maWx0ZXJlZCgmdHJlZSwg JmtleSwKLQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVy X3N1YnRyZWUsIE5VTEwpLCAiIik7Ci0JZXhwZWN0X3B0cl9udWxsKHRyZWVfbnNlYXJjaF9maWx0 ZXJlZCgmdHJlZSwgJmtleSwKLQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lh bG5lc3NfZmlsdGVyX3N1YnRyZWUsIE5VTEwpLCAiIik7Ci0JZXhwZWN0X3B0cl9udWxsKHRyZWVf cHNlYXJjaF9maWx0ZXJlZCgmdHJlZSwgJmtleSwKLQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9u b2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsIE5VTEwpLCAiIik7Ci19Ci1URVNUX0VO RAotCi1zdGF0aWMgdW5zaWduZWQKLXRyZWVfcmVjdXJzZShub2RlX3QgKm5vZGUsIHVuc2lnbmVk IGJsYWNrX2hlaWdodCwgdW5zaWduZWQgYmxhY2tfZGVwdGgpIHsKLQl1bnNpZ25lZCByZXQgPSAw OwotCW5vZGVfdCAqbGVmdF9ub2RlOwotCW5vZGVfdCAqcmlnaHRfbm9kZTsKLQotCWlmIChub2Rl ID09IE5VTEwpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlsZWZ0X25vZGUgPSByYnRuX2xlZnRf Z2V0KG5vZGVfdCwgbGluaywgbm9kZSk7Ci0JcmlnaHRfbm9kZSA9IHJidG5fcmlnaHRfZ2V0KG5v ZGVfdCwgbGluaywgbm9kZSk7Ci0KLQlleHBlY3RfcHRyX2VxKGxlZnRfbm9kZSwgbm9kZS0+c3Vt bWFyeV9sY2hpbGQsCi0JICAgICJzdW1tYXJ5IG1pc3NlZCBhIHRyZWUgdXBkYXRlIik7Ci0JZXhw ZWN0X3B0cl9lcShyaWdodF9ub2RlLCBub2RlLT5zdW1tYXJ5X3JjaGlsZCwKLQkgICAgInN1bW1h cnkgbWlzc2VkIGEgdHJlZSB1cGRhdGUiKTsKLQotCXVpbnQ2NF90IGV4cGVjdGVkX3N1YnRyZWVf c3BlY2lhbG5lc3MgPSBub2RlX3N1YnRyZWVfc3BlY2lhbG5lc3Mobm9kZSwKLQkgICAgbGVmdF9u b2RlLCByaWdodF9ub2RlKTsKLQlleHBlY3RfdTY0X2VxKGV4cGVjdGVkX3N1YnRyZWVfc3BlY2lh bG5lc3MsCi0JICAgIG5vZGUtPnN1bW1hcnlfbWF4X3NwZWNpYWxuZXNzLCAiSW5jb3JyZWN0IHN1 bW1hcnkiKTsKLQotCWlmICghcmJ0bl9yZWRfZ2V0KG5vZGVfdCwgbGluaywgbm9kZSkpIHsKLQkJ YmxhY2tfZGVwdGgrKzsKLQl9Ci0KLQkvKiBSZWQgbm9kZXMgbXVzdCBiZSBpbnRlcmxlYXZlZCB3 aXRoIGJsYWNrIG5vZGVzLiAqLwotCWlmIChyYnRuX3JlZF9nZXQobm9kZV90LCBsaW5rLCBub2Rl KSkgewotCQlpZiAobGVmdF9ub2RlICE9IE5VTEwpIHsKLQkJCWV4cGVjdF9mYWxzZShyYnRuX3Jl ZF9nZXQobm9kZV90LCBsaW5rLCBsZWZ0X25vZGUpLAotCQkJCSJOb2RlIHNob3VsZCBiZSBibGFj ayIpOwotCQl9Ci0JCWlmIChyaWdodF9ub2RlICE9IE5VTEwpIHsKLQkJCWV4cGVjdF9mYWxzZShy YnRuX3JlZF9nZXQobm9kZV90LCBsaW5rLCByaWdodF9ub2RlKSwKLQkJCSAgICAiTm9kZSBzaG91 bGQgYmUgYmxhY2siKTsKLQkJfQotCX0KLQotCS8qIFNlbGYuICovCi0JZXhwZWN0X3UzMl9lcShu b2RlLT5tYWdpYywgTk9ERV9NQUdJQywgIkJhZCBtYWdpYyIpOwotCi0JLyogTGVmdCBzdWJ0cmVl LiAqLwotCWlmIChsZWZ0X25vZGUgIT0gTlVMTCkgewotCQlyZXQgKz0gdHJlZV9yZWN1cnNlKGxl ZnRfbm9kZSwgYmxhY2tfaGVpZ2h0LCBibGFja19kZXB0aCk7Ci0JfSBlbHNlIHsKLQkJcmV0ICs9 IChibGFja19kZXB0aCAhPSBibGFja19oZWlnaHQpOwotCX0KLQotCS8qIFJpZ2h0IHN1YnRyZWUu ICovCi0JaWYgKHJpZ2h0X25vZGUgIT0gTlVMTCkgewotCQlyZXQgKz0gdHJlZV9yZWN1cnNlKHJp Z2h0X25vZGUsIGJsYWNrX2hlaWdodCwgYmxhY2tfZGVwdGgpOwotCX0gZWxzZSB7Ci0JCXJldCAr PSAoYmxhY2tfZGVwdGggIT0gYmxhY2tfaGVpZ2h0KTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQot Ci1zdGF0aWMgdW5zaWduZWQKLXRyZWVfaXRlcmF0ZSh0cmVlX3QgKnRyZWUpIHsKLQl1bnNpZ25l ZCBpOwotCi0JaSA9IDA7Ci0JdHJlZV9pdGVyKHRyZWUsIE5VTEwsIHRyZWVfaXRlcmF0ZV9jYiwg KHZvaWQgKikmaSk7Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIHVuc2lnbmVkCi10cmVlX2l0 ZXJhdGVfcmV2ZXJzZSh0cmVlX3QgKnRyZWUpIHsKLQl1bnNpZ25lZCBpOwotCi0JaSA9IDA7Ci0J dHJlZV9yZXZlcnNlX2l0ZXIodHJlZSwgTlVMTCwgdHJlZV9pdGVyYXRlX2NiLCAodm9pZCAqKSZp KTsKLQotCXJldHVybiBpOwotfQotCi1zdGF0aWMgdm9pZAotbm9kZV9yZW1vdmUodHJlZV90ICp0 cmVlLCBub2RlX3QgKm5vZGUsIHVuc2lnbmVkIG5ub2RlcykgewotCW5vZGVfdCAqc2VhcmNoX25v ZGU7Ci0JdW5zaWduZWQgYmxhY2tfaGVpZ2h0LCBpbWJhbGFuY2VzOwotCi0JdHJlZV9yZW1vdmUo dHJlZSwgbm9kZSk7Ci0KLQkvKiBUZXN0IHJiX25zZWFyY2goKS4gKi8KLQlzZWFyY2hfbm9kZSA9 IHRyZWVfbnNlYXJjaCh0cmVlLCBub2RlKTsKLQlpZiAoc2VhcmNoX25vZGUgIT0gTlVMTCkgewot CQlleHBlY3RfdTY0X2dlKHNlYXJjaF9ub2RlLT5rZXksIG5vZGUtPmtleSwKLQkJICAgICJLZXkg b3JkZXJpbmcgZXJyb3IiKTsKLQl9Ci0KLQkvKiBUZXN0IHJiX3BzZWFyY2goKS4gKi8KLQlzZWFy Y2hfbm9kZSA9IHRyZWVfcHNlYXJjaCh0cmVlLCBub2RlKTsKLQlpZiAoc2VhcmNoX25vZGUgIT0g TlVMTCkgewotCQlleHBlY3RfdTY0X2xlKHNlYXJjaF9ub2RlLT5rZXksIG5vZGUtPmtleSwKLQkJ ICAgICJLZXkgb3JkZXJpbmcgZXJyb3IiKTsKLQl9Ci0KLQlub2RlLT5tYWdpYyA9IDA7Ci0KLQly YnRuX2JsYWNrX2hlaWdodChub2RlX3QsIGxpbmssIHRyZWUsIGJsYWNrX2hlaWdodCk7Ci0JaW1i YWxhbmNlcyA9IHRyZWVfcmVjdXJzZSh0cmVlLT5yYnRfcm9vdCwgYmxhY2tfaGVpZ2h0LCAwKTsK LQlleHBlY3RfdV9lcShpbWJhbGFuY2VzLCAwLCAiVHJlZSBpcyB1bmJhbGFuY2VkIik7Ci0JZXhw ZWN0X3VfZXEodHJlZV9pdGVyYXRlKHRyZWUpLCBubm9kZXMtMSwKLQkgICAgIlVuZXhwZWN0ZWQg bm9kZSBpdGVyYXRpb24gY291bnQiKTsKLQlleHBlY3RfdV9lcSh0cmVlX2l0ZXJhdGVfcmV2ZXJz ZSh0cmVlKSwgbm5vZGVzLTEsCi0JICAgICJVbmV4cGVjdGVkIG5vZGUgaXRlcmF0aW9uIGNvdW50 Iik7Ci19Ci0KLXN0YXRpYyBub2RlX3QgKgotcmVtb3ZlX2l0ZXJhdGVfY2IodHJlZV90ICp0cmVl LCBub2RlX3QgKm5vZGUsIHZvaWQgKmRhdGEpIHsKLQl1bnNpZ25lZCAqbm5vZGVzID0gKHVuc2ln bmVkICopZGF0YTsKLQlub2RlX3QgKnJldCA9IHRyZWVfbmV4dCh0cmVlLCBub2RlKTsKLQotCW5v ZGVfcmVtb3ZlKHRyZWUsIG5vZGUsICpubm9kZXMpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3Rh dGljIG5vZGVfdCAqCi1yZW1vdmVfcmV2ZXJzZV9pdGVyYXRlX2NiKHRyZWVfdCAqdHJlZSwgbm9k ZV90ICpub2RlLCB2b2lkICpkYXRhKSB7Ci0JdW5zaWduZWQgKm5ub2RlcyA9ICh1bnNpZ25lZCAq KWRhdGE7Ci0Jbm9kZV90ICpyZXQgPSB0cmVlX3ByZXYodHJlZSwgbm9kZSk7Ci0KLQlub2RlX3Jl bW92ZSh0cmVlLCBub2RlLCAqbm5vZGVzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1kZXN0cm95X2NiKG5vZGVfdCAqbm9kZSwgdm9pZCAqZGF0YSkgewotCXVuc2lnbmVkICpu bm9kZXMgPSAodW5zaWduZWQgKilkYXRhOwotCi0JZXhwZWN0X3VfZ3QoKm5ub2RlcywgMCwgIkRl c3RydWN0aW9uIHJlbW92ZWQgdG9vIG1hbnkgbm9kZXMiKTsKLQkoKm5ub2RlcyktLTsKLX0KLQot VEVTVF9CRUdJTih0ZXN0X3JiX3JhbmRvbSkgewotCWVudW0gewotCQlOTk9ERVMgPSAyNSwKLQkJ TkJBR1MgPSA1MDAsCi0JCVNFRUQgPSA0MgotCX07Ci0Jc2ZtdF90ICpzZm10OwotCXVpbnQ2NF90 IGJhZ1tOTk9ERVNdOwotCXRyZWVfdCB0cmVlOwotCW5vZGVfdCBub2Rlc1tOTk9ERVNdOwotCXVu c2lnbmVkIGksIGosIGssIGJsYWNrX2hlaWdodCwgaW1iYWxhbmNlczsKLQotCXNmbXQgPSBpbml0 X2dlbl9yYW5kKFNFRUQpOwotCWZvciAoaSA9IDA7IGkgPCBOQkFHUzsgaSsrKSB7Ci0JCXN3aXRj aCAoaSkgewotCQljYXNlIDA6Ci0JCQkvKiBJbnNlcnQgaW4gb3JkZXIuICovCi0JCQlmb3IgKGog PSAwOyBqIDwgTk5PREVTOyBqKyspIHsKLQkJCQliYWdbal0gPSBqOwotCQkJfQotCQkJYnJlYWs7 Ci0JCWNhc2UgMToKLQkJCS8qIEluc2VydCBpbiByZXZlcnNlIG9yZGVyLiAqLwotCQkJZm9yIChq ID0gMDsgaiA8IE5OT0RFUzsgaisrKSB7Ci0JCQkJYmFnW2pdID0gTk5PREVTIC0gaiAtIDE7Ci0J CQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWZvciAoaiA9IDA7IGogPCBOTk9ERVM7IGor KykgewotCQkJCWJhZ1tqXSA9IGdlbl9yYW5kNjRfcmFuZ2Uoc2ZtdCwgTk5PREVTKTsKLQkJCX0K LQkJfQotCi0JCS8qCi0JCSAqIFdlIGFsdGVybmF0ZSB0ZXN0IGJlaGF2aW9yIHdpdGggYSBwZXJp b2Qgb2YgMiBoZXJlLCBhbmQgYQotCQkgKiBwZXJpb2Qgb2YgNSBkb3duIGJlbG93LCBzbyB0aGVy ZSdzIG5vIGN5Y2xlIGluIHdoaWNoIGNlcnRhaW4KLQkJICogY29tYmluYXRpb25zIGdldCBvbWl0 dGVkLgotCQkgKi8KLQkJc3VtbWFyaXplX2Fsd2F5c19yZXR1cm5zX3RydWUgPSAoaSAlIDIgPT0g MCk7Ci0KLQkJZm9yIChqID0gMTsgaiA8PSBOTk9ERVM7IGorKykgewotCQkJLyogSW5pdGlhbGl6 ZSB0cmVlIGFuZCBub2Rlcy4gKi8KLQkJCXRyZWVfbmV3KCZ0cmVlKTsKLQkJCWZvciAoayA9IDA7 IGsgPCBqOyBrKyspIHsKLQkJCQlub2Rlc1trXS5tYWdpYyA9IE5PREVfTUFHSUM7Ci0JCQkJbm9k ZXNba10ua2V5ID0gYmFnW2tdOwotCQkJCW5vZGVzW2tdLnNwZWNpYWxuZXNzID0gZ2VuX3JhbmQ2 NF9yYW5nZShzZm10LAotCQkJCSAgICBOTk9ERVMpOwotCQkJCW5vZGVzW2tdLm1pZF9yZW1vdmUg PSBmYWxzZTsKLQkJCQlub2Rlc1trXS5hbGxvd19kdXBsaWNhdGVzID0gZmFsc2U7Ci0JCQkJbm9k ZXNba10uc3VtbWFyeV9sY2hpbGQgPSBOVUxMOwotCQkJCW5vZGVzW2tdLnN1bW1hcnlfcmNoaWxk ID0gTlVMTDsKLQkJCQlub2Rlc1trXS5zdW1tYXJ5X21heF9zcGVjaWFsbmVzcyA9IDA7Ci0JCQl9 Ci0KLQkJCS8qIEluc2VydCBub2Rlcy4gKi8KLQkJCWZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsK LQkJCQl0cmVlX2luc2VydCgmdHJlZSwgJm5vZGVzW2tdKTsKLQotCQkJCXJidG5fYmxhY2tfaGVp Z2h0KG5vZGVfdCwgbGluaywgJnRyZWUsCi0JCQkJICAgIGJsYWNrX2hlaWdodCk7Ci0JCQkJaW1i YWxhbmNlcyA9IHRyZWVfcmVjdXJzZSh0cmVlLnJidF9yb290LAotCQkJCSAgICBibGFja19oZWln aHQsIDApOwotCQkJCWV4cGVjdF91X2VxKGltYmFsYW5jZXMsIDAsCi0JCQkJICAgICJUcmVlIGlz IHVuYmFsYW5jZWQiKTsKLQotCQkJCWV4cGVjdF91X2VxKHRyZWVfaXRlcmF0ZSgmdHJlZSksIGsr MSwKLQkJCQkgICAgIlVuZXhwZWN0ZWQgbm9kZSBpdGVyYXRpb24gY291bnQiKTsKLQkJCQlleHBl Y3RfdV9lcSh0cmVlX2l0ZXJhdGVfcmV2ZXJzZSgmdHJlZSksIGsrMSwKLQkJCQkgICAgIlVuZXhw ZWN0ZWQgbm9kZSBpdGVyYXRpb24gY291bnQiKTsKLQotCQkJCWV4cGVjdF9mYWxzZSh0cmVlX2Vt cHR5KCZ0cmVlKSwKLQkJCQkgICAgIlRyZWUgc2hvdWxkIG5vdCBiZSBlbXB0eSIpOwotCQkJCWV4 cGVjdF9wdHJfbm90X251bGwodHJlZV9maXJzdCgmdHJlZSksCi0JCQkJICAgICJUcmVlIHNob3Vs ZCBub3QgYmUgZW1wdHkiKTsKLQkJCQlleHBlY3RfcHRyX25vdF9udWxsKHRyZWVfbGFzdCgmdHJl ZSksCi0JCQkJICAgICJUcmVlIHNob3VsZCBub3QgYmUgZW1wdHkiKTsKLQotCQkJCXRyZWVfbmV4 dCgmdHJlZSwgJm5vZGVzW2tdKTsKLQkJCQl0cmVlX3ByZXYoJnRyZWUsICZub2Rlc1trXSk7Ci0J CQl9Ci0KLQkJCS8qIFJlbW92ZSBub2Rlcy4gKi8KLQkJCXN3aXRjaCAoaSAlIDUpIHsKLQkJCWNh c2UgMDoKLQkJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7Ci0JCQkJCW5vZGVfcmVtb3ZlKCZ0 cmVlLCAmbm9kZXNba10sIGogLSBrKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0J CQkJZm9yIChrID0gajsgayA+IDA7IGstLSkgewotCQkJCQlub2RlX3JlbW92ZSgmdHJlZSwgJm5v ZGVzW2stMV0sIGspOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgMjogewotCQkJCW5vZGVf dCAqc3RhcnQ7Ci0JCQkJdW5zaWduZWQgbm5vZGVzID0gajsKLQotCQkJCXN0YXJ0ID0gTlVMTDsK LQkJCQlkbyB7Ci0JCQkJCXN0YXJ0ID0gdHJlZV9pdGVyKCZ0cmVlLCBzdGFydCwKLQkJCQkJICAg IHJlbW92ZV9pdGVyYXRlX2NiLCAodm9pZCAqKSZubm9kZXMpOwotCQkJCQlubm9kZXMtLTsKLQkJ CQl9IHdoaWxlIChzdGFydCAhPSBOVUxMKTsKLQkJCQlleHBlY3RfdV9lcShubm9kZXMsIDAsCi0J CQkJICAgICJSZW1vdmFsIHRlcm1pbmF0ZWQgZWFybHkiKTsKLQkJCQlicmVhazsKLQkJCX0gY2Fz ZSAzOiB7Ci0JCQkJbm9kZV90ICpzdGFydDsKLQkJCQl1bnNpZ25lZCBubm9kZXMgPSBqOwotCi0J CQkJc3RhcnQgPSBOVUxMOwotCQkJCWRvIHsKLQkJCQkJc3RhcnQgPSB0cmVlX3JldmVyc2VfaXRl cigmdHJlZSwgc3RhcnQsCi0JCQkJCSAgICByZW1vdmVfcmV2ZXJzZV9pdGVyYXRlX2NiLAotCQkJ CQkgICAgKHZvaWQgKikmbm5vZGVzKTsKLQkJCQkJbm5vZGVzLS07Ci0JCQkJfSB3aGlsZSAoc3Rh cnQgIT0gTlVMTCk7Ci0JCQkJZXhwZWN0X3VfZXEobm5vZGVzLCAwLAotCQkJCSAgICAiUmVtb3Zh bCB0ZXJtaW5hdGVkIGVhcmx5Iik7Ci0JCQkJYnJlYWs7Ci0JCQl9IGNhc2UgNDogewotCQkJCXVu c2lnbmVkIG5ub2RlcyA9IGo7Ci0JCQkJdHJlZV9kZXN0cm95KCZ0cmVlLCBkZXN0cm95X2NiLCAm bm5vZGVzKTsKLQkJCQlleHBlY3RfdV9lcShubm9kZXMsIDAsCi0JCQkJICAgICJEZXN0cnVjdGlv biB0ZXJtaW5hdGVkIGVhcmx5Iik7Ci0JCQkJYnJlYWs7Ci0JCQl9IGRlZmF1bHQ6Ci0JCQkJbm90 X3JlYWNoZWQoKTsKLQkJCX0KLQkJfQotCX0KLQlmaW5pX2dlbl9yYW5kKHNmbXQpOwotfQotVEVT VF9FTkQKLQotc3RhdGljIHZvaWQKLWV4cGVjdF9zaW1wbGVfY29uc2lzdGVuY3kodHJlZV90ICp0 cmVlLCB1aW50NjRfdCBzcGVjaWFsbmVzcywKLSAgICBib29sIGV4cGVjdGVkX2VtcHR5LCBub2Rl X3QgKmV4cGVjdGVkX2ZpcnN0LCBub2RlX3QgKmV4cGVjdGVkX2xhc3QpIHsKLQlib29sIGVtcHR5 OwotCW5vZGVfdCAqZmlyc3Q7Ci0Jbm9kZV90ICpsYXN0OwotCi0JZW1wdHkgPSB0cmVlX2VtcHR5 X2ZpbHRlcmVkKHRyZWUsICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwKLQkgICAgJnNwZWNpYWxu ZXNzX2ZpbHRlcl9zdWJ0cmVlLCAmc3BlY2lhbG5lc3MpOwotCWV4cGVjdF9iX2VxKGV4cGVjdGVk X2VtcHR5LCBlbXB0eSwgIiIpOwotCi0JZmlyc3QgPSB0cmVlX2ZpcnN0X2ZpbHRlcmVkKHRyZWUs Ci0JICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0 cmVlLAotCSAgICAodm9pZCAqKSZzcGVjaWFsbmVzcyk7Ci0JZXhwZWN0X3B0cl9lcShleHBlY3Rl ZF9maXJzdCwgZmlyc3QsICIiKTsKLQotCWxhc3QgPSB0cmVlX2xhc3RfZmlsdGVyZWQodHJlZSwK LQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRy ZWUsCi0JICAgICh2b2lkICopJnNwZWNpYWxuZXNzKTsKLQlleHBlY3RfcHRyX2VxKGV4cGVjdGVk X2xhc3QsIGxhc3QsICIiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3JiX2ZpbHRlcl9zaW1wbGUp IHsKLQllbnVtIHtGSUxURVJfTk9ERVMgPSAxMH07Ci0Jbm9kZV90IG5vZGVzW0ZJTFRFUl9OT0RF U107Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZJTFRFUl9OT0RFUzsgaSsrKSB7Ci0JCW5v ZGVzW2ldLm1hZ2ljID0gTk9ERV9NQUdJQzsKLQkJbm9kZXNbaV0ua2V5ID0gaTsKLQkJaWYgKGkg PT0gMCkgewotCQkJbm9kZXNbaV0uc3BlY2lhbG5lc3MgPSAwOwotCQl9IGVsc2UgewotCQkJbm9k ZXNbaV0uc3BlY2lhbG5lc3MgPSBmZnNfdShpKTsKLQkJfQotCQlub2Rlc1tpXS5taWRfcmVtb3Zl ID0gZmFsc2U7Ci0JCW5vZGVzW2ldLmFsbG93X2R1cGxpY2F0ZXMgPSBmYWxzZTsKLQkJbm9kZXNb aV0uc3VtbWFyeV9sY2hpbGQgPSBOVUxMOwotCQlub2Rlc1tpXS5zdW1tYXJ5X3JjaGlsZCA9IE5V TEw7Ci0JCW5vZGVzW2ldLnN1bW1hcnlfbWF4X3NwZWNpYWxuZXNzID0gMDsKLQl9Ci0KLQlzdW1t YXJpemVfYWx3YXlzX3JldHVybnNfdHJ1ZSA9IGZhbHNlOwotCi0JdHJlZV90IHRyZWU7Ci0JdHJl ZV9uZXcoJnRyZWUpOwotCi0JLyogU2hvdWxkIGJlIGVtcHR5ICovCi0JZXhwZWN0X3NpbXBsZV9j b25zaXN0ZW5jeSgmdHJlZSwgLyogc3BlY2lhbG5lc3MgKi8gMCwgLyogZW1wdHkgKi8gdHJ1ZSwK LQkgICAgLyogZmlyc3QgKi8gTlVMTCwgLyogbGFzdCAqLyBOVUxMKTsKLQotCS8qIEZpbGwgaW4g anVzdCB0aGUgb2RkIG5vZGVzLiAqLwotCWZvciAoaW50IGkgPSAxOyBpIDwgRklMVEVSX05PREVT OyBpICs9IDIpIHsKLQkJdHJlZV9pbnNlcnQoJnRyZWUsICZub2Rlc1tpXSk7Ci0JfQotCi0JLyog QSBzZWFyY2ggZm9yIGFuIG9kZCBub2RlIHNob3VsZCBzdWNjZWVkLiAqLwotCWV4cGVjdF9zaW1w bGVfY29uc2lzdGVuY3koJnRyZWUsIC8qIHNwZWNpYWxuZXNzICovIDAsIC8qIGVtcHR5ICovIGZh bHNlLAotCSAgICAvKiBmaXJzdCAqLyAmbm9kZXNbMV0sIC8qIGxhc3QgKi8gJm5vZGVzWzldKTsK LQotCS8qIEJ1dCBhIHNlYXJjaCBmb3IgYW4gZXZlbiBvbmUgc2hvdWxkIGZhaWwuICovCi0JZXhw ZWN0X3NpbXBsZV9jb25zaXN0ZW5jeSgmdHJlZSwgLyogc3BlY2lhbG5lc3MgKi8gMSwgLyogZW1w dHkgKi8gdHJ1ZSwKLQkgICAgLyogZmlyc3QgKi8gTlVMTCwgLyogbGFzdCAqLyBOVUxMKTsKLQot CS8qIE5vdyB3ZSBhZGQgYW4gZXZlbi4gKi8KLQl0cmVlX2luc2VydCgmdHJlZSwgJm5vZGVzWzRd KTsKLQlleHBlY3Rfc2ltcGxlX2NvbnNpc3RlbmN5KCZ0cmVlLCAvKiBzcGVjaWFsbmVzcyAqLyAx LCAvKiBlbXB0eSAqLyBmYWxzZSwKLQkgICAgLyogZmlyc3QgKi8gJm5vZGVzWzRdLCAvKiBsYXN0 ICovICZub2Rlc1s0XSk7Ci0KLQkvKiBBIHNtYWxsZXIgZXZlbiwgYW5kIGEgbGFyZ2VyIGV2ZW4u ICovCi0JdHJlZV9pbnNlcnQoJnRyZWUsICZub2Rlc1syXSk7Ci0JdHJlZV9pbnNlcnQoJnRyZWUs ICZub2Rlc1s4XSk7Ci0KLQkvKgotCSAqIEEgZmlyc3Qtc2VhcmNoIChyZXNwLiBsYXN0LXNlYXJj aCkgZm9yIGFuIGV2ZW4gc2hvdWxkIHN3aXRjaCB0byB0aGUKLQkgKiBsb3dlciAoaGlnaGVyKSBv bmUsIG5vdyB0aGF0IGl0J3MgYmVlbiBhZGRlZC4KLQkgKi8KLQlleHBlY3Rfc2ltcGxlX2NvbnNp c3RlbmN5KCZ0cmVlLCAvKiBzcGVjaWFsbmVzcyAqLyAxLCAvKiBlbXB0eSAqLyBmYWxzZSwKLQkg ICAgLyogZmlyc3QgKi8gJm5vZGVzWzJdLCAvKiBsYXN0ICovICZub2Rlc1s4XSk7Ci0KLQkvKgot CSAqIElmIHdlIHJlbW92ZSAyLCBhIGZpcnN0LXNlYXJjaCB3ZSBzaG91bGQgZ28gYmFjayB0byA0 LCB3aGlsZSBhCi0JICogbGFzdC1zZWFyY2ggc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQuCi0JICov Ci0JdHJlZV9yZW1vdmUoJnRyZWUsICZub2Rlc1syXSk7Ci0JZXhwZWN0X3NpbXBsZV9jb25zaXN0 ZW5jeSgmdHJlZSwgLyogc3BlY2lhbG5lc3MgKi8gMSwgLyogZW1wdHkgKi8gZmFsc2UsCi0JICAg IC8qIGZpcnN0ICovICZub2Rlc1s0XSwgLyogbGFzdCAqLyAmbm9kZXNbOF0pOwotCi0JLyogUmVp bnNlcnQgMiwgdGhlbiBmaW5kIGl0IGFnYWluLiAqLwotCXRyZWVfaW5zZXJ0KCZ0cmVlLCAmbm9k ZXNbMl0pOwotCWV4cGVjdF9zaW1wbGVfY29uc2lzdGVuY3koJnRyZWUsIC8qIHNwZWNpYWxuZXNz ICovIDEsIC8qIGVtcHR5ICovIGZhbHNlLAotCSAgICAvKiBmaXJzdCAqLyAmbm9kZXNbMl0sIC8q IGxhc3QgKi8gJm5vZGVzWzhdKTsKLQotCS8qIFNlYXJjaGluZyBmb3IgYSBtdWx0aXBsZSBvZiA0 IHNob3VsZCBub3QgaGF2ZSBjaGFuZ2VkLiAqLwotCWV4cGVjdF9zaW1wbGVfY29uc2lzdGVuY3ko JnRyZWUsIC8qIHNwZWNpYWxuZXNzICovIDIsIC8qIGVtcHR5ICovIGZhbHNlLAotCSAgICAvKiBm aXJzdCAqLyAmbm9kZXNbNF0sIC8qIGxhc3QgKi8gJm5vZGVzWzhdKTsKLQotCS8qIEFuZCBhIG11 bHRpcGxlIG9mIDggKi8KLQlleHBlY3Rfc2ltcGxlX2NvbnNpc3RlbmN5KCZ0cmVlLCAvKiBzcGVj aWFsbmVzcyAqLyAzLCAvKiBlbXB0eSAqLyBmYWxzZSwKLQkgICAgLyogZmlyc3QgKi8gJm5vZGVz WzhdLCAvKiBsYXN0ICovICZub2Rlc1s4XSk7Ci0KLQkvKiBCdXQgbm90IGEgbXVsdGlwbGUgb2Yg MTYgKi8KLQlleHBlY3Rfc2ltcGxlX2NvbnNpc3RlbmN5KCZ0cmVlLCAvKiBzcGVjaWFsbmVzcyAq LyA0LCAvKiBlbXB0eSAqLyB0cnVlLAotCSAgICAvKiBmaXJzdCAqLyBOVUxMLCAvKiBsYXN0ICov IE5VTEwpOwotfQotVEVTVF9FTkQKLQotdHlwZWRlZiBzdHJ1Y3QgaXRlcl9jdHhfcyBpdGVyX2N0 eF90Owotc3RydWN0IGl0ZXJfY3R4X3MgewotCWludCBuY2FsbHM7Ci0Jbm9kZV90ICpsYXN0X25v ZGU7Ci0KLQlpbnQgbmNhbGxzX21heDsKLQlib29sIGZvcndhcmQ7Ci19OwotCi1zdGF0aWMgbm9k ZV90ICoKLXRyZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYih0cmVlX3QgKnRyZWUsIG5vZGVfdCAqbm9k ZSwgdm9pZCAqYXJnKSB7Ci0JaXRlcl9jdHhfdCAqY3R4ID0gKGl0ZXJfY3R4X3QgKilhcmc7Ci0J Y3R4LT5uY2FsbHMrKzsKLQlleHBlY3RfdTY0X2dlKG5vZGUtPnNwZWNpYWxuZXNzLCAxLAotCSAg ICAiU2hvdWxkIG9ubHkgaW52b2tlIGNiIG9uIG5vZGVzIHRoYXQgcGFzcyB0aGUgZmlsdGVyIik7 Ci0JaWYgKGN0eC0+bGFzdF9ub2RlICE9IE5VTEwpIHsKLQkJaWYgKGN0eC0+Zm9yd2FyZCkgewot CQkJZXhwZWN0X2RfbHQobm9kZV9jbXAoY3R4LT5sYXN0X25vZGUsIG5vZGUpLCAwLAotCQkJICAg ICJJbmNvcnJlY3QgaXRlcmF0aW9uIG9yZGVyIik7Ci0JCX0gZWxzZSB7Ci0JCQlleHBlY3RfZF9n dChub2RlX2NtcChjdHgtPmxhc3Rfbm9kZSwgbm9kZSksIDAsCi0JCQkgICAgIkluY29ycmVjdCBp dGVyYXRpb24gb3JkZXIiKTsKLQkJfQotCX0KLQljdHgtPmxhc3Rfbm9kZSA9IG5vZGU7Ci0JaWYg KGN0eC0+bmNhbGxzID09IGN0eC0+bmNhbGxzX21heCkgewotCQlyZXR1cm4gbm9kZTsKLQl9Ci0J cmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQKLXFzb3J0X25vZGVfY21wKGNvbnN0IHZvaWQg KmFwLCBjb25zdCB2b2lkICpicCkgewotCW5vZGVfdCAqYSA9ICoobm9kZV90ICoqKWFwOwotCW5v ZGVfdCAqYiA9ICoobm9kZV90ICoqKWJwOwotCXJldHVybiBub2RlX2NtcChhLCBiKTsKLX0KLQot I2RlZmluZSBVUERBVEVfVEVTVF9NQVggMTAwCi1zdGF0aWMgdm9pZAotY2hlY2tfY29uc2lzdGVu Y3kodHJlZV90ICp0cmVlLCBub2RlX3Qgbm9kZXNbVVBEQVRFX1RFU1RfTUFYXSwgaW50IG5ub2Rl cykgewotCXVpbnQ2NF90IHNwZWNpYWxuZXNzID0gMTsKLQotCWJvb2wgZW1wdHk7Ci0JYm9vbCBy ZWFsX2VtcHR5ID0gdHJ1ZTsKLQlub2RlX3QgKmZpcnN0OwotCW5vZGVfdCAqcmVhbF9maXJzdCA9 IE5VTEw7Ci0Jbm9kZV90ICpsYXN0OwotCW5vZGVfdCAqcmVhbF9sYXN0ID0gTlVMTDsKLQlmb3Ig KGludCBpID0gMDsgaSA8IG5ub2RlczsgaSsrKSB7Ci0JCWlmIChub2Rlc1tpXS5zcGVjaWFsbmVz cyA+PSBzcGVjaWFsbmVzcykgewotCQkJcmVhbF9lbXB0eSA9IGZhbHNlOwotCQkJaWYgKHJlYWxf Zmlyc3QgPT0gTlVMTAotCQkJICAgIHx8IG5vZGVfY21wKCZub2Rlc1tpXSwgcmVhbF9maXJzdCkg PCAwKSB7Ci0JCQkJcmVhbF9maXJzdCA9ICZub2Rlc1tpXTsKLQkJCX0KLQkJCWlmIChyZWFsX2xh c3QgPT0gTlVMTAotCQkJICAgIHx8IG5vZGVfY21wKCZub2Rlc1tpXSwgcmVhbF9sYXN0KSA+IDAp IHsKLQkJCQlyZWFsX2xhc3QgPSAmbm9kZXNbaV07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQllbXB0eSA9 IHRyZWVfZW1wdHlfZmlsdGVyZWQodHJlZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLAotCSAg ICAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsICZzcGVjaWFsbmVzcyk7Ci0JZXhwZWN0X2Jf ZXEocmVhbF9lbXB0eSwgZW1wdHksICIiKTsKLQotCWZpcnN0ID0gdHJlZV9maXJzdF9maWx0ZXJl ZCh0cmVlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX25vZGUsCi0JICAgICZzcGVjaWFsbmVzc19maWx0 ZXJfc3VidHJlZSwgJnNwZWNpYWxuZXNzKTsKLQlleHBlY3RfcHRyX2VxKHJlYWxfZmlyc3QsIGZp cnN0LCAiIik7Ci0KLQlsYXN0ID0gdHJlZV9sYXN0X2ZpbHRlcmVkKHRyZWUsICZzcGVjaWFsbmVz c19maWx0ZXJfbm9kZSwKLQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCAmc3BlY2lh bG5lc3MpOwotCWV4cGVjdF9wdHJfZXEocmVhbF9sYXN0LCBsYXN0LCAiIik7Ci0KLQlmb3IgKGlu dCBpID0gMDsgaSA8IG5ub2RlczsgaSsrKSB7Ci0JCW5vZGVfdCAqbmV4dF9maWx0ZXJlZDsKLQkJ bm9kZV90ICpyZWFsX25leHRfZmlsdGVyZWQgPSBOVUxMOwotCQlub2RlX3QgKnByZXZfZmlsdGVy ZWQ7Ci0JCW5vZGVfdCAqcmVhbF9wcmV2X2ZpbHRlcmVkID0gTlVMTDsKLQkJZm9yIChpbnQgaiA9 IDA7IGogPCBubm9kZXM7IGorKykgewotCQkJaWYgKG5vZGVzW2pdLnNwZWNpYWxuZXNzIDwgc3Bl Y2lhbG5lc3MpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChub2RlX2NtcCgmbm9kZXNb al0sICZub2Rlc1tpXSkgPCAwCi0JCQkgICAgJiYgKHJlYWxfcHJldl9maWx0ZXJlZCA9PSBOVUxM Ci0JCQkgICAgfHwgbm9kZV9jbXAoJm5vZGVzW2pdLCByZWFsX3ByZXZfZmlsdGVyZWQpID4gMCkp IHsKLQkJCQlyZWFsX3ByZXZfZmlsdGVyZWQgPSAmbm9kZXNbal07Ci0JCQl9Ci0JCQlpZiAobm9k ZV9jbXAoJm5vZGVzW2pdLCAmbm9kZXNbaV0pID4gMAotCQkJICAgICYmIChyZWFsX25leHRfZmls dGVyZWQgPT0gTlVMTAotCQkJICAgIHx8IG5vZGVfY21wKCZub2Rlc1tqXSwgcmVhbF9uZXh0X2Zp bHRlcmVkKSA8IDApKSB7Ci0JCQkJcmVhbF9uZXh0X2ZpbHRlcmVkID0gJm5vZGVzW2pdOwotCQkJ fQotCQl9Ci0JCW5leHRfZmlsdGVyZWQgPSB0cmVlX25leHRfZmlsdGVyZWQodHJlZSwgJm5vZGVz W2ldLAotCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVy X3N1YnRyZWUsCi0JCSAgICAmc3BlY2lhbG5lc3MpOwotCQlleHBlY3RfcHRyX2VxKHJlYWxfbmV4 dF9maWx0ZXJlZCwgbmV4dF9maWx0ZXJlZCwgIiIpOwotCi0JCXByZXZfZmlsdGVyZWQgPSB0cmVl X3ByZXZfZmlsdGVyZWQodHJlZSwgJm5vZGVzW2ldLAotCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRl cl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCi0JCSAgICAmc3BlY2lhbG5lc3Mp OwotCQlleHBlY3RfcHRyX2VxKHJlYWxfcHJldl9maWx0ZXJlZCwgcHJldl9maWx0ZXJlZCwgIiIp OwotCi0JCW5vZGVfdCAqc2VhcmNoX2ZpbHRlcmVkOwotCQlub2RlX3QgKnJlYWxfc2VhcmNoX2Zp bHRlcmVkOwotCQlub2RlX3QgKm5zZWFyY2hfZmlsdGVyZWQ7Ci0JCW5vZGVfdCAqcmVhbF9uc2Vh cmNoX2ZpbHRlcmVkOwotCQlub2RlX3QgKnBzZWFyY2hfZmlsdGVyZWQ7Ci0JCW5vZGVfdCAqcmVh bF9wc2VhcmNoX2ZpbHRlcmVkOwotCi0JCS8qCi0JCSAqIHNlYXJjaCwgbnNlYXJjaCwgcHNlYXJj aCBmcm9tIGEgbm9kZSBiZWZvcmUgbm9kZXNbaV0gaW4gdGhlCi0JCSAqIG9yZGVyaW5nLgotCQkg Ki8KLQkJbm9kZV90IGJlZm9yZTsKLQkJYmVmb3JlLm1hZ2ljID0gTk9ERV9NQUdJQzsKLQkJYmVm b3JlLmtleSA9IG5vZGVzW2ldLmtleSAtIDE7Ci0JCWJlZm9yZS5hbGxvd19kdXBsaWNhdGVzID0g ZmFsc2U7Ci0JCXJlYWxfc2VhcmNoX2ZpbHRlcmVkID0gTlVMTDsKLQkJc2VhcmNoX2ZpbHRlcmVk ID0gdHJlZV9zZWFyY2hfZmlsdGVyZWQodHJlZSwgJmJlZm9yZSwKLQkJICAgICZzcGVjaWFsbmVz c19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAotCQkgICAgJnNwZWNp YWxuZXNzKTsKLQkJZXhwZWN0X3B0cl9lcShyZWFsX3NlYXJjaF9maWx0ZXJlZCwgc2VhcmNoX2Zp bHRlcmVkLCAiIik7Ci0KLQkJcmVhbF9uc2VhcmNoX2ZpbHRlcmVkID0gKG5vZGVzW2ldLnNwZWNp YWxuZXNzID49IHNwZWNpYWxuZXNzID8KLQkJICAgICZub2Rlc1tpXSA6IHJlYWxfbmV4dF9maWx0 ZXJlZCk7Ci0JCW5zZWFyY2hfZmlsdGVyZWQgPSB0cmVlX25zZWFyY2hfZmlsdGVyZWQodHJlZSwg JmJlZm9yZSwKLQkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2Zp bHRlcl9zdWJ0cmVlLAotCQkgICAgJnNwZWNpYWxuZXNzKTsKLQkJZXhwZWN0X3B0cl9lcShyZWFs X25zZWFyY2hfZmlsdGVyZWQsIG5zZWFyY2hfZmlsdGVyZWQsICIiKTsKLQotCQlyZWFsX3BzZWFy Y2hfZmlsdGVyZWQgPSByZWFsX3ByZXZfZmlsdGVyZWQ7Ci0JCXBzZWFyY2hfZmlsdGVyZWQgPSB0 cmVlX3BzZWFyY2hfZmlsdGVyZWQodHJlZSwgJmJlZm9yZSwKLQkJICAgICZzcGVjaWFsbmVzc19m aWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAotCQkgICAgJnNwZWNpYWxu ZXNzKTsKLQkJZXhwZWN0X3B0cl9lcShyZWFsX3BzZWFyY2hfZmlsdGVyZWQsIHBzZWFyY2hfZmls dGVyZWQsICIiKTsKLQotCQkvKiBzZWFyY2gsIG5zZWFyY2gsIHBzZWFyY2ggZnJvbSBub2Rlc1tp XSAqLwotCQlyZWFsX3NlYXJjaF9maWx0ZXJlZCA9IChub2Rlc1tpXS5zcGVjaWFsbmVzcyA+PSBz cGVjaWFsbmVzcyA/Ci0JCSAgICAmbm9kZXNbaV0gOiBOVUxMKTsKLQkJc2VhcmNoX2ZpbHRlcmVk ID0gdHJlZV9zZWFyY2hfZmlsdGVyZWQodHJlZSwgJm5vZGVzW2ldLAotCQkgICAgJnNwZWNpYWxu ZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCi0JCSAgICAmc3Bl Y2lhbG5lc3MpOwotCQlleHBlY3RfcHRyX2VxKHJlYWxfc2VhcmNoX2ZpbHRlcmVkLCBzZWFyY2hf ZmlsdGVyZWQsICIiKTsKLQotCQlyZWFsX25zZWFyY2hfZmlsdGVyZWQgPSAobm9kZXNbaV0uc3Bl Y2lhbG5lc3MgPj0gc3BlY2lhbG5lc3MgPwotCQkgICAgJm5vZGVzW2ldIDogcmVhbF9uZXh0X2Zp bHRlcmVkKTsKLQkJbnNlYXJjaF9maWx0ZXJlZCA9IHRyZWVfbnNlYXJjaF9maWx0ZXJlZCh0cmVl LCAmbm9kZXNbaV0sCi0JCSAgICAmc3BlY2lhbG5lc3NfZmlsdGVyX25vZGUsICZzcGVjaWFsbmVz c19maWx0ZXJfc3VidHJlZSwKLQkJICAgICZzcGVjaWFsbmVzcyk7Ci0JCWV4cGVjdF9wdHJfZXEo cmVhbF9uc2VhcmNoX2ZpbHRlcmVkLCBuc2VhcmNoX2ZpbHRlcmVkLCAiIik7Ci0KLQkJcmVhbF9w c2VhcmNoX2ZpbHRlcmVkID0gKG5vZGVzW2ldLnNwZWNpYWxuZXNzID49IHNwZWNpYWxuZXNzID8K LQkJICAgICZub2Rlc1tpXSA6IHJlYWxfcHJldl9maWx0ZXJlZCk7Ci0JCXBzZWFyY2hfZmlsdGVy ZWQgPSB0cmVlX3BzZWFyY2hfZmlsdGVyZWQodHJlZSwgJm5vZGVzW2ldLAotCQkgICAgJnNwZWNp YWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCi0JCSAgICAm c3BlY2lhbG5lc3MpOwotCQlleHBlY3RfcHRyX2VxKHJlYWxfcHNlYXJjaF9maWx0ZXJlZCwgcHNl YXJjaF9maWx0ZXJlZCwgIiIpOwotCi0JCS8qCi0JCSAqIHNlYXJjaCwgbnNlYXJjaCwgcHNlYXJj aCBmcm9tIGEgbm9kZSBlcXVpdmFsZW50IHRvIGJ1dAotCQkgKiBkaXN0aW5jdCBmcm9tIG5vZGVz W2ldLgotCQkgKi8KLQkJbm9kZV90IGVxdWl2OwotCQllcXVpdi5tYWdpYyA9IE5PREVfTUFHSUM7 Ci0JCWVxdWl2LmtleSA9IG5vZGVzW2ldLmtleTsKLQkJZXF1aXYuYWxsb3dfZHVwbGljYXRlcyA9 IHRydWU7Ci0JCXJlYWxfc2VhcmNoX2ZpbHRlcmVkID0gKG5vZGVzW2ldLnNwZWNpYWxuZXNzID49 IHNwZWNpYWxuZXNzID8KLQkJICAgICZub2Rlc1tpXSA6IE5VTEwpOwotCQlzZWFyY2hfZmlsdGVy ZWQgPSB0cmVlX3NlYXJjaF9maWx0ZXJlZCh0cmVlLCAmZXF1aXYsCi0JCSAgICAmc3BlY2lhbG5l c3NfZmlsdGVyX25vZGUsICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwKLQkJICAgICZzcGVj aWFsbmVzcyk7Ci0JCWV4cGVjdF9wdHJfZXEocmVhbF9zZWFyY2hfZmlsdGVyZWQsIHNlYXJjaF9m aWx0ZXJlZCwgIiIpOwotCi0JCXJlYWxfbnNlYXJjaF9maWx0ZXJlZCA9IChub2Rlc1tpXS5zcGVj aWFsbmVzcyA+PSBzcGVjaWFsbmVzcyA/Ci0JCSAgICAmbm9kZXNbaV0gOiByZWFsX25leHRfZmls dGVyZWQpOwotCQluc2VhcmNoX2ZpbHRlcmVkID0gdHJlZV9uc2VhcmNoX2ZpbHRlcmVkKHRyZWUs ICZlcXVpdiwKLQkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNwZWNpYWxuZXNzX2Zp bHRlcl9zdWJ0cmVlLAotCQkgICAgJnNwZWNpYWxuZXNzKTsKLQkJZXhwZWN0X3B0cl9lcShyZWFs X25zZWFyY2hfZmlsdGVyZWQsIG5zZWFyY2hfZmlsdGVyZWQsICIiKTsKLQotCQlyZWFsX3BzZWFy Y2hfZmlsdGVyZWQgPSAobm9kZXNbaV0uc3BlY2lhbG5lc3MgPj0gc3BlY2lhbG5lc3MgPwotCQkg ICAgJm5vZGVzW2ldIDogcmVhbF9wcmV2X2ZpbHRlcmVkKTsKLQkJcHNlYXJjaF9maWx0ZXJlZCA9 IHRyZWVfcHNlYXJjaF9maWx0ZXJlZCh0cmVlLCAmZXF1aXYsCi0JCSAgICAmc3BlY2lhbG5lc3Nf ZmlsdGVyX25vZGUsICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwKLQkJICAgICZzcGVjaWFs bmVzcyk7Ci0JCWV4cGVjdF9wdHJfZXEocmVhbF9wc2VhcmNoX2ZpbHRlcmVkLCBwc2VhcmNoX2Zp bHRlcmVkLCAiIik7Ci0KLQkJLyoKLQkJICogc2VhcmNoLCBuc2VhcmNoLCBwc2VhcmNoIGZyb20g YSBub2RlIGFmdGVyIG5vZGVzW2ldIGluIHRoZQotCQkgKiBvcmRlcmluZy4KLQkJICovCi0JCW5v ZGVfdCBhZnRlcjsKLQkJYWZ0ZXIubWFnaWMgPSBOT0RFX01BR0lDOwotCQlhZnRlci5rZXkgPSBu b2Rlc1tpXS5rZXkgKyAxOwotCQlhZnRlci5hbGxvd19kdXBsaWNhdGVzID0gZmFsc2U7Ci0JCXJl YWxfc2VhcmNoX2ZpbHRlcmVkID0gTlVMTDsKLQkJc2VhcmNoX2ZpbHRlcmVkID0gdHJlZV9zZWFy Y2hfZmlsdGVyZWQodHJlZSwgJmFmdGVyLAotCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2Rl LCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCi0JCSAgICAmc3BlY2lhbG5lc3MpOwotCQll eHBlY3RfcHRyX2VxKHJlYWxfc2VhcmNoX2ZpbHRlcmVkLCBzZWFyY2hfZmlsdGVyZWQsICIiKTsK LQotCQlyZWFsX25zZWFyY2hfZmlsdGVyZWQgPSByZWFsX25leHRfZmlsdGVyZWQ7Ci0JCW5zZWFy Y2hfZmlsdGVyZWQgPSB0cmVlX25zZWFyY2hfZmlsdGVyZWQodHJlZSwgJmFmdGVyLAotCQkgICAg JnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLCAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsCi0J CSAgICAmc3BlY2lhbG5lc3MpOwotCQlleHBlY3RfcHRyX2VxKHJlYWxfbnNlYXJjaF9maWx0ZXJl ZCwgbnNlYXJjaF9maWx0ZXJlZCwgIiIpOwotCi0JCXJlYWxfcHNlYXJjaF9maWx0ZXJlZCA9IChu b2Rlc1tpXS5zcGVjaWFsbmVzcyA+PSBzcGVjaWFsbmVzcyA/Ci0JCSAgICAmbm9kZXNbaV0gOiBy ZWFsX3ByZXZfZmlsdGVyZWQpOwotCQlwc2VhcmNoX2ZpbHRlcmVkID0gdHJlZV9wc2VhcmNoX2Zp bHRlcmVkKHRyZWUsICZhZnRlciwKLQkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwgJnNw ZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLAotCQkgICAgJnNwZWNpYWxuZXNzKTsKLQkJZXhwZWN0 X3B0cl9lcShyZWFsX3BzZWFyY2hfZmlsdGVyZWQsIHBzZWFyY2hfZmlsdGVyZWQsICIiKTsKLQl9 Ci0KLQkvKiBGaWx0ZXJlZCBpdGVyYXRpb24gdGVzdCBzZXR1cC4gKi8KLQlpbnQgbnNwZWNpYWwg PSAwOwotCW5vZGVfdCAqc29ydGVkX25vZGVzW1VQREFURV9URVNUX01BWF07Ci0Jbm9kZV90ICpz b3J0ZWRfZmlsdGVyZWRfbm9kZXNbVVBEQVRFX1RFU1RfTUFYXTsKLQlmb3IgKGludCBpID0gMDsg aSA8IG5ub2RlczsgaSsrKSB7Ci0JCXNvcnRlZF9ub2Rlc1tpXSA9ICZub2Rlc1tpXTsKLQl9Ci0J cXNvcnQoc29ydGVkX25vZGVzLCBubm9kZXMsIHNpemVvZihub2RlX3QgKiksICZxc29ydF9ub2Rl X2NtcCk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBubm9kZXM7IGkrKykgewotCQlzb3J0ZWRfbm9k ZXNbaV0tPnJhbmsgPSBpOwotCQlzb3J0ZWRfbm9kZXNbaV0tPmZpbHRlcmVkX3JhbmsgPSBuc3Bl Y2lhbDsKLQkJaWYgKHNvcnRlZF9ub2Rlc1tpXS0+c3BlY2lhbG5lc3MgPj0gMSkgewotCQkJc29y dGVkX2ZpbHRlcmVkX25vZGVzW25zcGVjaWFsXSA9IHNvcnRlZF9ub2Rlc1tpXTsKLQkJCW5zcGVj aWFsKys7Ci0JCX0KLQl9Ci0KLQlub2RlX3QgKml0ZXJfcmVzdWx0OwotCi0JaXRlcl9jdHhfdCBj dHg7Ci0JY3R4Lm5jYWxscyA9IDA7Ci0JY3R4Lmxhc3Rfbm9kZSA9IE5VTEw7Ci0JY3R4Lm5jYWxs c19tYXggPSBJTlRfTUFYOwotCWN0eC5mb3J3YXJkID0gdHJ1ZTsKLQotCS8qIEZpbHRlcmVkIGZv cndhcmQgaXRlcmF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy4gKi8KLQlpdGVyX3Jlc3VsdCA9IHRy ZWVfaXRlcl9maWx0ZXJlZCh0cmVlLCBOVUxMLCAmdHJlZV9pdGVyYXRlX2ZpbHRlcmVkX2NiLAot CSAgICAmY3R4LCAmc3BlY2lhbG5lc3NfZmlsdGVyX25vZGUsICZzcGVjaWFsbmVzc19maWx0ZXJf c3VidHJlZSwKLQkgICAgJnNwZWNpYWxuZXNzKTsKLQlleHBlY3RfcHRyX251bGwoaXRlcl9yZXN1 bHQsICIiKTsKLQlleHBlY3RfZF9lcShuc3BlY2lhbCwgY3R4Lm5jYWxscywgIiIpOwotCS8qIEZp bHRlcmVkIGZvcndhcmQgaXRlcmF0aW9uIGZyb20gYSBzdGFydGluZyBwb2ludC4gKi8KLQlmb3Ig KGludCBpID0gMDsgaSA8IG5ub2RlczsgaSsrKSB7Ci0JCWN0eC5uY2FsbHMgPSAwOwotCQljdHgu bGFzdF9ub2RlID0gTlVMTDsKLQkJaXRlcl9yZXN1bHQgPSB0cmVlX2l0ZXJfZmlsdGVyZWQodHJl ZSwgJm5vZGVzW2ldLAotCQkgICAgJnRyZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwgJmN0eCwgJnNw ZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLAotCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVl LCAmc3BlY2lhbG5lc3MpOwotCQlleHBlY3RfcHRyX251bGwoaXRlcl9yZXN1bHQsICIiKTsKLQkJ ZXhwZWN0X2RfZXEobnNwZWNpYWwgLSBub2Rlc1tpXS5maWx0ZXJlZF9yYW5rLCBjdHgubmNhbGxz LCAiIik7Ci0JfQotCS8qIEZpbHRlcmVkIGZvcndhcmQgaXRlcmF0aW9uIGZyb20gdGhlIGJlZ2lu bmluZywgd2l0aCBzdG9wcGluZyAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgbnNwZWNpYWw7IGkr KykgewotCQljdHgubmNhbGxzID0gMDsKLQkJY3R4Lmxhc3Rfbm9kZSA9IE5VTEw7Ci0JCWN0eC5u Y2FsbHNfbWF4ID0gaSArIDE7Ci0JCWl0ZXJfcmVzdWx0ID0gdHJlZV9pdGVyX2ZpbHRlcmVkKHRy ZWUsIE5VTEwsCi0JCSAgICAmdHJlZV9pdGVyYXRlX2ZpbHRlcmVkX2NiLCAmY3R4LCAmc3BlY2lh bG5lc3NfZmlsdGVyX25vZGUsCi0JCSAgICAmc3BlY2lhbG5lc3NfZmlsdGVyX3N1YnRyZWUsICZz cGVjaWFsbmVzcyk7Ci0JCWV4cGVjdF9wdHJfZXEoc29ydGVkX2ZpbHRlcmVkX25vZGVzW2ldLCBp dGVyX3Jlc3VsdCwgIiIpOwotCQlleHBlY3RfZF9lcShjdHgubmNhbGxzLCBpICsgMSwgIiIpOwot CX0KLQkvKiBGaWx0ZXJlZCBmb3J3YXJkIGl0ZXJhdGlvbiBmcm9tIGEgc3RhcnRpbmcgcG9pbnQs IHdpdGggc3RvcHBpbmcuICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBubm9kZXM7IGkrKykgewot CQlmb3IgKGludCBqID0gMDsgaiA8IG5zcGVjaWFsIC0gbm9kZXNbaV0uZmlsdGVyZWRfcmFuazsg aisrKSB7Ci0JCQljdHgubmNhbGxzID0gMDsKLQkJCWN0eC5sYXN0X25vZGUgPSBOVUxMOwotCQkJ Y3R4Lm5jYWxsc19tYXggPSBqICsgMTsKLQkJCWl0ZXJfcmVzdWx0ID0gdHJlZV9pdGVyX2ZpbHRl cmVkKHRyZWUsICZub2Rlc1tpXSwKLQkJCSAgICAmdHJlZV9pdGVyYXRlX2ZpbHRlcmVkX2NiLCAm Y3R4LAotCQkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwKLQkJCSAgICAmc3BlY2lhbG5l c3NfZmlsdGVyX3N1YnRyZWUsICZzcGVjaWFsbmVzcyk7Ci0JCQlleHBlY3RfZF9lcShqICsgMSwg Y3R4Lm5jYWxscywgIiIpOwotCQkJZXhwZWN0X3B0cl9lcShzb3J0ZWRfZmlsdGVyZWRfbm9kZXNb Ci0JCQkgICAgbm9kZXNbaV0uZmlsdGVyZWRfcmFuayArIGpdLCBpdGVyX3Jlc3VsdCwgIiIpOwot CQl9Ci0JfQotCi0JLyogQmFja3dhcmRzIGl0ZXJhdGlvbi4gKi8KLQljdHgubmNhbGxzID0gMDsK LQljdHgubGFzdF9ub2RlID0gTlVMTDsKLQljdHgubmNhbGxzX21heCA9IElOVF9NQVg7Ci0JY3R4 LmZvcndhcmQgPSBmYWxzZTsKLQotCS8qIEZpbHRlcmVkIGJhY2t3YXJkIGl0ZXJhdGlvbiBmcm9t IHRoZSBlbmQuICovCi0JaXRlcl9yZXN1bHQgPSB0cmVlX3JldmVyc2VfaXRlcl9maWx0ZXJlZCh0 cmVlLCBOVUxMLAotCSAgICAmdHJlZV9pdGVyYXRlX2ZpbHRlcmVkX2NiLCAmY3R4LCAmc3BlY2lh bG5lc3NfZmlsdGVyX25vZGUsCi0JICAgICZzcGVjaWFsbmVzc19maWx0ZXJfc3VidHJlZSwgJnNw ZWNpYWxuZXNzKTsKLQlleHBlY3RfcHRyX251bGwoaXRlcl9yZXN1bHQsICIiKTsKLQlleHBlY3Rf ZF9lcShuc3BlY2lhbCwgY3R4Lm5jYWxscywgIiIpOwotCS8qIEZpbHRlcmVkIGJhY2t3YXJkIGl0 ZXJhdGlvbiBmcm9tIGEgc3RhcnRpbmcgcG9pbnQuICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBu bm9kZXM7IGkrKykgewotCQljdHgubmNhbGxzID0gMDsKLQkJY3R4Lmxhc3Rfbm9kZSA9IE5VTEw7 Ci0JCWl0ZXJfcmVzdWx0ID0gdHJlZV9yZXZlcnNlX2l0ZXJfZmlsdGVyZWQodHJlZSwgJm5vZGVz W2ldLAotCQkgICAgJnRyZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwgJmN0eCwgJnNwZWNpYWxuZXNz X2ZpbHRlcl9ub2RlLAotCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0cmVlLCAmc3BlY2lh bG5lc3MpOwotCQlleHBlY3RfcHRyX251bGwoaXRlcl9yZXN1bHQsICIiKTsKLQkJaW50IHN1cnBs dXNfcmFuayA9IChub2Rlc1tpXS5zcGVjaWFsbmVzcyA+PSAxID8gMSA6IDApOwotCQlleHBlY3Rf ZF9lcShub2Rlc1tpXS5maWx0ZXJlZF9yYW5rICsgc3VycGx1c19yYW5rLCBjdHgubmNhbGxzLAot CQkgICAgIiIpOwotCX0KLQkvKiBGaWx0ZXJlZCBiYWNrd2FyZCBpdGVyYXRpb24gZnJvbSB0aGUg ZW5kLCB3aXRoIHN0b3BwaW5nICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBuc3BlY2lhbDsgaSsr KSB7Ci0JCWN0eC5uY2FsbHMgPSAwOwotCQljdHgubGFzdF9ub2RlID0gTlVMTDsKLQkJY3R4Lm5j YWxsc19tYXggPSBpICsgMTsKLQkJaXRlcl9yZXN1bHQgPSB0cmVlX3JldmVyc2VfaXRlcl9maWx0 ZXJlZCh0cmVlLCBOVUxMLAotCQkgICAgJnRyZWVfaXRlcmF0ZV9maWx0ZXJlZF9jYiwgJmN0eCwg JnNwZWNpYWxuZXNzX2ZpbHRlcl9ub2RlLAotCQkgICAgJnNwZWNpYWxuZXNzX2ZpbHRlcl9zdWJ0 cmVlLCAmc3BlY2lhbG5lc3MpOwotCQlleHBlY3RfcHRyX2VxKHNvcnRlZF9maWx0ZXJlZF9ub2Rl c1tuc3BlY2lhbCAtIGkgLSAxXSwKLQkJICAgIGl0ZXJfcmVzdWx0LCAiIik7Ci0JCWV4cGVjdF9k X2VxKGN0eC5uY2FsbHMsIGkgKyAxLCAiIik7Ci0JfQotCS8qIEZpbHRlcmVkIGJhY2t3YXJkIGl0 ZXJhdGlvbiBmcm9tIGEgc3RhcnRpbmcgcG9pbnQsIHdpdGggc3RvcHBpbmcuICovCi0JZm9yIChp bnQgaSA9IDA7IGkgPCBubm9kZXM7IGkrKykgewotCQlpbnQgc3VycGx1c19yYW5rID0gKG5vZGVz W2ldLnNwZWNpYWxuZXNzID49IDEgPyAxIDogMCk7Ci0JCWZvciAoaW50IGogPSAwOyBqIDwgbm9k ZXNbaV0uZmlsdGVyZWRfcmFuayArIHN1cnBsdXNfcmFuazsKLQkJICAgIGorKykgewotCQkJY3R4 Lm5jYWxscyA9IDA7Ci0JCQljdHgubGFzdF9ub2RlID0gTlVMTDsKLQkJCWN0eC5uY2FsbHNfbWF4 ID0gaiArIDE7Ci0JCQlpdGVyX3Jlc3VsdCA9IHRyZWVfcmV2ZXJzZV9pdGVyX2ZpbHRlcmVkKHRy ZWUsCi0JCQkgICAgJm5vZGVzW2ldLCAmdHJlZV9pdGVyYXRlX2ZpbHRlcmVkX2NiLCAmY3R4LAot CQkJICAgICZzcGVjaWFsbmVzc19maWx0ZXJfbm9kZSwKLQkJCSAgICAmc3BlY2lhbG5lc3NfZmls dGVyX3N1YnRyZWUsICZzcGVjaWFsbmVzcyk7Ci0JCQlleHBlY3RfZF9lcShqICsgMSwgY3R4Lm5j YWxscywgIiIpOwotCQkJZXhwZWN0X3B0cl9lcShzb3J0ZWRfZmlsdGVyZWRfbm9kZXNbCi0JCQkg ICAgbm9kZXNbaV0uZmlsdGVyZWRfcmFuayAtIGogLSAxICsgc3VycGx1c19yYW5rXSwKLQkJCSAg ICBpdGVyX3Jlc3VsdCwgIiIpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZG9fdXBkYXRl X3NlYXJjaF90ZXN0KGludCBubm9kZXMsIGludCBudHJlZXMsIGludCBucmVtb3ZhbHMsCi0gICAg aW50IG51cGRhdGVzKSB7Ci0Jbm9kZV90IG5vZGVzW1VQREFURV9URVNUX01BWF07Ci0JYXNzZXJ0 KG5ub2RlcyA8PSBVUERBVEVfVEVTVF9NQVgpOwotCi0Jc2ZtdF90ICpzZm10ID0gaW5pdF9nZW5f cmFuZCgxMjM0NSk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBudHJlZXM7IGkrKykgewotCQl0cmVl X3QgdHJlZTsKLQkJdHJlZV9uZXcoJnRyZWUpOwotCQlmb3IgKGludCBqID0gMDsgaiA8IG5ub2Rl czsgaisrKSB7Ci0JCQlub2Rlc1tqXS5tYWdpYyA9IE5PREVfTUFHSUM7Ci0JCQkvKgotCQkJICog SW4gY29uc2lzdGVuY3kgY2hlY2tpbmcsIHdlIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYQotCQkJ ICoga2V5IGFuZCBhc3N1bWUgdGhhdCB0aGUgcmVzdWx0IGlzIG5vdCBhIGtleSBpbiB0aGUKLQkJ CSAqIHRyZWUuICBUaGlzIGlzbid0IGEgKnJlYWwqIGNvbmNlcm4gd2l0aCA2NC1iaXQga2V5cwot CQkJICogYW5kIGEgZ29vZCBQUk5HLCBidXQgd2h5IG5vdCBiZSBjb3JyZWN0IGFueXdheXM/Ci0J CQkgKi8KLQkJCW5vZGVzW2pdLmtleSA9IDIgKiBnZW5fcmFuZDY0KHNmbXQpOwotCQkJbm9kZXNb al0uc3BlY2lhbG5lc3MgPSAwOwotCQkJbm9kZXNbal0ubWlkX3JlbW92ZSA9IGZhbHNlOwotCQkJ bm9kZXNbal0uYWxsb3dfZHVwbGljYXRlcyA9IGZhbHNlOwotCQkJbm9kZXNbal0uc3VtbWFyeV9s Y2hpbGQgPSBOVUxMOwotCQkJbm9kZXNbal0uc3VtbWFyeV9yY2hpbGQgPSBOVUxMOwotCQkJbm9k ZXNbal0uc3VtbWFyeV9tYXhfc3BlY2lhbG5lc3MgPSAwOwotCQkJdHJlZV9pbnNlcnQoJnRyZWUs ICZub2Rlc1tqXSk7Ci0JCX0KLQkJZm9yIChpbnQgaiA9IDA7IGogPCBucmVtb3ZhbHM7IGorKykg ewotCQkJaW50IHZpY3RpbSA9IChpbnQpZ2VuX3JhbmQ2NF9yYW5nZShzZm10LCBubm9kZXMpOwot CQkJaWYgKCFub2Rlc1t2aWN0aW1dLm1pZF9yZW1vdmUpIHsKLQkJCQl0cmVlX3JlbW92ZSgmdHJl ZSwgJm5vZGVzW3ZpY3RpbV0pOwotCQkJCW5vZGVzW3ZpY3RpbV0ubWlkX3JlbW92ZSA9IHRydWU7 Ci0JCQl9Ci0JCX0KLQkJZm9yIChpbnQgaiA9IDA7IGogPCBubm9kZXM7IGorKykgewotCQkJaWYg KG5vZGVzW2pdLm1pZF9yZW1vdmUpIHsKLQkJCQlub2Rlc1tqXS5taWRfcmVtb3ZlID0gZmFsc2U7 Ci0JCQkJbm9kZXNbal0ua2V5ID0gMiAqIGdlbl9yYW5kNjQoc2ZtdCk7Ci0JCQkJdHJlZV9pbnNl cnQoJnRyZWUsICZub2Rlc1tqXSk7Ci0JCQl9Ci0JCX0KLQkJZm9yIChpbnQgaiA9IDA7IGogPCBu dXBkYXRlczsgaisrKSB7Ci0JCQl1aW50MzJfdCBpbmQgPSBnZW5fcmFuZDMyX3JhbmdlKHNmbXQs IG5ub2Rlcyk7Ci0JCQlub2Rlc1tpbmRdLnNwZWNpYWxuZXNzID0gMSAtIG5vZGVzW2luZF0uc3Bl Y2lhbG5lc3M7Ci0JCQl0cmVlX3VwZGF0ZV9zdW1tYXJpZXMoJnRyZWUsICZub2Rlc1tpbmRdKTsK LQkJCWNoZWNrX2NvbnNpc3RlbmN5KCZ0cmVlLCBub2Rlcywgbm5vZGVzKTsKLQkJfQotCX0KLX0K LQotVEVTVF9CRUdJTih0ZXN0X3JiX3VwZGF0ZV9zZWFyY2gpIHsKLQlzdW1tYXJpemVfYWx3YXlz X3JldHVybnNfdHJ1ZSA9IGZhbHNlOwotCWRvX3VwZGF0ZV9zZWFyY2hfdGVzdCgyLCAxMDAsIDMs IDUwKTsKLQlkb191cGRhdGVfc2VhcmNoX3Rlc3QoNSwgMTAwLCAzLCA1MCk7Ci0JZG9fdXBkYXRl X3NlYXJjaF90ZXN0KDEyLCAxMDAsIDUsIDEwMDApOwotCWRvX3VwZGF0ZV9zZWFyY2hfdGVzdCgx MDAsIDEsIDUwLCA1MDApOwotfQotVEVTVF9FTkQKLQotdHlwZWRlZiByYl90cmVlKG5vZGVfdCkg dW5zdW1tYXJpemVkX3RyZWVfdDsKLXJiX2dlbihzdGF0aWMgVU5VU0VELCB1bnN1bW1hcml6ZWRf dHJlZV8sIHVuc3VtbWFyaXplZF90cmVlX3QsIG5vZGVfdCwgbGluaywKLSAgICBub2RlX2NtcCk7 Ci0KLXN0YXRpYyBub2RlX3QgKgotdW5zdW1tYXJpemVkX3RyZWVfaXRlcmF0ZV9jYih1bnN1bW1h cml6ZWRfdHJlZV90ICp0cmVlLCBub2RlX3QgKm5vZGUsCi0gICAgdm9pZCAqZGF0YSkgewotCXVu c2lnbmVkICppID0gKHVuc2lnbmVkICopZGF0YTsKLQkoKmkpKys7Ci0JcmV0dXJuIE5VTEw7Ci19 Ci0vKgotICogVGhlIHVuc3VtbWFyaXplZCBhbmQgc3VtbWFyaXplZCBmdW50aW9uYWxpdHkgaXMg aW1wbGVtZW50ZWQgdmlhIHRoZSBzYW1lCi0gKiBmdW5jdGlvbnM7IHdlIGRvbid0IHJlYWxseSBu ZWVkIHRvIGRvIG11Y2ggbW9yZSB0aGFuIHRlc3QgdGhhdCB3ZSBjYW4gZXhjbHVkZQotICogdGhl IGZpbHRlcmVkIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhbnl0aGluZyBicmVha2luZy4KLSAqLwot VEVTVF9CRUdJTih0ZXN0X3JiX3Vuc3VtbWFyaXplZCkgewotCXVuc3VtbWFyaXplZF90cmVlX3Qg dHJlZTsKLQl1bnN1bW1hcml6ZWRfdHJlZV9uZXcoJnRyZWUpOwotCXVuc2lnbmVkIG5ub2RlcyA9 IDA7Ci0JdW5zdW1tYXJpemVkX3RyZWVfaXRlcigmdHJlZSwgTlVMTCwgJnVuc3VtbWFyaXplZF90 cmVlX2l0ZXJhdGVfY2IsCi0JICAgICZubm9kZXMpOwotCWV4cGVjdF91X2VxKDAsIG5ub2Rlcywg IiIpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdF9ub19y ZWVudHJhbmN5KAotCSAgICB0ZXN0X3JiX2VtcHR5LAotCSAgICB0ZXN0X3JiX3JhbmRvbSwKLQkg ICAgdGVzdF9yYl9maWx0ZXJfc2ltcGxlLAotCSAgICB0ZXN0X3JiX3VwZGF0ZV9zZWFyY2gsCi0J ICAgIHRlc3RfcmJfdW5zdW1tYXJpemVkKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcmV0YWluZWQuYyBiLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9yZXRhaW5lZC5jCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTlmNjg0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1i YXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9yZXRhaW5lZC5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3Qu aCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nhbi5oIgotI2luY2x1ZGUgImplbWFs bG9jL2ludGVybmFsL3NwaW4uaCIKLQotc3RhdGljIHVuc2lnbmVkCQlhcmVuYV9pbmQ7Ci1zdGF0 aWMgc2l6ZV90CQlzejsKLXN0YXRpYyBzaXplX3QJCWVzejsKLSNkZWZpbmUgTkVQT0NIUwkJOAot I2RlZmluZSBQRVJfVEhEX05BTExPQ1MJMQotc3RhdGljIGF0b21pY191X3QJZXBvY2g7Ci1zdGF0 aWMgYXRvbWljX3VfdAluZmluaXNoZWQ7Ci0KLXN0YXRpYyB1bnNpZ25lZAotZG9fYXJlbmFfY3Jl YXRlKGV4dGVudF9ob29rc190ICpoKSB7Ci0JdW5zaWduZWQgbmV3X2FyZW5hX2luZDsKLQlzaXpl X3QgaW5kX3N6ID0gc2l6ZW9mKHVuc2lnbmVkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJhcmVu YXMuY3JlYXRlIiwgKHZvaWQgKikmbmV3X2FyZW5hX2luZCwgJmluZF9zeiwKLQkgICAgKHZvaWQg KikoaCAhPSBOVUxMID8gJmggOiBOVUxMKSwgKGggIT0gTlVMTCA/IHNpemVvZihoKSA6IDApKSwg MCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQlyZXR1cm4gbmV3X2Fy ZW5hX2luZDsKLX0KLQotc3RhdGljIHZvaWQKLWRvX2FyZW5hX2Rlc3Ryb3kodW5zaWduZWQgaW5k KSB7Ci0Jc2l6ZV90IG1pYlszXTsKLQlzaXplX3QgbWlibGVuOwotCi0JbWlibGVuID0gc2l6ZW9m KG1pYikvc2l6ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bG5hbWV0b21pYigiYXJl bmEuMC5kZXN0cm95IiwgbWliLCAmbWlibGVuKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0 bG5hbWV0b21pYigpIGZhaWx1cmUiKTsKLQltaWJbMV0gPSAoc2l6ZV90KWluZDsKLQlleHBlY3Rf ZF9lcShtYWxsY3RsYnltaWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsIE5VTEwsIDApLCAwLAot CSAgICAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoKSBmYWlsdXJlIik7Ci19Ci0KLXN0YXRpYyB2 b2lkCi1kb19yZWZyZXNoKHZvaWQpIHsKLQl1aW50NjRfdCByZWZyZXNoX2Vwb2NoID0gMTsKLQll eHBlY3RfZF9lcShtYWxsY3RsKCJlcG9jaCIsIE5VTEwsIE5VTEwsICh2b2lkICopJnJlZnJlc2hf ZXBvY2gsCi0JICAgIHNpemVvZihyZWZyZXNoX2Vwb2NoKSksIDAsICJVbmV4cGVjdGVkIG1hbGxj dGwoKSBmYWlsdXJlIik7Ci19Ci0KLXN0YXRpYyBzaXplX3QKLWRvX2dldF9zaXplX2ltcGwoY29u c3QgY2hhciAqY21kLCB1bnNpZ25lZCBpbmQpIHsKLQlzaXplX3QgbWliWzRdOwotCXNpemVfdCBt aWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVvZihzaXplX3QpOwotCXNpemVfdCB6ID0gc2l6ZW9m KHNpemVfdCk7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKGNtZCwgbWliLCAmbWli bGVuKSwKLQkgICAgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYihcIiVzXCIsIC4uLikg ZmFpbHVyZSIsIGNtZCk7Ci0JbWliWzJdID0gaW5kOwotCXNpemVfdCBzaXplOwotCWV4cGVjdF9k X2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikmc2l6ZSwgJnosIE5VTEwsIDAp LAotCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsYnltaWIoW1wiJXNcIl0sIC4uLikgZmFpbHVy ZSIsIGNtZCk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIHNpemVfdAotZG9fZ2V0X2Fj dGl2ZSh1bnNpZ25lZCBpbmQpIHsKLQlyZXR1cm4gZG9fZ2V0X3NpemVfaW1wbCgic3RhdHMuYXJl bmFzLjAucGFjdGl2ZSIsIGluZCkgKiBQQUdFOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1kb19nZXRf bWFwcGVkKHVuc2lnbmVkIGluZCkgewotCXJldHVybiBkb19nZXRfc2l6ZV9pbXBsKCJzdGF0cy5h cmVuYXMuMC5tYXBwZWQiLCBpbmQpOwotfQotCi1zdGF0aWMgdm9pZCAqCi10aGRfc3RhcnQodm9p ZCAqYXJnKSB7Ci0JZm9yICh1bnNpZ25lZCBuZXh0X2Vwb2NoID0gMTsgbmV4dF9lcG9jaCA8IE5F UE9DSFM7IG5leHRfZXBvY2grKykgewotCQkvKiBCdXN5LXdhaXQgZm9yIG5leHQgZXBvY2guICov Ci0JCXVuc2lnbmVkIGN1cl9lcG9jaDsKLQkJc3Bpbl90IHNwaW5uZXIgPSBTUElOX0lOSVRJQUxJ WkVSOwotCQl3aGlsZSAoKGN1cl9lcG9jaCA9IGF0b21pY19sb2FkX3UoJmVwb2NoLCBBVE9NSUNf QUNRVUlSRSkpICE9Ci0JCSAgICBuZXh0X2Vwb2NoKSB7Ci0JCQlzcGluX2FkYXB0aXZlKCZzcGlu bmVyKTsKLQkJfQotCQlleHBlY3RfdV9lcShjdXJfZXBvY2gsIG5leHRfZXBvY2gsICJVbmV4cGVj dGVkIGVwb2NoIik7Ci0KLQkJLyoKLQkJICogQWxsb2NhdGUuICBUaGUgbWFpbiB0aHJlYWQgd2ls bCByZXNldCB0aGUgYXJlbmEsIHNvIHRoZXJlJ3MKLQkJICogbm8gbmVlZCB0byBkZWFsbG9jYXRl LgotCQkgKi8KLQkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFBFUl9USERfTkFMTE9DUzsgaSsr KSB7Ci0JCQl2b2lkICpwID0gbWFsbG9jeChzeiwgTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpIHwK LQkJCSAgICBNQUxMT0NYX1RDQUNIRV9OT05FCi0JCQkgICAgKTsKLQkJCWV4cGVjdF9wdHJfbm90 X251bGwocCwKLQkJCSAgICAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZVxuIik7Ci0JCX0K LQotCQkvKiBMZXQgdGhlIG1haW4gdGhyZWFkIGtub3cgd2UndmUgZmluaXNoZWQgdGhpcyBpdGVy YXRpb24uICovCi0JCWF0b21pY19mZXRjaF9hZGRfdSgmbmZpbmlzaGVkLCAxLCBBVE9NSUNfUkVM RUFTRSk7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9yZXRhaW5l ZCkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3N0YXRzKTsKLQl0ZXN0X3NraXBfaWYob3B0X2hw YSk7Ci0KLQlhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoTlVMTCk7Ci0Jc3ogPSBuYWxsb2N4 KEhVR0VQQUdFLCAwKTsKLQlzaXplX3QgZ3VhcmRfc3ogPSBzYW5fZ3VhcmRfZW5hYmxlZCgpID8g U0FOX1BBR0VfR1VBUkRTX1NJWkUgOiAwOwotCWVzeiA9IHN6ICsgc3pfbGFyZ2VfcGFkICsgZ3Vh cmRfc3o7Ci0KLQlhdG9taWNfc3RvcmVfdSgmZXBvY2gsIDAsIEFUT01JQ19SRUxBWEVEKTsKLQot CXVuc2lnbmVkIG50aHJlYWRzID0gbmNwdXMgKiAyOwotCWlmIChMR19TSVpFT0ZfUFRSIDwgMyAm JiBudGhyZWFkcyA+IDE2KSB7Ci0JCW50aHJlYWRzID0gMTY7IC8qIDMyLWJpdCBwbGF0Zm9ybSBj b3VsZCBydW4gb3V0IG9mIHZhZGRyLiAqLwotCX0KLQlWQVJJQUJMRV9BUlJBWSh0aGRfdCwgdGhy ZWFkcywgbnRocmVhZHMpOwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudGhyZWFkczsgaSsr KSB7Ci0JCXRoZF9jcmVhdGUoJnRocmVhZHNbaV0sIHRoZF9zdGFydCwgTlVMTCk7Ci0JfQotCi0J Zm9yICh1bnNpZ25lZCBlID0gMTsgZSA8IE5FUE9DSFM7IGUrKykgewotCQlhdG9taWNfc3RvcmVf dSgmbmZpbmlzaGVkLCAwLCBBVE9NSUNfUkVMRUFTRSk7Ci0JCWF0b21pY19zdG9yZV91KCZlcG9j aCwgZSwgQVRPTUlDX1JFTEVBU0UpOwotCi0JCS8qIFdhaXQgZm9yIHRocmVhZHMgdG8gZmluaXNo IGFsbG9jYXRpbmcuICovCi0JCXNwaW5fdCBzcGlubmVyID0gU1BJTl9JTklUSUFMSVpFUjsKLQkJ d2hpbGUgKGF0b21pY19sb2FkX3UoJm5maW5pc2hlZCwgQVRPTUlDX0FDUVVJUkUpIDwgbnRocmVh ZHMpIHsKLQkJCXNwaW5fYWRhcHRpdmUoJnNwaW5uZXIpOwotCQl9Ci0KLQkJLyoKLQkJICogQXNz ZXJ0IHRoYXQgcmV0YWluZWQgaXMgbm8gbW9yZSB0aGFuIHRoZSBzdW0gb2Ygc2l6ZSBjbGFzc2Vz Ci0JCSAqIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiB1c2VkIHRvIHNhdGlzZnkgdGhlIHdvcmtlciB0 aHJlYWRzJwotCQkgKiByZXF1ZXN0cywgZGlzY291bnRpbmcgcGVyIGdyb3d0aCBmcmFnbWVudGF0 aW9uLgotCQkgKi8KLQkJZG9fcmVmcmVzaCgpOwotCi0JCXNpemVfdCBhbGxvY2F0ZWQgPSAoZXN6 IC0gZ3VhcmRfc3opICogbnRocmVhZHMgKgotCQkgICAgUEVSX1RIRF9OQUxMT0NTOwotCQlzaXpl X3QgYWN0aXZlID0gZG9fZ2V0X2FjdGl2ZShhcmVuYV9pbmQpOwotCQlleHBlY3RfenVfbGUoYWxs b2NhdGVkLCBhY3RpdmUsICJVbmV4cGVjdGVkIGFjdGl2ZSBtZW1vcnkiKTsKLQkJc2l6ZV90IG1h cHBlZCA9IGRvX2dldF9tYXBwZWQoYXJlbmFfaW5kKTsKLQkJZXhwZWN0X3p1X2xlKGFjdGl2ZSwg bWFwcGVkLCAiVW5leHBlY3RlZCBtYXBwZWQgbWVtb3J5Iik7Ci0KLQkJYXJlbmFfdCAqYXJlbmEg PSBhcmVuYV9nZXQodHNkbl9mZXRjaCgpLCBhcmVuYV9pbmQsIGZhbHNlKTsKLQkJc2l6ZV90IHVz YWJsZSA9IDA7Ci0JCXNpemVfdCBmcmFnbWVudGVkID0gMDsKLQkJZm9yIChwc3ppbmRfdCBwaW5k ID0gc3pfcHN6MmluZChIVUdFUEFHRSk7IHBpbmQgPAotCQkgICAgYXJlbmEtPnBhX3NoYXJkLnBh Yy5leHBfZ3Jvdy5uZXh0OyBwaW5kKyspIHsKLQkJCXNpemVfdCBwc3ogPSBzel9waW5kMnN6KHBp bmQpOwotCQkJc2l6ZV90IHBzel9mcmFnbWVudGVkID0gcHN6ICUgZXN6OwotCQkJc2l6ZV90IHBz el91c2FibGUgPSBwc3ogLSBwc3pfZnJhZ21lbnRlZDsKLQkJCS8qCi0JCQkgKiBPbmx5IGNvbnNp ZGVyIHNpemUgY2xhc3NlcyB0aGF0IHdvdWxkbid0IGJlIHNraXBwZWQuCi0JCQkgKi8KLQkJCWlm IChwc3pfdXNhYmxlID4gMCkgewotCQkJCWV4cGVjdF96dV9sdCh1c2FibGUsIGFsbG9jYXRlZCwK LQkJCQkgICAgIkV4Y2Vzc2l2ZSByZXRhaW5lZCBtZW1vcnkgIgotCQkJCSAgICAiKCUjenhbKyUj enhdID4gJSN6eCkiLCB1c2FibGUsIHBzel91c2FibGUsCi0JCQkJICAgIGFsbG9jYXRlZCk7Ci0J CQkJZnJhZ21lbnRlZCArPSBwc3pfZnJhZ21lbnRlZDsKLQkJCQl1c2FibGUgKz0gcHN6X3VzYWJs ZTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIENsZWFuIHVwIGFyZW5hLiAgRGVzdHJveWluZyBh bmQgcmVjcmVhdGluZyB0aGUgYXJlbmEKLQkJICogaXMgc2ltcGxlciB0aGF0IHNwZWNpZnlpbmcg ZXh0ZW50IGhvb2tzIHRoYXQgZGVhbGxvY2F0ZQotCQkgKiAocmF0aGVyIHRoYW4gcmV0YWluaW5n KSBkdXJpbmcgcmVzZXQuCi0JCSAqLwotCQlkb19hcmVuYV9kZXN0cm95KGFyZW5hX2luZCk7Ci0J CWV4cGVjdF91X2VxKGRvX2FyZW5hX2NyZWF0ZShOVUxMKSwgYXJlbmFfaW5kLAotCQkgICAgIlVu ZXhwZWN0ZWQgYXJlbmEgaW5kZXgiKTsKLQl9Ci0KLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg bnRocmVhZHM7IGkrKykgewotCQl0aGRfam9pbih0aHJlYWRzW2ldLCBOVUxMKTsKLQl9Ci0KLQlk b19hcmVuYV9kZXN0cm95KGFyZW5hX2luZCk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9p ZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X3JldGFpbmVkKTsKLX0KCmRpZmYgLS1naXQg YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvcnRyZWUu YyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ydHJl ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTAxYjcyLi4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9ydHJlZS5j CisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9j X3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3J0cmVlLmgiCi0KLSNkZWZp bmUgSU5WQUxJRF9BUkVOQV9JTkQgKCgxVSA8PCBNQUxMT0NYX0FSRU5BX0JJVFMpIC0gMSkKLQot LyogUG90ZW50aWFsbHkgdG9vIGxhcmdlIHRvIHNhZmVseSBwbGFjZSBvbiB0aGUgc3RhY2suICov Ci1ydHJlZV90IHRlc3RfcnRyZWU7Ci0KLVRFU1RfQkVHSU4odGVzdF9ydHJlZV9yZWFkX2VtcHR5 KSB7Ci0JdHNkbl90ICp0c2RuOwotCi0JdHNkbiA9IHRzZG5fZmV0Y2goKTsKLQotCWJhc2VfdCAq YmFzZSA9IGJhc2VfbmV3KHRzZG4sIDAsICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MsCi0J ICAgIC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKLQlleHBlY3RfcHRyX25vdF9udWxs KGJhc2UsICJVbmV4cGVjdGVkIGJhc2VfbmV3IGZhaWx1cmUiKTsKLQotCXJ0cmVlX3QgKnJ0cmVl ID0gJnRlc3RfcnRyZWU7Ci0JcnRyZWVfY3R4X3QgcnRyZWVfY3R4OwotCXJ0cmVlX2N0eF9kYXRh X2luaXQoJnJ0cmVlX2N0eCk7Ci0JZXhwZWN0X2ZhbHNlKHJ0cmVlX25ldyhydHJlZSwgYmFzZSwg ZmFsc2UpLAotCSAgICAiVW5leHBlY3RlZCBydHJlZV9uZXcoKSBmYWlsdXJlIik7Ci0JcnRyZWVf Y29udGVudHNfdCBjb250ZW50czsKLQlleHBlY3RfdHJ1ZShydHJlZV9yZWFkX2luZGVwZW5kZW50 KHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LCBQQUdFLAotCSAgICAmY29udGVudHMpLCAicnRyZWVf cmVhZF9pbmRlcGVuZGVudCgpIHNob3VsZCBmYWlsIG9uIGVtcHR5IHJ0cmVlLiIpOwotCi0JYmFz ZV9kZWxldGUodHNkbiwgYmFzZSk7Ci19Ci1URVNUX0VORAotCi0jdW5kZWYgTlRIUkVBRFMKLSN1 bmRlZiBOSVRFUlMKLSN1bmRlZiBTRUVECi0KLXN0YXRpYyBlZGF0YV90ICoKLWFsbG9jX2VkYXRh KHZvaWQpIHsKLQl2b2lkICpyZXQgPSBtYWxsb2N4KHNpemVvZihlZGF0YV90KSwgTUFMTE9DWF9B TElHTihFREFUQV9BTElHTk1FTlQpKTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKHJldCwgIlVuZXhw ZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLVRFU1RfQkVH SU4odGVzdF9ydHJlZV9leHRyZW1hKSB7Ci0JZWRhdGFfdCAqZWRhdGFfYSwgKmVkYXRhX2I7Ci0J ZWRhdGFfYSA9IGFsbG9jX2VkYXRhKCk7Ci0JZWRhdGFfYiA9IGFsbG9jX2VkYXRhKCk7Ci0JZWRh dGFfaW5pdChlZGF0YV9hLCBJTlZBTElEX0FSRU5BX0lORCwgTlVMTCwgU0NfTEFSR0VfTUlOQ0xB U1MsCi0JICAgIGZhbHNlLCBzel9zaXplMmluZGV4KFNDX0xBUkdFX01JTkNMQVNTKSwgMCwKLQkg ICAgZXh0ZW50X3N0YXRlX2FjdGl2ZSwgZmFsc2UsIGZhbHNlLCBFWFRFTlRfUEFJX1BBQywgRVhU RU5UX05PVF9IRUFEKTsKLQllZGF0YV9pbml0KGVkYXRhX2IsIElOVkFMSURfQVJFTkFfSU5ELCBO VUxMLCAwLCBmYWxzZSwgU0NfTlNJWkVTLCAwLAotCSAgICBleHRlbnRfc3RhdGVfYWN0aXZlLCBm YWxzZSwgZmFsc2UsIEVYVEVOVF9QQUlfUEFDLCBFWFRFTlRfTk9UX0hFQUQpOwotCi0JdHNkbl90 ICp0c2RuID0gdHNkbl9mZXRjaCgpOwotCi0JYmFzZV90ICpiYXNlID0gYmFzZV9uZXcodHNkbiwg MCwgJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29rcywKLQkgICAgLyogbWV0YWRhdGFfdXNlX2hv b2tzICovIHRydWUpOwotCWV4cGVjdF9wdHJfbm90X251bGwoYmFzZSwgIlVuZXhwZWN0ZWQgYmFz ZV9uZXcgZmFpbHVyZSIpOwotCi0JcnRyZWVfdCAqcnRyZWUgPSAmdGVzdF9ydHJlZTsKLQlydHJl ZV9jdHhfdCBydHJlZV9jdHg7Ci0JcnRyZWVfY3R4X2RhdGFfaW5pdCgmcnRyZWVfY3R4KTsKLQll eHBlY3RfZmFsc2UocnRyZWVfbmV3KHJ0cmVlLCBiYXNlLCBmYWxzZSksCi0JICAgICJVbmV4cGVj dGVkIHJ0cmVlX25ldygpIGZhaWx1cmUiKTsKLQotCXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHNf YTsKLQljb250ZW50c19hLmVkYXRhID0gZWRhdGFfYTsKLQljb250ZW50c19hLm1ldGFkYXRhLnN6 aW5kID0gZWRhdGFfc3ppbmRfZ2V0KGVkYXRhX2EpOwotCWNvbnRlbnRzX2EubWV0YWRhdGEuc2xh YiA9IGVkYXRhX3NsYWJfZ2V0KGVkYXRhX2EpOwotCWNvbnRlbnRzX2EubWV0YWRhdGEuaXNfaGVh ZCA9IGVkYXRhX2lzX2hlYWRfZ2V0KGVkYXRhX2EpOwotCWNvbnRlbnRzX2EubWV0YWRhdGEuc3Rh dGUgPSBlZGF0YV9zdGF0ZV9nZXQoZWRhdGFfYSk7Ci0JZXhwZWN0X2ZhbHNlKHJ0cmVlX3dyaXRl KHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LCBQQUdFLCBjb250ZW50c19hKSwKLQkgICAgIlVuZXhw ZWN0ZWQgcnRyZWVfd3JpdGUoKSBmYWlsdXJlIik7Ci0JZXhwZWN0X2ZhbHNlKHJ0cmVlX3dyaXRl KHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LCBQQUdFLCBjb250ZW50c19hKSwKLQkgICAgIlVuZXhw ZWN0ZWQgcnRyZWVfd3JpdGUoKSBmYWlsdXJlIik7Ci0JcnRyZWVfY29udGVudHNfdCByZWFkX2Nv bnRlbnRzX2EgPSBydHJlZV9yZWFkKHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LAotCSAgICBQQUdF KTsKLQlleHBlY3RfdHJ1ZShjb250ZW50c19hLmVkYXRhID09IHJlYWRfY29udGVudHNfYS5lZGF0 YQotCSAgICAmJiBjb250ZW50c19hLm1ldGFkYXRhLnN6aW5kID09IHJlYWRfY29udGVudHNfYS5t ZXRhZGF0YS5zemluZAotCSAgICAmJiBjb250ZW50c19hLm1ldGFkYXRhLnNsYWIgPT0gcmVhZF9j b250ZW50c19hLm1ldGFkYXRhLnNsYWIKLQkgICAgJiYgY29udGVudHNfYS5tZXRhZGF0YS5pc19o ZWFkID09IHJlYWRfY29udGVudHNfYS5tZXRhZGF0YS5pc19oZWFkCi0JICAgICYmIGNvbnRlbnRz X2EubWV0YWRhdGEuc3RhdGUgPT0gcmVhZF9jb250ZW50c19hLm1ldGFkYXRhLnN0YXRlLAotCSAg ICAicnRyZWVfcmVhZCgpIHNob3VsZCByZXR1cm4gcHJldmlvdXNseSBzZXQgdmFsdWUiKTsKLQot CXJ0cmVlX2NvbnRlbnRzX3QgY29udGVudHNfYjsKLQljb250ZW50c19iLmVkYXRhID0gZWRhdGFf YjsKLQljb250ZW50c19iLm1ldGFkYXRhLnN6aW5kID0gZWRhdGFfc3ppbmRfZ2V0X21heWJlX2lu dmFsaWQoZWRhdGFfYik7Ci0JY29udGVudHNfYi5tZXRhZGF0YS5zbGFiID0gZWRhdGFfc2xhYl9n ZXQoZWRhdGFfYik7Ci0JY29udGVudHNfYi5tZXRhZGF0YS5pc19oZWFkID0gZWRhdGFfaXNfaGVh ZF9nZXQoZWRhdGFfYik7Ci0JY29udGVudHNfYi5tZXRhZGF0YS5zdGF0ZSA9IGVkYXRhX3N0YXRl X2dldChlZGF0YV9iKTsKLQlleHBlY3RfZmFsc2UocnRyZWVfd3JpdGUodHNkbiwgcnRyZWUsICZy dHJlZV9jdHgsIH4oKHVpbnRwdHJfdCkwKSwKLQkgICAgY29udGVudHNfYiksICJVbmV4cGVjdGVk IHJ0cmVlX3dyaXRlKCkgZmFpbHVyZSIpOwotCXJ0cmVlX2NvbnRlbnRzX3QgcmVhZF9jb250ZW50 c19iID0gcnRyZWVfcmVhZCh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwKLQkgICAgfigodWludHB0 cl90KTApKTsKLQlhc3NlcnRfdHJ1ZShjb250ZW50c19iLmVkYXRhID09IHJlYWRfY29udGVudHNf Yi5lZGF0YQotCSAgICAmJiBjb250ZW50c19iLm1ldGFkYXRhLnN6aW5kID09IHJlYWRfY29udGVu dHNfYi5tZXRhZGF0YS5zemluZAotCSAgICAmJiBjb250ZW50c19iLm1ldGFkYXRhLnNsYWIgPT0g cmVhZF9jb250ZW50c19iLm1ldGFkYXRhLnNsYWIKLQkgICAgJiYgY29udGVudHNfYi5tZXRhZGF0 YS5pc19oZWFkID09IHJlYWRfY29udGVudHNfYi5tZXRhZGF0YS5pc19oZWFkCi0JICAgICYmIGNv bnRlbnRzX2IubWV0YWRhdGEuc3RhdGUgPT0gcmVhZF9jb250ZW50c19iLm1ldGFkYXRhLnN0YXRl LAotCSAgICAicnRyZWVfcmVhZCgpIHNob3VsZCByZXR1cm4gcHJldmlvdXNseSBzZXQgdmFsdWUi KTsKLQotCWJhc2VfZGVsZXRlKHRzZG4sIGJhc2UpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJ Tih0ZXN0X3J0cmVlX2JpdHMpIHsKLQl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0JYmFz ZV90ICpiYXNlID0gYmFzZV9uZXcodHNkbiwgMCwgJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29r cywKLQkgICAgLyogbWV0YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOwotCWV4cGVjdF9wdHJfbm90 X251bGwoYmFzZSwgIlVuZXhwZWN0ZWQgYmFzZV9uZXcgZmFpbHVyZSIpOwotCi0JdWludHB0cl90 IGtleXNbXSA9IHtQQUdFLCBQQUdFICsgMSwKLQkgICAgUEFHRSArICgoKHVpbnRwdHJfdCkxKSA8 PCBMR19QQUdFKSAtIDF9OwotCWVkYXRhX3QgKmVkYXRhX2MgPSBhbGxvY19lZGF0YSgpOwotCWVk YXRhX2luaXQoZWRhdGFfYywgSU5WQUxJRF9BUkVOQV9JTkQsIE5VTEwsIDAsIGZhbHNlLCBTQ19O U0laRVMsIDAsCi0JICAgIGV4dGVudF9zdGF0ZV9hY3RpdmUsIGZhbHNlLCBmYWxzZSwgRVhURU5U X1BBSV9QQUMsIEVYVEVOVF9OT1RfSEVBRCk7Ci0KLQlydHJlZV90ICpydHJlZSA9ICZ0ZXN0X3J0 cmVlOwotCXJ0cmVlX2N0eF90IHJ0cmVlX2N0eDsKLQlydHJlZV9jdHhfZGF0YV9pbml0KCZydHJl ZV9jdHgpOwotCWV4cGVjdF9mYWxzZShydHJlZV9uZXcocnRyZWUsIGJhc2UsIGZhbHNlKSwKLQkg ICAgIlVuZXhwZWN0ZWQgcnRyZWVfbmV3KCkgZmFpbHVyZSIpOwotCi0JZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IHNpemVvZihrZXlzKS9zaXplb2YodWludHB0cl90KTsgaSsrKSB7Ci0JCXJ0cmVl X2NvbnRlbnRzX3QgY29udGVudHM7Ci0JCWNvbnRlbnRzLmVkYXRhID0gZWRhdGFfYzsKLQkJY29u dGVudHMubWV0YWRhdGEuc3ppbmQgPSBTQ19OU0laRVM7Ci0JCWNvbnRlbnRzLm1ldGFkYXRhLnNs YWIgPSBmYWxzZTsKLQkJY29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IGZhbHNlOwotCQljb250 ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IGV4dGVudF9zdGF0ZV9hY3RpdmU7Ci0KLQkJZXhwZWN0X2Zh bHNlKHJ0cmVlX3dyaXRlKHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LCBrZXlzW2ldLAotCQkgICAg Y29udGVudHMpLCAiVW5leHBlY3RlZCBydHJlZV93cml0ZSgpIGZhaWx1cmUiKTsKLQkJZm9yICh1 bnNpZ25lZCBqID0gMDsgaiA8IHNpemVvZihrZXlzKS9zaXplb2YodWludHB0cl90KTsgaisrKSB7 Ci0JCQlleHBlY3RfcHRyX2VxKHJ0cmVlX3JlYWQodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsCi0J CQkgICAga2V5c1tqXSkuZWRhdGEsIGVkYXRhX2MsCi0JCQkgICAgInJ0cmVlX2VkYXRhX3JlYWQo KSBzaG91bGQgcmV0dXJuIHByZXZpb3VzbHkgc2V0ICIKLQkJCSAgICAidmFsdWUgYW5kIGlnbm9y ZSBpbnNpZ25pZmljYW50IGtleSBiaXRzOyBpPSV1LCAiCi0JCQkgICAgImo9JXUsIHNldCBrZXk9 JSMiRk1UeFBUUiIsIGdldCBrZXk9JSMiRk1UeFBUUiwgaSwKLQkJCSAgICBqLCBrZXlzW2ldLCBr ZXlzW2pdKTsKLQkJfQotCQlleHBlY3RfcHRyX251bGwocnRyZWVfcmVhZCh0c2RuLCBydHJlZSwg JnJ0cmVlX2N0eCwKLQkJICAgICgoKHVpbnRwdHJfdCkyKSA8PCBMR19QQUdFKSkuZWRhdGEsCi0J CSAgICAiT25seSBsZWZ0bW9zdCBydHJlZSBsZWFmIHNob3VsZCBiZSBzZXQ7IGk9JXUiLCBpKTsK LQkJcnRyZWVfY2xlYXIodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsIGtleXNbaV0pOwotCX0KLQot CWJhc2VfZGVsZXRlKHRzZG4sIGJhc2UpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0 X3J0cmVlX3JhbmRvbSkgewotI2RlZmluZSBOU0VUIDE2Ci0jZGVmaW5lIFNFRUQgNDIKLQlzZm10 X3QgKnNmbXQgPSBpbml0X2dlbl9yYW5kKFNFRUQpOwotCXRzZG5fdCAqdHNkbiA9IHRzZG5fZmV0 Y2goKTsKLQotCWJhc2VfdCAqYmFzZSA9IGJhc2VfbmV3KHRzZG4sIDAsICZlaG9va3NfZGVmYXVs dF9leHRlbnRfaG9va3MsCi0JICAgIC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKLQll eHBlY3RfcHRyX25vdF9udWxsKGJhc2UsICJVbmV4cGVjdGVkIGJhc2VfbmV3IGZhaWx1cmUiKTsK LQotCXVpbnRwdHJfdCBrZXlzW05TRVRdOwotCXJ0cmVlX3QgKnJ0cmVlID0gJnRlc3RfcnRyZWU7 Ci0JcnRyZWVfY3R4X3QgcnRyZWVfY3R4OwotCXJ0cmVlX2N0eF9kYXRhX2luaXQoJnJ0cmVlX2N0 eCk7Ci0KLQllZGF0YV90ICplZGF0YV9kID0gYWxsb2NfZWRhdGEoKTsKLQllZGF0YV9pbml0KGVk YXRhX2QsIElOVkFMSURfQVJFTkFfSU5ELCBOVUxMLCAwLCBmYWxzZSwgU0NfTlNJWkVTLCAwLAot CSAgICBleHRlbnRfc3RhdGVfYWN0aXZlLCBmYWxzZSwgZmFsc2UsIEVYVEVOVF9QQUlfUEFDLCBF WFRFTlRfTk9UX0hFQUQpOwotCi0JZXhwZWN0X2ZhbHNlKHJ0cmVlX25ldyhydHJlZSwgYmFzZSwg ZmFsc2UpLAotCSAgICAiVW5leHBlY3RlZCBydHJlZV9uZXcoKSBmYWlsdXJlIik7Ci0KLQlmb3Ig KHVuc2lnbmVkIGkgPSAwOyBpIDwgTlNFVDsgaSsrKSB7Ci0JCWtleXNbaV0gPSAodWludHB0cl90 KWdlbl9yYW5kNjQoc2ZtdCk7Ci0JCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbSA9IHJ0cmVlX2xlYWZf ZWxtX2xvb2t1cCh0c2RuLCBydHJlZSwKLQkJICAgICZydHJlZV9jdHgsIGtleXNbaV0sIGZhbHNl LCB0cnVlKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChlbG0sCi0JCSAgICAiVW5leHBlY3RlZCBy dHJlZV9sZWFmX2VsbV9sb29rdXAoKSBmYWlsdXJlIik7Ci0JCXJ0cmVlX2NvbnRlbnRzX3QgY29u dGVudHM7Ci0JCWNvbnRlbnRzLmVkYXRhID0gZWRhdGFfZDsKLQkJY29udGVudHMubWV0YWRhdGEu c3ppbmQgPSBTQ19OU0laRVM7Ci0JCWNvbnRlbnRzLm1ldGFkYXRhLnNsYWIgPSBmYWxzZTsKLQkJ Y29udGVudHMubWV0YWRhdGEuaXNfaGVhZCA9IGZhbHNlOwotCQljb250ZW50cy5tZXRhZGF0YS5z dGF0ZSA9IGVkYXRhX3N0YXRlX2dldChlZGF0YV9kKTsKLQkJcnRyZWVfbGVhZl9lbG1fd3JpdGUo dHNkbiwgcnRyZWUsIGVsbSwgY29udGVudHMpOwotCQlleHBlY3RfcHRyX2VxKHJ0cmVlX3JlYWQo dHNkbiwgcnRyZWUsICZydHJlZV9jdHgsCi0JCSAgICBrZXlzW2ldKS5lZGF0YSwgZWRhdGFfZCwK LQkJICAgICJydHJlZV9lZGF0YV9yZWFkKCkgc2hvdWxkIHJldHVybiBwcmV2aW91c2x5IHNldCB2 YWx1ZSIpOwotCX0KLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTlNFVDsgaSsrKSB7Ci0JCWV4 cGVjdF9wdHJfZXEocnRyZWVfcmVhZCh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwKLQkJICAgIGtl eXNbaV0pLmVkYXRhLCBlZGF0YV9kLAotCQkgICAgInJ0cmVlX2VkYXRhX3JlYWQoKSBzaG91bGQg cmV0dXJuIHByZXZpb3VzbHkgc2V0IHZhbHVlLCAiCi0JCSAgICAiaT0ldSIsIGkpOwotCX0KLQot CWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOU0VUOyBpKyspIHsKLQkJcnRyZWVfY2xlYXIodHNk biwgcnRyZWUsICZydHJlZV9jdHgsIGtleXNbaV0pOwotCQlleHBlY3RfcHRyX251bGwocnRyZWVf cmVhZCh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwKLQkJICAgIGtleXNbaV0pLmVkYXRhLAotCQkg ICAicnRyZWVfZWRhdGFfcmVhZCgpIHNob3VsZCByZXR1cm4gcHJldmlvdXNseSBzZXQgdmFsdWUi KTsKLQl9Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE5TRVQ7IGkrKykgewotCQlleHBlY3Rf cHRyX251bGwocnRyZWVfcmVhZCh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwKLQkJICAgIGtleXNb aV0pLmVkYXRhLAotCQkgICAgInJ0cmVlX2VkYXRhX3JlYWQoKSBzaG91bGQgcmV0dXJuIHByZXZp b3VzbHkgc2V0IHZhbHVlIik7Ci0JfQotCi0JYmFzZV9kZWxldGUodHNkbiwgYmFzZSk7Ci0JZmlu aV9nZW5fcmFuZChzZm10KTsKLSN1bmRlZiBOU0VUCi0jdW5kZWYgU0VFRAotfQotVEVTVF9FTkQK LQotc3RhdGljIHZvaWQKLXRlc3RfcnRyZWVfcmFuZ2Vfd3JpdGUodHNkbl90ICp0c2RuLCBydHJl ZV90ICpydHJlZSwgdWludHB0cl90IHN0YXJ0LAotICAgIHVpbnRwdHJfdCBlbmQpIHsKLQlydHJl ZV9jdHhfdCBydHJlZV9jdHg7Ci0JcnRyZWVfY3R4X2RhdGFfaW5pdCgmcnRyZWVfY3R4KTsKLQot CWVkYXRhX3QgKmVkYXRhX2UgPSBhbGxvY19lZGF0YSgpOwotCWVkYXRhX2luaXQoZWRhdGFfZSwg SU5WQUxJRF9BUkVOQV9JTkQsIE5VTEwsIDAsIGZhbHNlLCBTQ19OU0laRVMsIDAsCi0JICAgIGV4 dGVudF9zdGF0ZV9hY3RpdmUsIGZhbHNlLCBmYWxzZSwgRVhURU5UX1BBSV9QQUMsIEVYVEVOVF9O T1RfSEVBRCk7Ci0JcnRyZWVfY29udGVudHNfdCBjb250ZW50czsKLQljb250ZW50cy5lZGF0YSA9 IGVkYXRhX2U7Ci0JY29udGVudHMubWV0YWRhdGEuc3ppbmQgPSBTQ19OU0laRVM7Ci0JY29udGVu dHMubWV0YWRhdGEuc2xhYiA9IGZhbHNlOwotCWNvbnRlbnRzLm1ldGFkYXRhLmlzX2hlYWQgPSBm YWxzZTsKLQljb250ZW50cy5tZXRhZGF0YS5zdGF0ZSA9IGV4dGVudF9zdGF0ZV9hY3RpdmU7Ci0K LQlleHBlY3RfZmFsc2UocnRyZWVfd3JpdGUodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsIHN0YXJ0 LAotCSAgICBjb250ZW50cyksICJVbmV4cGVjdGVkIHJ0cmVlX3dyaXRlKCkgZmFpbHVyZSIpOwot CWV4cGVjdF9mYWxzZShydHJlZV93cml0ZSh0c2RuLCBydHJlZSwgJnJ0cmVlX2N0eCwgZW5kLAot CSAgICBjb250ZW50cyksICJVbmV4cGVjdGVkIHJ0cmVlX3dyaXRlKCkgZmFpbHVyZSIpOwotCi0J cnRyZWVfd3JpdGVfcmFuZ2UodHNkbiwgcnRyZWUsICZydHJlZV9jdHgsIHN0YXJ0LCBlbmQsIGNv bnRlbnRzKTsKLQlmb3IgKHVpbnRwdHJfdCBpID0gMDsgaSA8ICgoZW5kIC0gc3RhcnQpID4+IExH X1BBR0UpOyBpKyspIHsKLQkJZXhwZWN0X3B0cl9lcShydHJlZV9yZWFkKHRzZG4sIHJ0cmVlLCAm cnRyZWVfY3R4LAotCQkgICAgc3RhcnQgKyAoaSA8PCBMR19QQUdFKSkuZWRhdGEsIGVkYXRhX2Us Ci0JCSAgICAicnRyZWVfZWRhdGFfcmVhZCgpIHNob3VsZCByZXR1cm4gcHJldmlvdXNseSBzZXQg dmFsdWUiKTsKLQl9Ci0JcnRyZWVfY2xlYXJfcmFuZ2UodHNkbiwgcnRyZWUsICZydHJlZV9jdHgs IHN0YXJ0LCBlbmQpOwotCXJ0cmVlX2xlYWZfZWxtX3QgKmVsbTsKLQlmb3IgKHVpbnRwdHJfdCBp ID0gMDsgaSA8ICgoZW5kIC0gc3RhcnQpID4+IExHX1BBR0UpOyBpKyspIHsKLQkJZWxtID0gcnRy ZWVfbGVhZl9lbG1fbG9va3VwKHRzZG4sIHJ0cmVlLCAmcnRyZWVfY3R4LAotCQkgICAgc3RhcnQg KyAoaSA8PCBMR19QQUdFKSwgZmFsc2UsIGZhbHNlKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChl bG0sICJTaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkLiIpOwotCQlleHBlY3RfcHRyX251bGwo cnRyZWVfbGVhZl9lbG1fcmVhZCh0c2RuLCBydHJlZSwgZWxtLAotCQkgICAgZmFsc2UpLmVkYXRh LCAiU2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkLiIpOwotCX0KLX0KLQotVEVTVF9CRUdJTih0ZXN0 X3J0cmVlX3JhbmdlKSB7Ci0JdHNkbl90ICp0c2RuID0gdHNkbl9mZXRjaCgpOwotCWJhc2VfdCAq YmFzZSA9IGJhc2VfbmV3KHRzZG4sIDAsICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3MsCi0J ICAgIC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKLQlleHBlY3RfcHRyX25vdF9udWxs KGJhc2UsICJVbmV4cGVjdGVkIGJhc2VfbmV3IGZhaWx1cmUiKTsKLQotCXJ0cmVlX3QgKnJ0cmVl ID0gJnRlc3RfcnRyZWU7Ci0JZXhwZWN0X2ZhbHNlKHJ0cmVlX25ldyhydHJlZSwgYmFzZSwgZmFs c2UpLAotCSAgICAiVW5leHBlY3RlZCBydHJlZV9uZXcoKSBmYWlsdXJlIik7Ci0KLQkvKiBOb3Qg Y3Jvc3NpbmcgcnRyZWUgbm9kZSBib3VuZGFyeSBmaXJzdC4gKi8KLQl1aW50cHRyX3Qgc3RhcnQg PSBaVSgxKSA8PCBydHJlZV9sZWFmX21hc2tiaXRzKCk7Ci0JdWludHB0cl90IGVuZCA9IHN0YXJ0 ICsgKFpVKDEwMCkgPDwgTEdfUEFHRSk7Ci0JdGVzdF9ydHJlZV9yYW5nZV93cml0ZSh0c2RuLCBy dHJlZSwgc3RhcnQsIGVuZCk7Ci0KLQkvKiBDcm9zc2luZyBydHJlZSBub2RlIGJvdW5kYXJ5LiAq LwotCXN0YXJ0ID0gKFpVKDEpIDw8IHJ0cmVlX2xlYWZfbWFza2JpdHMoKSkgLSAoWlUoMTApIDw8 IExHX1BBR0UpOwotCWVuZCA9IHN0YXJ0ICsgKFpVKDEwMCkgPDwgTEdfUEFHRSk7Ci0JYXNzZXJ0 X3B0cl9uZSgodm9pZCAqKXJ0cmVlX2xlYWZrZXkoc3RhcnQpLCAodm9pZCAqKXJ0cmVlX2xlYWZr ZXkoZW5kKSwKLQkgICAgIlRoZSByYW5nZSBzaG91bGQgc3BhbiBhY3Jvc3MgdHdvIHJ0cmVlIG5v ZGVzIik7Ci0JdGVzdF9ydHJlZV9yYW5nZV93cml0ZSh0c2RuLCBydHJlZSwgc3RhcnQsIGVuZCk7 Ci0KLQliYXNlX2RlbGV0ZSh0c2RuLCBiYXNlKTsKLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2 b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfcnRyZWVfcmVhZF9lbXB0eSwKLQkgICAg dGVzdF9ydHJlZV9leHRyZW1hLAotCSAgICB0ZXN0X3J0cmVlX2JpdHMsCi0JICAgIHRlc3RfcnRy ZWVfcmFuZG9tLAotCSAgICB0ZXN0X3J0cmVlX3JhbmdlKTsKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2FmZXR5X2NoZWNr LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2Fm ZXR5X2NoZWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzI2NjcuLjAwMDAw MDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0 L3NhZmV0eV9jaGVjay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLSNpbmNsdWRl ICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nh ZmV0eV9jaGVjay5oIgotCi0vKgotICogTm90ZSB0aGF0IHdlIGdldCBjYWxsZWQgdGhyb3VnaCBz YWZldHlfY2hlY2suc2gsIHdoaWNoIHR1cm5zIG9uIHNhbXBsaW5nIGZvcgotICogZXZlcnl0aGlu Zy4KLSAqLwotCi1ib29sIGZha2VfYWJvcnRfY2FsbGVkOwotdm9pZCBmYWtlX2Fib3J0KGNvbnN0 IGNoYXIgKm1lc3NhZ2UpIHsKLQkodm9pZCltZXNzYWdlOwotCWZha2VfYWJvcnRfY2FsbGVkID0g dHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQKLWJ1ZmZlcl9vdmVyZmxvd193cml0ZShjaGFyICpwdHIs IHNpemVfdCBzaXplKSB7Ci0JLyogQXZvaWQgb3ZlcmZsb3cgd2FybmluZ3MuICovCi0Jdm9sYXRp bGUgc2l6ZV90IGlkeCA9IHNpemU7Ci0JcHRyW2lkeF0gPSAwOwotfQotCi1URVNUX0JFR0lOKHRl c3RfbWFsbG9jX2ZyZWVfb3ZlcmZsb3cpIHsKLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19wcm9mKTsK LQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19vcHRfc2FmZXR5X2NoZWNrcyk7Ci0KLQlzYWZldHlfY2hl Y2tfc2V0X2Fib3J0KCZmYWtlX2Fib3J0KTsKLQkvKiBCdWZmZXIgb3ZlcmZsb3chICovCi0JY2hh ciogcHRyID0gbWFsbG9jKDEyOCk7Ci0JYnVmZmVyX292ZXJmbG93X3dyaXRlKHB0ciwgMTI4KTsK LQlmcmVlKHB0cik7Ci0Jc2FmZXR5X2NoZWNrX3NldF9hYm9ydChOVUxMKTsKLQotCWV4cGVjdF9i X2VxKGZha2VfYWJvcnRfY2FsbGVkLCB0cnVlLCAiUmVkem9uZSBjaGVjayBkaWRuJ3QgZmlyZS4i KTsKLQlmYWtlX2Fib3J0X2NhbGxlZCA9IGZhbHNlOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJ Tih0ZXN0X21hbGxvY3hfZGFsbG9jeF9vdmVyZmxvdykgewotCXRlc3Rfc2tpcF9pZighY29uZmln X3Byb2YpOwotCXRlc3Rfc2tpcF9pZighY29uZmlnX29wdF9zYWZldHlfY2hlY2tzKTsKLQotCXNh ZmV0eV9jaGVja19zZXRfYWJvcnQoJmZha2VfYWJvcnQpOwotCS8qIEJ1ZmZlciBvdmVyZmxvdyEg Ki8KLQljaGFyKiBwdHIgPSBtYWxsb2N4KDEyOCwgMCk7Ci0JYnVmZmVyX292ZXJmbG93X3dyaXRl KHB0ciwgMTI4KTsKLQlkYWxsb2N4KHB0ciwgMCk7Ci0Jc2FmZXR5X2NoZWNrX3NldF9hYm9ydChO VUxMKTsKLQotCWV4cGVjdF9iX2VxKGZha2VfYWJvcnRfY2FsbGVkLCB0cnVlLCAiUmVkem9uZSBj aGVjayBkaWRuJ3QgZmlyZS4iKTsKLQlmYWtlX2Fib3J0X2NhbGxlZCA9IGZhbHNlOwotfQotVEVT VF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X21hbGxvY19zZGFsbG9jeF9vdmVyZmxvdykgewotCXRl c3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc2tpcF9pZighY29uZmlnX29wdF9zYWZl dHlfY2hlY2tzKTsKLQotCXNhZmV0eV9jaGVja19zZXRfYWJvcnQoJmZha2VfYWJvcnQpOwotCS8q IEJ1ZmZlciBvdmVyZmxvdyEgKi8KLQljaGFyKiBwdHIgPSBtYWxsb2MoMTI4KTsKLQlidWZmZXJf b3ZlcmZsb3dfd3JpdGUocHRyLCAxMjgpOwotCXNkYWxsb2N4KHB0ciwgMTI4LCAwKTsKLQlzYWZl dHlfY2hlY2tfc2V0X2Fib3J0KE5VTEwpOwotCi0JZXhwZWN0X2JfZXEoZmFrZV9hYm9ydF9jYWxs ZWQsIHRydWUsICJSZWR6b25lIGNoZWNrIGRpZG4ndCBmaXJlLiIpOwotCWZha2VfYWJvcnRfY2Fs bGVkID0gZmFsc2U7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfcmVhbGxvY19vdmVy ZmxvdykgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc2tpcF9pZighY29u ZmlnX29wdF9zYWZldHlfY2hlY2tzKTsKLQotCXNhZmV0eV9jaGVja19zZXRfYWJvcnQoJmZha2Vf YWJvcnQpOwotCS8qIEJ1ZmZlciBvdmVyZmxvdyEgKi8KLQljaGFyKiBwdHIgPSBtYWxsb2MoMTI4 KTsKLQlidWZmZXJfb3ZlcmZsb3dfd3JpdGUocHRyLCAxMjgpOwotCXB0ciA9IHJlYWxsb2MocHRy LCAxMjkpOwotCXNhZmV0eV9jaGVja19zZXRfYWJvcnQoTlVMTCk7Ci0JZnJlZShwdHIpOwotCi0J ZXhwZWN0X2JfZXEoZmFrZV9hYm9ydF9jYWxsZWQsIHRydWUsICJSZWR6b25lIGNoZWNrIGRpZG4n dCBmaXJlLiIpOwotCWZha2VfYWJvcnRfY2FsbGVkID0gZmFsc2U7Ci19Ci1URVNUX0VORAotCi1U RVNUX0JFR0lOKHRlc3RfcmFsbG9jeF9vdmVyZmxvdykgewotCXRlc3Rfc2tpcF9pZighY29uZmln X3Byb2YpOwotCXRlc3Rfc2tpcF9pZighY29uZmlnX29wdF9zYWZldHlfY2hlY2tzKTsKLQotCXNh ZmV0eV9jaGVja19zZXRfYWJvcnQoJmZha2VfYWJvcnQpOwotCS8qIEJ1ZmZlciBvdmVyZmxvdyEg Ki8KLQljaGFyKiBwdHIgPSBtYWxsb2MoMTI4KTsKLQlidWZmZXJfb3ZlcmZsb3dfd3JpdGUocHRy LCAxMjgpOwotCXB0ciA9IHJhbGxvY3gocHRyLCAxMjksIDApOwotCXNhZmV0eV9jaGVja19zZXRf YWJvcnQoTlVMTCk7Ci0JZnJlZShwdHIpOwotCi0JZXhwZWN0X2JfZXEoZmFrZV9hYm9ydF9jYWxs ZWQsIHRydWUsICJSZWR6b25lIGNoZWNrIGRpZG4ndCBmaXJlLiIpOwotCWZha2VfYWJvcnRfY2Fs bGVkID0gZmFsc2U7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfeGFsbG9jeF9vdmVy ZmxvdykgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3Byb2YpOwotCXRlc3Rfc2tpcF9pZighY29u ZmlnX29wdF9zYWZldHlfY2hlY2tzKTsKLQotCXNhZmV0eV9jaGVja19zZXRfYWJvcnQoJmZha2Vf YWJvcnQpOwotCS8qIEJ1ZmZlciBvdmVyZmxvdyEgKi8KLQljaGFyKiBwdHIgPSBtYWxsb2MoMTI4 KTsKLQlidWZmZXJfb3ZlcmZsb3dfd3JpdGUocHRyLCAxMjgpOwotCXNpemVfdCByZXN1bHQgPSB4 YWxsb2N4KHB0ciwgMTI5LCAwLCAwKTsKLQlleHBlY3RfenVfZXEocmVzdWx0LCAxMjgsICIiKTsK LQlmcmVlKHB0cik7Ci0JZXhwZWN0X2JfZXEoZmFrZV9hYm9ydF9jYWxsZWQsIHRydWUsICJSZWR6 b25lIGNoZWNrIGRpZG4ndCBmaXJlLiIpOwotCWZha2VfYWJvcnRfY2FsbGVkID0gZmFsc2U7Ci0J c2FmZXR5X2NoZWNrX3NldF9hYm9ydChOVUxMKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4o dGVzdF9yZWFsbG9jX25vX292ZXJmbG93KSB7Ci0JY2hhciogcHRyID0gbWFsbG9jKDEyOCk7Ci0J cHRyID0gcmVhbGxvYyhwdHIsIDI1Nik7Ci0JcHRyWzEyOF0gPSAwOwotCXB0clsyNTVdID0gMDsK LQlmcmVlKHB0cik7Ci0KLQlwdHIgPSBtYWxsb2MoMTI4KTsKLQlwdHIgPSByZWFsbG9jKHB0ciwg NjQpOwotCXB0cls2M10gPSAwOwotCXB0clswXSA9IDA7Ci0JZnJlZShwdHIpOwotfQotVEVTVF9F TkQKLQotVEVTVF9CRUdJTih0ZXN0X3JhbGxvY3hfbm9fb3ZlcmZsb3cpIHsKLQljaGFyKiBwdHIg PSBtYWxsb2MoMTI4KTsKLQlwdHIgPSByYWxsb2N4KHB0ciwgMjU2LCAwKTsKLQlwdHJbMTI4XSA9 IDA7Ci0JcHRyWzI1NV0gPSAwOwotCWZyZWUocHRyKTsKLQotCXB0ciA9IG1hbGxvYygxMjgpOwot CXB0ciA9IHJhbGxvY3gocHRyLCA2NCwgMCk7Ci0JcHRyWzYzXSA9IDA7Ci0JcHRyWzBdID0gMDsK LQlmcmVlKHB0cik7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0 ZXN0KAotCSAgICB0ZXN0X21hbGxvY19mcmVlX292ZXJmbG93LAotCSAgICB0ZXN0X21hbGxvY3hf ZGFsbG9jeF9vdmVyZmxvdywKLQkgICAgdGVzdF9tYWxsb2Nfc2RhbGxvY3hfb3ZlcmZsb3csCi0J ICAgIHRlc3RfcmVhbGxvY19vdmVyZmxvdywKLQkgICAgdGVzdF9yYWxsb2N4X292ZXJmbG93LAot CSAgICB0ZXN0X3hhbGxvY3hfb3ZlcmZsb3csCi0JICAgIHRlc3RfcmVhbGxvY19ub19vdmVyZmxv dywKLQkgICAgdGVzdF9yYWxsb2N4X25vX292ZXJmbG93KTsKLX0KCmRpZmYgLS1naXQgYS8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2FmZXR5X2NoZWNr LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nh ZmV0eV9jaGVjay5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1ZjliZi4uMDAw MDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvc2FmZXR5X2NoZWNrLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIS9iaW4v c2gKLQotaWYgWyAieCR7ZW5hYmxlX3Byb2Z9IiA9ICJ4MSIgXSA7IHRoZW4KLSAgZXhwb3J0IE1B TExPQ19DT05GPSJwcm9mOnRydWUscHJvZl9hY3RpdmU6dHJ1ZSxsZ19wcm9mX3NhbXBsZTowIgot ZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvc2FuLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvc2FuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViOThmNTIuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3Nhbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA3ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0 L2plbWFsbG9jX3Rlc3QuaCIKLSNpbmNsdWRlICJ0ZXN0L2FyZW5hX3V0aWwuaCIKLSNpbmNsdWRl ICJ0ZXN0L3Nhbi5oIgotCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuLmgiCi0KLXN0 YXRpYyB2b2lkCi12ZXJpZnlfZXh0ZW50X2d1YXJkZWQodHNkbl90ICp0c2RuLCB2b2lkICpwdHIp IHsKLQlleHBlY3RfdHJ1ZShleHRlbnRfaXNfZ3VhcmRlZCh0c2RuLCBwdHIpLAotCSAgICAiQWxs IGV4dGVudHMgc2hvdWxkIGJlIGd1YXJkZWQuIik7Ci19Ci0KLSNkZWZpbmUgTUFYX1NNQUxMX0FM TE9DQVRJT05TIDQwOTYKLXZvaWQgKnNtYWxsX2FsbG9jW01BWF9TTUFMTF9BTExPQ0FUSU9OU107 Ci0KLS8qCi0gKiBUaGlzIHRlc3QgYWxsb2NhdGVzIHBhZ2Ugc2l6ZWQgc2xhYnMgYW5kIGNoZWNr cyB0aGF0IGV2ZXJ5IHR3byBzbGFicyBoYXZlCi0gKiBhdCBsZWFzdCBvbmUgcGFnZSBpbiBiZXR3 ZWVuIHRoZW0uIFRoYXQgcGFnZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgZ3VhcmQKLSAqIHBhZ2Uu Ci0gKi8KLVRFU1RfQkVHSU4odGVzdF9ndWFyZGVkX3NtYWxsKSB7Ci0JdGVzdF9za2lwX2lmKG9w dF9wcm9mKTsKLQotCXRzZG5fdCAqdHNkbiA9IHRzZF90c2RuKHRzZF9mZXRjaCgpKTsKLQl1bnNp Z25lZCBucGFnZXMgPSAxNiwgcGFnZXNfZm91bmQgPSAwLCBlbmRzX2ZvdW5kID0gMDsKLQlWQVJJ QUJMRV9BUlJBWSh1aW50cHRyX3QsIHBhZ2VzLCBucGFnZXMpOwotCi0JLyogQWxsb2NhdGUgdG8g Z2V0IHNhbml0aXplZCBwb2ludGVycy4gKi8KLQlzaXplX3Qgc2xhYl9zeiA9IFBBR0U7Ci0Jc2l6 ZV90IHN6ID0gc2xhYl9zeiAvIDg7Ci0JdW5zaWduZWQgbl9hbGxvYyA9IDA7Ci0Jd2hpbGUgKG5f YWxsb2MgPCBNQVhfU01BTExfQUxMT0NBVElPTlMpIHsKLQkJdm9pZCAqcHRyID0gbWFsbG9jKHN6 KTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1 cmUiKTsKLQkJc21hbGxfYWxsb2Nbbl9hbGxvY10gPSBwdHI7Ci0JCXZlcmlmeV9leHRlbnRfZ3Vh cmRlZCh0c2RuLCBwdHIpOwotCQlpZiAoKHVpbnRwdHJfdClwdHIgJSBQQUdFID09IDApIHsKLQkJ CWFzc2VydF91X2x0KHBhZ2VzX2ZvdW5kLCBucGFnZXMsCi0JCQkgICAgIlVuZXhwZWN0ZWRseSBs YXJnZSBudW1iZXIgb2YgcGFnZSBhbGlnbmVkIGFsbG9jcyIpOwotCQkJcGFnZXNbcGFnZXNfZm91 bmQrK10gPSAodWludHB0cl90KXB0cjsKLQkJfQotCQlpZiAoKCh1aW50cHRyX3QpcHRyICsgKHVp bnRwdHJfdClzeikgJSBQQUdFID09IDApIHsKLQkJCWVuZHNfZm91bmQrKzsKLQkJfQotCQluX2Fs bG9jKys7Ci0JCWlmIChwYWdlc19mb3VuZCA9PSBucGFnZXMgJiYgZW5kc19mb3VuZCA9PSBucGFn ZXMpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCS8qIFNob3VsZCBmb3VuZCB0aGUgcHRycyBiZWlu ZyBjaGVja2VkIGZvciBvdmVyZmxvdyBhbmQgdW5kZXJmbG93LiAqLwotCWV4cGVjdF91X2VxKHBh Z2VzX2ZvdW5kLCBucGFnZXMsICJDb3VsZCBub3QgZm91bmQgdGhlIGV4cGVjdGVkIHBhZ2VzLiIp OwotCWV4cGVjdF91X2VxKGVuZHNfZm91bmQsIG5wYWdlcywgIkNvdWxkIG5vdCBmb3VuZCB0aGUg ZXhwZWN0ZWQgcGFnZXMuIik7Ci0KLQkvKiBWZXJpZnkgdGhlIHBhZ2VzIGFyZSBub3QgY29udGlu dW91cywgaS5lLiBzZXBhcmF0ZWQgYnkgZ3VhcmRzLiAqLwotCWZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBucGFnZXMgLSAxOyBpKyspIHsKLQkJZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBu cGFnZXM7IGorKykgewotCQkJdWludHB0cl90IHB0cl9kaWZmID0gcGFnZXNbaV0gPiBwYWdlc1tq XSA/Ci0JCQkgICAgcGFnZXNbaV0gLSBwYWdlc1tqXSA6IHBhZ2VzW2pdIC0gcGFnZXNbaV07Ci0J CQlleHBlY3RfenVfZ2UoKHNpemVfdClwdHJfZGlmZiwgc2xhYl9zeiArIFBBR0UsCi0JCQkgICAg IlRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgcGFnZXMgYmV0d2VlbiAiCi0JCQkgICAgImd1 YXJkZWQgc2xhYnMiKTsKLQkJfQotCX0KLQotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuX2Fs bG9jICsgMTsgaSsrKSB7Ci0JCWZyZWUoc21hbGxfYWxsb2NbaV0pOwotCX0KLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9ndWFyZGVkX2xhcmdlKSB7Ci0JdHNkbl90ICp0c2RuID0gdHNk X3RzZG4odHNkX2ZldGNoKCkpOwotCXVuc2lnbmVkIG5sYXJnZSA9IDMyOwotCVZBUklBQkxFX0FS UkFZKHVpbnRwdHJfdCwgbGFyZ2UsIG5sYXJnZSk7Ci0KLQkvKiBBbGxvY2F0ZSB0byBnZXQgc2Fu aXRpemVkIHBvaW50ZXJzLiAqLwotCXNpemVfdCBsYXJnZV9zeiA9IFNDX0xBUkdFX01JTkNMQVNT OwotCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBubGFyZ2U7IGkrKykgewotCQl2b2lkICpwdHIg PSBtYWxsb2MobGFyZ2Vfc3opOwotCQl2ZXJpZnlfZXh0ZW50X2d1YXJkZWQodHNkbiwgcHRyKTsK LQkJZXhwZWN0X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUi KTsKLQkJbGFyZ2VbaV0gPSAodWludHB0cl90KXB0cjsKLQl9Ci0KLQkvKiBWZXJpZnkgdGhlIHBh Z2VzIGFyZSBub3QgY29udGludW91cywgaS5lLiBzZXBhcmF0ZWQgYnkgZ3VhcmRzLiAqLwotCWZv ciAodW5zaWduZWQgaSA9IDA7IGkgPCBubGFyZ2U7IGkrKykgewotCQlmb3IgKHVuc2lnbmVkIGog PSBpICsgMTsgaiA8IG5sYXJnZTsgaisrKSB7Ci0JCQl1aW50cHRyX3QgcHRyX2RpZmYgPSBsYXJn ZVtpXSA+IGxhcmdlW2pdID8KLQkJCSAgICBsYXJnZVtpXSAtIGxhcmdlW2pdIDogbGFyZ2Vbal0g LSBsYXJnZVtpXTsKLQkJCWV4cGVjdF96dV9nZSgoc2l6ZV90KXB0cl9kaWZmLCBsYXJnZV9zeiAr IDIgKiBQQUdFLAotCQkJICAgICJUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgdHdvIHBhZ2VzIGJl dHdlZW4gIgotCQkJICAgICIgZ3VhcmRlZCBsYXJnZSBhbGxvY2F0aW9ucyIpOwotCQl9Ci0JfQot Ci0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5sYXJnZTsgaSsrKSB7Ci0JCWZyZWUoKHZvaWQg KilsYXJnZVtpXSk7Ci0JfQotfQotVEVTVF9FTkQKLQotc3RhdGljIHZvaWQKLXZlcmlmeV9wZGly dHkodW5zaWduZWQgYXJlbmFfaW5kLCB1aW50NjRfdCBleHBlY3RlZCkgewotCXVpbnQ2NF90IHBk aXJ0eSA9IGdldF9hcmVuYV9wZGlydHkoYXJlbmFfaW5kKTsKLQlleHBlY3RfdTY0X2VxKHBkaXJ0 eSwgZXhwZWN0ZWQgLyBQQUdFLAotCSAgICAiVW5leHBlY3RlZCBkaXJ0eSBwYWdlIGFtb3VudC4i KTsKLX0KLQotc3RhdGljIHZvaWQKLXZlcmlmeV9wbXV6enkodW5zaWduZWQgYXJlbmFfaW5kLCB1 aW50NjRfdCBleHBlY3RlZCkgewotCXVpbnQ2NF90IHBtdXp6eSA9IGdldF9hcmVuYV9wbXV6enko YXJlbmFfaW5kKTsKLQlleHBlY3RfdTY0X2VxKHBtdXp6eSwgZXhwZWN0ZWQgLyBQQUdFLAotCSAg ICAiVW5leHBlY3RlZCBtdXp6eSBwYWdlIGFtb3VudC4iKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0 X2d1YXJkZWRfZGVjYXkpIHsKLQl1bnNpZ25lZCBhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUo LTEsIC0xKTsKLQlkb19kZWNheShhcmVuYV9pbmQpOwotCWRvX3B1cmdlKGFyZW5hX2luZCk7Ci0K LQl2ZXJpZnlfcGRpcnR5KGFyZW5hX2luZCwgMCk7Ci0JdmVyaWZ5X3BtdXp6eShhcmVuYV9pbmQs IDApOwotCi0JLyogVmVyaWZ5IHRoYXQgZ3VhcmRlZCBleHRlbnRzIGFzIGRpcnR5LiAqLwotCXNp emVfdCBzejEgPSBQQUdFLCBzejIgPSBQQUdFICogMjsKLQkvKiBXL28gbWFwc19jb2FsZXNjZSwg Z3VhcmRlZCBleHRlbnRzIGFyZSB1bmd1YXJkZWQgZWFnZXJseS4gKi8KLQlzaXplX3QgYWRkX2d1 YXJkX3NpemUgPSBtYXBzX2NvYWxlc2NlID8gMCA6IFNBTl9QQUdFX0dVQVJEU19TSVpFOwotCWdl bmVyYXRlX2RpcnR5KGFyZW5hX2luZCwgc3oxKTsKLQl2ZXJpZnlfcGRpcnR5KGFyZW5hX2luZCwg c3oxICsgYWRkX2d1YXJkX3NpemUpOwotCXZlcmlmeV9wbXV6enkoYXJlbmFfaW5kLCAwKTsKLQot CS8qIFNob3VsZCByZXVzZSB0aGUgZmlyc3QgZXh0ZW50LiAqLwotCWdlbmVyYXRlX2RpcnR5KGFy ZW5hX2luZCwgc3oxKTsKLQl2ZXJpZnlfcGRpcnR5KGFyZW5hX2luZCwgc3oxICsgYWRkX2d1YXJk X3NpemUpOwotCXZlcmlmeV9wbXV6enkoYXJlbmFfaW5kLCAwKTsKLQotCS8qIFNob3VsZCBub3Qg cmV1c2U7IGV4cGVjdCBuZXcgZGlydHkgcGFnZXMuICovCi0JZ2VuZXJhdGVfZGlydHkoYXJlbmFf aW5kLCBzejIpOwotCXZlcmlmeV9wZGlydHkoYXJlbmFfaW5kLCBzejEgKyBzejIgKyAyICogYWRk X2d1YXJkX3NpemUpOwotCXZlcmlmeV9wbXV6enkoYXJlbmFfaW5kLCAwKTsKLQotCXRzZG5fdCAq dHNkbiA9IHRzZF90c2RuKHRzZF9mZXRjaCgpKTsKLQlpbnQgZmxhZ3MgPSBNQUxMT0NYX0FSRU5B KGFyZW5hX2luZCkgfCBNQUxMT0NYX1RDQUNIRV9OT05FOwotCi0JLyogU2hvdWxkIHJldXNlIGRp cnR5IGV4dGVudHMgZm9yIHRoZSB0d28gbWFsbG9jeC4gKi8KLQl2b2lkICpwMSA9IGRvX21hbGxv Y3goc3oxLCBmbGFncyk7Ci0JdmVyaWZ5X2V4dGVudF9ndWFyZGVkKHRzZG4sIHAxKTsKLQl2ZXJp ZnlfcGRpcnR5KGFyZW5hX2luZCwgc3oyICsgYWRkX2d1YXJkX3NpemUpOwotCi0Jdm9pZCAqcDIg PSBkb19tYWxsb2N4KHN6MiwgZmxhZ3MpOwotCXZlcmlmeV9leHRlbnRfZ3VhcmRlZCh0c2RuLCBw Mik7Ci0JdmVyaWZ5X3BkaXJ0eShhcmVuYV9pbmQsIDApOwotCXZlcmlmeV9wbXV6enkoYXJlbmFf aW5kLCAwKTsKLQotCWRhbGxvY3gocDEsIGZsYWdzKTsKLQl2ZXJpZnlfcGRpcnR5KGFyZW5hX2lu ZCwgc3oxICsgYWRkX2d1YXJkX3NpemUpOwotCWRhbGxvY3gocDIsIGZsYWdzKTsKLQl2ZXJpZnlf cGRpcnR5KGFyZW5hX2luZCwgc3oxICsgc3oyICsgMiAqIGFkZF9ndWFyZF9zaXplKTsKLQl2ZXJp ZnlfcG11enp5KGFyZW5hX2luZCwgMCk7Ci0KLQlkb19wdXJnZShhcmVuYV9pbmQpOwotCXZlcmlm eV9wZGlydHkoYXJlbmFfaW5kLCAwKTsKLQl2ZXJpZnlfcG11enp5KGFyZW5hX2luZCwgMCk7Ci0K LQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWV4cGVjdF91NjRfZXEoZ2V0X2FyZW5hX25wdXJnZShh cmVuYV9pbmQpLCAxLAotCQkgICAgIkV4cGVjdGVkIHB1cmdpbmcgdG8gb2NjdXIiKTsKLQkJZXhw ZWN0X3U2NF9lcShnZXRfYXJlbmFfZGlydHlfbnB1cmdlKGFyZW5hX2luZCksIDEsCi0JCSAgICAi RXhwZWN0ZWQgcHVyZ2luZyB0byBvY2N1ciIpOwotCQlleHBlY3RfdTY0X2VxKGdldF9hcmVuYV9k aXJ0eV9wdXJnZWQoYXJlbmFfaW5kKSwKLQkJICAgIChzejEgKyBzejIgKyAyICogYWRkX2d1YXJk X3NpemUpIC8gUEFHRSwKLQkJICAgICJFeHBlY3RlZCBwdXJnaW5nIHRvIG9jY3VyIik7Ci0JCWV4 cGVjdF91NjRfZXEoZ2V0X2FyZW5hX211enp5X25wdXJnZShhcmVuYV9pbmQpLCAwLAotCQkgICAg IkV4cGVjdGVkIHB1cmdpbmcgdG8gb2NjdXIiKTsKLQl9Ci0KLQlpZiAob3B0X3JldGFpbikgewot CQkvKgotCQkgKiBXaXRoIHJldGFpbiwgZ3VhcmRlZCBleHRlbnRzIGFyZSBub3QgbWVyZ2FibGUg YW5kIHdpbGwgYmUKLQkJICogY2FjaGVkIGluIGVjYWNoZV9yZXRhaW5lZC4gIFRoZXkgc2hvdWxk IGJlIHJldXNlZC4KLQkJICovCi0JCXZvaWQgKm5ld19wMSA9IGRvX21hbGxvY3goc3oxLCBmbGFn cyk7Ci0JCXZlcmlmeV9leHRlbnRfZ3VhcmRlZCh0c2RuLCBwMSk7Ci0JCWV4cGVjdF9wdHJfZXEo cDEsIG5ld19wMSwgIkV4cGVjdCB0byByZXVzZSBwMSIpOwotCi0JCXZvaWQgKm5ld19wMiA9IGRv X21hbGxvY3goc3oyLCBmbGFncyk7Ci0JCXZlcmlmeV9leHRlbnRfZ3VhcmRlZCh0c2RuLCBwMik7 Ci0JCWV4cGVjdF9wdHJfZXEocDIsIG5ld19wMiwgIkV4cGVjdCB0byByZXVzZSBwMiIpOwotCi0J CWRhbGxvY3gobmV3X3AxLCBmbGFncyk7Ci0JCXZlcmlmeV9wZGlydHkoYXJlbmFfaW5kLCBzejEg KyBhZGRfZ3VhcmRfc2l6ZSk7Ci0JCWRhbGxvY3gobmV3X3AyLCBmbGFncyk7Ci0JCXZlcmlmeV9w ZGlydHkoYXJlbmFfaW5kLCBzejEgKyBzejIgKyAyICogYWRkX2d1YXJkX3NpemUpOwotCQl2ZXJp ZnlfcG11enp5KGFyZW5hX2luZCwgMCk7Ci0JfQotCi0JZG9fYXJlbmFfZGVzdHJveShhcmVuYV9p bmQpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkg ICAgdGVzdF9ndWFyZGVkX3NtYWxsLAotCSAgICB0ZXN0X2d1YXJkZWRfbGFyZ2UsCi0JICAgIHRl c3RfZ3VhcmRlZF9kZWNheSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nhbi5zaCBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1 aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zYW4uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDkzM2I0YTQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nhbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAs MCBAQAotIyEvYmluL3NoCi0KLWV4cG9ydCBNQUxMT0NfQ09ORj0ic2FuX2d1YXJkX2xhcmdlOjEs c2FuX2d1YXJkX3NtYWxsOjEiCgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQv amVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nhbl9idW1wLmMgYi8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2FuX2J1bXAuYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggY2FmYTM3Zi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2FuX2J1bXAuYworKysgL2Rldi9udWxsCkBA IC0xLDExMSArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0jaW5jbHVk ZSAidGVzdC9hcmVuYV91dGlsLmgiCi0KLSNpbmNsdWRlICJqZW1hbGxvYy9pbnRlcm5hbC9hcmVu YV9zdHJ1Y3RzLmgiCi0jaW5jbHVkZSAiamVtYWxsb2MvaW50ZXJuYWwvc2FuX2J1bXAuaCIKLQot VEVTVF9CRUdJTih0ZXN0X3Nhbl9idW1wX2FsbG9jKSB7Ci0JdGVzdF9za2lwX2lmKCFtYXBzX2Nv YWxlc2NlIHx8ICFvcHRfcmV0YWluKTsKLQotCXRzZG5fdCAqdHNkbiA9IHRzZG5fZmV0Y2goKTsK LQotCXNhbl9idW1wX2FsbG9jX3Qgc2JhOwotCXNhbl9idW1wX2FsbG9jX2luaXQoJnNiYSk7Ci0K LQl1bnNpZ25lZCBhcmVuYV9pbmQgPSBkb19hcmVuYV9jcmVhdGUoMCwgMCk7Ci0JYXNzZXJ0X3Vf bmUoYXJlbmFfaW5kLCBVSU5UX01BWCwgIkZhaWxlZCB0byBjcmVhdGUgYW4gYXJlbmEiKTsKLQot CWFyZW5hX3QgKmFyZW5hID0gYXJlbmFfZ2V0KHRzZG4sIGFyZW5hX2luZCwgZmFsc2UpOwotCXBh Y190ICpwYWMgPSAmYXJlbmEtPnBhX3NoYXJkLnBhYzsKLQotCXNpemVfdCBhbGxvY19zaXplID0g UEFHRSAqIDE2OwotCXNpemVfdCBhbGxvY19uID0gYWxsb2Nfc2l6ZSAvIHNpemVvZih1bnNpZ25l ZCk7Ci0JZWRhdGFfdCogZWRhdGEgPSBzYW5fYnVtcF9hbGxvYyh0c2RuLCAmc2JhLCBwYWMsIHBh Y19laG9va3NfZ2V0KHBhYyksCi0JICAgIGFsbG9jX3NpemUsIC8qIHplcm8gKi8gZmFsc2UpOwot Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChlZGF0YSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBlZGF0YSIp OwotCWV4cGVjdF91X2VxKGVkYXRhX2FyZW5hX2luZF9nZXQoZWRhdGEpLCBhcmVuYV9pbmQsCi0J ICAgICJFZGF0YSB3YXMgYXNzaWduZWQgYW4gaW5jb3JyZWN0IGFyZW5hIGlkIik7Ci0JZXhwZWN0 X3p1X2VxKGVkYXRhX3NpemVfZ2V0KGVkYXRhKSwgYWxsb2Nfc2l6ZSwKLQkgICAgIkFsbG9jYXRl ZCBlZGF0YSBvZiBpbmNvcnJlY3Qgc2l6ZSIpOwotCWV4cGVjdF9mYWxzZShlZGF0YV9zbGFiX2dl dChlZGF0YSksCi0JICAgICJCdW1wIGFsbG9jYXRvciBpbmNvcnJlY3RseSBhc3NpZ25lZCAnc2xh YicgdG8gdHJ1ZSIpOwotCWV4cGVjdF90cnVlKGVkYXRhX2NvbW1pdHRlZF9nZXQoZWRhdGEpLCAi RWRhdGEgaXMgbm90IGNvbW1pdHRlZCIpOwotCi0Jdm9pZCAqcHRyID0gZWRhdGFfYWRkcl9nZXQo ZWRhdGEpOwotCWV4cGVjdF9wdHJfbm90X251bGwocHRyLCAiRWRhdGEgd2FzIGFzc2lnbmVkIGFu IGludmFsaWQgYWRkcmVzcyIpOwotCS8qIFRlc3QgdGhhdCBtZW1vcnkgaXMgYWxsb2NhdGVkOyBu byBndWFyZCBwYWdlcyBhcmUgbWlzcGxhY2VkICovCi0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8 IGFsbG9jX247ICsraSkgewotCQkoKHVuc2lnbmVkICopcHRyKVtpXSA9IDE7Ci0JfQotCi0Jc2l6 ZV90IGFsbG9jX3NpemUyID0gUEFHRSAqIDI4OwotCXNpemVfdCBhbGxvY19uMiA9IGFsbG9jX3Np emUgLyBzaXplb2YodW5zaWduZWQpOwotCWVkYXRhX3QgKmVkYXRhMiA9IHNhbl9idW1wX2FsbG9j KHRzZG4sICZzYmEsIHBhYywgcGFjX2Vob29rc19nZXQocGFjKSwKLQkgICAgYWxsb2Nfc2l6ZTIs IC8qIHplcm8gKi8gdHJ1ZSk7Ci0KLQlleHBlY3RfcHRyX25vdF9udWxsKGVkYXRhMiwgIkZhaWxl ZCB0byBhbGxvY2F0ZSBlZGF0YSIpOwotCWV4cGVjdF91X2VxKGVkYXRhX2FyZW5hX2luZF9nZXQo ZWRhdGEyKSwgYXJlbmFfaW5kLAotCSAgICAiRWRhdGEgd2FzIGFzc2lnbmVkIGFuIGluY29ycmVj dCBhcmVuYSBpZCIpOwotCWV4cGVjdF96dV9lcShlZGF0YV9zaXplX2dldChlZGF0YTIpLCBhbGxv Y19zaXplMiwKLQkgICAgIkFsbG9jYXRlZCBlZGF0YSBvZiBpbmNvcnJlY3Qgc2l6ZSIpOwotCWV4 cGVjdF9mYWxzZShlZGF0YV9zbGFiX2dldChlZGF0YTIpLAotCSAgICAiQnVtcCBhbGxvY2F0b3Ig aW5jb3JyZWN0bHkgYXNzaWduZWQgJ3NsYWInIHRvIHRydWUiKTsKLQlleHBlY3RfdHJ1ZShlZGF0 YV9jb21taXR0ZWRfZ2V0KGVkYXRhMiksICJFZGF0YSBpcyBub3QgY29tbWl0dGVkIik7Ci0KLQl2 b2lkICpwdHIyID0gZWRhdGFfYWRkcl9nZXQoZWRhdGEyKTsKLQlleHBlY3RfcHRyX25vdF9udWxs KHB0ciwgIkVkYXRhIHdhcyBhc3NpZ25lZCBhbiBpbnZhbGlkIGFkZHJlc3MiKTsKLQotCXVpbnRw dHJfdCBwdHJkaWZmID0gcHRyMiA+IHB0ciA/ICh1aW50cHRyX3QpcHRyMiAtICh1aW50cHRyX3Qp cHRyCi0JICAgIDogKHVpbnRwdHJfdClwdHIgLSAodWludHB0cl90KXB0cjI7Ci0Jc2l6ZV90IGJl dHdlZW5fYWxsb2NzID0gKHNpemVfdClwdHJkaWZmIC0gYWxsb2Nfc2l6ZTsKLQotCWV4cGVjdF96 dV9nZShiZXR3ZWVuX2FsbG9jcywgUEFHRSwKLQkgICAgIkd1YXJkIHBhZ2UgYmV0d2VlbiBhbGxv Y3MgaXMgbWlzc2luZyIpOwotCi0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFsbG9jX24yOyAr K2kpIHsKLQkJZXhwZWN0X3VfZXEoKCh1bnNpZ25lZCAqKXB0cjIpW2ldLCAwLCAiTWVtb3J5IGlz IG5vdCB6ZXJvZWQiKTsKLQl9Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfbGFyZ2Vf YWxsb2Nfc2l6ZSkgewotCXRlc3Rfc2tpcF9pZighbWFwc19jb2FsZXNjZSB8fCAhb3B0X3JldGFp bik7Ci0KLQl0c2RuX3QgKnRzZG4gPSB0c2RuX2ZldGNoKCk7Ci0KLQlzYW5fYnVtcF9hbGxvY190 IHNiYTsKLQlzYW5fYnVtcF9hbGxvY19pbml0KCZzYmEpOwotCi0JdW5zaWduZWQgYXJlbmFfaW5k ID0gZG9fYXJlbmFfY3JlYXRlKDAsIDApOwotCWFzc2VydF91X25lKGFyZW5hX2luZCwgVUlOVF9N QVgsICJGYWlsZWQgdG8gY3JlYXRlIGFuIGFyZW5hIik7Ci0KLQlhcmVuYV90ICphcmVuYSA9IGFy ZW5hX2dldCh0c2RuLCBhcmVuYV9pbmQsIGZhbHNlKTsKLQlwYWNfdCAqcGFjID0gJmFyZW5hLT5w YV9zaGFyZC5wYWM7Ci0KLQlzaXplX3QgYWxsb2Nfc2l6ZSA9IFNCQV9SRVRBSU5FRF9BTExPQ19T SVpFICogMjsKLQllZGF0YV90KiBlZGF0YSA9IHNhbl9idW1wX2FsbG9jKHRzZG4sICZzYmEsIHBh YywgcGFjX2Vob29rc19nZXQocGFjKSwKLQkgICAgYWxsb2Nfc2l6ZSwgLyogemVybyAqLyBmYWxz ZSk7Ci0JZXhwZWN0X3VfZXEoZWRhdGFfYXJlbmFfaW5kX2dldChlZGF0YSksIGFyZW5hX2luZCwK LQkgICAgIkVkYXRhIHdhcyBhc3NpZ25lZCBhbiBpbmNvcnJlY3QgYXJlbmEgaWQiKTsKLQlleHBl Y3RfenVfZXEoZWRhdGFfc2l6ZV9nZXQoZWRhdGEpLCBhbGxvY19zaXplLAotCSAgICAiQWxsb2Nh dGVkIGVkYXRhIG9mIGluY29ycmVjdCBzaXplIik7Ci0JZXhwZWN0X2ZhbHNlKGVkYXRhX3NsYWJf Z2V0KGVkYXRhKSwKLQkgICAgIkJ1bXAgYWxsb2NhdG9yIGluY29ycmVjdGx5IGFzc2lnbmVkICdz bGFiJyB0byB0cnVlIik7Ci0JZXhwZWN0X3RydWUoZWRhdGFfY29tbWl0dGVkX2dldChlZGF0YSks ICJFZGF0YSBpcyBub3QgY29tbWl0dGVkIik7Ci0KLQl2b2lkICpwdHIgPSBlZGF0YV9hZGRyX2dl dChlZGF0YSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwdHIsICJFZGF0YSB3YXMgYXNzaWduZWQg YW4gaW52YWxpZCBhZGRyZXNzIik7Ci0JLyogVGVzdCB0aGF0IG1lbW9yeSBpcyBhbGxvY2F0ZWQ7 IG5vIGd1YXJkIHBhZ2VzIGFyZSBtaXNwbGFjZWQgKi8KLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgYWxsb2Nfc2l6ZSAvIFBBR0U7ICsraSkgewotCQkqKChjaGFyICopcHRyICsgUEFHRSAqIGkp ID0gMTsKLQl9Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0 KAotCSAgICB0ZXN0X3Nhbl9idW1wX2FsbG9jLAotCSAgICB0ZXN0X2xhcmdlX2FsbG9jX3NpemUp OwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9zYy5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3NjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMDc0ODEuLjAw MDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3NjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9q ZW1hbGxvY190ZXN0LmgiCi0KLVRFU1RfQkVHSU4odGVzdF91cGRhdGVfc2xhYl9zaXplKSB7Ci0J c2NfZGF0YV90IGRhdGE7Ci0JbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOwotCXNjX2Rh dGFfaW5pdCgmZGF0YSk7Ci0Jc2NfdCAqdGlueSA9ICZkYXRhLnNjWzBdOwotCXNpemVfdCB0aW55 X3NpemUgPSAoWlUoMSkgPDwgdGlueS0+bGdfYmFzZSkKLQkgICAgKyAoWlUodGlueS0+bmRlbHRh KSA8PCB0aW55LT5sZ19kZWx0YSk7Ci0Jc2l6ZV90IHBnc190b29fYmlnID0gKHRpbnlfc2l6ZSAq IEJJVE1BUF9NQVhCSVRTICsgUEFHRSAtIDEpIC8gUEFHRSArIDE7Ci0Jc2NfZGF0YV91cGRhdGVf c2xhYl9zaXplKCZkYXRhLCB0aW55X3NpemUsIHRpbnlfc2l6ZSwgKGludClwZ3NfdG9vX2JpZyk7 Ci0JZXhwZWN0X3p1X2x0KChzaXplX3QpdGlueS0+cGdzLCBwZ3NfdG9vX2JpZywgIkFsbG93ZWQg ZXhjZXNzaXZlIHBhZ2VzIik7Ci0KLQlzY19kYXRhX3VwZGF0ZV9zbGFiX3NpemUoJmRhdGEsIDEs IDEwICogUEFHRSwgMSk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLm5iaW5zOyBpKyspIHsK LQkJc2NfdCAqc2MgPSAmZGF0YS5zY1tpXTsKLQkJc2l6ZV90IHJlZ19zaXplID0gKFpVKDEpIDw8 IHNjLT5sZ19iYXNlKQotCQkgICAgKyAoWlUoc2MtPm5kZWx0YSkgPDwgc2MtPmxnX2RlbHRhKTsK LQkJaWYgKHJlZ19zaXplIDw9IFBBR0UpIHsKLQkJCWV4cGVjdF9kX2VxKHNjLT5wZ3MsIDEsICJJ Z25vcmVkIHZhbGlkIHBhZ2Ugc2l6ZSBoaW50Iik7Ci0JCX0gZWxzZSB7Ci0JCQlleHBlY3RfZF9n dChzYy0+cGdzLCAxLAotCQkJICAgICJBbGxvd2VkIGludmFsaWQgcGFnZSBzaXplIGhpbnQiKTsK LQkJfQotCX0KLX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Qo Ci0JICAgIHRlc3RfdXBkYXRlX3NsYWJfc2l6ZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3NlYy5jIGIvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3NlYy5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBmM2VjNDAzLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zZWMuYworKysgL2Rldi9udWxsCkBA IC0xLDYzNCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLSNpbmNs dWRlICJqZW1hbGxvYy9pbnRlcm5hbC9zZWMuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgcGFpX3Rlc3Rf YWxsb2NhdG9yX3MgcGFpX3Rlc3RfYWxsb2NhdG9yX3Q7Ci1zdHJ1Y3QgcGFpX3Rlc3RfYWxsb2Nh dG9yX3MgewotCXBhaV90IHBhaTsKLQlib29sIGFsbG9jX2ZhaWw7Ci0Jc2l6ZV90IGFsbG9jX2Nv dW50OwotCXNpemVfdCBhbGxvY19iYXRjaF9jb3VudDsKLQlzaXplX3QgZGFsbG9jX2NvdW50Owot CXNpemVfdCBkYWxsb2NfYmF0Y2hfY291bnQ7Ci0JLyoKLQkgKiBXZSB1c2UgYSBzaW1wbGUgYnVt cCBhbGxvY2F0b3IgYXMgdGhlIGltcGxlbWVudGF0aW9uLiAgVGhpcyBpc24ndAotCSAqICpyZWFs bHkqIGNvcnJlY3QsIHNpbmNlIHdlIG1heSBhbGxvdyBleHBhbnNpb24gaW50byBhIHN1YnNlcXVl bnQKLQkgKiBhbGxvY2F0aW9uLCBidXQgaXQncyBub3QgbGlrZSB0aGUgU0VDIGlzIHJlYWxseSBl eGFtaW5pbmcgdGhlCi0JICogcG9pbnRlcnMgaXQgZ2V0cyBiYWNrOyB0aGlzIGlzIG1vc3RseSBq dXN0IGhlbHBmdWwgZm9yIGRlYnVnZ2luZy4KLQkgKi8KLQl1aW50cHRyX3QgbmV4dF9wdHI7Ci0J c2l6ZV90IGV4cGFuZF9jb3VudDsKLQlib29sIGV4cGFuZF9yZXR1cm5fdmFsdWU7Ci0Jc2l6ZV90 IHNocmlua19jb3VudDsKLQlib29sIHNocmlua19yZXR1cm5fdmFsdWU7Ci19OwotCi1zdGF0aWMg dm9pZAotdGVzdF9zZWNfaW5pdChzZWNfdCAqc2VjLCBwYWlfdCAqZmFsbGJhY2ssIHNpemVfdCBu c2hhcmRzLCBzaXplX3QgbWF4X2FsbG9jLAotICAgIHNpemVfdCBtYXhfYnl0ZXMpIHsKLQlzZWNf b3B0c190IG9wdHM7Ci0Jb3B0cy5uc2hhcmRzID0gMTsKLQlvcHRzLm1heF9hbGxvYyA9IG1heF9h bGxvYzsKLQlvcHRzLm1heF9ieXRlcyA9IG1heF9ieXRlczsKLQkvKgotCSAqIEp1c3QgY2hvb3Nl IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIHRoZXNlOyBtb3N0IHRlc3RzIGRvbid0IGNhcmUgc28K LQkgKiBsb25nIGFzIHRoZXkncmUgc29tZXRoaW5nIHJlYXNvbmFibGUuCi0JICovCi0Jb3B0cy5i eXRlc19hZnRlcl9mbHVzaCA9IG1heF9ieXRlcyAvIDI7Ci0Jb3B0cy5iYXRjaF9maWxsX2V4dHJh ID0gNDsKLQotCS8qCi0JICogV2UgZW5kIHVwIGxlYWtpbmcgdGhpcyBiYXNlLCBidXQgdGhhdCdz IGZpbmU7IHRoaXMgdGVzdCBpcwotCSAqIHNob3J0LXJ1bm5pbmcsIGFuZCBTRUNzIGFyZSBhcmVu YS1zY29wZWQgaW4gcmVhbGl0eS4KLQkgKi8KLQliYXNlX3QgKmJhc2UgPSBiYXNlX25ldyhUU0RO X05VTEwsIC8qIGluZCAqLyAxMjMsCi0JICAgICZlaG9va3NfZGVmYXVsdF9leHRlbnRfaG9va3Ms IC8qIG1ldGFkYXRhX3VzZV9ob29rcyAqLyB0cnVlKTsKLQotCWJvb2wgZXJyID0gc2VjX2luaXQo VFNETl9OVUxMLCBzZWMsIGJhc2UsIGZhbGxiYWNrLCAmb3B0cyk7Ci0JYXNzZXJ0X2ZhbHNlKGVy ciwgIlVuZXhwZWN0ZWQgaW5pdGlhbGl6YXRpb24gZmFpbHVyZSIpOwotCWFzc2VydF91X2dlKHNl Yy0+bnBzaXplcywgMCwgIlplcm8gc2l6ZSBjbGFzc2VzIGFsbG93ZWQgZm9yIGNhY2hpbmciKTsK LX0KLQotc3RhdGljIGlubGluZSBlZGF0YV90ICoKLXBhaV90ZXN0X2FsbG9jYXRvcl9hbGxvYyh0 c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBzaXplX3Qgc2l6ZSwKLSAgICBzaXplX3QgYWxpZ25t ZW50LCBib29sIHplcm8sIGJvb2wgZ3VhcmRlZCwgYm9vbCBmcmVxdWVudF9yZXVzZSwKLSAgICBi b29sICpkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCkgewotCWFzc2VydCghZ3VhcmRlZCk7Ci0JcGFp X3Rlc3RfYWxsb2NhdG9yX3QgKnRhID0gKHBhaV90ZXN0X2FsbG9jYXRvcl90ICopc2VsZjsKLQlp ZiAodGEtPmFsbG9jX2ZhaWwpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWVkYXRhX3QgKmVkYXRh ID0gbWFsbG9jKHNpemVvZihlZGF0YV90KSk7Ci0JYXNzZXJ0X3B0cl9ub3RfbnVsbChlZGF0YSwg IiIpOwotCXRhLT5uZXh0X3B0ciArPSBhbGlnbm1lbnQgLSAxOwotCWVkYXRhX2luaXQoZWRhdGEs IC8qIGFyZW5hX2luZCAqLyAwLAotCSAgICAodm9pZCAqKSh0YS0+bmV4dF9wdHIgJiB+KGFsaWdu bWVudCAtIDEpKSwgc2l6ZSwKLQkgICAgLyogc2xhYiAqLyBmYWxzZSwKLQkgICAgLyogc3ppbmQg Ki8gMCwgLyogc24gKi8gMSwgZXh0ZW50X3N0YXRlX2FjdGl2ZSwgLyogemVybyAqLyB6ZXJvLAot CSAgICAvKiBjb21pdHRlZCAqLyB0cnVlLCAvKiByYW5nZWQgKi8gZmFsc2UsIEVYVEVOVF9OT1Rf SEVBRCk7Ci0JdGEtPm5leHRfcHRyICs9IHNpemU7Ci0JdGEtPmFsbG9jX2NvdW50Kys7Ci0JcmV0 dXJuIGVkYXRhOwotfQotCi1zdGF0aWMgaW5saW5lIHNpemVfdAotcGFpX3Rlc3RfYWxsb2NhdG9y X2FsbG9jX2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIHNpemVfdCBzaXplLAotICAg IHNpemVfdCBuYWxsb2NzLCBlZGF0YV9saXN0X2FjdGl2ZV90ICpyZXN1bHRzLAotICAgIGJvb2wg KmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JcGFpX3Rlc3RfYWxsb2NhdG9yX3QgKnRhID0g KHBhaV90ZXN0X2FsbG9jYXRvcl90ICopc2VsZjsKLQlpZiAodGEtPmFsbG9jX2ZhaWwpIHsKLQkJ cmV0dXJuIDA7Ci0JfQotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFsbG9jczsgaSsrKSB7Ci0J CWVkYXRhX3QgKmVkYXRhID0gbWFsbG9jKHNpemVvZihlZGF0YV90KSk7Ci0JCWFzc2VydF9wdHJf bm90X251bGwoZWRhdGEsICIiKTsKLQkJZWRhdGFfaW5pdChlZGF0YSwgLyogYXJlbmFfaW5kICov IDAsCi0JCSAgICAodm9pZCAqKXRhLT5uZXh0X3B0ciwgc2l6ZSwKLQkJICAgIC8qIHNsYWIgKi8g ZmFsc2UsIC8qIHN6aW5kICovIDAsIC8qIHNuICovIDEsCi0JCSAgICBleHRlbnRfc3RhdGVfYWN0 aXZlLCAvKiB6ZXJvICovIGZhbHNlLCAvKiBjb21pdHRlZCAqLyB0cnVlLAotCQkgICAgLyogcmFu Z2VkICovIGZhbHNlLCBFWFRFTlRfTk9UX0hFQUQpOwotCQl0YS0+bmV4dF9wdHIgKz0gc2l6ZTsK LQkJdGEtPmFsbG9jX2JhdGNoX2NvdW50Kys7Ci0JCWVkYXRhX2xpc3RfYWN0aXZlX2FwcGVuZChy ZXN1bHRzLCBlZGF0YSk7Ci0JfQotCXJldHVybiBuYWxsb2NzOwotfQotCi1zdGF0aWMgYm9vbAot cGFpX3Rlc3RfYWxsb2NhdG9yX2V4cGFuZCh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxmLCBlZGF0 YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2xkX3NpemUsIHNpemVfdCBuZXdfc2l6ZSwgYm9vbCB6 ZXJvLAotICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JcGFpX3Rlc3RfYWxs b2NhdG9yX3QgKnRhID0gKHBhaV90ZXN0X2FsbG9jYXRvcl90ICopc2VsZjsKLQl0YS0+ZXhwYW5k X2NvdW50Kys7Ci0JcmV0dXJuIHRhLT5leHBhbmRfcmV0dXJuX3ZhbHVlOwotfQotCi1zdGF0aWMg Ym9vbAotcGFpX3Rlc3RfYWxsb2NhdG9yX3Nocmluayh0c2RuX3QgKnRzZG4sIHBhaV90ICpzZWxm LCBlZGF0YV90ICplZGF0YSwKLSAgICBzaXplX3Qgb2xkX3NpemUsIHNpemVfdCBuZXdfc2l6ZSwg Ym9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsKLQlwYWlfdGVzdF9hbGxvY2F0b3JfdCAq dGEgPSAocGFpX3Rlc3RfYWxsb2NhdG9yX3QgKilzZWxmOwotCXRhLT5zaHJpbmtfY291bnQrKzsK LQlyZXR1cm4gdGEtPnNocmlua19yZXR1cm5fdmFsdWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYWlf dGVzdF9hbGxvY2F0b3JfZGFsbG9jKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsIGVkYXRhX3Qg KmVkYXRhLAotICAgIGJvb2wgKmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKSB7Ci0JcGFpX3Rlc3Rf YWxsb2NhdG9yX3QgKnRhID0gKHBhaV90ZXN0X2FsbG9jYXRvcl90ICopc2VsZjsKLQl0YS0+ZGFs bG9jX2NvdW50Kys7Ci0JZnJlZShlZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYWlfdGVzdF9h bGxvY2F0b3JfZGFsbG9jX2JhdGNoKHRzZG5fdCAqdHNkbiwgcGFpX3QgKnNlbGYsCi0gICAgZWRh dGFfbGlzdF9hY3RpdmVfdCAqbGlzdCwgYm9vbCAqZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpIHsK LQlwYWlfdGVzdF9hbGxvY2F0b3JfdCAqdGEgPSAocGFpX3Rlc3RfYWxsb2NhdG9yX3QgKilzZWxm OwotCi0JZWRhdGFfdCAqZWRhdGE7Ci0Jd2hpbGUgKChlZGF0YSA9IGVkYXRhX2xpc3RfYWN0aXZl X2ZpcnN0KGxpc3QpKSAhPSBOVUxMKSB7Ci0JCWVkYXRhX2xpc3RfYWN0aXZlX3JlbW92ZShsaXN0 LCBlZGF0YSk7Ci0JCXRhLT5kYWxsb2NfYmF0Y2hfY291bnQrKzsKLQkJZnJlZShlZGF0YSk7Ci0J fQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KHBhaV90 ZXN0X2FsbG9jYXRvcl90ICp0YSkgewotCXRhLT5hbGxvY19mYWlsID0gZmFsc2U7Ci0JdGEtPmFs bG9jX2NvdW50ID0gMDsKLQl0YS0+YWxsb2NfYmF0Y2hfY291bnQgPSAwOwotCXRhLT5kYWxsb2Nf Y291bnQgPSAwOwotCXRhLT5kYWxsb2NfYmF0Y2hfY291bnQgPSAwOwotCS8qIEp1c3QgZG9uJ3Qg c3RhcnQgdGhlIGVkYXRhIGF0IDAuICovCi0JdGEtPm5leHRfcHRyID0gMTAgKiBQQUdFOwotCXRh LT5leHBhbmRfY291bnQgPSAwOwotCXRhLT5leHBhbmRfcmV0dXJuX3ZhbHVlID0gZmFsc2U7Ci0J dGEtPnNocmlua19jb3VudCA9IDA7Ci0JdGEtPnNocmlua19yZXR1cm5fdmFsdWUgPSBmYWxzZTsK LQl0YS0+cGFpLmFsbG9jID0gJnBhaV90ZXN0X2FsbG9jYXRvcl9hbGxvYzsKLQl0YS0+cGFpLmFs bG9jX2JhdGNoID0gJnBhaV90ZXN0X2FsbG9jYXRvcl9hbGxvY19iYXRjaDsKLQl0YS0+cGFpLmV4 cGFuZCA9ICZwYWlfdGVzdF9hbGxvY2F0b3JfZXhwYW5kOwotCXRhLT5wYWkuc2hyaW5rID0gJnBh aV90ZXN0X2FsbG9jYXRvcl9zaHJpbms7Ci0JdGEtPnBhaS5kYWxsb2MgPSAmcGFpX3Rlc3RfYWxs b2NhdG9yX2RhbGxvYzsKLQl0YS0+cGFpLmRhbGxvY19iYXRjaCA9ICZwYWlfdGVzdF9hbGxvY2F0 b3JfZGFsbG9jX2JhdGNoOwotfQotCi1URVNUX0JFR0lOKHRlc3RfcmV1c2UpIHsKLQlwYWlfdGVz dF9hbGxvY2F0b3JfdCB0YTsKLQlwYWlfdGVzdF9hbGxvY2F0b3JfaW5pdCgmdGEpOwotCXNlY190 IHNlYzsKLQkvKgotCSAqIFdlIGNhbid0IHVzZSB0aGUgInJlYWwiIHRzZCwgc2luY2Ugd2UgbWFs bG9jIHdpdGhpbiB0aGUgdGVzdAotCSAqIGFsbG9jYXRvciBob29rczsgd2UnZCBnZXQgbG9jayBp bnZlcnNpb24gY3Jhc2hlcy4gIEV2ZW50dWFsbHksIHdlCi0JICogc2hvdWxkIGhhdmUgYSB3YXkg dG8gbW9jayB0c2RzLCBidXQgZm9yIG5vdyBqdXN0IGRvbid0IGRvIGFueQotCSAqIGxvY2stb3Jk ZXIgY2hlY2tpbmcuCi0JICovCi0JdHNkbl90ICp0c2RuID0gVFNETl9OVUxMOwotCS8qCi0JICog MTEgYWxsb2NzIGFwaWVjZSBvZiAxLVBBR0UgYW5kIDItUEFHRSBvYmplY3RzIG1lYW5zIHRoYXQg d2Ugc2hvdWxkIGJlCi0JICogYWJsZSB0byBnZXQgdG8gMzMgcGFnZXMgaW4gdGhlIGNhY2hlIGJl Zm9yZSB0cmlnZ2VyaW5nIGEgZmx1c2guICBXZQotCSAqIHNldCB0aGUgZmx1c2ggbGlpbXQgdG8g dHdpY2UgdGhpcyBhbW91bnQsIHRvIGF2b2lkIGFjY2lkZW50YWxseQotCSAqIHRyaWdnZXJpbmcg YSBmbHVzaCBjYXVzZWQgYnkgdGhlIGJhdGNoLWFsbG9jYXRpb24gZG93biB0aGUgY2FjaGUgZmls bAotCSAqIHBhdGh3YXkgZGlzcnVwdGluZyBvcmRlcmluZy4KLQkgKi8KLQllbnVtIHsgTkFMTE9D UyA9IDExIH07Ci0JZWRhdGFfdCAqb25lX3BhZ2VbTkFMTE9DU107Ci0JZWRhdGFfdCAqdHdvX3Bh Z2VbTkFMTE9DU107Ci0JYm9vbCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOwotCXRl c3Rfc2VjX2luaXQoJnNlYywgJnRhLnBhaSwgLyogbnNoYXJkcyAqLyAxLCAvKiBtYXhfYWxsb2Mg Ki8gMiAqIFBBR0UsCi0JICAgIC8qIG1heF9ieXRlcyAqLyAyICogKE5BTExPQ1MgKiBQQUdFICsg TkFMTE9DUyAqIDIgKiBQQUdFKSk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NTOyBpKysp IHsKLQkJb25lX3BhZ2VbaV0gPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0Us Ci0JCSAgICAvKiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVu dF9yZXVzZSAqLwotCQkgICAgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JCWV4 cGVjdF9wdHJfbm90X251bGwob25lX3BhZ2VbaV0sICJVbmV4cGVjdGVkIGFsbG9jIGZhaWx1cmUi KTsKLQkJdHdvX3BhZ2VbaV0gPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIDIgKiBQQUdFLCBQ QUdFLAotCQkgICAgLyogemVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJl cXVlbnRfcmV1c2UgKi8KLQkJICAgIGZhbHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwot CQlleHBlY3RfcHRyX25vdF9udWxsKG9uZV9wYWdlW2ldLCAiVW5leHBlY3RlZCBhbGxvYyBmYWls dXJlIik7Ci0JfQotCWV4cGVjdF96dV9lcSgwLCB0YS5hbGxvY19jb3VudCwgIlNob3VsZCBiZSB1 c2luZyBiYXRjaCBhbGxvY3MiKTsKLQlzaXplX3QgbWF4X2FsbG9jcyA9IHRhLmFsbG9jX2NvdW50 ICsgdGEuYWxsb2NfYmF0Y2hfY291bnQ7Ci0JZXhwZWN0X3p1X2xlKDIgKiBOQUxMT0NTLCBtYXhf YWxsb2NzLAotCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCWV4cGVj dF96dV9lcSgwLCB0YS5kYWxsb2NfY291bnQsCi0JICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGFs bG9jYXRpb25zIik7Ci0JLyoKLQkgKiBGcmVlIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gd2Ug YWxsb2NhdGVkLCB0byBtYWtlIHN1cmUgZnJlZS1saXN0Ci0JICogc2VwYXJhdGlvbiB3b3JrcyBj b3JyZWN0bHkuCi0JICovCi0JZm9yIChpbnQgaSA9IE5BTExPQ1MgLSAxOyBpID49IDA7IGktLSkg ewotCQlwYWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBvbmVfcGFnZVtpXSwKLQkJICAgICZkZWZl cnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JfQotCWZvciAoaW50IGkgPSBOQUxMT0NTIC0gMTsgaSA+ PSAwOyBpLS0pIHsKLQkJcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgdHdvX3BhZ2VbaV0sCi0J CSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCX0KLQlleHBlY3RfenVfZXEobWF4X2Fs bG9jcywgdGEuYWxsb2NfY291bnQgKyB0YS5hbGxvY19iYXRjaF9jb3VudCwKLQkgICAgIkluY29y cmVjdCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKLQlleHBlY3RfenVfZXEoMCwgdGEuZGFsbG9j X2NvdW50LAotCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCS8qCi0J ICogQ2hlY2sgdGhhdCB0aGUgbid0aCBtb3N0IHJlY2VudCBkZWFsbG9jYXRlZCBleHRlbnQgaXMg cmV0dXJuZWQgZm9yCi0JICogdGhlIG4ndGggYWxsb2MgcmVxdWVzdCBvZiBhIGdpdmVuIHNpemUu Ci0JICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NTOyBpKyspIHsKLQkJZWRhdGFfdCAq YWxsb2MxID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCBQQUdFLCBQQUdFLAotCQkgICAgLyog emVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJlcXVlbnRfcmV1c2UgKi8K LQkJICAgIGZhbHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCQllZGF0YV90ICphbGxv YzIgPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIDIgKiBQQUdFLCBQQUdFLAotCQkgICAgLyog emVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJlcXVlbnRfcmV1c2UgKi8K LQkJICAgIGZhbHNlLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCQlleHBlY3RfcHRyX2Vx KG9uZV9wYWdlW2ldLCBhbGxvYzEsCi0JCSAgICAiR290IHVuZXhwZWN0ZWQgYWxsb2NhdGlvbiIp OwotCQlleHBlY3RfcHRyX2VxKHR3b19wYWdlW2ldLCBhbGxvYzIsCi0JCSAgICAiR290IHVuZXhw ZWN0ZWQgYWxsb2NhdGlvbiIpOwotCX0KLQlleHBlY3RfenVfZXEobWF4X2FsbG9jcywgdGEuYWxs b2NfY291bnQgKyB0YS5hbGxvY19iYXRjaF9jb3VudCwKLQkgICAgIkluY29ycmVjdCBudW1iZXIg b2YgYWxsb2NhdGlvbnMiKTsKLQlleHBlY3RfenVfZXEoMCwgdGEuZGFsbG9jX2NvdW50LAotCSAg ICAiSW5jb3JyZWN0IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotfQotVEVTVF9FTkQKLQotCi1U RVNUX0JFR0lOKHRlc3RfYXV0b19mbHVzaCkgewotCXBhaV90ZXN0X2FsbG9jYXRvcl90IHRhOwot CXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KCZ0YSk7Ci0Jc2VjX3Qgc2VjOwotCS8qIFNlZSB0aGUg bm90ZSBhYm92ZSAtLSB3ZSBjYW4ndCB1c2UgdGhlIHJlYWwgdHNkLiAqLwotCXRzZG5fdCAqdHNk biA9IFRTRE5fTlVMTDsKLQkvKgotCSAqIDEwLWFsbG9jcyBhcGllY2Ugb2YgMS1QQUdFIGFuZCAy LVBBR0Ugb2JqZWN0cyBtZWFucyB0aGF0IHdlIHNob3VsZCBiZQotCSAqIGFibGUgdG8gZ2V0IHRv IDMwIHBhZ2VzIGluIHRoZSBjYWNoZSBiZWZvcmUgdHJpZ2dlcmluZyBhIGZsdXNoLiAgVGhlCi0J ICogY2hvaWNlIG9mIE5BTExPQ1MgaGVyZSBpcyBjaG9zZW4gdG8gbWF0Y2ggdGhlIGJhdGNoIGFs bG9jYXRpb24KLQkgKiBkZWZhdWx0ICg0IGV4dHJhICsgMSA9PSA1OyBzbyAxMCBhbGxvY2F0aW9u cyBsZWF2ZXMgdGhlIGNhY2hlIGV4YWN0bHkKLQkgKiBlbXB0eSwgZXZlbiBpbiB0aGUgcHJlc2Vu Y2Ugb2YgYmF0Y2ggYWxsb2NhdGlvbiBvbiBmaWxsKS4KLQkgKiBFdmVudHVhbGx5LCBvbmNlIG91 ciBhbGxvY2F0aW9uIGJhdGNoaW5nIHN0cmF0ZWdpZXMgYmVjb21lIHNtYXJ0ZXIsCi0JICogdGhp cyBzaG91bGQgY2hhbmdlLgotCSAqLwotCWVudW0geyBOQUxMT0NTID0gMTAgfTsKLQllZGF0YV90 ICpleHRyYV9hbGxvYzsKLQllZGF0YV90ICphbGxvY3NbTkFMTE9DU107Ci0JYm9vbCBkZWZlcnJl ZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOwotCXRlc3Rfc2VjX2luaXQoJnNlYywgJnRhLnBhaSwg LyogbnNoYXJkcyAqLyAxLCAvKiBtYXhfYWxsb2MgKi8gUEFHRSwKLQkgICAgLyogbWF4X2J5dGVz ICovIE5BTExPQ1MgKiBQQUdFKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IE5BTExPQ1M7IGkrKykg ewotCQlhbGxvY3NbaV0gPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0UsCi0J CSAgICAvKiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVudF9y ZXVzZSAqLwotCQkgICAgZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JCWV4cGVj dF9wdHJfbm90X251bGwoYWxsb2NzW2ldLCAiVW5leHBlY3RlZCBhbGxvYyBmYWlsdXJlIik7Ci0J fQotCWV4dHJhX2FsbG9jID0gcGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCBQQUdFLCBQQUdFLCAv KiB6ZXJvICovIGZhbHNlLAotCSAgICAvKiBndWFyZGVkICovIGZhbHNlLCAvKiBmcmVxdWVudF9y ZXVzZSAqLyBmYWxzZSwKLQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQlleHBlY3Rf cHRyX25vdF9udWxsKGV4dHJhX2FsbG9jLCAiVW5leHBlY3RlZCBhbGxvYyBmYWlsdXJlIik7Ci0J c2l6ZV90IG1heF9hbGxvY3MgPSB0YS5hbGxvY19jb3VudCArIHRhLmFsbG9jX2JhdGNoX2NvdW50 OwotCWV4cGVjdF96dV9sZShOQUxMT0NTICsgMSwgbWF4X2FsbG9jcywKLQkgICAgIkluY29ycmVj dCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKLQlleHBlY3RfenVfZXEoMCwgdGEuZGFsbG9jX2Nv dW50LAotCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCS8qIEZyZWUg dW50aWwgdGhlIFNFQyBpcyBmdWxsLCBidXQgc2hvdWxkIG5vdCBoYXZlIGZsdXNoZWQgeWV0LiAq LwotCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsrKSB7Ci0JCXBhaV9kYWxsb2ModHNk biwgJnNlYy5wYWksIGFsbG9jc1tpXSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQl9Ci0J ZXhwZWN0X3p1X2xlKE5BTExPQ1MgKyAxLCBtYXhfYWxsb2NzLAotCSAgICAiSW5jb3JyZWN0IG51 bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCWV4cGVjdF96dV9lcSgwLCB0YS5kYWxsb2NfY291bnQs Ci0JICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGFsbG9jYXRpb25zIik7Ci0JLyoKLQkgKiBGcmVl IHRoZSBleHRyYSBhbGxvY2F0aW9uOyB0aGlzIHNob3VsZCB0cmlnZ2VyIGEgZmx1c2guICBUaGUg aW50ZXJuYWwKLQkgKiBmbHVzaGluZyBsb2dpYyBpcyBhbGxvd2VkIHRvIGdldCBjb21wbGljYXRl ZDsgZm9yIG5vdywgd2UgcmVseSBvbiBvdXIKLQkgKiB3aGl0ZWJveCBrbm93bGVkZ2Ugb2YgdGhl IGZhY3QgdGhhdCB0aGUgU0VDIGZsdXNoZXMgYmlucyBpbiB0aGVpcgotCSAqIGVudGlyZXR5IHdo ZW4gaXQgZGVjaWRlcyB0byBkbyBzbywgYW5kIGl0IGhhcyBvbmx5IG9uZSBiaW4gYWN0aXZlCi0J ICogcmlnaHQgbm93LgotCSAqLwotCXBhaV9kYWxsb2ModHNkbiwgJnNlYy5wYWksIGV4dHJhX2Fs bG9jLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCWV4cGVjdF96dV9lcShtYXhfYWxsb2Nz LCB0YS5hbGxvY19jb3VudCArIHRhLmFsbG9jX2JhdGNoX2NvdW50LAotCSAgICAiSW5jb3JyZWN0 IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCWV4cGVjdF96dV9lcSgwLCB0YS5kYWxsb2NfY291 bnQsCi0JICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIChub24tYmF0Y2gpIGRlYWxsb2NhdGlvbnMi KTsKLQlleHBlY3RfenVfZXEoTkFMTE9DUyArIDEsIHRhLmRhbGxvY19iYXRjaF9jb3VudCwKLQkg ICAgIkluY29ycmVjdCBudW1iZXIgb2YgYmF0Y2ggZGVhbGxvY2F0aW9ucyIpOwotfQotVEVTVF9F TkQKLQotLyoKLSAqIEEgZGlzYWJsZSBhbmQgYSBmbHVzaCBhcmUgKmFsbW9zdCogZXF1aXZhbGVu dDsgdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3aGF0Ci0gKiBoYXBwZW5zIGFmdGVyd2FyZHM7IGRp c2FibGluZyBkaXNhbGxvd3MgYWxsIGZ1dHVyZSBjYWNoaW5nIGFzIHdlbGwuCi0gKi8KLXN0YXRp YyB2b2lkCi1kb19kaXNhYmxlX2ZsdXNoX3Rlc3QoYm9vbCBpc19kaXNhYmxlKSB7Ci0JcGFpX3Rl c3RfYWxsb2NhdG9yX3QgdGE7Ci0JcGFpX3Rlc3RfYWxsb2NhdG9yX2luaXQoJnRhKTsKLQlzZWNf dCBzZWM7Ci0JLyogU2VlIHRoZSBub3RlIGFib3ZlIC0tIHdlIGNhbid0IHVzZSB0aGUgcmVhbCB0 c2QuICovCi0JdHNkbl90ICp0c2RuID0gVFNETl9OVUxMOwotCi0JZW51bSB7IE5BTExPQ1MgPSAx MSB9OwotCWVkYXRhX3QgKmFsbG9jc1tOQUxMT0NTXTsKLQlib29sIGRlZmVycmVkX3dvcmtfZ2Vu ZXJhdGVkID0gZmFsc2U7Ci0JdGVzdF9zZWNfaW5pdCgmc2VjLCAmdGEucGFpLCAvKiBuc2hhcmRz ICovIDEsIC8qIG1heF9hbGxvYyAqLyBQQUdFLAotCSAgICAvKiBtYXhfYnl0ZXMgKi8gTkFMTE9D UyAqIFBBR0UpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgTkFMTE9DUzsgaSsrKSB7Ci0JCWFsbG9j c1tpXSA9IHBhaV9hbGxvYyh0c2RuLCAmc2VjLnBhaSwgUEFHRSwgUEFHRSwKLQkJICAgIC8qIHpl cm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNlICovCi0J CSAgICBmYWxzZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQkJZXhwZWN0X3B0cl9ub3Rf bnVsbChhbGxvY3NbaV0sICJVbmV4cGVjdGVkIGFsbG9jIGZhaWx1cmUiKTsKLQl9Ci0JLyogRnJl ZSBhbGwgYnV0IHRoZSBsYXN0IGFsb2MuICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBOQUxMT0NT IC0gMTsgaSsrKSB7Ci0JCXBhaV9kYWxsb2ModHNkbiwgJnNlYy5wYWksIGFsbG9jc1tpXSwgJmRl ZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQl9Ci0Jc2l6ZV90IG1heF9hbGxvY3MgPSB0YS5hbGxv Y19jb3VudCArIHRhLmFsbG9jX2JhdGNoX2NvdW50OwotCi0JZXhwZWN0X3p1X2xlKE5BTExPQ1Ms IG1heF9hbGxvY3MsICJJbmNvcnJlY3QgbnVtYmVyIG9mIGFsbG9jYXRpb25zIik7Ci0JZXhwZWN0 X3p1X2VxKDAsIHRhLmRhbGxvY19jb3VudCwKLQkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgYWxs b2NhdGlvbnMiKTsKLQotCWlmIChpc19kaXNhYmxlKSB7Ci0JCXNlY19kaXNhYmxlKHRzZG4sICZz ZWMpOwotCX0gZWxzZSB7Ci0JCXNlY19mbHVzaCh0c2RuLCAmc2VjKTsKLQl9Ci0KLQlleHBlY3Rf enVfZXEobWF4X2FsbG9jcywgdGEuYWxsb2NfY291bnQgKyB0YS5hbGxvY19iYXRjaF9jb3VudCwK LQkgICAgIkluY29ycmVjdCBudW1iZXIgb2YgYWxsb2NhdGlvbnMiKTsKLQlleHBlY3RfenVfZXEo MCwgdGEuZGFsbG9jX2NvdW50LAotCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiAobm9uLWJhdGNo KSBkZWFsbG9jYXRpb25zIik7Ci0JZXhwZWN0X3p1X2xlKE5BTExPQ1MgLSAxLCB0YS5kYWxsb2Nf YmF0Y2hfY291bnQsCi0JICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJhdGNoIGRlYWxsb2NhdGlv bnMiKTsKLQlzaXplX3Qgb2xkX2RhbGxvY19iYXRjaF9jb3VudCA9IHRhLmRhbGxvY19iYXRjaF9j b3VudDsKLQotCS8qCi0JICogSWYgd2UgZnJlZSBpbnRvIGEgZGlzYWJsZWQgU0VDLCBpdCBzaG91 bGQgZm9yd2FyZCB0byB0aGUgZmFsbGJhY2suCi0JICogT3RoZXJ3aXNlLCB0aGUgU0VDIHNob3Vs ZCBhY2NlcHQgdGhlIGFsbG9jYXRpb24uCi0JICovCi0JcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBh aSwgYWxsb2NzW05BTExPQ1MgLSAxXSwKLQkgICAgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsK LQotCWV4cGVjdF96dV9lcShtYXhfYWxsb2NzLCB0YS5hbGxvY19jb3VudCArIHRhLmFsbG9jX2Jh dGNoX2NvdW50LAotCSAgICAiSW5jb3JyZWN0IG51bWJlciBvZiBhbGxvY2F0aW9ucyIpOwotCWV4 cGVjdF96dV9lcShpc19kaXNhYmxlID8gMSA6IDAsIHRhLmRhbGxvY19jb3VudCwKLQkgICAgIklu Y29ycmVjdCBudW1iZXIgb2YgKG5vbi1iYXRjaCkgZGVhbGxvY2F0aW9ucyIpOwotCWV4cGVjdF96 dV9lcShvbGRfZGFsbG9jX2JhdGNoX2NvdW50LCB0YS5kYWxsb2NfYmF0Y2hfY291bnQsCi0JICAg ICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJhdGNoIGRlYWxsb2NhdGlvbnMiKTsKLX0KLQotVEVTVF9C RUdJTih0ZXN0X2Rpc2FibGUpIHsKLQlkb19kaXNhYmxlX2ZsdXNoX3Rlc3QoLyogaXNfZGlzYWJs ZSAqLyB0cnVlKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9mbHVzaCkgewotCWRv X2Rpc2FibGVfZmx1c2hfdGVzdCgvKiBpc19kaXNhYmxlICovIGZhbHNlKTsKLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9tYXhfYWxsb2NfcmVzcGVjdGVkKSB7Ci0JcGFpX3Rlc3RfYWxs b2NhdG9yX3QgdGE7Ci0JcGFpX3Rlc3RfYWxsb2NhdG9yX2luaXQoJnRhKTsKLQlzZWNfdCBzZWM7 Ci0JLyogU2VlIHRoZSBub3RlIGFib3ZlIC0tIHdlIGNhbid0IHVzZSB0aGUgcmVhbCB0c2QuICov Ci0JdHNkbl90ICp0c2RuID0gVFNETl9OVUxMOwotCi0Jc2l6ZV90IG1heF9hbGxvYyA9IDIgKiBQ QUdFOwotCXNpemVfdCBhdHRlbXB0ZWRfYWxsb2MgPSAzICogUEFHRTsKLQotCWJvb2wgZGVmZXJy ZWRfd29ya19nZW5lcmF0ZWQgPSBmYWxzZTsKLQotCXRlc3Rfc2VjX2luaXQoJnNlYywgJnRhLnBh aSwgLyogbnNoYXJkcyAqLyAxLCBtYXhfYWxsb2MsCi0JICAgIC8qIG1heF9ieXRlcyAqLyAxMDAw ICogUEFHRSk7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCWV4cGVj dF96dV9lcShpLCB0YS5hbGxvY19jb3VudCwKLQkJICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGFs bG9jYXRpb25zIik7Ci0JCWV4cGVjdF96dV9lcShpLCB0YS5kYWxsb2NfY291bnQsCi0JCSAgICAi SW5jb3JyZWN0IG51bWJlciBvZiBkZWFsbG9jYXRpb25zIik7Ci0JCWVkYXRhX3QgKmVkYXRhID0g cGFpX2FsbG9jKHRzZG4sICZzZWMucGFpLCBhdHRlbXB0ZWRfYWxsb2MsCi0JCSAgICBQQUdFLCAv KiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZhbHNlLAotCQkgICAgLyogZnJlcXVlbnRf cmV1c2UgKi8gZmFsc2UsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JCWV4cGVjdF9wdHJf bm90X251bGwoZWRhdGEsICJVbmV4cGVjdGVkIGFsbG9jIGZhaWx1cmUiKTsKLQkJZXhwZWN0X3p1 X2VxKGkgKyAxLCB0YS5hbGxvY19jb3VudCwKLQkJICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGFs bG9jYXRpb25zIik7Ci0JCWV4cGVjdF96dV9lcShpLCB0YS5kYWxsb2NfY291bnQsCi0JCSAgICAi SW5jb3JyZWN0IG51bWJlciBvZiBkZWFsbG9jYXRpb25zIik7Ci0JCXBhaV9kYWxsb2ModHNkbiwg JnNlYy5wYWksIGVkYXRhLCAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCX0KLX0KLVRFU1Rf RU5ECi0KLVRFU1RfQkVHSU4odGVzdF9leHBhbmRfc2hyaW5rX2RlbGVnYXRlKSB7Ci0JLyoKLQkg KiBFeHBhbmQgYW5kIHNocmluayBzaG91bGRuJ3QgYWZmZWN0IHNlYyBzdGF0ZTsgdGhleSBzaG91 bGQganVzdAotCSAqIGRlbGVnYXRlIHRvIHRoZSBmYWxsYmFjayBQQUkuCi0JICovCi0JcGFpX3Rl c3RfYWxsb2NhdG9yX3QgdGE7Ci0JcGFpX3Rlc3RfYWxsb2NhdG9yX2luaXQoJnRhKTsKLQlzZWNf dCBzZWM7Ci0JLyogU2VlIHRoZSBub3RlIGFib3ZlIC0tIHdlIGNhbid0IHVzZSB0aGUgcmVhbCB0 c2QuICovCi0JdHNkbl90ICp0c2RuID0gVFNETl9OVUxMOwotCi0JYm9vbCBkZWZlcnJlZF93b3Jr X2dlbmVyYXRlZCA9IGZhbHNlOwotCi0JdGVzdF9zZWNfaW5pdCgmc2VjLCAmdGEucGFpLCAvKiBu c2hhcmRzICovIDEsIC8qIG1heF9hbGxvYyAqLyAxMCAqIFBBR0UsCi0JICAgIC8qIG1heF9ieXRl cyAqLyAxMDAwICogUEFHRSk7Ci0JZWRhdGFfdCAqZWRhdGEgPSBwYWlfYWxsb2ModHNkbiwgJnNl Yy5wYWksIFBBR0UsIFBBR0UsCi0JICAgIC8qIHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8g ZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNlICovIGZhbHNlLAotCSAgICAmZGVmZXJyZWRfd29ya19n ZW5lcmF0ZWQpOwotCWV4cGVjdF9wdHJfbm90X251bGwoZWRhdGEsICJVbmV4cGVjdGVkIGFsbG9j IGZhaWx1cmUiKTsKLQotCWJvb2wgZXJyID0gcGFpX2V4cGFuZCh0c2RuLCAmc2VjLnBhaSwgZWRh dGEsIFBBR0UsIDQgKiBQQUdFLAotCSAgICAvKiB6ZXJvICovIGZhbHNlLCAmZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQpOwotCWV4cGVjdF9mYWxzZShlcnIsICJVbmV4cGVjdGVkIGV4cGFuZCBmYWls dXJlIik7Ci0JZXhwZWN0X3p1X2VxKDEsIHRhLmV4cGFuZF9jb3VudCwgIiIpOwotCXRhLmV4cGFu ZF9yZXR1cm5fdmFsdWUgPSB0cnVlOwotCWVyciA9IHBhaV9leHBhbmQodHNkbiwgJnNlYy5wYWks IGVkYXRhLCA0ICogUEFHRSwgMyAqIFBBR0UsCi0JICAgIC8qIHplcm8gKi8gZmFsc2UsICZkZWZl cnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JZXhwZWN0X3RydWUoZXJyLCAiVW5leHBlY3RlZCBleHBh bmQgc3VjY2VzcyIpOwotCWV4cGVjdF96dV9lcSgyLCB0YS5leHBhbmRfY291bnQsICIiKTsKLQot CWVyciA9IHBhaV9zaHJpbmsodHNkbiwgJnNlYy5wYWksIGVkYXRhLCA0ICogUEFHRSwgMiAqIFBB R0UsCi0JICAgICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JZXhwZWN0X2ZhbHNlKGVyciwg IlVuZXhwZWN0ZWQgc2hyaW5rIGZhaWx1cmUiKTsKLQlleHBlY3RfenVfZXEoMSwgdGEuc2hyaW5r X2NvdW50LCAiIik7Ci0JdGEuc2hyaW5rX3JldHVybl92YWx1ZSA9IHRydWU7Ci0JZXJyID0gcGFp X3Nocmluayh0c2RuLCAmc2VjLnBhaSwgZWRhdGEsIDIgKiBQQUdFLCBQQUdFLAotCSAgICAmZGVm ZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCWV4cGVjdF90cnVlKGVyciwgIlVuZXhwZWN0ZWQgc2hy aW5rIHN1Y2Nlc3MiKTsKLQlleHBlY3RfenVfZXEoMiwgdGEuc2hyaW5rX2NvdW50LCAiIik7Ci19 Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfbnNoYXJkc18wKSB7Ci0JcGFpX3Rlc3RfYWxs b2NhdG9yX3QgdGE7Ci0JcGFpX3Rlc3RfYWxsb2NhdG9yX2luaXQoJnRhKTsKLQlzZWNfdCBzZWM7 Ci0JLyogU2VlIHRoZSBub3RlIGFib3ZlIC0tIHdlIGNhbid0IHVzZSB0aGUgcmVhbCB0c2QuICov Ci0JdHNkbl90ICp0c2RuID0gVFNETl9OVUxMOwotCWJhc2VfdCAqYmFzZSA9IGJhc2VfbmV3KFRT RE5fTlVMTCwgLyogaW5kICovIDEyMywKLQkgICAgJmVob29rc19kZWZhdWx0X2V4dGVudF9ob29r cywgLyogbWV0YWRhdGFfdXNlX2hvb2tzICovIHRydWUpOwotCi0Jc2VjX29wdHNfdCBvcHRzID0g U0VDX09QVFNfREVGQVVMVDsKLQlvcHRzLm5zaGFyZHMgPSAwOwotCXNlY19pbml0KFRTRE5fTlVM TCwgJnNlYywgYmFzZSwgJnRhLnBhaSwgJm9wdHMpOwotCi0JYm9vbCBkZWZlcnJlZF93b3JrX2dl bmVyYXRlZCA9IGZhbHNlOwotCWVkYXRhX3QgKmVkYXRhID0gcGFpX2FsbG9jKHRzZG4sICZzZWMu cGFpLCBQQUdFLCBQQUdFLAotCSAgICAvKiB6ZXJvICovIGZhbHNlLCAvKiBndWFyZGVkICovIGZh bHNlLCAvKiBmcmVxdWVudF9yZXVzZSAqLyBmYWxzZSwKLQkgICAgJmRlZmVycmVkX3dvcmtfZ2Vu ZXJhdGVkKTsKLQlwYWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBlZGF0YSwgJmRlZmVycmVkX3dv cmtfZ2VuZXJhdGVkKTsKLQotCS8qIEJvdGggb3BlcmF0aW9ucyBzaG91bGQgaGF2ZSBnb25lIGRp cmVjdGx5IHRvIHRoZSBmYWxsYmFjay4gKi8KLQlleHBlY3RfenVfZXEoMSwgdGEuYWxsb2NfY291 bnQsICIiKTsKLQlleHBlY3RfenVfZXEoMSwgdGEuZGFsbG9jX2NvdW50LCAiIik7Ci19Ci1URVNU X0VORAotCi1zdGF0aWMgdm9pZAotZXhwZWN0X3N0YXRzX3BhZ2VzKHRzZG5fdCAqdHNkbiwgc2Vj X3QgKnNlYywgc2l6ZV90IG5wYWdlcykgewotCXNlY19zdGF0c190IHN0YXRzOwotCS8qCi0JICog Q2hlY2sgdGhhdCB0aGUgc3RhdHMgbWVyZ2luZyBhY2N1bXVsYXRlcyByYXRoZXIgdGhhbiBvdmVy d3JpdGVzIGJ5Ci0JICogcHV0dGluZyBzb21lIChtYWRlIHVwKSBkYXRhIHRoZXJlIHRvIGJlZ2lu IHdpdGguCi0JICovCi0Jc3RhdHMuYnl0ZXMgPSAxMjM7Ci0Jc2VjX3N0YXRzX21lcmdlKHRzZG4s IHNlYywgJnN0YXRzKTsKLQlhc3NlcnRfenVfbGUobnBhZ2VzICogUEFHRSArIDEyMywgc3RhdHMu Ynl0ZXMsICIiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3N0YXRzX3NpbXBsZSkgewotCXBhaV90 ZXN0X2FsbG9jYXRvcl90IHRhOwotCXBhaV90ZXN0X2FsbG9jYXRvcl9pbml0KCZ0YSk7Ci0Jc2Vj X3Qgc2VjOwotCi0JLyogU2VlIHRoZSBub3RlIGFib3ZlIC0tIHdlIGNhbid0IHVzZSB0aGUgcmVh bCB0c2QuICovCi0JdHNkbl90ICp0c2RuID0gVFNETl9OVUxMOwotCi0JZW51bSB7Ci0JCU5JVEVS UyA9IDEwMCwKLQkJRkxVU0hfUEFHRVMgPSAyMCwKLQl9OwotCi0JYm9vbCBkZWZlcnJlZF93b3Jr X2dlbmVyYXRlZCA9IGZhbHNlOwotCi0JdGVzdF9zZWNfaW5pdCgmc2VjLCAmdGEucGFpLCAvKiBu c2hhcmRzICovIDEsIC8qIG1heF9hbGxvYyAqLyBQQUdFLAotCSAgICAvKiBtYXhfYnl0ZXMgKi8g RkxVU0hfUEFHRVMgKiBQQUdFKTsKLQotCWVkYXRhX3QgKmFsbG9jc1tGTFVTSF9QQUdFU107Ci0J Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBGTFVTSF9QQUdFUzsgaSsrKSB7Ci0JCWFsbG9jc1tpXSA9 IHBhaV9hbGxvYyh0c2RuLCAmc2VjLnBhaSwgUEFHRSwgUEFHRSwKLQkJICAgIC8qIHplcm8gKi8g ZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNlICovCi0JCSAgICBm YWxzZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQkJZXhwZWN0X3N0YXRzX3BhZ2VzKHRz ZG4sICZzZWMsIDApOwotCX0KLQotCS8qIEluY3JlYXNlIGFuZCBkZWNyZWFzZSwgd2l0aG91dCBm bHVzaGluZy4gKi8KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5JVEVSUzsgaSsrKSB7Ci0JCWZv ciAoc2l6ZV90IGogPSAwOyBqIDwgRkxVU0hfUEFHRVMgLyAyOyBqKyspIHsKLQkJCXBhaV9kYWxs b2ModHNkbiwgJnNlYy5wYWksIGFsbG9jc1tqXSwKLQkJCSAgICAmZGVmZXJyZWRfd29ya19nZW5l cmF0ZWQpOwotCQkJZXhwZWN0X3N0YXRzX3BhZ2VzKHRzZG4sICZzZWMsIGogKyAxKTsKLQkJfQot CQlmb3IgKHNpemVfdCBqID0gMDsgaiA8IEZMVVNIX1BBR0VTIC8gMjsgaisrKSB7Ci0JCQlhbGxv Y3Nbal0gPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0UsCi0JCQkgICAgLyog emVybyAqLyBmYWxzZSwgLyogZ3VhcmRlZCAqLyBmYWxzZSwKLQkJCSAgICAvKiBmcmVxdWVudF9y ZXVzZSAqLyBmYWxzZSwKLQkJCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCQkJZXhw ZWN0X3N0YXRzX3BhZ2VzKHRzZG4sICZzZWMsIEZMVVNIX1BBR0VTIC8gMiAtIGogLSAxKTsKLQkJ fQotCX0KLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9zdGF0c19hdXRvX2ZsdXNoKSB7 Ci0JcGFpX3Rlc3RfYWxsb2NhdG9yX3QgdGE7Ci0JcGFpX3Rlc3RfYWxsb2NhdG9yX2luaXQoJnRh KTsKLQlzZWNfdCBzZWM7Ci0KLQkvKiBTZWUgdGhlIG5vdGUgYWJvdmUgLS0gd2UgY2FuJ3QgdXNl IHRoZSByZWFsIHRzZC4gKi8KLQl0c2RuX3QgKnRzZG4gPSBUU0ROX05VTEw7Ci0KLQllbnVtIHsK LQkJRkxVU0hfUEFHRVMgPSAxMCwKLQl9OwotCi0JdGVzdF9zZWNfaW5pdCgmc2VjLCAmdGEucGFp LCAvKiBuc2hhcmRzICovIDEsIC8qIG1heF9hbGxvYyAqLyBQQUdFLAotCSAgICAvKiBtYXhfYnl0 ZXMgKi8gRkxVU0hfUEFHRVMgKiBQQUdFKTsKLQotCWVkYXRhX3QgKmV4dHJhX2FsbG9jMDsKLQll ZGF0YV90ICpleHRyYV9hbGxvYzE7Ci0JZWRhdGFfdCAqYWxsb2NzWzIgKiBGTFVTSF9QQUdFU107 Ci0KLQlib29sIGRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkID0gZmFsc2U7Ci0KLQlleHRyYV9hbGxv YzAgPSBwYWlfYWxsb2ModHNkbiwgJnNlYy5wYWksIFBBR0UsIFBBR0UsIC8qIHplcm8gKi8gZmFs c2UsCi0JICAgIC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNlICovIGZhbHNl LAotCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCWV4dHJhX2FsbG9jMSA9IHBhaV9h bGxvYyh0c2RuLCAmc2VjLnBhaSwgUEFHRSwgUEFHRSwgLyogemVybyAqLyBmYWxzZSwKLQkgICAg LyogZ3VhcmRlZCAqLyBmYWxzZSwgLyogZnJlcXVlbnRfcmV1c2UgKi8gZmFsc2UsCi0JICAgICZk ZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IDIgKiBG TFVTSF9QQUdFUzsgaSsrKSB7Ci0JCWFsbG9jc1tpXSA9IHBhaV9hbGxvYyh0c2RuLCAmc2VjLnBh aSwgUEFHRSwgUEFHRSwKLQkJICAgIC8qIHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFs c2UsIC8qIGZyZXF1ZW50X3JldXNlICovCi0JCSAgICBmYWxzZSwgJmRlZmVycmVkX3dvcmtfZ2Vu ZXJhdGVkKTsKLQl9Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IEZMVVNIX1BBR0VTOyBpKysp IHsKLQkJcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgYWxsb2NzW2ldLCAmZGVmZXJyZWRfd29y a19nZW5lcmF0ZWQpOwotCX0KLQlwYWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBleHRyYV9hbGxv YzAsICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0KLQkvKiBGbHVzaCB0aGUgcmVtYWluaW5n IHBhZ2VzOyBzdGF0cyBzaG91bGQgc3RpbGwgd29yay4gKi8KLQlmb3IgKHNpemVfdCBpID0gMDsg aSA8IEZMVVNIX1BBR0VTOyBpKyspIHsKLQkJcGFpX2RhbGxvYyh0c2RuLCAmc2VjLnBhaSwgYWxs b2NzW0ZMVVNIX1BBR0VTICsgaV0sCi0JCSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwot CX0KLQotCXBhaV9kYWxsb2ModHNkbiwgJnNlYy5wYWksIGV4dHJhX2FsbG9jMSwgJmRlZmVycmVk X3dvcmtfZ2VuZXJhdGVkKTsKLQotCWV4cGVjdF9zdGF0c19wYWdlcyh0c2RuLCAmc2VjLCB0YS5h bGxvY19jb3VudCArIHRhLmFsbG9jX2JhdGNoX2NvdW50Ci0JICAgIC0gdGEuZGFsbG9jX2NvdW50 IC0gdGEuZGFsbG9jX2JhdGNoX2NvdW50KTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVz dF9zdGF0c19tYW51YWxfZmx1c2gpIHsKLQlwYWlfdGVzdF9hbGxvY2F0b3JfdCB0YTsKLQlwYWlf dGVzdF9hbGxvY2F0b3JfaW5pdCgmdGEpOwotCXNlY190IHNlYzsKLQotCS8qIFNlZSB0aGUgbm90 ZSBhYm92ZSAtLSB3ZSBjYW4ndCB1c2UgdGhlIHJlYWwgdHNkLiAqLwotCXRzZG5fdCAqdHNkbiA9 IFRTRE5fTlVMTDsKLQotCWVudW0gewotCQlGTFVTSF9QQUdFUyA9IDEwLAotCX07Ci0KLQl0ZXN0 X3NlY19pbml0KCZzZWMsICZ0YS5wYWksIC8qIG5zaGFyZHMgKi8gMSwgLyogbWF4X2FsbG9jICov IFBBR0UsCi0JICAgIC8qIG1heF9ieXRlcyAqLyBGTFVTSF9QQUdFUyAqIFBBR0UpOwotCi0JYm9v bCBkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCA9IGZhbHNlOwotCWVkYXRhX3QgKmFsbG9jc1tGTFVT SF9QQUdFU107Ci0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBGTFVTSF9QQUdFUzsgaSsrKSB7Ci0J CWFsbG9jc1tpXSA9IHBhaV9hbGxvYyh0c2RuLCAmc2VjLnBhaSwgUEFHRSwgUEFHRSwKLQkJICAg IC8qIHplcm8gKi8gZmFsc2UsIC8qIGd1YXJkZWQgKi8gZmFsc2UsIC8qIGZyZXF1ZW50X3JldXNl ICovCi0JCSAgICBmYWxzZSwgJmRlZmVycmVkX3dvcmtfZ2VuZXJhdGVkKTsKLQkJZXhwZWN0X3N0 YXRzX3BhZ2VzKHRzZG4sICZzZWMsIDApOwotCX0KLQotCS8qIERhbGxvYyB0aGUgZmlyc3QgaGFs ZiBvZiB0aGUgYWxsb2NhdGlvbnMuICovCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBGTFVTSF9Q QUdFUyAvIDI7IGkrKykgewotCQlwYWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBhbGxvY3NbaV0s ICZkZWZlcnJlZF93b3JrX2dlbmVyYXRlZCk7Ci0JCWV4cGVjdF9zdGF0c19wYWdlcyh0c2RuLCAm c2VjLCBpICsgMSk7Ci0JfQotCi0Jc2VjX2ZsdXNoKHRzZG4sICZzZWMpOwotCWV4cGVjdF9zdGF0 c19wYWdlcyh0c2RuLCAmc2VjLCAwKTsKLQotCS8qIEZsdXNoIHRoZSByZW1haW5pbmcgcGFnZXMu ICovCi0JZm9yIChzaXplX3QgaSA9IDA7IGkgPCBGTFVTSF9QQUdFUyAvIDI7IGkrKykgewotCQlw YWlfZGFsbG9jKHRzZG4sICZzZWMucGFpLCBhbGxvY3NbRkxVU0hfUEFHRVMgLyAyICsgaV0sCi0J CSAgICAmZGVmZXJyZWRfd29ya19nZW5lcmF0ZWQpOwotCQlleHBlY3Rfc3RhdHNfcGFnZXModHNk biwgJnNlYywgaSArIDEpOwotCX0KLQlzZWNfZGlzYWJsZSh0c2RuLCAmc2VjKTsKLQlleHBlY3Rf c3RhdHNfcGFnZXModHNkbiwgJnNlYywgMCk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9p ZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X3JldXNlLAotCSAgICB0ZXN0X2F1dG9fZmx1 c2gsCi0JICAgIHRlc3RfZGlzYWJsZSwKLQkgICAgdGVzdF9mbHVzaCwKLQkgICAgdGVzdF9tYXhf YWxsb2NfcmVzcGVjdGVkLAotCSAgICB0ZXN0X2V4cGFuZF9zaHJpbmtfZGVsZWdhdGUsCi0JICAg IHRlc3RfbnNoYXJkc18wLAotCSAgICB0ZXN0X3N0YXRzX3NpbXBsZSwKLQkgICAgdGVzdF9zdGF0 c19hdXRvX2ZsdXNoLAotCSAgICB0ZXN0X3N0YXRzX21hbnVhbF9mbHVzaCk7Ci19CgpkaWZmIC0t Z2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nl cS5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3Nl cS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmVkNjgzLi4wMDAwMDAwCi0tLSBh LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zZXEuYwor KysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rl c3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3NlcS5oIgotCi10eXBlZGVmIHN0 cnVjdCBkYXRhX3MgZGF0YV90Owotc3RydWN0IGRhdGFfcyB7Ci0JaW50IGFyclsxMF07Ci19Owot Ci1zdGF0aWMgdm9pZAotc2V0X2RhdGEoZGF0YV90ICpkYXRhLCBpbnQgbnVtKSB7Ci0JZm9yIChp bnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWRhdGEtPmFycltpXSA9IG51bTsKLQl9Ci19Ci0K LXN0YXRpYyB2b2lkCi1leHBlY3RfZGF0YShkYXRhX3QgKmRhdGEpIHsKLQlpbnQgbnVtID0gZGF0 YS0+YXJyWzBdOwotCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlleHBlY3RfZF9l cShudW0sIGRhdGEtPmFycltpXSwgIkRhdGEgY29uc2lzdGVuY3kgZXJyb3IiKTsKLQl9Ci19Ci0K LXNlcV9kZWZpbmUoZGF0YV90LCBkYXRhKQotCi10eXBlZGVmIHN0cnVjdCB0aGRfZGF0YV9zIHRo ZF9kYXRhX3Q7Ci1zdHJ1Y3QgdGhkX2RhdGFfcyB7Ci0Jc2VxX2RhdGFfdCBkYXRhOwotfTsKLQot c3RhdGljIHZvaWQgKgotc2VxX3JlYWRlcl90aGQodm9pZCAqYXJnKSB7Ci0JdGhkX2RhdGFfdCAq dGhkX2RhdGEgPSAodGhkX2RhdGFfdCAqKWFyZzsKLQlpbnQgaXRlciA9IDA7Ci0JZGF0YV90IGxv Y2FsX2RhdGE7Ci0Jd2hpbGUgKGl0ZXIgPCAxMDAwICogMTAwMCAtIDEpIHsKLQkJYm9vbCBzdWNj ZXNzID0gc2VxX3RyeV9sb2FkX2RhdGEoJmxvY2FsX2RhdGEsICZ0aGRfZGF0YS0+ZGF0YSk7Ci0J CWlmIChzdWNjZXNzKSB7Ci0JCQlleHBlY3RfZGF0YSgmbG9jYWxfZGF0YSk7Ci0JCQlleHBlY3Rf ZF9sZShpdGVyLCBsb2NhbF9kYXRhLmFyclswXSwKLQkJCSAgICAiU2VxIHJlYWQgd2VudCBiYWNr IGluIHRpbWUuIik7Ci0JCQlpdGVyID0gbG9jYWxfZGF0YS5hcnJbMF07Ci0JCX0KLQl9Ci0JcmV0 dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXNlcV93cml0ZXJfdGhkKHZvaWQgKmFyZykg ewotCXRoZF9kYXRhX3QgKnRoZF9kYXRhID0gKHRoZF9kYXRhX3QgKilhcmc7Ci0JZGF0YV90IGxv Y2FsX2RhdGE7Ci0JbWVtc2V0KCZsb2NhbF9kYXRhLCAwLCBzaXplb2YobG9jYWxfZGF0YSkpOwot CWZvciAoaW50IGkgPSAwOyBpIDwgMTAwMCAqIDEwMDA7IGkrKykgewotCQlzZXRfZGF0YSgmbG9j YWxfZGF0YSwgaSk7Ci0JCXNlcV9zdG9yZV9kYXRhKCZ0aGRfZGF0YS0+ZGF0YSwgJmxvY2FsX2Rh dGEpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3NlcV90aHJlYWRl ZCkgewotCXRoZF9kYXRhX3QgdGhkX2RhdGE7Ci0JbWVtc2V0KCZ0aGRfZGF0YSwgMCwgc2l6ZW9m KHRoZF9kYXRhKSk7Ci0KLQl0aGRfdCByZWFkZXI7Ci0JdGhkX3Qgd3JpdGVyOwotCi0JdGhkX2Ny ZWF0ZSgmcmVhZGVyLCBzZXFfcmVhZGVyX3RoZCwgJnRoZF9kYXRhKTsKLQl0aGRfY3JlYXRlKCZ3 cml0ZXIsIHNlcV93cml0ZXJfdGhkLCAmdGhkX2RhdGEpOwotCi0JdGhkX2pvaW4ocmVhZGVyLCBO VUxMKTsKLQl0aGRfam9pbih3cml0ZXIsIE5VTEwpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJ Tih0ZXN0X3NlcV9zaW1wbGUpIHsKLQlkYXRhX3QgZGF0YTsKLQlzZXFfZGF0YV90IHNlcTsKLQlt ZW1zZXQoJnNlcSwgMCwgc2l6ZW9mKHNlcSkpOwotCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwMCAq IDEwMDA7IGkrKykgewotCQlzZXRfZGF0YSgmZGF0YSwgaSk7Ci0JCXNlcV9zdG9yZV9kYXRhKCZz ZXEsICZkYXRhKTsKLQkJc2V0X2RhdGEoJmRhdGEsIDApOwotCQlib29sIHN1Y2Nlc3MgPSBzZXFf dHJ5X2xvYWRfZGF0YSgmZGF0YSwgJnNlcSk7Ci0JCWV4cGVjdF9iX2VxKHN1Y2Nlc3MsIHRydWUs ICJGYWlsZWQgbm9uLXJhY2luZyByZWFkIik7Ci0JCWV4cGVjdF9kYXRhKCZkYXRhKTsKLQl9Ci19 Ci1URVNUX0VORAotCi1pbnQgbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5j eSgKLQkgICAgdGVzdF9zZXFfc2ltcGxlLAotCSAgICB0ZXN0X3NlcV90aHJlYWRlZCk7Ci19Cgpk aWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3NpemVfY2hlY2suYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9zaXplX2NoZWNrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFj Y2RjNDAuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3NpemVfY2hlY2suYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAK LSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2lu dGVybmFsL3NhZmV0eV9jaGVjay5oIgotCi1ib29sIGZha2VfYWJvcnRfY2FsbGVkOwotdm9pZCBm YWtlX2Fib3J0KGNvbnN0IGNoYXIgKm1lc3NhZ2UpIHsKLQkodm9pZCltZXNzYWdlOwotCWZha2Vf YWJvcnRfY2FsbGVkID0gdHJ1ZTsKLX0KLQotI2RlZmluZSBTTUFMTF9TSVpFMSBTQ19TTUFMTF9N QVhDTEFTUwotI2RlZmluZSBTTUFMTF9TSVpFMiAoU0NfU01BTExfTUFYQ0xBU1MgLyAyKQotCi0j ZGVmaW5lIExBUkdFX1NJWkUxIFNDX0xBUkdFX01JTkNMQVNTCi0jZGVmaW5lIExBUkdFX1NJWkUy IChMQVJHRV9TSVpFMSAqIDIpCi0KLXZvaWQgKgotdGVzdF9pbnZhbGlkX3NpemVfcHJlKHNpemVf dCBzeikgewotCXNhZmV0eV9jaGVja19zZXRfYWJvcnQoJmZha2VfYWJvcnQpOwotCi0JZmFrZV9h Ym9ydF9jYWxsZWQgPSBmYWxzZTsKLQl2b2lkICpwdHIgPSBtYWxsb2Moc3opOwotCWFzc2VydF9w dHJfbm90X251bGwocHRyLCAiVW5leHBlY3RlZCBmYWlsdXJlIik7Ci0KLQlyZXR1cm4gcHRyOwot fQotCi12b2lkCi10ZXN0X2ludmFsaWRfc2l6ZV9wb3N0KHZvaWQpIHsKLQlleHBlY3RfdHJ1ZShm YWtlX2Fib3J0X2NhbGxlZCwgIlNhZmV0eSBjaGVjayBkaWRuJ3QgZmlyZSIpOwotCXNhZmV0eV9j aGVja19zZXRfYWJvcnQoTlVMTCk7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9pbnZhbGlkX3NpemVf c2RhbGxvY3gpIHsKLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19vcHRfc2l6ZV9jaGVja3MpOwotCi0J dm9pZCAqcHRyID0gdGVzdF9pbnZhbGlkX3NpemVfcHJlKFNNQUxMX1NJWkUxKTsKLQlzZGFsbG9j eChwdHIsIFNNQUxMX1NJWkUyLCAwKTsKLQl0ZXN0X2ludmFsaWRfc2l6ZV9wb3N0KCk7Ci0KLQlw dHIgPSB0ZXN0X2ludmFsaWRfc2l6ZV9wcmUoTEFSR0VfU0laRTEpOwotCXNkYWxsb2N4KHB0ciwg TEFSR0VfU0laRTIsIDApOwotCXRlc3RfaW52YWxpZF9zaXplX3Bvc3QoKTsKLX0KLVRFU1RfRU5E Ci0KLVRFU1RfQkVHSU4odGVzdF9pbnZhbGlkX3NpemVfc2RhbGxvY3hfbm9uemVyb19mbGFnKSB7 Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfb3B0X3NpemVfY2hlY2tzKTsKLQotCXZvaWQgKnB0ciA9 IHRlc3RfaW52YWxpZF9zaXplX3ByZShTTUFMTF9TSVpFMSk7Ci0Jc2RhbGxvY3gocHRyLCBTTUFM TF9TSVpFMiwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JdGVzdF9pbnZhbGlkX3NpemVfcG9zdCgp OwotCi0JcHRyID0gdGVzdF9pbnZhbGlkX3NpemVfcHJlKExBUkdFX1NJWkUxKTsKLQlzZGFsbG9j eChwdHIsIExBUkdFX1NJWkUyLCBNQUxMT0NYX1RDQUNIRV9OT05FKTsKLQl0ZXN0X2ludmFsaWRf c2l6ZV9wb3N0KCk7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3RfaW52YWxpZF9zaXpl X3NkYWxsb2N4X25vZmxhZ3MpIHsKLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19vcHRfc2l6ZV9jaGVj a3MpOwotCi0Jdm9pZCAqcHRyID0gdGVzdF9pbnZhbGlkX3NpemVfcHJlKFNNQUxMX1NJWkUxKTsK LQlqZV9zZGFsbG9jeF9ub2ZsYWdzKHB0ciwgU01BTExfU0laRTIpOwotCXRlc3RfaW52YWxpZF9z aXplX3Bvc3QoKTsKLQotCXB0ciA9IHRlc3RfaW52YWxpZF9zaXplX3ByZShMQVJHRV9TSVpFMSk7 Ci0JamVfc2RhbGxvY3hfbm9mbGFncyhwdHIsIExBUkdFX1NJWkUyKTsKLQl0ZXN0X2ludmFsaWRf c2l6ZV9wb3N0KCk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0 ZXN0KAotCSAgICB0ZXN0X2ludmFsaWRfc2l6ZV9zZGFsbG9jeCwKLQkgICAgdGVzdF9pbnZhbGlk X3NpemVfc2RhbGxvY3hfbm9uemVyb19mbGFnLAotCSAgICB0ZXN0X2ludmFsaWRfc2l6ZV9zZGFs bG9jeF9ub2ZsYWdzKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc2l6ZV9jaGVjay5zaCBiLzM4OS1kcy1iYXNlLTMuMy4w LWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zaXplX2NoZWNrLnNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAzNTJkMTEwLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zaXplX2NoZWNrLnNoCisrKyAvZGV2 L251bGwKQEAgLTEsNSArMCwwIEBACi0jIS9iaW4vc2gKLQotaWYgWyAieCR7ZW5hYmxlX3Byb2Z9 IiA9ICJ4MSIgXSA7IHRoZW4KLSAgZXhwb3J0IE1BTExPQ19DT05GPSJwcm9mOmZhbHNlIgotZmkK CmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvc2l6ZV9jbGFzc2VzLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvc2l6ZV9jbGFzc2VzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGM3MGViNTkuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L3NpemVfY2xhc3Nlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg4 ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotc3RhdGljIHNpemVf dAotZ2V0X21heF9zaXplX2NsYXNzKHZvaWQpIHsKLQl1bnNpZ25lZCBubGV4dGVudHM7Ci0Jc2l6 ZV90IG1pYls0XTsKLQlzaXplX3Qgc3osIG1pYmxlbiwgbWF4X3NpemVfY2xhc3M7Ci0KLQlzeiA9 IHNpemVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLm5sZXh0ZW50 cyIsICh2b2lkICopJm5sZXh0ZW50cywgJnN6LCBOVUxMLAotCSAgICAwKSwgMCwgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGVycm9yIik7Ci0KLQltaWJsZW4gPSBzaXplb2YobWliKSAvIHNpemVvZihz aXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxuYW1ldG9taWIoImFyZW5hcy5sZXh0ZW50LjAu c2l6ZSIsIG1pYiwgJm1pYmxlbiksIDAsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGxuYW1ldG9t aWIoKSBlcnJvciIpOwotCW1pYlsyXSA9IG5sZXh0ZW50cyAtIDE7Ci0KLQlzeiA9IHNpemVvZihz aXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGxieW1pYihtaWIsIG1pYmxlbiwgKHZvaWQgKikm bWF4X3NpemVfY2xhc3MsICZzeiwKLQkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxj dGxieW1pYigpIGVycm9yIik7Ci0KLQlyZXR1cm4gbWF4X3NpemVfY2xhc3M7Ci19Ci0KLVRFU1Rf QkVHSU4odGVzdF9zaXplX2NsYXNzZXMpIHsKLQlzaXplX3Qgc2l6ZV9jbGFzcywgbWF4X3NpemVf Y2xhc3M7Ci0Jc3ppbmRfdCBpbmRleCwgbWF4X2luZGV4OwotCi0JbWF4X3NpemVfY2xhc3MgPSBn ZXRfbWF4X3NpemVfY2xhc3MoKTsKLQltYXhfaW5kZXggPSBzel9zaXplMmluZGV4KG1heF9zaXpl X2NsYXNzKTsKLQotCWZvciAoaW5kZXggPSAwLCBzaXplX2NsYXNzID0gc3pfaW5kZXgyc2l6ZShp bmRleCk7IGluZGV4IDwgbWF4X2luZGV4IHx8Ci0JICAgIHNpemVfY2xhc3MgPCBtYXhfc2l6ZV9j bGFzczsgaW5kZXgrKywgc2l6ZV9jbGFzcyA9Ci0JICAgIHN6X2luZGV4MnNpemUoaW5kZXgpKSB7 Ci0JCWV4cGVjdF90cnVlKGluZGV4IDwgbWF4X2luZGV4LAotCQkgICAgIkxvb3AgY29uZGl0aW9u YWxzIHNob3VsZCBiZSBlcXVpdmFsZW50OyBpbmRleD0ldSwgIgotCQkgICAgInNpemVfY2xhc3M9 JXp1ICglI3p4KSIsIGluZGV4LCBzaXplX2NsYXNzLCBzaXplX2NsYXNzKTsKLQkJZXhwZWN0X3Ry dWUoc2l6ZV9jbGFzcyA8IG1heF9zaXplX2NsYXNzLAotCQkgICAgIkxvb3AgY29uZGl0aW9uYWxz IHNob3VsZCBiZSBlcXVpdmFsZW50OyBpbmRleD0ldSwgIgotCQkgICAgInNpemVfY2xhc3M9JXp1 ICglI3p4KSIsIGluZGV4LCBzaXplX2NsYXNzLCBzaXplX2NsYXNzKTsKLQotCQlleHBlY3RfdV9l cShpbmRleCwgc3pfc2l6ZTJpbmRleChzaXplX2NsYXNzKSwKLQkJICAgICJzel9zaXplMmluZGV4 KCkgZG9lcyBub3QgcmV2ZXJzZSBzel9pbmRleDJzaXplKCk6IGluZGV4PSV1IgotCQkgICAgIiAt LT4gc2l6ZV9jbGFzcz0lenUgLS0+IGluZGV4PSV1IC0tPiBzaXplX2NsYXNzPSV6dSIsCi0JCSAg ICBpbmRleCwgc2l6ZV9jbGFzcywgc3pfc2l6ZTJpbmRleChzaXplX2NsYXNzKSwKLQkJICAgIHN6 X2luZGV4MnNpemUoc3pfc2l6ZTJpbmRleChzaXplX2NsYXNzKSkpOwotCQlleHBlY3RfenVfZXEo c2l6ZV9jbGFzcywKLQkJICAgIHN6X2luZGV4MnNpemUoc3pfc2l6ZTJpbmRleChzaXplX2NsYXNz KSksCi0JCSAgICAic3pfaW5kZXgyc2l6ZSgpIGRvZXMgbm90IHJldmVyc2Ugc3pfc2l6ZTJpbmRl eCgpOiBpbmRleD0ldSIKLQkJICAgICIgLS0+IHNpemVfY2xhc3M9JXp1IC0tPiBpbmRleD0ldSAt LT4gc2l6ZV9jbGFzcz0lenUiLAotCQkgICAgaW5kZXgsIHNpemVfY2xhc3MsIHN6X3NpemUyaW5k ZXgoc2l6ZV9jbGFzcyksCi0JCSAgICBzel9pbmRleDJzaXplKHN6X3NpemUyaW5kZXgoc2l6ZV9j bGFzcykpKTsKLQotCQlleHBlY3RfdV9lcShpbmRleCsxLCBzel9zaXplMmluZGV4KHNpemVfY2xh c3MrMSksCi0JCSAgICAiTmV4dCBzaXplX2NsYXNzIGRvZXMgbm90IHJvdW5kIHVwIHByb3Blcmx5 Iik7Ci0KLQkJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIChpbmRleCA+IDApID8KLQkJICAgIHN6 X3MydShzel9pbmRleDJzaXplKGluZGV4LTEpKzEpIDogc3pfczJ1KDEpLAotCQkgICAgInN6X3My dSgpIGRvZXMgbm90IHJvdW5kIHVwIHRvIHNpemUgY2xhc3MiKTsKLQkJZXhwZWN0X3p1X2VxKHNp emVfY2xhc3MsIHN6X3MydShzaXplX2NsYXNzLTEpLAotCQkgICAgInN6X3MydSgpIGRvZXMgbm90 IHJvdW5kIHVwIHRvIHNpemUgY2xhc3MiKTsKLQkJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6 X3MydShzaXplX2NsYXNzKSwKLQkJICAgICJzel9zMnUoKSBkb2VzIG5vdCBjb21wdXRlIHNhbWUg c2l6ZSBjbGFzcyIpOwotCQlleHBlY3RfenVfZXEoc3pfczJ1KHNpemVfY2xhc3MrMSksIHN6X2lu ZGV4MnNpemUoaW5kZXgrMSksCi0JCSAgICAic3pfczJ1KCkgZG9lcyBub3Qgcm91bmQgdXAgdG8g bmV4dCBzaXplIGNsYXNzIik7Ci0JfQotCi0JZXhwZWN0X3VfZXEoaW5kZXgsIHN6X3NpemUyaW5k ZXgoc3pfaW5kZXgyc2l6ZShpbmRleCkpLAotCSAgICAic3pfc2l6ZTJpbmRleCgpIGRvZXMgbm90 IHJldmVyc2Ugc3pfaW5kZXgyc2l6ZSgpIik7Ci0JZXhwZWN0X3p1X2VxKG1heF9zaXplX2NsYXNz LCBzel9pbmRleDJzaXplKAotCSAgICBzel9zaXplMmluZGV4KG1heF9zaXplX2NsYXNzKSksCi0J ICAgICJzel9pbmRleDJzaXplKCkgZG9lcyBub3QgcmV2ZXJzZSBzel9zaXplMmluZGV4KCkiKTsK LQotCWV4cGVjdF96dV9lcShzaXplX2NsYXNzLCBzel9zMnUoc3pfaW5kZXgyc2l6ZShpbmRleC0x KSsxKSwKLQkgICAgInN6X3MydSgpIGRvZXMgbm90IHJvdW5kIHVwIHRvIHNpemUgY2xhc3MiKTsK LQlleHBlY3RfenVfZXEoc2l6ZV9jbGFzcywgc3pfczJ1KHNpemVfY2xhc3MtMSksCi0JICAgICJz el9zMnUoKSBkb2VzIG5vdCByb3VuZCB1cCB0byBzaXplIGNsYXNzIik7Ci0JZXhwZWN0X3p1X2Vx KHNpemVfY2xhc3MsIHN6X3MydShzaXplX2NsYXNzKSwKLQkgICAgInN6X3MydSgpIGRvZXMgbm90 IGNvbXB1dGUgc2FtZSBzaXplIGNsYXNzIik7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRl c3RfcHNpemVfY2xhc3NlcykgewotCXNpemVfdCBzaXplX2NsYXNzLCBtYXhfcHN6OwotCXBzemlu ZF90IHBpbmQsIG1heF9waW5kOwotCi0JbWF4X3BzeiA9IGdldF9tYXhfc2l6ZV9jbGFzcygpICsg UEFHRTsKLQltYXhfcGluZCA9IHN6X3BzejJpbmQobWF4X3Bzeik7Ci0KLQlmb3IgKHBpbmQgPSAw LCBzaXplX2NsYXNzID0gc3pfcGluZDJzeihwaW5kKTsKLQkgICAgcGluZCA8IG1heF9waW5kIHx8 IHNpemVfY2xhc3MgPCBtYXhfcHN6OwotCSAgICBwaW5kKyssIHNpemVfY2xhc3MgPSBzel9waW5k MnN6KHBpbmQpKSB7Ci0JCWV4cGVjdF90cnVlKHBpbmQgPCBtYXhfcGluZCwKLQkJICAgICJMb29w IGNvbmRpdGlvbmFscyBzaG91bGQgYmUgZXF1aXZhbGVudDsgcGluZD0ldSwgIgotCQkgICAgInNp emVfY2xhc3M9JXp1ICglI3p4KSIsIHBpbmQsIHNpemVfY2xhc3MsIHNpemVfY2xhc3MpOwotCQll eHBlY3RfdHJ1ZShzaXplX2NsYXNzIDwgbWF4X3BzeiwKLQkJICAgICJMb29wIGNvbmRpdGlvbmFs cyBzaG91bGQgYmUgZXF1aXZhbGVudDsgcGluZD0ldSwgIgotCQkgICAgInNpemVfY2xhc3M9JXp1 ICglI3p4KSIsIHBpbmQsIHNpemVfY2xhc3MsIHNpemVfY2xhc3MpOwotCi0JCWV4cGVjdF91X2Vx KHBpbmQsIHN6X3BzejJpbmQoc2l6ZV9jbGFzcyksCi0JCSAgICAic3pfcHN6MmluZCgpIGRvZXMg bm90IHJldmVyc2Ugc3pfcGluZDJzeigpOiBwaW5kPSV1IC0tPiIKLQkJICAgICIgc2l6ZV9jbGFz cz0lenUgLS0+IHBpbmQ9JXUgLS0+IHNpemVfY2xhc3M9JXp1IiwgcGluZCwKLQkJICAgIHNpemVf Y2xhc3MsIHN6X3BzejJpbmQoc2l6ZV9jbGFzcyksCi0JCSAgICBzel9waW5kMnN6KHN6X3BzejJp bmQoc2l6ZV9jbGFzcykpKTsKLQkJZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3BpbmQyc3oo c3pfcHN6MmluZChzaXplX2NsYXNzKSksCi0JCSAgICAic3pfcGluZDJzeigpIGRvZXMgbm90IHJl dmVyc2Ugc3pfcHN6MmluZCgpOiBwaW5kPSV1IC0tPiIKLQkJICAgICIgc2l6ZV9jbGFzcz0lenUg LS0+IHBpbmQ9JXUgLS0+IHNpemVfY2xhc3M9JXp1IiwgcGluZCwKLQkJICAgIHNpemVfY2xhc3Ms IHN6X3BzejJpbmQoc2l6ZV9jbGFzcyksCi0JCSAgICBzel9waW5kMnN6KHN6X3BzejJpbmQoc2l6 ZV9jbGFzcykpKTsKLQotCQlpZiAoc2l6ZV9jbGFzcyA9PSBTQ19MQVJHRV9NQVhDTEFTUykgewot CQkJZXhwZWN0X3VfZXEoU0NfTlBTSVpFUywgc3pfcHN6MmluZChzaXplX2NsYXNzICsgMSksCi0J CQkgICAgIk5leHQgc2l6ZV9jbGFzcyBkb2VzIG5vdCByb3VuZCB1cCBwcm9wZXJseSIpOwotCQl9 IGVsc2UgewotCQkJZXhwZWN0X3VfZXEocGluZCArIDEsIHN6X3BzejJpbmQoc2l6ZV9jbGFzcyAr IDEpLAotCQkJICAgICJOZXh0IHNpemVfY2xhc3MgZG9lcyBub3Qgcm91bmQgdXAgcHJvcGVybHki KTsKLQkJfQotCi0JCWV4cGVjdF96dV9lcShzaXplX2NsYXNzLCAocGluZCA+IDApID8KLQkJICAg IHN6X3BzejJ1KHN6X3BpbmQyc3oocGluZC0xKSsxKSA6IHN6X3BzejJ1KDEpLAotCQkgICAgInN6 X3BzejJ1KCkgZG9lcyBub3Qgcm91bmQgdXAgdG8gc2l6ZSBjbGFzcyIpOwotCQlleHBlY3RfenVf ZXEoc2l6ZV9jbGFzcywgc3pfcHN6MnUoc2l6ZV9jbGFzcy0xKSwKLQkJICAgICJzel9wc3oydSgp IGRvZXMgbm90IHJvdW5kIHVwIHRvIHNpemUgY2xhc3MiKTsKLQkJZXhwZWN0X3p1X2VxKHNpemVf Y2xhc3MsIHN6X3BzejJ1KHNpemVfY2xhc3MpLAotCQkgICAgInN6X3BzejJ1KCkgZG9lcyBub3Qg Y29tcHV0ZSBzYW1lIHNpemUgY2xhc3MiKTsKLQkJZXhwZWN0X3p1X2VxKHN6X3BzejJ1KHNpemVf Y2xhc3MrMSksIHN6X3BpbmQyc3oocGluZCsxKSwKLQkJICAgICJzel9wc3oydSgpIGRvZXMgbm90 IHJvdW5kIHVwIHRvIG5leHQgc2l6ZSBjbGFzcyIpOwotCX0KLQotCWV4cGVjdF91X2VxKHBpbmQs IHN6X3BzejJpbmQoc3pfcGluZDJzeihwaW5kKSksCi0JICAgICJzel9wc3oyaW5kKCkgZG9lcyBu b3QgcmV2ZXJzZSBzel9waW5kMnN6KCkiKTsKLQlleHBlY3RfenVfZXEobWF4X3Bzeiwgc3pfcGlu ZDJzeihzel9wc3oyaW5kKG1heF9wc3opKSwKLQkgICAgInN6X3BpbmQyc3ooKSBkb2VzIG5vdCBy ZXZlcnNlIHN6X3BzejJpbmQoKSIpOwotCi0JZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3Bz ejJ1KHN6X3BpbmQyc3oocGluZC0xKSsxKSwKLQkgICAgInN6X3BzejJ1KCkgZG9lcyBub3Qgcm91 bmQgdXAgdG8gc2l6ZSBjbGFzcyIpOwotCWV4cGVjdF96dV9lcShzaXplX2NsYXNzLCBzel9wc3oy dShzaXplX2NsYXNzLTEpLAotCSAgICAic3pfcHN6MnUoKSBkb2VzIG5vdCByb3VuZCB1cCB0byBz aXplIGNsYXNzIik7Ci0JZXhwZWN0X3p1X2VxKHNpemVfY2xhc3MsIHN6X3BzejJ1KHNpemVfY2xh c3MpLAotCSAgICAic3pfcHN6MnUoKSBkb2VzIG5vdCBjb21wdXRlIHNhbWUgc2l6ZSBjbGFzcyIp OwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X292ZXJmbG93KSB7Ci0Jc2l6ZV90IG1h eF9zaXplX2NsYXNzLCBtYXhfcHN6OwotCi0JbWF4X3NpemVfY2xhc3MgPSBnZXRfbWF4X3NpemVf Y2xhc3MoKTsKLQltYXhfcHN6ID0gbWF4X3NpemVfY2xhc3MgKyBQQUdFOwotCi0JZXhwZWN0X3Vf ZXEoc3pfc2l6ZTJpbmRleChtYXhfc2l6ZV9jbGFzcysxKSwgU0NfTlNJWkVTLAotCSAgICAic3pf c2l6ZTJpbmRleCgpIHNob3VsZCByZXR1cm4gTlNJWkVTIG9uIG92ZXJmbG93Iik7Ci0JZXhwZWN0 X3VfZXEoc3pfc2l6ZTJpbmRleChaVShQVFJESUZGX01BWCkrMSksIFNDX05TSVpFUywKLQkgICAg InN6X3NpemUyaW5kZXgoKSBzaG91bGQgcmV0dXJuIE5TSVpFUyBvbiBvdmVyZmxvdyIpOwotCWV4 cGVjdF91X2VxKHN6X3NpemUyaW5kZXgoU0laRV9UX01BWCksIFNDX05TSVpFUywKLQkgICAgInN6 X3NpemUyaW5kZXgoKSBzaG91bGQgcmV0dXJuIE5TSVpFUyBvbiBvdmVyZmxvdyIpOwotCi0JZXhw ZWN0X3p1X2VxKHN6X3MydShtYXhfc2l6ZV9jbGFzcysxKSwgMCwKLQkgICAgInN6X3MydSgpIHNo b3VsZCByZXR1cm4gMCBmb3IgdW5zdXBwb3J0ZWQgc2l6ZSIpOwotCWV4cGVjdF96dV9lcShzel9z MnUoWlUoUFRSRElGRl9NQVgpKzEpLCAwLAotCSAgICAic3pfczJ1KCkgc2hvdWxkIHJldHVybiAw IGZvciB1bnN1cHBvcnRlZCBzaXplIik7Ci0JZXhwZWN0X3p1X2VxKHN6X3MydShTSVpFX1RfTUFY KSwgMCwKLQkgICAgInN6X3MydSgpIHNob3VsZCByZXR1cm4gMCBvbiBvdmVyZmxvdyIpOwotCi0J ZXhwZWN0X3VfZXEoc3pfcHN6MmluZChtYXhfc2l6ZV9jbGFzcysxKSwgU0NfTlBTSVpFUywKLQkg ICAgInN6X3BzejJpbmQoKSBzaG91bGQgcmV0dXJuIE5QU0laRVMgb24gb3ZlcmZsb3ciKTsKLQll eHBlY3RfdV9lcShzel9wc3oyaW5kKFpVKFBUUkRJRkZfTUFYKSsxKSwgU0NfTlBTSVpFUywKLQkg ICAgInN6X3BzejJpbmQoKSBzaG91bGQgcmV0dXJuIE5QU0laRVMgb24gb3ZlcmZsb3ciKTsKLQll eHBlY3RfdV9lcShzel9wc3oyaW5kKFNJWkVfVF9NQVgpLCBTQ19OUFNJWkVTLAotCSAgICAic3pf cHN6MmluZCgpIHNob3VsZCByZXR1cm4gTlBTSVpFUyBvbiBvdmVyZmxvdyIpOwotCi0JZXhwZWN0 X3p1X2VxKHN6X3BzejJ1KG1heF9zaXplX2NsYXNzKzEpLCBtYXhfcHN6LAotCSAgICAic3pfcHN6 MnUoKSBzaG91bGQgcmV0dXJuIChMQVJHRV9NQVhDTEFTUyArIFBBR0UpIGZvciB1bnN1cHBvcnRl ZCIKLQkgICAgIiBzaXplIik7Ci0JZXhwZWN0X3p1X2VxKHN6X3BzejJ1KFpVKFBUUkRJRkZfTUFY KSsxKSwgbWF4X3BzeiwKLQkgICAgInN6X3BzejJ1KCkgc2hvdWxkIHJldHVybiAoTEFSR0VfTUFY Q0xBU1MgKyBQQUdFKSBmb3IgdW5zdXBwb3J0ZWQgIgotCSAgICAic2l6ZSIpOwotCWV4cGVjdF96 dV9lcShzel9wc3oydShTSVpFX1RfTUFYKSwgbWF4X3BzeiwKLQkgICAgInN6X3BzejJ1KCkgc2hv dWxkIHJldHVybiAoTEFSR0VfTUFYQ0xBU1MgKyBQQUdFKSBvbiBvdmVyZmxvdyIpOwotfQotVEVT VF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9zaXpl X2NsYXNzZXMsCi0JICAgIHRlc3RfcHNpemVfY2xhc3NlcywKLQkgICAgdGVzdF9vdmVyZmxvdyk7 Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3NsYWIuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9zbGFiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZmM1Yzcu LjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3NsYWIuYworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSNpbmNsdWRlICJ0 ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2RlZmluZSBJTlZBTElEX0FSRU5BX0lORCAoKDFVIDw8 IE1BTExPQ1hfQVJFTkFfQklUUykgLSAxKQotCi1URVNUX0JFR0lOKHRlc3RfYXJlbmFfc2xhYl9y ZWdpbmQpIHsKLQlzemluZF90IGJpbmluZDsKLQotCWZvciAoYmluaW5kID0gMDsgYmluaW5kIDwg U0NfTkJJTlM7IGJpbmluZCsrKSB7Ci0JCXNpemVfdCByZWdpbmQ7Ci0JCWVkYXRhX3Qgc2xhYjsK LQkJY29uc3QgYmluX2luZm9fdCAqYmluX2luZm8gPSAmYmluX2luZm9zW2JpbmluZF07Ci0JCWVk YXRhX2luaXQoJnNsYWIsIElOVkFMSURfQVJFTkFfSU5ELAotCQkgICAgbWFsbG9jeChiaW5faW5m by0+c2xhYl9zaXplLCBNQUxMT0NYX0xHX0FMSUdOKExHX1BBR0UpKSwKLQkJICAgIGJpbl9pbmZv LT5zbGFiX3NpemUsIHRydWUsCi0JCSAgICBiaW5pbmQsIDAsIGV4dGVudF9zdGF0ZV9hY3RpdmUs IGZhbHNlLCB0cnVlLCBFWFRFTlRfUEFJX1BBQywKLQkJICAgIEVYVEVOVF9OT1RfSEVBRCk7Ci0J CWV4cGVjdF9wdHJfbm90X251bGwoZWRhdGFfYWRkcl9nZXQoJnNsYWIpLAotCQkgICAgIlVuZXhw ZWN0ZWQgbWFsbG9jKCkgZmFpbHVyZSIpOwotCQlhcmVuYV9kYWxsb2NfYmluX2xvY2tlZF9pbmZv X3QgZGFsbG9jX2luZm87Ci0JCWFyZW5hX2RhbGxvY19iaW5fbG9ja2VkX2JlZ2luKCZkYWxsb2Nf aW5mbywgYmluaW5kKTsKLQkJZm9yIChyZWdpbmQgPSAwOyByZWdpbmQgPCBiaW5faW5mby0+bnJl Z3M7IHJlZ2luZCsrKSB7Ci0JCQl2b2lkICpyZWcgPSAodm9pZCAqKSgodWludHB0cl90KWVkYXRh X2FkZHJfZ2V0KCZzbGFiKSArCi0JCQkgICAgKGJpbl9pbmZvLT5yZWdfc2l6ZSAqIHJlZ2luZCkp OwotCQkJZXhwZWN0X3p1X2VxKGFyZW5hX3NsYWJfcmVnaW5kKCZkYWxsb2NfaW5mbywgYmluaW5k LAotCQkJICAgICZzbGFiLCByZWcpLAotCQkJICAgIHJlZ2luZCwKLQkJCSAgICAiSW5jb3JyZWN0 IHJlZ2lvbiBpbmRleCBjb21wdXRlZCBmb3Igc2l6ZSAlenUiLAotCQkJICAgIGJpbl9pbmZvLT5y ZWdfc2l6ZSk7Ci0JCX0KLQkJZnJlZShlZGF0YV9hZGRyX2dldCgmc2xhYikpOwotCX0KLX0KLVRF U1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfYXJl bmFfc2xhYl9yZWdpbmQpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxk L2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zbW9vdGhzdGVwLmMgYi8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc21vb3Roc3RlcC5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA1ODhjOWY0Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zbW9vdGhzdGVwLmMKKysrIC9kZXYv bnVsbApAQCAtMSwxMDIgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgot Ci1zdGF0aWMgY29uc3QgdWludDY0X3Qgc21vb3Roc3RlcF90YWJbXSA9IHsKLSNkZWZpbmUgU1RF UChzdGVwLCBoLCB4LCB5KQkJCVwKLQloLAotCVNNT09USFNURVAKLSN1bmRlZiBTVEVQCi19Owot Ci1URVNUX0JFR0lOKHRlc3Rfc21vb3Roc3RlcF9pbnRlZ3JhbCkgewotCXVpbnQ2NF90IHN1bSwg bWluLCBtYXg7Ci0JdW5zaWduZWQgaTsKLQotCS8qCi0JICogVGhlIGludGVncmFsIG9mIHNtb290 aHN0ZXAgaW4gdGhlIFswLi4xXSByYW5nZSBlcXVhbHMgMS8yLiAgVmVyaWZ5Ci0JICogdGhhdCB0 aGUgZml4ZWQgcG9pbnQgcmVwcmVzZW50YXRpb24ncyBpbnRlZ3JhbCBpcyBubyBtb3JlIHRoYW4K LQkgKiByb3VuZGluZyBlcnJvciBkaXN0YW50IGZyb20gMS8yLiAgUmVnYXJkaW5nIHJvdW5kaW5n LCBlYWNoIHRhYmxlCi0JICogZWxlbWVudCBpcyByb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3Qg Zml4ZWQgcG9pbnQgdmFsdWUsIHNvIHRoZQotCSAqIGludGVncmFsIG1heSBiZSBvZmYgYnkgYXMg bXVjaCBhcyBTTU9PVEhTVEVQX05TVEVQUyB1bHBzLgotCSAqLwotCXN1bSA9IDA7Ci0JZm9yIChp ID0gMDsgaSA8IFNNT09USFNURVBfTlNURVBTOyBpKyspIHsKLQkJc3VtICs9IHNtb290aHN0ZXBf dGFiW2ldOwotCX0KLQotCW1heCA9IChLUVUoMSkgPDwgKFNNT09USFNURVBfQkZQLTEpKSAqIChT TU9PVEhTVEVQX05TVEVQUysxKTsKLQltaW4gPSBtYXggLSBTTU9PVEhTVEVQX05TVEVQUzsKLQot CWV4cGVjdF91NjRfZ2Uoc3VtLCBtaW4sCi0JICAgICJJbnRlZ3JhbCB0b28gc21hbGwsIGV2ZW4g YWNjb3VudGluZyBmb3IgdHJ1bmNhdGlvbiIpOwotCWV4cGVjdF91NjRfbGUoc3VtLCBtYXgsICJJ bnRlZ3JhbCBleGNlZWRzIDEvMiIpOwotCWlmIChmYWxzZSkgewotCQltYWxsb2NfcHJpbnRmKCIl IkZNVHU2NCIgdWxwcyB1bmRlciAxLzIgKGxpbWl0ICVkKVxuIiwKLQkJICAgIG1heCAtIHN1bSwg U01PT1RIU1RFUF9OU1RFUFMpOwotCX0KLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9z bW9vdGhzdGVwX21vbm90b25pYykgewotCXVpbnQ2NF90IHByZXZfaDsKLQl1bnNpZ25lZCBpOwot Ci0JLyoKLQkgKiBUaGUgc21vb3Roc3RlcCBmdW5jdGlvbiBpcyBtb25vdG9uaWMgaW4gWzAuLjFd LCBpLmUuIGl0cyBzbG9wZSBpcwotCSAqIG5vbi1uZWdhdGl2ZS4gIEluIHByYWN0aWNlIHdlIHdh bnQgdG8gcGFyYW1ldHJpemUgdGFibGUgZ2VuZXJhdGlvbgotCSAqIHN1Y2ggdGhhdCBwaWVjZXdp c2Ugc2xvcGUgaXMgZ3JlYXRlciB0aGFuIHplcm8sIGJ1dCBkbyBub3QgcmVxdWlyZQotCSAqIHRo YXQgaGVyZS4KLQkgKi8KLQlwcmV2X2ggPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTTU9PVEhTVEVQ X05TVEVQUzsgaSsrKSB7Ci0JCXVpbnQ2NF90IGggPSBzbW9vdGhzdGVwX3RhYltpXTsKLQkJZXhw ZWN0X3U2NF9nZShoLCBwcmV2X2gsICJQaWVjZXdpc2Ugbm9uLW1vbm90b25pYywgaT0ldSIsIGkp OwotCQlwcmV2X2ggPSBoOwotCX0KLQlleHBlY3RfdTY0X2VxKHNtb290aHN0ZXBfdGFiW1NNT09U SFNURVBfTlNURVBTLTFdLAotCSAgICAoS1FVKDEpIDw8IFNNT09USFNURVBfQkZQKSwgIkxhc3Qg c3RlcCBtdXN0IGVxdWFsIDEiKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9zbW9v dGhzdGVwX3Nsb3BlKSB7Ci0JdWludDY0X3QgcHJldl9oLCBwcmV2X2RlbHRhOwotCXVuc2lnbmVk IGk7Ci0KLQkvKgotCSAqIFRoZSBzbW9vdGhzdGVwIHNsb3BlIHN0cmljdGx5IGluY3JlYXNlcyB1 bnRpbCB4PTAuNSwgYW5kIHRoZW4KLQkgKiBzdHJpY3RseSBkZWNyZWFzZXMgdW50aWwgeD0xLjAu ICBWZXJpZnkgdGhlIHNsaWdodGx5IHdlYWtlcgotCSAqIHJlcXVpcmVtZW50IG9mIG1vbm90b25p Y2l0eSwgc28gdGhhdCBpbmFkZXF1YXRlIHRhYmxlIHByZWNpc2lvbiBkb2VzCi0JICogbm90IGNh dXNlIGZhbHNlIHRlc3QgZmFpbHVyZXMuCi0JICovCi0JcHJldl9oID0gMDsKLQlwcmV2X2RlbHRh ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgU01PT1RIU1RFUF9OU1RFUFMgLyAyICsgU01PT1RIU1RF UF9OU1RFUFMgJSAyOyBpKyspIHsKLQkJdWludDY0X3QgaCA9IHNtb290aHN0ZXBfdGFiW2ldOwot CQl1aW50NjRfdCBkZWx0YSA9IGggLSBwcmV2X2g7Ci0JCWV4cGVjdF91NjRfZ2UoZGVsdGEsIHBy ZXZfZGVsdGEsCi0JCSAgICAiU2xvcGUgbXVzdCBtb25vdG9uaWNhbGx5IGluY3JlYXNlIGluIDAu MCA8PSB4IDw9IDAuNSwgIgotCQkgICAgImk9JXUiLCBpKTsKLQkJcHJldl9oID0gaDsKLQkJcHJl dl9kZWx0YSA9IGRlbHRhOwotCX0KLQotCXByZXZfaCA9IEtRVSgxKSA8PCBTTU9PVEhTVEVQX0JG UDsKLQlwcmV2X2RlbHRhID0gMDsKLQlmb3IgKGkgPSBTTU9PVEhTVEVQX05TVEVQUy0xOyBpID49 IFNNT09USFNURVBfTlNURVBTIC8gMjsgaS0tKSB7Ci0JCXVpbnQ2NF90IGggPSBzbW9vdGhzdGVw X3RhYltpXTsKLQkJdWludDY0X3QgZGVsdGEgPSBwcmV2X2ggLSBoOwotCQlleHBlY3RfdTY0X2dl KGRlbHRhLCBwcmV2X2RlbHRhLAotCQkgICAgIlNsb3BlIG11c3QgbW9ub3RvbmljYWxseSBkZWNy ZWFzZSBpbiAwLjUgPD0geCA8PSAxLjAsICIKLQkJICAgICJpPSV1IiwgaSk7Ci0JCXByZXZfaCA9 IGg7Ci0JCXByZXZfZGVsdGEgPSBkZWx0YTsKLQl9Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4o dm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X3Ntb290aHN0ZXBfaW50ZWdyYWwsCi0J ICAgIHRlc3Rfc21vb3Roc3RlcF9tb25vdG9uaWMsCi0JICAgIHRlc3Rfc21vb3Roc3RlcF9zbG9w ZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3NwaW4uYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC9zcGluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NjVm NzQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3NwaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpbmNsdWRl ICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nw aW4uaCIKLQotVEVTVF9CRUdJTih0ZXN0X3NwaW4pIHsKLQlzcGluX3Qgc3Bpbm5lciA9IFNQSU5f SU5JVElBTElaRVI7Ci0KLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJ c3Bpbl9hZGFwdGl2ZSgmc3Bpbm5lcik7Ci0JfQotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZv aWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9zcGluKTsKLX0KCmRpZmYgLS1naXQgYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc3RhdHMuYyBi LzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zdGF0cy5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmRiZDE4Li4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC9zdGF0cy5jCisr KyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rl c3QuaCIKLQotI2RlZmluZSBTVFJJTkdJRllfSEVMUEVSKHgpICN4Ci0jZGVmaW5lIFNUUklOR0lG WSh4KSBTVFJJTkdJRllfSEVMUEVSKHgpCi0KLVRFU1RfQkVHSU4odGVzdF9zdGF0c19zdW1tYXJ5 KSB7Ci0Jc2l6ZV90IHN6LCBhbGxvY2F0ZWQsIGFjdGl2ZSwgcmVzaWRlbnQsIG1hcHBlZDsKLQlp bnQgZXhwZWN0ZWQgPSBjb25maWdfc3RhdHMgPyAwIDogRU5PRU5UOwotCi0Jc3ogPSBzaXplb2Yo c2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hbGxvY2F0ZWQiLCAodm9pZCAq KSZhbGxvY2F0ZWQsICZzeiwgTlVMTCwKLQkgICAgMCksIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBt YWxsY3RsKCkgcmVzdWx0Iik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYWN0aXZlIiwg KHZvaWQgKikmYWN0aXZlLCAmc3osIE5VTEwsIDApLAotCSAgICBleHBlY3RlZCwgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLnJlc2lk ZW50IiwgKHZvaWQgKikmcmVzaWRlbnQsICZzeiwgTlVMTCwgMCksCi0JICAgIGV4cGVjdGVkLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgic3Rh dHMubWFwcGVkIiwgKHZvaWQgKikmbWFwcGVkLCAmc3osIE5VTEwsIDApLAotCSAgICBleHBlY3Rl ZCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCi0JaWYgKGNvbmZpZ19zdGF0cykg ewotCQlleHBlY3RfenVfbGUoYWxsb2NhdGVkLCBhY3RpdmUsCi0JCSAgICAiYWxsb2NhdGVkIHNo b3VsZCBiZSBubyBsYXJnZXIgdGhhbiBhY3RpdmUiKTsKLQkJZXhwZWN0X3p1X2x0KGFjdGl2ZSwg cmVzaWRlbnQsCi0JCSAgICAiYWN0aXZlIHNob3VsZCBiZSBsZXNzIHRoYW4gcmVzaWRlbnQiKTsK LQkJZXhwZWN0X3p1X2x0KGFjdGl2ZSwgbWFwcGVkLAotCQkgICAgImFjdGl2ZSBzaG91bGQgYmUg bGVzcyB0aGFuIG1hcHBlZCIpOwotCX0KLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF9z dGF0c19sYXJnZSkgewotCXZvaWQgKnA7Ci0JdWludDY0X3QgZXBvY2g7Ci0Jc2l6ZV90IGFsbG9j YXRlZDsKLQl1aW50NjRfdCBubWFsbG9jLCBuZGFsbG9jLCBucmVxdWVzdHM7Ci0Jc2l6ZV90IHN6 OwotCWludCBleHBlY3RlZCA9IGNvbmZpZ19zdGF0cyA/IDAgOiBFTk9FTlQ7Ci0KLQlwID0gbWFs bG9jeChTQ19TTUFMTF9NQVhDTEFTUyArIDEsIE1BTExPQ1hfQVJFTkEoMCkpOwotCWV4cGVjdF9w dHJfbm90X251bGwocCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQotCWV4cGVj dF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsIHNpemVv ZihlcG9jaCkpLAotCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCi0J c3ogPSBzaXplb2Yoc2l6ZV90KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMu MC5sYXJnZS5hbGxvY2F0ZWQiLAotCSAgICAodm9pZCAqKSZhbGxvY2F0ZWQsICZzeiwgTlVMTCwg MCksIGV4cGVjdGVkLAotCSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7Ci0Jc3og PSBzaXplb2YodWludDY0X3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4w LmxhcmdlLm5tYWxsb2MiLCAodm9pZCAqKSZubWFsbG9jLAotCSAgICAmc3osIE5VTEwsIDApLCBl eHBlY3RlZCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCWV4cGVjdF9kX2VxKG1h bGxjdGwoInN0YXRzLmFyZW5hcy4wLmxhcmdlLm5kYWxsb2MiLCAodm9pZCAqKSZuZGFsbG9jLAot CSAgICAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3Vs dCIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLmxhcmdlLm5yZXF1ZXN0 cyIsCi0JICAgICh2b2lkICopJm5yZXF1ZXN0cywgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCi0J ICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQotCWlmIChjb25maWdfc3RhdHMp IHsKLQkJZXhwZWN0X3p1X2d0KGFsbG9jYXRlZCwgMCwKLQkJICAgICJhbGxvY2F0ZWQgc2hvdWxk IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0JCWV4cGVjdF91NjRfZ2Uobm1hbGxvYywgbmRhbGxv YywKLQkJICAgICJubWFsbG9jIHNob3VsZCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyBuZGFsbG9j Iik7Ci0JCWV4cGVjdF91NjRfbGUobm1hbGxvYywgbnJlcXVlc3RzLAotCQkgICAgIm5tYWxsb2Mg c2hvdWxkIG5vIGxhcmdlciB0aGFuIG5yZXF1ZXN0cyIpOwotCX0KLQotCWRhbGxvY3gocCwgMCk7 Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3Rfc3RhdHNfYXJlbmFzX3N1bW1hcnkpIHsK LQl2b2lkICpsaXR0bGUsICpsYXJnZTsKLQl1aW50NjRfdCBlcG9jaDsKLQlzaXplX3Qgc3o7Ci0J aW50IGV4cGVjdGVkID0gY29uZmlnX3N0YXRzID8gMCA6IEVOT0VOVDsKLQlzaXplX3QgbWFwcGVk OwotCXVpbnQ2NF90IGRpcnR5X25wdXJnZSwgZGlydHlfbm1hZHZpc2UsIGRpcnR5X3B1cmdlZDsK LQl1aW50NjRfdCBtdXp6eV9ucHVyZ2UsIG11enp5X25tYWR2aXNlLCBtdXp6eV9wdXJnZWQ7Ci0K LQlsaXR0bGUgPSBtYWxsb2N4KFNDX1NNQUxMX01BWENMQVNTLCBNQUxMT0NYX0FSRU5BKDApKTsK LQlleHBlY3RfcHRyX25vdF9udWxsKGxpdHRsZSwgIlVuZXhwZWN0ZWQgbWFsbG9jeCgpIGZhaWx1 cmUiKTsKLQlsYXJnZSA9IG1hbGxvY3goKDFVIDw8IFNDX0xHX0xBUkdFX01JTkNMQVNTKSwKLQkg ICAgTUFMTE9DWF9BUkVOQSgwKSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChsYXJnZSwgIlVuZXhw ZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQotCWRhbGxvY3gobGl0dGxlLCAwKTsKLQlkYWxs b2N4KGxhcmdlLCAwKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZmx1 c2giLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSwKLQkgICAgb3B0X3RjYWNoZSA/IDAgOiBFRkFVTFQs ICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJh cmVuYS4wLnB1cmdlIiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVk IG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJlcG9jaCIsIE5V TEwsIE5VTEwsICh2b2lkICopJmVwb2NoLCBzaXplb2YoZXBvY2gpKSwKLQkgICAgMCwgIlVuZXhw ZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCXN6ID0gc2l6ZW9mKHNpemVfdCk7Ci0JZXhw ZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAubWFwcGVkIiwgKHZvaWQgKikmbWFwcGVk LCAmc3osIE5VTEwsCi0JICAgIDApLCBleHBlY3RlZCwgIlVuZXhlcGVjdGVkIG1hbGxjdGwoKSBy ZXN1bHQiKTsKLQotCXN6ID0gc2l6ZW9mKHVpbnQ2NF90KTsKLQlleHBlY3RfZF9lcShtYWxsY3Rs KCJzdGF0cy5hcmVuYXMuMC5kaXJ0eV9ucHVyZ2UiLAotCSAgICAodm9pZCAqKSZkaXJ0eV9ucHVy Z2UsICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAotCSAgICAiVW5leGVwZWN0ZWQgbWFsbGN0bCgp IHJlc3VsdCIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLmRpcnR5X25t YWR2aXNlIiwKLQkgICAgKHZvaWQgKikmZGlydHlfbm1hZHZpc2UsICZzeiwgTlVMTCwgMCksIGV4 cGVjdGVkLAotCSAgICAiVW5leGVwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCWV4cGVjdF9k X2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLmRpcnR5X3B1cmdlZCIsCi0JICAgICh2b2lkICop JmRpcnR5X3B1cmdlZCwgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCi0JICAgICJVbmV4ZXBlY3Rl ZCBtYWxsY3RsKCkgcmVzdWx0Iik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJlbmFz LjAubXV6enlfbnB1cmdlIiwKLQkgICAgKHZvaWQgKikmbXV6enlfbnB1cmdlLCAmc3osIE5VTEws IDApLCBleHBlY3RlZCwKLQkgICAgIlVuZXhlcGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQll eHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC5tdXp6eV9ubWFkdmlzZSIsCi0JICAg ICh2b2lkICopJm11enp5X25tYWR2aXNlLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKLQkgICAg IlVuZXhlcGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJz dGF0cy5hcmVuYXMuMC5tdXp6eV9wdXJnZWQiLAotCSAgICAodm9pZCAqKSZtdXp6eV9wdXJnZWQs ICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAotCSAgICAiVW5leGVwZWN0ZWQgbWFsbGN0bCgpIHJl c3VsdCIpOwotCi0JaWYgKGNvbmZpZ19zdGF0cykgewotCQlpZiAoIWlzX2JhY2tncm91bmRfdGhy ZWFkX2VuYWJsZWQoKSAmJiAhb3B0X2hwYSkgewotCQkJZXhwZWN0X3U2NF9ndChkaXJ0eV9ucHVy Z2UgKyBtdXp6eV9ucHVyZ2UsIDAsCi0JCQkgICAgIkF0IGxlYXN0IG9uZSBwdXJnZSBzaG91bGQg aGF2ZSBvY2N1cnJlZCIpOwotCQl9Ci0JCWV4cGVjdF91NjRfbGUoZGlydHlfbm1hZHZpc2UsIGRp cnR5X3B1cmdlZCwKLQkJICAgICJkaXJ0eV9ubWFkdmlzZSBzaG91bGQgYmUgbm8gZ3JlYXRlciB0 aGFuIGRpcnR5X3B1cmdlZCIpOwotCQlleHBlY3RfdTY0X2xlKG11enp5X25tYWR2aXNlLCBtdXp6 eV9wdXJnZWQsCi0JCSAgICAibXV6enlfbm1hZHZpc2Ugc2hvdWxkIGJlIG5vIGdyZWF0ZXIgdGhh biBtdXp6eV9wdXJnZWQiKTsKLQl9Ci19Ci1URVNUX0VORAotCi12b2lkICoKLXRoZF9zdGFydCh2 b2lkICphcmcpIHsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLW5vX2xhenlfbG9j ayh2b2lkKSB7Ci0JdGhkX3QgdGhkOwotCi0JdGhkX2NyZWF0ZSgmdGhkLCB0aGRfc3RhcnQsIE5V TEwpOwotCXRoZF9qb2luKHRoZCwgTlVMTCk7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9zdGF0c19h cmVuYXNfc21hbGwpIHsKLQl2b2lkICpwOwotCXNpemVfdCBzeiwgYWxsb2NhdGVkOwotCXVpbnQ2 NF90IGVwb2NoLCBubWFsbG9jLCBuZGFsbG9jLCBucmVxdWVzdHM7Ci0JaW50IGV4cGVjdGVkID0g Y29uZmlnX3N0YXRzID8gMCA6IEVOT0VOVDsKLQotCW5vX2xhenlfbG9jaygpOyAvKiBMYXp5IGxv Y2tpbmcgd291bGQgZG9kZ2UgdGNhY2hlIHRlc3RpbmcuICovCi0KLQlwID0gbWFsbG9jeChTQ19T TUFMTF9NQVhDTEFTUywgTUFMTE9DWF9BUkVOQSgwKSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChw LCAiVW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwotCi0JZXhwZWN0X2RfZXEobWFsbGN0 bCgidGhyZWFkLnRjYWNoZS5mbHVzaCIsIE5VTEwsIE5VTEwsIE5VTEwsIDApLAotCSAgICBvcHRf dGNhY2hlID8gMCA6IEVGQVVMVCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCi0J ZXhwZWN0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwg c2l6ZW9mKGVwb2NoKSksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7 Ci0KLQlzeiA9IHNpemVvZihzaXplX3QpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFy ZW5hcy4wLnNtYWxsLmFsbG9jYXRlZCIsCi0JICAgICh2b2lkICopJmFsbG9jYXRlZCwgJnN6LCBO VUxMLCAwKSwgZXhwZWN0ZWQsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsK LQlzeiA9IHNpemVvZih1aW50NjRfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJl bmFzLjAuc21hbGwubm1hbGxvYyIsICh2b2lkICopJm5tYWxsb2MsCi0JICAgICZzeiwgTlVMTCwg MCksIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7Ci0JZXhwZWN0X2Rf ZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAuc21hbGwubmRhbGxvYyIsICh2b2lkICopJm5kYWxs b2MsCi0JICAgICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkg cmVzdWx0Iik7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAuc21hbGwubnJl cXVlc3RzIiwKLQkgICAgKHZvaWQgKikmbnJlcXVlc3RzLCAmc3osIE5VTEwsIDApLCBleHBlY3Rl ZCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCi0JaWYgKGNvbmZpZ19z dGF0cykgewotCQlleHBlY3RfenVfZ3QoYWxsb2NhdGVkLCAwLAotCQkgICAgImFsbG9jYXRlZCBz aG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKLQkJZXhwZWN0X3U2NF9ndChubWFsbG9jLCAw LAotCQkgICAgIm5tYWxsb2Mgc2hvdWxkIGJlIG5vIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0JCWV4 cGVjdF91NjRfZ2Uobm1hbGxvYywgbmRhbGxvYywKLQkJICAgICJubWFsbG9jIHNob3VsZCBiZSBh dCBsZWFzdCBhcyBsYXJnZSBhcyBuZGFsbG9jIik7Ci0JCWV4cGVjdF91NjRfZ3QobnJlcXVlc3Rz LCAwLAotCQkgICAgIm5yZXF1ZXN0cyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKLQl9 Ci0KLQlkYWxsb2N4KHAsIDApOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3N0YXRz X2FyZW5hc19sYXJnZSkgewotCXZvaWQgKnA7Ci0Jc2l6ZV90IHN6LCBhbGxvY2F0ZWQ7Ci0JdWlu dDY0X3QgZXBvY2gsIG5tYWxsb2MsIG5kYWxsb2M7Ci0JaW50IGV4cGVjdGVkID0gY29uZmlnX3N0 YXRzID8gMCA6IEVOT0VOVDsKLQotCXAgPSBtYWxsb2N4KCgxVSA8PCBTQ19MR19MQVJHRV9NSU5D TEFTUyksIE1BTExPQ1hfQVJFTkEoMCkpOwotCWV4cGVjdF9wdHJfbm90X251bGwocCwgIlVuZXhw ZWN0ZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImVwb2No IiwgTlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsIHNpemVvZihlcG9jaCkpLAotCSAgICAwLCAi VW5leHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCi0Jc3ogPSBzaXplb2Yoc2l6ZV90KTsK LQlleHBlY3RfZF9lcShtYWxsY3RsKCJzdGF0cy5hcmVuYXMuMC5sYXJnZS5hbGxvY2F0ZWQiLAot CSAgICAodm9pZCAqKSZhbGxvY2F0ZWQsICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAotCSAgICAi VW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7Ci0Jc3ogPSBzaXplb2YodWludDY0X3QpOwot CWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4wLmxhcmdlLm5tYWxsb2MiLCAodm9p ZCAqKSZubWFsbG9jLAotCSAgICAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwgIlVuZXhwZWN0ZWQg bWFsbGN0bCgpIHJlc3VsdCIpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInN0YXRzLmFyZW5hcy4w LmxhcmdlLm5kYWxsb2MiLCAodm9pZCAqKSZuZGFsbG9jLAotCSAgICAmc3osIE5VTEwsIDApLCBl eHBlY3RlZCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCi0JaWYgKGNvbmZpZ19z dGF0cykgewotCQlleHBlY3RfenVfZ3QoYWxsb2NhdGVkLCAwLAotCQkgICAgImFsbG9jYXRlZCBz aG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKLQkJZXhwZWN0X3U2NF9ndChubWFsbG9jLCAw LAotCQkgICAgIm5tYWxsb2Mgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0JCWV4cGVj dF91NjRfZ2Uobm1hbGxvYywgbmRhbGxvYywKLQkJICAgICJubWFsbG9jIHNob3VsZCBiZSBhdCBs ZWFzdCBhcyBsYXJnZSBhcyBuZGFsbG9jIik7Ci0JfQotCi0JZGFsbG9jeChwLCAwKTsKLX0KLVRF U1RfRU5ECi0KLXN0YXRpYyB2b2lkCi1nZW5fbWFsbGN0bF9zdHIoY2hhciAqY21kLCBjaGFyICpu YW1lLCB1bnNpZ25lZCBhcmVuYV9pbmQpIHsKLQlzcHJpbnRmKGNtZCwgInN0YXRzLmFyZW5hcy4l dS5iaW5zLjAuJXMiLCBhcmVuYV9pbmQsIG5hbWUpOwotfQotCi1URVNUX0JFR0lOKHRlc3Rfc3Rh dHNfYXJlbmFzX2JpbnMpIHsKLQl2b2lkICpwOwotCXNpemVfdCBzeiwgY3Vyc2xhYnMsIGN1cnJl Z3MsIG5vbmZ1bGxfc2xhYnM7Ci0JdWludDY0X3QgZXBvY2gsIG5tYWxsb2MsIG5kYWxsb2MsIG5y ZXF1ZXN0cywgbmZpbGxzLCBuZmx1c2hlczsKLQl1aW50NjRfdCBuc2xhYnMsIG5yZXNsYWJzOwot CWludCBleHBlY3RlZCA9IGNvbmZpZ19zdGF0cyA/IDAgOiBFTk9FTlQ7Ci0KLQkvKiBNYWtlIHN1 cmUgYWxsb2NhdGlvbiBiZWxvdyBpc24ndCBzYXRpc2ZpZWQgYnkgdGNhY2hlLiAqLwotCWV4cGVj dF9kX2VxKG1hbGxjdGwoInRocmVhZC50Y2FjaGUuZmx1c2giLCBOVUxMLCBOVUxMLCBOVUxMLCAw KSwKLQkgICAgb3B0X3RjYWNoZSA/IDAgOiBFRkFVTFQsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBy ZXN1bHQiKTsKLQotCXVuc2lnbmVkIGFyZW5hX2luZCwgb2xkX2FyZW5hX2luZDsKLQlzeiA9IHNp emVvZih1bnNpZ25lZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgiYXJlbmFzLmNyZWF0ZSIsICh2 b2lkICopJmFyZW5hX2luZCwgJnN6LCBOVUxMLCAwKSwKLQkgICAgMCwgIkFyZW5hIGNyZWF0aW9u IGZhaWx1cmUiKTsKLQlzeiA9IHNpemVvZihhcmVuYV9pbmQpOwotCWV4cGVjdF9kX2VxKG1hbGxj dGwoInRocmVhZC5hcmVuYSIsICh2b2lkICopJm9sZF9hcmVuYV9pbmQsICZzeiwKLQkgICAgKHZv aWQgKikmYXJlbmFfaW5kLCBzaXplb2YoYXJlbmFfaW5kKSksIDAsCi0JICAgICJVbmV4cGVjdGVk IG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlwID0gbWFsbG9jKGJpbl9pbmZvc1swXS5yZWdfc2l6 ZSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAiVW5leHBlY3RlZCBtYWxsb2MoKSBmYWlsdXJl Iik7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmZsdXNoIiwgTlVMTCwg TlVMTCwgTlVMTCwgMCksCi0JICAgIG9wdF90Y2FjaGUgPyAwIDogRUZBVUxULCAiVW5leHBlY3Rl ZCBtYWxsY3RsKCkgcmVzdWx0Iik7Ci0KLQlleHBlY3RfZF9lcShtYWxsY3RsKCJlcG9jaCIsIE5V TEwsIE5VTEwsICh2b2lkICopJmVwb2NoLCBzaXplb2YoZXBvY2gpKSwKLQkgICAgMCwgIlVuZXhw ZWN0ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCWNoYXIgY21kWzEyOF07Ci0Jc3ogPSBzaXpl b2YodWludDY0X3QpOwotCWdlbl9tYWxsY3RsX3N0cihjbWQsICJubWFsbG9jIiwgYXJlbmFfaW5k KTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKGNtZCwgKHZvaWQgKikmbm1hbGxvYywgJnN6LCBOVUxM LCAwKSwgZXhwZWN0ZWQsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQln ZW5fbWFsbGN0bF9zdHIoY21kLCAibmRhbGxvYyIsIGFyZW5hX2luZCk7Ci0JZXhwZWN0X2RfZXEo bWFsbGN0bChjbWQsICh2b2lkICopJm5kYWxsb2MsICZzeiwgTlVMTCwgMCksIGV4cGVjdGVkLAot CSAgICAiVW5leHBlY3RlZCBtYWxsY3RsKCkgcmVzdWx0Iik7Ci0JZ2VuX21hbGxjdGxfc3RyKGNt ZCwgIm5yZXF1ZXN0cyIsIGFyZW5hX2luZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bChjbWQsICh2 b2lkICopJm5yZXF1ZXN0cywgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCi0JICAgICJVbmV4cGVj dGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQlzeiA9IHNpemVvZihzaXplX3QpOwotCWdlbl9tYWxs Y3RsX3N0cihjbWQsICJjdXJyZWdzIiwgYXJlbmFfaW5kKTsKLQlleHBlY3RfZF9lcShtYWxsY3Rs KGNtZCwgKHZvaWQgKikmY3VycmVncywgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCi0JICAgICJV bmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQotCXN6ID0gc2l6ZW9mKHVpbnQ2NF90KTsK LQlnZW5fbWFsbGN0bF9zdHIoY21kLCAibmZpbGxzIiwgYXJlbmFfaW5kKTsKLQlleHBlY3RfZF9l cShtYWxsY3RsKGNtZCwgKHZvaWQgKikmbmZpbGxzLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwK LQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCWdlbl9tYWxsY3RsX3N0cihj bWQsICJuZmx1c2hlcyIsIGFyZW5hX2luZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bChjbWQsICh2 b2lkICopJm5mbHVzaGVzLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKLQkgICAgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwotCi0JZ2VuX21hbGxjdGxfc3RyKGNtZCwgIm5zbGFicyIs IGFyZW5hX2luZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bChjbWQsICh2b2lkICopJm5zbGFicywg JnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1 bHQiKTsKLQlnZW5fbWFsbGN0bF9zdHIoY21kLCAibnJlc2xhYnMiLCBhcmVuYV9pbmQpOwotCWV4 cGVjdF9kX2VxKG1hbGxjdGwoY21kLCAodm9pZCAqKSZucmVzbGFicywgJnN6LCBOVUxMLCAwKSwg ZXhwZWN0ZWQsCi0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQlzeiA9IHNp emVvZihzaXplX3QpOwotCWdlbl9tYWxsY3RsX3N0cihjbWQsICJjdXJzbGFicyIsIGFyZW5hX2lu ZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bChjbWQsICh2b2lkICopJmN1cnNsYWJzLCAmc3osIE5V TEwsIDApLCBleHBlY3RlZCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCgpIHJlc3VsdCIpOwot CWdlbl9tYWxsY3RsX3N0cihjbWQsICJub25mdWxsX3NsYWJzIiwgYXJlbmFfaW5kKTsKLQlleHBl Y3RfZF9lcShtYWxsY3RsKGNtZCwgKHZvaWQgKikmbm9uZnVsbF9zbGFicywgJnN6LCBOVUxMLCAw KSwKLQkgICAgZXhwZWN0ZWQsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQotCWlm IChjb25maWdfc3RhdHMpIHsKLQkJZXhwZWN0X3U2NF9ndChubWFsbG9jLCAwLAotCQkgICAgIm5t YWxsb2Mgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0JCWV4cGVjdF91NjRfZ2Uobm1h bGxvYywgbmRhbGxvYywKLQkJICAgICJubWFsbG9jIHNob3VsZCBiZSBhdCBsZWFzdCBhcyBsYXJn ZSBhcyBuZGFsbG9jIik7Ci0JCWV4cGVjdF91NjRfZ3QobnJlcXVlc3RzLCAwLAotCQkgICAgIm5y ZXF1ZXN0cyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKLQkJZXhwZWN0X3p1X2d0KGN1 cnJlZ3MsIDAsCi0JCSAgICAiYWxsb2NhdGVkIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVybyIp OwotCQlpZiAob3B0X3RjYWNoZSkgewotCQkJZXhwZWN0X3U2NF9ndChuZmlsbHMsIDAsCi0JCQkg ICAgIkF0IGxlYXN0IG9uZSBmaWxsIHNob3VsZCBoYXZlIG9jY3VycmVkIik7Ci0JCQlleHBlY3Rf dTY0X2d0KG5mbHVzaGVzLCAwLAotCQkJICAgICJBdCBsZWFzdCBvbmUgZmx1c2ggc2hvdWxkIGhh dmUgb2NjdXJyZWQiKTsKLQkJfQotCQlleHBlY3RfdTY0X2d0KG5zbGFicywgMCwKLQkJICAgICJB dCBsZWFzdCBvbmUgc2xhYiBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCIpOwotCQlleHBlY3Rf enVfZ3QoY3Vyc2xhYnMsIDAsCi0JCSAgICAiQXQgbGVhc3Qgb25lIHNsYWIgc2hvdWxkIGJlIGN1 cnJlbnRseSBhbGxvY2F0ZWQiKTsKLQkJZXhwZWN0X3p1X2VxKG5vbmZ1bGxfc2xhYnMsIDAsCi0J CSAgICAic2xhYnNfbm9uZnVsbCBzaG91bGQgYmUgZW1wdHkiKTsKLQl9Ci0KLQlkYWxsb2N4KHAs IDApOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3N0YXRzX2FyZW5hc19sZXh0ZW50 cykgewotCXZvaWQgKnA7Ci0JdWludDY0X3QgZXBvY2gsIG5tYWxsb2MsIG5kYWxsb2M7Ci0Jc2l6 ZV90IGN1cmxleHRlbnRzLCBzeiwgaHNpemU7Ci0JaW50IGV4cGVjdGVkID0gY29uZmlnX3N0YXRz ID8gMCA6IEVOT0VOVDsKLQotCXN6ID0gc2l6ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFs bGN0bCgiYXJlbmFzLmxleHRlbnQuMC5zaXplIiwgKHZvaWQgKikmaHNpemUsICZzeiwgTlVMTCwK LQkgICAgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlwID0gbWFs bG9jeChoc2l6ZSwgTUFMTE9DWF9BUkVOQSgwKSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwLCAi VW5leHBlY3RlZCBtYWxsb2N4KCkgZmFpbHVyZSIpOwotCi0JZXhwZWN0X2RfZXEobWFsbGN0bCgi ZXBvY2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwgc2l6ZW9mKGVwb2NoKSksCi0JICAg IDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQlzeiA9IHNpemVvZih1aW50 NjRfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgic3RhdHMuYXJlbmFzLjAubGV4dGVudHMuMC5u bWFsbG9jIiwKLQkgICAgKHZvaWQgKikmbm1hbGxvYywgJnN6LCBOVUxMLCAwKSwgZXhwZWN0ZWQs Ci0JICAgICJVbmV4cGVjdGVkIG1hbGxjdGwoKSByZXN1bHQiKTsKLQlleHBlY3RfZF9lcShtYWxs Y3RsKCJzdGF0cy5hcmVuYXMuMC5sZXh0ZW50cy4wLm5kYWxsb2MiLAotCSAgICAodm9pZCAqKSZu ZGFsbG9jLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0 bCgpIHJlc3VsdCIpOwotCXN6ID0gc2l6ZW9mKHNpemVfdCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0 bCgic3RhdHMuYXJlbmFzLjAubGV4dGVudHMuMC5jdXJsZXh0ZW50cyIsCi0JICAgICh2b2lkICop JmN1cmxleHRlbnRzLCAmc3osIE5VTEwsIDApLCBleHBlY3RlZCwKLQkgICAgIlVuZXhwZWN0ZWQg bWFsbGN0bCgpIHJlc3VsdCIpOwotCi0JaWYgKGNvbmZpZ19zdGF0cykgewotCQlleHBlY3RfdTY0 X2d0KG5tYWxsb2MsIDAsCi0JCSAgICAibm1hbGxvYyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHpl cm8iKTsKLQkJZXhwZWN0X3U2NF9nZShubWFsbG9jLCBuZGFsbG9jLAotCQkgICAgIm5tYWxsb2Mg c2hvdWxkIGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIG5kYWxsb2MiKTsKLQkJZXhwZWN0X3U2NF9n dChjdXJsZXh0ZW50cywgMCwKLQkJICAgICJBdCBsZWFzdCBvbmUgZXh0ZW50IHNob3VsZCBiZSBj dXJyZW50bHkgYWxsb2NhdGVkIik7Ci0JfQotCi0JZGFsbG9jeChwLCAwKTsKLX0KLVRFU1RfRU5E Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3RjYWNoZV9ieXRlc19mb3JfdXNpemUoc2l6ZV90IHVzaXpl KSB7Ci0JdWludDY0X3QgZXBvY2g7Ci0Jc2l6ZV90IHRjYWNoZV9ieXRlcywgdGNhY2hlX3N0YXNo ZWRfYnl0ZXM7Ci0Jc2l6ZV90IHN6ID0gc2l6ZW9mKHRjYWNoZV9ieXRlcyk7Ci0KLQl2b2lkICpw dHIgPSBtYWxsb2N4KHVzaXplLCAwKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImVwb2NoIiwg TlVMTCwgTlVMTCwgKHZvaWQgKikmZXBvY2gsIHNpemVvZihlcG9jaCkpLAotCSAgICAwLCAiVW5l eHBlY3RlZCBtYWxsY3RsKCkgZmFpbHVyZSIpOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoCi0JICAg ICJzdGF0cy5hcmVuYXMuIiBTVFJJTkdJRlkoTUFMTENUTF9BUkVOQVNfQUxMKSAiLnRjYWNoZV9i eXRlcyIsCi0JICAgICZ0Y2FjaGVfYnl0ZXMsICZzeiwgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVk IG1hbGxjdGwgZmFpbHVyZSIpOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoCi0JICAgICJzdGF0cy5h cmVuYXMuIiBTVFJJTkdJRlkoTUFMTENUTF9BUkVOQVNfQUxMKQotCSAgICAiLnRjYWNoZV9zdGFz aGVkX2J5dGVzIiwgJnRjYWNoZV9zdGFzaGVkX2J5dGVzLCAmc3osIE5VTEwsIDApLCAwLAotCSAg ICAiVW5leHBlY3RlZCBtYWxsY3RsIGZhaWx1cmUiKTsKLQlzaXplX3QgdGNhY2hlX2J5dGVzX2Jl Zm9yZSA9IHRjYWNoZV9ieXRlcyArIHRjYWNoZV9zdGFzaGVkX2J5dGVzOwotCWRhbGxvY3gocHRy LCAwKTsKLQotCWV4cGVjdF9kX2VxKG1hbGxjdGwoImVwb2NoIiwgTlVMTCwgTlVMTCwgKHZvaWQg KikmZXBvY2gsIHNpemVvZihlcG9jaCkpLAotCSAgICAwLCAiVW5leHBlY3RlZCBtYWxsY3RsKCkg ZmFpbHVyZSIpOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoCi0JICAgICJzdGF0cy5hcmVuYXMuIiBT VFJJTkdJRlkoTUFMTENUTF9BUkVOQVNfQUxMKSAiLnRjYWNoZV9ieXRlcyIsCi0JICAgICZ0Y2Fj aGVfYnl0ZXMsICZzeiwgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIp OwotCWFzc2VydF9kX2VxKG1hbGxjdGwoCi0JICAgICJzdGF0cy5hcmVuYXMuIiBTVFJJTkdJRlko TUFMTENUTF9BUkVOQVNfQUxMKQotCSAgICAiLnRjYWNoZV9zdGFzaGVkX2J5dGVzIiwgJnRjYWNo ZV9zdGFzaGVkX2J5dGVzLCAmc3osIE5VTEwsIDApLCAwLAotCSAgICAiVW5leHBlY3RlZCBtYWxs Y3RsIGZhaWx1cmUiKTsKLQlzaXplX3QgdGNhY2hlX2J5dGVzX2FmdGVyID0gdGNhY2hlX2J5dGVz ICsgdGNhY2hlX3N0YXNoZWRfYnl0ZXM7Ci0JYXNzZXJ0X3p1X2VxKHRjYWNoZV9ieXRlc19hZnRl ciAtIHRjYWNoZV9ieXRlc19iZWZvcmUsCi0JICAgIHVzaXplLCAiSW5jb3JyZWN0bHkgYXR0cmli dXRlZCBhIGZyZWUiKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3N0YXRzX3RjYWNoZV9ieXRlc19z bWFsbCkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3N0YXRzKTsKLQl0ZXN0X3NraXBfaWYoIW9w dF90Y2FjaGUpOwotCXRlc3Rfc2tpcF9pZihvcHRfdGNhY2hlX21heCA8IFNDX1NNQUxMX01BWENM QVNTKTsKLQotCXRlc3RfdGNhY2hlX2J5dGVzX2Zvcl91c2l6ZShTQ19TTUFMTF9NQVhDTEFTUyk7 Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3Rfc3RhdHNfdGNhY2hlX2J5dGVzX2xhcmdl KSB7Ci0JdGVzdF9za2lwX2lmKCFjb25maWdfc3RhdHMpOwotCXRlc3Rfc2tpcF9pZighb3B0X3Rj YWNoZSk7Ci0JdGVzdF9za2lwX2lmKG9wdF90Y2FjaGVfbWF4IDwgU0NfTEFSR0VfTUlOQ0xBU1Mp OwotCi0JdGVzdF90Y2FjaGVfYnl0ZXNfZm9yX3VzaXplKFNDX0xBUkdFX01JTkNMQVNTKTsKLX0K LVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3Rfbm9fcmVlbnRyYW5j eSgKLQkgICAgdGVzdF9zdGF0c19zdW1tYXJ5LAotCSAgICB0ZXN0X3N0YXRzX2xhcmdlLAotCSAg ICB0ZXN0X3N0YXRzX2FyZW5hc19zdW1tYXJ5LAotCSAgICB0ZXN0X3N0YXRzX2FyZW5hc19zbWFs bCwKLQkgICAgdGVzdF9zdGF0c19hcmVuYXNfbGFyZ2UsCi0JICAgIHRlc3Rfc3RhdHNfYXJlbmFz X2JpbnMsCi0JICAgIHRlc3Rfc3RhdHNfYXJlbmFzX2xleHRlbnRzLAotCSAgICB0ZXN0X3N0YXRz X3RjYWNoZV9ieXRlc19zbWFsbCwKLQkgICAgdGVzdF9zdGF0c190Y2FjaGVfYnl0ZXNfbGFyZ2Up OwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC9zdGF0c19wcmludC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L3N0YXRzX3ByaW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDNiMzE3NzUuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L3N0YXRzX3ByaW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5 OTkgKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotCi0jaW5jbHVkZSAi amVtYWxsb2MvaW50ZXJuYWwvdXRpbC5oIgotCi10eXBlZGVmIGVudW0gewotCVRPS0VOX1RZUEVf Tk9ORSwKLQlUT0tFTl9UWVBFX0VSUk9SLAotCVRPS0VOX1RZUEVfRU9JLAotCVRPS0VOX1RZUEVf TlVMTCwKLQlUT0tFTl9UWVBFX0ZBTFNFLAotCVRPS0VOX1RZUEVfVFJVRSwKLQlUT0tFTl9UWVBF X0xCUkFDS0VULAotCVRPS0VOX1RZUEVfUkJSQUNLRVQsCi0JVE9LRU5fVFlQRV9MQlJBQ0UsCi0J VE9LRU5fVFlQRV9SQlJBQ0UsCi0JVE9LRU5fVFlQRV9DT0xPTiwKLQlUT0tFTl9UWVBFX0NPTU1B LAotCVRPS0VOX1RZUEVfU1RSSU5HLAotCVRPS0VOX1RZUEVfTlVNQkVSCi19IHRva2VuX3R5cGVf dDsKLQotdHlwZWRlZiBzdHJ1Y3QgcGFyc2VyX3MgcGFyc2VyX3Q7Ci10eXBlZGVmIHN0cnVjdCB7 Ci0JcGFyc2VyX3QJKnBhcnNlcjsKLQl0b2tlbl90eXBlX3QJdG9rZW5fdHlwZTsKLQlzaXplX3QJ CXBvczsKLQlzaXplX3QJCWxlbjsKLQlzaXplX3QJCWxpbmU7Ci0Jc2l6ZV90CQljb2w7Ci19IHRv a2VuX3Q7Ci0KLXN0cnVjdCBwYXJzZXJfcyB7Ci0JYm9vbCB2ZXJib3NlOwotCWNoYXIJKmJ1Zjsg LyogJ1wwJy10ZXJtaW5hdGVkLiAqLwotCXNpemVfdAlsZW47IC8qIE51bWJlciBvZiBjaGFyYWN0 ZXJzIHByZWNlZGluZyAnXDAnIGluIGJ1Zi4gKi8KLQlzaXplX3QJcG9zOwotCXNpemVfdAlsaW5l OwotCXNpemVfdAljb2w7Ci0JdG9rZW5fdAl0b2tlbjsKLX07Ci0KLXN0YXRpYyB2b2lkCi10b2tl bl9pbml0KHRva2VuX3QgKnRva2VuLCBwYXJzZXJfdCAqcGFyc2VyLCB0b2tlbl90eXBlX3QgdG9r ZW5fdHlwZSwKLSAgICBzaXplX3QgcG9zLCBzaXplX3QgbGVuLCBzaXplX3QgbGluZSwgc2l6ZV90 IGNvbCkgewotCXRva2VuLT5wYXJzZXIgPSBwYXJzZXI7Ci0JdG9rZW4tPnRva2VuX3R5cGUgPSB0 b2tlbl90eXBlOwotCXRva2VuLT5wb3MgPSBwb3M7Ci0JdG9rZW4tPmxlbiA9IGxlbjsKLQl0b2tl bi0+bGluZSA9IGxpbmU7Ci0JdG9rZW4tPmNvbCA9IGNvbDsKLX0KLQotc3RhdGljIHZvaWQKLXRv a2VuX2Vycm9yKHRva2VuX3QgKnRva2VuKSB7Ci0JaWYgKCF0b2tlbi0+cGFyc2VyLT52ZXJib3Nl KSB7Ci0JCXJldHVybjsKLQl9Ci0Jc3dpdGNoICh0b2tlbi0+dG9rZW5fdHlwZSkgewotCWNhc2Ug VE9LRU5fVFlQRV9OT05FOgotCQlub3RfcmVhY2hlZCgpOwotCWNhc2UgVE9LRU5fVFlQRV9FUlJP UjoKLQkJbWFsbG9jX3ByaW50ZigiJXp1OiV6dTogVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gdG9r ZW46ICIsCi0JCSAgICB0b2tlbi0+bGluZSwgdG9rZW4tPmNvbCk7Ci0JCWJyZWFrOwotCWRlZmF1 bHQ6Ci0JCW1hbGxvY19wcmludGYoIiV6dTolenU6IFVuZXhwZWN0ZWQgdG9rZW46ICIsIHRva2Vu LT5saW5lLAotCQkgICAgdG9rZW4tPmNvbCk7Ci0JCWJyZWFrOwotCX0KLQlVTlVTRUQgc3NpemVf dCBlcnIgPSBtYWxsb2Nfd3JpdGVfZmQoU1RERVJSX0ZJTEVOTywKLQkgICAgJnRva2VuLT5wYXJz ZXItPmJ1Zlt0b2tlbi0+cG9zXSwgdG9rZW4tPmxlbik7Ci0JbWFsbG9jX3ByaW50ZigiXG4iKTsK LX0KLQotc3RhdGljIHZvaWQKLXBhcnNlcl9pbml0KHBhcnNlcl90ICpwYXJzZXIsIGJvb2wgdmVy Ym9zZSkgewotCXBhcnNlci0+dmVyYm9zZSA9IHZlcmJvc2U7Ci0JcGFyc2VyLT5idWYgPSBOVUxM OwotCXBhcnNlci0+bGVuID0gMDsKLQlwYXJzZXItPnBvcyA9IDA7Ci0JcGFyc2VyLT5saW5lID0g MTsKLQlwYXJzZXItPmNvbCA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wYXJzZXJfZmluaShwYXJz ZXJfdCAqcGFyc2VyKSB7Ci0JaWYgKHBhcnNlci0+YnVmICE9IE5VTEwpIHsKLQkJZGFsbG9jeChw YXJzZXItPmJ1ZiwgTUFMTE9DWF9UQ0FDSEVfTk9ORSk7Ci0JfQotfQotCi1zdGF0aWMgYm9vbAot cGFyc2VyX2FwcGVuZChwYXJzZXJfdCAqcGFyc2VyLCBjb25zdCBjaGFyICpzdHIpIHsKLQlzaXpl X3QgbGVuID0gc3RybGVuKHN0cik7Ci0JY2hhciAqYnVmID0gKHBhcnNlci0+YnVmID09IE5VTEwp ID8gbWFsbG9jeChsZW4gKyAxLAotCSAgICBNQUxMT0NYX1RDQUNIRV9OT05FKSA6IHJhbGxvY3go cGFyc2VyLT5idWYsIHBhcnNlci0+bGVuICsgbGVuICsgMSwKLQkgICAgTUFMTE9DWF9UQ0FDSEVf Tk9ORSk7Ci0JaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQltZW1jcHko JmJ1ZltwYXJzZXItPmxlbl0sIHN0ciwgbGVuICsgMSk7Ci0JcGFyc2VyLT5idWYgPSBidWY7Ci0J cGFyc2VyLT5sZW4gKz0gbGVuOwotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wKLXBh cnNlcl90b2tlbml6ZShwYXJzZXJfdCAqcGFyc2VyKSB7Ci0JZW51bSB7Ci0JCVNUQVRFX1NUQVJU LAotCQlTVEFURV9FT0ksCi0JCVNUQVRFX04sIFNUQVRFX05VLCBTVEFURV9OVUwsIFNUQVRFX05V TEwsCi0JCVNUQVRFX0YsIFNUQVRFX0ZBLCBTVEFURV9GQUwsIFNUQVRFX0ZBTFMsIFNUQVRFX0ZB TFNFLAotCQlTVEFURV9ULCBTVEFURV9UUiwgU1RBVEVfVFJVLCBTVEFURV9UUlVFLAotCQlTVEFU RV9MQlJBQ0tFVCwKLQkJU1RBVEVfUkJSQUNLRVQsCi0JCVNUQVRFX0xCUkFDRSwKLQkJU1RBVEVf UkJSQUNFLAotCQlTVEFURV9DT0xPTiwKLQkJU1RBVEVfQ09NTUEsCi0JCVNUQVRFX0NIQVJTLAot CQlTVEFURV9DSEFSX0VTQ0FQRSwKLQkJU1RBVEVfQ0hBUl9VLCBTVEFURV9DSEFSX1VELCBTVEFU RV9DSEFSX1VERCwgU1RBVEVfQ0hBUl9VRERELAotCQlTVEFURV9TVFJJTkcsCi0JCVNUQVRFX01J TlVTLAotCQlTVEFURV9MRUFESU5HX1pFUk8sCi0JCVNUQVRFX0RJR0lUUywKLQkJU1RBVEVfREVD SU1BTCwKLQkJU1RBVEVfRlJBQ19ESUdJVFMsCi0JCVNUQVRFX0VYUCwKLQkJU1RBVEVfRVhQX1NJ R04sCi0JCVNUQVRFX0VYUF9ESUdJVFMsCi0JCVNUQVRFX0FDQ0VQVAotCX0gc3RhdGUgPSBTVEFU RV9TVEFSVDsKLQlzaXplX3QgdG9rZW5fcG9zIEpFTUFMTE9DX0NDX1NJTEVOQ0VfSU5JVCgwKTsK LQlzaXplX3QgdG9rZW5fbGluZSBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoMSk7Ci0Jc2l6ZV90 IHRva2VuX2NvbCBKRU1BTExPQ19DQ19TSUxFTkNFX0lOSVQoMCk7Ci0KLQlleHBlY3RfenVfbGUo cGFyc2VyLT5wb3MsIHBhcnNlci0+bGVuLAotCSAgICAiUG9zaXRpb24gaXMgcGFzdCBlbmQgb2Yg YnVmZmVyIik7Ci0KLQl3aGlsZSAoc3RhdGUgIT0gU1RBVEVfQUNDRVBUKSB7Ci0JCWNoYXIgYyA9 IHBhcnNlci0+YnVmW3BhcnNlci0+cG9zXTsKLQotCQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCWNhc2Ug U1RBVEVfU1RBUlQ6Ci0JCQl0b2tlbl9wb3MgPSBwYXJzZXItPnBvczsKLQkJCXRva2VuX2xpbmUg PSBwYXJzZXItPmxpbmU7Ci0JCQl0b2tlbl9jb2wgPSBwYXJzZXItPmNvbDsKLQkJCXN3aXRjaCAo YykgewotCQkJY2FzZSAnICc6IGNhc2UgJ1xiJzogY2FzZSAnXG4nOiBjYXNlICdccic6IGNhc2Ug J1x0JzoKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1wwJzoKLQkJCQlzdGF0ZSA9IFNUQVRFX0VPSTsK LQkJCQlicmVhazsKLQkJCWNhc2UgJ24nOgotCQkJCXN0YXRlID0gU1RBVEVfTjsKLQkJCQlicmVh azsKLQkJCWNhc2UgJ2YnOgotCQkJCXN0YXRlID0gU1RBVEVfRjsKLQkJCQlicmVhazsKLQkJCWNh c2UgJ3QnOgotCQkJCXN0YXRlID0gU1RBVEVfVDsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1snOgot CQkJCXN0YXRlID0gU1RBVEVfTEJSQUNLRVQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICddJzoKLQkJ CQlzdGF0ZSA9IFNUQVRFX1JCUkFDS0VUOwotCQkJCWJyZWFrOwotCQkJY2FzZSAneyc6Ci0JCQkJ c3RhdGUgPSBTVEFURV9MQlJBQ0U7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICd9JzoKLQkJCQlzdGF0 ZSA9IFNUQVRFX1JCUkFDRTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJzonOgotCQkJCXN0YXRlID0g U1RBVEVfQ09MT047Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICcsJzoKLQkJCQlzdGF0ZSA9IFNUQVRF X0NPTU1BOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnIic6Ci0JCQkJc3RhdGUgPSBTVEFURV9DSEFS UzsKLQkJCQlicmVhazsKLQkJCWNhc2UgJy0nOgotCQkJCXN0YXRlID0gU1RBVEVfTUlOVVM7Ci0J CQkJYnJlYWs7Ci0JCQljYXNlICcwJzoKLQkJCQlzdGF0ZSA9IFNUQVRFX0xFQURJTkdfWkVSTzsK LQkJCQlicmVhazsKLQkJCWNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgot CQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJ CXN0YXRlID0gU1RBVEVfRElHSVRTOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl0b2tl bl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCi0JCQkJICAgIFRPS0VOX1RZUEVfRVJST1Is IHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCi0JCQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9s aW5lLCB0b2tlbl9jb2wpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNh c2UgU1RBVEVfRU9JOgotCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAotCQkJ ICAgIFRPS0VOX1RZUEVfRU9JLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0KLQkJCSAgICB0b2tl bl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7Ci0JCQlzdGF0ZSA9IFNUQVRFX0FDQ0VQVDsK LQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX046Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgJ3Un OgotCQkJCXN0YXRlID0gU1RBVEVfTlU7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXRv a2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQRV9FUlJP UiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2Vu X2xpbmUsIHRva2VuX2NvbCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJ Y2FzZSBTVEFURV9OVToKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSAnbCc6Ci0JCQkJc3RhdGUg PSBTVEFURV9OVUw7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXRva2VuX2luaXQoJnBh cnNlci0+dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9rZW5fcG9z LCBwYXJzZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRva2Vu X2NvbCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTVEFURV9O VUw6Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgJ2wnOgotCQkJCXN0YXRlID0gU1RBVEVfTlVM TDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tl biwgcGFyc2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+ cG9zICsgMQotCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKLQkJ CQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX05VTEw6Ci0JCQlz d2l0Y2ggKGMpIHsKLQkJCWNhc2UgJyAnOiBjYXNlICdcYic6IGNhc2UgJ1xuJzogY2FzZSAnXHIn OiBjYXNlICdcdCc6Ci0JCQljYXNlICdcMCc6Ci0JCQljYXNlICdbJzogY2FzZSAnXSc6IGNhc2Ug J3snOiBjYXNlICd9JzogY2FzZSAnOic6Ci0JCQljYXNlICcsJzoKLQkJCQlicmVhazsKLQkJCWRl ZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAotCQkJCSAgICBU T0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9zICsgMQotCQkJCSAgICAtIHRv a2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0K LQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwgVE9LRU5fVFlQRV9OVUxMLAot CQkJICAgIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsCi0J CQkgICAgdG9rZW5fY29sKTsKLQkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOwotCQkJYnJlYWs7Ci0J CWNhc2UgU1RBVEVfRjoKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSAnYSc6Ci0JCQkJc3RhdGUg PSBTVEFURV9GQTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFy c2VyLT50b2tlbiwgcGFyc2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3Ms IHBhcnNlci0+cG9zICsgMQotCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5f Y29sKTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX0ZB OgotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlICdsJzoKLQkJCQlzdGF0ZSA9IFNUQVRFX0ZBTDsK LQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwg cGFyc2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9z ICsgMQotCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKLQkJCQly ZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX0ZBTDoKLQkJCXN3aXRj aCAoYykgewotCQkJY2FzZSAncyc6Ci0JCQkJc3RhdGUgPSBTVEFURV9GQUxTOwotCQkJCWJyZWFr OwotCQkJZGVmYXVsdDoKLQkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCi0J CQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCi0JCQkJ ICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOwotCQkJCXJldHVybiB0cnVl OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfRkFMUzoKLQkJCXN3aXRjaCAoYykgewot CQkJY2FzZSAnZSc6Ci0JCQkJc3RhdGUgPSBTVEFURV9GQUxTRTsKLQkJCQlicmVhazsKLQkJCWRl ZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAotCQkJCSAgICBU T0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9zICsgMQotCQkJCSAgICAtIHRv a2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0K LQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX0ZBTFNFOgotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNl ICcgJzogY2FzZSAnXGInOiBjYXNlICdcbic6IGNhc2UgJ1xyJzogY2FzZSAnXHQnOgotCQkJY2Fz ZSAnXDAnOgotCQkJY2FzZSAnWyc6IGNhc2UgJ10nOiBjYXNlICd7JzogY2FzZSAnfSc6IGNhc2Ug JzonOgotCQkJY2FzZSAnLCc6Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXRva2VuX2lu aXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9r ZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUs IHRva2VuX2NvbCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQl0b2tlbl9pbml0KCZwYXJz ZXItPnRva2VuLCBwYXJzZXIsCi0JCQkgICAgVE9LRU5fVFlQRV9GQUxTRSwgdG9rZW5fcG9zLCBw YXJzZXItPnBvcyAtCi0JCQkgICAgdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOwot CQkJc3RhdGUgPSBTVEFURV9BQ0NFUFQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTVEFURV9UOgotCQkJ c3dpdGNoIChjKSB7Ci0JCQljYXNlICdyJzoKLQkJCQlzdGF0ZSA9IFNUQVRFX1RSOwotCQkJCWJy ZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIs Ci0JCQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCi0J CQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOwotCQkJCXJldHVybiB0 cnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfVFI6Ci0JCQlzd2l0Y2ggKGMpIHsK LQkJCWNhc2UgJ3UnOgotCQkJCXN0YXRlID0gU1RBVEVfVFJVOwotCQkJCWJyZWFrOwotCQkJZGVm YXVsdDoKLQkJCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCi0JCQkJICAgIFRP S0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgKyAxCi0JCQkJICAgIC0gdG9r ZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfQot CQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfVFJVOgotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlICdl JzoKLQkJCQlzdGF0ZSA9IFNUQVRFX1RSVUU7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJ CXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQRV9F UlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3MsIHRv a2VuX2xpbmUsIHRva2VuX2NvbCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQlicmVhazsK LQkJY2FzZSBTVEFURV9UUlVFOgotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlICcgJzogY2FzZSAn XGInOiBjYXNlICdcbic6IGNhc2UgJ1xyJzogY2FzZSAnXHQnOgotCQkJY2FzZSAnXDAnOgotCQkJ Y2FzZSAnWyc6IGNhc2UgJ10nOiBjYXNlICd7JzogY2FzZSAnfSc6IGNhc2UgJzonOgotCQkJY2Fz ZSAnLCc6Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXRva2VuX2luaXQoJnBhcnNlci0+ dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJz ZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7 Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBw YXJzZXIsIFRPS0VOX1RZUEVfVFJVRSwKLQkJCSAgICB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0g dG9rZW5fcG9zLCB0b2tlbl9saW5lLAotCQkJICAgIHRva2VuX2NvbCk7Ci0JCQlzdGF0ZSA9IFNU QVRFX0FDQ0VQVDsKLQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX0xCUkFDS0VUOgotCQkJdG9rZW5f aW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLCBUT0tFTl9UWVBFX0xCUkFDS0VULAotCQkJICAg IHRva2VuX3BvcywgcGFyc2VyLT5wb3MgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsCi0JCQkgICAg dG9rZW5fY29sKTsKLQkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOwotCQkJYnJlYWs7Ci0JCWNhc2Ug U1RBVEVfUkJSQUNLRVQ6Ci0JCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsIFRP S0VOX1RZUEVfUkJSQUNLRVQsCi0JCQkgICAgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyAtIHRva2Vu X3BvcywgdG9rZW5fbGluZSwKLQkJCSAgICB0b2tlbl9jb2wpOwotCQkJc3RhdGUgPSBTVEFURV9B Q0NFUFQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTVEFURV9MQlJBQ0U6Ci0JCQl0b2tlbl9pbml0KCZw YXJzZXItPnRva2VuLCBwYXJzZXIsIFRPS0VOX1RZUEVfTEJSQUNFLAotCQkJICAgIHRva2VuX3Bv cywgcGFyc2VyLT5wb3MgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsCi0JCQkgICAgdG9rZW5fY29s KTsKLQkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfUkJS QUNFOgotCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLCBUT0tFTl9UWVBFX1JC UkFDRSwKLQkJCSAgICB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0gdG9rZW5fcG9zLCB0b2tlbl9s aW5lLAotCQkJICAgIHRva2VuX2NvbCk7Ci0JCQlzdGF0ZSA9IFNUQVRFX0FDQ0VQVDsKLQkJCWJy ZWFrOwotCQljYXNlIFNUQVRFX0NPTE9OOgotCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwg cGFyc2VyLCBUT0tFTl9UWVBFX0NPTE9OLAotCQkJICAgIHRva2VuX3BvcywgcGFyc2VyLT5wb3Mg LSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsCi0JCQkgICAgdG9rZW5fY29sKTsKLQkJCXN0YXRlID0g U1RBVEVfQUNDRVBUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfQ09NTUE6Ci0JCQl0b2tlbl9p bml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsIFRPS0VOX1RZUEVfQ09NTUEsCi0JCQkgICAgdG9r ZW5fcG9zLCBwYXJzZXItPnBvcyAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwKLQkJCSAgICB0b2tl bl9jb2wpOwotCQkJc3RhdGUgPSBTVEFURV9BQ0NFUFQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTVEFU RV9DSEFSUzoKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSAnXFwnOgotCQkJCXN0YXRlID0gU1RB VEVfQ0hBUl9FU0NBUEU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICciJzoKLQkJCQlzdGF0ZSA9IFNU QVRFX1NUUklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgwMDogY2FzZSAweDAxOiBjYXNlIDB4 MDI6IGNhc2UgMHgwMzogY2FzZSAweDA0OgotCQkJY2FzZSAweDA1OiBjYXNlIDB4MDY6IGNhc2Ug MHgwNzogY2FzZSAweDA4OiBjYXNlIDB4MDk6Ci0JCQljYXNlIDB4MGE6IGNhc2UgMHgwYjogY2Fz ZSAweDBjOiBjYXNlIDB4MGQ6IGNhc2UgMHgwZToKLQkJCWNhc2UgMHgwZjogY2FzZSAweDEwOiBj YXNlIDB4MTE6IGNhc2UgMHgxMjogY2FzZSAweDEzOgotCQkJY2FzZSAweDE0OiBjYXNlIDB4MTU6 IGNhc2UgMHgxNjogY2FzZSAweDE3OiBjYXNlIDB4MTg6Ci0JCQljYXNlIDB4MTk6IGNhc2UgMHgx YTogY2FzZSAweDFiOiBjYXNlIDB4MWM6IGNhc2UgMHgxZDoKLQkJCWNhc2UgMHgxZTogY2FzZSAw eDFmOgotCQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9L RU5fVFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tl bl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQlkZWZh dWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfQ0hBUl9FU0NB UEU6Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgJyInOiBjYXNlICdcXCc6IGNhc2UgJy8nOiBj YXNlICdiJzogY2FzZSAnbic6Ci0JCQljYXNlICdyJzogY2FzZSAndCc6Ci0JCQkJc3RhdGUgPSBT VEFURV9DSEFSUzsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ3UnOgotCQkJCXN0YXRlID0gU1RBVEVf Q0hBUl9VOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl0b2tlbl9pbml0KCZwYXJzZXIt PnRva2VuLCBwYXJzZXIsCi0JCQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFy c2VyLT5wb3MgKyAxCi0JCQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wp OwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfQ0hBUl9V OgotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNl ICczJzogY2FzZSAnNCc6Ci0JCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4 JzogY2FzZSAnOSc6Ci0JCQljYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzog Y2FzZSAnZSc6Ci0JCQljYXNlICdmJzoKLQkJCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6 IGNhc2UgJ0QnOiBjYXNlICdFJzoKLQkJCWNhc2UgJ0YnOgotCQkJCXN0YXRlID0gU1RBVEVfQ0hB Ul9VRDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50 b2tlbiwgcGFyc2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNl ci0+cG9zICsgMQotCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsK LQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX0NIQVJfVUQ6 Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2Ug JzMnOiBjYXNlICc0JzoKLQkJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgn OiBjYXNlICc5JzoKLQkJCWNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6IGNhc2UgJ2QnOiBj YXNlICdlJzoKLQkJCWNhc2UgJ2YnOgotCQkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzog Y2FzZSAnRCc6IGNhc2UgJ0UnOgotCQkJY2FzZSAnRic6Ci0JCQkJc3RhdGUgPSBTVEFURV9DSEFS X1VERDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50 b2tlbiwgcGFyc2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3MsIHBhcnNl ci0+cG9zICsgMQotCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsK LQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX0NIQVJfVURE OgotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNl ICczJzogY2FzZSAnNCc6Ci0JCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4 JzogY2FzZSAnOSc6Ci0JCQljYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzog Y2FzZSAnZSc6Ci0JCQljYXNlICdmJzoKLQkJCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6 IGNhc2UgJ0QnOiBjYXNlICdFJzoKLQkJCWNhc2UgJ0YnOgotCQkJCXN0YXRlID0gU1RBVEVfQ0hB Ul9VREREOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl0b2tlbl9pbml0KCZwYXJzZXIt PnRva2VuLCBwYXJzZXIsCi0JCQkJICAgIFRPS0VOX1RZUEVfRVJST1IsIHRva2VuX3BvcywgcGFy c2VyLT5wb3MgKyAxCi0JCQkJICAgIC0gdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tlbl9jb2wp OwotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfQ0hBUl9V REREOgotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBj YXNlICczJzogY2FzZSAnNCc6Ci0JCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNl ICc4JzogY2FzZSAnOSc6Ci0JCQljYXNlICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdk JzogY2FzZSAnZSc6Ci0JCQljYXNlICdmJzoKLQkJCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAn Qyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKLQkJCWNhc2UgJ0YnOgotCQkJCXN0YXRlID0gU1RBVEVf Q0hBUlM7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXRva2VuX2luaXQoJnBhcnNlci0+ dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJz ZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7 Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTVEFURV9TVFJJTkc6 Ci0JCQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsIFRPS0VOX1RZUEVfU1RSSU5H LAotCQkJICAgIHRva2VuX3BvcywgcGFyc2VyLT5wb3MgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUs Ci0JCQkgICAgdG9rZW5fY29sKTsKLQkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOwotCQkJYnJlYWs7 Ci0JCWNhc2UgU1RBVEVfTUlOVVM6Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgJzAnOgotCQkJ CXN0YXRlID0gU1RBVEVfTEVBRElOR19aRVJPOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnMSc6IGNh c2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0JCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2Ug JzcnOiBjYXNlICc4JzogY2FzZSAnOSc6Ci0JCQkJc3RhdGUgPSBTVEFURV9ESUdJVFM7Ci0JCQkJ YnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNl ciwKLQkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEK LQkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRva2VuX2NvbCk7Ci0JCQkJcmV0dXJu IHRydWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTVEFURV9MRUFESU5HX1pFUk86Ci0JCQlz d2l0Y2ggKGMpIHsKLQkJCWNhc2UgJy4nOgotCQkJCXN0YXRlID0gU1RBVEVfREVDSU1BTDsKLQkJ CQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFyc2VyLT50b2tlbiwgcGFy c2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX05VTUJFUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyAt Ci0JCQkJICAgIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5fY29sKTsKLQkJCQlzdGF0ZSA9 IFNUQVRFX0FDQ0VQVDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNUQVRF X0RJR0lUUzoKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcy JzogY2FzZSAnMyc6IGNhc2UgJzQnOgotCQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3Jzog Y2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCWJyZWFrOwotCQkJY2FzZSAnLic6Ci0JCQkJc3RhdGUg PSBTVEFURV9ERUNJTUFMOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl0b2tlbl9pbml0 KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCi0JCQkJICAgIFRPS0VOX1RZUEVfTlVNQkVSLCB0b2tl bl9wb3MsIHBhcnNlci0+cG9zIC0KLQkJCQkgICAgdG9rZW5fcG9zLCB0b2tlbl9saW5lLCB0b2tl bl9jb2wpOwotCQkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOwotCQkJCWJyZWFrOwotCQkJfQotCQkJ YnJlYWs7Ci0JCWNhc2UgU1RBVEVfREVDSU1BTDoKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSAn MCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotCQkJY2FzZSAnNSc6 IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCXN0YXRlID0gU1RB VEVfRlJBQ19ESUdJVFM7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXRva2VuX2luaXQo JnBhcnNlci0+dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQRV9FUlJPUiwgdG9rZW5f cG9zLCBwYXJzZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3MsIHRva2VuX2xpbmUsIHRv a2VuX2NvbCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTVEFU RV9GUkFDX0RJR0lUUzoKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSAnMCc6IGNhc2UgJzEnOiBj YXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotCQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNl ICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCWJyZWFrOwotCQkJY2FzZSAnZSc6IGNhc2Ug J0UnOgotCQkJCXN0YXRlID0gU1RBVEVfRVhQOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJ CQl0b2tlbl9pbml0KCZwYXJzZXItPnRva2VuLCBwYXJzZXIsCi0JCQkJICAgIFRPS0VOX1RZUEVf TlVNQkVSLCB0b2tlbl9wb3MsIHBhcnNlci0+cG9zIC0KLQkJCQkgICAgdG9rZW5fcG9zLCB0b2tl bl9saW5lLCB0b2tlbl9jb2wpOwotCQkJCXN0YXRlID0gU1RBVEVfQUNDRVBUOwotCQkJCWJyZWFr OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU1RBVEVfRVhQOgotCQkJc3dpdGNoIChjKSB7Ci0J CQljYXNlICctJzogY2FzZSAnKyc6Ci0JCQkJc3RhdGUgPSBTVEFURV9FWFBfU0lHTjsKLQkJCQli cmVhazsKLQkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0 JzoKLQkJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoK LQkJCQlzdGF0ZSA9IFNUQVRFX0VYUF9ESUdJVFM7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0Ogot CQkJCXRva2VuX2luaXQoJnBhcnNlci0+dG9rZW4sIHBhcnNlciwKLQkJCQkgICAgVE9LRU5fVFlQ RV9FUlJPUiwgdG9rZW5fcG9zLCBwYXJzZXItPnBvcyArIDEKLQkJCQkgICAgLSB0b2tlbl9wb3Ms IHRva2VuX2xpbmUsIHRva2VuX2NvbCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0JCQlicmVh azsKLQkJY2FzZSBTVEFURV9FWFBfU0lHTjoKLQkJCXN3aXRjaCAoYykgewotCQkJY2FzZSAnMCc6 IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgotCQkJY2FzZSAnNSc6IGNh c2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCXN0YXRlID0gU1RBVEVf RVhQX0RJR0lUUzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5faW5pdCgmcGFy c2VyLT50b2tlbiwgcGFyc2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX0VSUk9SLCB0b2tlbl9wb3Ms IHBhcnNlci0+cG9zICsgMQotCQkJCSAgICAtIHRva2VuX3BvcywgdG9rZW5fbGluZSwgdG9rZW5f Y29sKTsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNUQVRFX0VY UF9ESUdJVFM6Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAn Mic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLQkJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6 IGNhc2UgJzgnOiBjYXNlICc5JzoKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG9rZW5f aW5pdCgmcGFyc2VyLT50b2tlbiwgcGFyc2VyLAotCQkJCSAgICBUT0tFTl9UWVBFX05VTUJFUiwg dG9rZW5fcG9zLCBwYXJzZXItPnBvcyAtCi0JCQkJICAgIHRva2VuX3BvcywgdG9rZW5fbGluZSwg dG9rZW5fY29sKTsKLQkJCQlzdGF0ZSA9IFNUQVRFX0FDQ0VQVDsKLQkJCQlicmVhazsKLQkJCX0K LQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbm90X3JlYWNoZWQoKTsKLQkJfQotCi0JCWlmIChz dGF0ZSAhPSBTVEFURV9BQ0NFUFQpIHsKLQkJCWlmIChjID09ICdcbicpIHsKLQkJCQlwYXJzZXIt PmxpbmUrKzsKLQkJCQlwYXJzZXItPmNvbCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCXBhcnNlci0+ Y29sKys7Ci0JCQl9Ci0JCQlwYXJzZXItPnBvcysrOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsK LX0KLQotc3RhdGljIGJvb2wJcGFyc2VyX3BhcnNlX2FycmF5KHBhcnNlcl90ICpwYXJzZXIpOwot c3RhdGljIGJvb2wJcGFyc2VyX3BhcnNlX29iamVjdChwYXJzZXJfdCAqcGFyc2VyKTsKLQotc3Rh dGljIGJvb2wKLXBhcnNlcl9wYXJzZV92YWx1ZShwYXJzZXJfdCAqcGFyc2VyKSB7Ci0Jc3dpdGNo IChwYXJzZXItPnRva2VuLnRva2VuX3R5cGUpIHsKLQljYXNlIFRPS0VOX1RZUEVfTlVMTDoKLQlj YXNlIFRPS0VOX1RZUEVfRkFMU0U6Ci0JY2FzZSBUT0tFTl9UWVBFX1RSVUU6Ci0JY2FzZSBUT0tF Tl9UWVBFX1NUUklORzoKLQljYXNlIFRPS0VOX1RZUEVfTlVNQkVSOgotCQlyZXR1cm4gZmFsc2U7 Ci0JY2FzZSBUT0tFTl9UWVBFX0xCUkFDRToKLQkJcmV0dXJuIHBhcnNlcl9wYXJzZV9vYmplY3Qo cGFyc2VyKTsKLQljYXNlIFRPS0VOX1RZUEVfTEJSQUNLRVQ6Ci0JCXJldHVybiBwYXJzZXJfcGFy c2VfYXJyYXkocGFyc2VyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0Jbm90X3Jl YWNoZWQoKTsKLX0KLQotc3RhdGljIGJvb2wKLXBhcnNlcl9wYXJzZV9wYWlyKHBhcnNlcl90ICpw YXJzZXIpIHsKLQlleHBlY3RfZF9lcShwYXJzZXItPnRva2VuLnRva2VuX3R5cGUsIFRPS0VOX1RZ UEVfU1RSSU5HLAotCSAgICAiUGFpciBzaG91bGQgc3RhcnQgd2l0aCBzdHJpbmciKTsKLQlpZiAo cGFyc2VyX3Rva2VuaXplKHBhcnNlcikpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCXN3aXRjaCAo cGFyc2VyLT50b2tlbi50b2tlbl90eXBlKSB7Ci0JY2FzZSBUT0tFTl9UWVBFX0NPTE9OOgotCQlp ZiAocGFyc2VyX3Rva2VuaXplKHBhcnNlcikpIHsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJl dHVybiBwYXJzZXJfcGFyc2VfdmFsdWUocGFyc2VyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gdHJ1 ZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sCi1wYXJzZXJfcGFyc2VfdmFsdWVzKHBhcnNlcl90ICpw YXJzZXIpIHsKLQlpZiAocGFyc2VyX3BhcnNlX3ZhbHVlKHBhcnNlcikpIHsKLQkJcmV0dXJuIHRy dWU7Ci0JfQotCi0Jd2hpbGUgKHRydWUpIHsKLQkJaWYgKHBhcnNlcl90b2tlbml6ZShwYXJzZXIp KSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlzd2l0Y2ggKHBhcnNlci0+dG9rZW4udG9rZW5f dHlwZSkgewotCQljYXNlIFRPS0VOX1RZUEVfQ09NTUE6Ci0JCQlpZiAocGFyc2VyX3Rva2VuaXpl KHBhcnNlcikpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQkJCWlmIChwYXJzZXJfcGFyc2Vf dmFsdWUocGFyc2VyKSkgewotCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNh c2UgVE9LRU5fVFlQRV9SQlJBQ0tFVDoKLQkJCXJldHVybiBmYWxzZTsKLQkJZGVmYXVsdDoKLQkJ CXJldHVybiB0cnVlOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgYm9vbAotcGFyc2VyX3BhcnNlX2Fy cmF5KHBhcnNlcl90ICpwYXJzZXIpIHsKLQlleHBlY3RfZF9lcShwYXJzZXItPnRva2VuLnRva2Vu X3R5cGUsIFRPS0VOX1RZUEVfTEJSQUNLRVQsCi0JICAgICJBcnJheSBzaG91bGQgc3RhcnQgd2l0 aCBbIik7Ci0JaWYgKHBhcnNlcl90b2tlbml6ZShwYXJzZXIpKSB7Ci0JCXJldHVybiB0cnVlOwot CX0KLQlzd2l0Y2ggKHBhcnNlci0+dG9rZW4udG9rZW5fdHlwZSkgewotCWNhc2UgVE9LRU5fVFlQ RV9SQlJBQ0tFVDoKLQkJcmV0dXJuIGZhbHNlOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBwYXJzZXJf cGFyc2VfdmFsdWVzKHBhcnNlcik7Ci0JfQotCW5vdF9yZWFjaGVkKCk7Ci19Ci0KLXN0YXRpYyBi b29sCi1wYXJzZXJfcGFyc2VfcGFpcnMocGFyc2VyX3QgKnBhcnNlcikgewotCWV4cGVjdF9kX2Vx KHBhcnNlci0+dG9rZW4udG9rZW5fdHlwZSwgVE9LRU5fVFlQRV9TVFJJTkcsCi0JICAgICJPYmpl Y3Qgc2hvdWxkIHN0YXJ0IHdpdGggc3RyaW5nIik7Ci0JaWYgKHBhcnNlcl9wYXJzZV9wYWlyKHBh cnNlcikpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0Jd2hpbGUgKHRydWUpIHsKLQkJaWYgKHBh cnNlcl90b2tlbml6ZShwYXJzZXIpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlzd2l0Y2gg KHBhcnNlci0+dG9rZW4udG9rZW5fdHlwZSkgewotCQljYXNlIFRPS0VOX1RZUEVfQ09NTUE6Ci0J CQlpZiAocGFyc2VyX3Rva2VuaXplKHBhcnNlcikpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0K LQkJCXN3aXRjaCAocGFyc2VyLT50b2tlbi50b2tlbl90eXBlKSB7Ci0JCQljYXNlIFRPS0VOX1RZ UEVfU1RSSU5HOgotCQkJCWlmIChwYXJzZXJfcGFyc2VfcGFpcihwYXJzZXIpKSB7Ci0JCQkJCXJl dHVybiB0cnVlOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIHRy dWU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBUT0tFTl9UWVBFX1JCUkFDRToKLQkJCXJldHVy biBmYWxzZTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotfQotCi1zdGF0 aWMgYm9vbAotcGFyc2VyX3BhcnNlX29iamVjdChwYXJzZXJfdCAqcGFyc2VyKSB7Ci0JZXhwZWN0 X2RfZXEocGFyc2VyLT50b2tlbi50b2tlbl90eXBlLCBUT0tFTl9UWVBFX0xCUkFDRSwKLQkgICAg Ik9iamVjdCBzaG91bGQgc3RhcnQgd2l0aCB7Iik7Ci0JaWYgKHBhcnNlcl90b2tlbml6ZShwYXJz ZXIpKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlzd2l0Y2ggKHBhcnNlci0+dG9rZW4udG9rZW5f dHlwZSkgewotCWNhc2UgVE9LRU5fVFlQRV9TVFJJTkc6Ci0JCXJldHVybiBwYXJzZXJfcGFyc2Vf cGFpcnMocGFyc2VyKTsKLQljYXNlIFRPS0VOX1RZUEVfUkJSQUNFOgotCQlyZXR1cm4gZmFsc2U7 Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIHRydWU7Ci0JfQotCW5vdF9yZWFjaGVkKCk7Ci19Ci0KLXN0 YXRpYyBib29sCi1wYXJzZXJfcGFyc2UocGFyc2VyX3QgKnBhcnNlcikgewotCWlmIChwYXJzZXJf dG9rZW5pemUocGFyc2VyKSkgewotCQlnb3RvIGxhYmVsX2Vycm9yOwotCX0KLQlpZiAocGFyc2Vy X3BhcnNlX3ZhbHVlKHBhcnNlcikpIHsKLQkJZ290byBsYWJlbF9lcnJvcjsKLQl9Ci0KLQlpZiAo cGFyc2VyX3Rva2VuaXplKHBhcnNlcikpIHsKLQkJZ290byBsYWJlbF9lcnJvcjsKLQl9Ci0Jc3dp dGNoIChwYXJzZXItPnRva2VuLnRva2VuX3R5cGUpIHsKLQljYXNlIFRPS0VOX1RZUEVfRU9JOgot CQlyZXR1cm4gZmFsc2U7Ci0JZGVmYXVsdDoKLQkJZ290byBsYWJlbF9lcnJvcjsKLQl9Ci0Jbm90 X3JlYWNoZWQoKTsKLQotbGFiZWxfZXJyb3I6Ci0JdG9rZW5fZXJyb3IoJnBhcnNlci0+dG9rZW4p OwotCXJldHVybiB0cnVlOwotfQotCi1URVNUX0JFR0lOKHRlc3RfanNvbl9wYXJzZXIpIHsKLQlz aXplX3QgaTsKLQljb25zdCBjaGFyICppbnZhbGlkX2lucHV0c1tdID0gewotCQkvKiBUb2tlbml6 ZXIgZXJyb3IgY2FzZSB0ZXN0cy4gKi8KLQkJInsgXCJzdHJpbmdcIjogWCB9IiwKLQkJInsgXCJz dHJpbmdcIjogblhsbCB9IiwKLQkJInsgXCJzdHJpbmdcIjogbnVYbCB9IiwKLQkJInsgXCJzdHJp bmdcIjogbnVsWCB9IiwKLQkJInsgXCJzdHJpbmdcIjogbnVsbFggfSIsCi0JCSJ7IFwic3RyaW5n XCI6IGZYbHNlIH0iLAotCQkieyBcInN0cmluZ1wiOiBmYVhzZSB9IiwKLQkJInsgXCJzdHJpbmdc IjogZmFsWGUgfSIsCi0JCSJ7IFwic3RyaW5nXCI6IGZhbHNYIH0iLAotCQkieyBcInN0cmluZ1wi OiBmYWxzZVggfSIsCi0JCSJ7IFwic3RyaW5nXCI6IHRYdWUgfSIsCi0JCSJ7IFwic3RyaW5nXCI6 IHRyWGUgfSIsCi0JCSJ7IFwic3RyaW5nXCI6IHRydVggfSIsCi0JCSJ7IFwic3RyaW5nXCI6IHRy dWVYIH0iLAotCQkieyBcInN0cmluZ1wiOiBcIlxuXCIgfSIsCi0JCSJ7IFwic3RyaW5nXCI6IFwi XFx6XCIgfSIsCi0JCSJ7IFwic3RyaW5nXCI6IFwiXFx1WDAwMFwiIH0iLAotCQkieyBcInN0cmlu Z1wiOiBcIlxcdTBYMDBcIiB9IiwKLQkJInsgXCJzdHJpbmdcIjogXCJcXHUwMFgwXCIgfSIsCi0J CSJ7IFwic3RyaW5nXCI6IFwiXFx1MDAwWFwiIH0iLAotCQkieyBcInN0cmluZ1wiOiAtWCB9IiwK LQkJInsgXCJzdHJpbmdcIjogMC5YIH0iLAotCQkieyBcInN0cmluZ1wiOiAwLjBlWCB9IiwKLQkJ InsgXCJzdHJpbmdcIjogMC4wZStYIH0iLAotCi0JCS8qIFBhcnNlciBlcnJvciB0ZXN0IGNhc2Vz LiAqLwotCQkie1wic3RyaW5nXCI6IH0iLAotCQkie1wic3RyaW5nXCIgfSIsCi0JCSJ7XCJzdHJp bmdcIjogWyAwIH0iLAotCQkie1wic3RyaW5nXCI6IHtcImFcIjowLCAxIH0gfSIsCi0JCSJ7XCJz dHJpbmdcIjoge1wiYVwiOjA6IH0gfSIsCi0JCSJ7IiwKLQkJInt9eyIsCi0JfTsKLQljb25zdCBj aGFyICp2YWxpZF9pbnB1dHNbXSA9IHsKLQkJLyogVG9rZW4gdGVzdHMuICovCi0JCSJudWxsIiwK LQkJImZhbHNlIiwKLQkJInRydWUiLAotCQkie30iLAotCQkie1wiYVwiOiAwfSIsCi0JCSJbXSIs Ci0JCSJbMCwgMV0iLAotCQkiMCIsCi0JCSIxIiwKLQkJIjEwIiwKLQkJIi0xMCIsCi0JCSIxMC4y MyIsCi0JCSIxMC4yM2U0IiwKLQkJIjEwLjIzZS00IiwKLQkJIjEwLjIzZSs0IiwKLQkJIjEwLjIz RTQiLAotCQkiMTAuMjNFLTQiLAotCQkiMTAuMjNFKzQiLAotCQkiLTEwLjIzIiwKLQkJIi0xMC4y M2U0IiwKLQkJIi0xMC4yM2UtNCIsCi0JCSItMTAuMjNlKzQiLAotCQkiLTEwLjIzRTQiLAotCQki LTEwLjIzRS00IiwKLQkJIi0xMC4yM0UrNCIsCi0JCSJcInZhbHVlXCIiLAotCQkiXCIgXFxcIiBc XC8gXFxiIFxcbiBcXHIgXFx0IFxcdTBhYmMgXFx1MURFRiBcIiIsCi0KLQkJLyogUGFyc2VyIHRl c3Qgd2l0aCB2YXJpb3VzIG5lc3RpbmcuICovCi0JCSJ7XCJhXCI6bnVsbCwgXCJiXCI6WzEsW3tc ImNcIjoyfSwzXV0sIFwiZFwiOntcImVcIjp0cnVlfX0iLAotCX07Ci0KLQlmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKGludmFsaWRfaW5wdXRzKS9zaXplb2YoY29uc3QgY2hhciAqKTsgaSsrKSB7Ci0J CWNvbnN0IGNoYXIgKmlucHV0ID0gaW52YWxpZF9pbnB1dHNbaV07Ci0JCXBhcnNlcl90IHBhcnNl cjsKLQkJcGFyc2VyX2luaXQoJnBhcnNlciwgZmFsc2UpOwotCQlleHBlY3RfZmFsc2UocGFyc2Vy X2FwcGVuZCgmcGFyc2VyLCBpbnB1dCksCi0JCSAgICAiVW5leHBlY3RlZCBpbnB1dCBhcHBlbmRp bmcgZmFpbHVyZSIpOwotCQlleHBlY3RfdHJ1ZShwYXJzZXJfcGFyc2UoJnBhcnNlciksCi0JCSAg ICAiVW5leHBlY3RlZCBwYXJzZSBzdWNjZXNzIGZvciBpbnB1dDogJXMiLCBpbnB1dCk7Ci0JCXBh cnNlcl9maW5pKCZwYXJzZXIpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodmFsaWRf aW5wdXRzKS9zaXplb2YoY29uc3QgY2hhciAqKTsgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKmlucHV0 ID0gdmFsaWRfaW5wdXRzW2ldOwotCQlwYXJzZXJfdCBwYXJzZXI7Ci0JCXBhcnNlcl9pbml0KCZw YXJzZXIsIHRydWUpOwotCQlleHBlY3RfZmFsc2UocGFyc2VyX2FwcGVuZCgmcGFyc2VyLCBpbnB1 dCksCi0JCSAgICAiVW5leHBlY3RlZCBpbnB1dCBhcHBlbmRpbmcgZmFpbHVyZSIpOwotCQlleHBl Y3RfZmFsc2UocGFyc2VyX3BhcnNlKCZwYXJzZXIpLAotCQkgICAgIlVuZXhwZWN0ZWQgcGFyc2Ug ZXJyb3IgZm9yIGlucHV0OiAlcyIsIGlucHV0KTsKLQkJcGFyc2VyX2ZpbmkoJnBhcnNlcik7Ci0J fQotfQotVEVTVF9FTkQKLQotdm9pZAotd3JpdGVfY2Iodm9pZCAqb3BhcXVlLCBjb25zdCBjaGFy ICpzdHIpIHsKLQlwYXJzZXJfdCAqcGFyc2VyID0gKHBhcnNlcl90ICopb3BhcXVlOwotCWlmIChw YXJzZXJfYXBwZW5kKHBhcnNlciwgc3RyKSkgewotCQl0ZXN0X2ZhaWwoIlVuZXhwZWN0ZWQgaW5w dXQgYXBwZW5kaW5nIGZhaWx1cmUiKTsKLQl9Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF9zdGF0c19w cmludF9qc29uKSB7Ci0JY29uc3QgY2hhciAqb3B0c1tdID0gewotCQkiSiIsCi0JCSJKZyIsCi0J CSJKbSIsCi0JCSJKZCIsCi0JCSJKbWQiLAotCQkiSmdkIiwKLQkJIkpnbSIsCi0JCSJKZ21kIiwK LQkJIkphIiwKLQkJIkpiIiwKLQkJIkpsIiwKLQkJIkp4IiwKLQkJIkpibCIsCi0JCSJKYWwiLAot CQkiSmFiIiwKLQkJIkphYmwiLAotCQkiSmF4IiwKLQkJIkpieCIsCi0JCSJKbHgiLAotCQkiSmFi bHgiLAotCQkiSmdtZGFibHgiLAotCX07Ci0JdW5zaWduZWQgYXJlbmFfaW5kLCBpOwotCi0JZm9y IChpID0gMDsgaSA8IDM7IGkrKykgewotCQl1bnNpZ25lZCBqOwotCi0JCXN3aXRjaCAoaSkgewot CQljYXNlIDA6Ci0JCQlicmVhazsKLQkJY2FzZSAxOiB7Ci0JCQlzaXplX3Qgc3ogPSBzaXplb2Yo YXJlbmFfaW5kKTsKLQkJCWV4cGVjdF9kX2VxKG1hbGxjdGwoImFyZW5hcy5jcmVhdGUiLCAodm9p ZCAqKSZhcmVuYV9pbmQsCi0JCQkgICAgJnN6LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFs bGN0bCBmYWlsdXJlIik7Ci0JCQlicmVhazsKLQkJfSBjYXNlIDI6IHsKLQkJCXNpemVfdCBtaWJb M107Ci0JCQlzaXplX3QgbWlibGVuID0gc2l6ZW9mKG1pYikvc2l6ZW9mKHNpemVfdCk7Ci0JCQll eHBlY3RfZF9lcShtYWxsY3RsbmFtZXRvbWliKCJhcmVuYS4wLmRlc3Ryb3kiLAotCQkJICAgIG1p YiwgJm1pYmxlbiksIDAsCi0JCQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bG5hbWV0b21pYiBmYWls dXJlIik7Ci0JCQltaWJbMV0gPSBhcmVuYV9pbmQ7Ci0JCQlleHBlY3RfZF9lcShtYWxsY3RsYnlt aWIobWliLCBtaWJsZW4sIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkgICAgMCksIDAsICJVbmV4cGVj dGVkIG1hbGxjdGxieW1pYiBmYWlsdXJlIik7Ci0JCQlicmVhazsKLQkJfSBkZWZhdWx0OgotCQkJ bm90X3JlYWNoZWQoKTsKLQkJfQotCi0JCWZvciAoaiA9IDA7IGogPCBzaXplb2Yob3B0cykvc2l6 ZW9mKGNvbnN0IGNoYXIgKik7IGorKykgewotCQkJcGFyc2VyX3QgcGFyc2VyOwotCi0JCQlwYXJz ZXJfaW5pdCgmcGFyc2VyLCB0cnVlKTsKLQkJCW1hbGxvY19zdGF0c19wcmludCh3cml0ZV9jYiwg KHZvaWQgKikmcGFyc2VyLCBvcHRzW2pdKTsKLQkJCWV4cGVjdF9mYWxzZShwYXJzZXJfcGFyc2Uo JnBhcnNlciksCi0JCQkgICAgIlVuZXhwZWN0ZWQgcGFyc2UgZXJyb3IsIG9wdHM9XCIlc1wiIiwg b3B0c1tqXSk7Ci0JCQlwYXJzZXJfZmluaSgmcGFyc2VyKTsKLQkJfQotCX0KLX0KLVRFU1RfRU5E Ci0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRlc3RfanNvbl9wYXJz ZXIsCi0JICAgIHRlc3Rfc3RhdHNfcHJpbnRfanNvbik7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRz LWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3N6LmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc3ouYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlMDRiOS4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0z LjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvc3ouYworKysgL2Rldi9udWxsCkBA IC0xLDY2ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotVEVTVF9C RUdJTih0ZXN0X3N6X3BzejJpbmQpIHsKLQkvKgotCSAqIFRlc3RpbmcgcGFnZSBzaXplIGNsYXNz ZXMgd2hpY2ggcmVzaWRlIHByaW9yIHRvIHRoZSByZWd1bGFyIGdyb3VwCi0JICogd2l0aCBhbGwg c2l6ZSBjbGFzc2VzIGRpdmlzaWJsZSBieSBwYWdlIHNpemUuCi0JICogRm9yIHg4Nl82NCBMaW51 eCwgaXQncyA0MDk2LCA4MTkyLCAxMjI4OCwgMTYzODQsIHdpdGggY29ycmVzcG9uZGluZwotCSAq IHBzemluZCAwLCAxLCAyIGFuZCAzLgotCSAqLwotCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgU0Nf TkdST1VQOyBpKyspIHsKLQkJZm9yIChzaXplX3QgcHN6ID0gaSAqIFBBR0UgKyAxOyBwc3ogPD0g KGkgKyAxKSAqIFBBR0U7IHBzeisrKSB7Ci0JCQlwc3ppbmRfdCBpbmQgPSBzel9wc3oyaW5kKHBz eik7Ci0JCQlleHBlY3RfenVfZXEoaW5kLCBpLCAiR290ICV1IGFzIHN6X3BzejJpbmQgb2YgJXp1 IiwgaW5kLAotCQkJICAgIHBzeik7Ci0JCX0KLQl9Ci0KLQlzY19kYXRhX3QgZGF0YTsKLQltZW1z ZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0Jc2NfZGF0YV9pbml0KCZkYXRhKTsKLQkvKgot CSAqICdiYXNlJyBpcyB0aGUgYmFzZSBvZiB0aGUgZmlyc3QgcmVndWxhciBncm91cCB3aXRoIGFs bCBzaXplIGNsYXNzZXMKLQkgKiBkaXZpc2libGUgYnkgcGFnZSBzaXplLgotCSAqIEZvciB4ODZf NjQgTGludXgsIGl0J3MgMTYzODQsIGFuZCBiYXNlX2luZCBpcyAzNi4KLQkgKi8KLQlzaXplX3Qg YmFzZV9wc3ogPSAxIDw8IChTQ19MR19OR1JPVVAgKyBMR19QQUdFKTsKLQlzaXplX3QgYmFzZV9p bmQgPSAwOwotCXdoaWxlIChiYXNlX2luZCA8IFNDX05TSVpFUyAmJgotCSAgICByZWdfc2l6ZV9j b21wdXRlKGRhdGEuc2NbYmFzZV9pbmRdLmxnX2Jhc2UsCi0JCWRhdGEuc2NbYmFzZV9pbmRdLmxn X2RlbHRhLAotCQlkYXRhLnNjW2Jhc2VfaW5kXS5uZGVsdGEpIDwgYmFzZV9wc3opIHsKLQkJYmFz ZV9pbmQrKzsKLQl9Ci0JZXhwZWN0X3p1X2VxKAotCSAgICByZWdfc2l6ZV9jb21wdXRlKGRhdGEu c2NbYmFzZV9pbmRdLmxnX2Jhc2UsCi0JCWRhdGEuc2NbYmFzZV9pbmRdLmxnX2RlbHRhLCBkYXRh LnNjW2Jhc2VfaW5kXS5uZGVsdGEpLAotCSAgICBiYXNlX3BzeiwgIlNpemUgY2xhc3MgZXF1YWwg dG8gJXp1IG5vdCBmb3VuZCIsIGJhc2VfcHN6KTsKLQkvKgotCSAqIFRlc3QgZGlmZmVyZW50IHNp emVzIGZhbGxpbmcgaW50byBncm91cHMgYWZ0ZXIgdGhlICdiYXNlJy4gVGhlCi0JICogaW5jcmVt ZW50IGlzIFBBR0UgLyAzIGZvciB0aGUgZXhlY3V0aW9uIHNwZWVkIHB1cnBvc2UuCi0JICovCi0J YmFzZV9pbmQgLT0gU0NfTkdST1VQOwotCWZvciAoc2l6ZV90IHBzeiA9IGJhc2VfcHN6OyBwc3og PD0gNjQgKiAxMDI0ICogMTAyNDsgcHN6ICs9IFBBR0UgLyAzKSB7Ci0JCXBzemluZF90IGluZCA9 IHN6X3BzejJpbmQocHN6KTsKLQkJc2NfdCBndF9zYyA9IGRhdGEuc2NbaW5kICsgYmFzZV9pbmRd OwotCQlleHBlY3RfenVfZ3QocHN6LAotCQkgICAgcmVnX3NpemVfY29tcHV0ZShndF9zYy5sZ19i YXNlLCBndF9zYy5sZ19kZWx0YSwKLQkJCWd0X3NjLm5kZWx0YSksCi0JCSAgICAiR290ICV1IGFz IHN6X3BzejJpbmQgb2YgJXp1IiwgaW5kLCBwc3opOwotCQlzY190IGxlX3NjID0gZGF0YS5zY1tp bmQgKyBiYXNlX2luZCArIDFdOwotCQlleHBlY3RfenVfbGUocHN6LAotCQkgICAgcmVnX3NpemVf Y29tcHV0ZShsZV9zYy5sZ19iYXNlLCBsZV9zYy5sZ19kZWx0YSwKLQkJCWxlX3NjLm5kZWx0YSks Ci0JCSAgICAiR290ICV1IGFzIHN6X3BzejJpbmQgb2YgJXp1IiwgaW5kLCBwc3opOwotCX0KLQot CXBzemluZF90IG1heF9pbmQgPSBzel9wc3oyaW5kKFNDX0xBUkdFX01BWENMQVNTICsgMSk7Ci0J ZXhwZWN0X2x1X2VxKG1heF9pbmQsIFNDX05QU0laRVMsCi0JICAgICJHb3QgJXUgYXMgc3pfcHN6 MmluZCBvZiAlbGx1IiwgbWF4X2luZCwgU0NfTEFSR0VfTUFYQ0xBU1MpOwotfQotVEVTVF9FTkQK LQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCh0ZXN0X3N6X3BzejJpbmQpOwotfQoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC90Y2FjaGVfbWF4LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvdGNhY2hlX21heC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx ZjY1N2M4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUu My4wL3Rlc3QvdW5pdC90Y2FjaGVfbWF4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBA QAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgotI2luY2x1ZGUgInRlc3Qvc2FuLmgi Ci0KLWNvbnN0IGNoYXIgKm1hbGxvY19jb25mID0gVEVTVF9TQU5fVUFGX0FMSUdOX0RJU0FCTEU7 Ci0KLWVudW0gewotCWFsbG9jX29wdGlvbl9zdGFydCA9IDAsCi0JdXNlX21hbGxvYyA9IDAsCi0J dXNlX21hbGxvY3gsCi0JYWxsb2Nfb3B0aW9uX2VuZAotfTsKLQotZW51bSB7Ci0JZGFsbG9jX29w dGlvbl9zdGFydCA9IDAsCi0JdXNlX2ZyZWUgPSAwLAotCXVzZV9kYWxsb2N4LAotCXVzZV9zZGFs bG9jeCwKLQlkYWxsb2Nfb3B0aW9uX2VuZAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGFsbG9jX29w dGlvbiwgZGFsbG9jX29wdGlvbjsKLXN0YXRpYyBzaXplX3QgdGNhY2hlX21heDsKLQotc3RhdGlj IHZvaWQgKgotYWxsb2NfZnVuYyhzaXplX3Qgc3opIHsKLQl2b2lkICpyZXQ7Ci0KLQlzd2l0Y2gg KGFsbG9jX29wdGlvbikgewotCWNhc2UgdXNlX21hbGxvYzoKLQkJcmV0ID0gbWFsbG9jKHN6KTsK LQkJYnJlYWs7Ci0JY2FzZSB1c2VfbWFsbG9jeDoKLQkJcmV0ID0gbWFsbG9jeChzeiwgMCk7Ci0J CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXVucmVhY2hhYmxlKCk7Ci0JfQotCWV4cGVjdF9wdHJfbm90 X251bGwocmV0LCAiVW5leHBlY3RlZCBtYWxsb2MgLyBtYWxsb2N4IGZhaWx1cmUiKTsKLQotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYWxsb2NfZnVuYyh2b2lkICpwdHIsIHNpemVf dCBzeikgewotCXN3aXRjaCAoZGFsbG9jX29wdGlvbikgewotCWNhc2UgdXNlX2ZyZWU6Ci0JCWZy ZWUocHRyKTsKLQkJYnJlYWs7Ci0JY2FzZSB1c2VfZGFsbG9jeDoKLQkJZGFsbG9jeChwdHIsIDAp OwotCQlicmVhazsKLQljYXNlIHVzZV9zZGFsbG9jeDoKLQkJc2RhbGxvY3gocHRyLCBzeiwgMCk7 Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXVucmVhY2hhYmxlKCk7Ci0JfQotfQotCi1zdGF0aWMg c2l6ZV90Ci10Y2FjaGVfYnl0ZXNfcmVhZCh2b2lkKSB7Ci0JdWludDY0X3QgZXBvY2g7Ci0JYXNz ZXJ0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAodm9pZCAqKSZlcG9jaCwgc2l6 ZW9mKGVwb2NoKSksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0K LQlzaXplX3QgdGNhY2hlX2J5dGVzOwotCXNpemVfdCBzeiA9IHNpemVvZih0Y2FjaGVfYnl0ZXMp OwotCWFzc2VydF9kX2VxKG1hbGxjdGwoCi0JICAgICJzdGF0cy5hcmVuYXMuIiBTVFJJTkdJRlko TUFMTENUTF9BUkVOQVNfQUxMKSAiLnRjYWNoZV9ieXRlcyIsCi0JICAgICZ0Y2FjaGVfYnl0ZXMs ICZzeiwgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOwotCi0JcmV0 dXJuIHRjYWNoZV9ieXRlczsKLX0KLQotc3RhdGljIHZvaWQKLXRjYWNoZV9ieXRlc19jaGVja191 cGRhdGUoc2l6ZV90ICpwcmV2LCBzc2l6ZV90IGRpZmYpIHsKLQlzaXplX3QgdGNhY2hlX2J5dGVz ID0gdGNhY2hlX2J5dGVzX3JlYWQoKTsKLQlleHBlY3RfenVfZXEodGNhY2hlX2J5dGVzLCAqcHJl diArIGRpZmYsICJ0Y2FjaGUgYnl0ZXMgbm90IGV4cGVjdGVkIik7Ci0KLQkqcHJldiArPSBkaWZm OwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF90Y2FjaGVfYnl0ZXNfYWxsb2Moc2l6ZV90IGFsbG9j X3NpemUpIHsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmZsdXNoIiwgTlVM TCwgTlVMTCwgTlVMTCwgMCksIDAsCi0JICAgICJVbmV4cGVjdGVkIHRjYWNoZSBmbHVzaCBmYWls dXJlIik7Ci0KLQlzaXplX3QgdXNpemUgPSBzel9zMnUoYWxsb2Nfc2l6ZSk7Ci0JLyogTm8gY2hh bmdlIGlzIGV4cGVjdGVkIGlmIHVzaXplIGlzIG91dHNpZGUgb2YgdGNhY2hlX21heCByYW5nZS4g Ki8KLQlib29sIGNhY2hlZCA9ICh1c2l6ZSA8PSB0Y2FjaGVfbWF4KTsKLQlzc2l6ZV90IGRpZmYg PSBjYWNoZWQgPyB1c2l6ZSA6IDA7Ci0KLQl2b2lkICpwdHIxID0gYWxsb2NfZnVuYyhhbGxvY19z aXplKTsKLQl2b2lkICpwdHIyID0gYWxsb2NfZnVuYyhhbGxvY19zaXplKTsKLQotCXNpemVfdCBi eXRlcyA9IHRjYWNoZV9ieXRlc19yZWFkKCk7Ci0JZGFsbG9jX2Z1bmMocHRyMiwgYWxsb2Nfc2l6 ZSk7Ci0JLyogRXhwZWN0IHRjYWNoZV9ieXRlcyBpbmNyZWFzZSBhZnRlciBkYWxsb2MgKi8KLQl0 Y2FjaGVfYnl0ZXNfY2hlY2tfdXBkYXRlKCZieXRlcywgZGlmZik7Ci0KLQlkYWxsb2NfZnVuYyhw dHIxLCBhbGxvY19zaXplKTsKLQkvKiBFeHBlY3QgdGNhY2hlX2J5dGVzIGluY3JlYXNlIGFnYWlu ICovCi0JdGNhY2hlX2J5dGVzX2NoZWNrX3VwZGF0ZSgmYnl0ZXMsIGRpZmYpOwotCi0Jdm9pZCAq cHRyMyA9IGFsbG9jX2Z1bmMoYWxsb2Nfc2l6ZSk7Ci0JaWYgKGNhY2hlZCkgewotCQlleHBlY3Rf cHRyX2VxKHB0cjEsIHB0cjMsICJVbmV4cGVjdGVkIGNhY2hlZCBwdHIiKTsKLQl9Ci0JLyogRXhw ZWN0IHRjYWNoZV9ieXRlcyBkZWNyZWFzZSBhZnRlciBhbGxvYyAqLwotCXRjYWNoZV9ieXRlc19j aGVja191cGRhdGUoJmJ5dGVzLCAtZGlmZik7Ci0KLQl2b2lkICpwdHI0ID0gYWxsb2NfZnVuYyhh bGxvY19zaXplKTsKLQlpZiAoY2FjaGVkKSB7Ci0JCWV4cGVjdF9wdHJfZXEocHRyMiwgcHRyNCwg IlVuZXhwZWN0ZWQgY2FjaGVkIHB0ciIpOwotCX0KLQkvKiBFeHBlY3QgdGNhY2hlX2J5dGVzIGRl Y3JlYXNlIGFnYWluICovCi0JdGNhY2hlX2J5dGVzX2NoZWNrX3VwZGF0ZSgmYnl0ZXMsIC1kaWZm KTsKLQotCWRhbGxvY19mdW5jKHB0cjMsIGFsbG9jX3NpemUpOwotCXRjYWNoZV9ieXRlc19jaGVj a191cGRhdGUoJmJ5dGVzLCBkaWZmKTsKLQlkYWxsb2NfZnVuYyhwdHI0LCBhbGxvY19zaXplKTsK LQl0Y2FjaGVfYnl0ZXNfY2hlY2tfdXBkYXRlKCZieXRlcywgZGlmZik7Ci19Ci0KLXN0YXRpYyB2 b2lkCi10ZXN0X3RjYWNoZV9tYXhfaW1wbCh2b2lkKSB7Ci0Jc2l6ZV90IHN6OwotCXN6ID0gc2l6 ZW9mKHRjYWNoZV9tYXgpOwotCWFzc2VydF9kX2VxKG1hbGxjdGwoImFyZW5hcy50Y2FjaGVfbWF4 IiwgKHZvaWQgKikmdGNhY2hlX21heCwKLQkgICAgJnN6LCBOVUxMLCAwKSwgMCwgIlVuZXhwZWN0 ZWQgbWFsbGN0bCgpIGZhaWx1cmUiKTsKLQotCS8qIG9wdC50Y2FjaGVfbWF4IHNldCB0byAxMDI0 IGluIHRjYWNoZV9tYXguc2ggKi8KLQlleHBlY3RfenVfZXEodGNhY2hlX21heCwgMTAyNCwgInRj YWNoZV9tYXggbm90IGV4cGVjdGVkIik7Ci0KLQl0ZXN0X3RjYWNoZV9ieXRlc19hbGxvYygxKTsK LQl0ZXN0X3RjYWNoZV9ieXRlc19hbGxvYyh0Y2FjaGVfbWF4IC0gMSk7Ci0JdGVzdF90Y2FjaGVf Ynl0ZXNfYWxsb2ModGNhY2hlX21heCk7Ci0JdGVzdF90Y2FjaGVfYnl0ZXNfYWxsb2ModGNhY2hl X21heCArIDEpOwotCi0JdGVzdF90Y2FjaGVfYnl0ZXNfYWxsb2MoUEFHRSAtIDEpOwotCXRlc3Rf dGNhY2hlX2J5dGVzX2FsbG9jKFBBR0UpOwotCXRlc3RfdGNhY2hlX2J5dGVzX2FsbG9jKFBBR0Ug KyAxKTsKLQotCXNpemVfdCBsYXJnZTsKLQlzeiA9IHNpemVvZihsYXJnZSk7Ci0JYXNzZXJ0X2Rf ZXEobWFsbGN0bCgiYXJlbmFzLmxleHRlbnQuMC5zaXplIiwgKHZvaWQgKikmbGFyZ2UsICZzeiwg TlVMTCwKLQkgICAgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwoKSBmYWlsdXJlIik7Ci0KLQl0 ZXN0X3RjYWNoZV9ieXRlc19hbGxvYyhsYXJnZSAtIDEpOwotCXRlc3RfdGNhY2hlX2J5dGVzX2Fs bG9jKGxhcmdlKTsKLQl0ZXN0X3RjYWNoZV9ieXRlc19hbGxvYyhsYXJnZSArIDEpOwotfQotCi1U RVNUX0JFR0lOKHRlc3RfdGNhY2hlX21heCkgewotCXRlc3Rfc2tpcF9pZighY29uZmlnX3N0YXRz KTsKLQl0ZXN0X3NraXBfaWYoIW9wdF90Y2FjaGUpOwotCXRlc3Rfc2tpcF9pZihvcHRfcHJvZik7 Ci0JdGVzdF9za2lwX2lmKHNhbl91YWZfZGV0ZWN0aW9uX2VuYWJsZWQoKSk7Ci0KLQlmb3IgKGFs bG9jX29wdGlvbiA9IGFsbG9jX29wdGlvbl9zdGFydDsKLQkgICAgIGFsbG9jX29wdGlvbiA8IGFs bG9jX29wdGlvbl9lbmQ7Ci0JICAgICBhbGxvY19vcHRpb24rKykgewotCQlmb3IgKGRhbGxvY19v cHRpb24gPSBkYWxsb2Nfb3B0aW9uX3N0YXJ0OwotCQkgICAgIGRhbGxvY19vcHRpb24gPCBkYWxs b2Nfb3B0aW9uX2VuZDsKLQkJICAgICBkYWxsb2Nfb3B0aW9uKyspIHsKLQkJCXRlc3RfdGNhY2hl X21heF9pbXBsKCk7Ci0JCX0KLQl9Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewot CXJldHVybiB0ZXN0KHRlc3RfdGNhY2hlX21heCk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJh c2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3RjYWNoZV9tYXguc2ggYi8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGNhY2hlX21h eC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ4MGQ3My4uMDAwMDAwMAotLS0g YS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGNhY2hl X21heC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyEvYmluL3NoCi0KLWV4cG9y dCBNQUxMT0NfQ09ORj0idGNhY2hlX21heDoxMDI0IgoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC90ZXN0X2hvb2tzLmMgYi8zODkt ZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdGVzdF9ob29rcy5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2QyYjNiLi4wMDAwMDAwCi0tLSBhLzM4 OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC90ZXN0X2hvb2tz LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxv Y190ZXN0LmgiCi0KLXN0YXRpYyBib29sIGhvb2tfY2FsbGVkID0gZmFsc2U7Ci0KLXN0YXRpYyB2 b2lkCi1ob29rKCkgewotCWhvb2tfY2FsbGVkID0gdHJ1ZTsKLX0KLQotc3RhdGljIGludAotZnVu Y190b19ob29rKGludCBhcmcxLCBpbnQgYXJnMikgewotCXJldHVybiBhcmcxICsgYXJnMjsKLX0K LQotI2RlZmluZSBmdW5jX3RvX2hvb2sgSkVNQUxMT0NfVEVTVF9IT09LKGZ1bmNfdG9faG9vaywg dGVzdF9ob29rc19saWJjX2hvb2spCi0KLVRFU1RfQkVHSU4odW5ob29rZWRfY2FsbCkgewotCXRl c3RfaG9va3NfbGliY19ob29rID0gTlVMTDsKLQlob29rX2NhbGxlZCA9IGZhbHNlOwotCWV4cGVj dF9kX2VxKDMsIGZ1bmNfdG9faG9vaygxLCAyKSwgIkhvb2tpbmcgY2hhbmdlZCByZXR1cm4gdmFs dWUuIik7Ci0JZXhwZWN0X2ZhbHNlKGhvb2tfY2FsbGVkLCAiTnVsbGluZyBvdXQgaG9vayBkaWRu J3QgdGFrZS4iKTsKLX0KLVRFU1RfRU5ECi0KLVRFU1RfQkVHSU4oaG9va2VkX2NhbGwpIHsKLQl0 ZXN0X2hvb2tzX2xpYmNfaG9vayA9ICZob29rOwotCWhvb2tfY2FsbGVkID0gZmFsc2U7Ci0JZXhw ZWN0X2RfZXEoMywgZnVuY190b19ob29rKDEsIDIpLCAiSG9va2luZyBjaGFuZ2VkIHJldHVybiB2 YWx1ZS4iKTsKLQlleHBlY3RfdHJ1ZShob29rX2NhbGxlZCwgIkhvb2sgc2hvdWxkIGhhdmUgZXhl Y3V0ZWQuIik7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCXJldHVybiB0ZXN0 KAotCSAgICB1bmhvb2tlZF9jYWxsLAotCSAgICBob29rZWRfY2FsbCk7Ci19CgpkaWZmIC0tZ2l0 IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3RocmVh ZF9ldmVudC5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91 bml0L3RocmVhZF9ldmVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGI4OGE5 Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC90aHJlYWRfZXZlbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotVEVTVF9CRUdJTih0ZXN0X25leHRfZXZl bnRfZmFzdCkgewotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKLQl0ZV9jdHhfdCBjdHg7Ci0J dGVfY3R4X2dldCh0c2QsICZjdHgsIHRydWUpOwotCi0JdGVfY3R4X2xhc3RfZXZlbnRfc2V0KCZj dHgsIDApOwotCXRlX2N0eF9jdXJyZW50X2J5dGVzX3NldCgmY3R4LCBURV9ORVhUX0VWRU5UX0ZB U1RfTUFYIC0gOFUpOwotCXRlX2N0eF9uZXh0X2V2ZW50X3NldCh0c2QsICZjdHgsIFRFX05FWFRf RVZFTlRfRkFTVF9NQVgpOwotI2RlZmluZSBFKGV2ZW50LCBjb25kaXRpb24sIGlzX2FsbG9jKQkJ CQkJXAotCWlmIChpc19hbGxvYyAmJiBjb25kaXRpb24pIHsJCQkJCVwKLQkJZXZlbnQjI19ldmVu dF93YWl0X3NldCh0c2QsIFRFX05FWFRfRVZFTlRfRkFTVF9NQVgpOwlcCi0JfQotCUlURVJBVEVf T1ZFUl9BTExfRVZFTlRTCi0jdW5kZWYgRQotCi0JLyogVGVzdCBuZXh0X2V2ZW50X2Zhc3Qgcm9s bGluZyBiYWNrIHRvIDAuICovCi0Jdm9pZCAqcCA9IG1hbGxvYygxNlUpOwotCWFzc2VydF9wdHJf bm90X251bGwocCwgIm1hbGxvYygpIGZhaWxlZCIpOwotCWZyZWUocCk7Ci0KLQkvKiBUZXN0IG5l eHRfZXZlbnRfZmFzdCByZXN1bWluZyB0byBiZSBlcXVhbCB0byBuZXh0X2V2ZW50LiAqLwotCXZv aWQgKnEgPSBtYWxsb2MoU0NfTE9PS1VQX01BWENMQVNTKTsKLQlhc3NlcnRfcHRyX25vdF9udWxs KHEsICJtYWxsb2MoKSBmYWlsZWQiKTsKLQlmcmVlKHEpOwotfQotVEVTVF9FTkQKLQotaW50Ci1t YWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9uZXh0X2V2ZW50X2Zhc3QpOwot fQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC90aHJlYWRfZXZlbnQuc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvdGhyZWFkX2V2ZW50LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA4ZmNjN2Q4Li4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC90aHJlYWRfZXZlbnQuc2gKKysrIC9kZXYvbnVsbApAQCAt MSw1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1pZiBbICJ4JHtlbmFibGVfcHJvZn0iID0gIngxIiBd IDsgdGhlbgotICBleHBvcnQgTUFMTE9DX0NPTkY9InByb2Y6dHJ1ZSxsZ19wcm9mX3NhbXBsZTow IgotZmkKCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMu MC90ZXN0L3VuaXQvdGlja2VyLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01 LjMuMC90ZXN0L3VuaXQvdGlja2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBk ZDc3ODYuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3RpY2tlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLSNp bmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVy bmFsL3RpY2tlci5oIgotCi1URVNUX0JFR0lOKHRlc3RfdGlja2VyX3RpY2spIHsKLSNkZWZpbmUg TlJFUFMgMgotI2RlZmluZSBOVElDS1MgMwotCXRpY2tlcl90IHRpY2tlcjsKLQlpbnQzMl90IGks IGo7Ci0KLQl0aWNrZXJfaW5pdCgmdGlja2VyLCBOVElDS1MpOwotCWZvciAoaSA9IDA7IGkgPCBO UkVQUzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBOVElDS1M7IGorKykgewotCQkJZXhwZWN0 X3VfZXEodGlja2VyX3JlYWQoJnRpY2tlciksIE5USUNLUyAtIGosCi0JCQkgICAgIlVuZXhwZWN0 ZWQgdGlja2VyIHZhbHVlIChpPSVkLCBqPSVkKSIsIGksIGopOwotCQkJZXhwZWN0X2ZhbHNlKHRp Y2tlcl90aWNrKCZ0aWNrZXIpLAotCQkJICAgICJVbmV4cGVjdGVkIHRpY2tlciBmaXJlIChpPSVk LCBqPSVkKSIsIGksIGopOwotCQl9Ci0JCWV4cGVjdF91MzJfZXEodGlja2VyX3JlYWQoJnRpY2tl ciksIDAsCi0JCSAgICAiRXhwZWN0ZWQgdGlja2VyIGRlcGxldGlvbiIpOwotCQlleHBlY3RfdHJ1 ZSh0aWNrZXJfdGljaygmdGlja2VyKSwKLQkJICAgICJFeHBlY3RlZCB0aWNrZXIgZmlyZSAoaT0l ZCkiLCBpKTsKLQkJZXhwZWN0X3UzMl9lcSh0aWNrZXJfcmVhZCgmdGlja2VyKSwgTlRJQ0tTLAot CQkgICAgIkV4cGVjdGVkIHRpY2tlciByZXNldCIpOwotCX0KLSN1bmRlZiBOVElDS1MKLX0KLVRF U1RfRU5ECi0KLVRFU1RfQkVHSU4odGVzdF90aWNrZXJfdGlja3MpIHsKLSNkZWZpbmUgTlRJQ0tT IDMKLQl0aWNrZXJfdCB0aWNrZXI7Ci0KLQl0aWNrZXJfaW5pdCgmdGlja2VyLCBOVElDS1MpOwot Ci0JZXhwZWN0X3VfZXEodGlja2VyX3JlYWQoJnRpY2tlciksIE5USUNLUywgIlVuZXhwZWN0ZWQg dGlja2VyIHZhbHVlIik7Ci0JZXhwZWN0X2ZhbHNlKHRpY2tlcl90aWNrcygmdGlja2VyLCBOVElD S1MpLCAiVW5leHBlY3RlZCB0aWNrZXIgZmlyZSIpOwotCWV4cGVjdF91X2VxKHRpY2tlcl9yZWFk KCZ0aWNrZXIpLCAwLCAiVW5leHBlY3RlZCB0aWNrZXIgdmFsdWUiKTsKLQlleHBlY3RfdHJ1ZSh0 aWNrZXJfdGlja3MoJnRpY2tlciwgTlRJQ0tTKSwgIkV4cGVjdGVkIHRpY2tlciBmaXJlIik7Ci0J ZXhwZWN0X3VfZXEodGlja2VyX3JlYWQoJnRpY2tlciksIE5USUNLUywgIlVuZXhwZWN0ZWQgdGlj a2VyIHZhbHVlIik7Ci0KLQlleHBlY3RfdHJ1ZSh0aWNrZXJfdGlja3MoJnRpY2tlciwgTlRJQ0tT ICsgMSksICJFeHBlY3RlZCB0aWNrZXIgZmlyZSIpOwotCWV4cGVjdF91X2VxKHRpY2tlcl9yZWFk KCZ0aWNrZXIpLCBOVElDS1MsICJVbmV4cGVjdGVkIHRpY2tlciB2YWx1ZSIpOwotI3VuZGVmIE5U SUNLUwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3RpY2tlcl9jb3B5KSB7Ci0jZGVm aW5lIE5USUNLUyAzCi0JdGlja2VyX3QgdGEsIHRiOwotCi0JdGlja2VyX2luaXQoJnRhLCBOVElD S1MpOwotCXRpY2tlcl9jb3B5KCZ0YiwgJnRhKTsKLQlleHBlY3RfdV9lcSh0aWNrZXJfcmVhZCgm dGIpLCBOVElDS1MsICJVbmV4cGVjdGVkIHRpY2tlciB2YWx1ZSIpOwotCWV4cGVjdF90cnVlKHRp Y2tlcl90aWNrcygmdGIsIE5USUNLUyArIDEpLCAiRXhwZWN0ZWQgdGlja2VyIGZpcmUiKTsKLQll eHBlY3RfdV9lcSh0aWNrZXJfcmVhZCgmdGIpLCBOVElDS1MsICJVbmV4cGVjdGVkIHRpY2tlciB2 YWx1ZSIpOwotCi0JdGlja2VyX3RpY2soJnRhKTsKLQl0aWNrZXJfY29weSgmdGIsICZ0YSk7Ci0J ZXhwZWN0X3VfZXEodGlja2VyX3JlYWQoJnRiKSwgTlRJQ0tTIC0gMSwgIlVuZXhwZWN0ZWQgdGlj a2VyIHZhbHVlIik7Ci0JZXhwZWN0X3RydWUodGlja2VyX3RpY2tzKCZ0YiwgTlRJQ0tTKSwgIkV4 cGVjdGVkIHRpY2tlciBmaXJlIik7Ci0JZXhwZWN0X3VfZXEodGlja2VyX3JlYWQoJnRiKSwgTlRJ Q0tTLCAiVW5leHBlY3RlZCB0aWNrZXIgdmFsdWUiKTsKLSN1bmRlZiBOVElDS1MKLX0KLVRFU1Rf RU5ECi0KLVRFU1RfQkVHSU4odGVzdF90aWNrZXJfZ2VvbSkgewotCWNvbnN0IGludDMyX3QgdGlj a3MgPSAxMDA7Ci0JY29uc3QgdWludDY0X3Qgbml0ZXJzID0gMTAwICogMTAwMDsKLQotCXRpY2tl cl9nZW9tX3QgdGlja2VyOwotCXRpY2tlcl9nZW9tX2luaXQoJnRpY2tlciwgdGlja3MpOwotCXVp bnQ2NF90IHRvdGFsX3RpY2tzID0gMDsKLQkvKiBKdXN0IHNvbWUgcmFuZG9tIGNvbnN0YW50LiAq LwotCXVpbnQ2NF90IHBybmdfc3RhdGUgPSAweDM0MzIxOWY5MzQ5NmRiOWZVTEw7Ci0JZm9yICh1 aW50NjRfdCBpID0gMDsgaSA8IG5pdGVyczsgaSsrKSB7Ci0JCXdoaWxlKCF0aWNrZXJfZ2VvbV90 aWNrKCZ0aWNrZXIsICZwcm5nX3N0YXRlKSkgewotCQkJdG90YWxfdGlja3MrKzsKLQkJfQotCX0K LQkvKgotCSAqIEluIGZhY3QsIHdpdGggdGhpcyBjaG9pY2Ugb2YgcmFuZG9tIHNlZWQgYW5kIHRo ZSBQUk5HIGltcGxlbWVudGF0aW9uCi0JICogdXNlZCBhdCB0aGUgdGltZSB0aGlzIHdhcyB0ZXN0 ZWQsIHRvdGFsX3RpY2tzIGlzIDk1LjElIG9mIHRoZQotCSAqIGV4cGVjdGVkIHRpY2tzLgotCSAq LwotCWV4cGVjdF91NjRfZ2UodG90YWxfdGlja3MgLCBuaXRlcnMgKiB0aWNrcyAqIDkgLyAxMCwK LQkgICAgIk1lYW4gb2ZmIGJ5ID4gMTAlJSIpOwotCWV4cGVjdF91NjRfbGUodG90YWxfdGlja3Mg LCBuaXRlcnMgKiB0aWNrcyAqIDExIC8gMTAsCi0JICAgICJNZWFuIG9mZiBieSA+IDEwJSUiKTsK LX0KLVRFU1RfRU5ECi0KLWludAotbWFpbih2b2lkKSB7Ci0JcmV0dXJuIHRlc3QoCi0JICAgIHRl c3RfdGlja2VyX3RpY2ssCi0JICAgIHRlc3RfdGlja2VyX3RpY2tzLAotCSAgICB0ZXN0X3RpY2tl cl9jb3B5LAotCSAgICB0ZXN0X3RpY2tlcl9nZW9tKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdHNkLmMgYi8zODktZHMt YmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvdHNkLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNWQ4NzAuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2Ut My4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3RzZC5jCisrKyAvZGV2L251bGwK QEAgLTEsMjc0ICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIKLQotLyoK LSAqIElmIHdlJ3JlIGUuZy4gaW4gZGVidWcgbW9kZSwgd2UgKm5ldmVyKiBlbnRlciB0aGUgZmFz dCBwYXRoLCBhbmQgc28gc2hvdWxkbid0Ci0gKiBiZSBhc3NlcnRpbmcgdGhhdCB3ZSdyZSBvbiBv bmUuCi0gKi8KLXN0YXRpYyBib29sIG9yaWdpbmFsbHlfZmFzdDsKLXN0YXRpYyBpbnQgZGF0YV9j bGVhbnVwX2NvdW50OwotCi12b2lkCi1kYXRhX2NsZWFudXAoaW50ICpkYXRhKSB7Ci0JaWYgKGRh dGFfY2xlYW51cF9jb3VudCA9PSAwKSB7Ci0JCWV4cGVjdF94X2VxKCpkYXRhLCBNQUxMT0NfVFNE X1RFU1RfREFUQV9JTklULAotCQkgICAgIkFyZ3VtZW50IHBhc3NlZCBpbnRvIGNsZWFudXAgZnVu Y3Rpb24gc2hvdWxkIG1hdGNoIHRzZCAiCi0JCSAgICAidmFsdWUiKTsKLQl9Ci0JKytkYXRhX2Ns ZWFudXBfY291bnQ7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIGR1cmluZyBjbGVhbnVwIGZvciB0d28g cm91bmRzLCBpbiBvcmRlciB0byBhc3N1cmUgdGhhdAotCSAqIGplbWFsbG9jJ3MgaW50ZXJuYWwg dHNkIHJlaW5pdGlhbGl6YXRpb24gaGFwcGVucy4KLQkgKi8KLQlib29sIHJlaW5jYXJuYXRlID0g ZmFsc2U7Ci0Jc3dpdGNoICgqZGF0YSkgewotCWNhc2UgTUFMTE9DX1RTRF9URVNUX0RBVEFfSU5J VDoKLQkJKmRhdGEgPSAxOwotCQlyZWluY2FybmF0ZSA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2Ug MToKLQkJKmRhdGEgPSAyOwotCQlyZWluY2FybmF0ZSA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2Ug MjoKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCW5vdF9yZWFjaGVkKCk7Ci0JfQotCi0JaWYgKHJl aW5jYXJuYXRlKSB7Ci0JCXZvaWQgKnAgPSBtYWxsb2N4KDEsIDApOwotCQlleHBlY3RfcHRyX25v dF9udWxsKHAsICJVbmV4cGVjZWQgbWFsbG9jeCgpIGZhaWx1cmUiKTsKLQkJZGFsbG9jeChwLCAw KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkICoKLXRoZF9zdGFydCh2b2lkICphcmcpIHsKLQlpbnQg ZCA9IChpbnQpKHVpbnRwdHJfdClhcmc7Ci0Jdm9pZCAqcDsKLQotCS8qCi0JICogVGVzdCBmcmVl IGJlZm9yZSB0c2QgaW5pdCAtLSB0aGUgZnJlZSBmYXN0IHBhdGggKHdoaWNoIGRvZXMgbm90Ci0J ICogZXhwbGljaXRseSBjaGVjayBmb3IgTlVMTCkgaGFzIHRvIHRvbGVyYXRlIHRoaXMgY2FzZSwg YW5kIGZhbGwgYmFjawotCSAqIHRvIGZyZWVfZGVmYXVsdC4KLQkgKi8KLQlmcmVlKE5VTEwpOwot Ci0JdHNkX3QgKnRzZCA9IHRzZF9mZXRjaCgpOwotCWV4cGVjdF94X2VxKHRzZF90ZXN0X2RhdGFf Z2V0KHRzZCksIE1BTExPQ19UU0RfVEVTVF9EQVRBX0lOSVQsCi0JICAgICJJbml0aWFsIHRzZCBn ZXQgc2hvdWxkIHJldHVybiBpbml0aWFsaXphdGlvbiB2YWx1ZSIpOwotCi0JcCA9IG1hbGxvYygx KTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1hbGxvYygpIGZhaWx1cmUi KTsKLQotCXRzZF90ZXN0X2RhdGFfc2V0KHRzZCwgZCk7Ci0JZXhwZWN0X3hfZXEodHNkX3Rlc3Rf ZGF0YV9nZXQodHNkKSwgZCwKLQkgICAgIkFmdGVyIHRzZCBzZXQsIHRzZCBnZXQgc2hvdWxkIHJl dHVybiB2YWx1ZSB0aGF0IHdhcyBzZXQiKTsKLQotCWQgPSAwOwotCWV4cGVjdF94X2VxKHRzZF90 ZXN0X2RhdGFfZ2V0KHRzZCksIChpbnQpKHVpbnRwdHJfdClhcmcsCi0JICAgICJSZXNldHRpbmcg bG9jYWwgZGF0YSBzaG91bGQgaGF2ZSBubyBlZmZlY3Qgb24gdHNkIik7Ci0KLQl0c2RfdGVzdF9j YWxsYmFja19zZXQodHNkLCAmZGF0YV9jbGVhbnVwKTsKLQotCWZyZWUocCk7Ci0JcmV0dXJuIE5V TEw7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF90c2RfbWFpbl90aHJlYWQpIHsKLQl0aGRfc3RhcnQo KHZvaWQgKikodWludHB0cl90KTB4YTVmM2UzMjkpOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJ Tih0ZXN0X3RzZF9zdWJfdGhyZWFkKSB7Ci0JdGhkX3QgdGhkOwotCi0JZGF0YV9jbGVhbnVwX2Nv dW50ID0gMDsKLQl0aGRfY3JlYXRlKCZ0aGQsIHRoZF9zdGFydCwgKHZvaWQgKilNQUxMT0NfVFNE X1RFU1RfREFUQV9JTklUKTsKLQl0aGRfam9pbih0aGQsIE5VTEwpOwotCS8qCi0JICogV2UgcmVp bmNhcm5hdGUgdHdpY2UgaW4gdGhlIGRhdGEgY2xlYW51cCwgc28gaXQgc2hvdWxkIGV4ZWN1dGUg YXQKLQkgKiBsZWFzdCAzIHRpbWVzLgotCSAqLwotCWV4cGVjdF94X2dlKGRhdGFfY2xlYW51cF9j b3VudCwgMywKLQkgICAgIkNsZWFudXAgZnVuY3Rpb24gc2hvdWxkIGhhdmUgZXhlY3V0ZWQgbXVs dGlwbGUgdGltZXMuIik7Ci19Ci1URVNUX0VORAotCi1zdGF0aWMgdm9pZCAqCi10aGRfc3RhcnRf cmVpbmNhcm5hdGVkKHZvaWQgKmFyZykgewotCXRzZF90ICp0c2QgPSB0c2RfZmV0Y2goKTsKLQlh c3NlcnQodHNkKTsKLQotCXZvaWQgKnAgPSBtYWxsb2MoMSk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVs bChwLCAiVW5leHBlY3RlZCBtYWxsb2MoKSBmYWlsdXJlIik7Ci0KLQkvKiBNYW51YWxseSB0cmln Z2VyIHJlaW5jYXJuYXRpb24uICovCi0JZXhwZWN0X3B0cl9ub3RfbnVsbCh0c2RfYXJlbmFfZ2V0 KHRzZCksCi0JICAgICJTaG91bGQgaGF2ZSB0c2QgYXJlbmEgc2V0LiIpOwotCXRzZF9jbGVhbnVw KCh2b2lkICopdHNkKTsKLQlleHBlY3RfcHRyX251bGwoKnRzZF9hcmVuYXBfZ2V0X3Vuc2FmZSh0 c2QpLAotCSAgICAiVFNEIGFyZW5hIHNob3VsZCBoYXZlIGJlZW4gY2xlYXJlZC4iKTsKLQlleHBl Y3RfdV9lcSh0c2Rfc3RhdGVfZ2V0KHRzZCksIHRzZF9zdGF0ZV9wdXJnYXRvcnksCi0JICAgICJU U0Qgc3RhdGUgc2hvdWxkIGJlIHB1cmdhdG9yeVxuIik7Ci0KLQlmcmVlKHApOwotCWV4cGVjdF91 X2VxKHRzZF9zdGF0ZV9nZXQodHNkKSwgdHNkX3N0YXRlX3JlaW5jYXJuYXRlZCwKLQkgICAgIlRT RCBzdGF0ZSBzaG91bGQgYmUgcmVpbmNhcm5hdGVkXG4iKTsKLQlwID0gbWFsbG9jeCgxLCBNQUxM T0NYX1RDQUNIRV9OT05FKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHAsICJVbmV4cGVjdGVkIG1h bGxvYygpIGZhaWx1cmUiKTsKLQlleHBlY3RfcHRyX251bGwoKnRzZF9hcmVuYXBfZ2V0X3Vuc2Fm ZSh0c2QpLAotCSAgICAiU2hvdWxkIG5vdCBoYXZlIHRzZCBhcmVuYSBzZXQgYWZ0ZXIgcmVpbmNh cm5hdGlvbi4iKTsKLQotCWZyZWUocCk7Ci0JdHNkX2NsZWFudXAoKHZvaWQgKil0c2QpOwotCWV4 cGVjdF9wdHJfbnVsbCgqdHNkX2FyZW5hcF9nZXRfdW5zYWZlKHRzZCksCi0JICAgICJUU0QgYXJl bmEgc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGFmdGVyIDJuZCBjbGVhbnVwLiIpOwotCi0JcmV0 dXJuIE5VTEw7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF90c2RfcmVpbmNhcm5hdGlvbikgewotCXRo ZF90IHRoZDsKLQl0aGRfY3JlYXRlKCZ0aGQsIHRoZF9zdGFydF9yZWluY2FybmF0ZWQsIE5VTEwp OwotCXRoZF9qb2luKHRoZCwgTlVMTCk7Ci19Ci1URVNUX0VORAotCi10eXBlZGVmIHN0cnVjdCB7 Ci0JYXRvbWljX3UzMl90IHBoYXNlOwotCWF0b21pY19iX3QgZXJyb3I7Ci19IGdsb2JhbF9zbG93 X2RhdGFfdDsKLQotc3RhdGljIHZvaWQgKgotdGhkX3N0YXJ0X2dsb2JhbF9zbG93KHZvaWQgKmFy ZykgewotCS8qIFBIQVNFIDAgKi8KLQlnbG9iYWxfc2xvd19kYXRhX3QgKmRhdGEgPSAoZ2xvYmFs X3Nsb3dfZGF0YV90ICopYXJnOwotCWZyZWUobWFsbG9jeCgxLCAwKSk7Ci0KLQl0c2RfdCAqdHNk ID0gdHNkX2ZldGNoKCk7Ci0JLyoKLQkgKiBObyBnbG9iYWwgc2xvd25lc3MgaGFzIGhhcHBlbmVk IHlldDsgdGhlcmUgd2FzIGFuIGVycm9yIGlmIHdlIHdlcmUKLQkgKiBvcmlnaW5hbGx5IGZhc3Qg YnV0IGFyZW4ndCBub3cuCi0JICovCi0JYXRvbWljX3N0b3JlX2IoJmRhdGEtPmVycm9yLCBvcmln aW5hbGx5X2Zhc3QgJiYgIXRzZF9mYXN0KHRzZCksCi0JICAgIEFUT01JQ19TRVFfQ1NUKTsKLQlh dG9taWNfc3RvcmVfdTMyKCZkYXRhLT5waGFzZSwgMSwgQVRPTUlDX1NFUV9DU1QpOwotCi0JLyog UEhBU0UgMiAqLwotCXdoaWxlIChhdG9taWNfbG9hZF91MzIoJmRhdGEtPnBoYXNlLCBBVE9NSUNf U0VRX0NTVCkgIT0gMikgewotCX0KLQlmcmVlKG1hbGxvY3goMSwgMCkpOwotCWF0b21pY19zdG9y ZV9iKCZkYXRhLT5lcnJvciwgdHNkX2Zhc3QodHNkKSwgQVRPTUlDX1NFUV9DU1QpOwotCWF0b21p Y19zdG9yZV91MzIoJmRhdGEtPnBoYXNlLCAzLCBBVE9NSUNfU0VRX0NTVCk7Ci0KLQkvKiBQSEFT RSA0ICovCi0Jd2hpbGUgKGF0b21pY19sb2FkX3UzMigmZGF0YS0+cGhhc2UsIEFUT01JQ19TRVFf Q1NUKSAhPSA0KSB7Ci0JfQotCWZyZWUobWFsbG9jeCgxLCAwKSk7Ci0JYXRvbWljX3N0b3JlX2Io JmRhdGEtPmVycm9yLCB0c2RfZmFzdCh0c2QpLCBBVE9NSUNfU0VRX0NTVCk7Ci0JYXRvbWljX3N0 b3JlX3UzMigmZGF0YS0+cGhhc2UsIDUsIEFUT01JQ19TRVFfQ1NUKTsKLQotCS8qIFBIQVNFIDYg Ki8KLQl3aGlsZSAoYXRvbWljX2xvYWRfdTMyKCZkYXRhLT5waGFzZSwgQVRPTUlDX1NFUV9DU1Qp ICE9IDYpIHsKLQl9Ci0JZnJlZShtYWxsb2N4KDEsIDApKTsKLQkvKiBPbmx5IG9uZSBkZWNyZW1l bnQgc28gZmFyLiAqLwotCWF0b21pY19zdG9yZV9iKCZkYXRhLT5lcnJvciwgdHNkX2Zhc3QodHNk KSwgQVRPTUlDX1NFUV9DU1QpOwotCWF0b21pY19zdG9yZV91MzIoJmRhdGEtPnBoYXNlLCA3LCBB VE9NSUNfU0VRX0NTVCk7Ci0KLQkvKiBQSEFTRSA4ICovCi0Jd2hpbGUgKGF0b21pY19sb2FkX3Uz MigmZGF0YS0+cGhhc2UsIEFUT01JQ19TRVFfQ1NUKSAhPSA4KSB7Ci0JfQotCWZyZWUobWFsbG9j eCgxLCAwKSk7Ci0JLyoKLQkgKiBCb3RoIGRlY3JlbWVudHMgaGFwcGVuZWQ7IHdlIHNob3VsZCBi ZSBmYXN0IGFnYWluIChpZiB3ZSBldmVyCi0JICogd2VyZSkKLQkgKi8KLQlhdG9taWNfc3RvcmVf YigmZGF0YS0+ZXJyb3IsIG9yaWdpbmFsbHlfZmFzdCAmJiAhdHNkX2Zhc3QodHNkKSwKLQkgICAg QVRPTUlDX1NFUV9DU1QpOwotCWF0b21pY19zdG9yZV91MzIoJmRhdGEtPnBoYXNlLCA5LCBBVE9N SUNfU0VRX0NTVCk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3RzZF9n bG9iYWxfc2xvdykgewotCWdsb2JhbF9zbG93X2RhdGFfdCBkYXRhID0ge0FUT01JQ19JTklUKDAp LCBBVE9NSUNfSU5JVChmYWxzZSl9OwotCS8qCi0JICogTm90ZSB0aGF0IHRoZSAibWFsbG9jeCIg aGVyZSAodnMuIG1hbGxvYykgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGUKLQkgKiBjb21waWxlciBp cyBhbGxvd2VkIHRvIG9wdGltaXplIGF3YXkgZnJlZShtYWxsb2MoMSkpIGJ1dCBub3QKLQkgKiBm cmVlKG1hbGxvY3goMSkpLgotCSAqLwotCWZyZWUobWFsbG9jeCgxLCAwKSk7Ci0JdHNkX3QgKnRz ZCA9IHRzZF9mZXRjaCgpOwotCW9yaWdpbmFsbHlfZmFzdCA9IHRzZF9mYXN0KHRzZCk7Ci0KLQl0 aGRfdCB0aGQ7Ci0JdGhkX2NyZWF0ZSgmdGhkLCB0aGRfc3RhcnRfZ2xvYmFsX3Nsb3csICh2b2lk ICopJmRhdGEucGhhc2UpOwotCS8qIFBIQVNFIDEgKi8KLQl3aGlsZSAoYXRvbWljX2xvYWRfdTMy KCZkYXRhLnBoYXNlLCBBVE9NSUNfU0VRX0NTVCkgIT0gMSkgewotCQkvKgotCQkgKiBXZSBkb24n dCBoYXZlIGEgcG9ydGFibGUgY29uZHZhci9zZW1hcGhvcmUgbWVjaGFuaXNtLgotCQkgKiBTcGlu LXdhaXQuCi0JCSAqLwotCX0KLQlleHBlY3RfZmFsc2UoYXRvbWljX2xvYWRfYigmZGF0YS5lcnJv ciwgQVRPTUlDX1NFUV9DU1QpLCAiIik7Ci0JdHNkX2dsb2JhbF9zbG93X2luYyh0c2RfdHNkbih0 c2QpKTsKLQlmcmVlKG1hbGxvY3goMSwgMCkpOwotCWV4cGVjdF9mYWxzZSh0c2RfZmFzdCh0c2Qp LCAiIik7Ci0JYXRvbWljX3N0b3JlX3UzMigmZGF0YS5waGFzZSwgMiwgQVRPTUlDX1NFUV9DU1Qp OwotCi0JLyogUEhBU0UgMyAqLwotCXdoaWxlIChhdG9taWNfbG9hZF91MzIoJmRhdGEucGhhc2Us IEFUT01JQ19TRVFfQ1NUKSAhPSAzKSB7Ci0JfQotCWV4cGVjdF9mYWxzZShhdG9taWNfbG9hZF9i KCZkYXRhLmVycm9yLCBBVE9NSUNfU0VRX0NTVCksICIiKTsKLQkvKiBJbmNyZWFzZSBhZ2Fpbiwg c28gdGhhdCB3ZSBjYW4gdGVzdCBtdWx0aXBsZSBmYXN0L3Nsb3cgY2hhbmdlcy4gKi8KLQl0c2Rf Z2xvYmFsX3Nsb3dfaW5jKHRzZF90c2RuKHRzZCkpOwotCWF0b21pY19zdG9yZV91MzIoJmRhdGEu cGhhc2UsIDQsIEFUT01JQ19TRVFfQ1NUKTsKLQlmcmVlKG1hbGxvY3goMSwgMCkpOwotCWV4cGVj dF9mYWxzZSh0c2RfZmFzdCh0c2QpLCAiIik7Ci0KLQkvKiBQSEFTRSA1ICovCi0Jd2hpbGUgKGF0 b21pY19sb2FkX3UzMigmZGF0YS5waGFzZSwgQVRPTUlDX1NFUV9DU1QpICE9IDUpIHsKLQl9Ci0J ZXhwZWN0X2ZhbHNlKGF0b21pY19sb2FkX2IoJmRhdGEuZXJyb3IsIEFUT01JQ19TRVFfQ1NUKSwg IiIpOwotCXRzZF9nbG9iYWxfc2xvd19kZWModHNkX3RzZG4odHNkKSk7Ci0JYXRvbWljX3N0b3Jl X3UzMigmZGF0YS5waGFzZSwgNiwgQVRPTUlDX1NFUV9DU1QpOwotCS8qIFdlIG9ubHkgZGVjcmVh c2VkIG9uY2U7IHRoaW5ncyBzaG91bGQgc3RpbGwgYmUgc2xvdy4gKi8KLQlmcmVlKG1hbGxvY3go MSwgMCkpOwotCWV4cGVjdF9mYWxzZSh0c2RfZmFzdCh0c2QpLCAiIik7Ci0KLQkvKiBQSEFTRSA3 ICovCi0Jd2hpbGUgKGF0b21pY19sb2FkX3UzMigmZGF0YS5waGFzZSwgQVRPTUlDX1NFUV9DU1Qp ICE9IDcpIHsKLQl9Ci0JZXhwZWN0X2ZhbHNlKGF0b21pY19sb2FkX2IoJmRhdGEuZXJyb3IsIEFU T01JQ19TRVFfQ1NUKSwgIiIpOwotCXRzZF9nbG9iYWxfc2xvd19kZWModHNkX3RzZG4odHNkKSk7 Ci0JYXRvbWljX3N0b3JlX3UzMigmZGF0YS5waGFzZSwgOCwgQVRPTUlDX1NFUV9DU1QpOwotCS8q IFdlIGluY3JlbWVudGVkIGFuZCB0aGVuIGRlY3JlbWVudGVkIHR3aWNlOyB3ZSBzaG91bGQgYmUg ZmFzdCBub3cuICovCi0JZnJlZShtYWxsb2N4KDEsIDApKTsKLQlleHBlY3RfdHJ1ZSghb3JpZ2lu YWxseV9mYXN0IHx8IHRzZF9mYXN0KHRzZCksICIiKTsKLQotCS8qIFBIQVNFIDkgKi8KLQl3aGls ZSAoYXRvbWljX2xvYWRfdTMyKCZkYXRhLnBoYXNlLCBBVE9NSUNfU0VRX0NTVCkgIT0gOSkgewot CX0KLQlleHBlY3RfZmFsc2UoYXRvbWljX2xvYWRfYigmZGF0YS5lcnJvciwgQVRPTUlDX1NFUV9D U1QpLCAiIik7Ci0KLQl0aGRfam9pbih0aGQsIE5VTEwpOwotfQotVEVTVF9FTkQKLQotaW50Ci1t YWluKHZvaWQpIHsKLQkvKiBFbnN1cmUgdHNkIGJvb3RzdHJhcHBlZC4gKi8KLQlpZiAobmFsbG9j eCgxLCAwKSA9PSAwKSB7Ci0JCW1hbGxvY19wcmludGYoIkluaXRpYWxpemF0aW9uIGVycm9yIik7 Ci0JCXJldHVybiB0ZXN0X3N0YXR1c19mYWlsOwotCX0KLQotCXJldHVybiB0ZXN0X25vX3JlZW50 cmFuY3koCi0JICAgIHRlc3RfdHNkX21haW5fdGhyZWFkLAotCSAgICB0ZXN0X3RzZF9zdWJfdGhy ZWFkLAotCSAgICB0ZXN0X3RzZF9yZWluY2FybmF0aW9uLAotCSAgICB0ZXN0X3RzZF9nbG9iYWxf c2xvdyk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L3VhZi5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L3VhZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODQz M2MyLi4wMDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4w L3Rlc3QvdW5pdC91YWYuYworKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi0jaW5jbHVk ZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0jaW5jbHVkZSAidGVzdC9hcmVuYV91dGlsLmgiCi0j aW5jbHVkZSAidGVzdC9zYW4uaCIKLQotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL2NhY2hl X2Jpbi5oIgotI2luY2x1ZGUgImplbWFsbG9jL2ludGVybmFsL3Nhbi5oIgotI2luY2x1ZGUgImpl bWFsbG9jL2ludGVybmFsL3NhZmV0eV9jaGVjay5oIgotCi1jb25zdCBjaGFyICptYWxsb2NfY29u ZiA9IFRFU1RfU0FOX1VBRl9BTElHTl9FTkFCTEU7Ci0KLXN0YXRpYyBzaXplX3Qgc2FuX3VhZl9h bGlnbjsKLQotc3RhdGljIGJvb2wgZmFrZV9hYm9ydF9jYWxsZWQ7Ci12b2lkIGZha2VfYWJvcnQo Y29uc3QgY2hhciAqbWVzc2FnZSkgewotCSh2b2lkKW1lc3NhZ2U7Ci0JZmFrZV9hYm9ydF9jYWxs ZWQgPSB0cnVlOwotfQotCi1zdGF0aWMgdm9pZAotdGVzdF93cml0ZV9hZnRlcl9mcmVlX3ByZSh2 b2lkKSB7Ci0Jc2FmZXR5X2NoZWNrX3NldF9hYm9ydCgmZmFrZV9hYm9ydCk7Ci0JZmFrZV9hYm9y dF9jYWxsZWQgPSBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfd3JpdGVfYWZ0ZXJfZnJl ZV9wb3N0KHZvaWQpIHsKLQlhc3NlcnRfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmZsdXNo IiwgTlVMTCwgTlVMTCwgTlVMTCwgMCksCi0JICAgIDAsICJVbmV4cGVjdGVkIHRjYWNoZSBmbHVz aCBmYWlsdXJlIik7Ci0JZXhwZWN0X3RydWUoZmFrZV9hYm9ydF9jYWxsZWQsICJVc2UtYWZ0ZXIt ZnJlZSBjaGVjayBkaWRuJ3QgZmlyZS4iKTsKLQlzYWZldHlfY2hlY2tfc2V0X2Fib3J0KE5VTEwp OwotfQotCi1zdGF0aWMgYm9vbAotdWFmX2RldGVjdGlvbl9lbmFibGVkKHZvaWQpIHsKLQlpZiAo IWNvbmZpZ191YWZfZGV0ZWN0aW9uIHx8ICFzYW5fdWFmX2RldGVjdGlvbl9lbmFibGVkKCkpIHsK LQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXNzaXplX3QgbGdfc2FuX3VhZl9hbGlnbjsKLQlzaXpl X3Qgc3ogPSBzaXplb2YobGdfc2FuX3VhZl9hbGlnbik7Ci0JYXNzZXJ0X2RfZXEobWFsbGN0bCgi b3B0LmxnX3Nhbl91YWZfYWxpZ24iLCAmbGdfc2FuX3VhZl9hbGlnbiwgJnN6LAotCSAgICBOVUxM LCAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci0JaWYgKGxnX3Nhbl91YWZf YWxpZ24gPCAwKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JYXNzZXJ0X3pkX2dlKGxnX3Nhbl91 YWZfYWxpZ24sIExHX1BBR0UsICJzYW5fdWFmX2FsaWduIG91dCBvZiByYW5nZSIpOwotCXNhbl91 YWZfYWxpZ24gPSAoc2l6ZV90KTEgPDwgbGdfc2FuX3VhZl9hbGlnbjsKLQotCWJvb2wgdGNhY2hl X2VuYWJsZWQ7Ci0Jc3ogPSBzaXplb2YodGNhY2hlX2VuYWJsZWQpOwotCWFzc2VydF9kX2VxKG1h bGxjdGwoInRocmVhZC50Y2FjaGUuZW5hYmxlZCIsICZ0Y2FjaGVfZW5hYmxlZCwgJnN6LCBOVUxM LAotCSAgICAwKSwgMCwgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci0JaWYgKCF0Y2Fj aGVfZW5hYmxlZCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0K LXN0YXRpYyBzaXplX3QKLXJlYWRfdGNhY2hlX3N0YXNoZWRfYnl0ZXModW5zaWduZWQgYXJlbmFf aW5kKSB7Ci0JaWYgKCFjb25maWdfc3RhdHMpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JdWludDY0 X3QgZXBvY2g7Ci0JYXNzZXJ0X2RfZXEobWFsbGN0bCgiZXBvY2giLCBOVUxMLCBOVUxMLCAodm9p ZCAqKSZlcG9jaCwgc2l6ZW9mKGVwb2NoKSksCi0JICAgIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwo KSBmYWlsdXJlIik7Ci0KLQlzaXplX3QgdGNhY2hlX3N0YXNoZWRfYnl0ZXM7Ci0Jc2l6ZV90IHN6 ID0gc2l6ZW9mKHRjYWNoZV9zdGFzaGVkX2J5dGVzKTsKLQlhc3NlcnRfZF9lcShtYWxsY3RsKAot CSAgICAic3RhdHMuYXJlbmFzLiIgU1RSSU5HSUZZKE1BTExDVExfQVJFTkFTX0FMTCkKLQkgICAg Ii50Y2FjaGVfc3Rhc2hlZF9ieXRlcyIsICZ0Y2FjaGVfc3Rhc2hlZF9ieXRlcywgJnN6LCBOVUxM LCAwKSwgMCwKLQkgICAgIlVuZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci0KLQlyZXR1cm4g dGNhY2hlX3N0YXNoZWRfYnl0ZXM7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3VzZV9hZnRlcl9m cmVlKHNpemVfdCBhbGxvY19zaXplLCBib29sIHdyaXRlX2FmdGVyX2ZyZWUpIHsKLQl2b2lkICpw dHIgPSAodm9pZCAqKSh1aW50cHRyX3Qpc2FuX3VhZl9hbGlnbjsKLQlhc3NlcnRfdHJ1ZShjYWNo ZV9iaW5fbm9uZmFzdF9hbGlnbmVkKHB0ciksICJXcm9uZyBhbGlnbm1lbnQiKTsKLQlwdHIgPSAo dm9pZCAqKSgodWludHB0cl90KTEyMyAqICh1aW50cHRyX3Qpc2FuX3VhZl9hbGlnbik7Ci0JYXNz ZXJ0X3RydWUoY2FjaGVfYmluX25vbmZhc3RfYWxpZ25lZChwdHIpLCAiV3JvbmcgYWxpZ25tZW50 Iik7Ci0JcHRyID0gKHZvaWQgKikoKHVpbnRwdHJfdClzYW5fdWFmX2FsaWduICsgMSk7Ci0JYXNz ZXJ0X2ZhbHNlKGNhY2hlX2Jpbl9ub25mYXN0X2FsaWduZWQocHRyKSwgIldyb25nIGFsaWdubWVu dCIpOwotCi0JLyoKLQkgKiBEaXNhYmxlIHB1cmdpbmcgKC0xKSBzbyB0aGF0IGFsbCBkaXJ0eSBw YWdlcyByZW1haW4gY29tbWl0dGVkLCB0bwotCSAqIG1ha2UgdXNlLWFmdGVyLWZyZWUgdG9sZXJh YmxlLgotCSAqLwotCXVuc2lnbmVkIGFyZW5hX2luZCA9IGRvX2FyZW5hX2NyZWF0ZSgtMSwgLTEp OwotCWludCBmbGFncyA9IE1BTExPQ1hfQVJFTkEoYXJlbmFfaW5kKSB8IE1BTExPQ1hfVENBQ0hF X05PTkU7Ci0KLQlzaXplX3Qgbl9tYXggPSBzYW5fdWFmX2FsaWduICogMjsKLQl2b2lkICoqaXRl bXMgPSBtYWxsb2N4KG5fbWF4ICogc2l6ZW9mKHZvaWQgKiksIGZsYWdzKTsKLQlhc3NlcnRfcHRy X25vdF9udWxsKGl0ZW1zLCAiVW5leHBlY3RlZCBtYWxsb2N4IGZhaWx1cmUiKTsKLQotCWJvb2wg Zm91bmQgPSBmYWxzZTsKLQlzaXplX3QgaXRlciA9IDA7Ci0JY2hhciBtYWdpYyA9ICdzJzsKLQlh c3NlcnRfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmZsdXNoIiwgTlVMTCwgTlVMTCwgTlVM TCwgMCksCi0JICAgIDAsICJVbmV4cGVjdGVkIHRjYWNoZSBmbHVzaCBmYWlsdXJlIik7Ci0Jd2hp bGUgKCFmb3VuZCkgewotCQlwdHIgPSBtYWxsb2N4KGFsbG9jX3NpemUsIGZsYWdzKTsKLQkJYXNz ZXJ0X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvY3ggZmFpbHVyZSIpOwotCi0J CWZvdW5kID0gY2FjaGVfYmluX25vbmZhc3RfYWxpZ25lZChwdHIpOwotCQkqKGNoYXIgKilwdHIg PSBtYWdpYzsKLQkJaXRlbXNbaXRlcl0gPSBwdHI7Ci0JCWFzc2VydF96dV9sdChpdGVyKyssIG5f bWF4LCAiTm8gYWxpZ25lZCBwdHIgZm91bmQiKTsKLQl9Ci0KLQlpZiAod3JpdGVfYWZ0ZXJfZnJl ZSkgewotCQl0ZXN0X3dyaXRlX2FmdGVyX2ZyZWVfcHJlKCk7Ci0JfQotCWJvb2wganVua2VkID0g ZmFsc2U7Ci0Jd2hpbGUgKGl0ZXItLSAhPSAwKSB7Ci0JCWNoYXIgKnZvbGF0aWxlIG1lbSA9IGl0 ZW1zW2l0ZXJdOwotCQlhc3NlcnRfY19lcSgqbWVtLCBtYWdpYywgIlVuZXhwZWN0ZWQgbWVtb3J5 IGNvbnRlbnQiKTsKLQkJc2l6ZV90IHN0YXNoZWRfYmVmb3JlID0gcmVhZF90Y2FjaGVfc3Rhc2hl ZF9ieXRlcyhhcmVuYV9pbmQpOwotCQlmcmVlKG1lbSk7Ci0JCWlmICgqbWVtICE9IG1hZ2ljKSB7 Ci0JCQlqdW5rZWQgPSB0cnVlOwotCQkJYXNzZXJ0X2NfZXEoKm1lbSwgKGNoYXIpdWFmX2RldGVj dF9qdW5rLAotCQkJICAgICJVbmV4cGVjdGVkIGp1bmstZmlsbGluZyBieXRlcyIpOwotCQkJaWYg KHdyaXRlX2FmdGVyX2ZyZWUpIHsKLQkJCQkqKGNoYXIgKiltZW0gPSBtYWdpYyArIDE7Ci0JCQl9 Ci0KLQkJCXNpemVfdCBzdGFzaGVkX2FmdGVyID0gcmVhZF90Y2FjaGVfc3Rhc2hlZF9ieXRlcygK LQkJCSAgICBhcmVuYV9pbmQpOwotCQkJLyoKLQkJCSAqIEFuIGVkZ2UgY2FzZSBpcyB0aGUgZGVh bGxvY2F0aW9uIGFib3ZlIHRyaWdnZXJpbmcgdGhlCi0JCQkgKiB0Y2FjaGUgR0MgZXZlbnQsIGlu IHdoaWNoIGNhc2UgdGhlIHN0YXNoZWQgcG9pbnRlcnMKLQkJCSAqIG1heSBnZXQgZmx1c2hlZCBp bW1lZGlhdGVseSwgYmVmb3JlIHJldHVybmluZyBmcm9tCi0JCQkgKiBmcmVlKCkuICBUcmVhdCB0 aGVzZSBjYXNlcyBhcyBjaGVja2VkIGFscmVhZHkuCi0JCQkgKi8KLQkJCWlmIChzdGFzaGVkX2Fm dGVyIDw9IHN0YXNoZWRfYmVmb3JlKSB7Ci0JCQkJZmFrZV9hYm9ydF9jYWxsZWQgPSB0cnVlOwot CQkJfQotCQl9Ci0JCS8qIEZsdXNoIHRjYWNoZSAoaW5jbHVkaW5nIHN0YXNoZWQpLiAqLwotCQlh c3NlcnRfZF9lcShtYWxsY3RsKCJ0aHJlYWQudGNhY2hlLmZsdXNoIiwgTlVMTCwgTlVMTCwgTlVM TCwgMCksCi0JCSAgICAwLCAiVW5leHBlY3RlZCB0Y2FjaGUgZmx1c2ggZmFpbHVyZSIpOwotCX0K LQlleHBlY3RfdHJ1ZShqdW5rZWQsICJBbGlnbmVkIHB0ciBub3QganVua2VkIik7Ci0JaWYgKHdy aXRlX2FmdGVyX2ZyZWUpIHsKLQkJdGVzdF93cml0ZV9hZnRlcl9mcmVlX3Bvc3QoKTsKLQl9Ci0K LQlkYWxsb2N4KGl0ZW1zLCBmbGFncyk7Ci0JZG9fYXJlbmFfZGVzdHJveShhcmVuYV9pbmQpOwot fQotCi1URVNUX0JFR0lOKHRlc3RfcmVhZF9hZnRlcl9mcmVlKSB7Ci0JdGVzdF9za2lwX2lmKCF1 YWZfZGV0ZWN0aW9uX2VuYWJsZWQoKSk7Ci0KLQl0ZXN0X3VzZV9hZnRlcl9mcmVlKHNpemVvZih2 b2lkICopLCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIGZhbHNlKTsKLQl0ZXN0X3VzZV9hZnRlcl9m cmVlKHNpemVvZih2b2lkICopICsgMSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSgxNiwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSgyMCwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSgzMiwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSgzMywgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSg0OCwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSg2NCwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSg2NSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7Ci0J dGVzdF91c2VfYWZ0ZXJfZnJlZSgxMjksIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gZmFsc2UpOwot CXRlc3RfdXNlX2FmdGVyX2ZyZWUoMjU1LCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIGZhbHNlKTsK LQl0ZXN0X3VzZV9hZnRlcl9mcmVlKDI1NiwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyBmYWxzZSk7 Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3Rfd3JpdGVfYWZ0ZXJfZnJlZSkgewotCXRl c3Rfc2tpcF9pZighdWFmX2RldGVjdGlvbl9lbmFibGVkKCkpOwotCi0JdGVzdF91c2VfYWZ0ZXJf ZnJlZShzaXplb2Yodm9pZCAqKSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVlKTsKLQl0ZXN0 X3VzZV9hZnRlcl9mcmVlKHNpemVvZih2b2lkICopICsgMSwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAq LyB0cnVlKTsKLQl0ZXN0X3VzZV9hZnRlcl9mcmVlKDE2LCAvKiB3cml0ZV9hZnRlcl9mcmVlICov IHRydWUpOwotCXRlc3RfdXNlX2FmdGVyX2ZyZWUoMjAsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8g dHJ1ZSk7Ci0JdGVzdF91c2VfYWZ0ZXJfZnJlZSgzMiwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0 cnVlKTsKLQl0ZXN0X3VzZV9hZnRlcl9mcmVlKDMzLCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIHRy dWUpOwotCXRlc3RfdXNlX2FmdGVyX2ZyZWUoNDgsIC8qIHdyaXRlX2FmdGVyX2ZyZWUgKi8gdHJ1 ZSk7Ci0JdGVzdF91c2VfYWZ0ZXJfZnJlZSg2NCwgLyogd3JpdGVfYWZ0ZXJfZnJlZSAqLyB0cnVl KTsKLQl0ZXN0X3VzZV9hZnRlcl9mcmVlKDY1LCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIHRydWUp OwotCXRlc3RfdXNlX2FmdGVyX2ZyZWUoMTI5LCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIHRydWUp OwotCXRlc3RfdXNlX2FmdGVyX2ZyZWUoMjU1LCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIHRydWUp OwotCXRlc3RfdXNlX2FmdGVyX2ZyZWUoMjU2LCAvKiB3cml0ZV9hZnRlcl9mcmVlICovIHRydWUp OwotfQotVEVTVF9FTkQKLQotc3RhdGljIGJvb2wKLWNoZWNrX2FsbG9jYXRlZF9pbnRhY3Qodm9p ZCAqKmFsbG9jYXRlZCwgc2l6ZV90IG5fYWxsb2MpIHsKLQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgbl9hbGxvYzsgaSsrKSB7Ci0JCXZvaWQgKnB0ciA9ICoodm9pZCAqKilhbGxvY2F0ZWRbaV07 Ci0JCWJvb2wgZm91bmQgPSBmYWxzZTsKLQkJZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG5fYWxs b2M7IGorKykgewotCQkJaWYgKHB0ciA9PSBhbGxvY2F0ZWRbal0pIHsKLQkJCQlmb3VuZCA9IHRy dWU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZCkgewotCQkJcmV0dXJuIGZh bHNlOwotCQl9Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLVRFU1RfQkVHSU4odGVzdF91c2Vf YWZ0ZXJfZnJlZV9pbnRlZ3JhdGlvbikgewotCXRlc3Rfc2tpcF9pZighdWFmX2RldGVjdGlvbl9l bmFibGVkKCkpOwotCi0JdW5zaWduZWQgYXJlbmFfaW5kID0gZG9fYXJlbmFfY3JlYXRlKC0xLCAt MSk7Ci0JaW50IGZsYWdzID0gTUFMTE9DWF9BUkVOQShhcmVuYV9pbmQpOwotCi0Jc2l6ZV90IG5f YWxsb2MgPSBzYW5fdWFmX2FsaWduICogMjsKLQl2b2lkICoqYWxsb2NhdGVkID0gbWFsbG9jeChu X2FsbG9jICogc2l6ZW9mKHZvaWQgKiksIGZsYWdzKTsKLQlhc3NlcnRfcHRyX25vdF9udWxsKGFs bG9jYXRlZCwgIlVuZXhwZWN0ZWQgbWFsbG9jeCBmYWlsdXJlIik7Ci0KLQlmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgbl9hbGxvYzsgaSsrKSB7Ci0JCWFsbG9jYXRlZFtpXSA9IG1hbGxvY3goc2l6 ZW9mKHZvaWQgKikgKiA4LCBmbGFncyk7Ci0JCWFzc2VydF9wdHJfbm90X251bGwoYWxsb2NhdGVk W2ldLCAiVW5leHBlY3RlZCBtYWxsb2N4IGZhaWx1cmUiKTsKLQkJaWYgKGkgPiAwKSB7Ci0JCQkv KiBFbXVsYXRlIGEgY2lyY3VsYXIgbGlzdC4gKi8KLQkJCSoodm9pZCAqKilhbGxvY2F0ZWRbaV0g PSBhbGxvY2F0ZWRbaSAtIDFdOwotCQl9Ci0JfQotCSoodm9pZCAqKilhbGxvY2F0ZWRbMF0gPSBh bGxvY2F0ZWRbbl9hbGxvYyAtIDFdOwotCWV4cGVjdF90cnVlKGNoZWNrX2FsbG9jYXRlZF9pbnRh Y3QoYWxsb2NhdGVkLCBuX2FsbG9jKSwKLQkgICAgIkFsbG9jYXRlZCBkYXRhIGNvcnJ1cHRlZCIp OwotCi0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fYWxsb2M7IGkrKykgewotCQlmcmVlKGFs bG9jYXRlZFtpXSk7Ci0JfQotCS8qIFJlYWQtYWZ0ZXItZnJlZSAqLwotCWV4cGVjdF9mYWxzZShj aGVja19hbGxvY2F0ZWRfaW50YWN0KGFsbG9jYXRlZCwgbl9hbGxvYyksCi0JICAgICJKdW5rLWZp bGxpbmcgbm90IGRldGVjdGVkIik7Ci0KLQl0ZXN0X3dyaXRlX2FmdGVyX2ZyZWVfcHJlKCk7Ci0J Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fYWxsb2M7IGkrKykgewotCQlhbGxvY2F0ZWRbaV0g PSBtYWxsb2N4KHNpemVvZih2b2lkICopLCBmbGFncyk7Ci0JCWFzc2VydF9wdHJfbm90X251bGwo YWxsb2NhdGVkW2ldLCAiVW5leHBlY3RlZCBtYWxsb2N4IGZhaWx1cmUiKTsKLQkJKih2b2lkICoq KWFsbG9jYXRlZFtpXSA9ICh2b2lkICopKHVpbnRwdHJfdClpOwotCX0KLQkvKiBXcml0ZS1hZnRl ci1mcmVlICovCi0JZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5fYWxsb2M7IGkrKykgewotCQlm cmVlKGFsbG9jYXRlZFtpXSk7Ci0JCSoodm9pZCAqKilhbGxvY2F0ZWRbaV0gPSBOVUxMOwotCX0K LQl0ZXN0X3dyaXRlX2FmdGVyX2ZyZWVfcG9zdCgpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWlu KHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9yZWFkX2FmdGVyX2ZyZWUsCi0JICAg IHRlc3Rfd3JpdGVfYWZ0ZXJfZnJlZSwKLQkgICAgdGVzdF91c2VfYWZ0ZXJfZnJlZV9pbnRlZ3Jh dGlvbik7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2Mt NS4zLjAvdGVzdC91bml0L3dpdG5lc3MuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFs bG9jLTUuMy4wL3Rlc3QvdW5pdC93aXRuZXNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDVhNmM0NDguLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxs b2MtNS4zLjAvdGVzdC91bml0L3dpdG5lc3MuYworKysgL2Rldi9udWxsCkBAIC0xLDI4MCArMCww IEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLXN0YXRpYyB3aXRuZXNzX2xv Y2tfZXJyb3JfdCAqd2l0bmVzc19sb2NrX2Vycm9yX29yaWc7Ci1zdGF0aWMgd2l0bmVzc19vd25l cl9lcnJvcl90ICp3aXRuZXNzX293bmVyX2Vycm9yX29yaWc7Ci1zdGF0aWMgd2l0bmVzc19ub3Rf b3duZXJfZXJyb3JfdCAqd2l0bmVzc19ub3Rfb3duZXJfZXJyb3Jfb3JpZzsKLXN0YXRpYyB3aXRu ZXNzX2RlcHRoX2Vycm9yX3QgKndpdG5lc3NfZGVwdGhfZXJyb3Jfb3JpZzsKLQotc3RhdGljIGJv b2wgc2F3X2xvY2tfZXJyb3I7Ci1zdGF0aWMgYm9vbCBzYXdfb3duZXJfZXJyb3I7Ci1zdGF0aWMg Ym9vbCBzYXdfbm90X293bmVyX2Vycm9yOwotc3RhdGljIGJvb2wgc2F3X2RlcHRoX2Vycm9yOwot Ci1zdGF0aWMgdm9pZAotd2l0bmVzc19sb2NrX2Vycm9yX2ludGVyY2VwdChjb25zdCB3aXRuZXNz X2xpc3RfdCAqd2l0bmVzc2VzLAotICAgIGNvbnN0IHdpdG5lc3NfdCAqd2l0bmVzcykgewotCXNh d19sb2NrX2Vycm9yID0gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQKLXdpdG5lc3Nfb3duZXJfZXJy b3JfaW50ZXJjZXB0KGNvbnN0IHdpdG5lc3NfdCAqd2l0bmVzcykgewotCXNhd19vd25lcl9lcnJv ciA9IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13aXRuZXNzX25vdF9vd25lcl9lcnJvcl9pbnRl cmNlcHQoY29uc3Qgd2l0bmVzc190ICp3aXRuZXNzKSB7Ci0Jc2F3X25vdF9vd25lcl9lcnJvciA9 IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkCi13aXRuZXNzX2RlcHRoX2Vycm9yX2ludGVyY2VwdChj b25zdCB3aXRuZXNzX2xpc3RfdCAqd2l0bmVzc2VzLAotICAgIHdpdG5lc3NfcmFua190IHJhbmtf aW5jbHVzaXZlLCB1bnNpZ25lZCBkZXB0aCkgewotCXNhd19kZXB0aF9lcnJvciA9IHRydWU7Ci19 Ci0KLXN0YXRpYyBpbnQKLXdpdG5lc3NfY29tcChjb25zdCB3aXRuZXNzX3QgKmEsIHZvaWQgKm9h LCBjb25zdCB3aXRuZXNzX3QgKmIsIHZvaWQgKm9iKSB7Ci0JZXhwZWN0X3VfZXEoYS0+cmFuaywg Yi0+cmFuaywgIldpdG5lc3NlcyBzaG91bGQgaGF2ZSBlcXVhbCByYW5rIik7Ci0KLQlhc3NlcnQo b2EgPT0gKHZvaWQgKilhKTsKLQlhc3NlcnQob2IgPT0gKHZvaWQgKiliKTsKLQotCXJldHVybiBz dHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXdpdG5lc3NfY29tcF9y ZXZlcnNlKGNvbnN0IHdpdG5lc3NfdCAqYSwgdm9pZCAqb2EsIGNvbnN0IHdpdG5lc3NfdCAqYiwK LSAgICB2b2lkICpvYikgewotCWV4cGVjdF91X2VxKGEtPnJhbmssIGItPnJhbmssICJXaXRuZXNz ZXMgc2hvdWxkIGhhdmUgZXF1YWwgcmFuayIpOwotCi0JYXNzZXJ0KG9hID09ICh2b2lkICopYSk7 Ci0JYXNzZXJ0KG9iID09ICh2b2lkICopYik7Ci0KLQlyZXR1cm4gLXN0cmNtcChhLT5uYW1lLCBi LT5uYW1lKTsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3dpdG5lc3MpIHsKLQl3aXRuZXNzX3QgYSwg YjsKLQl3aXRuZXNzX3RzZG5fdCB3aXRuZXNzX3RzZG4gPSB7IFdJVE5FU1NfVFNEX0lOSVRJQUxJ WkVSIH07Ci0KLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19kZWJ1Zyk7Ci0KLQl3aXRuZXNzX2Fzc2Vy dF9sb2NrbGVzcygmd2l0bmVzc190c2RuKTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVz c190c2RuLCAwKTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKCZ3aXRuZXNzX3RzZG4s ICh3aXRuZXNzX3JhbmtfdCkxVSwgMCk7Ci0KLQl3aXRuZXNzX2luaXQoJmEsICJhIiwgMSwgTlVM TCwgTlVMTCk7Ci0Jd2l0bmVzc19hc3NlcnRfbm90X293bmVyKCZ3aXRuZXNzX3RzZG4sICZhKTsK LQl3aXRuZXNzX2xvY2soJndpdG5lc3NfdHNkbiwgJmEpOwotCXdpdG5lc3NfYXNzZXJ0X293bmVy KCZ3aXRuZXNzX3RzZG4sICZhKTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVzc190c2Ru LCAxKTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aF90b19yYW5rKCZ3aXRuZXNzX3RzZG4sICh3aXRu ZXNzX3JhbmtfdCkxVSwgMSk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVz c190c2RuLCAod2l0bmVzc19yYW5rX3QpMlUsIDApOwotCi0Jd2l0bmVzc19pbml0KCZiLCAiYiIs IDIsIE5VTEwsIE5VTEwpOwotCXdpdG5lc3NfYXNzZXJ0X25vdF9vd25lcigmd2l0bmVzc190c2Ru LCAmYik7Ci0Jd2l0bmVzc19sb2NrKCZ3aXRuZXNzX3RzZG4sICZiKTsKLQl3aXRuZXNzX2Fzc2Vy dF9vd25lcigmd2l0bmVzc190c2RuLCAmYik7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5l c3NfdHNkbiwgMik7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVzc190c2Ru LCAod2l0bmVzc19yYW5rX3QpMVUsIDIpOwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3RvX3Jhbmso JndpdG5lc3NfdHNkbiwgKHdpdG5lc3NfcmFua190KTJVLCAxKTsKLQl3aXRuZXNzX2Fzc2VydF9k ZXB0aF90b19yYW5rKCZ3aXRuZXNzX3RzZG4sICh3aXRuZXNzX3JhbmtfdCkzVSwgMCk7Ci0KLQl3 aXRuZXNzX3VubG9jaygmd2l0bmVzc190c2RuLCAmYSk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGgo JndpdG5lc3NfdHNkbiwgMSk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVz c190c2RuLCAod2l0bmVzc19yYW5rX3QpMVUsIDEpOwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoX3Rv X3JhbmsoJndpdG5lc3NfdHNkbiwgKHdpdG5lc3NfcmFua190KTJVLCAxKTsKLQl3aXRuZXNzX2Fz c2VydF9kZXB0aF90b19yYW5rKCZ3aXRuZXNzX3RzZG4sICh3aXRuZXNzX3JhbmtfdCkzVSwgMCk7 Ci0Jd2l0bmVzc191bmxvY2soJndpdG5lc3NfdHNkbiwgJmIpOwotCi0Jd2l0bmVzc19hc3NlcnRf bG9ja2xlc3MoJndpdG5lc3NfdHNkbik7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3Nf dHNkbiwgMCk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGhfdG9fcmFuaygmd2l0bmVzc190c2RuLCAo d2l0bmVzc19yYW5rX3QpMVUsIDApOwotfQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3dp dG5lc3NfY29tcCkgewotCXdpdG5lc3NfdCBhLCBiLCBjLCBkOwotCXdpdG5lc3NfdHNkbl90IHdp dG5lc3NfdHNkbiA9IHsgV0lUTkVTU19UU0RfSU5JVElBTElaRVIgfTsKLQotCXRlc3Rfc2tpcF9p ZighY29uZmlnX2RlYnVnKTsKLQotCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKCZ3aXRuZXNzX3Rz ZG4pOwotCi0Jd2l0bmVzc19pbml0KCZhLCAiYSIsIDEsIHdpdG5lc3NfY29tcCwgJmEpOwotCXdp dG5lc3NfYXNzZXJ0X25vdF9vd25lcigmd2l0bmVzc190c2RuLCAmYSk7Ci0Jd2l0bmVzc19sb2Nr KCZ3aXRuZXNzX3RzZG4sICZhKTsKLQl3aXRuZXNzX2Fzc2VydF9vd25lcigmd2l0bmVzc190c2Ru LCAmYSk7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMSk7Ci0KLQl3aXRu ZXNzX2luaXQoJmIsICJiIiwgMSwgd2l0bmVzc19jb21wLCAmYik7Ci0Jd2l0bmVzc19hc3NlcnRf bm90X293bmVyKCZ3aXRuZXNzX3RzZG4sICZiKTsKLQl3aXRuZXNzX2xvY2soJndpdG5lc3NfdHNk biwgJmIpOwotCXdpdG5lc3NfYXNzZXJ0X293bmVyKCZ3aXRuZXNzX3RzZG4sICZiKTsKLQl3aXRu ZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVzc190c2RuLCAyKTsKLQl3aXRuZXNzX3VubG9jaygmd2l0 bmVzc190c2RuLCAmYik7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMSk7 Ci0KLQl3aXRuZXNzX2xvY2tfZXJyb3Jfb3JpZyA9IHdpdG5lc3NfbG9ja19lcnJvcjsKLQl3aXRu ZXNzX2xvY2tfZXJyb3IgPSB3aXRuZXNzX2xvY2tfZXJyb3JfaW50ZXJjZXB0OwotCXNhd19sb2Nr X2Vycm9yID0gZmFsc2U7Ci0KLQl3aXRuZXNzX2luaXQoJmMsICJjIiwgMSwgd2l0bmVzc19jb21w X3JldmVyc2UsICZjKTsKLQl3aXRuZXNzX2Fzc2VydF9ub3Rfb3duZXIoJndpdG5lc3NfdHNkbiwg JmMpOwotCWV4cGVjdF9mYWxzZShzYXdfbG9ja19lcnJvciwgIlVuZXhwZWN0ZWQgd2l0bmVzcyBs b2NrIGVycm9yIik7Ci0Jd2l0bmVzc19sb2NrKCZ3aXRuZXNzX3RzZG4sICZjKTsKLQlleHBlY3Rf dHJ1ZShzYXdfbG9ja19lcnJvciwgIkV4cGVjdGVkIHdpdG5lc3MgbG9jayBlcnJvciIpOwotCXdp dG5lc3NfdW5sb2NrKCZ3aXRuZXNzX3RzZG4sICZjKTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aCgm d2l0bmVzc190c2RuLCAxKTsKLQotCXNhd19sb2NrX2Vycm9yID0gZmFsc2U7Ci0KLQl3aXRuZXNz X2luaXQoJmQsICJkIiwgMSwgTlVMTCwgTlVMTCk7Ci0Jd2l0bmVzc19hc3NlcnRfbm90X293bmVy KCZ3aXRuZXNzX3RzZG4sICZkKTsKLQlleHBlY3RfZmFsc2Uoc2F3X2xvY2tfZXJyb3IsICJVbmV4 cGVjdGVkIHdpdG5lc3MgbG9jayBlcnJvciIpOwotCXdpdG5lc3NfbG9jaygmd2l0bmVzc190c2Ru LCAmZCk7Ci0JZXhwZWN0X3RydWUoc2F3X2xvY2tfZXJyb3IsICJFeHBlY3RlZCB3aXRuZXNzIGxv Y2sgZXJyb3IiKTsKLQl3aXRuZXNzX3VubG9jaygmd2l0bmVzc190c2RuLCAmZCk7Ci0Jd2l0bmVz c19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMSk7Ci0KLQl3aXRuZXNzX3VubG9jaygmd2l0 bmVzc190c2RuLCAmYSk7Ci0KLQl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVzc190c2Ru KTsKLQotCXdpdG5lc3NfbG9ja19lcnJvciA9IHdpdG5lc3NfbG9ja19lcnJvcl9vcmlnOwotfQot VEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3dpdG5lc3NfcmV2ZXJzYWwpIHsKLQl3aXRuZXNz X3QgYSwgYjsKLQl3aXRuZXNzX3RzZG5fdCB3aXRuZXNzX3RzZG4gPSB7IFdJVE5FU1NfVFNEX0lO SVRJQUxJWkVSIH07Ci0KLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19kZWJ1Zyk7Ci0KLQl3aXRuZXNz X2xvY2tfZXJyb3Jfb3JpZyA9IHdpdG5lc3NfbG9ja19lcnJvcjsKLQl3aXRuZXNzX2xvY2tfZXJy b3IgPSB3aXRuZXNzX2xvY2tfZXJyb3JfaW50ZXJjZXB0OwotCXNhd19sb2NrX2Vycm9yID0gZmFs c2U7Ci0KLQl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVzc190c2RuKTsKLQotCXdpdG5l c3NfaW5pdCgmYSwgImEiLCAxLCBOVUxMLCBOVUxMKTsKLQl3aXRuZXNzX2luaXQoJmIsICJiIiwg MiwgTlVMTCwgTlVMTCk7Ci0KLQl3aXRuZXNzX2xvY2soJndpdG5lc3NfdHNkbiwgJmIpOwotCXdp dG5lc3NfYXNzZXJ0X2RlcHRoKCZ3aXRuZXNzX3RzZG4sIDEpOwotCWV4cGVjdF9mYWxzZShzYXdf bG9ja19lcnJvciwgIlVuZXhwZWN0ZWQgd2l0bmVzcyBsb2NrIGVycm9yIik7Ci0Jd2l0bmVzc19s b2NrKCZ3aXRuZXNzX3RzZG4sICZhKTsKLQlleHBlY3RfdHJ1ZShzYXdfbG9ja19lcnJvciwgIkV4 cGVjdGVkIHdpdG5lc3MgbG9jayBlcnJvciIpOwotCi0Jd2l0bmVzc191bmxvY2soJndpdG5lc3Nf dHNkbiwgJmEpOwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoKCZ3aXRuZXNzX3RzZG4sIDEpOwotCXdp dG5lc3NfdW5sb2NrKCZ3aXRuZXNzX3RzZG4sICZiKTsKLQotCXdpdG5lc3NfYXNzZXJ0X2xvY2ts ZXNzKCZ3aXRuZXNzX3RzZG4pOwotCi0Jd2l0bmVzc19sb2NrX2Vycm9yID0gd2l0bmVzc19sb2Nr X2Vycm9yX29yaWc7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3Rfd2l0bmVzc19yZWN1 cnNpdmUpIHsKLQl3aXRuZXNzX3QgYTsKLQl3aXRuZXNzX3RzZG5fdCB3aXRuZXNzX3RzZG4gPSB7 IFdJVE5FU1NfVFNEX0lOSVRJQUxJWkVSIH07Ci0KLQl0ZXN0X3NraXBfaWYoIWNvbmZpZ19kZWJ1 Zyk7Ci0KLQl3aXRuZXNzX25vdF9vd25lcl9lcnJvcl9vcmlnID0gd2l0bmVzc19ub3Rfb3duZXJf ZXJyb3I7Ci0Jd2l0bmVzc19ub3Rfb3duZXJfZXJyb3IgPSB3aXRuZXNzX25vdF9vd25lcl9lcnJv cl9pbnRlcmNlcHQ7Ci0Jc2F3X25vdF9vd25lcl9lcnJvciA9IGZhbHNlOwotCi0Jd2l0bmVzc19s b2NrX2Vycm9yX29yaWcgPSB3aXRuZXNzX2xvY2tfZXJyb3I7Ci0Jd2l0bmVzc19sb2NrX2Vycm9y ID0gd2l0bmVzc19sb2NrX2Vycm9yX2ludGVyY2VwdDsKLQlzYXdfbG9ja19lcnJvciA9IGZhbHNl OwotCi0Jd2l0bmVzc19hc3NlcnRfbG9ja2xlc3MoJndpdG5lc3NfdHNkbik7Ci0KLQl3aXRuZXNz X2luaXQoJmEsICJhIiwgMSwgTlVMTCwgTlVMTCk7Ci0KLQl3aXRuZXNzX2xvY2soJndpdG5lc3Nf dHNkbiwgJmEpOwotCWV4cGVjdF9mYWxzZShzYXdfbG9ja19lcnJvciwgIlVuZXhwZWN0ZWQgd2l0 bmVzcyBsb2NrIGVycm9yIik7Ci0JZXhwZWN0X2ZhbHNlKHNhd19ub3Rfb3duZXJfZXJyb3IsICJV bmV4cGVjdGVkIHdpdG5lc3Mgbm90IG93bmVyIGVycm9yIik7Ci0Jd2l0bmVzc19sb2NrKCZ3aXRu ZXNzX3RzZG4sICZhKTsKLQlleHBlY3RfdHJ1ZShzYXdfbG9ja19lcnJvciwgIkV4cGVjdGVkIHdp dG5lc3MgbG9jayBlcnJvciIpOwotCWV4cGVjdF90cnVlKHNhd19ub3Rfb3duZXJfZXJyb3IsICJF eHBlY3RlZCB3aXRuZXNzIG5vdCBvd25lciBlcnJvciIpOwotCi0Jd2l0bmVzc191bmxvY2soJndp dG5lc3NfdHNkbiwgJmEpOwotCi0Jd2l0bmVzc19hc3NlcnRfbG9ja2xlc3MoJndpdG5lc3NfdHNk bik7Ci0KLQl3aXRuZXNzX293bmVyX2Vycm9yID0gd2l0bmVzc19vd25lcl9lcnJvcl9vcmlnOwot CXdpdG5lc3NfbG9ja19lcnJvciA9IHdpdG5lc3NfbG9ja19lcnJvcl9vcmlnOwotCi19Ci1URVNU X0VORAotCi1URVNUX0JFR0lOKHRlc3Rfd2l0bmVzc191bmxvY2tfbm90X293bmVkKSB7Ci0Jd2l0 bmVzc190IGE7Ci0Jd2l0bmVzc190c2RuX3Qgd2l0bmVzc190c2RuID0geyBXSVRORVNTX1RTRF9J TklUSUFMSVpFUiB9OwotCi0JdGVzdF9za2lwX2lmKCFjb25maWdfZGVidWcpOwotCi0Jd2l0bmVz c19vd25lcl9lcnJvcl9vcmlnID0gd2l0bmVzc19vd25lcl9lcnJvcjsKLQl3aXRuZXNzX293bmVy X2Vycm9yID0gd2l0bmVzc19vd25lcl9lcnJvcl9pbnRlcmNlcHQ7Ci0Jc2F3X293bmVyX2Vycm9y ID0gZmFsc2U7Ci0KLQl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVzc190c2RuKTsKLQot CXdpdG5lc3NfaW5pdCgmYSwgImEiLCAxLCBOVUxMLCBOVUxMKTsKLQotCWV4cGVjdF9mYWxzZShz YXdfb3duZXJfZXJyb3IsICJVbmV4cGVjdGVkIG93bmVyIGVycm9yIik7Ci0Jd2l0bmVzc191bmxv Y2soJndpdG5lc3NfdHNkbiwgJmEpOwotCWV4cGVjdF90cnVlKHNhd19vd25lcl9lcnJvciwgIkV4 cGVjdGVkIG93bmVyIGVycm9yIik7Ci0KLQl3aXRuZXNzX2Fzc2VydF9sb2NrbGVzcygmd2l0bmVz c190c2RuKTsKLQotCXdpdG5lc3Nfb3duZXJfZXJyb3IgPSB3aXRuZXNzX293bmVyX2Vycm9yX29y aWc7Ci19Ci1URVNUX0VORAotCi1URVNUX0JFR0lOKHRlc3Rfd2l0bmVzc19kZXB0aCkgewotCXdp dG5lc3NfdCBhOwotCXdpdG5lc3NfdHNkbl90IHdpdG5lc3NfdHNkbiA9IHsgV0lUTkVTU19UU0Rf SU5JVElBTElaRVIgfTsKLQotCXRlc3Rfc2tpcF9pZighY29uZmlnX2RlYnVnKTsKLQotCXdpdG5l c3NfZGVwdGhfZXJyb3Jfb3JpZyA9IHdpdG5lc3NfZGVwdGhfZXJyb3I7Ci0Jd2l0bmVzc19kZXB0 aF9lcnJvciA9IHdpdG5lc3NfZGVwdGhfZXJyb3JfaW50ZXJjZXB0OwotCXNhd19kZXB0aF9lcnJv ciA9IGZhbHNlOwotCi0Jd2l0bmVzc19hc3NlcnRfbG9ja2xlc3MoJndpdG5lc3NfdHNkbik7Ci0J d2l0bmVzc19hc3NlcnRfZGVwdGgoJndpdG5lc3NfdHNkbiwgMCk7Ci0KLQl3aXRuZXNzX2luaXQo JmEsICJhIiwgMSwgTlVMTCwgTlVMTCk7Ci0KLQlleHBlY3RfZmFsc2Uoc2F3X2RlcHRoX2Vycm9y LCAiVW5leHBlY3RlZCBkZXB0aCBlcnJvciIpOwotCXdpdG5lc3NfYXNzZXJ0X2xvY2tsZXNzKCZ3 aXRuZXNzX3RzZG4pOwotCXdpdG5lc3NfYXNzZXJ0X2RlcHRoKCZ3aXRuZXNzX3RzZG4sIDApOwot Ci0Jd2l0bmVzc19sb2NrKCZ3aXRuZXNzX3RzZG4sICZhKTsKLQl3aXRuZXNzX2Fzc2VydF9sb2Nr bGVzcygmd2l0bmVzc190c2RuKTsKLQl3aXRuZXNzX2Fzc2VydF9kZXB0aCgmd2l0bmVzc190c2Ru LCAwKTsKLQlleHBlY3RfdHJ1ZShzYXdfZGVwdGhfZXJyb3IsICJFeHBlY3RlZCBkZXB0aCBlcnJv ciIpOwotCi0Jd2l0bmVzc191bmxvY2soJndpdG5lc3NfdHNkbiwgJmEpOwotCi0Jd2l0bmVzc19h c3NlcnRfbG9ja2xlc3MoJndpdG5lc3NfdHNkbik7Ci0Jd2l0bmVzc19hc3NlcnRfZGVwdGgoJndp dG5lc3NfdHNkbiwgMCk7Ci0KLQl3aXRuZXNzX2RlcHRoX2Vycm9yID0gd2l0bmVzc19kZXB0aF9l cnJvcl9vcmlnOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVz dCgKLQkgICAgdGVzdF93aXRuZXNzLAotCSAgICB0ZXN0X3dpdG5lc3NfY29tcCwKLQkgICAgdGVz dF93aXRuZXNzX3JldmVyc2FsLAotCSAgICB0ZXN0X3dpdG5lc3NfcmVjdXJzaXZlLAotCSAgICB0 ZXN0X3dpdG5lc3NfdW5sb2NrX25vdF9vd25lZCwKLQkgICAgdGVzdF93aXRuZXNzX2RlcHRoKTsK LX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvemVyby5jIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAv dGVzdC91bml0L3plcm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlODFmMS4u MDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0 L3VuaXQvemVyby5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotI2luY2x1ZGUgInRl c3QvamVtYWxsb2NfdGVzdC5oIgotCi1zdGF0aWMgdm9pZAotdGVzdF96ZXJvKHNpemVfdCBzel9t aW4sIHNpemVfdCBzel9tYXgpIHsKLQl1aW50OF90ICpzOwotCXNpemVfdCBzel9wcmV2LCBzeiwg aTsKLSNkZWZpbmUgTUFHSUMJKCh1aW50OF90KTB4NjEpCi0KLQlzel9wcmV2ID0gMDsKLQlzID0g KHVpbnQ4X3QgKiltYWxsb2N4KHN6X21pbiwgMCk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbCgodm9p ZCAqKXMsICJVbmV4cGVjdGVkIG1hbGxvY3goKSBmYWlsdXJlIik7Ci0KLQlmb3IgKHN6ID0gc2Fs bG9jeChzLCAwKTsgc3ogPD0gc3pfbWF4OwotCSAgICBzel9wcmV2ID0gc3osIHN6ID0gc2FsbG9j eChzLCAwKSkgewotCQlpZiAoc3pfcHJldiA+IDApIHsKLQkJCWV4cGVjdF91X2VxKHNbMF0sIE1B R0lDLAotCQkJICAgICJQcmV2aW91c2x5IGFsbG9jYXRlZCBieXRlICV6dS8lenUgaXMgY29ycnVw dGVkIiwKLQkJCSAgICBaVSgwKSwgc3pfcHJldik7Ci0JCQlleHBlY3RfdV9lcShzW3N6X3ByZXYt MV0sIE1BR0lDLAotCQkJICAgICJQcmV2aW91c2x5IGFsbG9jYXRlZCBieXRlICV6dS8lenUgaXMg Y29ycnVwdGVkIiwKLQkJCSAgICBzel9wcmV2LTEsIHN6X3ByZXYpOwotCQl9Ci0KLQkJZm9yIChp ID0gc3pfcHJldjsgaSA8IHN6OyBpKyspIHsKLQkJCWV4cGVjdF91X2VxKHNbaV0sIDB4MCwKLQkJ CSAgICAiTmV3bHkgYWxsb2NhdGVkIGJ5dGUgJXp1LyV6dSBpc24ndCB6ZXJvLWZpbGxlZCIsCi0J CQkgICAgaSwgc3opOwotCQkJc1tpXSA9IE1BR0lDOwotCQl9Ci0KLQkJaWYgKHhhbGxvY3gocywg c3orMSwgMCwgMCkgPT0gc3opIHsKLQkJCXMgPSAodWludDhfdCAqKXJhbGxvY3gocywgc3orMSwg MCk7Ci0JCQlleHBlY3RfcHRyX25vdF9udWxsKCh2b2lkICopcywKLQkJCSAgICAiVW5leHBlY3Rl ZCByYWxsb2N4KCkgZmFpbHVyZSIpOwotCQl9Ci0JfQotCi0JZGFsbG9jeChzLCAwKTsKLSN1bmRl ZiBNQUdJQwotfQotCi1URVNUX0JFR0lOKHRlc3RfemVyb19zbWFsbCkgewotCXRlc3Rfc2tpcF9p ZighY29uZmlnX2ZpbGwpOwotCXRlc3RfemVybygxLCBTQ19TTUFMTF9NQVhDTEFTUyAtIDEpOwot fQotVEVTVF9FTkQKLQotVEVTVF9CRUdJTih0ZXN0X3plcm9fbGFyZ2UpIHsKLQl0ZXN0X3NraXBf aWYoIWNvbmZpZ19maWxsKTsKLQl0ZXN0X3plcm8oU0NfU01BTExfTUFYQ0xBU1MgKyAxLCAxVSA8 PCAoU0NfTEdfTEFSR0VfTUlOQ0xBU1MgKyAxKSk7Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4o dm9pZCkgewotCXJldHVybiB0ZXN0KAotCSAgICB0ZXN0X3plcm9fc21hbGwsCi0JICAgIHRlc3Rf emVyb19sYXJnZSk7Ci19CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVt YWxsb2MtNS4zLjAvdGVzdC91bml0L3plcm8uc2ggYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9q ZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyby5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYjQ1NDBiMi4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvemVyby5zaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBA QAotIyEvYmluL3NoCi0KLWlmIFsgIngke2VuYWJsZV9maWxsfSIgPSAieDEiIF0gOyB0aGVuCi0g IGV4cG9ydCBNQUxMT0NfQ09ORj0iYWJvcnQ6ZmFsc2UsanVuazpmYWxzZSx6ZXJvOnRydWUiCi1m aQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rl c3QvdW5pdC96ZXJvX3JlYWxsb2NfYWJvcnQuYyBiLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWJvcnQuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggYTg4MGQxMC4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMu MC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2Fib3J0LmMKKysr IC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jaW5jbHVkZSAidGVzdC9qZW1hbGxvY190ZXN0 LmgiCi0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotc3RhdGljIGJvb2wgYWJvcnRfY2FsbGVkID0g ZmFsc2U7Ci0KLXZvaWQgc2V0X2Fib3J0X2NhbGxlZCgpIHsKLQlhYm9ydF9jYWxsZWQgPSB0cnVl OwotfTsKLQotVEVTVF9CRUdJTih0ZXN0X3JlYWxsb2NfYWJvcnQpIHsKLQlhYm9ydF9jYWxsZWQg PSBmYWxzZTsKLQlzYWZldHlfY2hlY2tfc2V0X2Fib3J0KCZzZXRfYWJvcnRfY2FsbGVkKTsKLQl2 b2lkICpwdHIgPSBtYWxsb2N4KDQyLCAwKTsKLQlleHBlY3RfcHRyX25vdF9udWxsKHB0ciwgIlVu ZXhwZWN0ZWQgbWFsbG9jeCBlcnJvciIpOwotCXB0ciA9IHJlYWxsb2MocHRyLCAwKTsKLQlleHBl Y3RfdHJ1ZShhYm9ydF9jYWxsZWQsICJSZWFsbG9jIHdpdGggemVybyBzaXplIGRpZG4ndCBhYm9y dCIpOwotfQotVEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkg ICAgdGVzdF9yZWFsbG9jX2Fib3J0KTsKLX0KLQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMu My4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfYWJvcnQuc2gg Yi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19y ZWFsbG9jX2Fib3J0LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2RhZWVhLi4w MDAwMDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3Qv dW5pdC96ZXJvX3JlYWxsb2NfYWJvcnQuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK LSMhL2Jpbi9zaAotCi1leHBvcnQgTUFMTE9DX0NPTkY9Inplcm9fcmVhbGxvYzphYm9ydCIKCmRp ZmYgLS1naXQgYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3Vu aXQvemVyb19yZWFsbG9jX2FsbG9jLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxv Yy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2FsbG9jLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDY1ZTA3YmQuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVp bGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3plcm9fcmVhbGxvY19hbGxvYy5jCisrKyAvZGV2 L251bGwKQEAgLTEsNDggKzAsMCBAQAotI2luY2x1ZGUgInRlc3QvamVtYWxsb2NfdGVzdC5oIgot Ci1zdGF0aWMgdWludDY0X3QKLWFsbG9jYXRlZCgpIHsKLQlpZiAoIWNvbmZpZ19zdGF0cykgewot CQlyZXR1cm4gMDsKLQl9Ci0JdWludDY0X3QgYWxsb2NhdGVkOwotCXNpemVfdCBzeiA9IHNpemVv ZihhbGxvY2F0ZWQpOwotCWV4cGVjdF9kX2VxKG1hbGxjdGwoInRocmVhZC5hbGxvY2F0ZWQiLCAo dm9pZCAqKSZhbGxvY2F0ZWQsICZzeiwgTlVMTCwKLQkgICAgMCksIDAsICJVbmV4cGVjdGVkIG1h bGxjdGwgZmFpbHVyZSIpOwotCXJldHVybiBhbGxvY2F0ZWQ7Ci19Ci0KLXN0YXRpYyB1aW50NjRf dAotZGVhbGxvY2F0ZWQoKSB7Ci0JaWYgKCFjb25maWdfc3RhdHMpIHsKLQkJcmV0dXJuIDA7Ci0J fQotCXVpbnQ2NF90IGRlYWxsb2NhdGVkOwotCXNpemVfdCBzeiA9IHNpemVvZihkZWFsbG9jYXRl ZCk7Ci0JZXhwZWN0X2RfZXEobWFsbGN0bCgidGhyZWFkLmRlYWxsb2NhdGVkIiwgKHZvaWQgKikm ZGVhbGxvY2F0ZWQsICZzeiwKLQkgICAgTlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwg ZmFpbHVyZSIpOwotCXJldHVybiBkZWFsbG9jYXRlZDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3Jl YWxsb2NfYWxsb2MpIHsKLQl2b2lkICpwdHIgPSBtYWxsb2N4KDEsIDApOwotCWV4cGVjdF9wdHJf bm90X251bGwocHRyLCAiVW5leHBlY3RlZCBtYWxsb2N4IGVycm9yIik7Ci0JdWludDY0X3QgYWxs b2NhdGVkX2JlZm9yZSA9IGFsbG9jYXRlZCgpOwotCXVpbnQ2NF90IGRlYWxsb2NhdGVkX2JlZm9y ZSA9IGRlYWxsb2NhdGVkKCk7Ci0JcHRyID0gcmVhbGxvYyhwdHIsIDApOwotCXVpbnQ2NF90IGFs bG9jYXRlZF9hZnRlciA9IGFsbG9jYXRlZCgpOwotCXVpbnQ2NF90IGRlYWxsb2NhdGVkX2FmdGVy ID0gZGVhbGxvY2F0ZWQoKTsKLQlpZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWV4cGVjdF91NjRfbHQo YWxsb2NhdGVkX2JlZm9yZSwgYWxsb2NhdGVkX2FmdGVyLAotCQkgICAgIlVuZXhwZWN0ZWQgc3Rh dHMgY2hhbmdlIik7Ci0JCWV4cGVjdF91NjRfbHQoZGVhbGxvY2F0ZWRfYmVmb3JlLCBkZWFsbG9j YXRlZF9hZnRlciwKLQkJICAgICJVbmV4cGVjdGVkIHN0YXRzIGNoYW5nZSIpOwotCX0KLQlkYWxs b2N4KHB0ciwgMCk7Ci19Ci1URVNUX0VORAotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVz dCgKLQkgICAgdGVzdF9yZWFsbG9jX2FsbG9jKTsKLX0KCmRpZmYgLS1naXQgYS8zODktZHMtYmFz ZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2FsbG9j LnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVzdC91bml0L3pl cm9fcmVhbGxvY19hbGxvYy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAyNjg3 Yy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90 ZXN0L3VuaXQvemVyb19yZWFsbG9jX2FsbG9jLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCww IEBACi0jIS9iaW4vc2gKLQotZXhwb3J0IE1BTExPQ19DT05GPSJ6ZXJvX3JlYWxsb2M6YWxsb2Mi CgpkaWZmIC0tZ2l0IGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3plcm9fcmVhbGxvY19mcmVlLmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1h bGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2ZyZWUuYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggYmFlZDg2Yy4uMDAwMDAwMAotLS0gYS8zODktZHMtYmFzZS0zLjMuMC1i dWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFsbG9jX2ZyZWUuYworKysgL2Rl di9udWxsCkBAIC0xLDMzICswLDAgQEAKLSNpbmNsdWRlICJ0ZXN0L2plbWFsbG9jX3Rlc3QuaCIK LQotc3RhdGljIHVpbnQ2NF90Ci1kZWFsbG9jYXRlZCgpIHsKLQlpZiAoIWNvbmZpZ19zdGF0cykg ewotCQlyZXR1cm4gMDsKLQl9Ci0JdWludDY0X3QgZGVhbGxvY2F0ZWQ7Ci0Jc2l6ZV90IHN6ID0g c2l6ZW9mKGRlYWxsb2NhdGVkKTsKLQlleHBlY3RfZF9lcShtYWxsY3RsKCJ0aHJlYWQuZGVhbGxv Y2F0ZWQiLCAodm9pZCAqKSZkZWFsbG9jYXRlZCwgJnN6LAotCSAgICBOVUxMLCAwKSwgMCwgIlVu ZXhwZWN0ZWQgbWFsbGN0bCBmYWlsdXJlIik7Ci0JcmV0dXJuIGRlYWxsb2NhdGVkOwotfQotCi1U RVNUX0JFR0lOKHRlc3RfcmVhbGxvY19mcmVlKSB7Ci0Jdm9pZCAqcHRyID0gbWFsbG9jeCg0Miwg MCk7Ci0JZXhwZWN0X3B0cl9ub3RfbnVsbChwdHIsICJVbmV4cGVjdGVkIG1hbGxvY3ggZXJyb3Ii KTsKLQl1aW50NjRfdCBkZWFsbG9jYXRlZF9iZWZvcmUgPSBkZWFsbG9jYXRlZCgpOwotCXB0ciA9 IHJlYWxsb2MocHRyLCAwKTsKLQl1aW50NjRfdCBkZWFsbG9jYXRlZF9hZnRlciA9IGRlYWxsb2Nh dGVkKCk7Ci0JZXhwZWN0X3B0cl9udWxsKHB0ciwgIlJlYWxsb2MgZGlkbid0IGZyZWUiKTsKLQlp ZiAoY29uZmlnX3N0YXRzKSB7Ci0JCWV4cGVjdF91NjRfZ3QoZGVhbGxvY2F0ZWRfYWZ0ZXIsIGRl YWxsb2NhdGVkX2JlZm9yZSwKLQkJICAgICJSZWFsbG9jIGRpZG4ndCBmcmVlIik7Ci0JfQotfQot VEVTVF9FTkQKLQotaW50Ci1tYWluKHZvaWQpIHsKLQlyZXR1cm4gdGVzdCgKLQkgICAgdGVzdF9y ZWFsbG9jX2ZyZWUpOwotfQoKZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2pl bWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfZnJlZS5zaCBiLzM4OS1kcy1iYXNl LTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2NfZnJlZS5z aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiMDFjOS4uMDAwMDAwMAotLS0gYS8z ODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVyb19yZWFs bG9jX2ZyZWUuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMhL2Jpbi9zaAotCi1l eHBvcnQgTUFMTE9DX0NPTkY9Inplcm9fcmVhbGxvYzpmcmVlIgoKZGlmZiAtLWdpdCBhLzM4OS1k cy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJvX3JlYWxsb2Nz LmMgYi8zODktZHMtYmFzZS0zLjMuMC1idWlsZC9qZW1hbGxvYy01LjMuMC90ZXN0L3VuaXQvemVy b19yZWFsbG9jcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmM3YTQwLi4wMDAw MDAwCi0tLSBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5p dC96ZXJvX3JlYWxsb2NzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0jaW5jbHVk ZSAidGVzdC9qZW1hbGxvY190ZXN0LmgiCi0KLXN0YXRpYyBzaXplX3QKLXplcm9fcmVhbGxvY3Mo KSB7Ci0JaWYgKCFjb25maWdfc3RhdHMpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCXNpemVfdCBjb3Vu dCA9IDEyMzQ1OwotCXNpemVfdCBzeiA9IHNpemVvZihjb3VudCk7Ci0KLQlleHBlY3RfZF9lcSht YWxsY3RsKCJzdGF0cy56ZXJvX3JlYWxsb2NzIiwgKHZvaWQgKikmY291bnQsICZzeiwKLQkgICAg TlVMTCwgMCksIDAsICJVbmV4cGVjdGVkIG1hbGxjdGwgZmFpbHVyZSIpOwotCXJldHVybiBjb3Vu dDsKLX0KLQotVEVTVF9CRUdJTih0ZXN0X3plcm9fcmVhbGxvY3MpIHsKLQl0ZXN0X3NraXBfaWYo IWNvbmZpZ19zdGF0cyk7Ci0KLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0J CXZvaWQgKnB0ciA9IG1hbGxvY3goaSAqIGkgKyAxLCAwKTsKLQkJZXhwZWN0X3B0cl9ub3RfbnVs bChwdHIsICJVbmV4cGVjdGVkIG1hbGxvY3ggZXJyb3IiKTsKLQkJc2l6ZV90IGNvdW50ID0gemVy b19yZWFsbG9jcygpOwotCQlleHBlY3RfenVfZXEoaSwgY291bnQsICJJbmNvcnJlY3QgemVybyBy ZWFsbG9jIGNvdW50Iik7Ci0JCXB0ciA9IHJlYWxsb2MocHRyLCAwKTsKLQkJZXhwZWN0X3B0cl9u dWxsKHB0ciwgIlJlYWxsb2MgZGlkbid0IGZyZWUiKTsKLQkJY291bnQgPSB6ZXJvX3JlYWxsb2Nz KCk7Ci0JCWV4cGVjdF96dV9lcShpICsgMSwgY291bnQsICJSZWFsbG9jIGRpZG4ndCBhZGp1c3Qg Y291bnQiKTsKLQl9Ci19Ci1URVNUX0VORAotCi1pbnQKLW1haW4odm9pZCkgewotCS8qCi0JICog V2UgZXhwZWN0IGV4cGxpY2l0IGNvdW50czsgcmVlbnRyYW50IHRlc3RzIHJ1biBtdWx0aXBsZSB0 aW1lcywgc28KLQkgKiBjb3VudHMgbGVhayBhY3Jvc3MgcnVucy4KLQkgKi8KLQlyZXR1cm4gdGVz dF9ub19yZWVudHJhbmN5KAotCSAgICB0ZXN0X3plcm9fcmVhbGxvY3MpOwotfQoKZGlmZiAtLWdp dCBhLzM4OS1kcy1iYXNlLTMuMy4wLWJ1aWxkL2plbWFsbG9jLTUuMy4wL3Rlc3QvdW5pdC96ZXJv X3JlYWxsb2NzLnNoIGIvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4zLjAvdGVz dC91bml0L3plcm9fcmVhbGxvY3Muc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUx YjAxYzkuLjAwMDAwMDAKLS0tIGEvMzg5LWRzLWJhc2UtMy4zLjAtYnVpbGQvamVtYWxsb2MtNS4z LjAvdGVzdC91bml0L3plcm9fcmVhbGxvY3Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAg QEAKLSMhL2Jpbi9zaAotCi1leHBvcnQgTUFMTE9DX0NPTkY9Inplcm9fcmVhbGxvYzpmcmVlIgoK ZGlmZiAtLWdpdCBhLzM4OS1kcy1iYXNlLnNwZWMgYi8zODktZHMtYmFzZS5zcGVjCmluZGV4IDE1 NWU5NzEuLjkyZjE1ZmUgMTAwNjQ0Ci0tLSBhLzM4OS1kcy1iYXNlLnNwZWMKKysrIGIvMzg5LWRz LWJhc2Uuc3BlYwpAQCAtMSw2ICsxLDYgQEAKICVnbG9iYWwgcGtnbmFtZSBkaXJzcnYKIAotIyBF eGNsdWRlIGk2ODYgYXJjaGl0ZWN0dXJlCisjIEV4Y2x1ZGUgaTY4NiBiaXQgYXJjaGVzCiBFeGNs dWRlQXJjaDogaTY4NgogCiAlYmNvbmQgYnVuZGxlX2plbWFsbG9jIDEKQEAgLTEwLDcgKzEwLDEx IEBAIEV4Y2x1ZGVBcmNoOiBpNjg2CiAlZ2xvYmFsIF9fcHJvdmlkZXNfZXhjbHVkZSBebGliamVt YWxsb2NcXC5zby4qJAogJWVuZGlmCiAKLSViY29uZCBidW5kbGVfbGliZGIgJXtkZWZpbmVkIHJo ZWx9CislYmNvbmQgYnVuZGxlX2xpYmRiIDAKKyVpZiAwJXs/cmhlbH0gPj0gMTAKKyViY29uZCBi dW5kbGVfbGliZGIgMQorJWVuZGlmCisKICVpZiAle3dpdGggYnVuZGxlX2xpYmRifQogJWdsb2Jh bCBsaWJkYl92ZXJzaW9uIDUuMwogJWdsb2JhbCBsaWJkYl9iYXNlX3ZlcnNpb24gZGItJXtsaWJk Yl92ZXJzaW9ufS4yOApAQCAtMjQsMjEgKzI4LDEzIEBAIEV4Y2x1ZGVBcmNoOiBpNjg2CiAlZW5k aWYKICVlbmRpZgogCi0lYmNvbmQgcmVwbF9yZXBvcnRzIDAKLSVpZiAwJXs/ZmVkb3JhfSA+PSA0 MCAmJiAwJXs/ZmVkb3JhfSA8IDQ0Ci0lYmNvbmQgcmVwbF9yZXBvcnRzIDEKLSVlbmRpZgotCisl YmNvbmQgbGliYmRiX3JvIDAKICVpZiAwJXs/ZmVkb3JhfSA+PSA0MwogJWJjb25kIGxpYmJkYl9y byAxCi0lZWxzZQotJWJjb25kIGxpYmJkYl9ybyAwCiAlZW5kaWYKIAogIyBUaGlzIGlzIHVzZWQg aW4gY2VydGFpbiBidWlsZHMgdG8gaGVscCB1cyBrbm93IGlmIGl0IGhhcyBleHRyYSBmZWF0dXJl cy4KICVnbG9iYWwgdmFyaWFudCBiYXNlCi0lZ2xvYmFsIHByZXJlbCAuMjAyNjA4MzEwODA1Z2l0 ODllZTgzMTJmJXtuaWx9Ci0KICMgVGhpcyBlbmFibGVzIGEgc2FuaXRpemVkIGJ1aWxkLgogJWJj b25kIGFzYW4gMAogJWJjb25kIG1zYW4gMApAQCAtNjEsMzQgKzU3LDIwIEBAIEV4Y2x1ZGVBcmNo OiBpNjg2CiAlZW5kaWYKIAogIyBCdWlsZCBjb2NrcGl0IHBsdWdpbgotIyBFbmFibGVkIG9uIEZl ZG9yYSBhbmQgRVBFTCBjb21tdW5pdHkgYnVpbGRzLgotIyBEaXNhYmxlZCBvbiBSSEVML0NlbnRP UyBTdHJlYW0gdW5sZXNzIFJIRFMgKGRpc3RyaWJ1dGlvbiBjb250YWlucyAiZHNydiIpLgotJWlm IDAlez9yaGVsfSAmJiAhMCV7P2VwZWx9Ci0lYmNvbmQgY29ja3BpdCAlKGVjaG8gIiV7P2Rpc3Ry aWJ1dGlvbn0iIHwgZ3JlcCAtcSBkc3J2ICYmIGVjaG8gMSB8fCBlY2hvIDApCi0lZWxzZQogJWJj b25kIGNvY2twaXQgMQotJWVuZGlmCiAKLSMgSElCUCBwYXNzd29yZCBicmVhY2ggY2hlY2tpbmcK KyMgQnVpbGQgSElCUCBwYXNzd29yZCBicmVhY2ggY2hlY2tpbmcgKHJlcXVpcmVzIGxpYmN1cmwp CiAlYmNvbmQgaGlicCAxCiAKLSViY29uZCB1c2R0IDEKLQotIyBQZXJsIGxvZyBhbmFseXplciAo bG9nY29udi5wbCkKLSMgRGlzYWJsZWQgb24gRmVkb3JhID49IDQ2IGFuZCBSSEVMID49IDExLCB1 c2UgbG9nY29udi5weSBpbnN0ZWFkCi0laWYgMCV7P2ZlZG9yYX0gPj0gNDYgfHwgMCV7P3JoZWx9 ID49IDExCi0lYmNvbmQgbG9nY29udnBsIDAKLSVlbHNlCi0lYmNvbmQgbG9nY29udnBsIDEKLSVl bmRpZgorIyBmZWRvcmEgMTUgYW5kIGxhdGVyIHVzZXMgdG1wZmlsZXMuZAorIyBvdGhlcndpc2Us IGNvbW1lbnQgdGhpcyBvdXQKKyV7IT93aXRoX3RtcGZpbGVzX2Q6ICVnbG9iYWwgd2l0aF90bXBm aWxlc19kICV7X3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmR9CiAKICMgc3lzdGVtZCBzdXBwb3J0CiAl Z2xvYmFsIGdyb3VwbmFtZSAle3BrZ25hbWV9LnRhcmdldAogCiAjIEZpbHRlciBhcmdwYXJzZS1t YW5wYWdlIGZyb20gYXV0b2dlbmVyYXRlZCBwYWNrYWdlIFJlcXVpcmVzCiAlZ2xvYmFsIF9fcmVx dWlyZXNfZXhjbHVkZSBecHl0aG9uLiphcmdwYXJzZS1tYW5wYWdlCi0jIEZpbHRlciBwZXJsIGF1 dG8tZGVwIGZyb20gamVtYWxsb2MncyBqZXByb2YgcHJvZmlsZXIgc2NyaXB0Ci0lZ2xvYmFsIF9f cmVxdWlyZXNfZXhjbHVkZV9mcm9tICV7X2xpYmRpcn0vJXtwa2duYW1lfS9iaW4vamVwcm9mCiAK ICMgRm9yY2UgdG8gcmVxdWlyZSBuc3MgdmVyc2lvbiBncmVhdGVyIG9yIGVxdWFsIGFzIHRoZSB2 ZXJzaW9uIGF2YWlsYWJsZSBhdCB0aGUgYnVpbGQgdGltZQogIyBTZWUgYnoxOTg2MzI3CkBAIC05 OCwxMyArODAsMjIyIEBAIFN1bW1hcnk6ICAgICAgICAgIDM4OSBEaXJlY3RvcnkgU2VydmVyICgl e3ZhcmlhbnR9KQogTmFtZTogICAgICAgICAgICAgMzg5LWRzLWJhc2UKIFZlcnNpb246ICAgICAg ICAgIDMuMy4wCiBSZWxlYXNlOiAgICAgICAgICAle2F1dG9yZWxlYXNlIC1uICV7P3dpdGhfYXNh bjotZSBhc2FufX0lez9kaXN0fQotTGljZW5zZTogICAgICAgICAgR1BMLTMuMC1vci1sYXRlciBX SVRIIEdQTC0zLjAtMzg5LWRzLWJhc2UtZXhjZXB0aW9uIEFORCAoMEJTRCBPUiBBcGFjaGUtMi4w IE9SIE1JVCkgQU5EIChBcGFjaGUtMi4wIE9SIEFwYWNoZS0yLjAgV0lUSCBMTFZNLWV4Y2VwdGlv biBPUiBNSVQpIEFORCAoQXBhY2hlLTIuMCBPUiBCU0wtMS4wKSBBTkQgKEFwYWNoZS0yLjAgT1Ig TUlUIE9SIFpsaWIpIEFORCAoQXBhY2hlLTIuMCBPUiBNSVQpIEFORCAoQ0MtQlktNC4wIEFORCBN SVQpIEFORCAoTUlUIE9SIEFwYWNoZS0yLjApIEFORCBVbmljb2RlLURGUy0yMDE2IEFORCAoTUlU IE9SIENDMC0xLjApIEFORCAoTUlUIE9SIFVubGljZW5zZSkgQU5EIDBCU0QgQU5EIEFwYWNoZS0y LjAgQU5EIEJTRC0yLUNsYXVzZSBBTkQgQlNELTMtQ2xhdXNlIEFORCBJU0MgQU5EIE1JVCBBTkQg TUlUIEFORCBJU0MgQU5EIE1QTC0yLjAgQU5EIFBTRi0yLjAKK0xpY2Vuc2U6ICAgICAgICAgIEdQ TC0zLjAtb3ItbGF0ZXIgV0lUSCBHUEwtMy4wLTM4OS1kcy1iYXNlLWV4Y2VwdGlvbiBBTkQgKEFw YWNoZS0yLjAgT1IgQXBhY2hlLTIuMCBXSVRIIExMVk0tZXhjZXB0aW9uIE9SIE1JVCkgQU5EIChB cGFjaGUtMi4wIE9SIExHUEwtMi4xLW9yLWxhdGVyIE9SIE1JVCkgQU5EIChBcGFjaGUtMi4wIE9S IE1JVCkgQU5EIChDQy1CWS00LjAgQU5EIE1JVCkgQU5EIChNSVQgT1IgQXBhY2hlLTIuMCkgQU5E IFVuaWNvZGUtMy4wIEFORCAoTUlUIE9SIFVubGljZW5zZSkgQU5EIDBCU0QgQU5EIEFwYWNoZS0y LjAgQU5EIEJTRC0zLUNsYXVzZSBBTkQgSVNDIEFORCBNSVQgQU5EIE1JVCBBTkQgSVNDIEFORCBN UEwtMi4wIEFORCBabGliCiBVUkw6ICAgICAgICAgICAgICBodHRwczovL3d3dy5wb3J0Mzg5Lm9y ZworT2Jzb2xldGVzOiAgICAgICAgJXtuYW1lfS1sZWdhY3ktdG9vbHMgPCAxLjQuNC42CitPYnNv bGV0ZXM6ICAgICAgICAle25hbWV9LWxlZ2FjeS10b29scy1kZWJ1Z2luZm8gPCAxLjQuNC42CitQ cm92aWRlczogICAgICAgICBsZGlmMmxkYm0gPj0gMAogCiAjIyMjIyBCdW5kbGVkIGNhcmdvIGNy YXRlcyBsaXN0IC0gU1RBUlQgIyMjIyMKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShhbGxvY2F0 b3ItYXBpMikpID0gMC4yLjIxCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoYW55aG93KSkgPSAx LjAuMTAyCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoYXR0eSkpID0gMC4yLjE0CitQcm92aWRl czogIGJ1bmRsZWQoY3JhdGUoYXV0b2NmZykpID0gMS41LjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChj cmF0ZShiYXNlNjQpKSA9IDAuMTMuMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGJpdGZsYWdz KSkgPSAyLjEyLjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShidW1wYWxvKSkgPSAzLjIwLjMK K1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShieXRlb3JkZXIpKSA9IDEuNS4wCitQcm92aWRlczog IGJ1bmRsZWQoY3JhdGUoY2JpbmRnZW4pKSA9IDAuMjYuMAorUHJvdmlkZXM6ICBidW5kbGVkKGNy YXRlKGNjKSkgPSAxLjIuNjMKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShjZmctaWYpKSA9IDEu MC40CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoY2xhcCkpID0gMy4yLjI1CitQcm92aWRlczog IGJ1bmRsZWQoY3JhdGUoY2xhcF9sZXgpKSA9IDAuMi40CitQcm92aWRlczogIGJ1bmRsZWQoY3Jh dGUoY29uY3JlYWQpKSA9IDAuNS4xMAorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGNyb3NzYmVh bS1lcG9jaCkpID0gMC45LjE4CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoY3Jvc3NiZWFtLXF1 ZXVlKSkgPSAwLjMuMTIKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShjcm9zc2JlYW0tdXRpbHMp KSA9IDAuOC4yMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGVxdWl2YWxlbnQpKSA9IDEuMC4y CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoZXJybm8pKSA9IDAuMy4xNAorUHJvdmlkZXM6ICBi dW5kbGVkKGNyYXRlKGZhc3RyYW5kKSkgPSAyLjQuMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRl KGZlcm5ldCkpID0gMC4xLjQKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShmaW5kLW1zdmMtdG9v bHMpKSA9IDAuMS45CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoZm9sZGhhc2gpKSA9IDAuMi4w CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoZm9yZWlnbi10eXBlcykpID0gMC4zLjIKK1Byb3Zp ZGVzOiAgYnVuZGxlZChjcmF0ZShmb3JlaWduLXR5cGVzLXNoYXJlZCkpID0gMC4xLjEKK1Byb3Zp ZGVzOiAgYnVuZGxlZChjcmF0ZShmdXR1cmVzLWNvcmUpKSA9IDAuMy4zMgorUHJvdmlkZXM6ICBi dW5kbGVkKGNyYXRlKGZ1dHVyZXMtdGFzaykpID0gMC4zLjMyCitQcm92aWRlczogIGJ1bmRsZWQo Y3JhdGUoZnV0dXJlcy11dGlsKSkgPSAwLjMuMzIKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShn ZXRyYW5kb20pKSA9IDAuNC4yCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoaGFzaGJyb3duKSkg PSAwLjE3LjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShoZWNrKSkgPSAwLjUuMAorUHJvdmlk ZXM6ICBidW5kbGVkKGNyYXRlKGhlcm1pdC1hYmkpKSA9IDAuMS4xOQorUHJvdmlkZXM6ICBidW5k bGVkKGNyYXRlKGlkLWFyZW5hKSkgPSAyLjMuMAorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGlu ZGV4bWFwKSkgPSAyLjE0LjAKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShpdG9hKSkgPSAxLjAu MTgKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShqb2JzZXJ2ZXIpKSA9IDAuMS4zNAorUHJvdmlk ZXM6ICBidW5kbGVkKGNyYXRlKGpzLXN5cykpID0gMC4zLjk5CitQcm92aWRlczogIGJ1bmRsZWQo Y3JhdGUobGViMTI4Zm10KSkgPSAwLjEuMAorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKGxpYmMp KSA9IDAuMi4xODYKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShsaW51eC1yYXctc3lzKSkgPSAw LjEyLjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShsb2cpKSA9IDAuNC4zMQorUHJvdmlkZXM6 ICBidW5kbGVkKGNyYXRlKGxydSkpID0gMC4xNi40CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUo bWVtY2hyKSkgPSAyLjguMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKG9uY2VfY2VsbCkpID0g MS4yMS40CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUob3BlbnNzbCkpID0gMC4xMC44MAorUHJv dmlkZXM6ICBidW5kbGVkKGNyYXRlKG9wZW5zc2wtbWFjcm9zKSkgPSAwLjEuMQorUHJvdmlkZXM6 ICBidW5kbGVkKGNyYXRlKG9wZW5zc2wtc3lzKSkgPSAwLjkuMTE2CitQcm92aWRlczogIGJ1bmRs ZWQoY3JhdGUob3Nfc3RyX2J5dGVzKSkgPSA2LjYuMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRl KHBhc3RlKSkgPSAxLjAuMTUKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShwaW4tcHJvamVjdC1s aXRlKSkgPSAwLjIuMTcKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShwa2ctY29uZmlnKSkgPSAw LjMuMzMKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShwcmV0dHlwbGVhc2UpKSA9IDAuMi4zNwor UHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHByb2MtbWFjcm8yKSkgPSAxLjAuMTA2CitQcm92aWRl czogIGJ1bmRsZWQoY3JhdGUocXVvdGUpKSA9IDEuMC40NQorUHJvdmlkZXM6ICBidW5kbGVkKGNy YXRlKHItZWZpKSkgPSA2LjAuMAorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHJ1c3RpeCkpID0g MS4xLjQKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShydXN0dmVyc2lvbikpID0gMS4wLjIyCitQ cm92aWRlczogIGJ1bmRsZWQoY3JhdGUoc2VtdmVyKSkgPSAxLjAuMjgKK1Byb3ZpZGVzOiAgYnVu ZGxlZChjcmF0ZShzZXJkZSkpID0gMS4wLjIyOAorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHNl cmRlX2NvcmUpKSA9IDEuMC4yMjgKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShzZXJkZV9kZXJp dmUpKSA9IDEuMC4yMjgKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZShzZXJkZV9qc29uKSkgPSAx LjAuMTUwCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoc2hsZXgpKSA9IDIuMC4xCitQcm92aWRl czogIGJ1bmRsZWQoY3JhdGUoc2xhYikpID0gMC40LjEyCitQcm92aWRlczogIGJ1bmRsZWQoY3Jh dGUoc21hbGx2ZWMpKSA9IDEuMTUuMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHNwdHIpKSA9 IDAuMy4yCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUoc3Ryc2ltKSkgPSAwLjEwLjAKK1Byb3Zp ZGVzOiAgYnVuZGxlZChjcmF0ZShzeW4pKSA9IDIuMC4xMTcKK1Byb3ZpZGVzOiAgYnVuZGxlZChj cmF0ZSh0ZW1wZmlsZSkpID0gMy4yNy4wCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUodGVybWNv bG9yKSkgPSAxLjQuMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHRleHR3cmFwKSkgPSAwLjE2 LjIKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh0b2tpbykpID0gMS41Mi4zCitQcm92aWRlczog IGJ1bmRsZWQoY3JhdGUodG9tbCkpID0gMC41LjExCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUo dHJhY2luZykpID0gMC4xLjQ0CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUodHJhY2luZy1hdHRy aWJ1dGVzKSkgPSAwLjEuMzEKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh0cmFjaW5nLWNvcmUp KSA9IDAuMS4zNgorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHVuaWNvZGUtaWRlbnQpKSA9IDEu MC4yNAorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHVuaWNvZGUteGlkKSkgPSAwLjIuNgorUHJv dmlkZXM6ICBidW5kbGVkKGNyYXRlKHV1aWQpKSA9IDEuMjMuMgorUHJvdmlkZXM6ICBidW5kbGVk KGNyYXRlKHZjcGtnKSkgPSAwLjIuMTUKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh3YXNpKSkg PSAwLjExLjErd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRl KHdhc2lwMikpID0gMS4wLjMrd2FzaV8wLjIuOQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHdh c2lwMykpID0gMC40LjArd2FzaV8wLjMuMF9yY18yMDI2XzAxXzA2CitQcm92aWRlczogIGJ1bmRs ZWQoY3JhdGUod2FzbS1iaW5kZ2VuKSkgPSAwLjIuMTIyCitQcm92aWRlczogIGJ1bmRsZWQoY3Jh dGUod2FzbS1iaW5kZ2VuLW1hY3JvKSkgPSAwLjIuMTIyCitQcm92aWRlczogIGJ1bmRsZWQoY3Jh dGUod2FzbS1iaW5kZ2VuLW1hY3JvLXN1cHBvcnQpKSA9IDAuMi4xMjIKK1Byb3ZpZGVzOiAgYnVu ZGxlZChjcmF0ZSh3YXNtLWJpbmRnZW4tc2hhcmVkKSkgPSAwLjIuMTIyCitQcm92aWRlczogIGJ1 bmRsZWQoY3JhdGUod2FzbS1lbmNvZGVyKSkgPSAwLjI0NC4wCitQcm92aWRlczogIGJ1bmRsZWQo Y3JhdGUod2FzbS1tZXRhZGF0YSkpID0gMC4yNDQuMAorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRl KHdhc21wYXJzZXIpKSA9IDAuMjQ0LjAKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh3aW5hcGkp KSA9IDAuMy45CitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUod2luYXBpLWk2ODYtcGMtd2luZG93 cy1nbnUpKSA9IDAuNC4wCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUod2luYXBpLXV0aWwpKSA9 IDAuMS4xMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHdpbmFwaS14ODZfNjQtcGMtd2luZG93 cy1nbnUpKSA9IDAuNC4wCitQcm92aWRlczogIGJ1bmRsZWQoY3JhdGUod2luZG93cy1saW5rKSkg PSAwLjIuMQorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHdpbmRvd3Mtc3lzKSkgPSAwLjYxLjIK K1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0ZSh3aXQtYmluZGdlbikpID0gMC41Ny4xCitQcm92aWRl czogIGJ1bmRsZWQoY3JhdGUod2l0LWJpbmRnZW4tY29yZSkpID0gMC41MS4wCitQcm92aWRlczog IGJ1bmRsZWQoY3JhdGUod2l0LWJpbmRnZW4tcnVzdCkpID0gMC41MS4wCitQcm92aWRlczogIGJ1 bmRsZWQoY3JhdGUod2l0LWJpbmRnZW4tcnVzdC1tYWNybykpID0gMC41MS4wCitQcm92aWRlczog IGJ1bmRsZWQoY3JhdGUod2l0LWNvbXBvbmVudCkpID0gMC4yNDQuMAorUHJvdmlkZXM6ICBidW5k bGVkKGNyYXRlKHdpdC1wYXJzZXIpKSA9IDAuMjQ0LjAKK1Byb3ZpZGVzOiAgYnVuZGxlZChjcmF0 ZSh6ZXJvaXplKSkgPSAxLjguMgorUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHplcm9pemVfZGVy aXZlKSkgPSAxLjQuMworUHJvdmlkZXM6ICBidW5kbGVkKGNyYXRlKHptaWopKSA9IDEuMC4yMQor UHJvdmlkZXM6ICBidW5kbGVkKG5wbShAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtY29tbW9uLXR5 cGVzKSkgPSAwLjIuMzYKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oQGZvcnRhd2Vzb21lL2ZvbnRh d2Vzb21lLXN2Zy1jb3JlKSkgPSAxLjIuMzYKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oQGZvcnRh d2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zKSkgPSA1LjE1LjQKK1Byb3ZpZGVzOiAgYnVuZGxl ZChucG0oQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lKSkgPSAwLjEuMTkKK1Byb3ZpZGVz OiAgYnVuZGxlZChucG0oQHBhdHRlcm5mbHkvcGF0dGVybmZseSkpID0gNS40LjEKK1Byb3ZpZGVz OiAgYnVuZGxlZChucG0oQHBhdHRlcm5mbHkvcmVhY3QtY2hhcnRzKSkgPSA3LjQuMworUHJvdmlk ZXM6ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9yZWFjdC1jb3JlKSkgPSA1LjQuMQorUHJvdmlk ZXM6ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9yZWFjdC1pY29ucykpID0gNS40LjAKK1Byb3Zp ZGVzOiAgYnVuZGxlZChucG0oQHBhdHRlcm5mbHkvcmVhY3QtbG9nLXZpZXdlcikpID0gNS4zLjAK K1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oQHBhdHRlcm5mbHkvcmVhY3Qtc3R5bGVzKSkgPSA1LjQu MAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAcGF0dGVybmZseS9yZWFjdC10YWJsZSkpID0gNS40 LjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oQHBhdHRlcm5mbHkvcmVhY3QtdG9rZW5zKSkgPSA1 LjQuMAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAdHlwZXMvZDMtYXJyYXkpKSA9IDMuMi4yCitQ cm92aWRlczogIGJ1bmRsZWQobnBtKEB0eXBlcy9kMy1jb2xvcikpID0gMy4xLjMKK1Byb3ZpZGVz OiAgYnVuZGxlZChucG0oQHR5cGVzL2QzLWVhc2UpKSA9IDMuMC4yCitQcm92aWRlczogIGJ1bmRs ZWQobnBtKEB0eXBlcy9kMy1pbnRlcnBvbGF0ZSkpID0gMy4wLjQKK1Byb3ZpZGVzOiAgYnVuZGxl ZChucG0oQHR5cGVzL2QzLXBhdGgpKSA9IDMuMS4xCitQcm92aWRlczogIGJ1bmRsZWQobnBtKEB0 eXBlcy9kMy1zY2FsZSkpID0gNC4wLjkKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oQHR5cGVzL2Qz LXNoYXBlKSkgPSAzLjEuOAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAdHlwZXMvZDMtdGltZSkp ID0gMy4wLjQKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oQHR5cGVzL2QzLXRpbWVyKSkgPSAzLjAu MgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShAeHRlcm0vYWRkb24tY2FudmFzKSkgPSAwLjcuMAor UHJvdmlkZXM6ICBidW5kbGVkKG5wbShAeHRlcm0veHRlcm0pKSA9IDUuNS4wCitQcm92aWRlczog IGJ1bmRsZWQobnBtKGFyZ3BhcnNlKSkgPSAxLjAuMTAKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0o YXR0ci1hY2NlcHQpKSA9IDIuMi41CitQcm92aWRlczogIGJ1bmRsZWQobnBtKGF1dG9saW5rZXIp KSA9IDMuMTYuMgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShjb3JlLXV0aWwtaXMpKSA9IDEuMC4z CitQcm92aWRlczogIGJ1bmRsZWQobnBtKGQzLWFycmF5KSkgPSAzLjIuNAorUHJvdmlkZXM6ICBi dW5kbGVkKG5wbShkMy1jb2xvcikpID0gMy4xLjAKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oZDMt ZWFzZSkpID0gMy4wLjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oZDMtZm9ybWF0KSkgPSAzLjEu MgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShkMy1pbnRlcnBvbGF0ZSkpID0gMy4wLjEKK1Byb3Zp ZGVzOiAgYnVuZGxlZChucG0oZDMtcGF0aCkpID0gMy4xLjAKK1Byb3ZpZGVzOiAgYnVuZGxlZChu cG0oZDMtc2NhbGUpKSA9IDQuMC4yCitQcm92aWRlczogIGJ1bmRsZWQobnBtKGQzLXNoYXBlKSkg PSAzLjIuMAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShkMy10aW1lKSkgPSAzLjEuMAorUHJvdmlk ZXM6ICBidW5kbGVkKG5wbShkMy10aW1lLWZvcm1hdCkpID0gNC4xLjAKK1Byb3ZpZGVzOiAgYnVu ZGxlZChucG0oZDMtdGltZXIpKSA9IDMuMC4xCitQcm92aWRlczogIGJ1bmRsZWQobnBtKGRlbGF1 bmF0b3IpKSA9IDQuMC4xCitQcm92aWRlczogIGJ1bmRsZWQobnBtKGRlbGF1bmF5LWZpbmQpKSA9 IDAuMC42CitQcm92aWRlczogIGJ1bmRsZWQobnBtKGRlcXVhbCkpID0gMi4wLjMKK1Byb3ZpZGVz OiAgYnVuZGxlZChucG0oZW5jb2RpbmcpKSA9IDAuMS4xMworUHJvdmlkZXM6ICBidW5kbGVkKG5w bShmaWxlLXNlbGVjdG9yKSkgPSAyLjEuMgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShmb2N1cy10 cmFwKSkgPSA3LjUuNAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShnZXR0ZXh0LXBhcnNlcikpID0g Mi4xLjAKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MpKSA9 IDMuMy4yCitQcm92aWRlczogIGJ1bmRsZWQobnBtKGljb252LWxpdGUpKSA9IDAuNi4zCitQcm92 aWRlczogIGJ1bmRsZWQobnBtKGluaGVyaXRzKSkgPSAyLjAuNAorUHJvdmlkZXM6ICBidW5kbGVk KG5wbShpbnRlcm5tYXApKSA9IDIuMC4zCitQcm92aWRlczogIGJ1bmRsZWQobnBtKGlzYXJyYXkp KSA9IDEuMC4wCitQcm92aWRlczogIGJ1bmRsZWQobnBtKGpzLXNoYTEpKSA9IDAuNy4wCitQcm92 aWRlczogIGJ1bmRsZWQobnBtKGpzLXNoYTI1NikpID0gMC4xMS4wCitQcm92aWRlczogIGJ1bmRs ZWQobnBtKGpzLXRva2VucykpID0gNC4wLjAKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oanNvbi1z dGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeSkpID0gMS4wLjEKK1Byb3ZpZGVzOiAgYnVu ZGxlZChucG0oanNvbi1zdHJpbmdpZnktc2FmZSkpID0gNS4wLjEKK1Byb3ZpZGVzOiAgYnVuZGxl ZChucG0obG9kYXNoKSkgPSA0LjE4LjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0obG9vc2UtZW52 aWZ5KSkgPSAxLjQuMAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShtZW1vaXplLW9uZSkpID0gNS4y LjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0ob2JqZWN0LWFzc2lnbikpID0gNC4xLjEKK1Byb3Zp ZGVzOiAgYnVuZGxlZChucG0ocHJldHRpZXIpKSA9IDMuOC4zCitQcm92aWRlczogIGJ1bmRsZWQo bnBtKHByb2Nlc3MtbmV4dGljay1hcmdzKSkgPSAyLjAuMQorUHJvdmlkZXM6ICBidW5kbGVkKG5w bShwcm9wLXR5cGVzKSkgPSAxNS44LjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0ocmVhY3QpKSA9 IDE4LjMuMQorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShyZWFjdC1kb20pKSA9IDE4LjMuMQorUHJv dmlkZXM6ICBidW5kbGVkKG5wbShyZWFjdC1kcm9wem9uZSkpID0gMTQuNC4xCitQcm92aWRlczog IGJ1bmRsZWQobnBtKHJlYWN0LWZhc3QtY29tcGFyZSkpID0gMy4yLjIKK1Byb3ZpZGVzOiAgYnVu ZGxlZChucG0ocmVhY3QtaXMpKSA9IDE2LjEzLjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0ocmVh ZGFibGUtc3RyZWFtKSkgPSAyLjMuOAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShyZW1hcmthYmxl KSkgPSAyLjAuMQorUHJvdmlkZXM6ICBidW5kbGVkKG5wbShzYWZlLWJ1ZmZlcikpID0gNS4yLjEK K1Byb3ZpZGVzOiAgYnVuZGxlZChucG0oc2FmZXItYnVmZmVyKSkgPSAyLjEuMgorUHJvdmlkZXM6 ICBidW5kbGVkKG5wbShzY2hlZHVsZXIpKSA9IDAuMjMuMgorUHJvdmlkZXM6ICBidW5kbGVkKG5w bShzcHJpbnRmLWpzKSkgPSAxLjAuMworUHJvdmlkZXM6ICBidW5kbGVkKG5wbShzdHJpbmdfZGVj b2RlcikpID0gMS4xLjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0odGFiYmFibGUpKSA9IDYuNC4w CitQcm92aWRlczogIGJ1bmRsZWQobnBtKHRocm90dGxlLWRlYm91bmNlKSkgPSA1LjAuMgorUHJv dmlkZXM6ICBidW5kbGVkKG5wbSh0c2xpYikpID0gMi44LjEKK1Byb3ZpZGVzOiAgYnVuZGxlZChu cG0odXRpbC1kZXByZWNhdGUpKSA9IDEuMC4yCitQcm92aWRlczogIGJ1bmRsZWQobnBtKHV1aWQp KSA9IDE0LjAuMAorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LWFyZWEpKSA9IDM3LjMu NgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LWF4aXMpKSA9IDM3LjMuNgorUHJvdmlk ZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LWJhcikpID0gMzcuMy42CitQcm92aWRlczogIGJ1bmRs ZWQobnBtKHZpY3RvcnktYm94LXBsb3QpKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5w bSh2aWN0b3J5LWJydXNoLWNvbnRhaW5lcikpID0gMzcuMy42CitQcm92aWRlczogIGJ1bmRsZWQo bnBtKHZpY3RvcnktY2hhcnQpKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0 b3J5LWNvcmUpKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LWNyZWF0 ZS1jb250YWluZXIpKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LWN1 cnNvci1jb250YWluZXIpKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5 LWdyb3VwKSkgPSAzNy4zLjYKK1Byb3ZpZGVzOiAgYnVuZGxlZChucG0odmljdG9yeS1sZWdlbmQp KSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LWxpbmUpKSA9IDM3LjMu NgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0b3J5LXBpZSkpID0gMzcuMy42CitQcm92aWRl czogIGJ1bmRsZWQobnBtKHZpY3RvcnktcG9sYXItYXhpcykpID0gMzcuMy42CitQcm92aWRlczog IGJ1bmRsZWQobnBtKHZpY3Rvcnktc2NhdHRlcikpID0gMzcuMy42CitQcm92aWRlczogIGJ1bmRs ZWQobnBtKHZpY3Rvcnktc2VsZWN0aW9uLWNvbnRhaW5lcikpID0gMzcuMy42CitQcm92aWRlczog IGJ1bmRsZWQobnBtKHZpY3Rvcnktc2hhcmVkLWV2ZW50cykpID0gMzcuMy42CitQcm92aWRlczog IGJ1bmRsZWQobnBtKHZpY3Rvcnktc3RhY2spKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVk KG5wbSh2aWN0b3J5LXRvb2x0aXApKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2 aWN0b3J5LXZlbmRvcikpID0gMzcuMy42CitQcm92aWRlczogIGJ1bmRsZWQobnBtKHZpY3Rvcnkt dm9yb25vaS1jb250YWluZXIpKSA9IDM3LjMuNgorUHJvdmlkZXM6ICBidW5kbGVkKG5wbSh2aWN0 b3J5LXpvb20tY29udGFpbmVyKSkgPSAzNy4zLjYKICMjIyMjIEJ1bmRsZWQgY2FyZ28gY3JhdGVz IGxpc3QgLSBFTkQgIyMjIyMKIAotIyBCdWlsZFJlcXVpcmVzIGZvciB0aGUgbWFpbiBwYWNrYWdl OgorIyBBdHRhY2ggdGhlIGJ1aWxkcmVxdWlyZXMgdG8gdGhlIHRvcCBsZXZlbCBwYWNrYWdlOgog QnVpbGRSZXF1aXJlczogICAgbnNwci1kZXZlbAogQnVpbGRSZXF1aXJlczogICAgbnNzLWRldmVs ID49IDMuMzQKIEJ1aWxkUmVxdWlyZXM6ICAgIG9wZW5sZGFwLWNsaWVudHMKQEAgLTExNyw3ICsz MDgsNiBAQCBCdWlsZFJlcXVpcmVzOiAgICBwY3JlMi1kZXZlbAogQnVpbGRSZXF1aXJlczogICAg Y3JhY2tsaWItZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6ICAgIGpzb24tYy1kZXZlbAogQnVpbGRSZXF1 aXJlczogICAgbGlieGNyeXB0LWRldmVsCi1CdWlsZFJlcXVpcmVzOiAgICB6bGliLWRldmVsCiAl aWYgJXt3aXRoIGNsYW5nfQogQnVpbGRSZXF1aXJlczogICAgbGliYXRvbWljCiBCdWlsZFJlcXVp cmVzOiAgICBjbGFuZwpAQCAtMTQyLDM5ICszMzIsMzUgQEAgQnVpbGRSZXF1aXJlczogICAgbGli ZGItZGV2ZWwKICVlbmRpZgogJWVuZGlmCiAKLSMgRm9yIFNOTVAgbGRhcC1hZ2VudAorIyBUaGUg Zm9sbG93aW5nIGFyZSBuZWVkZWQgdG8gYnVpbGQgdGhlIHNubXAgbGRhcC1hZ2VudAogQnVpbGRS ZXF1aXJlczogICAgbmV0LXNubXAtZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6ICAgIGJ6aXAyLWRldmVs CiBCdWlsZFJlcXVpcmVzOiAgICBvcGVuc3NsLWRldmVsCi0jIEZvciBISUJQIHBhc3N3b3JkIGJy ZWFjaCBjaGVja2luZwogJWlmICV7d2l0aCBoaWJwfQogQnVpbGRSZXF1aXJlczogICAgbGliY3Vy bC1kZXZlbAogJWVuZGlmCi0jIEZvciBQQU0gcGFzc3RocnUgYXV0aCBwbHVnLWluCisjIHRoZSBm b2xsb3dpbmcgaXMgZm9yIHRoZSBwYW0gcGFzc3RocnUgYXV0aCBwbHVnLWluCiBCdWlsZFJlcXVp cmVzOiAgICBwYW0tZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6ICAgIHN5c3RlbWQtdW5pdHMKIEJ1aWxk UmVxdWlyZXM6ICAgIHN5c3RlbWQtZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6ICAgIHN5c3RlbWQtcnBt LW1hY3JvcwogJXs/c3lzdXNlcnNfcmVxdWlyZXNfY29tcGF0fQotJWlmICV7d2l0aCB1c2R0fQot QnVpbGRSZXF1aXJlczogICAgc3lzdGVtdGFwLXNkdC1kZXZlbAotJWVuZGlmCiBCdWlsZFJlcXVp cmVzOiAgICBjYXJnbwogQnVpbGRSZXF1aXJlczogICAgcnVzdAogQnVpbGRSZXF1aXJlczogICAg cGtnY29uZmlnCiBCdWlsZFJlcXVpcmVzOiAgICBwa2djb25maWcoc3lzdGVtZCkKIEJ1aWxkUmVx dWlyZXM6ICAgIHBrZ2NvbmZpZyhrcmI1KQogQnVpbGRSZXF1aXJlczogICAgcGtnY29uZmlnKGxp YnBjcmUyLTgpCi0jIEZvciBhdXRvdG9vbHMgcmVnZW5lcmF0aW9uCisjIE5lZWRlZCB0byBzdXBw b3J0IHJlZ2VuZXJhdGlvbiBvZiB0aGUgYXV0b3Rvb2wgYXJ0aWZhY3RzLgogQnVpbGRSZXF1aXJl czogICAgYXV0b2NvbmYKIEJ1aWxkUmVxdWlyZXM6ICAgIGF1dG9tYWtlCiBCdWlsZFJlcXVpcmVz OiAgICBsaWJ0b29sCiBCdWlsZFJlcXVpcmVzOiAgICBtYWtlCi0jIEZvciBkb3h5Z2VuIGRvY3Vt ZW50YXRpb24KKyMgRm9yIG91ciBkb2N1bWVudGF0aW9uCiBCdWlsZFJlcXVpcmVzOiAgICBkb3h5 Z2VuCi0jIEZvciBjbW9ja2EgdW5pdCB0ZXN0cworIyBGb3IgdGVzdHMhCiBCdWlsZFJlcXVpcmVz OiAgICBsaWJjbW9ja2EtZGV2ZWwKLSMgRm9yIGxpYjM4OQorIyBGb3IgbGliMzg5IGFuZCByZWxh dGVkIGNvbXBvbmVudHMuCiBCdWlsZFJlcXVpcmVzOiAgICBweXRob24le3B5dGhvbjNfcGtndmVy c2lvbn0tZGV2ZWwKIAogIyBGb3IgY29ja3BpdApAQCAtMTg0LDM2ICszNzAsMjkgQEAgQnVpbGRS ZXF1aXJlczogICAgL3Vzci9iaW4vbnBtCiBCdWlsZFJlcXVpcmVzOiAgICAvdXNyL2Jpbi9ub2Rl CiAlZW5kaWYKIAotIyBSdW50aW1lIHJlcXVpcmVzIGZvciB0aGUgbWFpbiBwYWNrYWdlCisjIEZv ciBhdXRvc2V0dXAgLVMgZ2l0CitCdWlsZFJlcXVpcmVzOiAgICBnaXQKKwogUmVxdWlyZXM6ICAg ICAgICAgJXtuYW1lfS1saWJzID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiBSZXF1aXJlczogICAg ICAgICBweXRob24le3B5dGhvbjNfcGtndmVyc2lvbn0tbGliMzg5ID0gJXt2ZXJzaW9ufS0le3Jl bGVhc2V9CiAKLSMgRm9yIHNlbWFuYWdlIGluIHNldHVwIHNjcmlwdHMKKyMgdGhpcyBpcyBuZWVk ZWQgZm9yIHVzaW5nIHNlbWFuYWdlIGZyb20gb3VyIHNldHVwIHNjcmlwdHMKIFJlcXVpcmVzOiAg ICAgICAgIHBvbGljeWNvcmV1dGlscy1weXRob24tdXRpbHMKIFJlcXVpcmVzOiAgICAgICAgIGxp YnNlbWFuYWdlLXB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufQotIyBOb05ld1ByaXZpbGVnZXMg c3VwcG9ydCBpbiBkaXJzcnYgc2VydmljZSB1bml0cyByZXF1aXJlcwotIyBzZWxpbnV4LXBvbGlj eSB3aXRoIGluaXRfbm5wX2RhZW1vbl9kb21haW4gZm9yIGRpcnNydl90LgotIyBTZWU6IGh0dHBz Oi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MjQ1Nzk1MQotJWlmIDAlez9y aGVsfSA9PSAxMAotUmVxdWlyZXM6ICAgICAgICAgc2VsaW51eC1wb2xpY3kgPj0gNDIuMS4yMi0x Ci0lZW5kaWYKLSVpZiAwJXs/ZmVkb3JhfSA9PSA0MwotUmVxdWlyZXM6ICAgICAgICAgc2VsaW51 eC1wb2xpY3kgPj0gNDMuNy0xCi0lZW5kaWYKLSVpZiAwJXs/ZmVkb3JhfSA9PSA0NAotUmVxdWly ZXM6ICAgICAgICAgc2VsaW51eC1wb2xpY3kgPj0gNDQuMS0xCi0lZW5kaWYKLSMgRm9yIENMSSBz Y3JpcHRzCisjIHRoZSBmb2xsb3dpbmcgYXJlIG5lZWRlZCBmb3Igc29tZSBvZiBvdXIgc2NyaXB0 cwogUmVxdWlyZXM6ICAgICAgICAgb3BlbmxkYXAtY2xpZW50cwogUmVxdWlyZXM6ICAgICAgICAg YWNsCi0jIEZvciBTU0wvVExTIHNldHVwCisjIHRoaXMgaXMgbmVlZGVkIHRvIHNldHVwIFNTTCBp ZiB5b3UgYXJlIG5vdCB1c2luZyB0aGUKKyMgYWRtaW5pc3RyYXRpb24gc2VydmVyIHBhY2thZ2UK IFJlcXVpcmVzOiAgICAgICAgIG5zcy10b29scwogJWRpcnNydl9yZXF1aXJlc19nZSBuc3MKLSMg TWFuZGF0b3J5IExEQVAgU0FTTCBtZWNoYW5pc21zCisjIHRoZXNlIGFyZSBub3QgZm91bmQgYnkg dGhlIGF1dG8tZGVwZW5kZW5jeSBtZXRob2QKKyMgdGhleSBhcmUgcmVxdWlyZWQgdG8gc3VwcG9y dCB0aGUgbWFuZGF0b3J5IExEQVAgU0FTTCBtZWNocwogUmVxdWlyZXM6ICAgICAgICAgY3lydXMt c2FzbC1nc3NhcGkKIFJlcXVpcmVzOiAgICAgICAgIGN5cnVzLXNhc2wtbWQ1CisjIFRoaXMgaXMg b3B0aW9uYWxseSBzdXBwb3J0ZWQgYnkgdXMsIGFzIHdlIHVzZSBpdCBpbiBvdXIgdGVzdHMKIFJl cXVpcmVzOiAgICAgICAgIGN5cnVzLXNhc2wtcGxhaW4KLSMgRm9yIGJhY2stbGRibQorIyB0aGlz IGlzIG5lZWRlZCBmb3IgYmFja2xkYm0KICVpZiAle3dpdGggbGliYmRiX3JvfQogUmVxdWlyZXM6 ICAgICAgICAgJXtuYW1lfS1yb2JkYi1saWJzID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiAlZWxz ZQpAQCAtMjIyLDQxICs0MDEsNDQgQEAgUmVxdWlyZXM6ICAgICAgICAgbGliZGIKICVlbmRpZgog JWVuZGlmCiBSZXF1aXJlczogICAgICAgICBsbWRiLWxpYnMKLQorIyBOZWVkZWQgYnkgbG9nY29u di5wbAorJWlmICV7d2l0aG91dCBsaWJiZGJfcm99CislaWYgJXt3aXRob3V0IGJ1bmRsZV9saWJk Yn0KK1JlcXVpcmVzOiAgICAgICAgIHBlcmwtREJfRmlsZQorJWVuZGlmCislZW5kaWYKK1JlcXVp cmVzOiAgICAgICAgIHBlcmwtQXJjaGl2ZS1UYXIKKyVpZiAwJXs/ZmVkb3JhfSA+PSAzMyB8fCAw JXs/cmhlbH0gPj0gOQorUmVxdWlyZXM6ICAgICAgICAgcGVybC1kZWJ1Z2dlcgorUmVxdWlyZXM6 ICAgICAgICAgcGVybC1zaWd0cmFwCislZW5kaWYKICMgTmVlZGVkIGZvciBwYXNzd29yZCBkaWN0 aW9uYXJ5IGNoZWNrcwogUmVxdWlyZXM6ICAgICAgICAgY3JhY2tsaWItZGljdHMKIFJlcXVpcmVz OiAgICAgICAgIGpzb24tYworIyBMb2cgY29tcHJlc3Npb24KK1JlcXVpcmVzOiAgICAgICAgIHps aWItZGV2ZWwKICMgbG9nY29udi5weSwgTUlNRSB0eXBlCiBSZXF1aXJlczogICAgICAgICBweXRo b24zLWZpbGUtbWFnaWMKICMgUGlja3MgdXAgb3VyIHN5c3RlbWQgZGVwcy4KICV7P3N5c3RlbWRf cmVxdWlyZXN9Ci0jIEVuc3VyZSBzeXN1c2VycyBhcmUgY3JlYXRlZAotJXs/c3lzdXNlcnNfcmVx dWlyZXNfY29tcGF0fQotCi0laWYgJXt3aXRoIHVzZHR9Ci0jIE9wdGlvbmFsIGVCUEYgdHJhY2Vy IGZvciB0aGUgc2hpcHBlZCBVU0RUIGJwZnRyYWNlIHNjcmlwdHMuCi0jIFVzZSBTdWdnZXN0cyBz byBpdCBpcyBub3QgaW5zdGFsbGVkIGJ5IGRlZmF1bHQgKGRlYnVnLW9ubHksIHB1bGxzIGluIGdj YykuCi1TdWdnZXN0czogICAgICAgICBicGZ0cmFjZQotJWVuZGlmCiAKLQotU291cmNlMDogICAg ICAgICAgJXtuYW1lfS0le3ZlcnNpb259LnRhci5iejIKK1NvdXJjZTA6ICAgICAgICAgIGh0dHBz Oi8vZ2l0aHViLmNvbS8zODlkcy8le25hbWV9L3JlbGVhc2VzL2Rvd25sb2FkLyV7bmFtZX0tJXt2 ZXJzaW9ufS8le25hbWV9LSV7dmVyc2lvbn0udGFyLmJ6MgogU291cmNlMjogICAgICAgICAgJXtu YW1lfS1kZXZlbC5SRUFETUUKICVpZiAle3dpdGggYnVuZGxlX2plbWFsbG9jfQogU291cmNlMzog ICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2plbWFsbG9jLyV7amVtYWxsb2NfbmFtZX0vcmVs ZWFzZXMvZG93bmxvYWQvJXtqZW1hbGxvY192ZXJ9LyV7amVtYWxsb2NfbmFtZX0tJXtqZW1hbGxv Y192ZXJ9LnRhci5iejIKLVNvdXJjZTU6ICAgICAgICAgIGplbWFsbG9jLTUuMy4wX3Rocm93X2Jh ZF9hbGxvYy5wYXRjaAorU291cmNlMTA6ICAgICAgICAgIGplbWFsbG9jLTUuMy4wX3Rocm93X2Jh ZF9hbGxvYy5wYXRjaAorJWVuZGlmCitTb3VyY2U0OiAgICAgICAgICAzODktZHMtYmFzZS5zeXN1 c2VycworJWlmICV7d2l0aCBidW5kbGVfbGliZGJ9CitTb3VyY2U1OiAgICAgICAgICBodHRwczov L2ZlZG9yYXBlb3BsZS5vcmcvZ3JvdXBzLzM4OWRzL2xpYmRiLTUuMy4yOC01OS50YXIuYnoyCiAl ZW5kaWYKLVNvdXJjZTQ6ICAgICAgICAgIGh0dHBzOi8vZmVkb3JhcGVvcGxlLm9yZy9ncm91cHMv Mzg5ZHMvbGliZGItNS4zLjI4LTU5LnRhci5iejIKIAotIyBUbyBvdmVycmlkZSB2ZW5kb3IvQ2Fy Z28ubG9jay9jb2NrcGl0X2Rpc3QgZnJvbSB0aGUgdXBzdHJlYW0gdGFyYmFsbAotIyB3aXRoIHNl cGFyYXRlbHkgdXBsb2FkZWQgc291cmNlcwotIyB1bmNvbW1lbnQgYW5kIHJlcGxhY2UgZG91Ymxl IHBlcmNlbnQgd2l0aCBhIHNpbmdsZSBvbmUKLSNTb3VyY2U2OiAgICAgICAgICB2ZW5kb3ItJSV7 dmVyc2lvbn0tMS50YXIuZ3oKLSNTb3VyY2U3OiAgICAgICAgICBDYXJnby0lJXt2ZXJzaW9ufS0x LmxvY2sKLSNTb3VyY2U4OiAgICAgICAgICBjb2NrcGl0X2Rpc3QtJSV7dmVyc2lvbn0tMS50YXIu YnoyCitTb3VyY2U2OiAgICAgICAgICB2ZW5kb3ItJXt2ZXJzaW9ufS0xLnRhci5negorU291cmNl NzogICAgICAgICAgQ2FyZ28tJXt2ZXJzaW9ufS0xLmxvY2sKK1NvdXJjZTg6ICAgICAgICAgIGNv Y2twaXRfZGlzdC0le3ZlcnNpb259LTEudGFyLmJ6MgogCiAlZGVzY3JpcHRpb24KLTM4OSBEaXJl Y3RvcnkgU2VydmVyIGlzIGFuIExEQVB2MyBjb21wbGlhbnQgc2VydmVyLiBUaGUgYmFzZSBwYWNr YWdlIGluY2x1ZGVzCiszODkgRGlyZWN0b3J5IFNlcnZlciBpcyBhbiBMREFQdjMgY29tcGxpYW50 IHNlcnZlci4gIFRoZSBiYXNlIHBhY2thZ2UgaW5jbHVkZXMKIHRoZSBMREFQIHNlcnZlciBhbmQg Y29tbWFuZCBsaW5lIHV0aWxpdGllcyBmb3Igc2VydmVyIGFkbWluaXN0cmF0aW9uLgogJWlmICV7 d2l0aCBhc2FufQogV0FSTklORyEgVGhpcyBidWlsZCBpcyBsaW5rZWQgdG8gQWRkcmVzcyBTYW5p dGlzYXRpb24gbGlicmFyaWVzLiBUaGlzIHByb2JhYmx5CkBAIC0yNjcsNyArNDQ5LDcgQEAgUGxl YXNlIHNlZSBodHRwOi8vc2VjbGlzdHMub3JnL29zcy1zZWMvMjAxNi9xMS8zNjMgZm9yIG1vcmUg aW5mb3JtYXRpb24uCiAlaWYgJXt3aXRoIGxpYmJkYl9yb30KICVwYWNrYWdlICAgICAgICByb2Jk Yi1saWJzCiBTdW1tYXJ5OiAgICAgICAgUmVhZC1vbmx5IEJlcmtlbGV5IERhdGFiYXNlIExpYnJh cnkKLUxpY2Vuc2U6ICAgICAgICBHUEwtMi4wLW9yLWxhdGVyIE9SIExHUEwtMi4xLW9yLWxhdGVy CitMaWNlbnNlOiAgICAgICAgICBHUEwtMy4wLW9yLWxhdGVyIFdJVEggR1BMLTMuMC0zODktZHMt YmFzZS1leGNlcHRpb24gQU5EIChBcGFjaGUtMi4wIE9SIEFwYWNoZS0yLjAgV0lUSCBMTFZNLWV4 Y2VwdGlvbiBPUiBNSVQpIEFORCAoQXBhY2hlLTIuMCBPUiBMR1BMLTIuMS1vci1sYXRlciBPUiBN SVQpIEFORCAoQXBhY2hlLTIuMCBPUiBNSVQpIEFORCAoQ0MtQlktNC4wIEFORCBNSVQpIEFORCAo TUlUIE9SIEFwYWNoZS0yLjApIEFORCBVbmljb2RlLTMuMCBBTkQgKE1JVCBPUiBDQzAtMS4wKSBB TkQgKE1JVCBPUiBVbmxpY2Vuc2UpIEFORCAwQlNEIEFORCBBcGFjaGUtMi4wIEFORCBCU0QtMi1D bGF1c2UgQU5EIEJTRC0zLUNsYXVzZSBBTkQgSVNDIEFORCBNSVQgQU5EIE1JVCBBTkQgSVNDIEFO RCBNUEwtMi4wIEFORCBQU0YtMi4wIEFORCBabGliCiAKICVkZXNjcmlwdGlvbiAgICByb2JkYi1s aWJzCiBUaGUgJXtuYW1lfS1yb2JkYi1saWIgcGFja2FnZSBjb250YWlucyBhIGxpYnJhcnkgZGVy aXZlZCBmcm9tIHJwbQpAQCAtMjc4LDEzICs0NjAsMTYgQEAgc29tZSBiYXNpYyBmdW5jdGlvbnMg dG8gc2VhcmNoIGFuZCByZWFkIEJlcmtlbGV5IERhdGFiYXNlIHJlY29yZHMKIAogJXBhY2thZ2Ug ICAgICAgICAgbGlicwogU3VtbWFyeTogICAgICAgICAgQ29yZSBsaWJyYXJpZXMgZm9yIDM4OSBE aXJlY3RvcnkgU2VydmVyICgle3ZhcmlhbnR9KQorUHJvdmlkZXM6ICAgICAgICAgc3ZyY29yZSA9 IDQuMS40CitPYnNvbGV0ZXM6ICAgICAgICBzdnJjb3JlIDw9IDQuMS4zCitDb25mbGljdHM6ICAg ICAgICBzdnJjb3JlCiAlZGlyc3J2X3JlcXVpcmVzX2dlIG5zcwogUmVxdWlyZXM6ICAgICAgICAg bnNwcgogUmVxdWlyZXM6ICAgICAgICAgb3BlbmxkYXAKIFJlcXVpcmVzOiAgICAgICAgIHN5c3Rl bWQtbGlicwotIyBTQVNMCisjIFB1bGwgaW4gc2FzbAogUmVxdWlyZXM6ICAgICAgICAgY3lydXMt c2FzbC1saWIKLSMgS2VyYmVyb3MKKyMgS1JCCiBSZXF1aXJlczogICAgICAgICBrcmI1LWxpYnMK ICVpZiAle3dpdGggY2xhbmd9CiBSZXF1aXJlczogICAgICAgICBsbHZtCkBAIC0zMDgsOTAgKzQ5 Myw2MCBAQCBwYWNrYWdlIHRvIGJlIGluc3RhbGxlZCB3aXRoIGp1c3QgdGhlIC1saWJzIHBhY2th Z2UgYW5kIHdpdGhvdXQgdGhlIG1haW4gcGFja2FnZQogCiAlcGFja2FnZSAgICAgICAgICBkZXZl bAogU3VtbWFyeTogICAgICAgICAgRGV2ZWxvcG1lbnQgbGlicmFyaWVzIGZvciAzODkgRGlyZWN0 b3J5IFNlcnZlciAoJXt2YXJpYW50fSkKK1Byb3ZpZGVzOiAgICAgICAgIHN2cmNvcmUtZGV2ZWwg PSA0LjEuNAorT2Jzb2xldGVzOiAgICAgICAgc3ZyY29yZS1kZXZlbCA8PSA0LjEuMworQ29uZmxp Y3RzOiAgICAgICAgc3ZyY29yZS1kZXZlbAogUmVxdWlyZXM6ICAgICAgICAgJXtuYW1lfS1saWJz ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiBSZXF1aXJlczogICAgICAgICBwa2djb25maWcKIFJl cXVpcmVzOiAgICAgICAgIG5zcHItZGV2ZWwKIFJlcXVpcmVzOiAgICAgICAgIG5zcy1kZXZlbCA+ PSAzLjM0CiBSZXF1aXJlczogICAgICAgICBvcGVubGRhcC1kZXZlbAotIyBGb3Igc3lzdGVtZCBo ZWFkZXJzCisjIHN5c3RlbWQtbGlicyBjb250YWlucyB0aGUgaGVhZGVycyBpaXJjLgogUmVxdWly ZXM6ICAgICAgICAgc3lzdGVtZC1saWJzCiAKICVkZXNjcmlwdGlvbiAgICAgIGRldmVsCiBEZXZl bG9wbWVudCBMaWJyYXJpZXMgYW5kIGhlYWRlcnMgZm9yIHRoZSAzODkgRGlyZWN0b3J5IFNlcnZl ciBiYXNlIHBhY2thZ2UuCiAKLQogJXBhY2thZ2UgICAgICAgICAgc25tcAogU3VtbWFyeTogICAg ICAgICAgU05NUCBBZ2VudCBmb3IgMzg5IERpcmVjdG9yeSBTZXJ2ZXIKIFJlcXVpcmVzOiAgICAg ICAgICV7bmFtZX0gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KIAorT2Jzb2xldGVzOiAgICAgICAg JXtuYW1lfSA8PSAxLjQuMC4wCisKICVkZXNjcmlwdGlvbiAgICAgIHNubXAKIFNOTVAgQWdlbnQg Zm9yIHRoZSAzODkgRGlyZWN0b3J5IFNlcnZlciBiYXNlIHBhY2thZ2UuCiAKLSVpZiAle3dpdGgg bG9nY29udnBsfQotJXBhY2thZ2UgICAgICAgICAgbG9nY29udi1wZXJsCi1TdW1tYXJ5OiAgICAg ICAgICBMZWdhY3kgUGVybCBsb2cgYW5hbHl6ZXIgZm9yIDM4OSBEaXJlY3RvcnkgU2VydmVyCi1S ZXF1aXJlczogICAgICAgICAle25hbWV9ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9Ci0laWYgJXt3 aXRob3V0IGxpYmJkYl9yb30KLSVpZiAle3dpdGhvdXQgYnVuZGxlX2xpYmRifQotUmVxdWlyZXM6 ICAgICAgICAgcGVybC1EQl9GaWxlCi0lZW5kaWYKLSVlbmRpZgotUmVxdWlyZXM6ICAgICAgICAg cGVybC1BcmNoaXZlLVRhcgotUmVxdWlyZXM6ICAgICAgICAgcGVybC1kZWJ1Z2dlcgotUmVxdWly ZXM6ICAgICAgICAgcGVybC1zaWd0cmFwCi1Qcm92aWRlczogICAgICAgICBkZXByZWNhdGVkKCkK LQotJWRlc2NyaXB0aW9uICAgICAgbG9nY29udi1wZXJsCi1MZWdhY3kgUGVybCBsb2cgYW5hbHl6 ZXIgKGxvZ2NvbnYucGwpIGZvciAzODkgRGlyZWN0b3J5IFNlcnZlci4KLVRoaXMgdG9vbCBpcyBk ZXByZWNhdGVkLCB1c2UgbG9nY29udi5weSBpbnN0ZWFkLgotJWVuZGlmCi0KICVpZiAle3dpdGgg YnVuZGxlX2xpYmRifQogJXBhY2thZ2UgICAgICAgICAgYmRiCiBTdW1tYXJ5OiAgICAgICAgICBC ZXJrZWxleSBEYXRhYmFzZSBiYWNrZW5kIGZvciAzODkgRGlyZWN0b3J5IFNlcnZlcgorJWRlc2Ny aXB0aW9uICAgICAgYmRiCitCZXJrZWxleSBEYXRhYmFzZSBiYWNrZW5kIGZvciAzODkgRGlyZWN0 b3J5IFNlcnZlcgorV2FybmluZyEgVGhpcyBiYWNrZW5kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Ig b2YgbG1kYiBhbmQgaXRzIHN1cHBvcnQKK21heSBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9u cy4KIAogUmVxdWlyZXM6ICAgICAgICAgJXtuYW1lfSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQot UmVxdWlyZXM6ICAgICAgICAgJXtuYW1lfS1saWJzID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiAj IEJlcmtlbGV5IERCIGRhdGFiYXNlIGxpYmRiIHdhcyBtYXJrZWQgYXMgZGVwcmVjYXRlZCBzaW5j ZSBGNDA6CiAjIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9DaGFuZ2VzLzM4OV9EaXJl Y3RvcnlfU2VydmVyXzMuMC4wCiAjIGJlY2F1c2UgbGliZGIgd2FzIG1hcmtlZCBhcyBkZXByZWNh dGVkIHNpbmNlIEYzMwogIyBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvQ2hhbmdlcy9M aWJkYl9kZXByZWNhdGVkCiBQcm92aWRlczogICAgICAgICBkZXByZWNhdGVkKCkKLQotJWRlc2Ny aXB0aW9uICAgICAgYmRiCi1CZXJrZWxleSBEYXRhYmFzZSBiYWNrZW5kIGZvciAzODkgRGlyZWN0 b3J5IFNlcnZlcgotV2FybmluZyEgVGhpcyBiYWNrZW5kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Ig b2YgbG1kYiBhbmQgaXRzIHN1cHBvcnQKLW1heSBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9u cy4KICVlbmRpZgogCisKICVwYWNrYWdlIC1uIHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1s aWIzODkKIFN1bW1hcnk6ICBBIGxpYnJhcnkgZm9yIGFjY2Vzc2luZywgdGVzdGluZywgYW5kIGNv bmZpZ3VyaW5nIHRoZSAzODkgRGlyZWN0b3J5IFNlcnZlcgogQnVpbGRBcmNoOiAgICAgICAgbm9h cmNoCiBSZXF1aXJlczogJXtuYW1lfSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQogUmVxdWlyZXM6 IG9wZW5zc2wKKyMgVGhpcyBpcyBmb3IgL3Vzci9iaW4vY19yZWhhc2ggdG9vbCwgb25seSBuZWVk ZWQgZm9yIG9wZW5zc2wgPCAxLjEuMAorUmVxdWlyZXM6IG9wZW5zc2wtcGVybAogUmVxdWlyZXM6 IGlwcm91dGUKIFJlcXVpcmVzOiBweXRob24le3B5dGhvbjNfcGtndmVyc2lvbn0tbGlic2VsaW51 eAogUmVjb21tZW5kczogYmFzaC1jb21wbGV0aW9uCiAKICVkZXNjcmlwdGlvbiAtbiBweXRob24l e3B5dGhvbjNfcGtndmVyc2lvbn0tbGliMzg5CiBUaGlzIG1vZHVsZSBjb250YWlucyB0b29scyBh bmQgbGlicmFyaWVzIGZvciBhY2Nlc3NpbmcsIHRlc3RpbmcsCi1hbmQgY29uZmlndXJpbmcgdGhl IDM4OSBEaXJlY3RvcnkgU2VydmVyLgotCi0laWYgJXt3aXRoIHJlcGxfcmVwb3J0c30KLSVwYWNr YWdlIC1uIHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1saWIzODktcmVwbC1yZXBvcnRzCi1T dW1tYXJ5OiBIVE1MIGFuZCBQTkcgcmVwb3J0IGdlbmVyYXRpb24gZm9yIDM4OSBEaXJlY3Rvcnkg U2VydmVyIHJlcGxpY2F0aW9uIG1vbml0b3JpbmcgdG9vbHMKLUJ1aWxkQXJjaDogbm9hcmNoCi1S ZXF1aXJlczogcHl0aG9uJXtweXRob24zX3BrZ3ZlcnNpb259LWxpYjM4OSA9ICV7dmVyc2lvbn0t JXtyZWxlYXNlfQotUmVxdWlyZXM6IHB5dGhvbiV7cHl0aG9uM19wa2d2ZXJzaW9ufS1wbG90bHkK LVJlcXVpcmVzOiBweXRob24le3B5dGhvbjNfcGtndmVyc2lvbn0tbWF0cGxvdGxpYgotCi0lZGVz Y3JpcHRpb24gLW4gcHl0aG9uJXtweXRob24zX3BrZ3ZlcnNpb259LWxpYjM4OS1yZXBsLXJlcG9y dHMKLUV4dGVuZGVkIHJlcG9ydGluZyBjYXBhYmlsaXRpZXMgZm9yIDM4OSBEaXJlY3RvcnkgU2Vy dmVyIHJlcGxpY2F0aW9uIGFuYWx5c2lzLgotVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGFkZGl0aW9u YWwgcmVwb3J0IGZvcm1hdHMgKEhUTUwgYW5kIFBORykgd2l0aCBpbnRlcmFjdGl2ZQotdmlzdWFs aXphdGlvbnMgYW5kIGdyYXBocyBmb3IgcmVwbGljYXRpb24gbGFnIGFuYWx5c2lzLiBUaGVzZSBm b3JtYXRzIHJlcXVpcmUKLWFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGFuZCBhcmUgb3B0aW9uYWwg LSB0aGUgYmFzZSBwYWNrYWdlIHN1cHBvcnRzIENTVgotcmVwb3J0cyB3aXRob3V0IHRoaXMgZXh0 ZW5zaW9uLgotJWVuZGlmCisgYW5kIGNvbmZpZ3VyaW5nIHRoZSAzODkgRGlyZWN0b3J5IFNlcnZl ci4KIAogJWlmICV7d2l0aCBjb2NrcGl0fQogJXBhY2thZ2UgLW4gY29ja3BpdC0zODktZHMKQEAg LTQxMyw3ICs1NjgsNyBAQCBjZCBzcmMvbGliMzg5CiAlcHlwcm9qZWN0X2J1aWxkcmVxdWlyZXMg LWcgdGVzdAogCiAlcHJlcAotJWF1dG9zZXR1cCAtcDEgLW4gJXtuYW1lfS0le3ZlcnNpb259Cisl YXV0b3NldHVwIC1TIGdpdCAtcDEgLW4gJXtuYW1lfS0le3ZlcnNpb259CiAlaWYgJXtkZWZpbmVk IFNPVVJDRTZ9CiBybSAtcmYgdmVuZG9yCiB0YXIgeHpmICV7U09VUkNFNn0KQEAgLTQyNyw3ICs1 ODIsNyBAQCBjcCAle1NPVVJDRTd9IHNyYy9DYXJnby5sb2NrCiAlZW5kaWYKIAogJWlmICV7d2l0 aCBidW5kbGVfbGliZGJ9Ci0lc2V0dXAgLXEgLW4gJXtuYW1lfS0le3ZlcnNpb259IC1UIC1EIC1i IDQKKyVzZXR1cCAtcSAtbiAle25hbWV9LSV7dmVyc2lvbn0gLVQgLUQgLWIgNQogJWVuZGlmCiAK ICVpZiAle2RlZmluZWQgU09VUkNFOH0KQEAgLTQzOCwxMCArNTkzLDE1IEBAIHRhciB4dmpmICV7 U09VUkNFOH0gLUMgc3JjL2NvY2twaXQvMzg5LWNvbnNvbGUKIGNwICV7U09VUkNFMn0gUkVBRE1F LmRldmVsCiAKICVidWlsZAorIyBXb3JrYXJvdW5kIHVudGlsIGh0dHBzOi8vZ2l0aHViLmNvbS8z ODlkcy8zODktZHMtYmFzZS9pc3N1ZXMvNjQ3NiBpcyBmaXhlZAorZXhwb3J0IENGTEFHUz0iJXtv cHRmbGFnc30gLXN0ZD1nbnUxNyIKKwogJWlmICV7d2l0aCBjbGFuZ30KIENMQU5HX0ZMQUdTPSIt LWVuYWJsZS1jbGFuZyIKICVlbmRpZgogCislez93aXRoX3RtcGZpbGVzX2Q6IFRNUEZJTEVTX0ZM QUc9Ii0td2l0aC10bXBmaWxlcy1kPSV7d2l0aF90bXBmaWxlc19kfSJ9CisKICVpZiAle3dpdGgg YXNhbn0KIEFTQU5fRkxBR1M9Ii0tZW5hYmxlLWFzYW4gLS1lbmFibGUtZGVidWciCiAlZW5kaWYK QEAgLTQ2NCwxMiArNjI0LDYgQEAgUlVTVF9GTEFHUz0iLS1lbmFibGUtcnVzdCAtLWVuYWJsZS1y dXN0LW9mZmxpbmUiCiBDT0NLUElUX0ZMQUdTPSItLWRpc2FibGUtY29ja3BpdCIKICVlbmRpZgog Ci0laWYgJXt3aXRoIHVzZHR9Ci1VU0RUX0ZMQUdTPSItLWVuYWJsZS11c2R0IgotJWVsc2UKLVVT RFRfRkxBR1M9Ii0tZGlzYWJsZS11c2R0IgotJWVuZGlmCi0KICVpZiAle3dpdGggYnVuZGxlX2pl bWFsbG9jfQogIyBPdmVycmlkZSBwYWdlIHNpemUsIGJ6ICMxNTQ1NTM5CiAjIDRLCkBAIC00OTAs NyArNjQ0LDcgQEAgVVNEVF9GTEFHUz0iLS1kaXNhYmxlLXVzZHQiCiAKICMgQnVpbGQgamVtYWxs b2MKIHB1c2hkIC4uLyV7amVtYWxsb2NfbmFtZX0tJXtqZW1hbGxvY192ZXJ9Ci1wYXRjaCAtcDEg LUYzIDwgJXtTT1VSQ0U1fQorcGF0Y2ggLXAxIC1GMyA8ICV7U09VUkNFMTB9CiAlY29uZmlndXJl IFwKICAgICAgICAgLS1saWJkaXI9JXtfbGliZGlyfS8le3BrZ25hbWV9L2xpYiBcCiAgICAgICAg IC0tYmluZGlyPSV7X2xpYmRpcn0vJXtwa2duYW1lfS9iaW4gXApAQCAtNTAzLDE2ICs2NTcsMTQg QEAgcG9wZAogJWlmICV7d2l0aCBidW5kbGVfbGliZGJ9CiBta2RpciAtcCAuLi8le2xpYmRiX2Jh c2VfdmVyc2lvbn0KIHB1c2hkIC4uLyV7bGliZGJfYmFzZV92ZXJzaW9ufQotdGFyIC14amYgJXtf dG9wZGlyfS9TT1VSQ0VTLyV7bGliZGJfZnVsbF92ZXJzaW9ufS50YXIuYnoyCit0YXIgLXhqZiAg JXtfdG9wZGlyfS9TT1VSQ0VTLyV7bGliZGJfZnVsbF92ZXJzaW9ufS50YXIuYnoyCiBtdiAle2xp YmRiX2Z1bGxfdmVyc2lvbn0gU09VUkNFUwotJWlmIDAlez9mZWRvcmF9CiBzZWQgLWkgLWUgJy9e Q0ZMQUdTPS9zLy1mbm8tc3RyaWN0LWFsaWFzaW5nLyYgLXN0ZD1nbnU5OS8nICV7X2J1aWxkZGly fS8le25hbWV9LSV7dmVyc2lvbn0vcnBtL2J1bmRsZS1saWJkYi5zcGVjLmluCi0lZW5kaWYKIHJw bWJ1aWxkICAtLWRlZmluZSAiX3RvcGRpciAkUFdEIiAtYmMgJXtfYnVpbGRkaXJ9LyV7bmFtZX0t JXt2ZXJzaW9ufS9ycG0vYnVuZGxlLWxpYmRiLnNwZWMuaW4KIHBvcGQKICVlbmRpZgogCi0jIFJl YnVpbGQgYXV0b3Rvb2xzIGFydGlmYWN0cworIyBSZWJ1aWxkIHRoZSBhdXRvdG9vbCBhcnRpZmFj dHMgbm93LgogYXV0b3JlY29uZiAtZml2CiAKICVjb25maWd1cmUgXApAQCAtNTI0LDE1ICs2NzYs MjYgQEAgYXV0b3JlY29uZiAtZml2CiAlaWYgJXt3aXRoIGJ1bmRsZV9saWJkYn0KICAgICAgICAg ICAgLS13aXRoLWJ1bmRsZS1saWJkYj0le19idWlsZGRpcn0vJXtsaWJkYl9iYXNlX3ZlcnNpb259 L0JVSUxELyV7bGliZGJfYmFzZV9kaXJ9L2Rpc3QvZGlzdC10bHMgXAogJWVuZGlmCi0gICAgICAg ICAgIC0td2l0aC1zZWxpbnV4IFwKKyAgICAgICAgICAgLS13aXRoLXNlbGludXggJFRNUEZJTEVT X0ZMQUcgXAogICAgICAgICAgICAtLXdpdGgtc3lzdGVtZCBcCi0gICAgICAgICAgICRBU0FOX0ZM QUdTICRNU0FOX0ZMQUdTICRUU0FOX0ZMQUdTICRVQlNBTl9GTEFHUyAkUlVTVF9GTEFHUyAkQ0xB TkdfRkxBR1MgJENPQ0tQSVRfRkxBR1MgJFVTRFRfRkxBR1MgXAorICAgICAgICAgICAtLXdpdGgt c3lzdGVtZHN5c3RlbXVuaXRkaXI9JXtfdW5pdGRpcn0gXAorICAgICAgICAgICAtLXdpdGgtc3lz dGVtZHN5c3RlbWNvbmZkaXI9JXtfc3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0gXAorICAgICAg ICAgICAtLXdpdGgtc3lzdGVtZGdyb3VwbmFtZT0le2dyb3VwbmFtZX0gXAorICAgICAgICAgICAt LWxpYmV4ZWNkaXI9JXtfbGliZXhlY2Rpcn0vJXtwa2duYW1lfSBcCisgICAgICAgICAgICRBU0FO X0ZMQUdTICRNU0FOX0ZMQUdTICRUU0FOX0ZMQUdTICRVQlNBTl9GTEFHUyAkUlVTVF9GTEFHUyAk Q0xBTkdfRkxBR1MgJENPQ0tQSVRfRkxBR1MgXAorJWlmIDAlez9mZWRvcmF9ID49IDM0IHx8IDAl ez9yaGVsfSA+PSA5CiAgICAgICAgICAgIC0td2l0aC1saWJsZGFwLXI9bm8gXAorJWVuZGlmCiAl aWYgJXt3aXRoIGhpYnB9Ci0gICAgICAgICAgIC0tZW5hYmxlLWhpYnAgXAorCSAgLS1lbmFibGUt aGlicCBcCiAlZW5kaWYKICAgICAgICAgICAgLS1lbmFibGUtY21vY2thCiAKKyMgQXZvaWQgIlVu a25vd24ga2V5IG5hbWUgJ1hYWCcgaW4gc2VjdGlvbiAnU2VydmljZScsIGlnbm9yaW5nLiIgd2Fy bmluZ3MgZnJvbSBzeXN0ZW1kIG9uIG9sZGVyIHJlbGVhc2VzCislaWYgMCV7P3JoZWx9ICYmIDAl ez9yaGVsfSA8IDkKKyAgc2VkIC1yIC1pICcvXihQcm90ZWN0KEhvbWV8SG9zdG5hbWV8S2VybmVs TG9ncyl8UHJpdmF0ZU1vdW50cyk9L2QnICV7X2J1aWxkZGlyfS8le25hbWV9LSV7dmVyc2lvbn0v d3JhcHBlcnMvKi5zZXJ2aWNlLmluCislZW5kaWYKKwogIyBsaWIzODkKIHB1c2hkIC4vc3JjL2xp YjM4OQogJXtweXRob24zfSB2YWxpZGF0ZV92ZXJzaW9uLnB5IC0tdXBkYXRlCkBAIC01NDAsNyAr NzAzLDcgQEAgcHVzaGQgLi9zcmMvbGliMzg5CiBwb3BkCiAKICMgR2VuZXJhdGUgc3ltYm9saWMg aW5mbyBmb3IgZGVidWdnZXJzCi1leHBvcnQgWENGTEFHUz0iJXtvcHRmbGFnc30iCitleHBvcnQg WENGTEFHUz0kUlBNX09QVF9GTEFHUwogCiAlbWFrZV9idWlsZAogCkBAIC01NjMsMTYgKzcyNiwx MSBAQCBzZWQgLWkgLWUgIi9saWJiYWNrLWJkYi9kIiBwbHVnaW5zLmxpc3QKICVlbmRpZgogCiAj IENvcHkgaW4gb3VyIGRvY3MgZnJvbSBkb3h5Z2VuLgotY3AgLXIgJXtfYnVpbGRkaXJ9LyV7bmFt ZX0tJXt2ZXJzaW9ufS9tYW4vbWFuMyAle2J1aWxkcm9vdH0vJXtfbWFuZGlyfS9tYW4zCitjcCAt ciAle19idWlsZGRpcn0vJXtuYW1lfS0le3ZlcnNpb259L21hbi9tYW4zICRSUE1fQlVJTERfUk9P VC8le19tYW5kaXJ9L21hbjMKIAogIyBsaWIzODkKIHB1c2hkIHNyYy9saWIzODkKICVweXByb2pl Y3RfaW5zdGFsbAotJWlmIDAlez9mZWRvcmF9IDw9IDQxIHx8ICgwJXs/cmhlbH0gJiYgMCV7P3Jo ZWx9IDw9IDEwKQotZm9yIGNsaXRvb2wgaW4gZHNjb25mIGRzY3JlYXRlIGRzY3RsIGRzaWRtIG9w ZW5sZGFwX3RvX2RzOyBkbwotICAgIG12ICV7YnVpbGRyb290fSV7X2JpbmRpcn0vJGNsaXRvb2wg JXtidWlsZHJvb3R9JXtfc2JpbmRpcn0vCi1kb25lCi0lZW5kaWYKICVweXByb2plY3Rfc2F2ZV9m aWxlcyAtbCBsaWIzODkKIHBvcGQKIApAQCAtNTgzLDI1ICs3NDEsMjYgQEAgZG8KICAgICBpbnN0 YWxsIC1wIC1tIDA2NDQgLUQgLXQgJyV7YnVpbGRyb290fSV7YmFzaF9jb21wbGV0aW9uc19kaXJ9 JyAiJHtjbGl0b29sfSIKIGRvbmUKIAotbWtkaXIgLXAgJXtidWlsZHJvb3R9L3Zhci9sb2cvJXtw a2duYW1lfQotbWtkaXIgLXAgJXtidWlsZHJvb3R9L3Zhci9saWIvJXtwa2duYW1lfQotbWtkaXIg LXAgJXtidWlsZHJvb3R9L3Zhci9sb2NrLyV7cGtnbmFtZX0gXAotICAgICYmIGNobW9kIDc3MCAl e2J1aWxkcm9vdH0vdmFyL2xvY2svJXtwa2duYW1lfQorbWtkaXIgLXAgJFJQTV9CVUlMRF9ST09U L3Zhci9sb2cvJXtwa2duYW1lfQorbWtkaXIgLXAgJFJQTV9CVUlMRF9ST09UL3Zhci9saWIvJXtw a2duYW1lfQorbWtkaXIgLXAgJFJQTV9CVUlMRF9ST09UL3Zhci9sb2NrLyV7cGtnbmFtZX0gXAor ICAgICYmIGNobW9kIDc3MCAkUlBNX0JVSUxEX1JPT1QvdmFyL2xvY2svJXtwa2duYW1lfQogCi0j IEZvciBzeXN0ZW1kCi1ta2RpciAtcCAle2J1aWxkcm9vdH0le19zeXNjb25mZGlyfS9zeXN0ZW1k L3N5c3RlbS8le2dyb3VwbmFtZX0ud2FudHMKKyMgZm9yIHN5c3RlbWQKK21rZGlyIC1wICRSUE1f QlVJTERfUk9PVCV7X3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtLyV7Z3JvdXBuYW1lfS53YW50 cworaW5zdGFsbCAtcCAtRCAtbSAwNjQ0ICV7U09VUkNFNH0gJXtidWlsZHJvb3R9JXtfc3lzdXNl cnNkaXJ9LzM4OS1kcy1iYXNlLmNvbmYKIAotIyBSZW1vdmUgbGlidG9vbCBhbmQgc3RhdGljIGxp YnMKLXJtIC1mICV7YnVpbGRyb290fSV7X2xpYmRpcn0vJXtwa2duYW1lfS8qLmEKLXJtIC1mICV7 YnVpbGRyb290fSV7X2xpYmRpcn0vJXtwa2duYW1lfS8qLmxhCi1ybSAtZiAle2J1aWxkcm9vdH0l e19saWJkaXJ9LyV7cGtnbmFtZX0vcGx1Z2lucy8qLmEKLXJtIC1mICV7YnVpbGRyb290fSV7X2xp YmRpcn0vJXtwa2duYW1lfS9wbHVnaW5zLyoubGEKLXJtIC1mICV7YnVpbGRyb290fSV7X2xpYmRp cn0vbGlic3ZyY29yZS5hCi1ybSAtZiAle2J1aWxkcm9vdH0le19saWJkaXJ9L2xpYnN2cmNvcmUu bGEKKyNyZW1vdmUgbGlidG9vbCBhbmQgc3RhdGljIGxpYnMKK3JtIC1mICRSUE1fQlVJTERfUk9P VCV7X2xpYmRpcn0vJXtwa2duYW1lfS8qLmEKK3JtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRp cn0vJXtwa2duYW1lfS8qLmxhCitybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LyV7cGtn bmFtZX0vcGx1Z2lucy8qLmEKK3JtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vJXtwa2du YW1lfS9wbHVnaW5zLyoubGEKK3JtIC1mICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vbGlic3Zy Y29yZS5hCitybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L2xpYnN2cmNvcmUubGEKIAog JWlmICV7d2l0aCBidW5kbGVfamVtYWxsb2N9CiBwdXNoZCAuLi8le2plbWFsbG9jX25hbWV9LSV7 amVtYWxsb2NfdmVyfQotbWFrZSBERVNURElSPSIle2J1aWxkcm9vdH0iIGluc3RhbGxfbGliIGlu c3RhbGxfYmluCittYWtlIERFU1RESVI9IiRSUE1fQlVJTERfUk9PVCIgaW5zdGFsbF9saWIgaW5z dGFsbF9iaW4KIGNwIC1wYSBDT1BZSU5HIC4uLyV7bmFtZX0tJXt2ZXJzaW9ufS9DT1BZSU5HLmpl bWFsbG9jCiBjcCAtcGEgUkVBRE1FIC4uLyV7bmFtZX0tJXt2ZXJzaW9ufS9SRUFETUUuamVtYWxs b2MKIHBvcGQKQEAgLTYxNCw3ICs3NzMsNyBAQCBsaWJkYmRlc3RkaXI9JFBXRC8uLi8le25hbWV9 LSV7dmVyc2lvbn0KIGNwIC1wYSAkbGliZGJidWlsZGRpci9MSUNFTlNFICRsaWJkYmRlc3RkaXIv TElDRU5TRS5saWJkYgogY3AgLXBhICRsaWJkYmJ1aWxkZGlyL1JFQURNRSAkbGliZGJkZXN0ZGly L1JFQURNRS5saWJkYgogY3AgLXBhICRsaWJkYmJ1aWxkZGlyL2xncGwtMi4xLnR4dCAkbGliZGJk ZXN0ZGlyL2xncGwtMi4xLnR4dC5saWJkYgotY3AgLXBhICRsaWJkYmJ1aWxkZGlyL2Rpc3QvZGlz dC10bHMvLmxpYnMvJXtsaWJkYl9idW5kbGVfbmFtZX0gJXtidWlsZHJvb3R9JXtfbGliZGlyfS8l e3BrZ25hbWV9LyV7bGliZGJfYnVuZGxlX25hbWV9CitjcCAtcGEgJGxpYmRiYnVpbGRkaXIvZGlz dC9kaXN0LXRscy8ubGlicy8le2xpYmRiX2J1bmRsZV9uYW1lfSAkUlBNX0JVSUxEX1JPT1Qle19s aWJkaXJ9LyV7cGtnbmFtZX0vJXtsaWJkYl9idW5kbGVfbmFtZX0KIHBvcGQKICVlbmRpZgogCkBA IC02MzUsMTIgKzc5NCwxMiBAQCBwb3BkCiAlZW5kaWYKIAogJWNoZWNrCi0jIFJ1biBjbW9ja2Eg dW5pdCB0ZXN0cworIyBUaGlzIGNoZWNrcyB0aGUgY29kZSwgaWYgaXQgZmFpbHMgaXQgcHJpbnRz IHdoeSwgdGhlbiByZS1yYWlzZXMgdGhlIGZhaWwgdG8gc2hvcnRjaXJjdWl0IHRoZSBycG0gYnVp bGQuCiAlaWYgJXt3aXRoIHRzYW59CiBleHBvcnQgVFNBTl9PUFRJT05TPXByaW50X3N0YWNrdHJh Y2U9MTpzZWNvbmRfZGVhZGxvY2tfc3RhY2s9MTpoaXN0b3J5X3NpemU9NwogJWVuZGlmCiAlaWYg JXt3aXRob3V0IGFzYW59ICYmICV7d2l0aG91dCBtc2FufQotaWYgISBtYWtlIERFU1RESVI9IiV7 YnVpbGRyb290fSIgY2hlY2s7IHRoZW4gY2F0IC4vdGVzdC1zdWl0ZS5sb2cgJiYgZmFsc2U7IGZp CitpZiAhIG1ha2UgREVTVERJUj0iJFJQTV9CVUlMRF9ST09UIiBjaGVjazsgdGhlbiBjYXQgLi90 ZXN0LXN1aXRlLmxvZyAmJiBmYWxzZTsgZmkKICVlbmRpZgogCiAjIENoZWNrIGltcG9ydCBmb3Ig bGliMzg5IG1vZHVsZXMKQEAgLTY0OSwxNyArODA4LDE5IEBAIGlmICEgbWFrZSBERVNURElSPSIl e2J1aWxkcm9vdH0iIGNoZWNrOyB0aGVuIGNhdCAuL3Rlc3Qtc3VpdGUubG9nICYmIGZhbHNlOyBm aQogJXBvc3QKIGlmIFsgLW4gIiRERUJVR1BPU1RUUkFOUyIgXSA7IHRoZW4KICAgICBvdXRwdXQ9 JERFQlVHUE9TVFRSQU5TCisgICAgb3V0cHV0Mj0ke0RFQlVHUE9TVFRSQU5TfS51cGdyYWRlCiBl bHNlCiAgICAgb3V0cHV0PS9kZXYvbnVsbAorICAgIG91dHB1dDI9L2Rldi9udWxsCiBmaQogCi0j IFJlbG9hZCB0byBwaWNrIHVwIGFueSBjaGFuZ2VzIHRvIHN5c3RlbWQgZmlsZXMKKyMgcmVsb2Fk IHRvIHBpY2sgdXAgYW55IGNoYW5nZXMgdG8gc3lzdGVtZCBmaWxlcwogL2Jpbi9zeXN0ZW1jdGwg ZGFlbW9uLXJlbG9hZCA+JG91dHB1dCAyPiYxIHx8IDoKIAotIyBSZWxvYWQgc3lzY3RsIGJlZm9y ZSByZXN0YXJ0aW5nIGluc3RhbmNlcwotc3lzY3RsIC0tc3lzdGVtICY+ICIkb3V0cHV0IjsgdHJ1 ZQorIyBSZWxvYWQgb3VyIHN5c2N0bCBiZWZvcmUgd2UgcmVzdGFydCAoaWYgd2UgY2FuKQorc3lz Y3RsIC0tc3lzdGVtICY+ICRvdXRwdXQ7IHRydWUKIAotIyBHYXRoZXIgcnVubmluZyBpbnN0YW5j ZXMsIHN0b3AgYW5kIHJlc3RhcnQgdGhlbQorIyBHYXRoZXIgcnVubmluZyBpbnN0YW5jZXMsIHN0 b3AgdGhlbSwgcnVuIGluZGV4LWNoZWNrLCB0aGVuIHJlc3RhcnQKIGluc3RiYXNlPSIle19zeXNj b25mZGlyfS8le3BrZ25hbWV9IgogaW5zdGFuY2VzPSIiCiBuaW5zdD0wCkBAIC02NzAsNiArODMx LDcgQEAgZm9yIGRpciBpbiAiJGluc3RiYXNlIi9zbGFwZC0qIDsgZG8KICAgICBjYXNlICIkZGly IiBpbiAqLnJlbW92ZWQpIGNvbnRpbnVlIDs7IGVzYWMKICAgICBiYXNlbmFtZT0kKGJhc2VuYW1l ICIkZGlyIikKICAgICBpbnN0PSIle3BrZ25hbWV9QCR7YmFzZW5hbWUjc2xhcGQtfSIKKyAgICBp bnN0X25hbWU9IiR7YmFzZW5hbWUjc2xhcGQtfSIKICAgICBlY2hvICJmb3VuZCBpbnN0YW5jZSAk aW5zdCAtIGdldHRpbmcgc3RhdHVzIiA+PiAiJG91dHB1dCIgMj4mMSB8fCA6CiAgICAgaWYgL2Jp bi9zeXN0ZW1jdGwgLXEgaXMtYWN0aXZlICIkaW5zdCIgOyB0aGVuCiAgICAgICAgZWNobyAiaW5z dGFuY2UgJGluc3QgaXMgcnVubmluZyAtIHN0b3BwaW5nIGZvciB1cGdyYWRlIiA+PiAiJG91dHB1 dCIgMj4mMSB8fCA6CkBAIC03MTIsNyArODc0LDYgQEAgZmkKICVwb3N0dW4gc25tcAogJXN5c3Rl bWRfcG9zdHVuX3dpdGhfcmVzdGFydCAle3BrZ25hbWV9LXNubXAuc2VydmljZQogCi0KICVmaWxl cyAtZiBwbHVnaW5zLmxpc3QKICVpZiAle3dpdGggYnVuZGxlX2plbWFsbG9jfQogJWRvYyBMSUNF TlNFIExJQ0VOU0UuR1BMdjMrIExJQ0VOU0Uub3BlbnNzbCBSRUFETUUuamVtYWxsb2MKQEAgLTcy NSw3ICs4ODYsNyBAQCBmaQogJWNvbmZpZyhub3JlcGxhY2UpJXtfc3lzY29uZmRpcn0vJXtwa2du YW1lfS9zY2hlbWEvKi5sZGlmCiAlZGlyICV7X3N5c2NvbmZkaXJ9LyV7cGtnbmFtZX0vY29uZmln CiAlZGlyICV7X3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtLyV7Z3JvdXBuYW1lfS53YW50cwot JXtfc3lzdXNlcnNkaXJ9LyV7bmFtZX0uY29uZgorJXtfc3lzdXNlcnNkaXJ9LzM4OS1kcy1iYXNl LmNvbmYKICVjb25maWcobm9yZXBsYWNlKSV7X3N5c2NvbmZkaXJ9LyV7cGtnbmFtZX0vY29uZmln L3NsYXBkLWNvbGxhdGlvbnMuY29uZgogJWNvbmZpZyhub3JlcGxhY2UpJXtfc3lzY29uZmRpcn0v JXtwa2duYW1lfS9jb25maWcvY2VydG1hcC5jb25mCiAle19kYXRhZGlyfS8le3BrZ25hbWV9CkBA IC03NDAsNiArOTAxLDggQEAgZmkKICV7X21hbmRpcn0vbWFuMS9kcy1sb2dwaXBlLnB5LjEuZ3oK ICV7X2JpbmRpcn0vbGRjbHQKICV7X21hbmRpcn0vbWFuMS9sZGNsdC4xLmd6Cisle19iaW5kaXJ9 L2xvZ2NvbnYucGwKKyV7X21hbmRpcn0vbWFuMS9sb2djb252LnBsLjEuZ3oKICV7X2JpbmRpcn0v bG9nY29udi5weQogJXtfbWFuZGlyfS9tYW4xL2xvZ2NvbnYucHkuMS5negogJXtfYmluZGlyfS9w d2RoYXNoCkBAIC03NTcsNiArOTIwLDggQEAgZmkKICV7X21hbmRpcn0vbWFuNS9kaXJzcnYuc3lz dGVtZC41Lmd6CiAle19saWJkaXJ9LyV7cGtnbmFtZX0vcHl0aG9uCiAlZGlyICV7X2xpYmRpcn0v JXtwa2duYW1lfS9wbHVnaW5zCisjIFRoaXMgaGFzIHRvIGJlIGhhcmRjb2RlZCB0byAvbGliIC0g JGxpYmRpciBjaGFuZ2VzIGJldHdlZW4gbGliL2xpYjY0LCBidXQKKyMgc3lzY3RsLmQgaXMgYWx3 YXlzIGluIC9saWIuCiAle19wcmVmaXh9L2xpYi9zeXNjdGwuZC8qCiAlZGlyICV7X2xvY2Fsc3Rh dGVkaXJ9L2xpYi8le3BrZ25hbWV9CiAlZGlyICV7X2xvY2Fsc3RhdGVkaXJ9L2xvZy8le3BrZ25h bWV9CkBAIC03NjQsOCArOTI5LDYgQEAgZmkKICVleGNsdWRlICV7X3NiaW5kaXJ9L2xkYXAtYWdl bnQqCiAlZXhjbHVkZSAle19tYW5kaXJ9L21hbjEvbGRhcC1hZ2VudC4xLmd6CiAlZXhjbHVkZSAl e191bml0ZGlyfS8le3BrZ25hbWV9LXNubXAuc2VydmljZQotJWV4Y2x1ZGUgJXtfYmluZGlyfS9s b2djb252LnBsCi0lZXhjbHVkZSAle19tYW5kaXJ9L21hbjEvbG9nY29udi5wbC4xLmd6CiAlaWYg JXt3aXRoIGJ1bmRsZV9qZW1hbGxvY30KICV7X2xpYmRpcn0vJXtwa2duYW1lfS9saWIvCiAle19s aWJkaXJ9LyV7cGtnbmFtZX0vYmluLwpAQCAtODIyLDE5ICs5ODUsMTEgQEAgZmkKICVkb2Mgc3Jj L2xpYjM4OS9SRUFETUUubWQKICVsaWNlbnNlIExJQ0VOU0UgTElDRU5TRS5HUEx2MysKICMgQmlu YXJpZXMKLSVpZiAwJXs/ZmVkb3JhfSA+PSA0MiB8fCAwJXs/cmhlbH0gPj0gMTEKICV7X2JpbmRp cn0vZHNjb25mCiAle19iaW5kaXJ9L2RzY3JlYXRlCiAle19iaW5kaXJ9L2RzY3RsCiAle19iaW5k aXJ9L2RzaWRtCiAle19iaW5kaXJ9L29wZW5sZGFwX3RvX2RzCi0lZWxzZQotJXtfc2JpbmRpcn0v ZHNjb25mCi0le19zYmluZGlyfS9kc2NyZWF0ZQotJXtfc2JpbmRpcn0vZHNjdGwKLSV7X3NiaW5k aXJ9L2RzaWRtCi0le19zYmluZGlyfS9vcGVubGRhcF90b19kcwotJWVuZGlmCiAle19saWJleGVj ZGlyfS8le3BrZ25hbWV9L2RzY29udGFpbmVyCiAjIE1hbiBwYWdlcwogJXtfbWFuZGlyfS9tYW44 L2RzY29uZi44Lmd6CkBAIC04NDksMTcgKzEwMDQsNiBAQCBmaQogJXtiYXNoX2NvbXBsZXRpb25z X2Rpcn0vZHNjcmVhdGUKICV7YmFzaF9jb21wbGV0aW9uc19kaXJ9L2RzaWRtCiAKLSVpZiAle3dp dGggbG9nY29udnBsfQotJWZpbGVzIGxvZ2NvbnYtcGVybAotJXtfYmluZGlyfS9sb2djb252LnBs Ci0le19tYW5kaXJ9L21hbjEvbG9nY29udi5wbC4xLmd6Ci0lZW5kaWYKLQotJWlmICV7d2l0aCBy ZXBsX3JlcG9ydHN9Ci0lZmlsZXMgLW4gcHl0aG9uJXtweXRob24zX3BrZ3ZlcnNpb259LWxpYjM4 OS1yZXBsLXJlcG9ydHMKLSMgTm8gZmlsZXMgbmVlZGVkIGFzIHRoaXMgaXMganVzdCBhIG1ldGEt cGFja2FnZSBmb3IgZGVwZW5kZW5jaWVzCi0lZW5kaWYKLQogJWlmICV7d2l0aCBjb2NrcGl0fQog JWZpbGVzIC1uIGNvY2twaXQtMzg5LWRzIC1mIGNvY2twaXQubGlzdAogJXtfZGF0YXJvb3RkaXJ9 L21ldGFpbmZvLzM4OS1jb25zb2xlL29yZy5wb3J0Mzg5LmNvY2twaXRfY29uc29sZS5tZXRhaW5m by54bWwKCmRpZmYgLS1naXQgYS9SRUFETUUucGFja2l0IGIvUkVBRE1FLnBhY2tpdApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgxNjgwMy4uMDAwMDAwMAotLS0gYS9SRUFETUUucGFj a2l0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1UaGlzIHJlcG9zaXRvcnkgaXMgbWFp bnRhaW5lZCBieSBwYWNraXQuCi1odHRwczovL3BhY2tpdC5kZXYvCi1UaGUgZmlsZSB3YXMgZ2Vu ZXJhdGVkIHVzaW5nIHBhY2tpdCAxLjE2LjIuCg==